diff --git a/Tasks/AzureCloudPowerShellDeploymentV1/task.json b/Tasks/AzureCloudPowerShellDeploymentV1/task.json index e5aac4521497..a194321c8959 100644 --- a/Tasks/AzureCloudPowerShellDeploymentV1/task.json +++ b/Tasks/AzureCloudPowerShellDeploymentV1/task.json @@ -16,8 +16,8 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 237, - "Patch": 5 + "Minor": 238, + "Patch": 0 }, "demands": [ "azureps" diff --git a/Tasks/AzureCloudPowerShellDeploymentV1/task.loc.json b/Tasks/AzureCloudPowerShellDeploymentV1/task.loc.json index 06408cb3552a..0a2b909e6719 100644 --- a/Tasks/AzureCloudPowerShellDeploymentV1/task.loc.json +++ b/Tasks/AzureCloudPowerShellDeploymentV1/task.loc.json @@ -16,8 +16,8 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 237, - "Patch": 5 + "Minor": 238, + "Patch": 0 }, "demands": [ "azureps" diff --git a/Tasks/AzureCloudPowerShellDeploymentV2/task.json b/Tasks/AzureCloudPowerShellDeploymentV2/task.json index df43166a3f3e..42978bbf242a 100644 --- a/Tasks/AzureCloudPowerShellDeploymentV2/task.json +++ b/Tasks/AzureCloudPowerShellDeploymentV2/task.json @@ -16,8 +16,8 @@ "author": "Microsoft Corporation", "version": { "Major": 2, - "Minor": 237, - "Patch": 5 + "Minor": 238, + "Patch": 0 }, "demands": [ "azureps" diff --git a/Tasks/AzureCloudPowerShellDeploymentV2/task.loc.json b/Tasks/AzureCloudPowerShellDeploymentV2/task.loc.json index 437344282bc1..715f38806133 100644 --- a/Tasks/AzureCloudPowerShellDeploymentV2/task.loc.json +++ b/Tasks/AzureCloudPowerShellDeploymentV2/task.loc.json @@ -16,8 +16,8 @@ "author": "Microsoft Corporation", "version": { "Major": 2, - "Minor": 237, - "Patch": 5 + "Minor": 238, + "Patch": 0 }, "demands": [ "azureps" diff --git a/Tasks/AzureFileCopyV1/task.json b/Tasks/AzureFileCopyV1/task.json index 60e9672e18d5..b9fbdb28c79f 100644 --- a/Tasks/AzureFileCopyV1/task.json +++ b/Tasks/AzureFileCopyV1/task.json @@ -14,7 +14,7 @@ "version": { "Major": 1, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "demands": [ "azureps" diff --git a/Tasks/AzureFileCopyV1/task.loc.json b/Tasks/AzureFileCopyV1/task.loc.json index cb36b55e92ec..8bae3364f11c 100644 --- a/Tasks/AzureFileCopyV1/task.loc.json +++ b/Tasks/AzureFileCopyV1/task.loc.json @@ -14,7 +14,7 @@ "version": { "Major": 1, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "demands": [ "azureps" diff --git a/Tasks/AzureFileCopyV2/task.json b/Tasks/AzureFileCopyV2/task.json index a9697e6df4a0..a116d1091aa1 100644 --- a/Tasks/AzureFileCopyV2/task.json +++ b/Tasks/AzureFileCopyV2/task.json @@ -14,7 +14,7 @@ "version": { "Major": 2, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "demands": [ "azureps" diff --git a/Tasks/AzureFileCopyV2/task.loc.json b/Tasks/AzureFileCopyV2/task.loc.json index 76ccc0f0a820..a46d835741c7 100644 --- a/Tasks/AzureFileCopyV2/task.loc.json +++ b/Tasks/AzureFileCopyV2/task.loc.json @@ -14,7 +14,7 @@ "version": { "Major": 2, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "demands": [ "azureps" diff --git a/Tasks/AzureFileCopyV3/task.json b/Tasks/AzureFileCopyV3/task.json index 8e427feee6cc..163594d28583 100644 --- a/Tasks/AzureFileCopyV3/task.json +++ b/Tasks/AzureFileCopyV3/task.json @@ -14,7 +14,7 @@ "version": { "Major": 3, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "demands": [ "azureps" diff --git a/Tasks/AzureFileCopyV3/task.loc.json b/Tasks/AzureFileCopyV3/task.loc.json index 66cd178c4b91..44e08b841cdb 100644 --- a/Tasks/AzureFileCopyV3/task.loc.json +++ b/Tasks/AzureFileCopyV3/task.loc.json @@ -14,7 +14,7 @@ "version": { "Major": 3, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "demands": [ "azureps" diff --git a/Tasks/AzureFileCopyV4/task.json b/Tasks/AzureFileCopyV4/task.json index 4c742552b93c..d3cce2af212c 100644 --- a/Tasks/AzureFileCopyV4/task.json +++ b/Tasks/AzureFileCopyV4/task.json @@ -14,7 +14,7 @@ "version": { "Major": 4, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "demands": [ "azureps" diff --git a/Tasks/AzureFileCopyV4/task.loc.json b/Tasks/AzureFileCopyV4/task.loc.json index d1e8bf441aec..f1ede6b8c92c 100644 --- a/Tasks/AzureFileCopyV4/task.loc.json +++ b/Tasks/AzureFileCopyV4/task.loc.json @@ -14,7 +14,7 @@ "version": { "Major": 4, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "demands": [ "azureps" diff --git a/Tasks/AzureFileCopyV5/task.json b/Tasks/AzureFileCopyV5/task.json index c636fd23dcb6..386da967ce7a 100644 --- a/Tasks/AzureFileCopyV5/task.json +++ b/Tasks/AzureFileCopyV5/task.json @@ -14,7 +14,7 @@ "version": { "Major": 5, "Minor": 238, - "Patch": 2 + "Patch": 4 }, "demands": [ "azureps" diff --git a/Tasks/AzureFileCopyV5/task.loc.json b/Tasks/AzureFileCopyV5/task.loc.json index 036e1bf0fc0e..1e714565e35c 100644 --- a/Tasks/AzureFileCopyV5/task.loc.json +++ b/Tasks/AzureFileCopyV5/task.loc.json @@ -14,7 +14,7 @@ "version": { "Major": 5, "Minor": 238, - "Patch": 2 + "Patch": 4 }, "demands": [ "azureps" diff --git a/Tasks/AzureFileCopyV6/task.json b/Tasks/AzureFileCopyV6/task.json index 0a1652d652b7..941a2ffc2230 100644 --- a/Tasks/AzureFileCopyV6/task.json +++ b/Tasks/AzureFileCopyV6/task.json @@ -14,7 +14,7 @@ "version": { "Major": 6, "Minor": 238, - "Patch": 2 + "Patch": 4 }, "demands": [ "azureps" diff --git a/Tasks/AzureFileCopyV6/task.loc.json b/Tasks/AzureFileCopyV6/task.loc.json index 103a04c8c8c4..b375c6541400 100644 --- a/Tasks/AzureFileCopyV6/task.loc.json +++ b/Tasks/AzureFileCopyV6/task.loc.json @@ -14,7 +14,7 @@ "version": { "Major": 6, "Minor": 238, - "Patch": 2 + "Patch": 4 }, "demands": [ "azureps" diff --git a/Tasks/AzurePowerShellV2/task.json b/Tasks/AzurePowerShellV2/task.json index 908ba1fd37cd..65e12de39bb8 100644 --- a/Tasks/AzurePowerShellV2/task.json +++ b/Tasks/AzurePowerShellV2/task.json @@ -17,8 +17,8 @@ "author": "Microsoft Corporation", "version": { "Major": 2, - "Minor": 237, - "Patch": 6 + "Minor": 238, + "Patch": 0 }, "demands": [ "azureps" diff --git a/Tasks/AzurePowerShellV2/task.loc.json b/Tasks/AzurePowerShellV2/task.loc.json index 1513196d4d46..64b0082cd6b6 100644 --- a/Tasks/AzurePowerShellV2/task.loc.json +++ b/Tasks/AzurePowerShellV2/task.loc.json @@ -17,8 +17,8 @@ "author": "Microsoft Corporation", "version": { "Major": 2, - "Minor": 237, - "Patch": 6 + "Minor": 238, + "Patch": 0 }, "demands": [ "azureps" diff --git a/Tasks/AzurePowerShellV3/task.json b/Tasks/AzurePowerShellV3/task.json index cec52cbd2854..fffe4fb7ac33 100644 --- a/Tasks/AzurePowerShellV3/task.json +++ b/Tasks/AzurePowerShellV3/task.json @@ -17,7 +17,7 @@ "author": "Microsoft Corporation", "version": { "Major": 3, - "Minor": 237, + "Minor": 238, "Patch": 6 }, "releaseNotes": "Added support for Fail on standard error and ErrorActionPreference", diff --git a/Tasks/AzurePowerShellV3/task.loc.json b/Tasks/AzurePowerShellV3/task.loc.json index c8718c69b278..5ec0c9f363cf 100644 --- a/Tasks/AzurePowerShellV3/task.loc.json +++ b/Tasks/AzurePowerShellV3/task.loc.json @@ -17,7 +17,7 @@ "author": "Microsoft Corporation", "version": { "Major": 3, - "Minor": 237, + "Minor": 238, "Patch": 6 }, "releaseNotes": "ms-resource:loc.releaseNotes", diff --git a/Tasks/AzurePowerShellV4/task.json b/Tasks/AzurePowerShellV4/task.json index d02be179e3f1..2a51368db7cf 100644 --- a/Tasks/AzurePowerShellV4/task.json +++ b/Tasks/AzurePowerShellV4/task.json @@ -18,7 +18,7 @@ "version": { "Major": 4, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "releaseNotes": "Added support for Az Module and cross platform agents.", "groups": [ diff --git a/Tasks/AzurePowerShellV4/task.loc.json b/Tasks/AzurePowerShellV4/task.loc.json index 8f0749c0c5ff..10d1d2132ba2 100644 --- a/Tasks/AzurePowerShellV4/task.loc.json +++ b/Tasks/AzurePowerShellV4/task.loc.json @@ -18,7 +18,7 @@ "version": { "Major": 4, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "releaseNotes": "ms-resource:loc.releaseNotes", "groups": [ diff --git a/Tasks/AzurePowerShellV5/task.json b/Tasks/AzurePowerShellV5/task.json index f4782e992b1c..2a42dc7f976a 100644 --- a/Tasks/AzurePowerShellV5/task.json +++ b/Tasks/AzurePowerShellV5/task.json @@ -18,7 +18,7 @@ "version": { "Major": 5, "Minor": 238, - "Patch": 4 + "Patch": 6 }, "releaseNotes": "Added support for Az Module and cross platform agents.", "groups": [ diff --git a/Tasks/AzurePowerShellV5/task.loc.json b/Tasks/AzurePowerShellV5/task.loc.json index 5e6656abef17..55c6892716e8 100644 --- a/Tasks/AzurePowerShellV5/task.loc.json +++ b/Tasks/AzurePowerShellV5/task.loc.json @@ -18,7 +18,7 @@ "version": { "Major": 5, "Minor": 238, - "Patch": 4 + "Patch": 6 }, "releaseNotes": "ms-resource:loc.releaseNotes", "groups": [ diff --git a/Tasks/Common/VstsAzureHelpers_/Strings/resources.resjson/en-US/resources.resjson b/Tasks/Common/VstsAzureHelpers_/Strings/resources.resjson/en-US/resources.resjson index 2d73eaf77eb1..feb67c5e9219 100644 --- a/Tasks/Common/VstsAzureHelpers_/Strings/resources.resjson/en-US/resources.resjson +++ b/Tasks/Common/VstsAzureHelpers_/Strings/resources.resjson/en-US/resources.resjson @@ -13,5 +13,6 @@ "loc.messages.AZ_InvalidARMEndpoint": "Specified AzureRM endpoint is invalid.", "loc.messages.AZ_MsiAccessNotConfiguredProperlyFailure": "Could not fetch access token for Managed Identity. Please configure Managed Identity for virtual machine 'https://aka.ms/azure-msi-docs'. Status code: '{0}', Error message: {1}", "loc.messages.AZ_MsiAccessTokenFetchFailure": "Could not fetch access token for Managed Identity. Status code: '{0}', Error message: {1}", - "loc.messages.AZ_MsiFailure": "Could not fetch access token for Managed Identity. {0}" + "loc.messages.AZ_MsiFailure": "Could not fetch access token for Managed Identity. {0}", + "loc.messages.AZ_ExpiredServicePrincipalMessageWithLink": "Secret expired, update service connection at {0} See https://aka.ms/azdo-rm-workload-identity-conversion to learn more about conversion to secret-less service connections." } \ No newline at end of file diff --git a/Tasks/DockerV0/task.json b/Tasks/DockerV0/task.json index 785c8109c8b4..a3ffab68ab3a 100644 --- a/Tasks/DockerV0/task.json +++ b/Tasks/DockerV0/task.json @@ -1,364 +1,364 @@ { - "id": "E28912F1-0114-4464-802A-A3A35437FD16", - "name": "Docker", - "friendlyName": "Docker", - "description": "Build, tag, push, or run Docker images, or run a Docker command", - "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/docker", - "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=848006)", - "category": "Build", - "visibility": [ - "Build", - "Release" - ], - "author": "Microsoft Corporation", - "version": { - "Major": 0, - "Minor": 225, - "Patch": 1 - }, - "demands": [], - "preview": "false", - "groups": [ - { - "name": "advanced", - "displayName": "Advanced Options", - "isExpanded": false - } - ], - "inputs": [ - { - "name": "containerregistrytype", - "type": "pickList", - "label": "Container Registry Type", - "defaultValue": "Azure Container Registry", - "required": true, - "options": { - "Azure Container Registry": "Azure Container Registry", - "Container Registry": "Container Registry" - }, - "helpMarkDown": "Select 'Azure Container Registry' to connect to it by using an Azure Service Connection. Select 'Container registry' to connect to Docker Hub or any other private container registry." - }, - { - "name": "dockerRegistryEndpoint", - "aliases": [ - "dockerRegistryConnection" - ], - "type": "connectedService:dockerregistry", - "label": "Docker Registry Service Connection", - "helpMarkDown": "Select a Docker registry service connection. Required for commands that need to authenticate with a registry.", - "visibleRule": "containerregistrytype = Container Registry" - }, - { - "name": "azureSubscriptionEndpoint", - "aliases": [ - "azureSubscription" - ], - "type": "connectedService:AzureRM", - "label": "Azure subscription", - "helpMarkDown": "Select an Azure subscription", - "visibleRule": "containerregistrytype = Azure Container Registry" - }, - { - "name": "azureContainerRegistry", - "label": "Azure Container Registry", - "type": "pickList", - "helpMarkDown": "Select an Azure Container Registry in the selected Azure Subscription. The container image will be built and pushed to this container registry.", - "visibleRule": "containerregistrytype = Azure Container Registry", - "defaultValue": "", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "action", - "type": "pickList", - "label": "Action", - "defaultValue": "Build an image", - "required": true, - "options": { - "Build an image": "Build an image", - "Tag images": "Tag images", - "Push an image": "Push an image", - "Push images": "Push images", - "Run an image": "Run an image", - "Run a Docker command": "Run a Docker command" - }, - "helpMarkDown": "Select a Docker action." - }, - { - "name": "dockerFile", - "type": "filePath", - "label": "Docker File", - "defaultValue": "**/Dockerfile", - "required": true, - "visibleRule": "action = Build an image", - "helpMarkDown": "Path to the Dockerfile." - }, - { - "name": "addBaseImageData", - "type": "boolean", - "label": "Add base image metadata to image(s)", - "groupName": "commands", - "defaultValue": "true", - "helpMarkDown": "By default base image data like base image name and digest are added which helps with traceability. You can opt out of this default behavior by using this input." - }, - { - "name": "buildArguments", - "type": "multiLine", - "properties": { - "resizable": "true", - "rows": "2" - }, - "label": "Build Arguments", - "visibleRule": "action = Build an image", - "helpMarkDown": "Build-time variables for the Docker file. Specify each name=value pair on a new line." - }, - { - "name": "defaultContext", - "type": "boolean", - "label": "Use Default Build Context", - "defaultValue": "true", - "visibleRule": "action = Build an image", - "helpMarkDown": "Set the build context to the directory that contains the Docker file." - }, - { - "name": "context", - "type": "filePath", - "label": "Build Context", - "visibleRule": "action = Build an image && defaultContext = false", - "helpMarkDown": "Path to the build context." - }, - { - "name": "imageName", - "type": "string", - "label": "Image Name", - "defaultValue": "$(Build.Repository.Name):$(Build.BuildId)", - "required": true, - "visibleRule": "action == Build an image || action == Push an image || action == Run an image", - "helpMarkDown": "Name of the Docker image to build, push, or run." - }, - { - "name": "imageNamesPath", - "type": "filePath", - "label": "Image Names Path", - "required": true, - "visibleRule": "action == Tag images || action == Push images", - "helpMarkDown": "Path to a text file that contains the names of the Docker images to tag or push. Each image name is contained on its own line." - }, - { - "name": "qualifyImageName", - "type": "boolean", - "label": "Qualify Image Name", - "defaultValue": "true", - "visibleRule": "action = Build an image || action = Tag images || action = Push an image || action = Push images || action = Run an image", - "helpMarkDown": "Qualify the image name with the Docker registry service connection's hostname if not otherwise specified." - }, - { - "name": "additionalImageTags", - "type": "multiLine", - "properties": { - "resizable": "true", - "rows": "2" - }, - "label": "Additional Image Tags", - "visibleRule": "action = Build an image || action = Tag images || action = Push an image || action = Push images", - "helpMarkDown": "Additional tags for the Docker image being built or pushed." - }, - { - "name": "includeSourceTags", - "type": "boolean", - "label": "Include Source Tags", - "defaultValue": "false", - "visibleRule": "action = Build an image || action = Tag image || action = Push an image || action = Push images", - "helpMarkDown": "Include Git tags when building or pushing the Docker image." - }, - { - "name": "includeLatestTag", - "type": "boolean", - "label": "Include Latest Tag", - "defaultValue": "false", - "visibleRule": "action = Build an image || action = Push an image || action = Push images", - "helpMarkDown": "Include the 'latest' tag when building or pushing the Docker image." - }, - { - "name": "imageDigestFile", - "type": "filePath", - "label": "Image Digest File", - "visibleRule": "action = Push an image || action = Push images", - "helpMarkDown": "Path to a file that is created and populated with the full image repository digest of the Docker image that was pushed." - }, - { - "name": "containerName", - "type": "string", - "label": "Container Name", - "visibleRule": "action = Run an image", - "helpMarkDown": "Name of the Docker container to run." - }, - { - "name": "ports", - "type": "multiLine", - "properties": { - "resizable": "true", - "rows": "2" - }, - "label": "Ports", - "visibleRule": "action = Run an image", - "helpMarkDown": "Ports in the Docker container to publish to the host. Specify each host-port:container-port binding on a new line." - }, - { - "name": "volumes", - "type": "multiLine", - "properties": { - "resizable": "true", - "rows": "2" - }, - "label": "Volumes", - "visibleRule": "action = Run an image", - "helpMarkDown": "Volumes to mount from the host. Specify each host-dir:container-dir on a new line." - }, - { - "name": "envVars", - "type": "multiLine", - "properties": { - "resizable": "true", - "rows": "2" - }, - "label": "Environment Variables", - "visibleRule": "action = Run an image", - "helpMarkDown": "Environment variables for the Docker container. Specify each name=value pair on a new line." - }, - { - "name": "workDir", - "type": "string", - "label": "Working Directory", - "visibleRule": "action = Run an image", - "helpMarkDown": "The working directory for the Docker container." - }, - { - "name": "entrypoint", - "type": "string", - "label": "Entry Point Override", - "visibleRule": "action = Run an image", - "helpMarkDown": "Override the default entry point for the Docker container." - }, - { - "name": "containerCommand", - "type": "string", - "label": "Command", - "visibleRule": "action = Run an image", - "helpMarkDown": "The docker run command first creates a writeable container layer over the specified image, and then starts it by using the specified run command. For example, if the image contains a simple Python Flask web application you can specify 'python app.py' to launch the web application." - }, - { - "name": "detached", - "type": "boolean", - "label": "Run In Background", - "defaultValue": "true", - "visibleRule": "action = Run an image", - "helpMarkDown": "Run the Docker container in the background." - }, - { - "name": "restartPolicy", - "type": "pickList", - "label": "Restart Policy", - "defaultValue": "no", - "required": true, - "options": { - "no": "No", - "onFailure": "On failure", - "always": "Always", - "unlessStopped": "Unless stopped" - }, - "visibleRule": "action = Run an image && detached = true", - "helpMarkDown": "Select a restart policy." - }, - { - "name": "restartMaxRetries", - "type": "string", - "label": "Maximum Restart Retries", - "visibleRule": "action = Run an image && detached = true && restartPolicy = onFailure", - "helpMarkDown": "The maximum number of restart retries the Docker daemon attempts." - }, - { - "name": "customCommand", - "type": "string", - "label": "Command", - "required": true, - "visibleRule": "action = Run a Docker command", - "helpMarkDown": "Docker command to execute, with arguments. For example, 'rmi -f image-name' to force remove an image." - }, - { - "name": "dockerHostEndpoint", - "type": "connectedService:dockerhost", - "label": "Docker Host Service Connection", - "helpMarkDown": "Select a Docker host service connection. Defaults to the agent's host.", - "groupName": "advanced" - }, - { - "name": "enforceDockerNamingConvention", - "type": "boolean", - "label": "Force image name to follow Docker naming convention", - "required": false, - "defaultValue": "true", - "helpMarkDown": "If enabled docker image name will be modified to follow Docker naming convention. Converts upper case character to lower case and removes spaces in image name.", - "groupName": "advanced" - }, - { - "name": "cwd", - "aliases": [ - "workingDirectory" - ], - "type": "filePath", - "label": "Working Directory", - "defaultValue": "$(System.DefaultWorkingDirectory)", - "helpMarkDown": "Working directory for the Docker command.", - "groupName": "advanced" - }, - { - "name": "memory", - "type": "string", - "label": "Memory limit", - "helpMarkDown": "The maximum amount of memory available to the container as a integer with optional suffixes like '2GB'.", - "groupName": "advanced" - } - ], - "dataSourceBindings": [ - { - "target": "azureContainerRegistry", - "endpointId": "$(azureSubscriptionEndpoint)", - "dataSourceName": "AzureRMContainerRegistries", - "resultTemplate": "{\"Value\":\"{\\\"loginServer\\\":\\\"{{{properties.loginServer}}}\\\", \\\"id\\\" : \\\"{{{id}}}\\\"}\",\"DisplayValue\":\"{{{name}}}\"}" - } - ], - "outputVariables": [ - { - "name": "DockerOutput", - "description": "Stores the output of the docker command" - }, - { - "name": "DockerOutputPath", - "description": "The path of the file which contains the output of the build command." - } - ], - "instanceNameFormat": "$(action)", - "execution": { - "Node10": { - "target": "container.js" - }, - "Node16": { - "target": "container.js" - } - }, - "messages": { - "ContainerPatternFound": "Pattern found in docker filepath parameter", - "ContainerPatternNotFound": "No pattern found in docker filepath parameter", - "ContainerDockerFileNotFound": "No Docker file matching %s was found.", - "ConnectingToDockerHost": "DOCKER_HOST variable is set. Docker will try to connect to the Docker host: %s", - "DockerHostVariableWarning": "DOCKER_HOST variable is set. Please ensure that the Docker daemon is running on: %s", - "NoImagesInImageNamesFile": "At least one image name is expected in file '%s'.", - "CantWriteDataToFile": "Can not write data to the file %s. Error: %s", - "NoDataWrittenOnFile": "No data was written into the file %s", - "FileContentSynced": "Synced the file content to the disk. The content is %s.", - "OutputVariableDataSizeExceeded": "Output variable not set as Docker command output exceeded the maximum supported length. Output length: %s, Maximum supported length: %s", - "WritingDockerConfigToTempFile": "Writing Docker config to temp file. File path: %s, Docker config: %s" + "id": "E28912F1-0114-4464-802A-A3A35437FD16", + "name": "Docker", + "friendlyName": "Docker", + "description": "Build, tag, push, or run Docker images, or run a Docker command", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/docker", + "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=848006)", + "category": "Build", + "visibility": [ + "Build", + "Release" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 0, + "Minor": 238, + "Patch": 0 + }, + "demands": [], + "preview": "false", + "groups": [ + { + "name": "advanced", + "displayName": "Advanced Options", + "isExpanded": false } + ], + "inputs": [ + { + "name": "containerregistrytype", + "type": "pickList", + "label": "Container Registry Type", + "defaultValue": "Azure Container Registry", + "required": true, + "options": { + "Azure Container Registry": "Azure Container Registry", + "Container Registry": "Container Registry" + }, + "helpMarkDown": "Select 'Azure Container Registry' to connect to it by using an Azure Service Connection. Select 'Container registry' to connect to Docker Hub or any other private container registry." + }, + { + "name": "dockerRegistryEndpoint", + "aliases": [ + "dockerRegistryConnection" + ], + "type": "connectedService:dockerregistry", + "label": "Docker Registry Service Connection", + "helpMarkDown": "Select a Docker registry service connection. Required for commands that need to authenticate with a registry.", + "visibleRule": "containerregistrytype = Container Registry" + }, + { + "name": "azureSubscriptionEndpoint", + "aliases": [ + "azureSubscription" + ], + "type": "connectedService:AzureRM", + "label": "Azure subscription", + "helpMarkDown": "Select an Azure subscription", + "visibleRule": "containerregistrytype = Azure Container Registry" + }, + { + "name": "azureContainerRegistry", + "label": "Azure Container Registry", + "type": "pickList", + "helpMarkDown": "Select an Azure Container Registry in the selected Azure Subscription. The container image will be built and pushed to this container registry.", + "visibleRule": "containerregistrytype = Azure Container Registry", + "defaultValue": "", + "properties": { + "EditableOptions": "True" + } + }, + { + "name": "action", + "type": "pickList", + "label": "Action", + "defaultValue": "Build an image", + "required": true, + "options": { + "Build an image": "Build an image", + "Tag images": "Tag images", + "Push an image": "Push an image", + "Push images": "Push images", + "Run an image": "Run an image", + "Run a Docker command": "Run a Docker command" + }, + "helpMarkDown": "Select a Docker action." + }, + { + "name": "dockerFile", + "type": "filePath", + "label": "Docker File", + "defaultValue": "**/Dockerfile", + "required": true, + "visibleRule": "action = Build an image", + "helpMarkDown": "Path to the Dockerfile." + }, + { + "name": "addBaseImageData", + "type": "boolean", + "label": "Add base image metadata to image(s)", + "groupName": "commands", + "defaultValue": "true", + "helpMarkDown": "By default base image data like base image name and digest are added which helps with traceability. You can opt out of this default behavior by using this input." + }, + { + "name": "buildArguments", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "Build Arguments", + "visibleRule": "action = Build an image", + "helpMarkDown": "Build-time variables for the Docker file. Specify each name=value pair on a new line." + }, + { + "name": "defaultContext", + "type": "boolean", + "label": "Use Default Build Context", + "defaultValue": "true", + "visibleRule": "action = Build an image", + "helpMarkDown": "Set the build context to the directory that contains the Docker file." + }, + { + "name": "context", + "type": "filePath", + "label": "Build Context", + "visibleRule": "action = Build an image && defaultContext = false", + "helpMarkDown": "Path to the build context." + }, + { + "name": "imageName", + "type": "string", + "label": "Image Name", + "defaultValue": "$(Build.Repository.Name):$(Build.BuildId)", + "required": true, + "visibleRule": "action == Build an image || action == Push an image || action == Run an image", + "helpMarkDown": "Name of the Docker image to build, push, or run." + }, + { + "name": "imageNamesPath", + "type": "filePath", + "label": "Image Names Path", + "required": true, + "visibleRule": "action == Tag images || action == Push images", + "helpMarkDown": "Path to a text file that contains the names of the Docker images to tag or push. Each image name is contained on its own line." + }, + { + "name": "qualifyImageName", + "type": "boolean", + "label": "Qualify Image Name", + "defaultValue": "true", + "visibleRule": "action = Build an image || action = Tag images || action = Push an image || action = Push images || action = Run an image", + "helpMarkDown": "Qualify the image name with the Docker registry service connection's hostname if not otherwise specified." + }, + { + "name": "additionalImageTags", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "Additional Image Tags", + "visibleRule": "action = Build an image || action = Tag images || action = Push an image || action = Push images", + "helpMarkDown": "Additional tags for the Docker image being built or pushed." + }, + { + "name": "includeSourceTags", + "type": "boolean", + "label": "Include Source Tags", + "defaultValue": "false", + "visibleRule": "action = Build an image || action = Tag image || action = Push an image || action = Push images", + "helpMarkDown": "Include Git tags when building or pushing the Docker image." + }, + { + "name": "includeLatestTag", + "type": "boolean", + "label": "Include Latest Tag", + "defaultValue": "false", + "visibleRule": "action = Build an image || action = Push an image || action = Push images", + "helpMarkDown": "Include the 'latest' tag when building or pushing the Docker image." + }, + { + "name": "imageDigestFile", + "type": "filePath", + "label": "Image Digest File", + "visibleRule": "action = Push an image || action = Push images", + "helpMarkDown": "Path to a file that is created and populated with the full image repository digest of the Docker image that was pushed." + }, + { + "name": "containerName", + "type": "string", + "label": "Container Name", + "visibleRule": "action = Run an image", + "helpMarkDown": "Name of the Docker container to run." + }, + { + "name": "ports", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "Ports", + "visibleRule": "action = Run an image", + "helpMarkDown": "Ports in the Docker container to publish to the host. Specify each host-port:container-port binding on a new line." + }, + { + "name": "volumes", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "Volumes", + "visibleRule": "action = Run an image", + "helpMarkDown": "Volumes to mount from the host. Specify each host-dir:container-dir on a new line." + }, + { + "name": "envVars", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "Environment Variables", + "visibleRule": "action = Run an image", + "helpMarkDown": "Environment variables for the Docker container. Specify each name=value pair on a new line." + }, + { + "name": "workDir", + "type": "string", + "label": "Working Directory", + "visibleRule": "action = Run an image", + "helpMarkDown": "The working directory for the Docker container." + }, + { + "name": "entrypoint", + "type": "string", + "label": "Entry Point Override", + "visibleRule": "action = Run an image", + "helpMarkDown": "Override the default entry point for the Docker container." + }, + { + "name": "containerCommand", + "type": "string", + "label": "Command", + "visibleRule": "action = Run an image", + "helpMarkDown": "The docker run command first creates a writeable container layer over the specified image, and then starts it by using the specified run command. For example, if the image contains a simple Python Flask web application you can specify 'python app.py' to launch the web application." + }, + { + "name": "detached", + "type": "boolean", + "label": "Run In Background", + "defaultValue": "true", + "visibleRule": "action = Run an image", + "helpMarkDown": "Run the Docker container in the background." + }, + { + "name": "restartPolicy", + "type": "pickList", + "label": "Restart Policy", + "defaultValue": "no", + "required": true, + "options": { + "no": "No", + "onFailure": "On failure", + "always": "Always", + "unlessStopped": "Unless stopped" + }, + "visibleRule": "action = Run an image && detached = true", + "helpMarkDown": "Select a restart policy." + }, + { + "name": "restartMaxRetries", + "type": "string", + "label": "Maximum Restart Retries", + "visibleRule": "action = Run an image && detached = true && restartPolicy = onFailure", + "helpMarkDown": "The maximum number of restart retries the Docker daemon attempts." + }, + { + "name": "customCommand", + "type": "string", + "label": "Command", + "required": true, + "visibleRule": "action = Run a Docker command", + "helpMarkDown": "Docker command to execute, with arguments. For example, 'rmi -f image-name' to force remove an image." + }, + { + "name": "dockerHostEndpoint", + "type": "connectedService:dockerhost", + "label": "Docker Host Service Connection", + "helpMarkDown": "Select a Docker host service connection. Defaults to the agent's host.", + "groupName": "advanced" + }, + { + "name": "enforceDockerNamingConvention", + "type": "boolean", + "label": "Force image name to follow Docker naming convention", + "required": false, + "defaultValue": "true", + "helpMarkDown": "If enabled docker image name will be modified to follow Docker naming convention. Converts upper case character to lower case and removes spaces in image name.", + "groupName": "advanced" + }, + { + "name": "cwd", + "aliases": [ + "workingDirectory" + ], + "type": "filePath", + "label": "Working Directory", + "defaultValue": "$(System.DefaultWorkingDirectory)", + "helpMarkDown": "Working directory for the Docker command.", + "groupName": "advanced" + }, + { + "name": "memory", + "type": "string", + "label": "Memory limit", + "helpMarkDown": "The maximum amount of memory available to the container as a integer with optional suffixes like '2GB'.", + "groupName": "advanced" + } + ], + "dataSourceBindings": [ + { + "target": "azureContainerRegistry", + "endpointId": "$(azureSubscriptionEndpoint)", + "dataSourceName": "AzureRMContainerRegistries", + "resultTemplate": "{\"Value\":\"{\\\"loginServer\\\":\\\"{{{properties.loginServer}}}\\\", \\\"id\\\" : \\\"{{{id}}}\\\"}\",\"DisplayValue\":\"{{{name}}}\"}" + } + ], + "outputVariables": [ + { + "name": "DockerOutput", + "description": "Stores the output of the docker command" + }, + { + "name": "DockerOutputPath", + "description": "The path of the file which contains the output of the build command." + } + ], + "instanceNameFormat": "$(action)", + "execution": { + "Node10": { + "target": "container.js" + }, + "Node16": { + "target": "container.js" + } + }, + "messages": { + "ContainerPatternFound": "Pattern found in docker filepath parameter", + "ContainerPatternNotFound": "No pattern found in docker filepath parameter", + "ContainerDockerFileNotFound": "No Docker file matching %s was found.", + "ConnectingToDockerHost": "DOCKER_HOST variable is set. Docker will try to connect to the Docker host: %s", + "DockerHostVariableWarning": "DOCKER_HOST variable is set. Please ensure that the Docker daemon is running on: %s", + "NoImagesInImageNamesFile": "At least one image name is expected in file '%s'.", + "CantWriteDataToFile": "Can not write data to the file %s. Error: %s", + "NoDataWrittenOnFile": "No data was written into the file %s", + "FileContentSynced": "Synced the file content to the disk. The content is %s.", + "OutputVariableDataSizeExceeded": "Output variable not set as Docker command output exceeded the maximum supported length. Output length: %s, Maximum supported length: %s", + "WritingDockerConfigToTempFile": "Writing Docker config to temp file. File path: %s, Docker config: %s" + } } \ No newline at end of file diff --git a/Tasks/DockerV0/task.loc.json b/Tasks/DockerV0/task.loc.json index 155b08873dcf..93b22d0ca99f 100644 --- a/Tasks/DockerV0/task.loc.json +++ b/Tasks/DockerV0/task.loc.json @@ -13,8 +13,8 @@ "author": "Microsoft Corporation", "version": { "Major": 0, - "Minor": 225, - "Patch": 1 + "Minor": 238, + "Patch": 0 }, "demands": [], "preview": "false", diff --git a/Tasks/DockerV1/task.json b/Tasks/DockerV1/task.json index 82c409adb90e..eda425edafdb 100644 --- a/Tasks/DockerV1/task.json +++ b/Tasks/DockerV1/task.json @@ -13,8 +13,8 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 225, - "Patch": 1 + "Minor": 238, + "Patch": 0 }, "demands": [], "releaseNotes": "Simplified the task by:
 - Providing an option to simply select or type a command.
 - Retaining the useful input fields and providing an option to pass the rest as an argument to the command.", diff --git a/Tasks/DockerV1/task.loc.json b/Tasks/DockerV1/task.loc.json index 96005f497b81..c683372946f4 100644 --- a/Tasks/DockerV1/task.loc.json +++ b/Tasks/DockerV1/task.loc.json @@ -13,8 +13,8 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 225, - "Patch": 1 + "Minor": 238, + "Patch": 0 }, "demands": [], "releaseNotes": "ms-resource:loc.releaseNotes", diff --git a/Tasks/SqlAzureDacpacDeploymentV1/task.json b/Tasks/SqlAzureDacpacDeploymentV1/task.json index e37a0c31daa0..ed178abcbc75 100644 --- a/Tasks/SqlAzureDacpacDeploymentV1/task.json +++ b/Tasks/SqlAzureDacpacDeploymentV1/task.json @@ -16,8 +16,8 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 237, - "Patch": 5 + "Minor": 238, + "Patch": 0 }, "demands": [ "sqlpackage" diff --git a/Tasks/SqlAzureDacpacDeploymentV1/task.loc.json b/Tasks/SqlAzureDacpacDeploymentV1/task.loc.json index ca307b95fb54..b7d12b098f85 100644 --- a/Tasks/SqlAzureDacpacDeploymentV1/task.loc.json +++ b/Tasks/SqlAzureDacpacDeploymentV1/task.loc.json @@ -16,8 +16,8 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 237, - "Patch": 5 + "Minor": 238, + "Patch": 0 }, "demands": [ "sqlpackage" diff --git a/_generated/AzureFileCopyV2.versionmap.txt b/_generated/AzureFileCopyV2.versionmap.txt index 5f97fc128911..1eb2c6b826dd 100644 --- a/_generated/AzureFileCopyV2.versionmap.txt +++ b/_generated/AzureFileCopyV2.versionmap.txt @@ -1,2 +1,2 @@ -Default|2.238.0 -Node20_229_2|2.238.1 +Default|2.238.2 +Node20_229_2|2.238.3 diff --git a/_generated/AzureFileCopyV2/task.json b/_generated/AzureFileCopyV2/task.json index 2b1d9a06ebeb..50d794085060 100644 --- a/_generated/AzureFileCopyV2/task.json +++ b/_generated/AzureFileCopyV2/task.json @@ -14,7 +14,7 @@ "version": { "Major": 2, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "demands": [ "azureps" @@ -374,7 +374,7 @@ "ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired." }, "_buildConfigMapping": { - "Default": "2.238.0", - "Node20_229_2": "2.238.1" + "Default": "2.238.2", + "Node20_229_2": "2.238.3" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV2/task.loc.json b/_generated/AzureFileCopyV2/task.loc.json index d6910ab1bc72..fb0163c24a41 100644 --- a/_generated/AzureFileCopyV2/task.loc.json +++ b/_generated/AzureFileCopyV2/task.loc.json @@ -14,7 +14,7 @@ "version": { "Major": 2, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "demands": [ "azureps" @@ -374,7 +374,7 @@ "ExpiredServicePrincipal": "ms-resource:loc.messages.ExpiredServicePrincipal" }, "_buildConfigMapping": { - "Default": "2.238.0", - "Node20_229_2": "2.238.1" + "Default": "2.238.2", + "Node20_229_2": "2.238.3" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV2_Node20/task.json b/_generated/AzureFileCopyV2_Node20/task.json index 217c5b24f0f0..4a0f268b48e1 100644 --- a/_generated/AzureFileCopyV2_Node20/task.json +++ b/_generated/AzureFileCopyV2_Node20/task.json @@ -14,7 +14,7 @@ "version": { "Major": 2, "Minor": 238, - "Patch": 1 + "Patch": 3 }, "demands": [ "azureps" @@ -378,7 +378,7 @@ "ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired." }, "_buildConfigMapping": { - "Default": "2.238.0", - "Node20_229_2": "2.238.1" + "Default": "2.238.2", + "Node20_229_2": "2.238.3" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV2_Node20/task.loc.json b/_generated/AzureFileCopyV2_Node20/task.loc.json index ca5057e18bf1..1596a7c22e81 100644 --- a/_generated/AzureFileCopyV2_Node20/task.loc.json +++ b/_generated/AzureFileCopyV2_Node20/task.loc.json @@ -14,7 +14,7 @@ "version": { "Major": 2, "Minor": 238, - "Patch": 1 + "Patch": 3 }, "demands": [ "azureps" @@ -378,7 +378,7 @@ "ExpiredServicePrincipal": "ms-resource:loc.messages.ExpiredServicePrincipal" }, "_buildConfigMapping": { - "Default": "2.238.0", - "Node20_229_2": "2.238.1" + "Default": "2.238.2", + "Node20_229_2": "2.238.3" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV3.versionmap.txt b/_generated/AzureFileCopyV3.versionmap.txt index a12a64db11d3..5e86d721a229 100644 --- a/_generated/AzureFileCopyV3.versionmap.txt +++ b/_generated/AzureFileCopyV3.versionmap.txt @@ -1,2 +1,2 @@ -Default|3.238.0 -Node20_229_2|3.238.1 +Default|3.238.2 +Node20_229_2|3.238.3 diff --git a/_generated/AzureFileCopyV3/task.json b/_generated/AzureFileCopyV3/task.json index 35a7d1fd8284..991a9755ae31 100644 --- a/_generated/AzureFileCopyV3/task.json +++ b/_generated/AzureFileCopyV3/task.json @@ -14,7 +14,7 @@ "version": { "Major": 3, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "demands": [ "azureps" @@ -313,7 +313,7 @@ "ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired." }, "_buildConfigMapping": { - "Default": "3.238.0", - "Node20_229_2": "3.238.1" + "Default": "3.238.2", + "Node20_229_2": "3.238.3" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV3/task.loc.json b/_generated/AzureFileCopyV3/task.loc.json index 803c5d05c90b..307f45244ad6 100644 --- a/_generated/AzureFileCopyV3/task.loc.json +++ b/_generated/AzureFileCopyV3/task.loc.json @@ -14,7 +14,7 @@ "version": { "Major": 3, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "demands": [ "azureps" @@ -313,7 +313,7 @@ "ExpiredServicePrincipal": "ms-resource:loc.messages.ExpiredServicePrincipal" }, "_buildConfigMapping": { - "Default": "3.238.0", - "Node20_229_2": "3.238.1" + "Default": "3.238.2", + "Node20_229_2": "3.238.3" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV3_Node20/task.json b/_generated/AzureFileCopyV3_Node20/task.json index 2408bc3aeb69..36c640d4a2d5 100644 --- a/_generated/AzureFileCopyV3_Node20/task.json +++ b/_generated/AzureFileCopyV3_Node20/task.json @@ -14,7 +14,7 @@ "version": { "Major": 3, "Minor": 238, - "Patch": 1 + "Patch": 3 }, "demands": [ "azureps" @@ -317,7 +317,7 @@ "ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired." }, "_buildConfigMapping": { - "Default": "3.238.0", - "Node20_229_2": "3.238.1" + "Default": "3.238.2", + "Node20_229_2": "3.238.3" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV3_Node20/task.loc.json b/_generated/AzureFileCopyV3_Node20/task.loc.json index 36c93e550f16..a47b4226287d 100644 --- a/_generated/AzureFileCopyV3_Node20/task.loc.json +++ b/_generated/AzureFileCopyV3_Node20/task.loc.json @@ -14,7 +14,7 @@ "version": { "Major": 3, "Minor": 238, - "Patch": 1 + "Patch": 3 }, "demands": [ "azureps" @@ -317,7 +317,7 @@ "ExpiredServicePrincipal": "ms-resource:loc.messages.ExpiredServicePrincipal" }, "_buildConfigMapping": { - "Default": "3.238.0", - "Node20_229_2": "3.238.1" + "Default": "3.238.2", + "Node20_229_2": "3.238.3" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV4.versionmap.txt b/_generated/AzureFileCopyV4.versionmap.txt index 9c565ef34387..634522ba34b2 100644 --- a/_generated/AzureFileCopyV4.versionmap.txt +++ b/_generated/AzureFileCopyV4.versionmap.txt @@ -1,2 +1,2 @@ -Default|4.238.0 -Node20_229_2|4.238.1 +Default|4.238.2 +Node20_229_2|4.238.3 diff --git a/_generated/AzureFileCopyV4/task.json b/_generated/AzureFileCopyV4/task.json index fa5feffc73b2..8d46af0cb20d 100644 --- a/_generated/AzureFileCopyV4/task.json +++ b/_generated/AzureFileCopyV4/task.json @@ -14,7 +14,7 @@ "version": { "Major": 4, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "demands": [ "azureps" @@ -301,7 +301,7 @@ "ServicePrincipalError": "There was an error with the service principal used for the deployment." }, "_buildConfigMapping": { - "Default": "4.238.0", - "Node20_229_2": "4.238.1" + "Default": "4.238.2", + "Node20_229_2": "4.238.3" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV4/task.loc.json b/_generated/AzureFileCopyV4/task.loc.json index 290a8f48ec39..88c83a69fd00 100644 --- a/_generated/AzureFileCopyV4/task.loc.json +++ b/_generated/AzureFileCopyV4/task.loc.json @@ -14,7 +14,7 @@ "version": { "Major": 4, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "demands": [ "azureps" @@ -301,7 +301,7 @@ "ServicePrincipalError": "ms-resource:loc.messages.ServicePrincipalError" }, "_buildConfigMapping": { - "Default": "4.238.0", - "Node20_229_2": "4.238.1" + "Default": "4.238.2", + "Node20_229_2": "4.238.3" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV4_Node20/task.json b/_generated/AzureFileCopyV4_Node20/task.json index eda0ccf5ade0..75fa75950cc7 100644 --- a/_generated/AzureFileCopyV4_Node20/task.json +++ b/_generated/AzureFileCopyV4_Node20/task.json @@ -14,7 +14,7 @@ "version": { "Major": 4, "Minor": 238, - "Patch": 1 + "Patch": 3 }, "demands": [ "azureps" @@ -305,7 +305,7 @@ "ServicePrincipalError": "There was an error with the service principal used for the deployment." }, "_buildConfigMapping": { - "Default": "4.238.0", - "Node20_229_2": "4.238.1" + "Default": "4.238.2", + "Node20_229_2": "4.238.3" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV4_Node20/task.loc.json b/_generated/AzureFileCopyV4_Node20/task.loc.json index f2381c2cc397..e3c8fa98f4d9 100644 --- a/_generated/AzureFileCopyV4_Node20/task.loc.json +++ b/_generated/AzureFileCopyV4_Node20/task.loc.json @@ -14,7 +14,7 @@ "version": { "Major": 4, "Minor": 238, - "Patch": 1 + "Patch": 3 }, "demands": [ "azureps" @@ -305,7 +305,7 @@ "ServicePrincipalError": "ms-resource:loc.messages.ServicePrincipalError" }, "_buildConfigMapping": { - "Default": "4.238.0", - "Node20_229_2": "4.238.1" + "Default": "4.238.2", + "Node20_229_2": "4.238.3" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV5.versionmap.txt b/_generated/AzureFileCopyV5.versionmap.txt index 8f1264743f94..015d181e3c59 100644 --- a/_generated/AzureFileCopyV5.versionmap.txt +++ b/_generated/AzureFileCopyV5.versionmap.txt @@ -1,2 +1,2 @@ -Default|5.238.2 -Node20_229_2|5.238.3 +Default|5.238.4 +Node20_229_2|5.238.5 diff --git a/_generated/AzureFileCopyV5/task.json b/_generated/AzureFileCopyV5/task.json index cb8869b85f35..e81274c4ea33 100644 --- a/_generated/AzureFileCopyV5/task.json +++ b/_generated/AzureFileCopyV5/task.json @@ -14,7 +14,7 @@ "version": { "Major": 5, "Minor": 238, - "Patch": 2 + "Patch": 4 }, "demands": [ "azureps" @@ -301,7 +301,7 @@ "AzModuleNotFound": "Could not find the modules: 'Az.Accounts'. If the module was recently installed, retry after restarting the Azure Pipelines task agent." }, "_buildConfigMapping": { - "Default": "5.238.2", - "Node20_229_2": "5.238.3" + "Default": "5.238.4", + "Node20_229_2": "5.238.5" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV5/task.loc.json b/_generated/AzureFileCopyV5/task.loc.json index a7c7fcec5757..42a1511fca17 100644 --- a/_generated/AzureFileCopyV5/task.loc.json +++ b/_generated/AzureFileCopyV5/task.loc.json @@ -14,7 +14,7 @@ "version": { "Major": 5, "Minor": 238, - "Patch": 2 + "Patch": 4 }, "demands": [ "azureps" @@ -301,7 +301,7 @@ "AzModuleNotFound": "ms-resource:loc.messages.AzModuleNotFound" }, "_buildConfigMapping": { - "Default": "5.238.2", - "Node20_229_2": "5.238.3" + "Default": "5.238.4", + "Node20_229_2": "5.238.5" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV5_Node20/task.json b/_generated/AzureFileCopyV5_Node20/task.json index 957c7b25e911..a4f2cb09a9e9 100644 --- a/_generated/AzureFileCopyV5_Node20/task.json +++ b/_generated/AzureFileCopyV5_Node20/task.json @@ -14,7 +14,7 @@ "version": { "Major": 5, "Minor": 238, - "Patch": 3 + "Patch": 5 }, "demands": [ "azureps" @@ -305,7 +305,7 @@ "AzModuleNotFound": "Could not find the modules: 'Az.Accounts'. If the module was recently installed, retry after restarting the Azure Pipelines task agent." }, "_buildConfigMapping": { - "Default": "5.238.2", - "Node20_229_2": "5.238.3" + "Default": "5.238.4", + "Node20_229_2": "5.238.5" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV5_Node20/task.loc.json b/_generated/AzureFileCopyV5_Node20/task.loc.json index f045d9bfe1c9..589d80840b70 100644 --- a/_generated/AzureFileCopyV5_Node20/task.loc.json +++ b/_generated/AzureFileCopyV5_Node20/task.loc.json @@ -14,7 +14,7 @@ "version": { "Major": 5, "Minor": 238, - "Patch": 3 + "Patch": 5 }, "demands": [ "azureps" @@ -305,7 +305,7 @@ "AzModuleNotFound": "ms-resource:loc.messages.AzModuleNotFound" }, "_buildConfigMapping": { - "Default": "5.238.2", - "Node20_229_2": "5.238.3" + "Default": "5.238.4", + "Node20_229_2": "5.238.5" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV6.versionmap.txt b/_generated/AzureFileCopyV6.versionmap.txt index c11d6169ee3c..0f564983374c 100644 --- a/_generated/AzureFileCopyV6.versionmap.txt +++ b/_generated/AzureFileCopyV6.versionmap.txt @@ -1,2 +1,2 @@ -Default|6.238.2 -Node20_229_2|6.238.3 +Default|6.238.4 +Node20_229_2|6.238.5 diff --git a/_generated/AzureFileCopyV6/task.json b/_generated/AzureFileCopyV6/task.json index 58447b1443d5..43116e2ef375 100644 --- a/_generated/AzureFileCopyV6/task.json +++ b/_generated/AzureFileCopyV6/task.json @@ -14,7 +14,7 @@ "version": { "Major": 6, "Minor": 238, - "Patch": 2 + "Patch": 4 }, "demands": [ "azureps" @@ -288,7 +288,7 @@ "AzModuleNotFound": "Could not find the modules: 'Az.Accounts'. If the module was recently installed, retry after restarting the Azure Pipelines task agent." }, "_buildConfigMapping": { - "Default": "6.238.2", - "Node20_229_2": "6.238.3" + "Default": "6.238.4", + "Node20_229_2": "6.238.5" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV6/task.loc.json b/_generated/AzureFileCopyV6/task.loc.json index aaea23bd69a6..b4a7791f8e0e 100644 --- a/_generated/AzureFileCopyV6/task.loc.json +++ b/_generated/AzureFileCopyV6/task.loc.json @@ -14,7 +14,7 @@ "version": { "Major": 6, "Minor": 238, - "Patch": 2 + "Patch": 4 }, "demands": [ "azureps" @@ -288,7 +288,7 @@ "AzModuleNotFound": "ms-resource:loc.messages.AzModuleNotFound" }, "_buildConfigMapping": { - "Default": "6.238.2", - "Node20_229_2": "6.238.3" + "Default": "6.238.4", + "Node20_229_2": "6.238.5" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV6_Node20/task.json b/_generated/AzureFileCopyV6_Node20/task.json index d5b4100c8f86..90aadd264e70 100644 --- a/_generated/AzureFileCopyV6_Node20/task.json +++ b/_generated/AzureFileCopyV6_Node20/task.json @@ -14,7 +14,7 @@ "version": { "Major": 6, "Minor": 238, - "Patch": 3 + "Patch": 5 }, "demands": [ "azureps" @@ -292,7 +292,7 @@ "AzModuleNotFound": "Could not find the modules: 'Az.Accounts'. If the module was recently installed, retry after restarting the Azure Pipelines task agent." }, "_buildConfigMapping": { - "Default": "6.238.2", - "Node20_229_2": "6.238.3" + "Default": "6.238.4", + "Node20_229_2": "6.238.5" } } \ No newline at end of file diff --git a/_generated/AzureFileCopyV6_Node20/task.loc.json b/_generated/AzureFileCopyV6_Node20/task.loc.json index 39b8e45e2c78..3004a047f32b 100644 --- a/_generated/AzureFileCopyV6_Node20/task.loc.json +++ b/_generated/AzureFileCopyV6_Node20/task.loc.json @@ -14,7 +14,7 @@ "version": { "Major": 6, "Minor": 238, - "Patch": 3 + "Patch": 5 }, "demands": [ "azureps" @@ -292,7 +292,7 @@ "AzModuleNotFound": "ms-resource:loc.messages.AzModuleNotFound" }, "_buildConfigMapping": { - "Default": "6.238.2", - "Node20_229_2": "6.238.3" + "Default": "6.238.4", + "Node20_229_2": "6.238.5" } } \ No newline at end of file diff --git a/_generated/AzurePowerShellV4.versionmap.txt b/_generated/AzurePowerShellV4.versionmap.txt index 9c565ef34387..634522ba34b2 100644 --- a/_generated/AzurePowerShellV4.versionmap.txt +++ b/_generated/AzurePowerShellV4.versionmap.txt @@ -1,2 +1,2 @@ -Default|4.238.0 -Node20_229_2|4.238.1 +Default|4.238.2 +Node20_229_2|4.238.3 diff --git a/_generated/AzurePowerShellV4/task.json b/_generated/AzurePowerShellV4/task.json index 3c9725c413e3..84d43158a45e 100644 --- a/_generated/AzurePowerShellV4/task.json +++ b/_generated/AzurePowerShellV4/task.json @@ -18,7 +18,7 @@ "version": { "Major": 4, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "releaseNotes": "Added support for Az Module and cross platform agents.", "groups": [ @@ -211,7 +211,7 @@ "ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired." }, "_buildConfigMapping": { - "Default": "4.238.0", - "Node20_229_2": "4.238.1" + "Default": "4.238.2", + "Node20_229_2": "4.238.3" } } \ No newline at end of file diff --git a/_generated/AzurePowerShellV4/task.loc.json b/_generated/AzurePowerShellV4/task.loc.json index 38277487e158..561e68bef05b 100644 --- a/_generated/AzurePowerShellV4/task.loc.json +++ b/_generated/AzurePowerShellV4/task.loc.json @@ -18,7 +18,7 @@ "version": { "Major": 4, "Minor": 238, - "Patch": 0 + "Patch": 2 }, "releaseNotes": "ms-resource:loc.releaseNotes", "groups": [ @@ -211,7 +211,7 @@ "ExpiredServicePrincipal": "ms-resource:loc.messages.ExpiredServicePrincipal" }, "_buildConfigMapping": { - "Default": "4.238.0", - "Node20_229_2": "4.238.1" + "Default": "4.238.2", + "Node20_229_2": "4.238.3" } } \ No newline at end of file diff --git a/_generated/AzurePowerShellV4_Node20/task.json b/_generated/AzurePowerShellV4_Node20/task.json index 5fb76cfa464f..f81c3286bde8 100644 --- a/_generated/AzurePowerShellV4_Node20/task.json +++ b/_generated/AzurePowerShellV4_Node20/task.json @@ -18,7 +18,7 @@ "version": { "Major": 4, "Minor": 238, - "Patch": 1 + "Patch": 3 }, "releaseNotes": "Added support for Az Module and cross platform agents.", "groups": [ @@ -215,7 +215,7 @@ "ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired." }, "_buildConfigMapping": { - "Default": "4.238.0", - "Node20_229_2": "4.238.1" + "Default": "4.238.2", + "Node20_229_2": "4.238.3" } } \ No newline at end of file diff --git a/_generated/AzurePowerShellV4_Node20/task.loc.json b/_generated/AzurePowerShellV4_Node20/task.loc.json index 9bd557b9857a..8d854ff09f78 100644 --- a/_generated/AzurePowerShellV4_Node20/task.loc.json +++ b/_generated/AzurePowerShellV4_Node20/task.loc.json @@ -18,7 +18,7 @@ "version": { "Major": 4, "Minor": 238, - "Patch": 1 + "Patch": 3 }, "releaseNotes": "ms-resource:loc.releaseNotes", "groups": [ @@ -215,7 +215,7 @@ "ExpiredServicePrincipal": "ms-resource:loc.messages.ExpiredServicePrincipal" }, "_buildConfigMapping": { - "Default": "4.238.0", - "Node20_229_2": "4.238.1" + "Default": "4.238.2", + "Node20_229_2": "4.238.3" } } \ No newline at end of file diff --git a/_generated/AzurePowerShellV5.versionmap.txt b/_generated/AzurePowerShellV5.versionmap.txt index 015d181e3c59..dd2f5bb49bdc 100644 --- a/_generated/AzurePowerShellV5.versionmap.txt +++ b/_generated/AzurePowerShellV5.versionmap.txt @@ -1,2 +1,2 @@ -Default|5.238.4 -Node20_229_2|5.238.5 +Default|5.238.6 +Node20_229_2|5.238.7 diff --git a/_generated/AzurePowerShellV5/task.json b/_generated/AzurePowerShellV5/task.json index d2b07d821355..0bdef7defbee 100644 --- a/_generated/AzurePowerShellV5/task.json +++ b/_generated/AzurePowerShellV5/task.json @@ -18,7 +18,7 @@ "version": { "Major": 5, "Minor": 238, - "Patch": 4 + "Patch": 6 }, "releaseNotes": "Added support for Az Module and cross platform agents.", "groups": [ @@ -204,7 +204,7 @@ "PS_ExitCode": "PowerShell exited with code '{0}'." }, "_buildConfigMapping": { - "Default": "5.238.4", - "Node20_229_2": "5.238.5" + "Default": "5.238.6", + "Node20_229_2": "5.238.7" } } \ No newline at end of file diff --git a/_generated/AzurePowerShellV5/task.loc.json b/_generated/AzurePowerShellV5/task.loc.json index 65295dd70816..a28b434118f7 100644 --- a/_generated/AzurePowerShellV5/task.loc.json +++ b/_generated/AzurePowerShellV5/task.loc.json @@ -18,7 +18,7 @@ "version": { "Major": 5, "Minor": 238, - "Patch": 4 + "Patch": 6 }, "releaseNotes": "ms-resource:loc.releaseNotes", "groups": [ @@ -204,7 +204,7 @@ "PS_ExitCode": "ms-resource:loc.messages.PS_ExitCode" }, "_buildConfigMapping": { - "Default": "5.238.4", - "Node20_229_2": "5.238.5" + "Default": "5.238.6", + "Node20_229_2": "5.238.7" } } \ No newline at end of file diff --git a/_generated/AzurePowerShellV5_Node20/task.json b/_generated/AzurePowerShellV5_Node20/task.json index b6d2e4075645..bca3cdd795c9 100644 --- a/_generated/AzurePowerShellV5_Node20/task.json +++ b/_generated/AzurePowerShellV5_Node20/task.json @@ -18,7 +18,7 @@ "version": { "Major": 5, "Minor": 238, - "Patch": 5 + "Patch": 7 }, "releaseNotes": "Added support for Az Module and cross platform agents.", "groups": [ @@ -208,7 +208,7 @@ "PS_ExitCode": "PowerShell exited with code '{0}'." }, "_buildConfigMapping": { - "Default": "5.238.4", - "Node20_229_2": "5.238.5" + "Default": "5.238.6", + "Node20_229_2": "5.238.7" } } \ No newline at end of file diff --git a/_generated/AzurePowerShellV5_Node20/task.loc.json b/_generated/AzurePowerShellV5_Node20/task.loc.json index b0afa90aa5b7..ba9d494276f3 100644 --- a/_generated/AzurePowerShellV5_Node20/task.loc.json +++ b/_generated/AzurePowerShellV5_Node20/task.loc.json @@ -18,7 +18,7 @@ "version": { "Major": 5, "Minor": 238, - "Patch": 5 + "Patch": 7 }, "releaseNotes": "ms-resource:loc.releaseNotes", "groups": [ @@ -208,7 +208,7 @@ "PS_ExitCode": "ms-resource:loc.messages.PS_ExitCode" }, "_buildConfigMapping": { - "Default": "5.238.4", - "Node20_229_2": "5.238.5" + "Default": "5.238.6", + "Node20_229_2": "5.238.7" } } \ No newline at end of file diff --git a/_generated/DockerV0.versionmap.txt b/_generated/DockerV0.versionmap.txt index 7c86f0cd9be0..4dc27b5a393d 100644 --- a/_generated/DockerV0.versionmap.txt +++ b/_generated/DockerV0.versionmap.txt @@ -1,2 +1,2 @@ -Default|0.225.1 -Node20_229_2|0.231.0 +Default|0.238.0 +Node20_229_2|0.238.1 diff --git a/_generated/DockerV0/Strings/resources.resjson/de-DE/resources.resjson b/_generated/DockerV0/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..497f5657683e --- /dev/null +++ b/_generated/DockerV0/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,82 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "Hiermit werden Docker-Images erstellt, markiert, mithilfe von Push übertragen oder ausgeführt oder ein Docker-Befehl ausgeführt.", + "loc.instanceNameFormat": "$(action)", + "loc.group.displayName.advanced": "Erweiterte Optionen", + "loc.input.label.containerregistrytype": "Containerregistrierungstyp", + "loc.input.help.containerregistrytype": "Wählen Sie \"Azure Container Registry\" aus, um sich über eine Azure-Dienstverbindung zu verbinden. Wählen Sie \"Containerregistrierung\" aus, um eine Verbindung mit Docker Hub oder einer anderen privaten Containerregistrierung herzustellen.", + "loc.input.label.dockerRegistryEndpoint": "Dienstverbindung für Docker-Registrierung", + "loc.input.help.dockerRegistryEndpoint": "Wählen Sie eine Dienstverbindung für die Docker-Registrierung aus. Erforderlich für Befehle, die eine Authentifizierung bei einer Registrierung erfordern.", + "loc.input.label.azureSubscriptionEndpoint": "Azure-Abonnement", + "loc.input.help.azureSubscriptionEndpoint": "Wählen Sie ein Azure-Abonnement aus.", + "loc.input.label.azureContainerRegistry": "Azure Container Registry", + "loc.input.help.azureContainerRegistry": "Wählen Sie eine Azure Container Registry-Instanz im ausgewählten Azure-Abonnement aus. Das Containerimage wird erstellt und mithilfe von Push in diese Containerregistrierung übertragen.", + "loc.input.label.action": "Aktion", + "loc.input.help.action": "Wählen Sie eine Docker-Aktion aus.", + "loc.input.label.dockerFile": "Docker-Datei", + "loc.input.help.dockerFile": "Pfad zu Dockerfile.", + "loc.input.label.addBaseImageData": "Image(s) Metadaten von Basisimages hinzufügen", + "loc.input.help.addBaseImageData": "Basisimagedaten wie Basisimagename und -digest werden standardmäßig hinzugefügt, um die Nachverfolgung zu erleichtern. Sie können dieses Standardverhalten anhand dieser Eingabe deaktivieren.", + "loc.input.label.buildArguments": "Buildargumente", + "loc.input.help.buildArguments": "Laufzeitvariablen für die Docker-Datei. Geben Sie jedes Name/Wert-Paar in einer neuen Zeile an.", + "loc.input.label.defaultContext": "Standardbuildkontext verwenden", + "loc.input.help.defaultContext": "Legen Sie den Buildkontext auf das Verzeichnis fest, das die Docker-Datei enthält.", + "loc.input.label.context": "Buildkontext", + "loc.input.help.context": "Pfad zum Buildkontext.", + "loc.input.label.imageName": "Imagename", + "loc.input.help.imageName": "Name des Docker-Images, das erstellt, mittels Push übertragen oder ausgeführt werden soll.", + "loc.input.label.imageNamesPath": "Pfad für Imagenamen", + "loc.input.help.imageNamesPath": "Pfad zu einer Textdatei, die die Namen der Docker-Images enthält, die gekennzeichnet oder mithilfe von Push übertragen werden sollen. Jeder Imagename ist in einer eigenen Zeile enthalten.", + "loc.input.label.qualifyImageName": "Imagenamen qualifizieren", + "loc.input.help.qualifyImageName": "Qualifizieren Sie den Imagenamen mit dem Hostnamen der Docker-Registrierungsdienstverbindung, sofern nicht anders angegeben.", + "loc.input.label.additionalImageTags": "Zusätzliche Imagetags", + "loc.input.help.additionalImageTags": "Zusätzliche Tags für das Docker-Image, das erstellt oder mithilfe von Push übertragen werden soll.", + "loc.input.label.includeSourceTags": "Quelltags einschließen", + "loc.input.help.includeSourceTags": "Fügen Sie Git-Tags ein, wenn Sie das Docker-Image erstellen oder mittels Push übertragen.", + "loc.input.label.includeLatestTag": "Aktuelles Tag einschließen", + "loc.input.help.includeLatestTag": "Fügen Sie das Tag \"latest\" (aktuell) ein, wenn Sie das Docker-Image erstellen oder mittels Push übertragen.", + "loc.input.label.imageDigestFile": "Imagehashwertdatei", + "loc.input.help.imageDigestFile": "Pfad zu einer Datei, die erstellt und mit dem vollständigen Imagerepository-Hashwert des mittels Push übertragenen Docker-Images befüllt wird.", + "loc.input.label.containerName": "Containername", + "loc.input.help.containerName": "Name des auszuführenden Docker-Containers.", + "loc.input.label.ports": "Ports", + "loc.input.help.ports": "Ports im Docker-Container zum Veröffentlichen an den Host. Geben Sie jede Hostport:Containerport-Bindung in einer neuen Zeile an.", + "loc.input.label.volumes": "Volumes", + "loc.input.help.volumes": "Vom Host einzubindende Volumes. Geben Sie jedes Hostverzeichnis:Containerverzeichnis in einer neuen Zeile an.", + "loc.input.label.envVars": "Umgebungsvariablen", + "loc.input.help.envVars": "Umgebungsvariablen für den Docker-Container. Geben Sie jedes Name/Wert-Paar in einer neuen Zeile an.", + "loc.input.label.workDir": "Arbeitsverzeichnis", + "loc.input.help.workDir": "Das Arbeitsverzeichnis für den Docker-Container.", + "loc.input.label.entrypoint": "Überschreiben des Einstiegspunkts", + "loc.input.help.entrypoint": "Überschreiben Sie den Standardeinstiegspunkt für den Docker-Container.", + "loc.input.label.containerCommand": "Befehl", + "loc.input.help.containerCommand": "Der Docker-Ausführungsbefehl erstellt zunächst eine beschreibbare Containerebene oberhalb des angegebenen Images und startet diese anschließend mit dem angegebenen Ausführungsbefehl. Wenn das Image beispielsweise eine einfache Python Flask-Webanwendung enthält, können Sie \"python app.py\" angeben, um die Webanwendung auszuführen.", + "loc.input.label.detached": "Im Hintergrund ausführen", + "loc.input.help.detached": "Führen Sie den Docker-Container im Hintergrund aus.", + "loc.input.label.restartPolicy": "Neustartrichtlinie", + "loc.input.help.restartPolicy": "Wählen Sie eine Neustartrichtlinie aus.", + "loc.input.label.restartMaxRetries": "Maximale Anzahl an Neustartversuchen", + "loc.input.help.restartMaxRetries": "Die maximale Anzahl an Neustartversuchen, die der Docker-Daemon unternimmt.", + "loc.input.label.customCommand": "Befehl", + "loc.input.help.customCommand": "Auszuführender Docker-Befehl mit Argumenten. Z. B. mit \"rmi -f image-name\" wird das Entfernen eines Images erzwungen.", + "loc.input.label.dockerHostEndpoint": "Docker-Hostdienstverbindung", + "loc.input.help.dockerHostEndpoint": "Wählen Sie eine Docker-Hostdienstverbindung. Entspricht standardmäßig dem Agent-Host.", + "loc.input.label.enforceDockerNamingConvention": "Docker-Namenskonvention für Imagenamen erzwingen", + "loc.input.help.enforceDockerNamingConvention": "Bei Aktivierung dieser Einstellung werden Docker-Imagenamen gemäß Docker-Namenskonvention geändert. Großbuchstaben werden in Kleinbuchstaben konvertiert, und Leerzeichen im Imagenamen werden entfernt.", + "loc.input.label.cwd": "Arbeitsverzeichnis", + "loc.input.help.cwd": "Arbeitsverzeichnis für den Docker-Befehl.", + "loc.input.label.memory": "Arbeitsspeicherlimit", + "loc.input.help.memory": "Die maximal für den Container verfügbare Arbeitsspeichermenge als Ganzzahl mit optionalen Suffixen wie \"2 GB\".", + "loc.messages.ContainerPatternFound": "Muster in Docker-Dateipfadparameter gefunden.", + "loc.messages.ContainerPatternNotFound": "Kein Muster im Docker-Parameter \"filepath\" gefunden.", + "loc.messages.ContainerDockerFileNotFound": "Es wurde keine Docker-Datei gefunden, die %s entspricht.", + "loc.messages.ConnectingToDockerHost": "Die DOCKER_HOST-Variable ist festgelegt. Docker versucht, eine Verbindung mit dem Docker-Host herzustellen: %s", + "loc.messages.DockerHostVariableWarning": "Die DOCKER_HOST-Variable ist festgelegt. Stellen Sie sicher, dass der Docker-Daemon auf \"%s\" ausgeführt wird.", + "loc.messages.NoImagesInImageNamesFile": "In der Datei \"%s\" wird mindestens ein Imagename erwartet.", + "loc.messages.CantWriteDataToFile": "In die Datei \"%s\" können keine Daten geschrieben werden. Fehler: %s", + "loc.messages.NoDataWrittenOnFile": "In die Datei \"%s\" wurden keine Daten geschrieben. ", + "loc.messages.FileContentSynced": "Der Inhalt der Datei wurde auf dem Datenträger synchronisiert. Der Inhalt ist \"%s\".", + "loc.messages.OutputVariableDataSizeExceeded": "Die Ausgabevariable wurde nicht festgelegt, weil die Docker-Befehlsausgabe die maximal unterstützte Länge überschritten hat. Ausgabelänge: %s, maximal unterstützte Länge: %s", + "loc.messages.WritingDockerConfigToTempFile": "Die Docker-Konfiguration wird in eine temporäre Datei geschrieben. Dateipfad: %s, Docker-Konfiguration: %s" +} \ No newline at end of file diff --git a/_generated/DockerV0/Strings/resources.resjson/en-US/resources.resjson b/_generated/DockerV0/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..769fbb3187b3 --- /dev/null +++ b/_generated/DockerV0/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,82 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "Build, tag, push, or run Docker images, or run a Docker command", + "loc.instanceNameFormat": "$(action)", + "loc.group.displayName.advanced": "Advanced Options", + "loc.input.label.containerregistrytype": "Container Registry Type", + "loc.input.help.containerregistrytype": "Select 'Azure Container Registry' to connect to it by using an Azure Service Connection. Select 'Container registry' to connect to Docker Hub or any other private container registry.", + "loc.input.label.dockerRegistryEndpoint": "Docker Registry Service Connection", + "loc.input.help.dockerRegistryEndpoint": "Select a Docker registry service connection. Required for commands that need to authenticate with a registry.", + "loc.input.label.azureSubscriptionEndpoint": "Azure subscription", + "loc.input.help.azureSubscriptionEndpoint": "Select an Azure subscription", + "loc.input.label.azureContainerRegistry": "Azure Container Registry", + "loc.input.help.azureContainerRegistry": "Select an Azure Container Registry in the selected Azure Subscription. The container image will be built and pushed to this container registry.", + "loc.input.label.action": "Action", + "loc.input.help.action": "Select a Docker action.", + "loc.input.label.dockerFile": "Docker File", + "loc.input.help.dockerFile": "Path to the Dockerfile.", + "loc.input.label.addBaseImageData": "Add base image metadata to image(s)", + "loc.input.help.addBaseImageData": "By default base image data like base image name and digest are added which helps with traceability. You can opt out of this default behavior by using this input.", + "loc.input.label.buildArguments": "Build Arguments", + "loc.input.help.buildArguments": "Build-time variables for the Docker file. Specify each name=value pair on a new line.", + "loc.input.label.defaultContext": "Use Default Build Context", + "loc.input.help.defaultContext": "Set the build context to the directory that contains the Docker file.", + "loc.input.label.context": "Build Context", + "loc.input.help.context": "Path to the build context.", + "loc.input.label.imageName": "Image Name", + "loc.input.help.imageName": "Name of the Docker image to build, push, or run.", + "loc.input.label.imageNamesPath": "Image Names Path", + "loc.input.help.imageNamesPath": "Path to a text file that contains the names of the Docker images to tag or push. Each image name is contained on its own line.", + "loc.input.label.qualifyImageName": "Qualify Image Name", + "loc.input.help.qualifyImageName": "Qualify the image name with the Docker registry service connection's hostname if not otherwise specified.", + "loc.input.label.additionalImageTags": "Additional Image Tags", + "loc.input.help.additionalImageTags": "Additional tags for the Docker image being built or pushed.", + "loc.input.label.includeSourceTags": "Include Source Tags", + "loc.input.help.includeSourceTags": "Include Git tags when building or pushing the Docker image.", + "loc.input.label.includeLatestTag": "Include Latest Tag", + "loc.input.help.includeLatestTag": "Include the 'latest' tag when building or pushing the Docker image.", + "loc.input.label.imageDigestFile": "Image Digest File", + "loc.input.help.imageDigestFile": "Path to a file that is created and populated with the full image repository digest of the Docker image that was pushed.", + "loc.input.label.containerName": "Container Name", + "loc.input.help.containerName": "Name of the Docker container to run.", + "loc.input.label.ports": "Ports", + "loc.input.help.ports": "Ports in the Docker container to publish to the host. Specify each host-port:container-port binding on a new line.", + "loc.input.label.volumes": "Volumes", + "loc.input.help.volumes": "Volumes to mount from the host. Specify each host-dir:container-dir on a new line.", + "loc.input.label.envVars": "Environment Variables", + "loc.input.help.envVars": "Environment variables for the Docker container. Specify each name=value pair on a new line.", + "loc.input.label.workDir": "Working Directory", + "loc.input.help.workDir": "The working directory for the Docker container.", + "loc.input.label.entrypoint": "Entry Point Override", + "loc.input.help.entrypoint": "Override the default entry point for the Docker container.", + "loc.input.label.containerCommand": "Command", + "loc.input.help.containerCommand": "The docker run command first creates a writeable container layer over the specified image, and then starts it by using the specified run command. For example, if the image contains a simple Python Flask web application you can specify 'python app.py' to launch the web application.", + "loc.input.label.detached": "Run In Background", + "loc.input.help.detached": "Run the Docker container in the background.", + "loc.input.label.restartPolicy": "Restart Policy", + "loc.input.help.restartPolicy": "Select a restart policy.", + "loc.input.label.restartMaxRetries": "Maximum Restart Retries", + "loc.input.help.restartMaxRetries": "The maximum number of restart retries the Docker daemon attempts.", + "loc.input.label.customCommand": "Command", + "loc.input.help.customCommand": "Docker command to execute, with arguments. For example, 'rmi -f image-name' to force remove an image.", + "loc.input.label.dockerHostEndpoint": "Docker Host Service Connection", + "loc.input.help.dockerHostEndpoint": "Select a Docker host service connection. Defaults to the agent's host.", + "loc.input.label.enforceDockerNamingConvention": "Force image name to follow Docker naming convention", + "loc.input.help.enforceDockerNamingConvention": "If enabled docker image name will be modified to follow Docker naming convention. Converts upper case character to lower case and removes spaces in image name.", + "loc.input.label.cwd": "Working Directory", + "loc.input.help.cwd": "Working directory for the Docker command.", + "loc.input.label.memory": "Memory limit", + "loc.input.help.memory": "The maximum amount of memory available to the container as a integer with optional suffixes like '2GB'.", + "loc.messages.ContainerPatternFound": "Pattern found in docker filepath parameter", + "loc.messages.ContainerPatternNotFound": "No pattern found in docker filepath parameter", + "loc.messages.ContainerDockerFileNotFound": "No Docker file matching %s was found.", + "loc.messages.ConnectingToDockerHost": "DOCKER_HOST variable is set. Docker will try to connect to the Docker host: %s", + "loc.messages.DockerHostVariableWarning": "DOCKER_HOST variable is set. Please ensure that the Docker daemon is running on: %s", + "loc.messages.NoImagesInImageNamesFile": "At least one image name is expected in file '%s'.", + "loc.messages.CantWriteDataToFile": "Can not write data to the file %s. Error: %s", + "loc.messages.NoDataWrittenOnFile": "No data was written into the file %s", + "loc.messages.FileContentSynced": "Synced the file content to the disk. The content is %s.", + "loc.messages.OutputVariableDataSizeExceeded": "Output variable not set as Docker command output exceeded the maximum supported length. Output length: %s, Maximum supported length: %s", + "loc.messages.WritingDockerConfigToTempFile": "Writing Docker config to temp file. File path: %s, Docker config: %s" +} \ No newline at end of file diff --git a/_generated/DockerV0/Strings/resources.resjson/es-ES/resources.resjson b/_generated/DockerV0/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..8421b921a13e --- /dev/null +++ b/_generated/DockerV0/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,82 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "Compila, etiqueta, inserta o ejecuta imágenes de Docker, o bien ejecuta un comando de Docker.", + "loc.instanceNameFormat": "$(action)", + "loc.group.displayName.advanced": "Opciones avanzadas", + "loc.input.label.containerregistrytype": "Tipo de Container Registry", + "loc.input.help.containerregistrytype": "Seleccione \"Azure Container Registry\" para conectarse a él mediante una conexión del servicio de Azure. Seleccione \"Registro de contenedor\" para conectarse al Docker Hub o a cualquier otro registro de contenedor privado.", + "loc.input.label.dockerRegistryEndpoint": "Conexión de servicio del Registro de Docker", + "loc.input.help.dockerRegistryEndpoint": "Seleccione una conexión de servicio de registro de Docker. Obligatorio para los comandos que deben autenticarse en un registro.", + "loc.input.label.azureSubscriptionEndpoint": "Suscripción a Azure", + "loc.input.help.azureSubscriptionEndpoint": "Seleccione una suscripción de Azure", + "loc.input.label.azureContainerRegistry": "Azure Container Registry", + "loc.input.help.azureContainerRegistry": "Seleccione una instancia de Azure Container Registry en la suscripción de Azure seleccionada. La imagen del contenedor se compilará y se insertará en dicha instancia.", + "loc.input.label.action": "Acción", + "loc.input.help.action": "Seleccione una acción de Docker.", + "loc.input.label.dockerFile": "Archivo de Docker", + "loc.input.help.dockerFile": "Ruta de acceso al Dockerfile.", + "loc.input.label.addBaseImageData": "Adición de metadatos de imagen base a imágenes", + "loc.input.help.addBaseImageData": "De forma predeterminada, se agregan datos de imagen base, como el nombre y el resumen, lo que ayuda a aumentar la trazabilidad. Puede desactivar este comportamiento predeterminado mediante esta entrada.", + "loc.input.label.buildArguments": "Argumentos de compilación", + "loc.input.help.buildArguments": "Variables de tiempo de compilación para el archivo de Docker. Especifique cada par nombre=valor en una línea nueva.", + "loc.input.label.defaultContext": "Usar contexto de compilación predeterminado", + "loc.input.help.defaultContext": "Establece el contexto de compilación en el directorio que contiene el archivo de Docker.", + "loc.input.label.context": "Contexto de compilación", + "loc.input.help.context": "Ruta de acceso del contexto de compilación.", + "loc.input.label.imageName": "Nombre de la imagen", + "loc.input.help.imageName": "Nombre de la imagen de Docker que se debe compilar, insertar o ejecutar.", + "loc.input.label.imageNamesPath": "Ruta de acceso de los nombres de imagen", + "loc.input.help.imageNamesPath": "Ruta de acceso a un archivo de texto que contiene los nombres de las imágenes de Docker que se van a etiquetar o a insertar. Cada nombre de imagen se incluye en su propia línea.", + "loc.input.label.qualifyImageName": "Completar el nombre de la imagen", + "loc.input.help.qualifyImageName": "Completa el nombre de la imagen con el nombre de host de la conexión de servicio de registro de Docker, si no se ha especificado otra cosa.", + "loc.input.label.additionalImageTags": "Etiquetas de imagen adicionales", + "loc.input.help.additionalImageTags": "Se van a compilar o insertar más etiquetas para la imagen de Docker.", + "loc.input.label.includeSourceTags": "Incluir etiquetas de origen", + "loc.input.help.includeSourceTags": "Incluye las etiquetas de GIT cuando se compila o inserta la imagen de Docker.", + "loc.input.label.includeLatestTag": "Incluir etiqueta \"latest\"", + "loc.input.help.includeLatestTag": "Incluye la etiqueta \"latest\" cuando se compila o inserta la imagen de Docker.", + "loc.input.label.imageDigestFile": "Archivo de resumen de imagen", + "loc.input.help.imageDigestFile": "Ruta de acceso a un archivo que se crea y rellena con el resumen del repositorio de imágenes completo de la imagen de Docker que se insertó.", + "loc.input.label.containerName": "Nombre del contenedor", + "loc.input.help.containerName": "Nombre del contenedor Docker que se debe ejecutar.", + "loc.input.label.ports": "Puertos", + "loc.input.help.ports": "Puertos en el contenedor Docker para publicar en el host. Especifique cada enlace puerto-de-host:puerto-del-contenedor en una línea nueva.", + "loc.input.label.volumes": "Volúmenes", + "loc.input.help.volumes": "Volúmenes que deben montarse desde el host. Especifique cada entrada directorio-del-host:directorio-del-contenedor en una línea nueva.", + "loc.input.label.envVars": "Variables de entorno", + "loc.input.help.envVars": "Variables de entorno para el contenedor Docker. Especifique cada par nombre=valor en una línea nueva.", + "loc.input.label.workDir": "Directorio de trabajo", + "loc.input.help.workDir": "Directorio de trabajo para el contenedor Docker.", + "loc.input.label.entrypoint": "Invalidación de punto de entrada", + "loc.input.help.entrypoint": "Reemplaza el punto de entrada predeterminado para el contenedor Docker.", + "loc.input.label.containerCommand": "Comando", + "loc.input.help.containerCommand": "El comando docker run primero crea una capa de contenedor grabable sobre la imagen especificada y, a continuación, la inicia mediante el comando de ejecución especificado. Por ejemplo, si la imagen contiene una aplicación web Python Flask simple puede especificar \"python app.py\" para iniciar la aplicación web.", + "loc.input.label.detached": "Ejecutar en segundo plano", + "loc.input.help.detached": "Ejecuta el contenedor Docker en segundo plano.", + "loc.input.label.restartPolicy": "Directiva de reinicio", + "loc.input.help.restartPolicy": "Seleccione una directiva de reinicio.", + "loc.input.label.restartMaxRetries": "Máximo de reintentos de reinicio", + "loc.input.help.restartMaxRetries": "Número máximo de reintentos de reinicio del demonio de Docker.", + "loc.input.label.customCommand": "Comando", + "loc.input.help.customCommand": "Comando de Docker que se debe ejecutar, con argumentos. Por ejemplo, \"rmi -f image-name\" para forzar la eliminación de una imagen.", + "loc.input.label.dockerHostEndpoint": "Conexión de servicio de host de Docker", + "loc.input.help.dockerHostEndpoint": "Seleccione una conexión de servicio de host de Docker. El valor predeterminado es el host del agente.", + "loc.input.label.enforceDockerNamingConvention": "Forzar el nombre de imagen para que siga la convención de nomenclatura de Docker", + "loc.input.help.enforceDockerNamingConvention": "Si está habilitada, el nombre de la imagen de Docker se modificará de acuerdo con la convención de nomenclatura de Docker. Esta convierte los caracteres en mayúscula a minúscula y quita los espacios en el nombre de la imagen.", + "loc.input.label.cwd": "Directorio de trabajo", + "loc.input.help.cwd": "Directorio de trabajo del comando de Docker.", + "loc.input.label.memory": "Límite de memoria", + "loc.input.help.memory": "La cantidad máxima de memoria disponible para el contenedor expresada como entero con sufijos opcionales; por ejemplo, \"2 GB\".", + "loc.messages.ContainerPatternFound": "Se encontró un patrón en el parámetro filepath de Docker.", + "loc.messages.ContainerPatternNotFound": "No se ha encontrado ningún patrón en el parámetro filepath de Docker.", + "loc.messages.ContainerDockerFileNotFound": "No se encontró ningún archivo de Docker que coincidiera con %s.", + "loc.messages.ConnectingToDockerHost": "La variable DOCKER_HOST está establecida. Docker intentará conectarse a su host: %s", + "loc.messages.DockerHostVariableWarning": "La variable DOCKER_HOST está establecida. Asegúrese de que el demonio de Docker se está ejecutando en %s.", + "loc.messages.NoImagesInImageNamesFile": "Se espera al menos un nombre de imagen en el archivo \"%s\".", + "loc.messages.CantWriteDataToFile": "No se pueden escribir datos en el archivo %s. Error: %s", + "loc.messages.NoDataWrittenOnFile": "No se escribieron datos en el archivo %s", + "loc.messages.FileContentSynced": "Se sincronizó el contenido del archivo con el disco. El contenido es %s.", + "loc.messages.OutputVariableDataSizeExceeded": "La variable de salida no establecida como salida del comando de Docker superó la longitud máxima admitida. Longitud de salida: %s. Longitud máxima admitida: %s", + "loc.messages.WritingDockerConfigToTempFile": "Escribiendo la configuración de Docker en el archivo temporal. Ruta de acceso del archivo: %s. Configuración de Docker: %s" +} \ No newline at end of file diff --git a/_generated/DockerV0/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/DockerV0/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..de0328288138 --- /dev/null +++ b/_generated/DockerV0/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,82 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "Générer, étiqueter, envoyer (push) ou exécuter des images Docker, ou bien exécuter une commande Docker", + "loc.instanceNameFormat": "$(action)", + "loc.group.displayName.advanced": "Options avancées", + "loc.input.label.containerregistrytype": "Type de registre de conteneurs", + "loc.input.help.containerregistrytype": "Sélectionnez 'Azure Container Registry' pour vous y connecter à l'aide d'une connexion de service Azure. Sélectionnez 'Registre de conteneurs' pour vous connecter à Docker Hub ou tout autre registre de conteneurs privé.", + "loc.input.label.dockerRegistryEndpoint": "Connexion de service de registre Docker", + "loc.input.help.dockerRegistryEndpoint": "Sélectionnez une connexion de service de registre Docker. Obligatoire pour les commandes qui doivent s'authentifier après d'un registre.", + "loc.input.label.azureSubscriptionEndpoint": "Abonnement Azure", + "loc.input.help.azureSubscriptionEndpoint": "Sélectionnez un abonnement Azure", + "loc.input.label.azureContainerRegistry": "Azure Container Registry", + "loc.input.help.azureContainerRegistry": "Sélectionnez un registre Azure Container Registry dans l'abonnement Azure sélectionné. L'image conteneur va être générée et envoyée (push) vers ce registre de conteneurs.", + "loc.input.label.action": "Action", + "loc.input.help.action": "Sélectionnez une action Docker.", + "loc.input.label.dockerFile": "Fichier Docker", + "loc.input.help.dockerFile": "Chemin du fichier Docker.", + "loc.input.label.addBaseImageData": "Ajouter des métadonnées d’image de base à des images", + "loc.input.help.addBaseImageData": "Par défaut, les données de l'image de base, telles que le nom de l'image de base et le résumé, sont ajoutées, ce qui facilite la traçabilité. Vous pouvez désactiver ce comportement par défaut en utilisant cette entrée.", + "loc.input.label.buildArguments": "Argument de build", + "loc.input.help.buildArguments": "Variables de build du fichier Docker. Spécifiez chaque paire nom=valeur sur une nouvelle ligne.", + "loc.input.label.defaultContext": "Utiliser le contexte de build par défaut", + "loc.input.help.defaultContext": "Définissez le contexte de build en fonction du répertoire qui contient le fichier Docker.", + "loc.input.label.context": "Contexte de build", + "loc.input.help.context": "Chemin du contexte de build.", + "loc.input.label.imageName": "Nom de l'image", + "loc.input.help.imageName": "Nom de l'image Docker à générer, envoyer (push) ou exécuter.", + "loc.input.label.imageNamesPath": "Chemin des noms d'images", + "loc.input.help.imageNamesPath": "Chemin d'un fichier texte contenant les noms des images Docker à étiqueter ou à envoyer (push). Chaque nom d'image se trouve sur sa propre ligne.", + "loc.input.label.qualifyImageName": "Qualifier le nom de l'image", + "loc.input.help.qualifyImageName": "Qualifiez le nom de l'image à l'aide du nom d'hôte de la connexion de service de registre Docker, sauf indication contraire.", + "loc.input.label.additionalImageTags": "Étiquettes d'image supplémentaires", + "loc.input.help.additionalImageTags": "Étiquettes supplémentaires pour l'image Docker faisant l'objet d'une génération ou d'un Push.", + "loc.input.label.includeSourceTags": "Inclure les étiquettes sources", + "loc.input.help.includeSourceTags": "Incluez les étiquettes Git durant la génération ou le Push de l'image Docker.", + "loc.input.label.includeLatestTag": "Inclure l'étiquette Latest", + "loc.input.help.includeLatestTag": "Incluez l'étiquette 'latest' durant la génération ou le Push de l'image Docker.", + "loc.input.label.imageDigestFile": "Fichier de condensat d'image", + "loc.input.help.imageDigestFile": "Chemin d'un fichier créé et rempli à l'aide du condensat de dépôt d'image complet de l'image Docker ayant fait l'objet d'un Push.", + "loc.input.label.containerName": "Nom du conteneur", + "loc.input.help.containerName": "Nom du conteneur Docker à exécuter.", + "loc.input.label.ports": "Ports", + "loc.input.help.ports": "Ports du conteneur Docker à publier sur l'hôte. Spécifiez chaque liaison port d'hôte:port de conteneur sur une nouvelle ligne.", + "loc.input.label.volumes": "Volumes", + "loc.input.help.volumes": "Volumes à monter à partir de l'hôte. Spécifiez chaque liaison répertoire d'hôte:répertoire de conteneur sur une nouvelle ligne.", + "loc.input.label.envVars": "Variables d'environnement", + "loc.input.help.envVars": "Variables d'environnement du conteneur Docker. Spécifiez chaque paire nom=valeur sur une nouvelle ligne.", + "loc.input.label.workDir": "Répertoire de travail", + "loc.input.help.workDir": "Répertoire de travail du conteneur Docker.", + "loc.input.label.entrypoint": "Remplacement du point d'entrée", + "loc.input.help.entrypoint": "Remplacez le point d'entrée par défaut du conteneur Docker.", + "loc.input.label.containerCommand": "Commande", + "loc.input.help.containerCommand": "La commande docker run crée d'abord une couche conteneur inscriptible sur l'image spécifiée, puis la démarre à l'aide de la commande d'exécution spécifiée. Par exemple, si l'image contient une simple application web Python Flask, vous pouvez spécifier 'python app.py' pour lancer l'application web.", + "loc.input.label.detached": "Exécuter en arrière-plan", + "loc.input.help.detached": "Exécutez le conteneur Docker en arrière-plan.", + "loc.input.label.restartPolicy": "Stratégie de redémarrage", + "loc.input.help.restartPolicy": "Sélectionnez une stratégie de redémarrage.", + "loc.input.label.restartMaxRetries": "Nombre maximal de tentatives de redémarrage", + "loc.input.help.restartMaxRetries": "Nombre maximal de tentatives de redémarrage du démon Docker.", + "loc.input.label.customCommand": "Commande", + "loc.input.help.customCommand": "Commande Docker à exécuter avec les arguments. Par exemple, 'rmi -f image-name' permet de forcer la suppression d'une image.", + "loc.input.label.dockerHostEndpoint": "Connexion de service d'hôte Docker", + "loc.input.help.dockerHostEndpoint": "Sélectionnez une connexion de service d'hôte Docker. Par défaut, il s'agit de l'hôte de l'agent.", + "loc.input.label.enforceDockerNamingConvention": "Forcer le nom de l'image à suivre la convention de nommage Docker", + "loc.input.help.enforceDockerNamingConvention": "Si l'option est activée, le nom de l'image Docker est modifié conformément à la convention de nommage Docker. Convertit les majuscules en minuscules, et supprime les espaces dans le nom de l'image.", + "loc.input.label.cwd": "Répertoire de travail", + "loc.input.help.cwd": "Répertoire de travail de la commande Docker.", + "loc.input.label.memory": "Limite de mémoire", + "loc.input.help.memory": "Quantité maximale de mémoire disponible pour le conteneur sous la forme d'un entier avec des suffixes facultatifs, par exemple '2 Go'.", + "loc.messages.ContainerPatternFound": "Modèle trouvé dans le paramètre filepath Docker", + "loc.messages.ContainerPatternNotFound": "Modèle introuvable dans le paramètre filepath Docker", + "loc.messages.ContainerDockerFileNotFound": "Le fichier Docker correspondant à %s est introuvable.", + "loc.messages.ConnectingToDockerHost": "La variable DOCKER_HOST est définie. Docker va tenter de se connecter à l'hôte Docker : %s", + "loc.messages.DockerHostVariableWarning": "La variable DOCKER_HOST est définie. Vérifiez que le démon Docker s'exécute sur %s", + "loc.messages.NoImagesInImageNamesFile": "Au moins un nom d'image est attendu dans le fichier '%s'.", + "loc.messages.CantWriteDataToFile": "Impossible d'écrire des données dans le fichier %s. Erreur : %s", + "loc.messages.NoDataWrittenOnFile": "Aucune donnée n'a été écrite dans le fichier %s", + "loc.messages.FileContentSynced": "Synchronisation effectuée du contenu du fichier sur le disque. Le contenu est %s.", + "loc.messages.OutputVariableDataSizeExceeded": "La variable de sortie non définie en tant que sortie de la commande Docker a dépassé la longueur maximale prise en charge. Longueur de sortie : %s. Longueur maximale prise en charge : %s", + "loc.messages.WritingDockerConfigToTempFile": "Écriture de la configuration Docker dans le fichier temporaire. Chemin de fichier : %s. Configuration Docker : %s" +} \ No newline at end of file diff --git a/_generated/DockerV0/Strings/resources.resjson/it-IT/resources.resjson b/_generated/DockerV0/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..c462aa15f186 --- /dev/null +++ b/_generated/DockerV0/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,82 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "Consente di compilare, assegnare tag, effettuare il push o eseguire immagini Docker oppure di eseguire un comando di Docker", + "loc.instanceNameFormat": "$(action)", + "loc.group.displayName.advanced": "Opzioni avanzate", + "loc.input.label.containerregistrytype": "Tipo di registro contenitori", + "loc.input.help.containerregistrytype": "Selezionare 'Registro Azure Container' per connettersi ad esso tramite una connessione al servizio Azure. Selezionare 'Registro contenitori' per connettersi a Docker Hub o a qualsiasi altro registro contenitori privato.", + "loc.input.label.dockerRegistryEndpoint": "Connessione al servizio Registro Docker", + "loc.input.help.dockerRegistryEndpoint": "Consente di selezionare una connessione al servizio Registro Docker. È obbligatorio per i comandi che devono eseguire l'autenticazione con un registro.", + "loc.input.label.azureSubscriptionEndpoint": "Sottoscrizione di Azure", + "loc.input.help.azureSubscriptionEndpoint": "Consente di selezionare una sottoscrizione di Azure", + "loc.input.label.azureContainerRegistry": "Registro contenitori di Azure", + "loc.input.help.azureContainerRegistry": "Consente di selezionare un Registro Azure Container nella sottoscrizione di Azure selezionata. L'immagine del contenitore verrà creata e ne verrà eseguito il push in questo registro contenitori.", + "loc.input.label.action": "Azione", + "loc.input.help.action": "Consente di selezionare un'azione di Docker.", + "loc.input.label.dockerFile": "File Docker", + "loc.input.help.dockerFile": "Percorso del Dockerfile.", + "loc.input.label.addBaseImageData": "Aggiungere i metadati dell'immagine di base alle immagini", + "loc.input.help.addBaseImageData": "Per impostazione predefinita, i dati dell'immagine di base, come il nome dell'immagine di base e il digest, vengono aggiunti, contribuendo alla tracciabilità. È possibile rifiutare il comportamento predefinito usando questo input.", + "loc.input.label.buildArguments": "Argomenti di compilazione", + "loc.input.help.buildArguments": "Variabili della fase di compilazione per il file Docker. Specificare ogni coppia nome=valore su una nuova riga.", + "loc.input.label.defaultContext": "Usa contesto di compilazione predefinito", + "loc.input.help.defaultContext": "Consente di impostare il contesto di compilazione per la directory che contiene il file Docker.", + "loc.input.label.context": "Contesto di compilazione", + "loc.input.help.context": "Percorso del contesto di compilazione.", + "loc.input.label.imageName": "Nome immagine", + "loc.input.help.imageName": "Nome dell'immagine Docker da compilare, eseguire o di cui effettuare il push.", + "loc.input.label.imageNamesPath": "Percorso dei nomi delle immagini", + "loc.input.help.imageNamesPath": "Percorso di un file di testo che contiene i nomi delle immagini Docker a cui assegnare un tag o di cui effettuare il push. Ogni nome di immagine si trova su una riga distinta.", + "loc.input.label.qualifyImageName": "Qualifica nome dell'immagine", + "loc.input.help.qualifyImageName": "Qualifica il nome dell'immagine con il nome host della connessione al servizio Registro Docker se non viene specificato diversamente.", + "loc.input.label.additionalImageTags": "Tag immagine aggiuntivi", + "loc.input.help.additionalImageTags": "Tag aggiuntivi per l'immagine Docker da compilare o di cui effettuare il push.", + "loc.input.label.includeSourceTags": "Includi tag di origine", + "loc.input.help.includeSourceTags": "Include i tag GIT quando si compila o si effettua il push dell'immagine Docker.", + "loc.input.label.includeLatestTag": "Includi tag latest", + "loc.input.help.includeLatestTag": "Include il tag 'latest' quando si compila o si effettua il push dell'immagine Docker.", + "loc.input.label.imageDigestFile": "File digest dell'immagine", + "loc.input.help.imageDigestFile": "Percorso di un file che viene creato e popolato con il digest completo del repository delle immagini dell'immagine Docker di cui è stato eseguito il push.", + "loc.input.label.containerName": "Nome contenitore", + "loc.input.help.containerName": "Nome del contenitore Docker da eseguire.", + "loc.input.label.ports": "Porte", + "loc.input.help.ports": "Porte nel contenitore Docker da pubblicare nell'host. Specificare ogni binding porta-host:porta-contenitore su una nuova riga.", + "loc.input.label.volumes": "Volumi", + "loc.input.help.volumes": "Volumi da montare dall'host. Specificare ogni binding directory-host:directory-contenitore su una nuova riga.", + "loc.input.label.envVars": "Variabili di ambiente", + "loc.input.help.envVars": "Variabili di ambiente per il contenitore Docker. Specificare ogni coppia nome=valore su una nuova riga.", + "loc.input.label.workDir": "Directory di lavoro", + "loc.input.help.workDir": "Directory di lavoro per il contenitore Docker.", + "loc.input.label.entrypoint": "Override del punto di ingresso", + "loc.input.help.entrypoint": "Esegue l'override del punto di ingresso predefinito per il contenitore Docker.", + "loc.input.label.containerCommand": "Comando", + "loc.input.help.containerCommand": "Il comando docker run crea prima un livello contenitore scrivibile sull'immagine specificata e quindi inizia a usare il comando run specificato. Se ad esempio l'immagine contiene un'applicazione Web Python Flask semplice, è possibile specificare 'python app.py' per avviarla.", + "loc.input.label.detached": "Esegui in background", + "loc.input.help.detached": "Esegue il contenitore Docker in background.", + "loc.input.label.restartPolicy": "Criteri di riavvio", + "loc.input.help.restartPolicy": "Consente di selezionare un criterio di riavvio.", + "loc.input.label.restartMaxRetries": "Numero massimo di tentativi di riavvio", + "loc.input.help.restartMaxRetries": "Numero massimo di tentativi di riavvio eseguiti dal daemon di Docker.", + "loc.input.label.customCommand": "Comando", + "loc.input.help.customCommand": "Comando di Docker da eseguire, con relativi argomenti, ad esempio 'rmi -f nome-immagine' per forzare la rimozione di un'immagine.", + "loc.input.label.dockerHostEndpoint": "Connessione al servizio host Docker", + "loc.input.help.dockerHostEndpoint": "Consente di selezionare una connessione al servizio host Docker. Per impostazione predefinita, viene usato l'host dell'agente.", + "loc.input.label.enforceDockerNamingConvention": "Forza il rispetto della convenzione di denominazione di Docker per il nome dell'immagine", + "loc.input.help.enforceDockerNamingConvention": "Se questa opzione è abilitata, il nome dell'immagine Docker verrà modificato in base alla convenzione di denominazione di Docker, secondo la quale i caratteri maiuscoli vengono convertiti in minuscoli e gli spazi presenti nel nome vengono rimossi.", + "loc.input.label.cwd": "Directory di lavoro", + "loc.input.help.cwd": "Directory di lavoro per il comando di Docker.", + "loc.input.label.memory": "Limite di memoria", + "loc.input.help.memory": "Quantità massima di memoria disponibile per il contenitore sotto forma di numero intero con suffissi facoltativi, come '2GB'.", + "loc.messages.ContainerPatternFound": "Il criterio è stato trovato nel parametro filepath di Docker", + "loc.messages.ContainerPatternNotFound": "Non è stato trovato alcun criterio nel parametro filepath di Docker", + "loc.messages.ContainerDockerFileNotFound": "Non è stato trovato alcun file Docker corrispondente a %s.", + "loc.messages.ConnectingToDockerHost": "La variabile DOCKER_HOST è impostata. Docker proverà a connettersi all'host Docker: %s", + "loc.messages.DockerHostVariableWarning": "La variabile DOCKER_HOST è impostata. Assicurarsi che il daemon Docker sia in esecuzione in: %s", + "loc.messages.NoImagesInImageNamesFile": "Il file '%s' deve contenere almeno un nome di immagine.", + "loc.messages.CantWriteDataToFile": "Non è possibile scrivere dati nel file %s. Errore: %s", + "loc.messages.NoDataWrittenOnFile": "Non sono stati scritti dati nel file %s", + "loc.messages.FileContentSynced": "Il contenuto del file è stato sincronizzato con il disco. Il contenuto è %s.", + "loc.messages.OutputVariableDataSizeExceeded": "La variabile di output non impostata come output del comando Docker supera la lunghezza massima supportata. Lunghezza dell'output: %s. Lunghezza massima supportata: %s", + "loc.messages.WritingDockerConfigToTempFile": "Scrittura della configurazione di Docker nel file temporaneo. Percorso del file: %s. Configurazione di Docker: %s" +} \ No newline at end of file diff --git a/_generated/DockerV0/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/DockerV0/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..6cdf8a9d3f64 --- /dev/null +++ b/_generated/DockerV0/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,82 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "Docker イメージをビルド、タグ付け、プッシュ、実行するか、Docker コマンドを実行します", + "loc.instanceNameFormat": "$(action)", + "loc.group.displayName.advanced": "詳細設定のオプション", + "loc.input.label.containerregistrytype": "コンテナー レジストリの種類", + "loc.input.help.containerregistrytype": "Azure サービス接続を使用して接続するには、'Azure コンテナー レジストリ' を選択します。Docker Hub またはその他のプライベート コンテナー レジストリに接続するには、'コンテナー レジストリ' を選択します。", + "loc.input.label.dockerRegistryEndpoint": "Docker レジストリ サービス接続", + "loc.input.help.dockerRegistryEndpoint": "Docker レジストリ サービス接続を選択します。レジストリを使って認証する必要のあるコマンドの場合に必要です。", + "loc.input.label.azureSubscriptionEndpoint": "Azure サブスクリプション", + "loc.input.help.azureSubscriptionEndpoint": "Azure サブスクリプションを選択します", + "loc.input.label.azureContainerRegistry": "Azure Container Registry", + "loc.input.help.azureContainerRegistry": "選択した Azure サブスクリプションの Azure コンテナー レジストリを選択します。作成されたコンテナーのイメージは、このコンテナー レジストリにプッシュされます。", + "loc.input.label.action": "アクション", + "loc.input.help.action": "Docker アクションを選択します。", + "loc.input.label.dockerFile": "Docker ファイル", + "loc.input.help.dockerFile": "Dockerfile へのパスです。", + "loc.input.label.addBaseImageData": "画像にベース イメージのメタデータを追加します", + "loc.input.help.addBaseImageData": "既定では、ベース イメージ名やダイジェストなどのベース イメージ データが追加されます。これは追跡可能性に貢献します。この入力を使用して、この既定の動作をオプトアウトできます。", + "loc.input.label.buildArguments": "ビルド引数", + "loc.input.help.buildArguments": "Docker ファイル用のビルド時変数です。名前=値のペアを新しい行ごとに指定します。", + "loc.input.label.defaultContext": "既定のビルド コンテキストを使用する", + "loc.input.help.defaultContext": "ビルド コンテキストを、Docker ファイルが入っているディレクトリに設定します。", + "loc.input.label.context": "ビルド コンテキスト", + "loc.input.help.context": "ビルド コンテキストへのパスです。", + "loc.input.label.imageName": "イメージ名", + "loc.input.help.imageName": "ビルド、プッシュ、実行する Docker イメージの名前。", + "loc.input.label.imageNamesPath": "イメージ名のパス", + "loc.input.help.imageNamesPath": "タグ付けまたはプッシュする Docker イメージの名前が記載されたテキスト ファイルへのパス。各行に 1 つずつイメージ名が記載されます。", + "loc.input.label.qualifyImageName": "イメージ名を修飾", + "loc.input.help.qualifyImageName": "イメージ名を Docker レジストリ サービス接続のホスト名で修飾します (特に指定されていない場合)。", + "loc.input.label.additionalImageTags": "追加のイメージ タグ", + "loc.input.help.additionalImageTags": "ビルドまたはプッシュされている Docker イメージの追加タグです。", + "loc.input.label.includeSourceTags": "ソース タグを含める", + "loc.input.help.includeSourceTags": "Docker イメージをビルドまたはプッシュするときに、Git タグを組み込みます。", + "loc.input.label.includeLatestTag": "最終のタグを含める", + "loc.input.help.includeLatestTag": "Docker イメージをビルドまたはプッシュするときに、'latest' タグを組み込みます。", + "loc.input.label.imageDigestFile": "イメージのダイジェスト ファイル", + "loc.input.help.imageDigestFile": "プッシュされた Docker イメージの完全なイメージ リポジトリ ダイジェストを使って作成、入力されたファイルへのパスです。", + "loc.input.label.containerName": "コンテナー名 ", + "loc.input.help.containerName": "実行する Docker コンテナーの名前です。", + "loc.input.label.ports": "ポート", + "loc.input.help.ports": "ホストに発行する Docker コンテナーのポートです。ホスト ポート:コンテナー ポートのバインドを新しい行ごとに指定します。", + "loc.input.label.volumes": "ボリューム", + "loc.input.help.volumes": "ホストからマウントするボリュームです。ホスト ディレクトリ:コンテナー ディレクトリを新しい行ごとに指定します。", + "loc.input.label.envVars": "環境変数", + "loc.input.help.envVars": "Docker コンテナーの環境変数です。名前=値のペアを新しい行ごとに指定します。", + "loc.input.label.workDir": "作業ディレクトリ", + "loc.input.help.workDir": "Docker コンテナーの作業ディレクトリです。", + "loc.input.label.entrypoint": "エントリ ポイントのオーバーライド", + "loc.input.help.entrypoint": "Docker コンテナーの既定のエントリ ポイントをオーバーライドします。", + "loc.input.label.containerCommand": "コマンド", + "loc.input.help.containerCommand": "docker run コマンドは、まず指定されたイメージの上に書き込み可能なコンテナー レイヤーを作成した後、指定された run コマンドを使用してそのコンテナー レイヤーを開始します。たとえば、イメージにシンプルな Python Flask Web アプリケーションが含まれている場合は、'python app.py' を指定すると、その Web アプリケーションを起動できます。", + "loc.input.label.detached": "バックグラウンドで実行", + "loc.input.help.detached": "バックグラウンドで Docker コンテナーを実行します。", + "loc.input.label.restartPolicy": "再起動ポリシー", + "loc.input.help.restartPolicy": "再起動ポリシーを選択します。", + "loc.input.label.restartMaxRetries": "再起動の最大試行回数", + "loc.input.help.restartMaxRetries": "Docker デーモンが再起動を試行する最大回数です。", + "loc.input.label.customCommand": "コマンド", + "loc.input.help.customCommand": "実行する Docker コマンド (引数付き) です。たとえば、イメージの削除を強制するには、'rmi -f イメージ名' と入力します。", + "loc.input.label.dockerHostEndpoint": "Docker ホスト サービス接続", + "loc.input.help.dockerHostEndpoint": "Docker ホスト サービス接続を選択します。既定では、エージェントのホストになります。", + "loc.input.label.enforceDockerNamingConvention": "イメージ名に Docker 命名規則を守らせる", + "loc.input.help.enforceDockerNamingConvention": "有効の場合は Docker 命名規則に従って Docker イメージ名が変更されます。大文字が小文字に変換され、イメージ名内のスペースが削除されます。", + "loc.input.label.cwd": "作業ディレクトリ", + "loc.input.help.cwd": "Docker コマンドの作業ディレクトリです。", + "loc.input.label.memory": "メモリの制限", + "loc.input.help.memory": "コンテナーで利用できる最大メモリ容量。'2GB' のような省略可能なサフィックスを含めた整数。", + "loc.messages.ContainerPatternFound": "docker filepath パラメーターにパターンが見つかりました", + "loc.messages.ContainerPatternNotFound": "docker filepath パラメーターにパターンが見つかりませんでした", + "loc.messages.ContainerDockerFileNotFound": "%s に一致する Docker ファイルは見つかりませんでした。", + "loc.messages.ConnectingToDockerHost": "DOCKER_HOST 変数が設定されています。Docker により、Docker ホスト %s への接続が試みられます", + "loc.messages.DockerHostVariableWarning": "DOCKER_HOST 変数が設定されています。Docker デーモンが %s で実行されていることをご確認ください", + "loc.messages.NoImagesInImageNamesFile": "ファイル '%s' には少なくとも 1 つのイメージ名が必要です。", + "loc.messages.CantWriteDataToFile": "ファイル %s にデータを書き込めません。エラー: %s", + "loc.messages.NoDataWrittenOnFile": "ファイル %s にデータが書き込まれませんでした", + "loc.messages.FileContentSynced": "ファイルの内容がディスクに同期されました。内容は %s です。", + "loc.messages.OutputVariableDataSizeExceeded": "Docker コマンドの出力がサポートされている最大長を超えたため、出力変数が設定されませんでした。出力の長さ: %s、サポートされている最大長: %s", + "loc.messages.WritingDockerConfigToTempFile": "Docker 構成を一時ファイルに書き込んでいます。ファイル パス: %s、Docker 構成: %s" +} \ No newline at end of file diff --git a/_generated/DockerV0/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/DockerV0/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..2b55d03afa4e --- /dev/null +++ b/_generated/DockerV0/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,82 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "Docker 이미지를 빌드, 태그 지정, 푸시 또는 실행하거나 Docker 명령을 실행합니다.", + "loc.instanceNameFormat": "$(action)", + "loc.group.displayName.advanced": "고급 옵션", + "loc.input.label.containerregistrytype": "Container Registry 유형", + "loc.input.help.containerregistrytype": "Azure 서비스 연결을 사용하여 연결하려면 'Azure Container Registry'를 선택합니다. Docker Hub나 기타 프라이빗 컨테이너 레지스트리에 연결하려면 '컨테이너 레지스트리'를 선택합니다.", + "loc.input.label.dockerRegistryEndpoint": "Docker 레지스트리 서비스 연결", + "loc.input.help.dockerRegistryEndpoint": "Docker 레지스트리 서비스 연결을 선택합니다. 레지스트리를 사용하여 인증해야 하는 명령에 필요합니다.", + "loc.input.label.azureSubscriptionEndpoint": "Azure 구독", + "loc.input.help.azureSubscriptionEndpoint": "Azure 구독을 선택합니다.", + "loc.input.label.azureContainerRegistry": "Azure Container Registry", + "loc.input.help.azureContainerRegistry": "선택한 Azure 구독에서 Azure Container Registry를 선택합니다. 컨테이너 이미지가 빌드되고 이 컨테이너 레지스트리로 푸시됩니다.", + "loc.input.label.action": "작업", + "loc.input.help.action": "Docker 작업을 선택합니다.", + "loc.input.label.dockerFile": "Docker 파일", + "loc.input.help.dockerFile": "Dockerfile의 경로입니다.", + "loc.input.label.addBaseImageData": "이미지에 기본 이미지 메타데이터 추가", + "loc.input.help.addBaseImageData": "기본적으로 기본 이미지 이름 및 다이제스트와 같은 기본 이미지 데이터가 추가되어 추적에 도움이 됩니다. 이 입력을 사용하여 이 기본 동작을 해제할 수 있습니다.", + "loc.input.label.buildArguments": "빌드 인수", + "loc.input.help.buildArguments": "Docker 파일에 대한 빌드 시간 변수입니다. 새 줄에서 각 이름=값 쌍을 지정하세요.", + "loc.input.label.defaultContext": "기본 빌드 컨텍스트 사용", + "loc.input.help.defaultContext": "Docker 파일을 포함하는 디렉터리에 빌드 컨텍스트를 설정합니다.", + "loc.input.label.context": "빌드 컨텍스트", + "loc.input.help.context": "빌드 컨텍스트에 대한 경로입니다.", + "loc.input.label.imageName": "이미지 이름", + "loc.input.help.imageName": "빌드, 푸시 또는 실행할 Docker 이미지의 이름입니다.", + "loc.input.label.imageNamesPath": "이미지 이름 경로", + "loc.input.help.imageNamesPath": "태그 또는 푸시할 Docker 이미지의 이름이 포함된 텍스트 파일의 경로입니다. 각 이미지 이름이 새 줄에 포함되어 있습니다.", + "loc.input.label.qualifyImageName": "이미지 이름 한정", + "loc.input.help.qualifyImageName": "달리 지정되지 않은 경우 Docker 레지스트리 서비스 연결의 호스트 이름으로 이미지 이름을 한정합니다.", + "loc.input.label.additionalImageTags": "추가 이미지 태그", + "loc.input.help.additionalImageTags": "빌드 또는 푸시되고 있는 Docker 이미지에 대한 추가 태그입니다.", + "loc.input.label.includeSourceTags": "소스 태그 포함", + "loc.input.help.includeSourceTags": "Docker 이미지를 빌드하거나 푸시할 때 Git 태그를 포함합니다.", + "loc.input.label.includeLatestTag": "최신 태그 포함", + "loc.input.help.includeLatestTag": "Docker 이미지를 빌드하거나 푸시할 때 '최신' 태그를 포함합니다.", + "loc.input.label.imageDigestFile": "이미지 다이제스트 파일", + "loc.input.help.imageDigestFile": "푸시된 Docker 이미지의 전체 이미지 리포지토리 다이제스트로 채워져 만들어진 파일에 대한 경로입니다.", + "loc.input.label.containerName": "컨테이너 이름", + "loc.input.help.containerName": "실행할 Docker 컨테이너의 이름입니다.", + "loc.input.label.ports": "포트", + "loc.input.help.ports": "호스트로 게시할 Docker 컨테이너의 포트입니다. 새 줄에 각 host-port:container-port 바인딩을 지정하세요.", + "loc.input.label.volumes": "볼륨", + "loc.input.help.volumes": "호스트에서 탑재된 볼륨입니다. 새 줄에 각 host-dir:container-dir를 지정하세요.", + "loc.input.label.envVars": "환경 변수", + "loc.input.help.envVars": "Docker 컨테이너에 대한 환경 변수입니다. 새 줄에서 각 이름=값 쌍을 지정하세요.", + "loc.input.label.workDir": "작업 디렉터리", + "loc.input.help.workDir": "Docker 컨테이너에 대한 작업 디렉터리입니다.", + "loc.input.label.entrypoint": "진입점 재정의", + "loc.input.help.entrypoint": "Docker 컨테이너에 대한 기본 진입점을 재정의합니다.", + "loc.input.label.containerCommand": "명령", + "loc.input.help.containerCommand": "docker run 명령은 먼저 지정된 이미지 위에 쓰기 가능한 컨테이너 계층을 만든 다음, 지정된 run 명령을 사용하여 컨테이너 계층을 시작합니다. 예를 들어 이미지에 간단한 Python Flask 웹 애플리케이션이 포함된 경우 'python app.py'를 지정하여 웹 애플리케이션을 시작할 수 있습니다.", + "loc.input.label.detached": "백그라운드에서 실행", + "loc.input.help.detached": "Docker 컨테이너를 백그라운드에서 실행합니다.", + "loc.input.label.restartPolicy": "재시작 정책", + "loc.input.help.restartPolicy": "재시작 정책을 선택합니다.", + "loc.input.label.restartMaxRetries": "최대 재시작 시도 수", + "loc.input.help.restartMaxRetries": "다시 시작 시 Docker 디먼 시도를 재시도하는 최대 횟수입니다.", + "loc.input.label.customCommand": "명령", + "loc.input.help.customCommand": "인수와 함께 실행할 Docker 명령입니다. 예를 들어 이미지를 강제로 제거하려는 경우 'rmi -f image-name'입니다.", + "loc.input.label.dockerHostEndpoint": "Docker 호스트 서비스 연결", + "loc.input.help.dockerHostEndpoint": "Docker 호스트 서비스 연결을 선택합니다. 기본값은 에이전트의 호스트로 지정됩니다.", + "loc.input.label.enforceDockerNamingConvention": "Docker 명명 규칙을 따르도록 이미지 이름 강제 적용", + "loc.input.help.enforceDockerNamingConvention": "사용하도록 설정하면 Docker 이미지 이름이 Docker 명명 규칙을 따르도록 수정됩니다. 이미지 이름에서 대문자를 소문자로 변환하고 공백을 제거합니다.", + "loc.input.label.cwd": "작업 디렉터리", + "loc.input.help.cwd": "Docker 명령에 대한 작업 디렉터리입니다.", + "loc.input.label.memory": "메모리 제한", + "loc.input.help.memory": "정수와 '2GB' 같은 선택적 접미사로 입력하는 컨테이너에 사용 가능한 최대 메모리양입니다.", + "loc.messages.ContainerPatternFound": "Docker filepath 매개 변수에 패턴 있음", + "loc.messages.ContainerPatternNotFound": "Docker filepath 매개 변수에 패턴 없음", + "loc.messages.ContainerDockerFileNotFound": "%s과(와) 일치하는 Docker 파일이 없습니다.", + "loc.messages.ConnectingToDockerHost": "DOCKER_HOST 변수가 설정되었습니다. Docker는 Docker 호스트 %s에 연결하려고 합니다.", + "loc.messages.DockerHostVariableWarning": "DOCKER_HOST 변수가 설정되었습니다. Docker 디먼 %s이(가) 실행 중인지 확인하세요.", + "loc.messages.NoImagesInImageNamesFile": "'%s' 파일에 이미지 이름이 하나 이상 있어야 합니다.", + "loc.messages.CantWriteDataToFile": "데이터를 %s 파일에 쓸 수 없습니다. 오류: %s", + "loc.messages.NoDataWrittenOnFile": "데이터를 %s 파일에 쓰지 않았습니다.", + "loc.messages.FileContentSynced": "파일 콘텐츠를 디스크에 동기화했습니다. 콘텐츠는 %s입니다.", + "loc.messages.OutputVariableDataSizeExceeded": "Docker 명령 출력으로 설정되지 않은 출력 변수가 지원되는 최대 길이를 초과했습니다. 출력 길이: %s, 지원되는 최대 길이: %s", + "loc.messages.WritingDockerConfigToTempFile": "임시 파일에 Docker 구성을 쓰는 중입니다. 파일 경로: %s, Docker 구성: %s" +} \ No newline at end of file diff --git a/_generated/DockerV0/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/DockerV0/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..7aec21f64132 --- /dev/null +++ b/_generated/DockerV0/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,82 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "Создание, пометка, отправка или запуск образов Docker или выполнение команды Docker", + "loc.instanceNameFormat": "$(action)", + "loc.group.displayName.advanced": "Дополнительные параметры", + "loc.input.label.containerregistrytype": "Тип реестра контейнеров", + "loc.input.help.containerregistrytype": "Выберите \"Реестр контейнеров Azure\", чтобы подключиться к нему с помощью подключения к службе Azure. Выберите \"Реестр контейнеров\", чтобы подключиться к Docker Hub или любому другому частному реестру контейнеров.", + "loc.input.label.dockerRegistryEndpoint": "Подключение к службе реестра Docker", + "loc.input.help.dockerRegistryEndpoint": "Выберите подключение к службе реестра Docker. Это требуется для команд, для выполнения которых необходимо пройти проверку подлинности в реестре.", + "loc.input.label.azureSubscriptionEndpoint": "Подписка Azure", + "loc.input.help.azureSubscriptionEndpoint": "Выберите подписку Azure", + "loc.input.label.azureContainerRegistry": "Реестр контейнеров Azure", + "loc.input.help.azureContainerRegistry": "Выберите реестр контейнеров Azure в выбранной подписке Azure. Образ контейнера будет собран и отправлен в этот реестр контейнеров.", + "loc.input.label.action": "Действие", + "loc.input.help.action": "Выберите действие Docker.", + "loc.input.label.dockerFile": "Файл Docker", + "loc.input.help.dockerFile": "Путь к Dockerfile.", + "loc.input.label.addBaseImageData": "Добавление базовых метаданных образа в образы", + "loc.input.help.addBaseImageData": "По умолчанию добавляются данные базового образа, например имя базового образа и дайджест, что улучшает возможности трассировки. Вы можете отказаться от этого поведения по умолчанию, используя эти входные данные.", + "loc.input.label.buildArguments": "Аргументы сборки", + "loc.input.help.buildArguments": "Переменные времени сборки для файла Docker. Каждую пару \"имя=значение\" следует указывать в новой строке.", + "loc.input.label.defaultContext": "Использовать контекст сборки по умолчанию", + "loc.input.help.defaultContext": "Задайте контекст сборки для каталога, в котором находится файл Docker.", + "loc.input.label.context": "Контекст сборки", + "loc.input.help.context": "Путь к контексту сборки.", + "loc.input.label.imageName": "Имя образа", + "loc.input.help.imageName": "Имя образа Docker для сборки, отправки или выполнения.", + "loc.input.label.imageNamesPath": "Путь к именам образов", + "loc.input.help.imageNamesPath": "Путь к текстовому файлу, содержащему имена образов Docker для публикации или добавления меток. Каждое имя указывается на отдельной строке.", + "loc.input.label.qualifyImageName": "Определить имя образа", + "loc.input.help.qualifyImageName": "Определите имя образа с помощью имени узла подключения к службе реестра Docker, если не указано иное.", + "loc.input.label.additionalImageTags": "Дополнительные теги образов", + "loc.input.help.additionalImageTags": "Выполняется создание или отправка дополнительных тегов для образа Docker.", + "loc.input.label.includeSourceTags": "Включить исходные теги", + "loc.input.help.includeSourceTags": "При создании или отправке образа Docker следует включить теги Git.", + "loc.input.label.includeLatestTag": "Включить последний тег", + "loc.input.help.includeLatestTag": "При создании или отправке образа Docker следует включить тег \"latest\".", + "loc.input.label.imageDigestFile": "Файл дайджеста образа", + "loc.input.help.imageDigestFile": "Путь к созданному файлу, в который внесен весь дайджест репозитория отправленного образа Docker.", + "loc.input.label.containerName": "Имя контейнера", + "loc.input.help.containerName": "Имя контейнера Docker для выполнения.", + "loc.input.label.ports": "Порты", + "loc.input.help.ports": "Порты в контейнере Docker для публикации на узле. Каждую привязку \"порт узла:порт контейнера\" следует указывать в новой строке.", + "loc.input.label.volumes": "Тома", + "loc.input.help.volumes": "Тома для подключения с узла. Каждый параметр \"host-dir:container-dir\" следует указывать в новой строке.", + "loc.input.label.envVars": "Переменные среды", + "loc.input.help.envVars": "Переменные среды для контейнера Docker. Каждую пару \"имя=значение\" следует указывать в новой строке.", + "loc.input.label.workDir": "Рабочий каталог", + "loc.input.help.workDir": "Рабочий каталог для контейнера Docker.", + "loc.input.label.entrypoint": "Переопределение точки входа", + "loc.input.help.entrypoint": "Переопределите точку входа по умолчанию для контейнера Docker.", + "loc.input.label.containerCommand": "Команда", + "loc.input.help.containerCommand": "Команда docker run сначала создает доступный для записи слой контейнера поверх заданного образа, а затем запускает его с помощью указанной команды run. Например, если образ содержит простое веб-приложение Python Flask, для запуска этого приложения можно указать \"python app.py\".", + "loc.input.label.detached": "Запустить в фоновом режиме", + "loc.input.help.detached": "Запуск контейнера Docker в фоновом режиме.", + "loc.input.label.restartPolicy": "Политика перезапуска", + "loc.input.help.restartPolicy": "Выберите политику перезапуска.", + "loc.input.label.restartMaxRetries": "Максимальное количество попыток перезапуска", + "loc.input.help.restartMaxRetries": "Максимальное количество попыток перезапуска управляющей программы Docker.", + "loc.input.label.customCommand": "Команда", + "loc.input.help.customCommand": "Команда Docker для выполнения (с аргументами). Например, \"rmi -f image-name\" для принудительного удаления образа.", + "loc.input.label.dockerHostEndpoint": "Подключение к службе узла Docker", + "loc.input.help.dockerHostEndpoint": "Выберите подключение к службе узла Docker. По умолчанию используется узел агента.", + "loc.input.label.enforceDockerNamingConvention": "Принудительно использовать соглашение об именовании Docker в имени образа", + "loc.input.help.enforceDockerNamingConvention": "Если этот параметр установлен, имя будет изменено в соответствии с соглашением об именовании Docker. Прописные буквы будут преобразованы в строчные, а пробелы в имени образа будут удалены.", + "loc.input.label.cwd": "Рабочий каталог", + "loc.input.help.cwd": "Рабочий каталог для команды Docker.", + "loc.input.label.memory": "Предельный объем памяти", + "loc.input.help.memory": "Максимальный объем памяти, доступный контейнеру, в виде целого числа с необязательными суффиксами, например \"2GB\".", + "loc.messages.ContainerPatternFound": "Обнаружен шаблон в параметре filepath в Docker", + "loc.messages.ContainerPatternNotFound": "Не найден шаблон в параметре filepath в Docker", + "loc.messages.ContainerDockerFileNotFound": "Файл Docker, соответствующий %s, не найден.", + "loc.messages.ConnectingToDockerHost": "Задана переменная DOCKER_HOST. Docker попытается подключиться к узлу Docker: %s", + "loc.messages.DockerHostVariableWarning": "Задана переменная DOCKER_HOST. Убедитесь, что управляющая программа Docker запущена на: %s", + "loc.messages.NoImagesInImageNamesFile": "В файле \"%s\" должно быть указано по меньшей мере одно имя образа.", + "loc.messages.CantWriteDataToFile": "Не удается записать данные в файл %s. Ошибка: %s", + "loc.messages.NoDataWrittenOnFile": "Данные не были записаны в файл %s", + "loc.messages.FileContentSynced": "Содержимое файла синхронизировано с диском. Содержимое: %s.", + "loc.messages.OutputVariableDataSizeExceeded": "Выходная переменная не задана, так как для выходных данных команды Docker превышена максимально поддерживаемая длина. Длина выходных данных: %s, максимально поддерживаемая длина: %s", + "loc.messages.WritingDockerConfigToTempFile": "Запись конфигурации Docker во временный файл. Путь к файлу: %s, конфигурация Docker: %s" +} \ No newline at end of file diff --git a/_generated/DockerV0/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/DockerV0/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..57e7d8a29426 --- /dev/null +++ b/_generated/DockerV0/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,82 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "生成、标记、推送或运行 Docker 映像,或者运行 Docker 命令", + "loc.instanceNameFormat": "$(action)", + "loc.group.displayName.advanced": "高级选项", + "loc.input.label.containerregistrytype": "容器注册表类型", + "loc.input.help.containerregistrytype": "选择“Azure 容器注册表”,可使用 Azure 服务连接来连接它。选择“容器注册表”可连接到 Docker Hub 或任何其他私有容器注册表。", + "loc.input.label.dockerRegistryEndpoint": "Docker 注册表服务连接", + "loc.input.help.dockerRegistryEndpoint": "选择 Docker 注册表服务连接。这对于需要执行注册表身份验证的命令是必需的。", + "loc.input.label.azureSubscriptionEndpoint": "Azure 订阅", + "loc.input.help.azureSubscriptionEndpoint": "选择 Azure 订阅", + "loc.input.label.azureContainerRegistry": "Azure 容器注册表", + "loc.input.help.azureContainerRegistry": "docker 运行命令首先在指定的映像上创建一个可写容器层,然后使用指定的运行命令启动它。例如,如果映像包含一个简单的 Python Flask Web 应用程序,则可以指定 \"python app.py\" 来启动 Web 应用程序。", + "loc.input.label.action": "操作", + "loc.input.help.action": "选择 Docker 操作。", + "loc.input.label.dockerFile": "Docker 文件", + "loc.input.help.dockerFile": "Dockerfile 路径。", + "loc.input.label.addBaseImageData": "将基本映像元数据添加到映像", + "loc.input.help.addBaseImageData": "默认情况下,将添加基本映像数据(如基本映像名称和摘要),这有助于提升可跟踪性。可以使用此输入选择退出此默认行为。", + "loc.input.label.buildArguments": "生成参数", + "loc.input.help.buildArguments": "Docker 文件的生成-时间变量。在新的一行指定每个名称=值对。", + "loc.input.label.defaultContext": "使用默认的生成上下文", + "loc.input.help.defaultContext": "将生成上下文设置为包含 Docker 文件的目录。", + "loc.input.label.context": "生成上下文", + "loc.input.help.context": "生成上下文的路径。", + "loc.input.label.imageName": "映像名", + "loc.input.help.imageName": "要生成、推送或运行的 Docker 映像的名称。", + "loc.input.label.imageNamesPath": "映像名称路径", + "loc.input.help.imageNamesPath": "文本文件路径,该文件中包含 tag 或 push 的 Docker 映像名称。每个映像名称包含在其自己的行上。", + "loc.input.label.qualifyImageName": "指定映像名", + "loc.input.help.qualifyImageName": "如果没有另行指定,请使用 Docker 注册表服务连接的主机名限定映像名称。", + "loc.input.label.additionalImageTags": "其他映像标记", + "loc.input.help.additionalImageTags": "正在生成或推送的 Docker 映像的其他标记。", + "loc.input.label.includeSourceTags": "包括源标记", + "loc.input.help.includeSourceTags": "生成或推送 Docker 映像时包括 Git 标记。", + "loc.input.label.includeLatestTag": "包括最近标记", + "loc.input.help.includeLatestTag": "生成或推送 Docker 映像时包括 \"latest\" 标记。", + "loc.input.label.imageDigestFile": "映像摘要文件", + "loc.input.help.imageDigestFile": "使用已推送的 Docker 映像的完整映像存储库摘要创建和填充的文件路径。", + "loc.input.label.containerName": "容器名", + "loc.input.help.containerName": "要运行的 Docker 容器的名称。", + "loc.input.label.ports": "端口", + "loc.input.help.ports": "Docker 容器中要发布到主机的端口。在新的一行指定每个 host-port:container-port 绑定。", + "loc.input.label.volumes": "卷", + "loc.input.help.volumes": "从主机装入的卷。在新的一行指定每个 host-dir:container-dir。", + "loc.input.label.envVars": "环境变量", + "loc.input.help.envVars": "Docker 容器的环境变量。在新的一行指定每个名称=值对。", + "loc.input.label.workDir": "工作目录", + "loc.input.help.workDir": "Docker 容器的工作目录。", + "loc.input.label.entrypoint": "入口点替代", + "loc.input.help.entrypoint": "替代 Docker 容器的默认入口点。", + "loc.input.label.containerCommand": "命令", + "loc.input.help.containerCommand": "docker 运行命令首先在指定的映像上创建一个可写容器层,然后使用指定的运行命令启动它。例如,如果映像包含一个简单的 Python Flask Web 应用程序,则可以指定“python app.py”来启动 Web 应用程序。", + "loc.input.label.detached": "后台运行", + "loc.input.help.detached": "在后台运行 Docker 容器。", + "loc.input.label.restartPolicy": "重启策略", + "loc.input.help.restartPolicy": "选择重启策略。", + "loc.input.label.restartMaxRetries": "最大重启次数", + "loc.input.help.restartMaxRetries": "Docker 守护程序进行重新启动尝试的最大次数。", + "loc.input.label.customCommand": "命令", + "loc.input.help.customCommand": "要执行的 Docker 命令,带参数。例如,强制删除图像的 \"rmi -f image-name\"。", + "loc.input.label.dockerHostEndpoint": "Docker 主机服务连接", + "loc.input.help.dockerHostEndpoint": "选择 Docker 主机服务连接。默认为代理的主机。", + "loc.input.label.enforceDockerNamingConvention": "强制映像名称遵循 Docker 命名约定", + "loc.input.help.enforceDockerNamingConvention": "如果已启用,将修改 docker 映像名称以遵循 Docker 命名约定。将大写字符转换为小写并删除映像名称中的空格。", + "loc.input.label.cwd": "工作目录", + "loc.input.help.cwd": "Docker 命令的工作目录。", + "loc.input.label.memory": "内存限制", + "loc.input.help.memory": "容器可用的最大内存量,格式为整数后跟可选后缀,如 \"2GB\"。", + "loc.messages.ContainerPatternFound": "Docker 文件路径参数中找到的模式", + "loc.messages.ContainerPatternNotFound": "Docker 文件路径参数中未找到任何模式", + "loc.messages.ContainerDockerFileNotFound": "找不到匹配 %s 的任何 Docker 文件。", + "loc.messages.ConnectingToDockerHost": "已设置 DOCKER_HOST 变量。Docker 将尝试连接到 Docker 主机: %s", + "loc.messages.DockerHostVariableWarning": "已设置 DOCKER_HOST 变量。请确保 Docker 守护程序正在 %s 上运行", + "loc.messages.NoImagesInImageNamesFile": "文件“%s”中至少应有一个映像名称。", + "loc.messages.CantWriteDataToFile": "无法将数据写入文件 %s。错误: %s", + "loc.messages.NoDataWrittenOnFile": "没有任何数据写入到文件 %s", + "loc.messages.FileContentSynced": "文件内容已同步到磁盘。内容为 %s。", + "loc.messages.OutputVariableDataSizeExceeded": "未设置为 Docker 命令输出的输出变量超出了支持的最大长度。输出长度: %s,支持的最大长度: %s", + "loc.messages.WritingDockerConfigToTempFile": "正在将 Docker 配置写入临时文件。文件路径: %s,Docker 配置: %s" +} \ No newline at end of file diff --git a/_generated/DockerV0/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/DockerV0/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..6f86aa79f222 --- /dev/null +++ b/_generated/DockerV0/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,82 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "建置、標記、推送或執行 Docker 映像,或執行 Docker 命令", + "loc.instanceNameFormat": "$(action)", + "loc.group.displayName.advanced": "進階選項", + "loc.input.label.containerregistrytype": "容器登錄類型", + "loc.input.help.containerregistrytype": "選取 [Azure Container Registry] 可使用使用 Azure 服務連線與其連線。選取 [容器登錄] 可連線至 Docker Hub 或其他私用容器登錄。", + "loc.input.label.dockerRegistryEndpoint": "Docker 登錄服務連線", + "loc.input.help.dockerRegistryEndpoint": "選取 Docker 登錄服務連線。必須為需要向登錄驗證的命令選取。", + "loc.input.label.azureSubscriptionEndpoint": "Azure 訂用帳戶", + "loc.input.help.azureSubscriptionEndpoint": "選取 Azure 訂閱", + "loc.input.label.azureContainerRegistry": "Azure Container Registry", + "loc.input.help.azureContainerRegistry": "在所選 Azure 訂用帳戶中選取 Azure Container Registry。容器映像會建置並推送至此容器登錄。", + "loc.input.label.action": "動作", + "loc.input.help.action": "請選取 Docker 動作。", + "loc.input.label.dockerFile": "Docker 檔案", + "loc.input.help.dockerFile": "Dockerfile 的路徑。", + "loc.input.label.addBaseImageData": "將基底映像中繼資料新增至映像", + "loc.input.help.addBaseImageData": "根據預設,系統會新增基底映像資料 (例如基底映像名稱與摘要)以協助可追蹤性。您可以使用此輸入來退出此預設行為。", + "loc.input.label.buildArguments": "建置引數", + "loc.input.help.buildArguments": "Docker 檔案的建置時間變數。請在新行上指定每一個 name=value 組。", + "loc.input.label.defaultContext": "使用預設建置內容", + "loc.input.help.defaultContext": "將建置內容設定為包含 Docker 檔案的目錄。", + "loc.input.label.context": "建置內容", + "loc.input.help.context": "建置內容的路徑。", + "loc.input.label.imageName": "映像名稱", + "loc.input.help.imageName": "所要建置、推送或執行的 Docker 映像名稱。", + "loc.input.label.imageNamesPath": "映像名稱路徑", + "loc.input.help.imageNamesPath": "包含所要標記或推送之 Docker 映像名稱的文字檔路徑。每個映像名稱將擁有獨立的行。", + "loc.input.label.qualifyImageName": "限定映像名稱", + "loc.input.help.qualifyImageName": "若無其他指定名稱,映像名稱將會是 Docker 登錄服務連線的主機名稱。", + "loc.input.label.additionalImageTags": "其他映像標記", + "loc.input.help.additionalImageTags": "要建置或推送之 Docker 映像的其他標記。", + "loc.input.label.includeSourceTags": "包含來源標記", + "loc.input.help.includeSourceTags": "於建置或推送 Docker 映像時加入 Git 標記。", + "loc.input.label.includeLatestTag": "包含最新標記", + "loc.input.help.includeLatestTag": "於建置或推送 Docker 映像時加入最新標記。", + "loc.input.label.imageDigestFile": "映像摘要檔案", + "loc.input.help.imageDigestFile": "所建立之檔案的路徑; 該檔案填入了所推送之 Docker 映像的完整映像保存庫摘要。", + "loc.input.label.containerName": "容器名稱", + "loc.input.help.containerName": "要執行之 Docker 容器的名稱。", + "loc.input.label.ports": "連接埠", + "loc.input.help.ports": "Docker 容器中用於推送到主機的連接埠。請在新行上指定每一個 host-port:container-port 繫結。", + "loc.input.label.volumes": "磁碟區", + "loc.input.help.volumes": "要掛接的主機磁碟區。請在新行上指定每一個 host-dir:container-dir。", + "loc.input.label.envVars": "環境變數", + "loc.input.help.envVars": "Docker 容器的環境變數。請在新行上指定每一個 name=value 組。", + "loc.input.label.workDir": "工作目錄", + "loc.input.help.workDir": "Docker 容器的工作目錄。", + "loc.input.label.entrypoint": "進入點覆寫", + "loc.input.help.entrypoint": "覆寫 Docker 容器的預設進入點。", + "loc.input.label.containerCommand": "命令", + "loc.input.help.containerCommand": "docker 執行命令會先在指定映像上建立可寫入容器層,再使用指定的執行命令啟動該映像。例如,如果映像包含簡易 Python Flask Web 應用程式,您可指定 'python app.py' 來啟動 Web 應用程式。", + "loc.input.label.detached": "在背景執行", + "loc.input.help.detached": "在背景執行 Docker 容器。", + "loc.input.label.restartPolicy": "重新啟動原則", + "loc.input.help.restartPolicy": "請選取重新啟動原則。", + "loc.input.label.restartMaxRetries": "重新啟動次數上限", + "loc.input.help.restartMaxRetries": "嘗試重新啟動 Docker 精靈的次數上限。", + "loc.input.label.customCommand": "命令", + "loc.input.help.customCommand": "要加上引數一起執行的 Docker 命令。例如 'rmi -f image-name' 表示要強制移除映像。", + "loc.input.label.dockerHostEndpoint": "Docker 主機服務連線", + "loc.input.help.dockerHostEndpoint": "選取 Docker 主機服務連線。預設為代理程式的主機。", + "loc.input.label.enforceDockerNamingConvention": "強制映像名稱遵循 Docker 命名慣例", + "loc.input.help.enforceDockerNamingConvention": "若啟用的 Docker 映像名稱將修改為遵循 Docker 命名慣例。請將大寫字元轉為小寫字元並移除映像名稱中的空格。", + "loc.input.label.cwd": "工作目錄", + "loc.input.help.cwd": "Docker 命令的工作目錄。", + "loc.input.label.memory": "記憶體限制", + "loc.input.help.memory": "容器可用的最大記憶體,值為整數,並可選擇加上尾碼,如 '2GB'。", + "loc.messages.ContainerPatternFound": "在 docker filepath 參數中找到的模式", + "loc.messages.ContainerPatternNotFound": "在 docker filepath 參數中找不到任何模式", + "loc.messages.ContainerDockerFileNotFound": "找不到任何的 Docker 檔案符合 %s。", + "loc.messages.ConnectingToDockerHost": "已設定 DOCKER_HOST 變數。Docker 會嘗試連線到 Docker 主機: %s", + "loc.messages.DockerHostVariableWarning": "已設定 DOCKER_HOST 變數。請確定 Docker 精靈正在下列位置執行: %s", + "loc.messages.NoImagesInImageNamesFile": "檔案 '%s' 中至少應有一個映像名稱。", + "loc.messages.CantWriteDataToFile": "無法將資料寫入檔案 %s。錯誤: %s", + "loc.messages.NoDataWrittenOnFile": "沒有任何資料寫入檔案 %s", + "loc.messages.FileContentSynced": "檔案內容已同步到磁碟。內容為 %s。", + "loc.messages.OutputVariableDataSizeExceeded": "因為 Docker 命令輸出超過了支援的長度上限,所以未設定輸出變數。輸出長度: %s,支援的長度上限: %s", + "loc.messages.WritingDockerConfigToTempFile": "正在將 Docker 設定寫入暫存檔案。檔案路徑: %s,Docker 設定: %s" +} \ No newline at end of file diff --git a/_generated/DockerV0/Tests/L0.ts b/_generated/DockerV0/Tests/L0.ts new file mode 100644 index 000000000000..6292bf1e0a61 --- /dev/null +++ b/_generated/DockerV0/Tests/L0.ts @@ -0,0 +1,325 @@ +import * as os from "os"; +import * as path from 'path'; +import * as assert from 'assert'; +import * as ttm from 'azure-pipelines-task-lib/mock-test'; +import tl = require('azure-pipelines-task-lib'); +import * as shared from './TestShared'; + +describe('Docker Suite', function() { + this.timeout(30000); + before((done) => { + process.env[shared.TestEnvVars.operatingSystem] = tl.getPlatform() === tl.Platform.Windows ? shared.OperatingSystems.Windows : shared.OperatingSystems.Other; + done(); + }); + beforeEach(() => { + delete process.env[shared.TestEnvVars.action]; + delete process.env[shared.TestEnvVars.containerType]; + delete process.env[shared.TestEnvVars.includeLatestTag]; + delete process.env[shared.TestEnvVars.qualifyImageName]; + delete process.env[shared.TestEnvVars.includeLatestTag]; + delete process.env[shared.TestEnvVars.imageName]; + delete process.env[shared.TestEnvVars.additionalImageTags]; + delete process.env[shared.TestEnvVars.enforceDockerNamingConvention]; + delete process.env[shared.TestEnvVars.memory]; + delete process.env[shared.TestEnvVars.addBaseImageData]; + }); + after(function () { + }); + + it('Runs successfully for docker build', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.action] = shared.ActionTypes.buildImage; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} -t test/test:2`) != -1, "docker build should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker build with memory limit', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.action] = shared.ActionTypes.buildImage; + process.env[shared.TestEnvVars.memory] = "2GB"; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} -t test/test:2 -m 2GB`) != -1, "docker build should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker build for invalid image name', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.action] = shared.ActionTypes.buildImage; + process.env[shared.TestEnvVars.imageName] = 'test/Te st:2'; + process.env[shared.TestEnvVars.enforceDockerNamingConvention] = 'true'; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} -t test/test:2`) != -1, "docker build should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs fails for docker build for invalid image name and modify image name false', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.action] = shared.ActionTypes.buildImage; + process.env[shared.TestEnvVars.imageName] = 'test/Te st:2'; + process.env[shared.TestEnvVars.enforceDockerNamingConvention] = 'false'; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 1 || tr.errorIssues.length, 'should have written to stderror'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf(`test/Te st:2 not valid imagename`) != -1, "docker build should fail"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker build for invalid image name and additional image tag', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.action] = shared.ActionTypes.buildImage; + process.env[shared.TestEnvVars.imageName] = 'test/Test:2'; + process.env[shared.TestEnvVars.additionalImageTags] = '6'; + process.env[shared.TestEnvVars.enforceDockerNamingConvention] = 'true'; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} -t test/test:2`) != -1, "docker build should run"); + console.log(tr.stderr); + done(); + }); + + + it('Runs successfully for docker build with latest tag', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.action] = shared.ActionTypes.buildImage; + process.env[shared.TestEnvVars.includeLatestTag] = "true"; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} -t test/test:2 -t test/test`) != -1, "docker build should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker run image', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.action] = shared.ActionTypes.runImage; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("[command]docker run --rm test/test:2") != -1, "docker run should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker run image with memory limit', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.action] = shared.ActionTypes.runImage; + process.env[shared.TestEnvVars.memory] = "2GB"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("[command]docker run --rm -m 2GB test/test:2") != -1, "docker run should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker tag image from image names file', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.action] = shared.ActionTypes.tagImages; + process.env[shared.TestEnvVars.containerType] = shared.ContainerTypes.AzureContainerRegistry; + process.env[shared.TestEnvVars.qualifyImageName] = "true"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker tag ${shared.ImageNamesFileImageName} ajgtestacr1.azurecr.io/${shared.ImageNamesFileImageName}:latest`) != -1, "docker tag should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker push image', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.action] = shared.ActionTypes.pushImage; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("[command]docker push test/test:2") != -1, "docker push should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker push image from image names file', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.action] = shared.ActionTypes.pushImages; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker push ${shared.ImageNamesFileImageName}:latest`) != -1, "docker push should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker pull image', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.action] = shared.ActionTypes.dockerCommand; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("[command]docker pull test/test:2") != -1, "docker pull should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker build with ACR', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.action] = shared.ActionTypes.buildImage; + process.env[shared.TestEnvVars.containerType] = shared.ContainerTypes.AzureContainerRegistry; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} -t test/test:2`) != -1, "docker build should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker build with ACR and qualify image name', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.action] = shared.ActionTypes.buildImage; + process.env[shared.TestEnvVars.containerType] = shared.ContainerTypes.AzureContainerRegistry; + process.env[shared.TestEnvVars.qualifyImageName] = "true"; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} -t ajgtestacr1.azurecr.io/test/test:2`) != -1, "docker build should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker build and populate ouput variable correctly', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.action] = shared.ActionTypes.buildImage; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("set DockerOutputPath=") != -1, "docker build should set DockerOutputPath env variable.") + console.log(tr.stderr); + done(); + }); + + it('Docker build should store the id of the image that was built.', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + process.env[shared.TestEnvVars.imageName] = "testuser/standardbuild:11"; + process.env[shared.TestEnvVars.action] = shared.ActionTypes.buildImage; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one time. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("set DOCKER_TASK_BUILT_IMAGES=c834e0094587") != -1, "docker build should have stored the image id.") + console.log(tr.stderr); + done(); + }); + + it('Docker build should store the id of the image that was built with builkit.', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + process.env[shared.TestEnvVars.imageName] = "testuser/buildkit:11"; + process.env[shared.TestEnvVars.action] = shared.ActionTypes.buildImage; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one time. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("set DOCKER_TASK_BUILT_IMAGES=6c3ada3eb420") != -1, "docker build should have stored the image id.") + console.log(tr.stderr); + done(); + }); + + it('Docker build should add labels with base image info', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + process.env[shared.TestEnvVars.imageName] = "testuser/imagewithannotations:11"; + process.env[shared.TestEnvVars.action] = shared.ActionTypes.buildImage; + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 3, 'should have invoked tool three time. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} -t testuser/imagewithannotations:11 ${shared.DockerCommandArgs.BuildLabels} --label ${shared.BaseImageLabels.name} --label ${shared.BaseImageLabels.digest}`) != -1, "docker build should run"); + console.log(tr.stderr); + done(); + }); + + it('Docker build should store the id of the image that was built with builkit.', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + process.env[shared.TestEnvVars.imageName] = "testuser/buildkit:11"; + process.env[shared.TestEnvVars.action] = shared.ActionTypes.buildImage; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one time. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("set DOCKER_TASK_BUILT_IMAGES=6c3ada3eb420") != -1, "docker build should have stored the image id.") + console.log(tr.stderr); + done(); + }); +}); diff --git a/_generated/DockerV0/Tests/TestSetup.ts b/_generated/DockerV0/Tests/TestSetup.ts new file mode 100644 index 000000000000..49f8d7bfc390 --- /dev/null +++ b/_generated/DockerV0/Tests/TestSetup.ts @@ -0,0 +1,167 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +import * as shared from './TestShared'; + +const DefaultWorkingDirectory: string = shared.formatPath("a/w"); +const ImageNamesPath = shared.formatPath("dir/image_names.txt"); +const DockerFilePath = shared.formatPath('dir1/DockerFile'); +const Dockerfile: string = `FROM ubuntu\nCMD ["echo","Hello World!"]` + +let taskPath = path.join(__dirname, '..', 'container.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('containerregistrytype', process.env[shared.TestEnvVars.containerType] || shared.ContainerTypes.ContainerRegistry); +tr.setInput('action', process.env[shared.TestEnvVars.action] || shared.ActionTypes.buildImage); +tr.setInput('imageName', process.env[shared.TestEnvVars.imageName] || 'test/test:2'); +tr.setInput('imageNamesPath', ImageNamesPath); +tr.setInput('dockerRegistryEndpoint', 'dockerhubendpoint'); +tr.setInput('dockerFile', DockerFilePath); +tr.setInput('customCommand', "pull test/test:2"); +tr.setInput('includeLatestTag', process.env[shared.TestEnvVars.includeLatestTag] || "false"); +tr.setInput('qualifyImageName', process.env[shared.TestEnvVars.qualifyImageName] || "false"); +tr.setInput('azureSubscriptionEndpoint', 'AzureRMSpn'); +tr.setInput('azureContainerRegistry', '{"loginServer":"ajgtestacr1.azurecr.io", "id" : "/subscriptions/c00d16c7-6c1f-4c03-9be1-6934a4c49682/resourcegroups/ajgtestacr1rg/providers/Microsoft.ContainerRegistry/registries/ajgtestacr1"}') +tr.setInput('additionalImageTags', process.env[shared.TestEnvVars.additionalImageTags] || ''); +tr.setInput('enforceDockerNamingConvention', process.env[shared.TestEnvVars.enforceDockerNamingConvention]); +tr.setInput('memory', process.env[shared.TestEnvVars.memory] || ''); +tr.setInput ('addBaseImageData', process.env[shared.TestEnvVars.addBaseImageData] || "true"); + +console.log("Inputs have been set"); + +process.env["SYSTEM_HOSTTYPE"] = "__hostType__"; +process.env["RELEASE_RELEASENAME"] = "Release-1"; +process.env["SYSTEM_DEFAULTWORKINGDIRECTORY"] = DefaultWorkingDirectory; +process.env["SYSTEM_TEAMFOUNDATIONCOLLECTIONURI"] = shared.teamFoundationCollectionURI; +process.env["SYSTEM_SERVERTYPE"] = "hosted"; +process.env['AGENT_TEMPDIRECTORY'] = '.'; +process.env["ENDPOINT_AUTH_dockerhubendpoint"] = "{\"parameters\":{\"username\":\"test\", \"password\":\"regpassword\", \"email\":\"test@microsoft.com\",\"registry\":\"https://index.docker.io/v1/\"},\"scheme\":\"UsernamePassword\"}"; +process.env["ENDPOINT_AUTH_SCHEME_AzureRMSpn"] = "ServicePrincipal"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALID"] = "spId"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALKEY"] = "spKey"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_TENANTID"] = "tenant"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONNAME"] = "sName"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONID"] = "sId"; +process.env["ENDPOINT_DATA_AzureRMSpn_SPNOBJECTID"] = "oId"; + +// provide answers for task mock +let a = { + "which": { + "docker": "docker" + }, + "checkPath": { + "docker": true, + [ImageNamesPath]: true + }, + "exist": { + "docker": true, + [ImageNamesPath]: true + }, + "exec": { + "docker push test/test:2" : { + "code": 0, + "stdout": "successfully pushed test/test:2 image" + }, + "docker run --rm test/test:2" : { + "code": 0, + "stdout": "successfully ran test/test:2 image" + }, + "docker run --rm -m 2GB test/test:2": { + "code": 0, + "stdout": "successfully ran test/test:2 image" + }, + "docker pull test/test:2": { + "code": 0, + "stdout": "successfully pulled test/test:2 image" + } + } +}; + +// Add extra answer definitions that need to be dynamically generated +a.exist[DockerFilePath] = true; + +a.exec[`docker build -f ${DockerFilePath} -t test/test:2 ${shared.DockerCommandArgs.BuildLabels}`] = { + "code": 0, + "stdout": "successfully build test/test:2 image" +}; +a.exec[`docker build -f ${DockerFilePath} -t test/test:2 -m 2GB ${shared.DockerCommandArgs.BuildLabels}`] = { + "code": 0, + "stdout": "successfully build test/test:2 image" +}; +a.exec[`docker build -f ${DockerFilePath} -t test/Te st:2 ${shared.DockerCommandArgs.BuildLabels}`] = { + "code": 1, + "stdout": "test/Te st:2 not valid imagename" +}; +a.exec[`docker build -f ${DockerFilePath} -t test/test:2 -t test/test ${shared.DockerCommandArgs.BuildLabels}`] = { + "code": 0, + "stdout": "successfully build test/test image with latest tag" +}; +a.exec[`docker build -f ${DockerFilePath} -t ajgtestacr1.azurecr.io/test/test:2 ${shared.DockerCommandArgs.BuildLabels}`] = { + "code": 0, + "stdout": "successfully build ajgtestacr1.azurecr.io/test/test image with latest tag" +}; +a.exec[`docker build -f ${DockerFilePath} -t ${shared.ImageNamesFileImageName} ${shared.DockerCommandArgs.BuildLabels}`] = { + "code": 0 +}; +a.exec[`docker tag test/test:2 ajgtestacr1.azurecr.io/test/test:2`] = { + "code": 0 +}; +a.exec[`docker tag ${shared.ImageNamesFileImageName} ajgtestacr1.azurecr.io/${shared.ImageNamesFileImageName}:latest`] = { + "code": 0 +}; +a.exec[`docker run --rm ${shared.ImageNamesFileImageName}`] = { + "code": 0 +}; +a.exec[`docker push ${shared.ImageNamesFileImageName}:latest`] = { + "code": 0 +}; +a.exec[`docker build -f ${DockerFilePath} -t test/test:2 -t test/test:6 ${shared.DockerCommandArgs.BuildLabels}`] = { + "code": 0, + "stdout": "successfully build test/test:2 and test/test:6 image" +}; +a.exec[`docker build -f ${DockerFilePath} -t testuser/standardbuild:11 ${shared.DockerCommandArgs.BuildLabels}`] = { + "code": 0, + "stdout": "Successfully built c834e0094587\n Successfully tagged testuser/testrepo:11." +}; +a.exec[`docker build -f ${DockerFilePath} -t testuser/buildkit:11 ${shared.DockerCommandArgs.BuildLabels}`] = { + "code": 0, + "stdout": " => => writing image sha256:6c3ada3eb42094510e0083bba6ae805540e36c96871d7be0c926b2f8cbeea68c\n => => naming to docker.io/library/testuser/buildkit:11" +}; +a.exec[`docker build -f ${DockerFilePath} -t testuser/imagewithannotations:11 ${shared.DockerCommandArgs.BuildLabels} --label ${shared.BaseImageLabels.name} --label ${shared.BaseImageLabels.digest}`] = { + "code": 0, + "stdout": "successfully built image and tagged testuser/imagewithannotations:11." +}; +a.exec[`docker pull ${shared.BaseImageName}`] = { + "code":0, + "stdout": "Pull complete" +}; +a.exec[`docker inspect ${shared.BaseImageName}`] = { + "code":0, + "stdout": `[{ + "Id": "sha256:302aba9ce190db9e247d710f4794cc303b169035de2048e76b82c9edbddbef4e", + "RepoTags": [ + "alpine:latest" + ], + "RepoDigests": [ + "ubuntu@sha256:826f70e0ac33e99a72cf20fb0571245a8fee52d68cb26d8bc58e53bfa65dcdfa" + ] + }]` +}; +tr.setAnswers(a); + +// Create mock for fs module +let fs = require('fs'); +let fsClone = Object.assign({}, fs); +fsClone.readFileSync = function(filePath, options) { + switch (filePath) { + case ImageNamesPath: + return shared.ImageNamesFileImageName; + case DockerFilePath: + return Dockerfile; + default: + return fs.readFileSync(filePath, options); + } +}; +tr.registerMock('fs', fsClone); + +tr.run(); \ No newline at end of file diff --git a/_generated/DockerV0/Tests/TestShared.ts b/_generated/DockerV0/Tests/TestShared.ts new file mode 100644 index 000000000000..bffba8aea18d --- /dev/null +++ b/_generated/DockerV0/Tests/TestShared.ts @@ -0,0 +1,57 @@ +import tl = require('azure-pipelines-task-lib'); + +export let TestEnvVars = { + operatingSystem: "__operating_system__", + action: "__command__", + containerType: "__container_type__", + qualifyImageName: "__qualifyImageName__", + includeLatestTag: "__includeLatestTag__", + imageName: "__imageName__", + additionalImageTags: "__additionalImageTags__", + enforceDockerNamingConvention: "__enforceDockerNamingConvention__", + memory: "__memory__", + addBaseImageData: "__addBaseImageData__" +}; + +export let OperatingSystems = { + Windows: "Windows", + Other: "Other" +}; + +export let ActionTypes = { + buildImage: "Build an image", + tagImages: "Tag images", + pushImage: "Push an image", + pushImages: "Push images", + runImage: "Run an image", + dockerCommand: "Run a Docker command" +}; + +export let ContainerTypes = { + AzureContainerRegistry: "Azure Container Registry", + ContainerRegistry: "Container Registry" +} + +export let ImageNamesFileImageName = "test_image"; +export let BaseImageName = "ubuntu"; +export let BaseImageLabels = { + name:"image.base.ref.name=ubuntu", + digest:"image.base.digest=sha256:826f70e0ac33e99a72cf20fb0571245a8fee52d68cb26d8bc58e53bfa65dcdfa" +}; + +export let teamFoundationCollectionURI = "https://abc.visualstudio.com/"; + +export let DockerCommandArgs = { + BuildLabels: `--label com.visualstudio.abc.image.system.teamfoundationcollectionuri=${teamFoundationCollectionURI}`, +} +/** + * Formats the given path to be appropriate for the operating system. + * @param canonicalPath A non-rooted path using a forward slash (/) as a directory separator. + */ +export function formatPath(canonicalPath: string) { + if (process.env[TestEnvVars.operatingSystem] === OperatingSystems.Windows) { + return "F:\\" + canonicalPath.replace('/', '\\'); + } else { + return "/" + canonicalPath; + } +}; \ No newline at end of file diff --git a/_generated/DockerV0/ThirdPartyNotices.txt b/_generated/DockerV0/ThirdPartyNotices.txt new file mode 100644 index 000000000000..5b47c3fbe631 --- /dev/null +++ b/_generated/DockerV0/ThirdPartyNotices.txt @@ -0,0 +1,1068 @@ + +THIRD-PARTY SOFTWARE NOTICES AND INFORMATION +Do Not Translate or Localize + +The Docker task for Azure Pipelines or Team Foundation Server incorporates components from the projects listed below. Microsoft licenses these components to you under the Microsoft software license terms. The original copyright notices and the licenses under which Microsoft received such components are set forth below for informational purposes. Microsoft reserves all rights not expressly granted herein, whether by implication, estoppel or otherwise. + + +1. argparse (https://github.com/nodeca/argparse) +2. array-union (https://github.com/sindresorhus/array-union) +3. array-uniq (https://github.com/sindresorhus/array-uniq) +4. arrify (https://github.com/sindresorhus/arrify) +5. balanced-match (https://github.com/juliangruber/balanced-match) +6. brace-expansion (https://github.com/juliangruber/brace-expansion) +7. concat-map (https://github.com/substack/node-concat-map) +8. del (https://github.com/sindresorhus/del) +9. esprima (https://github.com/ariya/esprima) +10. fs.realpath (https://github.com/isaacs/fs.realpath) +11. Glob (https://github.com/isaacs/node-glob) +12. globby (https://github.com/sindresorhus/globby) +13. inflight (https://github.com/npm/inflight) +14. inherits (https://github.com/isaacs/inherits) +15. is-path-cwd (https://github.com/sindresorhus/is-path-cwd) +16. is-path-in-cwd (https://github.com/sindresorhus/is-path-in-cwd) +17. is-path-inside (https://github.com/sindresorhus/is-path-inside) +18. js-yaml (https://github.com/nodeca/js-yaml) +19. minimatch (https://github.com/isaacs/minimatch) +20. Mockery (https://github.com/mfncooper/mockery) +21. node-uuid (https://github.com/broofa/node-uuid) +22. object-assign (https://github.com/sindresorhus/object-assign) +23. once (https://github.com/isaacs/once) +24. path-is-absolute (https://github.com/sindresorhus/path-is-absolute) +25. path-is-inside (https://github.com/domenic/path-is-inside) +26. pify (https://github.com/sindresorhus/pify) +27. pinkie (https://github.com/floatdrop/pinkie) +28. pinkie-promise (https://github.com/floatdrop/pinkie-promise) +29. q (https://github.com/kriskowal/q) +30. Rimraf (https://github.com/isaacs/rimraf) +31. semver (https://github.com/npm/node-semver/) +32. ShellJS (https://github.com/shelljs/shelljs) + Includes:wrench-js +33. sprintf-js (https://github.com/alexei/sprintf.js) +34. tunnel (https://github.com/koichik/node-tunnel) +35. underscore (https://github.com/jashkenas/underscore) +36. vso-node-api (https://github.com/Microsoft/vsts-node-api) +37. Azure-Pipelines-Task-Lib (https://github.com/Microsoft/azure-pipelines-task-lib) +38. wrappy (https://github.com/npm/wrappy) + + +%% argparse NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(The MIT License) + +Copyright (C) 2012 by Vitaly Puzrin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF argparse NOTICES, INFORMATION, AND LICENSE + +%% array-union NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF array-union NOTICES, INFORMATION, AND LICENSE + +%% array-uniq NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF array-uniq NOTICES, INFORMATION, AND LICENSE + +%% arrify NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF arrify NOTICES, INFORMATION, AND LICENSE + +%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(MIT) + +Copyright (c) 2013 Julian Gruber + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +========================================= +END OF balanced-match NOTICES, INFORMATION, AND LICENSE + +%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(MIT) + +Copyright (c) 2013 Julian Gruber + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +========================================= +END OF brace-expansion NOTICES, INFORMATION, AND LICENSE + +%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) James Halliday/substack + +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF concat-map NOTICES, INFORMATION, AND LICENSE + +%% del NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF del NOTICES, INFORMATION, AND LICENSE + +%% esprima NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= + Copyright (C) 2012 Ariya Hidayat + Copyright (C) 2012 Mathias Bynens + Copyright (C) 2012 Joost-Wim Boekesteijn + Copyright (C) 2012 Kris Kowal + Copyright (C) 2012 Yusuke Suzuki + Copyright (C) 2012 Arpad Borsos + Copyright (C) 2011 Ariya Hidayat + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +========================================= +END OF esprima NOTICES, INFORMATION, AND LICENSE + +%% fs.realpath NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---- + +This library bundles a version of the `fs.realpath` and `fs.realpathSync` +methods from Node.js v0.10 under the terms of the Node.js MIT license, as follows: + + Copyright Joyent, Inc. and other Node contributors. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + +========================================= +END OF fs.realpath NOTICES, INFORMATION, AND LICENSE + +%% Glob NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF Glob NOTICES, INFORMATION, AND LICENSE + +%% globby NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF globby NOTICES, INFORMATION, AND LICENSE + +%% inflight NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF inflight NOTICES, INFORMATION, AND LICENSE + +%% inherits NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF inherits NOTICES, INFORMATION, AND LICENSE + +%% is-path-cwd NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF is-path-cwd NOTICES, INFORMATION, AND LICENSE + +%% is-path-in-cwd NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF is-path-in-cwd NOTICES, INFORMATION, AND LICENSE + +%% is-path-inside NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF is-path-inside NOTICES, INFORMATION, AND LICENSE + +%% js-yaml NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(The MIT License) + +Copyright (C) 2011-2015 by Vitaly Puzrin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF js-yaml NOTICES, INFORMATION, AND LICENSE + +%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF minimatch NOTICES, INFORMATION, AND LICENSE + +%% Mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyrights for code authored by Yahoo! Inc. is licensed under the following + terms: + + MIT License + + Copyright (c) 2011 Yahoo! Inc. All Rights Reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +========================================= +END OF Mockery NOTICES, INFORMATION, AND LICENSE + +%% node-uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2010-2016 Robert Kieffer and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +========================================= +END OF node-uuid NOTICES, INFORMATION, AND LICENSE + +%% object-assign NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF object-assign NOTICES, INFORMATION, AND LICENSE + +%% once NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF once NOTICES, INFORMATION, AND LICENSE + +%% path-is-absolute NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +path-is-absolute + +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +node.js: + +Copyright Joyent, Inc. and other Node contributors. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +Software), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF path-is-absolute NOTICES, INFORMATION, AND LICENSE + +%% path-is-inside NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright � 2013�2014 Domenic Denicola +Licensed under the WTFPL Version 2 (http://www.wtfpl.net/about/) +========================================= +END OF path-is-inside NOTICES, INFORMATION, AND LICENSE + +%% pify NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF pify NOTICES, INFORMATION, AND LICENSE + +%% pinkie NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF pinkie NOTICES, INFORMATION, AND LICENSE + +%% pinkie-promise NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF pinkie-promise NOTICES, INFORMATION, AND LICENSE + +%% q NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2009�2014 Kristopher Michael Kowal. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + +/*! + * + * Copyright 2009-2012 Kris Kowal under the terms of the MIT + * license found at http://github.com/kriskowal/q/raw/master/LICENSE + * + * With parts by Tyler Close + * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found + * at http://www.opensource.org/licenses/mit-license.html + * Forked at ref_send.js version: 2009-05-11 + * + * With parts by Mark Miller + * Copyright (C) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +========================================= +END OF q NOTICES, INFORMATION, AND LICENSE + +%% Rimraf NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF Rimraf NOTICES, INFORMATION, AND LICENSE + +%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF semver NOTICES, INFORMATION, AND LICENSE + +%% ShellJS NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2012, Artur Adib +All rights reserved. + +You may use this project under the terms of the New BSD license as follows: + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Artur Adib nor the + names of the contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +========================================= +Includes wrench-js +The MIT License + +Copyright (c) 2010 Ryan McGrath + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF ShellJS NOTICES, INFORMATION, AND LICENSE + +%% sprintf-js NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2007-2014, Alexandru Marasteanu +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of this software nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +========================================= +END OF sprintf-js NOTICES, INFORMATION, AND LICENSE + +%% tunnel NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2012 Koichi Kobayashi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF tunnel NOTICES, INFORMATION, AND LICENSE + +%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative +Reporters & Editors + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +========================================= +END OF underscore NOTICES, INFORMATION, AND LICENSE + +%% vso-node-api NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF vso-node-api NOTICES, INFORMATION, AND LICENSE + +%% Azure-Pipelines-Task-Lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Microsoft Corporation. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +========================================= +END OF Azure-Pipelines-Task-Lib NOTICES, INFORMATION, AND LICENSE + +%% wrappy NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF wrappy NOTICES, INFORMATION, AND LICENSE + + diff --git a/_generated/DockerV0/container.ts b/_generated/DockerV0/container.ts new file mode 100644 index 000000000000..37eff8cd79d0 --- /dev/null +++ b/_generated/DockerV0/container.ts @@ -0,0 +1,101 @@ +"use strict"; + +import path = require('path'); +import * as tl from "azure-pipelines-task-lib/task"; +import ContainerConnection from "azure-pipelines-tasks-docker-common/containerconnection"; +import ACRAuthenticationTokenProvider from "azure-pipelines-tasks-docker-common/registryauthenticationprovider/acrauthenticationtokenprovider"; +import { getDockerRegistryEndpointAuthenticationToken } from "azure-pipelines-tasks-docker-common/registryauthenticationprovider/registryauthenticationtoken"; +import Q = require('q'); + +tl.setResourcePath(path.join(__dirname, 'task.json')); + +// Change to any specified working directory +tl.cd(tl.getInput("cwd")); + +// get the registry server authentication provider +var containerRegistryType = tl.getInput("containerregistrytype", true); +const environmentVariableMaximumSize = 32766; + +var registryAuthenticationToken; +if (containerRegistryType == "Azure Container Registry") { + const tokenProvider = new ACRAuthenticationTokenProvider(tl.getInput("azureSubscriptionEndpoint"), tl.getInput("azureContainerRegistry")); + registryAuthenticationToken = tokenProvider.getToken(); +} +else { + let endpointId = tl.getInput("dockerRegistryEndpoint"); + registryAuthenticationToken = getDockerRegistryEndpointAuthenticationToken(endpointId); +} + +// Run the specified action +var action = tl.getInput("action", true).toLowerCase(); +let command = ""; + +if(action !== "run a docker command") { + command = action; +} +else { + let customCommand = tl.getInput("customCommand", true); + + // sanitize the custom command parameters to log just the action + let commandTokens = customCommand.split(" "); + if(commandTokens.length > 0) { + for(let index = 0; index < commandTokens.length; index ++) { + // Stop reading tokens when we see any that starts with a special character + if(/^[a-z0-9A-Z]/i.test(commandTokens[index])) { + command = command + commandTokens[index] + " "; + } + else{ + break; + } + } + command = command.trim(); + } + else { + command = "run a docker command" + } +} + +var result = ""; +var telemetry = { + registryType: containerRegistryType, + command: command, + jobId: tl.getVariable('SYSTEM_JOBID') +}; + +console.log("##vso[telemetry.publish area=%s;feature=%s]%s", + "TaskEndpointId", + "DockerV0", + JSON.stringify(telemetry)); + +registryAuthenticationToken +.then(function success(authToken) { + // Connect to any specified container host and/or registry + var connection = new ContainerConnection(); + connection.open(tl.getInput("dockerHostEndpoint"), authToken); + /* tslint:disable:no-var-requires */ + require({ + "build an image": "./containerbuild", + "tag images": "./containertag", + "push an image": "./containerpush", + "push images": "./containerpush", + "run an image": "./containerrun", + "run a docker command": "./containercommand" + }[action]).run(connection, (data) => result += data) + /* tslint:enable:no-var-requires */ + .fin(function cleanup() { + connection.close(); + }) + .then(function success() { + var commandOutputLength = result.length; + if (commandOutputLength > environmentVariableMaximumSize) { + tl.warning(tl.loc('OutputVariableDataSizeExceeded', commandOutputLength, environmentVariableMaximumSize)); + } else { + tl.setVariable("DockerOutput", result); + } + + tl.setResult(tl.TaskResult.Succeeded, ""); + }, function failure(err) { + tl.setResult(tl.TaskResult.Failed, err.message); + }) + .done(); +}); \ No newline at end of file diff --git a/_generated/DockerV0/containerbuild.ts b/_generated/DockerV0/containerbuild.ts new file mode 100644 index 000000000000..86fe308936e0 --- /dev/null +++ b/_generated/DockerV0/containerbuild.ts @@ -0,0 +1,107 @@ +"use strict"; +import * as path from "path"; +import * as tl from "azure-pipelines-task-lib/task"; +import ContainerConnection from "azure-pipelines-tasks-docker-common/containerconnection"; +import * as pipelineUtils from "azure-pipelines-tasks-docker-common/pipelineutils"; +import * as fileUtils from "azure-pipelines-tasks-docker-common/fileutils"; +import * as sourceUtils from "azure-pipelines-tasks-docker-common/sourceutils"; +import * as imageUtils from "azure-pipelines-tasks-docker-common/containerimageutils"; +import * as utils from "./utils"; + +export function run(connection: ContainerConnection): any { + var command = connection.createCommand(); + command.arg("build"); + + var dockerfilepath = tl.getInput("dockerFile", true); + let dockerFile = fileUtils.findDockerFile(dockerfilepath); + + if (!tl.exist(dockerFile)) { + throw new Error(tl.loc('ContainerDockerFileNotFound', dockerfilepath)); + } + + command.arg(["-f", dockerFile]); + + tl.getDelimitedInput("buildArguments", "\n").forEach(buildArgument => { + command.arg(["--build-arg", buildArgument]); + }); + + var imageName = utils.getImageName(); + var qualifyImageName = tl.getBoolInput("qualifyImageName"); + if (qualifyImageName) { + imageName = connection.getQualifiedImageNameIfRequired(imageName); + } + command.arg(["-t", tl.getBoolInput("enforceDockerNamingConvention") ? imageUtils.generateValidImageName(imageName) : imageName]); + + var baseImageName = imageUtils.imageNameWithoutTag(imageName); + + tl.getDelimitedInput("additionalImageTags", "\n").forEach(tag => { + command.arg(["-t", baseImageName + ":" + tag]); + }); + + var includeSourceTags = tl.getBoolInput("includeSourceTags"); + if (includeSourceTags) { + sourceUtils.getSourceTags().forEach(tag => { + command.arg(["-t", baseImageName + ":" + tag]); + }); + } + + var includeLatestTag = tl.getBoolInput("includeLatestTag"); + if (baseImageName !== imageName && includeLatestTag) { + command.arg(["-t", baseImageName]); + } + + var memory = tl.getInput("memory"); + if (memory) { + command.arg(["-m", memory]); + } + + const addBaseImageInfo = tl.getBoolInput("addBaseImageData"); + const labelsArgument = pipelineUtils.getDefaultLabels(false, addBaseImageInfo, dockerFile, connection); + + labelsArgument.forEach(label => { + command.arg(["--label", label]); + }); + + var context: string; + var defaultContext = tl.getBoolInput("defaultContext"); + if (defaultContext) { + context = path.dirname(dockerFile); + } else { + context = tl.getPathInput("context"); + } + + command.arg(context); + + let output: string = ""; + command.on("stdout", data => { + output += data; + }); + + let err: string = ""; + command.on("stderr", data =>{ + err += data; + }); + + return connection.execCommand(command).then(() => { + if (isBuildKitEnabled()) + { + // Build kit output the build results to stderr instead of stdout + // https://github.com/moby/moby/issues/40031 + output = err; + } + + let taskOutputPath = utils.writeTaskOutput("build", output); + tl.setVariable("DockerOutputPath", taskOutputPath); + + const builtImageId = imageUtils.getImageIdFromBuildOutput(output); + if (builtImageId) { + imageUtils.shareBuiltImageId(builtImageId); + } + }); +} + +function isBuildKitEnabled(): boolean { + // https://docs.docker.com/develop/develop-images/build_enhancements/ + const isBuildKitBuildValue = tl.getVariable("DOCKER_BUILDKIT"); + return isBuildKitBuildValue && Number(isBuildKitBuildValue) == 1; +} diff --git a/_generated/DockerV0/containercommand.ts b/_generated/DockerV0/containercommand.ts new file mode 100644 index 000000000000..199ad0e18cf6 --- /dev/null +++ b/_generated/DockerV0/containercommand.ts @@ -0,0 +1,13 @@ +"use strict"; + +import * as tl from "azure-pipelines-task-lib/task"; +import ContainerConnection from "azure-pipelines-tasks-docker-common/containerconnection"; + +export function run(connection: ContainerConnection, outputUpdate: (data: string) => any): any { + var command = connection.createCommand(); + command.on("stdout", output => { + outputUpdate(output); + }); + command.line(tl.getInput("customCommand", true)); + return connection.execCommand(command); +} diff --git a/_generated/DockerV0/containerpush.ts b/_generated/DockerV0/containerpush.ts new file mode 100644 index 000000000000..44c34284d599 --- /dev/null +++ b/_generated/DockerV0/containerpush.ts @@ -0,0 +1,71 @@ +"use strict"; + +import * as fs from "fs"; +import * as tl from "azure-pipelines-task-lib/task"; +import ContainerConnection from "azure-pipelines-tasks-docker-common/containerconnection"; +import * as imageUtils from "azure-pipelines-tasks-docker-common/containerimageutils"; +import * as utils from "./utils"; + +function dockerPush(connection: ContainerConnection, image: string, imageDigestFile?: string, useMultiImageMode?: boolean): any { + var command = connection.createCommand(); + command.arg("push"); + command.arg(image); + + if (!imageDigestFile) { + return connection.execCommand(command); + } + + var output = ""; + command.on("stdout", data => { + output += data; + }); + + return connection.execCommand(command).then(() => { + // Parse the output to find the repository digest + var imageDigest = output.match(/^[^:]*: digest: ([^ ]*) size: \d*$/m)[1]; + if (imageDigest) { + let baseImageName = imageUtils.imageNameWithoutTag(image); + let formattedDigestValue = baseImageName + "@" + imageDigest; + if (useMultiImageMode) { + // If we're pushing multiple images, we need to append all the digest values. Each one is contained on its own line. + fs.appendFileSync(imageDigestFile, formattedDigestValue + "\r\n"); + } else { + fs.writeFileSync(imageDigestFile, formattedDigestValue); + } + } + }); +} + +export function run(connection: ContainerConnection): any { + let action = tl.getInput("action", true); + + let imageNames; + let useMultiImageMode = action === "Push images"; + if (useMultiImageMode) { + imageNames = utils.getImageNames(); + } else { + imageNames = [utils.getImageName()]; + } + + let imageMappings = utils.getImageMappings(connection, imageNames); + + let imageDigestFile: string = null; + if (tl.filePathSupplied("imageDigestFile")) { + imageDigestFile = tl.getPathInput("imageDigestFile"); + } + + let firstImageMapping = imageMappings.shift(); + let pushedSourceImages = [firstImageMapping.sourceImageName]; + let promise = dockerPush(connection, firstImageMapping.targetImageName, imageDigestFile, useMultiImageMode); + imageMappings.forEach(imageMapping => { + // If we've already pushed a tagged version of this source image, then we don't want to write the digest info to the file since it will be duplicate. + if (pushedSourceImages.indexOf(imageMapping.sourceImageName) >= 0) { + promise = promise.then(() => dockerPush(connection, imageMapping.targetImageName)); + } else { + pushedSourceImages.push(imageMapping.sourceImageName); + promise = promise.then(() => dockerPush(connection, imageMapping.targetImageName, imageDigestFile, useMultiImageMode)); + } + }); + + return promise; +} diff --git a/_generated/DockerV0/containerrun.ts b/_generated/DockerV0/containerrun.ts new file mode 100644 index 000000000000..26b70e9fca92 --- /dev/null +++ b/_generated/DockerV0/containerrun.ts @@ -0,0 +1,85 @@ +"use strict"; + +import * as tl from "azure-pipelines-task-lib/task"; +import ContainerConnection from "azure-pipelines-tasks-docker-common/containerconnection"; +import * as utils from "./utils"; + +export function run(connection: ContainerConnection): any { + var command = connection.createCommand(); + command.arg("run"); + + var detached = tl.getBoolInput("detached"); + if (detached) { + command.arg("-d"); + } + + var entrypoint = tl.getInput("entrypoint"); + if (entrypoint) { + command.arg(["--entrypoint", entrypoint]); + } + + tl.getDelimitedInput("envVars", "\n").forEach(envVar => { + command.arg(["-e", envVar]); + }); + + var containerName = tl.getInput("containerName"); + if (containerName) { + command.arg(["--name", containerName]); + } + + tl.getDelimitedInput("ports", "\n").forEach(port => { + command.arg(["-p", port]); + }); + + if (!detached) { + command.arg("--rm"); + } else { + var restartPolicy = { + no: "no", + onFailure: "on-failure", + always: "always", + unlessStopped: "unless-stopped" + }[tl.getInput("restartPolicy")]; + if (restartPolicy) { + if (restartPolicy === "on-failure") { + var restartMaxRetries = tl.getInput("restartMaxRetries"); + if (restartMaxRetries) { + var restartMaxRetriesNum = parseInt(restartMaxRetries, 10); + if (isNaN(restartMaxRetriesNum)) { + throw new Error("Maximum Restart Retries is not a number."); + } + restartPolicy += ":" + restartMaxRetriesNum; + } + } + command.arg(["--restart", restartPolicy]); + } + } + + tl.getDelimitedInput("volumes", "\n").forEach(volume => { + command.arg(["-v", volume]); + }); + + var workDir = tl.getInput("workDir"); + if (workDir) { + command.arg(["-w", workDir]); + } + + var memory = tl.getInput("memory"); + if (memory) { + command.arg(["-m", memory]); + } + + var imageName = utils.getImageName(); + var qualifyImageName = tl.getBoolInput("qualifyImageName"); + if (qualifyImageName) { + imageName = connection.getQualifiedImageNameIfRequired(imageName); + } + command.arg(imageName); + + var containerCommand = tl.getInput("containerCommand"); + if (containerCommand) { + command.line(containerCommand); + } + + return connection.execCommand(command); +} diff --git a/_generated/DockerV0/containertag.ts b/_generated/DockerV0/containertag.ts new file mode 100644 index 000000000000..f654c8e851e7 --- /dev/null +++ b/_generated/DockerV0/containertag.ts @@ -0,0 +1,29 @@ +"use strict"; + +import * as tl from "azure-pipelines-task-lib/task"; +import ContainerConnection from "azure-pipelines-tasks-docker-common/containerconnection"; +import * as utils from "./utils"; +import * as Q from 'q'; + +function dockerTag(connection: ContainerConnection, sourceImage: string, targetImage: string): Q.Promise { + let command = connection.createCommand(); + command.arg("tag"); + command.arg(sourceImage); + command.arg(targetImage); + + tl.debug(`Tagging image ${sourceImage} with ${targetImage}.`); + return connection.execCommand(command); +} + +export function run(connection: ContainerConnection): Q.Promise { + let imageNames = utils.getImageNames(); + let imageMappings = utils.getImageMappings(connection, imageNames); + + let firstMapping = imageMappings.shift(); + let promise = dockerTag(connection, firstMapping.sourceImageName, firstMapping.targetImageName); + imageMappings.forEach(mapping => { + promise = promise.then(() => dockerTag(connection, mapping.sourceImageName, mapping.targetImageName)); + }); + + return promise; +} \ No newline at end of file diff --git a/_generated/DockerV0/icon.png b/_generated/DockerV0/icon.png new file mode 100644 index 000000000000..5c3561e582b0 Binary files /dev/null and b/_generated/DockerV0/icon.png differ diff --git a/_generated/DockerV0/icon.svg b/_generated/DockerV0/icon.svg new file mode 100644 index 000000000000..7671582150c5 --- /dev/null +++ b/_generated/DockerV0/icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_generated/DockerV0/make.json b/_generated/DockerV0/make.json new file mode 100644 index 000000000000..de959ee5f012 --- /dev/null +++ b/_generated/DockerV0/make.json @@ -0,0 +1,12 @@ +{ + "rm": [ + { + "items": [ + "node_modules/azure-pipelines-tasks-docker-common/node_modules/azure-pipelines-task-lib", + "node_modules/azure-pipelines-tasks-azure-arm-rest-v2/node_modules/azure-pipelines-task-lib", + "node_modules/https-proxy-agent/node_modules/agent-base" + ], + "options": "-Rf" + } + ] +} \ No newline at end of file diff --git a/_generated/DockerV0/npm-shrinkwrap.json b/_generated/DockerV0/npm-shrinkwrap.json new file mode 100644 index 000000000000..45866555f388 --- /dev/null +++ b/_generated/DockerV0/npm-shrinkwrap.json @@ -0,0 +1,1008 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@azure/msal-common": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-9.1.1.tgz", + "integrity": "sha512-we9xR8lvu47fF0h+J8KyXoRy9+G/fPzm3QEa2TrdR3jaVS3LKAyE2qyMuUkNdbVkvzl8Zr9f7l+IUSP22HeqXw==" + }, + "@azure/msal-node": { + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.5.tgz", + "integrity": "sha512-NcVdMfn8Z3ogN+9RjOSF7uwf2Gki5DEJl0BdDSL83KUAgVAobtkZi5W8EqxbJLrTO/ET0jv5DregrcR5qg2pEA==", + "requires": { + "@azure/msal-common": "^9.0.1", + "jsonwebtoken": "^8.5.1", + "uuid": "^8.3.0" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } + } + }, + "@types/concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0=", + "requires": { + "@types/node": "*" + } + }, + "@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=", + "requires": { + "@types/node": "*" + } + }, + "@types/jsonwebtoken": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", + "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", + "requires": { + "@types/node": "*" + } + }, + "@types/mocha": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" + }, + "@types/node": { + "version": "10.17.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.50.tgz", + "integrity": "sha512-vwX+/ija9xKc/z9VqMCdbf4WYcMTGsI0I/L/6shIF3qXURxZOhPQlPRHtjTpiNhAwn0paMJzlOQqw6mAGEQnTA==" + }, + "@types/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", + "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==" + }, + "@types/qs": { + "version": "6.9.5", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz", + "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==" + }, + "@types/uuid": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", + "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==" + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "async-mutex": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", + "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", + "requires": { + "tslib": "^2.4.0" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "azure-devops-node-api": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.1.0.tgz", + "integrity": "sha512-VY+G45eNKVJfMIO0uyZfbi4PzUR8JHEfsHQjEUAXUGRkYhhBbhGHjy8cpiyYFxLXc3a4PL5cqgqqV/YD1SaCXg==", + "requires": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, + "azure-pipelines-task-lib": { + "version": "4.0.1-preview", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.0.1-preview.tgz", + "integrity": "sha512-yvxqTzBy6G1U4lDkQgvewGDtd4UxrFTTI49JBByS0vjz55lE/9hmOttFm/BSRCEeLkG0lp3t3ja54bsNBBM4cA==", + "requires": { + "minimatch": "3.0.5", + "mockery": "^1.7.0", + "q": "^1.5.1", + "semver": "^5.1.0", + "shelljs": "^0.8.5", + "sync-request": "6.1.0", + "uuid": "^3.0.1" + }, + "dependencies": { + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + } + } + }, + "azure-pipelines-tasks-azure-arm-rest-v2": { + "version": "3.224.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest-v2/-/azure-pipelines-tasks-azure-arm-rest-v2-3.224.0.tgz", + "integrity": "sha512-G76zBn1hthbrAdB6AnQbbe9Yh6zLZzv5NBNaBVqMqkb8VvaciqKCLEYAIc2FAdhqy/w7lwqWEPr82dJX59J7aQ==", + "requires": { + "@azure/msal-node": "1.14.5", + "@types/jsonwebtoken": "^8.5.8", + "@types/mocha": "^5.2.7", + "@types/node": "^10.17.0", + "@types/q": "1.5.4", + "async-mutex": "^0.4.0", + "azure-devops-node-api": "^12.0.0", + "azure-pipelines-task-lib": "^3.4.0", + "https-proxy-agent": "^4.0.0", + "jsonwebtoken": "^8.5.1", + "node-fetch": "^2.6.7", + "q": "1.5.1", + "typed-rest-client": "1.8.4", + "xml2js": "0.4.13" + }, + "dependencies": { + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + }, + "azure-pipelines-task-lib": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz", + "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==", + "requires": { + "minimatch": "3.0.5", + "mockery": "^2.1.0", + "q": "^1.5.1", + "semver": "^5.1.0", + "shelljs": "^0.8.5", + "sync-request": "6.1.0", + "uuid": "^3.0.1" + } + }, + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mockery": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", + "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + } + } + }, + "azure-pipelines-tasks-docker-common": { + "version": "2.225.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-docker-common/-/azure-pipelines-tasks-docker-common-2.225.0.tgz", + "integrity": "sha512-bv2WI4guDb8BlCQKOAH2HGf8uTmrnTMHEn4FdRVzyYqR3jLOm0XfjrseFzOgzS2pxMhIJNPE4UOE2YeaBsnw/Q==", + "requires": { + "@types/mocha": "^5.2.7", + "@types/node": "^10.17.0", + "@types/q": "1.5.4", + "@types/uuid": "^8.3.0", + "azure-pipelines-task-lib": "^3.1.0", + "azure-pipelines-tasks-azure-arm-rest-v2": "^3.224.0", + "del": "2.2.0", + "q": "1.4.1" + }, + "dependencies": { + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + }, + "azure-pipelines-task-lib": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz", + "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==", + "requires": { + "minimatch": "3.0.5", + "mockery": "^2.1.0", + "q": "^1.5.1", + "semver": "^5.1.0", + "shelljs": "^0.8.5", + "sync-request": "6.1.0", + "uuid": "^3.0.1" + }, + "dependencies": { + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + } + } + }, + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mockery": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", + "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==" + } + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "del": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.0.tgz", + "integrity": "sha1-mlDwS/NzJeKDtPROmFM2wlJFa9U=", + "requires": { + "globby": "^4.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "esprima": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.1.tgz", + "integrity": "sha1-KrfRVJ7dBtFNaabBoXVKygLpZX4=" + }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=" + }, + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globby": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", + "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", + "requires": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^6.0.1", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "requires": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + } + }, + "http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "requires": { + "@types/node": "^10.0.3" + } + }, + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "requires": { + "agent-base": "5", + "debug": "4" + }, + "dependencies": { + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" + } + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "requires": { + "has": "^1.0.3" + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", + "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "mime-db": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" + }, + "mime-types": { + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "requires": { + "mime-db": "1.45.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mockery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", + "integrity": "sha1-9O3g2HUMHJcnwnLqLGBiniyaHE8=" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "requires": { + "asap": "~2.0.6" + } + }, + "q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==" + }, + "qs": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", + "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "requires": { + "resolve": "^1.1.6" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "^7.0.5" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "requires": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + } + }, + "sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "requires": { + "get-port": "^3.1.0" + } + }, + "then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "requires": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + } + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" + }, + "typed-rest-client": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz", + "integrity": "sha512-MyfKKYzk3I6/QQp6e1T50py4qg+c+9BzOEl2rBmQIpStwNUoqQ73An+Tkfy9YuV7O+o2mpVVJpe+fH//POZkbg==", + "requires": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typescript": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", + "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", + "dev": true + }, + "underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xml2js": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.13.tgz", + "integrity": "sha512-BoxD65qWA2p4znzbaati/Td19uFEc0X6ydj0bFphJO62RrNaGqOyW6ljLWPo3GKDbvW/6dnxAoRX01BsgEWsMA==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": ">=2.4.6" + } + }, + "xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==" + } + } +} diff --git a/_generated/DockerV0/package.json b/_generated/DockerV0/package.json new file mode 100644 index 000000000000..94573589b268 --- /dev/null +++ b/_generated/DockerV0/package.json @@ -0,0 +1,17 @@ +{ + "dependencies": { + "@types/mocha": "^5.2.7", + "@types/node": "^10.17.0", + "@types/q": "^1.5.0", + "@types/uuid": "^8.3.0", + "del": "2.2.0", + "azure-pipelines-task-lib": "^4.0.1-preview", + "azure-pipelines-tasks-docker-common": "2.225.0", + "esprima": "2.7.1", + "agent-base": "^6.0.2", + "js-yaml": "4.1.0" + }, + "devDependencies": { + "typescript": "4.0.2" + } +} diff --git a/_generated/DockerV0/task.json b/_generated/DockerV0/task.json new file mode 100644 index 000000000000..6e86ccb2d9e0 --- /dev/null +++ b/_generated/DockerV0/task.json @@ -0,0 +1,368 @@ +{ + "id": "E28912F1-0114-4464-802A-A3A35437FD16", + "name": "Docker", + "friendlyName": "Docker", + "description": "Build, tag, push, or run Docker images, or run a Docker command", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/docker", + "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=848006)", + "category": "Build", + "visibility": [ + "Build", + "Release" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 0, + "Minor": 238, + "Patch": 0 + }, + "demands": [], + "preview": "false", + "groups": [ + { + "name": "advanced", + "displayName": "Advanced Options", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "containerregistrytype", + "type": "pickList", + "label": "Container Registry Type", + "defaultValue": "Azure Container Registry", + "required": true, + "options": { + "Azure Container Registry": "Azure Container Registry", + "Container Registry": "Container Registry" + }, + "helpMarkDown": "Select 'Azure Container Registry' to connect to it by using an Azure Service Connection. Select 'Container registry' to connect to Docker Hub or any other private container registry." + }, + { + "name": "dockerRegistryEndpoint", + "aliases": [ + "dockerRegistryConnection" + ], + "type": "connectedService:dockerregistry", + "label": "Docker Registry Service Connection", + "helpMarkDown": "Select a Docker registry service connection. Required for commands that need to authenticate with a registry.", + "visibleRule": "containerregistrytype = Container Registry" + }, + { + "name": "azureSubscriptionEndpoint", + "aliases": [ + "azureSubscription" + ], + "type": "connectedService:AzureRM", + "label": "Azure subscription", + "helpMarkDown": "Select an Azure subscription", + "visibleRule": "containerregistrytype = Azure Container Registry" + }, + { + "name": "azureContainerRegistry", + "label": "Azure Container Registry", + "type": "pickList", + "helpMarkDown": "Select an Azure Container Registry in the selected Azure Subscription. The container image will be built and pushed to this container registry.", + "visibleRule": "containerregistrytype = Azure Container Registry", + "defaultValue": "", + "properties": { + "EditableOptions": "True" + } + }, + { + "name": "action", + "type": "pickList", + "label": "Action", + "defaultValue": "Build an image", + "required": true, + "options": { + "Build an image": "Build an image", + "Tag images": "Tag images", + "Push an image": "Push an image", + "Push images": "Push images", + "Run an image": "Run an image", + "Run a Docker command": "Run a Docker command" + }, + "helpMarkDown": "Select a Docker action." + }, + { + "name": "dockerFile", + "type": "filePath", + "label": "Docker File", + "defaultValue": "**/Dockerfile", + "required": true, + "visibleRule": "action = Build an image", + "helpMarkDown": "Path to the Dockerfile." + }, + { + "name": "addBaseImageData", + "type": "boolean", + "label": "Add base image metadata to image(s)", + "groupName": "commands", + "defaultValue": "true", + "helpMarkDown": "By default base image data like base image name and digest are added which helps with traceability. You can opt out of this default behavior by using this input." + }, + { + "name": "buildArguments", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "Build Arguments", + "visibleRule": "action = Build an image", + "helpMarkDown": "Build-time variables for the Docker file. Specify each name=value pair on a new line." + }, + { + "name": "defaultContext", + "type": "boolean", + "label": "Use Default Build Context", + "defaultValue": "true", + "visibleRule": "action = Build an image", + "helpMarkDown": "Set the build context to the directory that contains the Docker file." + }, + { + "name": "context", + "type": "filePath", + "label": "Build Context", + "visibleRule": "action = Build an image && defaultContext = false", + "helpMarkDown": "Path to the build context." + }, + { + "name": "imageName", + "type": "string", + "label": "Image Name", + "defaultValue": "$(Build.Repository.Name):$(Build.BuildId)", + "required": true, + "visibleRule": "action == Build an image || action == Push an image || action == Run an image", + "helpMarkDown": "Name of the Docker image to build, push, or run." + }, + { + "name": "imageNamesPath", + "type": "filePath", + "label": "Image Names Path", + "required": true, + "visibleRule": "action == Tag images || action == Push images", + "helpMarkDown": "Path to a text file that contains the names of the Docker images to tag or push. Each image name is contained on its own line." + }, + { + "name": "qualifyImageName", + "type": "boolean", + "label": "Qualify Image Name", + "defaultValue": "true", + "visibleRule": "action = Build an image || action = Tag images || action = Push an image || action = Push images || action = Run an image", + "helpMarkDown": "Qualify the image name with the Docker registry service connection's hostname if not otherwise specified." + }, + { + "name": "additionalImageTags", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "Additional Image Tags", + "visibleRule": "action = Build an image || action = Tag images || action = Push an image || action = Push images", + "helpMarkDown": "Additional tags for the Docker image being built or pushed." + }, + { + "name": "includeSourceTags", + "type": "boolean", + "label": "Include Source Tags", + "defaultValue": "false", + "visibleRule": "action = Build an image || action = Tag image || action = Push an image || action = Push images", + "helpMarkDown": "Include Git tags when building or pushing the Docker image." + }, + { + "name": "includeLatestTag", + "type": "boolean", + "label": "Include Latest Tag", + "defaultValue": "false", + "visibleRule": "action = Build an image || action = Push an image || action = Push images", + "helpMarkDown": "Include the 'latest' tag when building or pushing the Docker image." + }, + { + "name": "imageDigestFile", + "type": "filePath", + "label": "Image Digest File", + "visibleRule": "action = Push an image || action = Push images", + "helpMarkDown": "Path to a file that is created and populated with the full image repository digest of the Docker image that was pushed." + }, + { + "name": "containerName", + "type": "string", + "label": "Container Name", + "visibleRule": "action = Run an image", + "helpMarkDown": "Name of the Docker container to run." + }, + { + "name": "ports", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "Ports", + "visibleRule": "action = Run an image", + "helpMarkDown": "Ports in the Docker container to publish to the host. Specify each host-port:container-port binding on a new line." + }, + { + "name": "volumes", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "Volumes", + "visibleRule": "action = Run an image", + "helpMarkDown": "Volumes to mount from the host. Specify each host-dir:container-dir on a new line." + }, + { + "name": "envVars", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "Environment Variables", + "visibleRule": "action = Run an image", + "helpMarkDown": "Environment variables for the Docker container. Specify each name=value pair on a new line." + }, + { + "name": "workDir", + "type": "string", + "label": "Working Directory", + "visibleRule": "action = Run an image", + "helpMarkDown": "The working directory for the Docker container." + }, + { + "name": "entrypoint", + "type": "string", + "label": "Entry Point Override", + "visibleRule": "action = Run an image", + "helpMarkDown": "Override the default entry point for the Docker container." + }, + { + "name": "containerCommand", + "type": "string", + "label": "Command", + "visibleRule": "action = Run an image", + "helpMarkDown": "The docker run command first creates a writeable container layer over the specified image, and then starts it by using the specified run command. For example, if the image contains a simple Python Flask web application you can specify 'python app.py' to launch the web application." + }, + { + "name": "detached", + "type": "boolean", + "label": "Run In Background", + "defaultValue": "true", + "visibleRule": "action = Run an image", + "helpMarkDown": "Run the Docker container in the background." + }, + { + "name": "restartPolicy", + "type": "pickList", + "label": "Restart Policy", + "defaultValue": "no", + "required": true, + "options": { + "no": "No", + "onFailure": "On failure", + "always": "Always", + "unlessStopped": "Unless stopped" + }, + "visibleRule": "action = Run an image && detached = true", + "helpMarkDown": "Select a restart policy." + }, + { + "name": "restartMaxRetries", + "type": "string", + "label": "Maximum Restart Retries", + "visibleRule": "action = Run an image && detached = true && restartPolicy = onFailure", + "helpMarkDown": "The maximum number of restart retries the Docker daemon attempts." + }, + { + "name": "customCommand", + "type": "string", + "label": "Command", + "required": true, + "visibleRule": "action = Run a Docker command", + "helpMarkDown": "Docker command to execute, with arguments. For example, 'rmi -f image-name' to force remove an image." + }, + { + "name": "dockerHostEndpoint", + "type": "connectedService:dockerhost", + "label": "Docker Host Service Connection", + "helpMarkDown": "Select a Docker host service connection. Defaults to the agent's host.", + "groupName": "advanced" + }, + { + "name": "enforceDockerNamingConvention", + "type": "boolean", + "label": "Force image name to follow Docker naming convention", + "required": false, + "defaultValue": "true", + "helpMarkDown": "If enabled docker image name will be modified to follow Docker naming convention. Converts upper case character to lower case and removes spaces in image name.", + "groupName": "advanced" + }, + { + "name": "cwd", + "aliases": [ + "workingDirectory" + ], + "type": "filePath", + "label": "Working Directory", + "defaultValue": "$(System.DefaultWorkingDirectory)", + "helpMarkDown": "Working directory for the Docker command.", + "groupName": "advanced" + }, + { + "name": "memory", + "type": "string", + "label": "Memory limit", + "helpMarkDown": "The maximum amount of memory available to the container as a integer with optional suffixes like '2GB'.", + "groupName": "advanced" + } + ], + "dataSourceBindings": [ + { + "target": "azureContainerRegistry", + "endpointId": "$(azureSubscriptionEndpoint)", + "dataSourceName": "AzureRMContainerRegistries", + "resultTemplate": "{\"Value\":\"{\\\"loginServer\\\":\\\"{{{properties.loginServer}}}\\\", \\\"id\\\" : \\\"{{{id}}}\\\"}\",\"DisplayValue\":\"{{{name}}}\"}" + } + ], + "outputVariables": [ + { + "name": "DockerOutput", + "description": "Stores the output of the docker command" + }, + { + "name": "DockerOutputPath", + "description": "The path of the file which contains the output of the build command." + } + ], + "instanceNameFormat": "$(action)", + "execution": { + "Node10": { + "target": "container.js" + }, + "Node16": { + "target": "container.js" + } + }, + "messages": { + "ContainerPatternFound": "Pattern found in docker filepath parameter", + "ContainerPatternNotFound": "No pattern found in docker filepath parameter", + "ContainerDockerFileNotFound": "No Docker file matching %s was found.", + "ConnectingToDockerHost": "DOCKER_HOST variable is set. Docker will try to connect to the Docker host: %s", + "DockerHostVariableWarning": "DOCKER_HOST variable is set. Please ensure that the Docker daemon is running on: %s", + "NoImagesInImageNamesFile": "At least one image name is expected in file '%s'.", + "CantWriteDataToFile": "Can not write data to the file %s. Error: %s", + "NoDataWrittenOnFile": "No data was written into the file %s", + "FileContentSynced": "Synced the file content to the disk. The content is %s.", + "OutputVariableDataSizeExceeded": "Output variable not set as Docker command output exceeded the maximum supported length. Output length: %s, Maximum supported length: %s", + "WritingDockerConfigToTempFile": "Writing Docker config to temp file. File path: %s, Docker config: %s" + }, + "_buildConfigMapping": { + "Default": "0.238.0", + "Node20_229_2": "0.238.1" + } +} \ No newline at end of file diff --git a/_generated/DockerV0/task.loc.json b/_generated/DockerV0/task.loc.json new file mode 100644 index 000000000000..d171934dbda6 --- /dev/null +++ b/_generated/DockerV0/task.loc.json @@ -0,0 +1,368 @@ +{ + "id": "E28912F1-0114-4464-802A-A3A35437FD16", + "name": "Docker", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/docker", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Build", + "visibility": [ + "Build", + "Release" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 0, + "Minor": 238, + "Patch": 0 + }, + "demands": [], + "preview": "false", + "groups": [ + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "containerregistrytype", + "type": "pickList", + "label": "ms-resource:loc.input.label.containerregistrytype", + "defaultValue": "Azure Container Registry", + "required": true, + "options": { + "Azure Container Registry": "Azure Container Registry", + "Container Registry": "Container Registry" + }, + "helpMarkDown": "ms-resource:loc.input.help.containerregistrytype" + }, + { + "name": "dockerRegistryEndpoint", + "aliases": [ + "dockerRegistryConnection" + ], + "type": "connectedService:dockerregistry", + "label": "ms-resource:loc.input.label.dockerRegistryEndpoint", + "helpMarkDown": "ms-resource:loc.input.help.dockerRegistryEndpoint", + "visibleRule": "containerregistrytype = Container Registry" + }, + { + "name": "azureSubscriptionEndpoint", + "aliases": [ + "azureSubscription" + ], + "type": "connectedService:AzureRM", + "label": "ms-resource:loc.input.label.azureSubscriptionEndpoint", + "helpMarkDown": "ms-resource:loc.input.help.azureSubscriptionEndpoint", + "visibleRule": "containerregistrytype = Azure Container Registry" + }, + { + "name": "azureContainerRegistry", + "label": "ms-resource:loc.input.label.azureContainerRegistry", + "type": "pickList", + "helpMarkDown": "ms-resource:loc.input.help.azureContainerRegistry", + "visibleRule": "containerregistrytype = Azure Container Registry", + "defaultValue": "", + "properties": { + "EditableOptions": "True" + } + }, + { + "name": "action", + "type": "pickList", + "label": "ms-resource:loc.input.label.action", + "defaultValue": "Build an image", + "required": true, + "options": { + "Build an image": "Build an image", + "Tag images": "Tag images", + "Push an image": "Push an image", + "Push images": "Push images", + "Run an image": "Run an image", + "Run a Docker command": "Run a Docker command" + }, + "helpMarkDown": "ms-resource:loc.input.help.action" + }, + { + "name": "dockerFile", + "type": "filePath", + "label": "ms-resource:loc.input.label.dockerFile", + "defaultValue": "**/Dockerfile", + "required": true, + "visibleRule": "action = Build an image", + "helpMarkDown": "ms-resource:loc.input.help.dockerFile" + }, + { + "name": "addBaseImageData", + "type": "boolean", + "label": "ms-resource:loc.input.label.addBaseImageData", + "groupName": "commands", + "defaultValue": "true", + "helpMarkDown": "ms-resource:loc.input.help.addBaseImageData" + }, + { + "name": "buildArguments", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "ms-resource:loc.input.label.buildArguments", + "visibleRule": "action = Build an image", + "helpMarkDown": "ms-resource:loc.input.help.buildArguments" + }, + { + "name": "defaultContext", + "type": "boolean", + "label": "ms-resource:loc.input.label.defaultContext", + "defaultValue": "true", + "visibleRule": "action = Build an image", + "helpMarkDown": "ms-resource:loc.input.help.defaultContext" + }, + { + "name": "context", + "type": "filePath", + "label": "ms-resource:loc.input.label.context", + "visibleRule": "action = Build an image && defaultContext = false", + "helpMarkDown": "ms-resource:loc.input.help.context" + }, + { + "name": "imageName", + "type": "string", + "label": "ms-resource:loc.input.label.imageName", + "defaultValue": "$(Build.Repository.Name):$(Build.BuildId)", + "required": true, + "visibleRule": "action == Build an image || action == Push an image || action == Run an image", + "helpMarkDown": "ms-resource:loc.input.help.imageName" + }, + { + "name": "imageNamesPath", + "type": "filePath", + "label": "ms-resource:loc.input.label.imageNamesPath", + "required": true, + "visibleRule": "action == Tag images || action == Push images", + "helpMarkDown": "ms-resource:loc.input.help.imageNamesPath" + }, + { + "name": "qualifyImageName", + "type": "boolean", + "label": "ms-resource:loc.input.label.qualifyImageName", + "defaultValue": "true", + "visibleRule": "action = Build an image || action = Tag images || action = Push an image || action = Push images || action = Run an image", + "helpMarkDown": "ms-resource:loc.input.help.qualifyImageName" + }, + { + "name": "additionalImageTags", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "ms-resource:loc.input.label.additionalImageTags", + "visibleRule": "action = Build an image || action = Tag images || action = Push an image || action = Push images", + "helpMarkDown": "ms-resource:loc.input.help.additionalImageTags" + }, + { + "name": "includeSourceTags", + "type": "boolean", + "label": "ms-resource:loc.input.label.includeSourceTags", + "defaultValue": "false", + "visibleRule": "action = Build an image || action = Tag image || action = Push an image || action = Push images", + "helpMarkDown": "ms-resource:loc.input.help.includeSourceTags" + }, + { + "name": "includeLatestTag", + "type": "boolean", + "label": "ms-resource:loc.input.label.includeLatestTag", + "defaultValue": "false", + "visibleRule": "action = Build an image || action = Push an image || action = Push images", + "helpMarkDown": "ms-resource:loc.input.help.includeLatestTag" + }, + { + "name": "imageDigestFile", + "type": "filePath", + "label": "ms-resource:loc.input.label.imageDigestFile", + "visibleRule": "action = Push an image || action = Push images", + "helpMarkDown": "ms-resource:loc.input.help.imageDigestFile" + }, + { + "name": "containerName", + "type": "string", + "label": "ms-resource:loc.input.label.containerName", + "visibleRule": "action = Run an image", + "helpMarkDown": "ms-resource:loc.input.help.containerName" + }, + { + "name": "ports", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "ms-resource:loc.input.label.ports", + "visibleRule": "action = Run an image", + "helpMarkDown": "ms-resource:loc.input.help.ports" + }, + { + "name": "volumes", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "ms-resource:loc.input.label.volumes", + "visibleRule": "action = Run an image", + "helpMarkDown": "ms-resource:loc.input.help.volumes" + }, + { + "name": "envVars", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "ms-resource:loc.input.label.envVars", + "visibleRule": "action = Run an image", + "helpMarkDown": "ms-resource:loc.input.help.envVars" + }, + { + "name": "workDir", + "type": "string", + "label": "ms-resource:loc.input.label.workDir", + "visibleRule": "action = Run an image", + "helpMarkDown": "ms-resource:loc.input.help.workDir" + }, + { + "name": "entrypoint", + "type": "string", + "label": "ms-resource:loc.input.label.entrypoint", + "visibleRule": "action = Run an image", + "helpMarkDown": "ms-resource:loc.input.help.entrypoint" + }, + { + "name": "containerCommand", + "type": "string", + "label": "ms-resource:loc.input.label.containerCommand", + "visibleRule": "action = Run an image", + "helpMarkDown": "ms-resource:loc.input.help.containerCommand" + }, + { + "name": "detached", + "type": "boolean", + "label": "ms-resource:loc.input.label.detached", + "defaultValue": "true", + "visibleRule": "action = Run an image", + "helpMarkDown": "ms-resource:loc.input.help.detached" + }, + { + "name": "restartPolicy", + "type": "pickList", + "label": "ms-resource:loc.input.label.restartPolicy", + "defaultValue": "no", + "required": true, + "options": { + "no": "No", + "onFailure": "On failure", + "always": "Always", + "unlessStopped": "Unless stopped" + }, + "visibleRule": "action = Run an image && detached = true", + "helpMarkDown": "ms-resource:loc.input.help.restartPolicy" + }, + { + "name": "restartMaxRetries", + "type": "string", + "label": "ms-resource:loc.input.label.restartMaxRetries", + "visibleRule": "action = Run an image && detached = true && restartPolicy = onFailure", + "helpMarkDown": "ms-resource:loc.input.help.restartMaxRetries" + }, + { + "name": "customCommand", + "type": "string", + "label": "ms-resource:loc.input.label.customCommand", + "required": true, + "visibleRule": "action = Run a Docker command", + "helpMarkDown": "ms-resource:loc.input.help.customCommand" + }, + { + "name": "dockerHostEndpoint", + "type": "connectedService:dockerhost", + "label": "ms-resource:loc.input.label.dockerHostEndpoint", + "helpMarkDown": "ms-resource:loc.input.help.dockerHostEndpoint", + "groupName": "advanced" + }, + { + "name": "enforceDockerNamingConvention", + "type": "boolean", + "label": "ms-resource:loc.input.label.enforceDockerNamingConvention", + "required": false, + "defaultValue": "true", + "helpMarkDown": "ms-resource:loc.input.help.enforceDockerNamingConvention", + "groupName": "advanced" + }, + { + "name": "cwd", + "aliases": [ + "workingDirectory" + ], + "type": "filePath", + "label": "ms-resource:loc.input.label.cwd", + "defaultValue": "$(System.DefaultWorkingDirectory)", + "helpMarkDown": "ms-resource:loc.input.help.cwd", + "groupName": "advanced" + }, + { + "name": "memory", + "type": "string", + "label": "ms-resource:loc.input.label.memory", + "helpMarkDown": "ms-resource:loc.input.help.memory", + "groupName": "advanced" + } + ], + "dataSourceBindings": [ + { + "target": "azureContainerRegistry", + "endpointId": "$(azureSubscriptionEndpoint)", + "dataSourceName": "AzureRMContainerRegistries", + "resultTemplate": "{\"Value\":\"{\\\"loginServer\\\":\\\"{{{properties.loginServer}}}\\\", \\\"id\\\" : \\\"{{{id}}}\\\"}\",\"DisplayValue\":\"{{{name}}}\"}" + } + ], + "outputVariables": [ + { + "name": "DockerOutput", + "description": "Stores the output of the docker command" + }, + { + "name": "DockerOutputPath", + "description": "The path of the file which contains the output of the build command." + } + ], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "execution": { + "Node10": { + "target": "container.js" + }, + "Node16": { + "target": "container.js" + } + }, + "messages": { + "ContainerPatternFound": "ms-resource:loc.messages.ContainerPatternFound", + "ContainerPatternNotFound": "ms-resource:loc.messages.ContainerPatternNotFound", + "ContainerDockerFileNotFound": "ms-resource:loc.messages.ContainerDockerFileNotFound", + "ConnectingToDockerHost": "ms-resource:loc.messages.ConnectingToDockerHost", + "DockerHostVariableWarning": "ms-resource:loc.messages.DockerHostVariableWarning", + "NoImagesInImageNamesFile": "ms-resource:loc.messages.NoImagesInImageNamesFile", + "CantWriteDataToFile": "ms-resource:loc.messages.CantWriteDataToFile", + "NoDataWrittenOnFile": "ms-resource:loc.messages.NoDataWrittenOnFile", + "FileContentSynced": "ms-resource:loc.messages.FileContentSynced", + "OutputVariableDataSizeExceeded": "ms-resource:loc.messages.OutputVariableDataSizeExceeded", + "WritingDockerConfigToTempFile": "ms-resource:loc.messages.WritingDockerConfigToTempFile" + }, + "_buildConfigMapping": { + "Default": "0.238.0", + "Node20_229_2": "0.238.1" + } +} \ No newline at end of file diff --git a/_generated/DockerV0/tsconfig.json b/_generated/DockerV0/tsconfig.json new file mode 100644 index 000000000000..79a868c8d1e3 --- /dev/null +++ b/_generated/DockerV0/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + }, + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/_generated/DockerV0/utils.ts b/_generated/DockerV0/utils.ts new file mode 100644 index 000000000000..3ceab38f9d75 --- /dev/null +++ b/_generated/DockerV0/utils.ts @@ -0,0 +1,135 @@ +"use strict"; +import * as tl from "azure-pipelines-task-lib/task"; +import * as fs from "fs"; +import ContainerConnection from "azure-pipelines-tasks-docker-common/containerconnection"; +import * as sourceUtils from "azure-pipelines-tasks-docker-common/sourceutils"; +import * as imageUtils from "azure-pipelines-tasks-docker-common/containerimageutils"; +import * as fileutils from "azure-pipelines-tasks-docker-common/fileutils"; +import * as path from "path"; +import * as os from "os"; + +export function getImageNames(): string[] { + let imageNamesFilePath = tl.getPathInput("imageNamesPath", /* required */ true, /* check exists */ true); + var enforceDockerNamingConvention = tl.getBoolInput("enforceDockerNamingConvention"); + let imageNames = fs.readFileSync(imageNamesFilePath, "utf-8").trim().replace(/\r\n|\r/gm, "\n").split("\n"); // \r\n windows and \r mac new line chars + if (!imageNames.length) { + throw new Error(tl.loc("NoImagesInImageNamesFile", imageNamesFilePath)); + } + + return imageNames.map(n => (enforceDockerNamingConvention === true)? imageUtils.generateValidImageName(n): n); +} + +export function getImageName(): string { + var enforceDockerNamingConvention = tl.getBoolInput("enforceDockerNamingConvention"); + var imageName = tl.getInput("imageName", true); + if(enforceDockerNamingConvention === true) { + return imageUtils.generateValidImageName(imageName); + } + + return imageName; +} + +export function getImageMappings(connection: ContainerConnection, imageNames: string[]): ImageMapping[] { + let qualifyImageName = tl.getBoolInput("qualifyImageName"); + let imageInfos: ImageInfo[] = imageNames.map(imageName => { + let qualifiedImageName = qualifyImageName ? connection.getQualifiedImageNameIfRequired(imageName) : imageName; + return { + sourceImageName: imageName, + qualifiedImageName: qualifiedImageName, + baseImageName: imageUtils.imageNameWithoutTag(qualifiedImageName), + taggedImages: [] + }; + }); + + let additionalImageTags = tl.getDelimitedInput("additionalImageTags", "\n"); + let includeSourceTags = tl.getBoolInput("includeSourceTags"); + let includeLatestTag = tl.getBoolInput("includeLatestTag"); + + let sourceTags: string[] = []; + if (includeSourceTags) { + sourceTags = sourceUtils.getSourceTags(); + } + + let commonTags: string[] = additionalImageTags.concat(sourceTags); + + // For each of the image names, generate a mapping from the source image name to the target image. The same source image name + // may be listed more than once if there are multiple tags. The target image names will be tagged based on the task configuration. + for (let i = 0; i < imageInfos.length; i++) { + let imageInfo = imageInfos[i]; + let imageSpecificTags: string[] = []; + if (imageInfo.baseImageName === imageInfo.qualifiedImageName) { + imageSpecificTags.push("latest"); + } else { + imageInfo.taggedImages.push(imageInfo.qualifiedImageName); + if (includeLatestTag) { + imageSpecificTags.push("latest"); + } + } + + commonTags.concat(imageSpecificTags).forEach(tag => { + imageInfo.taggedImages.push(imageInfo.baseImageName + ":" + tag); + }); + } + + // Flatten the image infos into a mapping between the source images and each of their tagged target images + let sourceToTargetMapping: ImageMapping[] = []; + imageInfos.forEach(imageInfo => { + imageInfo.taggedImages.forEach(taggedImage => { + sourceToTargetMapping.push({ + sourceImageName: imageInfo.sourceImageName, + targetImageName: taggedImage + }); + }); + }); + + return sourceToTargetMapping; +} + + +function getTaskOutputDir(command: string): string { + let tempDirectory = tl.getVariable('agent.tempDirectory') || os.tmpdir(); + let taskOutputDir = path.join(tempDirectory, "task_outputs"); + return taskOutputDir; +} + +export function writeTaskOutput(commandName: string, output: string): string { + let taskOutputDir = getTaskOutputDir(commandName); + if (!fs.existsSync(taskOutputDir)) { + fs.mkdirSync(taskOutputDir); + } + + let outputFileName = commandName + "_" + Date.now() + ".txt"; + let taskOutputPath = path.join(taskOutputDir, outputFileName); + if (fileutils.writeFileSync(taskOutputPath, output) == 0) { + tl.warning(tl.loc('NoDataWrittenOnFile', taskOutputPath)); + } + + return taskOutputPath; +} + +interface ImageInfo { + /** + * The original, unmodified, image name provided as input to the task + */ + sourceImageName: string; + + /** + * The source image name, qualified with the connection endpoint if configured to do so. + */ + qualifiedImageName: string; + + /** + * The qualified image name with any tagging removed. + */ + baseImageName: string; + + /** + * The collection of qualifed and tagged images associated with the source image. + */ + taggedImages: string[]; +} + +export interface ImageMapping { + sourceImageName: string; + targetImageName: string; +} \ No newline at end of file diff --git a/_generated/DockerV0_Node20/task.json b/_generated/DockerV0_Node20/task.json index 9e38ebad6a72..dd204a635e0e 100644 --- a/_generated/DockerV0_Node20/task.json +++ b/_generated/DockerV0_Node20/task.json @@ -13,8 +13,8 @@ "author": "Microsoft Corporation", "version": { "Major": 0, - "Minor": 231, - "Patch": 0 + "Minor": 238, + "Patch": 1 }, "demands": [], "preview": "false", @@ -366,7 +366,7 @@ "WritingDockerConfigToTempFile": "Writing Docker config to temp file. File path: %s, Docker config: %s" }, "_buildConfigMapping": { - "Default": "0.225.1", - "Node20_229_2": "0.231.0" + "Default": "0.238.0", + "Node20_229_2": "0.238.1" } } \ No newline at end of file diff --git a/_generated/DockerV0_Node20/task.loc.json b/_generated/DockerV0_Node20/task.loc.json index 646afa0583b0..bda67b538597 100644 --- a/_generated/DockerV0_Node20/task.loc.json +++ b/_generated/DockerV0_Node20/task.loc.json @@ -13,8 +13,8 @@ "author": "Microsoft Corporation", "version": { "Major": 0, - "Minor": 231, - "Patch": 0 + "Minor": 238, + "Patch": 1 }, "demands": [], "preview": "false", @@ -366,7 +366,7 @@ "WritingDockerConfigToTempFile": "ms-resource:loc.messages.WritingDockerConfigToTempFile" }, "_buildConfigMapping": { - "Default": "0.225.1", - "Node20_229_2": "0.231.0" + "Default": "0.238.0", + "Node20_229_2": "0.238.1" } } \ No newline at end of file diff --git a/_generated/DockerV1.versionmap.txt b/_generated/DockerV1.versionmap.txt index 088bf333a89c..06be14f9a274 100644 --- a/_generated/DockerV1.versionmap.txt +++ b/_generated/DockerV1.versionmap.txt @@ -1,2 +1,2 @@ -Default|1.225.1 -Node20_229_2|1.231.0 +Default|1.238.0 +Node20_229_2|1.238.1 diff --git a/_generated/DockerV1/Strings/resources.resjson/de-DE/resources.resjson b/_generated/DockerV1/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..4ac4e688b0ed --- /dev/null +++ b/_generated/DockerV1/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,88 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "Hiermit werden Docker-Images erstellt, markiert, mithilfe von Push übertragen oder ausgeführt oder ein Docker-Befehl ausgeführt.", + "loc.instanceNameFormat": "$(command)", + "loc.releaseNotes": "Vereinfachung der Aufgabe durch:
 – Festlegen einer Option zur einfachen Auswahl oder Eingabe eines Befehls.
 – Beibehaltung nützlicher Eingabefelder und Option zum Übergeben der übrigen Felder als Argument für den Befehl", + "loc.group.displayName.containerRegistry": "Containerregistrierung", + "loc.group.displayName.commands": "Befehle", + "loc.group.displayName.advanced": "Erweiterte Optionen", + "loc.input.label.containerregistrytype": "Containerregistrierungstyp", + "loc.input.help.containerregistrytype": "Wählen Sie \"Azure Container Registry\" aus, um sich über eine Azure-Dienstverbindung zu verbinden. Wählen Sie \"Containerregistrierung\" aus, um eine Verbindung mit Docker Hub oder einer anderen privaten Containerregistrierung herzustellen.", + "loc.input.label.addBaseImageData": "Image(s) Metadaten von Basisimages hinzufügen", + "loc.input.help.addBaseImageData": "Basisimagedaten wie Basisimagename und -digest werden standardmäßig hinzugefügt, um die Nachverfolgung zu erleichtern. Sie können dieses Standardverhalten anhand dieser Eingabe deaktivieren.", + "loc.input.label.dockerRegistryEndpoint": "Dienstverbindung für Docker-Registrierung", + "loc.input.help.dockerRegistryEndpoint": "Wählen Sie eine Dienstverbindung für die Docker-Registrierung aus. Erforderlich für Befehle, die eine Authentifizierung bei einer Registrierung erfordern.", + "loc.input.label.azureSubscriptionEndpoint": "Azure-Abonnement", + "loc.input.help.azureSubscriptionEndpoint": "Wählen Sie ein Azure-Abonnement aus.", + "loc.input.label.azureContainerRegistry": "Azure Container Registry", + "loc.input.help.azureContainerRegistry": "Wählen Sie eine Azure Container Registry-Instanz im ausgewählten Azure-Abonnement aus. Das Containerimage wird erstellt und mithilfe von Push in diese Containerregistrierung übertragen.", + "loc.input.label.command": "Befehl", + "loc.input.help.command": "Wählen Sie einen Docker-Befehl aus.", + "loc.input.label.dockerFile": "Dockerfile", + "loc.input.help.dockerFile": "Pfad zu Dockerfile.", + "loc.input.label.arguments": "Argumente", + "loc.input.help.arguments": "Docker-Befehlsoptionen. Bei Verwendung des tag-Befehls können Sie hier zusätzliche Tags für das Docker-Image angeben.", + "loc.input.label.pushMultipleImages": "Mehrere Images mithilfe von Push übertragen", + "loc.input.help.pushMultipleImages": "Übertragen Sie mehrere Images mithilfe von Push, indem Sie eine Textdatei mit den Namen der zu übertragenden Docker-Images verwenden. Jeder Imagename ist in einer eigenen Zeile enthalten.
Beispiel:
Imagename1:tag1
Imagename2:tag2
Imagename3
Falls nur der Imagename angegeben wird, werden alle Tags von Containerimage \"ImageName3\" mithilfe von Push übertragen.", + "loc.input.label.tagMultipleImages": "Mehrere Images markieren", + "loc.input.help.tagMultipleImages": "Markieren Sie mehrere Images, indem Sie eine Textdatei mit den Namen der zu markierenden Docker-Images verwenden. Jeder Imagename ist in einer eigenen Zeile enthalten.
Beispiel:
Imagename1:tag1
Imagename2:tag2
Imagename3
Falls nur der Imagename angegeben wird, wird dieses Image als aktuelles Image markiert.", + "loc.input.label.imageName": "Imagename", + "loc.input.help.imageName": "Name des Docker-Images, das erstellt, mittels Push übertragen oder ausgeführt werden soll.", + "loc.input.label.imageNamesPath": "Pfad für Imagenamen", + "loc.input.help.imageNamesPath": "Pfad zu einer Textdatei, die die Namen der Docker-Images enthält, die gekennzeichnet oder mithilfe von Push übertragen werden sollen. Jeder Imagename ist in einer eigenen Zeile enthalten.", + "loc.input.label.qualifyImageName": "Imagenamen qualifizieren", + "loc.input.help.qualifyImageName": "Qualifizieren Sie den Imagenamen mit dem Hostnamen der Docker-Registrierungsdienstverbindung, sofern nicht anders angegeben.", + "loc.input.label.qualifySourceImageName": "Quellimagenamen qualifizieren", + "loc.input.help.qualifySourceImageName": "Qualifizieren Sie den Quellimagenamen mit dem Hostnamen der Docker-Registrierungsdienstverbindung, sofern nicht anders angegeben.", + "loc.input.label.includeSourceTags": "Quelltags einschließen", + "loc.input.help.includeSourceTags": "Fügen Sie Git-Tags ein, wenn Sie das Docker-Image erstellen oder mittels Push übertragen.", + "loc.input.label.includeLatestTag": "Tag für aktuelles Image einschließen", + "loc.input.help.includeLatestTag": "Schließen Sie das Tag für das aktuelle Image ein, wenn Sie das Docker-Image erstellen.", + "loc.input.label.addDefaultLabels": "Standardbezeichnungen verwenden", + "loc.input.help.addDefaultLabels": "Fügen Sie mithilfe von Docker-Bezeichnungen CI/CD-Metadaten wie z. B . Repository-, Commit-, Build- und Releaseinformationen zum Containerimage hinzu.", + "loc.input.label.useDefaultContext": "Standardbuildkontext verwenden", + "loc.input.help.useDefaultContext": "Legen Sie den Buildkontext auf das Verzeichnis fest, das die Dockerfile-Datei enthält.", + "loc.input.label.buildContext": "Buildkontext", + "loc.input.help.buildContext": "Pfad zum Buildkontext.", + "loc.input.label.imageDigestFile": "Imagedigestdatei", + "loc.input.help.imageDigestFile": "Pfad zu einer Datei, die erstellt und mit dem vollständigen Imagerepository-Hashwert des mittels Push übertragenen Docker-Images befüllt wird.", + "loc.input.label.containerName": "Containername", + "loc.input.help.containerName": "Name des auszuführenden Docker-Containers.", + "loc.input.label.ports": "Ports", + "loc.input.help.ports": "Ports im Docker-Container zum Veröffentlichen an den Host. Geben Sie jede Hostport:Containerport-Bindung in einer neuen Zeile an.", + "loc.input.label.volumes": "Volumes", + "loc.input.help.volumes": "Vom Host einzubindende Volumes. Geben Sie jedes Hostverzeichnis:Containerverzeichnis in einer neuen Zeile an.", + "loc.input.label.envVars": "Umgebungsvariablen", + "loc.input.help.envVars": "Umgebungsvariablen für den Docker-Container. Geben Sie jedes Name/Wert-Paar in einer neuen Zeile an.", + "loc.input.label.workingDirectory": "Arbeitsverzeichnis", + "loc.input.help.workingDirectory": "Das Arbeitsverzeichnis für den Docker-Container.", + "loc.input.label.entrypointOverride": "Überschreiben des Einstiegspunkts", + "loc.input.help.entrypointOverride": "Überschreiben Sie den Standardeinstiegspunkt für den Docker-Container.", + "loc.input.label.containerCommand": "Containerbefehl", + "loc.input.help.containerCommand": "Der Docker-Ausführungsbefehl erstellt zunächst eine beschreibbare Containerebene oberhalb des angegebenen Images und startet diese anschließend mit dem angegebenen Ausführungsbefehl. Wenn das Image beispielsweise eine einfache Python Flask-Webanwendung enthält, können Sie \"python app.py\" angeben, um die Webanwendung auszuführen.", + "loc.input.label.runInBackground": "Im Hintergrund ausführen", + "loc.input.help.runInBackground": "Führen Sie den Docker-Container im Hintergrund aus.", + "loc.input.label.restartPolicy": "Neustartrichtlinie", + "loc.input.help.restartPolicy": "Wählen Sie eine Neustartrichtlinie aus.", + "loc.input.label.maxRestartRetries": "Maximale Anzahl von Neustartversuchen", + "loc.input.help.maxRestartRetries": "Die maximale Anzahl an Neustartversuchen, die der Docker-Daemon unternimmt.", + "loc.input.label.dockerHostEndpoint": "Docker-Hostdienstverbindung", + "loc.input.help.dockerHostEndpoint": "Wählen Sie eine Docker-Hostdienstverbindung. Entspricht standardmäßig dem Agent-Host.", + "loc.input.label.enforceDockerNamingConvention": "Docker-Namenskonvention für Imagenamen erzwingen", + "loc.input.help.enforceDockerNamingConvention": "Bei Aktivierung dieser Einstellung werden Docker-Imagenamen gemäß Docker-Namenskonvention geändert. Großbuchstaben werden in Kleinbuchstaben konvertiert, und Leerzeichen im Imagenamen werden entfernt.", + "loc.input.label.memoryLimit": "Arbeitsspeicherlimit", + "loc.input.help.memoryLimit": "Die maximal für den Container verfügbare Arbeitsspeichermenge als Ganzzahl mit optionalen Suffixen wie \"2 GB\".", + "loc.messages.ConnectingToDockerHost": "Die DOCKER_HOST-Variable ist festgelegt. Docker versucht, eine Verbindung mit dem Docker-Host herzustellen: %s", + "loc.messages.ContainerPatternFound": "Muster in Docker-Dateipfadparameter gefunden.", + "loc.messages.ContainerPatternNotFound": "Kein Muster im Docker-Parameter \"filepath\" gefunden.", + "loc.messages.ContainerDockerFileNotFound": "Es wurde keine Docker-Datei gefunden, die \"%s\" entspricht.", + "loc.messages.DockerHostVariableWarning": "Die DOCKER_HOST-Variable ist festgelegt. Stellen Sie sicher, dass der Docker-Daemon auf \"%s\" ausgeführt wird.", + "loc.messages.NoImagesInImageNamesFile": "In der Datei \"%s\" wird mindestens ein Imagename erwartet.", + "loc.messages.CantWriteDataToFile": "In die Datei \"%s\" können keine Daten geschrieben werden. Fehler: %s", + "loc.messages.NoDataWrittenOnFile": "In die Datei \"%s\" wurden keine Daten geschrieben. ", + "loc.messages.FileContentSynced": "Der Inhalt der Datei wurde auf dem Datenträger synchronisiert. Der Inhalt ist \"%s\".", + "loc.messages.DockerRegistryNotFound": "Keine Dienstverbindung für Docker-Registrierung angegeben.", + "loc.messages.OutputVariableDataSizeExceeded": "Die Ausgabevariable wurde nicht festgelegt, weil die Docker-Befehlsausgabe die maximal unterstützte Länge überschritten hat. Ausgabelänge: %s, maximal unterstützte Länge: %s", + "loc.messages.WritingDockerConfigToTempFile": "Die Docker-Konfiguration wird in eine temporäre Datei geschrieben. Dateipfad: %s, Docker-Konfiguration: %s" +} \ No newline at end of file diff --git a/_generated/DockerV1/Strings/resources.resjson/en-US/resources.resjson b/_generated/DockerV1/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..461e71e6d4d2 --- /dev/null +++ b/_generated/DockerV1/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,88 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "Build, tag, push, or run Docker images, or run a Docker command", + "loc.instanceNameFormat": "$(command)", + "loc.releaseNotes": "Simplified the task by:
 - Providing an option to simply select or type a command.
 - Retaining the useful input fields and providing an option to pass the rest as an argument to the command.", + "loc.group.displayName.containerRegistry": "Container Registry", + "loc.group.displayName.commands": "Commands", + "loc.group.displayName.advanced": "Advanced Options", + "loc.input.label.containerregistrytype": "Container registry type", + "loc.input.help.containerregistrytype": "Select 'Azure Container Registry' to connect to it by using an Azure Service Connection. Select 'Container registry' to connect to Docker Hub or any other private container registry.", + "loc.input.label.addBaseImageData": "Add base image metadata to image(s)", + "loc.input.help.addBaseImageData": "By default base image data like base image name and digest are added which helps with traceability. You can opt out of this default behavior by using this input.", + "loc.input.label.dockerRegistryEndpoint": "Docker registry service connection", + "loc.input.help.dockerRegistryEndpoint": "Select a Docker registry service connection. Required for commands that need to authenticate with a registry.", + "loc.input.label.azureSubscriptionEndpoint": "Azure subscription", + "loc.input.help.azureSubscriptionEndpoint": "Select an Azure subscription", + "loc.input.label.azureContainerRegistry": "Azure container registry", + "loc.input.help.azureContainerRegistry": "Select an Azure Container Registry in the selected Azure Subscription. The container image will be built and pushed to this container registry.", + "loc.input.label.command": "Command", + "loc.input.help.command": "Select a Docker command.", + "loc.input.label.dockerFile": "Dockerfile", + "loc.input.help.dockerFile": "Path to the Dockerfile.", + "loc.input.label.arguments": "Arguments", + "loc.input.help.arguments": "Docker command options. In case of 'tag' command, you can specify additional tags for Docker image here.", + "loc.input.label.pushMultipleImages": "Push multiple images", + "loc.input.help.pushMultipleImages": "Push multiple images by using a text file that contains the names of the Docker images to push. Each image name is contained on its own line.
For example:
Imagename1:tag1
Imagename2:tag2
Imagename3
In case only image name is provided, all tags of the ImageName3 container image will be pushed.", + "loc.input.label.tagMultipleImages": "Tag multiple images", + "loc.input.help.tagMultipleImages": "Tag multiple images by using a text file that contains the names of the Docker images to tag. Each image name is contained on its own line.
For example:
Imagename1:tag1
Imagename2:tag2
Imagename3
In case only image name is provided, that image will be tagged as 'latest'.", + "loc.input.label.imageName": "Image name", + "loc.input.help.imageName": "Name of the Docker image to build, push, or run.", + "loc.input.label.imageNamesPath": "Image names path", + "loc.input.help.imageNamesPath": "Path to a text file that contains the names of the Docker images to tag or push. Each image name is contained on its own line.", + "loc.input.label.qualifyImageName": "Qualify image name", + "loc.input.help.qualifyImageName": "Qualify the image name with the Docker registry service connection's hostname if not otherwise specified.", + "loc.input.label.qualifySourceImageName": "Qualify source image name", + "loc.input.help.qualifySourceImageName": "Qualify the source image name with the Docker registry service connection's hostname if not otherwise specified.", + "loc.input.label.includeSourceTags": "Include source tags", + "loc.input.help.includeSourceTags": "Include Git tags when building or pushing the Docker image.", + "loc.input.label.includeLatestTag": "Include latest tag", + "loc.input.help.includeLatestTag": "Include the 'latest' tag when building the Docker image.", + "loc.input.label.addDefaultLabels": "Add default labels", + "loc.input.help.addDefaultLabels": "Add CI/CD metadata like repository, commit, build and release information to the container image by using Docker labels.", + "loc.input.label.useDefaultContext": "Use default build context", + "loc.input.help.useDefaultContext": "Set the build context to the directory that contains the Dockerfile.", + "loc.input.label.buildContext": "Build context", + "loc.input.help.buildContext": "Path to the build context.", + "loc.input.label.imageDigestFile": "Image digest file", + "loc.input.help.imageDigestFile": "Path to a file that is created and populated with the full image repository digest of the Docker image that was pushed.", + "loc.input.label.containerName": "Container name", + "loc.input.help.containerName": "Name of the Docker container to run.", + "loc.input.label.ports": "Ports", + "loc.input.help.ports": "Ports in the Docker container to publish to the host. Specify each host-port:container-port binding on a new line.", + "loc.input.label.volumes": "Volumes", + "loc.input.help.volumes": "Volumes to mount from the host. Specify each host-dir:container-dir on a new line.", + "loc.input.label.envVars": "Environment variables", + "loc.input.help.envVars": "Environment variables for the Docker container. Specify each name=value pair on a new line.", + "loc.input.label.workingDirectory": "Working directory", + "loc.input.help.workingDirectory": "The working directory for the Docker container.", + "loc.input.label.entrypointOverride": "Entry point override", + "loc.input.help.entrypointOverride": "Override the default entry point for the Docker container.", + "loc.input.label.containerCommand": "Container command", + "loc.input.help.containerCommand": "The docker run command first creates a writeable container layer over the specified image, and then starts it by using the specified run command. For example, if the image contains a simple Python Flask web application you can specify 'python app.py' to launch the web application.", + "loc.input.label.runInBackground": "Run in background", + "loc.input.help.runInBackground": "Run the Docker container in the background.", + "loc.input.label.restartPolicy": "Restart policy", + "loc.input.help.restartPolicy": "Select a restart policy.", + "loc.input.label.maxRestartRetries": "Maximum restart retries", + "loc.input.help.maxRestartRetries": "The maximum number of restart retries the Docker daemon attempts.", + "loc.input.label.dockerHostEndpoint": "Docker host service connection", + "loc.input.help.dockerHostEndpoint": "Select a Docker host service connection. Defaults to the agent's host.", + "loc.input.label.enforceDockerNamingConvention": "Force image name to follow Docker naming convention", + "loc.input.help.enforceDockerNamingConvention": "If enabled Docker image name will be modified to follow Docker naming convention. Converts upper case character to lower case and removes spaces in image name.", + "loc.input.label.memoryLimit": "Memory limit", + "loc.input.help.memoryLimit": "The maximum amount of memory available to the container as a integer with optional suffixes like '2GB'.", + "loc.messages.ConnectingToDockerHost": "DOCKER_HOST variable is set. Docker will try to connect to the Docker host: %s", + "loc.messages.ContainerPatternFound": "Pattern found in Docker filepath parameter", + "loc.messages.ContainerPatternNotFound": "No pattern found in Docker filepath parameter", + "loc.messages.ContainerDockerFileNotFound": "No Dockerfile matching %s was found.", + "loc.messages.DockerHostVariableWarning": "DOCKER_HOST variable is set. Please ensure that the Docker daemon is running on: %s", + "loc.messages.NoImagesInImageNamesFile": "At least one image name is expected in file '%s'.", + "loc.messages.CantWriteDataToFile": "Can not write data to the file %s. Error: %s", + "loc.messages.NoDataWrittenOnFile": "No data was written into the file %s", + "loc.messages.FileContentSynced": "Synced the file content to the disk. The content is %s.", + "loc.messages.DockerRegistryNotFound": "Docker registry service connection not specified.", + "loc.messages.OutputVariableDataSizeExceeded": "Output variable not set as Docker command output exceeded the maximum supported length. Output length: %s, Maximum supported length: %s", + "loc.messages.WritingDockerConfigToTempFile": "Writing Docker config to temp file. File path: %s, Docker config: %s" +} \ No newline at end of file diff --git a/_generated/DockerV1/Strings/resources.resjson/es-ES/resources.resjson b/_generated/DockerV1/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..1f772a8dff2e --- /dev/null +++ b/_generated/DockerV1/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,88 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "Compila, etiqueta, inserta o ejecuta imágenes de Docker, o bien ejecuta un comando de Docker.", + "loc.instanceNameFormat": "$(comando)", + "loc.releaseNotes": "Se ha simplificado la tarea mediante lo siguiente:
- Provisión de una opción para simplemente seleccionar o escribir un comando.
- Retener los campos de entrada útiles y proporcionar una opción para pasar el resto como argumento para el comando.", + "loc.group.displayName.containerRegistry": "Container Registry", + "loc.group.displayName.commands": "Comandos", + "loc.group.displayName.advanced": "Opciones avanzadas", + "loc.input.label.containerregistrytype": "Tipo de registro de contenedor", + "loc.input.help.containerregistrytype": "Seleccione \"Azure Container Registry\" para conectarse a él mediante una conexión del servicio de Azure. Seleccione \"Registro de contenedor\" para conectarse al Docker Hub o a cualquier otro registro de contenedor privado.", + "loc.input.label.addBaseImageData": "Adición de metadatos de imagen base a imágenes", + "loc.input.help.addBaseImageData": "De forma predeterminada, se agregan datos de imagen base, como el nombre y el resumen, lo que ayuda a aumentar la trazabilidad. Puede desactivar este comportamiento predeterminado mediante esta entrada.", + "loc.input.label.dockerRegistryEndpoint": "Conexión de servicio del registro de Docker", + "loc.input.help.dockerRegistryEndpoint": "Seleccione una conexión de servicio de registro de Docker. Obligatorio para los comandos que deben autenticarse en un registro.", + "loc.input.label.azureSubscriptionEndpoint": "Suscripción a Azure", + "loc.input.help.azureSubscriptionEndpoint": "Seleccione una suscripción de Azure", + "loc.input.label.azureContainerRegistry": "Azure Container Registry", + "loc.input.help.azureContainerRegistry": "Seleccione una instancia de Azure Container Registry en la suscripción de Azure seleccionada. La imagen del contenedor se compilará y se insertará en dicha instancia.", + "loc.input.label.command": "Comando", + "loc.input.help.command": "Seleccione un comando de Docker.", + "loc.input.label.dockerFile": "Dockerfile", + "loc.input.help.dockerFile": "Ruta de acceso al Dockerfile.", + "loc.input.label.arguments": "Argumentos", + "loc.input.help.arguments": "Opciones de comando de Docker. En el caso del comando \"tag\", puede especificar más etiquetas para la imagen de Docker aquí.", + "loc.input.label.pushMultipleImages": "Insertar varias imágenes", + "loc.input.help.pushMultipleImages": "Insertar varias imágenes utilizando un archivo de texto que contiene los nombres de las imágenes de Docker para insertar. Cada nombre de imagen está contenido en su propia línea.
Por ejemplo:
Imagename1:tag1
Imagename2:tag2
Imagename3
En caso de que se proporcione solo el nombre de la imagen, se insertarán todas las etiquetas de la imagen del contenedor ImageName3.", + "loc.input.label.tagMultipleImages": "Etiquetar varias imágenes", + "loc.input.help.tagMultipleImages": "Etiquete varias imágenes utilizando un archivo de texto que contiene los nombres de las imágenes de Docker para etiquetar. Cada nombre de imagen está contenido en su propia línea.
Por ejemplo:
Imagename1:tag1
Imagename2:tag2
Imagename3
En caso de que se proporcione solo el nombre de la imagen, esa imagen se etiquetará como \"latest\".", + "loc.input.label.imageName": "Nombre de la imagen", + "loc.input.help.imageName": "Nombre de la imagen de Docker que se debe compilar, insertar o ejecutar.", + "loc.input.label.imageNamesPath": "Ruta de acceso de los nombres de imagen", + "loc.input.help.imageNamesPath": "Ruta de acceso a un archivo de texto que contiene los nombres de las imágenes de Docker que se van a etiquetar o a insertar. Cada nombre de imagen se incluye en su propia línea.", + "loc.input.label.qualifyImageName": "Completar el nombre de la imagen", + "loc.input.help.qualifyImageName": "Completa el nombre de la imagen con el nombre de host de la conexión de servicio de registro de Docker, si no se ha especificado otra cosa.", + "loc.input.label.qualifySourceImageName": "Completar el nombre de la imagen de origen", + "loc.input.help.qualifySourceImageName": "Complete el nombre de la imagen de origen con el nombre de host de la conexión de servicio del registro de Docker, si no se ha especificado otra cosa.", + "loc.input.label.includeSourceTags": "Incluir etiquetas de origen", + "loc.input.help.includeSourceTags": "Incluye las etiquetas de GIT cuando se compila o inserta la imagen de Docker.", + "loc.input.label.includeLatestTag": "Incluir etiqueta \"latest\"", + "loc.input.help.includeLatestTag": "Incluye la etiqueta \"latest\" cuando se compila la imagen de Docker.", + "loc.input.label.addDefaultLabels": "Agregar etiquetas predeterminadas", + "loc.input.help.addDefaultLabels": "Agregue metadatos de CI/CD como información del repositorio, confirmación, compilación y versión a la imagen de contenedor mediante el uso de las etiquetas de Docker.", + "loc.input.label.useDefaultContext": "Usar contexto de compilación predeterminado", + "loc.input.help.useDefaultContext": "Establece el contexto de compilación en el directorio que contiene el archivo de Docker.", + "loc.input.label.buildContext": "Contexto de compilación", + "loc.input.help.buildContext": "Ruta de acceso del contexto de compilación.", + "loc.input.label.imageDigestFile": "Archivo de resumen de imagen", + "loc.input.help.imageDigestFile": "Ruta de acceso a un archivo que se crea y rellena con el resumen del repositorio de imágenes completo de la imagen de Docker que se insertó.", + "loc.input.label.containerName": "Nombre del contenedor", + "loc.input.help.containerName": "Nombre del contenedor Docker que se debe ejecutar.", + "loc.input.label.ports": "Puertos", + "loc.input.help.ports": "Puertos en el contenedor Docker para publicar en el host. Especifique cada enlace puerto-de-host:puerto-del-contenedor en una línea nueva.", + "loc.input.label.volumes": "Volúmenes", + "loc.input.help.volumes": "Volúmenes que deben montarse desde el host. Especifique cada entrada directorio-del-host:directorio-del-contenedor en una línea nueva.", + "loc.input.label.envVars": "Variables de entorno", + "loc.input.help.envVars": "Variables de entorno para el contenedor Docker. Especifique cada par nombre=valor en una línea nueva.", + "loc.input.label.workingDirectory": "Directorio de trabajo", + "loc.input.help.workingDirectory": "Directorio de trabajo para el contenedor Docker.", + "loc.input.label.entrypointOverride": "Invalidación de punto de entrada", + "loc.input.help.entrypointOverride": "Reemplaza el punto de entrada predeterminado para el contenedor Docker.", + "loc.input.label.containerCommand": "Comando de Container", + "loc.input.help.containerCommand": "El comando docker run primero crea una capa de contenedor grabable sobre la imagen especificada y, a continuación, la inicia mediante el comando de ejecución especificado. Por ejemplo, si la imagen contiene una aplicación web Python Flask simple puede especificar \"python app.py\" para iniciar la aplicación web.", + "loc.input.label.runInBackground": "Ejecutar en segundo plano", + "loc.input.help.runInBackground": "Ejecute el contenedor Docker en segundo plano.", + "loc.input.label.restartPolicy": "Directiva de reinicio", + "loc.input.help.restartPolicy": "Seleccione una directiva de reinicio.", + "loc.input.label.maxRestartRetries": "Máximo de reintentos de reinicio", + "loc.input.help.maxRestartRetries": "Número máximo de reintentos de reinicio del demonio de Docker.", + "loc.input.label.dockerHostEndpoint": "Conexión de servicio de host de Docker", + "loc.input.help.dockerHostEndpoint": "Seleccione una conexión de servicio de host de Docker. El valor predeterminado es el host del agente.", + "loc.input.label.enforceDockerNamingConvention": "Forzar el nombre de imagen para que siga la convención de nomenclatura de Docker", + "loc.input.help.enforceDockerNamingConvention": "Si está habilitada, el nombre de la imagen de Docker se modificará de acuerdo con la convención de nomenclatura de Docker. Esta convierte los caracteres en mayúscula a minúscula y quita los espacios en el nombre de la imagen.", + "loc.input.label.memoryLimit": "Límite de memoria", + "loc.input.help.memoryLimit": "La cantidad máxima de memoria disponible para el contenedor expresada como entero con sufijos opcionales; por ejemplo, \"2 GB\".", + "loc.messages.ConnectingToDockerHost": "La variable DOCKER_HOST está establecida. Docker intentará conectarse a su host: %s", + "loc.messages.ContainerPatternFound": "Se encontró un patrón en el parámetro filepath de Docker.", + "loc.messages.ContainerPatternNotFound": "No se ha encontrado ningún patrón en el parámetro filepath de Docker", + "loc.messages.ContainerDockerFileNotFound": "No se encontró ningún archivo de Docker que coincidiera con %s.", + "loc.messages.DockerHostVariableWarning": "La variable DOCKER_HOST está establecida. Asegúrese de que el demonio de Docker se está ejecutando en %s.", + "loc.messages.NoImagesInImageNamesFile": "Se espera al menos un nombre de imagen en el archivo \"%s\".", + "loc.messages.CantWriteDataToFile": "No se pueden escribir datos en el archivo %s. Error: %s", + "loc.messages.NoDataWrittenOnFile": "No se escribieron datos en el archivo %s", + "loc.messages.FileContentSynced": "Se sincronizó el contenido del archivo con el disco. El contenido es %s.", + "loc.messages.DockerRegistryNotFound": "Conexión de servicio de registro de Docker no especificado.", + "loc.messages.OutputVariableDataSizeExceeded": "La variable de salida no establecida como salida del comando de Docker superó la longitud máxima admitida. Longitud de salida: %s. Longitud máxima admitida: %s", + "loc.messages.WritingDockerConfigToTempFile": "Escribiendo la configuración de Docker en el archivo temporal. Ruta de acceso del archivo: %s. Configuración de Docker: %s" +} \ No newline at end of file diff --git a/_generated/DockerV1/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/DockerV1/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..e7e7c89684a3 --- /dev/null +++ b/_generated/DockerV1/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,88 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "Générer, étiqueter, envoyer (push) ou exécuter des images Docker, ou bien exécuter une commande Docker", + "loc.instanceNameFormat": "$(commande)", + "loc.releaseNotes": "Simplifiez la tâche :
 -En indiquant une option qui permet de sélectionner ou de taper simplement une commande.
 -En conservant les champs d'entrée utiles et en indiquant une option qui permet de passer le reste en tant qu'argument à la commande.", + "loc.group.displayName.containerRegistry": "Container Registry", + "loc.group.displayName.commands": "Commandes", + "loc.group.displayName.advanced": "Options avancées", + "loc.input.label.containerregistrytype": "Type de registre de conteneurs", + "loc.input.help.containerregistrytype": "Sélectionnez 'Azure Container Registry' pour vous y connecter à l'aide d'une connexion de service Azure. Sélectionnez 'Registre de conteneurs' pour vous connecter à Docker Hub ou tout autre registre de conteneurs privé.", + "loc.input.label.addBaseImageData": "Ajouter des métadonnées d’image de base à des images", + "loc.input.help.addBaseImageData": "Par défaut, les données de l'image de base, telles que le nom de l'image de base et le résumé, sont ajoutées, ce qui facilite la traçabilité. Vous pouvez désactiver ce comportement par défaut en utilisant cette entrée.", + "loc.input.label.dockerRegistryEndpoint": "Connexion de service de registre Docker", + "loc.input.help.dockerRegistryEndpoint": "Sélectionnez une connexion de service de registre Docker. Obligatoire pour les commandes qui doivent s'authentifier après d'un registre.", + "loc.input.label.azureSubscriptionEndpoint": "Abonnement Azure", + "loc.input.help.azureSubscriptionEndpoint": "Sélectionnez un abonnement Azure", + "loc.input.label.azureContainerRegistry": "Azure Container Registry", + "loc.input.help.azureContainerRegistry": "Sélectionnez un registre Azure Container Registry dans l'abonnement Azure sélectionné. L'image conteneur va être générée et envoyée (push) vers ce registre de conteneurs.", + "loc.input.label.command": "Commande", + "loc.input.help.command": "Sélectionnez une commande Docker.", + "loc.input.label.dockerFile": "Fichier Docker", + "loc.input.help.dockerFile": "Chemin du fichier Docker.", + "loc.input.label.arguments": "Arguments", + "loc.input.help.arguments": "Options de commande Docker. Dans le cas de la commande 'tag', vous pouvez spécifier ici des étiquettes supplémentaires pour l'image Docker.", + "loc.input.label.pushMultipleImages": "Envoyer (push) plusieurs images", + "loc.input.help.pushMultipleImages": "Effectuez l'envoi (push) de plusieurs images à l'aide d'un fichier texte contenant les noms des images Docker à envoyer. Chaque nom d'image est contenu sur sa propre ligne.
Exemple :
Nom_image1:étiquette1
Nom_image2:étiquette2
Nom_image3
Si seul le nom d'image est fourni, toutes les étiquettes de l'image conteneur Nom_image3 sont envoyées.", + "loc.input.label.tagMultipleImages": "Étiqueter plusieurs images", + "loc.input.help.tagMultipleImages": "Étiquetez plusieurs images à l'aide d'un fichier texte contenant les noms des images Docker à étiqueter. Chaque nom d'image est contenu sur sa propre ligne.
Exemple :
Nom_image1:étiquette1
Nom_image2:étiquette2
Nom_image3
Si seul le nom d'image est fourni, l'image porte l'étiquette 'latest'.", + "loc.input.label.imageName": "Nom d'image", + "loc.input.help.imageName": "Nom de l'image Docker à générer, envoyer (push) ou exécuter.", + "loc.input.label.imageNamesPath": "Chemin des noms d'images", + "loc.input.help.imageNamesPath": "Chemin d'un fichier texte contenant les noms des images Docker à étiqueter ou à envoyer (push). Chaque nom d'image se trouve sur sa propre ligne.", + "loc.input.label.qualifyImageName": "Qualifier le nom d'image", + "loc.input.help.qualifyImageName": "Qualifiez le nom de l'image à l'aide du nom d'hôte de la connexion de service de registre Docker, sauf indication contraire.", + "loc.input.label.qualifySourceImageName": "Qualifier le nom de l'image source", + "loc.input.help.qualifySourceImageName": "Qualifiez le nom de l'image source à l'aide du nom d'hôte de la connexion de service de registre Docker, sauf indication contraire.", + "loc.input.label.includeSourceTags": "Inclure les étiquettes sources", + "loc.input.help.includeSourceTags": "Incluez les étiquettes Git durant la génération ou le Push de l'image Docker.", + "loc.input.label.includeLatestTag": "Inclure l'étiquette latest", + "loc.input.help.includeLatestTag": "Incluez l'étiquette 'latest' durant la génération de l'image Docker.", + "loc.input.label.addDefaultLabels": "Ajouter des étiquettes par défaut", + "loc.input.help.addDefaultLabels": "Ajoutez des métadonnées CI/CD telles que des informations relatives au dépôt, à la validation, à la build et à la mise en production dans l'image conteneur à l'aide d'étiquettes Docker.", + "loc.input.label.useDefaultContext": "Utiliser le contexte de build par défaut", + "loc.input.help.useDefaultContext": "Définissez le contexte de build en fonction du répertoire qui contient le fichier Docker.", + "loc.input.label.buildContext": "Contexte de build", + "loc.input.help.buildContext": "Chemin du contexte de build.", + "loc.input.label.imageDigestFile": "Fichier de condensat d'image", + "loc.input.help.imageDigestFile": "Chemin d'un fichier créé et rempli à l'aide du condensat de dépôt d'image complet de l'image Docker ayant fait l'objet d'un Push.", + "loc.input.label.containerName": "Nom du conteneur", + "loc.input.help.containerName": "Nom du conteneur Docker à exécuter.", + "loc.input.label.ports": "Ports", + "loc.input.help.ports": "Ports du conteneur Docker à publier sur l'hôte. Spécifiez chaque liaison port d'hôte:port de conteneur sur une nouvelle ligne.", + "loc.input.label.volumes": "Volumes", + "loc.input.help.volumes": "Volumes à monter à partir de l'hôte. Spécifiez chaque liaison répertoire d'hôte:répertoire de conteneur sur une nouvelle ligne.", + "loc.input.label.envVars": "Variables d'environnement", + "loc.input.help.envVars": "Variables d'environnement du conteneur Docker. Spécifiez chaque paire nom=valeur sur une nouvelle ligne.", + "loc.input.label.workingDirectory": "Répertoire de travail", + "loc.input.help.workingDirectory": "Répertoire de travail du conteneur Docker.", + "loc.input.label.entrypointOverride": "Remplacement du point d'entrée", + "loc.input.help.entrypointOverride": "Remplacez le point d'entrée par défaut du conteneur Docker.", + "loc.input.label.containerCommand": "Commande de conteneur", + "loc.input.help.containerCommand": "La commande docker run crée d'abord une couche conteneur inscriptible sur l'image spécifiée, puis la démarre à l'aide de la commande d'exécution spécifiée. Par exemple, si l'image contient une simple application web Python Flask, vous pouvez spécifier 'python app.py' pour lancer l'application web.", + "loc.input.label.runInBackground": "Exécuter en arrière-plan", + "loc.input.help.runInBackground": "Exécutez le conteneur Docker en arrière-plan.", + "loc.input.label.restartPolicy": "Stratégie de redémarrage", + "loc.input.help.restartPolicy": "Sélectionnez une stratégie de redémarrage.", + "loc.input.label.maxRestartRetries": "Nombre maximal de tentatives de redémarrage", + "loc.input.help.maxRestartRetries": "Nombre maximal de tentatives de redémarrage du démon Docker.", + "loc.input.label.dockerHostEndpoint": "Connexion de service d'hôte Docker", + "loc.input.help.dockerHostEndpoint": "Sélectionnez une connexion de service d'hôte Docker. Par défaut, il s'agit de l'hôte de l'agent.", + "loc.input.label.enforceDockerNamingConvention": "Forcer le nom de l'image à suivre la convention de nommage Docker", + "loc.input.help.enforceDockerNamingConvention": "Si l'option est activée, le nom de l'image Docker est modifié conformément à la convention de nommage Docker. Convertit les majuscules en minuscules, et supprime les espaces dans le nom de l'image.", + "loc.input.label.memoryLimit": "Limite de mémoire", + "loc.input.help.memoryLimit": "Quantité maximale de mémoire disponible pour le conteneur sous la forme d'un entier avec des suffixes facultatifs, par exemple '2 Go'.", + "loc.messages.ConnectingToDockerHost": "La variable DOCKER_HOST est définie. Docker va tenter de se connecter à l'hôte Docker : %s", + "loc.messages.ContainerPatternFound": "Modèle trouvé dans le paramètre filepath Docker", + "loc.messages.ContainerPatternNotFound": "Modèle introuvable dans le paramètre filepath Docker", + "loc.messages.ContainerDockerFileNotFound": "Le fichier Docker correspondant à %s est introuvable.", + "loc.messages.DockerHostVariableWarning": "La variable DOCKER_HOST est définie. Vérifiez que le démon Docker s'exécute sur %s", + "loc.messages.NoImagesInImageNamesFile": "Au moins un nom d'image est attendu dans le fichier '%s'.", + "loc.messages.CantWriteDataToFile": "Impossible d'écrire des données dans le fichier %s. Erreur : %s", + "loc.messages.NoDataWrittenOnFile": "Aucune donnée n'a été écrite dans le fichier %s", + "loc.messages.FileContentSynced": "Synchronisation effectuée du contenu du fichier sur le disque. Le contenu est %s.", + "loc.messages.DockerRegistryNotFound": "Connexion de service de registre Docker non spécifiée.", + "loc.messages.OutputVariableDataSizeExceeded": "La variable de sortie non définie en tant que sortie de la commande Docker a dépassé la longueur maximale prise en charge. Longueur de sortie : %s. Longueur maximale prise en charge : %s", + "loc.messages.WritingDockerConfigToTempFile": "Écriture de la configuration Docker dans le fichier temporaire. Chemin de fichier : %s. Configuration Docker : %s" +} \ No newline at end of file diff --git a/_generated/DockerV1/Strings/resources.resjson/it-IT/resources.resjson b/_generated/DockerV1/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..ca5be8f4af32 --- /dev/null +++ b/_generated/DockerV1/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,88 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "Consente di compilare, assegnare tag, effettuare il push o eseguire immagini Docker oppure di eseguire un comando di Docker", + "loc.instanceNameFormat": "$(command)", + "loc.releaseNotes": "Per semplificare l'attività:
 - È stata aggiunta un'opzione per selezionare o digitare un comando.
 - Sono stati mantenuti i campi di input utili ed è stata aggiunta un'opzione per passare quelli restanti come argomento del comando.", + "loc.group.displayName.containerRegistry": "Registro Container", + "loc.group.displayName.commands": "Comandi", + "loc.group.displayName.advanced": "Opzioni avanzate", + "loc.input.label.containerregistrytype": "Tipo di registro contenitori", + "loc.input.help.containerregistrytype": "Selezionare 'Registro Azure Container' per connettersi ad esso tramite una connessione al servizio Azure. Selezionare 'Registro contenitori' per connettersi a Docker Hub o a qualsiasi altro registro contenitori privato.", + "loc.input.label.addBaseImageData": "Aggiungere i metadati dell'immagine di base alle immagini", + "loc.input.help.addBaseImageData": "Per impostazione predefinita, i dati dell'immagine di base, come il nome dell'immagine di base e il digest, vengono aggiunti, contribuendo alla tracciabilità. È possibile rifiutare il comportamento predefinito usando questo input.", + "loc.input.label.dockerRegistryEndpoint": "Connessione al servizio Registro Docker", + "loc.input.help.dockerRegistryEndpoint": "Consente di selezionare una connessione al servizio Registro Docker. È obbligatorio per i comandi che devono eseguire l'autenticazione con un registro.", + "loc.input.label.azureSubscriptionEndpoint": "Sottoscrizione di Azure", + "loc.input.help.azureSubscriptionEndpoint": "Consente di selezionare una sottoscrizione di Azure", + "loc.input.label.azureContainerRegistry": "Registro Azure Container", + "loc.input.help.azureContainerRegistry": "Consente di selezionare un Registro Azure Container nella sottoscrizione di Azure selezionata. L'immagine del contenitore verrà creata e ne verrà eseguito il push in questo registro contenitori.", + "loc.input.label.command": "Comando", + "loc.input.help.command": "Consente di selezionare un comando di Docker.", + "loc.input.label.dockerFile": "Dockerfile", + "loc.input.help.dockerFile": "Percorso del Dockerfile.", + "loc.input.label.arguments": "Argomenti", + "loc.input.help.arguments": "Opzioni del comando Docker. Nel caso del comando 'tag', è possibile specificare qui altri tag per l'immagine Docker.", + "loc.input.label.pushMultipleImages": "Esegui il push di più immagini", + "loc.input.help.pushMultipleImages": "Esegue il push di più immagini usando un file di testo che contiene i nomi delle immagini Docker di cui eseguire il push. Ogni nome dell'immagine è contenuta in un'apposita riga.
Ad esempio:
Nome_immagine1:tag1
Nome_immagine2:tag2
Nome_immagine3
Nel caso in cui venga specificato solo il nome dell'immagine, verrà eseguito il push di tutti i tag dell'immagine del contenitore Nome_immagine3.", + "loc.input.label.tagMultipleImages": "Assegna tag a più immagini", + "loc.input.help.tagMultipleImages": "Assegna un tag a più immagini usando un file di testo che contiene i nomi delle immagini Docker a cui assegnare un tag. Ogni nome dell'immagine è contenuta in un'apposita riga.
Ad esempio:
Nome_immagine1:tag1
Nome_immagine2:tag2
Nome_immagine3
Nel caso in cui venga specificato solo il nome dell'immagine, a tale immagine verrà assegnato il tag 'latest'.", + "loc.input.label.imageName": "Nome dell'immagine", + "loc.input.help.imageName": "Nome dell'immagine Docker da compilare, eseguire o di cui effettuare il push.", + "loc.input.label.imageNamesPath": "Percorso dei nomi delle immagini", + "loc.input.help.imageNamesPath": "Percorso di un file di testo che contiene i nomi delle immagini Docker a cui assegnare un tag o di cui effettuare il push. Ogni nome di immagine si trova su una riga distinta.", + "loc.input.label.qualifyImageName": "Qualifica nome dell'immagine", + "loc.input.help.qualifyImageName": "Qualifica il nome dell'immagine con il nome host della connessione al servizio Registro Docker se non viene specificato diversamente.", + "loc.input.label.qualifySourceImageName": "Qualifica nome dell'immagine di origine", + "loc.input.help.qualifySourceImageName": "Qualifica il nome dell'immagine di origine con il nome host della connessione al servizio Registro Docker se non viene specificato diversamente.", + "loc.input.label.includeSourceTags": "Includi tag di origine", + "loc.input.help.includeSourceTags": "Include i tag GIT quando si compila o si effettua il push dell'immagine Docker.", + "loc.input.label.includeLatestTag": "Includi tag latest", + "loc.input.help.includeLatestTag": "Include il tag 'latest' quando si compila l'immagine Docker.", + "loc.input.label.addDefaultLabels": "Aggiungi etichette predefinite", + "loc.input.help.addDefaultLabels": "Consente di aggiungere i metadati di CI/CD, ad esempio le informazioni su repository, commit, compilazione e versione, all'immagine del contenitore usando le etichette Docker.", + "loc.input.label.useDefaultContext": "Usa contesto di compilazione predefinito", + "loc.input.help.useDefaultContext": "Consente di impostare il contesto di compilazione per la directory che contiene il Dockerfile.", + "loc.input.label.buildContext": "Contesto di compilazione", + "loc.input.help.buildContext": "Percorso del contesto di compilazione.", + "loc.input.label.imageDigestFile": "File digest dell'immagine", + "loc.input.help.imageDigestFile": "Percorso di un file che viene creato e popolato con il digest completo del repository delle immagini dell'immagine Docker di cui è stato eseguito il push.", + "loc.input.label.containerName": "Nome del contenitore", + "loc.input.help.containerName": "Nome del contenitore Docker da eseguire.", + "loc.input.label.ports": "Porte", + "loc.input.help.ports": "Porte nel contenitore Docker da pubblicare nell'host. Specificare ogni binding porta-host:porta-contenitore su una nuova riga.", + "loc.input.label.volumes": "Volumi", + "loc.input.help.volumes": "Volumi da montare dall'host. Specificare ogni binding directory-host:directory-contenitore su una nuova riga.", + "loc.input.label.envVars": "Variabili di ambiente", + "loc.input.help.envVars": "Variabili di ambiente per il contenitore Docker. Specificare ogni coppia nome=valore su una nuova riga.", + "loc.input.label.workingDirectory": "Directory di lavoro", + "loc.input.help.workingDirectory": "Directory di lavoro per il contenitore Docker.", + "loc.input.label.entrypointOverride": "Override del punto di ingresso", + "loc.input.help.entrypointOverride": "Esegue l'override del punto di ingresso predefinito per il contenitore Docker.", + "loc.input.label.containerCommand": "Comando contenitore", + "loc.input.help.containerCommand": "Il comando docker run crea prima un livello contenitore scrivibile sull'immagine specificata e quindi inizia a usare il comando run specificato. Se ad esempio l'immagine contiene un'applicazione Web Python Flask semplice, è possibile specificare 'python app.py' per avviarla.", + "loc.input.label.runInBackground": "Esegui in background", + "loc.input.help.runInBackground": "Esegue il contenitore Docker in background.", + "loc.input.label.restartPolicy": "Criteri di riavvio", + "loc.input.help.restartPolicy": "Consente di selezionare un criterio di riavvio.", + "loc.input.label.maxRestartRetries": "Numero massimo di tentativi di riavvio", + "loc.input.help.maxRestartRetries": "Numero massimo di tentativi di riavvio eseguiti dal daemon di Docker.", + "loc.input.label.dockerHostEndpoint": "Connessione al servizio host Docker", + "loc.input.help.dockerHostEndpoint": "Consente di selezionare una connessione al servizio host Docker. Per impostazione predefinita, viene usato l'host dell'agente.", + "loc.input.label.enforceDockerNamingConvention": "Forza il rispetto della convenzione di denominazione di Docker per il nome dell'immagine", + "loc.input.help.enforceDockerNamingConvention": "Se questa opzione è abilitata, il nome dell'immagine Docker verrà modificato in base alla convenzione di denominazione di Docker, secondo la quale i caratteri maiuscoli vengono convertiti in minuscoli e gli spazi presenti nel nome vengono rimossi.", + "loc.input.label.memoryLimit": "Limite di memoria", + "loc.input.help.memoryLimit": "Quantità massima di memoria disponibile per il contenitore sotto forma di numero intero con suffissi facoltativi, come '2GB'.", + "loc.messages.ConnectingToDockerHost": "La variabile DOCKER_HOST è impostata. Docker proverà a connettersi all'host Docker: %s", + "loc.messages.ContainerPatternFound": "Il criterio è stato trovato nel parametro filepath di Docker", + "loc.messages.ContainerPatternNotFound": "Non è stato trovato alcun criterio nel parametro filepath di Docker", + "loc.messages.ContainerDockerFileNotFound": "Non è stato trovato alcun Dockerfile corrispondente a %s.", + "loc.messages.DockerHostVariableWarning": "La variabile DOCKER_HOST è impostata. Assicurarsi che il daemon Docker sia in esecuzione in: %s", + "loc.messages.NoImagesInImageNamesFile": "Il file '%s' deve contenere almeno un nome di immagine.", + "loc.messages.CantWriteDataToFile": "Non è possibile scrivere dati nel file %s. Errore: %s", + "loc.messages.NoDataWrittenOnFile": "Non sono stati scritti dati nel file %s", + "loc.messages.FileContentSynced": "Il contenuto del file è stato sincronizzato con il disco. Il contenuto è %s.", + "loc.messages.DockerRegistryNotFound": "La connessione al servizio Registro Docker non è stata specificata.", + "loc.messages.OutputVariableDataSizeExceeded": "La variabile di output non impostata come output del comando Docker supera la lunghezza massima supportata. Lunghezza dell'output: %s. Lunghezza massima supportata: %s", + "loc.messages.WritingDockerConfigToTempFile": "Scrittura della configurazione di Docker nel file temporaneo. Percorso del file: %s. Configurazione di Docker: %s" +} \ No newline at end of file diff --git a/_generated/DockerV1/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/DockerV1/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..97488ca9f089 --- /dev/null +++ b/_generated/DockerV1/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,88 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "Docker イメージをビルド、タグ付け、プッシュ、実行するか、Docker コマンドを実行します", + "loc.instanceNameFormat": "$(コマンド)", + "loc.releaseNotes": "次により、タスクを簡略化しました。
/> - コマンドの選択または入力を簡略化するオプションを提供します。
/>  - 有用な入力フィールドを保持し、残りを引数としてコマンドに渡すオプションを提供します。", + "loc.group.displayName.containerRegistry": "コンテナー レジストリ", + "loc.group.displayName.commands": "コマンド", + "loc.group.displayName.advanced": "詳細設定のオプション", + "loc.input.label.containerregistrytype": "コンテナー レジストリの種類", + "loc.input.help.containerregistrytype": "Azure サービス接続を使用して接続するには、'Azure コンテナー レジストリ' を選択します。Docker Hub またはその他のプライベート コンテナー レジストリに接続するには、'コンテナー レジストリ' を選択します。", + "loc.input.label.addBaseImageData": "画像にベース イメージのメタデータを追加します", + "loc.input.help.addBaseImageData": "既定では、ベース イメージ名やダイジェストなどのベース イメージ データが追加されます。これは追跡可能性に貢献します。この入力を使用して、この既定の動作をオプトアウトできます。", + "loc.input.label.dockerRegistryEndpoint": "Docker レジストリ サービス接続", + "loc.input.help.dockerRegistryEndpoint": "Docker レジストリ サービス接続を選択します。レジストリを使って認証する必要のあるコマンドの場合に必要です。", + "loc.input.label.azureSubscriptionEndpoint": "Azure サブスクリプション", + "loc.input.help.azureSubscriptionEndpoint": "Azure サブスクリプションを選択します", + "loc.input.label.azureContainerRegistry": "Azure Container Registry", + "loc.input.help.azureContainerRegistry": "選択した Azure サブスクリプションの Azure コンテナー レジストリを選択します。作成されたコンテナーのイメージは、このコンテナー レジストリにプッシュされます。", + "loc.input.label.command": "コマンド", + "loc.input.help.command": "Docker コマンドを選択します。", + "loc.input.label.dockerFile": "Dockerfile", + "loc.input.help.dockerFile": "Dockerfile へのパスです。", + "loc.input.label.arguments": "引数", + "loc.input.help.arguments": "Docker コマンド オプション。'tag' コマンドの場合、Docker イメージの追加のタグをここで指定できます。", + "loc.input.label.pushMultipleImages": "複数のイメージをプッシュする", + "loc.input.help.pushMultipleImages": "プッシュする Docker イメージの名前を含むテキスト ファイルを使用して複数のイメージをプッシュします。各イメージ名は、それぞれの行に含まれています。
例:
Imagename1:tag1
Imagename2:tag2
Imagename3
イメージ名だけが指定された場合、ImageName3 コンテナー イメージのすべてのタグがプッシュされます。", + "loc.input.label.tagMultipleImages": "複数のイメージをタグ付けする", + "loc.input.help.tagMultipleImages": "タグ付けする Docker イメージの名前を含むテキスト ファイルを使用して、複数のイメージにタグ付けします。各イメージ名はそれぞれの行に含まれています。
例:
Imagename1:tag1
Imagename2:tag2
Imagename3
イメージ名だけが指定された場合、そのイメージには '最新' とタグ付けされます。", + "loc.input.label.imageName": "イメージ名", + "loc.input.help.imageName": "ビルド、プッシュ、実行する Docker イメージの名前。", + "loc.input.label.imageNamesPath": "イメージ名のパス", + "loc.input.help.imageNamesPath": "タグ付けまたはプッシュする Docker イメージの名前が記載されたテキスト ファイルへのパス。各行に 1 つずつイメージ名が記載されます。", + "loc.input.label.qualifyImageName": "イメージ名を修飾", + "loc.input.help.qualifyImageName": "イメージ名を Docker レジストリ サービス接続のホスト名で修飾します (特に指定されていない場合)。", + "loc.input.label.qualifySourceImageName": "ソース イメージ名を修飾する", + "loc.input.help.qualifySourceImageName": "ソース イメージ名を Docker レジストリ サービス接続のホスト名で修飾します (特に指定されていない場合)。", + "loc.input.label.includeSourceTags": "ソース タグを含める", + "loc.input.help.includeSourceTags": "Docker イメージをビルドまたはプッシュするときに、Git タグを組み込みます。", + "loc.input.label.includeLatestTag": "最終のタグを含める", + "loc.input.help.includeLatestTag": "Docker イメージをビルドするときに、'latest' タグを組み込みます。", + "loc.input.label.addDefaultLabels": "既定のラベルを追加", + "loc.input.help.addDefaultLabels": "Docker ラベルを使用して、リポジトリ、コミット、ビルド、リリースの情報などの CI/CD メタデータをコンテナー イメージに追加します。", + "loc.input.label.useDefaultContext": "既定のビルド コンテキストを使用する", + "loc.input.help.useDefaultContext": "ビルド コンテキストを、Dockerfile が入っているディレクトリに設定します。", + "loc.input.label.buildContext": "ビルド コンテキスト", + "loc.input.help.buildContext": "ビルド コンテキストへのパスです。", + "loc.input.label.imageDigestFile": "イメージのダイジェスト ファイル", + "loc.input.help.imageDigestFile": "プッシュされた Docker イメージの完全なイメージ リポジトリ ダイジェストを使って作成、入力されたファイルへのパスです。", + "loc.input.label.containerName": "コンテナー名", + "loc.input.help.containerName": "実行する Docker コンテナーの名前です。", + "loc.input.label.ports": "ポート", + "loc.input.help.ports": "ホストに発行する Docker コンテナーのポートです。ホスト ポート:コンテナー ポートのバインドを新しい行ごとに指定します。", + "loc.input.label.volumes": "ボリューム", + "loc.input.help.volumes": "ホストからマウントするボリュームです。ホスト ディレクトリ:コンテナー ディレクトリを新しい行ごとに指定します。", + "loc.input.label.envVars": "環境変数", + "loc.input.help.envVars": "Docker コンテナーの環境変数です。名前=値のペアを新しい行ごとに指定します。", + "loc.input.label.workingDirectory": "作業ディレクトリ", + "loc.input.help.workingDirectory": "Docker コンテナーの作業ディレクトリです。", + "loc.input.label.entrypointOverride": "エントリ ポイントのオーバーライド", + "loc.input.help.entrypointOverride": "Docker コンテナーの既定のエントリ ポイントをオーバーライドします。", + "loc.input.label.containerCommand": "コンテナー コマンド", + "loc.input.help.containerCommand": "docker run コマンドは、まず指定されたイメージの上に書き込み可能なコンテナー レイヤーを作成した後、指定された run コマンドを使用してそのコンテナー レイヤーを開始します。たとえば、イメージにシンプルな Python Flask Web アプリケーションが含まれている場合は、'python app.py' を指定すると、その Web アプリケーションを起動できます。", + "loc.input.label.runInBackground": "バックグラウンドで実行", + "loc.input.help.runInBackground": "バックグラウンドで Docker コンテナーを実行します。", + "loc.input.label.restartPolicy": "再起動ポリシー", + "loc.input.help.restartPolicy": "再起動ポリシーを選択します。", + "loc.input.label.maxRestartRetries": "再起動の最大試行回数", + "loc.input.help.maxRestartRetries": "Docker デーモンが再起動を試行する最大回数です。", + "loc.input.label.dockerHostEndpoint": "Docker ホスト サービス接続", + "loc.input.help.dockerHostEndpoint": "Docker ホスト サービス接続を選択します。既定では、エージェントのホストになります。", + "loc.input.label.enforceDockerNamingConvention": "イメージ名に Docker 命名規則を守らせる", + "loc.input.help.enforceDockerNamingConvention": "有効の場合は Docker 命名規則に従って Docker イメージ名が変更されます。大文字が小文字に変換され、イメージ名内のスペースが削除されます。", + "loc.input.label.memoryLimit": "メモリの制限", + "loc.input.help.memoryLimit": "コンテナーで利用できる最大メモリ容量。'2GB' のような省略可能なサフィックスを含めた整数。", + "loc.messages.ConnectingToDockerHost": "DOCKER_HOST 変数が設定されています。Docker により、Docker ホスト %s への接続が試みられます", + "loc.messages.ContainerPatternFound": "Docker filepath パラメーターにパターンが見つかりました", + "loc.messages.ContainerPatternNotFound": "Docker filepath パラメーターにパターンが見つかりませんでした", + "loc.messages.ContainerDockerFileNotFound": "%s に一致する Dockerfile は見つかりませんでした。", + "loc.messages.DockerHostVariableWarning": "DOCKER_HOST 変数が設定されています。Docker デーモンが %s で実行されていることをご確認ください", + "loc.messages.NoImagesInImageNamesFile": "ファイル '%s' には少なくとも 1 つのイメージ名が必要です。", + "loc.messages.CantWriteDataToFile": "ファイル %s にデータを書き込めません。エラー: %s", + "loc.messages.NoDataWrittenOnFile": "ファイル %s にデータが書き込まれませんでした", + "loc.messages.FileContentSynced": "ファイルの内容がディスクに同期されました。内容は %s です。", + "loc.messages.DockerRegistryNotFound": "Docker レジストリ サービス接続が指定されていません。", + "loc.messages.OutputVariableDataSizeExceeded": "Docker コマンドの出力がサポートされている最大長を超えたため、出力変数が設定されませんでした。出力の長さ: %s、サポートされている最大長: %s", + "loc.messages.WritingDockerConfigToTempFile": "Docker 構成を一時ファイルに書き込んでいます。ファイル パス: %s、Docker 構成: %s" +} \ No newline at end of file diff --git a/_generated/DockerV1/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/DockerV1/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..cfa2df4a377d --- /dev/null +++ b/_generated/DockerV1/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,88 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "Docker 이미지를 빌드, 태그 지정, 푸시 또는 실행하거나 Docker 명령을 실행합니다.", + "loc.instanceNameFormat": "$(command)", + "loc.releaseNotes": "다음을 수행하여 작업을 간소화했습니다.
 - 명령을 선택하거나 입력하는 옵션 제공
 - 유용한 입력 필드를 유지하고 나머지 부분은 인수로 명령에 전달하는 옵션 제공", + "loc.group.displayName.containerRegistry": "Container Registry", + "loc.group.displayName.commands": "명령", + "loc.group.displayName.advanced": "고급 옵션", + "loc.input.label.containerregistrytype": "컨테이너 레지스트리 유형", + "loc.input.help.containerregistrytype": "Azure 서비스 연결을 사용하여 연결하려면 'Azure Container Registry'를 선택합니다. Docker Hub나 기타 프라이빗 컨테이너 레지스트리에 연결하려면 '컨테이너 레지스트리'를 선택합니다.", + "loc.input.label.addBaseImageData": "이미지에 기본 이미지 메타데이터 추가", + "loc.input.help.addBaseImageData": "기본적으로 기본 이미지 이름 및 다이제스트와 같은 기본 이미지 데이터가 추가되어 추적에 도움이 됩니다. 이 입력을 사용하여 이 기본 동작을 해제할 수 있습니다.", + "loc.input.label.dockerRegistryEndpoint": "Docker 레지스트리 서비스 연결", + "loc.input.help.dockerRegistryEndpoint": "Docker 레지스트리 서비스 연결을 선택합니다. 레지스트리를 사용하여 인증해야 하는 명령에 필요합니다.", + "loc.input.label.azureSubscriptionEndpoint": "Azure 구독", + "loc.input.help.azureSubscriptionEndpoint": "Azure 구독을 선택합니다.", + "loc.input.label.azureContainerRegistry": "Azure Container Registry", + "loc.input.help.azureContainerRegistry": "선택한 Azure 구독에서 Azure Container Registry를 선택합니다. 컨테이너 이미지가 빌드되고 이 컨테이너 레지스트리로 푸시됩니다.", + "loc.input.label.command": "명령", + "loc.input.help.command": "Docker 명령을 선택합니다.", + "loc.input.label.dockerFile": "Dockerfile", + "loc.input.help.dockerFile": "Dockerfile의 경로입니다.", + "loc.input.label.arguments": "인수", + "loc.input.help.arguments": "Docker 명령 옵션입니다. 'tag' 명령의 경우 여기서 Docker 이미지에 대한 추가 태그를 지정할 수 있습니다.", + "loc.input.label.pushMultipleImages": "여러 이미지 푸시", + "loc.input.help.pushMultipleImages": "Docker 이미지의 이름이 들어 있는 텍스트 파일을 통해 푸시하여 여러 이미지를 푸시합니다. 각 이미지 이름이 새 줄에 포함됩니다.
예:
Imagename1:tag1
Imagename2:tag2
Imagename3
이미지 이름만 제공하면 ImageName3 컨테이너 이미지의 모든 태그가 푸시됩니다.", + "loc.input.label.tagMultipleImages": "여러 이미지에 태그 지정", + "loc.input.help.tagMultipleImages": "Docker 이미지의 이름이 들어 있는 텍스트 파일을 통해 태그를 지정하여 여러 이미지에 태그를 지정합니다. 각 이미지 이름이 새 줄에 포함됩니다.
예:
Imagename1:tag1
Imagename2:tag2
Imagename3
이미지 이름만 제공하면 해당 이미지에 '최신'으로 태그가 지정됩니다.", + "loc.input.label.imageName": "이미지 이름", + "loc.input.help.imageName": "빌드, 푸시 또는 실행할 Docker 이미지의 이름입니다.", + "loc.input.label.imageNamesPath": "이미지 이름 경로", + "loc.input.help.imageNamesPath": "태그 또는 푸시할 Docker 이미지의 이름이 포함된 텍스트 파일의 경로입니다. 각 이미지 이름이 새 줄에 포함되어 있습니다.", + "loc.input.label.qualifyImageName": "이미지 이름 한정", + "loc.input.help.qualifyImageName": "달리 지정되지 않은 경우 Docker 레지스트리 서비스 연결의 호스트 이름으로 이미지 이름을 한정합니다.", + "loc.input.label.qualifySourceImageName": "소스 이미지 이름 한정", + "loc.input.help.qualifySourceImageName": "달리 지정되지 않은 경우 Docker 레지스트리 서비스 연결의 호스트 이름으로 소스 이미지 이름을 한정합니다.", + "loc.input.label.includeSourceTags": "소스 태그 포함", + "loc.input.help.includeSourceTags": "Docker 이미지를 빌드하거나 푸시할 때 Git 태그를 포함합니다.", + "loc.input.label.includeLatestTag": "최신 태그 포함", + "loc.input.help.includeLatestTag": "Docker 이미지를 빌드할 때 '최신' 태그를 포함합니다.", + "loc.input.label.addDefaultLabels": "기본 레이블 추가", + "loc.input.help.addDefaultLabels": "Docker 레이블을 사용하여 컨테이너 이미지에 리포지토리, 커밋, 빌드 및 릴리스 정보와 같은 CI/CD 메타데이터를 추가합니다.", + "loc.input.label.useDefaultContext": "기본 빌드 컨텍스트 사용", + "loc.input.help.useDefaultContext": "빌드 컨텍스트를 Dockerfile이 포함된 디렉터리로 설정합니다.", + "loc.input.label.buildContext": "빌드 컨텍스트", + "loc.input.help.buildContext": "빌드 컨텍스트의 경로입니다.", + "loc.input.label.imageDigestFile": "이미지 다이제스트 파일", + "loc.input.help.imageDigestFile": "푸시된 Docker 이미지의 전체 이미지 리포지토리 다이제스트로 채워져 만들어진 파일에 대한 경로입니다.", + "loc.input.label.containerName": "컨테이너 이름", + "loc.input.help.containerName": "실행할 Docker 컨테이너의 이름입니다.", + "loc.input.label.ports": "포트", + "loc.input.help.ports": "호스트로 게시할 Docker 컨테이너의 포트입니다. 새 줄에 각 host-port:container-port 바인딩을 지정하세요.", + "loc.input.label.volumes": "볼륨", + "loc.input.help.volumes": "호스트에서 탑재된 볼륨입니다. 새 줄에 각 host-dir:container-dir를 지정하세요.", + "loc.input.label.envVars": "환경 변수", + "loc.input.help.envVars": "Docker 컨테이너에 대한 환경 변수입니다. 새 줄에서 각 이름=값 쌍을 지정하세요.", + "loc.input.label.workingDirectory": "작업 디렉터리", + "loc.input.help.workingDirectory": "Docker 컨테이너에 대한 작업 디렉터리입니다.", + "loc.input.label.entrypointOverride": "진입점 재정의", + "loc.input.help.entrypointOverride": "Docker 컨테이너에 대한 기본 진입점을 재정의합니다.", + "loc.input.label.containerCommand": "컨테이너 명령", + "loc.input.help.containerCommand": "docker run 명령은 먼저 지정된 이미지 위에 쓰기 가능한 컨테이너 계층을 만든 다음, 지정된 run 명령을 사용하여 컨테이너 계층을 시작합니다. 예를 들어 이미지에 간단한 Python Flask 웹 애플리케이션이 포함된 경우 'python app.py'를 지정하여 웹 애플리케이션을 시작할 수 있습니다.", + "loc.input.label.runInBackground": "백그라운드에서 실행", + "loc.input.help.runInBackground": "Docker 컨테이너를 백그라운드에서 실행합니다.", + "loc.input.label.restartPolicy": "다시 시작 정책", + "loc.input.help.restartPolicy": "재시작 정책을 선택합니다.", + "loc.input.label.maxRestartRetries": "최대 다시 시작 시도 횟수", + "loc.input.help.maxRestartRetries": "다시 시작 시 Docker 디먼 시도를 재시도하는 최대 횟수입니다.", + "loc.input.label.dockerHostEndpoint": "Docker 호스트 서비스 연결", + "loc.input.help.dockerHostEndpoint": "Docker 호스트 서비스 연결을 선택합니다. 기본값은 에이전트의 호스트로 지정됩니다.", + "loc.input.label.enforceDockerNamingConvention": "Docker 명명 규칙을 따르도록 이미지 이름 강제 적용", + "loc.input.help.enforceDockerNamingConvention": "사용하도록 설정하면, Docker 이미지 이름이 Docker 명명 규칙을 따르도록 수정됩니다. 이미지 이름에서 대문자를 소문자로 변환하고 공백을 제거합니다.", + "loc.input.label.memoryLimit": "메모리 한도", + "loc.input.help.memoryLimit": "정수와 '2GB' 같은 선택적 접미사로 입력하는 컨테이너에 사용 가능한 최대 메모리양입니다.", + "loc.messages.ConnectingToDockerHost": "DOCKER_HOST 변수가 설정되었습니다. Docker는 Docker 호스트 %s에 연결하려고 합니다.", + "loc.messages.ContainerPatternFound": "Docker filepath 매개 변수에 패턴이 있습니다.", + "loc.messages.ContainerPatternNotFound": "Docker filepath 매개 변수에 패턴이 없습니다.", + "loc.messages.ContainerDockerFileNotFound": "%s과(와) 일치하는 Dockerfile이 없습니다.", + "loc.messages.DockerHostVariableWarning": "DOCKER_HOST 변수가 설정되었습니다. Docker 디먼 %s이(가) 실행 중인지 확인하세요.", + "loc.messages.NoImagesInImageNamesFile": "'%s' 파일에 이미지 이름이 하나 이상 있어야 합니다.", + "loc.messages.CantWriteDataToFile": "데이터를 %s 파일에 쓸 수 없습니다. 오류: %s", + "loc.messages.NoDataWrittenOnFile": "데이터를 %s 파일에 쓰지 않았습니다.", + "loc.messages.FileContentSynced": "파일 콘텐츠를 디스크에 동기화했습니다. 콘텐츠는 %s입니다.", + "loc.messages.DockerRegistryNotFound": "Docker 레지스트리 서비스 연결을 지정하지 않았습니다.", + "loc.messages.OutputVariableDataSizeExceeded": "Docker 명령 출력으로 설정되지 않은 출력 변수가 지원되는 최대 길이를 초과했습니다. 출력 길이: %s, 지원되는 최대 길이: %s", + "loc.messages.WritingDockerConfigToTempFile": "임시 파일에 Docker 구성을 쓰는 중입니다. 파일 경로: %s, Docker 구성: %s" +} \ No newline at end of file diff --git a/_generated/DockerV1/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/DockerV1/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..9d0caf6ff2e1 --- /dev/null +++ b/_generated/DockerV1/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,88 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "Создание, пометка, отправка или запуск образов Docker или выполнение команды Docker", + "loc.instanceNameFormat": "$(command)", + "loc.releaseNotes": "Задача упрощена следующим образом:
 - Предоставлена возможность выбора или ввода команды.
 - Оставлены полезные поля ввода, и предоставлена возможность передачи остальных полей в команду в качестве аргумента.", + "loc.group.displayName.containerRegistry": "Реестр контейнеров", + "loc.group.displayName.commands": "Команды", + "loc.group.displayName.advanced": "Дополнительные параметры", + "loc.input.label.containerregistrytype": "Тип реестра контейнеров", + "loc.input.help.containerregistrytype": "Выберите \"Реестр контейнеров Azure\", чтобы подключиться к нему с помощью подключения к службе Azure. Выберите \"Реестр контейнеров\", чтобы подключиться к Docker Hub или любому другому частному реестру контейнеров.", + "loc.input.label.addBaseImageData": "Добавление базовых метаданных образа в образы", + "loc.input.help.addBaseImageData": "По умолчанию добавляются данные базового образа, например имя базового образа и дайджест, что улучшает возможности трассировки. Вы можете отказаться от этого поведения по умолчанию, используя эти входные данные.", + "loc.input.label.dockerRegistryEndpoint": "Подключение к службе реестра Docker", + "loc.input.help.dockerRegistryEndpoint": "Выберите подключение к службе реестра Docker. Это требуется для команд, для выполнения которых необходимо пройти проверку подлинности в реестре.", + "loc.input.label.azureSubscriptionEndpoint": "Подписка Azure", + "loc.input.help.azureSubscriptionEndpoint": "Выберите подписку Azure", + "loc.input.label.azureContainerRegistry": "Реестр контейнеров Azure", + "loc.input.help.azureContainerRegistry": "Выберите реестр контейнеров Azure в выбранной подписке Azure. Образ контейнера будет собран и отправлен в этот реестр контейнеров.", + "loc.input.label.command": "Команда", + "loc.input.help.command": "Выберите команду Docker.", + "loc.input.label.dockerFile": "Dockerfile", + "loc.input.help.dockerFile": "Путь к Dockerfile.", + "loc.input.label.arguments": "Аргументы", + "loc.input.help.arguments": "Параметры команды Docker. В случае команды \"tag\" здесь можно указать дополнительные теги для образа Docker.", + "loc.input.label.pushMultipleImages": "Отправить несколько образов", + "loc.input.help.pushMultipleImages": "Отправьте несколько образов посредством текстового файла, содержащего имена образов Docker, которые необходимо отправить. Каждое имя образа указывается в отдельной строке.
Пример:
Imagename1:tag1
Imagename2:tag2
Imagename3
Если указано только имя образа, отправляются все теги образа контейнера ImageName3.", + "loc.input.label.tagMultipleImages": "Добавить теги к нескольким образам", + "loc.input.help.tagMultipleImages": "Добавьте теги к нескольким образам посредством текстового файла, содержащего имена образов Docker, к которым необходимо добавить теги. Каждое имя образа указывается в отдельной строке.
Пример:
Imagename1:tag1
Imagename2:tag2
Imagename3
Если указано только имя образа, к образу добавляется тег latest.", + "loc.input.label.imageName": "Имя образа", + "loc.input.help.imageName": "Имя образа Docker для сборки, отправки или выполнения.", + "loc.input.label.imageNamesPath": "Путь к именам образов", + "loc.input.help.imageNamesPath": "Путь к текстовому файлу, содержащему имена образов Docker для публикации или добавления меток. Каждое имя указывается на отдельной строке.", + "loc.input.label.qualifyImageName": "Определить имя образа", + "loc.input.help.qualifyImageName": "Определите имя образа с помощью имени узла подключения к службе реестра Docker, если не указано иное.", + "loc.input.label.qualifySourceImageName": "Определить имя исходного образа", + "loc.input.help.qualifySourceImageName": "Определите имя исходного образа с помощью имени узла подключения к службе реестра Docker, если не указано иное.", + "loc.input.label.includeSourceTags": "Включить исходные теги", + "loc.input.help.includeSourceTags": "При создании или отправке образа Docker следует включить теги Git.", + "loc.input.label.includeLatestTag": "Включить тег latest", + "loc.input.help.includeLatestTag": "При сборке образа Docker следует включить тег latest.", + "loc.input.label.addDefaultLabels": "Добавить метки по умолчанию", + "loc.input.help.addDefaultLabels": "Добавьте метаданные непрерывной интеграции и непрерывного развертывания, такие как сведения о репозитории, фиксации, сборке и выпуске, в образ контейнера с помощью меток Docker.", + "loc.input.label.useDefaultContext": "Использовать контекст сборки по умолчанию", + "loc.input.help.useDefaultContext": "Задайте контекст сборки для каталога, в котором находится Dockerfile.", + "loc.input.label.buildContext": "Контекст сборки", + "loc.input.help.buildContext": "Путь к контексту сборки.", + "loc.input.label.imageDigestFile": "Файл дайджеста образа", + "loc.input.help.imageDigestFile": "Путь к созданному файлу, в который внесен весь дайджест репозитория отправленного образа Docker.", + "loc.input.label.containerName": "Имя контейнера", + "loc.input.help.containerName": "Имя контейнера Docker для выполнения.", + "loc.input.label.ports": "Порты", + "loc.input.help.ports": "Порты в контейнере Docker для публикации на узле. Каждую привязку \"порт узла:порт контейнера\" следует указывать в новой строке.", + "loc.input.label.volumes": "Тома", + "loc.input.help.volumes": "Тома для подключения с узла. Каждый параметр \"host-dir:container-dir\" следует указывать в новой строке.", + "loc.input.label.envVars": "Переменные среды", + "loc.input.help.envVars": "Переменные среды для контейнера Docker. Каждую пару \"имя=значение\" следует указывать в новой строке.", + "loc.input.label.workingDirectory": "Рабочий каталог", + "loc.input.help.workingDirectory": "Рабочий каталог для контейнера Docker.", + "loc.input.label.entrypointOverride": "Переопределение точки входа", + "loc.input.help.entrypointOverride": "Переопределите точку входа по умолчанию для контейнера Docker.", + "loc.input.label.containerCommand": "Команда контейнера", + "loc.input.help.containerCommand": "Команда docker run сначала создает доступный для записи слой контейнера поверх заданного образа, а затем запускает его с помощью указанной команды run. Например, если образ содержит простое веб-приложение Python Flask, для запуска этого приложения можно указать \"python app.py\".", + "loc.input.label.runInBackground": "Запустить в фоновом режиме", + "loc.input.help.runInBackground": "Запуск контейнера Docker в фоновом режиме.", + "loc.input.label.restartPolicy": "Политика перезапуска", + "loc.input.help.restartPolicy": "Выберите политику перезапуска.", + "loc.input.label.maxRestartRetries": "Максимальное количество попыток перезапуска", + "loc.input.help.maxRestartRetries": "Максимальное количество попыток перезапуска управляющей программы Docker.", + "loc.input.label.dockerHostEndpoint": "Подключение к службе узла Docker", + "loc.input.help.dockerHostEndpoint": "Выберите подключение к службе узла Docker. По умолчанию используется узел агента.", + "loc.input.label.enforceDockerNamingConvention": "Принудительно использовать соглашение об именовании Docker в имени образа", + "loc.input.help.enforceDockerNamingConvention": "Если этот параметр установлен, имя образа будет изменено в соответствии с соглашением об именовании Docker. Прописные буквы будут преобразованы в строчные, а пробелы в имени образа будут удалены.", + "loc.input.label.memoryLimit": "Предельный объем памяти", + "loc.input.help.memoryLimit": "Максимальный объем памяти, доступный контейнеру, в виде целого числа с необязательными суффиксами, например \"2GB\".", + "loc.messages.ConnectingToDockerHost": "Задана переменная DOCKER_HOST. Docker попытается подключиться к узлу Docker: %s", + "loc.messages.ContainerPatternFound": "Обнаружен шаблон в параметре filepath в Docker", + "loc.messages.ContainerPatternNotFound": "Не найден шаблон в параметре filepath в Docker", + "loc.messages.ContainerDockerFileNotFound": "Dockerfile, соответствующий %s, не найден.", + "loc.messages.DockerHostVariableWarning": "Задана переменная DOCKER_HOST. Убедитесь, что управляющая программа Docker запущена на: %s", + "loc.messages.NoImagesInImageNamesFile": "В файле \"%s\" должно быть указано по меньшей мере одно имя образа.", + "loc.messages.CantWriteDataToFile": "Не удается записать данные в файл %s. Ошибка: %s", + "loc.messages.NoDataWrittenOnFile": "Данные не были записаны в файл %s", + "loc.messages.FileContentSynced": "Содержимое файла синхронизировано с диском. Содержимое: %s.", + "loc.messages.DockerRegistryNotFound": "Подключение к службе реестра Docker не указано.", + "loc.messages.OutputVariableDataSizeExceeded": "Выходная переменная не задана, так как для выходных данных команды Docker превышена максимально поддерживаемая длина. Длина выходных данных: %s, максимально поддерживаемая длина: %s", + "loc.messages.WritingDockerConfigToTempFile": "Запись конфигурации Docker во временный файл. Путь к файлу: %s, конфигурация Docker: %s" +} \ No newline at end of file diff --git a/_generated/DockerV1/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/DockerV1/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..4810ca0aac6e --- /dev/null +++ b/_generated/DockerV1/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,88 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "生成、标记、推送或运行 Docker 映像,或者运行 Docker 命令", + "loc.instanceNameFormat": "$(command)", + "loc.releaseNotes": "通过以下方式简化任务:
 - 提供用于简单选择或键入命令的选项。
 - 保留有用的输入字段并提供将其余部分作为参数传递给命令的选项。", + "loc.group.displayName.containerRegistry": "容器注册表", + "loc.group.displayName.commands": "命令", + "loc.group.displayName.advanced": "高级选项", + "loc.input.label.containerregistrytype": "容器注册表类型", + "loc.input.help.containerregistrytype": "选择“Azure 容器注册表”,可使用 Azure 服务连接来连接它。选择“容器注册表”可连接到 Docker Hub 或任何其他私有容器注册表。", + "loc.input.label.addBaseImageData": "将基本映像元数据添加到映像", + "loc.input.help.addBaseImageData": "默认情况下,将添加基本映像数据(如基本映像名称和摘要),这有助于提升可跟踪性。可以使用此输入选择退出此默认行为。", + "loc.input.label.dockerRegistryEndpoint": "Docker 注册表服务连接", + "loc.input.help.dockerRegistryEndpoint": "选择 Docker 注册表服务连接。这对于需要执行注册表身份验证的命令是必需的。", + "loc.input.label.azureSubscriptionEndpoint": "Azure 订阅", + "loc.input.help.azureSubscriptionEndpoint": "选择 Azure 订阅", + "loc.input.label.azureContainerRegistry": "Azure 容器注册表", + "loc.input.help.azureContainerRegistry": "docker 运行命令首先在指定的映像上创建一个可写容器层,然后使用指定的运行命令启动它。例如,如果映像包含一个简单的 Python Flask Web 应用程序,则可以指定 \"python app.py\" 来启动 Web 应用程序。", + "loc.input.label.command": "命令", + "loc.input.help.command": "选择 Docker 命令。", + "loc.input.label.dockerFile": "Dockerfile", + "loc.input.help.dockerFile": "Dockerfile 路径。", + "loc.input.label.arguments": "参数", + "loc.input.help.arguments": "Docker 命令选项。如果是“标记”命令,可在此处为 Docker 映像指定其他标记。", + "loc.input.label.pushMultipleImages": "推送多个映像", + "loc.input.help.pushMultipleImages": "使用包含要推送的 Docker 映像名称的文本文件来推送多个映像。每个映像名称都包含在自己的行中。
例如:
Imagename1:tag1
Imagename2:tag2
Imagename3
如果仅提供映像名称,将推送 ImageName3 容器映像的所有标记。", + "loc.input.label.tagMultipleImages": "标记多个映像", + "loc.input.help.tagMultipleImages": "使用包含要标记的 Docker 映像名称的文本文件标记多个映像。每个映像名称都包含在自己的行中。
例如:
Imagename1:tag1
Imagename2:tag2
Imagename3
如果仅提供映像名称,该映像将被标记为 \"latest\"。", + "loc.input.label.imageName": "映像名", + "loc.input.help.imageName": "要生成、推送或运行的 Docker 映像的名称。", + "loc.input.label.imageNamesPath": "映像名称路径", + "loc.input.help.imageNamesPath": "文本文件路径,该文件中包含 tag 或 push 的 Docker 映像名称。每个映像名称包含在其自己的行上。", + "loc.input.label.qualifyImageName": "指定映像名", + "loc.input.help.qualifyImageName": "如果没有另行指定,请使用 Docker 注册表服务连接的主机名限定映像名称。", + "loc.input.label.qualifySourceImageName": "指定源映像名称", + "loc.input.help.qualifySourceImageName": "如果没有另行指定,请使用 Docker 注册表服务连接的主机名限定源映像名称。", + "loc.input.label.includeSourceTags": "包括源标记", + "loc.input.help.includeSourceTags": "生成或推送 Docker 映像时包括 Git 标记。", + "loc.input.label.includeLatestTag": "包括最新的标记", + "loc.input.help.includeLatestTag": "生成 Docker 映像时包含 \"latest\" 标记。", + "loc.input.label.addDefaultLabels": "添加默认标签", + "loc.input.help.addDefaultLabels": "使用 Docker 标签将 CI/CD 元数据(如存储库、提交、生成和发布信息)添加到容器映像中。", + "loc.input.label.useDefaultContext": "使用默认的生成上下文", + "loc.input.help.useDefaultContext": "将生成上下文设置为包含 Dockerfile 的目录。", + "loc.input.label.buildContext": "生成上下文", + "loc.input.help.buildContext": "生成上下文的路径。", + "loc.input.label.imageDigestFile": "映像摘要文件", + "loc.input.help.imageDigestFile": "使用已推送的 Docker 映像的完整映像存储库摘要创建和填充的文件路径。", + "loc.input.label.containerName": "容器名", + "loc.input.help.containerName": "要运行的 Docker 容器的名称。", + "loc.input.label.ports": "端口", + "loc.input.help.ports": "Docker 容器中要发布到主机的端口。在新的一行指定每个 host-port:container-port 绑定。", + "loc.input.label.volumes": "卷", + "loc.input.help.volumes": "从主机装入的卷。在新的一行指定每个 host-dir:container-dir。", + "loc.input.label.envVars": "环境变量", + "loc.input.help.envVars": "Docker 容器的环境变量。在新的一行指定每个名称=值对。", + "loc.input.label.workingDirectory": "工作目录", + "loc.input.help.workingDirectory": "Docker 容器的工作目录。", + "loc.input.label.entrypointOverride": "入口点重写", + "loc.input.help.entrypointOverride": "替代 Docker 容器的默认入口点。", + "loc.input.label.containerCommand": "容器命令", + "loc.input.help.containerCommand": "docker 运行命令首先在指定的映像上创建一个可写容器层,然后使用指定的运行命令启动它。例如,如果映像包含一个简单的 Python Flask Web 应用程序,则可以指定“python app.py”来启动 Web 应用程序。", + "loc.input.label.runInBackground": "后台运行", + "loc.input.help.runInBackground": "在后台运行 Docker 容器。", + "loc.input.label.restartPolicy": "重启策略", + "loc.input.help.restartPolicy": "选择重启策略。", + "loc.input.label.maxRestartRetries": "最大重启次数", + "loc.input.help.maxRestartRetries": "Docker 守护程序进行重新启动尝试的最大次数。", + "loc.input.label.dockerHostEndpoint": "Docker 主机服务连接", + "loc.input.help.dockerHostEndpoint": "选择 Docker 主机服务连接。默认为代理的主机。", + "loc.input.label.enforceDockerNamingConvention": "强制映像名称遵循 Docker 命名约定", + "loc.input.help.enforceDockerNamingConvention": "如果已启用,将修改 Docker 映像名称以遵循 Docker 命名约定。将大写字符转换为小写并删除映像名称中的空格。", + "loc.input.label.memoryLimit": "内存限制", + "loc.input.help.memoryLimit": "容器可用的最大内存量,格式为整数后跟可选后缀,如 \"2GB\"。", + "loc.messages.ConnectingToDockerHost": "已设置 DOCKER_HOST 变量。Docker 将尝试连接到 Docker 主机: %s", + "loc.messages.ContainerPatternFound": "Docker 文件路径参数中找到的模式", + "loc.messages.ContainerPatternNotFound": "Docker 文件路径参数中未找到任何模式", + "loc.messages.ContainerDockerFileNotFound": "找不到匹配 %s 的任何 Dockerfile。", + "loc.messages.DockerHostVariableWarning": "已设置 DOCKER_HOST 变量。请确保 Docker 守护程序正在 %s 上运行", + "loc.messages.NoImagesInImageNamesFile": "文件“%s”中至少应有一个映像名称。", + "loc.messages.CantWriteDataToFile": "无法将数据写入文件 %s。错误: %s", + "loc.messages.NoDataWrittenOnFile": "没有任何数据写入到文件 %s", + "loc.messages.FileContentSynced": "文件内容已同步到磁盘。内容为 %s。", + "loc.messages.DockerRegistryNotFound": "未指定 Docker 注册表服务连接。", + "loc.messages.OutputVariableDataSizeExceeded": "未设置为 Docker 命令输出的输出变量超出了支持的最大长度。输出长度: %s,支持的最大长度: %s", + "loc.messages.WritingDockerConfigToTempFile": "正在将 Docker 配置写入临时文件。文件路径: %s,Docker 配置: %s" +} \ No newline at end of file diff --git a/_generated/DockerV1/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/DockerV1/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..cf7e8ad1b196 --- /dev/null +++ b/_generated/DockerV1/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,88 @@ +{ + "loc.friendlyName": "Docker", + "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?linkid=848006)", + "loc.description": "建置、標記、推送或執行 Docker 映像,或執行 Docker 命令", + "loc.instanceNameFormat": "$(command)", + "loc.releaseNotes": "已使用下列方法簡化工作:
 - 提供可輕鬆選取或鍵入命令的選項。
 - 保留實用的輸入欄位,以及提供將其餘項目作為引數傳遞至命令的選項。", + "loc.group.displayName.containerRegistry": "容器登錄", + "loc.group.displayName.commands": "命令", + "loc.group.displayName.advanced": "進階選項", + "loc.input.label.containerregistrytype": "容器登錄類型", + "loc.input.help.containerregistrytype": "選取 [Azure Container Registry] 可使用使用 Azure 服務連線與其連線。選取 [容器登錄] 可連線至 Docker Hub 或其他私用容器登錄。", + "loc.input.label.addBaseImageData": "將基底映像中繼資料新增至映像", + "loc.input.help.addBaseImageData": "根據預設,系統會新增基底映像資料 (例如基底映像名稱與摘要)以協助可追蹤性。您可以使用此輸入來退出此預設行為。", + "loc.input.label.dockerRegistryEndpoint": "Docker 登錄服務連線", + "loc.input.help.dockerRegistryEndpoint": "選取 Docker 登錄服務連線。必須為需要向登錄驗證的命令選取。", + "loc.input.label.azureSubscriptionEndpoint": "Azure 訂用帳戶", + "loc.input.help.azureSubscriptionEndpoint": "選取 Azure 訂閱", + "loc.input.label.azureContainerRegistry": "Azure 容器註冊", + "loc.input.help.azureContainerRegistry": "在所選 Azure 訂用帳戶中選取 Azure Container Registry。容器映像會建置並推送至此容器登錄。", + "loc.input.label.command": "命令", + "loc.input.help.command": "請選取 Docker 命令。", + "loc.input.label.dockerFile": "Dockerfile", + "loc.input.help.dockerFile": "Dockerfile 的路徑。", + "loc.input.label.arguments": "引數", + "loc.input.help.arguments": "Docker 命令選項。針對 'tag' 命令,您可於此處為 Docker 映像指定其他標籤。", + "loc.input.label.pushMultipleImages": "推送多個映像", + "loc.input.help.pushMultipleImages": "使用包含要推送之 Docker 映像名稱的文字檔來推送多個映像。每個映像名稱各佔一行。
例如:
Imagename1:tag1
Imagename2:tag2
Imagename3
若只提供了映像名稱,就會推送 ImageName3 容器映像的所有標籤。", + "loc.input.label.tagMultipleImages": "標記多個映像", + "loc.input.help.tagMultipleImages": "使用包含欲標記 Docker 映像名稱的文字檔來標記多個映像。所有映像名稱都會包含在各自的行上。
例如:
Imagename1:tag1
Imagename2:tag2
Imagename3
若只有提供映像名稱,則會將映像標記為 'latest'。", + "loc.input.label.imageName": "映像名稱", + "loc.input.help.imageName": "所要建置、推送或執行的 Docker 映像名稱。", + "loc.input.label.imageNamesPath": "映像名稱路徑", + "loc.input.help.imageNamesPath": "包含所要標記或推送之 Docker 映像名稱的文字檔路徑。每個映像名稱將擁有獨立的行。", + "loc.input.label.qualifyImageName": "限定映像名稱", + "loc.input.help.qualifyImageName": "若無其他指定名稱,映像名稱將會是 Docker 登錄服務連線的主機名稱。", + "loc.input.label.qualifySourceImageName": "限定來源映像名稱", + "loc.input.help.qualifySourceImageName": "若未指定其他名稱,來源映像名稱將會是 Docker 登錄服務連線的主機名稱。", + "loc.input.label.includeSourceTags": "包含來源標記", + "loc.input.help.includeSourceTags": "於建置或推送 Docker 映像時加入 Git 標記。", + "loc.input.label.includeLatestTag": "包含最新標記", + "loc.input.help.includeLatestTag": "建置 Docker 映像時,請加入 [最新] 標籤。", + "loc.input.label.addDefaultLabels": "新增預設標籤", + "loc.input.help.addDefaultLabels": "使用 Docker 標籤將 CI/CD 中繼資料 (如存放庫、認可、組建和版本資訊) 新增至容器映像。", + "loc.input.label.useDefaultContext": "使用預設組建內容", + "loc.input.help.useDefaultContext": "請對包含 Dockerfile 的目錄設定組建內容。", + "loc.input.label.buildContext": "組建內容", + "loc.input.help.buildContext": "組建內容的路徑。", + "loc.input.label.imageDigestFile": "映像摘要檔案", + "loc.input.help.imageDigestFile": "所建立之檔案的路徑; 該檔案填入了所推送之 Docker 映像的完整映像保存庫摘要。", + "loc.input.label.containerName": "容器名稱", + "loc.input.help.containerName": "要執行之 Docker 容器的名稱。", + "loc.input.label.ports": "連接埠", + "loc.input.help.ports": "Docker 容器中用於推送到主機的連接埠。請在新行上指定每一個 host-port:container-port 繫結。", + "loc.input.label.volumes": "磁碟區", + "loc.input.help.volumes": "要掛接的主機磁碟區。請在新行上指定每一個 host-dir:container-dir。", + "loc.input.label.envVars": "環境變數", + "loc.input.help.envVars": "Docker 容器的環境變數。請在新行上指定每一個 name=value 組。", + "loc.input.label.workingDirectory": "工作目錄", + "loc.input.help.workingDirectory": "Docker 容器的工作目錄。", + "loc.input.label.entrypointOverride": "進入點覆寫", + "loc.input.help.entrypointOverride": "覆寫 Docker 容器的預設進入點。", + "loc.input.label.containerCommand": "容器命令", + "loc.input.help.containerCommand": "docker 執行命令會先在指定映像上建立可寫入容器層,再使用指定的執行命令啟動該映像。例如,如果映像包含簡易 Python Flask Web 應用程式,您可指定 'python app.py' 來啟動 Web 應用程式。", + "loc.input.label.runInBackground": "在背景中執行", + "loc.input.help.runInBackground": "在背景執行 Docker 容器。", + "loc.input.label.restartPolicy": "重新啟動原則", + "loc.input.help.restartPolicy": "請選取重新啟動原則。", + "loc.input.label.maxRestartRetries": "嘗試重新啟動的次數上限", + "loc.input.help.maxRestartRetries": "嘗試重新啟動 Docker 精靈的次數上限。", + "loc.input.label.dockerHostEndpoint": "Docker 主機服務連線", + "loc.input.help.dockerHostEndpoint": "選取 Docker 主機服務連線。預設為代理程式的主機。", + "loc.input.label.enforceDockerNamingConvention": "強制映像名稱遵循 Docker 命名慣例", + "loc.input.help.enforceDockerNamingConvention": "若啟用,就會 Docker 映像名稱以遵循 Docker 命名慣例。請將大寫字元轉為小寫字元,並移除映像名稱中的空格。", + "loc.input.label.memoryLimit": "記憶體限制", + "loc.input.help.memoryLimit": "容器可用的最大記憶體,值為整數,並可選擇加上尾碼,如 '2GB'。", + "loc.messages.ConnectingToDockerHost": "已設定 DOCKER_HOST 變數。Docker 會嘗試連線到 Docker 主機: %s", + "loc.messages.ContainerPatternFound": "在 Docker filepath 參數中已找到模式", + "loc.messages.ContainerPatternNotFound": "在 Docker filepath 參數中找不到任何模式", + "loc.messages.ContainerDockerFileNotFound": "找不到任何與 %s 相符的 Dockerfile。", + "loc.messages.DockerHostVariableWarning": "已設定 DOCKER_HOST 變數。請確定 Docker 精靈正在下列位置執行: %s", + "loc.messages.NoImagesInImageNamesFile": "檔案 '%s' 中至少應有一個映像名稱。", + "loc.messages.CantWriteDataToFile": "無法將資料寫入檔案 %s。錯誤: %s", + "loc.messages.NoDataWrittenOnFile": "沒有任何資料寫入檔案 %s", + "loc.messages.FileContentSynced": "檔案內容已同步到磁碟。內容為 %s。", + "loc.messages.DockerRegistryNotFound": "未指定 Docker 登錄服務連線。", + "loc.messages.OutputVariableDataSizeExceeded": "因為 Docker 命令輸出超過了支援的長度上限,所以未設定輸出變數。輸出長度: %s,支援的長度上限: %s", + "loc.messages.WritingDockerConfigToTempFile": "正在將 Docker 設定寫入暫存檔案。檔案路徑: %s,Docker 設定: %s" +} \ No newline at end of file diff --git a/_generated/DockerV1/Tests/L0.ts b/_generated/DockerV1/Tests/L0.ts new file mode 100644 index 000000000000..c9f19b840c47 --- /dev/null +++ b/_generated/DockerV1/Tests/L0.ts @@ -0,0 +1,456 @@ +import * as path from 'path'; +import * as os from "os"; +import * as assert from 'assert'; +import * as ttm from 'azure-pipelines-task-lib/mock-test'; +import tl = require('azure-pipelines-task-lib'); +import * as shared from './TestShared'; + +describe('Docker Suite', function() { + this.timeout(30000); + before((done) => { + process.env[shared.TestEnvVars.operatingSystem] = tl.getPlatform() === tl.Platform.Windows ? shared.OperatingSystems.Windows : shared.OperatingSystems.Other; + done(); + }); + beforeEach(() => { + delete process.env[shared.TestEnvVars.command]; + delete process.env[shared.TestEnvVars.containerType]; + delete process.env[shared.TestEnvVars.includeLatestTag]; + delete process.env[shared.TestEnvVars.qualifyImageName]; + delete process.env[shared.TestEnvVars.includeLatestTag]; + delete process.env[shared.TestEnvVars.imageName]; + delete process.env[shared.TestEnvVars.enforceDockerNamingConvention]; + delete process.env[shared.TestEnvVars.memoryLimit]; + delete process.env[shared.TestEnvVars.pushMultipleImages]; + delete process.env[shared.TestEnvVars.tagMultipleImages]; + delete process.env[shared.TestEnvVars.arguments]; + delete process.env[shared.TestEnvVars.qualifySourceImageName]; + delete process.env[shared.TestEnvVars.addBaseImageData]; + }); + after(function () { + }); + + it('Runs successfully for docker build', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.buildImage; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} ${shared.DockerCommandArgs.BuildLabels} -t test/test:2`) != -1, "docker build should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker build with memory limit', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.buildImage; + process.env[shared.TestEnvVars.memoryLimit] = "2GB"; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} ${shared.DockerCommandArgs.BuildLabels} -t test/test:2 -m 2GB`) != -1, "docker build should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker build for invalid image name', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.buildImage; + process.env[shared.TestEnvVars.imageName] = 'test/Te st:2'; + process.env[shared.TestEnvVars.enforceDockerNamingConvention] = 'true'; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} ${shared.DockerCommandArgs.BuildLabels} -t test/test:2`) != -1, "docker build should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs fails for docker build for invalid image name and modify image name false', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.buildImage; + process.env[shared.TestEnvVars.imageName] = 'test/Te st:2'; + process.env[shared.TestEnvVars.enforceDockerNamingConvention] = 'false'; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 1 || tr.errorIssues.length, 'should have written to stderror'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf(`test/Te st:2 not valid imagename`) != -1, "docker build should fail"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker build for invalid image name and additional image tag', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.buildImage; + process.env[shared.TestEnvVars.imageName] = 'test/Test:2'; + process.env[shared.TestEnvVars.enforceDockerNamingConvention] = 'true'; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} ${shared.DockerCommandArgs.BuildLabels} -t test/test:2`) != -1, "docker build should run"); + console.log(tr.stderr); + done(); + }); + + + it('Runs successfully for docker build with latest tag', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.buildImage; + process.env[shared.TestEnvVars.includeLatestTag] = "true"; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} ${shared.DockerCommandArgs.BuildLabels} -t test/test:2 -t test/test`) != -1, "docker build should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker build with arguments', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.buildImage; + process.env[shared.TestEnvVars.arguments] = "-t test:testtag"; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} ${shared.DockerCommandArgs.BuildLabels} -t test:testtag -t test/test:2`) != -1, "docker build should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker build with multiline arguments', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.buildImage; + process.env[shared.TestEnvVars.arguments] = "-t test:tag1\n-t test:tag2\n-t test:tag3"; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} ${shared.DockerCommandArgs.BuildLabels} -t test:tag1 -t test:tag2 -t test:tag3 -t test/test:2`) != -1, "docker build should run with correct arguments"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker run image', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.runImage; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("[command]docker run --rm test/test:2") != -1, "docker run should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker run image with multiline arguments', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.runImage; + process.env[shared.TestEnvVars.arguments] = "-it\n-d\n-m 300M"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("[command]docker run -it -d -m 300M --rm test/test:2") != -1, "docker run should run with correct arguments"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker run image with memory limit', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.runImage; + process.env[shared.TestEnvVars.memoryLimit] = "2GB"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("[command]docker run --rm -m 2GB test/test:2") != -1, "docker run should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker tag image from image names file', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.tagImages; + process.env[shared.TestEnvVars.containerType] = shared.ContainerTypes.AzureContainerRegistry; + process.env[shared.TestEnvVars.qualifyImageName] = "true"; + process.env[shared.TestEnvVars.tagMultipleImages] = "true"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker tag ${shared.ImageNamesFileImageName} ajgtestacr1.azurecr.io/${shared.ImageNamesFileImageName}`) != -1, "docker tag should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker tag image', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.tagImages; + process.env[shared.TestEnvVars.containerType] = shared.ContainerTypes.AzureContainerRegistry; + process.env[shared.TestEnvVars.qualifyImageName] = "true"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker tag test/test:2 ajgtestacr1.azurecr.io/test/test:2`) != -1, "docker tag should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker tag image with sourcequalify set to true', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.tagImages; + process.env[shared.TestEnvVars.containerType] = shared.ContainerTypes.AzureContainerRegistry; + process.env[shared.TestEnvVars.qualifyImageName] = "true"; + process.env[shared.TestEnvVars.qualifySourceImageName] = "true"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker tag ajgtestacr1.azurecr.io/test/test:2 ajgtestacr1.azurecr.io/test/test:2`) != -1, "docker tag should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker tag command with arguments', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.tagImages; + process.env[shared.TestEnvVars.imageName] = 'test/test:latest'; + process.env[shared.TestEnvVars.arguments] = 'test/test:v1'; + tr.run(); + + assert(tr.invokedToolCount == 2, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker tag test/test:latest test/test:v1`) != -1, "docker tag should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker push image', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.pushImage; + tr.run(); + + assert(tr.invokedToolCount == 2, 'should have invoked tool two times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("[command]docker push test/test:2") != -1, "docker push should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker push image with arguments', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.pushImage; + process.env[shared.TestEnvVars.arguments] = "-t testtag:testimage"; + tr.run(); + + assert(tr.invokedToolCount == 2, 'should have invoked tool two times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("[command]docker push test/test:2 -t testtag:testimage") != -1, "docker push should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker push image with multiline arguments', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.pushImage; + process.env[shared.TestEnvVars.arguments] = "-t testtag:testimage\n--disable-content-trust"; + tr.run(); + + assert(tr.invokedToolCount == 2, 'should have invoked tool two times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("[command]docker push test/test:2 -t testtag:testimage --disable-content-trust") != -1, "docker push should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker push image from image names file', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.pushImage; + process.env[shared.TestEnvVars.pushMultipleImages] = "true"; + tr.run(); + + assert(tr.invokedToolCount == 2, 'should have invoked tool two times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker push ${shared.ImageNamesFileImageName}`) != -1, "docker push should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker pull image', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = "pull"; + process.env[shared.TestEnvVars.arguments] = "test/test:2"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("[command]docker pull test/test:2") != -1, "docker pull should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker pull image with multiline arguments', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = "pull"; + process.env[shared.TestEnvVars.arguments] = "test/test:2\n--platform\n--disable-content-trust"; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("[command]docker pull test/test:2 --platform --disable-content-trust") != -1, "docker pull should run with correct multiline arguments"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker build with ACR', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.buildImage; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + process.env[shared.TestEnvVars.containerType] = shared.ContainerTypes.AzureContainerRegistry; + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} ${shared.DockerCommandArgs.BuildLabels} -t test/test:2`) != -1, "docker build should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker build with ACR and qualify image name', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.buildImage; + process.env[shared.TestEnvVars.containerType] = shared.ContainerTypes.AzureContainerRegistry; + process.env[shared.TestEnvVars.qualifyImageName] = "true"; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + //console.log(tr.stdout); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one times. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} ${shared.DockerCommandArgs.BuildLabels} -t ajgtestacr1.azurecr.io/test/test:2`) != -1, "docker build should run"); + console.log(tr.stderr); + done(); + }); + + it('Runs successfully for docker build and populate ouput variable correctly', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + process.env[shared.TestEnvVars.command] = shared.CommandTypes.buildImage; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + tr.run(); + + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("set DockerOutputPath=") != -1, "docker build should set DockerOutputPath env variable.") + console.log(tr.stderr); + done(); + }); + + it('Docker build should store the id of the image that was built.', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + process.env[shared.TestEnvVars.imageName] = "testuser/standardbuild:11"; + process.env[shared.TestEnvVars.command] = shared.CommandTypes.buildImage; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one time. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("set DOCKER_TASK_BUILT_IMAGES=c834e0094587") != -1, "docker build should have stored the image id.") + console.log(tr.stderr); + done(); + }); + + it('Docker build should store the id of the image that was built with builkit.', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + process.env[shared.TestEnvVars.imageName] = "testuser/buildkit:11"; + process.env[shared.TestEnvVars.command] = shared.CommandTypes.buildImage; + process.env[shared.TestEnvVars.addBaseImageData] = "false"; + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 1, 'should have invoked tool one time. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf("set DOCKER_TASK_BUILT_IMAGES=6c3ada3eb420") != -1, "docker build should have stored the image id."); + console.log(tr.stderr); + done(); + }); + + it('Docker build should add labels with base image info', (done:Mocha.Done) => { + let tp = path.join(__dirname, 'TestSetup.js'); + process.env[shared.TestEnvVars.imageName] = "testuser/imagewithannotations:11"; + process.env[shared.TestEnvVars.command] = shared.CommandTypes.buildImage; + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + tr.run(); + + assert(tr.invokedToolCount == 3, 'should have invoked tool three time. actual: ' + tr.invokedToolCount); + assert(tr.stderr.length == 0 || tr.errorIssues.length, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.stdout.indexOf(`[command]docker build -f ${shared.formatPath("dir1/DockerFile")} ${shared.DockerCommandArgs.BuildLabels} --label ${shared.BaseImageLabels.name} --label ${shared.BaseImageLabels.digest} -t testuser/imagewithannotations:11`) != -1, "docker build should run"); + console.log(tr.stderr); + done(); + }); +}); diff --git a/_generated/DockerV1/Tests/TestSetup.ts b/_generated/DockerV1/Tests/TestSetup.ts new file mode 100644 index 000000000000..9ee5e3878ecd --- /dev/null +++ b/_generated/DockerV1/Tests/TestSetup.ts @@ -0,0 +1,206 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +import * as shared from './TestShared'; + +const DefaultWorkingDirectory: string = shared.formatPath("a/w"); +const ImageNamesPath = shared.formatPath("dir/image_names.txt"); +const DockerFilePath = shared.formatPath('dir1/DockerFile'); +const Dockerfile: string = `FROM ubuntu\nCMD ["echo","Hello World!"]` + +let taskPath = path.join(__dirname, '..', 'container.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('containerregistrytype', process.env[shared.TestEnvVars.containerType] || shared.ContainerTypes.ContainerRegistry); +tr.setInput('command', process.env[shared.TestEnvVars.command] || shared.CommandTypes.buildImage); +tr.setInput('imageName', process.env[shared.TestEnvVars.imageName] || 'test/test:2'); +tr.setInput('imageNamesPath', ImageNamesPath); +tr.setInput('dockerRegistryEndpoint', 'dockerhubendpoint'); +tr.setInput('dockerFile', DockerFilePath); +tr.setInput('includeLatestTag', process.env[shared.TestEnvVars.includeLatestTag] || "false"); +tr.setInput('qualifyImageName', process.env[shared.TestEnvVars.qualifyImageName] || "false"); +tr.setInput('qualifySourceImageName', process.env[shared.TestEnvVars.qualifySourceImageName] || "false"); +tr.setInput('azureSubscriptionEndpoint', 'AzureRMSpn'); +tr.setInput('azureContainerRegistry', '{"loginServer":"ajgtestacr1.azurecr.io", "id" : "/subscriptions/c00d16c7-6c1f-4c03-9be1-6934a4c49682/resourcegroups/ajgtestacr1rg/providers/Microsoft.ContainerRegistry/registries/ajgtestacr1"}') +tr.setInput('enforceDockerNamingConvention', process.env[shared.TestEnvVars.enforceDockerNamingConvention]); +tr.setInput('memoryLimit', process.env[shared.TestEnvVars.memoryLimit] || ''); +tr.setInput('pushMultipleImages', process.env[shared.TestEnvVars.pushMultipleImages] || "false"); +tr.setInput('tagMultipleImages', process.env[shared.TestEnvVars.tagMultipleImages] || "false"); +tr.setInput('arguments', process.env[shared.TestEnvVars.arguments] || ''); +tr.setInput ('addBaseImageData', process.env[shared.TestEnvVars.addBaseImageData] || "true"); + +console.log("Inputs have been set"); + +process.env["SYSTEM_HOSTTYPE"] = "__hostType__"; +process.env["RELEASE_RELEASENAME"] = "Release-1"; +process.env["SYSTEM_DEFAULTWORKINGDIRECTORY"] = DefaultWorkingDirectory; +process.env["SYSTEM_TEAMFOUNDATIONCOLLECTIONURI"] = shared.teamFoundationCollectionURI; +process.env["SYSTEM_SERVERTYPE"] = "hosted"; +process.env['AGENT_TEMPDIRECTORY'] = '.'; +process.env["ENDPOINT_AUTH_dockerhubendpoint"] = "{\"parameters\":{\"username\":\"test\", \"password\":\"regpassword\", \"email\":\"test@microsoft.com\",\"registry\":\"https://index.docker.io/v1/\"},\"scheme\":\"UsernamePassword\"}"; +process.env["ENDPOINT_AUTH_SCHEME_AzureRMSpn"] = "ServicePrincipal"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALID"] = "spId"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_SERVICEPRINCIPALKEY"] = "spKey"; +process.env["ENDPOINT_AUTH_PARAMETER_AzureRMSpn_TENANTID"] = "tenant"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONNAME"] = "sName"; +process.env["ENDPOINT_DATA_AzureRMSpn_SUBSCRIPTIONID"] = "sId"; +process.env["ENDPOINT_DATA_AzureRMSpn_SPNOBJECTID"] = "oId"; + +// provide answers for task mock +let a = { + "which": { + "docker": "docker" + }, + "checkPath": { + "docker": true, + [ImageNamesPath]: true + }, + "exist": { + "docker": true, + [ImageNamesPath]: true + }, + "exec": { + "docker push test/test:2" : { + "code": 0, + "stdout": "successfully pushed test/test:2 image" + }, + "docker run --rm test/test:2" : { + "code": 0, + "stdout": "successfully ran test/test:2 image" + }, + "docker run --rm -m 2GB test/test:2": { + "code": 0, + "stdout": "successfully ran test/test:2 image" + }, + "docker pull test/test:2": { + "code": 0, + "stdout": "successfully pulled test/test:2 image" + } + } +}; + +// Add extra answer definitions that need to be dynamically generated +a.exist[DockerFilePath] = true; + +a.exec[`docker build -f ${DockerFilePath} ${shared.DockerCommandArgs.BuildLabels} -t test/test:2`] = { + "code": 0, + "stdout": "successfully build test/test:2 image" +}; +a.exec[`docker build -f ${DockerFilePath} ${shared.DockerCommandArgs.BuildLabels} -t test/test:2 -m 2GB`] = { + "code": 0, + "stdout": "successfully build test/test:2 image" +}; +a.exec[`docker build -f ${DockerFilePath} ${shared.DockerCommandArgs.BuildLabels} -t test/Te st:2`] = { + "code": 1, + "stdout": "test/Te st:2 not valid imagename" +}; +a.exec[`docker build -f ${DockerFilePath} ${shared.DockerCommandArgs.BuildLabels} -t test/test:2 -t test/test`] = { + "code": 0, + "stdout": "successfully build test/test image with latest tag" +}; +a.exec[`docker build -f ${DockerFilePath} ${shared.DockerCommandArgs.BuildLabels} -t ajgtestacr1.azurecr.io/test/test:2`] = { + "code": 0, + "stdout": "successfully build ajgtestacr1.azurecr.io/test/test image with latest tag" +}; +a.exec[`docker build -f ${DockerFilePath} ${shared.DockerCommandArgs.BuildLabels} -t ${shared.ImageNamesFileImageName}`] = { + "code": 0 +}; +a.exec[`docker tag test/test:2 ajgtestacr1.azurecr.io/test/test:2`] = { + "code": 0 +}; +a.exec[`docker tag test/test:latest test/test:latest`] = { + "code": 0 +}; +a.exec[`docker tag test/test:latest test/test:v1`] = { + "code": 0 +}; +a.exec[`docker tag ${shared.ImageNamesFileImageName} ajgtestacr1.azurecr.io/${shared.ImageNamesFileImageName}`] = { + "code": 0 +}; +a.exec[`docker tag ajgtestacr1.azurecr.io/test/test:2 ajgtestacr1.azurecr.io/test/test:2`] = { + "code": 0 +}; +a.exec[`docker run --rm ${shared.ImageNamesFileImageName}`] = { + "code": 0 +}; +a.exec[`docker push ${shared.ImageNamesFileImageName}`] = { + "code": 0 +}; +a.exec[`docker build -f ${DockerFilePath} ${shared.DockerCommandArgs.BuildLabels} -t test/test:2 -t test/test:6`] = { + "code": 0, + "stdout": "successfully build test/test:2 and test/test:6 image" +}; +a.exec[`docker build -f ${DockerFilePath} ${shared.DockerCommandArgs.BuildLabels} -t test:testtag -t test/test:2`] = { + "code": 0, + "stdout": "successfully build test/test:2 and -t test:testtag image" +}; +a.exec[`docker build -f ${DockerFilePath} ${shared.DockerCommandArgs.BuildLabels} -t test:tag1 -t test:tag2 -t test:tag3 -t test/test:2`] = { + "code": 0, + "stdout": "successfully built and tagged test/test:2, test:tag1, test:tag2 and test:tag3" +}; +a.exec[`docker push test/test:2 -t testtag:testimage`] = { + "code": 0 +}; +a.exec[`docker push test/test:2 -t testtag:testimage --disable-content-trust`] = { + "code": 0, + "stdout": "successfully pushed image with arguments: -t testtag:testimage --disable-content-trust" +}; +a.exec[`docker run -it -d -m 300M --rm test/test:2`] = { + "code": 0, + "stdout": "successfully ran test/test:2 image with arguments: -it -d -m 300M --rm" +}; +a.exec[`docker pull test/test:2 --platform --disable-content-trust`] = { + "code": 0, + "stdout": "successfully pulled test/test:2 with arguments: --platform --disable-content-trust" +}; +a.exec[`docker images`] = { + "code": 0, + "stdout": "Listed images successfully." +}; +a.exec[`docker build -f ${DockerFilePath} ${shared.DockerCommandArgs.BuildLabels} -t testuser/standardbuild:11`] = { + "code": 0, + "stdout": "Successfully built c834e0094587\n Successfully tagged testuser/testrepo:11." +}; +a.exec[`docker build -f ${DockerFilePath} ${shared.DockerCommandArgs.BuildLabels} -t testuser/buildkit:11`] = { + "code": 0, + "stdout": " => => writing image sha256:6c3ada3eb42094510e0083bba6ae805540e36c96871d7be0c926b2f8cbeea68c\n => => naming to docker.io/library/testuser/buildkit:11" +}; +a.exec[`docker build -f ${DockerFilePath} ${shared.DockerCommandArgs.BuildLabels} --label ${shared.BaseImageLabels.name} --label ${shared.BaseImageLabels.digest} -t testuser/imagewithannotations:11`] = { + "code": 0, + "stdout": "successfully built image and tagged testuser/imagewithannotations:11." +}; +a.exec[`docker pull ${shared.BaseImageName}`] = { + "code":0, + "stdout": "Pull complete" +}; +a.exec[`docker inspect ${shared.BaseImageName}`] = { + "code":0, + "stdout": `[{ + "Id": "sha256:302aba9ce190db9e247d710f4794cc303b169035de2048e76b82c9edbddbef4e", + "RepoTags": [ + "alpine:latest" + ], + "RepoDigests": [ + "ubuntu@sha256:826f70e0ac33e99a72cf20fb0571245a8fee52d68cb26d8bc58e53bfa65dcdfa" + ] + }]` +}; + +tr.setAnswers(a); + +// Create mock for fs module +let fs = require('fs'); +let fsClone = Object.assign({}, fs); +fsClone.readFileSync = function(filePath, options) { + switch (filePath) { + case ImageNamesPath: + return shared.ImageNamesFileImageName; + case DockerFilePath: + return Dockerfile; + default: + return fs.readFileSync(filePath, options); + } +}; +tr.registerMock('fs', fsClone); + +tr.run(); \ No newline at end of file diff --git a/_generated/DockerV1/Tests/TestShared.ts b/_generated/DockerV1/Tests/TestShared.ts new file mode 100644 index 000000000000..cb569d468336 --- /dev/null +++ b/_generated/DockerV1/Tests/TestShared.ts @@ -0,0 +1,59 @@ +import tl = require('azure-pipelines-task-lib'); + +export let TestEnvVars = { + operatingSystem: "__operating_system__", + command: "__command__", + containerType: "__container_type__", + qualifyImageName: "__qualifyImageName__", + includeLatestTag: "__includeLatestTag__", + imageName: "__imageName__", + enforceDockerNamingConvention: "__enforceDockerNamingConvention__", + memoryLimit: "__memoryLimit__", + pushMultipleImages: "__pushMultipleImages__", + tagMultipleImages: "__tagMultipleImages__", + arguments: "__arguments__", + qualifySourceImageName: "__qualifySourceImageName__", + addBaseImageData: "addBaseImageData" +}; + +export let OperatingSystems = { + Windows: "Windows", + Other: "Other" +}; + +export let CommandTypes = { + buildImage: "Build an image", + tagImages: "Tag image", + pushImage: "Push an image", + runImage: "Run an image" +}; + +export let ContainerTypes = { + AzureContainerRegistry: "Azure Container Registry", + ContainerRegistry: "Container Registry" +} + +export let ImageNamesFileImageName = "test_image"; + +export let BaseImageName = "ubuntu"; +export let BaseImageLabels = { + name:"image.base.ref.name=ubuntu", + digest:"image.base.digest=sha256:826f70e0ac33e99a72cf20fb0571245a8fee52d68cb26d8bc58e53bfa65dcdfa" +}; + +export let teamFoundationCollectionURI = "https://abc.visualstudio.com/"; + +export let DockerCommandArgs = { + BuildLabels: `--label com.visualstudio.abc.image.system.teamfoundationcollectionuri=${teamFoundationCollectionURI}`, +} +/** + * Formats the given path to be appropriate for the operating system. + * @param canonicalPath A non-rooted path using a forward slash (/) as a directory separator. + */ +export function formatPath(canonicalPath: string) { + if (process.env[TestEnvVars.operatingSystem] === OperatingSystems.Windows) { + return "F:\\" + canonicalPath.replace('/', '\\'); + } else { + return "/" + canonicalPath; + } +}; \ No newline at end of file diff --git a/_generated/DockerV1/ThirdPartyNotices.txt b/_generated/DockerV1/ThirdPartyNotices.txt new file mode 100644 index 000000000000..bcfc0becc7b5 --- /dev/null +++ b/_generated/DockerV1/ThirdPartyNotices.txt @@ -0,0 +1,1068 @@ + +THIRD-PARTY SOFTWARE NOTICES AND INFORMATION +Do Not Translate or Localize + +The Docker task for Azure Pipelines or Team Foundation Server incorporates components from the projects listed below. Microsoft licenses these components to you under the Microsoft software license terms. The original copyright notices and the licenses under which Microsoft received such components are set forth below for informational purposes. Microsoft reserves all rights not expressly granted herein, whether by implication, estoppel or otherwise. + + +1. argparse (https://github.com/nodeca/argparse) +2. array-union (https://github.com/sindresorhus/array-union) +3. array-uniq (https://github.com/sindresorhus/array-uniq) +4. arrify (https://github.com/sindresorhus/arrify) +5. balanced-match (https://github.com/juliangruber/balanced-match) +6. brace-expansion (https://github.com/juliangruber/brace-expansion) +7. concat-map (https://github.com/substack/node-concat-map) +8. del (https://github.com/sindresorhus/del) +9. esprima (https://github.com/ariya/esprima) +10. fs.realpath (https://github.com/isaacs/fs.realpath) +11. Glob (https://github.com/isaacs/node-glob) +12. globby (https://github.com/sindresorhus/globby) +13. inflight (https://github.com/npm/inflight) +14. inherits (https://github.com/isaacs/inherits) +15. is-path-cwd (https://github.com/sindresorhus/is-path-cwd) +16. is-path-in-cwd (https://github.com/sindresorhus/is-path-in-cwd) +17. is-path-inside (https://github.com/sindresorhus/is-path-inside) +18. js-yaml (https://github.com/nodeca/js-yaml) +19. minimatch (https://github.com/isaacs/minimatch) +20. Mockery (https://github.com/mfncooper/mockery) +21. node-uuid (https://github.com/broofa/node-uuid) +22. object-assign (https://github.com/sindresorhus/object-assign) +23. once (https://github.com/isaacs/once) +24. path-is-absolute (https://github.com/sindresorhus/path-is-absolute) +25. path-is-inside (https://github.com/domenic/path-is-inside) +26. pify (https://github.com/sindresorhus/pify) +27. pinkie (https://github.com/floatdrop/pinkie) +28. pinkie-promise (https://github.com/floatdrop/pinkie-promise) +29. q (https://github.com/kriskowal/q) +30. Rimraf (https://github.com/isaacs/rimraf) +31. semver (https://github.com/npm/node-semver/) +32. ShellJS (https://github.com/shelljs/shelljs) + Includes:wrench-js +33. sprintf-js (https://github.com/alexei/sprintf.js) +34. tunnel (https://github.com/koichik/node-tunnel) +35. underscore (https://github.com/jashkenas/underscore) +36. vso-node-api (https://github.com/Microsoft/vsts-node-api) +37. Azure-pipelines-Task-Lib (https://github.com/Microsoft/azure-pipelines-task-lib) +38. wrappy (https://github.com/npm/wrappy) + + +%% argparse NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(The MIT License) + +Copyright (C) 2012 by Vitaly Puzrin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF argparse NOTICES, INFORMATION, AND LICENSE + +%% array-union NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF array-union NOTICES, INFORMATION, AND LICENSE + +%% array-uniq NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF array-uniq NOTICES, INFORMATION, AND LICENSE + +%% arrify NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF arrify NOTICES, INFORMATION, AND LICENSE + +%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(MIT) + +Copyright (c) 2013 Julian Gruber + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +========================================= +END OF balanced-match NOTICES, INFORMATION, AND LICENSE + +%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(MIT) + +Copyright (c) 2013 Julian Gruber + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +========================================= +END OF brace-expansion NOTICES, INFORMATION, AND LICENSE + +%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) James Halliday/substack + +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF concat-map NOTICES, INFORMATION, AND LICENSE + +%% del NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF del NOTICES, INFORMATION, AND LICENSE + +%% esprima NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= + Copyright (C) 2012 Ariya Hidayat + Copyright (C) 2012 Mathias Bynens + Copyright (C) 2012 Joost-Wim Boekesteijn + Copyright (C) 2012 Kris Kowal + Copyright (C) 2012 Yusuke Suzuki + Copyright (C) 2012 Arpad Borsos + Copyright (C) 2011 Ariya Hidayat + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +========================================= +END OF esprima NOTICES, INFORMATION, AND LICENSE + +%% fs.realpath NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---- + +This library bundles a version of the `fs.realpath` and `fs.realpathSync` +methods from Node.js v0.10 under the terms of the Node.js MIT license, as follows: + + Copyright Joyent, Inc. and other Node contributors. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + +========================================= +END OF fs.realpath NOTICES, INFORMATION, AND LICENSE + +%% Glob NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF Glob NOTICES, INFORMATION, AND LICENSE + +%% globby NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF globby NOTICES, INFORMATION, AND LICENSE + +%% inflight NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF inflight NOTICES, INFORMATION, AND LICENSE + +%% inherits NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF inherits NOTICES, INFORMATION, AND LICENSE + +%% is-path-cwd NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF is-path-cwd NOTICES, INFORMATION, AND LICENSE + +%% is-path-in-cwd NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF is-path-in-cwd NOTICES, INFORMATION, AND LICENSE + +%% is-path-inside NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF is-path-inside NOTICES, INFORMATION, AND LICENSE + +%% js-yaml NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(The MIT License) + +Copyright (C) 2011-2015 by Vitaly Puzrin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF js-yaml NOTICES, INFORMATION, AND LICENSE + +%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF minimatch NOTICES, INFORMATION, AND LICENSE + +%% Mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyrights for code authored by Yahoo! Inc. is licensed under the following + terms: + + MIT License + + Copyright (c) 2011 Yahoo! Inc. All Rights Reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +========================================= +END OF Mockery NOTICES, INFORMATION, AND LICENSE + +%% node-uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2010-2016 Robert Kieffer and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +========================================= +END OF node-uuid NOTICES, INFORMATION, AND LICENSE + +%% object-assign NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF object-assign NOTICES, INFORMATION, AND LICENSE + +%% once NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF once NOTICES, INFORMATION, AND LICENSE + +%% path-is-absolute NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +path-is-absolute + +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +node.js: + +Copyright Joyent, Inc. and other Node contributors. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +Software), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF path-is-absolute NOTICES, INFORMATION, AND LICENSE + +%% path-is-inside NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright � 2013�2014 Domenic Denicola +Licensed under the WTFPL Version 2 (http://www.wtfpl.net/about/) +========================================= +END OF path-is-inside NOTICES, INFORMATION, AND LICENSE + +%% pify NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF pify NOTICES, INFORMATION, AND LICENSE + +%% pinkie NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF pinkie NOTICES, INFORMATION, AND LICENSE + +%% pinkie-promise NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF pinkie-promise NOTICES, INFORMATION, AND LICENSE + +%% q NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2009�2014 Kristopher Michael Kowal. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + +/*! + * + * Copyright 2009-2012 Kris Kowal under the terms of the MIT + * license found at http://github.com/kriskowal/q/raw/master/LICENSE + * + * With parts by Tyler Close + * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found + * at http://www.opensource.org/licenses/mit-license.html + * Forked at ref_send.js version: 2009-05-11 + * + * With parts by Mark Miller + * Copyright (C) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +========================================= +END OF q NOTICES, INFORMATION, AND LICENSE + +%% Rimraf NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF Rimraf NOTICES, INFORMATION, AND LICENSE + +%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF semver NOTICES, INFORMATION, AND LICENSE + +%% ShellJS NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2012, Artur Adib +All rights reserved. + +You may use this project under the terms of the New BSD license as follows: + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Artur Adib nor the + names of the contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +========================================= +Includes wrench-js +The MIT License + +Copyright (c) 2010 Ryan McGrath + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF ShellJS NOTICES, INFORMATION, AND LICENSE + +%% sprintf-js NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2007-2014, Alexandru Marasteanu +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of this software nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +========================================= +END OF sprintf-js NOTICES, INFORMATION, AND LICENSE + +%% tunnel NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2012 Koichi Kobayashi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF tunnel NOTICES, INFORMATION, AND LICENSE + +%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative +Reporters & Editors + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +========================================= +END OF underscore NOTICES, INFORMATION, AND LICENSE + +%% vso-node-api NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF vso-node-api NOTICES, INFORMATION, AND LICENSE + +%% Azure-Pipelines-Task-Lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Microsoft Corporation. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +========================================= +END OF Azure-Pipelines-Task-Lib NOTICES, INFORMATION, AND LICENSE + +%% wrappy NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF wrappy NOTICES, INFORMATION, AND LICENSE + + diff --git a/_generated/DockerV1/container.ts b/_generated/DockerV1/container.ts new file mode 100644 index 000000000000..fd2851761632 --- /dev/null +++ b/_generated/DockerV1/container.ts @@ -0,0 +1,89 @@ +"use strict"; + +import path = require('path'); +import * as tl from "azure-pipelines-task-lib/task"; +import ContainerConnection from "azure-pipelines-tasks-docker-common/containerconnection"; +import ACRAuthenticationTokenProvider from "azure-pipelines-tasks-docker-common/registryauthenticationprovider/acrauthenticationtokenprovider"; +import { getDockerRegistryEndpointAuthenticationToken } from "azure-pipelines-tasks-docker-common/registryauthenticationprovider/registryauthenticationtoken"; +import Q = require('q'); + +tl.setResourcePath(path.join(__dirname, 'task.json')); + +// get the registry server authentication provider +var containerRegistryType = tl.getInput("containerregistrytype", true); +const environmentVariableMaximumSize = 32766; + +var registryAuthenticationToken; +if (containerRegistryType == "Azure Container Registry") { + const tokenProvider = new ACRAuthenticationTokenProvider(tl.getInput("azureSubscriptionEndpoint"), tl.getInput("azureContainerRegistry")); + registryAuthenticationToken = tokenProvider.getToken(); +} +else { + let endpointId = tl.getInput("dockerRegistryEndpoint"); + registryAuthenticationToken = getDockerRegistryEndpointAuthenticationToken(endpointId); +} + +// Run the specified command +var command = tl.getInput("command", true).toLowerCase(); +/* tslint:disable:no-var-requires */ + +var dockerCommandMap = { + "build an image": "./containerbuild", + "build": "./containerbuild", + "tag image": "./containertag", + "tag": "./containertag", + "push an image": "./containerpush", + "push": "./containerpush", + "run an image": "./containerrun", + "run": "./containerrun", + "login": "./dockerlogin", + "logout": "./dockerlogout" +} + +var telemetry = { + registryType: containerRegistryType, + command: command, + jobId: tl.getVariable('SYSTEM_JOBID') +}; + +console.log("##vso[telemetry.publish area=%s;feature=%s]%s", + "TaskEndpointId", + "DockerV1", + JSON.stringify(telemetry)); + +var commandImplementation = require("./containercommand"); +if (command in dockerCommandMap) { + commandImplementation = require(dockerCommandMap[command]); +} + +registryAuthenticationToken +.then(function success(authToken) { + // Connect to any specified container host and/or registry + var connection = new ContainerConnection(); + connection.open(tl.getInput("dockerHostEndpoint"), authToken); + var result = ""; + commandImplementation + .run(connection, (data) => result += data) + /* tslint:enable:no-var-requires */ + .fin(function cleanup() { + if (command !== "login") { + connection.close(); + } + }) + .then( + function success() { + var commandOutputLength = result.length; + if (commandOutputLength > environmentVariableMaximumSize) { + tl.warning(tl.loc('OutputVariableDataSizeExceeded', commandOutputLength, environmentVariableMaximumSize)); + } + else { + tl.setVariable("DockerOutput", result); + } + tl.setResult(tl.TaskResult.Succeeded, ""); + }, + function failure(err) { + tl.setResult(tl.TaskResult.Failed, err.message); + } + ) + .done(); +}); \ No newline at end of file diff --git a/_generated/DockerV1/containerbuild.ts b/_generated/DockerV1/containerbuild.ts new file mode 100644 index 000000000000..597b76633e1d --- /dev/null +++ b/_generated/DockerV1/containerbuild.ts @@ -0,0 +1,110 @@ +"use strict"; + +import * as fs from "fs"; +import * as path from "path"; +import * as tl from "azure-pipelines-task-lib/task"; +import * as dockerCommandUtils from "azure-pipelines-tasks-docker-common/dockercommandutils"; +import * as fileUtils from "azure-pipelines-tasks-docker-common/fileutils"; +import * as pipelineUtils from "azure-pipelines-tasks-docker-common/pipelineutils"; +import ContainerConnection from "azure-pipelines-tasks-docker-common/containerconnection"; +import * as sourceUtils from "azure-pipelines-tasks-docker-common/sourceutils"; +import * as imageUtils from "azure-pipelines-tasks-docker-common/containerimageutils"; +import * as utils from "./utils"; + +export function run(connection: ContainerConnection): any { + var command = connection.createCommand(); + command.arg("build"); + + var dockerfilepath = tl.getInput("dockerFile", true); + let dockerFile = fileUtils.findDockerFile(dockerfilepath); + + if (!tl.exist(dockerFile)) { + throw new Error(tl.loc('ContainerDockerFileNotFound', dockerfilepath)); + } + + command.arg(["-f", dockerFile]); + + var addDefaultLabels = tl.getBoolInput("addDefaultLabels"); + if (addDefaultLabels) { + pipelineUtils.addDefaultLabelArgs(command); + } + + const addBaseImageInfo = tl.getBoolInput("addBaseImageData"); + const labelsArgument = pipelineUtils.getDefaultLabels(false, addBaseImageInfo, dockerFile, connection); + + labelsArgument.forEach(label => { + command.arg(["--label", label]); + }); + + var commandArguments = dockerCommandUtils.getCommandArguments(tl.getInput("arguments", false)); + + command.line(commandArguments); + + var imageName = utils.getImageName(); + var qualifyImageName = tl.getBoolInput("qualifyImageName"); + if (qualifyImageName) { + imageName = connection.getQualifiedImageNameIfRequired(imageName); + } + command.arg(["-t", tl.getBoolInput("enforceDockerNamingConvention") ? imageUtils.generateValidImageName(imageName) : imageName]); + + var baseImageName = imageUtils.imageNameWithoutTag(imageName); + + var includeSourceTags = tl.getBoolInput("includeSourceTags"); + if (includeSourceTags) { + sourceUtils.getSourceTags().forEach(tag => { + command.arg(["-t", baseImageName + ":" + tag]); + }); + } + + var includeLatestTag = tl.getBoolInput("includeLatestTag"); + if (baseImageName !== imageName && includeLatestTag) { + command.arg(["-t", baseImageName]); + } + + var memoryLimit = tl.getInput("memoryLimit"); + if (memoryLimit) { + command.arg(["-m", memoryLimit]); + } + + var context: string; + var useDefaultContext = tl.getBoolInput("useDefaultContext"); + if (useDefaultContext) { + context = path.dirname(dockerFile); + } else { + context = tl.getPathInput("buildContext"); + } + command.arg(context); + + let output: string = ""; + command.on("stdout", data => { + output += data; + }); + + let err: string = ""; + command.on("stderr", data =>{ + err += data; + }); + + return connection.execCommand(command).then(() => { + if (isBuildKitEnabled()) + { + // Build kit output the build results to stderr instead of stdout + // https://github.com/moby/moby/issues/40031 + output = err; + } + + let taskOutputPath = utils.writeTaskOutput("build", output); + tl.setVariable("DockerOutputPath", taskOutputPath); + + const builtImageId = imageUtils.getImageIdFromBuildOutput(output); + if (builtImageId) { + imageUtils.shareBuiltImageId(builtImageId); + } + }); +} + +function isBuildKitEnabled(): boolean { + // https://docs.docker.com/develop/develop-images/build_enhancements/ + const isBuildKitBuildValue = tl.getVariable("DOCKER_BUILDKIT"); + return isBuildKitBuildValue && Number(isBuildKitBuildValue) == 1; +} diff --git a/_generated/DockerV1/containercommand.ts b/_generated/DockerV1/containercommand.ts new file mode 100644 index 000000000000..db37626d2d78 --- /dev/null +++ b/_generated/DockerV1/containercommand.ts @@ -0,0 +1,20 @@ +"use strict"; + +import * as tl from "azure-pipelines-task-lib/task"; +import ContainerConnection from "azure-pipelines-tasks-docker-common/containerconnection"; +import * as dockerCommandUtils from "azure-pipelines-tasks-docker-common/dockercommandutils"; + +export function run(connection: ContainerConnection, outputUpdate: (data: string) => any): any { + var command = connection.createCommand(); + command.on("stdout", output => { + outputUpdate(output); + }); + + var dockerCommand = tl.getInput("command", true); + command.arg(dockerCommand); + + var commandArguments = dockerCommandUtils.getCommandArguments(tl.getInput("arguments", false)); + + command.line(commandArguments); + return connection.execCommand(command); +} diff --git a/_generated/DockerV1/containerpush.ts b/_generated/DockerV1/containerpush.ts new file mode 100644 index 000000000000..b94c73636998 --- /dev/null +++ b/_generated/DockerV1/containerpush.ts @@ -0,0 +1,82 @@ +"use strict"; + +import * as fs from "fs"; +import * as tl from "azure-pipelines-task-lib/task"; +import ContainerConnection from "azure-pipelines-tasks-docker-common/containerconnection"; +import * as dockerCommandUtils from "azure-pipelines-tasks-docker-common/dockercommandutils"; +import * as imageUtils from "azure-pipelines-tasks-docker-common/containerimageutils"; +import * as utils from "./utils"; + +function dockerPush(connection: ContainerConnection, image: string, imageDigestFile?: string, useMultiImageMode?: boolean, commandArguments?: string): any { + var command = connection.createCommand(); + command.arg("push"); + command.arg(image); + command.line(commandArguments); + + if (!imageDigestFile) { + return connection.execCommand(command); + } + + var output = ""; + command.on("stdout", data => { + output += data; + }); + + return connection.execCommand(command).then(() => { + // Parse the output to find the repository digest + var imageDigest = output.match(/^[^:]*: digest: ([^ ]*) size: \d*$/m)[1]; + if (imageDigest) { + let baseImageName = imageUtils.imageNameWithoutTag(image); + let formattedDigestValue = baseImageName + "@" + imageDigest; + if (useMultiImageMode) { + // If we're pushing multiple images, we need to append all the digest values. Each one is contained on its own line. + fs.appendFileSync(imageDigestFile, formattedDigestValue + "\r\n"); + } else { + fs.writeFileSync(imageDigestFile, formattedDigestValue); + } + } + }); +} + +export function run(connection: ContainerConnection): any { + try { + var imageLsCommand = connection.createCommand(); + imageLsCommand.arg("images"); + connection.execCommand(imageLsCommand); + } catch (ex) { + + } + + let command = tl.getInput("command", true); + var commandArguments = dockerCommandUtils.getCommandArguments(tl.getInput("arguments", false)); + + let imageNames; + let useMultiImageMode = tl.getBoolInput("pushMultipleImages"); + if (useMultiImageMode) { + imageNames = utils.getImageNames(); + } else { + imageNames = [utils.getImageName()]; + } + + let imageMappings = utils.getImageMappings(connection, imageNames, []); + + let imageDigestFile: string = null; + if (tl.filePathSupplied("imageDigestFile")) { + imageDigestFile = tl.getPathInput("imageDigestFile"); + } + + let firstImageMapping = imageMappings.shift(); + let pushedSourceImages = [firstImageMapping.sourceImageName]; + let promise = dockerPush(connection, firstImageMapping.targetImageName, imageDigestFile, useMultiImageMode, commandArguments); + imageMappings.forEach(imageMapping => { + // If we've already pushed a tagged version of this source image, then we don't want to write the digest info to the file since it will be duplicate. + if (pushedSourceImages.indexOf(imageMapping.sourceImageName) >= 0) { + promise = promise.then(() => dockerPush(connection, imageMapping.targetImageName, commandArguments = commandArguments)); + } else { + pushedSourceImages.push(imageMapping.sourceImageName); + promise = promise.then(() => dockerPush(connection, imageMapping.targetImageName, imageDigestFile, useMultiImageMode, commandArguments)); + } + }); + + return promise; +} diff --git a/_generated/DockerV1/containerrun.ts b/_generated/DockerV1/containerrun.ts new file mode 100644 index 000000000000..d073a9d7eadb --- /dev/null +++ b/_generated/DockerV1/containerrun.ts @@ -0,0 +1,90 @@ +"use strict"; + +import * as tl from "azure-pipelines-task-lib/task"; +import ContainerConnection from "azure-pipelines-tasks-docker-common/containerconnection"; +import * as dockerCommandUtils from "azure-pipelines-tasks-docker-common/dockercommandutils"; +import * as utils from "./utils"; + +export function run(connection: ContainerConnection): any { + var command = connection.createCommand(); + command.arg("run"); + + var runInBackground = tl.getBoolInput("runInBackground"); + if (runInBackground) { + command.arg("-d"); + } + + var commandArguments = dockerCommandUtils.getCommandArguments(tl.getInput("arguments", false)); + + command.line(commandArguments); + + var entrypointOverride = tl.getInput("entrypointOverride"); + if (entrypointOverride) { + command.arg(["--entrypoint", entrypointOverride]); + } + + tl.getDelimitedInput("envVars", "\n").forEach(envVar => { + command.arg(["-e", envVar]); + }); + + var containerName = tl.getInput("containerName"); + if (containerName) { + command.arg(["--name", containerName]); + } + + tl.getDelimitedInput("ports", "\n").forEach(port => { + command.arg(["-p", port]); + }); + + if (!runInBackground) { + command.arg("--rm"); + } else { + var restartPolicy = { + no: "no", + onFailure: "on-failure", + always: "always", + unlessStopped: "unless-stopped" + }[tl.getInput("restartPolicy")]; + if (restartPolicy) { + if (restartPolicy === "on-failure") { + var maxRestartRetries = tl.getInput("maxRestartRetries"); + if (maxRestartRetries) { + var restartMaxRetriesNum = parseInt(maxRestartRetries, 10); + if (isNaN(restartMaxRetriesNum)) { + throw new Error("Maximum Restart Retries is not a number."); + } + restartPolicy += ":" + restartMaxRetriesNum; + } + } + command.arg(["--restart", restartPolicy]); + } + } + + tl.getDelimitedInput("volumes", "\n").forEach(volume => { + command.arg(["-v", volume]); + }); + + var workingDirectory = tl.getInput("workingDirectory"); + if (workingDirectory) { + command.arg(["-w", workingDirectory]); + } + + var memoryLimit = tl.getInput("memoryLimit"); + if (memoryLimit) { + command.arg(["-m", memoryLimit]); + } + + var imageName = utils.getImageName(); + var qualifyImageName = tl.getBoolInput("qualifyImageName"); + if (qualifyImageName) { + imageName = connection.getQualifiedImageNameIfRequired(imageName); + } + command.arg(imageName); + + var containerCommand = tl.getInput("containerCommand"); + if (containerCommand) { + command.line(containerCommand); + } + + return connection.execCommand(command); +} diff --git a/_generated/DockerV1/containertag.ts b/_generated/DockerV1/containertag.ts new file mode 100644 index 000000000000..4fdd50f2e78e --- /dev/null +++ b/_generated/DockerV1/containertag.ts @@ -0,0 +1,44 @@ +"use strict"; + +import * as tl from "azure-pipelines-task-lib/task"; +import ContainerConnection from "azure-pipelines-tasks-docker-common/containerconnection"; +import * as utils from "./utils"; +import * as Q from 'q'; + +function dockerTag(connection: ContainerConnection, sourceImage: string, targetImage: string, qualifyImageName: boolean, qualifySourceImageName: boolean): Q.Promise { + let command = connection.createCommand(); + command.arg("tag"); + if (qualifyImageName) { + targetImage = connection.getQualifiedImageNameIfRequired(targetImage); + } + if (qualifySourceImageName) { + sourceImage = connection.getQualifiedImageNameIfRequired(sourceImage); + } + command.arg(sourceImage); + command.arg(targetImage); + + tl.debug(`Tagging image ${sourceImage} with ${targetImage}.`); + return connection.execCommand(command); +} + +export function run(connection: ContainerConnection): Q.Promise { + let imageNames; + let useMultiImageMode = tl.getBoolInput("tagMultipleImages"); + if (useMultiImageMode) { + imageNames = utils.getImageNames(); + } else { + imageNames = [utils.getImageName()]; + } + var qualifyImageName = tl.getBoolInput("qualifyImageName"); + const qualifySourceImageName = tl.getBoolInput("qualifySourceImageName"); + let additionalImageTags = tl.getDelimitedInput("arguments", "\n"); + let imageMappings = utils.getImageMappings(connection, imageNames, additionalImageTags); + + let firstMapping = imageMappings.shift(); + let promise = dockerTag(connection, firstMapping.sourceImageName, firstMapping.targetImageName, qualifyImageName, qualifySourceImageName); + imageMappings.forEach(mapping => { + promise = promise.then(() => dockerTag(connection, mapping.sourceImageName, mapping.targetImageName, qualifyImageName, qualifySourceImageName)); + }); + + return promise; +} \ No newline at end of file diff --git a/_generated/DockerV1/dockerlogin.ts b/_generated/DockerV1/dockerlogin.ts new file mode 100644 index 000000000000..86a18956e42d --- /dev/null +++ b/_generated/DockerV1/dockerlogin.ts @@ -0,0 +1,11 @@ +"use strict"; + +import Q = require('q'); +import ContainerConnection from "azure-pipelines-tasks-docker-common/containerconnection"; + +export function run(connection: ContainerConnection): any { + var defer = Q.defer(); + connection.setDockerConfigEnvVariable(); + defer.resolve(undefined); + return defer.promise; +} \ No newline at end of file diff --git a/_generated/DockerV1/dockerlogout.ts b/_generated/DockerV1/dockerlogout.ts new file mode 100644 index 000000000000..6f732e70b590 --- /dev/null +++ b/_generated/DockerV1/dockerlogout.ts @@ -0,0 +1,11 @@ +"use strict"; + +import Q = require('q'); +import ContainerConnection from "azure-pipelines-tasks-docker-common/containerconnection"; + +export function run(connection: ContainerConnection): any { + connection.unsetDockerConfigEnvVariable(); + var defer = Q.defer(); + defer.resolve(undefined); + return >defer.promise; +} diff --git a/_generated/DockerV1/icon.png b/_generated/DockerV1/icon.png new file mode 100644 index 000000000000..5c3561e582b0 Binary files /dev/null and b/_generated/DockerV1/icon.png differ diff --git a/_generated/DockerV1/icon.svg b/_generated/DockerV1/icon.svg new file mode 100644 index 000000000000..7671582150c5 --- /dev/null +++ b/_generated/DockerV1/icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_generated/DockerV1/make.json b/_generated/DockerV1/make.json new file mode 100644 index 000000000000..de959ee5f012 --- /dev/null +++ b/_generated/DockerV1/make.json @@ -0,0 +1,12 @@ +{ + "rm": [ + { + "items": [ + "node_modules/azure-pipelines-tasks-docker-common/node_modules/azure-pipelines-task-lib", + "node_modules/azure-pipelines-tasks-azure-arm-rest-v2/node_modules/azure-pipelines-task-lib", + "node_modules/https-proxy-agent/node_modules/agent-base" + ], + "options": "-Rf" + } + ] +} \ No newline at end of file diff --git a/_generated/DockerV1/npm-shrinkwrap.json b/_generated/DockerV1/npm-shrinkwrap.json new file mode 100644 index 000000000000..a29ae4742092 --- /dev/null +++ b/_generated/DockerV1/npm-shrinkwrap.json @@ -0,0 +1,1020 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@azure/msal-common": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-9.1.1.tgz", + "integrity": "sha512-we9xR8lvu47fF0h+J8KyXoRy9+G/fPzm3QEa2TrdR3jaVS3LKAyE2qyMuUkNdbVkvzl8Zr9f7l+IUSP22HeqXw==" + }, + "@azure/msal-node": { + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.5.tgz", + "integrity": "sha512-NcVdMfn8Z3ogN+9RjOSF7uwf2Gki5DEJl0BdDSL83KUAgVAobtkZi5W8EqxbJLrTO/ET0jv5DregrcR5qg2pEA==", + "requires": { + "@azure/msal-common": "^9.0.1", + "jsonwebtoken": "^8.5.1", + "uuid": "^8.3.0" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } + } + }, + "@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "requires": { + "@types/node": "*" + } + }, + "@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "requires": { + "@types/node": "*" + } + }, + "@types/jsonwebtoken": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", + "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", + "requires": { + "@types/node": "*" + } + }, + "@types/mocha": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" + }, + "@types/node": { + "version": "16.18.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.4.tgz", + "integrity": "sha512-9qGjJ5GyShZjUfx2ArBIGM+xExdfLvvaCyQR0t6yRXKPcWCVYF/WemtX/uIU3r7FYECXRXkIiw2Vnhn6y8d+pw==" + }, + "@types/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", + "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==" + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "async-mutex": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", + "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", + "requires": { + "tslib": "^2.4.0" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "azure-devops-node-api": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.1.0.tgz", + "integrity": "sha512-VY+G45eNKVJfMIO0uyZfbi4PzUR8JHEfsHQjEUAXUGRkYhhBbhGHjy8cpiyYFxLXc3a4PL5cqgqqV/YD1SaCXg==", + "requires": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, + "azure-pipelines-task-lib": { + "version": "4.0.1-preview", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.0.1-preview.tgz", + "integrity": "sha512-yvxqTzBy6G1U4lDkQgvewGDtd4UxrFTTI49JBByS0vjz55lE/9hmOttFm/BSRCEeLkG0lp3t3ja54bsNBBM4cA==", + "requires": { + "minimatch": "3.0.5", + "mockery": "^1.7.0", + "q": "^1.5.1", + "semver": "^5.1.0", + "shelljs": "^0.8.5", + "sync-request": "6.1.0", + "uuid": "^3.0.1" + }, + "dependencies": { + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "azure-pipelines-tasks-azure-arm-rest-v2": { + "version": "3.224.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest-v2/-/azure-pipelines-tasks-azure-arm-rest-v2-3.224.0.tgz", + "integrity": "sha512-G76zBn1hthbrAdB6AnQbbe9Yh6zLZzv5NBNaBVqMqkb8VvaciqKCLEYAIc2FAdhqy/w7lwqWEPr82dJX59J7aQ==", + "requires": { + "@azure/msal-node": "1.14.5", + "@types/jsonwebtoken": "^8.5.8", + "@types/mocha": "^5.2.7", + "@types/node": "^10.17.0", + "@types/q": "1.5.4", + "async-mutex": "^0.4.0", + "azure-devops-node-api": "^12.0.0", + "azure-pipelines-task-lib": "^3.4.0", + "https-proxy-agent": "^4.0.0", + "jsonwebtoken": "^8.5.1", + "node-fetch": "^2.6.7", + "q": "1.5.1", + "typed-rest-client": "1.8.4", + "xml2js": "0.4.13" + }, + "dependencies": { + "@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + }, + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + }, + "azure-pipelines-task-lib": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz", + "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==", + "requires": { + "minimatch": "3.0.5", + "mockery": "^2.1.0", + "q": "^1.5.1", + "semver": "^5.1.0", + "shelljs": "^0.8.5", + "sync-request": "6.1.0", + "uuid": "^3.0.1" + } + }, + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mockery": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", + "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==" + } + } + }, + "azure-pipelines-tasks-docker-common": { + "version": "2.225.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-docker-common/-/azure-pipelines-tasks-docker-common-2.225.0.tgz", + "integrity": "sha512-bv2WI4guDb8BlCQKOAH2HGf8uTmrnTMHEn4FdRVzyYqR3jLOm0XfjrseFzOgzS2pxMhIJNPE4UOE2YeaBsnw/Q==", + "requires": { + "@types/mocha": "^5.2.7", + "@types/node": "^10.17.0", + "@types/q": "1.5.4", + "@types/uuid": "^8.3.0", + "azure-pipelines-task-lib": "^3.1.0", + "azure-pipelines-tasks-azure-arm-rest-v2": "^3.224.0", + "del": "2.2.0", + "q": "1.4.1" + }, + "dependencies": { + "@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + }, + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + }, + "azure-pipelines-task-lib": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz", + "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==", + "requires": { + "minimatch": "3.0.5", + "mockery": "^2.1.0", + "q": "^1.5.1", + "semver": "^5.1.0", + "shelljs": "^0.8.5", + "sync-request": "6.1.0", + "uuid": "^3.0.1" + }, + "dependencies": { + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + } + } + }, + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mockery": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", + "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==" + }, + "q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==" + } + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "del": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.0.tgz", + "integrity": "sha1-mlDwS/NzJeKDtPROmFM2wlJFa9U=", + "requires": { + "globby": "^4.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "esprima": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.1.tgz", + "integrity": "sha1-KrfRVJ7dBtFNaabBoXVKygLpZX4=" + }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==" + }, + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globby": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", + "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", + "requires": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^6.0.1", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "requires": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + } + }, + "http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "requires": { + "@types/node": "^10.0.3" + }, + "dependencies": { + "@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + } + } + }, + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "requires": { + "agent-base": "5", + "debug": "4" + }, + "dependencies": { + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" + } + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "requires": { + "has": "^1.0.3" + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", + "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mockery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", + "integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ==" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "requires": { + "asap": "~2.0.6" + } + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "requires": { + "resolve": "^1.1.6" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "^7.0.5" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "requires": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + } + }, + "sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "requires": { + "get-port": "^3.1.0" + } + }, + "then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "requires": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + } + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" + }, + "typed-rest-client": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz", + "integrity": "sha512-MyfKKYzk3I6/QQp6e1T50py4qg+c+9BzOEl2rBmQIpStwNUoqQ73An+Tkfy9YuV7O+o2mpVVJpe+fH//POZkbg==", + "requires": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "typescript": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", + "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", + "dev": true + }, + "underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xml2js": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.13.tgz", + "integrity": "sha512-BoxD65qWA2p4znzbaati/Td19uFEc0X6ydj0bFphJO62RrNaGqOyW6ljLWPo3GKDbvW/6dnxAoRX01BsgEWsMA==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": ">=2.4.6" + } + }, + "xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==" + } + } +} diff --git a/_generated/DockerV1/package.json b/_generated/DockerV1/package.json new file mode 100644 index 000000000000..c34153d0e872 --- /dev/null +++ b/_generated/DockerV1/package.json @@ -0,0 +1,16 @@ +{ + "dependencies": { + "@types/mocha": "^5.2.7", + "@types/node": "^16.11.39", + "@types/q": "^1.5.0", + "del": "2.2.0", + "azure-pipelines-task-lib": "^4.0.1-preview", + "azure-pipelines-tasks-docker-common": "2.225.0", + "esprima": "2.7.1", + "agent-base": "^6.0.2", + "js-yaml": "4.1.0" + }, + "devDependencies": { + "typescript": "4.0.2" + } +} diff --git a/_generated/DockerV1/task.json b/_generated/DockerV1/task.json new file mode 100644 index 000000000000..f65edb18ac48 --- /dev/null +++ b/_generated/DockerV1/task.json @@ -0,0 +1,410 @@ +{ + "id": "E28912F1-0114-4464-802A-A3A35437FD16", + "name": "Docker", + "friendlyName": "Docker", + "description": "Build, tag, push, or run Docker images, or run a Docker command", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/docker", + "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=848006)", + "category": "Build", + "visibility": [ + "Build", + "Release" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 1, + "Minor": 238, + "Patch": 0 + }, + "demands": [], + "releaseNotes": "Simplified the task by:
 - Providing an option to simply select or type a command.
 - Retaining the useful input fields and providing an option to pass the rest as an argument to the command.", + "groups": [ + { + "name": "containerRegistry", + "displayName": "Container Registry", + "isExpanded": true, + "visibleRule": "command != logout" + }, + { + "name": "commands", + "displayName": "Commands", + "isExpanded": true + }, + { + "name": "advanced", + "displayName": "Advanced Options", + "isExpanded": false, + "visibleRule": "command != login && command != logout" + } + ], + "inputs": [ + { + "name": "containerregistrytype", + "type": "pickList", + "label": "Container registry type", + "defaultValue": "Azure Container Registry", + "required": true, + "options": { + "Azure Container Registry": "Azure Container Registry", + "Container Registry": "Container Registry" + }, + "groupName": "containerRegistry", + "helpMarkDown": "Select 'Azure Container Registry' to connect to it by using an Azure Service Connection. Select 'Container registry' to connect to Docker Hub or any other private container registry." + }, + { + "name": "addBaseImageData", + "type": "boolean", + "label": "Add base image metadata to image(s)", + "groupName": "commands", + "defaultValue": "true", + "helpMarkDown": "By default base image data like base image name and digest are added which helps with traceability. You can opt out of this default behavior by using this input." + }, + { + "name": "dockerRegistryEndpoint", + "type": "connectedService:dockerregistry", + "label": "Docker registry service connection", + "helpMarkDown": "Select a Docker registry service connection. Required for commands that need to authenticate with a registry.", + "groupName": "containerRegistry", + "visibleRule": "containerregistrytype = Container Registry" + }, + { + "name": "azureSubscriptionEndpoint", + "type": "connectedService:AzureRM", + "label": "Azure subscription", + "helpMarkDown": "Select an Azure subscription", + "groupName": "containerRegistry", + "visibleRule": "containerregistrytype = Azure Container Registry" + }, + { + "name": "azureContainerRegistry", + "label": "Azure container registry", + "type": "pickList", + "helpMarkDown": "Select an Azure Container Registry in the selected Azure Subscription. The container image will be built and pushed to this container registry.", + "visibleRule": "containerregistrytype = Azure Container Registry", + "defaultValue": "", + "groupName": "containerRegistry", + "properties": { + "EditableOptions": "True" + } + }, + { + "name": "command", + "type": "pickList", + "label": "Command", + "defaultValue": "Build an image", + "required": true, + "options": { + "Build an image": "build", + "Tag image": "tag", + "Push an image": "push", + "Run an image": "run", + "login": "login", + "logout": "logout" + }, + "properties": { + "EditableOptions": "True" + }, + "groupName": "commands", + "helpMarkDown": "Select a Docker command." + }, + { + "name": "dockerFile", + "type": "filePath", + "label": "Dockerfile", + "defaultValue": "**/Dockerfile", + "required": true, + "visibleRule": "command = Build an image || command = build", + "groupName": "commands", + "helpMarkDown": "Path to the Dockerfile." + }, + { + "name": "arguments", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "visibleRule": "command != login && command != logout", + "label": "Arguments", + "groupName": "commands", + "helpMarkDown": "Docker command options. In case of 'tag' command, you can specify additional tags for Docker image here." + }, + { + "name": "pushMultipleImages", + "type": "boolean", + "label": "Push multiple images", + "defaultValue": "false", + "visibleRule": "command = Push an image || command = push", + "groupName": "commands", + "helpMarkDown": "Push multiple images by using a text file that contains the names of the Docker images to push. Each image name is contained on its own line.
For example:
Imagename1:tag1
Imagename2:tag2
Imagename3
In case only image name is provided, all tags of the ImageName3 container image will be pushed." + }, + { + "name": "tagMultipleImages", + "type": "boolean", + "label": "Tag multiple images", + "defaultValue": "false", + "visibleRule": "command = Tag image || command = tag", + "groupName": "commands", + "helpMarkDown": "Tag multiple images by using a text file that contains the names of the Docker images to tag. Each image name is contained on its own line.
For example:
Imagename1:tag1
Imagename2:tag2
Imagename3
In case only image name is provided, that image will be tagged as 'latest'." + }, + { + "name": "imageName", + "type": "string", + "label": "Image name", + "defaultValue": "$(Build.Repository.Name):$(Build.BuildId)", + "required": true, + "visibleRule": "command = Build an image || command = build || command = Run an image || command = run || pushMultipleImages = false || tagMultipleImages = false", + "groupName": "commands", + "helpMarkDown": "Name of the Docker image to build, push, or run." + }, + { + "name": "imageNamesPath", + "type": "filePath", + "label": "Image names path", + "required": true, + "visibleRule": "tagMultipleImages = true || pushMultipleImages = true", + "groupName": "commands", + "helpMarkDown": "Path to a text file that contains the names of the Docker images to tag or push. Each image name is contained on its own line." + }, + { + "name": "qualifyImageName", + "type": "boolean", + "label": "Qualify image name", + "defaultValue": "true", + "visibleRule": "command = Build an image || command = build || command = Tag image || command = tag || command = Push an image || command = push || command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "Qualify the image name with the Docker registry service connection's hostname if not otherwise specified." + }, + { + "name": "qualifySourceImageName", + "type": "boolean", + "label": "Qualify source image name", + "defaultValue": "false", + "visibleRule": "command = Tag image || command = tag", + "groupName": "commands", + "helpMarkDown": "Qualify the source image name with the Docker registry service connection's hostname if not otherwise specified." + }, + { + "name": "includeSourceTags", + "type": "boolean", + "label": "Include source tags", + "defaultValue": "false", + "visibleRule": "command = Build an image || command = build || command = Tag image || command = tag || command = Push an image || command = push", + "groupName": "commands", + "helpMarkDown": "Include Git tags when building or pushing the Docker image." + }, + { + "name": "includeLatestTag", + "type": "boolean", + "label": "Include latest tag", + "defaultValue": "false", + "visibleRule": "command = Build an image || command = build", + "groupName": "commands", + "helpMarkDown": "Include the 'latest' tag when building the Docker image." + }, + { + "name": "addDefaultLabels", + "type": "boolean", + "label": "Add default labels", + "defaultValue": "true", + "visibleRule": "addDefaultLabels = false", + "groupName": "commands", + "helpMarkDown": "Add CI/CD metadata like repository, commit, build and release information to the container image by using Docker labels." + }, + { + "name": "useDefaultContext", + "type": "boolean", + "label": "Use default build context", + "defaultValue": "true", + "visibleRule": "command = Build an image || command = build", + "groupName": "commands", + "helpMarkDown": "Set the build context to the directory that contains the Dockerfile." + }, + { + "name": "buildContext", + "type": "filePath", + "label": "Build context", + "visibleRule": "useDefaultContext = false", + "groupName": "commands", + "helpMarkDown": "Path to the build context." + }, + { + "name": "imageDigestFile", + "type": "filePath", + "label": "Image digest file", + "visibleRule": "command = Push an image || command = push", + "groupName": "commands", + "helpMarkDown": "Path to a file that is created and populated with the full image repository digest of the Docker image that was pushed." + }, + { + "name": "containerName", + "type": "string", + "label": "Container name", + "visibleRule": "command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "Name of the Docker container to run." + }, + { + "name": "ports", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "Ports", + "visibleRule": "command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "Ports in the Docker container to publish to the host. Specify each host-port:container-port binding on a new line." + }, + { + "name": "volumes", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "Volumes", + "visibleRule": "command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "Volumes to mount from the host. Specify each host-dir:container-dir on a new line." + }, + { + "name": "envVars", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "Environment variables", + "visibleRule": "command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "Environment variables for the Docker container. Specify each name=value pair on a new line." + }, + { + "name": "workingDirectory", + "type": "string", + "label": "Working directory", + "visibleRule": "command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "The working directory for the Docker container." + }, + { + "name": "entrypointOverride", + "type": "string", + "label": "Entry point override", + "visibleRule": "command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "Override the default entry point for the Docker container." + }, + { + "name": "containerCommand", + "type": "string", + "label": "Container command", + "visibleRule": "command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "The docker run command first creates a writeable container layer over the specified image, and then starts it by using the specified run command. For example, if the image contains a simple Python Flask web application you can specify 'python app.py' to launch the web application." + }, + { + "name": "runInBackground", + "type": "boolean", + "label": "Run in background", + "defaultValue": "true", + "visibleRule": "command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "Run the Docker container in the background." + }, + { + "name": "restartPolicy", + "type": "pickList", + "label": "Restart policy", + "defaultValue": "no", + "required": true, + "options": { + "no": "No", + "onFailure": "On failure", + "always": "Always", + "unlessStopped": "Unless stopped" + }, + "visibleRule": "runInBackground = true", + "groupName": "commands", + "helpMarkDown": "Select a restart policy." + }, + { + "name": "maxRestartRetries", + "type": "string", + "label": "Maximum restart retries", + "visibleRule": "runInBackground = true && restartPolicy = onFailure", + "groupName": "commands", + "helpMarkDown": "The maximum number of restart retries the Docker daemon attempts." + }, + { + "name": "dockerHostEndpoint", + "type": "connectedService:dockerhost", + "label": "Docker host service connection", + "helpMarkDown": "Select a Docker host service connection. Defaults to the agent's host.", + "groupName": "advanced" + }, + { + "name": "enforceDockerNamingConvention", + "type": "boolean", + "label": "Force image name to follow Docker naming convention", + "required": false, + "defaultValue": "true", + "helpMarkDown": "If enabled Docker image name will be modified to follow Docker naming convention. Converts upper case character to lower case and removes spaces in image name.", + "groupName": "advanced" + }, + { + "name": "memoryLimit", + "type": "string", + "label": "Memory limit", + "helpMarkDown": "The maximum amount of memory available to the container as a integer with optional suffixes like '2GB'.", + "groupName": "advanced" + } + ], + "dataSourceBindings": [ + { + "target": "azureContainerRegistry", + "endpointId": "$(azureSubscriptionEndpoint)", + "dataSourceName": "AzureRMContainerRegistries", + "resultTemplate": "{\"Value\":\"{{{properties.loginServer}}}\",\"DisplayValue\":\"{{{name}}}\"}" + } + ], + "outputVariables": [ + { + "name": "DockerOutput", + "description": "Stores the output of the docker command" + }, + { + "name": "DockerOutputPath", + "description": "The path of the file which contains the output of the build command." + } + ], + "instanceNameFormat": "$(command)", + "showEnvironmentVariables": true, + "execution": { + "Node10": { + "target": "container.js" + }, + "Node16": { + "target": "container.js" + } + }, + "messages": { + "ConnectingToDockerHost": "DOCKER_HOST variable is set. Docker will try to connect to the Docker host: %s", + "ContainerPatternFound": "Pattern found in Docker filepath parameter", + "ContainerPatternNotFound": "No pattern found in Docker filepath parameter", + "ContainerDockerFileNotFound": "No Dockerfile matching %s was found.", + "DockerHostVariableWarning": "DOCKER_HOST variable is set. Please ensure that the Docker daemon is running on: %s", + "NoImagesInImageNamesFile": "At least one image name is expected in file '%s'.", + "CantWriteDataToFile": "Can not write data to the file %s. Error: %s", + "NoDataWrittenOnFile": "No data was written into the file %s", + "FileContentSynced": "Synced the file content to the disk. The content is %s.", + "DockerRegistryNotFound": "Docker registry service connection not specified.", + "OutputVariableDataSizeExceeded": "Output variable not set as Docker command output exceeded the maximum supported length. Output length: %s, Maximum supported length: %s", + "WritingDockerConfigToTempFile": "Writing Docker config to temp file. File path: %s, Docker config: %s" + }, + "_buildConfigMapping": { + "Default": "1.238.0", + "Node20_229_2": "1.238.1" + } +} \ No newline at end of file diff --git a/_generated/DockerV1/task.loc.json b/_generated/DockerV1/task.loc.json new file mode 100644 index 000000000000..c6ac35b74037 --- /dev/null +++ b/_generated/DockerV1/task.loc.json @@ -0,0 +1,410 @@ +{ + "id": "E28912F1-0114-4464-802A-A3A35437FD16", + "name": "Docker", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/docker", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Build", + "visibility": [ + "Build", + "Release" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 1, + "Minor": 238, + "Patch": 0 + }, + "demands": [], + "releaseNotes": "ms-resource:loc.releaseNotes", + "groups": [ + { + "name": "containerRegistry", + "displayName": "ms-resource:loc.group.displayName.containerRegistry", + "isExpanded": true, + "visibleRule": "command != logout" + }, + { + "name": "commands", + "displayName": "ms-resource:loc.group.displayName.commands", + "isExpanded": true + }, + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": false, + "visibleRule": "command != login && command != logout" + } + ], + "inputs": [ + { + "name": "containerregistrytype", + "type": "pickList", + "label": "ms-resource:loc.input.label.containerregistrytype", + "defaultValue": "Azure Container Registry", + "required": true, + "options": { + "Azure Container Registry": "Azure Container Registry", + "Container Registry": "Container Registry" + }, + "groupName": "containerRegistry", + "helpMarkDown": "ms-resource:loc.input.help.containerregistrytype" + }, + { + "name": "addBaseImageData", + "type": "boolean", + "label": "ms-resource:loc.input.label.addBaseImageData", + "groupName": "commands", + "defaultValue": "true", + "helpMarkDown": "ms-resource:loc.input.help.addBaseImageData" + }, + { + "name": "dockerRegistryEndpoint", + "type": "connectedService:dockerregistry", + "label": "ms-resource:loc.input.label.dockerRegistryEndpoint", + "helpMarkDown": "ms-resource:loc.input.help.dockerRegistryEndpoint", + "groupName": "containerRegistry", + "visibleRule": "containerregistrytype = Container Registry" + }, + { + "name": "azureSubscriptionEndpoint", + "type": "connectedService:AzureRM", + "label": "ms-resource:loc.input.label.azureSubscriptionEndpoint", + "helpMarkDown": "ms-resource:loc.input.help.azureSubscriptionEndpoint", + "groupName": "containerRegistry", + "visibleRule": "containerregistrytype = Azure Container Registry" + }, + { + "name": "azureContainerRegistry", + "label": "ms-resource:loc.input.label.azureContainerRegistry", + "type": "pickList", + "helpMarkDown": "ms-resource:loc.input.help.azureContainerRegistry", + "visibleRule": "containerregistrytype = Azure Container Registry", + "defaultValue": "", + "groupName": "containerRegistry", + "properties": { + "EditableOptions": "True" + } + }, + { + "name": "command", + "type": "pickList", + "label": "ms-resource:loc.input.label.command", + "defaultValue": "Build an image", + "required": true, + "options": { + "Build an image": "build", + "Tag image": "tag", + "Push an image": "push", + "Run an image": "run", + "login": "login", + "logout": "logout" + }, + "properties": { + "EditableOptions": "True" + }, + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.command" + }, + { + "name": "dockerFile", + "type": "filePath", + "label": "ms-resource:loc.input.label.dockerFile", + "defaultValue": "**/Dockerfile", + "required": true, + "visibleRule": "command = Build an image || command = build", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.dockerFile" + }, + { + "name": "arguments", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "visibleRule": "command != login && command != logout", + "label": "ms-resource:loc.input.label.arguments", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.arguments" + }, + { + "name": "pushMultipleImages", + "type": "boolean", + "label": "ms-resource:loc.input.label.pushMultipleImages", + "defaultValue": "false", + "visibleRule": "command = Push an image || command = push", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.pushMultipleImages" + }, + { + "name": "tagMultipleImages", + "type": "boolean", + "label": "ms-resource:loc.input.label.tagMultipleImages", + "defaultValue": "false", + "visibleRule": "command = Tag image || command = tag", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.tagMultipleImages" + }, + { + "name": "imageName", + "type": "string", + "label": "ms-resource:loc.input.label.imageName", + "defaultValue": "$(Build.Repository.Name):$(Build.BuildId)", + "required": true, + "visibleRule": "command = Build an image || command = build || command = Run an image || command = run || pushMultipleImages = false || tagMultipleImages = false", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.imageName" + }, + { + "name": "imageNamesPath", + "type": "filePath", + "label": "ms-resource:loc.input.label.imageNamesPath", + "required": true, + "visibleRule": "tagMultipleImages = true || pushMultipleImages = true", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.imageNamesPath" + }, + { + "name": "qualifyImageName", + "type": "boolean", + "label": "ms-resource:loc.input.label.qualifyImageName", + "defaultValue": "true", + "visibleRule": "command = Build an image || command = build || command = Tag image || command = tag || command = Push an image || command = push || command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.qualifyImageName" + }, + { + "name": "qualifySourceImageName", + "type": "boolean", + "label": "ms-resource:loc.input.label.qualifySourceImageName", + "defaultValue": "false", + "visibleRule": "command = Tag image || command = tag", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.qualifySourceImageName" + }, + { + "name": "includeSourceTags", + "type": "boolean", + "label": "ms-resource:loc.input.label.includeSourceTags", + "defaultValue": "false", + "visibleRule": "command = Build an image || command = build || command = Tag image || command = tag || command = Push an image || command = push", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.includeSourceTags" + }, + { + "name": "includeLatestTag", + "type": "boolean", + "label": "ms-resource:loc.input.label.includeLatestTag", + "defaultValue": "false", + "visibleRule": "command = Build an image || command = build", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.includeLatestTag" + }, + { + "name": "addDefaultLabels", + "type": "boolean", + "label": "ms-resource:loc.input.label.addDefaultLabels", + "defaultValue": "true", + "visibleRule": "addDefaultLabels = false", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.addDefaultLabels" + }, + { + "name": "useDefaultContext", + "type": "boolean", + "label": "ms-resource:loc.input.label.useDefaultContext", + "defaultValue": "true", + "visibleRule": "command = Build an image || command = build", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.useDefaultContext" + }, + { + "name": "buildContext", + "type": "filePath", + "label": "ms-resource:loc.input.label.buildContext", + "visibleRule": "useDefaultContext = false", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.buildContext" + }, + { + "name": "imageDigestFile", + "type": "filePath", + "label": "ms-resource:loc.input.label.imageDigestFile", + "visibleRule": "command = Push an image || command = push", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.imageDigestFile" + }, + { + "name": "containerName", + "type": "string", + "label": "ms-resource:loc.input.label.containerName", + "visibleRule": "command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.containerName" + }, + { + "name": "ports", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "ms-resource:loc.input.label.ports", + "visibleRule": "command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.ports" + }, + { + "name": "volumes", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "ms-resource:loc.input.label.volumes", + "visibleRule": "command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.volumes" + }, + { + "name": "envVars", + "type": "multiLine", + "properties": { + "resizable": "true", + "rows": "2" + }, + "label": "ms-resource:loc.input.label.envVars", + "visibleRule": "command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.envVars" + }, + { + "name": "workingDirectory", + "type": "string", + "label": "ms-resource:loc.input.label.workingDirectory", + "visibleRule": "command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.workingDirectory" + }, + { + "name": "entrypointOverride", + "type": "string", + "label": "ms-resource:loc.input.label.entrypointOverride", + "visibleRule": "command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.entrypointOverride" + }, + { + "name": "containerCommand", + "type": "string", + "label": "ms-resource:loc.input.label.containerCommand", + "visibleRule": "command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.containerCommand" + }, + { + "name": "runInBackground", + "type": "boolean", + "label": "ms-resource:loc.input.label.runInBackground", + "defaultValue": "true", + "visibleRule": "command = Run an image || command = run", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.runInBackground" + }, + { + "name": "restartPolicy", + "type": "pickList", + "label": "ms-resource:loc.input.label.restartPolicy", + "defaultValue": "no", + "required": true, + "options": { + "no": "No", + "onFailure": "On failure", + "always": "Always", + "unlessStopped": "Unless stopped" + }, + "visibleRule": "runInBackground = true", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.restartPolicy" + }, + { + "name": "maxRestartRetries", + "type": "string", + "label": "ms-resource:loc.input.label.maxRestartRetries", + "visibleRule": "runInBackground = true && restartPolicy = onFailure", + "groupName": "commands", + "helpMarkDown": "ms-resource:loc.input.help.maxRestartRetries" + }, + { + "name": "dockerHostEndpoint", + "type": "connectedService:dockerhost", + "label": "ms-resource:loc.input.label.dockerHostEndpoint", + "helpMarkDown": "ms-resource:loc.input.help.dockerHostEndpoint", + "groupName": "advanced" + }, + { + "name": "enforceDockerNamingConvention", + "type": "boolean", + "label": "ms-resource:loc.input.label.enforceDockerNamingConvention", + "required": false, + "defaultValue": "true", + "helpMarkDown": "ms-resource:loc.input.help.enforceDockerNamingConvention", + "groupName": "advanced" + }, + { + "name": "memoryLimit", + "type": "string", + "label": "ms-resource:loc.input.label.memoryLimit", + "helpMarkDown": "ms-resource:loc.input.help.memoryLimit", + "groupName": "advanced" + } + ], + "dataSourceBindings": [ + { + "target": "azureContainerRegistry", + "endpointId": "$(azureSubscriptionEndpoint)", + "dataSourceName": "AzureRMContainerRegistries", + "resultTemplate": "{\"Value\":\"{{{properties.loginServer}}}\",\"DisplayValue\":\"{{{name}}}\"}" + } + ], + "outputVariables": [ + { + "name": "DockerOutput", + "description": "Stores the output of the docker command" + }, + { + "name": "DockerOutputPath", + "description": "The path of the file which contains the output of the build command." + } + ], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "showEnvironmentVariables": true, + "execution": { + "Node10": { + "target": "container.js" + }, + "Node16": { + "target": "container.js" + } + }, + "messages": { + "ConnectingToDockerHost": "ms-resource:loc.messages.ConnectingToDockerHost", + "ContainerPatternFound": "ms-resource:loc.messages.ContainerPatternFound", + "ContainerPatternNotFound": "ms-resource:loc.messages.ContainerPatternNotFound", + "ContainerDockerFileNotFound": "ms-resource:loc.messages.ContainerDockerFileNotFound", + "DockerHostVariableWarning": "ms-resource:loc.messages.DockerHostVariableWarning", + "NoImagesInImageNamesFile": "ms-resource:loc.messages.NoImagesInImageNamesFile", + "CantWriteDataToFile": "ms-resource:loc.messages.CantWriteDataToFile", + "NoDataWrittenOnFile": "ms-resource:loc.messages.NoDataWrittenOnFile", + "FileContentSynced": "ms-resource:loc.messages.FileContentSynced", + "DockerRegistryNotFound": "ms-resource:loc.messages.DockerRegistryNotFound", + "OutputVariableDataSizeExceeded": "ms-resource:loc.messages.OutputVariableDataSizeExceeded", + "WritingDockerConfigToTempFile": "ms-resource:loc.messages.WritingDockerConfigToTempFile" + }, + "_buildConfigMapping": { + "Default": "1.238.0", + "Node20_229_2": "1.238.1" + } +} \ No newline at end of file diff --git a/_generated/DockerV1/tsconfig.json b/_generated/DockerV1/tsconfig.json new file mode 100644 index 000000000000..79a868c8d1e3 --- /dev/null +++ b/_generated/DockerV1/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + }, + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/_generated/DockerV1/utils.ts b/_generated/DockerV1/utils.ts new file mode 100644 index 000000000000..87e52a73fe2b --- /dev/null +++ b/_generated/DockerV1/utils.ts @@ -0,0 +1,126 @@ +"use strict"; +import * as tl from "azure-pipelines-task-lib/task"; +import * as fs from "fs"; +import ContainerConnection from "azure-pipelines-tasks-docker-common/containerconnection"; +import * as sourceUtils from "azure-pipelines-tasks-docker-common/sourceutils"; +import * as imageUtils from "azure-pipelines-tasks-docker-common/containerimageutils"; +import * as fileutils from "azure-pipelines-tasks-docker-common/fileutils"; +import * as path from "path"; +import * as os from "os"; + +export function getImageNames(): string[] { + let imageNamesFilePath = tl.getPathInput("imageNamesPath", /* required */ true, /* check exists */ true); + var enforceDockerNamingConvention = tl.getBoolInput("enforceDockerNamingConvention"); + let imageNames = fs.readFileSync(imageNamesFilePath, "utf-8").trim().replace(/\r\n|\r/gm, "\n").split("\n"); // \r\n windows and \r mac new line chars + if (!imageNames.length) { + throw new Error(tl.loc("NoImagesInImageNamesFile", imageNamesFilePath)); + } + + return imageNames.map(n => (enforceDockerNamingConvention === true)? imageUtils.generateValidImageName(n): n); +} + +export function getImageName(): string { + var enforceDockerNamingConvention = tl.getBoolInput("enforceDockerNamingConvention"); + var imageName = tl.getInput("imageName", true); + if(enforceDockerNamingConvention === true) { + return imageUtils.generateValidImageName(imageName); + } + + return imageName; +} + +export function getImageMappings(connection: ContainerConnection, imageNames: string[], additionalImageTags: string[]): ImageMapping[] { + let qualifyImageName = tl.getBoolInput("qualifyImageName"); + let imageInfos: ImageInfo[] = imageNames.map(imageName => { + let qualifiedImageName = qualifyImageName ? connection.getQualifiedImageNameIfRequired(imageName) : imageName; + return { + sourceImageName: imageName, + qualifiedImageName: qualifiedImageName, + baseImageName: imageUtils.imageNameWithoutTag(qualifiedImageName), + taggedImages: [] + }; + }); + + let includeSourceTags = tl.getBoolInput("includeSourceTags"); + + let sourceTags: string[] = []; + if (includeSourceTags) { + sourceTags = sourceUtils.getSourceTags(); + } + + // For each of the image names, generate a mapping from the source image name to the target image. The same source image name + // may be listed more than once if there are multiple tags. The target image names will be tagged based on the task configuration. + for (let i = 0; i < imageInfos.length; i++) { + let imageInfo = imageInfos[i]; + imageInfo.taggedImages.push(imageInfo.qualifiedImageName); + sourceTags.forEach(tag => { + imageInfo.taggedImages.push(imageInfo.baseImageName + ":" + tag); + }); + additionalImageTags.forEach(tag => { + imageInfo.taggedImages.push(tag); + }); + } + + // Flatten the image infos into a mapping between the source images and each of their tagged target images + let sourceToTargetMapping: ImageMapping[] = []; + imageInfos.forEach(imageInfo => { + imageInfo.taggedImages.forEach(taggedImage => { + sourceToTargetMapping.push({ + sourceImageName: imageInfo.sourceImageName, + targetImageName: taggedImage + }); + }); + }); + + return sourceToTargetMapping; +} + + +function getTaskOutputDir(command: string): string { + let tempDirectory = tl.getVariable('agent.tempDirectory') || os.tmpdir(); + let taskOutputDir = path.join(tempDirectory, "task_outputs"); + return taskOutputDir; +} + +export function writeTaskOutput(commandName: string, output: string): string { + let taskOutputDir = getTaskOutputDir(commandName); + if (!fs.existsSync(taskOutputDir)) { + fs.mkdirSync(taskOutputDir); + } + + let outputFileName = commandName + "_" + Date.now() + ".txt"; + let taskOutputPath = path.join(taskOutputDir, outputFileName); + if (fileutils.writeFileSync(taskOutputPath, output) == 0) { + tl.warning(tl.loc('NoDataWrittenOnFile', taskOutputPath)); + } + + return taskOutputPath; +} + + +interface ImageInfo { + /** + * The original, unmodified, image name provided as input to the task + */ + sourceImageName: string; + + /** + * The source image name, qualified with the connection endpoint if configured to do so. + */ + qualifiedImageName: string; + + /** + * The qualified image name with any tagging removed. + */ + baseImageName: string; + + /** + * The collection of qualifed and tagged images associated with the source image. + */ + taggedImages: string[]; +} + +export interface ImageMapping { + sourceImageName: string; + targetImageName: string; +} \ No newline at end of file diff --git a/_generated/DockerV1_Node20/task.json b/_generated/DockerV1_Node20/task.json index 49cd166fc06e..d197baf4cf00 100644 --- a/_generated/DockerV1_Node20/task.json +++ b/_generated/DockerV1_Node20/task.json @@ -13,8 +13,8 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 231, - "Patch": 0 + "Minor": 238, + "Patch": 1 }, "demands": [], "releaseNotes": "Simplified the task by:
 - Providing an option to simply select or type a command.
 - Retaining the useful input fields and providing an option to pass the rest as an argument to the command.", @@ -408,7 +408,7 @@ "WritingDockerConfigToTempFile": "Writing Docker config to temp file. File path: %s, Docker config: %s" }, "_buildConfigMapping": { - "Default": "1.225.1", - "Node20_229_2": "1.231.0" + "Default": "1.238.0", + "Node20_229_2": "1.238.1" } } \ No newline at end of file diff --git a/_generated/DockerV1_Node20/task.loc.json b/_generated/DockerV1_Node20/task.loc.json index 6f85bc33b5d3..fd2fc960559a 100644 --- a/_generated/DockerV1_Node20/task.loc.json +++ b/_generated/DockerV1_Node20/task.loc.json @@ -13,8 +13,8 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 231, - "Patch": 0 + "Minor": 238, + "Patch": 1 }, "demands": [], "releaseNotes": "ms-resource:loc.releaseNotes", @@ -408,7 +408,7 @@ "WritingDockerConfigToTempFile": "ms-resource:loc.messages.WritingDockerConfigToTempFile" }, "_buildConfigMapping": { - "Default": "1.225.1", - "Node20_229_2": "1.231.0" + "Default": "1.238.0", + "Node20_229_2": "1.238.1" } } \ No newline at end of file