Skip to content

Commit 47f31cd

Browse files
committed
refactor: Extract auto-approve repo list into a text file
Move the list of auto-approved repos from a long chain of startsWith() conditions in the workflow YAML into a plain text file (one repo per line). The workflow now does a sparse checkout of just that file and uses grep to match the repo extracted from the issue title. The job-level if-condition still gates on the actor and a 'publish: ' title prefix so unrelated issues skip the job entirely. This also passes the issue title through an env var instead of inline ${{ }} interpolation to prevent shell injection.
1 parent 943baa0 commit 47f31cd

2 files changed

Lines changed: 51 additions & 41 deletions

File tree

.github/workflows/auto-approve.yml

Lines changed: 15 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -6,55 +6,29 @@ jobs:
66
auto-approve:
77
runs-on: ubuntu-latest
88
if: |
9-
(
9+
(
1010
github.actor == 'getsentry-release' ||
1111
github.actor == 'sentry-release-bot[bot]'
12-
) && (
13-
startsWith(github.event.issue.title, 'publish: getsentry/arroyo@') ||
14-
startsWith(github.event.issue.title, 'publish: getsentry/auto-type-annotate@') ||
15-
startsWith(github.event.issue.title, 'publish: getsentry/devenv@') ||
16-
startsWith(github.event.issue.title, 'publish: getsentry/infra-event-notifier@') ||
17-
startsWith(github.event.issue.title, 'publish: getsentry/jest-sentry-environment@') ||
18-
startsWith(github.event.issue.title, 'publish: getsentry/js-source-scopes@') ||
19-
startsWith(github.event.issue.title, 'publish: getsentry/json-schema-diff@') ||
20-
startsWith(github.event.issue.title, 'publish: getsentry/objectstore/clients@') ||
21-
startsWith(github.event.issue.title, 'publish: getsentry/ophio@') ||
22-
startsWith(github.event.issue.title, 'publish: getsentry/pdb@') ||
23-
startsWith(github.event.issue.title, 'publish: getsentry/pyo3-python-tracing-subscriber@') ||
24-
startsWith(github.event.issue.title, 'publish: getsentry/pytest-sentry@') ||
25-
startsWith(github.event.issue.title, 'publish: getsentry/relay/py@') ||
26-
startsWith(github.event.issue.title, 'publish: getsentry/responses@') ||
27-
startsWith(github.event.issue.title, 'publish: getsentry/rust-proguard@') ||
28-
startsWith(github.event.issue.title, 'publish: getsentry/rust-sourcemap@') ||
29-
startsWith(github.event.issue.title, 'publish: getsentry/rust-usage-accountant@') ||
30-
startsWith(github.event.issue.title, 'publish: getsentry/script-runner@') ||
31-
startsWith(github.event.issue.title, 'publish: getsentry/sentry-forked-django-stubs@') ||
32-
startsWith(github.event.issue.title, 'publish: getsentry/sentry-forked-djangorestframework-stubs@') ||
33-
startsWith(github.event.issue.title, 'publish: getsentry/sentry-forked-jsonnet@') ||
34-
startsWith(github.event.issue.title, 'publish: getsentry/sentry-infra-tools@') ||
35-
startsWith(github.event.issue.title, 'publish: getsentry/sentry-kafka-management@') ||
36-
startsWith(github.event.issue.title, 'publish: getsentry/sentry-kafka-schemas@') ||
37-
startsWith(github.event.issue.title, 'publish: getsentry/sentry-protos@') ||
38-
startsWith(github.event.issue.title, 'publish: getsentry/sentry-redis-tools@') ||
39-
startsWith(github.event.issue.title, 'publish: getsentry/service-registry@') ||
40-
startsWith(github.event.issue.title, 'publish: getsentry/skrooge@') ||
41-
startsWith(github.event.issue.title, 'publish: getsentry/snuba-sdk@') ||
42-
startsWith(github.event.issue.title, 'publish: getsentry/statsdproxy@') ||
43-
startsWith(github.event.issue.title, 'publish: getsentry/status-page-list@') ||
44-
startsWith(github.event.issue.title, 'publish: getsentry/streams/sentry_streams@') ||
45-
startsWith(github.event.issue.title, 'publish: getsentry/symbolic@') ||
46-
startsWith(github.event.issue.title, 'publish: getsentry/usage-accountant@') ||
47-
startsWith(github.event.issue.title, 'publish: getsentry/watto@') ||
48-
startsWith(github.event.issue.title, 'publish: getsentry/sentry-api-schema@') ||
49-
false
50-
)
12+
) &&
13+
startsWith(github.event.issue.title, 'publish: ')
5114
steps:
15+
- uses: actions/checkout@v4
16+
with:
17+
sparse-checkout: auto-approve-repos.txt
18+
sparse-checkout-cone-mode: false
5219
- name: Get auth token
5320
id: token
5421
uses: actions/create-github-app-token@v2.2.1
5522
with:
5623
app-id: ${{ vars.SENTRY_RELEASE_BOT_CLIENT_ID }}
5724
private-key: ${{ secrets.SENTRY_RELEASE_BOT_PRIVATE_KEY }}
58-
- run: gh issue edit ${{ github.event.issue.html_url }} --add-label accepted
25+
- name: Auto-approve if repo is in the list
5926
env:
6027
GH_TOKEN: ${{ steps.token.outputs.token }}
28+
ISSUE_TITLE: ${{ github.event.issue.title }}
29+
ISSUE_URL: ${{ github.event.issue.html_url }}
30+
run: |
31+
REPO=$(echo "$ISSUE_TITLE" | sed -n 's/^publish: \(.*\)@.*/\1/p')
32+
if [ -n "$REPO" ] && grep -qxF "$REPO" auto-approve-repos.txt; then
33+
gh issue edit "$ISSUE_URL" --add-label accepted
34+
fi

auto-approve-repos.txt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
getsentry/arroyo
2+
getsentry/auto-type-annotate
3+
getsentry/devenv
4+
getsentry/infra-event-notifier
5+
getsentry/jest-sentry-environment
6+
getsentry/json-schema-diff
7+
getsentry/js-source-scopes
8+
getsentry/objectstore/clients
9+
getsentry/ophio
10+
getsentry/pdb
11+
getsentry/pyo3-python-tracing-subscriber
12+
getsentry/pytest-sentry
13+
getsentry/relay/py
14+
getsentry/responses
15+
getsentry/rust-proguard
16+
getsentry/rust-sourcemap
17+
getsentry/rust-usage-accountant
18+
getsentry/script-runner
19+
getsentry/sentry-api-schema
20+
getsentry/sentry-forked-djangorestframework-stubs
21+
getsentry/sentry-forked-django-stubs
22+
getsentry/sentry-forked-jsonnet
23+
getsentry/sentry-infra-tools
24+
getsentry/sentry-kafka-management
25+
getsentry/sentry-kafka-schemas
26+
getsentry/sentry-protos
27+
getsentry/sentry-redis-tools
28+
getsentry/service-registry
29+
getsentry/skrooge
30+
getsentry/snuba-sdk
31+
getsentry/statsdproxy
32+
getsentry/status-page-list
33+
getsentry/streams/sentry_streams
34+
getsentry/symbolic
35+
getsentry/usage-accountant
36+
getsentry/watto

0 commit comments

Comments
 (0)