-
Notifications
You must be signed in to change notification settings - Fork 5
195 lines (187 loc) · 5.79 KB
/
ci.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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
name: CI
on:
push:
branches:
- staging
- feature*
jobs:
check-lint:
name: "Check / Lint"
runs-on: ubuntu-latest
container:
image: ghcr.io/matrixai/github-runner
steps:
- uses: actions/checkout@v4
- name: Run linting
run: |
nix develop .#ci --command bash -c $'
npm run lint
'
check-build:
name: "Check / Build"
runs-on: ubuntu-latest
container:
image: ghcr.io/matrixai/github-runner
steps:
- uses: actions/checkout@v4
with:
lfs: true
- name: Run build
run: |
nix develop .#ci --command bash -c $'
npm run build --verbose
'
- uses: actions/upload-artifact@v4
with:
name: public
path: ./public
check-deployment:
name: "Check / Deployment"
runs-on: ubuntu-latest
container:
image: ghcr.io/matrixai/github-runner
concurrency:
group: check-deployment
cancel-in-progress: false
environment: feature
needs: check-build
if: startsWith(github.ref, 'refs/heads/feature')
steps:
- uses: actions/checkout@v4
with:
lfs: true
- uses: actions/download-artifact@v4
with:
name: public
path: ./public
- name: Run deployment
env:
name: "feature/${{ github.ref_name }}"
url: "https://${{ github.ref_name }}.dev.polykey.com/docs"
deployment_tier: 'development'
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
POLYKEY_DOCS_ENV: ${{ secrets.POLYKEY_DOCS_ENV }}
run: |
echo 'Perform service deployment for feature'
nix develop .#ci --command bash -c $'
npm run deploy -- \
--feature "$GITHUB_REF_NAME" \
--env "$GITHUB_REF_NAME"
'
build-pull:
name: "Build / Pull Request"
runs-on: ubuntu-latest
needs:
- check-lint
- check-build
if: github.ref == 'refs/heads/staging'
steps:
- uses: actions/checkout@v4
- name: Create pull request
env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
run: |
gh pr create \
--head staging \
--base master \
--title "ci: merge staging to master" \
--body "This is an automatic PR generated by the CI/CD pipeline. This will be automatically fast-forward merged if successful." \
--assignee "@me" \
--no-maintainer-edit || true
printf "Pipeline Attempt on $GITHUB_RUN_ID for $GITHUB_SHA\n\n$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" \
| gh pr comment staging \
--body-file - \
--repo "$GH_PROJECT_PATH"
integration-deployment:
name: "Integration / Deployment"
runs-on: ubuntu-latest
container:
image: ghcr.io/matrixai/github-runner
concurrency:
group: integration-deployment
cancel-in-progress: false
environment: staging
needs: [check-lint, check-build]
if: github.ref == 'refs/heads/staging'
steps:
- uses: actions/checkout@v4
with:
lfs: true
- uses: actions/download-artifact@v4
with:
name: public
path: ./public
- name: Run deployment
env:
name: 'staging'
url: 'https://staging.polykey.com/docs/'
deployment_tier: 'staging'
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
POLYKEY_DOCS_ENV: ${{ secrets.POLYKEY_DOCS_ENV }}
run: |
nix develop .#ci --command bash -c $'
npm run deploy -- --env staging
'
integration-merge:
name: "Integration / Merge"
runs-on: ubuntu-latest
concurrency:
group: integration-merge
cancel-in-progress: true
needs:
- build-pull
- integration-deployment
if: github.ref == 'refs/heads/staging'
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GH_TOKEN }}
- name: Merge into master
env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
GIT_AUTHOR_EMAIL: ${{ secrets.GIT_AUTHOR_EMAIL }}
GIT_AUTHOR_NAME: ${{ secrets.GIT_AUTHOR_NAME }}
GIT_COMMITTER_EMAIL: ${{ secrets.GIT_COMMITTER_EMAIL }}
GIT_COMMITTER_NAME: ${{ secrets.GIT_COMMITTER_NAME }}
run: |
printf "Pipeline Succeeded on $GITHUB_RUN_ID for $GITHUB_SHA\n\n$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" \
| gh pr comment staging \
--body-file - \
--repo "$GH_PROJECT_PATH"
git checkout master
git merge --ff-only "$GITHUB_SHA"
git push origin master
release-deployment:
name: "Release / Deployment"
runs-on: ubuntu-latest
container:
image: ghcr.io/matrixai/github-runner
concurrency:
group: release-deployment
cancel-in-progress: false
environment: production
needs: integration-merge
if: github.ref == 'refs/heads/staging'
steps:
- uses: actions/checkout@v4
with:
lfs: true
- uses: actions/download-artifact@v4
with:
name: public
path: ./public
- name: Run deployment
env:
name: 'production'
url: 'https://polykey.com/docs/'
deployment_tier: 'production'
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
POLYKEY_DOCS_ENV: ${{ secrets.POLYKEY_DOCS_ENV }}
run: |
nix develop .#ci --command bash -c $'
npm run deploy -- --env production
'