From 55301986c9b3ccee313e0e85b3c96d0ec657a64f Mon Sep 17 00:00:00 2001 From: Jack Green Date: Mon, 18 Nov 2024 21:12:10 +0000 Subject: [PATCH] Externalise backport action (#1373) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The back porting logic is integrated into each action, duplicated [many times across the codebase](https://github.com/search?q=org%3Ahazelcast+%22Checkout+maintenance+branch+and+cherry-pick%22&type=code). Instead, the logic should be externalised to be re-used. Changes: - referenced new workflow instead of duplication - refactored all and specified branch actions into a single action - maintained branches only needs to be specified once - updated backporting process - re-ordered so `checkout` done only if required - updated commit metadata to use the `ACTOR` (ie commit author) vs hardcoded 🤖 - updated maintenance branches to reflect [supported versions](https://support.hazelcast.com/s/article/Version-Support-Windows) Tested via a [dummy repo](https://github.com/JackPGreen2/hz-docs/actions/runs/11817864506). --- .github/workflows/backport-5-0.yml | 40 ------------- .github/workflows/backport-5-1.yml | 40 ------------- .github/workflows/backport-5-2.yml | 40 ------------- .github/workflows/backport-5-3.yml | 40 ------------- .github/workflows/backport-5-5.yml | 40 ------------- ...backport-5-4.yml => backport-workflow.yml} | 45 +++++++------- .github/workflows/backport.yml | 58 +++++++++---------- .github/workflows/forwardport.yml | 38 ++---------- 8 files changed, 56 insertions(+), 285 deletions(-) delete mode 100644 .github/workflows/backport-5-0.yml delete mode 100644 .github/workflows/backport-5-1.yml delete mode 100644 .github/workflows/backport-5-2.yml delete mode 100644 .github/workflows/backport-5-3.yml delete mode 100644 .github/workflows/backport-5-5.yml rename .github/workflows/{backport-5-4.yml => backport-workflow.yml} (50%) diff --git a/.github/workflows/backport-5-0.yml b/.github/workflows/backport-5-0.yml deleted file mode 100644 index 3dffc7647..000000000 --- a/.github/workflows/backport-5-0.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Backport changes to version 5.0 -on: - push: - branches: - - main -jobs: - backport: - strategy: - matrix: - branch: ['v/5.0'] - runs-on: ubuntu-latest - steps: - - - name: checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Set up git config - run: | - git config user.name "GitHub Actions Bot" - git config user.email "<>" - - - name: Check PR for backport label - id: check_pr_labels - uses: shioyang/check-pr-labels-on-push-action@v1.0.12 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - labels: '["backport to 5.0"]' - - - name: See result - run: echo "${{ steps.check_pr_labels.outputs.result }}" - - - name: Checkout maintenance branch and cherry-pick - if: ${{ steps.check_pr_labels.outputs.result == 'true' }} - run: | - git fetch - git checkout ${{ matrix.branch }} - git cherry-pick -x --strategy=recursive -X theirs $GITHUB_SHA - git push diff --git a/.github/workflows/backport-5-1.yml b/.github/workflows/backport-5-1.yml deleted file mode 100644 index 5964dfc32..000000000 --- a/.github/workflows/backport-5-1.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Backport changes to latest maintenance branch -on: - push: - branches: - - main -jobs: - backport: - strategy: - matrix: - branch: ['v/5.1'] - runs-on: ubuntu-latest - steps: - - - name: checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Set up git config - run: | - git config user.name "GitHub Actions Bot" - git config user.email "<>" - - - name: Check PR for backport label - id: check_pr_labels - uses: shioyang/check-pr-labels-on-push-action@v1.0.12 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - labels: '["backport to 5.1"]' - - - name: See result - run: echo "${{ steps.check_pr_labels.outputs.result }}" - - - name: Checkout maintenance branch and cherry-pick - if: ${{ steps.check_pr_labels.outputs.result == 'true' }} - run: | - git fetch - git checkout ${{ matrix.branch }} - git cherry-pick -x --strategy=recursive -X theirs $GITHUB_SHA - git push diff --git a/.github/workflows/backport-5-2.yml b/.github/workflows/backport-5-2.yml deleted file mode 100644 index 47f5aed75..000000000 --- a/.github/workflows/backport-5-2.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Backport changes to the latest maintenance branch (v/5.2) -on: - push: - branches: - - main -jobs: - backport: - strategy: - matrix: - branch: ['v/5.2'] - runs-on: ubuntu-latest - steps: - - - name: checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Set up git config - run: | - git config user.name "GitHub Actions Bot" - git config user.email "<>" - - - name: Check PR for backport label - id: check_pr_labels - uses: shioyang/check-pr-labels-on-push-action@v1.0.12 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - labels: '["backport to 5.2"]' - - - name: See result - run: echo "${{ steps.check_pr_labels.outputs.result }}" - - - name: Checkout maintenance branch and cherry-pick - if: ${{ steps.check_pr_labels.outputs.result == 'true' }} - run: | - git fetch - git checkout ${{ matrix.branch }} - git cherry-pick -x --strategy=recursive -X theirs $GITHUB_SHA - git push diff --git a/.github/workflows/backport-5-3.yml b/.github/workflows/backport-5-3.yml deleted file mode 100644 index 8c281af0a..000000000 --- a/.github/workflows/backport-5-3.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Backport changes to the latest maintenance branch (v/5.3) -on: - push: - branches: - - main -jobs: - backport: - strategy: - matrix: - branch: ['v/5.3'] - runs-on: ubuntu-latest - steps: - - - name: checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Set up git config - run: | - git config user.name "GitHub Actions Bot" - git config user.email "<>" - - - name: Check PR for backport label - id: check_pr_labels - uses: shioyang/check-pr-labels-on-push-action@v1.0.12 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - labels: '["backport to 5.3"]' - - - name: See result - run: echo "${{ steps.check_pr_labels.outputs.result }}" - - - name: Checkout maintenance branch and cherry-pick - if: ${{ steps.check_pr_labels.outputs.result == 'true' }} - run: | - git fetch - git checkout ${{ matrix.branch }} - git cherry-pick -x --strategy=recursive -X theirs $GITHUB_SHA - git push diff --git a/.github/workflows/backport-5-5.yml b/.github/workflows/backport-5-5.yml deleted file mode 100644 index d3daef370..000000000 --- a/.github/workflows/backport-5-5.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Backport changes to the 5.5.0 branch -on: - push: - branches: - - main -jobs: - backport: - strategy: - matrix: - branch: ['v/5.5'] - runs-on: ubuntu-latest - steps: - - - name: checkout - uses: actions/checkout@v4.1.4 - with: - fetch-depth: 0 - - - name: Set up git config - run: | - git config user.name "GitHub Actions Bot" - git config user.email "<>" - - - name: Check PR for backport label - id: check_pr_labels - uses: shioyang/check-pr-labels-on-push-action@v1.0.12 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - labels: '["backport to 5.5"]' - - - name: See result - run: echo "${{ steps.check_pr_labels.outputs.result }}" - - - name: Checkout maintenance branch and cherry-pick - if: ${{ steps.check_pr_labels.outputs.result == 'true' }} - run: | - git fetch - git checkout ${{ matrix.branch }} - git cherry-pick -x --strategy=recursive -X theirs $GITHUB_SHA - git push diff --git a/.github/workflows/backport-5-4.yml b/.github/workflows/backport-workflow.yml similarity index 50% rename from .github/workflows/backport-5-4.yml rename to .github/workflows/backport-workflow.yml index c6ff5061a..73651545c 100644 --- a/.github/workflows/backport-5-4.yml +++ b/.github/workflows/backport-workflow.yml @@ -1,40 +1,43 @@ -name: Backport changes to the 5.4.0 branch +name: Backport changes + on: - push: - branches: - - main + workflow_call: + inputs: + label-to-check-for: + required: true + type: string + target-branch: + required: true + type: string + jobs: backport: - strategy: - matrix: - branch: ['v/5.4'] runs-on: ubuntu-latest - steps: - - - name: checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Set up git config - run: | - git config user.name "GitHub Actions Bot" - git config user.email "<>" + steps: - name: Check PR for backport label id: check_pr_labels uses: shioyang/check-pr-labels-on-push-action@v1.0.12 with: - github-token: ${{ secrets.GITHUB_TOKEN }} - labels: '["backport to 5.4"]' + github-token: ${{ secrets.GITHUB_TOKEN }} + labels: ${{ inputs.label-to-check-for }} - name: See result run: echo "${{ steps.check_pr_labels.outputs.result }}" + - name: Checkout repository + if: ${{ steps.check_pr_labels.outputs.result == 'true' }} + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Checkout maintenance branch and cherry-pick if: ${{ steps.check_pr_labels.outputs.result == 'true' }} run: | + git config user.name "${GITHUB_ACTOR}" + git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" + git fetch - git checkout ${{ matrix.branch }} + git checkout ${{ inputs.target-branch }} git cherry-pick -x --strategy=recursive -X theirs $GITHUB_SHA git push diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml index 2ad888348..e23e0bdd1 100644 --- a/.github/workflows/backport.yml +++ b/.github/workflows/backport.yml @@ -1,40 +1,36 @@ -name: Backport changes to all maintenance branches +name: Backport changes to maintenance branches on: push: branches: - main jobs: - backport: - strategy: - matrix: - branch: ['v/5.0', 'v/5.1', 'v/5.2', 'v/5.3', 'v/5.4', 'v/5.5'] + get-maintenance-branches: runs-on: ubuntu-latest + outputs: + branches: "['5.3', '5.4', '5.5']" steps: - - - name: checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 + - run: exit 0 - - name: Set up git config - run: | - git config user.name "GitHub Actions Bot" - git config user.email "<>" - - - name: Check PR for backport label - id: check_pr_labels - uses: shioyang/check-pr-labels-on-push-action@v1.0.12 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - labels: '["backport to all versions"]' - - - name: See result - run: echo "${{ steps.check_pr_labels.outputs.result }}" + backport-to-all-branch: + needs: get-maintenance-branches + strategy: + fail-fast: false + matrix: + branch: ${{ fromJSON(needs.get-maintenance-branches.outputs.branches) }} + uses: ./.github/workflows/backport-workflow.yml + with: + label-to-check-for: '["backport to all versions"]' + target-branch: v/${{ matrix.branch }} + secrets: inherit - - name: Checkout maintenance branch and cherry-pick - if: ${{ steps.check_pr_labels.outputs.result == 'true' }} - run: | - git fetch - git checkout ${{ matrix.branch }} - git cherry-pick -x --strategy=recursive -X theirs $GITHUB_SHA - git push + backport-to-specified-branch: + needs: get-maintenance-branches + strategy: + fail-fast: false + matrix: + branch: ${{ fromJSON(needs.get-maintenance-branches.outputs.branches) }} + uses: ./.github/workflows/backport-workflow.yml + with: + label-to-check-for: '["backport to ${{ matrix.branch }}"]' + target-branch: v/${{ matrix.branch }} + secrets: inherit diff --git a/.github/workflows/forwardport.yml b/.github/workflows/forwardport.yml index 48f007ddc..619e0ae2f 100644 --- a/.github/workflows/forwardport.yml +++ b/.github/workflows/forwardport.yml @@ -5,36 +5,8 @@ on: - v/* jobs: forwardport: - strategy: - matrix: - branch: ['main'] - runs-on: ubuntu-latest - steps: - - - name: checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Set up git config - run: | - git config user.name "GitHub Actions Bot" - git config user.email "<>" - - - name: Check PR for forwardport label - id: check_pr_labels - uses: shioyang/check-pr-labels-on-push-action@v1.0.12 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - labels: '["forwardport to snapshot"]' - - - name: See result - run: echo "${{ steps.check_pr_labels.outputs.result }}" - - - name: Checkout branch and cherry-pick - if: ${{ steps.check_pr_labels.outputs.result == 'true' }} - run: | - git fetch - git checkout ${{ matrix.branch }} - git cherry-pick -x --strategy=recursive -X theirs $GITHUB_SHA - git push + uses: ./.github/workflows/backport-workflow.yml + with: + label: '["forwardport to snapshot"]' + target-branch: main + secrets: inherit