-
Notifications
You must be signed in to change notification settings - Fork 13
179 lines (145 loc) · 5.42 KB
/
on_push_branch__execute_ci_cd.yml
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
171
172
173
174
175
176
177
178
179
# Do not forget to change status badge in ./README.md
name: on_push_branch__execute_ci_cd
on:
push:
branches: [master]
# See https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#onpushpull_requestbranchestags
pull_request:
# Only branches and tags on the base are evaluated
branches: [master]
jobs:
build_deps:
runs-on: ubuntu-latest
# Currently, this need to be synced manually with the Dockerfile. In the future, the workflow should be changed,
# so that a development container is built from the Dockerfile, pushed, and then re-used in the following steps.
# This would also remove the need to install cmake manually in each step:
container: hexpm/elixir:1.15.8-erlang-26.2.5-debian-bullseye-20240513-slim
steps:
# See https://github.com/actions/checkout
- uses: actions/checkout@v4
# See https://github.com/actions/checkout
- uses: actions/cache@v4
id: cache
with:
path: |
deps
_build
key: ${{ runner.os }}-mix-v4-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ runner.os }}-mix-v4
- run: mix do local.hex --force, local.rebar --force
- run: mix deps.get && mix deps.compile
if: steps.cache.outputs.cache-hit != 'true'
check_mix_test:
# Containers must run in Linux based operating systems
runs-on: ubuntu-latest
# Docker Hub image that `container-job` executes in
container: hexpm/elixir:1.15.8-erlang-26.2.5-debian-bullseye-20240513-slim
needs: build_deps
# Service containers to run with `container-job`
services:
# Label used to access the service container
postgres:
image: postgres:latest
env:
# These env variables are required by the postgres service (see above)
POSTGRES_DB: mindwendel_test
POSTGRES_HOST: postgres
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
env:
# These env vars are required by our application
# Unfortunately, github workflow does not support yaml anchors ;-(
TEST_DATABASE_HOST: postgres
TEST_DATABASE_NAME: mindwendel_test
TEST_DATABASE_USER: postgres
TEST_DATABASE_USER_PASSWORD: postgres
MIX_ENV: "test"
OBJECT_STORAGE_BUCKET: "mindwendel"
# The key for encrypting file contents used only in tests
# Do not use this key in any kind of prod related environments!
VAULT_ENCRYPTION_KEY_BASE64: "gI6L07o3RTppqy+cfAxO4C8G8psYHWn2NYPbUymYI1o="
steps:
# Downloads a copy of the code in your repository before running CI tests
- uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: |
deps
_build
key: ${{ runner.os }}-mix-v4-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ runner.os }}-mix-v4
- run: mix do local.hex --force, local.rebar --force
- run: mix compile --warnings-as-errors
- run: mix ecto.create
- run: mix ecto.migrate
- run: mix test --warnings-as-errors
check_mix_format:
runs-on: ubuntu-latest
container: hexpm/elixir:1.15.8-erlang-26.2.5-debian-bullseye-20240513-slim
needs: build_deps
steps:
- name: Check out repository code
uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: |
deps
_build
key: ${{ runner.os }}-mix-v4-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ runner.os }}-mix-v4
- run: mix do local.hex --force, local.rebar --force
- run: mix format --check-formatted
check_mix_gettext_extract_up_to_date:
runs-on: ubuntu-latest
container: hexpm/elixir:1.15.8-erlang-26.2.5-debian-bullseye-20240513-slim
needs: build_deps
steps:
- name: Check out repository code
uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: |
deps
_build
key: ${{ runner.os }}-mix-v4-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ runner.os }}-mix-v4
- run: mix do local.hex --force, local.rebar --force
- run: mix gettext.extract --check-up-to-date
check_mix_sobelow:
runs-on: ubuntu-latest
container: hexpm/elixir:1.15.8-erlang-26.2.5-debian-bullseye-20240513-slim
needs: build_deps
steps:
- name: Check out repository code
uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: |
deps
_build
key: ${{ runner.os }}-mix-v4-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ runner.os }}-mix-v4
- run: mix do local.hex --force, local.rebar --force
- run: mix sobelow --config
check_mix_credo:
runs-on: ubuntu-latest
container: hexpm/elixir:1.15.8-erlang-26.2.5-debian-bullseye-20240513-slim
needs: build_deps
steps:
- name: Check out repository code
uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: |
deps
_build
key: ${{ runner.os }}-mix-v4-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ runner.os }}-mix-v4
- run: mix do local.hex --force, local.rebar --force
- run: mix credo