Skip to content

Commit 44a4c36

Browse files
nicolethoenclaude
andcommitted
fix: restrict PR preview deploys to team members
Adds a permission check so previews only deploy when a team member (OWNER, MEMBER, or COLLABORATOR) opens the PR or comments /deploy-preview. Removes tests/a11y from the preview workflow since those run separately via check-pr. Uses the shared surge-preview action. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 54a912f commit 44a4c36

1 file changed

Lines changed: 48 additions & 35 deletions

File tree

.github/workflows/pr-preview.yml

Lines changed: 48 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,60 @@
1-
### WARNING -- this file was generated by generate-workflows
21
name: pr-preview
3-
on: pull_request_target
2+
on:
3+
pull_request_target:
4+
issue_comment:
5+
types: [created]
6+
47
jobs:
5-
build-upload:
8+
check-permissions:
9+
runs-on: ubuntu-latest
10+
if: >-
11+
github.event_name == 'pull_request_target' ||
12+
(github.event_name == 'issue_comment' &&
13+
github.event.issue.pull_request &&
14+
contains(github.event.comment.body, '/deploy-preview'))
15+
outputs:
16+
allowed: ${{ steps.check-team.outputs.allowed }}
17+
pr-number: ${{ steps.check-team.outputs.number }}
18+
steps:
19+
- name: Get PR info and check permissions
20+
id: check-team
21+
env:
22+
EVENT_NAME: ${{ github.event_name }}
23+
PR_NUMBER: ${{ github.event.pull_request.number }}
24+
PR_ASSOCIATION: ${{ github.event.pull_request.author_association }}
25+
COMMENT_NUMBER: ${{ github.event.issue.number }}
26+
COMMENT_ASSOCIATION: ${{ github.event.comment.author_association }}
27+
run: |
28+
if [[ "$EVENT_NAME" == "pull_request_target" ]]; then
29+
echo "number=$PR_NUMBER" >> $GITHUB_OUTPUT
30+
ASSOCIATION="$PR_ASSOCIATION"
31+
else
32+
echo "number=$COMMENT_NUMBER" >> $GITHUB_OUTPUT
33+
ASSOCIATION="$COMMENT_ASSOCIATION"
34+
fi
35+
36+
if [[ "$ASSOCIATION" == "OWNER" || "$ASSOCIATION" == "MEMBER" || "$ASSOCIATION" == "COLLABORATOR" ]]; then
37+
echo "allowed=true" >> $GITHUB_OUTPUT
38+
echo "User is a repo $ASSOCIATION — allowed"
39+
else
40+
echo "allowed=false" >> $GITHUB_OUTPUT
41+
echo "User association is $ASSOCIATION — not allowed"
42+
fi
43+
44+
deploy-preview:
645
runs-on: ubuntu-latest
46+
needs: check-permissions
47+
if: needs.check-permissions.outputs.allowed == 'true'
748
env:
849
SURGE_LOGIN: ${{ secrets.SURGE_LOGIN }}
950
SURGE_TOKEN: ${{ secrets.SURGE_TOKEN }}
1051
GH_PR_TOKEN: ${{ secrets.GH_PR_TOKEN }}
11-
GH_PR_NUM: ${{ github.event.number }}
52+
GH_PR_NUM: ${{ needs.check-permissions.outputs.pr-number }}
1253
steps:
1354
- uses: actions/checkout@v4
14-
# Yes, we really want to checkout the PR
1555
- run: |
1656
git fetch origin pull/$GH_PR_NUM/head:tmp
1757
git checkout tmp
18-
19-
- run: |
20-
git rev-parse origin/main
21-
git rev-parse HEAD
22-
git rev-parse origin/main..HEAD
23-
git log origin/main..HEAD --format="%b"
24-
25-
# Yes, we really want to checkout the PR
26-
# Injected by generate-workflows.js
2758
- uses: actions/setup-node@v4
2859
with:
2960
node-version: '20'
@@ -37,27 +68,9 @@ jobs:
3768
if: steps.npm-cache.outputs.cache-hit != 'true'
3869
- run: npm run build
3970
name: Build data view
40-
- uses: actions/cache@v4
41-
id: docs-cache
42-
name: Load webpack cache
43-
with:
44-
path: '.cache'
45-
key: ${{ runner.os }}-v4-${{ hashFiles('package-lock.json') }}
4671
- run: npm run build:docs
4772
name: Build docs
48-
- run: node .github/upload-preview.js packages/module/public
49-
name: Upload docs
50-
if: always()
51-
- uses: actions/cache@v4
52-
id: puppeteer-cache
53-
name: Cache Puppeteer browsers
73+
- name: Upload docs
74+
uses: patternfly/.github/.github/actions/surge-preview@main
5475
with:
55-
path: ~/.cache/puppeteer
56-
key: ${{ runner.os }}-puppeteer-${{ hashFiles('package-lock.json') }}
57-
- name: Install Chrome for Puppeteer
58-
run: npx puppeteer browsers install chrome
59-
- run: npm run serve:docs & npm run test:a11y
60-
name: a11y tests
61-
- run: node .github/upload-preview.js packages/module/coverage
62-
name: Upload a11y report
63-
if: always()
76+
folder: packages/module/public

0 commit comments

Comments
 (0)