name: CI on: push: branches: [main, develop] pull_request: branches: [main] env: CARGO_TERM_COLOR: always RUST_BACKTRACE: 1 jobs: fmt: name: Rust Format runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Rust stable uses: dtolnay/rust-toolchain@stable with: components: rustfmt - name: Check formatting run: cargo fmt --all -- --check clippy: name: Clippy runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Rust stable uses: dtolnay/rust-toolchain@stable with: components: clippy - name: Cache Cargo uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-clippy-${{ hashFiles('**/Cargo.lock') }} restore-keys: ${{ runner.os }}-cargo-clippy- - name: Clippy (server) run: cargo clippy -p eifeldc-server -- -D warnings - name: Clippy (bot-sdk) run: cargo clippy -p eifeldc-bot-sdk -- -D warnings test-server: name: Test Server 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-server-${{ hashFiles('**/Cargo.lock') }} restore-keys: ${{ runner.os }}-cargo-server- - name: Test (server) run: cargo test -p eifeldc-server - name: Test (bot-sdk) run: cargo test -p eifeldc-bot-sdk check-frontend: name: Frontend Check runs-on: ubuntu-latest defaults: run: working-directory: client/src-ui 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: npm ci - name: Build run: npm run build check-client-tauri: name: Tauri Client Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Rust stable uses: dtolnay/rust-toolchain@stable - name: Install system dependencies 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: Cache Cargo uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-client-${{ hashFiles('**/Cargo.lock') }} restore-keys: ${{ runner.os }}-cargo-client- - name: Cargo check (client) run: cargo check -p eifeldc-client build-docker: name: Docker Build runs-on: ubuntu-latest needs: [test-server, check-frontend] if: github.ref == 'refs/heads/main' steps: - uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build Docker image uses: docker/build-push-action@v5 with: context: . file: ./Dockerfile push: false tags: eifeldc:latest cache-from: type=gha cache-to: type=gha,mode=max build-tauri-linux: name: Build Tauri (Linux) runs-on: ubuntu-latest needs: [check-client-tauri, check-frontend] if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/') steps: - uses: actions/checkout@v4 - name: Install Rust stable uses: dtolnay/rust-toolchain@stable - name: Install system dependencies 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: npm ci working-directory: client/src-ui - name: Build Tauri (Linux) uses: tauri-apps/tauri-action@v0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: projectPath: client tagName: v__VERSION__ releaseName: "EifelDC v__VERSION__" releaseBody: "EifelDC Release" releaseDraft: true - name: Upload Linux .deb uses: actions/upload-artifact@v4 with: name: EifelDC-linux-deb path: client/src-tauri/target/release/bundle/deb/*.deb - name: Upload Linux .AppImage uses: actions/upload-artifact@v4 with: name: EifelDC-linux-appimage path: client/src-tauri/target/release/bundle/appimage/*.AppImage