-
Notifications
You must be signed in to change notification settings - Fork 13
146 lines (117 loc) · 4.52 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
# 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.2-erlang-26.0.2-debian-bullseye-20230612-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
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
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.7-erlang-26.2.2-debian-bullseye-20240130-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"
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
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
- run: mix ecto.create
- run: mix ecto.migrate
- run: mix test
check_mix_format:
runs-on: ubuntu-latest
container: hexpm/elixir:1.15.7-erlang-26.2.2-debian-bullseye-20240130-slim
needs: build_deps
steps:
- name: Check out repository code
uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: deps
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.7-erlang-26.2.2-debian-bullseye-20240130-slim
needs: build_deps
steps:
- name: Check out repository code
uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: deps
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
- run: mix gettext.extract --check-up-to-date
check_mix_sobelow:
runs-on: ubuntu-latest
container: hexpm/elixir:1.15.7-erlang-26.2.2-debian-bullseye-20240130-slim
needs: build_deps
steps:
- name: Check out repository code
uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: deps
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
- run: mix sobelow --config