From e09d71d26a0cfc895ed0d6ff57cb5ac8033bedad Mon Sep 17 00:00:00 2001 From: Emily Date: Mon, 15 Jul 2024 12:37:34 +0200 Subject: [PATCH 01/57] autoupdate oclif --- .github/workflows/release-cli-assets.yml | 29 +++++++++++++++++++ .github/workflows/release.yml | 2 ++ cli/package.json | 10 ++++++- package.json | 1 + scripts/release-cli-upload.ts | 37 ++++++++++++++++++++++++ scripts/release-cli.ts | 12 +------- scripts/utils.ts | 10 +++++++ 7 files changed, 89 insertions(+), 12 deletions(-) create mode 100644 scripts/release-cli-upload.ts create mode 100644 scripts/utils.ts diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 891bd27b9..7d347d842 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -7,6 +7,15 @@ on: description: 'Published packages' required: true type: string + commitSha: + description: 'Commit SHA' + required: true + type: string + channel: + description: 'Channel' + required: true + type: string + default: 'latest' workflow_dispatch: inputs: publishedPackages: @@ -14,6 +23,15 @@ on: required: true default: '[{"name": "@xata.io/cli", "version": "1.2.0"}]' type: string + commitSha: + description: 'Commit SHA' + required: true + type: string + channel: + description: 'Channel' + required: true + type: string + default: 'latest' jobs: release-cli-assets: @@ -88,6 +106,17 @@ jobs: MATRIX_OS: ${{ matrix.os }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Upload & Promote CLI Assets to S3 + run: pnpm run release:cli:upload + env: + PUBLISHED_PACKAGES: ${{ inputs.publishedPackages }} + MATRIX_OS: ${{ matrix.os }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_EC2_METADATA_DISABLED: true + COMMIT_SHA: ${{ inputs.commitSha }} + CHANNEL: ${{ inputs.channel }} + - name: Clean up keychain if: matrix.os == 'macos-latest' run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1cbc1c41d..f172bd260 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -75,4 +75,6 @@ jobs: uses: ./.github/workflows/release-cli-assets.yml with: publishedPackages: ${{ needs.release.outputs.publishedPackages }} + commitSha: ${{ github.sha }} + channel: ${{ github.ref }} secrets: inherit diff --git a/cli/package.json b/cli/package.json index 5bcbe8c8c..fdd7250e4 100644 --- a/cli/package.json +++ b/cli/package.json @@ -77,6 +77,13 @@ }, "oclif": { "bin": "xata", + "update": { + "s3": { + "host": "https://s3.console.aws.amazon.com/", + "bucket": "xata-cli-assets", + "acl": "bucket-owner-full-control" + } + }, "hooks": { "init": "./dist/hooks/init/compatibility" }, @@ -95,7 +102,8 @@ "plugins": [ "@oclif/plugin-help", "@oclif/plugin-plugins", - "@oclif/plugin-not-found" + "@oclif/plugin-not-found", + "@oclif/plugin-update" ], "topicSeparator": " ", "topics": { diff --git a/package.json b/package.json index 360ceec0b..c72e6877a 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "test": "vitest", "test:canary": "tsx ./scripts/test-canary.ts", "release:cli": "tsx ./scripts/release-cli.ts", + "release:cli:upload": "tsx ./scripts/release-cli-upload.ts", "lint": "eslint .", "lint:fix": "eslint . --fix", "prepare": "husky install", diff --git a/scripts/release-cli-upload.ts b/scripts/release-cli-upload.ts new file mode 100644 index 000000000..24bef58c5 --- /dev/null +++ b/scripts/release-cli-upload.ts @@ -0,0 +1,37 @@ +import { exec as execRaw } from 'child_process'; +import * as util from 'util'; +import { matrixToOclif } from './utils'; +import { readProjectManifest } from '@pnpm/read-project-manifest'; +const exec = util.promisify(execRaw); + +async function main() { + if (!process.env.MATRIX_OS) throw new Error('MATRIX_OS is not set'); + if (!process.env.AWS_ACCESS_KEY_ID) throw new Error('AWS_ACCESS_KEY_ID is not set'); + if (!process.env.AWS_SECRET_ACCESS_KEY) throw new Error('AWS_SECRET_ACCESS_KEY is not set'); + if (!process.env.PUBLISHED_PACKAGES) throw new Error('PUBLISHED_PACKAGES is not set'); + if (!process.env.COMMIT) throw new Error('COMMIT is not set'); + if (!process.env.CHANNEL) throw new Error('CHANNEL is not set'); + + const PATH_TO_CLI = process.cwd() + '/cli'; + + if ( + process.env.PUBLISHED_PACKAGES === '' || + !(JSON.parse(process.env.PUBLISHED_PACKAGES) as Array<{ name: string; version: string }>).find( + (change) => change.name === '@xata.io/cli' + ) + ) { + console.log('No changes in cli. Skipping asset release.'); + return; + } + + const { + manifest: { version } + } = await readProjectManifest(PATH_TO_CLI); + const platform = matrixToOclif(process.env.MATRIX_OS); + exec(`pnpm oclif upload ${platform}`); + exec( + `pnpm oclif promote ${platform} --sha=${process.env.COMMIT} --indexes --version=${version} --channel=${process.env.CHANNEL}` + ); +} + +main(); diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index e5bfaf3b7..5e05dd845 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -5,6 +5,7 @@ import { execFile, exec as execRaw } from 'child_process'; import { Octokit } from '@octokit/core'; import fs from 'fs'; import * as util from 'util'; +import { matrixToOclif } from './utils'; const exec = util.promisify(execRaw); const PATH_TO_CLI = process.cwd() + '/cli'; @@ -21,17 +22,6 @@ const base = { } }; -const matrixToOclif = (os: string) => { - switch (os) { - case 'macos-latest': - return 'macos'; - case 'ubuntu-latest': - return 'deb'; - default: - throw new Error('Unsupported OS'); - } -}; - async function main() { if (!process.env.MATRIX_OS) throw new Error('MATRIX_OS is not set'); if (!process.env.GITHUB_TOKEN) throw new Error('GITHUB_TOKEN is not set'); diff --git a/scripts/utils.ts b/scripts/utils.ts new file mode 100644 index 000000000..86e1985e4 --- /dev/null +++ b/scripts/utils.ts @@ -0,0 +1,10 @@ +export const matrixToOclif = (os: string) => { + switch (os) { + case 'macos-latest': + return 'macos'; + case 'ubuntu-latest': + return 'deb'; + default: + throw new Error('Unsupported OS'); + } +}; From 94b2df7fc27496fd34f2b30aa92d8c4bf916f5f3 Mon Sep 17 00:00:00 2001 From: Emily Date: Mon, 15 Jul 2024 15:59:32 +0200 Subject: [PATCH 02/57] clean --- scripts/release-cli-upload.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/release-cli-upload.ts b/scripts/release-cli-upload.ts index 24bef58c5..c7c2cee61 100644 --- a/scripts/release-cli-upload.ts +++ b/scripts/release-cli-upload.ts @@ -30,7 +30,7 @@ async function main() { const platform = matrixToOclif(process.env.MATRIX_OS); exec(`pnpm oclif upload ${platform}`); exec( - `pnpm oclif promote ${platform} --sha=${process.env.COMMIT} --indexes --version=${version} --channel=${process.env.CHANNEL}` + `pnpm oclif promote --${platform} --sha=${process.env.COMMIT} --indexes --version=${version} --channel=${process.env.CHANNEL}` ); } From 434fa5f7887347a8a3aff5c4cceaab0d2893187d Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 16 Jul 2024 09:25:01 +0200 Subject: [PATCH 03/57] use arn --- .github/workflows/release-cli-assets.yml | 1 + scripts/release-cli-upload.ts | 13 +++---------- scripts/release-cli.ts | 12 ++---------- scripts/utils.ts | 13 +++++++++++++ 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 7d347d842..3f01c1da4 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -116,6 +116,7 @@ jobs: AWS_EC2_METADATA_DISABLED: true COMMIT_SHA: ${{ inputs.commitSha }} CHANNEL: ${{ inputs.channel }} + AWS_ROLE_ARN: ${{ secrets.CLI_ASSETS_UPLOAD_ROLE }} - name: Clean up keychain if: matrix.os == 'macos-latest' diff --git a/scripts/release-cli-upload.ts b/scripts/release-cli-upload.ts index c7c2cee61..171e49f0c 100644 --- a/scripts/release-cli-upload.ts +++ b/scripts/release-cli-upload.ts @@ -1,6 +1,6 @@ import { exec as execRaw } from 'child_process'; import * as util from 'util'; -import { matrixToOclif } from './utils'; +import { matrixToOclif, publishedPackagesContains } from './utils'; import { readProjectManifest } from '@pnpm/read-project-manifest'; const exec = util.promisify(execRaw); @@ -11,18 +11,11 @@ async function main() { if (!process.env.PUBLISHED_PACKAGES) throw new Error('PUBLISHED_PACKAGES is not set'); if (!process.env.COMMIT) throw new Error('COMMIT is not set'); if (!process.env.CHANNEL) throw new Error('CHANNEL is not set'); + if (!process.env.AWS_ROLE_ARN) throw new Error('AWS_ROLE_ARN is not set'); const PATH_TO_CLI = process.cwd() + '/cli'; - if ( - process.env.PUBLISHED_PACKAGES === '' || - !(JSON.parse(process.env.PUBLISHED_PACKAGES) as Array<{ name: string; version: string }>).find( - (change) => change.name === '@xata.io/cli' - ) - ) { - console.log('No changes in cli. Skipping asset release.'); - return; - } + if (!publishedPackagesContains(process.env.PUBLISHED_PACKAGES, '@xata.io/cli')) return; const { manifest: { version } diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index 5e05dd845..20ea80e26 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -5,7 +5,7 @@ import { execFile, exec as execRaw } from 'child_process'; import { Octokit } from '@octokit/core'; import fs from 'fs'; import * as util from 'util'; -import { matrixToOclif } from './utils'; +import { matrixToOclif, publishedPackagesContains } from './utils'; const exec = util.promisify(execRaw); const PATH_TO_CLI = process.cwd() + '/cli'; @@ -27,15 +27,7 @@ async function main() { if (!process.env.GITHUB_TOKEN) throw new Error('GITHUB_TOKEN is not set'); if (!process.env.PUBLISHED_PACKAGES) throw new Error('PUBLISHED_PACKAGES is not set'); - if ( - process.env.PUBLISHED_PACKAGES === '' || - !(JSON.parse(process.env.PUBLISHED_PACKAGES) as Array<{ name: string; version: string }>).find( - (change) => change.name === '@xata.io/cli' - ) - ) { - console.log('No changes in cli. Skipping asset release.'); - return; - } + if (!publishedPackagesContains(process.env.PUBLISHED_PACKAGES, '@xata.io/cli')) return; const operatingSystem = matrixToOclif(process.env.MATRIX_OS); diff --git a/scripts/utils.ts b/scripts/utils.ts index 86e1985e4..d31e5283b 100644 --- a/scripts/utils.ts +++ b/scripts/utils.ts @@ -8,3 +8,16 @@ export const matrixToOclif = (os: string) => { throw new Error('Unsupported OS'); } }; + +export const publishedPackagesContains = (publishedPackages: string, packageName: string) => { + if ( + publishedPackages === '' || + !(JSON.parse(publishedPackages) as Array<{ name: string; version: string }>).find( + (change) => change.name === packageName + ) + ) { + console.log('No changes in cli. Skipping asset release.'); + return false; + } + return true; +}; From 6cb6f7b1b8904d6b74b6c56f75da626eb2b18555 Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 16 Jul 2024 09:43:40 +0200 Subject: [PATCH 04/57] types --- scripts/release-cli.ts | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index 20ea80e26..95a4440e0 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -51,16 +51,22 @@ async function main() { // Assume changeset version has been called and all the // versions in package jsons are up to date - const workspaceProtocolPackageManifest = await createExportableManifest(PATH_TO_CLI, { - ...manifest, - dependencies: { - ...manifest.dependencies, - '@xata.io/client': clientVersion, - '@xata.io/codegen': codegenVersion, - '@xata.io/importer': importerVersion, - '@xata.io/pgroll': pgrollVersion + const workspaceProtocolPackageManifest = await createExportableManifest( + PATH_TO_CLI, + { + ...manifest, + dependencies: { + ...manifest.dependencies, + '@xata.io/client': clientVersion, + '@xata.io/codegen': codegenVersion, + '@xata.io/importer': importerVersion, + '@xata.io/pgroll': pgrollVersion + } + }, + { + catalogs: {} } - }); + ); await writeProjectManifest(`${PATH_TO_CLI}/${fileName}`, workspaceProtocolPackageManifest); From 1427ec2b4eedfb3dab15b758665383dc0c01c7e6 Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 16 Jul 2024 10:47:44 +0200 Subject: [PATCH 05/57] only run on main --- .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 f172bd260..09680b197 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -71,7 +71,7 @@ jobs: publish-cli-assets: name: Publish CLI assets needs: [release] - if: needs.release.outputs.published == 'true' + if: needs.release.outputs.published == 'true' && github.ref_name == 'main' uses: ./.github/workflows/release-cli-assets.yml with: publishedPackages: ${{ needs.release.outputs.publishedPackages }} From 25fb9f34fdfee8975148651b8cbcd5705d2f5236 Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 16 Jul 2024 10:50:49 +0200 Subject: [PATCH 06/57] use arn --- .github/workflows/release-cli-assets.yml | 10 +++++++--- scripts/release-cli-upload.ts | 3 --- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 3f01c1da4..20cdf7037 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -106,17 +106,21 @@ jobs: MATRIX_OS: ${{ matrix.os }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Configure AWS Credentials for production + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.CLI_ASSETS_UPLOAD_ROLE }} + aws-region: us-east-1 + mask-aws-account-id: 'no' + - name: Upload & Promote CLI Assets to S3 run: pnpm run release:cli:upload env: PUBLISHED_PACKAGES: ${{ inputs.publishedPackages }} MATRIX_OS: ${{ matrix.os }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_EC2_METADATA_DISABLED: true COMMIT_SHA: ${{ inputs.commitSha }} CHANNEL: ${{ inputs.channel }} - AWS_ROLE_ARN: ${{ secrets.CLI_ASSETS_UPLOAD_ROLE }} - name: Clean up keychain if: matrix.os == 'macos-latest' diff --git a/scripts/release-cli-upload.ts b/scripts/release-cli-upload.ts index 171e49f0c..2882807b3 100644 --- a/scripts/release-cli-upload.ts +++ b/scripts/release-cli-upload.ts @@ -6,12 +6,9 @@ const exec = util.promisify(execRaw); async function main() { if (!process.env.MATRIX_OS) throw new Error('MATRIX_OS is not set'); - if (!process.env.AWS_ACCESS_KEY_ID) throw new Error('AWS_ACCESS_KEY_ID is not set'); - if (!process.env.AWS_SECRET_ACCESS_KEY) throw new Error('AWS_SECRET_ACCESS_KEY is not set'); if (!process.env.PUBLISHED_PACKAGES) throw new Error('PUBLISHED_PACKAGES is not set'); if (!process.env.COMMIT) throw new Error('COMMIT is not set'); if (!process.env.CHANNEL) throw new Error('CHANNEL is not set'); - if (!process.env.AWS_ROLE_ARN) throw new Error('AWS_ROLE_ARN is not set'); const PATH_TO_CLI = process.cwd() + '/cli'; From 95576793149d7897b1f232563d2377cc71315a44 Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 16 Jul 2024 11:11:40 +0200 Subject: [PATCH 07/57] id-token perm --- .github/workflows/release-cli-assets.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 20cdf7037..00d1ed568 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -33,6 +33,10 @@ on: type: string default: 'latest' +permissions: + id-token: write + contents: read + jobs: release-cli-assets: name: Release CLI assets From b32c17f82abcb7bc2bbd0629986ccdb1d1cd8249 Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 16 Jul 2024 11:17:58 +0200 Subject: [PATCH 08/57] perm --- .github/workflows/release-cli-assets.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 00d1ed568..db8178219 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -35,7 +35,6 @@ on: permissions: id-token: write - contents: read jobs: release-cli-assets: From 240ff755632d766ff846efd293b0b3e9533f007a Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 16 Jul 2024 11:46:15 +0200 Subject: [PATCH 09/57] scoped permission --- .github/workflows/release-cli-assets.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index db8178219..b904d3ec7 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -33,9 +33,6 @@ on: type: string default: 'latest' -permissions: - id-token: write - jobs: release-cli-assets: name: Release CLI assets @@ -110,6 +107,9 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Configure AWS Credentials for production + permissions: + id-token: write + contents: read uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ secrets.CLI_ASSETS_UPLOAD_ROLE }} From d1d2fab750c6b14e8664de0a9ccb61a35226aa36 Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 16 Jul 2024 11:49:14 +0200 Subject: [PATCH 10/57] write --- .github/workflows/release-cli-assets.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index b904d3ec7..09252f74c 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -33,6 +33,13 @@ on: type: string default: 'latest' +permissions: + id-token: write + contents: write + packages: write + pages: write + pull-requests: write + jobs: release-cli-assets: name: Release CLI assets @@ -107,9 +114,6 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Configure AWS Credentials for production - permissions: - id-token: write - contents: read uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ secrets.CLI_ASSETS_UPLOAD_ROLE }} From 09fd500584664cae2b9fad7c170cabc1286d29a2 Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 16 Jul 2024 11:53:22 +0200 Subject: [PATCH 11/57] var --- scripts/release-cli-upload.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/release-cli-upload.ts b/scripts/release-cli-upload.ts index 2882807b3..4f4b95fa9 100644 --- a/scripts/release-cli-upload.ts +++ b/scripts/release-cli-upload.ts @@ -7,7 +7,7 @@ const exec = util.promisify(execRaw); async function main() { if (!process.env.MATRIX_OS) throw new Error('MATRIX_OS is not set'); if (!process.env.PUBLISHED_PACKAGES) throw new Error('PUBLISHED_PACKAGES is not set'); - if (!process.env.COMMIT) throw new Error('COMMIT is not set'); + if (!process.env.COMMIT_SHA) throw new Error('COMMIT_SHA is not set'); if (!process.env.CHANNEL) throw new Error('CHANNEL is not set'); const PATH_TO_CLI = process.cwd() + '/cli'; @@ -20,7 +20,7 @@ async function main() { const platform = matrixToOclif(process.env.MATRIX_OS); exec(`pnpm oclif upload ${platform}`); exec( - `pnpm oclif promote --${platform} --sha=${process.env.COMMIT} --indexes --version=${version} --channel=${process.env.CHANNEL}` + `pnpm oclif promote --${platform} --sha=${process.env.COMMIT_SHA} --indexes --version=${version} --channel=${process.env.CHANNEL}` ); } From e14cbf253aed069afe8796ebe8b4112002b9e812 Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 16 Jul 2024 11:58:22 +0200 Subject: [PATCH 12/57] chdir --- scripts/release-cli-upload.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/release-cli-upload.ts b/scripts/release-cli-upload.ts index 4f4b95fa9..6e264301f 100644 --- a/scripts/release-cli-upload.ts +++ b/scripts/release-cli-upload.ts @@ -17,7 +17,11 @@ async function main() { const { manifest: { version } } = await readProjectManifest(PATH_TO_CLI); + const platform = matrixToOclif(process.env.MATRIX_OS); + + process.chdir(PATH_TO_CLI); + exec(`pnpm oclif upload ${platform}`); exec( `pnpm oclif promote --${platform} --sha=${process.env.COMMIT_SHA} --indexes --version=${version} --channel=${process.env.CHANNEL}` From c6d297c72d6e37af05c39ec0b37486da60c97490 Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 16 Jul 2024 12:04:59 +0200 Subject: [PATCH 13/57] wait --- scripts/release-cli-upload.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/scripts/release-cli-upload.ts b/scripts/release-cli-upload.ts index 6e264301f..22e95a62e 100644 --- a/scripts/release-cli-upload.ts +++ b/scripts/release-cli-upload.ts @@ -22,10 +22,15 @@ async function main() { process.chdir(PATH_TO_CLI); - exec(`pnpm oclif upload ${platform}`); - exec( + const uploadRes = await exec(`pnpm oclif upload ${platform}`); + + console.log('Uploaded release', uploadRes.stdout); + + const promoteRes = await exec( `pnpm oclif promote --${platform} --sha=${process.env.COMMIT_SHA} --indexes --version=${version} --channel=${process.env.CHANNEL}` ); + + console.log('Promoted release', promoteRes.stdout); } main(); From 3a31d212563910fe17b2fade142db56e3de2b514 Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 16 Jul 2024 13:25:18 +0200 Subject: [PATCH 14/57] use targets --- scripts/release-cli-upload.ts | 24 +++++++++++++++++++----- scripts/utils.ts | 13 +++++++++++++ 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/scripts/release-cli-upload.ts b/scripts/release-cli-upload.ts index 22e95a62e..6bfe1aefa 100644 --- a/scripts/release-cli-upload.ts +++ b/scripts/release-cli-upload.ts @@ -1,6 +1,6 @@ import { exec as execRaw } from 'child_process'; import * as util from 'util'; -import { matrixToOclif, publishedPackagesContains } from './utils'; +import { matrixToOclif, platformDistributions, publishedPackagesContains } from './utils'; import { readProjectManifest } from '@pnpm/read-project-manifest'; const exec = util.promisify(execRaw); @@ -18,19 +18,33 @@ async function main() { manifest: { version } } = await readProjectManifest(PATH_TO_CLI); + if (!version) throw new Error('Missing package version.'); + const platform = matrixToOclif(process.env.MATRIX_OS); process.chdir(PATH_TO_CLI); - const uploadRes = await exec(`pnpm oclif upload ${platform}`); + await uploadS3(platform); + + await promoteS3(version, platformDistributions(platform)); + + // Upload and promote windows since it is packed on linux + if (platform === 'deb') { + await uploadS3('win'); + await promoteS3(version, platformDistributions('win')); + } +} +const uploadS3 = async (platform: 'macos' | 'deb' | 'win') => { + const uploadRes = await exec(`pnpm oclif upload ${platform}`); console.log('Uploaded release', uploadRes.stdout); +}; +const promoteS3 = async (version: string, distribution: string) => { const promoteRes = await exec( - `pnpm oclif promote --${platform} --sha=${process.env.COMMIT_SHA} --indexes --version=${version} --channel=${process.env.CHANNEL}` + `pnpm oclif promote --sha=${process.env.COMMIT_SHA} --indexes --version=${version} --channel=${process.env.CHANNEL} --targets=${distribution}` ); - console.log('Promoted release', promoteRes.stdout); -} +}; main(); diff --git a/scripts/utils.ts b/scripts/utils.ts index d31e5283b..70b3bf97d 100644 --- a/scripts/utils.ts +++ b/scripts/utils.ts @@ -9,6 +9,19 @@ export const matrixToOclif = (os: string) => { } }; +export const platformDistributions = (os: string) => { + switch (os) { + case 'macos': + return 'darwin-arm64,darwin-x64'; + case 'deb': + return 'linux-arm,linux-arm64,linux-x64'; + case 'win': + return 'win32-x64,win32-x86'; + default: + throw new Error('Unsupported Platform'); + } +}; + export const publishedPackagesContains = (publishedPackages: string, packageName: string) => { if ( publishedPackages === '' || From 7309fbead44e183ecb07caceedff352a2cc6d11d Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 16 Jul 2024 13:42:59 +0200 Subject: [PATCH 15/57] continue --- .github/workflows/release-cli-assets.yml | 1 + scripts/release-cli-upload.ts | 11 +++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 09252f74c..0f3f3ed12 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -122,6 +122,7 @@ jobs: - name: Upload & Promote CLI Assets to S3 run: pnpm run release:cli:upload + continue-on-error: true env: PUBLISHED_PACKAGES: ${{ inputs.publishedPackages }} MATRIX_OS: ${{ matrix.os }} diff --git a/scripts/release-cli-upload.ts b/scripts/release-cli-upload.ts index 6bfe1aefa..7c539731c 100644 --- a/scripts/release-cli-upload.ts +++ b/scripts/release-cli-upload.ts @@ -26,12 +26,12 @@ async function main() { await uploadS3(platform); - await promoteS3(version, platformDistributions(platform)); + await promoteS3(platform, platformDistributions(platform)); // Upload and promote windows since it is packed on linux if (platform === 'deb') { await uploadS3('win'); - await promoteS3(version, platformDistributions('win')); + await promoteS3('win', platformDistributions('win')); } } @@ -40,9 +40,12 @@ const uploadS3 = async (platform: 'macos' | 'deb' | 'win') => { console.log('Uploaded release', uploadRes.stdout); }; -const promoteS3 = async (version: string, distribution: string) => { +const promoteS3 = async (platform: 'macos' | 'deb' | 'win', version: string) => { const promoteRes = await exec( - `pnpm oclif promote --sha=${process.env.COMMIT_SHA} --indexes --version=${version} --channel=${process.env.CHANNEL} --targets=${distribution}` + `pnpm oclif promote --${platform} --sha=${process.env.COMMIT_SHA?.slice( + 0, + 7 + )} --indexes --version=${version} --channel=${process.env.CHANNEL}` ); console.log('Promoted release', promoteRes.stdout); }; From 6569c47661e5a6ab99f5c3d8c00c8a4c4bf4cbc7 Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 16 Jul 2024 13:51:19 +0200 Subject: [PATCH 16/57] add dep --- cli/package.json | 5 +- pnpm-lock.yaml | 280 +++++++++++++++++++++++++++++++++++++---------- 2 files changed, 225 insertions(+), 60 deletions(-) diff --git a/cli/package.json b/cli/package.json index fdd7250e4..b9911589e 100644 --- a/cli/package.json +++ b/cli/package.json @@ -23,6 +23,7 @@ "@oclif/plugin-help": "^6.2.5", "@oclif/plugin-not-found": "^3.2.10", "@oclif/plugin-plugins": "^5.3.4", + "@oclif/plugin-update": "^4.4.9", "@types/ini": "^4.1.1", "@types/prompts": "^2.4.9", "@types/semver": "^7.5.8", @@ -40,9 +41,9 @@ "enquirer": "^2.4.1", "env-editor": "^1.1.0", "ini": "^4.1.3", - "lodash.keyby": "^4.6.0", "lodash.compact": "^3.0.1", "lodash.get": "^4.4.2", + "lodash.keyby": "^4.6.0", "lodash.set": "^4.3.2", "node-fetch": "^3.3.2", "open": "^10.1.0", @@ -50,8 +51,8 @@ "relaxed-json": "^1.0.3", "semver": "^7.6.2", "text-table": "^0.2.0", - "tslib": "^2.6.3", "tmp": "^0.2.3", + "tslib": "^2.6.3", "type-fest": "^4.21.0", "which": "^4.0.0", "zod": "^3.23.8" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 54aaab39a..6797c6b6b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -170,6 +170,9 @@ importers: '@oclif/plugin-plugins': specifier: ^5.3.4 version: 5.3.4 + '@oclif/plugin-update': + specifier: ^4.4.9 + version: 4.4.9 '@types/ini': specifier: ^4.1.1 version: 4.1.1 @@ -4002,7 +4005,6 @@ packages: '@inquirer/type': 1.4.0 ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 - dev: true /@inquirer/type@1.3.2: resolution: @@ -4805,6 +4807,24 @@ packages: - supports-color dev: false + /@oclif/plugin-update@4.4.9: + resolution: + { integrity: sha512-aATUqfHI/mxMGm2DqPs27J7IglI3plSBf/WPXaa3wC5kBYGNnz7d13x+/t0Vljz2yKhhh6BjdnsSAKBfQtOAbQ== } + engines: { node: '>=18.0.0' } + dependencies: + '@inquirer/select': 2.3.10 + '@oclif/core': 4.0.8 + ansis: 3.3.0 + debug: 4.3.5(supports-color@9.4.0) + filesize: 6.4.0 + got: 13.0.0 + semver: 7.6.2 + tar-fs: 2.1.1 + tty-table: 4.2.3 + transitivePeerDependencies: + - supports-color + dev: false + /@oclif/plugin-warn-if-update-available@3.0.19: resolution: { integrity: sha512-CauYLxNuPtK9ig1ZlzFiCqxzGJJd73CKyJDiSzGkg3QRooyZkE9G+l1Lz18fHzj+TEeXUZ74t6RWWPC5p0TL4w== } @@ -7555,6 +7575,12 @@ packages: { integrity: sha512-Yk3BkHH9U7oPyCN3gL5Tc7CpahG/+UFv/6UG03C311Vy9lzRmA5uoxDTpU9CO3rGHL6KzJz/pdDeXZCZ5Mu/Sg== } engines: { node: '>=15' } + /ansis@3.3.0: + resolution: + { integrity: sha512-RQTFlI2DOTJS00S3jQ5vAnryYKsiU6dBuR0yztid2HQKKN2a1ZZDOLIBfBqCfs3tnvtLpAeubNYtEK7a8zriLg== } + engines: { node: '>=15' } + dev: false + /any-date-parser@1.5.4: resolution: { integrity: sha512-S4gl9UmXNk9XXSQxp5w5harUD6aM0fepyL3dZM/B3znX57sWf792hS2UvvCFIHECfpsqfKbQ+cqWBky4AKyRIg== } @@ -7684,7 +7710,6 @@ packages: dependencies: call-bind: 1.0.2 is-array-buffer: 3.0.2 - dev: true /array-includes@3.1.7: resolution: @@ -7724,7 +7749,6 @@ packages: define-properties: 1.2.1 es-abstract: 1.22.2 es-shim-unscopables: 1.0.0 - dev: true /array.prototype.flatmap@1.3.2: resolution: @@ -7749,7 +7773,6 @@ packages: get-intrinsic: 1.2.1 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 - dev: true /arrify@3.0.0: resolution: @@ -7821,7 +7844,6 @@ packages: resolution: { integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== } engines: { node: '>= 0.4' } - dev: true /axios@1.5.0: resolution: @@ -7991,6 +8013,13 @@ packages: dependencies: fill-range: 7.1.1 + /breakword@1.0.6: + resolution: + { integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw== } + dependencies: + wcwidth: 1.0.1 + dev: false + /brorand@1.1.0: resolution: { integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== } @@ -8196,6 +8225,12 @@ packages: tslib: 2.6.3 dev: true + /camelcase@5.3.1: + resolution: + { integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== } + engines: { node: '>=6' } + dev: false + /camelcase@6.3.0: resolution: { integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== } @@ -8331,6 +8366,11 @@ packages: fsevents: 2.3.3 dev: true + /chownr@1.1.4: + resolution: + { integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== } + dev: false + /chownr@2.0.0: resolution: { integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== } @@ -8465,6 +8505,15 @@ packages: typanion: 3.14.0 dev: true + /cliui@6.0.0: + resolution: + { integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== } + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: false + /cliui@7.0.4: resolution: { integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== } @@ -8488,6 +8537,12 @@ packages: { integrity: sha512-IO78I0y6JcSpEPHzK4obKdsL7E7oLdRVDVOLwr2Hkbjsb+Eoz0dxW6tef0WizoKu0gLC4oZSZuEF4U2K6w1WQw== } dev: true + /clone@1.0.4: + resolution: + { integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== } + engines: { node: '>=0.8' } + dev: false + /code-block-writer@13.0.1: resolution: { integrity: sha512-c5or4P6erEA69TxaxTNcHUNcIn+oyxSRTOWV+pSYF+z4epXqNvwvJ70XPGjPNgue83oAFAPBRQYwpAJ/Hpe/Sg== } @@ -8841,6 +8896,32 @@ packages: randomfill: 1.0.4 dev: true + /csv-generate@3.4.3: + resolution: + { integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw== } + dev: false + + /csv-parse@4.16.3: + resolution: + { integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg== } + dev: false + + /csv-stringify@5.6.5: + resolution: + { integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A== } + dev: false + + /csv@5.5.3: + resolution: + { integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g== } + engines: { node: '>= 0.1.90' } + dependencies: + csv-generate: 3.4.3 + csv-parse: 4.16.3 + csv-stringify: 5.6.5 + stream-transform: 2.1.3 + dev: false + /data-uri-to-buffer@4.0.1: resolution: { integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== } @@ -8902,6 +8983,12 @@ packages: ms: 2.1.2 supports-color: 9.4.0 + /decamelize@1.2.0: + resolution: + { integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== } + engines: { node: '>=0.10.0' } + dev: false + /decompress-response@6.0.0: resolution: { integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== } @@ -8943,6 +9030,13 @@ packages: default-browser-id: 5.0.0 dev: false + /defaults@1.0.4: + resolution: + { integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== } + dependencies: + clone: 1.0.4 + dev: false + /defer-to-connect@2.0.1: resolution: { integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== } @@ -8963,7 +9057,6 @@ packages: get-intrinsic: 1.2.1 gopd: 1.0.1 has-property-descriptors: 1.0.0 - dev: true /define-lazy-prop@3.0.0: resolution: @@ -8979,7 +9072,6 @@ packages: define-data-property: 1.1.0 has-property-descriptors: 1.0.0 object-keys: 1.1.1 - dev: true /delayed-stream@1.0.0: resolution: @@ -9497,7 +9589,6 @@ packages: typed-array-length: 1.0.4 unbox-primitive: 1.0.2 which-typed-array: 1.1.11 - dev: true /es-module-lexer@1.3.1: resolution: @@ -9511,14 +9602,12 @@ packages: get-intrinsic: 1.2.1 has: 1.0.3 has-tostringtag: 1.0.0 - dev: true /es-shim-unscopables@1.0.0: resolution: { integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== } dependencies: has: 1.0.3 - dev: true /es-to-primitive@1.2.1: resolution: @@ -9528,7 +9617,6 @@ packages: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true /es6-promise@3.3.1: resolution: @@ -10397,6 +10485,12 @@ packages: dependencies: minimatch: 5.1.6 + /filesize@6.4.0: + resolution: + { integrity: sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ== } + engines: { node: '>= 0.4.0' } + dev: false + /fill-range@7.0.1: resolution: { integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== } @@ -10430,7 +10524,6 @@ packages: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true /find-up@5.0.0: resolution: @@ -10495,7 +10588,6 @@ packages: { integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== } dependencies: is-callable: 1.2.7 - dev: true /foreach@2.0.6: resolution: @@ -10609,12 +10701,10 @@ packages: define-properties: 1.2.1 es-abstract: 1.22.2 functions-have-names: 1.2.3 - dev: true /functions-have-names@1.2.3: resolution: { integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== } - dev: true /fwd-stream@1.0.4: resolution: @@ -10713,7 +10803,6 @@ packages: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 - dev: true /get-tsconfig@4.7.2: resolution: @@ -10821,7 +10910,6 @@ packages: engines: { node: '>= 0.4' } dependencies: define-properties: 1.2.1 - dev: true /globby@11.1.0: resolution: @@ -10873,7 +10961,6 @@ packages: { integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== } dependencies: get-intrinsic: 1.2.1 - dev: true /got-fetch@5.1.6(got@12.6.1): resolution: @@ -10918,12 +11005,16 @@ packages: lowercase-keys: 3.0.0 p-cancelable: 3.0.0 responselike: 3.0.0 - dev: true /graceful-fs@4.2.11: resolution: { integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== } + /grapheme-splitter@1.0.4: + resolution: + { integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== } + dev: false + /graphemer@1.4.0: resolution: { integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== } @@ -10955,7 +11046,6 @@ packages: /has-bigints@1.0.2: resolution: { integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== } - dev: true /has-flag@3.0.0: resolution: @@ -10972,7 +11062,6 @@ packages: { integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== } dependencies: get-intrinsic: 1.2.1 - dev: true /has-proto@1.0.1: resolution: @@ -10990,7 +11079,6 @@ packages: engines: { node: '>= 0.4' } dependencies: has-symbols: 1.0.3 - dev: true /has-unicode@2.0.1: resolution: @@ -11319,7 +11407,6 @@ packages: get-intrinsic: 1.2.1 has: 1.0.3 side-channel: 1.0.4 - dev: true /interpret@1.4.0: resolution: @@ -11347,7 +11434,6 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.2.1 is-typed-array: 1.1.12 - dev: true /is-arrayish@0.2.1: resolution: @@ -11363,7 +11449,6 @@ packages: { integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== } dependencies: has-bigints: 1.0.2 - dev: true /is-binary-path@2.1.0: resolution: @@ -11380,7 +11465,6 @@ packages: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: true /is-buffer@2.0.5: resolution: @@ -11399,7 +11483,6 @@ packages: resolution: { integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== } engines: { node: '>= 0.4' } - dev: true /is-ci@2.0.0: resolution: @@ -11428,7 +11511,6 @@ packages: engines: { node: '>= 0.4' } dependencies: has-tostringtag: 1.0.0 - dev: true /is-decimal@1.0.4: resolution: @@ -11497,7 +11579,6 @@ packages: resolution: { integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== } engines: { node: '>= 0.4' } - dev: true /is-node-process@1.2.0: resolution: @@ -11510,7 +11591,6 @@ packages: engines: { node: '>= 0.4' } dependencies: has-tostringtag: 1.0.0 - dev: true /is-number@7.0.0: resolution: @@ -11551,7 +11631,6 @@ packages: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: true /is-retry-allowed@1.2.0: resolution: @@ -11564,7 +11643,6 @@ packages: { integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== } dependencies: call-bind: 1.0.2 - dev: true /is-stream@2.0.1: resolution: @@ -11582,7 +11660,6 @@ packages: engines: { node: '>= 0.4' } dependencies: has-tostringtag: 1.0.0 - dev: true /is-subdir@1.2.0: resolution: @@ -11598,7 +11675,6 @@ packages: engines: { node: '>= 0.4' } dependencies: has-symbols: 1.0.3 - dev: true /is-typed-array@1.1.12: resolution: @@ -11606,7 +11682,6 @@ packages: engines: { node: '>= 0.4' } dependencies: which-typed-array: 1.1.11 - dev: true /is-unicode-supported@1.3.0: resolution: @@ -11630,7 +11705,6 @@ packages: { integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== } dependencies: call-bind: 1.0.2 - dev: true /is-windows@1.0.2: resolution: @@ -11669,7 +11743,6 @@ packages: /isarray@2.0.5: resolution: { integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== } - dev: true /isbuffer@0.0.0: resolution: @@ -11894,6 +11967,12 @@ packages: engines: { node: '>=6' } dev: false + /kleur@4.1.5: + resolution: + { integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== } + engines: { node: '>=6' } + dev: false + /kysely@0.27.4: resolution: { integrity: sha512-dyNKv2KRvYOQPLCAOCjjQuCk4YFd33BvGdf/o5bC7FiW+BB6snA81Zt+2wT9QDFzKqxKa5rrOmvlK/anehCcgA== } @@ -12093,7 +12172,6 @@ packages: engines: { node: '>=8' } dependencies: p-locate: 4.1.0 - dev: true /locate-path@6.0.0: resolution: @@ -12738,6 +12816,17 @@ packages: yallist: 4.0.0 dev: false + /mixme@0.5.10: + resolution: + { integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q== } + engines: { node: '>= 8.0.0' } + dev: false + + /mkdirp-classic@0.5.3: + resolution: + { integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== } + dev: false + /mkdirp@1.0.4: resolution: { integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== } @@ -13271,7 +13360,6 @@ packages: resolution: { integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== } engines: { node: '>= 0.4' } - dev: true /object-treeify@1.1.33: resolution: @@ -13294,7 +13382,6 @@ packages: define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: true /object.fromentries@2.0.7: resolution: @@ -13524,7 +13611,6 @@ packages: engines: { node: '>=6' } dependencies: p-try: 2.2.0 - dev: true /p-limit@3.1.0: resolution: @@ -13556,7 +13642,6 @@ packages: engines: { node: '>=8' } dependencies: p-limit: 2.3.0 - dev: true /p-locate@5.0.0: resolution: @@ -13641,7 +13726,6 @@ packages: resolution: { integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== } engines: { node: '>=6' } - dev: true /p-wait-for@4.1.0: resolution: @@ -13780,7 +13864,6 @@ packages: resolution: { integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== } engines: { node: '>=8' } - dev: true /path-exists@5.0.0: resolution: @@ -14608,7 +14691,6 @@ packages: call-bind: 1.0.2 define-properties: 1.2.1 set-function-name: 2.0.1 - dev: true /regexpp@3.2.0: resolution: @@ -14738,6 +14820,11 @@ packages: - supports-color dev: true + /require-main-filename@2.0.0: + resolution: + { integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== } + dev: false + /require-package-name@2.0.1: resolution: { integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q== } @@ -15010,7 +15097,6 @@ packages: get-intrinsic: 1.2.1 has-symbols: 1.0.3 isarray: 2.0.5 - dev: true /safe-buffer@5.1.2: resolution: @@ -15032,7 +15118,6 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.2.1 is-regex: 1.1.4 - dev: true /safe-resolve@1.0.0: resolution: @@ -15097,7 +15182,6 @@ packages: define-data-property: 1.1.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.0 - dev: true /sha.js@2.4.11: resolution: @@ -15317,6 +15401,20 @@ packages: is-fullwidth-code-point: 5.0.0 dev: true + /smartwrap@2.0.2: + resolution: + { integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA== } + engines: { node: '>=6' } + hasBin: true + dependencies: + array.prototype.flat: 1.3.2 + breakword: 1.0.6 + grapheme-splitter: 1.0.4 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + yargs: 15.4.1 + dev: false + /snake-case@3.0.4: resolution: { integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== } @@ -15449,6 +15547,13 @@ packages: { integrity: sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg== } dev: true + /stream-transform@2.1.3: + resolution: + { integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ== } + dependencies: + mixme: 0.5.10 + dev: false + /streamx@2.15.1: resolution: { integrity: sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA== } @@ -15514,7 +15619,6 @@ packages: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 - dev: true /string.prototype.trimend@1.0.7: resolution: @@ -15523,7 +15627,6 @@ packages: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 - dev: true /string.prototype.trimstart@1.0.7: resolution: @@ -15532,7 +15635,6 @@ packages: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 - dev: true /string_decoder@0.10.31: resolution: @@ -15690,6 +15792,16 @@ packages: engines: { node: '>=6' } dev: true + /tar-fs@2.1.1: + resolution: + { integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== } + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: false + /tar-stream@2.2.0: resolution: { integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== } @@ -15969,6 +16081,21 @@ packages: fsevents: 2.3.3 dev: true + /tty-table@4.2.3: + resolution: + { integrity: sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA== } + engines: { node: '>=8.0.0' } + hasBin: true + dependencies: + chalk: 4.1.2 + csv: 5.5.3 + kleur: 4.1.5 + smartwrap: 2.0.2 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + yargs: 17.7.2 + dev: false + /tunnel-agent@0.6.0: resolution: { integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== } @@ -16128,7 +16255,6 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.2.1 is-typed-array: 1.1.12 - dev: true /typed-array-byte-length@1.0.0: resolution: @@ -16139,7 +16265,6 @@ packages: for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 - dev: true /typed-array-byte-offset@1.0.0: resolution: @@ -16151,7 +16276,6 @@ packages: for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 - dev: true /typed-array-length@1.0.4: resolution: @@ -16160,7 +16284,6 @@ packages: call-bind: 1.0.2 for-each: 0.3.3 is-typed-array: 1.1.12 - dev: true /typedarray-to-buffer@1.0.4: resolution: @@ -16225,7 +16348,6 @@ packages: has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true /underscore@1.13.6: resolution: @@ -16557,6 +16679,13 @@ packages: { integrity: sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== } dev: true + /wcwidth@1.0.1: + resolution: + { integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== } + dependencies: + defaults: 1.0.4 + dev: false + /web-streams-polyfill@3.2.1: resolution: { integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== } @@ -16583,7 +16712,11 @@ packages: is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true + + /which-module@2.0.1: + resolution: + { integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== } + dev: false /which-pm@2.0.0: resolution: @@ -16604,7 +16737,6 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - dev: true /which@1.3.1: resolution: @@ -16780,6 +16912,11 @@ packages: { integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== } engines: { node: '>=0.4' } + /y18n@4.0.3: + resolution: + { integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== } + dev: false + /y18n@5.0.8: resolution: { integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== } @@ -16812,6 +16949,15 @@ packages: hasBin: true dev: true + /yargs-parser@18.1.3: + resolution: + { integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== } + engines: { node: '>=6' } + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: false + /yargs-parser@20.2.9: resolution: { integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== } @@ -16823,6 +16969,24 @@ packages: { integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== } engines: { node: '>=12' } + /yargs@15.4.1: + resolution: + { integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== } + engines: { node: '>=8' } + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + dev: false + /yargs@16.2.0: resolution: { integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== } From ca797543f326585a6f69c853551c2184eee020b6 Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 16 Jul 2024 13:53:05 +0200 Subject: [PATCH 17/57] wrong param --- scripts/release-cli-upload.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/release-cli-upload.ts b/scripts/release-cli-upload.ts index 7c539731c..a12e0da74 100644 --- a/scripts/release-cli-upload.ts +++ b/scripts/release-cli-upload.ts @@ -26,7 +26,7 @@ async function main() { await uploadS3(platform); - await promoteS3(platform, platformDistributions(platform)); + await promoteS3(platform, version); // Upload and promote windows since it is packed on linux if (platform === 'deb') { From 5702df0ec82ed9b7d5646f71596512f18258eeee Mon Sep 17 00:00:00 2001 From: Emily Date: Tue, 16 Jul 2024 15:53:54 +0200 Subject: [PATCH 18/57] acl --- .github/workflows/release-cli-assets.yml | 2 +- cli/package.json | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 0f3f3ed12..97183268f 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -122,7 +122,7 @@ jobs: - name: Upload & Promote CLI Assets to S3 run: pnpm run release:cli:upload - continue-on-error: true + # continue-on-error: true env: PUBLISHED_PACKAGES: ${{ inputs.publishedPackages }} MATRIX_OS: ${{ matrix.os }} diff --git a/cli/package.json b/cli/package.json index b9911589e..7e1efe284 100644 --- a/cli/package.json +++ b/cli/package.json @@ -81,16 +81,14 @@ "update": { "s3": { "host": "https://s3.console.aws.amazon.com/", - "bucket": "xata-cli-assets", - "acl": "bucket-owner-full-control" + "bucket": "xata-cli-assets" } }, "hooks": { "init": "./dist/hooks/init/compatibility" }, "macos": { - "identifier": "io.xata.cli", - "sign": "\"Developer ID Installer: Xatabase Inc (BNRJ8833Y2)\"" + "identifier": "io.xata.cli" }, "deb": { "identifier": "io.xata.cli" From 6838709a0a3a4814bf112f970b5da86d42014798 Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 17 Jul 2024 09:26:00 +0200 Subject: [PATCH 19/57] fix file name --- scripts/release-cli-upload.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/release-cli-upload.ts b/scripts/release-cli-upload.ts index a12e0da74..86a0bcd64 100644 --- a/scripts/release-cli-upload.ts +++ b/scripts/release-cli-upload.ts @@ -44,7 +44,7 @@ const promoteS3 = async (platform: 'macos' | 'deb' | 'win', version: string) => const promoteRes = await exec( `pnpm oclif promote --${platform} --sha=${process.env.COMMIT_SHA?.slice( 0, - 7 + 8 )} --indexes --version=${version} --channel=${process.env.CHANNEL}` ); console.log('Promoted release', promoteRes.stdout); From 619f4a0f32e064b7e8e8010c4ffecfa844840721 Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 17 Jul 2024 09:49:35 +0200 Subject: [PATCH 20/57] target --- scripts/release-cli-upload.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/release-cli-upload.ts b/scripts/release-cli-upload.ts index 86a0bcd64..88acb150e 100644 --- a/scripts/release-cli-upload.ts +++ b/scripts/release-cli-upload.ts @@ -2,6 +2,7 @@ import { exec as execRaw } from 'child_process'; import * as util from 'util'; import { matrixToOclif, platformDistributions, publishedPackagesContains } from './utils'; import { readProjectManifest } from '@pnpm/read-project-manifest'; + const exec = util.promisify(execRaw); async function main() { @@ -31,7 +32,7 @@ async function main() { // Upload and promote windows since it is packed on linux if (platform === 'deb') { await uploadS3('win'); - await promoteS3('win', platformDistributions('win')); + await promoteS3('win', version); } } @@ -45,7 +46,7 @@ const promoteS3 = async (platform: 'macos' | 'deb' | 'win', version: string) => `pnpm oclif promote --${platform} --sha=${process.env.COMMIT_SHA?.slice( 0, 8 - )} --indexes --version=${version} --channel=${process.env.CHANNEL}` + )} --indexes --version=${version} --channel=${process.env.CHANNEL} --targets=${platformDistributions(platform)}` ); console.log('Promoted release', promoteRes.stdout); }; From 72b406c934b587ded8e448631a1f3da50b69de73 Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 17 Jul 2024 11:09:51 +0200 Subject: [PATCH 21/57] test --- .github/workflows/release-cli-assets.yml | 42 ++++--- .github/workflows/test-release.yml | 42 +++++++ scripts/release-cli.ts | 149 +++++++++++++---------- 3 files changed, 152 insertions(+), 81 deletions(-) create mode 100644 .github/workflows/test-release.yml diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 97183268f..ab09771a7 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -3,10 +3,10 @@ name: Release CLI Assets on: workflow_call: inputs: - publishedPackages: - description: 'Published packages' - required: true - type: string + # publishedPackages: + # description: 'Published packages' + # required: true + # type: string commitSha: description: 'Commit SHA' required: true @@ -18,11 +18,11 @@ on: default: 'latest' workflow_dispatch: inputs: - publishedPackages: - description: 'Published packages' - required: true - default: '[{"name": "@xata.io/cli", "version": "1.2.0"}]' - type: string + # publishedPackages: + # description: 'Published packages' + # required: true + # default: '[{"name": "@xata.io/cli", "version": "1.2.0"}]' + # type: string commitSha: description: 'Commit SHA' required: true @@ -106,13 +106,6 @@ jobs: sudo apt-get install -y nsis sudo apt-get install -y p7zip - - name: Release CLI Assets - run: pnpm run release:cli - env: - PUBLISHED_PACKAGES: ${{ inputs.publishedPackages }} - MATRIX_OS: ${{ matrix.os }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Configure AWS Credentials for production uses: aws-actions/configure-aws-credentials@v4 with: @@ -120,16 +113,25 @@ jobs: aws-region: us-east-1 mask-aws-account-id: 'no' - - name: Upload & Promote CLI Assets to S3 - run: pnpm run release:cli:upload - # continue-on-error: true + - name: Release CLI Assets + run: pnpm run release:cli env: PUBLISHED_PACKAGES: ${{ inputs.publishedPackages }} MATRIX_OS: ${{ matrix.os }} - AWS_EC2_METADATA_DISABLED: true + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} COMMIT_SHA: ${{ inputs.commitSha }} CHANNEL: ${{ inputs.channel }} + # - name: Upload & Promote CLI Assets to S3 + # run: pnpm run release:cli:upload + # # continue-on-error: true + # env: + # PUBLISHED_PACKAGES: ${{ inputs.publishedPackages }} + # MATRIX_OS: ${{ matrix.os }} + # AWS_EC2_METADATA_DISABLED: true + # COMMIT_SHA: ${{ inputs.commitSha }} + # CHANNEL: ${{ inputs.channel }} + - name: Clean up keychain if: matrix.os == 'macos-latest' run: | diff --git a/.github/workflows/test-release.yml b/.github/workflows/test-release.yml new file mode 100644 index 000000000..2b9d7927d --- /dev/null +++ b/.github/workflows/test-release.yml @@ -0,0 +1,42 @@ +name: Test Release + +on: + push: + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +jobs: + release: + name: Test Release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + # This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits + fetch-depth: 0 + # This makes the PR pushed to use GITHUB_TOKEN and trigger the checks + persist-credentials: false + + - name: Install pnpm + uses: pnpm/action-setup@v4 + + - name: Use Node.js ${{ steps.config.outputs.NVMRC }} + uses: actions/setup-node@v3 + with: + node-version: ${{ steps.config.outputs.NVMRC }} + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Build + run: pnpm build + + publish-cli-assets: + name: Publish CLI assets + needs: [release] + uses: ./.github/workflows/release-cli-assets.yml + with: + commitSha: ${{ github.sha }} + channel: ${{ github.ref }} + secrets: inherit diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index 95a4440e0..b640d434f 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -5,7 +5,7 @@ import { execFile, exec as execRaw } from 'child_process'; import { Octokit } from '@octokit/core'; import fs from 'fs'; import * as util from 'util'; -import { matrixToOclif, publishedPackagesContains } from './utils'; +import { matrixToOclif, platformDistributions } from './utils'; const exec = util.promisify(execRaw); const PATH_TO_CLI = process.cwd() + '/cli'; @@ -14,20 +14,21 @@ const PATH_TO_CODEGEN = process.cwd() + '/packages/codegen'; const PATH_TO_IMPORTER = process.cwd() + '/packages/importer'; const PATH_TO_PGROLL = process.cwd() + '/packages/pgroll'; -const base = { - owner: 'xataio', - repo: 'client-ts', - headers: { - 'X-GitHub-Api-Version': '2022-11-28' - } -}; +// const base = { +// owner: 'xataio', +// repo: 'client-ts', +// headers: { +// 'X-GitHub-Api-Version': '2022-11-28' +// } +// }; async function main() { if (!process.env.MATRIX_OS) throw new Error('MATRIX_OS is not set'); if (!process.env.GITHUB_TOKEN) throw new Error('GITHUB_TOKEN is not set'); - if (!process.env.PUBLISHED_PACKAGES) throw new Error('PUBLISHED_PACKAGES is not set'); - - if (!publishedPackagesContains(process.env.PUBLISHED_PACKAGES, '@xata.io/cli')) return; + // if (!process.env.PUBLISHED_PACKAGES) throw new Error('PUBLISHED_PACKAGES is not set'); + if (!process.env.COMMIT_SHA) throw new Error('COMMIT_SHA is not set'); + if (!process.env.CHANNEL) throw new Error('CHANNEL is not set'); + // if (!publishedPackagesContains(process.env.PUBLISHED_PACKAGES, '@xata.io/cli')) return; const operatingSystem = matrixToOclif(process.env.MATRIX_OS); @@ -51,6 +52,12 @@ async function main() { // Assume changeset version has been called and all the // versions in package jsons are up to date + const { + manifest: { version } + } = await readProjectManifest(PATH_TO_CLI); + + if (!version) throw new Error('Missing package version.'); + const workspaceProtocolPackageManifest = await createExportableManifest( PATH_TO_CLI, { @@ -76,68 +83,88 @@ async function main() { execFile('rm', ['-rf', `${PATH_TO_CLI}/npm-shrinkwrap.json`]); execFile('touch', [`${PATH_TO_CLI}/npm-shrinkwrap.json`]); - await exec(`pnpm oclif pack ${operatingSystem}`); + const platform = matrixToOclif(process.env.MATRIX_OS); - const octokit = new Octokit({ - auth: process.env.GITHUB_TOKEN - }); + await exec(`pnpm oclif pack tarballs --targets=${platformDistributions(platform)}`); + await uploadS3(platform); + await promoteS3(platform, version); + // const octokit = new Octokit({ + // auth: process.env.GITHUB_TOKEN + // }); - const tag = `@xata.io/cli@${manifest.version}`; + // const tag = `@xata.io/cli@${manifest.version}`; - const release = await octokit.request('GET /repos/{owner}/{repo}/releases/tags/{tag}', { - ...base, - tag - }); + // const release = await octokit.request('GET /repos/{owner}/{repo}/releases/tags/{tag}', { + // ...base, + // tag + // }); - if (!release.data) throw new Error('Release not found'); + // if (!release.data) throw new Error('Release not found'); - const pathToAsset = `${PATH_TO_CLI}/dist/${operatingSystem}`; + //const pathToAsset = `${PATH_TO_CLI}/dist/${operatingSystem}`; // Debian pack results in redundant files. Only upload .deb files - const files = fs - .readdirSync(pathToAsset) - .filter((file) => (operatingSystem === 'deb' ? file.endsWith('.deb') : true)); - for (const file of files) { - await uploadFiles({ pathToFile: pathToAsset + `/${file}`, fileName: file, octokit, releaseId: release.data.id }); - } + // const files = fs + // .readdirSync(pathToAsset) + // .filter((file) => (operatingSystem === 'deb' ? file.endsWith('.deb') : true)); + // for (const file of files) { + // await uploadFiles({ pathToFile: pathToAsset + `/${file}`, fileName: file, octokit, releaseId: release.data.id }); + // } // Pack windows on linux if (operatingSystem === 'deb') { - await exec(`pnpm oclif pack win`); + await exec(`pnpm oclif pack win --targets=${platformDistributions('win')}`); + await uploadS3('win'); + await promoteS3('win', version); // Windows packs files under "win32" directory - const pathToAssetWindows = `${PATH_TO_CLI}/dist/win32`; - const files = fs.readdirSync(pathToAssetWindows); - for (const file of files) { - await uploadFiles({ - pathToFile: pathToAssetWindows + `/${file}`, - fileName: file, - octokit, - releaseId: release.data.id - }); - } + // const pathToAssetWindows = `${PATH_TO_CLI}/dist/win32`; + // const files = fs.readdirSync(pathToAssetWindows); + // for (const file of files) { + // await uploadFiles({ + // pathToFile: pathToAssetWindows + `/${file}`, + // fileName: file, + // octokit, + // releaseId: release.data.id + // }); + // } } } -const uploadFiles = async ({ - pathToFile, - fileName, - octokit, - releaseId -}: { - pathToFile: string; - fileName: string; - octokit: Octokit; - releaseId: number; -}) => { - const data = fs.readFileSync(pathToFile); - const upload = await octokit.request('POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}', { - ...base, - name: fileName, - label: fileName, - release_id: releaseId, - data: data, - baseUrl: 'https://uploads.github.com' - }); - console.log('Finished uploading asset', upload.status); -}; +// const uploadFiles = async ({ +// pathToFile, +// fileName, +// octokit, +// releaseId +// }: { +// pathToFile: string; +// fileName: string; +// octokit: Octokit; +// releaseId: number; +// }) => { +// const data = fs.readFileSync(pathToFile); +// const upload = await octokit.request('POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}', { +// ...base, +// name: fileName, +// label: fileName, +// release_id: releaseId, +// data: data, +// baseUrl: 'https://uploads.github.com' +// }); +// console.log('Finished uploading asset', upload.status); +// }; main(); + +const uploadS3 = async (platform: 'macos' | 'deb' | 'win') => { + const uploadRes = await exec(`pnpm oclif upload ${platform}`); + console.log('Uploaded release', uploadRes.stdout); +}; + +const promoteS3 = async (platform: 'macos' | 'deb' | 'win', version: string) => { + const promoteRes = await exec( + `pnpm oclif promote --${platform} --sha=${process.env.COMMIT_SHA?.slice( + 0, + 8 + )} --indexes --version=${version} --channel=${process.env.CHANNEL} --targets=${platformDistributions(platform)}` + ); + console.log('Promoted release', promoteRes.stdout); +}; From 12c616b2ecd41d7d22f79264bab69ada70b7daac Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 17 Jul 2024 12:55:19 +0200 Subject: [PATCH 22/57] fix --- cli/package.json | 3 +++ scripts/release-cli.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/cli/package.json b/cli/package.json index 7e1efe284..958a2767d 100644 --- a/cli/package.json +++ b/cli/package.json @@ -18,6 +18,9 @@ "/npm-shrinkwrap.json", "/oclif.manifest.json" ], + "engines": { + "node": ">=8" + }, "dependencies": { "@oclif/core": "^4.0.8", "@oclif/plugin-help": "^6.2.5", diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index b640d434f..0f5b92306 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -164,7 +164,7 @@ const promoteS3 = async (platform: 'macos' | 'deb' | 'win', version: string) => `pnpm oclif promote --${platform} --sha=${process.env.COMMIT_SHA?.slice( 0, 8 - )} --indexes --version=${version} --channel=${process.env.CHANNEL} --targets=${platformDistributions(platform)}` + )} --indexes --version=${version} --channel=latest --targets=${platformDistributions(platform)}` ); console.log('Promoted release', promoteRes.stdout); }; From dc90ebeb813c8167e0f5452ce6d228cc3d8f60a8 Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 17 Jul 2024 13:04:12 +0200 Subject: [PATCH 23/57] upload fix --- scripts/release-cli.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index 0f5b92306..66e271ccf 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -155,7 +155,7 @@ async function main() { main(); const uploadS3 = async (platform: 'macos' | 'deb' | 'win') => { - const uploadRes = await exec(`pnpm oclif upload ${platform}`); + const uploadRes = await exec(`pnpm oclif upload tarballs --targets=${platformDistributions(platform)}`); console.log('Uploaded release', uploadRes.stdout); }; From 326db888e086e88dc5db764fa630b62b840f6c2f Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 17 Jul 2024 13:17:16 +0200 Subject: [PATCH 24/57] pkg --- scripts/release-cli.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index 66e271ccf..619262c9b 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -85,8 +85,13 @@ async function main() { const platform = matrixToOclif(process.env.MATRIX_OS); + // Tarballs await exec(`pnpm oclif pack tarballs --targets=${platformDistributions(platform)}`); await uploadS3(platform); + + //Packages + await exec(`pnpm oclif pack ${platform}`); + await uploadS3(platform, { pkg: true }); await promoteS3(platform, version); // const octokit = new Octokit({ // auth: process.env.GITHUB_TOKEN @@ -112,8 +117,14 @@ async function main() { // Pack windows on linux if (operatingSystem === 'deb') { + // Tarballs await exec(`pnpm oclif pack win --targets=${platformDistributions('win')}`); await uploadS3('win'); + + //Packages + await exec(`pnpm oclif pack win`); + await uploadS3('win', { pkg: true }); + await promoteS3('win', version); // Windows packs files under "win32" directory // const pathToAssetWindows = `${PATH_TO_CLI}/dist/win32`; @@ -154,8 +165,10 @@ async function main() { main(); -const uploadS3 = async (platform: 'macos' | 'deb' | 'win') => { - const uploadRes = await exec(`pnpm oclif upload tarballs --targets=${platformDistributions(platform)}`); +const uploadS3 = async (platform: 'macos' | 'deb' | 'win', options?: { pkg: boolean }) => { + const uploadRes = await exec( + `pnpm oclif upload ${options?.pkg ? '' : 'tarballs'} --targets=${platformDistributions(platform)}` + ); console.log('Uploaded release', uploadRes.stdout); }; From 44aa875c6a69dafd542965b1785cd591b9adbe9c Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 17 Jul 2024 13:34:46 +0200 Subject: [PATCH 25/57] fix --- scripts/release-cli.ts | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index 619262c9b..4d542492d 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -87,10 +87,11 @@ async function main() { // Tarballs await exec(`pnpm oclif pack tarballs --targets=${platformDistributions(platform)}`); - await uploadS3(platform); - //Packages await exec(`pnpm oclif pack ${platform}`); + // Upload Tarballs + await uploadS3(platform); + // Upload packages await uploadS3(platform, { pkg: true }); await promoteS3(platform, version); // const octokit = new Octokit({ @@ -117,15 +118,16 @@ async function main() { // Pack windows on linux if (operatingSystem === 'deb') { + const platform = 'win'; // Tarballs - await exec(`pnpm oclif pack win --targets=${platformDistributions('win')}`); - await uploadS3('win'); - + await exec(`pnpm oclif pack tarballs --targets=${platformDistributions(platform)}`); //Packages - await exec(`pnpm oclif pack win`); - await uploadS3('win', { pkg: true }); + await exec(`pnpm oclif pack ${platform}`); + // Upload Tarballs + await uploadS3(platform); + // Upload packages + await uploadS3(platform, { pkg: true }); - await promoteS3('win', version); // Windows packs files under "win32" directory // const pathToAssetWindows = `${PATH_TO_CLI}/dist/win32`; // const files = fs.readdirSync(pathToAssetWindows); @@ -166,9 +168,9 @@ async function main() { main(); const uploadS3 = async (platform: 'macos' | 'deb' | 'win', options?: { pkg: boolean }) => { - const uploadRes = await exec( - `pnpm oclif upload ${options?.pkg ? '' : 'tarballs'} --targets=${platformDistributions(platform)}` - ); + const uploadRes = options?.pkg + ? await exec(`pnpm oclif upload ${platform}`) + : await exec(`pnpm oclif upload tarballs --targets=${platformDistributions(platform)}`); console.log('Uploaded release', uploadRes.stdout); }; From f09fbc076b5632f1d0e57e6bd65dd29aefa622c8 Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 17 Jul 2024 13:35:54 +0200 Subject: [PATCH 26/57] promote --- scripts/release-cli.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index 4d542492d..5eed17553 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -127,7 +127,7 @@ async function main() { await uploadS3(platform); // Upload packages await uploadS3(platform, { pkg: true }); - + await promoteS3(platform, version); // Windows packs files under "win32" directory // const pathToAssetWindows = `${PATH_TO_CLI}/dist/win32`; // const files = fs.readdirSync(pathToAssetWindows); From d5b46551f2e2c067dc03158b6ae7cd60441412de Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 17 Jul 2024 13:53:50 +0200 Subject: [PATCH 27/57] test release gh --- scripts/release-cli.ts | 114 ++++++++++++++++++++--------------------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index 5eed17553..59ea9b15a 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -14,20 +14,19 @@ const PATH_TO_CODEGEN = process.cwd() + '/packages/codegen'; const PATH_TO_IMPORTER = process.cwd() + '/packages/importer'; const PATH_TO_PGROLL = process.cwd() + '/packages/pgroll'; -// const base = { -// owner: 'xataio', -// repo: 'client-ts', -// headers: { -// 'X-GitHub-Api-Version': '2022-11-28' -// } -// }; +const base = { + owner: 'xataio', + repo: 'client-ts', + headers: { + 'X-GitHub-Api-Version': '2022-11-28' + } +}; async function main() { if (!process.env.MATRIX_OS) throw new Error('MATRIX_OS is not set'); if (!process.env.GITHUB_TOKEN) throw new Error('GITHUB_TOKEN is not set'); // if (!process.env.PUBLISHED_PACKAGES) throw new Error('PUBLISHED_PACKAGES is not set'); if (!process.env.COMMIT_SHA) throw new Error('COMMIT_SHA is not set'); - if (!process.env.CHANNEL) throw new Error('CHANNEL is not set'); // if (!publishedPackagesContains(process.env.PUBLISHED_PACKAGES, '@xata.io/cli')) return; const operatingSystem = matrixToOclif(process.env.MATRIX_OS); @@ -94,27 +93,28 @@ async function main() { // Upload packages await uploadS3(platform, { pkg: true }); await promoteS3(platform, version); - // const octokit = new Octokit({ - // auth: process.env.GITHUB_TOKEN - // }); - // const tag = `@xata.io/cli@${manifest.version}`; + const octokit = new Octokit({ + auth: process.env.GITHUB_TOKEN + }); + + const tag = `@xata.io/cli@${manifest.version}`; - // const release = await octokit.request('GET /repos/{owner}/{repo}/releases/tags/{tag}', { - // ...base, - // tag - // }); + const release = await octokit.request('GET /repos/{owner}/{repo}/releases/tags/{tag}', { + ...base, + tag + }); - // if (!release.data) throw new Error('Release not found'); + if (!release.data) throw new Error('Release not found'); - //const pathToAsset = `${PATH_TO_CLI}/dist/${operatingSystem}`; + const pathToAsset = `${PATH_TO_CLI}/dist/${operatingSystem}`; // Debian pack results in redundant files. Only upload .deb files - // const files = fs - // .readdirSync(pathToAsset) - // .filter((file) => (operatingSystem === 'deb' ? file.endsWith('.deb') : true)); - // for (const file of files) { - // await uploadFiles({ pathToFile: pathToAsset + `/${file}`, fileName: file, octokit, releaseId: release.data.id }); - // } + const files = fs + .readdirSync(pathToAsset) + .filter((file) => (operatingSystem === 'deb' ? file.endsWith('.deb') : true)); + for (const file of files) { + await uploadFiles({ pathToFile: pathToAsset + `/${file}`, fileName: file, octokit, releaseId: release.data.id }); + } // Pack windows on linux if (operatingSystem === 'deb') { @@ -129,41 +129,41 @@ async function main() { await uploadS3(platform, { pkg: true }); await promoteS3(platform, version); // Windows packs files under "win32" directory - // const pathToAssetWindows = `${PATH_TO_CLI}/dist/win32`; - // const files = fs.readdirSync(pathToAssetWindows); - // for (const file of files) { - // await uploadFiles({ - // pathToFile: pathToAssetWindows + `/${file}`, - // fileName: file, - // octokit, - // releaseId: release.data.id - // }); - // } + const pathToAssetWindows = `${PATH_TO_CLI}/dist/win32`; + const files = fs.readdirSync(pathToAssetWindows); + for (const file of files) { + await uploadFiles({ + pathToFile: pathToAssetWindows + `/${file}`, + fileName: file, + octokit, + releaseId: release.data.id + }); + } } } -// const uploadFiles = async ({ -// pathToFile, -// fileName, -// octokit, -// releaseId -// }: { -// pathToFile: string; -// fileName: string; -// octokit: Octokit; -// releaseId: number; -// }) => { -// const data = fs.readFileSync(pathToFile); -// const upload = await octokit.request('POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}', { -// ...base, -// name: fileName, -// label: fileName, -// release_id: releaseId, -// data: data, -// baseUrl: 'https://uploads.github.com' -// }); -// console.log('Finished uploading asset', upload.status); -// }; +const uploadFiles = async ({ + pathToFile, + fileName, + octokit, + releaseId +}: { + pathToFile: string; + fileName: string; + octokit: Octokit; + releaseId: number; +}) => { + const data = fs.readFileSync(pathToFile); + const upload = await octokit.request('POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}', { + ...base, + name: fileName, + label: fileName, + release_id: releaseId, + data: data, + baseUrl: 'https://uploads.github.com' + }); + console.log('Finished uploading asset', upload.status); +}; main(); @@ -179,7 +179,7 @@ const promoteS3 = async (platform: 'macos' | 'deb' | 'win', version: string) => `pnpm oclif promote --${platform} --sha=${process.env.COMMIT_SHA?.slice( 0, 8 - )} --indexes --version=${version} --channel=latest --targets=${platformDistributions(platform)}` + )} --indexes --version=${version} --channel=stable --targets=${platformDistributions(platform)}` ); console.log('Promoted release', promoteRes.stdout); }; From e06d26a3fcac1895929cf333b0443e00926c1b57 Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 17 Jul 2024 14:37:50 +0200 Subject: [PATCH 28/57] host --- cli/package.json | 2 +- scripts/release-cli-upload.ts | 54 ----------------------------------- 2 files changed, 1 insertion(+), 55 deletions(-) delete mode 100644 scripts/release-cli-upload.ts diff --git a/cli/package.json b/cli/package.json index 958a2767d..b456acd37 100644 --- a/cli/package.json +++ b/cli/package.json @@ -83,7 +83,7 @@ "bin": "xata", "update": { "s3": { - "host": "https://s3.console.aws.amazon.com/", + "host": "https://xata-cli-assets.s3.us-east-1.amazonaws.com/", "bucket": "xata-cli-assets" } }, diff --git a/scripts/release-cli-upload.ts b/scripts/release-cli-upload.ts deleted file mode 100644 index 88acb150e..000000000 --- a/scripts/release-cli-upload.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { exec as execRaw } from 'child_process'; -import * as util from 'util'; -import { matrixToOclif, platformDistributions, publishedPackagesContains } from './utils'; -import { readProjectManifest } from '@pnpm/read-project-manifest'; - -const exec = util.promisify(execRaw); - -async function main() { - if (!process.env.MATRIX_OS) throw new Error('MATRIX_OS is not set'); - if (!process.env.PUBLISHED_PACKAGES) throw new Error('PUBLISHED_PACKAGES is not set'); - if (!process.env.COMMIT_SHA) throw new Error('COMMIT_SHA is not set'); - if (!process.env.CHANNEL) throw new Error('CHANNEL is not set'); - - const PATH_TO_CLI = process.cwd() + '/cli'; - - if (!publishedPackagesContains(process.env.PUBLISHED_PACKAGES, '@xata.io/cli')) return; - - const { - manifest: { version } - } = await readProjectManifest(PATH_TO_CLI); - - if (!version) throw new Error('Missing package version.'); - - const platform = matrixToOclif(process.env.MATRIX_OS); - - process.chdir(PATH_TO_CLI); - - await uploadS3(platform); - - await promoteS3(platform, version); - - // Upload and promote windows since it is packed on linux - if (platform === 'deb') { - await uploadS3('win'); - await promoteS3('win', version); - } -} - -const uploadS3 = async (platform: 'macos' | 'deb' | 'win') => { - const uploadRes = await exec(`pnpm oclif upload ${platform}`); - console.log('Uploaded release', uploadRes.stdout); -}; - -const promoteS3 = async (platform: 'macos' | 'deb' | 'win', version: string) => { - const promoteRes = await exec( - `pnpm oclif promote --${platform} --sha=${process.env.COMMIT_SHA?.slice( - 0, - 8 - )} --indexes --version=${version} --channel=${process.env.CHANNEL} --targets=${platformDistributions(platform)}` - ); - console.log('Promoted release', promoteRes.stdout); -}; - -main(); From 6c4b528205ec8025d57b165000855d7ce08e678a Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 17 Jul 2024 14:54:41 +0200 Subject: [PATCH 29/57] extra slash --- .github/workflows/release-cli-assets.yml | 21 --------------------- .github/workflows/release.yml | 1 - cli/package.json | 2 +- 3 files changed, 1 insertion(+), 23 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index ab09771a7..83c1c484b 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -11,11 +11,6 @@ on: description: 'Commit SHA' required: true type: string - channel: - description: 'Channel' - required: true - type: string - default: 'latest' workflow_dispatch: inputs: # publishedPackages: @@ -27,11 +22,6 @@ on: description: 'Commit SHA' required: true type: string - channel: - description: 'Channel' - required: true - type: string - default: 'latest' permissions: id-token: write @@ -120,17 +110,6 @@ jobs: MATRIX_OS: ${{ matrix.os }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} COMMIT_SHA: ${{ inputs.commitSha }} - CHANNEL: ${{ inputs.channel }} - - # - name: Upload & Promote CLI Assets to S3 - # run: pnpm run release:cli:upload - # # continue-on-error: true - # env: - # PUBLISHED_PACKAGES: ${{ inputs.publishedPackages }} - # MATRIX_OS: ${{ matrix.os }} - # AWS_EC2_METADATA_DISABLED: true - # COMMIT_SHA: ${{ inputs.commitSha }} - # CHANNEL: ${{ inputs.channel }} - name: Clean up keychain if: matrix.os == 'macos-latest' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 09680b197..90d226bf9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -76,5 +76,4 @@ jobs: with: publishedPackages: ${{ needs.release.outputs.publishedPackages }} commitSha: ${{ github.sha }} - channel: ${{ github.ref }} secrets: inherit diff --git a/cli/package.json b/cli/package.json index b456acd37..86fea23eb 100644 --- a/cli/package.json +++ b/cli/package.json @@ -83,7 +83,7 @@ "bin": "xata", "update": { "s3": { - "host": "https://xata-cli-assets.s3.us-east-1.amazonaws.com/", + "host": "https://xata-cli-assets.s3.us-east-1.amazonaws.com", "bucket": "xata-cli-assets" } }, From a696988a12d739287d496ba496159a474d303220 Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 17 Jul 2024 15:00:10 +0200 Subject: [PATCH 30/57] workflow --- .github/workflows/test-release.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/test-release.yml b/.github/workflows/test-release.yml index 2b9d7927d..324c7131d 100644 --- a/.github/workflows/test-release.yml +++ b/.github/workflows/test-release.yml @@ -38,5 +38,4 @@ jobs: uses: ./.github/workflows/release-cli-assets.yml with: commitSha: ${{ github.sha }} - channel: ${{ github.ref }} secrets: inherit From aabe94308c8041c980fcc067c617509895c541d3 Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 17 Jul 2024 16:13:45 +0200 Subject: [PATCH 31/57] deb --- .github/workflows/release-cli-assets.yml | 11 +++++++++++ scripts/release-cli.ts | 12 +++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 83c1c484b..14af92aa9 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -83,6 +83,16 @@ jobs: security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH security list-keychain -d user -s $KEYCHAIN_PATH + - name: Install debian certificate + if: matrix.os == 'ubuntu-latest' + env: + DEBIAN_GPG_KEY: ${{ secrets.DEBIAN_GPG_KEY }} + run: | + # import certificate from secrets + echo -n "$DEBIAN_GPG_KEY" >> $RUNNER_TEMP/key.gpg + + gpg --import $RUNNER_TEMP/key.gpg + - name: Install dependencies run: pnpm install --frozen-lockfile @@ -110,6 +120,7 @@ jobs: MATRIX_OS: ${{ matrix.os }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} COMMIT_SHA: ${{ inputs.commitSha }} + XATA_DEB_KEY: ${{ secrets.DEBIAN_GPG_KEY_ID }} - name: Clean up keychain if: matrix.os == 'macos-latest' diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index 59ea9b15a..4bd455954 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -82,17 +82,15 @@ async function main() { execFile('rm', ['-rf', `${PATH_TO_CLI}/npm-shrinkwrap.json`]); execFile('touch', [`${PATH_TO_CLI}/npm-shrinkwrap.json`]); - const platform = matrixToOclif(process.env.MATRIX_OS); - // Tarballs - await exec(`pnpm oclif pack tarballs --targets=${platformDistributions(platform)}`); + await exec(`pnpm oclif pack tarballs --targets=${platformDistributions(operatingSystem)}`); //Packages - await exec(`pnpm oclif pack ${platform}`); + await exec(`pnpm oclif pack ${operatingSystem}`); // Upload Tarballs - await uploadS3(platform); + await uploadS3(operatingSystem); // Upload packages - await uploadS3(platform, { pkg: true }); - await promoteS3(platform, version); + await uploadS3(operatingSystem, { pkg: true }); + await promoteS3(operatingSystem, version); const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN From 17738959eac8d739a6a8b2e374b87674115f015d Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 17 Jul 2024 16:18:47 +0200 Subject: [PATCH 32/57] deb --- .github/workflows/release-cli-assets.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 14af92aa9..c39970a49 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -88,6 +88,7 @@ jobs: env: DEBIAN_GPG_KEY: ${{ secrets.DEBIAN_GPG_KEY }} run: | + export GPG_TTY=$(tty) # import certificate from secrets echo -n "$DEBIAN_GPG_KEY" >> $RUNNER_TEMP/key.gpg From a73dfb714532f7fc8b8db012d95051801d502715 Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 17 Jul 2024 16:24:00 +0200 Subject: [PATCH 33/57] deb --- .github/workflows/release-cli-assets.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index c39970a49..514f3c3a0 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -90,9 +90,7 @@ jobs: run: | export GPG_TTY=$(tty) # import certificate from secrets - echo -n "$DEBIAN_GPG_KEY" >> $RUNNER_TEMP/key.gpg - - gpg --import $RUNNER_TEMP/key.gpg + echo "$DEBIAN_GPG_KEY" | gpg --batch --import - name: Install dependencies run: pnpm install --frozen-lockfile From e033ddac2c733844be88b96a382888a15eb6900a Mon Sep 17 00:00:00 2001 From: Emily Date: Wed, 17 Jul 2024 16:35:33 +0200 Subject: [PATCH 34/57] deb --- .github/workflows/release-cli-assets.yml | 4 +++- .github/workflows/test-release.yml | 15 --------------- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 514f3c3a0..06f6b004f 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -113,7 +113,9 @@ jobs: mask-aws-account-id: 'no' - name: Release CLI Assets - run: pnpm run release:cli + run: | + export GPG_TTY=$(tty) + pnpm run release:cli env: PUBLISHED_PACKAGES: ${{ inputs.publishedPackages }} MATRIX_OS: ${{ matrix.os }} diff --git a/.github/workflows/test-release.yml b/.github/workflows/test-release.yml index 324c7131d..fd94c75ef 100644 --- a/.github/workflows/test-release.yml +++ b/.github/workflows/test-release.yml @@ -17,21 +17,6 @@ jobs: # This makes the PR pushed to use GITHUB_TOKEN and trigger the checks persist-credentials: false - - name: Install pnpm - uses: pnpm/action-setup@v4 - - - name: Use Node.js ${{ steps.config.outputs.NVMRC }} - uses: actions/setup-node@v3 - with: - node-version: ${{ steps.config.outputs.NVMRC }} - cache: 'pnpm' - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - - name: Build - run: pnpm build - publish-cli-assets: name: Publish CLI assets needs: [release] From e2eb1d6320d6cc4fddab6c9ba31e60f30c789935 Mon Sep 17 00:00:00 2001 From: Emily Date: Thu, 18 Jul 2024 09:29:30 +0200 Subject: [PATCH 35/57] test --- .github/workflows/release-cli-assets.yml | 14 ++++---------- scripts/release-cli.ts | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 06f6b004f..b950be2b1 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -83,15 +83,6 @@ jobs: security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH security list-keychain -d user -s $KEYCHAIN_PATH - - name: Install debian certificate - if: matrix.os == 'ubuntu-latest' - env: - DEBIAN_GPG_KEY: ${{ secrets.DEBIAN_GPG_KEY }} - run: | - export GPG_TTY=$(tty) - # import certificate from secrets - echo "$DEBIAN_GPG_KEY" | gpg --batch --import - - name: Install dependencies run: pnpm install --frozen-lockfile @@ -121,7 +112,10 @@ jobs: MATRIX_OS: ${{ matrix.os }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} COMMIT_SHA: ${{ inputs.commitSha }} - XATA_DEB_KEY: ${{ secrets.DEBIAN_GPG_KEY_ID }} + DEBIAN_GPG_KEY_PRIVATE: ${{ secrets.DEBIAN_GPG_KEY_PRIVATE }} + DEBIAN_GPG_KEY_PASS: ${{ secrets.DEBIAN_GPG_KEY_PASS }} + DEBIAN_GPG_KEY_PUBLIC: ${{ secrets.DEBIAN_GPG_KEY_PUBLIC }} + DEBIAN_GPG_KEY_ID: ${{ secrets.DEBIAN_GPG_KEY_ID }} - name: Clean up keychain if: matrix.os == 'macos-latest' diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index 4bd455954..14e7b6780 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -86,6 +86,9 @@ async function main() { await exec(`pnpm oclif pack tarballs --targets=${platformDistributions(operatingSystem)}`); //Packages await exec(`pnpm oclif pack ${operatingSystem}`); + if (operatingSystem === 'deb') { + await installDebCert(); + } // Upload Tarballs await uploadS3(operatingSystem); // Upload packages @@ -181,3 +184,23 @@ const promoteS3 = async (platform: 'macos' | 'deb' | 'win', version: string) => ); console.log('Promoted release', promoteRes.stdout); }; + +// # This will sign files after `oclif pack deb`, this script should be ran from the `dist/deb` folder +const installDebCert = async () => { + await exec( + `echo "$DEBIAN_GPG_KEY_PRIVATE" | base64 -d 2> /dev/null | gpg --import --batch --passphrase "$DEBIAN_GPG_KEY_PASS" 2> /dev/null` + ); + await exec( + `gpg --digest-algo SHA512 --clearsign --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o InRelease Release 2> /dev/null` + ); + await exec( + `gpg --digest-algo SHA512 -abs --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o Release` + ); + await exec(`echo "Signed debian packages successfully"`); + await exec(`echo "sha256 sums:"`); + await exec(`sha256sum *Release*`); + await exec(` + mkdir -p ./dist/deb/release.key + `); + await exec(`echo "$DEBIAN_GPG_KEY_PUBLIC" | base64 --decode > ./dist/deb/release.key`); +}; From ba9a21b62a80f34dba19a6cf068fcd307fe00e5f Mon Sep 17 00:00:00 2001 From: Emily Date: Thu, 18 Jul 2024 09:48:23 +0200 Subject: [PATCH 36/57] test --- scripts/release-cli.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index 14e7b6780..d95b90412 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -187,6 +187,8 @@ const promoteS3 = async (platform: 'macos' | 'deb' | 'win', version: string) => // # This will sign files after `oclif pack deb`, this script should be ran from the `dist/deb` folder const installDebCert = async () => { + await exec(`export GPG_TTY=$(tty)`); + await exec(`echo "$DEBIAN_GPG_KEY_PRIVATE" exists....`); await exec( `echo "$DEBIAN_GPG_KEY_PRIVATE" | base64 -d 2> /dev/null | gpg --import --batch --passphrase "$DEBIAN_GPG_KEY_PASS" 2> /dev/null` ); From df74102427feb1a8dddc05d3419ddb3cc427274c Mon Sep 17 00:00:00 2001 From: Emily Date: Thu, 18 Jul 2024 10:00:06 +0200 Subject: [PATCH 37/57] test --- scripts/install-deb-cert.sh | 14 ++++++++++++++ scripts/release-cli.ts | 31 ++++++++++--------------------- 2 files changed, 24 insertions(+), 21 deletions(-) create mode 100644 scripts/install-deb-cert.sh diff --git a/scripts/install-deb-cert.sh b/scripts/install-deb-cert.sh new file mode 100644 index 000000000..8c443c6d0 --- /dev/null +++ b/scripts/install-deb-cert.sh @@ -0,0 +1,14 @@ +set -e -o pipefail + +# This will sign files after `oclif pack:deb`, this script should be ran from +# the `dist/deb` folder +echo "$DEBIAN_GPG_KEY_PRIVATE" | base64 -d 2> /dev/null | gpg --import --batch --passphrase "$DEBIAN_GPG_KEY_PASS" 2> /dev/null +gpg --digest-algo SHA512 --clearsign --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o InRelease Release 2> /dev/null +gpg --digest-algo SHA512 -abs --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o Release.gpg Release 2> /dev/null +echo "Signed debian packages successfully" +echo "sha256 sums:" +sha256sum *Release* + + +mkdir -p $RUNNER_TEMP/cli/dist/apt +echo "$DEBIAN_GPG_KEY_PUBLIC" | base64 --decode > $RUNNER_TEMP/cli/dist/apt/release.key diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index d95b90412..06e05e778 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -1,7 +1,7 @@ import { createExportableManifest } from '@pnpm/exportable-manifest'; import { readProjectManifest } from '@pnpm/read-project-manifest'; import { writeProjectManifest } from '@pnpm/write-project-manifest'; -import { execFile, exec as execRaw } from 'child_process'; +import { execFile, execFileSync, exec as execRaw } from 'child_process'; import { Octokit } from '@octokit/core'; import fs from 'fs'; import * as util from 'util'; @@ -87,7 +87,7 @@ async function main() { //Packages await exec(`pnpm oclif pack ${operatingSystem}`); if (operatingSystem === 'deb') { - await installDebCert(); + installDebCert(); } // Upload Tarballs await uploadS3(operatingSystem); @@ -186,23 +186,12 @@ const promoteS3 = async (platform: 'macos' | 'deb' | 'win', version: string) => }; // # This will sign files after `oclif pack deb`, this script should be ran from the `dist/deb` folder -const installDebCert = async () => { - await exec(`export GPG_TTY=$(tty)`); - await exec(`echo "$DEBIAN_GPG_KEY_PRIVATE" exists....`); - await exec( - `echo "$DEBIAN_GPG_KEY_PRIVATE" | base64 -d 2> /dev/null | gpg --import --batch --passphrase "$DEBIAN_GPG_KEY_PASS" 2> /dev/null` - ); - await exec( - `gpg --digest-algo SHA512 --clearsign --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o InRelease Release 2> /dev/null` - ); - await exec( - `gpg --digest-algo SHA512 -abs --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o Release` - ); - await exec(`echo "Signed debian packages successfully"`); - await exec(`echo "sha256 sums:"`); - await exec(`sha256sum *Release*`); - await exec(` - mkdir -p ./dist/deb/release.key - `); - await exec(`echo "$DEBIAN_GPG_KEY_PUBLIC" | base64 --decode > ./dist/deb/release.key`); +const installDebCert = () => { + execFileSync('./install-deb-cert.sh', { + stdio: 'inherit', + cwd: `${PATH_TO_CLI}/dist/deb`, + env: { + ...process.env + } + }); }; From 091b32939a46a1f8b4ca0474d1b43018413566b2 Mon Sep 17 00:00:00 2001 From: Emily Date: Thu, 18 Jul 2024 10:25:17 +0200 Subject: [PATCH 38/57] separate steps --- .github/workflows/release-cli-assets.yml | 28 +++++++++-- package.json | 2 +- scripts/install-deb-cert.sh | 14 ------ scripts/release-cli.ts | 58 ++++------------------- scripts/upload-promote.ts | 59 ++++++++++++++++++++++++ 5 files changed, 94 insertions(+), 67 deletions(-) delete mode 100644 scripts/install-deb-cert.sh create mode 100644 scripts/upload-promote.ts diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index b950be2b1..ac01cec8d 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -104,19 +104,41 @@ jobs: mask-aws-account-id: 'no' - name: Release CLI Assets - run: | - export GPG_TTY=$(tty) - pnpm run release:cli + run: pnpm run release:cli env: PUBLISHED_PACKAGES: ${{ inputs.publishedPackages }} MATRIX_OS: ${{ matrix.os }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} COMMIT_SHA: ${{ inputs.commitSha }} + + - name: Debian cert + if: matrix.os == 'ubuntu-latest' + run: | + export GPG_TTY=$(tty) + + # This will sign files after `oclif pack:deb`, this script should be ran from + # the `dist/deb` folder + echo "$DEBIAN_GPG_KEY_PRIVATE" | base64 -d 2> /dev/null | gpg --import --batch --passphrase "$DEBIAN_GPG_KEY_PASS" 2> /dev/null + gpg --digest-algo SHA512 --clearsign --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o InRelease Release 2> /dev/null + gpg --digest-algo SHA512 -abs --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o Release.gpg Release 2> /dev/null + echo "Signed debian packages successfully" + echo "sha256 sums:" + sha256sum *Release* + + mkdir -p /home/runner/work/client-ts/client-ts/cli/dist/apt + echo "$DEBIAN_GPG_KEY_PUBLIC" | base64 --decode > /home/runner/work/client-ts/client-ts/cli/dist/apt/release.key + env: DEBIAN_GPG_KEY_PRIVATE: ${{ secrets.DEBIAN_GPG_KEY_PRIVATE }} DEBIAN_GPG_KEY_PASS: ${{ secrets.DEBIAN_GPG_KEY_PASS }} DEBIAN_GPG_KEY_PUBLIC: ${{ secrets.DEBIAN_GPG_KEY_PUBLIC }} DEBIAN_GPG_KEY_ID: ${{ secrets.DEBIAN_GPG_KEY_ID }} + - name: Upload and Promote CLI Assets + run: pnpm run release:cli:upload + env: + MATRIX_OS: ${{ matrix.os }} + COMMIT_SHA: ${{ inputs.commitSha }} + - name: Clean up keychain if: matrix.os == 'macos-latest' run: | diff --git a/package.json b/package.json index c72e6877a..a9e299dc2 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "test": "vitest", "test:canary": "tsx ./scripts/test-canary.ts", "release:cli": "tsx ./scripts/release-cli.ts", - "release:cli:upload": "tsx ./scripts/release-cli-upload.ts", + "release:cli:upload": "tsx ./scripts/upload-promote.ts", "lint": "eslint .", "lint:fix": "eslint . --fix", "prepare": "husky install", diff --git a/scripts/install-deb-cert.sh b/scripts/install-deb-cert.sh deleted file mode 100644 index 8c443c6d0..000000000 --- a/scripts/install-deb-cert.sh +++ /dev/null @@ -1,14 +0,0 @@ -set -e -o pipefail - -# This will sign files after `oclif pack:deb`, this script should be ran from -# the `dist/deb` folder -echo "$DEBIAN_GPG_KEY_PRIVATE" | base64 -d 2> /dev/null | gpg --import --batch --passphrase "$DEBIAN_GPG_KEY_PASS" 2> /dev/null -gpg --digest-algo SHA512 --clearsign --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o InRelease Release 2> /dev/null -gpg --digest-algo SHA512 -abs --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o Release.gpg Release 2> /dev/null -echo "Signed debian packages successfully" -echo "sha256 sums:" -sha256sum *Release* - - -mkdir -p $RUNNER_TEMP/cli/dist/apt -echo "$DEBIAN_GPG_KEY_PUBLIC" | base64 --decode > $RUNNER_TEMP/cli/dist/apt/release.key diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index 06e05e778..2f08e3693 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -1,7 +1,7 @@ import { createExportableManifest } from '@pnpm/exportable-manifest'; import { readProjectManifest } from '@pnpm/read-project-manifest'; import { writeProjectManifest } from '@pnpm/write-project-manifest'; -import { execFile, execFileSync, exec as execRaw } from 'child_process'; +import { execFile, exec as execRaw } from 'child_process'; import { Octokit } from '@octokit/core'; import fs from 'fs'; import * as util from 'util'; @@ -86,14 +86,6 @@ async function main() { await exec(`pnpm oclif pack tarballs --targets=${platformDistributions(operatingSystem)}`); //Packages await exec(`pnpm oclif pack ${operatingSystem}`); - if (operatingSystem === 'deb') { - installDebCert(); - } - // Upload Tarballs - await uploadS3(operatingSystem); - // Upload packages - await uploadS3(operatingSystem, { pkg: true }); - await promoteS3(operatingSystem, version); const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN @@ -114,7 +106,7 @@ async function main() { .readdirSync(pathToAsset) .filter((file) => (operatingSystem === 'deb' ? file.endsWith('.deb') : true)); for (const file of files) { - await uploadFiles({ pathToFile: pathToAsset + `/${file}`, fileName: file, octokit, releaseId: release.data.id }); + // await uploadFiles({ pathToFile: pathToAsset + `/${file}`, fileName: file, octokit, releaseId: release.data.id }); } // Pack windows on linux @@ -124,21 +116,17 @@ async function main() { await exec(`pnpm oclif pack tarballs --targets=${platformDistributions(platform)}`); //Packages await exec(`pnpm oclif pack ${platform}`); - // Upload Tarballs - await uploadS3(platform); - // Upload packages - await uploadS3(platform, { pkg: true }); - await promoteS3(platform, version); + // Windows packs files under "win32" directory const pathToAssetWindows = `${PATH_TO_CLI}/dist/win32`; const files = fs.readdirSync(pathToAssetWindows); for (const file of files) { - await uploadFiles({ - pathToFile: pathToAssetWindows + `/${file}`, - fileName: file, - octokit, - releaseId: release.data.id - }); + // await uploadFiles({ + // pathToFile: pathToAssetWindows + `/${file}`, + // fileName: file, + // octokit, + // releaseId: release.data.id + // }); } } } @@ -167,31 +155,3 @@ const uploadFiles = async ({ }; main(); - -const uploadS3 = async (platform: 'macos' | 'deb' | 'win', options?: { pkg: boolean }) => { - const uploadRes = options?.pkg - ? await exec(`pnpm oclif upload ${platform}`) - : await exec(`pnpm oclif upload tarballs --targets=${platformDistributions(platform)}`); - console.log('Uploaded release', uploadRes.stdout); -}; - -const promoteS3 = async (platform: 'macos' | 'deb' | 'win', version: string) => { - const promoteRes = await exec( - `pnpm oclif promote --${platform} --sha=${process.env.COMMIT_SHA?.slice( - 0, - 8 - )} --indexes --version=${version} --channel=stable --targets=${platformDistributions(platform)}` - ); - console.log('Promoted release', promoteRes.stdout); -}; - -// # This will sign files after `oclif pack deb`, this script should be ran from the `dist/deb` folder -const installDebCert = () => { - execFileSync('./install-deb-cert.sh', { - stdio: 'inherit', - cwd: `${PATH_TO_CLI}/dist/deb`, - env: { - ...process.env - } - }); -}; diff --git a/scripts/upload-promote.ts b/scripts/upload-promote.ts new file mode 100644 index 000000000..f61ecc5cb --- /dev/null +++ b/scripts/upload-promote.ts @@ -0,0 +1,59 @@ +import { createExportableManifest } from '@pnpm/exportable-manifest'; +import { readProjectManifest } from '@pnpm/read-project-manifest'; +import { writeProjectManifest } from '@pnpm/write-project-manifest'; +import { execFile, execFileSync, exec as execRaw } from 'child_process'; +import { Octokit } from '@octokit/core'; +import fs from 'fs'; +import * as util from 'util'; +import { matrixToOclif, platformDistributions } from './utils'; +const exec = util.promisify(execRaw); + +async function main() { + if (!process.env.MATRIX_OS) throw new Error('MATRIX_OS is not set'); + if (!process.env.COMMIT_SHA) throw new Error('COMMIT_SHA is not set'); + + const operatingSystem = matrixToOclif(process.env.MATRIX_OS); + + const PATH_TO_CLI = process.cwd() + '/cli'; + + const { + manifest: { version } + } = await readProjectManifest(PATH_TO_CLI); + + if (!version) throw new Error('Missing package version.'); + + // Upload Tarballs + await uploadS3(operatingSystem); + // Upload packages + await uploadS3(operatingSystem, { pkg: true }); + await promoteS3(operatingSystem, version); + + // Pack windows on linux + if (operatingSystem === 'deb') { + const platform = 'win'; + + // Upload Tarballs + await uploadS3(platform); + // Upload packages + await uploadS3(platform, { pkg: true }); + await promoteS3(platform, version); + } +} +main(); + +const uploadS3 = async (platform: 'macos' | 'deb' | 'win', options?: { pkg: boolean }) => { + const uploadRes = options?.pkg + ? await exec(`pnpm oclif upload ${platform}`) + : await exec(`pnpm oclif upload tarballs --targets=${platformDistributions(platform)}`); + console.log('Uploaded release', uploadRes.stdout); +}; + +const promoteS3 = async (platform: 'macos' | 'deb' | 'win', version: string) => { + const promoteRes = await exec( + `pnpm oclif promote --${platform} --sha=${process.env.COMMIT_SHA?.slice( + 0, + 8 + )} --indexes --version=${version} --channel=stable --targets=${platformDistributions(platform)}` + ); + console.log('Promoted release', promoteRes.stdout); +}; From 04b8a1640791655dd105d428586d492d4d6a6e1c Mon Sep 17 00:00:00 2001 From: Emily Date: Thu, 18 Jul 2024 10:34:17 +0200 Subject: [PATCH 39/57] chdir --- scripts/upload-promote.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/upload-promote.ts b/scripts/upload-promote.ts index f61ecc5cb..bfb79235a 100644 --- a/scripts/upload-promote.ts +++ b/scripts/upload-promote.ts @@ -22,6 +22,8 @@ async function main() { if (!version) throw new Error('Missing package version.'); + process.chdir(PATH_TO_CLI); + // Upload Tarballs await uploadS3(operatingSystem); // Upload packages From b314368adfe6197704d9a95196cef69532904500 Mon Sep 17 00:00:00 2001 From: Emily Date: Thu, 18 Jul 2024 10:50:50 +0200 Subject: [PATCH 40/57] run from dist folder --- .github/workflows/release-cli-assets.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index ac01cec8d..11756b877 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -116,6 +116,8 @@ jobs: run: | export GPG_TTY=$(tty) + cd /home/runner/work/client-ts/client-ts/cli/dist/deb + # This will sign files after `oclif pack:deb`, this script should be ran from # the `dist/deb` folder echo "$DEBIAN_GPG_KEY_PRIVATE" | base64 -d 2> /dev/null | gpg --import --batch --passphrase "$DEBIAN_GPG_KEY_PASS" 2> /dev/null From 9294f436845e56e90d2bddf7bb02f8899b9e9eda Mon Sep 17 00:00:00 2001 From: Emily Date: Thu, 18 Jul 2024 12:44:42 +0200 Subject: [PATCH 41/57] skip windows tmp --- scripts/release-cli.ts | 50 +++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index 2f08e3693..084f385f1 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -102,33 +102,33 @@ async function main() { const pathToAsset = `${PATH_TO_CLI}/dist/${operatingSystem}`; // Debian pack results in redundant files. Only upload .deb files - const files = fs - .readdirSync(pathToAsset) - .filter((file) => (operatingSystem === 'deb' ? file.endsWith('.deb') : true)); - for (const file of files) { - // await uploadFiles({ pathToFile: pathToAsset + `/${file}`, fileName: file, octokit, releaseId: release.data.id }); - } + // const files = fs + // .readdirSync(pathToAsset) + // .filter((file) => (operatingSystem === 'deb' ? file.endsWith('.deb') : true)); + // for (const file of files) { + // // await uploadFiles({ pathToFile: pathToAsset + `/${file}`, fileName: file, octokit, releaseId: release.data.id }); + // } // Pack windows on linux - if (operatingSystem === 'deb') { - const platform = 'win'; - // Tarballs - await exec(`pnpm oclif pack tarballs --targets=${platformDistributions(platform)}`); - //Packages - await exec(`pnpm oclif pack ${platform}`); - - // Windows packs files under "win32" directory - const pathToAssetWindows = `${PATH_TO_CLI}/dist/win32`; - const files = fs.readdirSync(pathToAssetWindows); - for (const file of files) { - // await uploadFiles({ - // pathToFile: pathToAssetWindows + `/${file}`, - // fileName: file, - // octokit, - // releaseId: release.data.id - // }); - } - } + // if (operatingSystem === 'deb') { + // const platform = 'win'; + // // Tarballs + // await exec(`pnpm oclif pack tarballs --targets=${platformDistributions(platform)}`); + // //Packages + // await exec(`pnpm oclif pack ${platform}`); + + // // Windows packs files under "win32" directory + // const pathToAssetWindows = `${PATH_TO_CLI}/dist/win32`; + // const files = fs.readdirSync(pathToAssetWindows); + // for (const file of files) { + // // await uploadFiles({ + // // pathToFile: pathToAssetWindows + `/${file}`, + // // fileName: file, + // // octokit, + // // releaseId: release.data.id + // // }); + // } + // } } const uploadFiles = async ({ From 61aa2d0e56ac6f4079492e2c208bc0a23bdb1130 Mon Sep 17 00:00:00 2001 From: Emily Date: Thu, 18 Jul 2024 12:56:46 +0200 Subject: [PATCH 42/57] list files --- .github/workflows/release-cli-assets.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 11756b877..ad0b393e8 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -111,6 +111,11 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} COMMIT_SHA: ${{ inputs.commitSha }} + - name: List all the deb files + if: matrix.os == 'ubuntu-latest' + run: ls -R + working-directory: /home/runner/work/client-ts/client-ts/cli/dist/deb + - name: Debian cert if: matrix.os == 'ubuntu-latest' run: | From cf3591453773dd90df32eac8c4b7751781607539 Mon Sep 17 00:00:00 2001 From: Emily Date: Thu, 18 Jul 2024 13:13:49 +0200 Subject: [PATCH 43/57] cwd --- .github/workflows/release-cli-assets.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index ad0b393e8..08a306cf0 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -118,13 +118,10 @@ jobs: - name: Debian cert if: matrix.os == 'ubuntu-latest' + working-directory: /home/runner/work/client-ts/client-ts/cli/dist/deb run: | - export GPG_TTY=$(tty) - - cd /home/runner/work/client-ts/client-ts/cli/dist/deb + # export GPG_TTY=$(tty) - # This will sign files after `oclif pack:deb`, this script should be ran from - # the `dist/deb` folder echo "$DEBIAN_GPG_KEY_PRIVATE" | base64 -d 2> /dev/null | gpg --import --batch --passphrase "$DEBIAN_GPG_KEY_PASS" 2> /dev/null gpg --digest-algo SHA512 --clearsign --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o InRelease Release 2> /dev/null gpg --digest-algo SHA512 -abs --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o Release.gpg Release 2> /dev/null From af77ad1a4e37de560eece23839bd9e03d43321c1 Mon Sep 17 00:00:00 2001 From: Emily Date: Thu, 18 Jul 2024 13:26:57 +0200 Subject: [PATCH 44/57] log error --- .github/workflows/release-cli-assets.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 08a306cf0..f19f845e5 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -120,7 +120,7 @@ jobs: if: matrix.os == 'ubuntu-latest' working-directory: /home/runner/work/client-ts/client-ts/cli/dist/deb run: | - # export GPG_TTY=$(tty) + set -e -o pipefail echo "$DEBIAN_GPG_KEY_PRIVATE" | base64 -d 2> /dev/null | gpg --import --batch --passphrase "$DEBIAN_GPG_KEY_PASS" 2> /dev/null gpg --digest-algo SHA512 --clearsign --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o InRelease Release 2> /dev/null From c60c242b72ca2644cb4754ab2246b29ed30ad97e Mon Sep 17 00:00:00 2001 From: Emily Date: Thu, 18 Jul 2024 13:48:09 +0200 Subject: [PATCH 45/57] test --- .github/workflows/release-cli-assets.yml | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index f19f845e5..b9c78d310 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -121,16 +121,15 @@ jobs: working-directory: /home/runner/work/client-ts/client-ts/cli/dist/deb run: | set -e -o pipefail - - echo "$DEBIAN_GPG_KEY_PRIVATE" | base64 -d 2> /dev/null | gpg --import --batch --passphrase "$DEBIAN_GPG_KEY_PASS" 2> /dev/null - gpg --digest-algo SHA512 --clearsign --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o InRelease Release 2> /dev/null - gpg --digest-algo SHA512 -abs --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o Release.gpg Release 2> /dev/null - echo "Signed debian packages successfully" - echo "sha256 sums:" - sha256sum *Release* - - mkdir -p /home/runner/work/client-ts/client-ts/cli/dist/apt - echo "$DEBIAN_GPG_KEY_PUBLIC" | base64 --decode > /home/runner/work/client-ts/client-ts/cli/dist/apt/release.key + echo "$DEBIAN_GPG_KEY_PRIVATE" | base64 -d | gpg --import --batch --passphrase "$DEBIAN_GPG_KEY_PASS" + # gpg --digest-algo SHA512 --clearsign --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o InRelease Release + # gpg --digest-algo SHA512 -abs --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o Release.gpg Release + # echo "Signed debian packages successfully" + # echo "sha256 sums:" + # sha256sum *Release* + + # mkdir -p /home/runner/work/client-ts/client-ts/cli/dist/apt + # echo "$DEBIAN_GPG_KEY_PUBLIC" | base64 --decode > /home/runner/work/client-ts/client-ts/cli/dist/apt/release.key env: DEBIAN_GPG_KEY_PRIVATE: ${{ secrets.DEBIAN_GPG_KEY_PRIVATE }} DEBIAN_GPG_KEY_PASS: ${{ secrets.DEBIAN_GPG_KEY_PASS }} From f7352bd9d76b6da7b5a995b44bc6ce061343e3ae Mon Sep 17 00:00:00 2001 From: Emily Date: Thu, 18 Jul 2024 13:59:11 +0200 Subject: [PATCH 46/57] test --- .github/workflows/release-cli-assets.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index b9c78d310..f6045faf1 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -121,7 +121,7 @@ jobs: working-directory: /home/runner/work/client-ts/client-ts/cli/dist/deb run: | set -e -o pipefail - echo "$DEBIAN_GPG_KEY_PRIVATE" | base64 -d | gpg --import --batch --passphrase "$DEBIAN_GPG_KEY_PASS" + echo "$DEBIAN_GPG_KEY_PRIVATE" | gpg --import --batch --passphrase "$DEBIAN_GPG_KEY_PASS" # gpg --digest-algo SHA512 --clearsign --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o InRelease Release # gpg --digest-algo SHA512 -abs --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o Release.gpg Release # echo "Signed debian packages successfully" From eee5a5dce30b8f28ec3bed2fb55f58525d142fd1 Mon Sep 17 00:00:00 2001 From: Emily Date: Thu, 18 Jul 2024 14:08:20 +0200 Subject: [PATCH 47/57] test --- .github/workflows/release-cli-assets.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index f6045faf1..3e0d8d72d 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -35,7 +35,7 @@ jobs: name: Release CLI assets strategy: matrix: - os: [ubuntu-latest, macos-latest] + os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 @@ -122,14 +122,14 @@ jobs: run: | set -e -o pipefail echo "$DEBIAN_GPG_KEY_PRIVATE" | gpg --import --batch --passphrase "$DEBIAN_GPG_KEY_PASS" - # gpg --digest-algo SHA512 --clearsign --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o InRelease Release - # gpg --digest-algo SHA512 -abs --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o Release.gpg Release - # echo "Signed debian packages successfully" - # echo "sha256 sums:" - # sha256sum *Release* - - # mkdir -p /home/runner/work/client-ts/client-ts/cli/dist/apt - # echo "$DEBIAN_GPG_KEY_PUBLIC" | base64 --decode > /home/runner/work/client-ts/client-ts/cli/dist/apt/release.key + gpg --digest-algo SHA512 --clearsign --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o InRelease Release + gpg --digest-algo SHA512 -abs --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o Release.gpg Release + echo "Signed debian packages successfully" + echo "sha256 sums:" + sha256sum *Release* + + mkdir -p /home/runner/work/client-ts/client-ts/cli/dist/apt + echo "$DEBIAN_GPG_KEY_PUBLIC" | base64 --decode > /home/runner/work/client-ts/client-ts/cli/dist/apt/release.key env: DEBIAN_GPG_KEY_PRIVATE: ${{ secrets.DEBIAN_GPG_KEY_PRIVATE }} DEBIAN_GPG_KEY_PASS: ${{ secrets.DEBIAN_GPG_KEY_PASS }} From da2760fca08d3b5af3055a76469505f56fdbc51d Mon Sep 17 00:00:00 2001 From: Emily Date: Thu, 18 Jul 2024 14:17:38 +0200 Subject: [PATCH 48/57] test --- .github/workflows/release-cli-assets.yml | 4 ++-- scripts/upload-promote.ts | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 3e0d8d72d..4e2fdb28d 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -35,7 +35,7 @@ jobs: name: Release CLI assets strategy: matrix: - os: [ubuntu-latest] + os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 @@ -129,7 +129,7 @@ jobs: sha256sum *Release* mkdir -p /home/runner/work/client-ts/client-ts/cli/dist/apt - echo "$DEBIAN_GPG_KEY_PUBLIC" | base64 --decode > /home/runner/work/client-ts/client-ts/cli/dist/apt/release.key + echo "$DEBIAN_GPG_KEY_PUBLIC" > /home/runner/work/client-ts/client-ts/cli/dist/apt/release.key env: DEBIAN_GPG_KEY_PRIVATE: ${{ secrets.DEBIAN_GPG_KEY_PRIVATE }} DEBIAN_GPG_KEY_PASS: ${{ secrets.DEBIAN_GPG_KEY_PASS }} diff --git a/scripts/upload-promote.ts b/scripts/upload-promote.ts index bfb79235a..a00d50b2c 100644 --- a/scripts/upload-promote.ts +++ b/scripts/upload-promote.ts @@ -31,15 +31,15 @@ async function main() { await promoteS3(operatingSystem, version); // Pack windows on linux - if (operatingSystem === 'deb') { - const platform = 'win'; - - // Upload Tarballs - await uploadS3(platform); - // Upload packages - await uploadS3(platform, { pkg: true }); - await promoteS3(platform, version); - } + // if (operatingSystem === 'deb') { + // const platform = 'win'; + + // // Upload Tarballs + // await uploadS3(platform); + // // Upload packages + // await uploadS3(platform, { pkg: true }); + // await promoteS3(platform, version); + // } } main(); From 73d572efe495cf944663816f7055355550c1d2e0 Mon Sep 17 00:00:00 2001 From: Emily Date: Thu, 18 Jul 2024 16:36:36 +0200 Subject: [PATCH 49/57] windows --- .github/workflows/release-cli-assets.yml | 21 +++++++++++++++++++++ scripts/release-cli.ts | 23 +---------------------- scripts/upload-promote.ts | 19 ++----------------- scripts/utils.ts | 2 ++ 4 files changed, 26 insertions(+), 39 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 4e2fdb28d..d0578cd13 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -142,6 +142,27 @@ jobs: MATRIX_OS: ${{ matrix.os }} COMMIT_SHA: ${{ inputs.commitSha }} + # Necessary to delete deb packes before + # packing windows or machine runs out of space + - name: Release CLI Assets (Windows only) + if: matrix.os == 'ubuntu-latest' + run: | + rm -rf /home/runner/work/client-ts/client-ts/cli/dist/deb + pnpm run release:cli + env: + PUBLISHED_PACKAGES: ${{ inputs.publishedPackages }} + MATRIX_OS: ${{ matrix.os }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + COMMIT_SHA: ${{ inputs.commitSha }} + OS_OVERRIDE: windows-latest + - name: Upload and Promote CLI Assets (Windows only) + if: matrix.os == 'ubuntu-latest' + run: pnpm run release:cli:upload + env: + MATRIX_OS: ${{ matrix.os }} + COMMIT_SHA: ${{ inputs.commitSha }} + OS_OVERRIDE: windows-latest + - name: Clean up keychain if: matrix.os == 'macos-latest' run: | diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index 084f385f1..22976dca2 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -29,7 +29,7 @@ async function main() { if (!process.env.COMMIT_SHA) throw new Error('COMMIT_SHA is not set'); // if (!publishedPackagesContains(process.env.PUBLISHED_PACKAGES, '@xata.io/cli')) return; - const operatingSystem = matrixToOclif(process.env.MATRIX_OS); + const operatingSystem = matrixToOclif(process.env.OS_OVERRIDE ?? process.env.MATRIX_OS); const { manifest, fileName } = await readProjectManifest(PATH_TO_CLI); const { @@ -108,27 +108,6 @@ async function main() { // for (const file of files) { // // await uploadFiles({ pathToFile: pathToAsset + `/${file}`, fileName: file, octokit, releaseId: release.data.id }); // } - - // Pack windows on linux - // if (operatingSystem === 'deb') { - // const platform = 'win'; - // // Tarballs - // await exec(`pnpm oclif pack tarballs --targets=${platformDistributions(platform)}`); - // //Packages - // await exec(`pnpm oclif pack ${platform}`); - - // // Windows packs files under "win32" directory - // const pathToAssetWindows = `${PATH_TO_CLI}/dist/win32`; - // const files = fs.readdirSync(pathToAssetWindows); - // for (const file of files) { - // // await uploadFiles({ - // // pathToFile: pathToAssetWindows + `/${file}`, - // // fileName: file, - // // octokit, - // // releaseId: release.data.id - // // }); - // } - // } } const uploadFiles = async ({ diff --git a/scripts/upload-promote.ts b/scripts/upload-promote.ts index a00d50b2c..5dac1e7cd 100644 --- a/scripts/upload-promote.ts +++ b/scripts/upload-promote.ts @@ -1,9 +1,5 @@ -import { createExportableManifest } from '@pnpm/exportable-manifest'; import { readProjectManifest } from '@pnpm/read-project-manifest'; -import { writeProjectManifest } from '@pnpm/write-project-manifest'; -import { execFile, execFileSync, exec as execRaw } from 'child_process'; -import { Octokit } from '@octokit/core'; -import fs from 'fs'; +import { exec as execRaw } from 'child_process'; import * as util from 'util'; import { matrixToOclif, platformDistributions } from './utils'; const exec = util.promisify(execRaw); @@ -12,7 +8,7 @@ async function main() { if (!process.env.MATRIX_OS) throw new Error('MATRIX_OS is not set'); if (!process.env.COMMIT_SHA) throw new Error('COMMIT_SHA is not set'); - const operatingSystem = matrixToOclif(process.env.MATRIX_OS); + const operatingSystem = matrixToOclif(process.env.OS_OVERRIDE ?? process.env.MATRIX_OS); const PATH_TO_CLI = process.cwd() + '/cli'; @@ -29,17 +25,6 @@ async function main() { // Upload packages await uploadS3(operatingSystem, { pkg: true }); await promoteS3(operatingSystem, version); - - // Pack windows on linux - // if (operatingSystem === 'deb') { - // const platform = 'win'; - - // // Upload Tarballs - // await uploadS3(platform); - // // Upload packages - // await uploadS3(platform, { pkg: true }); - // await promoteS3(platform, version); - // } } main(); diff --git a/scripts/utils.ts b/scripts/utils.ts index 70b3bf97d..18de07178 100644 --- a/scripts/utils.ts +++ b/scripts/utils.ts @@ -4,6 +4,8 @@ export const matrixToOclif = (os: string) => { return 'macos'; case 'ubuntu-latest': return 'deb'; + case 'windows-latest': + return 'win'; default: throw new Error('Unsupported OS'); } From c6b84d663310ee4784a5b79568381a0f209a5c33 Mon Sep 17 00:00:00 2001 From: Emily Date: Fri, 19 Jul 2024 09:01:49 +0200 Subject: [PATCH 50/57] test gh --- scripts/release-cli.ts | 18 +++++++++--------- scripts/upload-promote.ts | 5 +++-- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index 22976dca2..80d2c7cd0 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -27,6 +27,7 @@ async function main() { if (!process.env.GITHUB_TOKEN) throw new Error('GITHUB_TOKEN is not set'); // if (!process.env.PUBLISHED_PACKAGES) throw new Error('PUBLISHED_PACKAGES is not set'); if (!process.env.COMMIT_SHA) throw new Error('COMMIT_SHA is not set'); + // if (!publishedPackagesContains(process.env.PUBLISHED_PACKAGES, '@xata.io/cli')) return; const operatingSystem = matrixToOclif(process.env.OS_OVERRIDE ?? process.env.MATRIX_OS); @@ -50,7 +51,6 @@ async function main() { // Assume changeset version has been called and all the // versions in package jsons are up to date - const { manifest: { version } } = await readProjectManifest(PATH_TO_CLI); @@ -84,7 +84,7 @@ async function main() { // Tarballs await exec(`pnpm oclif pack tarballs --targets=${platformDistributions(operatingSystem)}`); - //Packages + // Installers await exec(`pnpm oclif pack ${operatingSystem}`); const octokit = new Octokit({ @@ -101,13 +101,13 @@ async function main() { if (!release.data) throw new Error('Release not found'); const pathToAsset = `${PATH_TO_CLI}/dist/${operatingSystem}`; - // Debian pack results in redundant files. Only upload .deb files - // const files = fs - // .readdirSync(pathToAsset) - // .filter((file) => (operatingSystem === 'deb' ? file.endsWith('.deb') : true)); - // for (const file of files) { - // // await uploadFiles({ pathToFile: pathToAsset + `/${file}`, fileName: file, octokit, releaseId: release.data.id }); - // } + // Debian pack results in redundant installer files. Only upload .deb files + const files = fs + .readdirSync(pathToAsset) + .filter((file) => (operatingSystem === 'deb' ? file.endsWith('.deb') : true)); + for (const file of files) { + await uploadFiles({ pathToFile: pathToAsset + `/${file}`, fileName: file, octokit, releaseId: release.data.id }); + } } const uploadFiles = async ({ diff --git a/scripts/upload-promote.ts b/scripts/upload-promote.ts index 5dac1e7cd..8b49f2a8c 100644 --- a/scripts/upload-promote.ts +++ b/scripts/upload-promote.ts @@ -20,10 +20,11 @@ async function main() { process.chdir(PATH_TO_CLI); - // Upload Tarballs + // Upload tarballs await uploadS3(operatingSystem); - // Upload packages + // Upload installers await uploadS3(operatingSystem, { pkg: true }); + // Promote to stable await promoteS3(operatingSystem, version); } main(); From 629599f39f329b94085d684cf29296fd0a7ad317 Mon Sep 17 00:00:00 2001 From: Emily Date: Fri, 19 Jul 2024 09:30:41 +0200 Subject: [PATCH 51/57] win path --- scripts/release-cli.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scripts/release-cli.ts b/scripts/release-cli.ts index 80d2c7cd0..4feb96b57 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli.ts @@ -99,14 +99,15 @@ async function main() { }); if (!release.data) throw new Error('Release not found'); - - const pathToAsset = `${PATH_TO_CLI}/dist/${operatingSystem}`; + // Windows packs files under "win32" directory + const pathToAssets = + operatingSystem === 'win' ? `${PATH_TO_CLI}/dist/win32` : `${PATH_TO_CLI}/dist/${operatingSystem}`; // Debian pack results in redundant installer files. Only upload .deb files const files = fs - .readdirSync(pathToAsset) + .readdirSync(pathToAssets) .filter((file) => (operatingSystem === 'deb' ? file.endsWith('.deb') : true)); for (const file of files) { - await uploadFiles({ pathToFile: pathToAsset + `/${file}`, fileName: file, octokit, releaseId: release.data.id }); + await uploadFiles({ pathToFile: pathToAssets + `/${file}`, fileName: file, octokit, releaseId: release.data.id }); } } From 9946471e3067b1e3ef14df19f744c2c7f819c06a Mon Sep 17 00:00:00 2001 From: Emily Date: Fri, 19 Jul 2024 09:38:57 +0200 Subject: [PATCH 52/57] clean --- .github/workflows/release-cli-assets.yml | 47 ++++++----- .github/workflows/test-release.yml | 26 ------- package.json | 5 +- .../{release-cli.ts => release-cli-pack.ts} | 74 ++---------------- scripts/release-cli-upload-gh.ts | 78 +++++++++++++++++++ ...ad-promote.ts => release-cli-upload-s3.ts} | 0 6 files changed, 115 insertions(+), 115 deletions(-) delete mode 100644 .github/workflows/test-release.yml rename scripts/{release-cli.ts => release-cli-pack.ts} (53%) create mode 100644 scripts/release-cli-upload-gh.ts rename scripts/{upload-promote.ts => release-cli-upload-s3.ts} (100%) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index d0578cd13..80cadcfed 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -3,21 +3,21 @@ name: Release CLI Assets on: workflow_call: inputs: - # publishedPackages: - # description: 'Published packages' - # required: true - # type: string + publishedPackages: + description: 'Published packages' + required: true + type: string commitSha: description: 'Commit SHA' required: true type: string workflow_dispatch: inputs: - # publishedPackages: - # description: 'Published packages' - # required: true - # default: '[{"name": "@xata.io/cli", "version": "1.2.0"}]' - # type: string + publishedPackages: + description: 'Published packages' + required: true + default: '[{"name": "@xata.io/cli", "version": "1.2.0"}]' + type: string commitSha: description: 'Commit SHA' required: true @@ -103,13 +103,17 @@ jobs: aws-region: us-east-1 mask-aws-account-id: 'no' - - name: Release CLI Assets - run: pnpm run release:cli + - name: Pack + run: pnpm run release:cli:pack env: PUBLISHED_PACKAGES: ${{ inputs.publishedPackages }} MATRIX_OS: ${{ matrix.os }} + + - name: Upload CLI Assets to GitHub Releases + run: pnpm run release:cli:upload:gh + env: + MATRIX_OS: ${{ matrix.os }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - COMMIT_SHA: ${{ inputs.commitSha }} - name: List all the deb files if: matrix.os == 'ubuntu-latest' @@ -136,28 +140,33 @@ jobs: DEBIAN_GPG_KEY_PUBLIC: ${{ secrets.DEBIAN_GPG_KEY_PUBLIC }} DEBIAN_GPG_KEY_ID: ${{ secrets.DEBIAN_GPG_KEY_ID }} - - name: Upload and Promote CLI Assets - run: pnpm run release:cli:upload + - name: Upload and Promote CLI Assets to S3 + run: pnpm run release:cli:upload:s3 env: MATRIX_OS: ${{ matrix.os }} COMMIT_SHA: ${{ inputs.commitSha }} # Necessary to delete deb packes before # packing windows or machine runs out of space - - name: Release CLI Assets (Windows only) + - name: Pack if: matrix.os == 'ubuntu-latest' run: | rm -rf /home/runner/work/client-ts/client-ts/cli/dist/deb - pnpm run release:cli + pnpm run release:cli:pack env: PUBLISHED_PACKAGES: ${{ inputs.publishedPackages }} + MATRIX_OS: ${{ matrix.os }} + OS_OVERRIDE: windows-latest + - name: Upload CLI Assets to GitHub Releases (Windows only) + run: pnpm run release:cli:upload:gh + if: matrix.os == 'ubuntu-latest' + env: MATRIX_OS: ${{ matrix.os }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - COMMIT_SHA: ${{ inputs.commitSha }} OS_OVERRIDE: windows-latest - - name: Upload and Promote CLI Assets (Windows only) + - name: Upload and Promote CLI Assets to S3 (Windows only) if: matrix.os == 'ubuntu-latest' - run: pnpm run release:cli:upload + run: pnpm run release:cli:upload:s3 env: MATRIX_OS: ${{ matrix.os }} COMMIT_SHA: ${{ inputs.commitSha }} diff --git a/.github/workflows/test-release.yml b/.github/workflows/test-release.yml deleted file mode 100644 index fd94c75ef..000000000 --- a/.github/workflows/test-release.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Test Release - -on: - push: - -concurrency: ${{ github.workflow }}-${{ github.ref }} - -jobs: - release: - name: Test Release - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - # This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits - fetch-depth: 0 - # This makes the PR pushed to use GITHUB_TOKEN and trigger the checks - persist-credentials: false - - publish-cli-assets: - name: Publish CLI assets - needs: [release] - uses: ./.github/workflows/release-cli-assets.yml - with: - commitSha: ${{ github.sha }} - secrets: inherit diff --git a/package.json b/package.json index a9e299dc2..9acbb89da 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,9 @@ "scripts": { "test": "vitest", "test:canary": "tsx ./scripts/test-canary.ts", - "release:cli": "tsx ./scripts/release-cli.ts", - "release:cli:upload": "tsx ./scripts/upload-promote.ts", + "release:cli:pack": "tsx ./scripts/release-cli-pack.ts", + "release:cli:upload:gh": "tsx ./scripts/release-cli-upload-gh.ts", + "release:cli:upload:s3": "tsx ./scripts/release-cli-upload-s3.ts", "lint": "eslint .", "lint:fix": "eslint . --fix", "prepare": "husky install", diff --git a/scripts/release-cli.ts b/scripts/release-cli-pack.ts similarity index 53% rename from scripts/release-cli.ts rename to scripts/release-cli-pack.ts index 4feb96b57..e49862d2d 100644 --- a/scripts/release-cli.ts +++ b/scripts/release-cli-pack.ts @@ -2,10 +2,8 @@ import { createExportableManifest } from '@pnpm/exportable-manifest'; import { readProjectManifest } from '@pnpm/read-project-manifest'; import { writeProjectManifest } from '@pnpm/write-project-manifest'; import { execFile, exec as execRaw } from 'child_process'; -import { Octokit } from '@octokit/core'; -import fs from 'fs'; import * as util from 'util'; -import { matrixToOclif, platformDistributions } from './utils'; +import { matrixToOclif, platformDistributions, publishedPackagesContains } from './utils'; const exec = util.promisify(execRaw); const PATH_TO_CLI = process.cwd() + '/cli'; @@ -14,24 +12,16 @@ const PATH_TO_CODEGEN = process.cwd() + '/packages/codegen'; const PATH_TO_IMPORTER = process.cwd() + '/packages/importer'; const PATH_TO_PGROLL = process.cwd() + '/packages/pgroll'; -const base = { - owner: 'xataio', - repo: 'client-ts', - headers: { - 'X-GitHub-Api-Version': '2022-11-28' - } -}; - async function main() { if (!process.env.MATRIX_OS) throw new Error('MATRIX_OS is not set'); - if (!process.env.GITHUB_TOKEN) throw new Error('GITHUB_TOKEN is not set'); - // if (!process.env.PUBLISHED_PACKAGES) throw new Error('PUBLISHED_PACKAGES is not set'); - if (!process.env.COMMIT_SHA) throw new Error('COMMIT_SHA is not set'); + if (!process.env.PUBLISHED_PACKAGES) throw new Error('PUBLISHED_PACKAGES is not set'); - // if (!publishedPackagesContains(process.env.PUBLISHED_PACKAGES, '@xata.io/cli')) return; + if (!publishedPackagesContains(process.env.PUBLISHED_PACKAGES, '@xata.io/cli')) return; const operatingSystem = matrixToOclif(process.env.OS_OVERRIDE ?? process.env.MATRIX_OS); + // Assume changeset version has been called and all the + // versions in package jsons are up to date const { manifest, fileName } = await readProjectManifest(PATH_TO_CLI); const { manifest: { version: clientVersion } @@ -49,13 +39,7 @@ async function main() { if (!clientVersion || !codegenVersion || !importerVersion || !pgrollVersion) throw new Error('Missing package versions.'); - // Assume changeset version has been called and all the - // versions in package jsons are up to date - const { - manifest: { version } - } = await readProjectManifest(PATH_TO_CLI); - - if (!version) throw new Error('Missing package version.'); + if (!manifest.version) throw new Error('Missing package version.'); const workspaceProtocolPackageManifest = await createExportableManifest( PATH_TO_CLI, @@ -86,52 +70,6 @@ async function main() { await exec(`pnpm oclif pack tarballs --targets=${platformDistributions(operatingSystem)}`); // Installers await exec(`pnpm oclif pack ${operatingSystem}`); - - const octokit = new Octokit({ - auth: process.env.GITHUB_TOKEN - }); - - const tag = `@xata.io/cli@${manifest.version}`; - - const release = await octokit.request('GET /repos/{owner}/{repo}/releases/tags/{tag}', { - ...base, - tag - }); - - if (!release.data) throw new Error('Release not found'); - // Windows packs files under "win32" directory - const pathToAssets = - operatingSystem === 'win' ? `${PATH_TO_CLI}/dist/win32` : `${PATH_TO_CLI}/dist/${operatingSystem}`; - // Debian pack results in redundant installer files. Only upload .deb files - const files = fs - .readdirSync(pathToAssets) - .filter((file) => (operatingSystem === 'deb' ? file.endsWith('.deb') : true)); - for (const file of files) { - await uploadFiles({ pathToFile: pathToAssets + `/${file}`, fileName: file, octokit, releaseId: release.data.id }); - } } -const uploadFiles = async ({ - pathToFile, - fileName, - octokit, - releaseId -}: { - pathToFile: string; - fileName: string; - octokit: Octokit; - releaseId: number; -}) => { - const data = fs.readFileSync(pathToFile); - const upload = await octokit.request('POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}', { - ...base, - name: fileName, - label: fileName, - release_id: releaseId, - data: data, - baseUrl: 'https://uploads.github.com' - }); - console.log('Finished uploading asset', upload.status); -}; - main(); diff --git a/scripts/release-cli-upload-gh.ts b/scripts/release-cli-upload-gh.ts new file mode 100644 index 000000000..5635a5a99 --- /dev/null +++ b/scripts/release-cli-upload-gh.ts @@ -0,0 +1,78 @@ +import { readProjectManifest } from '@pnpm/read-project-manifest'; +import { Octokit } from '@octokit/core'; +import fs from 'fs'; +import { matrixToOclif } from './utils'; + +const PATH_TO_CLI = process.cwd() + '/cli'; + +const base = { + owner: 'xataio', + repo: 'client-ts', + headers: { + 'X-GitHub-Api-Version': '2022-11-28' + } +}; + +async function main() { + if (!process.env.MATRIX_OS) throw new Error('MATRIX_OS is not set'); + if (!process.env.GITHUB_TOKEN) throw new Error('GITHUB_TOKEN is not set'); + + const operatingSystem = matrixToOclif(process.env.OS_OVERRIDE ?? process.env.MATRIX_OS); + + const { + manifest: { version } + } = await readProjectManifest(PATH_TO_CLI); + + if (!version) throw new Error('Missing package version.'); + + process.chdir(PATH_TO_CLI); + + const octokit = new Octokit({ + auth: process.env.GITHUB_TOKEN + }); + + const tag = `@xata.io/cli@${version}`; + + const release = await octokit.request('GET /repos/{owner}/{repo}/releases/tags/{tag}', { + ...base, + tag + }); + + if (!release.data) throw new Error('Release not found'); + + // Windows packs files under "win32" directory + const pathToAssets = + operatingSystem === 'win' ? `${PATH_TO_CLI}/dist/win32` : `${PATH_TO_CLI}/dist/${operatingSystem}`; + // Debian pack results in redundant installer files. Only upload .deb files + const files = fs + .readdirSync(pathToAssets) + .filter((file) => (operatingSystem === 'deb' ? file.endsWith('.deb') : true)); + for (const file of files) { + await uploadFiles({ pathToFile: pathToAssets + `/${file}`, fileName: file, octokit, releaseId: release.data.id }); + } +} + +const uploadFiles = async ({ + pathToFile, + fileName, + octokit, + releaseId +}: { + pathToFile: string; + fileName: string; + octokit: Octokit; + releaseId: number; +}) => { + const data = fs.readFileSync(pathToFile); + const upload = await octokit.request('POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}', { + ...base, + name: fileName, + label: fileName, + release_id: releaseId, + data: data, + baseUrl: 'https://uploads.github.com' + }); + console.log('Finished uploading asset', upload.status); +}; + +main(); diff --git a/scripts/upload-promote.ts b/scripts/release-cli-upload-s3.ts similarity index 100% rename from scripts/upload-promote.ts rename to scripts/release-cli-upload-s3.ts From 38440dbe907b6f7e90ad773b3bc7d4058b6f49f1 Mon Sep 17 00:00:00 2001 From: Emily Date: Fri, 19 Jul 2024 10:16:21 +0200 Subject: [PATCH 53/57] clean --- .github/workflows/release-cli-assets.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 80cadcfed..495220817 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -148,7 +148,7 @@ jobs: # Necessary to delete deb packes before # packing windows or machine runs out of space - - name: Pack + - name: Pack (Windows only) if: matrix.os == 'ubuntu-latest' run: | rm -rf /home/runner/work/client-ts/client-ts/cli/dist/deb From fa4cda37560bcb3c399a0615d96c18e4ea80be2b Mon Sep 17 00:00:00 2001 From: Emily Date: Fri, 19 Jul 2024 15:15:38 +0200 Subject: [PATCH 54/57] pr changes --- .github/workflows/release-cli-assets.yml | 12 +----------- cli/package.json | 3 ++- scripts/release-cli-pack.ts | 5 +++++ 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index 495220817..f55609e2e 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -115,16 +115,10 @@ jobs: MATRIX_OS: ${{ matrix.os }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: List all the deb files - if: matrix.os == 'ubuntu-latest' - run: ls -R - working-directory: /home/runner/work/client-ts/client-ts/cli/dist/deb - - name: Debian cert if: matrix.os == 'ubuntu-latest' working-directory: /home/runner/work/client-ts/client-ts/cli/dist/deb run: | - set -e -o pipefail echo "$DEBIAN_GPG_KEY_PRIVATE" | gpg --import --batch --passphrase "$DEBIAN_GPG_KEY_PASS" gpg --digest-algo SHA512 --clearsign --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o InRelease Release gpg --digest-algo SHA512 -abs --pinentry-mode loopback --passphrase "$DEBIAN_GPG_KEY_PASS" -u $DEBIAN_GPG_KEY_ID -o Release.gpg Release @@ -146,13 +140,9 @@ jobs: MATRIX_OS: ${{ matrix.os }} COMMIT_SHA: ${{ inputs.commitSha }} - # Necessary to delete deb packes before - # packing windows or machine runs out of space - name: Pack (Windows only) if: matrix.os == 'ubuntu-latest' - run: | - rm -rf /home/runner/work/client-ts/client-ts/cli/dist/deb - pnpm run release:cli:pack + run: pnpm run release:cli:pack env: PUBLISHED_PACKAGES: ${{ inputs.publishedPackages }} MATRIX_OS: ${{ matrix.os }} diff --git a/cli/package.json b/cli/package.json index 86fea23eb..f6e77faa5 100644 --- a/cli/package.json +++ b/cli/package.json @@ -91,7 +91,8 @@ "init": "./dist/hooks/init/compatibility" }, "macos": { - "identifier": "io.xata.cli" + "identifier": "io.xata.cli", + "sign": "\"Developer ID Installer: Xatabase Inc (BNRJ8833Y2)\"" }, "deb": { "identifier": "io.xata.cli" diff --git a/scripts/release-cli-pack.ts b/scripts/release-cli-pack.ts index e49862d2d..0192fc674 100644 --- a/scripts/release-cli-pack.ts +++ b/scripts/release-cli-pack.ts @@ -66,6 +66,11 @@ async function main() { execFile('rm', ['-rf', `${PATH_TO_CLI}/npm-shrinkwrap.json`]); execFile('touch', [`${PATH_TO_CLI}/npm-shrinkwrap.json`]); + // Clean up any old /dist directories if there are some + for (const subdir of ['macos', 'deb', 'win32']) { + await exec(`rm -rf ${PATH_TO_CLI}/dist/${subdir}`); + } + // Tarballs await exec(`pnpm oclif pack tarballs --targets=${platformDistributions(operatingSystem)}`); // Installers From 72246126d2e0fe3219f7dcb074e2ab0fa7b1637b Mon Sep 17 00:00:00 2001 From: Alexis Rico Date: Thu, 25 Jul 2024 08:59:55 +0200 Subject: [PATCH 55/57] Create thick-bags-grab.md --- .changeset/thick-bags-grab.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/thick-bags-grab.md diff --git a/.changeset/thick-bags-grab.md b/.changeset/thick-bags-grab.md new file mode 100644 index 000000000..5ffa2ebd8 --- /dev/null +++ b/.changeset/thick-bags-grab.md @@ -0,0 +1,5 @@ +--- +"@xata.io/cli": patch +--- + +CLI: Allow binaries to autoupdate From 12884e2cd052ebe6e064631cc11afc16474a98a9 Mon Sep 17 00:00:00 2001 From: Emily Morgan Date: Thu, 25 Jul 2024 09:13:09 +0200 Subject: [PATCH 56/57] feat: setup autoupdates for homebrew formula (#1543) Co-authored-by: Alexis Rico --- .github/workflows/release-cli-assets.yml | 111 +++++++++++++++++++++++ .github/workflows/release.yml | 4 +- 2 files changed, 113 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release-cli-assets.yml b/.github/workflows/release-cli-assets.yml index f55609e2e..82211e164 100644 --- a/.github/workflows/release-cli-assets.yml +++ b/.github/workflows/release-cli-assets.yml @@ -33,6 +33,12 @@ permissions: jobs: release-cli-assets: name: Release CLI assets + outputs: + version: ${{ steps.capture-version.outputs.version }} + mac_intel_sha: ${{steps.sha-macos.outputs.sha-macos-intel}} + mac_arm_sha: ${{ steps.sha-macos.outputs.sha-macos-arm }} + linux_sha: ${{ steps.sha-ubuntu.outputs.sha-linux }} + linux_arm_sha: ${{ steps.sha-ubuntu.outputs.sha-linux-arm }} strategy: matrix: os: [ubuntu-latest, macos-latest] @@ -134,6 +140,35 @@ jobs: DEBIAN_GPG_KEY_PUBLIC: ${{ secrets.DEBIAN_GPG_KEY_PUBLIC }} DEBIAN_GPG_KEY_ID: ${{ secrets.DEBIAN_GPG_KEY_ID }} + - name: Capture version + id: capture-version + working-directory: ./cli + run: echo "version=$(cat package.json | jq -r '.version')" >> $GITHUB_OUTPUT + + - name: Create SHA outputs macos + if: matrix.os == 'macos-latest' + working-directory: ./cli/dist + id: sha-macos + run: | + ls -l + VER="${{steps.capture-version.outputs.version}}" + COMMITSHA="${{inputs.commitSha}}" + COM="$(echo $COMMITSHA | head -c8)" + echo "sha-macos-arm=$(shasum --algorithm 256 xata-v${VER}-${COM}-darwin-arm64.tar.xz | cut -d" " -f1)" >> "$GITHUB_OUTPUT" + echo "sha-macos-intel=$(shasum --algorithm 256 xata-v${VER}-${COM}-darwin-x64.tar.xz | cut -d" " -f1)" >> "$GITHUB_OUTPUT" + + - name: Create SHA outputs ubuntu + if: matrix.os == 'ubuntu-latest' + working-directory: ./cli/dist + id: sha-ubuntu + run: | + ls -l + VER="${{steps.capture-version.outputs.version}}" + COMMITSHA="${{inputs.commitSha}}" + COM="$(echo $COMMITSHA | head -c8)" + echo "sha-linux=$(sha256sum xata-v${VER}-${COM}-linux-arm.tar.xz | cut -d " " -f1)" >> "$GITHUB_OUTPUT" + echo "sha-linux-arm=$(sha256sum xata-v${VER}-${COM}-linux-arm64.tar.xz | cut -d " " -f1)" >> "$GITHUB_OUTPUT" + - name: Upload and Promote CLI Assets to S3 run: pnpm run release:cli:upload:s3 env: @@ -166,3 +201,79 @@ jobs: if: matrix.os == 'macos-latest' run: | security delete-keychain $RUNNER_TEMP/app-signing.keychain-db + + update-homebrew: + needs: [release-cli-assets] + name: Update Homebrew Formula + runs-on: ubuntu-latest + env: + GITHUB_TOKEN: ${{ secrets.GIT_TOKEN }} + steps: + - uses: actions/checkout@v3 + with: + repository: xataio/homebrew-brew + ref: 'main' + token: ${{ secrets.GIT_TOKEN }} + fetch-depth: 0 + + - name: setup git config + run: | + git config user.email "system@xata.io" + git config user.name "Xata" + + - name: Read template file + id: gettemplate + run: | + { + echo 'template<> "$GITHUB_OUTPUT" + + - name: Update Homebrew Formula using template variables + id: updateformula + env: + TEMPLATE_CONTENTS: ${{ steps.gettemplate.outputs.template }} + run: | + echo "$TEMPLATE_CONTENTS" > ./Formula/xata.rb + sed -i 's/__CLI_VERSION__/${{ needs.release-cli-assets.outputs.version }}/g' ./Formula/xata.rb + sed -i 's/__CLI_MAC_INTEL_SHA256__/${{ needs.release-cli-assets.outputs.mac_intel_sha }}/g' ./Formula/xata.rb + sed -i 's/__CLI_MAC_ARM_SHA256__/${{ needs.release-cli-assets.outputs.mac_arm_sha }}/g' ./Formula/xata.rb + sed -i 's/__CLI_LINUX_SHA256__/${{ needs.release-cli-assets.outputs.linux_sha }}/g' ./Formula/xata.rb + sed -i 's/__CLI_LINUX_ARM_SHA256__/${{ needs.release-cli-assets.outputs.linux_arm_sha }}/g' ./Formula/xata.rb + + VER="${{needs.release-cli-assets.outputs.version}}" + COMMITSHA="${{inputs.commitSha}}" + COM="$(echo $COMMITSHA | head -c8)" + BASE_URL="https://xata-cli-assets.s3.us-east-1.amazonaws.com/versions/${VER}/${COM}/xata-v${VER}-${COM}" + + CLI_MAC_INTEL_DOWNLOAD_URL="${BASE_URL}-darwin-x64.tar.xz" + CLI_MAC_ARM_DOWNLOAD_URL="${BASE_URL}-darwin-arm64.tar.xz" + CLI_LINUX_DOWNLOAD_URL="${BASE_URL}-linux-x64.tar.xz" + CLI_LINUX_ARM_DOWNLOAD_URL="${BASE_URL}-linux-arm64.tar.xz" + + sed -i "s|__CLI_MAC_INTEL_DOWNLOAD_URL__|${CLI_MAC_INTEL_DOWNLOAD_URL}|g" ./Formula/xata.rb + sed -i "s|__CLI_MAC_ARM_DOWNLOAD_URL__|${CLI_MAC_ARM_DOWNLOAD_URL}|g" ./Formula/xata.rb + sed -i "s|__CLI_LINUX_DOWNLOAD_URL__|${CLI_LINUX_DOWNLOAD_URL}|g" ./Formula/xata.rb + sed -i "s|__CLI_LINUX_ARM_DOWNLOAD_URL__|${CLI_LINUX_ARM_DOWNLOAD_URL}|g" ./Formula/xata.rb + + - name: Read formula file + id: getformula + run: | + { + echo 'formula<> "$GITHUB_OUTPUT" + + - name: commit changes + run: git commit -a -m "Update dependencies to version ${{ needs.release-cli-assets.outputs.version }}" + + - name: Push changes + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.GIT_TOKEN }} + branch: main + repository: xataio/homebrew-brew diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 90d226bf9..cefd8d8be 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -68,8 +68,8 @@ jobs: GITHUB_TOKEN: ${{ secrets.GIT_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - publish-cli-assets: - name: Publish CLI assets + release-assets: + name: Release CLI assets needs: [release] if: needs.release.outputs.published == 'true' && github.ref_name == 'main' uses: ./.github/workflows/release-cli-assets.yml From 9b2b2e9b8de3d7d65bcd368947ef9e4ceb235efa Mon Sep 17 00:00:00 2001 From: Emily Date: Thu, 25 Jul 2024 09:25:27 +0200 Subject: [PATCH 57/57] node version --- cli/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/package.json b/cli/package.json index 47a7beb37..0253cbeb4 100644 --- a/cli/package.json +++ b/cli/package.json @@ -19,7 +19,7 @@ "/oclif.manifest.json" ], "engines": { - "node": ">=8" + "node": ">=18" }, "dependencies": { "@oclif/core": "^4.0.8",