-
Notifications
You must be signed in to change notification settings - Fork 7
146 lines (124 loc) · 3.89 KB
/
preview-deploy.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
134
135
136
137
138
139
140
141
142
143
144
145
146
name: Deploy PR Preview
on:
pull_request:
types: [opened, synchronize, reopened]
branches: ['main']
permissions:
contents: read
pages: write
id-token: write
pull-requests: write
security-events: write
# Cancel in-progress runs for PRs
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
quality:
name: Code Quality
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0 # Fetch all history for all branches and tags
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 18
cache: 'npm'
- name: Install dependencies
run: |
npm ci
# Cache the node_modules directory
id: npm-cache
env:
cache-name: cache-node-modules
with:
path: node_modules
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: Lint
run: npm run lint
continue-on-error: true
- name: Type check
run: |
npm run typecheck || echo "Type check failed but continuing"
continue-on-error: true
- name: Run unit tests
run: npm test
preview_and_test:
name: Preview Deploy & E2E
needs: quality
runs-on: ubuntu-latest
environment:
name: pr-preview
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 18
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build
env:
VITE_APP_ENV: preview
- name: Cache build output
uses: actions/cache@v3
with:
path: dist
key: ${{ runner.os }}-build-${{ github.sha }}
- name: Setup Pages
uses: actions/configure-pages@v3
- name: Upload artifact
uses: actions/upload-pages-artifact@v2
with:
path: './dist'
- name: Deploy PR Preview
id: deployment
uses: actions/deploy-pages@v2
with:
preview: true
- name: Comment PR
uses: actions/github-script@v6
with:
script: |
const url = `${{ steps.deployment.outputs.page_url }}`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `🚀 Preview URL: ${url}`
});
- name: Run E2E tests
id: e2e
uses: OctoMind-dev/automagically-action-execute@v2
with:
url: ${{ steps.deployment.outputs.page_url }}
token: ${{ secrets.AUTOMAGICALLY_TOKEN }}
testTargetId: ${{ secrets.AUTOMAGICALLY_TEST_TARGET_ID }}
blocking: true
- name: Report Status
if: always()
uses: actions/github-script@v6
with:
script: |
const { owner, repo } = context.repo;
const run_id = context.runId;
const run_url = `https://github.com/${owner}/${repo}/actions/runs/${run_id}`;
const status = `${process.env.GITHUB_WORKFLOW} workflow ${context.job} job status: ${steps.e2e.outcome}`;
const body = `### Workflow Status\n${status}\n[View Run Details](${run_url})`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: owner,
repo: repo,
body: body
});