@lakutata/containerd 0.0.0-stage → 3.0.0-beta.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/LICENSE +23 -0
- package/README.md +409 -2
- package/THIRD_PARTY_NOTICES.md +310 -0
- package/dist/cjs/client/BuildKit.d.ts +176 -0
- package/dist/cjs/client/BuildKit.js +536 -0
- package/dist/cjs/client/BuildKitMessages.d.ts +35 -0
- package/dist/cjs/client/BuildKitMessages.js +123 -0
- package/dist/cjs/client/ContainerStore.d.ts +558 -0
- package/dist/cjs/client/ContainerStore.js +1384 -0
- package/dist/cjs/client/ContainerdClient.d.ts +244 -0
- package/dist/cjs/client/ContainerdClient.js +455 -0
- package/dist/cjs/client/DockerIgnore.d.ts +44 -0
- package/dist/cjs/client/DockerIgnore.js +186 -0
- package/dist/cjs/client/Fifo.d.ts +31 -0
- package/dist/cjs/client/Fifo.js +66 -0
- package/dist/cjs/client/ImageStore.d.ts +258 -0
- package/dist/cjs/client/ImageStore.js +636 -0
- package/dist/cjs/client/Messages.d.ts +103 -0
- package/dist/cjs/client/Messages.js +397 -0
- package/dist/cjs/client/Networks.d.ts +221 -0
- package/dist/cjs/client/Networks.js +630 -0
- package/dist/cjs/client/Platforms.d.ts +53 -0
- package/dist/cjs/client/Platforms.js +169 -0
- package/dist/cjs/client/Reference.d.ts +33 -0
- package/dist/cjs/client/Reference.js +70 -0
- package/dist/cjs/client/Registry.d.ts +145 -0
- package/dist/cjs/client/Registry.js +272 -0
- package/dist/cjs/client/Rootfs.d.ts +83 -0
- package/dist/cjs/client/Rootfs.js +245 -0
- package/dist/cjs/client/Seccomp.d.ts +36 -0
- package/dist/cjs/client/Seccomp.js +156 -0
- package/dist/cjs/client/Spec.d.ts +151 -0
- package/dist/cjs/client/Spec.js +227 -0
- package/dist/cjs/client/Volumes.d.ts +42 -0
- package/dist/cjs/client/Volumes.js +80 -0
- package/dist/cjs/containerd/Containerd.d.ts +442 -0
- package/dist/cjs/containerd/Containerd.js +929 -0
- package/dist/cjs/containerd/exceptions/ContainerdConnectionException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdConnectionException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdContainerNameConflictException.d.ts +8 -0
- package/dist/cjs/containerd/exceptions/ContainerdContainerNameConflictException.js +15 -0
- package/dist/cjs/containerd/exceptions/ContainerdContainerNotFoundException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdContainerNotFoundException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdContainerStateException.d.ts +10 -0
- package/dist/cjs/containerd/exceptions/ContainerdContainerStateException.js +17 -0
- package/dist/cjs/containerd/exceptions/ContainerdImageBuildException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdImageBuildException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdImageExportException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdImageExportException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdImageImportException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdImageImportException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdImageNotFoundException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdImageNotFoundException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdImagePullException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdImagePullException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdImagePushException.d.ts +8 -0
- package/dist/cjs/containerd/exceptions/ContainerdImagePushException.js +15 -0
- package/dist/cjs/containerd/exceptions/ContainerdNetworkConflictException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdNetworkConflictException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdNetworkNotFoundException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdNetworkNotFoundException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdPathNotFoundException.d.ts +8 -0
- package/dist/cjs/containerd/exceptions/ContainerdPathNotFoundException.js +15 -0
- package/dist/cjs/containerd/exceptions/ContainerdPlatformException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdPlatformException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdVolumeInUseException.d.ts +8 -0
- package/dist/cjs/containerd/exceptions/ContainerdVolumeInUseException.js +15 -0
- package/dist/cjs/containerd/exceptions/ContainerdVolumeNotFoundException.d.ts +8 -0
- package/dist/cjs/containerd/exceptions/ContainerdVolumeNotFoundException.js +15 -0
- package/dist/cjs/containerd/lib/ContainerdContainer.d.ts +292 -0
- package/dist/cjs/containerd/lib/ContainerdContainer.js +536 -0
- package/dist/cjs/containerd/lib/ContainerdContainerTTY.d.ts +116 -0
- package/dist/cjs/containerd/lib/ContainerdContainerTTY.js +178 -0
- package/dist/cjs/containerd/lib/ContainerdErrors.d.ts +6 -0
- package/dist/cjs/containerd/lib/ContainerdErrors.js +37 -0
- package/dist/cjs/containerd/lib/ContainerdImage.d.ts +149 -0
- package/dist/cjs/containerd/lib/ContainerdImage.js +222 -0
- package/dist/cjs/containerd/options/ContainerdPruneOptions.d.ts +44 -0
- package/dist/cjs/containerd/options/ContainerdPruneOptions.js +51 -0
- package/dist/cjs/containerd/options/ContainerdRegistryAuthOptions.d.ts +32 -0
- package/dist/cjs/containerd/options/ContainerdRegistryAuthOptions.js +45 -0
- package/dist/cjs/containerd/options/container/ContainerCommitOptions.d.ts +57 -0
- package/dist/cjs/containerd/options/container/ContainerCommitOptions.js +66 -0
- package/dist/cjs/containerd/options/container/ContainerCreateOptions.d.ts +273 -0
- package/dist/cjs/containerd/options/container/ContainerCreateOptions.js +239 -0
- package/dist/cjs/containerd/options/container/ContainerExecOptions.d.ts +53 -0
- package/dist/cjs/containerd/options/container/ContainerExecOptions.js +63 -0
- package/dist/cjs/containerd/options/container/ContainerExportDirectoryOptions.d.ts +32 -0
- package/dist/cjs/containerd/options/container/ContainerExportDirectoryOptions.js +45 -0
- package/dist/cjs/containerd/options/container/ContainerKillOptions.d.ts +30 -0
- package/dist/cjs/containerd/options/container/ContainerKillOptions.js +41 -0
- package/dist/cjs/containerd/options/container/ContainerLogsOptions.d.ts +34 -0
- package/dist/cjs/containerd/options/container/ContainerLogsOptions.js +44 -0
- package/dist/cjs/containerd/options/container/ContainerRemoveOptions.d.ts +22 -0
- package/dist/cjs/containerd/options/container/ContainerRemoveOptions.js +34 -0
- package/dist/cjs/containerd/options/container/ContainerResourceOptions.d.ts +63 -0
- package/dist/cjs/containerd/options/container/ContainerResourceOptions.js +67 -0
- package/dist/cjs/containerd/options/container/ContainerStopOptions.d.ts +30 -0
- package/dist/cjs/containerd/options/container/ContainerStopOptions.js +41 -0
- package/dist/cjs/containerd/options/container/ContainerTTYConsoleSizeOptions.d.ts +26 -0
- package/dist/cjs/containerd/options/container/ContainerTTYConsoleSizeOptions.js +40 -0
- package/dist/cjs/containerd/options/container/ContainerTTYOptions.d.ts +50 -0
- package/dist/cjs/containerd/options/container/ContainerTTYOptions.js +63 -0
- package/dist/cjs/containerd/options/image/ImageBuildOptions.d.ts +88 -0
- package/dist/cjs/containerd/options/image/ImageBuildOptions.js +95 -0
- package/dist/cjs/containerd/options/image/ImageExportOptions.d.ts +25 -0
- package/dist/cjs/containerd/options/image/ImageExportOptions.js +39 -0
- package/dist/cjs/containerd/options/image/ImageImportOptions.d.ts +38 -0
- package/dist/cjs/containerd/options/image/ImageImportOptions.js +47 -0
- package/dist/cjs/containerd/options/image/ImagePullOptions.d.ts +53 -0
- package/dist/cjs/containerd/options/image/ImagePullOptions.js +66 -0
- package/dist/cjs/containerd/options/image/ImagePushOptions.d.ts +44 -0
- package/dist/cjs/containerd/options/image/ImagePushOptions.js +58 -0
- package/dist/cjs/containerd/options/network/NetworkCreateOptions.d.ts +82 -0
- package/dist/cjs/containerd/options/network/NetworkCreateOptions.js +83 -0
- package/dist/cjs/containerd/options/volume/VolumeCreateOptions.d.ts +26 -0
- package/dist/cjs/containerd/options/volume/VolumeCreateOptions.js +40 -0
- package/dist/cjs/containerd/types/ContainerdBind.d.ts +28 -0
- package/dist/cjs/containerd/types/ContainerdBind.js +2 -0
- package/dist/cjs/containerd/types/ContainerdBuildOutputCallback.d.ts +6 -0
- package/dist/cjs/containerd/types/ContainerdBuildOutputCallback.js +2 -0
- package/dist/cjs/containerd/types/ContainerdContainerNetwork.d.ts +40 -0
- package/dist/cjs/containerd/types/ContainerdContainerNetwork.js +2 -0
- package/dist/cjs/containerd/types/ContainerdContainerPort.d.ts +22 -0
- package/dist/cjs/containerd/types/ContainerdContainerPort.js +2 -0
- package/dist/cjs/containerd/types/ContainerdContainerState.d.ts +42 -0
- package/dist/cjs/containerd/types/ContainerdContainerState.js +2 -0
- package/dist/cjs/containerd/types/ContainerdContainerStats.d.ts +107 -0
- package/dist/cjs/containerd/types/ContainerdContainerStats.js +2 -0
- package/dist/cjs/containerd/types/ContainerdDevice.d.ts +25 -0
- package/dist/cjs/containerd/types/ContainerdDevice.js +2 -0
- package/dist/cjs/containerd/types/ContainerdExecResult.d.ts +18 -0
- package/dist/cjs/containerd/types/ContainerdExecResult.js +2 -0
- package/dist/cjs/containerd/types/ContainerdImageConfig.d.ts +46 -0
- package/dist/cjs/containerd/types/ContainerdImageConfig.js +2 -0
- package/dist/cjs/containerd/types/ContainerdNetworkInfo.d.ts +49 -0
- package/dist/cjs/containerd/types/ContainerdNetworkInfo.js +2 -0
- package/dist/cjs/containerd/types/ContainerdProgressCallback.d.ts +29 -0
- package/dist/cjs/containerd/types/ContainerdProgressCallback.js +2 -0
- package/dist/cjs/containerd/types/ContainerdPruneResult.d.ts +21 -0
- package/dist/cjs/containerd/types/ContainerdPruneResult.js +2 -0
- package/dist/cjs/containerd/types/ContainerdRestartPolicy.d.ts +13 -0
- package/dist/cjs/containerd/types/ContainerdRestartPolicy.js +2 -0
- package/dist/cjs/containerd/types/ContainerdTmpfs.d.ts +20 -0
- package/dist/cjs/containerd/types/ContainerdTmpfs.js +2 -0
- package/dist/cjs/containerd/types/ContainerdVolume.d.ts +19 -0
- package/dist/cjs/containerd/types/ContainerdVolume.js +2 -0
- package/dist/cjs/containerd/types/ContainerdVolumeInfo.d.ts +26 -0
- package/dist/cjs/containerd/types/ContainerdVolumeInfo.js +2 -0
- package/dist/cjs/exports/Containerd.d.ts +69 -0
- package/dist/cjs/exports/Containerd.js +87 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/client/BuildKit.js +488 -0
- package/dist/esm/client/BuildKitMessages.js +120 -0
- package/dist/esm/client/ContainerStore.js +1339 -0
- package/dist/esm/client/ContainerdClient.js +416 -0
- package/dist/esm/client/DockerIgnore.js +179 -0
- package/dist/esm/client/Fifo.js +59 -0
- package/dist/esm/client/ImageStore.js +628 -0
- package/dist/esm/client/Messages.js +393 -0
- package/dist/esm/client/Networks.js +621 -0
- package/dist/esm/client/Platforms.js +156 -0
- package/dist/esm/client/Reference.js +66 -0
- package/dist/esm/client/Registry.js +263 -0
- package/dist/esm/client/Rootfs.js +234 -0
- package/dist/esm/client/Seccomp.js +152 -0
- package/dist/esm/client/Spec.js +220 -0
- package/dist/esm/client/Volumes.js +73 -0
- package/dist/esm/containerd/Containerd.js +923 -0
- package/dist/esm/containerd/exceptions/ContainerdConnectionException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdContainerNameConflictException.js +11 -0
- package/dist/esm/containerd/exceptions/ContainerdContainerNotFoundException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdContainerStateException.js +13 -0
- package/dist/esm/containerd/exceptions/ContainerdImageBuildException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdImageExportException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdImageImportException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdImageNotFoundException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdImagePullException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdImagePushException.js +11 -0
- package/dist/esm/containerd/exceptions/ContainerdNetworkConflictException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdNetworkNotFoundException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdPathNotFoundException.js +11 -0
- package/dist/esm/containerd/exceptions/ContainerdPlatformException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdVolumeInUseException.js +11 -0
- package/dist/esm/containerd/exceptions/ContainerdVolumeNotFoundException.js +11 -0
- package/dist/esm/containerd/lib/ContainerdContainer.js +533 -0
- package/dist/esm/containerd/lib/ContainerdContainerTTY.js +175 -0
- package/dist/esm/containerd/lib/ContainerdErrors.js +34 -0
- package/dist/esm/containerd/lib/ContainerdImage.js +219 -0
- package/dist/esm/containerd/options/ContainerdPruneOptions.js +47 -0
- package/dist/esm/containerd/options/ContainerdRegistryAuthOptions.js +41 -0
- package/dist/esm/containerd/options/container/ContainerCommitOptions.js +62 -0
- package/dist/esm/containerd/options/container/ContainerCreateOptions.js +235 -0
- package/dist/esm/containerd/options/container/ContainerExecOptions.js +59 -0
- package/dist/esm/containerd/options/container/ContainerExportDirectoryOptions.js +41 -0
- package/dist/esm/containerd/options/container/ContainerKillOptions.js +37 -0
- package/dist/esm/containerd/options/container/ContainerLogsOptions.js +40 -0
- package/dist/esm/containerd/options/container/ContainerRemoveOptions.js +30 -0
- package/dist/esm/containerd/options/container/ContainerResourceOptions.js +63 -0
- package/dist/esm/containerd/options/container/ContainerStopOptions.js +37 -0
- package/dist/esm/containerd/options/container/ContainerTTYConsoleSizeOptions.js +36 -0
- package/dist/esm/containerd/options/container/ContainerTTYOptions.js +59 -0
- package/dist/esm/containerd/options/image/ImageBuildOptions.js +91 -0
- package/dist/esm/containerd/options/image/ImageExportOptions.js +35 -0
- package/dist/esm/containerd/options/image/ImageImportOptions.js +43 -0
- package/dist/esm/containerd/options/image/ImagePullOptions.js +62 -0
- package/dist/esm/containerd/options/image/ImagePushOptions.js +54 -0
- package/dist/esm/containerd/options/network/NetworkCreateOptions.js +79 -0
- package/dist/esm/containerd/options/volume/VolumeCreateOptions.js +36 -0
- package/dist/esm/containerd/types/ContainerdBind.js +1 -0
- package/dist/esm/containerd/types/ContainerdBuildOutputCallback.js +1 -0
- package/dist/esm/containerd/types/ContainerdContainerNetwork.js +1 -0
- package/dist/esm/containerd/types/ContainerdContainerPort.js +1 -0
- package/dist/esm/containerd/types/ContainerdContainerState.js +1 -0
- package/dist/esm/containerd/types/ContainerdContainerStats.js +1 -0
- package/dist/esm/containerd/types/ContainerdDevice.js +1 -0
- package/dist/esm/containerd/types/ContainerdExecResult.js +1 -0
- package/dist/esm/containerd/types/ContainerdImageConfig.js +1 -0
- package/dist/esm/containerd/types/ContainerdNetworkInfo.js +1 -0
- package/dist/esm/containerd/types/ContainerdProgressCallback.js +1 -0
- package/dist/esm/containerd/types/ContainerdPruneResult.js +1 -0
- package/dist/esm/containerd/types/ContainerdRestartPolicy.js +1 -0
- package/dist/esm/containerd/types/ContainerdTmpfs.js +1 -0
- package/dist/esm/containerd/types/ContainerdVolume.js +1 -0
- package/dist/esm/containerd/types/ContainerdVolumeInfo.js +1 -0
- package/dist/esm/exports/Containerd.js +68 -0
- package/dist/types/client/BuildKit.d.ts +176 -0
- package/dist/types/client/BuildKitMessages.d.ts +35 -0
- package/dist/types/client/ContainerStore.d.ts +558 -0
- package/dist/types/client/ContainerdClient.d.ts +244 -0
- package/dist/types/client/DockerIgnore.d.ts +44 -0
- package/dist/types/client/Fifo.d.ts +31 -0
- package/dist/types/client/ImageStore.d.ts +258 -0
- package/dist/types/client/Messages.d.ts +103 -0
- package/dist/types/client/Networks.d.ts +221 -0
- package/dist/types/client/Platforms.d.ts +53 -0
- package/dist/types/client/Reference.d.ts +33 -0
- package/dist/types/client/Registry.d.ts +145 -0
- package/dist/types/client/Rootfs.d.ts +83 -0
- package/dist/types/client/Seccomp.d.ts +36 -0
- package/dist/types/client/Spec.d.ts +151 -0
- package/dist/types/client/Volumes.d.ts +42 -0
- package/dist/types/containerd/Containerd.d.ts +442 -0
- package/dist/types/containerd/exceptions/ContainerdConnectionException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdContainerNameConflictException.d.ts +8 -0
- package/dist/types/containerd/exceptions/ContainerdContainerNotFoundException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdContainerStateException.d.ts +10 -0
- package/dist/types/containerd/exceptions/ContainerdImageBuildException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdImageExportException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdImageImportException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdImageNotFoundException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdImagePullException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdImagePushException.d.ts +8 -0
- package/dist/types/containerd/exceptions/ContainerdNetworkConflictException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdNetworkNotFoundException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdPathNotFoundException.d.ts +8 -0
- package/dist/types/containerd/exceptions/ContainerdPlatformException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdVolumeInUseException.d.ts +8 -0
- package/dist/types/containerd/exceptions/ContainerdVolumeNotFoundException.d.ts +8 -0
- package/dist/types/containerd/lib/ContainerdContainer.d.ts +292 -0
- package/dist/types/containerd/lib/ContainerdContainerTTY.d.ts +116 -0
- package/dist/types/containerd/lib/ContainerdErrors.d.ts +6 -0
- package/dist/types/containerd/lib/ContainerdImage.d.ts +149 -0
- package/dist/types/containerd/options/ContainerdPruneOptions.d.ts +44 -0
- package/dist/types/containerd/options/ContainerdRegistryAuthOptions.d.ts +32 -0
- package/dist/types/containerd/options/container/ContainerCommitOptions.d.ts +57 -0
- package/dist/types/containerd/options/container/ContainerCreateOptions.d.ts +273 -0
- package/dist/types/containerd/options/container/ContainerExecOptions.d.ts +53 -0
- package/dist/types/containerd/options/container/ContainerExportDirectoryOptions.d.ts +32 -0
- package/dist/types/containerd/options/container/ContainerKillOptions.d.ts +30 -0
- package/dist/types/containerd/options/container/ContainerLogsOptions.d.ts +34 -0
- package/dist/types/containerd/options/container/ContainerRemoveOptions.d.ts +22 -0
- package/dist/types/containerd/options/container/ContainerResourceOptions.d.ts +63 -0
- package/dist/types/containerd/options/container/ContainerStopOptions.d.ts +30 -0
- package/dist/types/containerd/options/container/ContainerTTYConsoleSizeOptions.d.ts +26 -0
- package/dist/types/containerd/options/container/ContainerTTYOptions.d.ts +50 -0
- package/dist/types/containerd/options/image/ImageBuildOptions.d.ts +88 -0
- package/dist/types/containerd/options/image/ImageExportOptions.d.ts +25 -0
- package/dist/types/containerd/options/image/ImageImportOptions.d.ts +38 -0
- package/dist/types/containerd/options/image/ImagePullOptions.d.ts +53 -0
- package/dist/types/containerd/options/image/ImagePushOptions.d.ts +44 -0
- package/dist/types/containerd/options/network/NetworkCreateOptions.d.ts +82 -0
- package/dist/types/containerd/options/volume/VolumeCreateOptions.d.ts +26 -0
- package/dist/types/containerd/types/ContainerdBind.d.ts +28 -0
- package/dist/types/containerd/types/ContainerdBuildOutputCallback.d.ts +6 -0
- package/dist/types/containerd/types/ContainerdContainerNetwork.d.ts +40 -0
- package/dist/types/containerd/types/ContainerdContainerPort.d.ts +22 -0
- package/dist/types/containerd/types/ContainerdContainerState.d.ts +42 -0
- package/dist/types/containerd/types/ContainerdContainerStats.d.ts +107 -0
- package/dist/types/containerd/types/ContainerdDevice.d.ts +25 -0
- package/dist/types/containerd/types/ContainerdExecResult.d.ts +18 -0
- package/dist/types/containerd/types/ContainerdImageConfig.d.ts +46 -0
- package/dist/types/containerd/types/ContainerdNetworkInfo.d.ts +49 -0
- package/dist/types/containerd/types/ContainerdProgressCallback.d.ts +29 -0
- package/dist/types/containerd/types/ContainerdPruneResult.d.ts +21 -0
- package/dist/types/containerd/types/ContainerdRestartPolicy.d.ts +13 -0
- package/dist/types/containerd/types/ContainerdTmpfs.d.ts +20 -0
- package/dist/types/containerd/types/ContainerdVolume.d.ts +19 -0
- package/dist/types/containerd/types/ContainerdVolumeInfo.d.ts +26 -0
- package/dist/types/exports/Containerd.d.ts +69 -0
- package/package.json +51 -4
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("../containerd/Containerd.js"), exports);
|
|
18
|
+
/**
|
|
19
|
+
* Lib
|
|
20
|
+
*/
|
|
21
|
+
__exportStar(require("../containerd/lib/ContainerdContainer.js"), exports);
|
|
22
|
+
__exportStar(require("../containerd/lib/ContainerdContainerTTY.js"), exports);
|
|
23
|
+
__exportStar(require("../containerd/lib/ContainerdImage.js"), exports);
|
|
24
|
+
/**
|
|
25
|
+
* Types
|
|
26
|
+
*/
|
|
27
|
+
__exportStar(require("../containerd/types/ContainerdBind.js"), exports);
|
|
28
|
+
__exportStar(require("../containerd/types/ContainerdBuildOutputCallback.js"), exports);
|
|
29
|
+
__exportStar(require("../containerd/types/ContainerdContainerNetwork.js"), exports);
|
|
30
|
+
__exportStar(require("../containerd/types/ContainerdContainerPort.js"), exports);
|
|
31
|
+
__exportStar(require("../containerd/types/ContainerdContainerState.js"), exports);
|
|
32
|
+
__exportStar(require("../containerd/types/ContainerdContainerStats.js"), exports);
|
|
33
|
+
__exportStar(require("../containerd/types/ContainerdDevice.js"), exports);
|
|
34
|
+
__exportStar(require("../containerd/types/ContainerdExecResult.js"), exports);
|
|
35
|
+
__exportStar(require("../containerd/types/ContainerdImageConfig.js"), exports);
|
|
36
|
+
__exportStar(require("../containerd/types/ContainerdNetworkInfo.js"), exports);
|
|
37
|
+
__exportStar(require("../containerd/types/ContainerdPruneResult.js"), exports);
|
|
38
|
+
__exportStar(require("../containerd/types/ContainerdVolume.js"), exports);
|
|
39
|
+
__exportStar(require("../containerd/types/ContainerdVolumeInfo.js"), exports);
|
|
40
|
+
__exportStar(require("../containerd/types/ContainerdProgressCallback.js"), exports);
|
|
41
|
+
__exportStar(require("../containerd/types/ContainerdRestartPolicy.js"), exports);
|
|
42
|
+
__exportStar(require("../containerd/types/ContainerdTmpfs.js"), exports);
|
|
43
|
+
/**
|
|
44
|
+
* Options
|
|
45
|
+
*/
|
|
46
|
+
__exportStar(require("../containerd/options/ContainerdPruneOptions.js"), exports);
|
|
47
|
+
__exportStar(require("../containerd/options/ContainerdRegistryAuthOptions.js"), exports);
|
|
48
|
+
__exportStar(require("../containerd/options/container/ContainerCommitOptions.js"), exports);
|
|
49
|
+
__exportStar(require("../containerd/options/container/ContainerCreateOptions.js"), exports);
|
|
50
|
+
__exportStar(require("../containerd/options/container/ContainerExecOptions.js"), exports);
|
|
51
|
+
__exportStar(require("../containerd/options/container/ContainerKillOptions.js"), exports);
|
|
52
|
+
__exportStar(require("../containerd/options/container/ContainerLogsOptions.js"), exports);
|
|
53
|
+
__exportStar(require("../containerd/options/container/ContainerRemoveOptions.js"), exports);
|
|
54
|
+
__exportStar(require("../containerd/options/container/ContainerExportDirectoryOptions.js"), exports);
|
|
55
|
+
__exportStar(require("../containerd/options/container/ContainerResourceOptions.js"), exports);
|
|
56
|
+
__exportStar(require("../containerd/options/container/ContainerTTYConsoleSizeOptions.js"), exports);
|
|
57
|
+
__exportStar(require("../containerd/options/container/ContainerTTYOptions.js"), exports);
|
|
58
|
+
__exportStar(require("../containerd/options/container/ContainerStopOptions.js"), exports);
|
|
59
|
+
__exportStar(require("../containerd/options/image/ImageBuildOptions.js"), exports);
|
|
60
|
+
__exportStar(require("../containerd/options/image/ImageExportOptions.js"), exports);
|
|
61
|
+
__exportStar(require("../containerd/options/image/ImageImportOptions.js"), exports);
|
|
62
|
+
__exportStar(require("../containerd/options/image/ImagePullOptions.js"), exports);
|
|
63
|
+
__exportStar(require("../containerd/options/image/ImagePushOptions.js"), exports);
|
|
64
|
+
__exportStar(require("../containerd/options/network/NetworkCreateOptions.js"), exports);
|
|
65
|
+
__exportStar(require("../containerd/options/volume/VolumeCreateOptions.js"), exports);
|
|
66
|
+
/**
|
|
67
|
+
* Exceptions
|
|
68
|
+
*/
|
|
69
|
+
__exportStar(require("../containerd/exceptions/ContainerdConnectionException.js"), exports);
|
|
70
|
+
__exportStar(require("../containerd/exceptions/ContainerdContainerNameConflictException.js"), exports);
|
|
71
|
+
__exportStar(require("../containerd/exceptions/ContainerdContainerNotFoundException.js"), exports);
|
|
72
|
+
__exportStar(require("../containerd/exceptions/ContainerdContainerStateException.js"), exports);
|
|
73
|
+
__exportStar(require("../containerd/exceptions/ContainerdImageBuildException.js"), exports);
|
|
74
|
+
__exportStar(require("../containerd/exceptions/ContainerdImageExportException.js"), exports);
|
|
75
|
+
__exportStar(require("../containerd/exceptions/ContainerdImageImportException.js"), exports);
|
|
76
|
+
__exportStar(require("../containerd/exceptions/ContainerdImageNotFoundException.js"), exports);
|
|
77
|
+
__exportStar(require("../containerd/exceptions/ContainerdImagePullException.js"), exports);
|
|
78
|
+
__exportStar(require("../containerd/exceptions/ContainerdImagePushException.js"), exports);
|
|
79
|
+
__exportStar(require("../containerd/exceptions/ContainerdNetworkConflictException.js"), exports);
|
|
80
|
+
__exportStar(require("../containerd/exceptions/ContainerdNetworkNotFoundException.js"), exports);
|
|
81
|
+
__exportStar(require("../containerd/exceptions/ContainerdPathNotFoundException.js"), exports);
|
|
82
|
+
__exportStar(require("../containerd/exceptions/ContainerdPlatformException.js"), exports);
|
|
83
|
+
__exportStar(require("../containerd/exceptions/ContainerdVolumeInUseException.js"), exports);
|
|
84
|
+
__exportStar(require("../containerd/exceptions/ContainerdVolumeNotFoundException.js"), exports);
|
|
85
|
+
|
|
86
|
+
//The default of the entry: the entry itself (scripts/package-build/cjs-package.mjs)
|
|
87
|
+
if (!Object.prototype.hasOwnProperty.call(exports, 'default')) Object.defineProperty(exports, 'default', {value: exports})
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { createWriteStream } from 'node:fs';
|
|
3
|
+
import { lstat, open, readdir, readlink } from 'node:fs/promises';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { Duplex } from 'node:stream';
|
|
6
|
+
import { finished } from 'node:stream/promises';
|
|
7
|
+
import { GRPCError, GRPCServer, GRPCStatus } from '@lakutata/grpc';
|
|
8
|
+
import * as B from './BuildKitMessages.js';
|
|
9
|
+
import { DockerIgnore } from './DockerIgnore.js';
|
|
10
|
+
import { formatPlatform, normalizePlatform } from './Platforms.js';
|
|
11
|
+
import { fetchRegistryToken } from './Registry.js';
|
|
12
|
+
import { timestampDate } from './ContainerdClient.js';
|
|
13
|
+
/**
|
|
14
|
+
* The service of BuildKit
|
|
15
|
+
*/
|
|
16
|
+
const CONTROL = '/moby.buildkit.v1.Control';
|
|
17
|
+
/**
|
|
18
|
+
* The size of the chunks of the files sent
|
|
19
|
+
*/
|
|
20
|
+
const CHUNK_SIZE = 32 * 1024;
|
|
21
|
+
/**
|
|
22
|
+
* The mode of a file as Go writes it (os.FileMode), the one of the stats of fsutil
|
|
23
|
+
* @param stats
|
|
24
|
+
*/
|
|
25
|
+
export function goFileMode(stats) {
|
|
26
|
+
let mode = Number(stats.mode & 511n);
|
|
27
|
+
if (stats.isDirectory())
|
|
28
|
+
mode |= 0x80000000;
|
|
29
|
+
else if (stats.isSymbolicLink())
|
|
30
|
+
mode |= 0x08000000;
|
|
31
|
+
else if (stats.isFIFO())
|
|
32
|
+
mode |= 0x02000000;
|
|
33
|
+
else if (stats.isSocket())
|
|
34
|
+
mode |= 0x01000000;
|
|
35
|
+
else if (stats.isCharacterDevice())
|
|
36
|
+
mode |= 0x04000000 | 0x00200000;
|
|
37
|
+
else if (stats.isBlockDevice())
|
|
38
|
+
mode |= 0x04000000;
|
|
39
|
+
if (stats.mode & 2048n)
|
|
40
|
+
mode |= 0x00800000;
|
|
41
|
+
if (stats.mode & 1024n)
|
|
42
|
+
mode |= 0x00400000;
|
|
43
|
+
if (stats.mode & 512n)
|
|
44
|
+
mode |= 0x00100000;
|
|
45
|
+
return mode >>> 0;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The expression of a pattern of the paths of fsutil (filepath.Match, ** for any directories)
|
|
49
|
+
* @param pattern
|
|
50
|
+
*/
|
|
51
|
+
export function patternExpression(pattern) {
|
|
52
|
+
const normalized = path.posix.normalize(pattern.replace(/\\/g, '/')).replace(/^\/+/, '').replace(/\/+$/, '');
|
|
53
|
+
let expression = '';
|
|
54
|
+
for (let index = 0; index < normalized.length; index++) {
|
|
55
|
+
const character = normalized[index];
|
|
56
|
+
if (character === '*') {
|
|
57
|
+
if (normalized[index + 1] === '*') {
|
|
58
|
+
//**/ any directories, ** anything
|
|
59
|
+
if (normalized[index + 2] === '/') {
|
|
60
|
+
expression += '(?:.*/)?';
|
|
61
|
+
index += 2;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
expression += '.*';
|
|
65
|
+
index++;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
expression += '[^/]*';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else if (character === '?') {
|
|
73
|
+
expression += '[^/]';
|
|
74
|
+
}
|
|
75
|
+
else if (character === '[') {
|
|
76
|
+
const end = normalized.indexOf(']', index + 1);
|
|
77
|
+
if (end < 0) {
|
|
78
|
+
expression += '\\[';
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
expression += `[${normalized.slice(index + 1, end).replace(/^!/, '^').replace(/\\/g, '\\\\')}]`;
|
|
82
|
+
index = end;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
expression += character.replace(/[.+^${}()|\\]/g, '\\$&');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return new RegExp(`^${expression}$`);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* The entries of a directory sent to BuildKit, in the order fsutil walks them (lexical, the directories before their
|
|
93
|
+
* content); the parents of the paths included are included
|
|
94
|
+
* @param root
|
|
95
|
+
* @param filter
|
|
96
|
+
*/
|
|
97
|
+
export async function walkDirectory(root, filter = {}) {
|
|
98
|
+
const include = [...filter.include ?? []];
|
|
99
|
+
//The targets of the symbolic links followed (the Dockerfile linked)
|
|
100
|
+
for (const follow of filter.followPaths ?? []) {
|
|
101
|
+
try {
|
|
102
|
+
const absolute = path.join(root, follow);
|
|
103
|
+
if ((await lstat(absolute)).isSymbolicLink()) {
|
|
104
|
+
const target = await readlink(absolute);
|
|
105
|
+
const relative = path.posix.normalize(path.posix.join(path.posix.dirname(follow), target)).replace(/^\/+/, '');
|
|
106
|
+
if (!relative.startsWith('..'))
|
|
107
|
+
include.push(relative);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
//Not there
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const includes = include.map(patternExpression);
|
|
115
|
+
const literals = include.map((pattern) => path.posix.normalize(pattern).replace(/^\/+/, '').split(/[*?[]/)[0]);
|
|
116
|
+
const ignore = new DockerIgnore((filter.exclude ?? []).join('\n'));
|
|
117
|
+
const included = (relative, directory) => {
|
|
118
|
+
if (!includes.length)
|
|
119
|
+
return 'yes';
|
|
120
|
+
const parts = relative.split('/');
|
|
121
|
+
for (let length = 1; length <= parts.length; length++) {
|
|
122
|
+
const prefix = parts.slice(0, length).join('/');
|
|
123
|
+
if (includes.some((expression) => expression.test(prefix)))
|
|
124
|
+
return 'yes';
|
|
125
|
+
}
|
|
126
|
+
//A parent of a path included
|
|
127
|
+
if (directory && literals.some((literal) => literal.startsWith(`${relative}/`) || (literal === '' && includes.length > 0)))
|
|
128
|
+
return 'parent';
|
|
129
|
+
return 'no';
|
|
130
|
+
};
|
|
131
|
+
const entries = [];
|
|
132
|
+
const walk = async (relativeDirectory) => {
|
|
133
|
+
const names = (await readdir(path.join(root, relativeDirectory))).sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
|
|
134
|
+
for (const name of names) {
|
|
135
|
+
const relative = relativeDirectory ? `${relativeDirectory}/${name}` : name;
|
|
136
|
+
const absolute = path.join(root, relative);
|
|
137
|
+
const stats = await lstat(absolute, { bigint: true });
|
|
138
|
+
const directory = stats.isDirectory();
|
|
139
|
+
if (ignore.ignores(relative))
|
|
140
|
+
continue;
|
|
141
|
+
const inclusion = included(relative, directory);
|
|
142
|
+
if (inclusion === 'no')
|
|
143
|
+
continue;
|
|
144
|
+
//The sockets are not sent
|
|
145
|
+
if (stats.isSocket())
|
|
146
|
+
continue;
|
|
147
|
+
const stat = {
|
|
148
|
+
path: relative,
|
|
149
|
+
mode: goFileMode(stats),
|
|
150
|
+
uid: Number(stats.uid),
|
|
151
|
+
gid: Number(stats.gid),
|
|
152
|
+
modTime: stats.mtimeNs
|
|
153
|
+
};
|
|
154
|
+
if (!directory)
|
|
155
|
+
stat.size = Number(stats.size);
|
|
156
|
+
if (stats.isSymbolicLink())
|
|
157
|
+
stat.linkname = await readlink(absolute);
|
|
158
|
+
if (stats.isCharacterDevice() || stats.isBlockDevice()) {
|
|
159
|
+
stat.devmajor = Number(((stats.rdev >> 8n) & 0xfffn) | ((stats.rdev >> 32n) & ~0xfffn));
|
|
160
|
+
stat.devminor = Number((stats.rdev & 0xffn) | ((stats.rdev >> 12n) & ~0xffn));
|
|
161
|
+
}
|
|
162
|
+
entries.push({ path: relative, absolute: absolute, stat: stat, file: stats.isFile() });
|
|
163
|
+
if (directory) {
|
|
164
|
+
const before = entries.length;
|
|
165
|
+
await walk(relative);
|
|
166
|
+
//A parent without any path included under it
|
|
167
|
+
if (inclusion === 'parent' && entries.length === before)
|
|
168
|
+
entries.pop();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
await walk('');
|
|
173
|
+
return entries;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Send a directory as fsutil sends it (FileSync.DiffCopy): its stats, then the files the receiver requests, until it
|
|
177
|
+
* finishes
|
|
178
|
+
* @param call
|
|
179
|
+
* @param root
|
|
180
|
+
*/
|
|
181
|
+
export async function sendDirectory(call, root) {
|
|
182
|
+
const entries = await walkDirectory(root, {
|
|
183
|
+
include: call.metadata('include-patterns'),
|
|
184
|
+
exclude: call.metadata('exclude-patterns'),
|
|
185
|
+
followPaths: call.metadata('followpaths')
|
|
186
|
+
});
|
|
187
|
+
let pending = Promise.resolve();
|
|
188
|
+
const sendFile = async (id) => {
|
|
189
|
+
const entry = entries[id];
|
|
190
|
+
if (!entry)
|
|
191
|
+
throw new GRPCError(GRPCStatus.INVALID_ARGUMENT, `The file ${id} is not sent`, call.path);
|
|
192
|
+
if (entry.file) {
|
|
193
|
+
const handle = await open(entry.absolute, 'r');
|
|
194
|
+
try {
|
|
195
|
+
const buffer = Buffer.alloc(CHUNK_SIZE);
|
|
196
|
+
for (;;) {
|
|
197
|
+
const { bytesRead } = await handle.read(buffer, 0, CHUNK_SIZE, null);
|
|
198
|
+
if (!bytesRead)
|
|
199
|
+
break;
|
|
200
|
+
await call.send(B.Packet, { type: B.PacketType.DATA, id: id, data: Buffer.from(buffer.subarray(0, bytesRead)) });
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
finally {
|
|
204
|
+
await handle.close();
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
await call.send(B.Packet, { type: B.PacketType.DATA, id: id });
|
|
208
|
+
};
|
|
209
|
+
const receiving = (async () => {
|
|
210
|
+
for await (const packet of call.requests(B.Packet)) {
|
|
211
|
+
switch (packet.type ?? B.PacketType.STAT) {
|
|
212
|
+
case B.PacketType.REQ: {
|
|
213
|
+
const id = packet.id ?? 0;
|
|
214
|
+
pending = pending.then(() => sendFile(id));
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
case B.PacketType.FIN:
|
|
218
|
+
await pending;
|
|
219
|
+
await call.send(B.Packet, { type: B.PacketType.FIN });
|
|
220
|
+
return;
|
|
221
|
+
case B.PacketType.ERR:
|
|
222
|
+
throw new GRPCError(GRPCStatus.ABORTED, `The receiver of ${root} failed: ${Buffer.from(packet.data ?? []).toString()}`, call.path);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
})();
|
|
226
|
+
receiving.catch(() => undefined);
|
|
227
|
+
for (const entry of entries)
|
|
228
|
+
await call.send(B.Packet, { type: B.PacketType.STAT, stat: entry.stat });
|
|
229
|
+
await call.send(B.Packet, { type: B.PacketType.STAT });
|
|
230
|
+
await receiving;
|
|
231
|
+
await pending;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* A session of BuildKit: a connection of HTTP/2 in the stream of Control.Session, where the daemon calls its methods
|
|
235
|
+
* (the files of the directories of the build, the results exported, the credentials of the registries, its health)
|
|
236
|
+
*/
|
|
237
|
+
export class BuildKitSession {
|
|
238
|
+
#server;
|
|
239
|
+
#stream;
|
|
240
|
+
constructor(options) {
|
|
241
|
+
this.options = options;
|
|
242
|
+
this.id = randomBytes(16).toString('hex');
|
|
243
|
+
this.#server = new GRPCServer();
|
|
244
|
+
this.#server.method('/grpc.health.v1.Health/Check', async (call) => {
|
|
245
|
+
await call.request(B.HealthCheckRequest);
|
|
246
|
+
await call.send(B.HealthCheckResponse, { status: 1 });
|
|
247
|
+
});
|
|
248
|
+
this.#server.method('/moby.filesync.v1.FileSync/DiffCopy', async (call) => {
|
|
249
|
+
const name = call.metadata('dir-name')[0] ?? '';
|
|
250
|
+
const directory = this.options.directories[name];
|
|
251
|
+
if (!directory)
|
|
252
|
+
throw new GRPCError(GRPCStatus.NOT_FOUND, `The session has no directory ${name}`, call.path);
|
|
253
|
+
await sendDirectory(call, directory);
|
|
254
|
+
});
|
|
255
|
+
if (this.options.output) {
|
|
256
|
+
this.#server.method('/moby.filesync.v1.FileSend/DiffCopy', async (call) => {
|
|
257
|
+
const output = this.options.output();
|
|
258
|
+
try {
|
|
259
|
+
for await (const message of call.requests(B.BytesMessage)) {
|
|
260
|
+
if (!message.data?.length)
|
|
261
|
+
continue;
|
|
262
|
+
if (!output.write(Buffer.from(message.data)))
|
|
263
|
+
await new Promise((resolve) => void output.once('drain', resolve));
|
|
264
|
+
}
|
|
265
|
+
output.end();
|
|
266
|
+
await finished(output);
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
output.destroy(error);
|
|
270
|
+
throw error;
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
this.#server.method('/moby.filesync.v1.Auth/Credentials', async (call) => {
|
|
275
|
+
const host = (await call.request(B.CredentialsRequest)).host ?? '';
|
|
276
|
+
const credentials = this.credentials(host);
|
|
277
|
+
await call.send(B.CredentialsResponse, credentials?.identityToken ? { secret: credentials.identityToken } : { username: credentials?.username ?? '', secret: credentials?.password ?? '' });
|
|
278
|
+
});
|
|
279
|
+
this.#server.method('/moby.filesync.v1.Auth/FetchToken', async (call) => {
|
|
280
|
+
const request = await call.request(B.FetchTokenRequest);
|
|
281
|
+
const token = await fetchRegistryToken({ realm: request.realm, service: request.service, scopes: request.scopes ?? [] }, this.credentials(request.host ?? ''));
|
|
282
|
+
if (!token)
|
|
283
|
+
throw new GRPCError(GRPCStatus.UNAUTHENTICATED, `The registry ${request.host} gives no token`, call.path);
|
|
284
|
+
await call.send(B.FetchTokenResponse, { token: token.token, expiresIn: token.expiresIn ?? 0, issuedAt: token.issuedAt ?? 0 });
|
|
285
|
+
});
|
|
286
|
+
for (const method of ['GetTokenAuthority', 'VerifyTokenAuthority']) {
|
|
287
|
+
this.#server.method(`/moby.filesync.v1.Auth/${method}`, async (call) => {
|
|
288
|
+
throw new GRPCError(GRPCStatus.UNIMPLEMENTED, `${method} is not implemented`, call.path);
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* The credentials of a host of a registry (Docker Hub by its names)
|
|
294
|
+
* @param host
|
|
295
|
+
* @protected
|
|
296
|
+
*/
|
|
297
|
+
credentials(host) {
|
|
298
|
+
const registry = ['registry-1.docker.io', 'index.docker.io', 'registry.hub.docker.com'].includes(host) ? 'docker.io' : host;
|
|
299
|
+
return this.options.credentials?.(registry) ?? (registry === host ? undefined : this.options.credentials?.(host));
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Open the session: the stream of Control.Session, the methods of the session exposed by its headers
|
|
303
|
+
* @param connection
|
|
304
|
+
* @param signal
|
|
305
|
+
*/
|
|
306
|
+
start(connection, signal) {
|
|
307
|
+
const options = {
|
|
308
|
+
metadata: {
|
|
309
|
+
'x-docker-expose-session-uuid': this.id,
|
|
310
|
+
'x-docker-expose-session-name': this.options.name,
|
|
311
|
+
'x-docker-expose-session-sharedkey': this.options.sharedKey,
|
|
312
|
+
'x-docker-expose-session-grpc-method': this.#server.methods
|
|
313
|
+
},
|
|
314
|
+
signal: signal
|
|
315
|
+
};
|
|
316
|
+
const stream = connection.bidi(`${CONTROL}/Session`, B.BytesMessage, B.BytesMessage, options);
|
|
317
|
+
this.#stream = stream;
|
|
318
|
+
const socket = new Duplex({
|
|
319
|
+
write: (chunk, _encoding, callback) => {
|
|
320
|
+
stream.send({ data: chunk }).then(() => callback(), (error) => callback(error));
|
|
321
|
+
},
|
|
322
|
+
final: (callback) => {
|
|
323
|
+
stream.end();
|
|
324
|
+
callback();
|
|
325
|
+
},
|
|
326
|
+
read: () => undefined
|
|
327
|
+
});
|
|
328
|
+
(async () => {
|
|
329
|
+
for await (const message of stream.responses)
|
|
330
|
+
if (message.data?.length)
|
|
331
|
+
socket.push(Buffer.from(message.data));
|
|
332
|
+
socket.push(null);
|
|
333
|
+
})().catch(() => {
|
|
334
|
+
socket.push(null);
|
|
335
|
+
});
|
|
336
|
+
this.#server.serve(socket);
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Close the session
|
|
340
|
+
*/
|
|
341
|
+
close() {
|
|
342
|
+
this.#stream?.end();
|
|
343
|
+
this.#stream?.cancel();
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* The lines of the progress of a build, as "docker build --progress=plain" shows them: the steps are numbered in their
|
|
348
|
+
* order ("#3 [2/2] RUN npm ci"), with their output, and whether they are cached, done ("#3 DONE 1.2s") or failed
|
|
349
|
+
*/
|
|
350
|
+
export class BuildKitProgress {
|
|
351
|
+
#steps = new Map();
|
|
352
|
+
#pending = new Map();
|
|
353
|
+
step(digest) {
|
|
354
|
+
let step = this.#steps.get(digest);
|
|
355
|
+
if (!step)
|
|
356
|
+
this.#steps.set(digest, step = { number: this.#steps.size + 1, started: false, ended: false });
|
|
357
|
+
return step;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* The lines of a status of the build
|
|
361
|
+
* @param status
|
|
362
|
+
*/
|
|
363
|
+
lines(status) {
|
|
364
|
+
const lines = [];
|
|
365
|
+
for (const vertex of status.vertexes ?? []) {
|
|
366
|
+
const step = this.step(vertex.digest);
|
|
367
|
+
const started = timestampDate(vertex.started);
|
|
368
|
+
const completed = timestampDate(vertex.completed);
|
|
369
|
+
if (!step.started && (started || vertex.cached)) {
|
|
370
|
+
step.started = true;
|
|
371
|
+
lines.push(`#${step.number} ${vertex.name}`);
|
|
372
|
+
}
|
|
373
|
+
if (step.ended)
|
|
374
|
+
continue;
|
|
375
|
+
if (vertex.cached) {
|
|
376
|
+
step.ended = true;
|
|
377
|
+
lines.push(`#${step.number} CACHED`);
|
|
378
|
+
}
|
|
379
|
+
else if (vertex.error) {
|
|
380
|
+
step.ended = true;
|
|
381
|
+
lines.push(...this.flush(vertex.digest), `#${step.number} ERROR: ${vertex.error}`);
|
|
382
|
+
}
|
|
383
|
+
else if (completed) {
|
|
384
|
+
step.ended = true;
|
|
385
|
+
const seconds = started ? ` ${((completed.getTime() - started.getTime()) / 1000).toFixed(1)}s` : '';
|
|
386
|
+
lines.push(...this.flush(vertex.digest), `#${step.number} DONE${seconds}`);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
for (const log of status.logs ?? []) {
|
|
390
|
+
const output = (this.#pending.get(log.vertex) ?? '') + Buffer.from(log.msg ?? []).toString();
|
|
391
|
+
const parts = output.split(/\r?\n/);
|
|
392
|
+
this.#pending.set(log.vertex, parts.pop());
|
|
393
|
+
const number = this.step(log.vertex).number;
|
|
394
|
+
parts.forEach((part) => lines.push(`#${number} ${part}`));
|
|
395
|
+
}
|
|
396
|
+
for (const warning of status.warnings ?? [])
|
|
397
|
+
lines.push(`#${this.step(warning.vertex).number} WARN: ${Buffer.from(warning.short ?? []).toString()}`);
|
|
398
|
+
return lines;
|
|
399
|
+
}
|
|
400
|
+
flush(digest) {
|
|
401
|
+
const pending = this.#pending.get(digest);
|
|
402
|
+
this.#pending.delete(digest);
|
|
403
|
+
return pending ? [`#${this.step(digest).number} ${pending}`] : [];
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Build an image with BuildKit (its Dockerfile frontend): its context and its Dockerfile sent by the session, the image
|
|
408
|
+
* exported to the client as an archive (the oci exporter); the daemon is local or remote, of any worker
|
|
409
|
+
* @param connection
|
|
410
|
+
* @param options
|
|
411
|
+
*/
|
|
412
|
+
export async function buildKitBuild(connection, options) {
|
|
413
|
+
const context = path.resolve(options.context);
|
|
414
|
+
const dockerfile = path.resolve(context, options.dockerfile ?? 'Dockerfile');
|
|
415
|
+
const session = new BuildKitSession({
|
|
416
|
+
name: options.name,
|
|
417
|
+
sharedKey: context,
|
|
418
|
+
directories: { context: context, dockerfile: path.dirname(dockerfile) },
|
|
419
|
+
credentials: options.credentials,
|
|
420
|
+
output: () => createWriteStream(options.output)
|
|
421
|
+
});
|
|
422
|
+
const abort = new AbortController();
|
|
423
|
+
const signal = options.signal ? AbortSignal.any([options.signal, abort.signal]) : abort.signal;
|
|
424
|
+
session.start(connection, signal);
|
|
425
|
+
const ref = randomBytes(16).toString('hex');
|
|
426
|
+
const progress = new BuildKitProgress();
|
|
427
|
+
const status = (async () => {
|
|
428
|
+
if (!options.progress)
|
|
429
|
+
return;
|
|
430
|
+
for await (const response of connection.serverStream(`${CONTROL}/Status`, B.StatusRequest, { ref: ref }, B.StatusResponse, { signal: signal })) {
|
|
431
|
+
for (const line of progress.lines(response))
|
|
432
|
+
options.progress(line);
|
|
433
|
+
}
|
|
434
|
+
})().catch(() => undefined);
|
|
435
|
+
const frontendAttrs = { filename: path.basename(dockerfile) };
|
|
436
|
+
if (options.target)
|
|
437
|
+
frontendAttrs.target = options.target;
|
|
438
|
+
for (const [key, value] of Object.entries(options.buildArgs ?? {}))
|
|
439
|
+
frontendAttrs[`build-arg:${key}`] = value;
|
|
440
|
+
for (const [key, value] of Object.entries(options.labels ?? {}))
|
|
441
|
+
frontendAttrs[`label:${key}`] = value;
|
|
442
|
+
if (options.platforms?.length)
|
|
443
|
+
frontendAttrs.platform = options.platforms.map((platform) => formatPlatform(normalizePlatform(platform))).join(',');
|
|
444
|
+
if (options.noCache)
|
|
445
|
+
frontendAttrs['no-cache'] = '';
|
|
446
|
+
if (options.pull)
|
|
447
|
+
frontendAttrs['image-resolve-mode'] = 'pull';
|
|
448
|
+
try {
|
|
449
|
+
const response = await connection.unary(`${CONTROL}/Solve`, B.SolveRequest, {
|
|
450
|
+
ref: ref,
|
|
451
|
+
session: session.id,
|
|
452
|
+
frontend: 'dockerfile.v0',
|
|
453
|
+
frontendAttrs: frontendAttrs,
|
|
454
|
+
exporter: 'oci',
|
|
455
|
+
exporterAttrs: { name: options.name }
|
|
456
|
+
}, B.SolveResponse, { signal: signal });
|
|
457
|
+
await status;
|
|
458
|
+
return response.exporterResponse ?? {};
|
|
459
|
+
}
|
|
460
|
+
finally {
|
|
461
|
+
abort.abort();
|
|
462
|
+
session.close();
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* The version of BuildKit
|
|
467
|
+
* @param connection
|
|
468
|
+
*/
|
|
469
|
+
export async function buildKitVersion(connection) {
|
|
470
|
+
const response = await connection.unary(`${CONTROL}/Info`, {}, {}, B.InfoResponse);
|
|
471
|
+
return { package: response.buildkitVersion?.package ?? '', version: response.buildkitVersion?.version ?? '', revision: response.buildkitVersion?.revision ?? '' };
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* The platforms the workers of BuildKit build
|
|
475
|
+
* @param connection
|
|
476
|
+
*/
|
|
477
|
+
export async function buildKitPlatforms(connection) {
|
|
478
|
+
const response = await connection.unary(`${CONTROL}/ListWorkers`, B.ListWorkersRequest, {}, B.ListWorkersResponse);
|
|
479
|
+
const platforms = [];
|
|
480
|
+
for (const record of response.record ?? []) {
|
|
481
|
+
for (const platform of record.platforms ?? []) {
|
|
482
|
+
const normalized = normalizePlatform({ os: platform.os, architecture: platform.architecture, variant: platform.variant || undefined });
|
|
483
|
+
if (!platforms.some((known) => formatPlatform(known) === formatPlatform(normalized)))
|
|
484
|
+
platforms.push(normalized);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
return platforms;
|
|
488
|
+
}
|