-
Notifications
You must be signed in to change notification settings - Fork 4
164 lines (160 loc) · 5.13 KB
/
ci.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
name: CI
on: push
jobs:
linters:
name: Linters
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true
- name: Cache js dependencies
uses: actions/cache@v4
with:
key: node_modules-${{ hashFiles('yarn.lock') }}
path: node_modules
- name: Install JS dependencies
run: yarn install
- name: Run Rubocop
run: bundle exec rubocop
- name: Run ESLint
run: yarn lint
test_unit:
name: Unit Tests
runs-on: ubuntu-latest
services:
postgres:
image: postgres:13.2
env:
POSTGRES_USER: rdv_insertion_test
POSTGRES_PASSWORD: rdv_insertion_test
POSTGRES_DB: rdv_insertion_test
options: >-
--mount type=tmpfs,destination=/var/lib/postgresql/data
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
redis:
image: redis
ports:
- 6379:6379
options: --entrypoint redis-server
steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version-file: .node-version
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true
- name: Cache js dependencies
uses: actions/cache@v4
with:
key: node_modules-${{ hashFiles('yarn.lock') }}
path: node_modules
- name: Install JS dependencies
run: yarn install
- name: Precompile assets
run: yarn run build
- name: List all unit spec files
run: |
mkdir -p tmp
ls spec/**/*.rb | grep -v spec/features > tmp/unit_spec_files.txt
- name: Cache parallel test unit spec runtime log
uses: actions/cache@v4
with:
key: unit-spec-runtime-log-${{ hashFiles('tmp/unit_spec_files.txt') }}
path: tmp/parallel_runtime_rspec.log
- name: Setup test database and run specs
run: |
RAILS_ENV=test bundle exec rake parallel:drop parallel:create parallel:load_schema parallel:spec['spec/(?!features)']
env:
HOST: http://example.com
POSTGRES_HOST: localhost
POSTGRES_PORT: 5432
POSTGRES_USER: rdv_insertion_test
POSTGRES_PASSWORD: rdv_insertion_test
POSTGRES_DB: rdv_insertion_test
test_features:
name: Feature Tests
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ci_node_total: [4]
ci_node_index: [0, 1, 2, 3]
services:
postgres:
image: postgres:13.2
env:
POSTGRES_USER: rdv_insertion_test
POSTGRES_PASSWORD: rdv_insertion_test
POSTGRES_DB: rdv_insertion_test
options: >-
--mount type=tmpfs,destination=/var/lib/postgresql/data
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
redis:
image: redis
ports:
- 6379:6379
options: --entrypoint redis-server
steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version-file: .node-version
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true
- name: Cache js dependencies
uses: actions/cache@v4
with:
key: node_modules-${{ hashFiles('yarn.lock') }}
path: node_modules
- name: Install JS dependencies
run: yarn install
- name: Precompile assets
run: RAILS_ENV=test bundle exec rake assets:precompile
- name: List all feature spec files
run: |
mkdir -p tmp
find spec/features -name "*_spec.rb" > tmp/feature_spec_files.txt
echo "Total feature spec files found:"
wc -l tmp/feature_spec_files.txt
- name: Setup test database and run specs
run: |
echo "Spec files for this node:"
cat tmp/feature_spec_files.txt | sort | awk "NR % $CI_NODE_TOTAL == $CI_NODE_INDEX" | tee node_spec_files.txt
FILE_COUNT=$(cat node_spec_files.txt | wc -l)
echo "Running $FILE_COUNT spec files on CI node index $CI_NODE_INDEX"
if [ $FILE_COUNT -eq 0 ]; then
echo "No spec files to run on this node. This is likely an error in file distribution."
exit 1
fi
RAILS_ENV=test bundle exec rspec $(cat node_spec_files.txt)
env:
HOST: http://example.com
POSTGRES_HOST: localhost
POSTGRES_PORT: 5432
POSTGRES_USER: rdv_insertion_test
POSTGRES_PASSWORD: rdv_insertion_test
POSTGRES_DB: rdv_insertion_test
CI_NODE_TOTAL: ${{ matrix.ci_node_total }}
CI_NODE_INDEX: ${{ matrix.ci_node_index }}