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 }}