-
Notifications
You must be signed in to change notification settings - Fork 4
133 lines (120 loc) · 4.52 KB
/
preview.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
name: Manual Expo Preview
on:
issue_comment:
types: [created]
permissions:
contents: read
pull-requests: write
issues: write
jobs:
check_permissions:
runs-on: ubuntu-latest
if: github.event_name == 'issue_comment' && contains(github.event.comment.body, '/preview') && github.event.issue.pull_request
outputs:
has_permissions: ${{ steps.check.outputs.has_permissions }}
pr_number: ${{ steps.get_pr_details.outputs.pr_number }}
pr_head_ref: ${{ steps.get_pr_details.outputs.pr_head_ref }}
steps:
- name: Get PR details
id: get_pr_details
uses: actions/github-script@v7
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const { data: pullRequest } = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.issue.number
});
core.setOutput('pr_number', pullRequest.number);
core.setOutput('pr_head_ref', pullRequest.head.ref);
- name: Check permissions
id: check
uses: actions/github-script@v7
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const { data: permission } = await github.rest.repos.getCollaboratorPermissionLevel({
owner: context.repo.owner,
repo: context.repo.repo,
username: context.payload.comment.user.login
});
const hasPermissions = ['admin', 'write'].includes(permission.permission);
core.setOutput('has_permissions', hasPermissions);
preview:
needs: check_permissions
if: needs.check_permissions.outputs.has_permissions == 'true'
runs-on: ubuntu-latest
steps:
- name: Get PR details
uses: actions/github-script@v7
id: pr-details
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const { data: pr } = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: ${{ needs.check_permissions.outputs.pr_number }}
});
core.setOutput('head_sha', pr.head.sha);
core.setOutput('head_repo', pr.head.repo.full_name);
core.setOutput('head_ref', pr.head.ref);
- uses: actions/checkout@v4
with:
repository: ${{ steps.pr-details.outputs.head_repo }}
ref: ${{ steps.pr-details.outputs.head_ref }}
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: npm install
- name: Setup Expo
uses: expo/expo-github-action@v8
with:
eas-version: latest
eas-cache: true
expo-version: latest
expo-cache: true
packager: npm
token: ${{ secrets.EXPO_TOKEN }}
- name: Create preview
id: preview
uses: expo/expo-github-action/preview@v8
with:
comment: false
qr-target: 'expo-go'
github-token: ${{ secrets.GITHUB_TOKEN }}
command: eas update --auto --branch pr-${{ needs.check_permissions.outputs.pr_head_ref }}
- name: Find Comment
uses: peter-evans/find-comment@v3
id: find_comment
with:
issue-number: ${{ needs.check_permissions.outputs.pr_number }}
comment-author: 'github-actions[bot]'
body-includes: Expo Preview
- name: Create or Update Comment
uses: peter-evans/create-or-update-comment@v4
with:
issue-number: ${{ needs.check_permissions.outputs.pr_number }}
comment-id: ${{ steps.find_comment.outputs.comment-id }}
body: |
## Expo Preview
${{steps.preview.outputs.comment}}
> Commit hash: ${{steps.preview.outputs.gitCommitHash}}
> Update published at: ${{steps.preview.outputs.createdAt}}
edit-mode: replace
pr_comment:
needs: check_permissions
if: needs.check_permissions.outputs.has_permissions != 'true'
runs-on: ubuntu-latest
steps:
- name: Comment on PR (insufficient permissions)
uses: peter-evans/create-or-update-comment@v4
with:
issue-number: ${{ needs.check_permissions.outputs.pr_number }}
body: |
Sorry, you do not have the required permissions to trigger an Expo preview.
Please ask a maintainer to review and trigger the preview if necessary.