Skip to content

feat: auto-install the project's package manager during mod/deploy#405

Merged
UtkarshBhardwaj007 merged 12 commits into
mainfrom
feat/mod-package-manager-autoinstall
Jun 16, 2026
Merged

feat: auto-install the project's package manager during mod/deploy#405
UtkarshBhardwaj007 merged 12 commits into
mainfrom
feat/mod-package-manager-autoinstall

Conversation

@UtkarshBhardwaj007

Copy link
Copy Markdown
Member

Summary

When playground mod (and playground deploy/build) needs a JavaScript package manager the user doesn't have, the CLI now detects which one the project uses (pnpm/yarn/bun/npm) and installs it — plus Node.js when needed — for macOS/Linux, instead of failing with a confusing "command not found".

  • playground mod: after downloading an app's source, detects the project's package manager and, when it (or Node.js) is missing, asks once before installing, then runs setup.sh. Declining is a soft outcome with a manual-install hint.
  • playground deploy / build: a missing manager is installed automatically as part of the build step (output streamed). Non-interactive runs install without prompting.

How it works

  • Detection precedence: packageManager field → lockfile → setup.sh reference → npm default (src/utils/packageManagers.ts).
  • Official per-PM installers: Node via brew (macOS) / NodeSource (Linux); pnpm via get.pnpm.io; yarn via corepack (into a user-owned --install-directory to avoid EACCES on a root-owned Node bin dir); bun via bun.sh/install.
  • React-free module so it's reusable from the build/deploy SDK surface; the confirmation prompt and streaming log are driven by the TUI layer via callbacks.
  • Installs are single-flighted by tool name so concurrent deploy-all builds don't race the same installer, and each tool is re-checked after install so a PATH mismatch fails with an actionable hint rather than later.

Notes / scope

  • macOS + Linux only (matches the existing toolchain); Windows / unsupported platforms get a manual-install message.
  • deploy/build auto-install without an interactive prompt; only mod prompts. Non-TTY sudo apt/NodeSource on Linux requires root or passwordless sudo (same as the existing login toolchain installs).

