From fe2dcaa2320883a24b5c09581e7dc405a01c6e4a Mon Sep 17 00:00:00 2001 From: Julian Date: Sat, 13 Sep 2025 14:43:57 +0200 Subject: [PATCH 01/25] init --- .github/workflows/release.yml | 18 + .../postgrestools/bin/postgrestools | 33 +- .../@postgrestools/postgrestools/package.json | 81 ++-- .../scripts/generate-packages.mjs | 373 +++++++++--------- 4 files changed, 276 insertions(+), 229 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c2f8eeffb..ee658999c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -39,6 +39,8 @@ jobs: config: - { os: ubuntu-22.04, target: x86_64-unknown-linux-gnu } - { os: ubuntu-22.04, target: aarch64-unknown-linux-gnu } + - { os: ubuntu-22.04, target: x86_64-unknown-linux-musl } + - { os: ubuntu-22.04, target: aarch64-unknown-linux-musl } - { os: macos-14, target: x86_64-apple-darwin } - { os: macos-14, target: aarch64-apple-darwin } - { os: windows-2022, target: x86_64-pc-windows-msvc } @@ -67,6 +69,22 @@ jobs: sudo apt-get update sudo apt-get install -y gcc-aarch64-linux-gnu + - name: Install musl toolchain + if: matrix.config.target == 'aarch64-unknown-linux-musl' || matrix.config.target == 'x86_64-unknown-linux-musl' + run: | + sudo apt-get update + sudo apt-get install -y musl-tools + + # - name: Install cargo-audit + # uses: taiki-e/install-action@57511bcdf8cdb0eab6448cb7fa632952d9f25742 # v2.59.1 + # if: matrix.config.target == 'x86_64-unknown-linux-musl' + # with: + # tool: cargo-audit + + # - name: Audit crates.io dependencies + # if: matrix.config.target == 'x86_64-unknown-linux-musl' + # run: cargo audit + - name: Setup Postgres uses: ./.github/actions/setup-postgres diff --git a/packages/@postgrestools/postgrestools/bin/postgrestools b/packages/@postgrestools/postgrestools/bin/postgrestools index 63461f0c8..5f33dbb40 100755 --- a/packages/@postgrestools/postgrestools/bin/postgrestools +++ b/packages/@postgrestools/postgrestools/bin/postgrestools @@ -1,10 +1,6 @@ #!/usr/bin/env node const { platform, arch, env } = process; -/** - * platform and arch are values injected into the node runtime. - * We use the values documented on https://nodejs.org. - */ const PLATFORMS = { win32: { x64: "@postgrestools/cli-x86_64-windows-msvc/postgrestools.exe", @@ -18,9 +14,36 @@ const PLATFORMS = { x64: "@postgrestools/cli-x86_64-linux-gnu/postgrestools", arm64: "@postgrestools/cli-aarch64-linux-gnu/postgrestools", }, + "linux-musl": { + x64: "@postgrestools/cli-x86_64-linux-musl/postgrestools", + arm64: "@postgrestools/cli-aarch64-linux-musl/postgrestools", + }, }; -const binPath = env.POSTGRESTOOLS_BINARY || PLATFORMS?.[platform]?.[arch]; +function isMusl() { + let stderr; + try { + stderr = execSync("ldd --version", { + stdio: ["pipe", "pipe", "pipe"], + }); + } catch (err) { + stderr = err.stderr; + } + if (stderr.indexOf("musl") > -1) { + return true; + } + return false; +} + +function getPlatform() { + if (platform === "linux") { + return isMusl() ? "linux-musl" : "linux"; + } + + return platform; +} + +const binPath = env.POSTGRESTOOLS_BINARY || PLATFORMS?.[getPlatform()]?.[arch]; if (binPath) { const result = require("child_process").spawnSync( diff --git a/packages/@postgrestools/postgrestools/package.json b/packages/@postgrestools/postgrestools/package.json index 5bd8601e8..e675e704e 100644 --- a/packages/@postgrestools/postgrestools/package.json +++ b/packages/@postgrestools/postgrestools/package.json @@ -1,40 +1,45 @@ { - "name": "@postgrestools/postgrestools", - "version": "", - "bin": { - "postgrestools": "bin/postgrestools" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/supabase-community/postgres-language-server.git", - "directory": "packages/@postgrestools/postgrestools" - }, - "author": "Supabase Community", - "contributors": [ - { - "name": "Philipp Steinrötter", - "url": "https://github.com/psteinroe" - }, - { - "name": "Julian Domke", - "url": "https://github.com/juleswritescode" - } - ], - "license": "MIT or Apache-2.0", - "description": "A collection of language tools and a Language Server Protocol (LSP) implementation for Postgres, focusing on developer experience and reliable SQL tooling.", - "files": ["bin/postgrestools", "schema.json"], - "engines": { - "node": ">=20" - }, - "publishConfig": { - "provenance": true - }, - "optionalDependencies": { - "@postgrestools/cli-x86_64-windows-msvc": "", - "@postgrestools/cli-aarch64-windows-msvc": "", - "@postgrestools/cli-x86_64-apple-darwin": "", - "@postgrestools/cli-aarch64-apple-darwin": "", - "@postgrestools/cli-x86_64-linux-gnu": "", - "@postgrestools/cli-aarch64-linux-gnu": "" - } + "name": "@postgrestools/postgrestools", + "version": "", + "bin": { + "postgrestools": "bin/postgrestools" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/supabase-community/postgres-language-server.git", + "directory": "packages/@postgrestools/postgrestools" + }, + "author": "Supabase Community", + "contributors": [ + { + "name": "Philipp Steinrötter", + "url": "https://github.com/psteinroe" + }, + { + "name": "Julian Domke", + "url": "https://github.com/juleswritescode" + } + ], + "license": "MIT or Apache-2.0", + "description": "A collection of language tools and a Language Server Protocol (LSP) implementation for Postgres, focusing on developer experience and reliable SQL tooling.", + "files": [ + "bin/postgrestools", + "schema.json" + ], + "engines": { + "node": ">=20" + }, + "publishConfig": { + "provenance": true + }, + "optionalDependencies": { + "@postgrestools/cli-x86_64-windows-msvc": "", + "@postgrestools/cli-aarch64-windows-msvc": "", + "@postgrestools/cli-x86_64-apple-darwin": "", + "@postgrestools/cli-aarch64-apple-darwin": "", + "@postgrestools/cli-x86_64-linux-gnu": "", + "@postgrestools/cli-aarch64-linux-gnu": "", + "@postgrestools/cli-x86_64-linux-musl": "", + "@postgrestools/cli-aarch64-linux-musl": "" + } } diff --git a/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs b/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs index 34193a926..98375e4df 100644 --- a/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs +++ b/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs @@ -10,248 +10,249 @@ const CLI_ROOT = resolve(fileURLToPath(import.meta.url), "../.."); const PACKAGES_POSTGRESTOOLS_ROOT = resolve(CLI_ROOT, ".."); const POSTGRESTOOLS_ROOT = resolve(PACKAGES_POSTGRESTOOLS_ROOT, "../.."); const SUPPORTED_PLATFORMS = [ - "pc-windows-msvc", - "apple-darwin", - "unknown-linux-gnu", + "pc-windows-msvc", + "apple-darwin", + "unknown-linux-gnu", + "unknown-linux-musl", ]; const MANIFEST_PATH = resolve(CLI_ROOT, "package.json"); const SUPPORTED_ARCHITECTURES = ["x86_64", "aarch64"]; async function downloadSchema(releaseTag, githubToken) { - const assetUrl = `https://github.com/supabase-community/postgres-language-server/releases/download/${releaseTag}/schema.json`; + const assetUrl = `https://github.com/supabase-community/postgres-language-server/releases/download/${releaseTag}/schema.json`; - const response = await fetch(assetUrl.trim(), { - headers: { - Authorization: `token ${githubToken}`, - Accept: "application/octet-stream", - }, - }); + const response = await fetch(assetUrl.trim(), { + headers: { + Authorization: `token ${githubToken}`, + Accept: "application/octet-stream", + }, + }); - if (!response.ok) { - throw new Error(`Failed to Fetch Asset from ${assetUrl}`); - } + if (!response.ok) { + throw new Error(`Failed to Fetch Asset from ${assetUrl}`); + } - // download to root. - const fileStream = fs.createWriteStream( - resolve(POSTGRESTOOLS_ROOT, "schema.json"), - ); + // download to root. + const fileStream = fs.createWriteStream( + resolve(POSTGRESTOOLS_ROOT, "schema.json") + ); - await streamPipeline(response.body, fileStream); + await streamPipeline(response.body, fileStream); - console.log(`Downloaded schema for ${releaseTag}`); + console.log(`Downloaded schema for ${releaseTag}`); } async function downloadBinary(platform, arch, os, releaseTag, githubToken) { - const buildName = getBuildName(platform, arch); + const buildName = getBuildName(platform, arch); - const assetUrl = `https://github.com/supabase-community/postgres-language-server/releases/download/${releaseTag}/${buildName}`; + const assetUrl = `https://github.com/supabase-community/postgres-language-server/releases/download/${releaseTag}/${buildName}`; - const response = await fetch(assetUrl.trim(), { - headers: { - Authorization: `token ${githubToken}`, - Accept: "application/octet-stream", - }, - }); + const response = await fetch(assetUrl.trim(), { + headers: { + Authorization: `token ${githubToken}`, + Accept: "application/octet-stream", + }, + }); - if (!response.ok) { - const error = await response.text(); - throw new Error( - `Failed to Fetch Asset from ${assetUrl} (Reason: ${error})`, - ); - } + if (!response.ok) { + const error = await response.text(); + throw new Error( + `Failed to Fetch Asset from ${assetUrl} (Reason: ${error})` + ); + } - // just download to root. - const fileStream = fs.createWriteStream(getBinarySource(platform, arch, os)); + // just download to root. + const fileStream = fs.createWriteStream(getBinarySource(platform, arch, os)); - await streamPipeline(response.body, fileStream); + await streamPipeline(response.body, fileStream); - console.log(`Downloaded asset for ${buildName} (v${releaseTag})`); + console.log(`Downloaded asset for ${buildName} (v${releaseTag})`); } async function writeManifest(packagePath, version) { - const manifestPath = resolve( - PACKAGES_POSTGRESTOOLS_ROOT, - packagePath, - "package.json", - ); - - const manifestData = JSON.parse( - fs.readFileSync(manifestPath).toString("utf-8"), - ); - - const nativePackages = SUPPORTED_PLATFORMS.flatMap((platform) => - SUPPORTED_ARCHITECTURES.map((arch) => [ - getPackageName(platform, arch), - version, - ]), - ); - - manifestData.version = version; - manifestData.optionalDependencies = Object.fromEntries(nativePackages); - - console.log(`Update manifest ${manifestPath}`); - const content = JSON.stringify(manifestData, null, 2); - - /** - * writeFileSync seemed to not work reliably? - */ - await new Promise((res, rej) => { - fs.writeFile(manifestPath, content, (e) => (e ? rej(e) : res())); - }); + const manifestPath = resolve( + PACKAGES_POSTGRESTOOLS_ROOT, + packagePath, + "package.json" + ); + + const manifestData = JSON.parse( + fs.readFileSync(manifestPath).toString("utf-8") + ); + + const nativePackages = SUPPORTED_PLATFORMS.flatMap((platform) => + SUPPORTED_ARCHITECTURES.map((arch) => [ + getPackageName(platform, arch), + version, + ]) + ); + + manifestData.version = version; + manifestData.optionalDependencies = Object.fromEntries(nativePackages); + + console.log(`Update manifest ${manifestPath}`); + const content = JSON.stringify(manifestData, null, 2); + + /** + * writeFileSync seemed to not work reliably? + */ + await new Promise((res, rej) => { + fs.writeFile(manifestPath, content, (e) => (e ? rej(e) : res())); + }); } async function makePackageDir(platform, arch) { - const buildName = getBuildName(platform, arch); - const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); + const buildName = getBuildName(platform, arch); + const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); - await new Promise((res, rej) => { - fs.mkdir(packageRoot, {}, (e) => (e ? rej(e) : res())); - }); + await new Promise((res, rej) => { + fs.mkdir(packageRoot, {}, (e) => (e ? rej(e) : res())); + }); } function copyBinaryToNativePackage(platform, arch, os) { - // Update the package.json manifest - const buildName = getBuildName(platform, arch); - const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); - const packageName = getPackageName(platform, arch); - - const { version, license, repository, engines } = rootManifest(); - - /** - * We need to map rust triplets to NPM-known values. - * Otherwise, npm will abort the package installation. - */ - const npm_arch = arch === "aarch64" ? "arm64" : "x64"; - let libc = undefined; - let npm_os = undefined; - - switch (os) { - case "linux": { - libc = "gnu"; - npm_os = "linux"; - break; - } - case "windows": { - libc = "msvc"; - npm_os = "win32"; - break; - } - case "darwin": { - libc = undefined; - npm_os = "darwin"; - break; - } - default: { - throw new Error(`Unsupported os: ${os}`); - } - } - - const manifest = JSON.stringify( - { - name: packageName, - version, - license, - repository, - engines, - os: [npm_os], - cpu: [npm_arch], - libc, - }, - null, - 2, - ); - - const ext = getBinaryExt(os); - const manifestPath = resolve(packageRoot, "package.json"); - console.info(`Update manifest ${manifestPath}`); - fs.writeFileSync(manifestPath, manifest); - - // Copy the CLI binary - const binarySource = getBinarySource(platform, arch, os); - const binaryTarget = resolve(packageRoot, `postgrestools${ext}`); - - if (!fs.existsSync(binarySource)) { - console.error( - `Source for binary for ${buildName} not found at: ${binarySource}`, - ); - process.exit(1); - } - - console.info(`Copy binary ${binaryTarget}`); - fs.copyFileSync(binarySource, binaryTarget); - fs.chmodSync(binaryTarget, 0o755); + // Update the package.json manifest + const buildName = getBuildName(platform, arch); + const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); + const packageName = getPackageName(platform, arch); + + const { version, license, repository, engines } = rootManifest(); + + /** + * We need to map rust triplets to NPM-known values. + * Otherwise, npm will abort the package installation. + */ + const npm_arch = arch === "aarch64" ? "arm64" : "x64"; + let libc = undefined; + let npm_os = undefined; + + switch (os) { + case "linux": { + libc = platform.endsWith("musl") ? "musl" : "gnu"; + npm_os = "linux"; + break; + } + case "windows": { + libc = "msvc"; + npm_os = "win32"; + break; + } + case "darwin": { + libc = undefined; + npm_os = "darwin"; + break; + } + default: { + throw new Error(`Unsupported os: ${os}`); + } + } + + const manifest = JSON.stringify( + { + name: packageName, + version, + license, + repository, + engines, + os: [npm_os], + cpu: [npm_arch], + libc, + }, + null, + 2 + ); + + const ext = getBinaryExt(os); + const manifestPath = resolve(packageRoot, "package.json"); + console.info(`Update manifest ${manifestPath}`); + fs.writeFileSync(manifestPath, manifest); + + // Copy the CLI binary + const binarySource = getBinarySource(platform, arch, os); + const binaryTarget = resolve(packageRoot, `postgrestools${ext}`); + + if (!fs.existsSync(binarySource)) { + console.error( + `Source for binary for ${buildName} not found at: ${binarySource}` + ); + process.exit(1); + } + + console.info(`Copy binary ${binaryTarget}`); + fs.copyFileSync(binarySource, binaryTarget); + fs.chmodSync(binaryTarget, 0o755); } function copySchemaToNativePackage(platform, arch) { - const buildName = getBuildName(platform, arch); - const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); + const buildName = getBuildName(platform, arch); + const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); - const schemaSrc = resolve(POSTGRESTOOLS_ROOT, "schema.json"); - const schemaTarget = resolve(packageRoot, "schema.json"); + const schemaSrc = resolve(POSTGRESTOOLS_ROOT, "schema.json"); + const schemaTarget = resolve(packageRoot, "schema.json"); - if (!fs.existsSync(schemaSrc)) { - console.error(`schema.json not found at: ${schemaSrc}`); - process.exit(1); - } + if (!fs.existsSync(schemaSrc)) { + console.error(`schema.json not found at: ${schemaSrc}`); + process.exit(1); + } - console.info("Copying schema.json"); - fs.copyFileSync(schemaSrc, schemaTarget); - fs.chmodSync(schemaTarget, 0o666); + console.info("Copying schema.json"); + fs.copyFileSync(schemaSrc, schemaTarget); + fs.chmodSync(schemaTarget, 0o666); } const rootManifest = () => - JSON.parse(fs.readFileSync(MANIFEST_PATH).toString("utf-8")); + JSON.parse(fs.readFileSync(MANIFEST_PATH).toString("utf-8")); function getBinaryExt(os) { - return os === "windows" ? ".exe" : ""; + return os === "windows" ? ".exe" : ""; } function getBinarySource(platform, arch, os) { - const ext = getBinaryExt(os); - return resolve(POSTGRESTOOLS_ROOT, `${getBuildName(platform, arch)}${ext}`); + const ext = getBinaryExt(os); + return resolve(POSTGRESTOOLS_ROOT, `${getBuildName(platform, arch)}${ext}`); } function getBuildName(platform, arch) { - return `postgrestools_${arch}-${platform}`; + return `postgrestools_${arch}-${platform}`; } function getPackageName(platform, arch) { - // trim the "unknown" from linux and the "pc" from windows - const platformName = platform.split("-").slice(-2).join("-"); - return `@postgrestools/cli-${arch}-${platformName}`; + // trim the "unknown" from linux and the "pc" from windows + const platformName = platform.split("-").slice(-2).join("-"); + return `@postgrestools/cli-${arch}-${platformName}`; } function getOs(platform) { - return platform.split("-").find((_, idx) => idx === 1); + return platform.split("-").find((_, idx) => idx === 1); } function getVersion(releaseTag, isPrerelease) { - return releaseTag + (isPrerelease ? "-rc" : ""); + return releaseTag + (isPrerelease ? "-rc" : ""); } (async function main() { - const githubToken = process.env.GITHUB_TOKEN; - const releaseTag = process.env.RELEASE_TAG; - assert(githubToken, "GITHUB_TOKEN not defined!"); - assert(releaseTag, "RELEASE_TAG not defined!"); - - const isPrerelease = process.env.PRERELEASE === "true"; - - await downloadSchema(releaseTag, githubToken); - const version = getVersion(releaseTag, isPrerelease); - await writeManifest("postgrestools", version); - await writeManifest("backend-jsonrpc", version); - - for (const platform of SUPPORTED_PLATFORMS) { - const os = getOs(platform); - - for (const arch of SUPPORTED_ARCHITECTURES) { - await makePackageDir(platform, arch); - await downloadBinary(platform, arch, os, releaseTag, githubToken); - copyBinaryToNativePackage(platform, arch, os); - copySchemaToNativePackage(platform, arch); - } - } - - process.exit(0); + const githubToken = process.env.GITHUB_TOKEN; + const releaseTag = process.env.RELEASE_TAG; + assert(githubToken, "GITHUB_TOKEN not defined!"); + assert(releaseTag, "RELEASE_TAG not defined!"); + + const isPrerelease = process.env.PRERELEASE === "true"; + + await downloadSchema(releaseTag, githubToken); + const version = getVersion(releaseTag, isPrerelease); + await writeManifest("postgrestools", version); + await writeManifest("backend-jsonrpc", version); + + for (const platform of SUPPORTED_PLATFORMS) { + const os = getOs(platform); + + for (const arch of SUPPORTED_ARCHITECTURES) { + await makePackageDir(platform, arch); + await downloadBinary(platform, arch, os, releaseTag, githubToken); + copyBinaryToNativePackage(platform, arch, os); + copySchemaToNativePackage(platform, arch); + } + } + + process.exit(0); })(); From 72d7c925fbd6164fc45abd7f07e020063c7bc59c Mon Sep 17 00:00:00 2001 From: Julian Date: Sat, 13 Sep 2025 14:51:58 +0200 Subject: [PATCH 02/25] prob not needed --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ee658999c..b965b174e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,8 +8,8 @@ permissions: env: # Need these guys for cross-compilation - CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc - CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER: aarch64-linux-gnu-gcc + # CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc + # CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER: aarch64-linux-gnu-gcc jobs: # windows does not run git cliff so we need to do it here From 17b0295432dc6eb377511a2b83421f91b89acd81 Mon Sep 17 00:00:00 2001 From: Julian Date: Sat, 13 Sep 2025 14:53:56 +0200 Subject: [PATCH 03/25] comment out --- .github/workflows/release.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b965b174e..14180f05e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,10 +6,10 @@ on: permissions: contents: write -env: - # Need these guys for cross-compilation - # CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc - # CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER: aarch64-linux-gnu-gcc +# env: +# Need these guys for cross-compilation +# CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc +# CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER: aarch64-linux-gnu-gcc jobs: # windows does not run git cliff so we need to do it here From afea0f528e8416ecaf1d6a05e61f32cea333426f Mon Sep 17 00:00:00 2001 From: Julian Date: Sat, 13 Sep 2025 15:01:17 +0200 Subject: [PATCH 04/25] wont work without npm token --- .github/workflows/publish.reusable.yml | 35 +++++++++++++++----------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/.github/workflows/publish.reusable.yml b/.github/workflows/publish.reusable.yml index 5be2e12f5..9f0dd2416 100644 --- a/.github/workflows/publish.reusable.yml +++ b/.github/workflows/publish.reusable.yml @@ -34,20 +34,25 @@ jobs: RELEASE_TAG: ${{ inputs.release-tag }} PRERELEASE: ${{ inputs.is-prerelease }} - - name: Publish npm packages as nightly - if: inputs.is-prerelease == 'true' + - name: LS those packages run: | - for package in packages/@postgrestools/*; do - npm publish "$package" --tag nightly --access public --provenance - done - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # + ls packages/@postgrestools + cat packages/@postgrestools/postgrestools/package.json - - name: Publish npm packages as latest - if: inputs.is-prerelease != 'true' - run: | - for package in packages/@postgrestools/*; do - npm publish "$package" --tag latest --access public --provenance - done - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + # - name: Publish npm packages as nightly + # if: inputs.is-prerelease == 'true' + # run: | + # for package in packages/@postgrestools/*; do + # npm publish "$package" --tag nightly --access public --provenance + # done + # env: + # NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # + + # - name: Publish npm packages as latest + # if: inputs.is-prerelease != 'true' + # run: | + # for package in packages/@postgrestools/*; do + # npm publish "$package" --tag latest --access public --provenance + # done + # env: + # NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} From d5c4b6bfa83c3147133b0103e0670aaeee1fa608 Mon Sep 17 00:00:00 2001 From: Julian Date: Sat, 13 Sep 2025 15:36:49 +0200 Subject: [PATCH 05/25] cross compilation env vars were required after all --- .github/workflows/release.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 14180f05e..ee658999c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,10 +6,10 @@ on: permissions: contents: write -# env: -# Need these guys for cross-compilation -# CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc -# CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER: aarch64-linux-gnu-gcc +env: + # Need these guys for cross-compilation + CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc + CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER: aarch64-linux-gnu-gcc jobs: # windows does not run git cliff so we need to do it here From 43343aa87cfe22c45e07e2ba6af426e68cdcc01e Mon Sep 17 00:00:00 2001 From: Julian Date: Sat, 13 Sep 2025 16:06:13 +0200 Subject: [PATCH 06/25] gimme that gnu --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ee658999c..754e0d4b0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -64,7 +64,7 @@ jobs: # The Aarch64 Linux is a special snowflake, we need to install its toolchain - name: Install arm64 toolchain - if: matrix.config.target == 'aarch64-unknown-linux-gnu' + if: matrix.config.target == 'aarch64-unknown-linux-gnu' || matrix.config.target == 'aarch64-unknown-linux-musl' run: | sudo apt-get update sudo apt-get install -y gcc-aarch64-linux-gnu From 015c5bed4a75d4e03b65488fae1fc423a4a1d546 Mon Sep 17 00:00:00 2001 From: Julian Date: Sat, 13 Sep 2025 16:38:32 +0200 Subject: [PATCH 07/25] audit, no fortified fns --- .github/workflows/release.yml | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 754e0d4b0..c56e635e4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,7 +14,7 @@ env: jobs: # windows does not run git cliff so we need to do it here extract_version: - name: Extract Version + name: Extract Version & Security Audit runs-on: ubuntu-latest outputs: version: ${{ steps.set_version.outputs.version }} @@ -24,6 +24,13 @@ jobs: with: fetch-depth: 0 + - name: Install cargo-audit + uses: taiki-e/install-action@57511bcdf8cdb0eab6448cb7fa632952d9f25742 # v2.59.1 + with: + tool: cargo-audit + + - name: Audit crates.io dependencies + run: cargo audit - name: Set up git-cliff uses: kenji-miyake/setup-git-cliff@v1 @@ -75,23 +82,13 @@ jobs: sudo apt-get update sudo apt-get install -y musl-tools - # - name: Install cargo-audit - # uses: taiki-e/install-action@57511bcdf8cdb0eab6448cb7fa632952d9f25742 # v2.59.1 - # if: matrix.config.target == 'x86_64-unknown-linux-musl' - # with: - # tool: cargo-audit - - # - name: Audit crates.io dependencies - # if: matrix.config.target == 'x86_64-unknown-linux-musl' - # run: cargo audit + # - name: Setup Postgres + # uses: ./.github/actions/setup-postgres - - name: Setup Postgres - uses: ./.github/actions/setup-postgres - - - name: 🧪 Run Tests - run: cargo test --release - env: - DATABASE_URL: postgres://postgres:postgres@localhost:5432/postgres + # - name: 🧪 Run Tests + # run: cargo test --release + # env: + # DATABASE_URL: postgres://postgres:postgres@localhost:5432/postgres - name: 🛠️ Run Build run: cargo build -p pgt_cli --release --target ${{ matrix.config.target }} @@ -100,6 +97,8 @@ jobs: RUSTFLAGS: "-C strip=symbols -C codegen-units=1" # Inline the version in the CLI binary PGT_VERSION: ${{ needs.extract_version.outputs.version }} + # Disable fortified functions for musl builds (musl doesn't provide __*_chk functions) + CFLAGS: ${{ contains(matrix.config.target, 'musl') && '-D_FORTIFY_SOURCE=0' || '' }} # windows is a special snowflake too, it saves binaries as .exe - name: 👦 Name the Binary From f4277701a9589fd9af0f4ec49434d76eda36b295 Mon Sep 17 00:00:00 2001 From: Julian Date: Sat, 13 Sep 2025 16:42:30 +0200 Subject: [PATCH 08/25] ok then were not doing it --- .github/workflows/release.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c56e635e4..c9eaef624 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,16 +24,6 @@ jobs: with: fetch-depth: 0 - - name: Install cargo-audit - uses: taiki-e/install-action@57511bcdf8cdb0eab6448cb7fa632952d9f25742 # v2.59.1 - with: - tool: cargo-audit - - - name: Audit crates.io dependencies - run: cargo audit - - name: Set up git-cliff - uses: kenji-miyake/setup-git-cliff@v1 - - name: Set version name id: set_version run: echo "version=$(git cliff --bumped-version)" >> "$GITHUB_OUTPUT" From caeb0f24aa6c57738366fa27c2077c230a48768b Mon Sep 17 00:00:00 2001 From: Julian Date: Sat, 13 Sep 2025 16:45:21 +0200 Subject: [PATCH 09/25] guess we need that --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c9eaef624..9463263a1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -72,8 +72,8 @@ jobs: sudo apt-get update sudo apt-get install -y musl-tools - # - name: Setup Postgres - # uses: ./.github/actions/setup-postgres + - name: Setup Postgres + uses: ./.github/actions/setup-postgres # - name: 🧪 Run Tests # run: cargo test --release From 191eea83495791d7118ea280f02b8d50a73329f2 Mon Sep 17 00:00:00 2001 From: Julian Date: Sat, 13 Sep 2025 16:58:19 +0200 Subject: [PATCH 10/25] =?UTF-8?q?more=20packages=E2=80=A6more=20packages?= =?UTF-8?q?=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9463263a1..3b6dd3e84 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -71,6 +71,11 @@ jobs: run: | sudo apt-get update sudo apt-get install -y musl-tools + + - name: Install additional aarch64 musl libraries + if: matrix.config.target == 'aarch64-unknown-linux-musl' + run: | + sudo apt-get install -y gcc-aarch64-linux-gnu libc6-dev-arm64-cross - name: Setup Postgres uses: ./.github/actions/setup-postgres From c629d75a2f95c6b12d340a3b426ff021e02f7745 Mon Sep 17 00:00:00 2001 From: Julian Date: Mon, 15 Sep 2025 08:49:18 +0200 Subject: [PATCH 11/25] try this then --- .github/workflows/release.yml | 16 +++++----------- .../postgrestools/bin/postgrestools | 2 +- .../@postgrestools/postgrestools/package.json | 3 +-- .../postgrestools/scripts/generate-packages.mjs | 9 +++++++++ 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3b6dd3e84..d2a81355c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,7 +9,7 @@ permissions: env: # Need these guys for cross-compilation CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc - CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER: aarch64-linux-gnu-gcc + # CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER: aarch64-linux-gnu-gcc jobs: # windows does not run git cliff so we need to do it here @@ -36,12 +36,11 @@ jobs: config: - { os: ubuntu-22.04, target: x86_64-unknown-linux-gnu } - { os: ubuntu-22.04, target: aarch64-unknown-linux-gnu } - - { os: ubuntu-22.04, target: x86_64-unknown-linux-musl } - - { os: ubuntu-22.04, target: aarch64-unknown-linux-musl } - { os: macos-14, target: x86_64-apple-darwin } - { os: macos-14, target: aarch64-apple-darwin } - { os: windows-2022, target: x86_64-pc-windows-msvc } - { os: windows-2022, target: aarch64-pc-windows-msvc } + - { os: ubuntu-22.04, target: x86_64-unknown-linux-musl } runs-on: ${{ matrix.config.os }} @@ -61,21 +60,16 @@ jobs: # The Aarch64 Linux is a special snowflake, we need to install its toolchain - name: Install arm64 toolchain - if: matrix.config.target == 'aarch64-unknown-linux-gnu' || matrix.config.target == 'aarch64-unknown-linux-musl' + if: matrix.config.target == 'aarch64-unknown-linux-gnu' run: | sudo apt-get update sudo apt-get install -y gcc-aarch64-linux-gnu - name: Install musl toolchain - if: matrix.config.target == 'aarch64-unknown-linux-musl' || matrix.config.target == 'x86_64-unknown-linux-musl' + if: matrix.config.target == 'x86_64-unknown-linux-musl' run: | sudo apt-get update sudo apt-get install -y musl-tools - - - name: Install additional aarch64 musl libraries - if: matrix.config.target == 'aarch64-unknown-linux-musl' - run: | - sudo apt-get install -y gcc-aarch64-linux-gnu libc6-dev-arm64-cross - name: Setup Postgres uses: ./.github/actions/setup-postgres @@ -89,7 +83,7 @@ jobs: run: cargo build -p pgt_cli --release --target ${{ matrix.config.target }} env: # Strip all debug symbols from the resulting binaries - RUSTFLAGS: "-C strip=symbols -C codegen-units=1" + RUSTFLAGS: "-C strip=symbols -C codegen-units=1 ${{ contains(matrix.config.target, 'aarch64') && contains(matrix.config.target, 'musl') && '-C link-arg=-latomic' || '' }}" # Inline the version in the CLI binary PGT_VERSION: ${{ needs.extract_version.outputs.version }} # Disable fortified functions for musl builds (musl doesn't provide __*_chk functions) diff --git a/packages/@postgrestools/postgrestools/bin/postgrestools b/packages/@postgrestools/postgrestools/bin/postgrestools index 5f33dbb40..0292a001f 100755 --- a/packages/@postgrestools/postgrestools/bin/postgrestools +++ b/packages/@postgrestools/postgrestools/bin/postgrestools @@ -16,7 +16,7 @@ const PLATFORMS = { }, "linux-musl": { x64: "@postgrestools/cli-x86_64-linux-musl/postgrestools", - arm64: "@postgrestools/cli-aarch64-linux-musl/postgrestools", + // no arm64 build for musl }, }; diff --git a/packages/@postgrestools/postgrestools/package.json b/packages/@postgrestools/postgrestools/package.json index e675e704e..a172d65f3 100644 --- a/packages/@postgrestools/postgrestools/package.json +++ b/packages/@postgrestools/postgrestools/package.json @@ -39,7 +39,6 @@ "@postgrestools/cli-aarch64-apple-darwin": "", "@postgrestools/cli-x86_64-linux-gnu": "", "@postgrestools/cli-aarch64-linux-gnu": "", - "@postgrestools/cli-x86_64-linux-musl": "", - "@postgrestools/cli-aarch64-linux-musl": "" + "@postgrestools/cli-x86_64-linux-musl": "" } } diff --git a/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs b/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs index 98375e4df..3bf0552f5 100644 --- a/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs +++ b/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs @@ -247,6 +247,15 @@ function getVersion(releaseTag, isPrerelease) { const os = getOs(platform); for (const arch of SUPPORTED_ARCHITECTURES) { + if (platform === "unknown-linux-musl" && arch === "aarch64") { + /** + * It's hard to cross compile from a x86_64 github runner to + * aarch64 architecture using musl. Few users seem to need this combination, + * so we skip it for now. + */ + continue; + } + await makePackageDir(platform, arch); await downloadBinary(platform, arch, os, releaseTag, githubToken); copyBinaryToNativePackage(platform, arch, os); From 8e80feeb3436238fc1436d3e7ce27e0ce3b2c9c6 Mon Sep 17 00:00:00 2001 From: Julian Date: Mon, 15 Sep 2025 09:13:50 +0200 Subject: [PATCH 12/25] skip windows, try again without tag verification --- .github/workflows/release.yml | 12 +++++++----- .../postgrestools/scripts/generate-packages.mjs | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d2a81355c..2a7eadd69 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -38,8 +38,8 @@ jobs: - { os: ubuntu-22.04, target: aarch64-unknown-linux-gnu } - { os: macos-14, target: x86_64-apple-darwin } - { os: macos-14, target: aarch64-apple-darwin } - - { os: windows-2022, target: x86_64-pc-windows-msvc } - - { os: windows-2022, target: aarch64-pc-windows-msvc } + # - { os: windows-2022, target: x86_64-pc-windows-msvc } + # - { os: windows-2022, target: aarch64-pc-windows-msvc } - { os: ubuntu-22.04, target: x86_64-unknown-linux-musl } runs-on: ${{ matrix.config.os }} @@ -134,9 +134,11 @@ jobs: env: GITHUB_REPO: ${{ github.repository }} - - name: Ensure tag matches - if: steps.create_changelog.outputs.version != needs.extract_version.outputs.version - run: exit 1 + # - name: Ensure tag matches + # if: steps.create_changelog.outputs.version != needs.extract_version.outputs.version + # run: | + # echo "Tag does not match: ${{ steps.create_changelog.outputs.version }} vs ${{ needs.extract_version.outputs.version }}" + # exit 1 - name: 👇 Download Artifacts uses: actions/download-artifact@v4 diff --git a/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs b/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs index 3bf0552f5..8a79b049f 100644 --- a/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs +++ b/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs @@ -10,7 +10,7 @@ const CLI_ROOT = resolve(fileURLToPath(import.meta.url), "../.."); const PACKAGES_POSTGRESTOOLS_ROOT = resolve(CLI_ROOT, ".."); const POSTGRESTOOLS_ROOT = resolve(PACKAGES_POSTGRESTOOLS_ROOT, "../.."); const SUPPORTED_PLATFORMS = [ - "pc-windows-msvc", + // "pc-windows-msvc", "apple-darwin", "unknown-linux-gnu", "unknown-linux-musl", From e5a8ceb0bdfcdea9e849b7622daa127a59481744 Mon Sep 17 00:00:00 2001 From: Julian Date: Mon, 15 Sep 2025 09:29:31 +0200 Subject: [PATCH 13/25] musl build? --- .github/workflows/release.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2a7eadd69..28d30ebc2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -41,8 +41,14 @@ jobs: # - { os: windows-2022, target: x86_64-pc-windows-msvc } # - { os: windows-2022, target: aarch64-pc-windows-msvc } - { os: ubuntu-22.04, target: x86_64-unknown-linux-musl } + - { + os: ubuntu-22.04, + target: aarch64-unknown-linux-musl, + container: "messense/rust-musl-cross:aarch64-musl", + } runs-on: ${{ matrix.config.os }} + container: ${{ matrix.config.container }} outputs: artifact_url: ${{ steps.upload-artifacts.outputs.artifact-url }} @@ -51,7 +57,9 @@ jobs: - uses: actions/checkout@v4 with: submodules: true + - uses: actions-rust-lang/setup-rust-toolchain@v1 + if: matrix.config.container == null with: target: ${{ matrix.config.target }} @@ -83,11 +91,9 @@ jobs: run: cargo build -p pgt_cli --release --target ${{ matrix.config.target }} env: # Strip all debug symbols from the resulting binaries - RUSTFLAGS: "-C strip=symbols -C codegen-units=1 ${{ contains(matrix.config.target, 'aarch64') && contains(matrix.config.target, 'musl') && '-C link-arg=-latomic' || '' }}" + RUSTFLAGS: "-C strip=symbols -C codegen-units=1" # Inline the version in the CLI binary PGT_VERSION: ${{ needs.extract_version.outputs.version }} - # Disable fortified functions for musl builds (musl doesn't provide __*_chk functions) - CFLAGS: ${{ contains(matrix.config.target, 'musl') && '-D_FORTIFY_SOURCE=0' || '' }} # windows is a special snowflake too, it saves binaries as .exe - name: 👦 Name the Binary From 4eb2c36b075761a09df7acf3a6109e2c8940725f Mon Sep 17 00:00:00 2001 From: Julian Date: Mon, 15 Sep 2025 09:29:54 +0200 Subject: [PATCH 14/25] ack --- .../postgrestools/scripts/generate-packages.mjs | 9 --------- 1 file changed, 9 deletions(-) diff --git a/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs b/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs index 8a79b049f..fe4e5697f 100644 --- a/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs +++ b/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs @@ -247,15 +247,6 @@ function getVersion(releaseTag, isPrerelease) { const os = getOs(platform); for (const arch of SUPPORTED_ARCHITECTURES) { - if (platform === "unknown-linux-musl" && arch === "aarch64") { - /** - * It's hard to cross compile from a x86_64 github runner to - * aarch64 architecture using musl. Few users seem to need this combination, - * so we skip it for now. - */ - continue; - } - await makePackageDir(platform, arch); await downloadBinary(platform, arch, os, releaseTag, githubToken); copyBinaryToNativePackage(platform, arch, os); From f3033ed3d6f00b168dc56ab05df0de36c38a1bfe Mon Sep 17 00:00:00 2001 From: Julian Date: Mon, 15 Sep 2025 09:39:57 +0200 Subject: [PATCH 15/25] no postgres setup in linux container --- .github/workflows/release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 28d30ebc2..3649ce285 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -80,6 +80,7 @@ jobs: sudo apt-get install -y musl-tools - name: Setup Postgres + if: matrix.config.container == null uses: ./.github/actions/setup-postgres # - name: 🧪 Run Tests @@ -94,6 +95,7 @@ jobs: RUSTFLAGS: "-C strip=symbols -C codegen-units=1" # Inline the version in the CLI binary PGT_VERSION: ${{ needs.extract_version.outputs.version }} + SQLX_OFFLINE: ${{ matrix.config.container != null }} # windows is a special snowflake too, it saves binaries as .exe - name: 👦 Name the Binary From 94d5dd54e5cb488067c5a7221c35c59ca10752d8 Mon Sep 17 00:00:00 2001 From: Julian Date: Mon, 15 Sep 2025 09:47:47 +0200 Subject: [PATCH 16/25] was it the cache? --- .github/workflows/release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3649ce285..f2bd685a3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -64,6 +64,7 @@ jobs: target: ${{ matrix.config.target }} - uses: Swatinem/rust-cache@v2 + if: matrix.config.container == null id: rust-cache # The Aarch64 Linux is a special snowflake, we need to install its toolchain From cea5a6e13a8756078ae01c1608fc759558ffdf98 Mon Sep 17 00:00:00 2001 From: Julian Date: Mon, 15 Sep 2025 09:52:01 +0200 Subject: [PATCH 17/25] debug --- .github/workflows/release.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f2bd685a3..c6c62756f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,6 +58,14 @@ jobs: with: submodules: true + - name: DEBUG Rust Container + if: matrix.config.container != null + run: | + which rustc + rustc --version + rustup show + rustup target list --installed + - uses: actions-rust-lang/setup-rust-toolchain@v1 if: matrix.config.container == null with: From 2c77ea08610853b0d6516f67ad789bb2589d4c36 Mon Sep 17 00:00:00 2001 From: Julian Date: Mon, 15 Sep 2025 09:58:02 +0200 Subject: [PATCH 18/25] odd but ok --- .github/workflows/release.yml | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c6c62756f..a8a852d2e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,14 +58,6 @@ jobs: with: submodules: true - - name: DEBUG Rust Container - if: matrix.config.container != null - run: | - which rustc - rustc --version - rustup show - rustup target list --installed - - uses: actions-rust-lang/setup-rust-toolchain@v1 if: matrix.config.container == null with: @@ -75,6 +67,10 @@ jobs: if: matrix.config.container == null id: rust-cache + - name: Add Rust target in container + if: matrix.config.container != null + run: rustup target add ${{ matrix.config.target }} + # The Aarch64 Linux is a special snowflake, we need to install its toolchain - name: Install arm64 toolchain if: matrix.config.target == 'aarch64-unknown-linux-gnu' From 8005090808d725f490885a92742857169bc6ed51 Mon Sep 17 00:00:00 2001 From: Julian Date: Mon, 15 Sep 2025 09:58:48 +0200 Subject: [PATCH 19/25] ack --- .github/workflows/release.yml | 8 ++++++++ rust-toolchain.toml | 3 --- 2 files changed, 8 insertions(+), 3 deletions(-) delete mode 100644 rust-toolchain.toml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a8a852d2e..c3363889c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,6 +58,14 @@ jobs: with: submodules: true + - name: DEBUG Rust Container + if: matrix.config.container != null + run: | + which rustc + rustc --version + rustup show + rustup target list --installed + - uses: actions-rust-lang/setup-rust-toolchain@v1 if: matrix.config.container == null with: diff --git a/rust-toolchain.toml b/rust-toolchain.toml deleted file mode 100644 index 4501f2a1a..000000000 --- a/rust-toolchain.toml +++ /dev/null @@ -1,3 +0,0 @@ -[toolchain] -profile = "default" -channel = "1.86.0" From 81a8c3456d856e52ec948c632ac487e47446025d Mon Sep 17 00:00:00 2001 From: Julian Date: Mon, 15 Sep 2025 10:10:54 +0200 Subject: [PATCH 20/25] toolchain is back --- crates/pgt_lexer/src/lib.rs | 2 +- rust-toolchain.toml | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 rust-toolchain.toml diff --git a/crates/pgt_lexer/src/lib.rs b/crates/pgt_lexer/src/lib.rs index 45fa6c6bf..5d5c4979a 100644 --- a/crates/pgt_lexer/src/lib.rs +++ b/crates/pgt_lexer/src/lib.rs @@ -7,7 +7,7 @@ pub use crate::lexed::{LexDiagnostic, Lexed}; pub use crate::lexer::Lexer; /// Lex the input string into tokens and diagnostics -pub fn lex(input: &str) -> Lexed { +pub fn lex<'a>(input: &'a str) -> Lexed<'a> { Lexer::new(input).lex() } diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 000000000..8b8d9471a --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,3 @@ +[toolchain] +profile = "default" +channel = "1.86.0" \ No newline at end of file From 01260fa235ca4d047224aacb5950d2a5b871d10d Mon Sep 17 00:00:00 2001 From: Julian Date: Thu, 18 Sep 2025 10:04:48 +0200 Subject: [PATCH 21/25] =?UTF-8?q?should=20be=20it=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/publish.reusable.yml | 35 ++++++------ .github/workflows/release.yml | 35 +++--------- .../scripts/generate-packages.mjs | 54 ++++++++++++------- 3 files changed, 56 insertions(+), 68 deletions(-) diff --git a/.github/workflows/publish.reusable.yml b/.github/workflows/publish.reusable.yml index 9f0dd2416..5be2e12f5 100644 --- a/.github/workflows/publish.reusable.yml +++ b/.github/workflows/publish.reusable.yml @@ -34,25 +34,20 @@ jobs: RELEASE_TAG: ${{ inputs.release-tag }} PRERELEASE: ${{ inputs.is-prerelease }} - - name: LS those packages + - name: Publish npm packages as nightly + if: inputs.is-prerelease == 'true' run: | - ls packages/@postgrestools - cat packages/@postgrestools/postgrestools/package.json - - # - name: Publish npm packages as nightly - # if: inputs.is-prerelease == 'true' - # run: | - # for package in packages/@postgrestools/*; do - # npm publish "$package" --tag nightly --access public --provenance - # done - # env: - # NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # + for package in packages/@postgrestools/*; do + npm publish "$package" --tag nightly --access public --provenance + done + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # - # - name: Publish npm packages as latest - # if: inputs.is-prerelease != 'true' - # run: | - # for package in packages/@postgrestools/*; do - # npm publish "$package" --tag latest --access public --provenance - # done - # env: - # NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + - name: Publish npm packages as latest + if: inputs.is-prerelease != 'true' + run: | + for package in packages/@postgrestools/*; do + npm publish "$package" --tag latest --access public --provenance + done + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c3363889c..fa9177a62 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,7 +9,7 @@ permissions: env: # Need these guys for cross-compilation CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc - # CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER: aarch64-linux-gnu-gcc + CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER: aarch64-linux-gnu-gcc jobs: # windows does not run git cliff so we need to do it here @@ -38,14 +38,9 @@ jobs: - { os: ubuntu-22.04, target: aarch64-unknown-linux-gnu } - { os: macos-14, target: x86_64-apple-darwin } - { os: macos-14, target: aarch64-apple-darwin } - # - { os: windows-2022, target: x86_64-pc-windows-msvc } - # - { os: windows-2022, target: aarch64-pc-windows-msvc } + - { os: windows-2022, target: x86_64-pc-windows-msvc } + - { os: windows-2022, target: aarch64-pc-windows-msvc } - { os: ubuntu-22.04, target: x86_64-unknown-linux-musl } - - { - os: ubuntu-22.04, - target: aarch64-unknown-linux-musl, - container: "messense/rust-musl-cross:aarch64-musl", - } runs-on: ${{ matrix.config.os }} container: ${{ matrix.config.container }} @@ -58,27 +53,13 @@ jobs: with: submodules: true - - name: DEBUG Rust Container - if: matrix.config.container != null - run: | - which rustc - rustc --version - rustup show - rustup target list --installed - - uses: actions-rust-lang/setup-rust-toolchain@v1 - if: matrix.config.container == null with: target: ${{ matrix.config.target }} - uses: Swatinem/rust-cache@v2 - if: matrix.config.container == null id: rust-cache - - name: Add Rust target in container - if: matrix.config.container != null - run: rustup target add ${{ matrix.config.target }} - # The Aarch64 Linux is a special snowflake, we need to install its toolchain - name: Install arm64 toolchain if: matrix.config.target == 'aarch64-unknown-linux-gnu' @@ -93,13 +74,12 @@ jobs: sudo apt-get install -y musl-tools - name: Setup Postgres - if: matrix.config.container == null uses: ./.github/actions/setup-postgres - # - name: 🧪 Run Tests - # run: cargo test --release - # env: - # DATABASE_URL: postgres://postgres:postgres@localhost:5432/postgres + - name: 🧪 Run Tests + run: cargo test --release + env: + DATABASE_URL: postgres://postgres:postgres@localhost:5432/postgres - name: 🛠️ Run Build run: cargo build -p pgt_cli --release --target ${{ matrix.config.target }} @@ -108,7 +88,6 @@ jobs: RUSTFLAGS: "-C strip=symbols -C codegen-units=1" # Inline the version in the CLI binary PGT_VERSION: ${{ needs.extract_version.outputs.version }} - SQLX_OFFLINE: ${{ matrix.config.container != null }} # windows is a special snowflake too, it saves binaries as .exe - name: 👦 Name the Binary diff --git a/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs b/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs index fe4e5697f..abeed0e9e 100644 --- a/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs +++ b/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs @@ -9,14 +9,34 @@ const streamPipeline = promisify(pipeline); const CLI_ROOT = resolve(fileURLToPath(import.meta.url), "../.."); const PACKAGES_POSTGRESTOOLS_ROOT = resolve(CLI_ROOT, ".."); const POSTGRESTOOLS_ROOT = resolve(PACKAGES_POSTGRESTOOLS_ROOT, "../.."); -const SUPPORTED_PLATFORMS = [ - // "pc-windows-msvc", - "apple-darwin", - "unknown-linux-gnu", - "unknown-linux-musl", -]; const MANIFEST_PATH = resolve(CLI_ROOT, "package.json"); -const SUPPORTED_ARCHITECTURES = ["x86_64", "aarch64"]; + +function platformArchCombinations() { + const SUPPORTED_PLATFORMS = [ + "pc-windows-msvc", + "apple-darwin", + "unknown-linux-gnu", + "unknown-linux-musl", + ]; + + const SUPPORTED_ARCHITECTURES = ["x86_64", "aarch64"]; + + return SUPPORTED_PLATFORMS.flatMap((platform) => { + return SUPPORTED_ARCHITECTURES.flatMap((arch) => { + // we do not support MUSL builds on aarch64, as this would + // require difficult cross compilation and most aarch64 users should + // have sufficiently modern glibc versions + if (platform.endsWith("musl") && arch === "aarch64") { + return []; + } + + return { + platform, + arch, + }; + }); + }); +} async function downloadSchema(releaseTag, githubToken) { const assetUrl = `https://github.com/supabase-community/postgres-language-server/releases/download/${releaseTag}/schema.json`; @@ -80,11 +100,8 @@ async function writeManifest(packagePath, version) { fs.readFileSync(manifestPath).toString("utf-8") ); - const nativePackages = SUPPORTED_PLATFORMS.flatMap((platform) => - SUPPORTED_ARCHITECTURES.map((arch) => [ - getPackageName(platform, arch), - version, - ]) + const nativePackages = platformArchCombinations().map( + ({ platform, arch }) => [getPackageName(platform, arch), version] ); manifestData.version = version; @@ -243,15 +260,12 @@ function getVersion(releaseTag, isPrerelease) { await writeManifest("postgrestools", version); await writeManifest("backend-jsonrpc", version); - for (const platform of SUPPORTED_PLATFORMS) { + for (const { platform, arch } of platformArchCombinations()) { const os = getOs(platform); - - for (const arch of SUPPORTED_ARCHITECTURES) { - await makePackageDir(platform, arch); - await downloadBinary(platform, arch, os, releaseTag, githubToken); - copyBinaryToNativePackage(platform, arch, os); - copySchemaToNativePackage(platform, arch); - } + await makePackageDir(platform, arch); + await downloadBinary(platform, arch, os, releaseTag, githubToken); + copyBinaryToNativePackage(platform, arch, os); + copySchemaToNativePackage(platform, arch); } process.exit(0); From 19e31d50e2237ea6e117db1384c9195fd2214bb9 Mon Sep 17 00:00:00 2001 From: Julian Date: Thu, 18 Sep 2025 10:11:32 +0200 Subject: [PATCH 22/25] ok --- .github/workflows/release.yml | 16 +++++++++------- crates/pgt_lexer/src/lib.rs | 2 +- .../postgrestools/bin/postgrestools | 6 +++++- rust-toolchain.toml | 2 +- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fa9177a62..7ccc53055 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,7 +14,7 @@ env: jobs: # windows does not run git cliff so we need to do it here extract_version: - name: Extract Version & Security Audit + name: Extract Version runs-on: ubuntu-latest outputs: version: ${{ steps.set_version.outputs.version }} @@ -24,6 +24,9 @@ jobs: with: fetch-depth: 0 + - name: Set up git-cliff + uses: kenji-miyake/setup-git-cliff@v1 + - name: Set version name id: set_version run: echo "version=$(git cliff --bumped-version)" >> "$GITHUB_OUTPUT" @@ -43,7 +46,6 @@ jobs: - { os: ubuntu-22.04, target: x86_64-unknown-linux-musl } runs-on: ${{ matrix.config.os }} - container: ${{ matrix.config.container }} outputs: artifact_url: ${{ steps.upload-artifacts.outputs.artifact-url }} @@ -134,11 +136,11 @@ jobs: env: GITHUB_REPO: ${{ github.repository }} - # - name: Ensure tag matches - # if: steps.create_changelog.outputs.version != needs.extract_version.outputs.version - # run: | - # echo "Tag does not match: ${{ steps.create_changelog.outputs.version }} vs ${{ needs.extract_version.outputs.version }}" - # exit 1 + - name: Ensure tag matches + if: steps.create_changelog.outputs.version != needs.extract_version.outputs.version + run: | + echo "Tag does not match: ${{ steps.create_changelog.outputs.version }} vs ${{ needs.extract_version.outputs.version }}" + exit 1 - name: 👇 Download Artifacts uses: actions/download-artifact@v4 diff --git a/crates/pgt_lexer/src/lib.rs b/crates/pgt_lexer/src/lib.rs index 5d5c4979a..45fa6c6bf 100644 --- a/crates/pgt_lexer/src/lib.rs +++ b/crates/pgt_lexer/src/lib.rs @@ -7,7 +7,7 @@ pub use crate::lexed::{LexDiagnostic, Lexed}; pub use crate::lexer::Lexer; /// Lex the input string into tokens and diagnostics -pub fn lex<'a>(input: &'a str) -> Lexed<'a> { +pub fn lex(input: &str) -> Lexed { Lexer::new(input).lex() } diff --git a/packages/@postgrestools/postgrestools/bin/postgrestools b/packages/@postgrestools/postgrestools/bin/postgrestools index 0292a001f..fa4c5ac27 100755 --- a/packages/@postgrestools/postgrestools/bin/postgrestools +++ b/packages/@postgrestools/postgrestools/bin/postgrestools @@ -24,7 +24,11 @@ function isMusl() { let stderr; try { stderr = execSync("ldd --version", { - stdio: ["pipe", "pipe", "pipe"], + stdio: [ + "ignore", // stdin + "pipe", // stdout – glibc systems print here + "pipe", // stderr – musl systems print here + ], }); } catch (err) { stderr = err.stderr; diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 8b8d9471a..4501f2a1a 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] profile = "default" -channel = "1.86.0" \ No newline at end of file +channel = "1.86.0" From e02f78c6eb79269c332d9d29759cf86e8b864934 Mon Sep 17 00:00:00 2001 From: Julian Date: Thu, 18 Sep 2025 10:22:32 +0200 Subject: [PATCH 23/25] tab width 4 --- .../scripts/generate-packages.mjs | 396 +++++++++--------- 1 file changed, 199 insertions(+), 197 deletions(-) diff --git a/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs b/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs index abeed0e9e..cd839e4b9 100644 --- a/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs +++ b/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs @@ -12,261 +12,263 @@ const POSTGRESTOOLS_ROOT = resolve(PACKAGES_POSTGRESTOOLS_ROOT, "../.."); const MANIFEST_PATH = resolve(CLI_ROOT, "package.json"); function platformArchCombinations() { - const SUPPORTED_PLATFORMS = [ - "pc-windows-msvc", - "apple-darwin", - "unknown-linux-gnu", - "unknown-linux-musl", - ]; - - const SUPPORTED_ARCHITECTURES = ["x86_64", "aarch64"]; - - return SUPPORTED_PLATFORMS.flatMap((platform) => { - return SUPPORTED_ARCHITECTURES.flatMap((arch) => { - // we do not support MUSL builds on aarch64, as this would - // require difficult cross compilation and most aarch64 users should - // have sufficiently modern glibc versions - if (platform.endsWith("musl") && arch === "aarch64") { - return []; - } - - return { - platform, - arch, - }; + const SUPPORTED_PLATFORMS = [ + "pc-windows-msvc", + "apple-darwin", + "unknown-linux-gnu", + "unknown-linux-musl", + ]; + + const SUPPORTED_ARCHITECTURES = ["x86_64", "aarch64"]; + + return SUPPORTED_PLATFORMS.flatMap((platform) => { + return SUPPORTED_ARCHITECTURES.flatMap((arch) => { + // we do not support MUSL builds on aarch64, as this would + // require difficult cross compilation and most aarch64 users should + // have sufficiently modern glibc versions + if (platform.endsWith("musl") && arch === "aarch64") { + return []; + } + + return { + platform, + arch, + }; + }); }); - }); } async function downloadSchema(releaseTag, githubToken) { - const assetUrl = `https://github.com/supabase-community/postgres-language-server/releases/download/${releaseTag}/schema.json`; + const assetUrl = `https://github.com/supabase-community/postgres-language-server/releases/download/${releaseTag}/schema.json`; - const response = await fetch(assetUrl.trim(), { - headers: { - Authorization: `token ${githubToken}`, - Accept: "application/octet-stream", - }, - }); + const response = await fetch(assetUrl.trim(), { + headers: { + Authorization: `token ${githubToken}`, + Accept: "application/octet-stream", + }, + }); - if (!response.ok) { - throw new Error(`Failed to Fetch Asset from ${assetUrl}`); - } + if (!response.ok) { + throw new Error(`Failed to Fetch Asset from ${assetUrl}`); + } - // download to root. - const fileStream = fs.createWriteStream( - resolve(POSTGRESTOOLS_ROOT, "schema.json") - ); + // download to root. + const fileStream = fs.createWriteStream( + resolve(POSTGRESTOOLS_ROOT, "schema.json") + ); - await streamPipeline(response.body, fileStream); + await streamPipeline(response.body, fileStream); - console.log(`Downloaded schema for ${releaseTag}`); + console.log(`Downloaded schema for ${releaseTag}`); } async function downloadBinary(platform, arch, os, releaseTag, githubToken) { - const buildName = getBuildName(platform, arch); + const buildName = getBuildName(platform, arch); - const assetUrl = `https://github.com/supabase-community/postgres-language-server/releases/download/${releaseTag}/${buildName}`; + const assetUrl = `https://github.com/supabase-community/postgres-language-server/releases/download/${releaseTag}/${buildName}`; - const response = await fetch(assetUrl.trim(), { - headers: { - Authorization: `token ${githubToken}`, - Accept: "application/octet-stream", - }, - }); + const response = await fetch(assetUrl.trim(), { + headers: { + Authorization: `token ${githubToken}`, + Accept: "application/octet-stream", + }, + }); - if (!response.ok) { - const error = await response.text(); - throw new Error( - `Failed to Fetch Asset from ${assetUrl} (Reason: ${error})` - ); - } + if (!response.ok) { + const error = await response.text(); + throw new Error( + `Failed to Fetch Asset from ${assetUrl} (Reason: ${error})` + ); + } - // just download to root. - const fileStream = fs.createWriteStream(getBinarySource(platform, arch, os)); + // just download to root. + const fileStream = fs.createWriteStream( + getBinarySource(platform, arch, os) + ); - await streamPipeline(response.body, fileStream); + await streamPipeline(response.body, fileStream); - console.log(`Downloaded asset for ${buildName} (v${releaseTag})`); + console.log(`Downloaded asset for ${buildName} (v${releaseTag})`); } async function writeManifest(packagePath, version) { - const manifestPath = resolve( - PACKAGES_POSTGRESTOOLS_ROOT, - packagePath, - "package.json" - ); - - const manifestData = JSON.parse( - fs.readFileSync(manifestPath).toString("utf-8") - ); - - const nativePackages = platformArchCombinations().map( - ({ platform, arch }) => [getPackageName(platform, arch), version] - ); - - manifestData.version = version; - manifestData.optionalDependencies = Object.fromEntries(nativePackages); - - console.log(`Update manifest ${manifestPath}`); - const content = JSON.stringify(manifestData, null, 2); - - /** - * writeFileSync seemed to not work reliably? - */ - await new Promise((res, rej) => { - fs.writeFile(manifestPath, content, (e) => (e ? rej(e) : res())); - }); + const manifestPath = resolve( + PACKAGES_POSTGRESTOOLS_ROOT, + packagePath, + "package.json" + ); + + const manifestData = JSON.parse( + fs.readFileSync(manifestPath).toString("utf-8") + ); + + const nativePackages = platformArchCombinations().map( + ({ platform, arch }) => [getPackageName(platform, arch), version] + ); + + manifestData.version = version; + manifestData.optionalDependencies = Object.fromEntries(nativePackages); + + console.log(`Update manifest ${manifestPath}`); + const content = JSON.stringify(manifestData, null, 2); + + /** + * writeFileSync seemed to not work reliably? + */ + await new Promise((res, rej) => { + fs.writeFile(manifestPath, content, (e) => (e ? rej(e) : res())); + }); } async function makePackageDir(platform, arch) { - const buildName = getBuildName(platform, arch); - const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); + const buildName = getBuildName(platform, arch); + const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); - await new Promise((res, rej) => { - fs.mkdir(packageRoot, {}, (e) => (e ? rej(e) : res())); - }); + await new Promise((res, rej) => { + fs.mkdir(packageRoot, {}, (e) => (e ? rej(e) : res())); + }); } function copyBinaryToNativePackage(platform, arch, os) { - // Update the package.json manifest - const buildName = getBuildName(platform, arch); - const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); - const packageName = getPackageName(platform, arch); - - const { version, license, repository, engines } = rootManifest(); - - /** - * We need to map rust triplets to NPM-known values. - * Otherwise, npm will abort the package installation. - */ - const npm_arch = arch === "aarch64" ? "arm64" : "x64"; - let libc = undefined; - let npm_os = undefined; - - switch (os) { - case "linux": { - libc = platform.endsWith("musl") ? "musl" : "gnu"; - npm_os = "linux"; - break; - } - case "windows": { - libc = "msvc"; - npm_os = "win32"; - break; + // Update the package.json manifest + const buildName = getBuildName(platform, arch); + const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); + const packageName = getPackageName(platform, arch); + + const { version, license, repository, engines } = rootManifest(); + + /** + * We need to map rust triplets to NPM-known values. + * Otherwise, npm will abort the package installation. + */ + const npm_arch = arch === "aarch64" ? "arm64" : "x64"; + let libc = undefined; + let npm_os = undefined; + + switch (os) { + case "linux": { + libc = platform.endsWith("musl") ? "musl" : "gnu"; + npm_os = "linux"; + break; + } + case "windows": { + libc = "msvc"; + npm_os = "win32"; + break; + } + case "darwin": { + libc = undefined; + npm_os = "darwin"; + break; + } + default: { + throw new Error(`Unsupported os: ${os}`); + } } - case "darwin": { - libc = undefined; - npm_os = "darwin"; - break; - } - default: { - throw new Error(`Unsupported os: ${os}`); - } - } - - const manifest = JSON.stringify( - { - name: packageName, - version, - license, - repository, - engines, - os: [npm_os], - cpu: [npm_arch], - libc, - }, - null, - 2 - ); - - const ext = getBinaryExt(os); - const manifestPath = resolve(packageRoot, "package.json"); - console.info(`Update manifest ${manifestPath}`); - fs.writeFileSync(manifestPath, manifest); - - // Copy the CLI binary - const binarySource = getBinarySource(platform, arch, os); - const binaryTarget = resolve(packageRoot, `postgrestools${ext}`); - - if (!fs.existsSync(binarySource)) { - console.error( - `Source for binary for ${buildName} not found at: ${binarySource}` + + const manifest = JSON.stringify( + { + name: packageName, + version, + license, + repository, + engines, + os: [npm_os], + cpu: [npm_arch], + libc, + }, + null, + 2 ); - process.exit(1); - } - console.info(`Copy binary ${binaryTarget}`); - fs.copyFileSync(binarySource, binaryTarget); - fs.chmodSync(binaryTarget, 0o755); + const ext = getBinaryExt(os); + const manifestPath = resolve(packageRoot, "package.json"); + console.info(`Update manifest ${manifestPath}`); + fs.writeFileSync(manifestPath, manifest); + + // Copy the CLI binary + const binarySource = getBinarySource(platform, arch, os); + const binaryTarget = resolve(packageRoot, `postgrestools${ext}`); + + if (!fs.existsSync(binarySource)) { + console.error( + `Source for binary for ${buildName} not found at: ${binarySource}` + ); + process.exit(1); + } + + console.info(`Copy binary ${binaryTarget}`); + fs.copyFileSync(binarySource, binaryTarget); + fs.chmodSync(binaryTarget, 0o755); } function copySchemaToNativePackage(platform, arch) { - const buildName = getBuildName(platform, arch); - const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); + const buildName = getBuildName(platform, arch); + const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); - const schemaSrc = resolve(POSTGRESTOOLS_ROOT, "schema.json"); - const schemaTarget = resolve(packageRoot, "schema.json"); + const schemaSrc = resolve(POSTGRESTOOLS_ROOT, "schema.json"); + const schemaTarget = resolve(packageRoot, "schema.json"); - if (!fs.existsSync(schemaSrc)) { - console.error(`schema.json not found at: ${schemaSrc}`); - process.exit(1); - } + if (!fs.existsSync(schemaSrc)) { + console.error(`schema.json not found at: ${schemaSrc}`); + process.exit(1); + } - console.info("Copying schema.json"); - fs.copyFileSync(schemaSrc, schemaTarget); - fs.chmodSync(schemaTarget, 0o666); + console.info("Copying schema.json"); + fs.copyFileSync(schemaSrc, schemaTarget); + fs.chmodSync(schemaTarget, 0o666); } const rootManifest = () => - JSON.parse(fs.readFileSync(MANIFEST_PATH).toString("utf-8")); + JSON.parse(fs.readFileSync(MANIFEST_PATH).toString("utf-8")); function getBinaryExt(os) { - return os === "windows" ? ".exe" : ""; + return os === "windows" ? ".exe" : ""; } function getBinarySource(platform, arch, os) { - const ext = getBinaryExt(os); - return resolve(POSTGRESTOOLS_ROOT, `${getBuildName(platform, arch)}${ext}`); + const ext = getBinaryExt(os); + return resolve(POSTGRESTOOLS_ROOT, `${getBuildName(platform, arch)}${ext}`); } function getBuildName(platform, arch) { - return `postgrestools_${arch}-${platform}`; + return `postgrestools_${arch}-${platform}`; } function getPackageName(platform, arch) { - // trim the "unknown" from linux and the "pc" from windows - const platformName = platform.split("-").slice(-2).join("-"); - return `@postgrestools/cli-${arch}-${platformName}`; + // trim the "unknown" from linux and the "pc" from windows + const platformName = platform.split("-").slice(-2).join("-"); + return `@postgrestools/cli-${arch}-${platformName}`; } function getOs(platform) { - return platform.split("-").find((_, idx) => idx === 1); + return platform.split("-").find((_, idx) => idx === 1); } function getVersion(releaseTag, isPrerelease) { - return releaseTag + (isPrerelease ? "-rc" : ""); + return releaseTag + (isPrerelease ? "-rc" : ""); } (async function main() { - const githubToken = process.env.GITHUB_TOKEN; - const releaseTag = process.env.RELEASE_TAG; - assert(githubToken, "GITHUB_TOKEN not defined!"); - assert(releaseTag, "RELEASE_TAG not defined!"); - - const isPrerelease = process.env.PRERELEASE === "true"; - - await downloadSchema(releaseTag, githubToken); - const version = getVersion(releaseTag, isPrerelease); - await writeManifest("postgrestools", version); - await writeManifest("backend-jsonrpc", version); - - for (const { platform, arch } of platformArchCombinations()) { - const os = getOs(platform); - await makePackageDir(platform, arch); - await downloadBinary(platform, arch, os, releaseTag, githubToken); - copyBinaryToNativePackage(platform, arch, os); - copySchemaToNativePackage(platform, arch); - } - - process.exit(0); + const githubToken = process.env.GITHUB_TOKEN; + const releaseTag = process.env.RELEASE_TAG; + assert(githubToken, "GITHUB_TOKEN not defined!"); + assert(releaseTag, "RELEASE_TAG not defined!"); + + const isPrerelease = process.env.PRERELEASE === "true"; + + await downloadSchema(releaseTag, githubToken); + const version = getVersion(releaseTag, isPrerelease); + await writeManifest("postgrestools", version); + await writeManifest("backend-jsonrpc", version); + + for (const { platform, arch } of platformArchCombinations()) { + const os = getOs(platform); + await makePackageDir(platform, arch); + await downloadBinary(platform, arch, os, releaseTag, githubToken); + copyBinaryToNativePackage(platform, arch, os); + copySchemaToNativePackage(platform, arch); + } + + process.exit(0); })(); From 58508c1cccd832791798afaa52ff20f5494f50a8 Mon Sep 17 00:00:00 2001 From: Julian Date: Thu, 18 Sep 2025 10:23:43 +0200 Subject: [PATCH 24/25] aligned fmt --- .../scripts/generate-packages.mjs | 406 +++++++++--------- 1 file changed, 203 insertions(+), 203 deletions(-) diff --git a/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs b/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs index cd839e4b9..883ba6fd9 100644 --- a/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs +++ b/packages/@postgrestools/postgrestools/scripts/generate-packages.mjs @@ -12,263 +12,263 @@ const POSTGRESTOOLS_ROOT = resolve(PACKAGES_POSTGRESTOOLS_ROOT, "../.."); const MANIFEST_PATH = resolve(CLI_ROOT, "package.json"); function platformArchCombinations() { - const SUPPORTED_PLATFORMS = [ - "pc-windows-msvc", - "apple-darwin", - "unknown-linux-gnu", - "unknown-linux-musl", - ]; - - const SUPPORTED_ARCHITECTURES = ["x86_64", "aarch64"]; - - return SUPPORTED_PLATFORMS.flatMap((platform) => { - return SUPPORTED_ARCHITECTURES.flatMap((arch) => { - // we do not support MUSL builds on aarch64, as this would - // require difficult cross compilation and most aarch64 users should - // have sufficiently modern glibc versions - if (platform.endsWith("musl") && arch === "aarch64") { - return []; - } - - return { - platform, - arch, - }; - }); - }); + const SUPPORTED_PLATFORMS = [ + "pc-windows-msvc", + "apple-darwin", + "unknown-linux-gnu", + "unknown-linux-musl", + ]; + + const SUPPORTED_ARCHITECTURES = ["x86_64", "aarch64"]; + + return SUPPORTED_PLATFORMS.flatMap((platform) => { + return SUPPORTED_ARCHITECTURES.flatMap((arch) => { + // we do not support MUSL builds on aarch64, as this would + // require difficult cross compilation and most aarch64 users should + // have sufficiently modern glibc versions + if (platform.endsWith("musl") && arch === "aarch64") { + return []; + } + + return { + platform, + arch, + }; + }); + }); } async function downloadSchema(releaseTag, githubToken) { - const assetUrl = `https://github.com/supabase-community/postgres-language-server/releases/download/${releaseTag}/schema.json`; + const assetUrl = `https://github.com/supabase-community/postgres-language-server/releases/download/${releaseTag}/schema.json`; - const response = await fetch(assetUrl.trim(), { - headers: { - Authorization: `token ${githubToken}`, - Accept: "application/octet-stream", - }, - }); + const response = await fetch(assetUrl.trim(), { + headers: { + Authorization: `token ${githubToken}`, + Accept: "application/octet-stream", + }, + }); - if (!response.ok) { - throw new Error(`Failed to Fetch Asset from ${assetUrl}`); - } + if (!response.ok) { + throw new Error(`Failed to Fetch Asset from ${assetUrl}`); + } - // download to root. - const fileStream = fs.createWriteStream( - resolve(POSTGRESTOOLS_ROOT, "schema.json") - ); + // download to root. + const fileStream = fs.createWriteStream( + resolve(POSTGRESTOOLS_ROOT, "schema.json") + ); - await streamPipeline(response.body, fileStream); + await streamPipeline(response.body, fileStream); - console.log(`Downloaded schema for ${releaseTag}`); + console.log(`Downloaded schema for ${releaseTag}`); } async function downloadBinary(platform, arch, os, releaseTag, githubToken) { - const buildName = getBuildName(platform, arch); + const buildName = getBuildName(platform, arch); - const assetUrl = `https://github.com/supabase-community/postgres-language-server/releases/download/${releaseTag}/${buildName}`; + const assetUrl = `https://github.com/supabase-community/postgres-language-server/releases/download/${releaseTag}/${buildName}`; - const response = await fetch(assetUrl.trim(), { - headers: { - Authorization: `token ${githubToken}`, - Accept: "application/octet-stream", - }, - }); + const response = await fetch(assetUrl.trim(), { + headers: { + Authorization: `token ${githubToken}`, + Accept: "application/octet-stream", + }, + }); - if (!response.ok) { - const error = await response.text(); - throw new Error( - `Failed to Fetch Asset from ${assetUrl} (Reason: ${error})` - ); - } + if (!response.ok) { + const error = await response.text(); + throw new Error( + `Failed to Fetch Asset from ${assetUrl} (Reason: ${error})` + ); + } - // just download to root. - const fileStream = fs.createWriteStream( - getBinarySource(platform, arch, os) - ); + // just download to root. + const fileStream = fs.createWriteStream( + getBinarySource(platform, arch, os) + ); - await streamPipeline(response.body, fileStream); + await streamPipeline(response.body, fileStream); - console.log(`Downloaded asset for ${buildName} (v${releaseTag})`); + console.log(`Downloaded asset for ${buildName} (v${releaseTag})`); } async function writeManifest(packagePath, version) { - const manifestPath = resolve( - PACKAGES_POSTGRESTOOLS_ROOT, - packagePath, - "package.json" - ); - - const manifestData = JSON.parse( - fs.readFileSync(manifestPath).toString("utf-8") - ); - - const nativePackages = platformArchCombinations().map( - ({ platform, arch }) => [getPackageName(platform, arch), version] - ); - - manifestData.version = version; - manifestData.optionalDependencies = Object.fromEntries(nativePackages); - - console.log(`Update manifest ${manifestPath}`); - const content = JSON.stringify(manifestData, null, 2); - - /** - * writeFileSync seemed to not work reliably? - */ - await new Promise((res, rej) => { - fs.writeFile(manifestPath, content, (e) => (e ? rej(e) : res())); - }); + const manifestPath = resolve( + PACKAGES_POSTGRESTOOLS_ROOT, + packagePath, + "package.json" + ); + + const manifestData = JSON.parse( + fs.readFileSync(manifestPath).toString("utf-8") + ); + + const nativePackages = platformArchCombinations().map( + ({ platform, arch }) => [getPackageName(platform, arch), version] + ); + + manifestData.version = version; + manifestData.optionalDependencies = Object.fromEntries(nativePackages); + + console.log(`Update manifest ${manifestPath}`); + const content = JSON.stringify(manifestData, null, 2); + + /** + * writeFileSync seemed to not work reliably? + */ + await new Promise((res, rej) => { + fs.writeFile(manifestPath, content, (e) => (e ? rej(e) : res())); + }); } async function makePackageDir(platform, arch) { - const buildName = getBuildName(platform, arch); - const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); + const buildName = getBuildName(platform, arch); + const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); - await new Promise((res, rej) => { - fs.mkdir(packageRoot, {}, (e) => (e ? rej(e) : res())); - }); + await new Promise((res, rej) => { + fs.mkdir(packageRoot, {}, (e) => (e ? rej(e) : res())); + }); } function copyBinaryToNativePackage(platform, arch, os) { - // Update the package.json manifest - const buildName = getBuildName(platform, arch); - const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); - const packageName = getPackageName(platform, arch); - - const { version, license, repository, engines } = rootManifest(); - - /** - * We need to map rust triplets to NPM-known values. - * Otherwise, npm will abort the package installation. - */ - const npm_arch = arch === "aarch64" ? "arm64" : "x64"; - let libc = undefined; - let npm_os = undefined; - - switch (os) { - case "linux": { - libc = platform.endsWith("musl") ? "musl" : "gnu"; - npm_os = "linux"; - break; - } - case "windows": { - libc = "msvc"; - npm_os = "win32"; - break; - } - case "darwin": { - libc = undefined; - npm_os = "darwin"; - break; - } - default: { - throw new Error(`Unsupported os: ${os}`); - } - } - - const manifest = JSON.stringify( - { - name: packageName, - version, - license, - repository, - engines, - os: [npm_os], - cpu: [npm_arch], - libc, - }, - null, - 2 - ); - - const ext = getBinaryExt(os); - const manifestPath = resolve(packageRoot, "package.json"); - console.info(`Update manifest ${manifestPath}`); - fs.writeFileSync(manifestPath, manifest); - - // Copy the CLI binary - const binarySource = getBinarySource(platform, arch, os); - const binaryTarget = resolve(packageRoot, `postgrestools${ext}`); - - if (!fs.existsSync(binarySource)) { - console.error( - `Source for binary for ${buildName} not found at: ${binarySource}` - ); - process.exit(1); - } - - console.info(`Copy binary ${binaryTarget}`); - fs.copyFileSync(binarySource, binaryTarget); - fs.chmodSync(binaryTarget, 0o755); + // Update the package.json manifest + const buildName = getBuildName(platform, arch); + const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); + const packageName = getPackageName(platform, arch); + + const { version, license, repository, engines } = rootManifest(); + + /** + * We need to map rust triplets to NPM-known values. + * Otherwise, npm will abort the package installation. + */ + const npm_arch = arch === "aarch64" ? "arm64" : "x64"; + let libc = undefined; + let npm_os = undefined; + + switch (os) { + case "linux": { + libc = platform.endsWith("musl") ? "musl" : "gnu"; + npm_os = "linux"; + break; + } + case "windows": { + libc = "msvc"; + npm_os = "win32"; + break; + } + case "darwin": { + libc = undefined; + npm_os = "darwin"; + break; + } + default: { + throw new Error(`Unsupported os: ${os}`); + } + } + + const manifest = JSON.stringify( + { + name: packageName, + version, + license, + repository, + engines, + os: [npm_os], + cpu: [npm_arch], + libc, + }, + null, + 2 + ); + + const ext = getBinaryExt(os); + const manifestPath = resolve(packageRoot, "package.json"); + console.info(`Update manifest ${manifestPath}`); + fs.writeFileSync(manifestPath, manifest); + + // Copy the CLI binary + const binarySource = getBinarySource(platform, arch, os); + const binaryTarget = resolve(packageRoot, `postgrestools${ext}`); + + if (!fs.existsSync(binarySource)) { + console.error( + `Source for binary for ${buildName} not found at: ${binarySource}` + ); + process.exit(1); + } + + console.info(`Copy binary ${binaryTarget}`); + fs.copyFileSync(binarySource, binaryTarget); + fs.chmodSync(binaryTarget, 0o755); } function copySchemaToNativePackage(platform, arch) { - const buildName = getBuildName(platform, arch); - const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); + const buildName = getBuildName(platform, arch); + const packageRoot = resolve(PACKAGES_POSTGRESTOOLS_ROOT, buildName); - const schemaSrc = resolve(POSTGRESTOOLS_ROOT, "schema.json"); - const schemaTarget = resolve(packageRoot, "schema.json"); + const schemaSrc = resolve(POSTGRESTOOLS_ROOT, "schema.json"); + const schemaTarget = resolve(packageRoot, "schema.json"); - if (!fs.existsSync(schemaSrc)) { - console.error(`schema.json not found at: ${schemaSrc}`); - process.exit(1); - } + if (!fs.existsSync(schemaSrc)) { + console.error(`schema.json not found at: ${schemaSrc}`); + process.exit(1); + } - console.info("Copying schema.json"); - fs.copyFileSync(schemaSrc, schemaTarget); - fs.chmodSync(schemaTarget, 0o666); + console.info("Copying schema.json"); + fs.copyFileSync(schemaSrc, schemaTarget); + fs.chmodSync(schemaTarget, 0o666); } const rootManifest = () => - JSON.parse(fs.readFileSync(MANIFEST_PATH).toString("utf-8")); + JSON.parse(fs.readFileSync(MANIFEST_PATH).toString("utf-8")); function getBinaryExt(os) { - return os === "windows" ? ".exe" : ""; + return os === "windows" ? ".exe" : ""; } function getBinarySource(platform, arch, os) { - const ext = getBinaryExt(os); - return resolve(POSTGRESTOOLS_ROOT, `${getBuildName(platform, arch)}${ext}`); + const ext = getBinaryExt(os); + return resolve(POSTGRESTOOLS_ROOT, `${getBuildName(platform, arch)}${ext}`); } function getBuildName(platform, arch) { - return `postgrestools_${arch}-${platform}`; + return `postgrestools_${arch}-${platform}`; } function getPackageName(platform, arch) { - // trim the "unknown" from linux and the "pc" from windows - const platformName = platform.split("-").slice(-2).join("-"); - return `@postgrestools/cli-${arch}-${platformName}`; + // trim the "unknown" from linux and the "pc" from windows + const platformName = platform.split("-").slice(-2).join("-"); + return `@postgrestools/cli-${arch}-${platformName}`; } function getOs(platform) { - return platform.split("-").find((_, idx) => idx === 1); + return platform.split("-").find((_, idx) => idx === 1); } function getVersion(releaseTag, isPrerelease) { - return releaseTag + (isPrerelease ? "-rc" : ""); + return releaseTag + (isPrerelease ? "-rc" : ""); } (async function main() { - const githubToken = process.env.GITHUB_TOKEN; - const releaseTag = process.env.RELEASE_TAG; - assert(githubToken, "GITHUB_TOKEN not defined!"); - assert(releaseTag, "RELEASE_TAG not defined!"); - - const isPrerelease = process.env.PRERELEASE === "true"; - - await downloadSchema(releaseTag, githubToken); - const version = getVersion(releaseTag, isPrerelease); - await writeManifest("postgrestools", version); - await writeManifest("backend-jsonrpc", version); - - for (const { platform, arch } of platformArchCombinations()) { - const os = getOs(platform); - await makePackageDir(platform, arch); - await downloadBinary(platform, arch, os, releaseTag, githubToken); - copyBinaryToNativePackage(platform, arch, os); - copySchemaToNativePackage(platform, arch); - } - - process.exit(0); + const githubToken = process.env.GITHUB_TOKEN; + const releaseTag = process.env.RELEASE_TAG; + assert(githubToken, "GITHUB_TOKEN not defined!"); + assert(releaseTag, "RELEASE_TAG not defined!"); + + const isPrerelease = process.env.PRERELEASE === "true"; + + await downloadSchema(releaseTag, githubToken); + const version = getVersion(releaseTag, isPrerelease); + await writeManifest("postgrestools", version); + await writeManifest("backend-jsonrpc", version); + + for (const { platform, arch } of platformArchCombinations()) { + const os = getOs(platform); + await makePackageDir(platform, arch); + await downloadBinary(platform, arch, os, releaseTag, githubToken); + copyBinaryToNativePackage(platform, arch, os); + copySchemaToNativePackage(platform, arch); + } + + process.exit(0); })(); From f396563a813c8ac883802d0df04a5f85c74053fb Mon Sep 17 00:00:00 2001 From: Julian Date: Thu, 18 Sep 2025 11:01:04 +0200 Subject: [PATCH 25/25] ok? --- bun.lock | 188 ++++++++++++++++--------------------------------------- 1 file changed, 55 insertions(+), 133 deletions(-) diff --git a/bun.lock b/bun.lock index 705686b7e..a3435297b 100644 --- a/bun.lock +++ b/bun.lock @@ -5,11 +5,11 @@ "name": "postgres_lsp", "devDependencies": { "@biomejs/biome": "1.9.4", - "@types/bun": "latest" + "@types/bun": "latest", }, "peerDependencies": { - "typescript": "^5" - } + "typescript": "^5", + }, }, "packages/@postgrestools/backend-jsonrpc": { "name": "@postgrestools/backend-jsonrpc", @@ -19,13 +19,13 @@ "@postgrestools/cli-linux-arm64": "", "@postgrestools/cli-linux-x64": "", "@postgrestools/cli-win32-arm64": "", - "@postgrestools/cli-win32-x64": "" - } + "@postgrestools/cli-win32-x64": "", + }, }, "packages/@postgrestools/postgrestools": { "name": "@postgrestools/postgrestools", "bin": { - "postgrestools": "bin/postgrestools" + "postgrestools": "bin/postgrestools", }, "optionalDependencies": { "@postgrestools/cli-aarch64-apple-darwin": "", @@ -33,134 +33,56 @@ "@postgrestools/cli-aarch64-windows-msvc": "", "@postgrestools/cli-x86_64-apple-darwin": "", "@postgrestools/cli-x86_64-linux-gnu": "", - "@postgrestools/cli-x86_64-windows-msvc": "" - } - } + "@postgrestools/cli-x86_64-linux-musl": "", + "@postgrestools/cli-x86_64-windows-msvc": "", + }, + }, }, "packages": { - "@biomejs/biome": [ - "@biomejs/biome@1.9.4", - "", - { - "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "1.9.4", - "@biomejs/cli-darwin-x64": "1.9.4", - "@biomejs/cli-linux-arm64": "1.9.4", - "@biomejs/cli-linux-arm64-musl": "1.9.4", - "@biomejs/cli-linux-x64": "1.9.4", - "@biomejs/cli-linux-x64-musl": "1.9.4", - "@biomejs/cli-win32-arm64": "1.9.4", - "@biomejs/cli-win32-x64": "1.9.4" - }, - "bin": { "biome": "bin/biome" } - }, - "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==" - ], - - "@biomejs/cli-darwin-arm64": [ - "@biomejs/cli-darwin-arm64@1.9.4", - "", - { "os": "darwin", "cpu": "arm64" }, - "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==" - ], - - "@biomejs/cli-darwin-x64": [ - "@biomejs/cli-darwin-x64@1.9.4", - "", - { "os": "darwin", "cpu": "x64" }, - "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==" - ], - - "@biomejs/cli-linux-arm64": [ - "@biomejs/cli-linux-arm64@1.9.4", - "", - { "os": "linux", "cpu": "arm64" }, - "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==" - ], - - "@biomejs/cli-linux-arm64-musl": [ - "@biomejs/cli-linux-arm64-musl@1.9.4", - "", - { "os": "linux", "cpu": "arm64" }, - "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==" - ], - - "@biomejs/cli-linux-x64": [ - "@biomejs/cli-linux-x64@1.9.4", - "", - { "os": "linux", "cpu": "x64" }, - "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==" - ], - - "@biomejs/cli-linux-x64-musl": [ - "@biomejs/cli-linux-x64-musl@1.9.4", - "", - { "os": "linux", "cpu": "x64" }, - "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==" - ], - - "@biomejs/cli-win32-arm64": [ - "@biomejs/cli-win32-arm64@1.9.4", - "", - { "os": "win32", "cpu": "arm64" }, - "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==" - ], - - "@biomejs/cli-win32-x64": [ - "@biomejs/cli-win32-x64@1.9.4", - "", - { "os": "win32", "cpu": "x64" }, - "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==" - ], - - "@postgrestools/backend-jsonrpc": [ - "@postgrestools/backend-jsonrpc@workspace:packages/@postgrestools/backend-jsonrpc" - ], - - "@postgrestools/postgrestools": [ - "@postgrestools/postgrestools@workspace:packages/@postgrestools/postgrestools" - ], - - "@types/bun": [ - "@types/bun@1.2.5", - "", - { "dependencies": { "bun-types": "1.2.5" } }, - "sha512-w2OZTzrZTVtbnJew1pdFmgV99H0/L+Pvw+z1P67HaR18MHOzYnTYOi6qzErhK8HyT+DB782ADVPPE92Xu2/Opg==" - ], - - "@types/node": [ - "@types/node@22.13.10", - "", - { "dependencies": { "undici-types": "~6.20.0" } }, - "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==" - ], - - "@types/ws": [ - "@types/ws@8.5.14", - "", - { "dependencies": { "@types/node": "*" } }, - "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==" - ], - - "bun-types": [ - "bun-types@1.2.5", - "", - { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, - "sha512-3oO6LVGGRRKI4kHINx5PIdIgnLRb7l/SprhzqXapmoYkFl5m4j6EvALvbDVuuBFaamB46Ap6HCUxIXNLCGy+tg==" - ], - - "typescript": [ - "typescript@5.8.2", - "", - { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, - "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==" - ], - - "undici-types": [ - "undici-types@6.20.0", - "", - {}, - "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" - ] + "@biomejs/biome": ["@biomejs/biome@1.9.4", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "1.9.4", "@biomejs/cli-darwin-x64": "1.9.4", "@biomejs/cli-linux-arm64": "1.9.4", "@biomejs/cli-linux-arm64-musl": "1.9.4", "@biomejs/cli-linux-x64": "1.9.4", "@biomejs/cli-linux-x64-musl": "1.9.4", "@biomejs/cli-win32-arm64": "1.9.4", "@biomejs/cli-win32-x64": "1.9.4" }, "bin": { "biome": "bin/biome" } }, "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog=="], + + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@1.9.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw=="], + + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@1.9.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg=="], + + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@1.9.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g=="], + + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@1.9.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA=="], + + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@1.9.4", "", { "os": "linux", "cpu": "x64" }, "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg=="], + + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@1.9.4", "", { "os": "linux", "cpu": "x64" }, "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg=="], + + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@1.9.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg=="], + + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@1.9.4", "", { "os": "win32", "cpu": "x64" }, "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA=="], + + "@postgrestools/backend-jsonrpc": ["@postgrestools/backend-jsonrpc@workspace:packages/@postgrestools/backend-jsonrpc"], + + "@postgrestools/cli-aarch64-apple-darwin": ["@postgrestools/cli-aarch64-apple-darwin@0.13.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-LqgpsiupuNR1m8rSqcMdwep1UsSG5z7RZ9MYHODBB0+AsN/e1YzcyutqGeKs+AfDBdKdv7QmSbpf7KruBYL+tg=="], + + "@postgrestools/cli-aarch64-linux-gnu": ["@postgrestools/cli-aarch64-linux-gnu@0.13.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-QxZZBvg9qAo9raTA5cSuSXlrqo+eCUtYMWSR2dgDCEqogNlo/62ubWYgPi+SMEtfm9euqG1GOItxyRv6xUriEA=="], + + "@postgrestools/cli-aarch64-windows-msvc": ["@postgrestools/cli-aarch64-windows-msvc@0.13.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-C8BRZOPQA16eGL8Kk7D4M+9h2Y7x0GOJEBzjR3ZV54besoH8gcZqSxzaA8WbFczQ3dgEZ5CStny6asl3B5JMHA=="], + + "@postgrestools/cli-x86_64-apple-darwin": ["@postgrestools/cli-x86_64-apple-darwin@0.13.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-stbU4+en82DofjzpAQlfgKemJe1lbkGhuOAxfWce4jyT25+cil6cEWBia0hZyrve9sVEJctE1MHy9os8s3EGww=="], + + "@postgrestools/cli-x86_64-linux-gnu": ["@postgrestools/cli-x86_64-linux-gnu@0.13.0", "", { "os": "linux", "cpu": "x64" }, "sha512-RPFdgcAiD+BWhSFw7suI0jTkJysHlHzrD4in27OGlKt9AvZ6TgKrCfDatUkn2VQfn6Ib8o/+1roFOKwFbfQIOw=="], + + "@postgrestools/cli-x86_64-windows-msvc": ["@postgrestools/cli-x86_64-windows-msvc@0.13.0", "", { "os": "win32", "cpu": "x64" }, "sha512-4S6mbvc9u6ipeMcZHwX3RqGMJaNR9B5utMQN/N3LBnvLx62N9MHU1bk3bnGxfHoALXQTMq+us7M9GvEe1izGHQ=="], + + "@postgrestools/postgrestools": ["@postgrestools/postgrestools@workspace:packages/@postgrestools/postgrestools"], + + "@types/bun": ["@types/bun@1.2.5", "", { "dependencies": { "bun-types": "1.2.5" } }, "sha512-w2OZTzrZTVtbnJew1pdFmgV99H0/L+Pvw+z1P67HaR18MHOzYnTYOi6qzErhK8HyT+DB782ADVPPE92Xu2/Opg=="], + + "@types/node": ["@types/node@22.13.10", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw=="], + + "@types/ws": ["@types/ws@8.5.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw=="], + + "bun-types": ["bun-types@1.2.5", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-3oO6LVGGRRKI4kHINx5PIdIgnLRb7l/SprhzqXapmoYkFl5m4j6EvALvbDVuuBFaamB46Ap6HCUxIXNLCGy+tg=="], + + "typescript": ["typescript@5.8.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ=="], + + "undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="], } }