-
-
Notifications
You must be signed in to change notification settings - Fork 0
170 lines (136 loc) Β· 4.17 KB
/
Copy pathdeploy.yml
File metadata and controls
170 lines (136 loc) Β· 4.17 KB
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
name: Deploy CD
# GitHub variables:
# - VERSION_TAG
# - ASTRO_SITE_URL
# - ASTRO_BASE_PATH
# - ASTRO_ASSETS_PREFIX
# GitHub secrets:
# - CONFIG_PROD (optional)
on:
# Run on push on production branches
push:
branches:
# Production
- main
paths:
# CI/CD files
- '.github/workflows/deploy.yml'
- 'docker-compose.yml'
- 'docker-compose.cicd.yml'
- '.env'
# Application files
- 'app/**'
# Run on manual triggers
workflow_dispatch:
# Set default GITHUB_TOKEN permissions for the workflow
permissions:
contents: read
# Set workflow concurrency rules
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: true
jobs:
# Build job
build:
name: Build
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
# Dependency steps
- name: Checkout
uses: actions/checkout@v5
- name: Install jq
run: |
# apt-get install jq
sudo apt-get -q update
sudo apt-get -qy install --no-install-recommends jq
# Preparation steps
- name: Load app config in environment
env:
CONFIG_PROD: ${{ secrets.CONFIG_PROD }}
GITHUB_REPOSITORY: ${{ github.repository }}
GITHUB_SHA: ${{ github.sha }}
GITHUB_REF_NAME: ${{ github.ref_name }}
GITHUB_VARS: ${{ toJson(vars) }}
run: |
# Load app config in environment
# Load shell functions to load app config variables
. ./.github/workflows/scripts/load_app_config_functions.sh
echo '::group::Load app config variables'
# Deployment
load_var 'GITHUB_REPOSITORY_URL' 'false' "https://github.com/${GITHUB_REPOSITORY}"
load_var 'GITHUB_SHA' 'false' "${GITHUB_SHA}"
load_var 'VERSION_TAG' 'true' "${GITHUB_REF_NAME}"
# Astro
load_var 'ASTRO_SITE_URL' 'true'
load_var 'ASTRO_BASE_PATH' 'true'
load_var 'ASTRO_ASSETS_PREFIX' 'true'
# Application
# (Load env vars for your application here.)
echo '::endgroup::'
# Execution steps
- name: Download FluffEvent association documents
run: |
# download-documents.sh ./app/app
sh ./cicd/download-documents.sh ./app/app
- name: Pull dependencies
run: |
# docker compose pull --ignore-buildable
docker compose \
-f ./docker-compose.yml -f ./docker-compose.cicd.yml \
--env-file .env \
pull --ignore-buildable
- name: Build for production
env:
# Build
BUILD_CHECK: 'false' # Skip type checks
# Deployment
GITHUB_REPOSITORY_URL: ${{ env.GITHUB_REPOSITORY_URL }}
GITHUB_SHA: ${{ env.GITHUB_SHA }}
VERSION_TAG: ${{ env.VERSION_TAG }}
# Astro
ASTRO_SITE_URL: ${{ env.ASTRO_SITE_URL }}
ASTRO_BASE_PATH: ${{ env.ASTRO_BASE_PATH }}
ASTRO_ASSETS_PREFIX: ${{ env.ASTRO_ASSETS_PREFIX }}
# Application
# (Add env vars for your application here.)
run: |
# docker compose build
export DOCKER_UID="$(id -u)"
docker compose \
-f ./docker-compose.yml -f ./docker-compose.cicd.yml \
--env-file .env \
build
- name: Copy application files
run: |
# docker compose up
export DOCKER_UID="$(id -u)"
docker compose \
-f ./docker-compose.yml -f ./docker-compose.cicd.yml \
--env-file .env \
up
- name: Upload GitHub Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./app/dist
# Deploy job
deploy:
name: Deploy
runs-on: ubuntu-latest
timeout-minutes: 10
# Job dependencies
needs:
- build
# Set GITHUB_TOKEN permissions for the job
permissions:
id-token: write
pages: write
# Set deployment environment
environment:
name: production
url: ${{ steps.deployment.outputs.page_url }}
steps:
# Execution steps
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4