Skip to content

Commit 93ce0d0

Browse files
committed
chore(ci): migrate draft and publish release workflows to GitHub App token [SEC-58]
- Migrate draft-new-release.yml and publish-new-release.yml from PAT to GitHub App token - Add explicit job-level permissions (contents: read) for GITHUB_TOKEN - Generate GitHub App token early with permission-contents: write - Pass App token to checkout, git operations, and PR creation - Ensures PRs trigger CI checks and commits are verified Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> 🔒 Scanned for secrets using gitleaks 8.30.0
1 parent 0794d7a commit 93ce0d0

2 files changed

Lines changed: 25 additions & 4 deletions

File tree

.github/workflows/draft-new-release.yml

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ permissions:
99
jobs:
1010
draft-new-release:
1111
permissions:
12-
contents: write # for Git to git push
12+
contents: read # GITHUB_TOKEN only needs read for checkout
1313
name: Draft a new release
1414
runs-on: ubuntu-latest
1515
if: startsWith(github.ref, 'refs/heads/fix/') || startsWith(github.ref, 'refs/heads/feat/')
@@ -19,9 +19,19 @@ jobs:
1919
with:
2020
egress-policy: audit
2121

22+
- name: Generate GitHub App Token
23+
id: generate-token
24+
uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4
25+
with:
26+
app-id: ${{ vars.RELEASE_APP_ID }}
27+
private-key: ${{ secrets.RELEASE_PRIVATE_KEY }}
28+
permission-contents: write # to create commits, tags, and releases
29+
permission-pull-requests: write # to create and update PRs
30+
2231
- name: Checkout source branch
2332
uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
2433
with:
34+
token: ${{ steps.generate-token.outputs.token }}
2535
fetch-depth: 0
2636

2737
- name: Set Node 16
@@ -93,7 +103,7 @@ jobs:
93103
with:
94104
source_branch: ${{ steps.create-release.outputs.branch_name }}
95105
destination_branch: 'master'
96-
github_token: ${{ secrets.PAT }}
106+
github_token: ${{ steps.generate-token.outputs.token }}
97107
pr_title: "chore(release): pulling ${{ steps.create-release.outputs.branch_name }} into master"
98108
pr_body: ":crown: *An automated PR*\n\n${{ steps.finish-release.outputs.commit_summary }}"
99109
pr_reviewer: '@rudderlabs/sdk-ios'

.github/workflows/publish-new-release.yml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ on:
99

1010
jobs:
1111
release:
12+
permissions:
13+
contents: read # GITHUB_TOKEN only needs read for checkout
1214
name: Publish new release
1315
runs-on: ubuntu-latest
1416
if: startsWith(github.event.pull_request.head.ref, 'release/') && github.event.pull_request.merged == true # only merged pull requests must trigger this job
@@ -18,6 +20,14 @@ jobs:
1820
with:
1921
egress-policy: audit
2022

23+
- name: Generate GitHub App Token
24+
id: generate-token
25+
uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4
26+
with:
27+
app-id: ${{ vars.RELEASE_APP_ID }}
28+
private-key: ${{ secrets.RELEASE_PRIVATE_KEY }}
29+
permission-contents: write # to create commits, tags, and releases
30+
2131
- name: Extract version from branch name (for release branches)
2232
id: extract-version
2333
run: |
@@ -28,6 +38,7 @@ jobs:
2838
- name: Checkout source branch
2939
uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
3040
with:
41+
token: ${{ steps.generate-token.outputs.token }}
3142
fetch-depth: 0
3243

3344
- name: Set Node 16
@@ -39,8 +50,8 @@ jobs:
3950
id: create_release
4051
env:
4152
HUSKY: 0
42-
GITHUB_TOKEN: ${{ secrets.PAT }}
43-
CONVENTIONAL_GITHUB_RELEASER_TOKEN: ${{ secrets.PAT }}
53+
GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }}
54+
CONVENTIONAL_GITHUB_RELEASER_TOKEN: ${{ steps.generate-token.outputs.token }}
4455
run: |
4556
npx conventional-github-releaser -p angular
4657

0 commit comments

Comments
 (0)