Skip to content

Try tagging...

Try tagging... #20

Workflow file for this run

---
name: mergeit-backport
env:
# These should be updated as part of the MAJOR release process
BACKPORT_CURRENT: 'backport-9'
BACKPORT_BUGFIX: 'backport-8'
BACKPORT_FORBIDDEN: 'do_not_backport'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
pull_request:
types:
- labeled
- opened
- synchronize
branches:
- main
jobs:
changelog-types:
permissions:
pull-requests: read
runs-on: ubuntu-latest
outputs:
no_backport: ${{ steps.fetch.outputs.no_backport }}
bugfix: ${{ steps.fetch.outputs.bugfix }}
minor_only: ${{ steps.fetch.outputs.minor_only }}
steps:
- uses: actions/checkout@v2
- name: Fetch change types from changelog fragments
id: fetch
shell: bash {0}
run: |
gh pr -R "${GITHUB_REPOSITORY}" diff "${{ github.event.pull_request.number }}" --name-only | \
grep -E '^changelogs/fragments/' | \
while read -r line
do cat "${line}" | \
python -c 'import sys, yaml; change = yaml.safe_load(sys.stdin.read()) ; print("\n".join(change.keys()));' \
| tee -a all-changelog-types
done
# Beware, these a bash-ian booleans: "true == 0"
grep -qE '(release_summary|breaking_changes|major_changes|removed_features)' all-changelog-types ; echo "no_backport=${?}" >>${GITHUB_OUTPUT}
grep -qE '(bugfixes|security_fixes)' all-changelog-types ; echo "bugfix=${?}" >>${GITHUB_OUTPUT}
grep -qE '(deprecated_features|minor_changes)' all-changelog-types ; echo "minor_only=${?}" >>${GITHUB_OUTPUT}
env:
GH_TOKEN: ${{ github.token }}
changelog-labeling:
permissions:
pull-requests: write
runs-on: ubuntu-latest
needs:
- changelog-types
steps:
- name: Apply labeling
shell: bash {0}
- run: |
if [[ ${NO_BACKPORT} == 0 ]] ; then
# If this includes breaking changes, then set the do_not_backport label and remove all
# labels starting with "backport".
echo ${BACKPORT_FORBIDDEN}
CURRENT_LABELS=$(
gh pr -R "${GITHUB_REPOSITORY}" view "${{ github.event.pull_request.number }}"
--json labels
--jq '[.labels[] | select(.name | startswith("backport"))] | map(.name) | join(",")'
)
if [[ -n ${CURRENT_LABELS} ]] ; then REMOVE="--remove-labels" ; fi
gh pr -R "${GITHUB_REPOSITORY}" edit "${{ github.event.pull_request.number }}"
--add-label ${BACKPORT_FORBIDDEN} \
${REMOVE} "${CURRENT_LABELS}"
exit 0
fi
# If we include something that needs a "minor" release, we probably should be
# automatically backporting it.
if [[ ${MINOR_ONLY} == 0 ]] ; then
echo ${BACKPORT_CURRENT}
gh pr -R "${GITHUB_REPOSITORY}" edit "${{ github.event.pull_request.number }}"
--add-label ${BACKPORT_CURRENT}
exit 0
fi
# If we include a bug/security fix, then we should backport to the bugfix branch
if [[ ${BUGFIX} == 0 ]] ; then
echo ${BACKPORT_BUGFIX} ${BACKPORT_CURRENT}
gh pr -R "${GITHUB_REPOSITORY}" edit "${{ github.event.pull_request.number }}"
--add-label ${BACKPORT_CURRENT},${BACKPORT_BUGFIX}
exit 0
fi
# Default to backporting to the current "stable" release
echo ${BACKPORT_CURRENT}
env:
GH_TOKEN: ${{ github.token }}
NO_BACKPORT: ${{ needs.changelog-types.outputs.no_backport }}
BUGFIX: ${{ needs.changelog-types.outputs.bugfix }}
MINOR_ONLY: ${{ needs.changelog-types.outputs.minor_only }}