name: Release on: push: tags: - 'v*' env: CARGO_TERM_COLOR: always RUST_BACKTRACE: 1 jobs: build-server: name: Build Server Binary runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Rust stable uses: dtolnay/rust-toolchain@stable - name: Cache Cargo uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-release-${{ hashFiles('**/Cargo.lock') }} restore-keys: ${{ runner.os }}-cargo-release- - name: Build release binary run: cargo build --release -p eifeldc-server - name: Upload server binary uses: actions/upload-artifact@v4 with: name: eifeldc-server-linux-amd64 path: target/release/eifeldc-server build-frontend: name: Build Frontend runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node uses: actions/setup-node@v4 with: node-version: 20 cache: npm cache-dependency-path: client/src-ui/package-lock.json - name: Install dependencies run: cd client/src-ui && npm ci - name: Build run: cd client/src-ui && npm run build - name: Upload frontend dist uses: actions/upload-artifact@v4 with: name: eifeldc-frontend path: client/src-ui/dist docker-push: name: Docker Push runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Docker meta id: meta uses: docker/metadata-action@v5 with: images: | ghcr.io/${{ github.repository }}/server tags: | type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=sha - name: Login to GHCR uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and push uses: docker/build-push-action@v5 with: context: . file: ./Dockerfile push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max build-tauri: name: Build Tauri (${{ matrix.platform }}) strategy: fail-fast: false matrix: include: - platform: linux runner: ubuntu-latest - platform: macos runner: macos-latest - platform: windows runner: windows-latest runs-on: ${{ matrix.runner }} steps: - uses: actions/checkout@v4 - name: Install Rust stable uses: dtolnay/rust-toolchain@stable - name: Install system dependencies (Linux) if: matrix.platform == 'linux' run: | sudo apt-get update sudo apt-get install -y libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev libssl-dev - name: Setup Node uses: actions/setup-node@v4 with: node-version: 20 cache: npm cache-dependency-path: client/src-ui/package-lock.json - name: Install frontend deps run: cd client/src-ui && npm ci - name: Build Tauri uses: tauri-apps/tauri-action@v0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tagName: ${{ github.ref_name }} releaseName: "EifelDC ${{ github.ref_name }}" releaseBody: "See [CHANGELOG.md](CHANGELOG.md) for details." releaseDraft: true create-release: name: Create GitHub Release runs-on: ubuntu-latest needs: [build-server, build-frontend, docker-push] steps: - uses: actions/checkout@v4 - name: Download server binary uses: actions/download-artifact@v4 with: name: eifeldc-server-linux-amd64 path: release-assets - name: Download frontend dist uses: actions/download-artifact@v4 with: name: eifeldc-frontend path: release-assets/frontend - name: Create release archive run: | cd release-assets tar czf eifeldc-server-linux-amd64.tar.gz eifeldc-server cd frontend tar czf ../eifeldc-frontend.tar.gz . cd .. - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: tag_name: ${{ github.ref_name }} draft: true generate_release_notes: true files: | release-assets/eifeldc-server-linux-amd64.tar.gz release-assets/eifeldc-frontend.tar.gz