125 lines
5.8 KiB
YAML
125 lines
5.8 KiB
YAML
name: Branch Created
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
branch-name:
|
|
description: Branch name (e.g. `29-x-y`)
|
|
required: true
|
|
type: string
|
|
create:
|
|
|
|
permissions: {}
|
|
|
|
jobs:
|
|
release-branch-created:
|
|
name: Release Branch Created
|
|
if: ${{ github.event_name == 'workflow_dispatch' || (github.event.ref_type == 'branch' && endsWith(github.event.ref, '-x-y') && !startsWith(github.event.ref, 'roller')) }}
|
|
permissions:
|
|
contents: read
|
|
pull-requests: write
|
|
repository-projects: write # Required for labels
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Determine Major Version
|
|
id: check-major-version
|
|
run: |
|
|
if [[ ${{ github.event.inputs.branch-name || github.event.ref }} =~ ^([0-9]+)-x-y$ ]]; then
|
|
echo "MAJOR=${BASH_REMATCH[1]}" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "Not a release branch: ${{ github.event.inputs.branch-name || github.event.ref }}"
|
|
fi
|
|
- name: New Release Branch Tasks
|
|
if: ${{ steps.check-major-version.outputs.MAJOR }}
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
GH_REPO: electron/electron
|
|
MAJOR: ${{ steps.check-major-version.outputs.MAJOR }}
|
|
NUM_SUPPORTED_VERSIONS: 3
|
|
run: |
|
|
PREVIOUS_MAJOR=$((MAJOR - 1))
|
|
UNSUPPORTED_MAJOR=$((MAJOR - NUM_SUPPORTED_VERSIONS - 1))
|
|
|
|
# Create new labels
|
|
gh label create $MAJOR-x-y --color 8d9ee8 || true
|
|
gh label create target/$MAJOR-x-y --color ad244f --description "PR should also be added to the \"${MAJOR}-x-y\" branch." || true
|
|
gh label create merged/$MAJOR-x-y --color 61a3c6 --description "PR was merged to the \"${MAJOR}-x-y\" branch." || true
|
|
gh label create in-flight/$MAJOR-x-y --color db69a6 || true
|
|
gh label create needs-manual-bp/$MAJOR-x-y --color 8b5dba || true
|
|
|
|
# Change color of old labels
|
|
gh label edit $UNSUPPORTED_MAJOR-x-y --color ededed || true
|
|
gh label edit target/$UNSUPPORTED_MAJOR-x-y --color ededed || true
|
|
gh label edit merged/$UNSUPPORTED_MAJOR-x-y --color ededed || true
|
|
gh label edit in-flight/$UNSUPPORTED_MAJOR-x-y --color ededed || true
|
|
gh label edit needs-manual-bp/$UNSUPPORTED_MAJOR-x-y --color ededed || true
|
|
|
|
# Add the new target label to any PRs which:
|
|
# * target the previous major
|
|
# * are in-flight for the previous major
|
|
# * need manual backport for the previous major
|
|
for PREVIOUS_MAJOR_LABEL in target/$PREVIOUS_MAJOR-x-y in-flight/$PREVIOUS_MAJOR-x-y needs-manual-bp/$PREVIOUS_MAJOR-x-y; do
|
|
PULL_REQUESTS=$(gh pr list --label $PREVIOUS_MAJOR_LABEL --jq .[].number --json number --limit 500)
|
|
if [[ $PULL_REQUESTS ]]; then
|
|
echo $PULL_REQUESTS | xargs -n 1 gh pr edit --add-label target/$MAJOR-x-y || true
|
|
fi
|
|
done
|
|
- name: Generate GitHub App token
|
|
if: ${{ steps.check-major-version.outputs.MAJOR }}
|
|
uses: electron/github-app-auth-action@384fd19694fe7b6dcc9a684746c6976ad78228ae # v1.1.1
|
|
id: generate-token
|
|
with:
|
|
creds: ${{ secrets.RELEASE_BOARD_GH_APP_CREDS }}
|
|
org: electron
|
|
- name: Generate Release Project Board Metadata
|
|
if: ${{ steps.check-major-version.outputs.MAJOR }}
|
|
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
|
id: generate-project-metadata
|
|
with:
|
|
script: |
|
|
const major = ${{ steps.check-major-version.outputs.MAJOR }}
|
|
const nextMajor = major + 1
|
|
const prevMajor = major - 1
|
|
|
|
core.setOutput("major", major)
|
|
core.setOutput("next-major", nextMajor)
|
|
core.setOutput("prev-major", prevMajor)
|
|
core.setOutput("prev-prev-major", prevMajor - 1)
|
|
core.setOutput("template-view", JSON.stringify({
|
|
major,
|
|
"next-major": nextMajor,
|
|
"prev-major": prevMajor,
|
|
}))
|
|
- name: Create Release Project Board
|
|
if: ${{ steps.check-major-version.outputs.MAJOR }}
|
|
uses: dsanders11/project-actions/copy-project@82e99438bd44a14ad18d92d036dbc25cbfb9a8c4 # v1.2.0
|
|
id: create-release-board
|
|
with:
|
|
drafts: true
|
|
project-number: 64
|
|
# TODO - Set to public once GitHub fixes their GraphQL bug
|
|
# public: true
|
|
# TODO - Enable once GitHub doesn't require overly broad, read
|
|
# and write permission for repo "Contents" to link
|
|
# link-to-repository: electron/electron
|
|
template-view: ${{ steps.generate-project-metadata.outputs.template-view }}
|
|
title: ${{ steps.generate-project-metadata.outputs.major }}-x-y
|
|
token: ${{ steps.generate-token.outputs.token }}
|
|
- name: Dump Release Project Board Contents
|
|
if: ${{ steps.check-major-version.outputs.MAJOR }}
|
|
run: gh project item-list ${{ steps.create-release-board.outputs.number }} --owner electron --format json | jq
|
|
env:
|
|
GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }}
|
|
- name: Find Previous Release Project Board
|
|
if: ${{ steps.check-major-version.outputs.MAJOR }}
|
|
uses: dsanders11/project-actions/find-project@82e99438bd44a14ad18d92d036dbc25cbfb9a8c4 # v1.2.0
|
|
id: find-prev-release-board
|
|
with:
|
|
title: ${{ steps.generate-project-metadata.outputs.prev-prev-major }}-x-y
|
|
token: ${{ steps.generate-token.outputs.token }}
|
|
- name: Close Previous Release Project Board
|
|
if: ${{ steps.check-major-version.outputs.MAJOR }}
|
|
uses: dsanders11/project-actions/close-project@82e99438bd44a14ad18d92d036dbc25cbfb9a8c4 # v1.2.0
|
|
with:
|
|
project-number: ${{ steps.find-prev-release-board.outputs.number }}
|
|
token: ${{ steps.generate-token.outputs.token }}
|