Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
tremble committed Jan 10, 2025
1 parent c185dc3 commit 9e2c4e5
Showing 1 changed file with 123 additions and 0 deletions.
123 changes: 123 additions & 0 deletions .github/workflows/backports.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
---
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:
# if: |
# ${{
# !contains(github.event.pull_request.labels.*.name, 'do_not_backport') && (
# github.event.label.name == 'mergeit' || github.event.pull_request.action == 'syncronize'
# )
# }}
#
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:
- env:
EVENT_CONTEXT: ${{ toJson(github.event) }}
run: |
echo "${EVENT_CONTEXT}"
- 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: Strip backporting
if: |
{{ needs.changelog-types.outputs.no_backport == "0" }}
shell: bash {0}
run: |
# 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(",")'
)
echo (remove ${CURRENT_LABELS})
if [[ -n ${CURRENT_LABELS} ]] ; then
gh pr -R "${GITHUB_REPOSITORY}" edit "${{ github.event.pull_request.number }}" \
--add-label ${BACKPORT_FORBIDDEN} \
--remove-label "${CURRENT_LABELS}"
else
gh pr -R "${GITHUB_REPOSITORY}" edit "${{ github.event.pull_request.number }}" \
--add-label ${BACKPORT_FORBIDDEN}
fi
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 }} fi
- name: Strip backporting
if: |
{{ needs.changelog-types.outputs.no_backport != "0" }}
shell: bash {0}
run: |
# 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 }}

0 comments on commit 9e2c4e5

Please sign in to comment.