Skip to content

Commit ce7c135

Browse files
committed
rework deployment workflow
1 parent 28bdf0c commit ce7c135

File tree

1 file changed

+176
-47
lines changed

1 file changed

+176
-47
lines changed
Lines changed: 176 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
name: Deploy to wildcat-docker (Cloudflare Pages)
1+
name: Deploy wildcat-dashboard-ui (Cloudflare Pages)
22

33
on:
4-
# deploy new tag to CF project PREVIEW
4+
# auto deploy new tag to CF project PREVIEW
55
push:
66
tags:
77
- 'v*'
@@ -15,81 +15,210 @@ on:
1515
default: 'wildcat-dev-docker'
1616
type: choice
1717
options:
18-
- wildcat-docker
1918
- wildcat-dev-docker
19+
- wildcat-docker
20+
21+
env:
22+
NODE_VERSION: 22
23+
2024

2125
jobs:
22-
deploy:
2326

27+
######################################################################
28+
# ENV: wildcat-dev-docker
29+
# CF project: wildcat-dev-docker
30+
######################################################################
31+
deploy-wildcat-dev-docker:
2432
runs-on: ubuntu-latest
2533
permissions:
2634
contents: read
2735
deployments: write
2836

29-
strategy:
30-
matrix:
31-
include:
32-
- environment: 'wildcat-dev-docker'
33-
project_name: ${{ vars.CLOUDFLARE_PROJECT_DEV_DOCKER }}
34-
vite_api_base_url: ${{ vars.VITE_API_BASE_URL_DEV_DOCKER }}
35-
vite_keycloak_url: ${{ vars.VITE_KEYCLOAK_URL_DEV_DOCKER }}
36-
vite_keycloak_realm: 'dev'
37-
vite_keycloak_client_id: 'bff-dashboard'
38-
- environment: 'wildcat-docker'
39-
project_name: ${{ vars.CLOUDFLARE_PROJECT_DOCKER }}
40-
vite_api_base_url: ${{ vars.VITE_API_BASE_URL_DOCKER }}
41-
vite_keycloak_url: ${{ vars.VITE_KEYCLOAK_URL_DOCKER }}
42-
vite_keycloak_realm: 'dev'
43-
vite_keycloak_client_id: 'bff-dashboard'
37+
# set env
38+
name: Deploy to ${{ vars.CLOUDFLARE_PROJECT_DEV_DOCKER }}
39+
40+
if: |
41+
github.event_name == 'push' ||
42+
(github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'wildcat-dev-docker')
43+
44+
env:
45+
PROJECT_NAME: ${{ vars.CLOUDFLARE_PROJECT_DEV_DOCKER }}
46+
VITE_API_BASE_URL: ${{ vars.VITE_API_BASE_URL_DEV_DOCKER }}
47+
VITE_KEYCLOAK_URL: ${{ vars.VITE_KEYCLOAK_URL_DEV_DOCKER }}
48+
VITE_KEYCLOAK_REALM: ${{ vars.VITE_KEYCLOAK_REALM_DEV_DOCKER || 'dev' }}
49+
VITE_KEYCLOAK_CLIENT_ID: ${{ vars.VITE_KEYCLOAK_CLIENT_ID_DEV_DOCKER || 'bff-dashboard' }}
50+
VITE_API_MOCKING_ENABLED: 'false'
4451

52+
# checkout, validate on dispatch, setup and build, deploy
4553
steps:
46-
- name: Checkout repository
47-
uses: actions/checkout@v4
54+
- name: Checkout ${{ github.ref_name }}
55+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
4856
with:
4957
ref: ${{ github.ref }}
5058
fetch-depth: 0
5159

