From 60a0f9341236b949ee6a0b0fc205ba085cd89725 Mon Sep 17 00:00:00 2001 From: kongenpei Date: Tue, 31 Mar 2026 17:39:06 +0800 Subject: [PATCH 01/12] ci: publish PR preview builds to pkg.pr.new --- .github/workflows/pkg-pr-new.yml | 32 ++++++++++ scripts/build-pkg-pr-new.sh | 102 +++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 .github/workflows/pkg-pr-new.yml create mode 100755 scripts/build-pkg-pr-new.sh diff --git a/.github/workflows/pkg-pr-new.yml b/.github/workflows/pkg-pr-new.yml new file mode 100644 index 00000000..c6c86c6e --- /dev/null +++ b/.github/workflows/pkg-pr-new.yml @@ -0,0 +1,32 @@ +name: PR Preview Package + +on: + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + branches: [main] + +permissions: + contents: read + pull-requests: write + +jobs: + publish: + if: github.event.pull_request.draft == false + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + + - uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5 + with: + go-version-file: go.mod + + - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4 + with: + node-version: 20 + + - name: Build preview package + run: ./scripts/build-pkg-pr-new.sh + + - name: Publish to pkg.pr.new + run: npx pkg-pr-new publish --bin ./.pkg-pr-new diff --git a/scripts/build-pkg-pr-new.sh b/scripts/build-pkg-pr-new.sh new file mode 100755 index 00000000..19b8f3d8 --- /dev/null +++ b/scripts/build-pkg-pr-new.sh @@ -0,0 +1,102 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +OUT_DIR="$ROOT_DIR/.pkg-pr-new" + +cd "$ROOT_DIR" + +python3 scripts/fetch_meta.py + +rm -rf "$OUT_DIR" +mkdir -p "$OUT_DIR/bin" "$OUT_DIR/scripts" + +VERSION="$(node -p "require('./package.json').version")" +DATE="$(date -u +%Y-%m-%dT%H:%M:%SZ)" +SHA="$(git rev-parse --short HEAD)" +LDFLAGS="-s -w -X github.com/larksuite/cli/internal/build.Version=${VERSION}-${SHA} -X github.com/larksuite/cli/internal/build.Date=${DATE}" + +build_target() { + local goos="$1" + local goarch="$2" + local ext="" + if [[ "$goos" == "windows" ]]; then + ext=".exe" + fi + + local output="$OUT_DIR/bin/lark-cli-${goos}-${goarch}${ext}" + echo "Building ${goos}/${goarch} -> ${output}" + CGO_ENABLED=0 GOOS="$goos" GOARCH="$goarch" go build -trimpath -ldflags "$LDFLAGS" -o "$output" ./main.go +} + +build_target darwin amd64 +build_target darwin arm64 +build_target linux amd64 +build_target linux arm64 +build_target windows amd64 +build_target windows arm64 + +cat > "$OUT_DIR/scripts/run.js" <<'RUNJS' +#!/usr/bin/env node +const path = require("path"); +const { execFileSync } = require("child_process"); + +const isWindows = process.platform === "win32"; + +const platformMap = { + darwin: "darwin", + linux: "linux", + win32: "windows", +}; + +const archMap = { + x64: "amd64", + arm64: "arm64", +}; + +const platform = platformMap[process.platform]; +const arch = archMap[process.arch]; + +if (!platform || !arch) { + console.error(`Unsupported platform: ${process.platform}-${process.arch}`); + process.exit(1); +} + +const ext = isWindows ? ".exe" : ""; +const binary = path.join(__dirname, "..", "bin", `lark-cli-${platform}-${arch}${ext}`); + +try { + execFileSync(binary, process.argv.slice(2), { stdio: "inherit" }); +} catch (err) { + process.exit(err.status || 1); +} +RUNJS + +chmod +x "$OUT_DIR/scripts/run.js" + +cat > "$OUT_DIR/package.json" < Date: Tue, 31 Mar 2026 18:00:31 +0800 Subject: [PATCH 02/12] chore: limit pkg-pr-new build targets to 3 platforms --- scripts/build-pkg-pr-new.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/build-pkg-pr-new.sh b/scripts/build-pkg-pr-new.sh index 19b8f3d8..ce501c1a 100755 --- a/scripts/build-pkg-pr-new.sh +++ b/scripts/build-pkg-pr-new.sh @@ -29,12 +29,13 @@ build_target() { CGO_ENABLED=0 GOOS="$goos" GOARCH="$goarch" go build -trimpath -ldflags "$LDFLAGS" -o "$output" ./main.go } -build_target darwin amd64 build_target darwin arm64 build_target linux amd64 -build_target linux arm64 +# build_target darwin amd64 +# build_target linux arm64 build_target windows amd64 -build_target windows arm64 +# build_target windows arm64 +# TODO: Re-enable commented platforms after pr.pkg.new whitelist is approved. cat > "$OUT_DIR/scripts/run.js" <<'RUNJS' #!/usr/bin/env node From 37208331d841615f0fbdb073ace2b9ec8dd16245 Mon Sep 17 00:00:00 2001 From: kongenpei Date: Tue, 31 Mar 2026 18:04:20 +0800 Subject: [PATCH 03/12] ci: use node lts in pkg-pr-new workflow --- .github/workflows/pkg-pr-new.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pkg-pr-new.yml b/.github/workflows/pkg-pr-new.yml index c6c86c6e..0b82457f 100644 --- a/.github/workflows/pkg-pr-new.yml +++ b/.github/workflows/pkg-pr-new.yml @@ -23,7 +23,7 @@ jobs: - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4 with: - node-version: 20 + node-version: lts/* - name: Build preview package run: ./scripts/build-pkg-pr-new.sh From 5a7ca52515a5c3bb2bdbd9e52482369de6f6a552 Mon Sep 17 00:00:00 2001 From: kongenpei Date: Tue, 31 Mar 2026 18:07:24 +0800 Subject: [PATCH 04/12] chore: trim pkg-pr-new to single target to fit size limit --- scripts/build-pkg-pr-new.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/build-pkg-pr-new.sh b/scripts/build-pkg-pr-new.sh index ce501c1a..54c01a96 100755 --- a/scripts/build-pkg-pr-new.sh +++ b/scripts/build-pkg-pr-new.sh @@ -30,12 +30,12 @@ build_target() { } build_target darwin arm64 -build_target linux amd64 +# build_target linux amd64 # build_target darwin amd64 # build_target linux arm64 -build_target windows amd64 +# build_target windows amd64 # build_target windows arm64 -# TODO: Re-enable commented platforms after pr.pkg.new whitelist is approved. +# TODO: Re-enable multi-platform targets after pr.pkg.new whitelist is approved. cat > "$OUT_DIR/scripts/run.js" <<'RUNJS' #!/usr/bin/env node From 55562a76470ccbdd643c817b27c0edff5caa44da Mon Sep 17 00:00:00 2001 From: kongenpei Date: Tue, 31 Mar 2026 18:13:51 +0800 Subject: [PATCH 05/12] ci: publish pkg-pr-new package path without --bin --- .github/workflows/pkg-pr-new.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pkg-pr-new.yml b/.github/workflows/pkg-pr-new.yml index 0b82457f..af6970f7 100644 --- a/.github/workflows/pkg-pr-new.yml +++ b/.github/workflows/pkg-pr-new.yml @@ -29,4 +29,4 @@ jobs: run: ./scripts/build-pkg-pr-new.sh - name: Publish to pkg.pr.new - run: npx pkg-pr-new publish --bin ./.pkg-pr-new + run: npx pkg-pr-new publish ./.pkg-pr-new From af43a1cd85c42b00dc7a0e1c6b6760affb8b65d7 Mon Sep 17 00:00:00 2001 From: kongenpei Date: Tue, 31 Mar 2026 18:18:09 +0800 Subject: [PATCH 06/12] ci: disable compact pkg-pr-new urls for fork previews --- .github/workflows/pkg-pr-new.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pkg-pr-new.yml b/.github/workflows/pkg-pr-new.yml index af6970f7..4b9d5163 100644 --- a/.github/workflows/pkg-pr-new.yml +++ b/.github/workflows/pkg-pr-new.yml @@ -29,4 +29,4 @@ jobs: run: ./scripts/build-pkg-pr-new.sh - name: Publish to pkg.pr.new - run: npx pkg-pr-new publish ./.pkg-pr-new + run: npx pkg-pr-new publish --no-compact ./.pkg-pr-new From e2ebc09dbeb5790820cc4ab6109c2da1a50d8fe6 Mon Sep 17 00:00:00 2001 From: kongenpei Date: Tue, 31 Mar 2026 19:27:49 +0800 Subject: [PATCH 07/12] ci: post minimal npm -g pkg-pr-new install comment --- .github/workflows/pkg-pr-new.yml | 45 +++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pkg-pr-new.yml b/.github/workflows/pkg-pr-new.yml index 4b9d5163..d7c1e809 100644 --- a/.github/workflows/pkg-pr-new.yml +++ b/.github/workflows/pkg-pr-new.yml @@ -29,4 +29,47 @@ jobs: run: ./scripts/build-pkg-pr-new.sh - name: Publish to pkg.pr.new - run: npx pkg-pr-new publish --no-compact ./.pkg-pr-new + run: npx pkg-pr-new publish --no-compact --json output.json --comment=off ./.pkg-pr-new + + - name: Comment install command + uses: actions/github-script@v7 + with: + script: | + const fs = require("fs"); + const output = JSON.parse(fs.readFileSync("output.json", "utf8")); + const url = output?.packages?.[0]?.url; + if (!url) { + throw new Error("No package URL found in output.json"); + } + + const body = `npm i -g ${url}`; + const issueNumber = context.issue.number; + + const comments = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issueNumber, + per_page: 100, + }); + + const existing = comments.data.find((comment) => + comment.user?.login === "github-actions[bot]" && + typeof comment.body === "string" && + comment.body.startsWith("npm i -g https://pkg.pr.new/") + ); + + if (existing) { + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: existing.id, + body, + }); + } else { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issueNumber, + body, + }); + } From e2a5c40c38bde6e2a69a8cd5ae2fc3aed8a834f6 Mon Sep 17 00:00:00 2001 From: kongenpei Date: Tue, 31 Mar 2026 19:28:57 +0800 Subject: [PATCH 08/12] chore: enable windows amd64 build for pkg-pr-new --- scripts/build-pkg-pr-new.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build-pkg-pr-new.sh b/scripts/build-pkg-pr-new.sh index 54c01a96..63177385 100755 --- a/scripts/build-pkg-pr-new.sh +++ b/scripts/build-pkg-pr-new.sh @@ -33,7 +33,7 @@ build_target darwin arm64 # build_target linux amd64 # build_target darwin amd64 # build_target linux arm64 -# build_target windows amd64 +build_target windows amd64 # build_target windows arm64 # TODO: Re-enable multi-platform targets after pr.pkg.new whitelist is approved. From f68d595c67474086508f4b5c6408e8d478231daf Mon Sep 17 00:00:00 2001 From: kongenpei Date: Tue, 31 Mar 2026 19:33:02 +0800 Subject: [PATCH 09/12] ci: format pkg-pr-new install comment as markdown code block --- .github/workflows/pkg-pr-new.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pkg-pr-new.yml b/.github/workflows/pkg-pr-new.yml index d7c1e809..c4abb6ca 100644 --- a/.github/workflows/pkg-pr-new.yml +++ b/.github/workflows/pkg-pr-new.yml @@ -42,7 +42,13 @@ jobs: throw new Error("No package URL found in output.json"); } - const body = `npm i -g ${url}`; + const body = [ + "Install preview globally:", + "", + "```bash", + `npm i -g ${url}`, + "```", + ].join("\n"); const issueNumber = context.issue.number; const comments = await github.rest.issues.listComments({ @@ -55,7 +61,7 @@ jobs: const existing = comments.data.find((comment) => comment.user?.login === "github-actions[bot]" && typeof comment.body === "string" && - comment.body.startsWith("npm i -g https://pkg.pr.new/") + comment.body.startsWith("Install preview globally:") ); if (existing) { From 0cbdf5b985f60b14308b25170923a9a2a27ea565 Mon Sep 17 00:00:00 2001 From: kongenpei Date: Tue, 31 Mar 2026 19:34:27 +0800 Subject: [PATCH 10/12] ci: tweak pkg-pr-new comment wording --- .github/workflows/pkg-pr-new.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pkg-pr-new.yml b/.github/workflows/pkg-pr-new.yml index c4abb6ca..2610c45d 100644 --- a/.github/workflows/pkg-pr-new.yml +++ b/.github/workflows/pkg-pr-new.yml @@ -43,7 +43,7 @@ jobs: } const body = [ - "Install preview globally:", + "Install this PR change globally:", "", "```bash", `npm i -g ${url}`, @@ -61,7 +61,7 @@ jobs: const existing = comments.data.find((comment) => comment.user?.login === "github-actions[bot]" && typeof comment.body === "string" && - comment.body.startsWith("Install preview globally:") + comment.body.startsWith("Install this PR change globally:") ); if (existing) { From 5e578e724733d92115036825e0cbe7b65ee73278 Mon Sep 17 00:00:00 2001 From: kongenpei Date: Tue, 31 Mar 2026 19:53:43 +0800 Subject: [PATCH 11/12] ci: pin github-script and paginate PR comments --- .github/workflows/pkg-pr-new.yml | 6 +++--- scripts/build-pkg-pr-new.sh | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pkg-pr-new.yml b/.github/workflows/pkg-pr-new.yml index 2610c45d..f529abc3 100644 --- a/.github/workflows/pkg-pr-new.yml +++ b/.github/workflows/pkg-pr-new.yml @@ -32,7 +32,7 @@ jobs: run: npx pkg-pr-new publish --no-compact --json output.json --comment=off ./.pkg-pr-new - name: Comment install command - uses: actions/github-script@v7 + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: script: | const fs = require("fs"); @@ -51,14 +51,14 @@ jobs: ].join("\n"); const issueNumber = context.issue.number; - const comments = await github.rest.issues.listComments({ + const comments = await github.paginate(github.rest.issues.listComments, { owner: context.repo.owner, repo: context.repo.repo, issue_number: issueNumber, per_page: 100, }); - const existing = comments.data.find((comment) => + const existing = comments.find((comment) => comment.user?.login === "github-actions[bot]" && typeof comment.body === "string" && comment.body.startsWith("Install this PR change globally:") diff --git a/scripts/build-pkg-pr-new.sh b/scripts/build-pkg-pr-new.sh index 63177385..6dd9106d 100755 --- a/scripts/build-pkg-pr-new.sh +++ b/scripts/build-pkg-pr-new.sh @@ -50,6 +50,9 @@ const platformMap = { win32: "windows", }; +// TODO: Keep broad platform mapping for now; with pkg.pr.new 20MB limit we only ship a subset of binaries. +// Track upstream progress before tightening runtime handling: https://github.com/stackblitz-labs/pkg.pr.new/pull/484 + const archMap = { x64: "amd64", arm64: "arm64", From ab28665221dbd4aa8999f5a78665c279130e13ca Mon Sep 17 00:00:00 2001 From: kongenpei Date: Tue, 31 Mar 2026 21:04:48 +0800 Subject: [PATCH 12/12] chore: enable pkg PR build targets --- scripts/build-pkg-pr-new.sh | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/build-pkg-pr-new.sh b/scripts/build-pkg-pr-new.sh index 6dd9106d..0a9ea4c3 100755 --- a/scripts/build-pkg-pr-new.sh +++ b/scripts/build-pkg-pr-new.sh @@ -30,12 +30,11 @@ build_target() { } build_target darwin arm64 -# build_target linux amd64 -# build_target darwin amd64 -# build_target linux arm64 +build_target linux amd64 +build_target darwin amd64 +build_target linux arm64 build_target windows amd64 -# build_target windows arm64 -# TODO: Re-enable multi-platform targets after pr.pkg.new whitelist is approved. +build_target windows arm64 cat > "$OUT_DIR/scripts/run.js" <<'RUNJS' #!/usr/bin/env node