Skip to content

aarch64: br_table + value-carrying block/loop/if (#851, VCR-A64-CF-001) #124

aarch64: br_table + value-carrying block/loop/if (#851, VCR-A64-CF-001)

aarch64: br_table + value-carrying block/loop/if (#851, VCR-A64-CF-001) #124

# Auto-merge safe Dependabot updates so patch/minor dep bumps never require
# hand-gating (they were consuming the maintenance loop one-at-a-time — each
# merge moved main, staling the next). MAJOR bumps of any dep are HELD for
# manual review (the ordeal 0.9->0.12 major bump silently broke synth-verify at
# merge; wasm-tooling majors corrupted Cargo.lock). Auto-merge only enables the
# merge — GitHub still requires every branch-protection gate to pass first, so
# a broken bump cannot land.
name: Dependabot Auto-Merge
on: pull_request_target
permissions:
contents: write
pull-requests: write
jobs:
auto-merge:
if: github.actor == 'dependabot[bot]'
runs-on: ubuntu-latest
steps:
- name: Fetch Dependabot metadata
id: meta
uses: dependabot/fetch-metadata@v3
# A 0.x MINOR bump is BREAKING by semver convention (for 0.x the MINOR
# component is the de-facto major), but Dependabot reports it as
# `semver-minor` because the major component is still 0. That gap bit synth
# TWICE on the SAME dep: ordeal 0.9->0.12 (added `BvTerm::Urem`, broke every
# exhaustive match) and again 0.9->0.16 (#864 — landed with NO CI run and
# left `main` uncompilable). So: HOLD when the previous version is 0.x and
# the minor component changed.
- name: Classify 0.x-minor as breaking (hold)
id: zerox
env:
# Via env (never interpolated into the script body): this is a
# pull_request_target workflow with contents:write, so no
# ${{ }} expansion inside `run:`.
PREV_VERSION: ${{ steps.meta.outputs.previous-version }}
NEW_VERSION: ${{ steps.meta.outputs.new-version }}
UPDATE_TYPE: ${{ steps.meta.outputs.update-type }}
run: |
hold=false
if [ "$UPDATE_TYPE" = "version-update:semver-minor" ]; then
case "$PREV_VERSION" in
0.*)
pm=$(printf '%s' "$PREV_VERSION" | cut -d. -f2)
nm=$(printf '%s' "$NEW_VERSION" | cut -d. -f2)
[ "$pm" != "$nm" ] && hold=true
;;
esac
fi
echo "hold=$hold" >> "$GITHUB_OUTPUT"
echo "0.x-minor hold=$hold ($PREV_VERSION -> $NEW_VERSION)"
- name: Enable auto-merge for patch + true-minor updates
if: (steps.meta.outputs.update-type == 'version-update:semver-patch' || steps.meta.outputs.update-type == 'version-update:semver-minor') && steps.zerox.outputs.hold != 'true'
run: gh pr merge --auto --squash "$PR_URL"
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Comment + label held 0.x-minor bumps
if: steps.zerox.outputs.hold == 'true'
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PREV_VERSION: ${{ steps.meta.outputs.previous-version }}
NEW_VERSION: ${{ steps.meta.outputs.new-version }}
run: |
gh pr edit "$PR_URL" --add-label "major-bump-hold" 2>/dev/null || true
gh pr comment "$PR_URL" --body "🔒 **0.x MINOR bump — held for manual review.** \`$PREV_VERSION\` → \`$NEW_VERSION\`: for a 0.x crate the MINOR component is the de-facto major, so this is BREAKING even though Dependabot labels it \`semver-minor\`. This gap broke synth twice on \`ordeal\` (0.9→0.12 added \`BvTerm::Urem\`, breaking every exhaustive match; 0.9→0.16 in #864 landed with no CI run and left main uncompilable). Build EVERY affected feature set (incl. \`--features z3-solver\`) and run the full \`synth-verify\` suite before merging."
- name: Comment + label major updates for manual review
if: steps.meta.outputs.update-type == 'version-update:semver-major'
run: |
gh pr edit "$PR_URL" --add-label "major-bump-hold" 2>/dev/null || true
gh pr comment "$PR_URL" --body "🔒 **Major version bump — held for manual review.** Not auto-merged: a major bump of a load-bearing dep (solver/wasm-tooling/proof) can break the build at merge (ordeal 0.9→0.12 added an enum variant; wasm-tooling majors corrupted Cargo.lock). Review the changelog + build the affected feature sets before merging."
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}