From b5cd5285d0b573469985dcde60581ab17d2567a6 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 8 Sep 2026 18:58:51 +0000 Subject: [PATCH 1/2] Retry the Solana CLI install and stop main's CI runs cancelling each other The Anchor v1 run on main after the 1.2.0 merge went red without any code at fault: one group's Solana CLI install got a truncated tarball from release.anza.xyz ("failed to iterate over archive") while the same step passed in the other thirteen groups. The next merge, README-only, then cancelled that run via the concurrency rule and skipped its own build groups, leaving main with no verdict. The install step in anchor.yml and anchor-v1.yml now retries up to five times, wiping the partial install between attempts. cancel-in-progress in every workflow with a concurrency group applies only off main, so a superseded pull-request run is still cancelled but runs on main finish. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01VMP1m8Tbkz3H5AJFJ3p4aX --- .github/workflows/anchor-v1.yml | 22 ++++++++++++++++++++-- .github/workflows/anchor.yml | 22 ++++++++++++++++++++-- .github/workflows/kani.yml | 6 +++++- .github/workflows/native.yml | 6 +++++- .github/workflows/pinocchio.yml | 6 +++++- .github/workflows/quasar.yml | 6 +++++- CHANGELOG.md | 16 ++++++++++++++++ 7 files changed, 76 insertions(+), 8 deletions(-) diff --git a/.github/workflows/anchor-v1.yml b/.github/workflows/anchor-v1.yml index 8a3eb1db4..7b3dc4217 100644 --- a/.github/workflows/anchor-v1.yml +++ b/.github/workflows/anchor-v1.yml @@ -20,7 +20,11 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true + # Superseded runs on a pull request branch are cancelled. Runs on main are + # not: a later push whose change detection skips the build (a docs-only + # merge) would otherwise cancel the run verifying the previous merge and + # leave main with no verdict. + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} env: MAX_JOBS: 64 @@ -195,8 +199,22 @@ jobs: with: node-version: lts/* - name: Install Solana CLI + # The installer downloads a release tarball from release.anza.xyz; a + # truncated download makes it fail with "failed to iterate over + # archive". Retry from scratch a few times before giving up. run: | - sh -c "$(curl -sSfL https://release.anza.xyz/v3.1.14/install)" + for attempt in 1 2 3 4 5; do + rm -rf "$HOME/.local/share/solana/install" + if sh -c "$(curl -sSfL https://release.anza.xyz/v3.1.14/install)"; then + break + fi + if [ "$attempt" = 5 ]; then + echo "Solana CLI install failed after $attempt attempts" + exit 1 + fi + echo "Solana CLI install attempt $attempt failed; retrying in $((attempt * 15))s" + sleep $((attempt * 15)) + done echo "$HOME/.local/share/solana/install/active_release/bin" >> "$GITHUB_PATH" - name: Cache Anchor toolchain uses: actions/cache@v4 diff --git a/.github/workflows/anchor.yml b/.github/workflows/anchor.yml index 1925cceeb..51d3d4d45 100644 --- a/.github/workflows/anchor.yml +++ b/.github/workflows/anchor.yml @@ -21,7 +21,11 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true + # Superseded runs on a pull request branch are cancelled. Runs on main are + # not: a later push whose change detection skips the build (a docs-only + # merge) would otherwise cancel the run verifying the previous merge and + # leave main with no verdict. + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} env: MAX_JOBS: 64 @@ -196,8 +200,22 @@ jobs: with: node-version: lts/* - name: Install Solana CLI + # The installer downloads a release tarball from release.anza.xyz; a + # truncated download makes it fail with "failed to iterate over + # archive". Retry from scratch a few times before giving up. run: | - sh -c "$(curl -sSfL https://release.anza.xyz/v3.1.14/install)" + for attempt in 1 2 3 4 5; do + rm -rf "$HOME/.local/share/solana/install" + if sh -c "$(curl -sSfL https://release.anza.xyz/v3.1.14/install)"; then + break + fi + if [ "$attempt" = 5 ]; then + echo "Solana CLI install failed after $attempt attempts" + exit 1 + fi + echo "Solana CLI install attempt $attempt failed; retrying in $((attempt * 15))s" + sleep $((attempt * 15)) + done echo "$HOME/.local/share/solana/install/active_release/bin" >> "$GITHUB_PATH" - name: Cache Anchor toolchain uses: actions/cache@v4 diff --git a/.github/workflows/kani.yml b/.github/workflows/kani.yml index b01b7bd65..03e6a2b53 100644 --- a/.github/workflows/kani.yml +++ b/.github/workflows/kani.yml @@ -36,7 +36,11 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true + # Superseded runs on a pull request branch are cancelled. Runs on main are + # not: a later push whose change detection skips the build (a docs-only + # merge) would otherwise cancel the run verifying the previous merge and + # leave main with no verdict. + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} env: # See https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/ diff --git a/.github/workflows/native.yml b/.github/workflows/native.yml index c6a505323..023fa1718 100644 --- a/.github/workflows/native.yml +++ b/.github/workflows/native.yml @@ -11,7 +11,11 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true + # Superseded runs on a pull request branch are cancelled. Runs on main are + # not: a later push whose change detection skips the build (a docs-only + # merge) would otherwise cancel the run verifying the previous merge and + # leave main with no verdict. + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} env: MAX_JOBS: 64 diff --git a/.github/workflows/pinocchio.yml b/.github/workflows/pinocchio.yml index 699803189..ec920809d 100644 --- a/.github/workflows/pinocchio.yml +++ b/.github/workflows/pinocchio.yml @@ -11,7 +11,11 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true + # Superseded runs on a pull request branch are cancelled. Runs on main are + # not: a later push whose change detection skips the build (a docs-only + # merge) would otherwise cancel the run verifying the previous merge and + # leave main with no verdict. + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} env: MAX_JOBS: 64 diff --git a/.github/workflows/quasar.yml b/.github/workflows/quasar.yml index f580ea1f4..f017b69b4 100644 --- a/.github/workflows/quasar.yml +++ b/.github/workflows/quasar.yml @@ -11,7 +11,11 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true + # Superseded runs on a pull request branch are cancelled. Runs on main are + # not: a later push whose change detection skips the build (a docs-only + # merge) would otherwise cancel the run verifying the previous merge and + # leave main with no verdict. + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} env: MAX_JOBS: 64 diff --git a/CHANGELOG.md b/CHANGELOG.md index 87bca5173..d868c06b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,22 @@ All notable changes to this repository are documented here. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). +## [2026-09-08] - CI: retry the Solana CLI install; main's runs no longer cancel each other + +The Anchor v1 run on `main` after the 1.2.0 merge went red without any code being +at fault. One matrix group's Solana CLI install failed because the release +tarball it downloaded from release.anza.xyz arrived truncated ("failed to iterate +over archive"); the same step passed in the other thirteen groups. The next merge, +a README-only change, then cancelled that run through the workflow's concurrency +rule before it could finish, and skipped its own build groups, so `main` was left +with no verdict. + +- The "Install Solana CLI" step in `anchor.yml` and `anchor-v1.yml` retries the + installer up to five times, wiping the partial install between attempts. +- `cancel-in-progress` in every workflow with a concurrency group now applies only + off `main`. A superseded run on a pull request branch is still cancelled; runs on + `main` finish, so a docs-only merge can no longer erase the previous merge's result. + ## [2026-09-08] - Anchor v1 examples on Anchor 1.2.0 Anchor 1.2.0 is the current release of the v1 line. Every `anchor-v1/` example now From 8c8088d999534b5179d0cebc02e016525a725ad6 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 8 Sep 2026 19:02:01 +0000 Subject: [PATCH 2/2] Drop the installer retry; keep only the concurrency change The truncated download was a one-off that a re-run handles. The part worth keeping is that runs on main no longer cancel each other. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01VMP1m8Tbkz3H5AJFJ3p4aX --- .github/workflows/anchor-v1.yml | 16 +--------------- .github/workflows/anchor.yml | 16 +--------------- CHANGELOG.md | 22 +++++++--------------- 3 files changed, 9 insertions(+), 45 deletions(-) diff --git a/.github/workflows/anchor-v1.yml b/.github/workflows/anchor-v1.yml index 7b3dc4217..f22887d8f 100644 --- a/.github/workflows/anchor-v1.yml +++ b/.github/workflows/anchor-v1.yml @@ -199,22 +199,8 @@ jobs: with: node-version: lts/* - name: Install Solana CLI - # The installer downloads a release tarball from release.anza.xyz; a - # truncated download makes it fail with "failed to iterate over - # archive". Retry from scratch a few times before giving up. run: | - for attempt in 1 2 3 4 5; do - rm -rf "$HOME/.local/share/solana/install" - if sh -c "$(curl -sSfL https://release.anza.xyz/v3.1.14/install)"; then - break - fi - if [ "$attempt" = 5 ]; then - echo "Solana CLI install failed after $attempt attempts" - exit 1 - fi - echo "Solana CLI install attempt $attempt failed; retrying in $((attempt * 15))s" - sleep $((attempt * 15)) - done + sh -c "$(curl -sSfL https://release.anza.xyz/v3.1.14/install)" echo "$HOME/.local/share/solana/install/active_release/bin" >> "$GITHUB_PATH" - name: Cache Anchor toolchain uses: actions/cache@v4 diff --git a/.github/workflows/anchor.yml b/.github/workflows/anchor.yml index 51d3d4d45..b87468306 100644 --- a/.github/workflows/anchor.yml +++ b/.github/workflows/anchor.yml @@ -200,22 +200,8 @@ jobs: with: node-version: lts/* - name: Install Solana CLI - # The installer downloads a release tarball from release.anza.xyz; a - # truncated download makes it fail with "failed to iterate over - # archive". Retry from scratch a few times before giving up. run: | - for attempt in 1 2 3 4 5; do - rm -rf "$HOME/.local/share/solana/install" - if sh -c "$(curl -sSfL https://release.anza.xyz/v3.1.14/install)"; then - break - fi - if [ "$attempt" = 5 ]; then - echo "Solana CLI install failed after $attempt attempts" - exit 1 - fi - echo "Solana CLI install attempt $attempt failed; retrying in $((attempt * 15))s" - sleep $((attempt * 15)) - done + sh -c "$(curl -sSfL https://release.anza.xyz/v3.1.14/install)" echo "$HOME/.local/share/solana/install/active_release/bin" >> "$GITHUB_PATH" - name: Cache Anchor toolchain uses: actions/cache@v4 diff --git a/CHANGELOG.md b/CHANGELOG.md index d868c06b8..012496389 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,21 +4,13 @@ All notable changes to this repository are documented here. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). -## [2026-09-08] - CI: retry the Solana CLI install; main's runs no longer cancel each other - -The Anchor v1 run on `main` after the 1.2.0 merge went red without any code being -at fault. One matrix group's Solana CLI install failed because the release -tarball it downloaded from release.anza.xyz arrived truncated ("failed to iterate -over archive"); the same step passed in the other thirteen groups. The next merge, -a README-only change, then cancelled that run through the workflow's concurrency -rule before it could finish, and skipped its own build groups, so `main` was left -with no verdict. - -- The "Install Solana CLI" step in `anchor.yml` and `anchor-v1.yml` retries the - installer up to five times, wiping the partial install between attempts. -- `cancel-in-progress` in every workflow with a concurrency group now applies only - off `main`. A superseded run on a pull request branch is still cancelled; runs on - `main` finish, so a docs-only merge can no longer erase the previous merge's result. +## [2026-09-08] - CI runs on main no longer cancel each other + +`cancel-in-progress` in every workflow with a concurrency group now applies only +off `main`. A superseded run on a pull request branch is still cancelled. Runs on +`main` finish: a later push whose change detection skips the build (a docs-only +merge) used to cancel the run verifying the previous merge and leave `main` with +no verdict, which is how the Anchor v1 badge went red after the 1.2.0 merge. ## [2026-09-08] - Anchor v1 examples on Anchor 1.2.0