typekro 0.27.0 → 0.28.0
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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/core/containers/build.d.ts +2 -46
- package/dist/core/containers/build.d.ts.map +1 -1
- package/dist/core/containers/build.js +219 -134
- package/dist/core/containers/build.js.map +1 -1
- package/dist/core/containers/errors.d.ts +4 -0
- package/dist/core/containers/errors.d.ts.map +1 -1
- package/dist/core/containers/errors.js +14 -1
- package/dist/core/containers/errors.js.map +1 -1
- package/dist/core/containers/exec.d.ts +6 -23
- package/dist/core/containers/exec.d.ts.map +1 -1
- package/dist/core/containers/exec.js +94 -78
- package/dist/core/containers/exec.js.map +1 -1
- package/dist/core/containers/image.d.ts +11 -7
- package/dist/core/containers/image.d.ts.map +1 -1
- package/dist/core/containers/image.js +102 -13
- package/dist/core/containers/image.js.map +1 -1
- package/dist/core/containers/index.d.ts +5 -1
- package/dist/core/containers/index.d.ts.map +1 -1
- package/dist/core/containers/index.js +3 -0
- package/dist/core/containers/index.js.map +1 -1
- package/dist/core/containers/registries/credentials.d.ts +30 -0
- package/dist/core/containers/registries/credentials.d.ts.map +1 -0
- package/dist/core/containers/registries/credentials.js +87 -0
- package/dist/core/containers/registries/credentials.js.map +1 -0
- package/dist/core/containers/registries/docker-session.d.ts +14 -0
- package/dist/core/containers/registries/docker-session.d.ts.map +1 -0
- package/dist/core/containers/registries/docker-session.js +164 -0
- package/dist/core/containers/registries/docker-session.js.map +1 -0
- package/dist/core/containers/registries/ecr.d.ts +2 -3
- package/dist/core/containers/registries/ecr.d.ts.map +1 -1
- package/dist/core/containers/registries/ecr.js +13 -22
- package/dist/core/containers/registries/ecr.js.map +1 -1
- package/dist/core/containers/registries/harbor.d.ts +7 -0
- package/dist/core/containers/registries/harbor.d.ts.map +1 -0
- package/dist/core/containers/registries/harbor.js +9 -0
- package/dist/core/containers/registries/harbor.js.map +1 -0
- package/dist/core/containers/registries/index.d.ts.map +1 -1
- package/dist/core/containers/registries/index.js +5 -0
- package/dist/core/containers/registries/index.js.map +1 -1
- package/dist/core/containers/registries/oci.d.ts +13 -0
- package/dist/core/containers/registries/oci.d.ts.map +1 -0
- package/dist/core/containers/registries/oci.js +68 -0
- package/dist/core/containers/registries/oci.js.map +1 -0
- package/dist/core/containers/registries/orbstack.d.ts +2 -3
- package/dist/core/containers/registries/orbstack.d.ts.map +1 -1
- package/dist/core/containers/registries/orbstack.js +8 -8
- package/dist/core/containers/registries/orbstack.js.map +1 -1
- package/dist/core/containers/registries/types.d.ts +75 -49
- package/dist/core/containers/registries/types.d.ts.map +1 -1
- package/dist/core/containers/registries/types.js +1 -9
- package/dist/core/containers/registries/types.js.map +1 -1
- package/dist/core/deployment/direct-factory.d.ts.map +1 -1
- package/dist/core/deployment/direct-factory.js +15 -8
- package/dist/core/deployment/direct-factory.js.map +1 -1
- package/dist/core/deployment/engine.d.ts.map +1 -1
- package/dist/core/deployment/engine.js +46 -5
- package/dist/core/deployment/engine.js.map +1 -1
- package/dist/core/deployment/kro-factory.d.ts +7 -7
- package/dist/core/deployment/kro-factory.d.ts.map +1 -1
- package/dist/core/deployment/kro-factory.js +148 -60
- package/dist/core/deployment/kro-factory.js.map +1 -1
- package/dist/core/deployment/kro-instance-safety.d.ts +7 -0
- package/dist/core/deployment/kro-instance-safety.d.ts.map +1 -1
- package/dist/core/deployment/kro-instance-safety.js +15 -0
- package/dist/core/deployment/kro-instance-safety.js.map +1 -1
- package/dist/core/deployment/kro-namespace-teardown.d.ts +7 -5
- package/dist/core/deployment/kro-namespace-teardown.d.ts.map +1 -1
- package/dist/core/deployment/kro-namespace-teardown.js +29 -10
- package/dist/core/deployment/kro-namespace-teardown.js.map +1 -1
- package/dist/core/deployment/kro-readiness.d.ts +1 -0
- package/dist/core/deployment/kro-readiness.d.ts.map +1 -1
- package/dist/core/deployment/kro-readiness.js +22 -1
- package/dist/core/deployment/kro-readiness.js.map +1 -1
- package/dist/core/deployment/rollback-manager.d.ts +13 -0
- package/dist/core/deployment/rollback-manager.d.ts.map +1 -1
- package/dist/core/deployment/rollback-manager.js +8 -0
- package/dist/core/deployment/rollback-manager.js.map +1 -1
- package/dist/core/serialization/core.js +3 -1
- package/dist/core/serialization/core.js.map +1 -1
- package/dist/core/serialization/schema.d.ts +2 -2
- package/dist/core/serialization/schema.d.ts.map +1 -1
- package/dist/core/serialization/schema.js +57 -4
- package/dist/core/serialization/schema.js.map +1 -1
- package/dist/core/types/serialization.d.ts +9 -0
- package/dist/core/types/serialization.d.ts.map +1 -1
- package/dist/factories/apisix/types.js +11 -11
- package/dist/factories/apisix/types.js.map +1 -1
- package/dist/factories/caddy/types.js +2 -2
- package/dist/factories/caddy/types.js.map +1 -1
- package/dist/factories/cert-manager/types.js +6 -6
- package/dist/factories/cert-manager/types.js.map +1 -1
- package/dist/factories/cilium/compositions/cilium-bootstrap.js +6 -6
- package/dist/factories/cilium/compositions/cilium-bootstrap.js.map +1 -1
- package/dist/factories/clickhouse/compositions/clickhouse-cluster.js +1 -1
- package/dist/factories/clickhouse/compositions/clickhouse-cluster.js.map +1 -1
- package/dist/factories/clickhouse/types.js +8 -8
- package/dist/factories/clickhouse/types.js.map +1 -1
- package/dist/factories/clickstack/types.js +5 -5
- package/dist/factories/clickstack/types.js.map +1 -1
- package/dist/factories/cnpg/types.js +6 -6
- package/dist/factories/cnpg/types.js.map +1 -1
- package/dist/factories/dagster/types.js +14 -14
- package/dist/factories/dagster/types.js.map +1 -1
- package/dist/factories/external-dns/types.js +3 -3
- package/dist/factories/external-dns/types.js.map +1 -1
- package/dist/factories/harbor/compositions/harbor-installation.d.ts +610 -0
- package/dist/factories/harbor/compositions/harbor-installation.d.ts.map +1 -0
- package/dist/factories/harbor/compositions/harbor-installation.js +348 -0
- package/dist/factories/harbor/compositions/harbor-installation.js.map +1 -0
- package/dist/factories/harbor/compositions/index.d.ts +2 -0
- package/dist/factories/harbor/compositions/index.d.ts.map +1 -0
- package/dist/factories/harbor/compositions/index.js +2 -0
- package/dist/factories/harbor/compositions/index.js.map +1 -0
- package/dist/factories/harbor/index.d.ts +7 -0
- package/dist/factories/harbor/index.d.ts.map +1 -0
- package/dist/factories/harbor/index.js +7 -0
- package/dist/factories/harbor/index.js.map +1 -0
- package/dist/factories/harbor/provider/harbor-api.d.ts +123 -0
- package/dist/factories/harbor/provider/harbor-api.d.ts.map +1 -0
- package/dist/factories/harbor/provider/harbor-api.js +595 -0
- package/dist/factories/harbor/provider/harbor-api.js.map +1 -0
- package/dist/factories/harbor/provider/index.d.ts +4 -0
- package/dist/factories/harbor/provider/index.d.ts.map +1 -0
- package/dist/factories/harbor/provider/index.js +4 -0
- package/dist/factories/harbor/provider/index.js.map +1 -0
- package/dist/factories/harbor/provider/kubernetes-secret-store.d.ts +12 -0
- package/dist/factories/harbor/provider/kubernetes-secret-store.d.ts.map +1 -0
- package/dist/factories/harbor/provider/kubernetes-secret-store.js +81 -0
- package/dist/factories/harbor/provider/kubernetes-secret-store.js.map +1 -0
- package/dist/factories/harbor/provider/rook-s3-binding.d.ts +30 -0
- package/dist/factories/harbor/provider/rook-s3-binding.d.ts.map +1 -0
- package/dist/factories/harbor/provider/rook-s3-binding.js +74 -0
- package/dist/factories/harbor/provider/rook-s3-binding.js.map +1 -0
- package/dist/factories/harbor/resources/helm.d.ts +12 -0
- package/dist/factories/harbor/resources/helm.d.ts.map +1 -0
- package/dist/factories/harbor/resources/helm.js +46 -0
- package/dist/factories/harbor/resources/helm.js.map +1 -0
- package/dist/factories/harbor/resources/index.d.ts +2 -0
- package/dist/factories/harbor/resources/index.d.ts.map +1 -0
- package/dist/factories/harbor/resources/index.js +2 -0
- package/dist/factories/harbor/resources/index.js.map +1 -0
- package/dist/factories/harbor/types.d.ts +319 -0
- package/dist/factories/harbor/types.d.ts.map +1 -0
- package/dist/factories/harbor/types.js +252 -0
- package/dist/factories/harbor/types.js.map +1 -0
- package/dist/factories/harbor/utils/helm-values-mapper.d.ts +8 -0
- package/dist/factories/harbor/utils/helm-values-mapper.d.ts.map +1 -0
- package/dist/factories/harbor/utils/helm-values-mapper.js +322 -0
- package/dist/factories/harbor/utils/helm-values-mapper.js.map +1 -0
- package/dist/factories/harbor/utils/index.d.ts +2 -0
- package/dist/factories/harbor/utils/index.d.ts.map +1 -0
- package/dist/factories/harbor/utils/index.js +2 -0
- package/dist/factories/harbor/utils/index.js.map +1 -0
- package/dist/factories/helm/helm-release.d.ts +10 -0
- package/dist/factories/helm/helm-release.d.ts.map +1 -1
- package/dist/factories/helm/helm-release.js +30 -2
- package/dist/factories/helm/helm-release.js.map +1 -1
- package/dist/factories/helm/readiness-evaluators.d.ts.map +1 -1
- package/dist/factories/helm/readiness-evaluators.js +26 -1
- package/dist/factories/helm/readiness-evaluators.js.map +1 -1
- package/dist/factories/helm/types.d.ts +5 -0
- package/dist/factories/helm/types.d.ts.map +1 -1
- package/dist/factories/index.d.ts +1 -0
- package/dist/factories/index.d.ts.map +1 -1
- package/dist/factories/index.js +4 -0
- package/dist/factories/index.js.map +1 -1
- package/dist/factories/inngest/types.js +8 -8
- package/dist/factories/inngest/types.js.map +1 -1
- package/dist/factories/kubernetes/networking/network-policy.d.ts.map +1 -1
- package/dist/factories/kubernetes/networking/network-policy.js +34 -1
- package/dist/factories/kubernetes/networking/network-policy.js.map +1 -1
- package/dist/factories/ory/types.js +40 -40
- package/dist/factories/ory/types.js.map +1 -1
- package/dist/factories/rook/compositions/index.d.ts +1 -0
- package/dist/factories/rook/compositions/index.d.ts.map +1 -1
- package/dist/factories/rook/compositions/index.js +1 -0
- package/dist/factories/rook/compositions/index.js.map +1 -1
- package/dist/factories/rook/compositions/rook-ceph-operator-installation.d.ts +2 -0
- package/dist/factories/rook/compositions/rook-ceph-operator-installation.d.ts.map +1 -1
- package/dist/factories/rook/compositions/rook-ceph-operator-installation.js +17 -0
- package/dist/factories/rook/compositions/rook-ceph-operator-installation.js.map +1 -1
- package/dist/factories/rook/compositions/rook-ceph-platform.d.ts +181 -0
- package/dist/factories/rook/compositions/rook-ceph-platform.d.ts.map +1 -0
- package/dist/factories/rook/compositions/rook-ceph-platform.js +388 -0
- package/dist/factories/rook/compositions/rook-ceph-platform.js.map +1 -0
- package/dist/factories/rook/resources/bucket-storage-class.d.ts.map +1 -1
- package/dist/factories/rook/resources/bucket-storage-class.js +4 -1
- package/dist/factories/rook/resources/bucket-storage-class.js.map +1 -1
- package/dist/factories/rook/resources/ceph-object-store.d.ts.map +1 -1
- package/dist/factories/rook/resources/ceph-object-store.js +2 -0
- package/dist/factories/rook/resources/ceph-object-store.js.map +1 -1
- package/dist/factories/rook/resources/helm.d.ts +4 -0
- package/dist/factories/rook/resources/helm.d.ts.map +1 -1
- package/dist/factories/rook/resources/helm.js +22 -0
- package/dist/factories/rook/resources/helm.js.map +1 -1
- package/dist/factories/rook/types.d.ts +180 -1
- package/dist/factories/rook/types.d.ts.map +1 -1
- package/dist/factories/rook/types.js +100 -9
- package/dist/factories/rook/types.js.map +1 -1
- package/dist/factories/rook/utils/helm-values-mapper.d.ts +34 -1
- package/dist/factories/rook/utils/helm-values-mapper.d.ts.map +1 -1
- package/dist/factories/rook/utils/helm-values-mapper.js +207 -0
- package/dist/factories/rook/utils/helm-values-mapper.js.map +1 -1
- package/dist/factories/searxng/types.js +2 -2
- package/dist/factories/searxng/types.js.map +1 -1
- package/dist/factories/valkey/types.js +4 -4
- package/dist/factories/valkey/types.js.map +1 -1
- package/dist/factories/webapp/types.js +8 -8
- package/dist/factories/webapp/types.js.map +1 -1
- package/package.json +6 -1
|
@@ -1,50 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Container Build Utility
|
|
3
|
-
*
|
|
4
|
-
* Builds a Docker image from a Dockerfile and optionally pushes it to a
|
|
5
|
-
* container registry. Returns the full image URI for use in K8s deployments.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* import { buildContainer } from 'typekro/containers';
|
|
10
|
-
*
|
|
11
|
-
* // Local Orbstack (no push needed)
|
|
12
|
-
* const result = await buildContainer({
|
|
13
|
-
* context: './apps/my-app',
|
|
14
|
-
* imageName: 'my-app',
|
|
15
|
-
* registry: { type: 'orbstack' },
|
|
16
|
-
* });
|
|
17
|
-
*
|
|
18
|
-
* // AWS ECR (auto-creates repo, pushes)
|
|
19
|
-
* const result = await buildContainer({
|
|
20
|
-
* context: './apps/my-app',
|
|
21
|
-
* imageName: 'my-app',
|
|
22
|
-
* tag: 'content-hash',
|
|
23
|
-
* platform: 'linux/amd64',
|
|
24
|
-
* registry: { type: 'ecr', region: 'us-west-2' },
|
|
25
|
-
* });
|
|
26
|
-
*
|
|
27
|
-
* // Use the image URI in a TypeKro composition
|
|
28
|
-
* await factory.deploy({
|
|
29
|
-
* app: { image: result.imageUri, port: 3000 },
|
|
30
|
-
* });
|
|
31
|
-
* ```
|
|
32
|
-
*/
|
|
33
1
|
import type { ContainerBuildOptions, ContainerBuildResult } from './registries/types.js';
|
|
34
|
-
/**
|
|
35
|
-
* Build a Docker image and optionally push it to a container registry.
|
|
36
|
-
*
|
|
37
|
-
* Docker's own layer cache handles memoization — if nothing in the build
|
|
38
|
-
* context changed, the build returns near-instantly.
|
|
39
|
-
*/
|
|
2
|
+
/** Build, publish, and registry-verify a container image. */
|
|
40
3
|
export declare function buildContainer(options: ContainerBuildOptions): Promise<ContainerBuildResult>;
|
|
41
|
-
/**
|
|
42
|
-
* Compute a content-based hash of the build context for deterministic tagging.
|
|
43
|
-
* Exported for direct unit testing without Docker.
|
|
44
|
-
*
|
|
45
|
-
* Hashes the Dockerfile content plus all file contents in the context,
|
|
46
|
-
* respecting .dockerignore if present. Files are streamed (not loaded into
|
|
47
|
-
* memory) and hashed in sorted order for determinism.
|
|
48
|
-
*/
|
|
4
|
+
/** Compute a deterministic build-context digest using only Node-compatible APIs. */
|
|
49
5
|
export declare function computeContentHash(contextPath: string, dockerfilePath: string): Promise<string>;
|
|
50
6
|
//# sourceMappingURL=build.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/core/containers/build.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/core/containers/build.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EAErB,MAAM,uBAAuB,CAAC;AA2I/B,6DAA6D;AAC7D,wBAAsB,cAAc,CAClC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CAqI/B;AAED,oFAAoF;AACpF,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,CAmCjB"}
|
|
@@ -1,174 +1,259 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* import { buildContainer } from 'typekro/containers';
|
|
10
|
-
*
|
|
11
|
-
* // Local Orbstack (no push needed)
|
|
12
|
-
* const result = await buildContainer({
|
|
13
|
-
* context: './apps/my-app',
|
|
14
|
-
* imageName: 'my-app',
|
|
15
|
-
* registry: { type: 'orbstack' },
|
|
16
|
-
* });
|
|
17
|
-
*
|
|
18
|
-
* // AWS ECR (auto-creates repo, pushes)
|
|
19
|
-
* const result = await buildContainer({
|
|
20
|
-
* context: './apps/my-app',
|
|
21
|
-
* imageName: 'my-app',
|
|
22
|
-
* tag: 'content-hash',
|
|
23
|
-
* platform: 'linux/amd64',
|
|
24
|
-
* registry: { type: 'ecr', region: 'us-west-2' },
|
|
25
|
-
* });
|
|
26
|
-
*
|
|
27
|
-
* // Use the image URI in a TypeKro composition
|
|
28
|
-
* await factory.deploy({
|
|
29
|
-
* app: { image: result.imageUri, port: 3000 },
|
|
30
|
-
* });
|
|
31
|
-
* ```
|
|
32
|
-
*/
|
|
33
|
-
import { existsSync } from 'node:fs';
|
|
34
|
-
import { readdir } from 'node:fs/promises';
|
|
35
|
-
import { resolve, join } from 'node:path';
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
2
|
+
import { createReadStream, existsSync } from 'node:fs';
|
|
3
|
+
import { mkdtemp, readFile, readdir, rm } from 'node:fs/promises';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { join, resolve } from 'node:path';
|
|
36
6
|
import { getComponentLogger } from '../logging/index.js';
|
|
37
7
|
import { ContainerBuildError } from './errors.js';
|
|
38
8
|
import { checkDockerAvailable, execDocker, validateBuildArgs } from './exec.js';
|
|
39
9
|
import { resolveRegistry } from './registries/index.js';
|
|
40
10
|
const logger = getComponentLogger('container-build');
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
11
|
+
const DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;
|
|
12
|
+
function resolvePlatforms(options) {
|
|
13
|
+
if (options.platform && options.platforms) {
|
|
14
|
+
throw new ContainerBuildError('Specify either platform or platforms, not both.', 'INVALID_PLATFORM');
|
|
15
|
+
}
|
|
16
|
+
const platforms = options.platforms
|
|
17
|
+
? [...new Set(options.platforms)]
|
|
18
|
+
: options.platform
|
|
19
|
+
? [options.platform]
|
|
20
|
+
: [];
|
|
21
|
+
for (const platform of platforms) {
|
|
22
|
+
if (!/^linux\/[a-z0-9_]+(?:\/[a-z0-9_]+)?$/.test(platform)) {
|
|
23
|
+
throw new ContainerBuildError(`Invalid container platform: "${platform}".`, 'INVALID_PLATFORM', ['Use an OCI platform such as linux/amd64 or linux/arm64.']);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return platforms;
|
|
27
|
+
}
|
|
28
|
+
function repositoryFromTaggedUri(uri) {
|
|
29
|
+
const colon = uri.lastIndexOf(':');
|
|
30
|
+
const slash = uri.lastIndexOf('/');
|
|
31
|
+
return colon > slash ? uri.slice(0, colon) : uri;
|
|
32
|
+
}
|
|
33
|
+
function digestFromInspectOutput(output) {
|
|
34
|
+
const trimmed = output.trim();
|
|
35
|
+
let candidate = trimmed;
|
|
36
|
+
try {
|
|
37
|
+
const parsed = JSON.parse(trimmed);
|
|
38
|
+
if (typeof parsed === 'string')
|
|
39
|
+
candidate = parsed;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Buildx versions may return an unquoted digest despite the JSON format request.
|
|
43
|
+
}
|
|
44
|
+
if (!DIGEST_PATTERN.test(candidate)) {
|
|
45
|
+
throw ContainerBuildError.digestVerificationFailed(`expected sha256 manifest digest, received "${candidate.slice(0, 160)}"`);
|
|
46
|
+
}
|
|
47
|
+
return candidate;
|
|
48
|
+
}
|
|
49
|
+
async function createBuildxBuilder(session, timeout, signal) {
|
|
50
|
+
const name = `typekro-${randomUUID().slice(0, 12)}`;
|
|
51
|
+
await execDocker([
|
|
52
|
+
'buildx',
|
|
53
|
+
'create',
|
|
54
|
+
'--name',
|
|
55
|
+
name,
|
|
56
|
+
'--driver',
|
|
57
|
+
'docker-container',
|
|
58
|
+
...(session.buildkitConfigPath ? ['--buildkitd-config', session.buildkitConfigPath] : []),
|
|
59
|
+
'--bootstrap',
|
|
60
|
+
], {
|
|
61
|
+
quiet: true,
|
|
62
|
+
timeout,
|
|
63
|
+
...(session.environment ? { environment: session.environment } : {}),
|
|
64
|
+
...(signal ? { signal } : {}),
|
|
65
|
+
});
|
|
66
|
+
return name;
|
|
67
|
+
}
|
|
68
|
+
async function removeBuildxBuilder(name, session, timeout) {
|
|
69
|
+
await execDocker(['buildx', 'rm', '--force', name], {
|
|
70
|
+
quiet: true,
|
|
71
|
+
timeout: Math.min(timeout, 30_000),
|
|
72
|
+
...(session.environment ? { environment: session.environment } : {}),
|
|
73
|
+
}).catch((error) => {
|
|
74
|
+
logger.warn('Failed to remove temporary Buildx builder', {
|
|
75
|
+
builder: name,
|
|
76
|
+
error: error instanceof Error ? error.message : String(error),
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
async function verifyPublishedDigest(taggedImageUri, metadataPath, session, builder, timeout, signal) {
|
|
81
|
+
const inspected = await execDocker([
|
|
82
|
+
'buildx',
|
|
83
|
+
'imagetools',
|
|
84
|
+
'inspect',
|
|
85
|
+
taggedImageUri,
|
|
86
|
+
...(builder ? ['--builder', builder] : []),
|
|
87
|
+
'--format',
|
|
88
|
+
'{{json .Manifest.Digest}}',
|
|
89
|
+
], {
|
|
90
|
+
quiet: true,
|
|
91
|
+
timeout,
|
|
92
|
+
...(session.environment ? { environment: session.environment } : {}),
|
|
93
|
+
...(signal ? { signal } : {}),
|
|
94
|
+
});
|
|
95
|
+
const digest = digestFromInspectOutput(inspected.stdout);
|
|
96
|
+
try {
|
|
97
|
+
const metadata = JSON.parse(await readFile(metadataPath, 'utf8'));
|
|
98
|
+
const pushedDigest = metadata['containerimage.digest'];
|
|
99
|
+
if (typeof pushedDigest === 'string' && pushedDigest !== digest) {
|
|
100
|
+
throw ContainerBuildError.digestVerificationFailed(`BuildKit reported ${pushedDigest}, registry returned ${digest}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (error instanceof ContainerBuildError)
|
|
105
|
+
throw error;
|
|
106
|
+
logger.debug('Buildx metadata did not contain a comparable digest', {
|
|
107
|
+
error: error instanceof Error ? error.message : String(error),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return digest;
|
|
111
|
+
}
|
|
112
|
+
/** Build, publish, and registry-verify a container image. */
|
|
47
113
|
export async function buildContainer(options) {
|
|
48
|
-
const
|
|
49
|
-
const { context, dockerfile = 'Dockerfile', imageName,
|
|
50
|
-
// Validate inputs
|
|
114
|
+
const startedAt = Date.now();
|
|
115
|
+
const { context, dockerfile = 'Dockerfile', imageName, buildArgs, target, quiet = false, progress = 'auto', timeout = 300_000, signal, extraDockerArgs = [], } = options;
|
|
51
116
|
const contextPath = resolve(context);
|
|
52
117
|
if (!existsSync(contextPath)) {
|
|
53
|
-
throw new ContainerBuildError(`Build context directory not found: ${contextPath}`, 'INVALID_CONTEXT'
|
|
118
|
+
throw new ContainerBuildError(`Build context directory not found: ${contextPath}`, 'INVALID_CONTEXT');
|
|
54
119
|
}
|
|
55
120
|
const dockerfilePath = join(contextPath, dockerfile);
|
|
56
121
|
if (!existsSync(dockerfilePath)) {
|
|
57
|
-
throw new ContainerBuildError(`Dockerfile not found: ${dockerfilePath}`, 'INVALID_DOCKERFILE'
|
|
122
|
+
throw new ContainerBuildError(`Dockerfile not found: ${dockerfilePath}`, 'INVALID_DOCKERFILE');
|
|
58
123
|
}
|
|
59
|
-
// Validate image name — must be a valid Docker/OCI image reference.
|
|
60
|
-
// Must start and end with alphanumeric, no trailing dots/slashes/hyphens.
|
|
61
124
|
if (!/^[a-z0-9]([a-z0-9._/-]*[a-z0-9])?$/.test(imageName)) {
|
|
62
|
-
throw new ContainerBuildError(`Invalid image name: "${imageName}"
|
|
125
|
+
throw new ContainerBuildError(`Invalid image name: "${imageName}".`, 'INVALID_IMAGE_NAME');
|
|
63
126
|
}
|
|
64
|
-
if (buildArgs)
|
|
127
|
+
if (buildArgs)
|
|
65
128
|
validateBuildArgs(buildArgs);
|
|
66
|
-
|
|
67
|
-
// Resolve tag
|
|
129
|
+
const platforms = resolvePlatforms(options);
|
|
68
130
|
let tag = options.tag ?? 'latest';
|
|
69
|
-
if (tag === 'content-hash')
|
|
131
|
+
if (tag === 'content-hash')
|
|
70
132
|
tag = await computeContentHash(contextPath, dockerfilePath);
|
|
133
|
+
await checkDockerAvailable(signal);
|
|
134
|
+
const registry = resolveRegistry(options.registry);
|
|
135
|
+
const taggedImageUri = await registry.resolveImageUri(imageName, tag);
|
|
136
|
+
logger.info('Building container image', {
|
|
137
|
+
taggedImageUri,
|
|
138
|
+
platforms: platforms.length ? platforms : ['native'],
|
|
139
|
+
});
|
|
140
|
+
let session;
|
|
141
|
+
let builder;
|
|
142
|
+
const metadataDirectory = await mkdtemp(join(tmpdir(), 'typekro-build-'));
|
|
143
|
+
const metadataPath = join(metadataDirectory, 'metadata.json');
|
|
144
|
+
try {
|
|
145
|
+
session = await registry.prepare(imageName, timeout, signal);
|
|
146
|
+
if (!session.remote && platforms.length > 1) {
|
|
147
|
+
throw new ContainerBuildError('Multi-platform images must be published to a remote registry.', 'MULTI_PLATFORM_REQUIRES_REGISTRY');
|
|
148
|
+
}
|
|
149
|
+
const buildArgFlags = buildArgs
|
|
150
|
+
? Object.entries(buildArgs).flatMap(([key, value]) => ['--build-arg', `${key}=${value}`])
|
|
151
|
+
: [];
|
|
152
|
+
const common = [
|
|
153
|
+
'-t',
|
|
154
|
+
taggedImageUri,
|
|
155
|
+
'-f',
|
|
156
|
+
dockerfilePath,
|
|
157
|
+
...(platforms.length ? ['--platform', platforms.join(',')] : []),
|
|
158
|
+
...(target ? ['--target', target] : []),
|
|
159
|
+
...buildArgFlags,
|
|
160
|
+
...extraDockerArgs,
|
|
161
|
+
contextPath,
|
|
162
|
+
];
|
|
163
|
+
if (session.remote) {
|
|
164
|
+
if (session.buildkitConfigPath || platforms.length > 1) {
|
|
165
|
+
builder = await createBuildxBuilder(session, timeout, signal);
|
|
166
|
+
}
|
|
167
|
+
await execDocker([
|
|
168
|
+
'buildx',
|
|
169
|
+
'build',
|
|
170
|
+
...(builder ? ['--builder', builder] : []),
|
|
171
|
+
'--push',
|
|
172
|
+
'--metadata-file',
|
|
173
|
+
metadataPath,
|
|
174
|
+
...(quiet ? ['--quiet'] : ['--progress', progress]),
|
|
175
|
+
...common,
|
|
176
|
+
], {
|
|
177
|
+
quiet,
|
|
178
|
+
timeout,
|
|
179
|
+
...(session.environment ? { environment: session.environment } : {}),
|
|
180
|
+
...(signal ? { signal } : {}),
|
|
181
|
+
});
|
|
182
|
+
const digest = await verifyPublishedDigest(taggedImageUri, metadataPath, session, builder, timeout, signal);
|
|
183
|
+
const repository = repositoryFromTaggedUri(taggedImageUri);
|
|
184
|
+
const imageUri = `${repository}@${digest}`;
|
|
185
|
+
const duration = Date.now() - startedAt;
|
|
186
|
+
logger.info('Container build published', { imageUri, taggedImageUri, duration });
|
|
187
|
+
return {
|
|
188
|
+
imageUri,
|
|
189
|
+
taggedImageUri,
|
|
190
|
+
repository,
|
|
191
|
+
tag,
|
|
192
|
+
digest,
|
|
193
|
+
duration,
|
|
194
|
+
pushed: true,
|
|
195
|
+
platforms,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
await execDocker(['build', ...common], {
|
|
199
|
+
quiet,
|
|
200
|
+
timeout,
|
|
201
|
+
...(signal ? { signal } : {}),
|
|
202
|
+
});
|
|
203
|
+
const duration = Date.now() - startedAt;
|
|
204
|
+
return {
|
|
205
|
+
imageUri: taggedImageUri,
|
|
206
|
+
taggedImageUri,
|
|
207
|
+
repository: repositoryFromTaggedUri(taggedImageUri),
|
|
208
|
+
tag,
|
|
209
|
+
duration,
|
|
210
|
+
pushed: false,
|
|
211
|
+
platforms,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
finally {
|
|
215
|
+
if (builder && session)
|
|
216
|
+
await removeBuildxBuilder(builder, session, timeout);
|
|
217
|
+
if (session)
|
|
218
|
+
await session.cleanup();
|
|
219
|
+
await rm(metadataDirectory, { recursive: true, force: true });
|
|
71
220
|
}
|
|
72
|
-
logger.info('Building container image', { imageName, tag, context: contextPath, registry: registryConfig.type });
|
|
73
|
-
// Check Docker availability
|
|
74
|
-
await checkDockerAvailable();
|
|
75
|
-
// Resolve registry handler
|
|
76
|
-
const registry = resolveRegistry(registryConfig);
|
|
77
|
-
// Resolve full image URI
|
|
78
|
-
const imageUri = await registry.resolveImageUri(imageName, tag);
|
|
79
|
-
// Authenticate with registry (no-op for local registries)
|
|
80
|
-
await registry.authenticate();
|
|
81
|
-
// Build the image
|
|
82
|
-
const buildArgFlags = buildArgs
|
|
83
|
-
? Object.entries(buildArgs).flatMap(([k, v]) => ['--build-arg', `${k}=${v}`])
|
|
84
|
-
: [];
|
|
85
|
-
const dockerBuildArgs = [
|
|
86
|
-
'build',
|
|
87
|
-
'-t', imageUri,
|
|
88
|
-
'-f', dockerfilePath,
|
|
89
|
-
...(platform ? ['--platform', platform] : []),
|
|
90
|
-
...(target ? ['--target', target] : []),
|
|
91
|
-
...buildArgFlags,
|
|
92
|
-
...extraDockerArgs,
|
|
93
|
-
contextPath,
|
|
94
|
-
];
|
|
95
|
-
await execDocker(dockerBuildArgs, { quiet, timeout });
|
|
96
|
-
// Push to registry — handler returns whether it actually pushed
|
|
97
|
-
const pushed = await registry.push(imageUri, imageName);
|
|
98
|
-
const duration = Date.now() - startTime;
|
|
99
|
-
logger.info('Container build complete', { imageUri, tag, duration, pushed });
|
|
100
|
-
return { imageUri, tag, duration, pushed };
|
|
101
221
|
}
|
|
102
|
-
/**
|
|
103
|
-
* Compute a content-based hash of the build context for deterministic tagging.
|
|
104
|
-
* Exported for direct unit testing without Docker.
|
|
105
|
-
*
|
|
106
|
-
* Hashes the Dockerfile content plus all file contents in the context,
|
|
107
|
-
* respecting .dockerignore if present. Files are streamed (not loaded into
|
|
108
|
-
* memory) and hashed in sorted order for determinism.
|
|
109
|
-
*/
|
|
222
|
+
/** Compute a deterministic build-context digest using only Node-compatible APIs. */
|
|
110
223
|
export async function computeContentHash(contextPath, dockerfilePath) {
|
|
111
|
-
const hasher =
|
|
112
|
-
|
|
113
|
-
for await (const chunk of Bun.file(dockerfilePath).stream()) {
|
|
224
|
+
const hasher = createHash('sha256');
|
|
225
|
+
for await (const chunk of createReadStream(dockerfilePath))
|
|
114
226
|
hasher.update(chunk);
|
|
115
|
-
}
|
|
116
|
-
// Parse .dockerignore if present — same format as .gitignore
|
|
117
227
|
const ignore = (await import('ignore')).default;
|
|
118
|
-
const
|
|
119
|
-
// Always exclude .git and node_modules (Docker does this implicitly)
|
|
120
|
-
ig.add(['.git', 'node_modules']);
|
|
228
|
+
const ignored = ignore().add(['.git', 'node_modules']);
|
|
121
229
|
const dockerignorePath = join(contextPath, '.dockerignore');
|
|
122
|
-
if (existsSync(dockerignorePath))
|
|
123
|
-
|
|
124
|
-
ig.add(patterns);
|
|
125
|
-
}
|
|
126
|
-
// Collect files, excluding .dockerignore matches.
|
|
127
|
-
// Use a recursive directory walker that skips ignored DIRECTORIES
|
|
128
|
-
// upfront (e.g., node_modules/, .git/) instead of Bun.Glob which
|
|
129
|
-
// enumerates all files before filtering — critical for repos with
|
|
130
|
-
// multi-GB node_modules.
|
|
230
|
+
if (existsSync(dockerignorePath))
|
|
231
|
+
ignored.add(await readFile(dockerignorePath, 'utf8'));
|
|
131
232
|
const files = [];
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
// receives an absolute path via join(contextPath, dir).
|
|
135
|
-
const walkDir = async (dir, prefix) => {
|
|
136
|
-
const entries = await readdir(join(contextPath, dir), { withFileTypes: true });
|
|
233
|
+
const walk = async (directory, prefix) => {
|
|
234
|
+
const entries = await readdir(join(contextPath, directory), { withFileTypes: true });
|
|
137
235
|
for (const entry of entries) {
|
|
138
236
|
const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
139
|
-
|
|
140
|
-
// that avoids traversing node_modules/ entirely.
|
|
141
|
-
if (ig.ignores(relativePath + (entry.isDirectory() ? '/' : '')))
|
|
237
|
+
if (ignored.ignores(relativePath + (entry.isDirectory() ? '/' : '')))
|
|
142
238
|
continue;
|
|
143
|
-
if (entry.isDirectory())
|
|
144
|
-
await
|
|
145
|
-
|
|
146
|
-
else if (entry.isFile()) {
|
|
147
|
-
// Only include regular files — skip symlinks, sockets, etc.
|
|
239
|
+
if (entry.isDirectory())
|
|
240
|
+
await walk(join(directory, entry.name), relativePath);
|
|
241
|
+
else if (entry.isFile())
|
|
148
242
|
files.push(relativePath);
|
|
149
|
-
}
|
|
150
243
|
}
|
|
151
244
|
};
|
|
152
|
-
await
|
|
245
|
+
await walk('', '');
|
|
153
246
|
files.sort();
|
|
154
247
|
for (const file of files) {
|
|
155
248
|
hasher.update(file);
|
|
156
249
|
try {
|
|
157
|
-
const
|
|
158
|
-
for await (const chunk of stream) {
|
|
250
|
+
for await (const chunk of createReadStream(join(contextPath, file)))
|
|
159
251
|
hasher.update(chunk);
|
|
160
|
-
}
|
|
161
252
|
}
|
|
162
|
-
catch (
|
|
163
|
-
|
|
164
|
-
// Log at debug so build hash inconsistencies can be diagnosed.
|
|
165
|
-
logger.debug('Skipping unreadable file during content hash', {
|
|
166
|
-
file,
|
|
167
|
-
error: err instanceof Error ? err.message : String(err),
|
|
168
|
-
});
|
|
253
|
+
catch (error) {
|
|
254
|
+
throw new ContainerBuildError(`Build context file cannot be hashed: ${file}: ${error instanceof Error ? error.message : String(error)}`, 'INVALID_CONTEXT', ['Make every included build-context file readable or exclude it through .dockerignore.'], error instanceof Error ? error : undefined);
|
|
169
255
|
}
|
|
170
256
|
}
|
|
171
|
-
|
|
172
|
-
return `sha-${hash.slice(0, 12)}`;
|
|
257
|
+
return `sha-${hasher.digest('hex').slice(0, 12)}`;
|
|
173
258
|
}
|
|
174
259
|
//# sourceMappingURL=build.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/core/containers/build.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/core/containers/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,10 @@ export declare class ContainerBuildError extends TypeKroError {
|
|
|
7
7
|
constructor(message: string, code: string, suggestions?: string[], cause?: Error);
|
|
8
8
|
static dockerNotAvailable(detail?: string): ContainerBuildError;
|
|
9
9
|
static buildFailed(exitCode: number, stderr: string): ContainerBuildError;
|
|
10
|
+
static commandFailed(exitCode: number, args: readonly string[], stderr: string): ContainerBuildError;
|
|
11
|
+
static timeout(timeout: number, operation: string): ContainerBuildError;
|
|
12
|
+
static cancelled(): ContainerBuildError;
|
|
13
|
+
static digestVerificationFailed(detail: string): ContainerBuildError;
|
|
10
14
|
static pushFailed(imageUri: string, cause: Error): ContainerBuildError;
|
|
11
15
|
static ecrAuthFailed(cause: Error): ContainerBuildError;
|
|
12
16
|
static registryNotSupported(type: string): ContainerBuildError;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/containers/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,qBAAa,mBAAoB,SAAQ,YAAY;aAIjC,WAAW,EAAE,MAAM,EAAE;gBAFrC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACI,WAAW,GAAE,MAAM,EAAO,EAC1C,KAAK,CAAC,EAAE,KAAK;IAMf,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,mBAAmB;IAY/D,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAYzE,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,mBAAmB;IAatE,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,mBAAmB;IAcvD,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB;CAU/D"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/containers/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,qBAAa,mBAAoB,SAAQ,YAAY;aAIjC,WAAW,EAAE,MAAM,EAAE;gBAFrC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACI,WAAW,GAAE,MAAM,EAAO,EAC1C,KAAK,CAAC,EAAE,KAAK;IAMf,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,mBAAmB;IAY/D,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAYzE,MAAM,CAAC,aAAa,CAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,EAAE,MAAM,GACb,mBAAmB;IAStB,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,mBAAmB;IAQvE,MAAM,CAAC,SAAS,IAAI,mBAAmB;IAIvC,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAQpE,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,mBAAmB;IAatE,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,mBAAmB;IAcvD,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB;CAU/D"}
|
|
@@ -23,6 +23,19 @@ export class ContainerBuildError extends TypeKroError {
|
|
|
23
23
|
"Run 'docker build' manually to see the full output.",
|
|
24
24
|
]);
|
|
25
25
|
}
|
|
26
|
+
static commandFailed(exitCode, args, stderr) {
|
|
27
|
+
const operation = args.slice(0, 2).join(' ');
|
|
28
|
+
return new ContainerBuildError(`Docker ${operation} failed with exit code ${exitCode}:\n${stderr.slice(0, 2_000)}`, 'DOCKER_COMMAND_FAILED', ['Review the redacted Docker diagnostics and registry/build configuration.']);
|
|
29
|
+
}
|
|
30
|
+
static timeout(timeout, operation) {
|
|
31
|
+
return new ContainerBuildError(`Container operation timed out after ${timeout}ms: ${operation}`, 'BUILD_TIMEOUT', ['Increase the timeout or inspect registry and builder connectivity.']);
|
|
32
|
+
}
|
|
33
|
+
static cancelled() {
|
|
34
|
+
return new ContainerBuildError('Container operation was cancelled.', 'BUILD_CANCELLED');
|
|
35
|
+
}
|
|
36
|
+
static digestVerificationFailed(detail) {
|
|
37
|
+
return new ContainerBuildError(`Registry manifest digest verification failed: ${detail}`, 'DIGEST_VERIFICATION_FAILED', ['Verify registry availability, credentials, and that the pushed tag was not mutated.']);
|
|
38
|
+
}
|
|
26
39
|
static pushFailed(imageUri, cause) {
|
|
27
40
|
return new ContainerBuildError(`Failed to push ${imageUri}: ${cause.message}`, 'PUSH_FAILED', [
|
|
28
41
|
'Verify registry credentials are valid.',
|
|
@@ -40,7 +53,7 @@ export class ContainerBuildError extends TypeKroError {
|
|
|
40
53
|
}
|
|
41
54
|
static registryNotSupported(type) {
|
|
42
55
|
return new ContainerBuildError(`Registry type '${type}' is not yet implemented.`, 'REGISTRY_NOT_SUPPORTED', [
|
|
43
|
-
'Supported registries: orbstack, ecr.',
|
|
56
|
+
'Supported registries: orbstack, ecr, oci (including Harbor).',
|
|
44
57
|
'GCR and ACR support is planned — contributions welcome.',
|
|
45
58
|
]);
|
|
46
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/containers/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IAIjC;IAHlB,YACE,OAAe,EACf,IAAY,EACI,cAAwB,EAAE,EAC1C,KAAa;QAEb,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAHrD,gBAAW,GAAX,WAAW,CAAe;QAI1C,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,MAAe;QACvC,OAAO,IAAI,mBAAmB,CAC5B,0BAA0B,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EACvD,sBAAsB,EACtB;YACE,gCAAgC;YAChC,sDAAsD;YACtD,qEAAqE;SACtE,CACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,QAAgB,EAAE,MAAc;QACjD,OAAO,IAAI,mBAAmB,CAC5B,sCAAsC,QAAQ,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAC1E,cAAc,EACd;YACE,yCAAyC;YACzC,uDAAuD;YACvD,qDAAqD;SACtD,CACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,QAAgB,EAAE,KAAY;QAC9C,OAAO,IAAI,mBAAmB,CAC5B,kBAAkB,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,EAC9C,aAAa,EACb;YACE,wCAAwC;YACxC,gEAAgE;YAChE,oBAAoB,QAAQ,yBAAyB;SACtD,EACD,KAAK,CACN,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,KAAY;QAC/B,OAAO,IAAI,mBAAmB,CAC5B,8BAA8B,KAAK,CAAC,OAAO,EAAE,EAC7C,iBAAiB,EACjB;YACE,qDAAqD;YACrD,sDAAsD;YACtD,kDAAkD;YAClD,+DAA+D;SAChE,EACD,KAAK,CACN,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,oBAAoB,CAAC,IAAY;QACtC,OAAO,IAAI,mBAAmB,CAC5B,kBAAkB,IAAI,2BAA2B,EACjD,wBAAwB,EACxB;YACE,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/containers/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IAIjC;IAHlB,YACE,OAAe,EACf,IAAY,EACI,cAAwB,EAAE,EAC1C,KAAa;QAEb,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAHrD,gBAAW,GAAX,WAAW,CAAe;QAI1C,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,MAAe;QACvC,OAAO,IAAI,mBAAmB,CAC5B,0BAA0B,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EACvD,sBAAsB,EACtB;YACE,gCAAgC;YAChC,sDAAsD;YACtD,qEAAqE;SACtE,CACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,QAAgB,EAAE,MAAc;QACjD,OAAO,IAAI,mBAAmB,CAC5B,sCAAsC,QAAQ,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAC1E,cAAc,EACd;YACE,yCAAyC;YACzC,uDAAuD;YACvD,qDAAqD;SACtD,CACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,aAAa,CAClB,QAAgB,EAChB,IAAuB,EACvB,MAAc;QAEd,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7C,OAAO,IAAI,mBAAmB,CAC5B,UAAU,SAAS,0BAA0B,QAAQ,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EACnF,uBAAuB,EACvB,CAAC,0EAA0E,CAAC,CAC7E,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,OAAe,EAAE,SAAiB;QAC/C,OAAO,IAAI,mBAAmB,CAC5B,uCAAuC,OAAO,OAAO,SAAS,EAAE,EAChE,eAAe,EACf,CAAC,oEAAoE,CAAC,CACvE,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,SAAS;QACd,OAAO,IAAI,mBAAmB,CAAC,oCAAoC,EAAE,iBAAiB,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,MAAc;QAC5C,OAAO,IAAI,mBAAmB,CAC5B,iDAAiD,MAAM,EAAE,EACzD,4BAA4B,EAC5B,CAAC,qFAAqF,CAAC,CACxF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,QAAgB,EAAE,KAAY;QAC9C,OAAO,IAAI,mBAAmB,CAC5B,kBAAkB,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,EAC9C,aAAa,EACb;YACE,wCAAwC;YACxC,gEAAgE;YAChE,oBAAoB,QAAQ,yBAAyB;SACtD,EACD,KAAK,CACN,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,KAAY;QAC/B,OAAO,IAAI,mBAAmB,CAC5B,8BAA8B,KAAK,CAAC,OAAO,EAAE,EAC7C,iBAAiB,EACjB;YACE,qDAAqD;YACrD,sDAAsD;YACtD,kDAAkD;YAClD,+DAA+D;SAChE,EACD,KAAK,CACN,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,oBAAoB,CAAC,IAAY;QACtC,OAAO,IAAI,mBAAmB,CAC5B,kBAAkB,IAAI,2BAA2B,EACjD,wBAAwB,EACxB;YACE,8DAA8D;YAC9D,yDAAyD;SAC1D,CACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,36 +1,19 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Docker CLI Execution Helper
|
|
3
|
-
*
|
|
4
|
-
* Wraps Bun.spawn for Docker commands with streaming output,
|
|
5
|
-
* timeout support, and actionable error messages.
|
|
6
|
-
*/
|
|
7
1
|
export interface ExecDockerOptions {
|
|
8
|
-
/** Pipe this string to stdin (used for docker login --password-stdin). */
|
|
9
2
|
stdin?: string;
|
|
10
|
-
/** Suppress stdout streaming (only log on error). */
|
|
11
3
|
quiet?: boolean;
|
|
12
|
-
/** Timeout in milliseconds. */
|
|
13
4
|
timeout?: number;
|
|
5
|
+
signal?: AbortSignal;
|
|
6
|
+
environment?: Readonly<Record<string, string>>;
|
|
7
|
+
/** Additional exact values to redact from errors and diagnostics. */
|
|
8
|
+
sensitiveValues?: readonly string[];
|
|
14
9
|
}
|
|
15
10
|
export interface ExecDockerResult {
|
|
16
11
|
exitCode: number;
|
|
17
12
|
stdout: string;
|
|
18
13
|
stderr: string;
|
|
19
14
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Validate that build arg keys are safe Docker ARG names.
|
|
22
|
-
* Prevents flag injection via malicious keys like "--platform".
|
|
23
|
-
*/
|
|
24
15
|
export declare function validateBuildArgs(buildArgs: Record<string, string>): void;
|
|
25
|
-
/**
|
|
26
|
-
* Execute a Docker CLI command.
|
|
27
|
-
*
|
|
28
|
-
* Streams output to the logger in real-time unless `quiet` is set.
|
|
29
|
-
* Throws ContainerBuildError on non-zero exit or timeout.
|
|
30
|
-
*/
|
|
16
|
+
/** Execute Docker through a Node-compatible process boundary with timeout and cancellation. */
|
|
31
17
|
export declare function execDocker(args: string[], options?: ExecDockerOptions): Promise<ExecDockerResult>;
|
|
32
|
-
|
|
33
|
-
* Check if Docker is available and the daemon is running.
|
|
34
|
-
*/
|
|
35
|
-
export declare function checkDockerAvailable(): Promise<void>;
|
|
18
|
+
export declare function checkDockerAvailable(signal?: AbortSignal): Promise<void>;
|
|
36
19
|
//# sourceMappingURL=exec.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../../src/core/containers/exec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../../src/core/containers/exec.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,qEAAqE;IACrE,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAiBzE;AA0BD,+FAA+F;AAC/F,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CA8E3B;AAED,wBAAsB,oBAAoB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAc9E"}
|