Test Plan

  • pnpm typecheck, pnpm format:check, pnpm lint:license clean
  • pnpm test — 973 passing (unit coverage for detection precedence, platform-aware install command builders, the orchestrator's confirm/auto-proceed/decline/failure-propagation/single-flight/post-install-recheck paths, the bun.lock detection, and the runCommand live-PATH behavior)
  • Manual: playground mod on a pnpm project without pnpm installed (TTY) prompts once, installs Node + pnpm, then runs setup.sh
  • Manual: same with no TTY auto-installs; declining shows the manual-install hint and exits 0

Add a React-free packageManagers module with parsePackageManagerField and
detectProjectPackageManager (precedence: packageManager field > lockfile >
setup.sh reference > npm default), reusing detectPackageManager and
detectReferencedPackageManagers.
Add pure command builders for Node (brew/NodeSource), pnpm, yarn (corepack)
and bun via their official installers. Extract the shared sudo() prefix into
a pure leaf module so packageManagers.ts stays off toolchain.ts and within the
React-free build/deploy surface boundary.
Add PmTool installers (Node, pnpm, yarn via corepack, bun) wrapping the pure
command builders, and the PM_TOOLS map giving the ordered prerequisite list
per package manager (Node before pnpm/yarn; bun standalone). pnpm's post-install
PATH fix resolves the platform-specific PNPM_HOME (~/Library/pnpm on macOS).
Add the orchestrator that detects a project's PM, checks which tools are
missing, asks for one confirmation (auto-proceeds when no confirm callback is
given), and installs the missing tools in order. PackageManagerUnavailableError
is the soft user-declined outcome; install/platform failures reject as plain
errors carrying the captured log.
runBuild now calls ensurePackageManager inside the install gate, before
shelling out to the detected package manager, so a missing pnpm/yarn/bun/npm
is auto-installed (with one confirmation) instead of failing cryptically. Adds
an optional confirm option to RunBuildOptions; existing callers auto-proceed.
Add decidePmPhase (setup/confirm/install based on missing tools + TTY) and
pmConfirmLabel for the SetupScreen package-manager phase, lifted into a
React-free sibling module so the .tsx stays thin and the logic is unit-tested.
Add planPackageManagerForTools and the disk-backed planPackageManager, the
read-only sibling of the orchestrator: they report which tools are missing
without installing, so the mod SetupScreen can render its confirmation prompt
before deciding whether to install.
Restructure SetupScreen into a phase machine: after downloading the app's
source it detects the project's package manager and, when it (or Node) is
missing, asks once to install it (auto-proceeds without a TTY) before running
setup.sh. Declining is a soft outcome with a manual-install hint. Removes the
old throw-only missing-package-manager gate.
findUnsatisfiedPackageManagers and missingPackageManagerMessage are no longer
called now that SetupScreen auto-installs the project's package manager.
detectReferencedPackageManagers stays as the setup.sh detection signal consumed
by packageManagers.ts.
…setup.sh

PLAIN_ENV was a module-load snapshot, so the bin dir the package-manager
auto-install prepends to process.env.PATH never reached the setup.sh child —
breaking the mod flow that installs pnpm/bun and then runs setup.sh. Build the
child env per call instead. Adds a regression test for the live-PATH behavior.
- yarn: install corepack shims into a user-owned --install-directory and
  prependPath it, so a NodeSource Linux install no longer hits EACCES writing
  to the root-owned Node bin dir.
- bun: honor $BUN_INSTALL when exposing the freshly-installed bin dir, instead
  of hardcoding ~/.bun/bin.
- orchestrator: re-check each tool after install and fail with the manual hint
  if it is still not on PATH, instead of letting the next step die with a
  confusing "command not found".
- orchestrator: single-flight installs by tool name so concurrent deploy-all
  builds sharing a missing manager don't race the same installer.
- detect: recognise bun 1.2+'s text lockfile bun.lock (not just bun.lockb).
- changeset: clarify that deploy/build auto-install while mod prompts.
@UtkarshBhardwaj007 UtkarshBhardwaj007 merged commit 7353bf6 into main Jun 16, 2026
18 of 20 checks passed
@UtkarshBhardwaj007 UtkarshBhardwaj007 deleted the feat/mod-package-manager-autoinstall branch June 16, 2026 22:25
@github-actions

Copy link
Copy Markdown
Contributor

E2E Test Pass · ❌ FAIL

Tag: e2e-ci-pr · Branch: feat/mod-package-manager-autoinstall · Commit: 31592a7 · Run logs

Cell Result Time
pr-deploy-frontend ❌ FAIL 13m12s
pr-mod ✅ PASS 1m25s
pr-install ✅ PASS 1m29s
pr-login-session ✅ PASS 2m22s
pr-deploy-cdm ✅ PASS 3m31s
pr-deploy-foundry ✅ PASS 0m41s
pr-preflight ✅ PASS 2m33s
${{ matrix.cell }} ⏭️ SKIP 0m-1s
${{ matrix.cell }} ⏭️ SKIP 0m-1s
❌ Failed tests (3)
  • e2e/cli/deploy.test.ts › dot deploy --playground — full pipeline (requires Paseo + IPFS) > frontend-only deploy completes end-to-end
    deploy failed: Checking availability of e2estorag00.dot… ✔ e2estorag00.dot is available Deploying e2estorag00.dot Signer Dev signer (no phone taps for upload) (5DtoCFYY2gqk65CkrJAc44LCPZDvrxQCkCvTc2AoX28bCu65) Build rebuild first Build dir /home/runner/actions-runner/_work/playground-cli/playground-cli/e2e/cli/fixtures/projects/frontend-only/dist Contracts skip Publish Playground + your apps Moddable no Tag none No phone approvals required. ▸ build… [2m$ mkdir -p dist && cp index.html dist/index.html[22m ✔ build ▸ storage-and-dotns… chunk 1/2 chunk 2/2 📱 Approve on your phone (step 1): DotNS step ✔ storage-and-dotns ▸ playground… [+0.0s] ============================================================ [+0.0s] DEPLOYING TO TESTNET v0.10.0 [+0.0s] ============================================================ [+0.0s] Environment: Paseo Next v2 [+0.0s] Domain: e2estorag00.dot [+0.0s] Tag: e2e-cli-ci-pr [+0.0s] Build dir: /home/runner/actions-runner/_work/playground-cli/playground-cli/e2e/cli/fixtures/projects/frontend-only/dist [+0.0s] Runner: parity-default-5612a386d9e9886a (self-hosted) [+0.0s] ============================================================ [+0.0s] Preflight [+0.0s] ============================================================ [+0.0s] SS58 Address: 5DtoCFYY2gqk65CkrJAc44LCPZDvrxQCkCvTc2AoX28bCu65 [+0.7s] H160 Address: 0x1fb8da400137178e872e3a9ff99f004e4d7966cf [+0.8s] Account: auto-mapped (Revive.OriginalAccount confirmed) [+0.9s] DotNS: e2estorag00.dot requires NoStatus (already owned, requirement not enforced) [+0.9s] Your PoP: NoStatus [+0.9s] Domain: owned by you [+0.9s] Have your phone ready — 1 signature needed (link content) [+0.9s] Connecting to Bulletin (slot signer): wss://paseo-bulletin-next-rpc.polkadot.io [+1.5s] Using slot signer: 5DtoCFYY2gqk65CkrJAc44LCPZDvrxQCkCvTc2AoX28bCu65 (authorized until block 677686) [+1.5s] ============================================================ [+1.5s] Storage [+1.5s] ============================================================ [+1.5s] Mode: Directory [+1.5s] Path: /home/runner/actions-runner/_work/playground-cli/playground-cli/e2e/cli/fixtures/projects/frontend-only/dist [+1.5s] Incremental: previous contenthash bafybeidyxc7ku2etn7vq26q6k2cfvmt3sjto4hsbunxgdwajbeu3yxa4hu [+1.6s] Manifest fetch: embedded (1 attempt) [+1.7s] Merkleizing (Kubo — Phase A): /home/runner/actions-runner/_work/playground-cli/playground-cli/e2e/cli/fixtures/projects/frontend-only/dist [+1.8s] CAR (3-section — Phase A): 0.00 MB (s0=343B s1=0B s2=427B), 2 frames (1 header + 0 data + 1 manifest) [+1.8s] Phase A: nothing to upload (all 0 section-1 chunks trusted from prev manifest) [+1.8s] Merkleizing (Kubo — Phase B): /home/runner/actions-runner/_work/playground-cli/playground-cli/e2e/cli/fixtures/projects/frontend-only/dist [+1.8s] CAR (3-section — Phase B): 0.00 MB (s0=762B s1=0B s2=427B), 2 frames (1 header + 0 data + 1 manifest) [+2.0s] Data chunks: 2 [+2.0s] Total: 1.16 KB [+4.3s] Starting nonce: 8507 [+4.3s] Submitting 2 data chunks in batches of up to 2... [+4.3s] [1/2] chunk 0 — 0.00 MB (nonce: 8507) [+4.3s] [2/2] chunk 1 — 0.00 MB (nonce: 8508) [+5.0s] CID: bafkreiengvel6plwljjxfuqzvbclyatc72t6g5srhynzdfe3u2al5lbblq [+5.0s] CID: bafkreiaphrnr7dxqstrhfdk6ukazibouqox33i46u2wetc4fe6ma4h7juu [+5.0s] All 2 chunks included in block [+5.0s] Verifying chunk integrity... [+5.0s] All 2 chunks verified ✓ [+5.0s] Building DAG-PB... [+5.3s] Storing root node (nonce: 8509)... [+11.5s] Root CID: bafybeibak6yy7uydy2ldcm3p5b45ywhb5cbcfctx6m67yermibo4gawxha [+11.5s] Storage upload finalised @ block 661251 (tx 0xfe92c89ceafb0377e9016cfd29b610d31a307250bee5a89a8ab51f9fbc1632b1) [+11.5s] Finality check: probing 3 chunks at chain-finalised state (aka GRANDPA)... [+11.5s] 3 chunks not yet finalised — waiting up to 90s for natural finalisation [+11.5s] bafkreiengvel6plwljj… [+11.5s] bafkreiaphrnr7dxqstr… [+11.5s] bafybeibak6yy7uydy2l… [+47.2s] ✓ All 3 chunks finalised (waited 36s) [+47.3s] Cache: Manifest: embedded (1 attempt, 0.7 KB Range hit) Files: 1 unchanged, 0 changed (100 % stable) CAR sections: manifest 0.8 KB · stable 0.0 MB · volatile 0.0 MB Upload: 0.0 MB across 2 chunks [+47.3s] Final root check: bafybeibak6yy7uydy2ldcm3p5b45ywhb5cbcfctx6m67yermibo4gawxha [+47.4s] ✓ Root finalised on chain [+47.4s] ============================================================ [+47.4s] DotNS [+47.4s] ============================================================ [+47.4s] SS58 Address: 5DtoCFYY2gqk65CkrJAc44LCPZDvrxQCkCvTc2AoX28bCu65 [+48.1s] H160 Address: 0x1fb8da400137178e872e3a9ff99f004e4d7966cf [+48.2s] Account: auto-mapped (Revive.OriginalAccount confirmed) [+48.2s] Status: Already owned [+48.2s] Setting contenthash: bafybeibak6yy7uydy2ldcm3p5b45ywhb5cbcfctx6m67yermibo4gawxha [+48.3s] Linking content... [+48.3s] Check your phone → Link content [+48.6s] signing [+48.6s] broadcasting [+49.7s] included [+54.7s] verifying [+54.8s] Awaiting finalization (chain time +0s / 30s)... [+64.9s] Awaiting finalization (chain time +12s / 30s)... [+77.1s] finalized [+77.2s] Tx: 0x9da35d6a2125c61feab5f850ef438d522a2775f339a6e48d44969c8874a38582 [+77.2s] finalised @ block 852863 (tx 0x9da35d6a2125c61feab5f850ef438d522a2775f339a6e48d44969c8874a38582) [+77.2s] Verified on-chain: bafybeibak6yy7uydy2ldcm3p5b45ywhb5cbcfctx6m67yermibo4gawxha [+77.3s] P2P retrieval: ✓ (53ms) [+77.3s] ============================================================ [+77.3s] DEPLOYMENT COMPLETE! [+77.3s] ============================================================ [+77.3s] Check it out here: [+77.3s] https://e2estorag00.dot.li [+77.3s] e2estorag00.dot (in a Polkadot-aware browser) [+77.3s] ============================================================ ✖ playground: Failed to publish to Playground registry after 3 attempts: Contract reverted in "publishDev": Unauthorized. The transaction was not submitted. ✖ Failed to publish to Playground registry after 3 attempts: Contract reverted in "publishDev": Unauthorized. The transaction was not submitted.: expected 1 to be +0 // Object.is equality
  • e2e/cli/deploy.test.ts › dot deploy --playground — full pipeline (requires Paseo + IPFS) > re-deploy same domain succeeds for same owner
    first deploy failed: Checking availability of e2eredepl00.dot… ✔ e2eredepl00.dot is available Deploying e2eredepl00.dot Signer Dev signer (no phone taps for upload) (5DtoCFYY2gqk65CkrJAc44LCPZDvrxQCkCvTc2AoX28bCu65) Build rebuild first Build dir /home/runner/actions-runner/_work/playground-cli/playground-cli/e2e/cli/fixtures/projects/frontend-only/dist Contracts skip Publish Playground + your apps Moddable no Tag none No phone approvals required. ▸ build… [2m$ mkdir -p dist && cp index.html dist/index.html[22m ✔ build ▸ storage-and-dotns… chunk 1/2 chunk 2/2 📱 Approve on your phone (step 1): DotNS step ✔ storage-and-dotns ▸ playground… [+0.0s] ============================================================ [+0.0s] DEPLOYING TO TESTNET v0.10.0 [+0.0s] ============================================================ [+0.0s] Environment: Paseo Next v2 [+0.0s] Domain: e2eredepl00.dot [+0.0s] Tag: e2e-cli-ci-pr [+0.0s] Build dir: /home/runner/actions-runner/_work/playground-cli/playground-cli/e2e/cli/fixtures/projects/frontend-only/dist [+0.0s] Runner: parity-default-5612a386d9e9886a (self-hosted) [+0.0s] ============================================================ [+0.0s] Preflight [+0.0s] ============================================================ [+0.0s] SS58 Address: 5DtoCFYY2gqk65CkrJAc44LCPZDvrxQCkCvTc2AoX28bCu65 [+0.8s] H160 Address: 0x1fb8da400137178e872e3a9ff99f004e4d7966cf [+0.8s] Account: auto-mapped (Revive.OriginalAccount confirmed) [+1.0s] DotNS: e2eredepl00.dot requires NoStatus (already owned, requirement not enforced) [+1.0s] Your PoP: NoStatus [+1.0s] Domain: owned by you [+1.0s] Have your phone ready — 1 signature needed (link content) [+1.0s] Connecting to Bulletin (slot signer): wss://paseo-bulletin-next-rpc.polkadot.io [+1.6s] Using slot signer: 5DtoCFYY2gqk65CkrJAc44LCPZDvrxQCkCvTc2AoX28bCu65 (authorized until block 677686) [+1.6s] ============================================================ [+1.6s] Storage [+1.6s] ============================================================ [+1.6s] Mode: Directory [+1.6s] Path: /home/runner/actions-runner/_work/playground-cli/playground-cli/e2e/cli/fixtures/projects/frontend-only/dist [+1.6s] Incremental: previous contenthash bafybeig64pkgbnecmdout3zppssstqfxpyfipu6rbf2vlz4r44b2pslkdy [+1.8s] Manifest fetch: embedded (1 attempt) [+1.8s] Merkleizing (Kubo — Phase A): /home/runner/actions-runner/_work/playground-cli/playground-cli/e2e/cli/fixtures/projects/frontend-only/dist [+1.9s] CAR (3-section — Phase A): 0.00 MB (s0=343B s1=0B s2=427B), 2 frames (1 header + 0 data + 1 manifest) [+1.9s] Phase A: nothing to upload (all 0 section-1 chunks trusted from prev manifest) [+1.9s] Merkleizing (Kubo — Phase B): /home/runner/actions-runner/_work/playground-cli/playground-cli/e2e/cli/fixtures/projects/frontend-only/dist [+2.0s] CAR (3-section — Phase B): 0.00 MB (s0=762B s1=0B s2=427B), 2 frames (1 header + 0 data + 1 manifest) [+2.1s] Data chunks: 2 [+2.1s] Total: 1.16 KB [+2.3s] Starting nonce: 8519 [+2.3s] Submitting 2 data chunks in batches of up to 2... [+2.3s] [1/2] chunk 0 — 0.00 MB (nonce: 8519) [+2.3s] [2/2] chunk 1 — 0.00 MB (nonce: 8520) [+8.0s] CID: bafkreidr5kfxnwgxica6jjcesjiifcsxpznee27mw3ansvbhisosr4chpu [+8.0s] CID: bafkreibm7mz7sez5yowjkxs33l64u3wxbdedh7ecdtvonzuwzsarbmrp3u [+8.0s] All 2 chunks included in block [+8.0s] Verifying chunk integrity... [+8.0s] All 2 chunks verified ✓ [+8.0s] Building DAG-PB... [+8.3s] Storing root node (nonce: 8521)... [+14.3s] Root CID: bafybeidndflnehoyvhvki2ayg7ch6zvmqgpwekh7ntuz22rtzrhxaovevm [+14.3s] Storage upload finalised @ block 661268 (tx 0x0076812f1a7f2900bd24dc32c5f08c5aeb40994cbdb0f7ff27b62d108b77f0ce) [+14.3s] Finality check: probing 3 chunks at chain-finalised state (aka GRANDPA)... [+14.4s] 3 chunks not yet finalised — waiting up to 90s for natural finalisation [+14.4s] bafkreidr5kfxnwgxica… [+14.4s] bafkreibm7mz7sez5yow… [+14.4s] bafybeidndflnehoyvhv… [+50.4s] ✓ All 3 chunks finalised (waited 36s) [+50.4s] Cache: Manifest: embedded (1 attempt, 0.7 KB Range hit) Files: 1 unchanged, 0 changed (100 % stable) CAR sections: manifest 0.8 KB · stable 0.0 MB · volatile 0.0 MB Upload: 0.0 MB across 2 chunks [+50.4s] Final root check: bafybeidndflnehoyvhvki2ayg7ch6zvmqgpwekh7ntuz22rtzrhxaovevm [+50.5s] ✓ Root finalised on chain [+50.5s] ============================================================ [+50.5s] DotNS [+50.5s] ============================================================ [+50.5s] SS58 Address: 5DtoCFYY2gqk65CkrJAc44LCPZDvrxQCkCvTc2AoX28bCu65 [+51.3s] H160 Address: 0x1fb8da400137178e872e3a9ff99f004e4d7966cf [+51.4s] Account: auto-mapped (Revive.OriginalAccount confirmed) [+51.5s] Status: Already owned [+51.5s] Setting contenthash: bafybeidndflnehoyvhvki2ayg7ch6zvmqgpwekh7ntuz22rtzrhxaovevm [+51.5s] Linking content... [+51.5s] Check your phone → Link content [+51.8s] signing [+51.9s] broadcasting [+52.8s] included [+57.9s] verifying [+58.1s] Awaiting finalization (chain time +0s / 30s)... [+62.2s] Awaiting finalization (chain time +12s / 30s)... [+74.3s] Awaiting finalization (chain time +24s / 30s)... [+77.3s] finalized [+77.4s] Tx: 0x7b66557e982af0c1b9a412a9660c837c6b155c24c0273f6001a0b94b89ec6fe5 [+77.4s] finalised @ block 852914 (tx 0x7b66557e982af0c1b9a412a9660c837c6b155c24c0273f6001a0b94b89ec6fe5) [+77.4s] Verified on-chain: bafybeidndflnehoyvhvki2ayg7ch6zvmqgpwekh7ntuz22rtzrhxaovevm [+77.4s] P2P retrieval: ✓ (43ms) [+77.4s] ============================================================ [+77.4s] DEPLOYMENT COMPLETE! [+77.4s] ============================================================ [+77.4s] Check it out here: [+77.4s] https://e2eredepl00.dot.li [+77.4s] e2eredepl00.dot (in a Polkadot-aware browser) [+77.4s] ============================================================ ✖ playground: Failed to publish to Playground registry after 3 attempts: Contract reverted in "publishDev": Unauthorized. The transaction was not submitted. ✖ Failed to publish to Playground registry after 3 attempts: Contract reverted in "publishDev": Unauthorized. The transaction was not submitted.: expected 1 to be +0 // Object.is equality
  • e2e/cli/deploy.test.ts › dot deploy --playground — full pipeline (requires Paseo + IPFS) > domain taken by another account shows unavailable
    owner deploy failed: Checking availability of e2ecollis00.dot… ✔ e2ecollis00.dot is available Deploying e2ecollis00.dot Signer Dev signer (no phone taps for upload) (5DtoCFYY2gqk65CkrJAc44LCPZDvrxQCkCvTc2AoX28bCu65) Build rebuild first Build dir /home/runner/actions-runner/_work/playground-cli/playground-cli/e2e/cli/fixtures/projects/frontend-only/dist Contracts skip Publish Playground + your apps Moddable no Tag none No phone approvals required. ▸ build… [2m$ mkdir -p dist && cp index.html dist/index.html[22m ✔ build ▸ storage-and-dotns… chunk 1/2 chunk 2/2 📱 Approve on your phone (step 1): DotNS step ✔ storage-and-dotns ▸ playground… [+0.0s] ============================================================ [+0.0s] DEPLOYING TO TESTNET v0.10.0 [+0.0s] ============================================================ [+0.0s] Environment: Paseo Next v2 [+0.0s] Domain: e2ecollis00.dot [+0.0s] Tag: e2e-cli-ci-pr [+0.0s] Build dir: /home/runner/actions-runner/_work/playground-cli/playground-cli/e2e/cli/fixtures/projects/frontend-only/dist [+0.0s] Runner: parity-default-5612a386d9e9886a (self-hosted) [+0.0s] ============================================================ [+0.0s] Preflight [+0.0s] ============================================================ [+0.0s] SS58 Address: 5DtoCFYY2gqk65CkrJAc44LCPZDvrxQCkCvTc2AoX28bCu65 [+1.1s] H160 Address: 0x1fb8da400137178e872e3a9ff99f004e4d7966cf [+1.1s] Account: auto-mapped (Revive.OriginalAccount confirmed) [+1.3s] DotNS: e2ecollis00.dot requires NoStatus (already owned, requirement not enforced) [+1.3s] Your PoP: NoStatus [+1.3s] Domain: owned by you [+1.3s] Have your phone ready — 1 signature needed (link content) [+1.3s] Connecting to Bulletin (slot signer): wss://paseo-bulletin-next-rpc.polkadot.io [+2.0s] Using slot signer: 5DtoCFYY2gqk65CkrJAc44LCPZDvrxQCkCvTc2AoX28bCu65 (authorized until block 677686) [+2.0s] ============================================================ [+2.0s] Storage [+2.0s] ============================================================ [+2.0s] Mode: Directory [+2.0s] Path: /home/runner/actions-runner/_work/playground-cli/playground-cli/e2e/cli/fixtures/projects/frontend-only/dist [+2.0s] Incremental: previous contenthash bafybeiczzdzlntnsjq4j2bckgpfvvs45eprjpfvynstsaa67pnwdsxljty [+2.2s] Manifest fetch: embedded (1 attempt) [+2.2s] Merkleizing (Kubo — Phase A): /home/runner/actions-runner/_work/playground-cli/playground-cli/e2e/cli/fixtures/projects/frontend-only/dist [+2.3s] CAR (3-section — Phase A): 0.00 MB (s0=343B s1=0B s2=427B), 2 frames (1 header + 0 data + 1 manifest) [+2.3s] Phase A: nothing to upload (all 0 section-1 chunks trusted from prev manifest) [+2.3s] Merkleizing (Kubo — Phase B): /home/runner/actions-runner/_work/playground-cli/playground-cli/e2e/cli/fixtures/projects/frontend-only/dist [+2.4s] CAR (3-section — Phase B): 0.00 MB (s0=762B s1=0B s2=427B), 2 frames (1 header + 0 data + 1 manifest) [+2.5s] Data chunks: 2 [+2.5s] Total: 1.16 KB [+2.8s] Starting nonce: 8529 [+2.8s] Submitting 2 data chunks in batches of up to 2... [+2.8s] [1/2] chunk 0 — 0.00 MB (nonce: 8529) [+2.8s] [2/2] chunk 1 — 0.00 MB (nonce: 8530) [+8.3s] CID: bafkreia5mj7co46dsakwijxgevlhn2k72kbkcdq57lm2wey2qrlbzwf4ea [+8.3s] CID: bafkreicbv3aus73dqph5vhhqow2ytvf2dhv7nwj3akwu6w63g4fbdjxdam [+8.3s] All 2 chunks included in block [+8.3s] Verifying chunk integrity... [+8.3s] All 2 chunks verified ✓ [+8.3s] Building DAG-PB... [+8.5s] Storing root node (nonce: 8531)... [+14.3s] Root CID: bafybeic7w4dqeu27j4o6ya3j64blsy52uxg4gi6ockkjyt7kubucxofqvy [+14.3s] Storage upload finalised @ block 661284 (tx 0xd8bb787fe5f7e0bfb203ac6b0ebc6b610828c251aa6d5becfc8b9ef9df685b67) [+14.3s] Finality check: probing 3 chunks at chain-finalised state (aka GRANDPA)... [+14.5s] 3 chunks not yet finalised — waiting up to 90s for natural finalisation [+14.5s] bafkreia5mj7co46dsak… [+14.5s] bafkreicbv3aus73dqph… [+14.5s] bafybeic7w4dqeu27j4o… [+50.0s] ✓ All 3 chunks finalised (waited 36s) [+50.1s] Cache: Manifest: embedded (1 attempt, 0.7 KB Range hit) Files: 1 unchanged, 0 changed (100 % stable) CAR sections: manifest 0.8 KB · stable 0.0 MB · volatile 0.0 MB Upload: 0.0 MB across 2 chunks [+50.1s] Final root check: bafybeic7w4dqeu27j4o6ya3j64blsy52uxg4gi6ockkjyt7kubucxofqvy [+50.2s] ✓ Root finalised on chain [+50.2s] ============================================================ [+50.2s] DotNS [+50.2s] ============================================================ [+50.2s] SS58 Address: 5DtoCFYY2gqk65CkrJAc44LCPZDvrxQCkCvTc2AoX28bCu65 [+51.0s] H160 Address: 0x1fb8da400137178e872e3a9ff99f004e4d7966cf [+51.0s] Account: auto-mapped (Revive.OriginalAccount confirmed) [+51.1s] Status: Already owned [+51.1s] Setting contenthash: bafybeic7w4dqeu27j4o6ya3j64blsy52uxg4gi6ockkjyt7kubucxofqvy [+51.1s] Linking content... [+51.1s] Check your phone → Link content [+51.4s] signing [+51.4s] broadcasting [+53.0s] included [+57.5s] verifying [+57.6s] Awaiting finalization (chain time +0s / 30s)... [+61.7s] Awaiting finalization (chain time +12s / 30s)... [+73.8s] Awaiting finalization (chain time +24s / 30s)... [+80.3s] finalized [+80.4s] Tx: 0x4337479d93c2155e3c0bd4ee8de9d8844eb464ecc868b342587d153d2623f37d [+80.4s] finalised @ block 852962 (tx 0x4337479d93c2155e3c0bd4ee8de9d8844eb464ecc868b342587d153d2623f37d) [+80.4s] Verified on-chain: bafybeic7w4dqeu27j4o6ya3j64blsy52uxg4gi6ockkjyt7kubucxofqvy [+80.4s] P2P retrieval: ✓ (41ms) [+80.4s] ============================================================ [+80.4s] DEPLOYMENT COMPLETE! [+80.4s] ============================================================ [+80.4s] Check it out here: [+80.4s] https://e2ecollis00.dot.li [+80.4s] e2ecollis00.dot (in a Polkadot-aware browser) [+80.4s] ============================================================ ✖ playground: Failed to publish to Playground registry after 3 attempts: Contract reverted in "publishDev": Unauthorized. The transaction was not submitted. ✖ Failed to publish to Playground registry after 3 attempts: Contract reverted in "publishDev": Unauthorized. The transaction was not submitted.: expected 1 to be +0 // Object.is equality

Sentry traces: view spans for this run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant