name: CI on: push: branches: [main] paths: - 'src/**' - 'src-tauri/**' pull_request: paths: - 'src/**' - 'src-tauri/**' workflow_dispatch: concurrency: group: ci-${{ github.ref }} cancel-in-progress: true jobs: check: # windows-latest to match the release target — the ML crates (ort, candle) # and the NSIS bundle only ever ship from Windows. runs-on: windows-latest env: GITEA_STATUS_TOKEN: ${{ secrets.GITEA_STATUS_TOKEN }} steps: - name: Report pending status to Gitea if: github.event_name != 'pull_request' && env.GITEA_STATUS_TOKEN != '' continue-on-error: true shell: pwsh env: GITHUB_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} run: | $headers = @{ Authorization = "token $env:GITEA_STATUS_TOKEN" Accept = "application/json" } $body = @{ state = "pending" context = "github/actions/ci" description = "GitHub Actions CI is running" target_url = $env:GITHUB_RUN_URL } | ConvertTo-Json Invoke-RestMethod ` -Method Post ` -Uri "https://git.jezz.wtf/api/v1/repos/JezzWTF/phokus/statuses/$env:GITHUB_SHA" ` -Headers $headers ` -ContentType "application/json" ` -Body $body - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 with: version: 11 - uses: actions/setup-node@v4 with: node-version: 22 cache: pnpm - name: Install frontend dependencies run: pnpm install --frozen-lockfile # tsc + vite build; also produces dist/ which tauri's build script expects - name: Type-check and build frontend run: pnpm build:vite - name: Install Rust stable uses: dtolnay/rust-toolchain@stable with: components: clippy, rustfmt - uses: Swatinem/rust-cache@v2 with: workspaces: src-tauri - name: Rustfmt working-directory: src-tauri run: cargo fmt --check # --no-default-features: default enables candle-cuda for the main dev # machine; CI runners have no CUDA toolkit and must build CPU-only. - name: Clippy working-directory: src-tauri run: cargo clippy --all-targets --locked --no-default-features -- -D warnings - name: Report final status to Gitea if: always() && github.event_name != 'pull_request' && env.GITEA_STATUS_TOKEN != '' continue-on-error: true shell: pwsh env: GITHUB_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} JOB_STATUS: ${{ job.status }} run: | $state = switch ($env:JOB_STATUS) { "success" { "success" } "failure" { "failure" } default { "error" } } $headers = @{ Authorization = "token $env:GITEA_STATUS_TOKEN" Accept = "application/json" } $body = @{ state = $state context = "github/actions/ci" description = "GitHub Actions CI finished: $env:JOB_STATUS" target_url = $env:GITHUB_RUN_URL } | ConvertTo-Json Invoke-RestMethod ` -Method Post ` -Uri "https://git.jezz.wtf/api/v1/repos/JezzWTF/phokus/statuses/$env:GITHUB_SHA" ` -Headers $headers ` -ContentType "application/json" ` -Body $body