@layerzerolabs/vm-tooling-stellar 1.2.9 → 1.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config.ts"],"names":["tools","name","preExecute","syncToolchain","dockerPlatform","defaultVolumes","type","containerPath","shared","hostPath","defaultEnv","value","images","versions","stellar","patch","mirrorRegistries","DockerRegistryMirror","PUBLIC_GAR","dependencies","rust","versionCombinations","description","stable"],"mappings":";;;AASO,IAAMA,KAAAA,GAAoC;AAC7C,EAAA;IACIC,IAAAA,EAAM,SAAA;IACNC,UAAAA,EAAYC,aAAAA;IACZC,cAAAA,EAAgB,aAAA;IAChBC,cAAAA,EAAgB;;;AAGZ,MAAA;QACIC,IAAAA,EAAM,SAAA;QACNC,aAAAA,EAAe,gBAAA;QACfN,IAAAA,EAAM,gBAAA;QACNO,MAAAA,EAAQ;AACZ,OAAA;;AAEA,MAAA;QACIF,IAAAA,EAAM,SAAA;QACNC,aAAAA,EAAe,cAAA;QACfN,IAAAA,EAAM,eAAA;QACNO,MAAAA,EAAQ;AACZ,OAAA;;;AAGA,MAAA;QACIF,IAAAA,EAAM,SAAA;QACNC,aAAAA,EAAe,eAAA;QACfN,IAAAA,EAAM,gBAAA;QACNO,MAAAA,EAAQ;AACZ,OAAA;;AAEA,MAAA;QACIF,IAAAA,EAAM,MAAA;QACNC,aAAAA,EAAe,gBAAA;QACfE,QAAAA,EAAU;AACd;;IAEJC,UAAAA,EAAY;;AAER,MAAA;QAAET,IAAAA,EAAM,eAAA;QAAiBU,KAAAA,EAAO;AAAyB,OAAA;;AAEzD,MAAA;QAAEV,IAAAA,EAAM,8CAAA;QAAgDU,KAAAA,EAAO;AAAQ,OAAA;AACvE,MAAA;QAAEV,IAAAA,EAAM,+CAAA;QAAiDU,KAAAA,EAAO;AAAQ,OAAA;AACxE,MAAA;QACIV,IAAAA,EAAM,iDAAA;QACNU,KAAAA,EAAO;AACX,OAAA;AACA,MAAA;QACIV,IAAAA,EAAM,kDAAA;QACNU,KAAAA,EAAO;AACX;;AAER;;AAGG,IAAMC,MAAAA,GAAS;AAClB,EAAA,CAAC,gCAAA,GAAmC;IAChCX,IAAAA,EAAM,SAAA;IACNY,QAAAA,EAAU;MACNC,OAAAA,EAAS;AACb,KAAA;IACAC,KAAAA,EAAO,CAAA;IACPC,gBAAAA,EAAkB;MAACC,oBAAAA,CAAqBC;;AAC5C,GAAA;AACA,EAAA,CAAC,gCAAA,GAAmC;IAChCjB,IAAAA,EAAM,SAAA;IACNY,QAAAA,EAAU;MACNC,OAAAA,EAAS;AACb,KAAA;IACAC,KAAAA,EAAO,CAAA;IACPI,YAAAA,EAAc;MACVC,IAAAA,EAAM;AACV,KAAA;IACAJ,gBAAAA,EAAkB;MAACC,oBAAAA,CAAqBC;;AAC5C;AACJ;AAIO,IAAMG,mBAAAA,GACT;AACI,EAAA;IACIT,MAAAA,EAAQ;MACJE,OAAAA,EAAS;AACb,KAAA;IACAQ,WAAAA,EAAa,uBAAA;IACbC,MAAAA,EAAQ;AACZ,GAAA;AACA,EAAA;IACIX,MAAAA,EAAQ;MACJE,OAAAA,EAAS;AACb,KAAA;IACAQ,WAAAA,EAAa,gBAAA;IACbC,MAAAA,EAAQ;AACZ","file":"AY7HGKNR.js","sourcesContent":["import {\n DockerRegistryMirror,\n type Image,\n type Tool,\n type VersionCombination,\n} from '@layerzerolabs/vm-tooling';\n\nimport { syncToolchain } from './commands/sync-toolchain';\n\nexport const tools: readonly [Tool, ...Tool[]] = [\n {\n name: 'stellar',\n preExecute: syncToolchain,\n dockerPlatform: 'linux/amd64',\n defaultVolumes: [\n // NOTE: for configuration commands, you should never put it in your package.json#build or #test, since the config is locked for parallel builds\n // while common commands like contract build and binding generation are allowed since they are not writing to the config files\n {\n type: 'isolate',\n containerPath: '/cache/stellar',\n name: 'stellar-config',\n shared: true,\n },\n // safe to be unlocked as it is POSIX lock guarded\n {\n type: 'isolate',\n containerPath: '/cache/cargo',\n name: 'stellar-cargo',\n shared: true,\n },\n // shared across packages — toolchain is pre-synced via `sync-toolchain` (locked)\n // so concurrent reads from build/test/lint are safe\n {\n type: 'isolate',\n containerPath: '/cache/rustup',\n name: 'stellar-rustup',\n shared: true,\n },\n // safe as the wort case of corruption is cache miss, since it is key-based cache, concurrent writes will produce identical content\n {\n type: 'host',\n containerPath: '/cache/sccache',\n hostPath: '~/.sccache',\n },\n ],\n defaultEnv: [\n // sccache configuration\n { name: 'RUSTC_WRAPPER', value: '/usr/local/bin/sccache' },\n // mold linker for faster linking\n { name: 'CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER', value: 'clang' },\n { name: 'CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER', value: 'clang' },\n {\n name: 'CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS',\n value: '-C link-arg=-fuse-ld=mold',\n },\n {\n name: 'CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS',\n value: '-C link-arg=-fuse-ld=mold',\n },\n ],\n },\n];\n\nexport const images = {\n ['stellar:stellar-25.1.0-patch-2']: {\n name: 'stellar',\n versions: {\n stellar: '25.1.0',\n },\n patch: 2,\n mirrorRegistries: [DockerRegistryMirror.PUBLIC_GAR],\n },\n ['stellar:stellar-25.2.0-patch-1']: {\n name: 'stellar',\n versions: {\n stellar: '25.2.0',\n },\n patch: 1,\n dependencies: {\n rust: '1.91.0',\n },\n mirrorRegistries: [DockerRegistryMirror.PUBLIC_GAR],\n },\n} satisfies Record<string, Image>;\n\nexport type ImageId = keyof typeof images;\n\nexport const versionCombinations: [VersionCombination<ImageId>, ...VersionCombination<ImageId>[]] =\n [\n {\n images: {\n stellar: 'stellar:stellar-25.1.0-patch-2',\n },\n description: 'Latest stable release',\n stable: true,\n },\n {\n images: {\n stellar: 'stellar:stellar-25.2.0-patch-1',\n },\n description: 'Stellar 25.2.0',\n stable: true,\n },\n ];\n"]}
1
+ {"version":3,"sources":["../src/config.ts"],"names":["tools","name","preExecute","syncToolchain","dockerPlatform","defaultVolumes","type","containerPath","shared","hostPath","defaultEnv","value","images","versions","stellar","patch","mirrorRegistries","DockerRegistryMirror","PUBLIC_GAR","dependencies","rust","versionCombinations","description","stable"],"mappings":";;;AASO,IAAMA,KAAAA,GAAoC;AAC7C,EAAA;IACIC,IAAAA,EAAM,SAAA;IACNC,UAAAA,EAAYC,aAAAA;IACZC,cAAAA,EAAgB,aAAA;IAChBC,cAAAA,EAAgB;;;AAGZ,MAAA;QACIC,IAAAA,EAAM,SAAA;QACNC,aAAAA,EAAe,gBAAA;QACfN,IAAAA,EAAM,gBAAA;QACNO,MAAAA,EAAQ;AACZ,OAAA;;AAEA,MAAA;QACIF,IAAAA,EAAM,SAAA;QACNC,aAAAA,EAAe,cAAA;QACfN,IAAAA,EAAM,eAAA;QACNO,MAAAA,EAAQ;AACZ,OAAA;;;AAGA,MAAA;QACIF,IAAAA,EAAM,SAAA;QACNC,aAAAA,EAAe,eAAA;QACfN,IAAAA,EAAM,gBAAA;QACNO,MAAAA,EAAQ;AACZ,OAAA;;AAEA,MAAA;QACIF,IAAAA,EAAM,MAAA;QACNC,aAAAA,EAAe,gBAAA;QACfE,QAAAA,EAAU;AACd;;IAEJC,UAAAA,EAAY;;AAER,MAAA;QAAET,IAAAA,EAAM,eAAA;QAAiBU,KAAAA,EAAO;AAAyB,OAAA;;AAEzD,MAAA;QAAEV,IAAAA,EAAM,8CAAA;QAAgDU,KAAAA,EAAO;AAAQ,OAAA;AACvE,MAAA;QAAEV,IAAAA,EAAM,+CAAA;QAAiDU,KAAAA,EAAO;AAAQ,OAAA;AACxE,MAAA;QACIV,IAAAA,EAAM,iDAAA;QACNU,KAAAA,EAAO;AACX,OAAA;AACA,MAAA;QACIV,IAAAA,EAAM,kDAAA;QACNU,KAAAA,EAAO;AACX;;AAER;;AAGG,IAAMC,MAAAA,GAAS;AAClB,EAAA,CAAC,gCAAA,GAAmC;IAChCX,IAAAA,EAAM,SAAA;IACNY,QAAAA,EAAU;MACNC,OAAAA,EAAS;AACb,KAAA;IACAC,KAAAA,EAAO,CAAA;IACPC,gBAAAA,EAAkB;MAACC,oBAAAA,CAAqBC;;AAC5C,GAAA;AACA,EAAA,CAAC,gCAAA,GAAmC;IAChCjB,IAAAA,EAAM,SAAA;IACNY,QAAAA,EAAU;MACNC,OAAAA,EAAS;AACb,KAAA;IACAC,KAAAA,EAAO,CAAA;IACPI,YAAAA,EAAc;MACVC,IAAAA,EAAM;AACV,KAAA;IACAJ,gBAAAA,EAAkB;MAACC,oBAAAA,CAAqBC;;AAC5C;AACJ;AAIO,IAAMG,mBAAAA,GACT;AACI,EAAA;IACIT,MAAAA,EAAQ;MACJE,OAAAA,EAAS;AACb,KAAA;IACAQ,WAAAA,EAAa,uBAAA;IACbC,MAAAA,EAAQ;AACZ,GAAA;AACA,EAAA;IACIX,MAAAA,EAAQ;MACJE,OAAAA,EAAS;AACb,KAAA;IACAQ,WAAAA,EAAa,gBAAA;IACbC,MAAAA,EAAQ;AACZ","file":"YKDO3PL4.js","sourcesContent":["import {\n DockerRegistryMirror,\n type Image,\n type Tool,\n type VersionCombination,\n} from '@layerzerolabs/vm-tooling';\n\nimport { syncToolchain } from './commands/sync-toolchain';\n\nexport const tools: readonly [Tool, ...Tool[]] = [\n {\n name: 'stellar',\n preExecute: syncToolchain,\n dockerPlatform: 'linux/amd64',\n defaultVolumes: [\n // NOTE: for configuration commands, you should never put it in your package.json#build or #test, since the config is locked for parallel builds\n // while common commands like contract build and binding generation are allowed since they are not writing to the config files\n {\n type: 'isolate',\n containerPath: '/cache/stellar',\n name: 'stellar-config',\n shared: true,\n },\n // safe to be unlocked as it is POSIX lock guarded\n {\n type: 'isolate',\n containerPath: '/cache/cargo',\n name: 'stellar-cargo',\n shared: true,\n },\n // shared across packages — toolchain is pre-synced via `sync-toolchain` (locked)\n // so concurrent reads from build/test/lint are safe\n {\n type: 'isolate',\n containerPath: '/cache/rustup',\n name: 'stellar-rustup',\n shared: true,\n },\n // safe as the wort case of corruption is cache miss, since it is key-based cache, concurrent writes will produce identical content\n {\n type: 'host',\n containerPath: '/cache/sccache',\n hostPath: '~/.sccache',\n },\n ],\n defaultEnv: [\n // sccache configuration\n { name: 'RUSTC_WRAPPER', value: '/usr/local/bin/sccache' },\n // mold linker for faster linking\n { name: 'CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER', value: 'clang' },\n { name: 'CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER', value: 'clang' },\n {\n name: 'CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS',\n value: '-C link-arg=-fuse-ld=mold',\n },\n {\n name: 'CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS',\n value: '-C link-arg=-fuse-ld=mold',\n },\n ],\n },\n];\n\nexport const images = {\n ['stellar:stellar-25.1.0-patch-2']: {\n name: 'stellar',\n versions: {\n stellar: '25.1.0',\n },\n patch: 2,\n mirrorRegistries: [DockerRegistryMirror.PUBLIC_GAR],\n },\n ['stellar:stellar-25.2.0-patch-1']: {\n name: 'stellar',\n versions: {\n stellar: '25.2.0',\n },\n patch: 1,\n dependencies: {\n rust: '1.91.0',\n },\n mirrorRegistries: [DockerRegistryMirror.PUBLIC_GAR],\n },\n} satisfies Record<string, Image>;\n\nexport type ImageId = keyof typeof images;\n\nexport const versionCombinations: [VersionCombination<ImageId>, ...VersionCombination<ImageId>[]] =\n [\n {\n images: {\n stellar: 'stellar:stellar-25.1.0-patch-2',\n },\n description: 'Latest stable release',\n stable: true,\n },\n {\n images: {\n stellar: 'stellar:stellar-25.2.0-patch-1',\n },\n description: 'Stellar 25.2.0',\n stable: true,\n },\n ];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sync-toolchain.d.ts","sourceRoot":"","sources":["../../src/commands/sync-toolchain.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAa3F,wBAAsB,aAAa,CAC/B,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,EAC7B,OAAO,EAAE,2BAA2B,GACrC,OAAO,CAAC,IAAI,CAAC,CAuEf"}
1
+ {"version":3,"file":"sync-toolchain.d.ts","sourceRoot":"","sources":["../../src/commands/sync-toolchain.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAc3F,wBAAsB,aAAa,CAC/B,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,EAC7B,OAAO,EAAE,2BAA2B,GACrC,OAAO,CAAC,IAAI,CAAC,CAyFf"}
@@ -1,4 +1,4 @@
1
- export { syncToolchain } from '../P6KJGYNA.js';
1
+ export { syncToolchain } from '../PFRVJTS7.js';
2
2
  import '../VUOMXK5T.js';
3
3
  //# sourceMappingURL=sync-toolchain.js.map
4
4
  //# sourceMappingURL=sync-toolchain.js.map
@@ -1,36 +1,49 @@
1
1
  import type { ToolCommandExecutionOptions } from '@layerzerolabs/vm-tooling';
2
+ export interface PackageSpec {
3
+ packageName: string;
4
+ manifestPath: string;
5
+ }
6
+ export interface VerifiableBuildVersions {
7
+ stellarVersion: string;
8
+ rustVersion: string;
9
+ }
10
+ export interface ResolvedVerifiableBuildImage {
11
+ imageRef: string;
12
+ bldimg: string;
13
+ tagRef: string;
14
+ }
15
+ export interface RunVerifiableBuildFromArchiveOptions {
16
+ archive: string;
17
+ packages: PackageSpec[];
18
+ outputDir: string;
19
+ stellarVersion: string;
20
+ rustVersion?: string;
21
+ }
2
22
  /**
3
23
  * The official reproducible image reference for a (Stellar CLI, Rust) version pair, e.g.
4
24
  * `stellar/stellar-cli:25.1.0-rust1.90.0-slim-bookworm`. The caller pins both versions; this is the
5
25
  * only image the tool builds against.
6
26
  */
7
27
  export declare const officialImageTagRef: (stellarVersion: string, rustVersion: string) => string;
28
+ /**
29
+ * Pick the linux/amd64 manifest digest out of `docker manifest inspect` output. Pure/synchronous so
30
+ * the selection (skip the arm64 and the unknown/unknown attestation entries) is unit-testable.
31
+ */
8
32
  export declare const parseAmd64Digest: (manifestInspectJson: string) => string;
9
33
  /**
10
34
  * Canonicalize `stellar contract build` args so the embedded metadata order is stable.
11
35
  *
12
36
  * Soroban stores contract metadata as an ORDERED sequence, so the order of `--meta key=value`
13
- * flags changes the WASM bytes (verified: swapping two `--meta` flags yields a different WASM
14
- * hash). To keep the build reproducible regardless of the order the caller passed `--meta`, every
15
- * meta entry — the caller's plus the tool-injected ones — is pulled out, merged, and re-emitted in
16
- * sorted order. Non-meta args keep their original relative order and precede the sorted metas.
37
+ * flags changes the WASM bytes. To keep the build reproducible, every meta entry — the caller's
38
+ * plus the tool-injected ones — is pulled out, merged, and re-emitted in sorted order.
17
39
  *
18
40
  * Injected keys (e.g. `bldimg`) are tool-controlled and RESERVED: any caller `--meta` reusing an
19
- * injected key is dropped, so a caller can never override the recorded build image by key
20
- * collision (before sorting, the injected entry was always appended last and won on its own).
21
- *
22
- * Both `--meta k=v` and `--meta=k=v` forms are recognized; a dangling `--meta` with no value (or
23
- * one followed by another flag) is dropped.
41
+ * injected key is dropped.
24
42
  */
25
43
  export declare const canonicalizeMetaArgs: (buildArgs: string[], injectedMeta: string[]) => string[];
26
44
  /**
27
45
  * Assemble the `docker run` argv for a verifiable build. Kept pure and synchronous so the mount /
28
46
  * workdir layout and the tool-injected `--meta bldimg=…` are unit-testable without Docker.
29
- *
30
- * The official image's ENTRYPOINT is `stellar`, so the trailing `contract build …` runs under it.
31
- * The source directory is assumed self-contained, so it is mounted at /source and built in place —
32
- * no surrounding workspace is required. All `--meta` flags (the caller's plus the injected
33
- * `bldimg`) are sorted into a canonical order so the WASM hash is independent of `--meta` ordering.
34
47
  */
35
48
  export declare const buildVerifiableBuildDockerArgs: ({ imageRef, sourceDir, buildArgs, bldimg, }: {
36
49
  imageRef: string;
@@ -40,36 +53,44 @@ export declare const buildVerifiableBuildDockerArgs: ({ imageRef, sourceDir, bui
40
53
  }) => string[];
41
54
  /**
42
55
  * Resolve the directory to build. An explicit `sourceDir` that is relative resolves against the
43
- * cwd; an absolute one is used as-is; omitting it falls back to the cwd. Kept pure/synchronous so
44
- * the cwd-vs-explicit-folder precedence is unit-testable without Docker.
45
- *
46
- * This is what lets the pipeline decompress a packaged source archive into a scratch directory and
47
- * build that, instead of always building the process cwd.
56
+ * cwd; an absolute one is used as-is; omitting it falls back to the cwd.
48
57
  */
49
58
  export declare const resolveBuildDir: (cwd: string, sourceDir?: string) => string;
50
- export interface VerifiableBuildVersions {
51
- stellarVersion: string;
52
- rustVersion: string;
53
- }
54
59
  /**
55
- * Reproducible `stellar contract build` that runs inside the OFFICIAL `stellar/stellar-cli` image —
56
- * the exact package an external verifier uses — instead of our own dev image (whose sccache/mold
57
- * layers could change the WASM).
58
- *
59
- * The build runs the official image directly from the HOST: our TypeScript CLI already executes on
60
- * the host runner, so it can `docker run` the official image itself. This is what an external
61
- * verifier's plain `docker run` does, and it means we never bind-mount the host Docker socket into
62
- * a container — eliminating the container-escape / secret-leak surface that mounting the socket
63
- * would create.
64
- *
65
- * The image is `stellar/stellar-cli:<stellarVersion>-rust<rustVersion>-slim-bookworm`, pinned by the
66
- * caller. For a stable reference we resolve it to its linux/amd64 digest and both RUN that digest
67
- * and embed it as the `bldimg` WASM metadata (`docker.io/stellar/stellar-cli@sha256:…`) — the tool
68
- * does this automatically so callers never hand-inject `--meta bldimg=…`. The source directory (the
69
- * cwd, assumed self-contained) is mounted at /source and built in place, and the official image runs
70
- * as its own user/toolchain.
60
+ * Reproducible `stellar contract build` inside the official `stellar/stellar-cli` image.
61
+ * Used by the archive orchestrator for each `--package`.
71
62
  */
72
63
  export declare class VerifiableBuildWrapper {
73
- run(args: string[], { stellarVersion, rustVersion }: VerifiableBuildVersions, options: ToolCommandExecutionOptions, sourceDir?: string): Promise<void>;
64
+ private readonly resolveDigest;
65
+ private readonly imagesByTag;
66
+ constructor(resolveDigest?: (imageTagRef: string) => Promise<string>);
67
+ resolveImage({ stellarVersion, rustVersion, }: VerifiableBuildVersions): Promise<ResolvedVerifiableBuildImage>;
68
+ run(args: string[], versions: VerifiableBuildVersions, { cwd }: Pick<ToolCommandExecutionOptions, 'cwd'>, sourceDir?: string): Promise<void>;
74
69
  }
70
+ /**
71
+ * Parse a `--package <name>:<manifest-path>` pair. Both sides must be non-empty.
72
+ */
73
+ export declare const parsePackageSpec: (spec: string) => PackageSpec;
74
+ /** Soroban wasm artifact basename: hyphens in the package name become underscores. */
75
+ export declare const wasmArtifactName: (packageName: string) => string;
76
+ /**
77
+ * Resolve the Rust toolchain version for the verifiable build image tag. An explicit
78
+ * `--rust-version` wins; otherwise read the pinned channel from the supplied source directory.
79
+ */
80
+ export declare const resolveRustVersion: (sourceDir: string, rustVersionFlag?: string) => Promise<string>;
81
+ /**
82
+ * Build `stellar contract build` args for one archive package. Embeds SEP-58 `source_sha256`
83
+ * and replays the build flags as `bldopt=` metas so external verifiers can reproduce the build.
84
+ * `bldimg` is injected separately by the official-image runner.
85
+ */
86
+ export declare const buildArchiveContractArgs: ({ packageName, manifestPath }: PackageSpec, sourceSha256: string) => string[];
87
+ export declare const copyFileWithPermissionRepair: (source: string, destination: string, repairPermissions: () => Promise<void>, copy?: (source: string, destination: string) => Promise<void>) => Promise<void>;
88
+ export declare const buildPermissionRepairDockerArgs: (dir: string, imageRef: string) => string[];
89
+ /**
90
+ * Build one or more Stellar contracts from a self-contained source archive.
91
+ *
92
+ * `packages` is intentionally already parsed: the CLI owns string parsing, while this orchestrator
93
+ * deals only in validated package/manifest pairs.
94
+ */
95
+ export declare const runVerifiableBuildFromArchive: ({ archive, packages, outputDir, stellarVersion, rustVersion, }: RunVerifiableBuildFromArchiveOptions, { cwd }: Pick<ToolCommandExecutionOptions, "cwd">) => Promise<void>;
75
96
  //# sourceMappingURL=verifiable-build.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"verifiable-build.d.ts","sourceRoot":"","sources":["../../src/commands/verifiable-build.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAc7E;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,gBAAgB,MAAM,EAAE,aAAa,MAAM,KAAG,MACH,CAAC;AAehF,eAAO,MAAM,gBAAgB,GAAI,qBAAqB,MAAM,KAAG,MAkB9D,CAAC;AA8BF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB,GAAI,WAAW,MAAM,EAAE,EAAE,cAAc,MAAM,EAAE,KAAG,MAAM,EA8BxF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,8BAA8B,GAAI,6CAK5C;IACC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAClB,KAAG,MAAM,EAeT,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,EAAE,YAAY,MAAM,KAAG,MAC3B,CAAC;AAuBxC,MAAM,WAAW,uBAAuB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,sBAAsB;IAClB,GAAG,CACZ,IAAI,EAAE,MAAM,EAAE,EACd,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,uBAAuB,EACxD,OAAO,EAAE,2BAA2B,EACpC,SAAS,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;CAyCnB"}
1
+ {"version":3,"file":"verifiable-build.d.ts","sourceRoot":"","sources":["../../src/commands/verifiable-build.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAkC7E,MAAM,WAAW,WAAW;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,4BAA4B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oCAAoC;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,gBAAgB,MAAM,EAAE,aAAa,MAAM,KAAG,MACH,CAAC;AAEhF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,qBAAqB,MAAM,KAAG,MAkB9D,CAAC;AA4BF;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,GAAI,WAAW,MAAM,EAAE,EAAE,cAAc,MAAM,EAAE,KAAG,MAAM,EA2BxF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,8BAA8B,GAAI,6CAK5C;IACC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAClB,KAAG,MAAM,EAaT,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,EAAE,YAAY,MAAM,KAAG,MAC3B,CAAC;AAuBxC;;;GAGG;AACH,qBAAa,sBAAsB;IAI3B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAHlC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4D;gBAGnE,aAAa,GAAE,CAC5B,WAAW,EAAE,MAAM,KAClB,OAAO,CAAC,MAAM,CAAsB;IAGtC,YAAY,CAAC,EAChB,cAAc,EACd,WAAW,GACd,EAAE,uBAAuB,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAgBrD,GAAG,CACZ,IAAI,EAAE,MAAM,EAAE,EACd,QAAQ,EAAE,uBAAuB,EACjC,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC,EACjD,SAAS,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;CAsCnB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,WAY/C,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,gBAAgB,GAAI,aAAa,MAAM,KAAG,MACT,CAAC;AAa/C;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC3B,WAAW,MAAM,EACjB,kBAAkB,MAAM,KACzB,OAAO,CAAC,MAAM,CA0BhB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GACjC,+BAA+B,WAAW,EAC1C,cAAc,MAAM,KACrB,MAAM,EAcR,CAAC;AAgEF,eAAO,MAAM,4BAA4B,GACrC,QAAQ,MAAM,EACd,aAAa,MAAM,EACnB,mBAAmB,MAAM,OAAO,CAAC,IAAI,CAAC,EACtC,OAAM,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAY,KACxE,OAAO,CAAC,IAAI,CAYd,CAAC;AA8DF,eAAO,MAAM,+BAA+B,GAAI,KAAK,MAAM,EAAE,UAAU,MAAM,KAAG,MAAM,EAerF,CAAC;AAsCF;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,GACtC,gEAMG,oCAAoC,EACvC,SAAS,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC,KAClD,OAAO,CAAC,IAAI,CAqDd,CAAC"}
@@ -1,4 +1,4 @@
1
- export { VerifiableBuildWrapper, buildVerifiableBuildDockerArgs, canonicalizeMetaArgs, officialImageTagRef, parseAmd64Digest, resolveBuildDir } from '../WMMRXU3O.js';
1
+ export { VerifiableBuildWrapper, buildArchiveContractArgs, buildPermissionRepairDockerArgs, buildVerifiableBuildDockerArgs, canonicalizeMetaArgs, copyFileWithPermissionRepair, officialImageTagRef, parseAmd64Digest, parsePackageSpec, resolveBuildDir, resolveRustVersion, runVerifiableBuildFromArchive, wasmArtifactName } from '../D25LP26W.js';
2
2
  import '../VUOMXK5T.js';
3
3
  //# sourceMappingURL=verifiable-build.js.map
4
4
  //# sourceMappingURL=verifiable-build.js.map
package/dist/config.js CHANGED
@@ -1,5 +1,5 @@
1
- export { images, tools, versionCombinations } from './AY7HGKNR.js';
2
- import './P6KJGYNA.js';
1
+ export { images, tools, versionCombinations } from './YKDO3PL4.js';
2
+ import './PFRVJTS7.js';
3
3
  import './VUOMXK5T.js';
4
4
  //# sourceMappingURL=config.js.map
5
5
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,IAAI,QAAO,OAAO,CAAC,IAAI,CA6F9B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,IAAI,QAAO,OAAO,CAAC,IAAI,CA4G9B,CAAC"}
package/dist/index.js CHANGED
@@ -1,24 +1,37 @@
1
1
  import { packageSource } from './LCHYL2IQ.js';
2
- import { VerifiableBuildWrapper } from './WMMRXU3O.js';
3
- import { versionCombinations, images, tools } from './AY7HGKNR.js';
4
- import { syncToolchain } from './P6KJGYNA.js';
2
+ import { runVerifiableBuildFromArchive, parsePackageSpec } from './D25LP26W.js';
3
+ import { versionCombinations, images, tools } from './YKDO3PL4.js';
4
+ import { syncToolchain } from './PFRVJTS7.js';
5
5
  import { __name } from './VUOMXK5T.js';
6
+ import path from 'path';
6
7
  import { runCli } from '@layerzerolabs/vm-tooling';
7
8
 
9
+ var DEFAULT_OUTPUT_DIR = ".artifacts";
8
10
  var context = {
9
11
  tools,
10
12
  images,
11
13
  versionCombinations
12
14
  };
13
- var verifiableBuildWrapper = new VerifiableBuildWrapper();
15
+ var collectPackageSpecs = /* @__PURE__ */ __name((value, previous) => [
16
+ ...previous,
17
+ value
18
+ ], "collectPackageSpecs");
14
19
  var main = /* @__PURE__ */ __name(() => runCli(context, (program, parseGlobalOptions) => {
15
20
  program.command("sync-toolchain").description("Pre-download the Rust toolchain specified in rust-toolchain.toml under a lock").action(async () => syncToolchain(context, await parseGlobalOptions(program)));
16
21
  const extra = program.command("extra").description("Extra commands for VM tooling");
17
22
  const stellar = extra.command("stellar");
18
- stellar.command("verifiable-build").description("Reproducible `stellar contract build` of the self-contained source in the cwd by default, inside the official stellar/stellar-cli:<stellar>-rust<rust>-slim-bookworm image pinned by its linux/amd64 digest (run from the host, no Docker socket; embeds the bldimg WASM meta automatically)").requiredOption("--stellar-version <version>", "Stellar CLI version of the official reproducible image (e.g. 25.1.0)").requiredOption("--rust-version <version>", "Rust version of the official reproducible image (e.g. 1.90.0)").option("--source-dir <path>", "Directory to build \u2014 the self-contained/decompressed source. Relative paths resolve against the cwd; defaults to the cwd.").argument("[args...]", "Arguments for `stellar contract build`, after `--` (e.g. -- --package <crate>)").passThroughOptions(true).allowUnknownOption().action(async (args, { stellarVersion, rustVersion, sourceDir }) => verifiableBuildWrapper.run(args, {
19
- stellarVersion,
20
- rustVersion
21
- }, await parseGlobalOptions(program), sourceDir));
23
+ stellar.command("verifiable-build").description("Build one or more Stellar contracts reproducibly from a source archive: extract \u2192 hash \u2192 build each --package in the official stellar/stellar-cli image \u2192 atomically publish contracts-source.zip and *.wasm.").requiredOption("--stellar-version <version>", "Stellar CLI version of the official reproducible image (e.g. 25.1.0)").option("--rust-version <version>", "Rust version of the official reproducible image (e.g. 1.90.0); defaults to the archive's rust-toolchain.toml channel").requiredOption("--archive <path>", "Self-contained source .zip for the SEP-58 verifiable build").option("--package <name:manifest>", "Package to build as <name>:<manifest-path> (repeatable; required at least once)", collectPackageSpecs, []).option("--output-dir <path>", "Directory for contracts-source.zip and *.wasm", DEFAULT_OUTPUT_DIR).action(async ({ stellarVersion, rustVersion, archive, package: packageSpecs, outputDir }) => {
24
+ const options = await parseGlobalOptions(program);
25
+ await runVerifiableBuildFromArchive({
26
+ archive: path.resolve(options.cwd, archive),
27
+ packages: packageSpecs.map(parsePackageSpec),
28
+ outputDir: path.resolve(options.cwd, outputDir),
29
+ stellarVersion,
30
+ rustVersion
31
+ }, {
32
+ cwd: options.cwd
33
+ });
34
+ });
22
35
  stellar.command("package-source").description("Package the self-contained crate in the cwd into a byte-deterministic source .zip under .artifacts/ (for the SEP-58 verifiable build) and print its source_sha256. Include-only: packages source files (.rs/.lock, Cargo.toml, rust-toolchain.toml, rustfmt.toml, clippy.toml) plus any --include entries; --exclude always wins. Skips non-source directories (target, node_modules, \u2026).").option("--output <path>", "Output .zip path (default: <cwd>/.artifacts/<basename>-source.zip)").option("--include <pattern...>", "Native Node glob patterns to include beyond the default source extensions", []).option("--exclude <pattern...>", "Native Node glob patterns to exclude (always wins over the allow-list and --include)", []).action(async ({ output, include, exclude }) => packageSource({
23
36
  output,
24
37
  include,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["context","tools","images","versionCombinations","verifiableBuildWrapper","VerifiableBuildWrapper","main","runCli","program","parseGlobalOptions","command","description","action","syncToolchain","extra","stellar","requiredOption","option","argument","passThroughOptions","allowUnknownOption","args","stellarVersion","rustVersion","sourceDir","run","output","include","exclude","packageSource"],"mappings":";;;;;;;AAQA,IAAMA,OAAAA,GAAiC;AAAEC,EAAAA,KAAAA;AAAOC,EAAAA,MAAAA;AAAQC,EAAAA;AAAoB,CAAA;AAE5E,IAAMC,sBAAAA,GAAyB,IAAIC,sBAAAA,EAAAA;AAE5B,IAAMC,uBAAO,MAAA,CAAA,MAChBC,MAAAA,CAAOP,OAAAA,EAAS,CAACQ,SAASC,kBAAAA,KAAAA;AACtBD,EAAAA,OAAAA,CACKE,OAAAA,CAAQ,gBAAA,CAAA,CACRC,WAAAA,CACG,+EAAA,CAAA,CAEHC,MAAAA,CAAO,YAAYC,aAAAA,CAAcb,OAAAA,EAAS,MAAMS,kBAAAA,CAAmBD,OAAAA,CAAAA,CAAAA,CAAAA;AAIxE,EAAA,MAAMM,QAAQN,OAAAA,CAAQE,OAAAA,CAAQ,OAAA,CAAA,CAASC,YAAY,+BAAA,CAAA;AACnD,EAAA,MAAMI,OAAAA,GAAUD,KAAAA,CAAMJ,OAAAA,CAAQ,SAAA,CAAA;AAE9BK,EAAAA,OAAAA,CACKL,QAAQ,kBAAA,CAAA,CACRC,WAAAA,CACG,8RAGI,EAEPK,cAAAA,CACG,6BAAA,EACA,sEAAA,CAAA,CAEHA,eACG,0BAAA,EACA,+DAAA,CAAA,CAEHC,MAAAA,CACG,uBACA,gIACI,CAAA,CAEPC,QAAAA,CACG,WAAA,EACA,gFAAA,CAAA,CAEHC,kBAAAA,CAAmB,IAAA,CAAA,CACnBC,oBAAkB,CAClBR,MAAAA,CACG,OACIS,IAAAA,EACA,EACIC,cAAAA,EACAC,WAAAA,EACAC,WAAS,KAGbpB,sBAAAA,CAAuBqB,IACnBJ,IAAAA,EACA;AAAEC,IAAAA,cAAAA;AAAgBC,IAAAA;AAAY,GAAA,EAC9B,MAAMd,kBAAAA,CAAmBD,OAAAA,CAAAA,EACzBgB,SAAAA,CAAAA,CAAAA;AAIhBT,EAAAA,OAAAA,CACKL,OAAAA,CAAQ,gBAAA,CAAA,CACRC,WAAAA,CACG,gYAII,CAAA,CAEPM,MAAAA,CACG,iBAAA,EACA,oEAAA,CAAA,CAEHA,MAAAA,CACG,wBAAA,EACA,2EAAA,EACA,EAAE,CAAA,CAELA,MAAAA,CACG,wBAAA,EACA,sFAAA,EACA,EAAE,CAAA,CAELL,MAAAA,CACG,OAAO,EACHc,MAAAA,EACAC,OAAAA,EACAC,OAAAA,OAMAC,aAAAA,CAAc;AAAEH,IAAAA,MAAAA;AAAQC,IAAAA,OAAAA;AAASC,IAAAA;AAAQ,GAAA,EAAG,MAAMnB,kBAAAA,CAAmBD,OAAAA,CAAAA,CAAAA,CAAAA;AAErF,CAAA,CAAA,EA7FgB,MAAA","file":"index.js","sourcesContent":["import type { ChainContext } from '@layerzerolabs/vm-tooling';\nimport { runCli } from '@layerzerolabs/vm-tooling';\n\nimport { packageSource } from './commands/package-source';\nimport { syncToolchain } from './commands/sync-toolchain';\nimport { VerifiableBuildWrapper } from './commands/verifiable-build';\nimport { type ImageId, images, tools, versionCombinations } from './config';\n\nconst context: ChainContext<ImageId> = { tools, images, versionCombinations };\n\nconst verifiableBuildWrapper = new VerifiableBuildWrapper();\n\nexport const main = (): Promise<void> =>\n runCli(context, (program, parseGlobalOptions) => {\n program\n .command('sync-toolchain')\n .description(\n 'Pre-download the Rust toolchain specified in rust-toolchain.toml under a lock',\n )\n .action(async () => syncToolchain(context, await parseGlobalOptions(program)));\n\n // Extra (non-passthrough) commands, namespaced under `extra <tool>` like vm-tooling-sui:\n // lz-tool extra stellar verifiable-build [args...]\n const extra = program.command('extra').description('Extra commands for VM tooling');\n const stellar = extra.command('stellar');\n\n stellar\n .command('verifiable-build')\n .description(\n 'Reproducible `stellar contract build` of the self-contained source in the cwd by ' +\n 'default, inside the official stellar/stellar-cli:<stellar>-rust<rust>-slim-bookworm ' +\n 'image pinned by its linux/amd64 digest (run from the host, no Docker socket; embeds ' +\n 'the bldimg WASM meta automatically)',\n )\n .requiredOption(\n '--stellar-version <version>',\n 'Stellar CLI version of the official reproducible image (e.g. 25.1.0)',\n )\n .requiredOption(\n '--rust-version <version>',\n 'Rust version of the official reproducible image (e.g. 1.90.0)',\n )\n .option(\n '--source-dir <path>',\n 'Directory to build — the self-contained/decompressed source. Relative paths ' +\n 'resolve against the cwd; defaults to the cwd.',\n )\n .argument(\n '[args...]',\n 'Arguments for `stellar contract build`, after `--` (e.g. -- --package <crate>)',\n )\n .passThroughOptions(true)\n .allowUnknownOption()\n .action(\n async (\n args: string[],\n {\n stellarVersion,\n rustVersion,\n sourceDir,\n }: { stellarVersion: string; rustVersion: string; sourceDir?: string },\n ) =>\n verifiableBuildWrapper.run(\n args,\n { stellarVersion, rustVersion },\n await parseGlobalOptions(program),\n sourceDir,\n ),\n );\n\n stellar\n .command('package-source')\n .description(\n 'Package the self-contained crate in the cwd into a byte-deterministic source ' +\n '.zip under .artifacts/ (for the SEP-58 verifiable build) and print its ' +\n 'source_sha256. Include-only: packages source files (.rs/.lock, Cargo.toml, ' +\n 'rust-toolchain.toml, rustfmt.toml, clippy.toml) plus any --include entries; ' +\n '--exclude always wins. Skips non-source directories (target, node_modules, …).',\n )\n .option(\n '--output <path>',\n 'Output .zip path (default: <cwd>/.artifacts/<basename>-source.zip)',\n )\n .option(\n '--include <pattern...>',\n 'Native Node glob patterns to include beyond the default source extensions',\n [],\n )\n .option(\n '--exclude <pattern...>',\n 'Native Node glob patterns to exclude (always wins over the allow-list and --include)',\n [],\n )\n .action(\n async ({\n output,\n include,\n exclude,\n }: {\n output?: string;\n include?: string[];\n exclude?: string[];\n }) =>\n packageSource({ output, include, exclude }, await parseGlobalOptions(program)),\n );\n });\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["DEFAULT_OUTPUT_DIR","context","tools","images","versionCombinations","collectPackageSpecs","value","previous","main","runCli","program","parseGlobalOptions","command","description","action","syncToolchain","extra","stellar","requiredOption","option","stellarVersion","rustVersion","archive","package","packageSpecs","outputDir","options","runVerifiableBuildFromArchive","path","resolve","cwd","packages","map","parsePackageSpec","output","include","exclude","packageSource"],"mappings":";;;;;;;;AAUA,IAAMA,kBAAAA,GAAqB,YAAA;AAE3B,IAAMC,OAAAA,GAAiC;AAAEC,EAAAA,KAAAA;AAAOC,EAAAA,MAAAA;AAAQC,EAAAA;AAAoB,CAAA;AAE5E,IAAMC,mBAAAA,mBAAsB,MAAA,CAAA,CAACC,KAAAA,EAAeC,QAAAA,KAAiC;AAAIA,EAAAA,GAAAA,QAAAA;AAAUD,EAAAA;AAA/D,CAAA,EAAA,qBAAA,CAAA;AAErB,IAAME,uBAAO,MAAA,CAAA,MAChBC,MAAAA,CAAOR,OAAAA,EAAS,CAACS,SAASC,kBAAAA,KAAAA;AACtBD,EAAAA,OAAAA,CACKE,OAAAA,CAAQ,gBAAA,CAAA,CACRC,WAAAA,CACG,+EAAA,CAAA,CAEHC,MAAAA,CAAO,YAAYC,aAAAA,CAAcd,OAAAA,EAAS,MAAMU,kBAAAA,CAAmBD,OAAAA,CAAAA,CAAAA,CAAAA;AAIxE,EAAA,MAAMM,QAAQN,OAAAA,CAAQE,OAAAA,CAAQ,OAAA,CAAA,CAASC,YAAY,+BAAA,CAAA;AACnD,EAAA,MAAMI,OAAAA,GAAUD,KAAAA,CAAMJ,OAAAA,CAAQ,SAAA,CAAA;AAE9BK,EAAAA,OAAAA,CACKL,QAAQ,kBAAA,CAAA,CACRC,WAAAA,CACG,8NAEI,EAEPK,cAAAA,CACG,6BAAA,EACA,sEAAA,CAAA,CAEHC,OACG,0BAAA,EACA,sHACI,EAEPD,cAAAA,CACG,kBAAA,EACA,4DAAA,CAAA,CAEHC,MAAAA,CACG,2BAAA,EACA,iFAAA,EACAd,qBACA,EAAE,EAELc,MAAAA,CACG,qBAAA,EACA,iDACAnB,kBAAAA,CAAAA,CAEHc,MAAAA,CACG,OAAO,EACHM,cAAAA,EACAC,WAAAA,EACAC,SACAC,OAAAA,EAASC,YAAAA,EACTC,WAAS,KAOZ;AACG,IAAA,MAAMC,OAAAA,GAAU,MAAMf,kBAAAA,CAAmBD,OAAAA,CAAAA;AACzC,IAAA,MAAMiB,6BAAAA,CACF;AACIL,MAAAA,OAAAA,EAASM,IAAAA,CAAKC,OAAAA,CAAQH,OAAAA,CAAQI,GAAAA,EAAKR,OAAAA,CAAAA;MACnCS,QAAAA,EAAUP,YAAAA,CAAaQ,IAAIC,gBAAAA,CAAAA;AAC3BR,MAAAA,SAAAA,EAAWG,IAAAA,CAAKC,OAAAA,CAAQH,OAAAA,CAAQI,GAAAA,EAAKL,SAAAA,CAAAA;AACrCL,MAAAA,cAAAA;AACAC,MAAAA;KACJ,EACA;AAAES,MAAAA,GAAAA,EAAKJ,OAAAA,CAAQI;KAAI,CAAA;EAE3B,CAAA,CAAA;AAGRb,EAAAA,OAAAA,CACKL,OAAAA,CAAQ,gBAAA,CAAA,CACRC,WAAAA,CACG,gYAII,CAAA,CAEPM,MAAAA,CACG,iBAAA,EACA,oEAAA,CAAA,CAEHA,MAAAA,CACG,wBAAA,EACA,2EAAA,EACA,EAAE,CAAA,CAELA,MAAAA,CACG,wBAAA,EACA,sFAAA,EACA,EAAE,CAAA,CAELL,MAAAA,CACG,OAAO,EACHoB,MAAAA,EACAC,OAAAA,EACAC,OAAAA,OAMAC,aAAAA,CAAc;AAAEH,IAAAA,MAAAA;AAAQC,IAAAA,OAAAA;AAASC,IAAAA;AAAQ,GAAA,EAAG,MAAMzB,kBAAAA,CAAmBD,OAAAA,CAAAA,CAAAA,CAAAA;AAErF,CAAA,CAAA,EA5GgB,MAAA","file":"index.js","sourcesContent":["import path from 'node:path';\n\nimport type { ChainContext } from '@layerzerolabs/vm-tooling';\nimport { runCli } from '@layerzerolabs/vm-tooling';\n\nimport { packageSource } from './commands/package-source';\nimport { syncToolchain } from './commands/sync-toolchain';\nimport { parsePackageSpec, runVerifiableBuildFromArchive } from './commands/verifiable-build';\nimport { type ImageId, images, tools, versionCombinations } from './config';\n\nconst DEFAULT_OUTPUT_DIR = '.artifacts';\n\nconst context: ChainContext<ImageId> = { tools, images, versionCombinations };\n\nconst collectPackageSpecs = (value: string, previous: string[]): string[] => [...previous, value];\n\nexport const main = (): Promise<void> =>\n runCli(context, (program, parseGlobalOptions) => {\n program\n .command('sync-toolchain')\n .description(\n 'Pre-download the Rust toolchain specified in rust-toolchain.toml under a lock',\n )\n .action(async () => syncToolchain(context, await parseGlobalOptions(program)));\n\n // Extra (non-passthrough) commands, namespaced under `extra <tool>` like vm-tooling-sui:\n // lz-tool extra stellar verifiable-build [options]\n const extra = program.command('extra').description('Extra commands for VM tooling');\n const stellar = extra.command('stellar');\n\n stellar\n .command('verifiable-build')\n .description(\n 'Build one or more Stellar contracts reproducibly from a source archive: ' +\n 'extract → hash → build each --package in the official stellar/stellar-cli ' +\n 'image → atomically publish contracts-source.zip and *.wasm.',\n )\n .requiredOption(\n '--stellar-version <version>',\n 'Stellar CLI version of the official reproducible image (e.g. 25.1.0)',\n )\n .option(\n '--rust-version <version>',\n 'Rust version of the official reproducible image (e.g. 1.90.0); defaults to ' +\n \"the archive's rust-toolchain.toml channel\",\n )\n .requiredOption(\n '--archive <path>',\n 'Self-contained source .zip for the SEP-58 verifiable build',\n )\n .option(\n '--package <name:manifest>',\n 'Package to build as <name>:<manifest-path> (repeatable; required at least once)',\n collectPackageSpecs,\n [] as string[],\n )\n .option(\n '--output-dir <path>',\n 'Directory for contracts-source.zip and *.wasm',\n DEFAULT_OUTPUT_DIR,\n )\n .action(\n async ({\n stellarVersion,\n rustVersion,\n archive,\n package: packageSpecs,\n outputDir,\n }: {\n stellarVersion: string;\n rustVersion?: string;\n archive: string;\n package: string[];\n outputDir: string;\n }) => {\n const options = await parseGlobalOptions(program);\n await runVerifiableBuildFromArchive(\n {\n archive: path.resolve(options.cwd, archive),\n packages: packageSpecs.map(parsePackageSpec),\n outputDir: path.resolve(options.cwd, outputDir),\n stellarVersion,\n rustVersion,\n },\n { cwd: options.cwd },\n );\n },\n );\n\n stellar\n .command('package-source')\n .description(\n 'Package the self-contained crate in the cwd into a byte-deterministic source ' +\n '.zip under .artifacts/ (for the SEP-58 verifiable build) and print its ' +\n 'source_sha256. Include-only: packages source files (.rs/.lock, Cargo.toml, ' +\n 'rust-toolchain.toml, rustfmt.toml, clippy.toml) plus any --include entries; ' +\n '--exclude always wins. Skips non-source directories (target, node_modules, …).',\n )\n .option(\n '--output <path>',\n 'Output .zip path (default: <cwd>/.artifacts/<basename>-source.zip)',\n )\n .option(\n '--include <pattern...>',\n 'Native Node glob patterns to include beyond the default source extensions',\n [],\n )\n .option(\n '--exclude <pattern...>',\n 'Native Node glob patterns to exclude (always wins over the allow-list and --include)',\n [],\n )\n .action(\n async ({\n output,\n include,\n exclude,\n }: {\n output?: string;\n include?: string[];\n exclude?: string[];\n }) =>\n packageSource({ output, include, exclude }, await parseGlobalOptions(program)),\n );\n });\n"]}
@@ -1,5 +1,5 @@
1
- import { images, versionCombinations } from '../AY7HGKNR.js';
2
- import '../P6KJGYNA.js';
1
+ import { images, versionCombinations } from '../YKDO3PL4.js';
2
+ import '../PFRVJTS7.js';
3
3
  import '../VUOMXK5T.js';
4
4
  import { runGithubMatrixGenerator } from '@layerzerolabs/vm-tooling';
5
5
 
package/package.json CHANGED
@@ -19,19 +19,19 @@
19
19
  "bin/**/*"
20
20
  ],
21
21
  "dependencies": {
22
+ "fflate": "^0.8.3",
22
23
  "toml": "^3.0.0",
23
- "@layerzerolabs/deterministic-zip": "1.2.9",
24
- "@layerzerolabs/vm-tooling": "1.2.9"
24
+ "@layerzerolabs/deterministic-zip": "1.2.11",
25
+ "@layerzerolabs/vm-tooling": "1.2.11"
25
26
  },
26
27
  "devDependencies": {
27
- "fflate": "^0.8.3",
28
28
  "tsup": "^8.4.0",
29
29
  "tsx": "^4.21.0",
30
30
  "typescript": "^5.8.2",
31
31
  "vitest": "^3.2.6",
32
- "@layerzerolabs/tsup-configuration": "1.2.9",
33
- "@layerzerolabs/typescript-configuration": "1.2.9",
34
- "@layerzerolabs/vitest-configuration": "1.2.9"
32
+ "@layerzerolabs/typescript-configuration": "1.2.11",
33
+ "@layerzerolabs/tsup-configuration": "1.2.11",
34
+ "@layerzerolabs/vitest-configuration": "1.2.11"
35
35
  },
36
36
  "publishConfig": {
37
37
  "access": "public",
@@ -45,7 +45,7 @@
45
45
  "onesig-client"
46
46
  ]
47
47
  },
48
- "version": "1.2.9",
48
+ "version": "1.2.11",
49
49
  "scripts": {
50
50
  "build": "tsup",
51
51
  "generate-github-matrix": "tsx src/scripts/generate-github-matrix.ts",
package/dist/P6KJGYNA.js DELETED
@@ -1,62 +0,0 @@
1
- import { __name } from './VUOMXK5T.js';
2
- import { access, readFile } from 'fs/promises';
3
- import path from 'path';
4
- import { parse } from 'toml';
5
- import { executeToolCommand } from '@layerzerolabs/vm-tooling';
6
-
7
- var syncedCwds = /* @__PURE__ */ new Set();
8
- async function syncToolchain(context, options) {
9
- if (syncedCwds.has(options.cwd)) {
10
- return;
11
- }
12
- const filePath = path.join(options.cwd, "rust-toolchain.toml");
13
- let installCmd;
14
- const hasToolchainFile = await access(filePath).then(() => true, () => false);
15
- if (hasToolchainFile) {
16
- const parsed = parse(await readFile(filePath, "utf-8"));
17
- const channel = parsed.toolchain?.channel;
18
- if (typeof channel !== "string") {
19
- throw new Error(`Missing 'toolchain.channel' in ${filePath}`);
20
- }
21
- const targets = parsed.toolchain?.targets ?? [];
22
- const components = parsed.toolchain?.components ?? [];
23
- const installArgs = [
24
- `rustup toolchain install ${channel} --no-self-update`
25
- ];
26
- for (const target of targets) {
27
- installArgs.push(`--target ${target}`);
28
- }
29
- for (const component of components) {
30
- installArgs.push(`--component ${component}`);
31
- }
32
- installCmd = installArgs.join(" ");
33
- } else {
34
- installCmd = "rustup default stable";
35
- }
36
- const script = [
37
- "mkdir -p $CARGO_HOME/bin",
38
- "ln -sf /usr/local/cargo/bin/rustup $CARGO_HOME/bin/rustup",
39
- installCmd
40
- ].join(" && ");
41
- console.info(`\u{1F527} Syncing Rust toolchain: ${installCmd}`);
42
- syncedCwds.add(options.cwd);
43
- await executeToolCommand(context, "stellar", [], {
44
- ...options,
45
- script,
46
- volumes: [
47
- ...options.volumes,
48
- {
49
- type: "isolate",
50
- containerPath: "/cache/rustup",
51
- name: "stellar-rustup",
52
- shared: true,
53
- locked: true
54
- }
55
- ]
56
- });
57
- }
58
- __name(syncToolchain, "syncToolchain");
59
-
60
- export { syncToolchain };
61
- //# sourceMappingURL=P6KJGYNA.js.map
62
- //# sourceMappingURL=P6KJGYNA.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/sync-toolchain.ts"],"names":["syncedCwds","Set","syncToolchain","context","options","has","cwd","filePath","path","join","installCmd","hasToolchainFile","access","then","parsed","parse","readFile","channel","toolchain","Error","targets","components","installArgs","target","push","component","script","console","info","add","executeToolCommand","volumes","type","containerPath","name","shared","locked"],"mappings":";;;;;;AAeA,IAAMA,UAAAA,uBAAiBC,GAAAA,EAAAA;AAEvB,eAAsBC,aAAAA,CAClBC,SACAC,OAAAA,EAAoC;AAEpC,EAAA,IAAIJ,UAAAA,CAAWK,GAAAA,CAAID,OAAAA,CAAQE,GAAG,CAAA,EAAG;AAC7B,IAAA;AACJ,EAAA;AAEA,EAAA,MAAMC,QAAAA,GAAWC,IAAAA,CAAKC,IAAAA,CAAKL,OAAAA,CAAQE,KAAK,qBAAA,CAAA;AAExC,EAAA,IAAII,UAAAA;AACJ,EAAA,MAAMC,gBAAAA,GAAmB,MAAMC,MAAAA,CAAOL,QAAAA,EAAUM,IAAAA,CAC5C,MAAM,IAAA,EACN,MAAM,KAAA,CAAA;AAGV,EAAA,IAAIF,gBAAAA,EAAkB;AAClB,IAAA,MAAMG,SAA4BC,KAAAA,CAAM,MAAMC,QAAAA,CAAST,QAAAA,EAAU,OAAA,CAAA,CAAA;AAEjE,IAAA,MAAMU,OAAAA,GAAUH,OAAOI,SAAAA,EAAWD,OAAAA;AAClC,IAAA,IAAI,OAAOA,YAAY,QAAA,EAAU;AAC7B,MAAA,MAAM,IAAIE,KAAAA,CAAM,CAAA,+BAAA,EAAkCZ,QAAAA,CAAAA,CAAU,CAAA;AAChE,IAAA;AAEA,IAAA,MAAMa,OAAAA,GAAoBN,MAAAA,CAAOI,SAAAA,EAAWE,OAAAA,IAAW,EAAA;AACvD,IAAA,MAAMC,UAAAA,GAAuBP,MAAAA,CAAOI,SAAAA,EAAWG,UAAAA,IAAc,EAAA;AAO7D,IAAA,MAAMC,WAAAA,GAAc;AAAC,MAAA,CAAA,yBAAA,EAA4BL,OAAAA,CAAAA,iBAAAA;;AACjD,IAAA,KAAA,MAAWM,UAAUH,OAAAA,EAAS;AAC1BE,MAAAA,WAAAA,CAAYE,IAAAA,CAAK,CAAA,SAAA,EAAYD,MAAAA,CAAAA,CAAQ,CAAA;AACzC,IAAA;AACA,IAAA,KAAA,MAAWE,aAAaJ,UAAAA,EAAY;AAChCC,MAAAA,WAAAA,CAAYE,IAAAA,CAAK,CAAA,YAAA,EAAeC,SAAAA,CAAAA,CAAW,CAAA;AAC/C,IAAA;AAEAf,IAAAA,UAAAA,GAAaY,WAAAA,CAAYb,KAAK,GAAA,CAAA;EAClC,CAAA,MAAO;AAGHC,IAAAA,UAAAA,GAAa,uBAAA;AACjB,EAAA;AAKA,EAAA,MAAMgB,MAAAA,GAAS;AACX,IAAA,0BAAA;AACA,IAAA,2DAAA;AACAhB,IAAAA;AACFD,GAAAA,CAAAA,IAAAA,CAAK,MAAA,CAAA;AACPkB,EAAAA,OAAAA,CAAQC,IAAAA,CAAK,CAAA,kCAAA,EAA8BlB,UAAAA,CAAAA,CAAY,CAAA;AAGvDV,EAAAA,UAAAA,CAAW6B,GAAAA,CAAIzB,QAAQE,GAAG,CAAA;AAE1B,EAAA,MAAMwB,kBAAAA,CAAmB3B,OAAAA,EAAS,SAAA,EAAW,EAAA,EAAI;IAC7C,GAAGC,OAAAA;AACHsB,IAAAA,MAAAA;IACAK,OAAAA,EAAS;SACF3B,OAAAA,CAAQ2B,OAAAA;AACX,MAAA;QACIC,IAAAA,EAAM,SAAA;QACNC,aAAAA,EAAe,eAAA;QACfC,IAAAA,EAAM,gBAAA;QACNC,MAAAA,EAAQ,IAAA;QACRC,MAAAA,EAAQ;AACZ;;GAER,CAAA;AACJ;AA1EsBlC,MAAAA,CAAAA,aAAAA,EAAAA,eAAAA,CAAAA","file":"P6KJGYNA.js","sourcesContent":["import { access, readFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { parse } from 'toml';\n\nimport type { ChainContext, ToolCommandExecutionOptions } from '@layerzerolabs/vm-tooling';\nimport { executeToolCommand } from '@layerzerolabs/vm-tooling';\n\ninterface RustToolchainToml {\n toolchain?: {\n channel?: string;\n targets?: string[];\n components?: string[];\n };\n}\n\nconst syncedCwds = new Set<string>();\n\nexport async function syncToolchain(\n context: ChainContext<string>,\n options: ToolCommandExecutionOptions,\n): Promise<void> {\n if (syncedCwds.has(options.cwd)) {\n return;\n }\n\n const filePath = path.join(options.cwd, 'rust-toolchain.toml');\n\n let installCmd: string;\n const hasToolchainFile = await access(filePath).then(\n () => true,\n () => false,\n );\n\n if (hasToolchainFile) {\n const parsed: RustToolchainToml = parse(await readFile(filePath, 'utf-8'));\n\n const channel = parsed.toolchain?.channel;\n if (typeof channel !== 'string') {\n throw new Error(`Missing 'toolchain.channel' in ${filePath}`);\n }\n\n const targets: string[] = parsed.toolchain?.targets ?? [];\n const components: string[] = parsed.toolchain?.components ?? [];\n\n // --no-self-update: rustup's self-update downloads a new binary to\n // $CARGO_HOME/bin/rustup-init and chmod's it. Inside Docker the\n // download can fail, leaving no file for chmod → \"failed to set\n // permissions: No such file or directory\". The rustup version is\n // pinned by the Docker image so self-update is unnecessary.\n const installArgs = [`rustup toolchain install ${channel} --no-self-update`];\n for (const target of targets) {\n installArgs.push(`--target ${target}`);\n }\n for (const component of components) {\n installArgs.push(`--component ${component}`);\n }\n\n installCmd = installArgs.join(' ');\n } else {\n // No rust-toolchain.toml found — install stable as the default so that\n // cargo (a rustup proxy) can resolve a toolchain from the empty RUSTUP_HOME volume.\n installCmd = 'rustup default stable';\n }\n\n // rustup expects to find itself at $CARGO_HOME/bin/rustup to manage proxy\n // binaries there. At runtime CARGO_HOME points to /cache/cargo (volume),\n // so we symlink the image-installed rustup binary into the volume.\n const script = [\n 'mkdir -p $CARGO_HOME/bin',\n 'ln -sf /usr/local/cargo/bin/rustup $CARGO_HOME/bin/rustup',\n installCmd,\n ].join(' && ');\n console.info(`🔧 Syncing Rust toolchain: ${installCmd}`);\n\n // Mark as synced before executeToolCommand to prevent recursive preExecute calls\n syncedCwds.add(options.cwd);\n\n await executeToolCommand(context, 'stellar', [], {\n ...options,\n script,\n volumes: [\n ...options.volumes,\n {\n type: 'isolate',\n containerPath: '/cache/rustup',\n name: 'stellar-rustup',\n shared: true,\n locked: true,\n },\n ],\n });\n}\n"]}
package/dist/WMMRXU3O.js DELETED
@@ -1,151 +0,0 @@
1
- import { __name } from './VUOMXK5T.js';
2
- import { execFile, spawn } from 'child_process';
3
- import { stat, chmod } from 'fs/promises';
4
- import path from 'path';
5
- import { promisify } from 'util';
6
-
7
- var execFileAsync = promisify(execFile);
8
- var SOURCE_MOUNT = "/source";
9
- var VERIFIABLE_BUILD_PLATFORM = "linux/amd64";
10
- var OFFICIAL_IMAGE_REPO = "stellar/stellar-cli";
11
- var officialImageTagRef = /* @__PURE__ */ __name((stellarVersion, rustVersion) => `${OFFICIAL_IMAGE_REPO}:${stellarVersion}-rust${rustVersion}-slim-bookworm`, "officialImageTagRef");
12
- var parseAmd64Digest = /* @__PURE__ */ __name((manifestInspectJson) => {
13
- const { manifests } = JSON.parse(manifestInspectJson);
14
- if (!Array.isArray(manifests)) {
15
- throw new Error("`docker manifest inspect` did not return a multi-arch index (no `manifests` array)");
16
- }
17
- const digest = manifests.find(({ platform }) => platform?.os === "linux" && platform?.architecture === "amd64")?.digest;
18
- if (typeof digest !== "string" || !digest.startsWith("sha256:")) {
19
- throw new Error("No linux/amd64 manifest digest found in `docker manifest inspect` output");
20
- }
21
- return digest;
22
- }, "parseAmd64Digest");
23
- var resolveAmd64Digest = /* @__PURE__ */ __name(async (imageTagRef) => {
24
- try {
25
- const { stdout } = await execFileAsync("docker", [
26
- "manifest",
27
- "inspect",
28
- imageTagRef
29
- ], {
30
- maxBuffer: 16 * 1024 * 1024,
31
- timeout: 3e4
32
- });
33
- return parseAmd64Digest(stdout);
34
- } catch (cause) {
35
- throw new Error(`Failed to resolve the linux/amd64 digest of ${imageTagRef} (\`docker manifest inspect\`)`, {
36
- cause
37
- });
38
- }
39
- }, "resolveAmd64Digest");
40
- var META_FLAG = "--meta";
41
- var metaKey = /* @__PURE__ */ __name((entry) => {
42
- const eq = entry.indexOf("=");
43
- return eq === -1 ? entry : entry.slice(0, eq);
44
- }, "metaKey");
45
- var canonicalizeMetaArgs = /* @__PURE__ */ __name((buildArgs, injectedMeta) => {
46
- const reservedKeys = new Set(injectedMeta.map(metaKey));
47
- const metas = [
48
- ...injectedMeta
49
- ];
50
- const passthrough = [];
51
- const addCallerMeta = /* @__PURE__ */ __name((value) => {
52
- if (!reservedKeys.has(metaKey(value))) metas.push(value);
53
- }, "addCallerMeta");
54
- for (let i = 0; i < buildArgs.length; i++) {
55
- const arg = buildArgs[i];
56
- if (arg === void 0) continue;
57
- if (arg === META_FLAG) {
58
- const value = buildArgs[i + 1];
59
- if (value !== void 0 && !value.startsWith("--")) {
60
- addCallerMeta(value);
61
- i += 1;
62
- }
63
- } else if (arg.startsWith(`${META_FLAG}=`)) {
64
- addCallerMeta(arg.slice(META_FLAG.length + 1));
65
- } else {
66
- passthrough.push(arg);
67
- }
68
- }
69
- metas.sort();
70
- return [
71
- ...passthrough,
72
- ...metas.flatMap((meta) => [
73
- META_FLAG,
74
- meta
75
- ])
76
- ];
77
- }, "canonicalizeMetaArgs");
78
- var buildVerifiableBuildDockerArgs = /* @__PURE__ */ __name(({ imageRef, sourceDir, buildArgs, bldimg }) => [
79
- "run",
80
- "--rm",
81
- "--platform",
82
- VERIFIABLE_BUILD_PLATFORM,
83
- "-v",
84
- `${sourceDir}:${SOURCE_MOUNT}`,
85
- "-w",
86
- SOURCE_MOUNT,
87
- imageRef,
88
- "contract",
89
- "build",
90
- // `bldimg` is injected by us (not the caller): the exact build image, so the WASM records what
91
- // produced it. It joins the caller's --meta flags in the canonical sorted order.
92
- ...canonicalizeMetaArgs(buildArgs, [
93
- `bldimg=${bldimg}`
94
- ])
95
- ], "buildVerifiableBuildDockerArgs");
96
- var resolveBuildDir = /* @__PURE__ */ __name((cwd, sourceDir) => path.resolve(cwd, sourceDir ?? "."), "resolveBuildDir");
97
- var runDocker = /* @__PURE__ */ __name((dockerArgs) => new Promise((resolve, reject) => {
98
- const child = spawn("docker", dockerArgs, {
99
- stdio: "inherit"
100
- });
101
- child.on("error", (error) => reject(new Error("Failed to spawn docker for the verifiable build", {
102
- cause: error
103
- })));
104
- child.on("close", (code, signal) => {
105
- if (code === 0) {
106
- resolve();
107
- } else {
108
- reject(new Error(`Verifiable build failed: docker exited with ${signal ? `signal ${signal}` : `code ${code}`}`));
109
- }
110
- });
111
- }), "runDocker");
112
- var VerifiableBuildWrapper = class {
113
- static {
114
- __name(this, "VerifiableBuildWrapper");
115
- }
116
- async run(args, { stellarVersion, rustVersion }, options, sourceDir) {
117
- const buildDir = resolveBuildDir(options.cwd, sourceDir);
118
- try {
119
- if (!(await stat(buildDir)).isDirectory()) {
120
- throw new Error("not a directory");
121
- }
122
- } catch (cause) {
123
- throw new Error(`Verifiable build source directory is not an existing directory: ${buildDir}`, {
124
- cause
125
- });
126
- }
127
- if (sourceDir !== void 0) {
128
- await chmod(buildDir, 511);
129
- }
130
- const tagRef = officialImageTagRef(stellarVersion, rustVersion);
131
- const digest = await resolveAmd64Digest(tagRef);
132
- const imageRef = `${OFFICIAL_IMAGE_REPO}@${digest}`;
133
- const bldimg = `docker.io/${OFFICIAL_IMAGE_REPO}@${digest}`;
134
- const dockerArgs = buildVerifiableBuildDockerArgs({
135
- imageRef,
136
- sourceDir: buildDir,
137
- buildArgs: args,
138
- bldimg
139
- });
140
- console.info("\u{1F512} Verifiable build (official stellar/stellar-cli image, run from host)");
141
- console.info(` source: ${buildDir}`);
142
- console.info(` image: ${imageRef} (${VERIFIABLE_BUILD_PLATFORM}, from tag ${tagRef})`);
143
- console.info(` bldimg: ${bldimg}`);
144
- console.info(` docker ${dockerArgs.join(" ")}`);
145
- await runDocker(dockerArgs);
146
- }
147
- };
148
-
149
- export { VerifiableBuildWrapper, buildVerifiableBuildDockerArgs, canonicalizeMetaArgs, officialImageTagRef, parseAmd64Digest, resolveBuildDir };
150
- //# sourceMappingURL=WMMRXU3O.js.map
151
- //# sourceMappingURL=WMMRXU3O.js.map