Skip to content

Commit a7fc756

Browse files
Merge branch 'main' into update-stacked-2026-08-05-83181af5
2 parents e05ae32 + fc30c28 commit a7fc756

12 files changed

Lines changed: 361 additions & 9 deletions

File tree

packages/claude-code/build.ncl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ let ripgrep = import "../ripgrep/build.ncl" in
1111

1212
let { version, amd64_sha256, arm64_sha256, gcs_bucket } = {
1313
gcs_bucket = "https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases",
14-
version = "2.1.221",
15-
amd64_sha256 = "60db8e88d42c24b5199c92cfd56ec88370c510c3789c6f364af748354f087ada",
16-
arm64_sha256 = "d3c59d6bcc4adcf4cd85abca3bc13fa1131a34cb32f982bdf030d83a3b11e700",
14+
version = "2.1.222",
15+
amd64_sha256 = "10caae8f22b915c26bfff0e013a4d45608c4f1ae287583626569156f447730e5",
16+
arm64_sha256 = "a04be0a8d7fe0259571ab7411d51d85658d71a4a26ce62b60c908290372e6016",
1717
}
1818
in
1919

packages/croc/build.ncl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ let base = import "../base/build.ncl" in
55
let go = import "../go/build.ncl" in
66
let toolchain = import "../toolchain/build.ncl" in
77
let glibc = import "../glibc/build.ncl" in
8-
let version = "10.6.0" in
8+
let version = "11.0.1" in
99
{
1010
name = "croc",
1111
build_deps = [
1212
{ file = "build.sh" } | Local,
1313
{
1414
url = "gs://minimal-staging-archives/schollz/croc/v%{version}.tar.gz",
15-
sha256 = "d9ee32d93e8353fd4330d71ee2683f08e22f4a58b2f3f5a73c1c9d622ffd4598",
15+
sha256 = "44152e31cf651a9ac2b0492573f562a2784fcf75afa7ff5a9ce815f7ec5352d0",
1616
extract = true,
1717
strip_prefix = "croc-%{version}",
1818
} | Source,

packages/flit-core/build.ncl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ let { Attrs, BuildSpec, Local, OutputData, Source, .. } = import "minimal.ncl" i
22
let base = import "../base/build.ncl" in
33
let python = import "../python/build.ncl" in
44

5-
let version = "3.12.0" in
5+
let version = "4.0.2" in
66
{
77
name = "flit-core",
88
build_deps = [
99
{ file = "build.sh" } | Local,
1010
{
1111
url = "https://pypi.org/packages/source/f/flit-core/flit_core-%{version}.tar.gz",
12-
sha256 = "18f63100d6f94385c6ed57a72073443e1a71a4acb4339491615d0f16d6ff01b2",
12+
sha256 = "b6929defd93884b584d7c87829e0e7b5c26ed6be17b0b873979019314aa841c8",
1313
extract = true,
1414
strip_prefix = "flit_core-%{version}",
1515
} | Source,

packages/python/build.ncl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ let glibc = import "../glibc/build.ncl" in
1616
let zlib = import "../zlib/build.ncl" in
1717
let xz = import "../xz/build.ncl" in
1818

19-
let version = "3.14.6" in
19+
let version = "3.14.7" in
2020
{
2121
name = "python",
2222
build_deps = [
2323
{ file = "build.sh" } | Local,
2424
{
2525
url = "gs://minimal-staging-archives/Python-%{version}.tar.xz",
26-
sha256 = "143b1dddefaec3bd2e21e3b839b34a2b7fb9842272883c576420d605e9f30c63"
26+
sha256 = "3b48dac8fb59f62eaa67ac83c1eb12bda1b7a08406dd286e252c11a66be27f81"
2727
} | Source,
2828
base,
2929
make,

packages/rsync/build.ncl

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
let { BuildSpec, Local, OutputBin, OutputData, Source, .. } = import "minimal.ncl" in
2+
3+
let version = "3.4.4" in
4+
5+
let base = import "../base/build.ncl" in
6+
let gcc = import "../gcc/build.ncl" in
7+
let make = import "../make/build.ncl" in
8+
let toolchain = import "../toolchain/build.ncl" in
9+
let glibc = import "../glibc/build.ncl" in
10+
let xxhash = import "../xxhash/build.ncl" in
11+
let openssl = import "../openssl/build.ncl" in
12+
let acl = import "../acl/build.ncl" in
13+
let coreutils = import "../coreutils/build.ncl" in
14+
15+
{
16+
name = "rsync",
17+
18+
build_deps = [
19+
{ file = "build.sh" } | Local,
20+
{
21+
url = "https://github.com/RsyncProject/rsync/releases/download/v%{version}/rsync-%{version}.tar.gz",
22+
sha256 = "bd88cf82fa653da32314fb229136407c5c90f80d1758d8f4b091767877d8fa96",
23+
extract = true,
24+
strip_prefix = "rsync-%{version}",
25+
} | Source,
26+
base,
27+
toolchain,
28+
make,
29+
gcc,
30+
xxhash,
31+
openssl
32+
],
33+
34+
runtime_deps = [
35+
glibc,
36+
acl,
37+
openssl,
38+
coreutils
39+
],
40+
41+
cmd = "./build.sh",
42+
build_args = {
43+
include version,
44+
},
45+
46+
outputs = {
47+
rsync = { glob = "usr/bin/rsync" } | OutputBin,
48+
"rsync-ssl" = { glob = "usr/bin/rsync-ssl" } | OutputBin,
49+
mans = { glob = "usr/share/man/**" } | OutputData,
50+
},
51+
52+
attrs = {
53+
upstream_version = version,
54+
source_provenance = {
55+
category = 'GithubRepo,
56+
owner = "RsyncProject",
57+
repo = "rsync",
58+
},
59+
},
60+
} | BuildSpec

packages/rsync/build.sh

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#!/bin/bash
2+
set -euo pipefail
3+
4+
5+
export CC=gcc
6+
export CFLAGS="-O3 -pipe -ffile-prefix-map=$(pwd)=/builddir -gno-record-gcc-switches"
7+
export CXXFLAGS="$CFLAGS"
8+
export LDFLAGS="-Wl,--build-id=none"
9+
export ARFLAGS=Drc
10+
11+
# Patch configure.sh to remove the broken expanding here-doc block
12+
sed -i '/^cat >>\$CONFIG_STATUS <<_ACEOF || ac_write_fail=1$/{
13+
N
14+
/\n_ACEOF$/d
15+
}' configure.sh
16+
17+
./configure
18+
19+
make -j$(nproc) DESTDIR=$OUTPUT_DIR prefix=/usr install

packages/vlt/build.ncl

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
# Imported from npm `vlt` by `pkgmgr import npm` (node build).
2+
#
3+
# vlt is a package manager (vlt.sh), shipped as a single dependency-free npm
4+
# tarball: `npm ci` installs exactly ONE package, pinned by version + integrity
5+
# in the committed package-lock.json. No transitive tree, no native addons, no
6+
# compile step — the whole build is an extract.
7+
#
8+
# WHY A REGISTRY ARTIFACT AND NOT A SOURCE BUILD — AGENTS.md requires this be
9+
# called out explicitly, and the reason is not "nobody tried". Source IS
10+
# published (codeload .../vltpkg/tar.gz/refs/tags/v1.0.1, 200, 7.4 MB, 48 real
11+
# TypeScript workspaces). It cannot be built with a toolchain we have:
12+
#
13+
# - The only lockfile in the repo is `vlt-lock.json` — vlt's own format.
14+
# There is no pnpm-lock.yaml and no package-lock.json.
15+
# - Dependency specs use the `catalog:` protocol with the catalog declared in
16+
# `vlt.json`. Measured against the extracted tarball:
17+
# npm → EUNSUPPORTEDPROTOCOL: Unsupported URL Type "catalog:"
18+
# pnpm → ERR_PNPM_CATALOG_ENTRY_NOT_FOUND_FOR_SPEC (pnpm supports
19+
# catalogs, but reads pnpm-workspace.yaml, not vlt.json)
20+
# `package.json` has no `workspaces` key at all, so neither tool can even
21+
# see the monorepo layout.
22+
# - Upstream CI agrees: `uses: vltpkg/setup-vlt@v1` then `vlt install`.
23+
# - The published package (`infra/cli/package.json`) declares `bin: null`,
24+
# `dependencies: {}`, and one script — `prepack: vlt-build-prepack`. The
25+
# npm tarball is generated wholesale by their internal bundler.
26+
#
27+
# So building vlt from source requires vlt: a genuine bootstrap cycle, which is
28+
# the "required toolchain genuinely isn't packaged yet" case AGENTS.md carves
29+
# out. Breaking it would mean a two-stage `vlt-bootstrap` → `vlt` pair in the
30+
# gawk-bootstrap shape; worth doing if vlt becomes load-bearing, not before.
31+
#
32+
# `node-lts`, not `node`, for both build and runtime. Two reasons, and the
33+
# private `usr/libexec/vlt` prefix below is the third leg of the same argument
34+
# (gominimal/pkgs#370: a global `usr/lib/node_modules` install collides with
35+
# whichever node variant the user actually has):
36+
# - vlt's own CI tests Node 22.x only (`node-version: '^22.22.0'`, `[22.x]`)
37+
# and `engines` says `>=22.22.0`. Our node-lts is 24.14.1, node is 25.8.2 —
38+
# neither is 22.x, but LTS is two majors closer to what upstream tests.
39+
# - pnpm, the closest analogue in this repo (also a package manager, also a
40+
# node CLI), is on node-lts for exactly this reason — see #97/#98: the node
41+
# most users and hosting providers run is whatever ships with current LTS.
42+
#
43+
# Deliberately NO `source_provenance`. vlt's vuln identity is its npm package
44+
# name, and minimal-supply-chain routes a node-flavored package with no
45+
# provenance to `pkg:npm/<name>` (scan.rs `npm_purl_for_node_package`) so the
46+
# OSV/GHSA npm advisories resolve. Declaring `GithubRepo vltpkg/vltpkg` would
47+
# take it OFF that arm onto the repo-purl arm, where GHSA's npm advisories —
48+
# which are keyed by package name, not repo — would no longer match. Absent is
49+
# correct here, not an oversight.
50+
let { standaloneTest, Attrs, BuildSpec, Local, Needs, OutputBin, OutputData, Test, .. } = import "minimal.ncl" in
51+
let base = import "../base/build.ncl" in
52+
let node-lts = import "../node-lts/build.ncl" in
53+
let coreutils = import "../coreutils/build.ncl" in
54+
let version = "1.0.1" in
55+
{
56+
name = "vlt",
57+
build_deps = [
58+
{ file = "build.sh" } | Local,
59+
{ file = "package.json" } | Local,
60+
{ file = "package-lock.json" } | Local,
61+
base,
62+
node-lts,
63+
],
64+
runtime_deps = [coreutils, node-lts],
65+
needs =
66+
{
67+
dns = {},
68+
internet = {},
69+
} | Needs,
70+
cmd = "./build.sh",
71+
build_args = {
72+
include version,
73+
},
74+
outputs = {
75+
# Enumerated, not `usr/bin/*`: the checker wants each bin named, and the
76+
# npm registry metadata already lists them exactly, so there is nothing to
77+
# infer. `vlt` is the CLI; the others are the documented shorthands
78+
# (`vlr` = `vlt run`, `vlx` = `vlt exec`, plus their variants).
79+
vlt = { glob = "usr/bin/vlt" } | OutputBin,
80+
vlr = { glob = "usr/bin/vlr" } | OutputBin,
81+
vlrx = { glob = "usr/bin/vlrx" } | OutputBin,
82+
vlx = { glob = "usr/bin/vlx" } | OutputBin,
83+
vlxl = { glob = "usr/bin/vlxl" } | OutputBin,
84+
85+
libexec = { glob = "usr/libexec/vlt/**", allow_executable = true } | OutputData,
86+
},
87+
attrs =
88+
{
89+
upstream_version = version,
90+
license_spdx = "BSD-2-Clause-Patent",
91+
} | Attrs,
92+
93+
tests = {
94+
smoketest = standaloneTest "/bin/vlt --version",
95+
96+
version_is_exact =
97+
{
98+
class = 'Standalone,
99+
test_deps = [base],
100+
cmds = [
101+
# Exact equality, NOT `--version | grep '%{version}'`: vlt's usage
102+
# banner also carries the version ("next-gen package management
103+
# v1.0.1"), so a grep would pass on a build where `--version` itself
104+
# is broken and only usage prints. This asserts the artifact's own
105+
# version, independent of the build-time lockfile guard in build.sh.
106+
["/bin/bash", "-c", "test \"$(/bin/vlt --version)\" = \"%{version}\""],
107+
],
108+
}
109+
| Test,
110+
111+
companion_bins_work =
112+
{
113+
class = 'Standalone,
114+
test_deps = [base],
115+
cmds = [
116+
# Five bins are declared as outputs; they are PATH symlinks into the
117+
# private libexec prefix, so a broken relative link fails here and
118+
# nowhere else. A test that only exercised `vlt` would ship four
119+
# dead entries in usr/bin.
120+
["/bin/bash", "-c", "for b in vlr vlrx vlx vlxl; do test \"$(/bin/$b --version)\" = \"%{version}\" || { echo \"$b failed\" >&2; exit 1; }; done"],
121+
],
122+
}
123+
| Test,
124+
125+
reads_a_manifest =
126+
{
127+
class = 'Standalone,
128+
test_deps = [base],
129+
cmds = [
130+
# Real work, offline: `vlt pkg get` parses a package.json and returns
131+
# a field. This exercises the bundled JS beyond argv handling — a
132+
# truncated or partially-installed tarball prints `--version` fine
133+
# and fails here. vlt has NO default registry as of 1.0.1, so any
134+
# network-touching command is not a candidate for a sandbox test.
135+
["/bin/bash", "-c", "d=/tmp/vlt-selftest; mkdir -p \"$d\"; cd \"$d\"; printf '{\"name\":\"vlt-selftest-fixture\",\"version\":\"9.9.9\"}' > package.json; test \"$(/bin/vlt pkg get name)\" = '\"vlt-selftest-fixture\"'"],
136+
],
137+
}
138+
| Test,
139+
},
140+
} | BuildSpec

packages/vlt/build.sh

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/bin/sh
2+
# Imported from npm `vlt` (1.0.1, node) by pkgmgr import npm.
3+
set -eu
4+
5+
# Reproducible install: `npm ci` from the committed package-lock.json pins
6+
# the WHOLE transitive tree by version + integrity (a bare `npm install`
7+
# re-resolves it at build time). Install into a package-PRIVATE libexec
8+
# prefix (NOT the shared usr/lib/node_modules the node runtime owns) and
9+
# expose bins as PATH symlinks; the inner `#!/usr/bin/env node` shebang is
10+
# served by coreutils(env)+node, so no shell wrapper is needed.
11+
# Guard: the committed lock must pin the build.ncl version (the updater
12+
# regenerates it on a bump; this catches a hand-edited version drift).
13+
grep -qF "\"$MINIMAL_ARG_VERSION\"" package.json ||
14+
{ echo "package.json does not pin $MINIMAL_ARG_VERSION — regenerate the lockfile" >&2; exit 1; }
15+
prefix="$OUTPUT_DIR/usr/libexec/vlt"
16+
mkdir -p "$prefix"
17+
cp package.json package-lock.json "$prefix/"
18+
cd "$prefix"
19+
npm ci --omit=dev
20+
21+
mkdir -p "$OUTPUT_DIR/usr/bin"
22+
for _bin in node_modules/.bin/*; do
23+
[ -e "$_bin" ] || continue
24+
_tool=${_bin##*/}
25+
ln -s "../libexec/vlt/node_modules/.bin/$_tool" "$OUTPUT_DIR/usr/bin/$_tool"
26+
done

packages/vlt/package-lock.json

Lines changed: 31 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/vlt/package.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"name": "pkgmgr-node-import",
3+
"version": "0.0.0",
4+
"private": true,
5+
"dependencies": {
6+
"vlt": "1.0.1"
7+
}
8+
}

0 commit comments

Comments
 (0)