forked from panates/postgrejs
-
Notifications
You must be signed in to change notification settings - Fork 0
149 lines (137 loc) · 6.02 KB
/
test.yml
File metadata and controls
149 lines (137 loc) · 6.02 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
name: Test
on:
workflow_call:
secrets:
PERSONAL_ACCESS_TOKEN:
# Can be run manually
workflow_dispatch:
# on git push
push:
branches:
- dev
paths:
- src/**/*.*
- package.json
- test/**/*.*
- support/**/*.*
- .mocharc.cjs
- .c8rc.json
- tsconfig*.json
# Only one run per branch at a time
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
test:
name: Node v${{ matrix.node }} on PostgreSQL v${{ matrix.postgres }}
if: >
github.event_name == 'workflow_dispatch' ||
(
github.event_name == 'push' &&
!(
contains(github.event.head_commit.message, 'no-test') ||
(
startsWith(github.event.head_commit.message, 'Merge pull request') &&
contains(github.event.head_commit.message, '/dev')
)
)
)
strategy:
fail-fast: false
matrix:
node: [ '18', '22', '23' ]
postgres: [ '12', '14', '16', '17' ]
runs-on: ubuntu-latest
timeout-minutes: 15
services:
postgres:
image: postgres:${{ matrix.postgres }}
env:
POSTGRES_USER: postgres
POSTGRES_HOST_AUTH_METHOD: trust
ports:
- 5433:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout
uses: actions/checkout@v4
- name: PostgreSQL
run: |
date
echo "----- Removing pre-installed PostgreSQL -----"
psql --version # Check version to confirm
sudo apt purge postgresql-16
echo "----- Installing PostgreSQL ${{ matrix.postgres }} -----"
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install postgresql-${{ matrix.postgres }} postgresql-client-${{ matrix.postgres }}
echo "----- Configuring -----"
sudo cp ./test/_support/pg_hba.conf /etc/postgresql/${{ matrix.postgres }}/main/pg_hba.conf
sudo sed -i 's/.*wal_level.*/wal_level = logical/' /etc/postgresql/${{ matrix.postgres }}/main/postgresql.conf
sudo sed -i 's/.*max_prepared_transactions.*/max_prepared_transactions = 100/' /etc/postgresql/${{ matrix.postgres }}/main/postgresql.conf
sudo sed -i 's/.*ssl = .*/ssl = on/' /etc/postgresql/${{ matrix.postgres }}/main/postgresql.conf
openssl req -new -x509 -nodes -days 365 -text -subj "/CN=localhost" -extensions v3_req -config <(cat /etc/ssl/openssl.cnf <(printf "\n[v3_req]\nbasicConstraints=critical,CA:TRUE\nkeyUsage=nonRepudiation,digitalSignature,keyEncipherment\nsubjectAltName=DNS:localhost")) -keyout server.key -out server.crt
sudo cp server.key /etc/postgresql/${{ matrix.postgres }}/main/server.key
sudo cp server.crt /etc/postgresql/${{ matrix.postgres }}/main/server.crt
sudo chmod og-rwx /etc/postgresql/${{ matrix.postgres }}/main/server.key
echo "/usr/lib/postgresql/${{ matrix.postgres }}/bin" >> "$GITHUB_PATH"
export POSTGRESQL_PATH="/usr/lib/postgresql/${{ matrix.postgres }}/bin/postgres"
export INITDB_PATH="/usr/lib/postgresql/${{ matrix.postgres }}/bin/initdb"
echo "----- Starting -----"
sudo systemctl enable postgresql
sudo systemctl start postgresql
sudo systemctl status postgresql
pg_isready
psql --version # Check version to confirm
echo "----- hba_file -----"
sudo -u postgres psql -t -P format=unaligned -c 'show hba_file';
- name: Configure database environment
run: |
sudo -u postgres dropdb postgrejs_test --if-exists
sudo -u postgres psql -c "alter system set ssl=on;"
sudo -u postgres psql -c "drop user if exists postgrejs_test;"
sudo -u postgres psql -c "create user postgrejs_test;"
sudo -u postgres psql -c "alter system set password_encryption=md5;"
sudo -u postgres psql -c "select pg_reload_conf();"
sudo -u postgres psql -c "drop user if exists postgrejs_test_md5;"
sudo -u postgres psql -c "create user postgrejs_test_md5 with password 'postgrejs_test_md5'"
sudo -u postgres psql -c "alter system set password_encryption='scram-sha-256';"
sudo -u postgres psql -c "select pg_reload_conf();"
sudo -u postgres psql -c "drop user if exists postgrejs_test_scram;"
sudo -u postgres psql -c "create user postgrejs_test_scram with password 'postgrejs_test_scram'"
sudo -u postgres createdb postgrejs_test
sudo -u postgres psql -c "grant all on database postgrejs_test to postgrejs_test;"
sudo -u postgres psql -c "alter database postgrejs_test owner to postgrejs_test;"
- name: Setup Environment
uses: panates/gh-setup-node@v1
with:
node-version: ${{ matrix.node }}
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
- name: Run linter test
run: npm run lint
- name: Run circular dependency test
run: npm run check
- name: Run compile test
run: npm run compile
- name: Run unit tests
run: npm run citest
env:
NODE_OPTIONS: "--max_old_space_size=4096"
NODE_TLS_REJECT_UNAUTHORIZED: 0
PGUSER: postgres
PGSOCKET: /var/run/postgresql
PGDATABASE: postgrejs_test
INIT_PG: true
LOGIN_MD5: postgrejs_test_md5
LOGIN_SCRAM: postgrejs_test_scram
- name: Send coverage to Coveralls
uses: coverallsapp/github-action@v2
# Run only once
if: ${{ matrix.node == '20' && matrix.postgres == '16' }}
with:
github-token: ${{ secrets.GITHUB_TOKEN }}