-
Notifications
You must be signed in to change notification settings - Fork 6
188 lines (164 loc) · 6.38 KB
/
Copy pathtest-postgis.yml
File metadata and controls
188 lines (164 loc) · 6.38 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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
name: Test with PostGIS
# The workflow only checks out code and runs tests; the GITHUB_TOKEN
# needs nothing beyond reading the repositories.
permissions:
contents: read
env:
PLUGIN_NAME: ${{ github.event.repository.name }}
on:
push:
branches:
- main
- next
pull_request:
branches:
- main
- next
workflow_dispatch:
jobs:
frontend:
name: Frontend (typecheck + unit tests)
runs-on: ubuntu-latest
steps:
- name: Checkout Plugin
uses: actions/checkout@v6
- name: Set up Node
uses: actions/setup-node@v6
with:
node-version: 24
- name: Install dependencies
env:
COREPACK_ENABLE_DOWNLOAD_PROMPT: "0"
run: |
corepack enable pnpm
pnpm install --frozen-lockfile
- name: Typecheck
run: pnpm typecheck
- name: Unit tests
run: pnpm test
test:
name: redmine:${{ matrix.redmine_version }} ruby:${{ matrix.ruby_version }} postgis:${{ matrix.db_version }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
# Curated matrix instead of a full redmine x ruby x postgis cross-product,
# split into two concerns so coverage stays broad but the job count small:
# * compat - each supported Redmine/Ruby pair once, on the ceiling DB.
# Supported Rubies per
# https://redmine.jp/tech_note/supported-rubies/ (Rubies
# still in upstream support): 6.0 -> 3.3, 6.1 -> 3.3/3.4,
# 7.0 -> 3.4/4.0.
# * database - the PostGIS variants (PG 15/17/18, PostGIS 3.4/3.5/3.6),
# pinned to the known-stable 6.1/3.4 pair to isolate DB
# issues from Redmine-7/Ruby-4 newness.
# All rows run the Gemfile's default (unpinned) geo gem ranges, so CI
# verifies exactly what a plain `bundle install` resolves per Rails
# version; the GEM_* env vars remain available for local debugging.
matrix:
include:
# compat: each supported Redmine/Ruby pair once, on the 18-3.6 ceiling.
# The 6.1/3.4 pair is exercised by the database rows below.
- { redmine_version: 6.0-stable, ruby_version: '3.3', db_version: 18-3.6 }
- { redmine_version: 6.1-stable, ruby_version: '3.3', db_version: 18-3.6 }
- { redmine_version: 7.0-stable, ruby_version: '3.4', db_version: 18-3.6 }
- { redmine_version: 7.0-stable, ruby_version: '4.0', db_version: 18-3.6, system_test: true }
# database: PG 15/17/18 pinned to the known-stable 6.1/3.4 pair
- { redmine_version: 6.1-stable, ruby_version: '3.4', db_version: 15-3.4 }
- { redmine_version: 6.1-stable, ruby_version: '3.4', db_version: 17-3.5 }
- { redmine_version: 6.1-stable, ruby_version: '3.4', db_version: 18-3.6, system_test: true }
services:
postgres:
image: postgis/postgis:${{ matrix.db_version }}
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
ports:
- 5432:5432
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
steps:
- name: Checkout Redmine
uses: actions/checkout@v6
with:
repository: redmine/redmine
ref: ${{ matrix.redmine_version }}
path: redmine
- name: Checkout Plugin
uses: actions/checkout@v6
with:
path: redmine/plugins/${{ env.PLUGIN_NAME }}
- name: Set up Ruby
uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1.321.0
with:
ruby-version: ${{ matrix.ruby_version }}
- name: Set up Node
uses: actions/setup-node@v6
with:
node-version: 24
- name: Install native gem system libraries
# The runner image ships gcc/make/patch and Chrome (for the system
# test); only the pg and rgeo-geos gems' headers still need apt, which
# here hits Ubuntu's mirrors rather than a Debian container's.
run: |
sudo apt-get update --yes --quiet
sudo apt-get install --yes --quiet --no-install-recommends libpq-dev libgeos-dev
- name: Build plugin assets
working-directory: redmine/plugins/${{ env.PLUGIN_NAME }}
env:
COREPACK_ENABLE_DOWNLOAD_PROMPT: "0"
# typecheck + unit tests run once in the frontend job; here we only
# build the assets the Ruby tests need.
run: |
corepack enable pnpm
pnpm install --frozen-lockfile
pnpm build
- name: Prepare Redmine source
working-directory: redmine
run: |
cat <<EOF > config/database.yml
test:
adapter: postgis
database: redmine
host: 127.0.0.1
username: postgres
password: postgres
encoding: utf8
EOF
- name: Install Ruby dependencies
working-directory: redmine
run: |
bundle config set --local without 'development'
bundle install --jobs=4 --retry=3
- name: Run Redmine rake tasks
env:
RAILS_ENV: test
working-directory: redmine
run: |
bundle exec rake generate_secret_token
bundle exec rake db:create db:migrate redmine:plugins:migrate
- name: Zeitwerk check
env:
RAILS_ENV: test
working-directory: redmine
run: |
if grep -q zeitwerk config/application.rb ; then
bundle exec rake zeitwerk:check
fi
shell: bash
- name: Run tests
env:
RAILS_ENV: test
# For system test in plugin
GOOGLE_CHROME_OPTS_ARGS: "headless,disable-gpu,no-sandbox,disable-dev-shm-usage"
working-directory: redmine
run: |
bundle exec rails test plugins/${{ env.PLUGIN_NAME }}/test/unit
bundle exec rails test plugins/${{ env.PLUGIN_NAME }}/test/functional
bundle exec rails test plugins/${{ env.PLUGIN_NAME }}/test/integration
if [ "${{ matrix.system_test }}" = "true" ]; then
bundle exec rails test plugins/${{ env.PLUGIN_NAME }}/test/system
fi
- name: Run uninstall test
env:
RAILS_ENV: test
working-directory: redmine
run: bundle exec rake redmine:plugins:migrate NAME=${{ env.PLUGIN_NAME }} VERSION=0