From c352f0184650e92ddfec47ff50c36bb5da0ac792 Mon Sep 17 00:00:00 2001 From: Liam Vovk <63673978+vovkman@users.noreply.github.com> Date: Tue, 12 Nov 2024 15:34:37 -0500 Subject: [PATCH] fix: don't exit with failure from ci if no changes (#6) --- .github/workflows/rebase.yml | 121 +++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 .github/workflows/rebase.yml diff --git a/.github/workflows/rebase.yml b/.github/workflows/rebase.yml new file mode 100644 index 00000000000000..e5ddc69e4c0173 --- /dev/null +++ b/.github/workflows/rebase.yml @@ -0,0 +1,121 @@ +# This workflow runs a periodic rebase process, pulling in updates from an upstream repository +# The workflow for rebasing a helius branch to an agave branch locally is typically: +# $ git checkout v1.17 +# $ git pull --rebase # --rebase needed locally +# $ git branch -D lb/v1.17_rebase # deletes branch from last v1.17 rebase +# $ git checkout -b lb/v1.17_rebase +# $ git fetch upstream +# $ git rebase upstream/v1.17 # rebase + fix merge conflicts +# $ git rebase --continue +# $ git push origin +lb/v1.17_rebase # force needed to overwrite remote. wait for CI, fix if any issues +# $ git checkout v1.17 +# $ git reset --hard lb/v1.17_rebase +# $ git push origin +v1.17 +# +# This workflow automates this process, with periodic status updates over slack. +# It will also run CI and wait for it to pass before performing the force push to v1.17. +# In the event there's a failure in the process, it's reported to slack and the job stops. + +name: "Rebase helius from upstream anza-xyz/agave" + +on: + # push: + schedule: + - cron: "00 19 * * 1-5" + workflow_dispatch: +jobs: + rebase: + runs-on: ubuntu-latest + strategy: + matrix: + include: + - branch: master + upstream_branch: master + upstream_repo: https://github.com/anza-xyz/agave.git + - branch: v2.0 + upstream_branch: v2.0 + upstream_repo: https://github.com/anza-xyz/agave.git + - branch: v2.1 + upstream_branch: v2.1 + upstream_repo: https://github.com/anza-xyz/agave.git + fail-fast: false + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ matrix.branch }} + submodules: recursive + fetch-depth: 0 + - name: Add upstream + run: git remote add upstream ${{ matrix.upstream_repo }} + - name: Fetch upstream + run: git fetch upstream + - name: Fetch origin + run: git fetch origin + - name: Set REBASE_BRANCH + run: echo "REBASE_BRANCH=ci/nightly/${{ matrix.branch }}/$(date +'%Y-%m-%d-%H-%M')" >> $GITHUB_ENV + - name: echo $REBASE_BRANCH + run: echo $REBASE_BRANCH + - name: Create rebase branch + run: git checkout -b $REBASE_BRANCH + - name: Setup email + run: | + git config --global user.email "liam@helius.xyz" + git config --global user.name "Helius Infrastructure" + - name: Rebase + id: rebase + run: git rebase upstream/${{ matrix.upstream_branch }} + - name: Check if rebase applied + id: check_rebase_applied + continue-on-error: true + run: | + PRE_REBASE_SHA=$(git rev-parse ${{ matrix.branch }}) + POST_REBASE_SHA=$(git rev-parse HEAD) + if [ "$PRE_REBASE_SHA" = "$POST_REBASE_SHA" ]; then + echo "NEEDS_REBASE=false" >> $GITHUB_ENV + echo "No rebase needed, skipping remaining steps..." + else + echo "NEEDS_REBASE=true" >> $GITHUB_ENV + echo "Rebase applied successfully." + fi + + - name: Set REBASE_SHA + if: env.NEEDS_REBASE == 'true' + run: echo "REBASE_SHA=$(git rev-parse HEAD)" >> $GITHUB_ENV + + - name: Push changes + if: env.NEEDS_REBASE == 'true' + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + branch: ${{ env.REBASE_BRANCH }} + + - name: Fetch the latest remote changes + if: env.NEEDS_REBASE == 'true' + run: git fetch origin ${{ matrix.branch }} + + - name: Check if origin HEAD has changed + if: env.NEEDS_REBASE == 'true' + run: | + LOCAL_SHA=$(git rev-parse ${{ matrix.branch }}) + ORIGIN_SHA=$(git rev-parse origin/${{ matrix.branch }}) + if [ "$ORIGIN_SHA" != "$LOCAL_SHA" ]; then + echo "The remote HEAD of ${{ matrix.branch }} does not match the local HEAD of ${{ matrix.branch }} at the beginning of CI." + echo "origin sha: $ORIGIN_SHA" + echo "local sha: $LOCAL_SHA" + exit 1 + else + echo "The remote HEAD matches the local REBASE_SHA at the beginning of CI. Proceeding." + fi + + - name: Reset ${{ matrix.branch }} to ${{ env.REBASE_BRANCH }} + if: env.NEEDS_REBASE == 'true' + run: | + git checkout ${{ matrix.branch }} + git reset --hard ${{ env.REBASE_BRANCH }} + + - name: Push rebased ${{ matrix.branch }} + if: env.NEEDS_REBASE == 'true' + uses: ad-m/github-push-action@master + with: + branch: ${{ matrix.branch }} + force: true \ No newline at end of file