ci: speed up validation pipelines

Run affected CI checks in parallel and skip unrelated backend or frontend work while retaining workflow lint.

Start release binary builds after release metadata is available, while keeping image assembly, packaging, and publication gated by quality checks.

Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
Zyy
2026-07-16 16:07:55 +08:00
co-authored by Codex
parent 73c0ecdc4c
commit 9e57f78bab
3 changed files with 28 additions and 4 deletions
+12
View File
@@ -12,12 +12,23 @@ on:
required: false
default: false
type: boolean
run_backend:
description: Run backend quality checks
required: false
default: true
type: boolean
run_frontend:
description: Run frontend quality checks
required: false
default: true
type: boolean
permissions:
contents: read
jobs:
backend:
if: inputs.run_backend
runs-on: ubuntu-latest
timeout-minutes: 30
env:
@@ -77,6 +88,7 @@ jobs:
run: cargo test --test main --locked
frontend:
if: inputs.run_frontend
runs-on: ubuntu-latest
timeout-minutes: 15
env:
+14 -2
View File
@@ -20,6 +20,8 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 5
outputs:
backend: ${{ steps.filter.outputs.backend }}
frontend: ${{ steps.filter.outputs.frontend }}
container: ${{ steps.filter.outputs.container }}
steps:
- name: Checkout
@@ -28,11 +30,18 @@ jobs:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
fetch-depth: 0
- name: Detect container changes
- name: Detect affected checks
id: filter
uses: dorny/paths-filter@7b450fff21473bca461d4b92ce414b9d0420d706 # v4.0.2
with:
filters: |
backend:
- 'backend/**'
- 'release/version.yaml'
- '.github/workflows/**'
frontend:
- 'frontend/**'
- '.github/workflows/**'
container:
- 'backend/**'
- 'frontend/**'
@@ -43,12 +52,15 @@ jobs:
- '.github/workflows/ci.yml'
quality:
needs: changes
uses: ./.github/workflows/_quality.yml
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
run_backend: ${{ needs.changes.outputs.backend == 'true' }}
run_frontend: ${{ needs.changes.outputs.frontend == 'true' }}
container:
needs: [changes, quality]
needs: changes
if: needs.changes.outputs.container == 'true'
permissions:
contents: read
+2 -2
View File
@@ -165,7 +165,7 @@ jobs:
build-docker-binary:
name: build-docker-binary (${{ matrix.os }}-${{ matrix.arch }})
needs: [release-info, quality]
needs: release-info
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.release-info.outputs.docker_matrix) }}
@@ -225,7 +225,7 @@ jobs:
build-binary:
name: build-binary (${{ matrix.os }}-${{ matrix.arch }})
needs: [release-info, quality]
needs: release-info
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.release-info.outputs.non_docker_matrix) }}