Skip to content

Commit 57e2c42

Browse files
authored
ci: add path filters to test workflows and docs build check (supabase#575)
* ci: add path filters to test workflows to skip unneeded jobs Adds path-based filtering so CI only runs relevant jobs per PR: - test_wrappers: detection job gates native vs wasm jobs independently - test_supabase_wrappers: native paths filter on trigger - coverage: native paths filter on trigger - test_docs: new workflow to build MkDocs on docs changes Closes supabase#574 * ci: address review feedback on path filters - Replace deprecated actions-rs/toolchain@v1 with actions-rust-lang/setup-rust-toolchain@v1 (pre-existing issue) - Fix change detection to use full commit range instead of HEAD~1 - Add supabase-wrappers/ to wasm filter (host depends on it) * ci: bump actions/setup-python to v6 in test_docs * ci: handle null SHA edge case in change detection --------- Co-authored-by: Cody Bromley <[email protected]>
1 parent 60517be commit 57e2c42

4 files changed

Lines changed: 202 additions & 123 deletions

File tree

.github/workflows/coverage.yml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,19 @@ name: Code Coverage
22

33
on:
44
pull_request:
5+
paths:
6+
- 'wrappers/**'
7+
- 'supabase-wrappers/**'
8+
- 'supabase-wrappers-macros/**'
9+
- '.github/workflows/coverage.yml'
510
push:
611
branches:
712
- main
13+
paths:
14+
- 'wrappers/**'
15+
- 'supabase-wrappers/**'
16+
- 'supabase-wrappers-macros/**'
17+
- '.github/workflows/coverage.yml'
818

919
permissions:
1020
contents: write
@@ -18,12 +28,10 @@ jobs:
1828
uses: actions/checkout@v6
1929

2030
- name: Install Rust toolchain
21-
uses: actions-rs/toolchain@v1
31+
uses: actions-rust-lang/setup-rust-toolchain@v1
2232
with:
2333
toolchain: 1.88.0
2434
components: llvm-tools-preview, rustfmt, clippy
25-
default: true
26-
override: true
2735

2836
- name: Install cargo-llvm-cov
2937
uses: taiki-e/install-action@cargo-llvm-cov

.github/workflows/test_docs.yml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: Test Docs
2+
3+
on:
4+
pull_request:
5+
paths:
6+
- "docs/**"
7+
- "mkdocs.yaml"
8+
- ".github/workflows/test_docs.yml"
9+
push:
10+
branches:
11+
- main
12+
paths:
13+
- "docs/**"
14+
- "mkdocs.yaml"
15+
- ".github/workflows/test_docs.yml"
16+
17+
permissions:
18+
contents: read
19+
20+
jobs:
21+
test_docs:
22+
name: Build MkDocs
23+
runs-on: ubuntu-latest
24+
steps:
25+
- uses: actions/checkout@v6
26+
27+
- uses: actions/setup-python@v6
28+
with:
29+
python-version: "3.x"
30+
31+
- run: pip install -r docs/requirements_docs.txt
32+
33+
- run: mkdocs build
Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
name: Test Wrappers
22
on:
33
pull_request:
4+
paths:
5+
- 'supabase-wrappers/**'
6+
- 'supabase-wrappers-macros/**'
7+
- '.github/workflows/test_supabase_wrappers.yml'
48
push:
59
branches:
610
- main
11+
paths:
12+
- 'supabase-wrappers/**'
13+
- 'supabase-wrappers-macros/**'
14+
- '.github/workflows/test_supabase_wrappers.yml'
715

816
permissions:
917
contents: read
@@ -14,37 +22,35 @@ jobs:
1422
runs-on: blacksmith-4vcpu-ubuntu-2404
1523

1624
steps:
17-
- name: Checkout code
18-
uses: actions/checkout@v6
19-
20-
- uses: actions-rs/toolchain@v1
21-
with:
22-
toolchain: 1.88.0
23-
default: true
24-
override: true
25-
components: rustfmt, clippy
26-
27-
- run: |
28-
sudo apt remove -y postgres*
29-
sudo apt -y install curl ca-certificates build-essential pkg-config libssl-dev
30-
sudo install -d /usr/share/postgresql-common/pgdg
31-
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
32-
. /etc/os-release
33-
sudo sh -c "echo 'deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $VERSION_CODENAME-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
34-
sudo apt update -y -qq --fix-missing
35-
sudo apt -y install postgresql-client-15 postgresql-15 postgresql-server-dev-15
36-
sudo apt -y autoremove && sudo apt -y clean
37-
sudo chmod a+rwx `/usr/lib/postgresql/15/bin/pg_config --pkglibdir` `/usr/lib/postgresql/15/bin/pg_config --sharedir`/extension /var/run/postgresql/
38-
39-
- run: cargo install --locked cargo-pgrx --version 0.16.1
40-
- run: cargo pgrx init --pg15 /usr/lib/postgresql/15/bin/pg_config
41-
42-
- name: Format code
43-
run: |
44-
cd supabase-wrappers && cargo fmt --check
45-
46-
- name: Run clippy
47-
run: |
48-
cd supabase-wrappers && RUSTFLAGS="-D warnings" cargo clippy --all --tests --no-deps
49-
50-
- run: cd supabase-wrappers && cargo test
25+
- name: Checkout code
26+
uses: actions/checkout@v6
27+
28+
- uses: actions-rust-lang/setup-rust-toolchain@v1
29+
with:
30+
toolchain: 1.88.0
31+
components: rustfmt, clippy
32+
33+
- run: |
34+
sudo apt remove -y postgres*
35+
sudo apt -y install curl ca-certificates build-essential pkg-config libssl-dev
36+
sudo install -d /usr/share/postgresql-common/pgdg
37+
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
38+
. /etc/os-release
39+
sudo sh -c "echo 'deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $VERSION_CODENAME-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
40+
sudo apt update -y -qq --fix-missing
41+
sudo apt -y install postgresql-client-15 postgresql-15 postgresql-server-dev-15
42+
sudo apt -y autoremove && sudo apt -y clean
43+
sudo chmod a+rwx `/usr/lib/postgresql/15/bin/pg_config --pkglibdir` `/usr/lib/postgresql/15/bin/pg_config --sharedir`/extension /var/run/postgresql/
44+
45+
- run: cargo install --locked cargo-pgrx --version 0.16.1
46+
- run: cargo pgrx init --pg15 /usr/lib/postgresql/15/bin/pg_config
47+
48+
- name: Format code
49+
run: |
50+
cd supabase-wrappers && cargo fmt --check
51+
52+
- name: Run clippy
53+
run: |
54+
cd supabase-wrappers && RUSTFLAGS="-D warnings" cargo clippy --all --tests --no-deps
55+
56+
- run: cd supabase-wrappers && cargo test

.github/workflows/test_wrappers.yml

Lines changed: 118 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -9,106 +9,138 @@ permissions:
99
contents: read
1010

1111
jobs:
12+
# =============================================================
13+
# Detect which paths changed to skip unneeded jobs
14+
# =============================================================
15+
changes:
16+
name: Detect changes
17+
runs-on: ubuntu-latest
18+
outputs:
19+
native: ${{ steps.filter.outputs.native }}
20+
wasm: ${{ steps.filter.outputs.wasm }}
21+
steps:
22+
- uses: actions/checkout@v6
23+
with:
24+
fetch-depth: 0
25+
- id: filter
26+
run: |
27+
if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
28+
BASE=${{ github.event.pull_request.base.sha }}
29+
HEAD=${{ github.event.pull_request.head.sha }}
30+
else
31+
BASE=${{ github.event.before }}
32+
HEAD=${{ github.sha }}
33+
fi
34+
# Null SHA (force push / new branch): can't diff, so run everything
35+
if [[ "$BASE" == "0000000000000000000000000000000000000000" ]]; then
36+
echo "native=true" >> "$GITHUB_OUTPUT"
37+
echo "wasm=true" >> "$GITHUB_OUTPUT"
38+
exit 0
39+
fi
40+
CHANGED=$(git diff --name-only "$BASE" "$HEAD")
41+
echo "native=$(echo "$CHANGED" | grep -qE '^(wrappers/|supabase-wrappers/|supabase-wrappers-macros/|\.github/workflows/test_wrappers\.yml)' && echo true || echo false)" >> "$GITHUB_OUTPUT"
42+
echo "wasm=$(echo "$CHANGED" | grep -qE '^(wasm-wrappers/|supabase-wrappers/|wrappers/src/fdw/wasm_fdw/|\.github/workflows/test_wrappers\.yml)' && echo true || echo false)" >> "$GITHUB_OUTPUT"
43+
1244
# =============================================================
1345
# Native wrappers test
1446
# =============================================================
1547
test_native:
1648
name: Run native wrappers tests
49+
needs: [changes]
50+
if: needs.changes.outputs.native == 'true'
1751
runs-on: blacksmith-4vcpu-ubuntu-2404
1852

1953
steps:
20-
- name: Checkout code
21-
uses: actions/checkout@v6
22-
23-
- name: Build docker images
24-
run: |
25-
docker compose -f wrappers/.ci/docker-compose-native.yaml up -d
26-
27-
- uses: actions-rs/toolchain@v1
28-
with:
29-
toolchain: 1.88.0
30-
default: true
31-
override: true
32-
components: rustfmt, clippy
33-
34-
- run: |
35-
sudo apt remove -y postgres*
36-
sudo apt -y install curl ca-certificates build-essential pkg-config libssl-dev
37-
sudo install -d /usr/share/postgresql-common/pgdg
38-
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
39-
. /etc/os-release
40-
sudo sh -c "echo 'deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $VERSION_CODENAME-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
41-
sudo apt update -y -qq --fix-missing
42-
sudo apt -y install postgresql-client-15 postgresql-15 postgresql-server-dev-15
43-
sudo apt -y autoremove && sudo apt -y clean
44-
sudo chmod a+rwx `/usr/lib/postgresql/15/bin/pg_config --pkglibdir` `/usr/lib/postgresql/15/bin/pg_config --sharedir`/extension /var/run/postgresql/
45-
46-
- run: cargo install --locked cargo-pgrx --version 0.16.1
47-
- run: cargo pgrx init --pg15 /usr/lib/postgresql/15/bin/pg_config
48-
49-
- name: Format code
50-
run: |
51-
cd wrappers && cargo fmt --check
52-
53-
- name: Run clippy
54-
run: |
55-
cd wrappers && RUSTFLAGS="-D warnings" cargo clippy --all --tests --no-deps --features native_fdws,helloworld_fdw
56-
57-
- name: Perform test
58-
run: cd wrappers && cargo pgrx test --features "native_fdws pg15"
54+
- name: Checkout code
55+
uses: actions/checkout@v6
56+
57+
- name: Build docker images
58+
run: |
59+
docker compose -f wrappers/.ci/docker-compose-native.yaml up -d
60+
61+
- uses: actions-rust-lang/setup-rust-toolchain@v1
62+
with:
63+
toolchain: 1.88.0
64+
components: rustfmt, clippy
65+
66+
- run: |
67+
sudo apt remove -y postgres*
68+
sudo apt -y install curl ca-certificates build-essential pkg-config libssl-dev
69+
sudo install -d /usr/share/postgresql-common/pgdg
70+
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
71+
. /etc/os-release
72+
sudo sh -c "echo 'deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $VERSION_CODENAME-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
73+
sudo apt update -y -qq --fix-missing
74+
sudo apt -y install postgresql-client-15 postgresql-15 postgresql-server-dev-15
75+
sudo apt -y autoremove && sudo apt -y clean
76+
sudo chmod a+rwx `/usr/lib/postgresql/15/bin/pg_config --pkglibdir` `/usr/lib/postgresql/15/bin/pg_config --sharedir`/extension /var/run/postgresql/
77+
78+
- run: cargo install --locked cargo-pgrx --version 0.16.1
79+
- run: cargo pgrx init --pg15 /usr/lib/postgresql/15/bin/pg_config
80+
81+
- name: Format code
82+
run: |
83+
cd wrappers && cargo fmt --check
84+
85+
- name: Run clippy
86+
run: |
87+
cd wrappers && RUSTFLAGS="-D warnings" cargo clippy --all --tests --no-deps --features native_fdws,helloworld_fdw
88+
89+
- name: Perform test
90+
run: cd wrappers && cargo pgrx test --features "native_fdws pg15"
5991

6092
# =============================================================
6193
# Wasm wrappers test
6294
# =============================================================
6395
test_wasm:
6496
name: Run Wasm wrappers tests
97+
needs: [changes]
98+
if: needs.changes.outputs.wasm == 'true'
6599
runs-on: blacksmith-4vcpu-ubuntu-2404
66100

67101
steps:
68-
- name: Checkout code
69-
uses: actions/checkout@v6
70-
71-
- name: Build docker images
72-
run: |
73-
docker compose -f wrappers/.ci/docker-compose-wasm.yaml up -d
74-
75-
- uses: actions-rs/toolchain@v1
76-
with:
77-
toolchain: 1.88.0
78-
default: true
79-
override: true
80-
components: rustfmt, clippy
81-
82-
- run: |
83-
sudo apt remove -y postgres*
84-
sudo apt -y install curl ca-certificates build-essential pkg-config libssl-dev
85-
sudo install -d /usr/share/postgresql-common/pgdg
86-
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
87-
. /etc/os-release
88-
sudo sh -c "echo 'deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $VERSION_CODENAME-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
89-
sudo apt update -y -qq --fix-missing
90-
sudo apt -y install postgresql-client-15 postgresql-15 postgresql-server-dev-15
91-
sudo apt -y autoremove && sudo apt -y clean
92-
sudo chmod a+rwx `/usr/lib/postgresql/15/bin/pg_config --pkglibdir` `/usr/lib/postgresql/15/bin/pg_config --sharedir`/extension /var/run/postgresql/
93-
94-
- run: cargo install --locked cargo-pgrx --version 0.16.1
95-
- run: cargo pgrx init --pg15 /usr/lib/postgresql/15/bin/pg_config
96-
- run: cargo install --locked cargo-component --version 0.21.1
97-
- run: rustup target add wasm32-unknown-unknown
98-
99-
- name: Build Wasm FDWs
100-
run: |
101-
cd ./wasm-wrappers/fdw && cargo component build --release --target wasm32-unknown-unknown
102-
103-
# we don't want to check format for generated files, so we use
104-
# 'git diff --quiet' trick here, instead of 'cargo fmt --check'
105-
- name: Format code
106-
run: |
107-
cd ./wasm-wrappers/fdw && cargo fmt && git diff --quiet
108-
109-
- name: Run clippy
110-
run: |
111-
cd ./wasm-wrappers/fdw && RUSTFLAGS="-D warnings" cargo clippy --all --tests --no-deps
112-
113-
- name: Perform test
114-
run: cd wrappers && cargo pgrx test --features "wasm_fdw pg15"
102+
- name: Checkout code
103+
uses: actions/checkout@v6
104+
105+
- name: Build docker images
106+
run: |
107+
docker compose -f wrappers/.ci/docker-compose-wasm.yaml up -d
108+
109+
- uses: actions-rust-lang/setup-rust-toolchain@v1
110+
with:
111+
toolchain: 1.88.0
112+
components: rustfmt, clippy
113+
114+
- run: |
115+
sudo apt remove -y postgres*
116+
sudo apt -y install curl ca-certificates build-essential pkg-config libssl-dev
117+
sudo install -d /usr/share/postgresql-common/pgdg
118+
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
119+
. /etc/os-release
120+
sudo sh -c "echo 'deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $VERSION_CODENAME-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
121+
sudo apt update -y -qq --fix-missing
122+
sudo apt -y install postgresql-client-15 postgresql-15 postgresql-server-dev-15
123+
sudo apt -y autoremove && sudo apt -y clean
124+
sudo chmod a+rwx `/usr/lib/postgresql/15/bin/pg_config --pkglibdir` `/usr/lib/postgresql/15/bin/pg_config --sharedir`/extension /var/run/postgresql/
125+
126+
- run: cargo install --locked cargo-pgrx --version 0.16.1
127+
- run: cargo pgrx init --pg15 /usr/lib/postgresql/15/bin/pg_config
128+
- run: cargo install --locked cargo-component --version 0.21.1
129+
- run: rustup target add wasm32-unknown-unknown
130+
131+
- name: Build Wasm FDWs
132+
run: |
133+
cd ./wasm-wrappers/fdw && cargo component build --release --target wasm32-unknown-unknown
134+
135+
# we don't want to check format for generated files, so we use
136+
# 'git diff --quiet' trick here, instead of 'cargo fmt --check'
137+
- name: Format code
138+
run: |
139+
cd ./wasm-wrappers/fdw && cargo fmt && git diff --quiet
140+
141+
- name: Run clippy
142+
run: |
143+
cd ./wasm-wrappers/fdw && RUSTFLAGS="-D warnings" cargo clippy --all --tests --no-deps
144+
145+
- name: Perform test
146+
run: cd wrappers && cargo pgrx test --features "wasm_fdw pg15"

0 commit comments

Comments
 (0)