Skip to content

feat(cli): stasis github-bundle — a GitHub repo at a commit, through @exodus/stasis/vfs-bundle - #172

Merged
ChALkeR merged 1 commit into
mainfrom
claude/affectionate-ritchie-1j9umy
Oct 2, 2026
Merged

ChALkeR merged 1 commit into
mainfrom
claude/affectionate-ritchie-1j9umy

Conversation

@exo-nikita

@exo-nikita exo-nikita commented Sep 22, 2026 •

Copy link
Copy Markdown
Collaborator

What

A new command, stasis github-bundle, a thin CLI over buildGitHubBundle from @exodus/stasis/vfs-bundle. That library landed in #189, #194 and #196. This PR used to carry its own copy of the library and a --pnpm flag on stasis bundle; both are gone. stasis bundle is unchanged and still reads the project's installed modules.

stasis github-bundle --github=owner/name --sha=<commit> [--directory=path] \
  --package-manager=(pnpm|yarn1|soldeer) [--package-manager-version=version] \
  [--lockfile=path] [--output=(path|-)] [stasis bundle's options for the entries] entries...
  • Fetching: the repo's tree is fetched with GITHUB_TOKEN where it's set, and held to its git tree id.
  • Dependencies: they are laid out in memory from the lockfile alone, as the package manager would install them. Nothing is installed and no package script runs.
  • Output: the bundle goes to --output (stasis.code.br by default, - for stdout), and a JS bundle's lockfile to --lockfile. The bundle's repo is the repo and commit it was built from.
  • Options: it takes stasis bundle's options for the entries (--scope, --conditions, --mainFields, --metro --platforms, --jsx, --flow, --typescript --tsconfig, --resources, --package-json, --mapping, --manifests, --brotli-quality). buildGitHubBundle checks them. --metro-resolver, --cargo* and --add aren't offered.
  • Cache: tarballs, zips and GitHub trees are cached where stasis audit caches ($XDG_CACHE_HOME/stasis, else ~/.cache/stasis, …).

Files

  • stasis/src/cmd/github-bundle.js: githubBundleCommand, which builds and writes the bundle and lockfile.
  • stasis/bin/stasis.js: the command, its flags and its usage text.
  • stasis/README.md: a row.
  • stasis/package.json: the new file in files.

Verification

  • githubBundleCommand over a fake client writes the repo's bundle and lockfile, with repo: { github, root: true, commit }.
  • It refuses --lockfile for a Solidity bundle before anything is fetched.
  • The CLI refuses a missing --github, --sha or --package-manager.
  • oxlint is clean, and the full suite passes locally on Node 24.14 (2131 pass, 3 pre-existing skips).

🤖 Generated with Claude Code

https://claude.ai/code/session_01KPSLumcb6Rdo4xXL5s5CpE

@exo-nikita
exo-nikita force-pushed the claude/affectionate-ritchie-1j9umy branch 5 times, most recently from 1680c5c to 26041a8 Compare September 28, 2026 22:19
@exo-nikita
exo-nikita force-pushed the claude/affectionate-ritchie-1j9umy branch from 26041a8 to 1eecd5f Compare September 30, 2026 00:11
@exo-nikita exo-nikita changed the title feat(bundle): add --pnpm — static bundles from pnpm-lock.yaml through an in-memory node_modules feat(bundle): add --pnpm and @exodus/stasis/pnpm — static bundles from pnpm-lock.yaml through an in-memory node_modules Sep 30, 2026
@exo-nikita
exo-nikita force-pushed the claude/affectionate-ritchie-1j9umy branch 9 times, most recently from 2c97a45 to 3293350 Compare October 1, 2026 10:20
@exo-nikita
exo-nikita force-pushed the claude/affectionate-ritchie-1j9umy branch from 3293350 to e40a952 Compare October 1, 2026 21:53
@exo-nikita exo-nikita changed the title feat(bundle): add --pnpm and @exodus/stasis/pnpm — static bundles from pnpm-lock.yaml through an in-memory node_modules feat(bundle): stasis bundle --package-manager — the CLI for @exodus/stasis/vfs-bundle Oct 1, 2026
…gh @exodus/stasis/vfs-bundle

`stasis github-bundle --github=owner/name --sha=commit [--directory=path]
--package-manager=(pnpm|yarn1|soldeer) [--package-manager-version=version] entries...` bundles a
GitHub repo at a commit with buildGitHubBundle: the tree fetched (with GITHUB_TOKEN where set) and
held to its git tree id, the dependencies laid out in memory from the lockfile alone, nothing
installed and no package script run. It writes the bundle to --output (stasis.code.br by default,
`-` for stdout) and a JS bundle's lockfile to --lockfile, and takes `stasis bundle`'s options for
the entries, which buildGitHubBundle checks. Tarballs, zips and GitHub trees are cached where
`stasis audit` caches. `stasis bundle` is unchanged.

Tests: githubBundleCommand over a fake client writes the repo's bundle and lockfile, and refuses a
Solidity bundle's --lockfile before anything is fetched; the CLI refuses a missing --github, --sha
or --package-manager.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KPSLumcb6Rdo4xXL5s5CpE
@exo-nikita
exo-nikita force-pushed the claude/affectionate-ritchie-1j9umy branch from e40a952 to 03ad43c Compare October 1, 2026 22:11
@exo-nikita exo-nikita changed the title feat(bundle): stasis bundle --package-manager — the CLI for @exodus/stasis/vfs-bundle feat(cli): stasis github-bundle — a GitHub repo at a commit, through @exodus/stasis/vfs-bundle Oct 1, 2026
@ChALkeR
ChALkeR merged commit def946f into main Oct 2, 2026
5 checks passed
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.

2 participants