Skip to content

Commit 90f759d

Browse files
authored
chore: Add Migration scripts along with extensions test (#365)
After building AMI, Perform extension install test. If tests passed, push migrations files to S3. Also create migration-output.sql file. Signed-off-by: Lakshmipathi <[email protected]>
1 parent 089f2c7 commit 90f759d

File tree

10 files changed

+71
-15
lines changed

10 files changed

+71
-15
lines changed

.github/workflows/ami-release.yml

+14
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,17 @@ jobs:
1717
- name: Build AMI
1818
run: |
1919
packer build -var-file="development-arm.vars.pkr.hcl" -var-file="common.vars.pkr.hcl" amazon-arm64.pkr.hcl
20+
21+
- name: Merging migration files
22+
run: cat $(ls -1) > ../migration-output.sql
23+
working-directory: ${{ github.workspace }}/migrations/db/migrations
24+
25+
- name: Push migration files to S3
26+
uses: jakejarvis/s3-sync-action@master
27+
env:
28+
AWS_S3_BUCKET: ${{ secrets.PG_INIT_SCRIPT_S3_BUCKET_STAGING }}
29+
AWS_ACCESS_KEY_ID: ${{ secrets.PG_INIT_SCRIPT_ACCESS_KEY_ID_STAGING }}
30+
AWS_SECRET_ACCESS_KEY: ${{ secrets.PG_INIT_SCRIPT_SECRET_ACCESS_KEY_STAGING }}
31+
AWS_REGION: ap-southeast-1
32+
SOURCE_DIR: migrations/db
33+
DEST_DIR: migrations/db

ansible/playbook.yml

+5
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,15 @@
153153
shell:
154154
cmd: "for fl in /usr/lib/postgresql/bin/* ; do ln -sf $fl /usr/bin/$(basename $fl) ; done"
155155

156+
- name: Run migrations
157+
import_tasks: tasks/setup-migrations.yml
158+
156159
- name: Stop Postgres Database without Systemd
157160
become: yes
158161
become_user: postgres
159162
shell:
160163
cmd: /usr/bin/pg_ctl -D /var/lib/postgresql/data stop
161164
when: ebssurrogate_mode
162165

166+
- name: Run unit tests
167+
import_tasks: tasks/test-image.yml

ansible/tasks/postgres-extensions/12-pljava.yml

+5
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@
5050
update_cache: yes
5151
install_recommends: no
5252

53+
- name: Hold jre package
54+
dpkg_selections:
55+
name: default-jre-headless
56+
selection: hold
57+
5358
- name: pljava - set pljava.libjvm_location
5459
become: yes
5560
lineinfile:

ansible/tasks/setup-extensions.yml

+2-3
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,10 @@
6767
# - name: Install vault
6868
# import_tasks: tasks/postgres-extensions/23-vault.yml
6969

70-
#- name: Install PGroonga
71-
# import_tasks: tasks/postgres-extensions/24-pgroonga.yml
70+
- name: Install PGroonga
71+
import_tasks: tasks/postgres-extensions/24-pgroonga.yml
7272

7373
- name: Verify async task status
7474
import_tasks: tasks/postgres-extensions/99-finish_async_tasks.yml
7575
when: async_mode
7676

77-

ansible/tasks/setup-migrations.yml

+6
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,9 @@
55
args:
66
chdir: /tmp/migrations/db
77
failed_when: retval.rc != 0
8+
9+
- name: Create /root/MIGRATION-AMI file
10+
file:
11+
path: "/root/MIGRATION-AMI"
12+
state: touch
13+
when: ebssurrogate_mode

ansible/tasks/test-image.yml

+17
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,29 @@
2121
shell: /usr/lib/postgresql/bin/psql -U postgres -h localhost -d postgres -c "CREATE extension pgtap";
2222
when: ebssurrogate_mode
2323

24+
- name: Create function for testing extensions
25+
shell: /usr/lib/postgresql/bin/psql -U postgres -h localhost -d postgres -f /tmp/unit-tests/test-extensions.sql;
26+
when: ebssurrogate_mode
27+
28+
- name: Extension Installation tests
29+
shell: /usr/bin/pg_prove -U supabase_admin -h localhost -d postgres -v /tmp/unit-tests/verify-extensions.sql
30+
register: retval
31+
when: ebssurrogate_mode
32+
2433
- name: Run Unit tests (with filename unit-test-*) on Postgres Database
2534
shell: /usr/bin/pg_prove -U postgres -h localhost -d postgres -v /tmp/unit-tests/unit-test-*.sql
2635
register: retval
2736
failed_when: retval.rc != 0
2837
when: ebssurrogate_mode
2938

39+
- name: Run migrations tests
40+
shell: /usr/bin/pg_prove -U postgres -h localhost -d postgres -v tests/test.sql
41+
register: retval
42+
failed_when: retval.rc != 0
43+
when: ebssurrogate_mode
44+
args:
45+
chdir: /tmp/migrations
46+
3047
- name: Re-enable PG Sodium references in config
3148
become: yes
3249
become_user: postgres

ebssurrogate/files/apparmor_profiles/usr.lib.postgresql.bin.postgres

+13-3
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,35 @@ profile /usr/lib/postgresql/bin/postgres flags=(attach_disconnected) {
99
#include <abstractions/ssl_keys>
1010
#include <abstractions/user-tmp>
1111

12-
/dev/shm rw,
12+
capability dac_override,
13+
capability dac_read_search,
14+
1315
deny @{HOME}/** rwx,
16+
17+
/data/pgdata/** r,
18+
/dev/shm rw,
1419
/etc/postgresql-custom/** r,
1520
/etc/postgresql/** r,
21+
/etc/wal-g/config.json r,
1622
/run/systemd/notify rw,
17-
/var/run/systemd/notify rw,
1823
/usr/bin/cat rix,
1924
/usr/bin/dash rix,
2025
/usr/bin/mknod rix,
2126
/usr/lib/postgresql/bin/* mrix,
22-
/usr/local/lib/libgroonga.so.* mr,
27+
/usr/local/bin/wal-g rix,
2328
/usr/local/lib/libSFCGAL.so.* r,
29+
/usr/local/lib/libgroonga.so.* mr,
2430
/usr/share/postgresql/** r,
2531
/var/lib/postgresql/** rwl,
2632
/var/log/postgresql/** rw,
33+
/var/log/wal-g/** w,
34+
/var/run/systemd/notify rw,
2735
/{,var/}run/postgresql/** rw,
2836
owner /data/pgdata/** rwl,
2937
owner /data/pgdata/pgroonga.log k,
3038
owner /dev/shm/ rw,
3139
owner /dev/shm/PostgreSQL.* rw,
40+
owner /var/log/wal-g/** rw,
3241
owner @{PROC}/[0-9]*/oom_adj rw,
42+
3343
}
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
CREATE OR REPLACE FUNCTION install_available_extensions_and_test() RETURNS boolean AS $$
22
DECLARE extension_name TEXT;
3-
name TEXT;
43
allowed_extentions TEXT[] := string_to_array(current_setting('supautils.privileged_extensions'), ',');
54
BEGIN
65
FOREACH extension_name IN ARRAY allowed_extentions
76
LOOP
8-
RAISE notice '%', extension_name;
97
SELECT trim(extension_name) INTO extension_name;
8+
/* skip below extensions check for now */
9+
CONTINUE WHEN extension_name = 'pgroonga' OR extension_name = 'pgroonga_database' OR extension_name = 'pgsodium';
10+
CONTINUE WHEN extension_name = 'plpgsql' OR extension_name = 'plpgsql_check' OR extension_name = 'pgtap';
11+
CONTINUE WHEN extension_name = 'supabase_vault';
12+
RAISE notice 'START TEST FOR: %', extension_name;
1013
EXECUTE format('DROP EXTENSION IF EXISTS %s CASCADE', quote_ident(extension_name));
1114
EXECUTE format('CREATE EXTENSION %s CASCADE', quote_ident(extension_name));
15+
RAISE notice 'END TEST FOR: %', extension_name;
1216
END LOOP;
13-
return true;
17+
RAISE notice 'EXTENSION TESTS COMPLETED..';
18+
return true;
1419
END;
1520
$$ LANGUAGE plpgsql;

ebssurrogate/files/unit-tests/unit-test-01.sql

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
BEGIN;
2-
SELECT plan( 7 );
2+
SELECT plan( 5 );
33

44
-- Check installed extensions
55
SELECT extensions_are(
@@ -20,8 +20,6 @@ SELECT extensions_are(
2020
SELECT has_schema('pg_toast');
2121
SELECT has_schema('pg_catalog');
2222
SELECT has_schema('information_schema');
23-
SELECT has_schema('pgsodium');
24-
SELECT has_schema('pgsodium_masks');
2523
SELECT has_schema('public');
2624

2725
SELECT * from finish();

scripts/90-cleanup.sh

-3
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ if [ -n "$(command -v yum)" ]; then
2020
elif [ -n "$(command -v apt-get)" ]; then
2121
# Cleanup more packages
2222
apt-get -y remove --purge \
23-
libgl1-mesa-dri \
2423
automake \
2524
autoconf \
2625
autotools-dev \
@@ -34,7 +33,6 @@ elif [ -n "$(command -v apt-get)" ]; then
3433
git \
3534
git-man \
3635
ansible \
37-
libasound2 \
3836
libicu-dev \
3937
libcgal-dev \
4038
libgcc-9-dev \
@@ -45,7 +43,6 @@ elif [ -n "$(command -v apt-get)" ]; then
4543
apt-get -y autoremove
4644
apt-get -y autoclean
4745
fi
48-
4946
rm -rf /tmp/* /var/tmp/*
5047
history -c
5148
cat /dev/null > /root/.bash_history

0 commit comments

Comments
 (0)