1+ name : Deploy wildcat-dashboard-ui (Cloudflare Pages)
2+
3+ on :
4+ # auto deploy new tag to CF project PREVIEW
5+ push :
6+ tags :
7+ - ' v*'
8+
9+ # promote a version to CF project PRODUCTION
10+ workflow_dispatch :
11+ inputs :
12+ environment :
13+ description : ' target'
14+ required : true
15+ default : ' wildcat-dev-docker'
16+ type : choice
17+ options :
18+ - wildcat-dev-docker
19+ - wildcat-docker
20+
21+ env :
22+ NODE_VERSION : 22
23+
24+
25+ jobs :
26+
27+ # #####################################################################
28+ # ENV: wildcat-dev-docker
29+ # CF project: wildcat-dev-docker
30+ # #####################################################################
31+ deploy-wildcat-dev-docker :
32+ runs-on : ubuntu-latest
33+ permissions :
34+ contents : read
35+ deployments : write
36+
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'
51+
52+ # checkout, validate on dispatch, setup and build, deploy
53+ steps :
54+ - name : Checkout ${{ github.ref_name }}
55+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
56+ with :
57+ ref : ${{ github.ref }}
58+ fetch-depth : 0
59+
60+ - name : Validate tag on manual dispatch
61+ if : github.event_name == 'workflow_dispatch'
62+ run : |
63+ if [[ "${{ github.ref_type }}" != 'tag' ]]; then
64+ echo "::error::Manual deployments must be triggered from a tag."
65+ echo "::error::Please select a tag from the 'Use workflow from' dropdown, not a branch."
66+ exit 1
67+ fi
68+ echo "Validation successful: Running from tag '${{ github.ref_name }}'."
69+
70+ - name : Setup Node
71+ uses : actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
72+ with :
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
92+
93+ - name : Install dependencies
94+ run : npm ci
95+
96+ - name : Build app
97+ run : npm run build
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
110+ if : github.event_name == 'push'
111+ uses : cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65 # v3.14.1
112+ with :
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 }}
139+
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
221+ with :
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