52-
- name: Validate Tag on Manual Dispatch
60+
- name: Validate tag on manual dispatch
5361
if: github.event_name == 'workflow_dispatch'
5462
run: |
5563
if [[ "${{ github.ref_type }}" != 'tag' ]]; then
5664
echo "::error::Manual deployments must be triggered from a tag."
5765
echo "::error::Please select a tag from the 'Use workflow from' dropdown, not a branch."
5866
exit 1
5967
fi
60-
echo "Validation successful: Running from tag '${{ github.ref_name }}'."
68+
echo "Validation successful: Running from tag '${{ github.ref_name }}'."
6169
62-
- name: Setup Node.js
63-
uses: actions/setup-node@v4
70+
- name: Setup Node
71+
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
6472
with:
65-
node-version: 22
73+
node-version: ${{ env.NODE_VERSION}}
74+
75+
- name: Cache node modules
76+
id: cache-npm
77+
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
78+
env:
79+
cache-name: cache-node-modules
80+
with:
81+
path: ~/.npm
82+
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
83+
restore-keys: |
84+
${{ runner.os }}-build-${{ env.cache-name }}-
85+
${{ runner.os }}-build-
86+
${{ runner.os }}-
87+
88+
- name: List the state of node modules
89+
if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }}
90+
continue-on-error: true
91+
run: npm list
6692

6793
- name: Install dependencies
6894
run: npm ci
6995

70-
- name: Build application for ${{ matrix.environment }}
96+
- name: Build app
7197
run: npm run build
72-
env:
73-
VITE_API_BASE_URL: ${{ matrix.vite_api_base_url }}
74-
VITE_KEYCLOAK_URL: ${{ matrix.vite_keycloak_url }}
75-
VITE_KEYCLOAK_REALM: ${{ matrix.vite_keycloak_realm }}
76-
VITE_KEYCLOAK_CLIENT_ID: ${{ matrix.vite_keycloak_client_id }}
77-
VITE_API_MOCKING_ENABLED: false
78-
79-
- name: Deploy ${{ matrix.environment }} to Cloudflare Pages (PREVIEW)
80-
id: deploy_preview
98+
99+
# PREVIEW branch
100+
- name: Deploy ${{ github.ref_name }} to PREVIEW branch of ${{ env.PROJECT_NAME }} project
101+
if: github.event_name == 'push'
102+
uses: cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65 # v3.14.1
103+
with:
104+
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
105+
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
106+
command: pages deploy dist --project-name=${{ env.PROJECT_NAME }} --branch=preview
107+
108+
# VERSION branch
109+
- name: Deploy ${{ github.ref_name }} to VERSION branch ${{ github.ref_name }} of ${{ env.PROJECT_NAME }} project
81110
if: github.event_name == 'push'
82-
uses: cloudflare/wrangler-action@v3
111+
uses: cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65 # v3.14.1
83112
with:
84-
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
85-
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
86-
command: pages deploy dist --project-name=${{ matrix.project_name }} --branch=preview
113+
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
114+
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
115+
command: pages deploy dist --project-name=${{ env.PROJECT_NAME }} --branch=${{ github.ref_name }}
116+
117+
# PRODUCTION branch
118+
- name: Deploy ${{ github.ref_name }} to PRODUCTION of ${{ env.PROJECT_NAME }} project
119+
if: github.event_name == 'workflow_dispatch'
120+
uses: cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65 # v3.14.1
121+
with:
122+
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
123+
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
124+
command: pages deploy dist --project-name=${{ env.PROJECT_NAME }}
125+
126+
127+
######################################################################
128+
# ENV: wildcat-docker
129+
# CF project: wildcat-docker
130+
######################################################################
131+
deploy-wildcat-docker:
132+
runs-on: ubuntu-latest
133+
permissions:
134+
contents: read
135+
deployments: write
136+
137+
# set env
138+
name: Deploy to ${{ vars.CLOUDFLARE_PROJECT_DOCKER }}
87139

