* Behaves as it should with merge & squashed pull requests * Cherry-pick commits with -x for traceability Refs: https://github.com/kiegroup/git-backporting/issues/113
		
			
				
	
	
		
			83 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
# Copyright 2024 The Forgejo Authors
 | 
						|
# SPDX-License-Identifier: MIT
 | 
						|
#
 | 
						|
# To modify this workflow:
 | 
						|
#
 | 
						|
#  - change pull_request_target: to  pull_request:
 | 
						|
#    so that it runs from a pull request instead of the default branch
 | 
						|
#
 | 
						|
#  - push it to the wip-ci-backport branch on the forgejo repository
 | 
						|
#    otherwise it will not have access to the secrets required to push
 | 
						|
#    the PR
 | 
						|
#
 | 
						|
#  - open a pull request targetting wip-ci-backport that includes a change
 | 
						|
#    that can be backported without conflict in v1.21 and set the
 | 
						|
#    `backport/v1.21` label.
 | 
						|
#
 | 
						|
#  - once it works, open a pull request for the sake of keeping track
 | 
						|
#    of the change even if the PR won't run it because it will use
 | 
						|
#    whatever is in the default branch instead
 | 
						|
#
 | 
						|
#  - after it is merged, double check it works by setting a
 | 
						|
#    `backport/v1.21` label on a merged pull request that can be backported
 | 
						|
#    without conflict.
 | 
						|
#
 | 
						|
on:
 | 
						|
  pull_request_target:
 | 
						|
    types:
 | 
						|
      - closed
 | 
						|
      - labeled
 | 
						|
 | 
						|
jobs:
 | 
						|
  backporting:
 | 
						|
    if: >
 | 
						|
      !startsWith(vars.ROLE, 'forgejo-') && (
 | 
						|
        github.event.pull_request.merged
 | 
						|
        &&
 | 
						|
        contains(toJSON(github.event.pull_request.labels), 'backport/v')
 | 
						|
      )
 | 
						|
    runs-on: docker
 | 
						|
    container:
 | 
						|
      image: 'docker.io/node:20-bookworm'
 | 
						|
    steps:
 | 
						|
      - name: event info
 | 
						|
        run: |
 | 
						|
          cat <<'EOF'
 | 
						|
          ${{ toJSON(github) }}
 | 
						|
          EOF
 | 
						|
      - name: Fetch labels
 | 
						|
        id: fetch-labels
 | 
						|
        shell: bash
 | 
						|
        run: |
 | 
						|
          set -x
 | 
						|
          echo "Labels retrieved below"
 | 
						|
          export DEBIAN_FRONTEND=noninteractive
 | 
						|
          apt-get update -qq
 | 
						|
          apt-get -q install -qq -y jq
 | 
						|
          filtered_labels=$(echo "$LABELS" | jq -c 'map(select(.name | startswith("backport/v")))')
 | 
						|
          echo "FILTERED_LABELS=${filtered_labels}" >> $GITHUB_ENV
 | 
						|
        env:
 | 
						|
          LABELS: ${{ toJSON(github.event.pull_request.labels) }}
 | 
						|
      - name: Extract targets
 | 
						|
        id: extract-targets
 | 
						|
        shell: bash
 | 
						|
        run: |
 | 
						|
          set -x
 | 
						|
          targets="$(echo $FILTERED_LABELS | jq -c '[.[] | .name | sub("backport/"; "")]')"
 | 
						|
          echo "targets=$(echo $targets)" >> $GITHUB_OUTPUT
 | 
						|
 | 
						|
      - name: Printing info
 | 
						|
        shell: bash
 | 
						|
        run: |
 | 
						|
          echo "targets: ${{ steps.extract-targets.outputs.targets }}"
 | 
						|
          echo "target-branch: ${{ fromJSON(steps.extract-targets.outputs.targets)[0] }}"
 | 
						|
          echo "pull-request: ${{ github.event.pull_request.url }}"
 | 
						|
 | 
						|
      - uses: https://code.forgejo.org/forgejo/git-backporting@b2554a678d5ea2814f0df3abad2ac4fcdee2d81f
 | 
						|
        with:
 | 
						|
          target-branch: ${{ fromJSON(steps.extract-targets.outputs.targets)[0] }}/forgejo
 | 
						|
          strategy: ort
 | 
						|
          strategy-option: find-renames
 | 
						|
          cherry-pick-options: -x
 | 
						|
          auth: ${{ secrets.BACKPORT_TOKEN }}
 | 
						|
          pull-request: ${{ github.event.pull_request.url }}
 |