1- name : Deploy to wildcat-docker (Cloudflare Pages)
1+ name : Deploy wildcat-dashboard-ui (Cloudflare Pages)
22
33on :
4- # deploy new tag to CF project PREVIEW
4+ # auto deploy new tag to CF project PREVIEW
55 push :
66 tags :
77 - ' v*'
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
2125jobs :
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