1
+ name : Deploy to wildcat-docker (Cloudflare Pages)
2
+
3
+ on :
4
+ # 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-docker
19
+ - wildcat-dev-docker
20
+
21
+ jobs :
22
+ deploy :
23
+
24
+ runs-on : ubuntu-latest
25
+ permissions :
26
+ contents : read
27
+ deployments : write
28
+
29
+ # define environments
30
+ strategy :
31
+ matrix :
32
+ include :
33
+ - environment : ' wildcat-dev-docker'
34
+ project_name : ${{ secrets.CLOUDFLARE_PROJECT_DEV_DOCKER }}
35
+ vite_api_base_url : ${{ vars.VITE_API_BASE_URL_DEV_DOCKER }}
36
+ vite_keycloak_url : ${{ vars.VITE_KEYCLOAK_URL_DEV_DOCKER }}
37
+ vite_keycloak_realm : ' dev'
38
+ vite_keycloak_client_id : ' bff-dashboard'
39
+ - environment : ' wildcat-docker'
40
+ project_name : ${{ secrets.CLOUDFLARE_PROJECT_DOCKER }}
41
+ vite_api_base_url : ${{ vars.VITE_API_BASE_URL_DOCKER }}
42
+ vite_keycloak_url : ${{ vars.VITE_KEYCLOAK_URL_DOCKER }}
43
+ vite_keycloak_realm : ' dev'
44
+ vite_keycloak_client_id : ' bff-dashboard'
45
+
46
+ # only run job for the selected environment on manual dispatch or on push to a tag
47
+ if : |
48
+ github.event_name == 'push' ||
49
+ (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == matrix.environment)
50
+
51
+ steps :
52
+ - name : Checkout repository
53
+ uses : actions/checkout@v4
54
+ with :
55
+ ref : ${{ github.ref }}
56
+ fetch-depth : 0
57
+
58
+ # only allow tags on manual dispatch
59
+ - name : Validate Tag on Manual Dispatch
60
+ if : github.event_name == 'workflow_dispatch'
61
+ run : |
62
+ if [[ "${{ github.ref_type }}" != 'tag' ]]; then
63
+ echo "::error::Manual deployments must be triggered from a tag."
64
+ echo "::error::Please select a tag from the 'Use workflow from' dropdown, not a branch."
65
+ exit 1
66
+ fi
67
+ echo "✅ Validation successful: Running from tag '${{ github.ref_name }}'."
68
+
69
+ - name : Setup Node.js
70
+ uses : actions/setup-node@v4
71
+ with :
72
+ node-version : 22
73
+
74
+ - name : Install dependencies
75
+ run : npm ci
76
+
77
+ - name : Build application for ${{ matrix.environment }}
78
+ run : npm run build
79
+ env :
80
+ VITE_API_BASE_URL : ${{ matrix.vite_api_base_url }}
81
+ VITE_KEYCLOAK_URL : ${{ matrix.vite_keycloak_url }}
82
+ VITE_KEYCLOAK_REALM : ${{ matrix.vite_keycloak_realm }}
83
+ VITE_KEYCLOAK_CLIENT_ID : ${{ matrix.vite_keycloak_client_id }}
84
+ VITE_API_MOCKING_ENABLED : false
85
+
86
+ - name : Deploy ${{ matrix.environment }} to Cloudflare Pages (PREVIEW)
87
+ id : deploy_preview
88
+ if : github.event_name == 'push'
89
+ uses : cloudflare/wrangler-action@v3
90
+ with :
91
+ apiToken : ${{ secrets.CLOUDFLARE_API_TOKEN }}
92
+ accountId : ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
93
+ command : pages deploy dist --project-name=${{ matrix.project_name }} --branch=preview
94
+
95
+ - name : Deploy ${{ matrix.environment }} to Cloudflare Pages (PRODUCTION)
96
+ id : deploy_production
97
+ if : github.event_name == 'workflow_dispatch'
98
+ uses : cloudflare/wrangler-action@v3
99
+ with :
100
+ apiToken : ${{ secrets.CLOUDFLARE_API_TOKEN }}
101
+ accountId : ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
102
+ # Target the production branch ('main' or 'master') for manual deployments
103
+ command : pages deploy dist --project-name=${{ matrix.project_name }} --branch=master
0 commit comments