From a9264e9e606ba6759eb90fabb4fc50ae2bee8d4a Mon Sep 17 00:00:00 2001 From: Gaubee Date: Mon, 22 Dec 2025 20:31:51 +0800 Subject: [PATCH 1/4] ci: separate fast/standard into independent paths MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ci-fast → checks-fast (self-hosted) - ci-standard → checks-standard (ubuntu-latest) Two independent paths, no cross-dependency. --- .github/workflows/ci.yml | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f8c1bb1e0..aeacc9fc6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,7 +8,7 @@ env: NODE_VERSION: '24' jobs: - # ==================== Self-hosted 快速路径 (无 action 下载) ==================== + # ==================== Self-hosted 快速链路 ==================== ci-fast: if: vars.USE_SELF_HOSTED == 'true' runs-on: self-hosted @@ -56,7 +56,14 @@ jobs: echo "All checks passed!" - # ==================== GitHub-hosted 标准路径 ==================== + checks-fast: + if: vars.USE_SELF_HOSTED == 'true' + needs: ci-fast + runs-on: self-hosted + steps: + - run: echo "CI fast passed" + + # ==================== GitHub-hosted 标准链路 ==================== ci-standard: if: vars.USE_SELF_HOSTED != 'true' runs-on: ubuntu-latest @@ -109,26 +116,9 @@ jobs: pnpm turbo run typecheck:run build i18n:run test:run fi - # ==================== 状态汇总 (分支保护需要) ==================== - # checks 直接在对应 runner 上运行,无需中间层 - checks: - runs-on: ${{ vars.USE_SELF_HOSTED == 'true' && 'self-hosted' || 'ubuntu-latest' }} - needs: [ci-fast, ci-standard] - if: always() + checks-standard: + if: vars.USE_SELF_HOSTED != 'true' + needs: ci-standard + runs-on: ubuntu-latest steps: - - name: Check results - run: | - FAST="${{ needs.ci-fast.result }}" - STD="${{ needs.ci-standard.result }}" - - if [[ "$FAST" == "failure" ]] || [[ "$STD" == "failure" ]]; then - echo "CI failed!" - exit 1 - fi - - if [[ "$FAST" == "success" ]] || [[ "$STD" == "success" ]]; then - echo "All checks passed!" - exit 0 - fi - - echo "CI completed" + - run: echo "CI standard passed" From f7c2abde2c44cc0893ec56cd00f8c9552e065a12 Mon Sep 17 00:00:00 2001 From: Gaubee Date: Mon, 22 Dec 2025 20:34:54 +0800 Subject: [PATCH 2/4] ci: enable turbo cache for self-hosted runner --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aeacc9fc6..e9cdb942c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,6 +13,8 @@ jobs: if: vars.USE_SELF_HOSTED == 'true' runs-on: self-hosted timeout-minutes: 15 + env: + TURBO_CACHE_DIR: ~/.turbo-cache steps: - name: Git checkout run: | From 0b6b4b01564a0ff73fa153bc8ecdb576dfb373b9 Mon Sep 17 00:00:00 2001 From: Gaubee Date: Mon, 22 Dec 2025 20:37:16 +0800 Subject: [PATCH 3/4] ci: remove unnecessary TURBO_CACHE_DIR (default cache works) --- .github/workflows/ci.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e9cdb942c..aeacc9fc6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,8 +13,6 @@ jobs: if: vars.USE_SELF_HOSTED == 'true' runs-on: self-hosted timeout-minutes: 15 - env: - TURBO_CACHE_DIR: ~/.turbo-cache steps: - name: Git checkout run: | From 8fdf32047e560edeb588121bd777fc3211b19aa7 Mon Sep 17 00:00:00 2001 From: Gaubee Date: Mon, 22 Dec 2025 21:16:27 +0800 Subject: [PATCH 4/4] ci: add checks aggregator job for branch protection --- .github/workflows/ci.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aeacc9fc6..65fcc2fec 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -122,3 +122,18 @@ jobs: runs-on: ubuntu-latest steps: - run: echo "CI standard passed" + + # ==================== 聚合 Job(满足分支保护) ==================== + checks: + if: always() + needs: [checks-fast, checks-standard] + runs-on: ubuntu-latest + steps: + - name: Check results + run: | + if [ "${{ needs.checks-fast.result }}" == "success" ] || [ "${{ needs.checks-standard.result }}" == "success" ]; then + echo "CI passed via $( [ '${{ needs.checks-fast.result }}' == 'success' ] && echo 'fast path' || echo 'standard path' )" + exit 0 + fi + echo "CI failed: fast=${{ needs.checks-fast.result }}, standard=${{ needs.checks-standard.result }}" + exit 1