typekro 0.27.1 → 0.28.1
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 +52 -6
- package/dist/core/deployment/kro-readiness.js.map +1 -1
- package/dist/core/deployment/poll-timeout.d.ts +45 -0
- package/dist/core/deployment/poll-timeout.d.ts.map +1 -0
- package/dist/core/deployment/poll-timeout.js +67 -0
- package/dist/core/deployment/poll-timeout.js.map +1 -0
- package/dist/core/deployment/readiness.d.ts.map +1 -1
- package/dist/core/deployment/readiness.js +30 -21
- package/dist/core/deployment/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/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/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/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 +93 -2
- 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/package.json +6 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { OciRegistryCredentialProvider, OciRegistryTlsConfig, RegistrySession } from './types.js';
|
|
2
|
+
export interface DockerRegistrySessionOptions {
|
|
3
|
+
readonly registryHost: string;
|
|
4
|
+
readonly credentialProvider?: OciRegistryCredentialProvider;
|
|
5
|
+
readonly dockerConfigPath?: string;
|
|
6
|
+
readonly tls?: OciRegistryTlsConfig;
|
|
7
|
+
readonly timeout: number;
|
|
8
|
+
readonly signal?: AbortSignal;
|
|
9
|
+
}
|
|
10
|
+
/** Open an isolated Docker authentication and BuildKit trust session. */
|
|
11
|
+
export declare function createDockerRegistrySession(options: DockerRegistrySessionOptions): Promise<RegistrySession>;
|
|
12
|
+
/** Read an isolated Docker config for tests without exposing it through public build results. */
|
|
13
|
+
export declare function readDockerSessionConfig(session: RegistrySession): Promise<string | undefined>;
|
|
14
|
+
//# sourceMappingURL=docker-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-session.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/docker-session.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,6BAA6B,EAC7B,oBAAoB,EACpB,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,6BAA6B,CAAC;IAC5D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,GAAG,CAAC,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAuHD,yEAAyE;AACzE,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,eAAe,CAAC,CAwE1B;AAED,iGAAiG;AACjG,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAI7B"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
import { chmod, copyFile, cp, lstat, mkdir, mkdtemp, readFile, rm, writeFile, } from 'node:fs/promises';
|
|
3
|
+
import { homedir, tmpdir } from 'node:os';
|
|
4
|
+
import { basename, dirname, join, resolve } from 'node:path';
|
|
5
|
+
import { ContainerBuildError } from '../errors.js';
|
|
6
|
+
import { execDocker } from '../exec.js';
|
|
7
|
+
function defaultDockerConfigPath() {
|
|
8
|
+
const configuredDirectory = process.env.DOCKER_CONFIG;
|
|
9
|
+
return configuredDirectory
|
|
10
|
+
? join(configuredDirectory, 'config.json')
|
|
11
|
+
: join(homedir(), '.docker', 'config.json');
|
|
12
|
+
}
|
|
13
|
+
async function copyDockerConfiguration(source, target) {
|
|
14
|
+
try {
|
|
15
|
+
await copyFile(source, target);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
const code = error.code;
|
|
19
|
+
if (code !== 'ENOENT')
|
|
20
|
+
throw error;
|
|
21
|
+
await writeFile(target, '{}\n', { encoding: 'utf8', mode: 0o600 });
|
|
22
|
+
}
|
|
23
|
+
await chmod(target, 0o600);
|
|
24
|
+
// config.json can select a named context. Docker resolves that context through
|
|
25
|
+
// sibling contexts/meta and contexts/tls state, so copying only config.json
|
|
26
|
+
// makes otherwise valid configurations (including OrbStack) unusable.
|
|
27
|
+
try {
|
|
28
|
+
await cp(join(dirname(source), 'contexts'), join(dirname(target), 'contexts'), {
|
|
29
|
+
recursive: true,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
if (error.code !== 'ENOENT')
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
// DOCKER_CONFIG also controls per-user CLI plugin discovery. Keep Buildx
|
|
37
|
+
// available without copying unrelated plugins or sharing mutable state.
|
|
38
|
+
const sourceBuildx = join(dirname(source), 'cli-plugins', 'docker-buildx');
|
|
39
|
+
const targetBuildx = join(dirname(target), 'cli-plugins', 'docker-buildx');
|
|
40
|
+
try {
|
|
41
|
+
await mkdir(dirname(targetBuildx), { recursive: true });
|
|
42
|
+
await cp(sourceBuildx, targetBuildx);
|
|
43
|
+
if (!(await lstat(targetBuildx)).isSymbolicLink())
|
|
44
|
+
await chmod(targetBuildx, 0o700);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
if (error.code !== 'ENOENT')
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function tomlString(value) {
|
|
52
|
+
return JSON.stringify(value);
|
|
53
|
+
}
|
|
54
|
+
async function writeDockerCredential(configPath, registryHost, credential) {
|
|
55
|
+
const parsed = JSON.parse(await readFile(configPath, 'utf8'));
|
|
56
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
57
|
+
throw new Error('Docker config.json must contain an object.');
|
|
58
|
+
}
|
|
59
|
+
const config = parsed;
|
|
60
|
+
const currentAuths = config.auths && typeof config.auths === 'object' && !Array.isArray(config.auths)
|
|
61
|
+
? config.auths
|
|
62
|
+
: {};
|
|
63
|
+
const currentHelpers = config.credHelpers &&
|
|
64
|
+
typeof config.credHelpers === 'object' &&
|
|
65
|
+
!Array.isArray(config.credHelpers)
|
|
66
|
+
? config.credHelpers
|
|
67
|
+
: {};
|
|
68
|
+
const { [registryHost]: _targetHelper, ...otherHelpers } = currentHelpers;
|
|
69
|
+
const { credsStore: _globalCredentialStore, credHelpers: _credHelpers, ...sessionConfig } = config;
|
|
70
|
+
const auth = Buffer.from(`${credential.username}:${credential.password}`, 'utf8').toString('base64');
|
|
71
|
+
await writeFile(configPath, `${JSON.stringify({
|
|
72
|
+
...sessionConfig,
|
|
73
|
+
...(Object.keys(otherHelpers).length > 0 ? { credHelpers: otherHelpers } : {}),
|
|
74
|
+
auths: {
|
|
75
|
+
...currentAuths,
|
|
76
|
+
[registryHost]: { username: credential.username, password: credential.password, auth },
|
|
77
|
+
},
|
|
78
|
+
})}\n`, { encoding: 'utf8', mode: 0o600 });
|
|
79
|
+
await chmod(configPath, 0o600);
|
|
80
|
+
}
|
|
81
|
+
async function prepareBuildkitTrust(directory, registryHost, tls) {
|
|
82
|
+
if (!tls?.caCertificate && !tls?.caFile && !tls?.insecure && !tls?.plainHttp)
|
|
83
|
+
return undefined;
|
|
84
|
+
let caPath;
|
|
85
|
+
if (tls.caCertificate) {
|
|
86
|
+
caPath = join(directory, 'registry-ca.pem');
|
|
87
|
+
await writeFile(caPath, tls.caCertificate, { encoding: 'utf8', mode: 0o600 });
|
|
88
|
+
}
|
|
89
|
+
else if (tls.caFile) {
|
|
90
|
+
caPath = join(directory, basename(tls.caFile));
|
|
91
|
+
await copyFile(resolve(tls.caFile), caPath);
|
|
92
|
+
await chmod(caPath, 0o600);
|
|
93
|
+
}
|
|
94
|
+
const lines = [
|
|
95
|
+
`[registry.${tomlString(registryHost)}]`,
|
|
96
|
+
...(caPath ? [` ca = [${tomlString(caPath)}]`] : []),
|
|
97
|
+
...(tls.plainHttp ? [' http = true'] : []),
|
|
98
|
+
...(tls.insecure ? [' insecure = true'] : []),
|
|
99
|
+
];
|
|
100
|
+
const configPath = join(directory, 'buildkitd.toml');
|
|
101
|
+
await writeFile(configPath, `${lines.join('\n')}\n`, { encoding: 'utf8', mode: 0o600 });
|
|
102
|
+
return configPath;
|
|
103
|
+
}
|
|
104
|
+
/** Open an isolated Docker authentication and BuildKit trust session. */
|
|
105
|
+
export async function createDockerRegistrySession(options) {
|
|
106
|
+
const directory = await mkdtemp(join(tmpdir(), 'typekro-registry-'));
|
|
107
|
+
await chmod(directory, 0o700);
|
|
108
|
+
try {
|
|
109
|
+
const configPath = join(directory, 'config.json');
|
|
110
|
+
await mkdir(dirname(configPath), { recursive: true });
|
|
111
|
+
await copyDockerConfiguration(options.dockerConfigPath ?? defaultDockerConfigPath(), configPath);
|
|
112
|
+
const environment = { DOCKER_CONFIG: directory };
|
|
113
|
+
if (options.credentialProvider) {
|
|
114
|
+
const credential = await options.credentialProvider(options.signal);
|
|
115
|
+
if (!credential.username || !credential.password) {
|
|
116
|
+
throw new ContainerBuildError('OCI credential provider returned an empty username or password.', 'REGISTRY_CREDENTIAL_INVALID', ['Return both username and password from the credential provider.']);
|
|
117
|
+
}
|
|
118
|
+
if (options.tls?.plainHttp ||
|
|
119
|
+
options.tls?.insecure ||
|
|
120
|
+
options.tls?.caCertificate ||
|
|
121
|
+
options.tls?.caFile) {
|
|
122
|
+
// docker login has no per-command transport or CA override. For every
|
|
123
|
+
// custom transport, write the standard short-lived auth entry directly
|
|
124
|
+
// into the isolated config and let the dedicated BuildKit configuration
|
|
125
|
+
// carry HTTP, CA, or insecure-TLS trust. This avoids depending on the
|
|
126
|
+
// developer machine's global Docker daemon trust store.
|
|
127
|
+
await writeDockerCredential(configPath, options.registryHost, credential);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
await execDocker(['login', '--username', credential.username, '--password-stdin', options.registryHost], {
|
|
131
|
+
stdin: credential.password,
|
|
132
|
+
quiet: true,
|
|
133
|
+
timeout: options.timeout,
|
|
134
|
+
environment,
|
|
135
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
136
|
+
sensitiveValues: [credential.username, credential.password],
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
const buildkitConfigPath = await prepareBuildkitTrust(directory, options.registryHost, options.tls);
|
|
141
|
+
return {
|
|
142
|
+
remote: true,
|
|
143
|
+
environment,
|
|
144
|
+
...(buildkitConfigPath ? { buildkitConfigPath } : {}),
|
|
145
|
+
async cleanup() {
|
|
146
|
+
await rm(directory, { recursive: true, force: true });
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
await rm(directory, { recursive: true, force: true });
|
|
152
|
+
if (error instanceof ContainerBuildError)
|
|
153
|
+
throw error;
|
|
154
|
+
throw new ContainerBuildError(`Failed to prepare isolated registry credentials: ${error instanceof Error ? error.message : String(error)}`, 'REGISTRY_SESSION_FAILED', ['Verify the Docker config, credential provider, and registry TLS configuration.'], error instanceof Error ? error : undefined);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/** Read an isolated Docker config for tests without exposing it through public build results. */
|
|
158
|
+
export async function readDockerSessionConfig(session) {
|
|
159
|
+
const directory = session.environment?.DOCKER_CONFIG;
|
|
160
|
+
if (!directory)
|
|
161
|
+
return undefined;
|
|
162
|
+
return readFile(join(directory, 'config.json'), 'utf8');
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=docker-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-session.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/docker-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Supports env vars, profiles, SSO sessions, instance roles, and role
|
|
6
6
|
* assumption — all through the SDK's standard mechanisms.
|
|
7
7
|
*/
|
|
8
|
-
import type { EcrRegistryConfig, RegistryHandler } from './types.js';
|
|
8
|
+
import type { EcrRegistryConfig, RegistryHandler, RegistrySession } from './types.js';
|
|
9
9
|
export declare class EcrRegistryHandler implements RegistryHandler {
|
|
10
10
|
private readonly config;
|
|
11
11
|
private resolvedAccountId;
|
|
@@ -14,8 +14,7 @@ export declare class EcrRegistryHandler implements RegistryHandler {
|
|
|
14
14
|
private ecrClient;
|
|
15
15
|
constructor(config: EcrRegistryConfig);
|
|
16
16
|
resolveImageUri(imageName: string, tag: string): Promise<string>;
|
|
17
|
-
|
|
18
|
-
push(imageUri: string, imageName: string): Promise<boolean>;
|
|
17
|
+
prepare(imageName: string, timeout: number, signal?: AbortSignal): Promise<RegistrySession>;
|
|
19
18
|
private getAccountId;
|
|
20
19
|
private ensureRepositoryExists;
|
|
21
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecr.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/ecr.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"ecr.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/ecr.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAItF,qBAAa,kBAAmB,YAAW,eAAe;IAM5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,kBAAkB,CAAgC;IAC1D,OAAO,CAAC,SAAS,CAAY;gBAEA,MAAM,EAAE,iBAAiB;IAUhD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKhE,OAAO,CACX,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC;YAmCb,YAAY;YAuBZ,sBAAsB;CAoBrC"}
|
|
@@ -10,7 +10,7 @@ import { GetCallerIdentityCommand, STSClient } from '@aws-sdk/client-sts';
|
|
|
10
10
|
import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
|
|
11
11
|
import { getComponentLogger } from '../../logging/index.js';
|
|
12
12
|
import { ContainerBuildError } from '../errors.js';
|
|
13
|
-
import {
|
|
13
|
+
import { createDockerRegistrySession } from './docker-session.js';
|
|
14
14
|
const logger = getComponentLogger('container-registry-ecr');
|
|
15
15
|
export class EcrRegistryHandler {
|
|
16
16
|
config;
|
|
@@ -20,10 +20,8 @@ export class EcrRegistryHandler {
|
|
|
20
20
|
ecrClient;
|
|
21
21
|
constructor(config) {
|
|
22
22
|
this.config = config;
|
|
23
|
-
this.resolvedRegion =
|
|
24
|
-
?? process.env.AWS_REGION
|
|
25
|
-
?? process.env.AWS_DEFAULT_REGION
|
|
26
|
-
?? 'us-east-1';
|
|
23
|
+
this.resolvedRegion =
|
|
24
|
+
config.region ?? process.env.AWS_REGION ?? process.env.AWS_DEFAULT_REGION ?? 'us-east-1';
|
|
27
25
|
this.credentialProvider = fromNodeProviderChain(config.credentials ?? {});
|
|
28
26
|
this.ecrClient = new ECRClient({
|
|
29
27
|
region: this.resolvedRegion,
|
|
@@ -34,7 +32,9 @@ export class EcrRegistryHandler {
|
|
|
34
32
|
const accountId = await this.getAccountId();
|
|
35
33
|
return `${accountId}.dkr.ecr.${this.resolvedRegion}.amazonaws.com/${imageName}:${tag}`;
|
|
36
34
|
}
|
|
37
|
-
async
|
|
35
|
+
async prepare(imageName, timeout, signal) {
|
|
36
|
+
if (this.config.createRepository !== false)
|
|
37
|
+
await this.ensureRepositoryExists(imageName);
|
|
38
38
|
try {
|
|
39
39
|
const authResponse = await this.ecrClient.send(new GetAuthorizationTokenCommand({}));
|
|
40
40
|
const authData = authResponse.authorizationData?.[0];
|
|
@@ -46,9 +46,12 @@ export class EcrRegistryHandler {
|
|
|
46
46
|
if (colonIndex === -1)
|
|
47
47
|
throw new Error('Failed to decode ECR authorization token');
|
|
48
48
|
const password = decoded.slice(colonIndex + 1);
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
const host = new URL(authData.proxyEndpoint).host;
|
|
50
|
+
const session = await createDockerRegistrySession({
|
|
51
|
+
registryHost: host,
|
|
52
|
+
credentialProvider: async () => ({ username: 'AWS', password }),
|
|
53
|
+
timeout,
|
|
54
|
+
...(signal ? { signal } : {}),
|
|
52
55
|
});
|
|
53
56
|
logger.info('Authenticated with ECR', { endpoint: authData.proxyEndpoint });
|
|
54
57
|
if (!this.resolvedAccountId) {
|
|
@@ -56,6 +59,7 @@ export class EcrRegistryHandler {
|
|
|
56
59
|
if (match?.[1])
|
|
57
60
|
this.resolvedAccountId = match[1];
|
|
58
61
|
}
|
|
62
|
+
return session;
|
|
59
63
|
}
|
|
60
64
|
catch (error) {
|
|
61
65
|
if (error instanceof ContainerBuildError)
|
|
@@ -63,19 +67,6 @@ export class EcrRegistryHandler {
|
|
|
63
67
|
throw ContainerBuildError.ecrAuthFailed(error instanceof Error ? error : new Error(String(error)));
|
|
64
68
|
}
|
|
65
69
|
}
|
|
66
|
-
async push(imageUri, imageName) {
|
|
67
|
-
if (this.config.createRepository !== false) {
|
|
68
|
-
await this.ensureRepositoryExists(imageName);
|
|
69
|
-
}
|
|
70
|
-
try {
|
|
71
|
-
await execDocker(['push', imageUri]);
|
|
72
|
-
logger.info('Image pushed to ECR', { imageUri });
|
|
73
|
-
return true;
|
|
74
|
-
}
|
|
75
|
-
catch (error) {
|
|
76
|
-
throw ContainerBuildError.pushFailed(imageUri, error instanceof Error ? error : new Error(String(error)));
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
70
|
async getAccountId() {
|
|
80
71
|
if (this.config.accountId)
|
|
81
72
|
return this.config.accountId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecr.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/ecr.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,SAAS,EACT,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,wBAAwB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ecr.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/ecr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { HarborRegistryConfig, OciRegistryConfig } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Configure Harbor as an OCI transport. Harbor API lifecycle (projects and robot accounts) remains
|
|
4
|
+
* in the Harbor integration rather than leaking into this generic registry boundary.
|
|
5
|
+
*/
|
|
6
|
+
export declare function harbor(config: HarborRegistryConfig): OciRegistryConfig;
|
|
7
|
+
//# sourceMappingURL=harbor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harbor.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/harbor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE1E;;;GAGG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,iBAAiB,CAGtE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configure Harbor as an OCI transport. Harbor API lifecycle (projects and robot accounts) remains
|
|
3
|
+
* in the Harbor integration rather than leaking into this generic registry boundary.
|
|
4
|
+
*/
|
|
5
|
+
export function harbor(config) {
|
|
6
|
+
const { project, ...registry } = config;
|
|
7
|
+
return { type: 'oci', ...registry, repositoryPrefix: project };
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=harbor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harbor.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/harbor.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,MAA4B;IACjD,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC;IACxC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;AACjE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElE,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,CAiBvE;AAED,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { ContainerBuildError } from '../errors.js';
|
|
7
7
|
import { EcrRegistryHandler } from './ecr.js';
|
|
8
|
+
import { OciRegistryHandler } from './oci.js';
|
|
8
9
|
import { OrbstackRegistryHandler } from './orbstack.js';
|
|
9
10
|
export function resolveRegistry(config) {
|
|
10
11
|
switch (config.type) {
|
|
@@ -12,6 +13,10 @@ export function resolveRegistry(config) {
|
|
|
12
13
|
return new OrbstackRegistryHandler();
|
|
13
14
|
case 'ecr':
|
|
14
15
|
return new EcrRegistryHandler(config);
|
|
16
|
+
case 'oci':
|
|
17
|
+
return new OciRegistryHandler(config);
|
|
18
|
+
case 'custom':
|
|
19
|
+
return config.handler;
|
|
15
20
|
case 'gcr':
|
|
16
21
|
throw ContainerBuildError.registryNotSupported('gcr');
|
|
17
22
|
case 'acr':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAGxD,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,UAAU;YACb,OAAO,IAAI,uBAAuB,EAAE,CAAC;QACvC,KAAK,KAAK;YACR,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,KAAK;YACR,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD,KAAK,KAAK;YACR,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD;YACE,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAE,MAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAGxD,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,UAAU;YACb,OAAO,IAAI,uBAAuB,EAAE,CAAC;QACvC,KAAK,KAAK;YACR,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,KAAK;YACR,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,KAAK,KAAK;YACR,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD,KAAK,KAAK;YACR,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD;YACE,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAE,MAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { OciRegistryConfig, RegistryHandler, RegistrySession } from './types.js';
|
|
2
|
+
export declare function normalizeRegistryHost(value: string): string;
|
|
3
|
+
export declare class OciRegistryHandler implements RegistryHandler {
|
|
4
|
+
private readonly config;
|
|
5
|
+
readonly registryHost: string;
|
|
6
|
+
readonly repositoryPrefix: string | undefined;
|
|
7
|
+
constructor(config: OciRegistryConfig);
|
|
8
|
+
resolveImageUri(imageName: string, tag: string): Promise<string>;
|
|
9
|
+
prepare(_imageName: string, timeout: number, signal?: AbortSignal): Promise<RegistrySession>;
|
|
10
|
+
}
|
|
11
|
+
/** Create a generic OCI registry config with inferred discriminant. */
|
|
12
|
+
export declare function ociRegistry(config: Omit<OciRegistryConfig, 'type'>): OciRegistryConfig;
|
|
13
|
+
//# sourceMappingURL=oci.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oci.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/oci.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEtF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAc3D;AAcD,qBAAa,kBAAmB,YAAW,eAAe;IAI5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEjB,MAAM,EAAE,iBAAiB;IA8BhD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKhE,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC;CAY5B;AAED,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,iBAAiB,CAEtF"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ContainerBuildError } from '../errors.js';
|
|
2
|
+
import { createDockerRegistrySession } from './docker-session.js';
|
|
3
|
+
export function normalizeRegistryHost(value) {
|
|
4
|
+
const parsed = new URL(value.includes('://') ? value : `https://${value}`);
|
|
5
|
+
if (parsed.pathname !== '/' ||
|
|
6
|
+
parsed.search ||
|
|
7
|
+
parsed.hash ||
|
|
8
|
+
parsed.username ||
|
|
9
|
+
parsed.password) {
|
|
10
|
+
throw new ContainerBuildError(`Invalid OCI registry origin: "${value}".`, 'INVALID_REGISTRY', [
|
|
11
|
+
'Provide only a registry origin or host. Put the project in repositoryPrefix.',
|
|
12
|
+
]);
|
|
13
|
+
}
|
|
14
|
+
return parsed.host;
|
|
15
|
+
}
|
|
16
|
+
function normalizeRepositoryPrefix(value) {
|
|
17
|
+
if (!value)
|
|
18
|
+
return undefined;
|
|
19
|
+
const normalized = value.replace(/^\/+|\/+$/g, '').toLowerCase();
|
|
20
|
+
if (!/^[a-z0-9]+(?:[._-][a-z0-9]+)*(?:\/[a-z0-9]+(?:[._-][a-z0-9]+)*)*$/.test(normalized)) {
|
|
21
|
+
throw new ContainerBuildError(`Invalid OCI repository prefix: "${value}".`, 'INVALID_REGISTRY_PREFIX');
|
|
22
|
+
}
|
|
23
|
+
return normalized;
|
|
24
|
+
}
|
|
25
|
+
export class OciRegistryHandler {
|
|
26
|
+
config;
|
|
27
|
+
registryHost;
|
|
28
|
+
repositoryPrefix;
|
|
29
|
+
constructor(config) {
|
|
30
|
+
this.config = config;
|
|
31
|
+
this.registryHost = normalizeRegistryHost(config.registry);
|
|
32
|
+
this.repositoryPrefix = normalizeRepositoryPrefix(config.repositoryPrefix);
|
|
33
|
+
const explicitProtocol = config.registry
|
|
34
|
+
.match(/^([a-z][a-z0-9+.-]*):\/\//i)?.[1]
|
|
35
|
+
?.toLowerCase();
|
|
36
|
+
if (config.tls?.plainHttp && explicitProtocol === 'https') {
|
|
37
|
+
throw new ContainerBuildError('OCI registry cannot use plainHttp with an https:// registry origin.', 'INVALID_REGISTRY_TLS');
|
|
38
|
+
}
|
|
39
|
+
if (explicitProtocol === 'http' && !config.tls?.plainHttp) {
|
|
40
|
+
throw new ContainerBuildError('OCI registry with an http:// origin must explicitly enable tls.plainHttp.', 'INVALID_REGISTRY_TLS', ['Use HTTPS, or acknowledge a development-only HTTP registry with tls.plainHttp.']);
|
|
41
|
+
}
|
|
42
|
+
if (config.tls?.plainHttp &&
|
|
43
|
+
(config.tls.caCertificate || config.tls.caFile || config.tls.insecure)) {
|
|
44
|
+
throw new ContainerBuildError('OCI plainHttp cannot be combined with HTTPS CA or insecure-TLS options.', 'INVALID_REGISTRY_TLS');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async resolveImageUri(imageName, tag) {
|
|
48
|
+
const path = this.repositoryPrefix ? `${this.repositoryPrefix}/${imageName}` : imageName;
|
|
49
|
+
return `${this.registryHost}/${path}:${tag}`;
|
|
50
|
+
}
|
|
51
|
+
async prepare(_imageName, timeout, signal) {
|
|
52
|
+
return createDockerRegistrySession({
|
|
53
|
+
registryHost: this.registryHost,
|
|
54
|
+
timeout,
|
|
55
|
+
...(this.config.credentialProvider
|
|
56
|
+
? { credentialProvider: this.config.credentialProvider }
|
|
57
|
+
: {}),
|
|
58
|
+
...(this.config.dockerConfigPath ? { dockerConfigPath: this.config.dockerConfigPath } : {}),
|
|
59
|
+
...(this.config.tls ? { tls: this.config.tls } : {}),
|
|
60
|
+
...(signal ? { signal } : {}),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** Create a generic OCI registry config with inferred discriminant. */
|
|
65
|
+
export function ociRegistry(config) {
|
|
66
|
+
return { type: 'oci', ...config };
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=oci.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oci.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/oci.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,10 +5,9 @@
|
|
|
5
5
|
* built-in Kubernetes cluster. No push step is needed — `docker build` is
|
|
6
6
|
* sufficient.
|
|
7
7
|
*/
|
|
8
|
-
import type { RegistryHandler } from './types.js';
|
|
8
|
+
import type { RegistryHandler, RegistrySession } from './types.js';
|
|
9
9
|
export declare class OrbstackRegistryHandler implements RegistryHandler {
|
|
10
10
|
resolveImageUri(imageName: string, tag: string): Promise<string>;
|
|
11
|
-
|
|
12
|
-
push(_imageUri: string, _imageName: string): Promise<boolean>;
|
|
11
|
+
prepare(_imageName: string, _timeout: number, _signal?: AbortSignal): Promise<RegistrySession>;
|
|
13
12
|
}
|
|
14
13
|
//# sourceMappingURL=orbstack.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orbstack.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/orbstack.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"orbstack.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/orbstack.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAInE,qBAAa,uBAAwB,YAAW,eAAe;IACvD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhE,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,eAAe,CAAC;CAS5B"}
|
|
@@ -11,14 +11,14 @@ export class OrbstackRegistryHandler {
|
|
|
11
11
|
async resolveImageUri(imageName, tag) {
|
|
12
12
|
return `${imageName}:${tag}`;
|
|
13
13
|
}
|
|
14
|
-
async
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
async prepare(_imageName, _timeout, _signal) {
|
|
15
|
+
logger.debug('Orbstack registry: using local Docker image availability');
|
|
16
|
+
return {
|
|
17
|
+
remote: false,
|
|
18
|
+
async cleanup() {
|
|
19
|
+
// Local OrbStack builds create no temporary registry session.
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
//# sourceMappingURL=orbstack.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orbstack.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/orbstack.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,MAAM,MAAM,GAAG,kBAAkB,CAAC,6BAA6B,CAAC,CAAC;AAEjE,MAAM,OAAO,uBAAuB;IAClC,KAAK,CAAC,eAAe,CAAC,SAAiB,EAAE,GAAW;QAClD,OAAO,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"orbstack.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/orbstack.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,MAAM,MAAM,GAAG,kBAAkB,CAAC,6BAA6B,CAAC,CAAC;AAEjE,MAAM,OAAO,uBAAuB;IAClC,KAAK,CAAC,eAAe,CAAC,SAAiB,EAAE,GAAW;QAClD,OAAO,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,OAAO,CACX,UAAkB,EAClB,QAAgB,EAChB,OAAqB;QAErB,MAAM,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QACzE,OAAO;YACL,MAAM,EAAE,KAAK;YACb,KAAK,CAAC,OAAO;gBACX,8DAA8D;YAChE,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
|