88-
- name: Deploy ${{ matrix.environment }} to Cloudflare Pages (PRODUCTION)
89-
id: deploy_production
90-
if: github.event_name == 'workflow_dispatch' && github.event.inputs.environment == matrix.environment
91-
uses: cloudflare/wrangler-action@v3
140+
if: |
141+
github.event_name == 'push' ||
142+
(github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'wildcat-docker')
143+
144+
env:
145+
PROJECT_NAME: ${{ vars.CLOUDFLARE_PROJECT_DOCKER }}
146+
VITE_API_BASE_URL: ${{ vars.VITE_API_BASE_URL_DOCKER }}
147+
VITE_KEYCLOAK_URL: ${{ vars.VITE_KEYCLOAK_URL_DOCKER }}
148+
VITE_KEYCLOAK_REALM: ${{ vars.VITE_KEYCLOAK_REALM_DOCKER || 'dev' }}
149+
VITE_KEYCLOAK_CLIENT_ID: ${{ vars.VITE_KEYCLOAK_CLIENT_ID_DOCKER || 'bff-dashboard' }}
150+
VITE_API_MOCKING_ENABLED: 'false'
151+
152+
# checkout, validate on dispatch, setup and build, deploy
153+
steps:
154+
- name: Checkout ${{ github.ref_name }}
155+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
156+
with:
157+
ref: ${{ github.ref }}
158+
fetch-depth: 0
159+
160+
- name: Validate tag on manual dispatch
161+
if: github.event_name == 'workflow_dispatch'
162+
run: |
163+
if [[ "${{ github.ref_type }}" != 'tag' ]]; then
164+
echo "::error::Manual deployments must be triggered from a tag."
165+
echo "::error::Please select a tag from the 'Use workflow from' dropdown, not a branch."
166+
exit 1
167+
fi
168+
echo "Validation successful: Running from tag '${{ github.ref_name }}'."
169+
170+
- name: Setup Node
171+
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
172+
with:
173+
node-version: ${{ env.NODE_VERSION}}
174+
175+
- name: Cache node modules
176+
id: cache-npm
177+
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
178+
env:
179+
cache-name: cache-node-modules
180+
with:
181+
path: ~/.npm
182+
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
183+
restore-keys: |
184+
${{ runner.os }}-build-${{ env.cache-name }}-
185+
${{ runner.os }}-build-
186+
${{ runner.os }}-
187+
188+
- name: List the state of node modules
189+
if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }}
190+
continue-on-error: true
191+
run: npm list
192+
193+
- name: Install dependencies
194+
run: npm ci
195+
196+
- name: Build app
197+
run: npm run build
198+
199+
# PREVIEW branch
200+
- name: Deploy ${{ github.ref_name }} to PREVIEW branch of ${{ env.PROJECT_NAME }} project
201+
if: github.event_name == 'push'
202+
uses: cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65 # v3.14.1
203+
with:
204+
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
205+
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
206+
command: pages deploy dist --project-name=${{ env.PROJECT_NAME }} --branch=preview
207+
208+
# VERSION branch
209+
- name: Deploy ${{ github.ref_name }} to VERSION branch ${{ github.ref_name }} of ${{ env.PROJECT_NAME }} project
210+
if: github.event_name == 'push'
211+
uses: cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65 # v3.14.1
212+
with:
213+
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
214+
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
215+
command: pages deploy dist --project-name=${{ env.PROJECT_NAME }} --branch=${{ github.ref_name }}
216+
217+
# PRODUCTION branch
218+
- name: Deploy ${{ github.ref_name }} to PRODUCTION of ${{ env.PROJECT_NAME }} project
219+
if: github.event_name == 'workflow_dispatch'
220+
uses: cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65 # v3.14.1
92221
with:
93-
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
94-
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
95-
command: pages deploy dist --project-name=${{ matrix.project_name }} --branch=master
222+
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
223+
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
224+
command: pages deploy dist --project-name=${{ env.PROJECT_NAME }}

0 commit comments

Comments
 (0)