Skip to content

Commit c8e08f6

Browse files
psteinroeclaude
andauthored
refactor: move WASM build to dedicated release job (#675)
realised this during the last release - it doesn't make sense to build wasm inside of `publish`. we now test & build it as just another target in `release` and upload `pgls.js` and `pgls.wasm` as GitHub release artefacts. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent f439d7f commit c8e08f6

4 files changed

Lines changed: 88 additions & 231 deletions

File tree

.github/workflows/publish.yml

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -95,21 +95,12 @@ jobs:
9595
exit 1
9696
fi
9797
98-
- name: Install Nix
99-
uses: DeterminateSystems/nix-installer-action@main
100-
101-
- name: Setup Magic Nix Cache
102-
uses: DeterminateSystems/magic-nix-cache-action@main
103-
10498
- name: Setup Bun
10599
uses: oven-sh/setup-bun@v2
106100

107101
- name: Install dependencies
108102
run: bun install
109103

110-
- name: Build WASM Package
111-
run: nix develop --command bash -c "cd packages/@postgres-language-server/wasm && bun run build"
112-
113104
- name: Generate Packages (deprecated)
114105
id: generate-packages-deprecated
115106
run: node packages/@postgrestools/postgrestools/scripts/generate-packages.mjs
@@ -126,6 +117,10 @@ jobs:
126117
RELEASE_TAG: ${{ github.event_name == 'workflow_dispatch' && inputs.release_tag || github.event.release.tag_name }}
127118
PRERELEASE: ${{ github.event_name == 'workflow_dispatch' && needs.validate_tag.outputs.is-prerelease || github.event.release.prerelease }}
128119

120+
- name: Build WASM TS
121+
run: bun run build:ts
122+
working-directory: packages/@postgres-language-server/wasm
123+
129124
- name: Publish npm packages as nightly (deprecated)
130125
if: (github.event_name == 'workflow_dispatch' && needs.validate_tag.outputs.is-prerelease == 'true') || (github.event_name == 'release' && github.event.release.prerelease)
131126
run: |

.github/workflows/release.yml

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,50 @@ jobs:
3131
id: set_version
3232
run: echo "version=$(git cliff --bumped-version)" >> "$GITHUB_OUTPUT"
3333

34+
wasm:
35+
name: Build & Test WASM
36+
runs-on: ubuntu-22.04
37+
steps:
38+
- uses: actions/checkout@v4
39+
with:
40+
submodules: true
41+
42+
- name: Install Nix
43+
uses: DeterminateSystems/nix-installer-action@main
44+
45+
- name: Setup Magic Nix Cache
46+
uses: DeterminateSystems/magic-nix-cache-action@main
47+
48+
- uses: oven-sh/setup-bun@v2
49+
50+
- name: Install dependencies
51+
run: bun install
52+
53+
- name: Build WASM
54+
run: nix develop --command bash -c "bun run build"
55+
working-directory: packages/@postgres-language-server/wasm
56+
57+
- name: Run Tests
58+
run: bun test
59+
working-directory: packages/@postgres-language-server/wasm
60+
61+
- name: Install Playwright
62+
run: bun run test:e2e:install
63+
working-directory: packages/@postgres-language-server/wasm
64+
65+
- name: Run E2E Tests
66+
run: bun run test:e2e
67+
working-directory: packages/@postgres-language-server/wasm
68+
69+
- name: Upload WASM Artifacts
70+
uses: actions/upload-artifact@v4
71+
with:
72+
name: wasm
73+
path: |
74+
packages/@postgres-language-server/wasm/wasm/pgls.js
75+
packages/@postgres-language-server/wasm/wasm/pgls.wasm
76+
if-no-files-found: error
77+
3478
build_and_test:
3579
name: Build & Test for ${{ matrix.config.target }}
3680
needs: extract_version
@@ -144,7 +188,7 @@ jobs:
144188

145189
create_changelog_and_release:
146190
runs-on: ubuntu-latest
147-
needs: [extract_version, build_and_test] # make sure that tests & build work correctly
191+
needs: [extract_version, build_and_test, wasm]
148192
steps:
149193
- name: Checkout Repo
150194
uses: actions/checkout@v4
@@ -181,6 +225,17 @@ jobs:
181225
merge-multiple: true
182226
pattern: postgres-language-server_*
183227

228+
- name: 👇 Download WASM Artifacts
229+
uses: actions/download-artifact@v4
230+
with:
231+
name: wasm
232+
path: wasm-assets
233+
234+
- name: Prepare WASM Assets
235+
run: |
236+
cp wasm-assets/packages/@postgres-language-server/wasm/wasm/pgls.js ./pgls.js
237+
cp wasm-assets/packages/@postgres-language-server/wasm/wasm/pgls.wasm ./pgls.wasm
238+
184239
- name: 📂 Create Release
185240
uses: softprops/action-gh-release@v2
186241
id: create-release
@@ -193,6 +248,8 @@ jobs:
193248
files: |
194249
postgrestools_*
195250
postgres-language-server_*
251+
pgls.js
252+
pgls.wasm
196253
docs/schema.json
197254
fail_on_unmatched_files: true
198255
draft: true

PLAN.md

Lines changed: 0 additions & 221 deletions
This file was deleted.

packages/@postgres-language-server/cli/scripts/generate-packages.mjs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,31 @@ async function downloadSchema(releaseTag, githubToken) {
6262
console.log(`Downloaded schema for ${releaseTag}`);
6363
}
6464

65+
async function downloadWasmAssets(releaseTag, githubToken) {
66+
const wasmDir = resolve(PACKAGES_PGLS_ROOT, "wasm", "wasm");
67+
fs.mkdirSync(wasmDir, { recursive: true });
68+
69+
for (const asset of ["pgls.js", "pgls.wasm"]) {
70+
const assetUrl = `https://github.com/supabase-community/postgres-language-server/releases/download/${releaseTag}/${asset}`;
71+
72+
const response = await fetch(assetUrl.trim(), {
73+
headers: {
74+
Authorization: `token ${githubToken}`,
75+
Accept: "application/octet-stream",
76+
},
77+
});
78+
79+
if (!response.ok) {
80+
throw new Error(`Failed to Fetch WASM Asset from ${assetUrl}`);
81+
}
82+
83+
const fileStream = fs.createWriteStream(resolve(wasmDir, asset));
84+
await streamPipeline(response.body, fileStream);
85+
86+
console.log(`Downloaded WASM asset ${asset} for ${releaseTag}`);
87+
}
88+
}
89+
6590
async function downloadBinary(platform, arch, os, releaseTag, githubToken) {
6691
const buildName = getBuildName(platform, arch);
6792
const ext = getBinaryExt(os);
@@ -277,6 +302,7 @@ function getVersion(releaseTag, isPrerelease) {
277302
const isPrerelease = process.env.PRERELEASE === "true";
278303

279304
await downloadSchema(releaseTag, githubToken);
305+
await downloadWasmAssets(releaseTag, githubToken);
280306
const version = getVersion(releaseTag, isPrerelease);
281307
await writeManifest("cli", version);
282308
await writeManifest("backend-jsonrpc", version);

0 commit comments

Comments
 (0)