authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-09-18 17:34:13-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-09-18 17:34:13-07:00
log4931d73af3e68d8706d7568b9af37c8397caffdb
tree1637d6a2ee1296c8ad36e6d42760041b5f4579f2
parentbd0b9edac3cf8fe30f8242dd7943a9240810b2c9
signature Signed by PGP key B5690EEEBB952194

fix(ci): reconcile native change labels against pinned commits (#12517)


1 files changed, 31 insertions(+), 16 deletions(-)

.github/workflows/mobile-fingerprint-check.yml+31-16
......@@ -13,17 +13,9 @@ name: Mobile Fingerprint Check
1313# pnpm), so the comparison is self-consistent; no EXPO_TOKEN needed.
1414on:
1515 pull_request:
16 paths:
17 - apps/mobile/**
18 - packages/client-runtime/**
19 - packages/contracts/**
20 - packages/shared/**
21 - assets/**
22 - scripts/**
23 - patches/**
24 - pnpm-lock.yaml
25 - pnpm-workspace.yaml
26 - .github/workflows/mobile-fingerprint-check.yml
16 # Run even when a rebase or base change removes every native input from the
17 # diff, so the label can be cleared without installing Expo dependencies.
18 types: [opened, synchronize, reopened, edited]
2719
2820concurrency:
2921 group: mobile-fingerprint-check-${{ github.event.pull_request.number }}
......@@ -44,12 +36,29 @@ jobs:
4436 - name: Checkout
4537 uses: actions/checkout@v6
4638 with:
47 # Default pull_request checkout is the merge commit (PR applied on
48 # top of base), so the "head" fingerprint is the state main would
49 # actually be in after merging — stale branches compare cleanly.
50 fetch-depth: 0
39 # The merge ref can advance after the event is queued. Pin its commit
40 # and compare against its first parent, rather than the event's base.
41 ref: ${{ github.sha }}
42 fetch-depth: 2
43
44 - id: changes
45 name: Detect native fingerprint inputs
46 run: |
47 base_sha=$(git rev-parse HEAD^1)
48 echo "base_sha=$base_sha" >> "$GITHUB_OUTPUT"
49 paths=$(git diff --no-renames --name-only "$base_sha" HEAD -- \
50 apps/mobile/ packages/client-runtime/ packages/contracts/ packages/shared/ \
51 assets/ scripts/ patches/ package.json pnpm-lock.yaml pnpm-workspace.yaml \
52 .github/workflows/mobile-fingerprint-check.yml)
53 if [[ -n "$paths" ]]; then
54 echo "relevant=true" >> "$GITHUB_OUTPUT"
55 else
56 echo "relevant=false" >> "$GITHUB_OUTPUT"
57 echo "No native fingerprint inputs changed; clearing any stale native change label." >> "$GITHUB_STEP_SUMMARY"
58 fi
5159
5260 - name: Setup Vite+
61 if: steps.changes.outputs.relevant == 'true'
5362 uses: voidzero-dev/setup-vp@v1
5463 with:
5564 node-version-file: package.json
......@@ -59,6 +68,7 @@ jobs:
5968 - --filter=@t3tools/mobile...
6069
6170 - name: Expose pnpm
71 if: steps.changes.outputs.relevant == 'true'
6272 run: |
6373 pnpm_version="$(node --print "require('./package.json').packageManager.split('@').pop()")"
6474 vp_pnpm_bin="$HOME/.vite-plus/package_manager/pnpm/$pnpm_version/pnpm/bin"
......@@ -66,6 +76,7 @@ jobs:
6676 "$vp_pnpm_bin/pnpm" --version
6777
6878 - name: Fingerprint merge result
79 if: steps.changes.outputs.relevant == 'true'
6980 working-directory: apps/mobile
7081 run: |
7182 mkdir -p "$RUNNER_TEMP/fp/head" "$RUNNER_TEMP/fp/base"
......@@ -74,8 +85,11 @@ jobs:
7485 done
7586
7687 - name: Fingerprint base
88 if: steps.changes.outputs.relevant == 'true'
89 env:
90 BASE_SHA: ${{ steps.changes.outputs.base_sha }}
7791 run: |
78 git checkout --quiet "${{ github.event.pull_request.base.sha }}"
92 git checkout --quiet "$BASE_SHA"
7993 # Re-sync node_modules to the base commit's lockfile before
8094 # fingerprinting — a dep-changing PR must not fingerprint the base
8195 # against head's installed packages.
......@@ -87,6 +101,7 @@ jobs:
87101
88102 - id: compare
89103 name: Compare fingerprints
104 if: steps.changes.outputs.relevant == 'true'
90105 run: |
91106 changed=""
92107 {