Earl Warren
d8ab364889
The intention was good initially but the expression was wrong for two reasons: * When a pull_request event is received for a labeled action, the match should be github.event.action == 'label_updated' and not 'labeled' * The event does not have a github.event.label field and contains(github.event.label.name, 'backport/v') will always be false. Since the expression is only evaluated in the context of a merged pull request, either because it was just closed or because it was labeled after the fact, the only verification that is needed is to assert that there is at least one `backport/v*` label.
79 lines
2.6 KiB
YAML
79 lines
2.6 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: 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/actions/git-backporting@v4.6.0
|
|
with:
|
|
target-branch: ${{ fromJSON(steps.extract-targets.outputs.targets)[0] }}/forgejo
|
|
strategy: ort
|
|
strategy-option: find-renames
|
|
no-squash: true
|
|
auth: ${{ secrets.BACKPORT_TOKEN }}
|
|
pull-request: ${{ github.event.pull_request.url }}
|