diff --git a/.ci-mgmt.yaml b/.ci-mgmt.yaml
deleted file mode 100644
index a85cfc6..0000000
--- a/.ci-mgmt.yaml
+++ /dev/null
@@ -1,29 +0,0 @@
-template: native
-provider: docker-build
-major-version: 0
-providerDefaultBranch: main
-providerVersion: github.com/pulumi/pulumi-docker-build/provider.Version
-aws: true
-modulePath: .
-gcp: true
-sdkModuleDir: sdk/go/dockerbuild
-parallel: 3
-esc:
- enabled: true
-envOverride:
- AWS_REGION: us-west-2
- PULUMI_API: "https://api.pulumi-staging.io"
- ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
- ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
- ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
- ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
- AZURE_LOCATION: westus
- DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}
- GOOGLE_CI_SERVICE_ACCOUNT_EMAIL: pulumi-ci@pulumi-ci-gcp-provider.iam.gserviceaccount.com
- GOOGLE_CI_WORKLOAD_IDENTITY_POOL: pulumi-ci
- GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER: pulumi-ci
- GOOGLE_PROJECT: pulumi-ci-gcp-provider
- GOOGLE_PROJECT_NUMBER: 895284651812
- GOOGLE_REGION: us-central1
- GOOGLE_ZONE: us-central1-a
- DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
diff --git a/.config/mise.lock b/.config/mise.lock
deleted file mode 100644
index ab057e7..0000000
--- a/.config/mise.lock
+++ /dev/null
@@ -1,79 +0,0 @@
-[[tools.dotnet]]
-version = "8.0.414"
-backend = "asdf:dotnet"
-
-[[tools."github:pulumi/pulumictl"]]
-version = "0.0.50"
-backend = "github:pulumi/pulumictl"
-
-[tools."github:pulumi/pulumictl".platforms.linux-x64]
-checksum = "blake3:c128dd74993f779c613296fe7cd21c20cbd323f24e59cb76e007620660b60348"
-size = 27744219
-url = "https://github.com/pulumi/pulumictl/releases/download/v0.0.50/pulumictl-v0.0.50-linux-amd64.tar.gz"
-
-[[tools."github:pulumi/schema-tools"]]
-version = "0.6.0"
-backend = "github:pulumi/schema-tools"
-
-[tools."github:pulumi/schema-tools".platforms.linux-x64]
-checksum = "blake3:82dfe616fee18b4258f6e3d2dc3c4e9f14afd43a0a4cc33eff2d2a04088d6ca3"
-size = 14282746
-url = "https://github.com/pulumi/schema-tools/releases/download/v0.6.0/schema-tools-v0.6.0-linux-amd64.tar.gz"
-
-[[tools.go]]
-version = "1.24.1"
-backend = "core:go"
-
-[tools.go.platforms.linux-x64]
-checksum = "sha256:cb2396bae64183cdccf81a9a6df0aea3bce9511fc21469fb89a0c00470088073"
-size = 78503123
-url = "https://dl.google.com/go/go1.24.1.linux-amd64.tar.gz"
-
-[[tools.golangci-lint]]
-version = "1.64.8"
-backend = "aqua:golangci/golangci-lint"
-
-[tools.golangci-lint.platforms.linux-x64]
-checksum = "sha256:b6270687afb143d019f387c791cd2a6f1cb383be9b3124d241ca11bd3ce2e54e"
-size = 12364828
-url = "https://github.com/golangci/golangci-lint/releases/download/v1.64.8/golangci-lint-1.64.8-linux-amd64.tar.gz"
-
-[[tools.gradle]]
-version = "7.6.6"
-backend = "aqua:gradle/gradle"
-
-[tools.gradle.platforms.linux-x64]
-checksum = "blake3:5cad8fc455b720b68a0bd2907d435e2919581708243f84f27845fe8812a09323"
-size = 128439774
-url = "https://github.com/gradle/gradle-distributions/releases/download/v7.6.6/gradle-7.6.6-bin.zip"
-
-[[tools.java]]
-version = "corretto-11.0.28.6.1"
-backend = "core:java"
-
-[tools.java.platforms.linux-x64]
-checksum = "sha256:70734c46e0bbeb7f45b721756ba0b2f1f1e1ef85a11e10d5a488f06b257dadd9"
-size = 195648709
-url = "https://corretto.aws/downloads/resources/11.0.28.6.1/amazon-corretto-11.0.28.6.1-linux-x64.tar.gz"
-
-[[tools.node]]
-version = "20.19.5"
-backend = "core:node"
-
-[tools.node.platforms.linux-x64]
-checksum = "sha256:4eba5fbe1fb10753bc06e42f001a91c5cec16798b7764a3e9257adc59af47fe1"
-size = 47041607
-url = "https://nodejs.org/dist/v20.19.5/node-v20.19.5-linux-x64.tar.gz"
-
-[[tools.pulumi]]
-version = "3.192.0"
-backend = "aqua:pulumi/pulumi"
-
-[tools.pulumi.platforms.linux-x64]
-checksum = "sha512:6351213bee02ade5b76407d9b43cdb243fa461ca38231b03410de5aa1f697e55ab6467da2a9e37ebbff7be6cd3485d833e9ad8f29d4de6919bbdd471fb25e45a"
-size = 92867578
-url = "https://github.com/pulumi/pulumi/releases/download/v3.192.0/pulumi-v3.192.0-linux-x64.tar.gz"
-
-[[tools.python]]
-version = "3.11.8"
-backend = "core:python"
diff --git a/.config/mise.test.toml b/.config/mise.test.toml
deleted file mode 100644
index ce00eb5..0000000
--- a/.config/mise.test.toml
+++ /dev/null
@@ -1,7 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten when regenerated by https://github.com/pulumi/ci-mgmt
-
-# Overrides tool versions for test workflows
-
-[tools]
-# always use pulumi latest for tests
-pulumi = "latest"
diff --git a/.config/mise.toml b/.config/mise.toml
deleted file mode 100644
index 41ac5d7..0000000
--- a/.config/mise.toml
+++ /dev/null
@@ -1,27 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten when regenerated by https://github.com/pulumi/ci-mgmt
-# You can create your own root-level mise.toml file to override/augment this. See https://mise.jdx.dev/configuration.html
-
-[env]
-_.source = "{{config_root}}/scripts/get-versions.sh"
-
-[tools]
-
-# Runtimes
-# TODO: we may not need `get_env` once https://github.com/jdx/mise/discussions/6339 is fixed
-go = "{{ get_env(name='GO_VERSION_MISE', default='latest') }}"
-node = '20'
-python = '3.11.8'
-dotnet = '8.0'
-# Corretto version used as Java SE/OpenJDK version no longer offered
-java = 'corretto-11'
-
-# Executable tools
-pulumi = "{{ get_env(name='PULUMI_VERSION_MISE', default='latest') }}"
-"github:pulumi/pulumictl" = 'latest'
-"github:pulumi/schema-tools" = "latest"
-gradle = '7.6'
-golangci-lint = "1.64.8" # See note about about overrides if you need to customize this.
-
-[settings]
-experimental = true # Required for Go binaries (e.g. pulumictl).
-lockfile = true
diff --git a/.devcontainer b/.devcontainer
deleted file mode 160000
index dce1e31..0000000
--- a/.devcontainer
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit dce1e316309882a657bcc1e32e562706db56a15d
diff --git a/.devcontainer.json b/.devcontainer.json
deleted file mode 100644
index 6a46e60..0000000
--- a/.devcontainer.json
+++ /dev/null
@@ -1,68 +0,0 @@
-// Reference:
-// - https://containers.dev/features
-// - https://containers.dev/implementors/features
-// - https://code.visualstudio.com/docs/getstarted/settings
-{
- "name": "pulumi",
- "image": "ghcr.io/pulumi/devcontainer",
- "customizations": {
- "vscode": {
- "settings": [
- "go.testTags", "all",
- "go.buildTags", "all",
- "editor.minimap.enabled", false,
- "explorer.openEditors.visible", 1,
- "editor.quickSuggestionsDelay", 0,
- "editor.suggestSelection", "first",
- "editor.snippetSuggestions", "top",
- "editor.gotoLocation.multipleReferences", "goto",
- "editor.gotoLocation.multipleDefinitions", "goto",
- "editor.gotoLocation.multipleDeclarations", "goto",
- "editor.gotoLocation.multipleImplementations", "goto",
- "editor.gotoLocation.multipleTypeDefinitions", "goto",
- "editor.terminal.integrated.shell.linux", "/usr/bin/zsh",
- "files.trimTrailingWhitespace", true,
- "files.trimFinalNewlines", true
- ],
- "extensions": [
- "golang.go",
- "vscodevim.vim",
- "github.copilot",
- "ms-python.python",
- "jetpack-io.devbox",
- "redhat.vscode-yaml",
- "esbenp.prettier-vscode",
- "ms-vscode.makefile-tools",
- "ms-azuretools.vscode-docker",
- "github.vscode-pull-request-github",
- "ms-vscode-remote.remote-containers",
- "visualstudioexptteam.vscodeintellicode",
- "bierner.markdown-preview-github-styles"
- ]
- }
- },
- "features": {
- "ghcr.io/devcontainers/features/common-utils:2": {
- "installZsh": true,
- "configureZshAsDefaultShell": true,
- "installOhMyZsh": true,
- "installOhMyZshConfig": true,
- "upgradePackages": true,
- "nonFreePackages": true,
- "username": "vscode",
- "userUid": "automatic",
- "userGid": "automatic"
- },
- "ghcr.io/devcontainers/features/docker-outside-of-docker:1": {
- "moby": false,
- "installDockerBuildx": true,
- "version": "latest",
- "dockerDashComposeVersion": "v2"
- }
- },
- "postCreateCommand": "git submodule update --init --recursive",
- "remoteUser": "vscode",
- "forwardPorts": [1313],
- "runArgs": ["--network=host"]
-}
-
diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index e01d77b..0000000
--- a/.gitattributes
+++ /dev/null
@@ -1,2 +0,0 @@
-sdk/**/* linguist-generated=true
-provider/internal/mock*.go linguist-generated=true
diff --git a/.github/ISSUE_TEMPLATE/bug.yaml b/.github/ISSUE_TEMPLATE/bug.yaml
deleted file mode 100644
index 63d7072..0000000
--- a/.github/ISSUE_TEMPLATE/bug.yaml
+++ /dev/null
@@ -1,69 +0,0 @@
-name: Bug Report
-description: Report something that's not working correctly
-labels: ["kind/bug", "needs-triage"]
-body:
- - type: markdown
- attributes:
- value: |
- Thanks for taking the time to fill out this bug report!
- You can also ask questions on our [Community Slack](https://slack.pulumi.com/).
- - type: textarea
- id: what-happened
- attributes:
- label: Describe what happened
- description: Please summarize what happened, including what Pulumi commands you ran, as well as
- an inline snippet of any relevant error or console output.
- validations:
- required: true
- - type: textarea
- id: sample-program
- attributes:
- label: Sample program
- description: |
- Provide a reproducible sample program
- If this is a bug you encountered while running a Pulumi command, please provide us with a minimal,
- self-contained Pulumi program that reproduces this behavior so that we can investigate on our end.
- Without a functional reproduction, we will not be able to prioritize this bug.
- **Note:** If the program output is more than a few lines, please send us a Gist or a link to a file.
-
- validations:
- required: true
- - type: textarea
- id: log-output
- attributes:
- label: Log output
- description: |
- How to Submit Logs
- If this is something that is dependent on your environment, please also provide us with the output of
- `pulumi up --logtostderr --logflow -v=10` from the root of your project.
- We may also ask you to supply us with debug output following [these steps](https://www.pulumi.com/docs/using-pulumi/pulumi-packages/debugging-provider-packages/).
- **Note:** If the log output is more than a few lines, please send us a Gist or a link to a file.
-
- - type: textarea
- id: resources
- attributes:
- label: Affected Resource(s)
- description: Please list the affected Pulumi Resource(s) or Function(s).
- validations:
- required: false
- - type: textarea
- id: versions
- attributes:
- label: Output of `pulumi about`
- description: Provide the output of `pulumi about` from the root of your project.
- validations:
- required: true
- - type: textarea
- id: ctx
- attributes:
- label: Additional context
- description: Anything else you would like to add?
- validations:
- required: false
- - type: textarea
- id: voting
- attributes:
- label: Contributing
- value: |
- Vote on this issue by adding a 👍 reaction.
- To contribute a fix for this issue, leave a comment (and link to your pull request, if you've opened one already).
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/epic.md b/.github/ISSUE_TEMPLATE/epic.md
deleted file mode 100644
index 27d4e3a..0000000
--- a/.github/ISSUE_TEMPLATE/epic.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-name: Epic
-about: Tracks a shippable unit of work
-title: '[Epic] {your-title-here}'
-labels: kind/epic
-projects: ['pulumi/32']
-assignees: ''
-type: Epic
----
-
-## Overview
-
-
-## Key KPIs
-
-
-## Key Stakeholders
-- Product and Engineering:
-- Documentation:
-- Marketing/Partnerships:
-- Customers:
-
-## Key Deliverables
-
-
-### References 📔
-
-
-- [ ] Project View
-- [ ] PR/FAQ
-- [ ] Design Doc
-- [ ] UX Designs
-- [ ] Decision Log
-
-
diff --git a/.github/actions/esc-action/action.yaml b/.github/actions/esc-action/action.yaml
deleted file mode 100644
index 86c88f0..0000000
--- a/.github/actions/esc-action/action.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-name: "Load secrets"
-description: |
- This is a temporary action which assists with our migration to ESC. Instead
- of surrounding every step that references secrets with an "if ESC" block, we
- instead modify those steps to consume their secrets from this step's outputs.
- Then, later, we can replace this action with esc-action to actually load
- secrets from ESC.
-inputs: {}
-outputs: {}
-runs:
- using: "node20"
- main: "index.js"
diff --git a/.github/actions/esc-action/index.js b/.github/actions/esc-action/index.js
deleted file mode 100644
index 2299fdc..0000000
--- a/.github/actions/esc-action/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-const fs = require("fs");
-
-const file = process.env["GITHUB_OUTPUT"];
-var stream = fs.createWriteStream(file, { flags: "a" });
-
-for (const [name, value] of Object.entries(process.env)) {
- try {
- stream.write(`${name}<-
- {
- echo 'SCHEMA_CHANGES<> "$GITHUB_ENV"
- env:
- GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
- - if: github.event_name == 'pull_request' && github.actor != 'dependabot[bot]'
- name: Comment on PR with Details of Schema Check
- uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
- with:
- message: |
- ${{ env.SCHEMA_CHANGES }}
- comment-tag: schemaCheck
- github-token: ${{ secrets.GITHUB_TOKEN }}
- - if: contains(env.SCHEMA_CHANGES, 'Looking good! No breaking changes found.') &&
- github.actor == 'pulumi-bot'
- name: Add label if no breaking changes
- uses: actions-ecosystem/action-add-labels@18f1af5e3544586314bbe15c0273249c770b2daf # v1.1.3
- with:
- labels: impact/no-changelog-required
- number: ${{ github.event.issue.number }}
- github_token: ${{ secrets.GITHUB_TOKEN }}
- - name: Build Provider
- run: make provider
- - name: Check worktree clean
- id: worktreeClean
- uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
- with:
- allowed-changes: |-
- sdk/**/pulumi-plugin.json
- sdk/dotnet/*.*.csproj
- sdk/dotnet/version.txt
- sdk/go/**/pulumiUtilities.go
- sdk/nodejs/package.json
- sdk/python/pyproject.toml
- sdk/java/build.gradle
- - name: Commit SDK changes for Renovate
- if: failure() && steps.worktreeClean.outcome == 'failure' &&
- contains(github.actor, 'renovate') && github.event_name ==
- 'pull_request'
- shell: bash
- run: >
- git diff --quiet -- sdk && echo "no changes to sdk" && exit
-
- git config --global user.email "bot@pulumi.com"
-
- git config --global user.name "pulumi-bot"
-
- # Stash local changes and check out the PR's branch directly.
-
- git stash
-
- git fetch
-
- git checkout "origin/$HEAD_REF"
-
-
- # Apply and add our changes, but don't commit any files we expect to
-
- # always change due to versioning.
-
- git stash pop
-
- git add sdk
-
- git reset sdk/python/*/pulumi-plugin.json \
- sdk/python/pyproject.toml \
- sdk/dotnet/pulumi-plugin.json \
- sdk/dotnet/*.*.csproj \
- sdk/dotnet/version.txt \
- sdk/go/*/pulumi-plugin.json \
- sdk/go/*/internal/pulumiUtilities.go \
- sdk/nodejs/package.json
-
- git commit -m 'Commit SDK for Renovate'
-
-
- # Push with pulumi-bot credentials to trigger a re-run of the
-
- # workflow. https://github.com/orgs/community/discussions/25702
-
- git push https://pulumi-bot:${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}@github.com/${{ github.repository }} "HEAD:$HEAD_REF"
- env:
- HEAD_REF: ${{ github.head_ref }}
- - run: git status --porcelain
- - name: Tar provider binaries
- run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin/ pulumi-resource-${{ env.PROVIDER }}
- pulumi-gen-${{ env.PROVIDER}}
- - name: Upload artifacts
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
- with:
- name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
- path: ${{ github.workspace }}/bin/provider.tar.gz
- - name: Test Provider Library
- run: make test_provider
- env:
- ARM_CLIENT_SECRET: ${{ steps.esc-secrets.outputs.ARM_CLIENT_SECRET }}
- DIGITALOCEAN_TOKEN: ${{ steps.esc-secrets.outputs.DIGITALOCEAN_TOKEN }}
- DOCKER_HUB_PASSWORD: ${{ steps.esc-secrets.outputs.DOCKER_HUB_PASSWORD }}
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Upload coverage reports to Codecov
- uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
- env:
- CODECOV_TOKEN: ${{ steps.esc-secrets.outputs.CODECOV_TOKEN }}
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure in building provider prerequisites
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
- build_sdks:
- needs: prerequisites
- runs-on: pulumi-ubuntu-8core
- strategy:
- fail-fast: ${{ ! contains(github.actor, 'renovate') }}
- matrix:
- language:
- - nodejs
- - python
- - dotnet
- - go
- - java
- name: build_sdks
- permissions:
- pull-requests: write # For Renovate SDK updates.
- id-token: write # For ESC secrets.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - name: Setup Node
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
- with:
- node-version: ${{ env.NODEVERSION }}
- registry-url: https://registry.npmjs.org
- - name: Setup DotNet
- uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
- with:
- dotnet-version: ${{ env.DOTNETVERSION }}
- - name: Setup Python
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
- with:
- python-version: ${{ env.PYTHONVERSION }}
- - name: Setup Java
- uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
- with:
- java-version: ${{ env.JAVAVERSION }}
- distribution: temurin
- cache: gradle
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3
- with:
- gradle-version: "7.6"
- - name: Download provider
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
- path: ${{ github.workspace }}/bin
- - name: UnTar provider binaries
- run: tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin
- - name: Restore Binary Permissions
- run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
- -exec chmod +x {} \;
- - name: Generate SDK
- run: make generate_${{ matrix.language }}
- - name: Build SDK
- run: make build_${{ matrix.language }}
- - name: Check worktree clean
- id: worktreeClean
- uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
- with:
- allowed-changes: |-
- sdk/**/pulumi-plugin.json
- sdk/dotnet/*.*.csproj
- sdk/dotnet/version.txt
- sdk/go/**/pulumiUtilities.go
- sdk/nodejs/package.json
- sdk/python/pyproject.toml
- sdk/java/build.gradle
- - name: Commit SDK changes for Renovate
- if: failure() && steps.worktreeClean.outcome == 'failure' &&
- contains(github.actor, 'renovate') && github.event_name ==
- 'pull_request'
- shell: bash
- run: >
- git diff --quiet -- sdk && echo "no changes to sdk" && exit
-
- git config --global user.email "bot@pulumi.com"
-
- git config --global user.name "pulumi-bot"
-
- # Stash local changes and check out the PR's branch directly.
-
- git stash
-
- git fetch
-
- git checkout "origin/$HEAD_REF"
-
-
- # Apply and add our changes, but don't commit any files we expect to
-
- # always change due to versioning.
-
- git stash pop
-
- git add sdk
-
- git reset sdk/python/*/pulumi-plugin.json \
- sdk/python/pyproject.toml \
- sdk/dotnet/pulumi-plugin.json \
- sdk/dotnet/*.*.csproj \
- sdk/dotnet/version.txt \
- sdk/go/*/pulumi-plugin.json \
- sdk/go/*/internal/pulumiUtilities.go \
- sdk/nodejs/package.json
-
- git commit -m 'Commit SDK for Renovate'
-
-
- # Push with pulumi-bot credentials to trigger a re-run of the
-
- # workflow. https://github.com/orgs/community/discussions/25702
-
- git push https://pulumi-bot:${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}@github.com/${{ github.repository }} "HEAD:$HEAD_REF"
- env:
- HEAD_REF: ${{ github.head_ref }}
- - run: git status --porcelain
- - name: Tar SDK folder
- run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
- - name: Upload artifacts
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
- with:
- name: ${{ matrix.language }}-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/${{ matrix.language }}.tar.gz
- retention-days: 30
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure while building SDKs
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
-
- tag_release_if_labeled_needs_release:
- name: Tag release if labeled as needs-release
- needs: publish
- runs-on: ubuntu-latest
- permissions:
- contents: read
- id-token: write # For ESC secrets.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - name: check if this commit needs release
- if: ${{ env.RELEASE_BOT_ENDPOINT != '' }}
- uses: pulumi/action-release-by-pr-label@main
- with:
- command: "release-if-needed"
- repo: ${{ github.repository }}
- commit: ${{ github.sha }}
- slack_channel: C02MGR8JVST
- env:
- RELEASE_BOT_ENDPOINT: ${{ steps.esc-secrets.outputs.RELEASE_BOT_ENDPOINT }}
- RELEASE_BOT_KEY: ${{ steps.esc-secrets.outputs.RELEASE_BOT_KEY }}
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- test:
- runs-on: pulumi-ubuntu-8core
- needs:
- - build_sdks
- strategy:
- fail-fast: true
- matrix:
- language:
- - nodejs
- - python
- - dotnet
- - go
- - java
- - yaml
- name: test
- permissions:
- contents: read
- id-token: write # For ESC secrets and Pulumi access token OIDC.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - name: Setup Node
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
- with:
- node-version: ${{ env.NODEVERSION }}
- registry-url: https://registry.npmjs.org
- - name: Setup DotNet
- uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
- with:
- dotnet-version: ${{ env.DOTNETVERSION }}
- - name: Setup Python
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
- with:
- python-version: ${{ env.PYTHONVERSION }}
- - name: Setup Java
- uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
- with:
- java-version: ${{ env.JAVAVERSION }}
- distribution: temurin
- cache: gradle
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3
- with:
- gradle-version: "7.6"
- - name: Download provider
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
- path: ${{ github.workspace }}/bin
- - name: UnTar provider binaries
- run: tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin
- - name: Restore Binary Permissions
- run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
- -exec chmod +x {} \;
- - name: Download SDK
- if: ${{ matrix.language != 'yaml' }}
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: ${{ matrix.language }}-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: UnTar SDK folder
- if: ${{ matrix.language != 'yaml' }}
- run: tar -zxf ${{ github.workspace}}/sdk/${{ matrix.language}}.tar.gz -C ${{
- github.workspace}}/sdk/${{ matrix.language}}
- - name: Update path
- run: echo "${{ github.workspace }}/bin" >> "$GITHUB_PATH"
- - name: Install Node dependencies
- run: yarn global add typescript
- - run: dotnet nuget add source ${{ github.workspace }}/nuget
- - name: Install Python deps
- run: |-
- pip3 install virtualenv==20.0.23
- pip3 install pipenv
- - name: Install dependencies
- if: ${{ matrix.language != 'yaml' }}
- run: make install_${{ matrix.language}}_sdk
- - name: Generate Pulumi Access Token
- id: generate_pulumi_token
- uses: pulumi/auth-actions@1c89817aab0c66407723cdef72b05266e7376640 # v1.0.1
- with:
- organization: pulumi
- requested-token-type: urn:pulumi:token-type:access_token:organization
- export-environment-variables: false
- - name: Export AWS Credentials
- uses: pulumi/esc-action@efb0bc8946938f0dfbfa00e829196ec95f0d0ea7 # v1.4.0
- env:
- PULUMI_ACCESS_TOKEN: ${{ steps.generate_pulumi_token.outputs.pulumi-access-token }}
- with:
- environment: logins/pulumi-ci
- - name: Authenticate to Google Cloud
- uses: google-github-actions/auth@7c6bc770dae815cd3e89ee6cdf493a5fab2cc093 # v3.0.0
- with:
- workload_identity_provider: projects/${{ env.GOOGLE_PROJECT_NUMBER
- }}/locations/global/workloadIdentityPools/${{
- env.GOOGLE_CI_WORKLOAD_IDENTITY_POOL }}/providers/${{
- env.GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER }}
- service_account: ${{ env.GOOGLE_CI_SERVICE_ACCOUNT_EMAIL }}
- - name: Setup gcloud auth
- uses: google-github-actions/setup-gcloud@aa5489c8933f4cc7a4f7d45035b3b1440c9c10db # v3.0.1
- with:
- install_components: gke-gcloud-auth-plugin
- - name: Install gotestfmt
- uses: GoTestTools/gotestfmt-action@v2
- with:
- version: v2.5.0
- token: ${{ secrets.GITHUB_TOKEN }}
- - name: Run tests
- run: >-
- set -euo pipefail
-
- cd examples && go test -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 .
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure in SDK tests
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
- publish:
- runs-on: ubuntu-latest
- needs: test
- name: publish
- permissions:
- contents: read
- id-token: write # For ESC secrets.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Clear GitHub Actions Ubuntu runner disk space
- uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
- with:
- tool-cache: false
- dotnet: false
- android: true
- haskell: true
- swap-storage: true
- large-packages: false
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - name: Configure AWS Credentials
- uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v5.0.0
- with:
- aws-access-key-id: ${{ steps.esc-secrets.outputs.AWS_ACCESS_KEY_ID }}
- aws-region: us-east-2
- aws-secret-access-key: ${{ steps.esc-secrets.outputs.AWS_SECRET_ACCESS_KEY }}
- role-duration-seconds: 7200
- role-session-name: ${{ env.PROVIDER }}@githubActions
- role-external-id: upload-pulumi-release
- role-to-assume: ${{ steps.esc-secrets.outputs.AWS_UPLOAD_ROLE_ARN }}
- - name: Run GoReleaser
- uses: goreleaser/goreleaser-action@5742e2a039330cbb23ebf35f046f814d4c6ff811 # v5.1.0
- env:
- GORELEASER_CURRENT_TAG: v${{ steps.version.outputs.version }}
- AZURE_SIGNING_CLIENT_ID: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_ID }}
- AZURE_SIGNING_CLIENT_SECRET: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_SECRET }}
- AZURE_SIGNING_TENANT_ID: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_TENANT_ID }}
- AZURE_SIGNING_KEY_VAULT_URI: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_KEY_VAULT_URI }}
- SKIP_SIGNING: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_ID == '' && steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_SECRET == '' && steps.esc-secrets.outputs.AZURE_SIGNING_TENANT_ID == '' && steps.esc-secrets.outputs.AZURE_SIGNING_KEY_VAULT_URI == '' }}
- GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
- with:
- args: -p 3 -f .goreleaser.prerelease.yml --clean --skip=validate --timeout 60m0s
- version: latest
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure in publishing binaries
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
- publish_sdk:
- runs-on: ubuntu-latest
- needs: publish
- name: publish_sdk
- permissions:
- contents: read
- id-token: write # For ESC secrets.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Checkout Scripts Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- path: ci-scripts
- repository: pulumi/scripts
- - run: echo "ci-scripts" >> .git/info/exclude
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - name: Setup Node
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
- with:
- node-version: ${{ env.NODEVERSION }}
- registry-url: https://registry.npmjs.org
- - name: Setup DotNet
- uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
- with:
- dotnet-version: ${{ env.DOTNETVERSION }}
- - name: Setup Python
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
- with:
- python-version: ${{ env.PYTHONVERSION }}
- - name: Download python SDK
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: python-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress python SDK
- run: tar -zxf ${{github.workspace}}/sdk/python.tar.gz -C
- ${{github.workspace}}/sdk/python
- - name: Download dotnet SDK
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: dotnet-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress dotnet SDK
- run: tar -zxf ${{github.workspace}}/sdk/dotnet.tar.gz -C
- ${{github.workspace}}/sdk/dotnet
- - name: Download nodejs SDK
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: nodejs-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress nodejs SDK
- run: tar -zxf ${{github.workspace}}/sdk/nodejs.tar.gz -C
- ${{github.workspace}}/sdk/nodejs
- - name: Install Twine
- run: python -m pip install twine==5.0.0
- - name: Publish SDKs
- run: ./ci-scripts/ci/publish-tfgen-package ${{ github.workspace }}
- env:
- NUGET_PUBLISH_KEY: ${{ steps.esc-secrets.outputs.NUGET_PUBLISH_KEY }}
- NODE_AUTH_TOKEN: ${{ steps.esc-secrets.outputs.NPM_TOKEN }}
- PYPI_PUBLISH_ARTIFACTS: all
- PYPI_USERNAME: __token__
- PYPI_PASSWORD: ${{ steps.esc-secrets.outputs.PYPI_API_TOKEN }}
- SIGNING_KEY_ID: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_KEY_ID }}
- SIGNING_KEY: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_KEY }}
- SIGNING_PASSWORD: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_PASSWORD }}
- PUBLISH_REPO_USERNAME: ${{ steps.esc-secrets.outputs.OSSRH_USERNAME }}
- PUBLISH_REPO_PASSWORD: ${{ steps.esc-secrets.outputs.OSSRH_PASSWORD }}
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure in publishing SDK
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
- lint:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- persist-credentials: false
- ref: ${{ env.PR_COMMIT_SHA }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Disarm go:embed directives to enable linters that compile source code
- run: git grep -l 'go:embed' -- provider | xargs --no-run-if-empty sed -i
- 's/go:embed/ goembed/g'
- - name: golangci-lint provider pkg
- uses: golangci/golangci-lint-action@55c2c1448f86e01eaae002a5a3a9624417608d84 # v6.5.2
- with:
- version: ${{ env.GOLANGCI_LINT_VERSION }}
- args: -c ../.golangci.yml
- working-directory: provider
- name: lint
- if: github.event_name == 'repository_dispatch' ||
- github.event.pull_request.head.repo.full_name == github.repository
diff --git a/.github/workflows/command-dispatch.yml b/.github/workflows/command-dispatch.yml
deleted file mode 100644
index b317d24..0000000
--- a/.github/workflows/command-dispatch.yml
+++ /dev/null
@@ -1,54 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten when regenerated by https://github.com/pulumi/ci-mgmt
-
-env:
- ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
- ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
- ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
- AWS_REGION: us-west-2
- AZURE_LOCATION: westus
- GOOGLE_CI_SERVICE_ACCOUNT_EMAIL: pulumi-ci@pulumi-ci-gcp-provider.iam.gserviceaccount.com
- GOOGLE_CI_WORKLOAD_IDENTITY_POOL: pulumi-ci
- GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER: pulumi-ci
- GOOGLE_PROJECT: pulumi-ci-gcp-provider
- GOOGLE_PROJECT_NUMBER: "895284651812"
- GOOGLE_REGION: us-central1
- GOOGLE_ZONE: us-central1-a
- PULUMI_API: https://api.pulumi-staging.io
-
-jobs:
- command-dispatch-for-testing:
- name: command-dispatch-for-testing
- runs-on: ubuntu-latest
- permissions:
- contents: read
- id-token: write # For ESC secrets.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- persist-credentials: false
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - uses: peter-evans/slash-command-dispatch@13bc09769d122a64f75aa5037256f6f2d78be8c4 # v4
- with:
- commands: |
- run-acceptance-tests
- release
- issue-type: pull-request
- permission: write
- reaction-token: ${{ secrets.GITHUB_TOKEN }}
- repository: pulumi/pulumi-docker-build
- token: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
-name: command-dispatch
-on:
- issue_comment:
- types:
- - created
- - edited
diff --git a/.github/workflows/comment-on-stale-issues.yml b/.github/workflows/comment-on-stale-issues.yml
deleted file mode 100644
index 79be47c..0000000
--- a/.github/workflows/comment-on-stale-issues.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-name: "Comment on stale issues"
-
-on:
- schedule:
- - cron: "46 4 * * *" # run once per day
-
-jobs:
- cleanup:
- runs-on: ubuntu-latest
- name: Stale issue job
- steps:
- - uses: aws-actions/stale-issue-cleanup@5650b49bcd757a078f6ca06c373d7807b773f9bc #v7.1.0
- with:
- issue-types: issues # only look at issues (ignore pull-requests)
-
- # Setting messages to an empty string causes the automation to skip that category
- ancient-issue-message: "Unfortunately, it looks like this issue hasn't seen any updates in a while. If you're still experiencing this issue, could you leave a quick comment to let us know so we can prioritize it?"
- ancient-pr-message: ""
- stale-issue-message: ""
- stale-pr-message: ""
-
- # These labels are required
- stale-issue-label: awaiting-feedback # somewhat confusingly, this is also used for when labeling "ancient" issues
- exempt-issue-labels: kind/enhancement,kind/task,kind/epic,kind/engineering, awaiting-upstream # only run on kind/bug for now, ignore awaiting-upstream too.
- stale-pr-label: no-pr-activity # unused because we aren't processing PRs
- exempt-pr-labels: awaiting-approval # unused because we aren't processing PRs
- response-requested-label: response-requested # unused because we don't set a "stale-issue-message" above
-
- # Issue timing
- days-before-close: 10000 # this action lacks the option not to close, so just set this indefinitly far in the future
- days-before-ancient: 180 # 6 months
-
- # If you don't want to mark a issue as being ancient based on a
- # threshold of "upvotes", you can set this here. An "upvote" is
- # the total number of +1, heart, hooray, and rocket reactions
- # on an issue.
- minimum-upvotes-to-exempt: 2
-
- repo-token: ${{ secrets.GITHUB_TOKEN }}
- loglevel: DEBUG
- # Set dry-run to true to not perform label or close actions.
- dry-run: true
diff --git a/.github/workflows/community-moderation.yml b/.github/workflows/community-moderation.yml
deleted file mode 100644
index b7c9fa8..0000000
--- a/.github/workflows/community-moderation.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten when regenerated by https://github.com/pulumi/ci-mgmt
-
-jobs:
- warn_codegen:
- name: warn_codegen
- runs-on: ubuntu-latest
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- persist-credentials: false
- - id: schema_changed
- name: Check for diff in schema
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
- with:
- filters: "changed: 'provider/cmd/**/schema.json'"
- - id: sdk_changed
- if: steps.schema_changed.outputs.changed == 'false'
- name: Check for diff in sdk/**
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
- with:
- filters: "changed: 'sdk/**'"
- - if: steps.sdk_changed.outputs.changed == 'true' &&
- github.event.pull_request.head.repo.full_name != github.repository
- name: Send codegen warning as comment on PR
- uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
- with:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- message: >
- Hello and thank you for your pull request! :heart: :sparkles:
-
- It looks like you're directly modifying files in the language SDKs, many of which are autogenerated.
-
- Be sure any files you're editing do not begin with a code generation warning.
-
- For generated files, you will need to make changes in `resources.go` instead, and [generate the code](https://github.com/pulumi/${{ github.event.repository.name }}/blob/master/CONTRIBUTING.md#committing-generated-code).
-name: warn-codegen
-on:
- pull_request_target:
- branches:
- - main
- types:
- - opened
diff --git a/.github/workflows/export-repo-secrets.yml b/.github/workflows/export-repo-secrets.yml
deleted file mode 100644
index 0039709..0000000
--- a/.github/workflows/export-repo-secrets.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-permissions: write-all # Equivalent to default permissions plus id-token: write
-name: Export secrets to ESC
-on: [workflow_dispatch]
-jobs:
- export-to-esc:
- runs-on: ubuntu-latest
- name: export GitHub secrets to ESC
- steps:
- - name: Generate a GitHub token
- id: generate-token
- uses: actions/create-github-app-token@v1
- with:
- app-id: 1256780 # Export Secrets GitHub App
- private-key: ${{ secrets.EXPORT_SECRETS_PRIVATE_KEY }}
- - name: Export secrets to ESC
- uses: pulumi/esc-export-secrets-action@9d6485759b6adff2538ae91f1b77cc96265c9dad # v1
- with:
- organization: pulumi
- org-environment: imports/github-secrets
- exclude-secrets: EXPORT_SECRETS_PRIVATE_KEY
- github-token: ${{ steps.generate-token.outputs.token }}
- oidc-auth: true
- oidc-requested-token-type: urn:pulumi:token-type:access_token:organization
- env:
- GITHUB_SECRETS: ${{ toJSON(secrets) }}
diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml
deleted file mode 100644
index d530c45..0000000
--- a/.github/workflows/prerelease.yml
+++ /dev/null
@@ -1,798 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
-
-name: prerelease
-on:
- push:
- tags:
- - v*.*.*-**
-env:
- PROVIDER: docker-build
- PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
- TRAVIS_OS_NAME: linux
- PULUMI_GO_DEP_ROOT: ${{ github.workspace }}/..
- GOVERSION: "1.21.x"
- NODEVERSION: "20.x"
- PYTHONVERSION: "3.11.8"
- DOTNETVERSION: "8.0.x"
- JAVAVERSION: "11"
- ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
- ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
- ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
- AWS_REGION: us-west-2
- AZURE_LOCATION: westus
- GOOGLE_CI_SERVICE_ACCOUNT_EMAIL: pulumi-ci@pulumi-ci-gcp-provider.iam.gserviceaccount.com
- GOOGLE_CI_WORKLOAD_IDENTITY_POOL: pulumi-ci
- GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER: pulumi-ci
- GOOGLE_PROJECT: pulumi-ci-gcp-provider
- GOOGLE_PROJECT_NUMBER: "895284651812"
- GOOGLE_REGION: us-central1
- GOOGLE_ZONE: us-central1-a
- PULUMI_API: https://api.pulumi-staging.io
- IS_PRERELEASE: true
-
-jobs:
- prerequisites:
- runs-on: ubuntu-latest
- name: prerequisites
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - if: github.event_name == 'pull_request'
- name: Install Schema Tools
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/schema-tools
- - name: Build codegen binaries
- run: make codegen
- - name: Build Schema
- run: make generate_schema
- - if: github.event_name == 'pull_request'
- name: Check Schema is Valid
- run: >-
- {
- echo 'SCHEMA_CHANGES<> "$GITHUB_ENV"
- env:
- GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
- - if: github.event_name == 'pull_request' && github.actor != 'dependabot[bot]'
- name: Comment on PR with Details of Schema Check
- uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
- with:
- message: |
- ${{ env.SCHEMA_CHANGES }}
- comment-tag: schemaCheck
- github-token: ${{ secrets.GITHUB_TOKEN }}
- - if: contains(env.SCHEMA_CHANGES, 'Looking good! No breaking changes found.') &&
- github.actor == 'pulumi-bot'
- name: Add label if no breaking changes
- uses: actions-ecosystem/action-add-labels@18f1af5e3544586314bbe15c0273249c770b2daf # v1.1.3
- with:
- labels: impact/no-changelog-required
- number: ${{ github.event.issue.number }}
- github_token: ${{ secrets.GITHUB_TOKEN }}
- - name: Build Provider
- run: make provider
- - name: Check worktree clean
- id: worktreeClean
- uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
- with:
- allowed-changes: |-
- sdk/**/pulumi-plugin.json
- sdk/dotnet/*.*.csproj
- sdk/dotnet/version.txt
- sdk/go/**/pulumiUtilities.go
- sdk/nodejs/package.json
- sdk/python/pyproject.toml
- sdk/java/build.gradle
- - name: Commit SDK changes for Renovate
- if: failure() && steps.worktreeClean.outcome == 'failure' &&
- contains(github.actor, 'renovate') && github.event_name ==
- 'pull_request'
- shell: bash
- run: >
- git diff --quiet -- sdk && echo "no changes to sdk" && exit
-
- git config --global user.email "bot@pulumi.com"
-
- git config --global user.name "pulumi-bot"
-
- # Stash local changes and check out the PR's branch directly.
-
- git stash
-
- git fetch
-
- git checkout "origin/$HEAD_REF"
-
-
- # Apply and add our changes, but don't commit any files we expect to
-
- # always change due to versioning.
-
- git stash pop
-
- git add sdk
-
- git reset sdk/python/*/pulumi-plugin.json \
- sdk/python/pyproject.toml \
- sdk/dotnet/pulumi-plugin.json \
- sdk/dotnet/*.*.csproj \
- sdk/dotnet/version.txt \
- sdk/go/*/pulumi-plugin.json \
- sdk/go/*/internal/pulumiUtilities.go \
- sdk/nodejs/package.json
-
- git commit -m 'Commit SDK for Renovate'
-
-
- # Push with pulumi-bot credentials to trigger a re-run of the
-
- # workflow. https://github.com/orgs/community/discussions/25702
-
- git push https://pulumi-bot:${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}@github.com/${{ github.repository }} "HEAD:$HEAD_REF"
- env:
- HEAD_REF: ${{ github.head_ref }}
- - run: git status --porcelain
- - name: Tar provider binaries
- run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin/ pulumi-resource-${{ env.PROVIDER }}
- pulumi-gen-${{ env.PROVIDER}}
- - name: Upload artifacts
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
- with:
- name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
- path: ${{ github.workspace }}/bin/provider.tar.gz
- - name: Test Provider Library
- run: make test_provider
- env:
- ARM_CLIENT_SECRET: ${{ steps.esc-secrets.outputs.ARM_CLIENT_SECRET }}
- DIGITALOCEAN_TOKEN: ${{ steps.esc-secrets.outputs.DIGITALOCEAN_TOKEN }}
- DOCKER_HUB_PASSWORD: ${{ steps.esc-secrets.outputs.DOCKER_HUB_PASSWORD }}
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Upload coverage reports to Codecov
- uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
- env:
- CODECOV_TOKEN: ${{ steps.esc-secrets.outputs.CODECOV_TOKEN }}
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure in building provider prerequisites
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
- build_sdks:
- needs: prerequisites
- runs-on: pulumi-ubuntu-8core
- strategy:
- fail-fast: ${{ ! contains(github.actor, 'renovate') }}
- matrix:
- language:
- - nodejs
- - python
- - dotnet
- - go
- - java
- name: build_sdks
- permissions:
- pull-requests: write # For Renovate SDK updates.
- id-token: write # For ESC secrets.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - name: Setup Node
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
- with:
- node-version: ${{ env.NODEVERSION }}
- registry-url: https://registry.npmjs.org
- - name: Setup DotNet
- uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
- with:
- dotnet-version: ${{ env.DOTNETVERSION }}
- - name: Setup Python
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
- with:
- python-version: ${{ env.PYTHONVERSION }}
- - name: Setup Java
- uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
- with:
- java-version: ${{ env.JAVAVERSION }}
- distribution: temurin
- cache: gradle
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3
- with:
- gradle-version: "7.6"
- - name: Download provider
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
- path: ${{ github.workspace }}/bin
- - name: UnTar provider binaries
- run: tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin
- - name: Restore Binary Permissions
- run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
- -exec chmod +x {} \;
- - name: Generate SDK
- run: make generate_${{ matrix.language }}
- - name: Build SDK
- run: make build_${{ matrix.language }}
- - name: Check worktree clean
- id: worktreeClean
- uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
- with:
- allowed-changes: |-
- sdk/**/pulumi-plugin.json
- sdk/dotnet/*.*.csproj
- sdk/dotnet/version.txt
- sdk/go/**/pulumiUtilities.go
- sdk/nodejs/package.json
- sdk/python/pyproject.toml
- sdk/java/build.gradle
- - name: Commit ${{ matrix.language }} SDK changes for Renovate
- if: failure() && steps.worktreeClean.outcome == 'failure' &&
- contains(github.actor, 'renovate') && github.event_name ==
- 'pull_request'
- shell: bash
- run: >
- git diff --quiet -- sdk && echo "no changes to sdk" && exit
-
- git config --global user.email "bot@pulumi.com"
-
- git config --global user.name "pulumi-bot"
-
- # Stash local changes and check out the PR's branch directly.
-
- git stash
-
- git fetch
-
- git checkout "origin/$HEAD_REF"
-
-
- # Apply and add our changes, but don't commit any files we expect to
-
- # always change due to versioning.
-
- git stash pop
-
- git add sdk
-
- git reset sdk/python/*/pulumi-plugin.json \
- sdk/python/pyproject.toml \
- sdk/dotnet/pulumi-plugin.json \
- sdk/dotnet/*.*.csproj \
- sdk/dotnet/version.txt \
- sdk/go/*/pulumi-plugin.json \
- sdk/go/*/internal/pulumiUtilities.go \
- sdk/nodejs/package.json
-
- git commit -m 'Commit ${{ matrix.language }} SDK for Renovate'
-
-
- # Push with pulumi-bot credentials to trigger a re-run of the
-
- # workflow. https://github.com/orgs/community/discussions/25702
-
- git push https://pulumi-bot:${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}@github.com/${{ github.repository }} "HEAD:$HEAD_REF"
- env:
- HEAD_REF: ${{ github.head_ref }}
- - run: git status --porcelain
- - name: Tar SDK folder
- run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
- - name: Upload artifacts
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
- with:
- name: ${{ matrix.language }}-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/${{ matrix.language }}.tar.gz
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure while building SDKs
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
- test:
- runs-on: pulumi-ubuntu-8core
- needs:
- - build_sdks
- strategy:
- fail-fast: true
- matrix:
- language:
- - nodejs
- - python
- - dotnet
- - go
- - java
- - yaml
- name: test
- permissions:
- contents: read
- id-token: write # For ESC secrets and Pulumi access token OIDC.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - name: Setup Node
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
- with:
- node-version: ${{ env.NODEVERSION }}
- registry-url: https://registry.npmjs.org
- - name: Setup DotNet
- uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
- with:
- dotnet-version: ${{ env.DOTNETVERSION }}
- - name: Setup Python
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
- with:
- python-version: ${{ env.PYTHONVERSION }}
- - name: Setup Java
- uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
- with:
- java-version: ${{ env.JAVAVERSION }}
- distribution: temurin
- cache: gradle
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3
- with:
- gradle-version: "7.6"
- - name: Download provider
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
- path: ${{ github.workspace }}/bin
- - name: UnTar provider binaries
- run: tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin
- - name: Restore Binary Permissions
- run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
- -exec chmod +x {} \;
- - name: Download SDK
- if: ${{ matrix.language != 'yaml' }}
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: ${{ matrix.language }}-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: UnTar SDK folder
- if: ${{ matrix.language != 'yaml' }}
- run: tar -zxf ${{ github.workspace}}/sdk/${{ matrix.language}}.tar.gz -C ${{
- github.workspace}}/sdk/${{ matrix.language}}
- - name: Update path
- run: echo "${{ github.workspace }}/bin" >> "$GITHUB_PATH"
- - name: Install Node dependencies
- run: yarn global add typescript
- - run: dotnet nuget add source ${{ github.workspace }}/nuget
- - name: Install Python deps
- run: |-
- pip3 install virtualenv==20.0.23
- pip3 install pipenv
- - name: Install dependencies
- if: ${{ matrix.language != 'yaml' }}
- run: make install_${{ matrix.language}}_sdk
- - name: Generate Pulumi Access Token
- id: generate_pulumi_token
- uses: pulumi/auth-actions@1c89817aab0c66407723cdef72b05266e7376640 # v1.0.1
- with:
- organization: pulumi
- requested-token-type: urn:pulumi:token-type:access_token:organization
- export-environment-variables: false
- - name: Export AWS Credentials
- uses: pulumi/esc-action@efb0bc8946938f0dfbfa00e829196ec95f0d0ea7 # v1.4.0
- env:
- PULUMI_ACCESS_TOKEN: ${{ steps.generate_pulumi_token.outputs.pulumi-access-token }}
- with:
- environment: logins/pulumi-ci
- - name: Authenticate to Google Cloud
- uses: google-github-actions/auth@7c6bc770dae815cd3e89ee6cdf493a5fab2cc093 # v3.0.0
- with:
- workload_identity_provider: projects/${{ env.GOOGLE_PROJECT_NUMBER
- }}/locations/global/workloadIdentityPools/${{
- env.GOOGLE_CI_WORKLOAD_IDENTITY_POOL }}/providers/${{
- env.GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER }}
- service_account: ${{ env.GOOGLE_CI_SERVICE_ACCOUNT_EMAIL }}
- - name: Setup gcloud auth
- uses: google-github-actions/setup-gcloud@aa5489c8933f4cc7a4f7d45035b3b1440c9c10db # v3.0.1
- with:
- install_components: gke-gcloud-auth-plugin
- - name: Install gotestfmt
- uses: GoTestTools/gotestfmt-action@v2
- with:
- version: v2.5.0
- token: ${{ secrets.GITHUB_TOKEN }}
- - name: Run tests
- run: >-
- set -euo pipefail
-
- cd examples && go test -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 .
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure in SDK tests
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
- publish:
- runs-on: ubuntu-latest
- needs: test
- name: publish
- permissions:
- contents: read
- id-token: write # For ESC secrets.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Clear GitHub Actions Ubuntu runner disk space
- uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
- with:
- tool-cache: false
- dotnet: false
- android: true
- haskell: true
- swap-storage: true
- large-packages: false
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - name: Configure AWS Credentials
- uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v5.0.0
- with:
- aws-access-key-id: ${{ steps.esc-secrets.outputs.AWS_ACCESS_KEY_ID }}
- aws-region: us-east-2
- aws-secret-access-key: ${{ steps.esc-secrets.outputs.AWS_SECRET_ACCESS_KEY }}
- role-duration-seconds: 7200
- role-session-name: ${{ env.PROVIDER }}@githubActions
- role-external-id: upload-pulumi-release
- role-to-assume: ${{ steps.esc-secrets.outputs.AWS_UPLOAD_ROLE_ARN }}
- - name: Run GoReleaser
- uses: goreleaser/goreleaser-action@5742e2a039330cbb23ebf35f046f814d4c6ff811 # v5.1.0
- env:
- GORELEASER_CURRENT_TAG: v${{ steps.version.outputs.version }}
- AZURE_SIGNING_CLIENT_ID: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_ID }}
- AZURE_SIGNING_CLIENT_SECRET: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_SECRET }}
- AZURE_SIGNING_TENANT_ID: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_TENANT_ID }}
- AZURE_SIGNING_KEY_VAULT_URI: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_KEY_VAULT_URI }}
- SKIP_SIGNING: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_ID == '' && steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_SECRET == '' && steps.esc-secrets.outputs.AZURE_SIGNING_TENANT_ID == '' && steps.esc-secrets.outputs.AZURE_SIGNING_KEY_VAULT_URI == '' }}
- GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
- with:
- args: -p 3 -f .goreleaser.prerelease.yml --clean --skip=validate --timeout 60m0s
- version: latest
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure in publishing binaries
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
- publish_sdk:
- runs-on: ubuntu-latest
- needs: publish
- name: publish_sdk
- permissions:
- contents: read
- id-token: write # For ESC secrets.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Checkout Scripts Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- path: ci-scripts
- repository: pulumi/scripts
- - run: echo "ci-scripts" >> .git/info/exclude
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - name: Setup Node
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
- with:
- node-version: ${{ env.NODEVERSION }}
- registry-url: https://registry.npmjs.org
- - name: Setup DotNet
- uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
- with:
- dotnet-version: ${{ env.DOTNETVERSION }}
- - name: Setup Python
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
- with:
- python-version: ${{ env.PYTHONVERSION }}
- - name: Download python SDK
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: python-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress python SDK
- run: tar -zxf ${{github.workspace}}/sdk/python.tar.gz -C
- ${{github.workspace}}/sdk/python
- - name: Download dotnet SDK
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: dotnet-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress dotnet SDK
- run: tar -zxf ${{github.workspace}}/sdk/dotnet.tar.gz -C
- ${{github.workspace}}/sdk/dotnet
- - name: Download nodejs SDK
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: nodejs-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress nodejs SDK
- run: tar -zxf ${{github.workspace}}/sdk/nodejs.tar.gz -C
- ${{github.workspace}}/sdk/nodejs
- - name: Install Twine
- run: python -m pip install twine==5.0.0
- - name: Publish SDKs
- run: ./ci-scripts/ci/publish-tfgen-package ${{ github.workspace }}
- env:
- NUGET_PUBLISH_KEY: ${{ steps.esc-secrets.outputs.NUGET_PUBLISH_KEY }}
- NODE_AUTH_TOKEN: ${{ steps.esc-secrets.outputs.NPM_TOKEN }}
- PYPI_PUBLISH_ARTIFACTS: all
- PYPI_USERNAME: __token__
- PYPI_PASSWORD: ${{ steps.esc-secrets.outputs.PYPI_API_TOKEN }}
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure in publishing SDK
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
- publish_java_sdk:
- runs-on: ubuntu-latest
- continue-on-error: true
- needs: publish
- name: publish_java_sdk
- permissions:
- contents: read
- id-token: write # For ESC secrets.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - name: Setup Java
- uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
- with:
- java-version: ${{ env.JAVAVERSION }}
- distribution: temurin
- cache: gradle
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3
- with:
- gradle-version: "7.6"
- - name: Download java SDK
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: java-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress java SDK
- run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C
- ${{github.workspace}}/sdk/java
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3
- with:
- gradle-version: "7.6"
- - name: Publish Java SDK
- run: gradle -p ./sdk/java publishToSonatype closeAndReleaseSonatypeStagingRepository
- env:
- PACKAGE_VERSION: ${{ env.PROVIDER_VERSION }}
- SIGNING_KEY_ID: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_KEY_ID }}
- SIGNING_KEY: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_KEY }}
- SIGNING_PASSWORD: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_PASSWORD }}
- PUBLISH_REPO_PASSWORD: ${{ steps.esc-secrets.outputs.OSSRH_PASSWORD }}
- PUBLISH_REPO_USERNAME: ${{ steps.esc-secrets.outputs.OSSRH_USERNAME }}
- publish_go_sdk:
- runs-on: ubuntu-latest
- name: publish-go-sdk
- needs: publish_sdk
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Download go SDK
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: go-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress go SDK
- run: tar -zxf ${{github.workspace}}/sdk/go.tar.gz -C
- ${{github.workspace}}/sdk/go
- - name: Publish Go SDK
- uses: pulumi/publish-go-sdk-action@v1
- with:
- repository: ${{ github.repository }}
- base-ref: ${{ github.sha }}
- source: sdk/go/dockerbuild
- path: sdk/go/dockerbuild
- version: ${{ steps.version.outputs.version }}
- additive: false
- files: "**"
diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml
deleted file mode 100644
index aead29c..0000000
--- a/.github/workflows/pull-request.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
-
-name: pull-request
-on:
- pull_request_target: {}
-
-jobs:
- comment-on-pr:
- runs-on: ubuntu-latest
- name: comment-on-pr
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - name: Comment PR
- uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
- with:
- message: >
- PR is now waiting for a maintainer to run the acceptance tests.
-
- **Note for the maintainer:** To run the acceptance tests, please comment */run-acceptance-tests* on the PR
- github-token: ${{ secrets.GITHUB_TOKEN }}
- if: github.event.pull_request.head.repo.full_name != github.repository
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
deleted file mode 100644
index 2f5ff53..0000000
--- a/.github/workflows/release.yml
+++ /dev/null
@@ -1,831 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
-
-name: release
-on:
- push:
- tags:
- - v*.*.*
- - "!v*.*.*-**"
-env:
- PROVIDER: docker-build
- PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
- TRAVIS_OS_NAME: linux
- PULUMI_GO_DEP_ROOT: ${{ github.workspace }}/..
- GOVERSION: "1.21.x"
- NODEVERSION: "20.x"
- PYTHONVERSION: "3.11.8"
- DOTNETVERSION: "8.0.x"
- JAVAVERSION: "11"
- ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
- ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
- ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
- AWS_REGION: us-west-2
- AZURE_LOCATION: westus
- GOOGLE_CI_SERVICE_ACCOUNT_EMAIL: pulumi-ci@pulumi-ci-gcp-provider.iam.gserviceaccount.com
- GOOGLE_CI_WORKLOAD_IDENTITY_POOL: pulumi-ci
- GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER: pulumi-ci
- GOOGLE_PROJECT: pulumi-ci-gcp-provider
- GOOGLE_PROJECT_NUMBER: "895284651812"
- GOOGLE_REGION: us-central1
- GOOGLE_ZONE: us-central1-a
- PULUMI_API: https://api.pulumi-staging.io
-
-jobs:
- prerequisites:
- runs-on: ubuntu-latest
- name: prerequisites
- permissions:
- id-token: write # For ESC secrets.
- pull-requests: write # For schema check comment.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - if: github.event_name == 'pull_request'
- name: Install Schema Tools
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/schema-tools
- - name: Build codegen binaries
- run: make codegen
- - name: Build Schema
- run: make generate_schema
- - if: github.event_name == 'pull_request'
- name: Check Schema is Valid
- run: >-
- {
- echo 'SCHEMA_CHANGES<> "$GITHUB_ENV"
- env:
- GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
- - if: github.event_name == 'pull_request' && github.actor != 'dependabot[bot]'
- name: Comment on PR with Details of Schema Check
- uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
- with:
- message: |
- ${{ env.SCHEMA_CHANGES }}
- comment-tag: schemaCheck
- github-token: ${{ secrets.GITHUB_TOKEN }}
- - if: contains(env.SCHEMA_CHANGES, 'Looking good! No breaking changes found.') &&
- github.actor == 'pulumi-bot'
- name: Add label if no breaking changes
- uses: actions-ecosystem/action-add-labels@18f1af5e3544586314bbe15c0273249c770b2daf # v1.1.3
- with:
- labels: impact/no-changelog-required
- number: ${{ github.event.issue.number }}
- github_token: ${{ secrets.GITHUB_TOKEN }}
- - name: Build Provider
- run: make provider
- - name: Check worktree clean
- id: worktreeClean
- uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
- with:
- allowed-changes: |-
- sdk/**/pulumi-plugin.json
- sdk/dotnet/*.*.csproj
- sdk/dotnet/version.txt
- sdk/go/**/pulumiUtilities.go
- sdk/nodejs/package.json
- sdk/python/pyproject.toml
- sdk/java/build.gradle
- - name: Commit SDK changes for Renovate
- if: failure() && steps.worktreeClean.outcome == 'failure' &&
- contains(github.actor, 'renovate') && github.event_name ==
- 'pull_request'
- shell: bash
- run: >
- git diff --quiet -- sdk && echo "no changes to sdk" && exit
-
- git config --global user.email "bot@pulumi.com"
-
- git config --global user.name "pulumi-bot"
-
- # Stash local changes and check out the PR's branch directly.
-
- git stash
-
- git fetch
-
- git checkout "origin/$HEAD_REF"
-
-
- # Apply and add our changes, but don't commit any files we expect to
-
- # always change due to versioning.
-
- git stash pop
-
- git add sdk
-
- git reset sdk/python/*/pulumi-plugin.json \
- sdk/python/pyproject.toml \
- sdk/dotnet/pulumi-plugin.json \
- sdk/dotnet/*.*.csproj \
- sdk/dotnet/version.txt \
- sdk/go/*/pulumi-plugin.json \
- sdk/go/*/internal/pulumiUtilities.go \
- sdk/nodejs/package.json
-
- git commit -m 'Commit SDK for Renovate'
-
-
- # Push with pulumi-bot credentials to trigger a re-run of the
-
- # workflow. https://github.com/orgs/community/discussions/25702
-
- git push https://pulumi-bot:${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}@github.com/${{ github.repository }} "HEAD:$HEAD_REF"
- env:
- HEAD_REF: ${{ github.head_ref }}
- - run: git status --porcelain
- - name: Tar provider binaries
- run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin/ pulumi-resource-${{ env.PROVIDER }}
- pulumi-gen-${{ env.PROVIDER}}
- - name: Upload artifacts
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
- with:
- name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
- path: ${{ github.workspace }}/bin/provider.tar.gz
- - name: Test Provider Library
- run: make test_provider
- env:
- ARM_CLIENT_SECRET: ${{ steps.esc-secrets.outputs.ARM_CLIENT_SECRET }}
- DIGITALOCEAN_TOKEN: ${{ steps.esc-secrets.outputs.DIGITALOCEAN_TOKEN }}
- DOCKER_HUB_PASSWORD: ${{ steps.esc-secrets.outputs.DOCKER_HUB_PASSWORD }}
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Upload coverage reports to Codecov
- uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
- env:
- CODECOV_TOKEN: ${{ steps.esc-secrets.outputs.CODECOV_TOKEN }}
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure in building provider prerequisites
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
- build_sdks:
- needs: prerequisites
- runs-on: pulumi-ubuntu-8core
- strategy:
- fail-fast: ${{ ! contains(github.actor, 'renovate') }}
- matrix:
- language:
- - nodejs
- - python
- - dotnet
- - go
- - java
- name: build_sdks
- permissions:
- contents: read
- id-token: write # For ESC secrets.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - name: Setup Node
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
- with:
- node-version: ${{ env.NODEVERSION }}
- registry-url: https://registry.npmjs.org
- - name: Setup DotNet
- uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
- with:
- dotnet-version: ${{ env.DOTNETVERSION }}
- - name: Setup Python
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
- with:
- python-version: ${{ env.PYTHONVERSION }}
- - name: Setup Java
- uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
- with:
- java-version: ${{ env.JAVAVERSION }}
- distribution: temurin
- cache: gradle
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3
- with:
- gradle-version: "7.6"
- - name: Download provider
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
- path: ${{ github.workspace }}/bin
- - name: UnTar provider binaries
- run: tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin
- - name: Restore Binary Permissions
- run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
- -exec chmod +x {} \;
- - name: Generate SDK
- run: make generate_${{ matrix.language }}
- - name: Build SDK
- run: make build_${{ matrix.language }}
- - name: Check worktree clean
- id: worktreeClean
- uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
- with:
- allowed-changes: |-
- sdk/**/pulumi-plugin.json
- sdk/dotnet/*.*.csproj
- sdk/dotnet/version.txt
- sdk/go/**/pulumiUtilities.go
- sdk/nodejs/package.json
- sdk/python/pyproject.toml
- sdk/java/build.gradle
- - name: Commit SDK changes for Renovate
- if: failure() && steps.worktreeClean.outcome == 'failure' &&
- contains(github.actor, 'renovate') && github.event_name ==
- 'pull_request'
- shell: bash
- run: >
- git diff --quiet -- sdk && echo "no changes to sdk" && exit
-
- git config --global user.email "bot@pulumi.com"
-
- git config --global user.name "pulumi-bot"
-
- # Stash local changes and check out the PR's branch directly.
-
- git stash
-
- git fetch
-
- git checkout "origin/$HEAD_REF"
-
-
- # Apply and add our changes, but don't commit any files we expect to
-
- # always change due to versioning.
-
- git stash pop
-
- git add sdk
-
- git reset sdk/python/*/pulumi-plugin.json \
- sdk/python/pyproject.toml \
- sdk/dotnet/pulumi-plugin.json \
- sdk/dotnet/*.*.csproj \
- sdk/dotnet/version.txt \
- sdk/go/*/pulumi-plugin.json \
- sdk/go/*/internal/pulumiUtilities.go \
- sdk/nodejs/package.json
-
- git commit -m 'Commit SDK for Renovate'
-
-
- # Push with pulumi-bot credentials to trigger a re-run of the
-
- # workflow. https://github.com/orgs/community/discussions/25702
-
- git push https://pulumi-bot:${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}@github.com/${{ github.repository }} "HEAD:$HEAD_REF"
- env:
- HEAD_REF: ${{ github.head_ref }}
- - run: git status --porcelain
- - name: Tar SDK folder
- run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
- - name: Upload artifacts
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
- with:
- name: ${{ matrix.language }}-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/${{ matrix.language }}.tar.gz
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure while building SDKs
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
- test:
- runs-on: pulumi-ubuntu-8core
- needs:
- - build_sdks
- strategy:
- fail-fast: true
- matrix:
- language:
- - nodejs
- - python
- - dotnet
- - go
- - java
- - yaml
- name: test
- permissions:
- contents: read
- id-token: write # For ESC secrets.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - name: Setup Node
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
- with:
- node-version: ${{ env.NODEVERSION }}
- registry-url: https://registry.npmjs.org
- - name: Setup DotNet
- uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
- with:
- dotnet-version: ${{ env.DOTNETVERSION }}
- - name: Setup Python
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
- with:
- python-version: ${{ env.PYTHONVERSION }}
- - name: Setup Java
- uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
- with:
- java-version: ${{ env.JAVAVERSION }}
- distribution: temurin
- cache: gradle
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3
- with:
- gradle-version: "7.6"
- - name: Download provider
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
- path: ${{ github.workspace }}/bin
- - name: UnTar provider binaries
- run: tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin
- - name: Restore Binary Permissions
- run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
- -exec chmod +x {} \;
- - name: Download SDK
- if: ${{ matrix.language != 'yaml' }}
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: ${{ matrix.language }}-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: UnTar SDK folder
- if: ${{ matrix.language != 'yaml' }}
- run: tar -zxf ${{ github.workspace}}/sdk/${{ matrix.language}}.tar.gz -C ${{
- github.workspace}}/sdk/${{ matrix.language}}
- - name: Update path
- run: echo "${{ github.workspace }}/bin" >> "$GITHUB_PATH"
- - name: Install Node dependencies
- run: yarn global add typescript
- - run: dotnet nuget add source ${{ github.workspace }}/nuget
- - name: Install Python deps
- run: |-
- pip3 install virtualenv==20.0.23
- pip3 install pipenv
- - name: Install dependencies
- if: ${{ matrix.language != 'yaml' }}
- run: make install_${{ matrix.language}}_sdk
- - name: Generate Pulumi Access Token
- id: generate_pulumi_token
- uses: pulumi/auth-actions@1c89817aab0c66407723cdef72b05266e7376640 # v1.0.1
- with:
- organization: pulumi
- requested-token-type: urn:pulumi:token-type:access_token:organization
- export-environment-variables: false
- - name: Export AWS Credentials
- uses: pulumi/esc-action@efb0bc8946938f0dfbfa00e829196ec95f0d0ea7 # v1.4.0
- env:
- PULUMI_ACCESS_TOKEN: ${{ steps.generate_pulumi_token.outputs.pulumi-access-token }}
- with:
- environment: logins/pulumi-ci
- - name: Authenticate to Google Cloud
- uses: google-github-actions/auth@7c6bc770dae815cd3e89ee6cdf493a5fab2cc093 # v3.0.0
- with:
- workload_identity_provider: projects/${{ env.GOOGLE_PROJECT_NUMBER
- }}/locations/global/workloadIdentityPools/${{
- env.GOOGLE_CI_WORKLOAD_IDENTITY_POOL }}/providers/${{
- env.GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER }}
- service_account: ${{ env.GOOGLE_CI_SERVICE_ACCOUNT_EMAIL }}
- - name: Setup gcloud auth
- uses: google-github-actions/setup-gcloud@aa5489c8933f4cc7a4f7d45035b3b1440c9c10db # v3.0.1
- with:
- install_components: gke-gcloud-auth-plugin
- - name: Install gotestfmt
- uses: GoTestTools/gotestfmt-action@v2
- with:
- version: v2.5.0
- token: ${{ secrets.GITHUB_TOKEN }}
- - name: Run tests
- run: >-
- set -euo pipefail
-
- cd examples && go test -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 .
- env:
- GTIHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure in SDK tests
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
- publish:
- runs-on: ubuntu-latest
- needs: test
- name: publish
- permissions:
- contents: read
- id-token: write # For ESC secrets.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Clear GitHub Actions Ubuntu runner disk space
- uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
- with:
- tool-cache: false
- dotnet: false
- android: true
- haskell: true
- swap-storage: true
- large-packages: false
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - name: Configure AWS Credentials
- uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 # v5.0.0
- with:
- aws-access-key-id: ${{ steps.esc-secrets.outputs.AWS_ACCESS_KEY_ID }}
- aws-region: us-east-2
- aws-secret-access-key: ${{ steps.esc-secrets.outputs.AWS_SECRET_ACCESS_KEY }}
- role-duration-seconds: 7200
- role-session-name: ${{ env.PROVIDER }}@githubActions
- role-external-id: upload-pulumi-release
- role-to-assume: ${{ steps.esc-secrets.outputs.AWS_UPLOAD_ROLE_ARN }}
- - name: Run GoReleaser
- uses: goreleaser/goreleaser-action@5742e2a039330cbb23ebf35f046f814d4c6ff811 # v5.1.0
- env:
- GORELEASER_CURRENT_TAG: v${{ steps.version.outputs.version }}
- AZURE_SIGNING_CLIENT_ID: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_ID }}
- AZURE_SIGNING_CLIENT_SECRET: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_SECRET }}
- AZURE_SIGNING_TENANT_ID: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_TENANT_ID }}
- AZURE_SIGNING_KEY_VAULT_URI: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_KEY_VAULT_URI }}
- SKIP_SIGNING: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_ID == '' && steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_SECRET == '' && steps.esc-secrets.outputs.AZURE_SIGNING_TENANT_ID == '' && steps.esc-secrets.outputs.AZURE_SIGNING_KEY_VAULT_URI == '' }}
- GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
- with:
- args: -p 3 release --clean --timeout 60m0s
- version: latest
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure in publishing binaries
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
- publish_sdk:
- runs-on: ubuntu-latest
- needs: publish
- name: publish_sdks
- permissions:
- contents: read
- id-token: write # For ESC secrets.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Checkout Scripts Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- path: ci-scripts
- repository: pulumi/scripts
- - run: echo "ci-scripts" >> .git/info/exclude
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - name: Setup Node
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
- with:
- node-version: ${{ env.NODEVERSION }}
- registry-url: https://registry.npmjs.org
- - name: Setup DotNet
- uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
- with:
- dotnet-version: ${{ env.DOTNETVERSION }}
- - name: Setup Python
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
- with:
- python-version: ${{ env.PYTHONVERSION }}
- - name: Download python SDK
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: python-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress python SDK
- run: tar -zxf ${{github.workspace}}/sdk/python.tar.gz -C
- ${{github.workspace}}/sdk/python
- - name: Download dotnet SDK
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: dotnet-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress dotnet SDK
- run: tar -zxf ${{github.workspace}}/sdk/dotnet.tar.gz -C
- ${{github.workspace}}/sdk/dotnet
- - name: Download nodejs SDK
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: nodejs-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress nodejs SDK
- run: tar -zxf ${{github.workspace}}/sdk/nodejs.tar.gz -C
- ${{github.workspace}}/sdk/nodejs
- - name: Install Twine
- run: python -m pip install twine==5.0.0
- - name: Publish SDKs
- run: ./ci-scripts/ci/publish-tfgen-package ${{ github.workspace }}
- env:
- NUGET_PUBLISH_KEY: ${{ steps.esc-secrets.outputs.NUGET_PUBLISH_KEY }}
- NODE_AUTH_TOKEN: ${{ steps.esc-secrets.outputs.NPM_TOKEN }}
- PYPI_PUBLISH_ARTIFACTS: all
- PYPI_USERNAME: __token__
- PYPI_PASSWORD: ${{ steps.esc-secrets.outputs.PYPI_API_TOKEN }}
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure in publishing SDK
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
- publish_java_sdk:
- runs-on: ubuntu-latest
- continue-on-error: true
- needs: publish
- name: publish_java_sdk
- permissions:
- contents: read
- id-token: write # For ESC secrets.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - name: Setup Java
- uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
- with:
- java-version: ${{ env.JAVAVERSION }}
- distribution: temurin
- cache: gradle
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3
- with:
- gradle-version: "7.6"
- - name: Download java SDK
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: java-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress java SDK
- run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C
- ${{github.workspace}}/sdk/java
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3
- with:
- gradle-version: "7.6"
- - name: Publish Java SDK
- run: gradle -p ./sdk/java publishToSonatype closeAndReleaseSonatypeStagingRepository
- env:
- PACKAGE_VERSION: ${{ env.PROVIDER_VERSION }}
- SIGNING_KEY_ID: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_KEY_ID }}
- SIGNING_KEY: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_KEY }}
- SIGNING_PASSWORD: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_PASSWORD }}
- PUBLISH_REPO_PASSWORD: ${{ steps.esc-secrets.outputs.OSSRH_PASSWORD }}
- PUBLISH_REPO_USERNAME: ${{ steps.esc-secrets.outputs.OSSRH_USERNAME }}
- publish_go_sdk:
- runs-on: ubuntu-latest
- name: publish-go-sdk
- needs: publish_sdk
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Download go SDK
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: go-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: Uncompress go SDK
- run: tar -zxf ${{github.workspace}}/sdk/go.tar.gz -C
- ${{github.workspace}}/sdk/go
- - name: Publish Go SDK
- uses: pulumi/publish-go-sdk-action@v1
- with:
- repository: ${{ github.repository }}
- base-ref: ${{ github.sha }}
- source: sdk/go/dockerbuild
- path: sdk/go/dockerbuild
- version: ${{ steps.version.outputs.version }}
- additive: false
- files: "**"
- dispatch_docs_build:
- runs-on: ubuntu-latest
- needs: publish_go_sdk
- permissions:
- contents: read
- id-token: write # For ESC secrets.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Dispatch Event
- run: pulumictl create docs-build pulumi-${{ env.PROVIDER }}
- "${GITHUB_REF#refs/tags/}"
- env:
- GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
- name: dispatch_docs_build
diff --git a/.github/workflows/release_command.yml b/.github/workflows/release_command.yml
deleted file mode 100644
index f70c3ac..0000000
--- a/.github/workflows/release_command.yml
+++ /dev/null
@@ -1,54 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten when regenerated by https://github.com/pulumi/ci-mgmt
-
-name: release-command
-on:
- repository_dispatch:
- types:
- - release-command
-jobs:
- should_release:
- name: Should release PR
- runs-on: ubuntu-latest
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- persist-credentials: false
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - name: Should release PR
- uses: pulumi/action-release-by-pr-label@main
- with:
- command: "should-release"
- repo: ${{ github.repository }}
- pr: ${{ github.event.client_payload.pull_request.number }}
- version: ${{ github.event.client_payload.slash_command.args.all }}
- slack_channel: ${{ steps.esc-secrets.outputs.RELEASE_OPS_STAGING_SLACK_CHANNEL }}
- env:
- RELEASE_BOT_ENDPOINT: ${{ steps.esc-secrets.outputs.RELEASE_BOT_ENDPOINT }}
- RELEASE_BOT_KEY: ${{ steps.esc-secrets.outputs.RELEASE_BOT_KEY }}
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - if: failure()
- name: Notify failure
- uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0
- with:
- token: ${{ secrets.GITHUB_TOKEN }}
- repository: ${{ github.event.client_payload.github.payload.repository.full_name }}
- issue-number: ${{ github.event.client_payload.github.payload.issue.number }}
- body: |
- "release command failed: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
- - if: success()
- name: Notify success
- uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0
- with:
- token: ${{ secrets.GITHUB_TOKEN }}
- repository: ${{ github.event.client_payload.github.payload.repository.full_name }}
- comment-id: ${{ github.event.client_payload.github.payload.comment.id }}
- reaction-type: hooray
diff --git a/.github/workflows/run-acceptance-tests.yml b/.github/workflows/run-acceptance-tests.yml
deleted file mode 100644
index f1ecb18..0000000
--- a/.github/workflows/run-acceptance-tests.yml
+++ /dev/null
@@ -1,615 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
-
-name: run-acceptance-tests
-on:
- repository_dispatch:
- types:
- - run-acceptance-tests-command
- pull_request:
- paths-ignore:
- - CHANGELOG.md
- workflow_dispatch: {}
-env:
- PROVIDER: docker-build
- PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
- TRAVIS_OS_NAME: linux
- PULUMI_GO_DEP_ROOT: ${{ github.workspace }}/..
- GOVERSION: "1.21.x"
- NODEVERSION: "20.x"
- PYTHONVERSION: "3.11.8"
- DOTNETVERSION: "8.0.x"
- JAVAVERSION: "11"
- ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
- ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
- ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
- AWS_REGION: us-west-2
- AZURE_LOCATION: westus
- GOOGLE_CI_SERVICE_ACCOUNT_EMAIL: pulumi-ci@pulumi-ci-gcp-provider.iam.gserviceaccount.com
- GOOGLE_CI_WORKLOAD_IDENTITY_POOL: pulumi-ci
- GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER: pulumi-ci
- GOOGLE_PROJECT: pulumi-ci-gcp-provider
- GOOGLE_PROJECT_NUMBER: "895284651812"
- GOOGLE_REGION: us-central1
- GOOGLE_ZONE: us-central1-a
- PULUMI_API: https://api.pulumi-staging.io
- PR_COMMIT_SHA: ${{ github.event.client_payload.pull_request.head.sha }}
-jobs:
- comment-notification:
- if: github.event_name == 'repository_dispatch'
- runs-on: ubuntu-latest
- name: comment-notification
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- persist-credentials: false
- ref: ${{ env.PR_COMMIT_SHA }}
- - name: Create URL to the run output
- id: vars
- run: echo
- "run-url=https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID"
- >> "$GITHUB_OUTPUT"
- - name: Update with Result
- uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0
- with:
- token: ${{ secrets.GITHUB_TOKEN }}
- repository: ${{ github.event.client_payload.github.payload.repository.full_name }}
- issue-number: ${{ github.event.client_payload.github.payload.issue.number }}
- body: "Please view the PR build: ${{ steps.vars.outputs.run-url }}"
- prerequisites:
- runs-on: ubuntu-latest
- name: prerequisites
- permissions:
- id-token: write # For ESC secrets.
- pull-requests: write # For schema check comment.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- persist-credentials: false
- ref: ${{ env.PR_COMMIT_SHA }}
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - if: github.event_name == 'pull_request'
- name: Install Schema Tools
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/schema-tools
- - name: Build codegen binaries
- run: make codegen
- - name: Build Schema
- run: make generate_schema
- - if: github.event_name == 'pull_request'
- name: Check Schema is Valid
- run: >-
- {
- echo 'SCHEMA_CHANGES<> "$GITHUB_ENV"
- env:
- GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
- - if: github.event_name == 'pull_request' && github.actor != 'dependabot[bot]'
- name: Comment on PR with Details of Schema Check
- uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
- with:
- message: |
- ${{ env.SCHEMA_CHANGES }}
- comment-tag: schemaCheck
- github-token: ${{ secrets.GITHUB_TOKEN }}
- - if: contains(env.SCHEMA_CHANGES, 'Looking good! No breaking changes found.') &&
- github.actor == 'pulumi-bot'
- name: Add label if no breaking changes
- uses: actions-ecosystem/action-add-labels@18f1af5e3544586314bbe15c0273249c770b2daf # v1.1.3
- with:
- labels: impact/no-changelog-required
- number: ${{ github.event.issue.number }}
- github_token: ${{ secrets.GITHUB_TOKEN }}
- - name: Build Provider
- run: make provider
- - name: Check worktree clean
- id: worktreeClean
- uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
- with:
- allowed-changes: |-
- sdk/**/pulumi-plugin.json
- sdk/dotnet/*.*.csproj
- sdk/dotnet/version.txt
- sdk/go/**/pulumiUtilities.go
- sdk/nodejs/package.json
- sdk/python/pyproject.toml
- sdk/java/build.gradle
- - name: Commit SDK changes for Renovate
- if: failure() && steps.worktreeClean.outcome == 'failure' &&
- contains(github.actor, 'renovate') && github.event_name ==
- 'pull_request'
- shell: bash
- run: >
- git diff --quiet -- sdk && echo "no changes to sdk" && exit
-
- git config --global user.email "bot@pulumi.com"
-
- git config --global user.name "pulumi-bot"
-
- # Stash local changes and check out the PR's branch directly.
-
- git stash
-
- git fetch
-
- git checkout "origin/$HEAD_REF"
-
-
- # Apply and add our changes, but don't commit any files we expect to
-
- # always change due to versioning.
-
- git stash pop
-
- git add sdk
-
- git reset sdk/python/*/pulumi-plugin.json \
- sdk/python/pyproject.toml \
- sdk/dotnet/pulumi-plugin.json \
- sdk/dotnet/*.*.csproj \
- sdk/dotnet/version.txt \
- sdk/go/*/pulumi-plugin.json \
- sdk/go/*/internal/pulumiUtilities.go \
- sdk/nodejs/package.json
-
- git commit -m 'Commit SDK for Renovate'
-
-
- # Push with pulumi-bot credentials to trigger a re-run of the
-
- # workflow. https://github.com/orgs/community/discussions/25702
-
- git push https://pulumi-bot:${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}@github.com/${{ github.repository }} "HEAD:$HEAD_REF"
- env:
- HEAD_REF: ${{ github.head_ref }}
- - run: git status --porcelain
- - name: Tar provider binaries
- run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin/ pulumi-resource-${{ env.PROVIDER }}
- pulumi-gen-${{ env.PROVIDER}}
- - name: Upload artifacts
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
- with:
- name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
- path: ${{ github.workspace }}/bin/provider.tar.gz
- - name: Test Provider Library
- run: make test_provider
- env:
- ARM_CLIENT_SECRET: ${{ steps.esc-secrets.outputs.ARM_CLIENT_SECRET }}
- DIGITALOCEAN_TOKEN: ${{ steps.esc-secrets.outputs.DIGITALOCEAN_TOKEN }}
- DOCKER_HUB_PASSWORD: ${{ steps.esc-secrets.outputs.DOCKER_HUB_PASSWORD }}
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Upload coverage reports to Codecov
- uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
- env:
- CODECOV_TOKEN: ${{ steps.esc-secrets.outputs.CODECOV_TOKEN }}
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure in building provider prerequisites
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
- if: github.event_name == 'repository_dispatch' ||
- github.event.pull_request.head.repo.full_name == github.repository
- build_sdks:
- needs: prerequisites
- runs-on: pulumi-ubuntu-8core
- strategy:
- fail-fast: ${{ ! contains(github.actor, 'renovate') }}
- matrix:
- language:
- - nodejs
- - python
- - dotnet
- - go
- - java
- name: build_sdks
- permissions:
- contents: read
- id-token: write # For ESC secrets.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- persist-credentials: false
- ref: ${{ env.PR_COMMIT_SHA }}
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - name: Setup Node
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
- with:
- node-version: ${{ env.NODEVERSION }}
- registry-url: https://registry.npmjs.org
- - name: Setup DotNet
- uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
- with:
- dotnet-version: ${{ env.DOTNETVERSION }}
- - name: Setup Python
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
- with:
- python-version: ${{ env.PYTHONVERSION }}
- - name: Setup Java
- uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
- with:
- java-version: ${{ env.JAVAVERSION }}
- distribution: temurin
- cache: gradle
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3
- with:
- gradle-version: "7.6"
- - name: Download provider
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
- path: ${{ github.workspace }}/bin
- - name: UnTar provider binaries
- run: tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin
- - name: Restore Binary Permissions
- run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
- -exec chmod +x {} \;
- - name: Generate SDK
- run: make generate_${{ matrix.language }}
- - name: Build SDK
- run: make build_${{ matrix.language }}
- - name: Check worktree clean
- id: worktreeClean
- uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
- with:
- allowed-changes: |-
- sdk/**/pulumi-plugin.json
- sdk/dotnet/*.*.csproj
- sdk/dotnet/version.txt
- sdk/go/**/pulumiUtilities.go
- sdk/nodejs/package.json
- sdk/python/pyproject.toml
- sdk/java/build.gradle
- - name: Commit SDK changes for Renovate
- if: failure() && steps.worktreeClean.outcome == 'failure' &&
- contains(github.actor, 'renovate') && github.event_name ==
- 'pull_request'
- shell: bash
- run: >
- git diff --quiet -- sdk && echo "no changes to sdk" && exit
-
- git config --global user.email "bot@pulumi.com"
-
- git config --global user.name "pulumi-bot"
-
- # Stash local changes and check out the PR's branch directly.
-
- git stash
-
- git fetch
-
- git checkout "origin/$HEAD_REF"
-
-
- # Apply and add our changes, but don't commit any files we expect to
-
- # always change due to versioning.
-
- git stash pop
-
- git add sdk
-
- git reset sdk/python/*/pulumi-plugin.json \
- sdk/python/pyproject.toml \
- sdk/dotnet/pulumi-plugin.json \
- sdk/dotnet/*.*.csproj \
- sdk/dotnet/version.txt \
- sdk/go/*/pulumi-plugin.json \
- sdk/go/*/internal/pulumiUtilities.go \
- sdk/nodejs/package.json
-
- git commit -m 'Commit SDK for Renovate'
-
- # Push with pulumi-bot credentials to trigger a re-run of the
-
- # workflow. https://github.com/orgs/community/discussions/25702
-
- git push https://pulumi-bot:${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}@github.com/${{ github.repository }} "HEAD:$HEAD_REF"
- env:
- HEAD_REF: ${{ github.head_ref }}
- - run: git status --porcelain
- - name: Tar SDK folder
- run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
- - name: Upload artifacts
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
- with:
- name: ${{ matrix.language }}-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/${{ matrix.language }}.tar.gz
- retention-days: 30
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure while building SDKs
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
- if: github.event_name == 'repository_dispatch' ||
- github.event.pull_request.head.repo.full_name == github.repository
- test:
- runs-on: pulumi-ubuntu-8core
- needs:
- - build_sdks
- strategy:
- fail-fast: true
- matrix:
- language:
- - nodejs
- - python
- - dotnet
- - go
- - java
- - yaml
- name: test
- permissions:
- contents: read
- id-token: write
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- persist-credentials: false
- ref: ${{ env.PR_COMMIT_SHA }}
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - name: Setup Node
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
- with:
- node-version: ${{ env.NODEVERSION }}
- registry-url: https://registry.npmjs.org
- - name: Setup DotNet
- uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
- with:
- dotnet-version: ${{ env.DOTNETVERSION }}
- - name: Setup Python
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
- with:
- python-version: ${{ env.PYTHONVERSION }}
- - name: Setup Java
- uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
- with:
- java-version: ${{ env.JAVAVERSION }}
- distribution: temurin
- cache: gradle
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3
- with:
- gradle-version: "7.6"
- - name: Download provider
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
- path: ${{ github.workspace }}/bin
- - name: UnTar provider binaries
- run: tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
- github.workspace}}/bin
- - name: Restore Binary Permissions
- run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
- -exec chmod +x {} \;
- - name: Download SDK
- if: ${{ matrix.language != 'yaml' }}
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
- with:
- name: ${{ matrix.language }}-sdk.tar.gz
- path: ${{ github.workspace}}/sdk/
- - name: UnTar SDK folder
- if: ${{ matrix.language != 'yaml' }}
- run: tar -zxf ${{ github.workspace}}/sdk/${{ matrix.language}}.tar.gz -C ${{
- github.workspace}}/sdk/${{ matrix.language}}
- - name: Update path
- run: echo "${{ github.workspace }}/bin" >> "$GITHUB_PATH"
- - name: Install Node dependencies
- run: yarn global add typescript
- - run: dotnet nuget add source ${{ github.workspace }}/nuget
- - name: Install Python deps
- run: |-
- pip3 install virtualenv==20.0.23
- pip3 install pipenv
- - name: Install dependencies
- if: ${{ matrix.language != 'yaml' }}
- run: make install_${{ matrix.language}}_sdk
- - name: Generate Pulumi Access Token
- id: generate_pulumi_token
- uses: pulumi/auth-actions@1c89817aab0c66407723cdef72b05266e7376640 # v1.0.1
- with:
- organization: pulumi
- requested-token-type: urn:pulumi:token-type:access_token:organization
- export-environment-variables: false
- - name: Export AWS Credentials
- uses: pulumi/esc-action@efb0bc8946938f0dfbfa00e829196ec95f0d0ea7 # v1.4.0
- env:
- PULUMI_ACCESS_TOKEN: ${{ steps.generate_pulumi_token.outputs.pulumi-access-token }}
- with:
- environment: logins/pulumi-ci
- - name: Authenticate to Google Cloud
- uses: google-github-actions/auth@7c6bc770dae815cd3e89ee6cdf493a5fab2cc093 # v3.0.0
- with:
- workload_identity_provider: projects/${{ env.GOOGLE_PROJECT_NUMBER
- }}/locations/global/workloadIdentityPools/${{
- env.GOOGLE_CI_WORKLOAD_IDENTITY_POOL }}/providers/${{
- env.GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER }}
- service_account: ${{ env.GOOGLE_CI_SERVICE_ACCOUNT_EMAIL }}
- - name: Setup gcloud auth
- uses: google-github-actions/setup-gcloud@aa5489c8933f4cc7a4f7d45035b3b1440c9c10db # v3.0.1
- with:
- install_components: gke-gcloud-auth-plugin
- - name: Install gotestfmt
- uses: GoTestTools/gotestfmt-action@v2
- with:
- version: v2.5.0
- token: ${{ secrets.GITHUB_TOKEN }}
- - name: Run tests
- run: >-
- set -euo pipefail
-
- cd examples && go test -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 .
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
- with:
- author_name: Failure in SDK tests
- fields: repo,commit,author,action
- status: ${{ job.status }}
- env:
- SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
- if: github.event_name == 'repository_dispatch' ||
- github.event.pull_request.head.repo.full_name == github.repository
- sentinel:
- runs-on: ubuntu-latest
- name: sentinel
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- persist-credentials: false
- ref: ${{ env.PR_COMMIT_SHA }}
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - name: Mark workflow as successful
- uses: guibranco/github-status-action-v2@0849440ec82c5fa69b2377725b9b7852a3977e76 # v1.1.13
- with:
- authToken: ${{ secrets.GITHUB_TOKEN }}
- context: Sentinel
- state: success
- description: Sentinel checks passed
- sha: ${{ github.event.pull_request.head.sha || github.sha }}
- permissions:
- statuses: write
- id-token: write # For ESC secrets.
- if: github.event_name == 'repository_dispatch' ||
- github.event.pull_request.head.repo.full_name == github.repository
- needs:
- - test
- - prerequisites
- - lint
- lint:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- persist-credentials: false
- ref: ${{ env.PR_COMMIT_SHA }}
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Disarm go:embed directives to enable linters that compile source code
- run: git grep -l 'go:embed' -- provider | xargs --no-run-if-empty sed -i
- 's/go:embed/ goembed/g'
- - name: golangci-lint provider pkg
- uses: golangci/golangci-lint-action@55c2c1448f86e01eaae002a5a3a9624417608d84 # v6.5.2
- with:
- version: ${{ env.GOLANGCI_LINT_VERSION }}
- args: -c ../.golangci.yml
- working-directory: provider
- name: lint
- if: github.event_name == 'repository_dispatch' ||
- github.event.pull_request.head.repo.full_name == github.repository
diff --git a/.github/workflows/weekly-pulumi-update.yml b/.github/workflows/weekly-pulumi-update.yml
deleted file mode 100644
index 58e7ae6..0000000
--- a/.github/workflows/weekly-pulumi-update.yml
+++ /dev/null
@@ -1,144 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
-
-name: weekly-pulumi-update
-on:
- schedule:
- - cron: 35 12 * * 4
- workflow_dispatch: {}
-env:
- GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
- PROVIDER: docker-build
- PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
- TRAVIS_OS_NAME: linux
- PULUMI_GO_DEP_ROOT: ${{ github.workspace }}/..
- GOVERSION: "1.21.x"
- NODEVERSION: "20.x"
- PYTHONVERSION: "3.11.8"
- DOTNETVERSION: "8.0.x"
- JAVAVERSION: "11"
- ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
- ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
- ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
- AWS_REGION: us-west-2
- AZURE_LOCATION: westus
- GOOGLE_CI_SERVICE_ACCOUNT_EMAIL: pulumi-ci@pulumi-ci-gcp-provider.iam.gserviceaccount.com
- GOOGLE_CI_WORKLOAD_IDENTITY_POOL: pulumi-ci
- GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER: pulumi-ci
- GOOGLE_PROJECT: pulumi-ci-gcp-provider
- GOOGLE_PROJECT_NUMBER: "895284651812"
- GOOGLE_REGION: us-central1
- GOOGLE_ZONE: us-central1-a
- PULUMI_API: https://api.pulumi-staging.io
-
-jobs:
- weekly-pulumi-update:
- runs-on: ubuntu-latest
- permissions: write-all
- steps:
- - name: Checkout Repo
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- lfs: true
- - env:
- ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
- ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
- ESC_ACTION_OIDC_AUTH: "true"
- ESC_ACTION_OIDC_ORGANIZATION: pulumi
- ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
- id: esc-secrets
- name: Fetch secrets from ESC
- uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- - name: Install Go
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
- with:
- go-version: ${{ env.GOVERSION }}
- cache-dependency-path: "**/*.sum"
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
- with:
- repo: pulumi/pulumictl
- - name: Install Pulumi CLI
- uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- - name: Setup DotNet
- uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
- with:
- dotnet-version: ${{ env.DOTNETVERSION }}
- - name: Setup Node
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
- with:
- node-version: ${{ env.NODEVERSION }}
- registry-url: https://registry.npmjs.org
- - name: Setup Python
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
- with:
- python-version: ${{ env.PYTHONVERSION }}
- - name: Setup Java
- uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
- with:
- java-version: ${{ env.JAVAVERSION }}
- distribution: temurin
- cache: gradle
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3
- with:
- gradle-version: "7.6"
- - name: Update Pulumi/Pulumi
- id: gomod
- run: >-
- git config --local user.email 'bot@pulumi.com'
-
- git config --local user.name 'pulumi-bot'
-
- git checkout -b update-pulumi/${{ github.run_id }}-${{ github.run_number }}
-
- find . -name go.mod -execdir sh -c 'go get github.com/pulumi/pulumi/pkg/v3 github.com/pulumi/pulumi/sdk/v3; go mod tidy' \;
-
- gh repo view pulumi/pulumi --json latestRelease --jq .latestRelease.tagName | sed 's/^v//' > .pulumi.version
-
- git update-index -q --refresh
-
- if ! git diff-files --quiet; then echo changes=1 >> "$GITHUB_OUTPUT"; fi
- - name: Provider with Pulumi Upgrade
- if: steps.gomod.outputs.changes != 0
- run: >-
- make codegen && make local_generate
-
- git add sdk/nodejs
-
- git commit -m "Regenerating Node.js SDK based on updated modules" || echo "ignore commit failure, may be empty"
-
- git add sdk/python
-
- git commit -m "Regenerating Python SDK based on updated modules" || echo "ignore commit failure, may be empty"
-
- git add sdk/dotnet
-
- git commit -m "Regenerating .NET SDK based on updated modules" || echo "ignore commit failure, may be empty"
-
- git add sdk/go*
-
- git commit -m "Regenerating Go SDK based on updated modules" || echo "ignore commit failure, may be empty"
-
- git add sdk/java*
-
- git commit -m "Regenerating Java SDK based on updated modules" || echo "ignore commit failure, may be empty"
-
- git add .
-
- git commit -m "Updated modules" || echo "ignore commit failure, may be empty"
-
- git push origin update-pulumi/${{ github.run_id }}-${{ github.run_number }}
- - name: Create PR
- id: create-pr
- if: steps.gomod.outputs.changes != 0
- run: >
- ver=$(cat .pulumi.version)
-
- msg="Automated upgrade: bump pulumi/pulumi to ${ver}"
-
- # See https://github.com/cli/cli/issues/6485#issuecomment-2560935183 for --head workaround
-
- gh pr create -t "$msg" -b "$msg" --head "$(git branch --show-current)"
- env:
- GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
- name: weekly-pulumi-update
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index a4cd8b9..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,21 +0,0 @@
-/vendor/
-**/bin/
-**/obj/
-**/node_modules/
-**/.vs
-**/.idea
-**/.ionide
-**/.vscode
-*.swp
-Pulumi.*.yaml
-yarn.lock
-ci-scripts
-nuget/
-coverage.txt
-
-
-sdk/dotnet/version.txt
-sdk/java/.gradle
-sdk/java/build/
-sdk/java/build.gradle
-sdk/python/venv
diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index caa22b6..0000000
--- a/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule ".devcontainer"]
- path = .devcontainer
- url = https://github.com/pulumi/devcontainer
diff --git a/.golangci.yml b/.golangci.yml
deleted file mode 100644
index 97f40a5..0000000
--- a/.golangci.yml
+++ /dev/null
@@ -1,104 +0,0 @@
-run:
- timeout: 10m
-
-linters:
- enable-all: false
- enable:
- - depguard
- - errcheck
- - exhaustive
- - copyloopvar
- - gci
- - gocritic
- - gofumpt
- - goheader
- - gosec
- - govet
- - importas
- - ineffassign
- - lll
- - misspell
- - nakedret
- - nolintlint
- - paralleltest
- - perfsprint
- - prealloc
- - revive
- - unconvert
- - unused
-
-linters-settings:
- depguard:
- rules:
- protobuf:
- deny:
- - pkg: "github.com/golang/protobuf"
- desc: Use google.golang.org/protobuf instead
- gci:
- sections:
- - standard # Standard section: captures all standard library packages.
- - blank # Blank section: contains all blank imports.
- - default # Default section: contains all imports that could not be matched to another section type.
- - prefix(github.com/pulumi/) # Custom section: groups all imports with the github.com/pulumi/ prefix.
- - prefix(github.com/pulumi/pulumi-dockerbuild/) # Custom section: local imports
- custom-order: true
- gocritic:
- enable-all: true
- disabled-checks:
- - hugeParam
- - importShadow
- goheader:
- template: |-
- Copyright 2024, Pulumi Corporation.
-
- 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.
- govet:
- enable:
- - nilness
- # Reject comparisons of reflect.Value with DeepEqual or '=='.
- - reflectvaluecompare
- # Reject sort.Slice calls with a non-slice argument.
- - sortslice
- # Detect write to struct/arrays by-value that aren't read again.
- - unusedwrite
- nakedret:
- # Make an issue if func has more lines of code than this setting, and it has naked returns.
- # Default: 30
- max-func-lines: 60
- nolintlint:
- # Some linter exclusions are added to generated or templated files
- # pre-emptively.
- # Don't complain about these.
- allow-unused: true
-
-issues:
- exclude-use-default: false
- exclude-rules:
- # Don't warn on unused parameters.
- # Parameter names are useful; replacing them with '_' is undesirable.
- - linters: [revive]
- text: 'unused-parameter: parameter \S+ seems to be unused, consider removing or renaming it as _'
-
- # staticcheck already has smarter checks for empty blocks.
- # revive's empty-block linter has false positives.
- # For example, as of writing this, the following is not allowed.
- # for foo() { }
- - linters: [revive]
- text: "empty-block: this block is empty, you can remove it"
-
- # We *frequently* use the term 'new' in the context of properties
- # (new and old properties),
- # and we rarely use the 'new' built-in function.
- # It's fine to ignore these cases.
- - linters: [revive]
- text: "redefines-builtin-id: redefinition of the built-in function new"
diff --git a/.goreleaser.prerelease.yml b/.goreleaser.prerelease.yml
deleted file mode 100644
index 6b465a7..0000000
--- a/.goreleaser.prerelease.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
-
-project_name: pulumi-docker-build
-builds:
-- id: build-provider
- dir: provider
- env:
- - CGO_ENABLED=0
- - GO111MODULE=on
- goos:
- - darwin
- - linux
- goarch:
- - amd64
- - arm64
- ignore: &a1 []
- main: ./cmd/pulumi-resource-docker-build/
- ldflags: &a2
- - -s
- - -w
- - -X
- github.com/pulumi/pulumi-docker-build/provider/pkg/version.Version={{.Tag}}
- - -X github.com/pulumi/pulumi-docker-build/provider.Version={{.Tag}}
- binary: pulumi-resource-docker-build
-- id: build-provider-sign-windows
- dir: provider
- env:
- - CGO_ENABLED=0
- - GO111MODULE=on
- goos:
- - windows
- goarch:
- - amd64
- - arm64
- ignore: *a1
- main: ./cmd/pulumi-resource-docker-build/
- ldflags: *a2
- binary: pulumi-resource-docker-build
- hooks:
- post:
- - make sign-goreleaser-exe-{{ .Arch }}
-archives:
-- name_template: "{{ .Binary }}-{{ .Tag }}-{{ .Os }}-{{ .Arch }}"
- id: archive
-snapshot:
- name_template: "{{ .Tag }}-SNAPSHOT"
-changelog:
- skip: true
-release:
- disable: true
-blobs:
-- provider: s3
- region: us-west-2
- bucket: get.pulumi.com
- folder: releases/plugins/
- ids:
- - archive
diff --git a/.goreleaser.yml b/.goreleaser.yml
deleted file mode 100644
index 2ae51d6..0000000
--- a/.goreleaser.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
-
-project_name: pulumi-docker-build
-builds:
-- id: build-provider
- dir: provider
- env:
- - CGO_ENABLED=0
- - GO111MODULE=on
- goos:
- - darwin
- - linux
- goarch:
- - amd64
- - arm64
- ignore: &a1 []
- main: ./cmd/pulumi-resource-docker-build/
- ldflags: &a2
- - -s
- - -w
- - -X
- github.com/pulumi/pulumi-docker-build/provider/pkg/version.Version={{.Tag}}
- - -X github.com/pulumi/pulumi-docker-build/provider.Version={{.Tag}}
- binary: pulumi-resource-docker-build
-- id: build-provider-sign-windows
- dir: provider
- env:
- - CGO_ENABLED=0
- - GO111MODULE=on
- goos:
- - windows
- goarch:
- - amd64
- - arm64
- ignore: *a1
- main: ./cmd/pulumi-resource-docker-build/
- ldflags: *a2
- binary: pulumi-resource-docker-build
- hooks:
- post:
- - make sign-goreleaser-exe-{{ .Arch }}
-archives:
-- name_template: "{{ .Binary }}-{{ .Tag }}-{{ .Os }}-{{ .Arch }}"
- id: archive
-snapshot:
- name_template: "{{ .Tag }}-SNAPSHOT"
-changelog:
- skip: true
-release:
- disable: false
-blobs:
-- provider: s3
- region: us-west-2
- bucket: get.pulumi.com
- folder: releases/plugins/
- ids:
- - archive
diff --git a/.pulumi.version b/.pulumi.version
deleted file mode 100644
index 5c1af09..0000000
--- a/.pulumi.version
+++ /dev/null
@@ -1 +0,0 @@
-3.192.0
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index fee47ce..0000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,133 +0,0 @@
-## Unreleased
-
-## 0.0.14 (2025-09-30)
-
-### Fixed
-
-- A warning is no longer emitted for the reserved `__internal` key. (https://github.com/pulumi/pulumi-docker-build/issues/579)
-
-## 0.0.13 (2025-08-27)
-
-### Changed
-
-- Docker Build Cloud and `exec` errors are more helpful. (https://github.com/pulumi/pulumi-docker-build/issues/549)
-
-### Fixed
-
-- The provider is no longer replaced on version changes. (https://github.com/pulumi/pulumi-docker-build/issues/581)
-
-## 0.0.12 (2025-05-16)
-
-### Changed
-
-- Upgraded pulumi-go-provider to v1.0.0-rc2.
-
-### Fixed
-
-- Builds now respect cancellation. (https://github.com/pulumi/pulumi-docker-build/issues/533, https://github.com/pulumi/pulumi-docker-build/pull/522)
-
-## 0.0.11 (2025-04-11)
-
-### Changed
-
-- Upgraded buildx from 0.18.0 to 0.20.1 to remain compatible with upcoming
- changes to GitHub Actions. (https://github.com/pulumi/pulumi-docker-build/pull/519)
-
-### Fixed
-
-- Upgrading docker-build no longer causes resource replacements. ()
-- Fixed a panic that could occur in `exec` mode. (https://github.com/pulumi/pulumi-docker-build/issues/482)
-- The default GitHub Actions cache scope is now correctly set as `buildkit`. (https://github.com/pulumi/pulumi-docker-build/issues/496)
-
-## 0.0.10 (2025-01-27)
-
-### Changed
-
-- Windows binaries are now signed. (https://github.com/pulumi/pulumi-docker-build/pull/429)
-
-## 0.0.9 (2025-01-16)
-
-### Changed
-
-- Upgraded pulumi-go-provider to v0.24.1. (https://github.com/pulumi/pulumi-docker-build/pull/413)
-
-### Fixed
-
-- `ACTIONS_RUNTIME_TOKEN` is now correctly marked as a secret. (https://github.com/pulumi/pulumi-docker-build/issues/403)
-
-## 0.0.8 (2024-12-10)
-
-### Added
-
-- Multiple exports are now allowed if the build daemon is detected to have
- version 0.13 of Buildkit or newer.
- (https://github.com/pulumi/pulumi-docker-build/issues/21)
-
-### Changed
-
-- Upgraded buildx from 0.16.0 to 0.18.0.
-
-### Fixed
-
-- Custom `# syntax=` directives no longer cause validation errors.
- (https://github.com/pulumi/pulumi-docker-build/issues/300)
-
-## 0.0.7 (2024-10-16)
-
-### Fixed
-
-- Fixed an issue where registry authentication couldn't be specified on the
- provider. ()
-
-## 0.0.6 (2024-08-13)
-
-### Fixed
-
-- Refreshing an `Index` resource will no longer fail if its stored credentials
- have expired. ()
-
-### Changed
-
-- Local and tar exporters will now trigger an update if an export doesn't exist
- at the expected path. ()
-
-## 0.0.5 (2024-08-08)
-
-### Fixed
-
-- Fixed Go SDK publishing.
-
-### Changed
-
-- Upgraded docker from 27.0.3 to 27.1.0.
-
-## 0.0.4 (2024-07-15)
-
-### Changed
-
-- Upgraded buildkit from 0.13.0 to 0.15.0.
-- Upgraded buildx from 0.13.1. to 0.16.0.
-- Upgraded docker from 26.0.0-rc1 to 27.0.3.
-- Fixed an issue where warnings were not displayed correctly.
-
-## 0.0.3 (2024-05-31)
-
-### Fixed
-
-- Fixed the default value for `ACTIONS_CACHE_URL` when using GitHub action caching. ()
-- Fixed Java SDK publishing. ()
-- Fixed a panic that could occur when `context` was omitted. ()
-
-### Changed
-
-- The provider will now wait for new builders to fully boot.
-
-## 0.0.2 (2024-04-25)
-
-### Fixed
-
-- Upgraded pulumi-go-provider to fix a panic during cancellation.
-
-## 0.0.1 (2024-04-23)
-
-Initial release.
diff --git a/CODE-OF-CONDUCT.md b/CODE-OF-CONDUCT.md
deleted file mode 100644
index 995e13c..0000000
--- a/CODE-OF-CONDUCT.md
+++ /dev/null
@@ -1,80 +0,0 @@
-# Contributor Covenant Code of Conduct
-
-## Our Pledge
-
-In the interest of fostering an open and welcoming environment, we as
-contributors and maintainers pledge to making participation in our project and
-our community a harassment-free experience for everyone, regardless of age, body
-size, disability, ethnicity, gender identity and expression, level of experience,
-education, socio-economic status, nationality, personal appearance, race,
-religion, or sexual identity and orientation.
-
-## Our Standards
-
-Examples of behavior that contributes to creating a positive environment
-include:
-
-* Using welcoming and inclusive language
-* Being respectful of differing viewpoints and experiences
-* Gracefully accepting constructive criticism
-* Focusing on what is best for the community
-* Showing empathy towards other community members
-* Contribute in a positive and constructive way
-
-Examples of unacceptable behavior by participants include:
-
-* The use of sexualized language or imagery and unwelcome sexual attention or
- advances
-* Trolling, insulting/derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or electronic
- address, without explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
- professional setting
-
-## Our Community Guidelines
-* Be clear and stay on topic. Communicating with strangers on the Internet can make it hard to convey or read tone, and sarcasm is frequently misunderstood. Try to use clear language, and think about how the other person will receive it.
-* Don’t cross-post the same thing in multiple GitHub Discussion topics or multiple Slack channels. This can make it difficult for people answering your questions and creates "scrollback spam".
-* Public discussion is preferred to private. Avoid using Slack DMs for questions, and instead share them in public Slack channels or GitHub Discussion threads. This allows a larger audience to both share their knowledge as well as learn from your question or issue. If you're having a problem, chances are someone else is having a similar problem. Learning in public is a community contribution.
-* Minimize notifications to other community members. Avoid tagging other community members in Slack messages or Discussion threads, unless you are replying to something specific. Community members are here to help each other, but are not "on call" for support, and we expect everyone to try to minimize "notification fatigue". If your issue is time-sensitive or critical, use methods like support@pulumi.com instead.
-
-## Our Responsibilities
-
-Project maintainers are responsible for clarifying the standards of acceptable
-behavior and are expected to take appropriate and fair corrective action in
-response to any instances of unacceptable behavior.
-
-Project maintainers have the right and responsibility to remove, edit, or
-reject comments, commits, code, wiki edits, issues, GitHub Discussions posts,
-and other contributions that are not aligned to this Code of Conduct, or to ban
-temporarily or permanently any contributor for other behaviors that they deem
-inappropriate, threatening, offensive, or harmful.
-
-## Scope
-
-This Code of Conduct applies both within project spaces (including the Community Slack
-and GitHub Discussions forums) and in public spaces when an individual is representing the
-project or its community. Examples of representing a project or community include
-using an official project e-mail address, posting via an official social media account,
-or acting as an appointed representative at an online or offline event. Representation
-of a project may be further defined and clarified by project maintainers.
-
-## Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported by contacting the project team at code-of-conduct@pulumi.com. All
-complaints will be reviewed and investigated and will result in a response that
-is deemed necessary and appropriate to the circumstances. The project team is
-obligated to maintain confidentiality with regard to the reporter of an incident.
-Further details of specific enforcement policies may be posted separately.
-
-Project maintainers who do not follow or enforce the Code of Conduct in good
-faith may face temporary or permanent repercussions as determined by other
-members of the project's leadership.
-
-## Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
-available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
-
-[homepage]: https://www.contributor-covenant.org
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 1200019..0000000
--- a/Makefile
+++ /dev/null
@@ -1,316 +0,0 @@
-PROJECT_NAME := Pulumi Docker Build Resource Provider
-
-PACK := docker-build
-PACKDIR := sdk
-PROJECT := github.com/pulumi/pulumi-docker-build
-NODE_MODULE_NAME := @pulumi/docker-build
-NUGET_PKG_NAME := Pulumi.DockerBuild
-
-PROVIDER := pulumi-resource-${PACK}
-PROVIDER_PATH := provider
-VERSION_PATH := ${PROVIDER_PATH}.Version
-SCHEMA_PATH := ${PROVIDER_PATH}/cmd/pulumi-resource-${PACK}/schema.json
-
-GOPATH := $(shell go env GOPATH)
-
-WORKING_DIR := $(shell pwd)
-EXAMPLES_DIR := ${WORKING_DIR}/examples/yaml
-TESTPARALLELISM := 4
-
-PULUMI := bin/pulumi
-GOGLANGCILINT := bin/golangci-lint
-
-# Override during CI using `make [TARGET] PROVIDER_VERSION=""` or by setting a PROVIDER_VERSION environment variable
-# Local & branch builds will just used this fixed default version unless specified
-PROVIDER_VERSION ?= 0.1.0-alpha.0+dev
-# Use this normalised version everywhere rather than the raw input to ensure consistency.
-VERSION_GENERIC = $(shell pulumictl convert-version --language generic --version "$(PROVIDER_VERSION)")
-
-export PULUMI_IGNORE_AMBIENT_PLUGINS = true
-export PULUMI_DISABLE_AUTOMATIC_PLUGIN_ACQUISITION = true
-
-.PHONY: ensure
-ensure:: tidy lint test_provider examples
-
-.PHONY: tidy
-tidy:
- go mod tidy
-
-.PHONY: provider
-provider: bin/${PROVIDER} bin/pulumi-gen-${PACK} # Required by CI
-
-.PHONY: local_generate
-local_generate: sdk # Required by CI
-
-provider_debug::
- (cd provider && go build -o $(WORKING_DIR)/bin/${PROVIDER} -gcflags="all=-N -l" -ldflags "-X ${PROJECT}/${VERSION_PATH}=${VERSION_GENERIC}" $(PROJECT)/${PROVIDER_PATH}/cmd/$(PROVIDER))
-
-test_provider:: # Required by CI
- go test -short -v -coverprofile="coverage.txt" -coverpkg=./provider/... -timeout 2h -parallel ${TESTPARALLELISM} ./provider/...
-
-test_examples: install_nodejs_sdk install_dotnet_sdk
- go test -short -v -cover -tags=all -timeout 2h -parallel ${TESTPARALLELISM} ./examples/...
-
-test_all:: test_provider test_examples
-
-.PHONY:
-gen_examples:
-
-examples: $(shell mkdir -p examples)
-examples: sdk examples/yaml examples/go examples/nodejs examples/python examples/dotnet examples/java
-
-examples/yaml:
- rm -rf ${WORKING_DIR}/examples/yaml/app
- cp -r ${WORKING_DIR}/examples/app ${WORKING_DIR}/examples/yaml/app
-
-examples/go: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
- $(call example,go)
- @git checkout examples/go/go.mod
-
-examples/nodejs: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
- $(call example,nodejs)
- @git checkout examples/nodejs/package.json
-
-examples/python: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
- $(call example,python)
- @git checkout examples/python/requirements.txt
-
-examples/dotnet: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
- $(call example,dotnet)
- @git checkout examples/dotnet/provider-docker-build.csproj
-
-examples/java: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
- $(call example,java)
- @git checkout examples/java/pom.xml
-
-${PULUMI}: go.sum
- GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi/pkg/v3/cmd/pulumi
- GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3
- GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi/sdk/nodejs/cmd/pulumi-language-nodejs/v3
- GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi/sdk/python/cmd/pulumi-language-python/v3
- GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi-java/pkg/cmd/pulumi-language-java
- GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet/v3
- GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi-yaml/cmd/pulumi-converter-yaml
-
-${GOGLANGCILINT}: go.sum
- GOBIN=${WORKING_DIR}/bin go install github.com/golangci/golangci-lint/cmd/golangci-lint@8b37f14
-
-define pulumi_login
- export PULUMI_CONFIG_PASSPHRASE=asdfqwerty1234; \
- pulumi login --local;
-endef
-
-define example
- rm -rf ${WORKING_DIR}/examples/$(1)
- $(PULUMI) convert \
- --cwd ${WORKING_DIR}/examples/yaml \
- --logtostderr \
- --generate-only \
- --non-interactive \
- --language $(1) \
- --out ${WORKING_DIR}/examples/$(1)
- cp -r ${WORKING_DIR}/examples/app ${WORKING_DIR}/examples/$(1)/app
- cp ${WORKING_DIR}/examples/yaml/.dockerignore ${WORKING_DIR}/examples/$(1)/.dockerignore
-endef
-
-up::
- $(call pulumi_login) \
- cd ${EXAMPLES_DIR} && \
- pulumi stack init dev && \
- pulumi stack select dev && \
- pulumi config set name dev && \
- pulumi up -y
-
-down::
- $(call pulumi_login) \
- cd ${EXAMPLES_DIR} && \
- pulumi stack select dev && \
- pulumi destroy -y && \
- pulumi stack rm dev -y
-
-devcontainer::
- git submodule update --init --recursive .devcontainer
- git submodule update --remote --merge .devcontainer
- cp -f .devcontainer/devcontainer.json .devcontainer.json
-
-.PHONY: build
-build:: provider sdk/dotnet sdk/go sdk/nodejs sdk/python sdk/java ${SCHEMA_PATH}
-
-# Required for the codegen action that runs in pulumi/pulumi
-only_build:: build
-
-.PHONY: lint
-lint: ${GOGLANGCILINT}
- ${GOGLANGCILINT} run --fix -c .golangci.yml
-
-install:: install_nodejs_sdk install_dotnet_sdk
- cp $(WORKING_DIR)/bin/${PROVIDER} ${GOPATH}/bin
-
-
-install_dotnet_sdk:: # Required by CI
- rm -rf $(WORKING_DIR)/nuget/$(NUGET_PKG_NAME).*.nupkg
- mkdir -p $(WORKING_DIR)/nuget
- find . -name '*.nupkg' -print -exec cp -p {} ${WORKING_DIR}/nuget \;
-
-install_python_sdk:: # Required by CI
-
-install_go_sdk:: # Required by CI
-
-install_nodejs_sdk:: # Required by CI
- -yarn unlink --cwd $(WORKING_DIR)/sdk/nodejs/bin
- yarn link --cwd $(WORKING_DIR)/sdk/nodejs/bin
-
-.PHONY: codegen
-codegen: # Required by CI
-
-.PHONY: generate_schema
-generate_schema: ${SCHEMA_PATH} # Required by CI
-
-.PHONY: build_go install_go_sdk
-generate_go: sdk/go # Required by CI
-build_go: # Required by CI
-
-.PHONY: build_java install_java_sdk
-generate_java: sdk/java # Required by CI
-build_java: # Required by CI
-
-.PHONY: build_python install_python_sdk
-generate_python: sdk/python # Required by CI
-build_python: # Required by CI
-
-.PHONY: build_nodejs install_nodejs_sdk
-generate_nodejs: sdk/nodejs # Required by CI
-build_nodejs: # Required by CI
-
-.PHONY: build_dotnet install_dotnet_sdk
-generate_dotnet: sdk/dotnet # Required by CI
-build_dotnet: # Required by CI
-
-${SCHEMA_PATH}: bin/${PROVIDER}
- pulumi package get-schema ./bin/${PROVIDER} | jq 'del(.version)' > $(SCHEMA_PATH)
-
-bin/${PROVIDER}: $(shell find ./provider -name '*.go') go.mod
- (cd provider && go build -o ../bin/${PROVIDER} -ldflags "-X ${PROJECT}/${VERSION_PATH}=${VERSION_GENERIC}" $(PROJECT)/${PROVIDER_PATH}/cmd/$(PROVIDER))
-
-bin/pulumi-gen-${PACK}: # Required by CI
- touch bin/pulumi-gen-${PACK}
-
-go.mod: $(shell find . -name '*.go')
-go.sum: go.mod
-
-sdk: $(shell mkdir -p sdk)
-sdk: sdk/python sdk/nodejs sdk/java sdk/python sdk/go sdk/dotnet
-
-# Folders can't be used for up-to-date checks as they will be marked as up-to-date even if the step fails - leading to a broken state.
-.PHONY: sdk/*
-
-sdk/python: TMPDIR := $(shell mktemp -d)
-sdk/python: $(PULUMI) bin/${PROVIDER}
- rm -rf sdk/python
- $(PULUMI) package gen-sdk ./bin/$(PROVIDER) --language python -o ${TMPDIR}
- cp README.md ${TMPDIR}/python/
- cd ${TMPDIR}/python/ && \
- rm -rf ./bin/ ../python.bin/ && cp -R . ../python.bin && mv ../python.bin ./bin && \
- python3 -m venv venv && \
- ./venv/bin/python -m pip install build && \
- cd ./bin && \
- ../venv/bin/python -m build .
- mv -f ${TMPDIR}/python ${WORKING_DIR}/sdk/.
-
-sdk/nodejs: TMPDIR := $(shell mktemp -d)
-sdk/nodejs: $(PULUMI) bin/${PROVIDER}
- rm -rf sdk/nodejs
- $(PULUMI) package gen-sdk ./bin/$(PROVIDER) --language nodejs -o ${TMPDIR}
- cp README.md LICENSE ${TMPDIR}/nodejs
- cd ${TMPDIR}/nodejs/ && \
- yarn install && \
- yarn run tsc && \
- cp README.md LICENSE package.json yarn.lock bin/
- mv -f ${TMPDIR}/nodejs ${WORKING_DIR}/sdk/.
-
-sdk/go: TMPDIR := $(shell mktemp -d)
-sdk/go: PATH := "$(WORKING_DIR)/bin:$(PATH)"
-sdk/go: $(PULUMI) bin/${PROVIDER}
- rm -rf sdk/go
- PATH=$(PATH) $(PULUMI) package gen-sdk ./bin/$(PROVIDER) --language go -o ${TMPDIR}
- cp go.mod ${TMPDIR}/go/dockerbuild/go.mod
- cd ${TMPDIR}/go/dockerbuild && \
- go mod edit -module=github.com/pulumi/pulumi-${PACK}/${PACKDIR}/go/dockerbuild && \
- go mod tidy
- mv -f ${TMPDIR}/go ${WORKING_DIR}/sdk/go
-
-sdk/dotnet: TMPDIR := $(shell mktemp -d)
-sdk/dotnet: $(PULUMI) bin/${PROVIDER}
- rm -rf sdk/dotnet
- $(PULUMI) package gen-sdk ./bin/${PROVIDER} --language dotnet -o ${TMPDIR}
- cd ${TMPDIR}/dotnet/ && \
- echo "$(VERSION_GENERIC)" > version.txt && \
- dotnet build
- mv -f ${TMPDIR}/dotnet ${WORKING_DIR}/sdk/.
-
-sdk/java: PACKAGE_VERSION := $(shell pulumictl convert-version --language generic -v "$(VERSION_GENERIC)")
-sdk/java: TMPDIR := $(shell mktemp -d)
-sdk/java: $(PULUMI) bin/${PROVIDER}
- rm -rf sdk/java
- $(PULUMI) package gen-sdk --language java ./bin/${PROVIDER} -o ${TMPDIR}
- cd ${TMPDIR}/java/ && gradle --console=plain build
- mv -f ${TMPDIR}/java ${WORKING_DIR}/sdk/.
-
-docs: $(shell find docs/yaml -type f) $(shell find ./provider/internal/embed -name '*.md') ${SCHEMA_PATH}
- go generate docs/generate.go
- @touch docs
-
-# Set these variables to enable signing of the windows binary
-AZURE_SIGNING_CLIENT_ID ?=
-AZURE_SIGNING_CLIENT_SECRET ?=
-AZURE_SIGNING_TENANT_ID ?=
-AZURE_SIGNING_KEY_VAULT_URI ?=
-SKIP_SIGNING ?=
-
-bin/jsign-6.0.jar:
- wget https://github.com/ebourg/jsign/releases/download/6.0/jsign-6.0.jar --output-document=bin/jsign-6.0.jar
-
-sign-goreleaser-exe-amd64: GORELEASER_ARCH := amd64_v1
-sign-goreleaser-exe-arm64: GORELEASER_ARCH := arm64
-
-# Set the shell to bash to allow for the use of bash syntax.
-sign-goreleaser-exe-%: SHELL:=/bin/bash
-sign-goreleaser-exe-%: bin/jsign-6.0.jar
- @# Only sign windows binary if fully configured.
- @# Test variables set by joining with | between and looking for || showing at least one variable is empty.
- @# Move the binary to a temporary location and sign it there to avoid the target being up-to-date if signing fails.
- @set -e; \
- if [[ "${SKIP_SIGNING}" != "true" ]]; then \
- if [[ "|${AZURE_SIGNING_CLIENT_ID}|${AZURE_SIGNING_CLIENT_SECRET}|${AZURE_SIGNING_TENANT_ID}|${AZURE_SIGNING_KEY_VAULT_URI}|" == *"||"* ]]; then \
- echo "Can't sign windows binaries as required configuration not set: AZURE_SIGNING_CLIENT_ID, AZURE_SIGNING_CLIENT_SECRET, AZURE_SIGNING_TENANT_ID, AZURE_SIGNING_KEY_VAULT_URI"; \
- echo "To rebuild with signing delete the unsigned windows exe file and rebuild with the fixed configuration"; \
- if [[ "${CI}" == "true" ]]; then exit 1; fi; \
- else \
- file=dist/build-provider-sign-windows_windows_${GORELEASER_ARCH}/pulumi-resource-docker-build.exe; \
- mv $${file} $${file}.unsigned; \
- az login --service-principal \
- --username "${AZURE_SIGNING_CLIENT_ID}" \
- --password "${AZURE_SIGNING_CLIENT_SECRET}" \
- --tenant "${AZURE_SIGNING_TENANT_ID}" \
- --output none; \
- ACCESS_TOKEN=$$(az account get-access-token --resource "https://vault.azure.net" | jq -r .accessToken); \
- java -jar bin/jsign-6.0.jar \
- --storetype AZUREKEYVAULT \
- --keystore "PulumiCodeSigning" \
- --url "${AZURE_SIGNING_KEY_VAULT_URI}" \
- --storepass "$${ACCESS_TOKEN}" \
- $${file}.unsigned; \
- mv $${file}.unsigned $${file}; \
- az logout; \
- fi; \
- fi
-
-# To make an immediately observable change to .ci-mgmt.yaml:
-#
-# - Edit .ci-mgmt.yaml
-# - Run make ci-mgmt to apply the change locally.
-#
-ci-mgmt: .ci-mgmt.yaml
- go run github.com/pulumi/ci-mgmt/provider-ci@master generate
-.PHONY: ci-mgmt
- fi
diff --git a/bin/pulumi-language-python-exec b/bin/pulumi-language-python-exec
deleted file mode 100755
index 639a536..0000000
--- a/bin/pulumi-language-python-exec
+++ /dev/null
@@ -1,204 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016-2018, Pulumi Corporation. All rights reserved.
-
-import argparse
-import asyncio
-from typing import Optional
-import logging
-import os
-import sys
-import traceback
-import runpy
-from concurrent.futures import ThreadPoolExecutor
-
-# The user might not have installed Pulumi yet in their environment - provide a high-quality error message in that case.
-try:
- import pulumi
- import pulumi.runtime
-except ImportError:
- # For whatever reason, sys.stderr.write is not picked up by the engine as a message, but 'print' is. The Python
- # langhost automatically flushes stdout and stderr on shutdown, so we don't need to do it here - just trust that
- # Python does the sane thing when printing to stderr.
- print(traceback.format_exc(), file=sys.stderr)
- print("""
-It looks like the Pulumi SDK has not been installed. Have you run pip install?
-If you are running in a virtualenv, you must run pip install -r requirements.txt from inside the virtualenv.""", file=sys.stderr)
- sys.exit(1)
-
-# use exit code 32 to signal to the language host that an error message was displayed to the user
-PYTHON_PROCESS_EXITED_AFTER_SHOWING_USER_ACTIONABLE_MESSAGE_CODE = 32
-
-def get_abs_module_path(mod_path):
- path, ext = os.path.splitext(mod_path)
- if not ext:
- path = os.path.join(path, '__main__')
- return os.path.abspath(path)
-
-
-def _get_user_stacktrace(user_program_abspath: str) -> str:
- '''grabs the current stacktrace and truncates it to show the only stacks pertaining to a user's program'''
- tb = traceback.extract_tb(sys.exc_info()[2])
-
- for frame_index, frame in enumerate(tb):
- # loop over stack frames until we reach the main program
- # then return the traceback truncated to the user's code
- cur_module = frame[0]
- if get_abs_module_path(user_program_abspath) == get_abs_module_path(cur_module):
- # we have detected the start of a user's stack trace
- remaining_frames = len(tb)-frame_index
-
- # include remaining frames from the bottom by negating
- return traceback.format_exc(limit=-remaining_frames)
-
- # we did not detect a __main__ program, return normal traceback
- return traceback.format_exc()
-
-def _set_default_executor(loop, parallelism: Optional[int]):
- '''configure this event loop to respect the settings provided.'''
- if parallelism is None:
- return
- parallelism = max(parallelism, 1)
- exec = ThreadPoolExecutor(max_workers=parallelism)
- loop.set_default_executor(exec)
-
-if __name__ == "__main__":
- # Parse the arguments, program name, and optional arguments.
- ap = argparse.ArgumentParser(description='Execute a Pulumi Python program')
- ap.add_argument('--project', help='Set the project name')
- ap.add_argument('--stack', help='Set the stack name')
- ap.add_argument('--parallel', help='Run P resource operations in parallel (default=none)')
- ap.add_argument('--dry_run', help='Simulate resource changes, but without making them')
- ap.add_argument('--pwd', help='Change the working directory before running the program')
- ap.add_argument('--monitor', help='An RPC address for the resource monitor to connect to')
- ap.add_argument('--engine', help='An RPC address for the engine to connect to')
- ap.add_argument('--tracing', help='A Zipkin-compatible endpoint to send tracing data to')
- ap.add_argument('--organization', help='Set the organization name')
- ap.add_argument('PROGRAM', help='The Python program to run')
- ap.add_argument('ARGS', help='Arguments to pass to the program', nargs='*')
- args = ap.parse_args()
-
- # If any config variables are present, parse and set them, so subsequent accesses are fast.
- config_env = pulumi.runtime.get_config_env()
- if hasattr(pulumi.runtime, "get_config_secret_keys_env") and hasattr(pulumi.runtime, "set_all_config"):
- # If the pulumi SDK has `get_config_secret_keys_env` and `set_all_config`, use them
- # to set the config and secret keys.
- config_secret_keys_env = pulumi.runtime.get_config_secret_keys_env()
- pulumi.runtime.set_all_config(config_env, config_secret_keys_env)
- else:
- # Otherwise, fallback to setting individual config values.
- for k, v in config_env.items():
- pulumi.runtime.set_config(k, v)
-
- # Configure the runtime so that the user program hooks up to Pulumi as appropriate.
- # New versions of pulumi python support setting organization, old versions do not
- try:
- settings = pulumi.runtime.Settings(
- monitor=args.monitor,
- engine=args.engine,
- project=args.project,
- stack=args.stack,
- parallel=int(args.parallel),
- dry_run=args.dry_run == "true",
- organization=args.organization,
- )
- except TypeError:
- settings = pulumi.runtime.Settings(
- monitor=args.monitor,
- engine=args.engine,
- project=args.project,
- stack=args.stack,
- parallel=int(args.parallel),
- dry_run=args.dry_run == "true"
- )
-
- pulumi.runtime.configure(settings)
-
- # Finally, swap in the args, chdir if needed, and run the program as if it had been executed directly.
- sys.argv = [args.PROGRAM] + args.ARGS
- if args.pwd is not None:
- os.chdir(args.pwd)
-
- successful = False
-
- try:
- # The docs for get_running_loop are somewhat misleading because they state:
- # This function can only be called from a coroutine or a callback. However, if the function is
- # called from outside a coroutine or callback (the standard case when running `pulumi up`), the function
- # raises a RuntimeError as expected and falls through to the exception clause below.
- loop = asyncio.get_running_loop()
- except RuntimeError:
- loop = asyncio.new_event_loop()
- asyncio.set_event_loop(loop)
-
- # Configure the event loop to respect the parallelism value provided as input.
- _set_default_executor(loop, settings.parallel)
-
- # We are (unfortunately) suppressing the log output of asyncio to avoid showing to users some of the bad things we
- # do in our programming model.
- #
- # Fundamentally, Pulumi is a way for users to build asynchronous dataflow graphs that, as their deployments
- # progress, resolve naturally and eventually result in the complete resolution of the graph. If one node in the
- # graph fails (i.e. a resource fails to create, there's an exception in an apply, etc.), part of the graph remains
- # unevaluated at the time that we exit.
- #
- # asyncio abhors this. It gets very upset if the process terminates without having observed every future that we
- # have resolved. If we are terminating abnormally, it is highly likely that we are not going to observe every single
- # future that we have created. Furthermore, it's *harmless* to do this - asyncio logs errors because it thinks it
- # needs to tell users that they're doing bad things (which, to their credit, they are), but we are doing this
- # deliberately.
- #
- # In order to paper over this for our users, we simply turn off the logger for asyncio. Users won't see any asyncio
- # error messages, but if they stick to the Pulumi programming model, they wouldn't be seeing any anyway.
- logging.getLogger("asyncio").setLevel(logging.CRITICAL)
- exit_code = 1
- try:
- # record the location of the user's program to return user tracebacks
- user_program_abspath = os.path.abspath(args.PROGRAM)
- def run():
- try:
- runpy.run_path(args.PROGRAM, run_name='__main__')
- except ImportError as e:
- def fix_module_file(m: str) -> str:
- # Work around python 11 reporting "" rather
- # than runpy.__file__ in the traceback.
- return runpy.__file__ if m == "" else m
-
- # detect if the main pulumi python program does not exist
- stack_modules = [fix_module_file(f.filename) for f in traceback.extract_tb(e.__traceback__)]
- unique_modules = set(module for module in stack_modules)
- last_module_name = stack_modules[-1]
-
- # we identify a missing program error if
- # 1. the only modules in the stack trace are
- # - `pulumi-language-python-exec`
- # - `runpy`
- # 2. the last function in the stack trace is in the `runpy` module
- if unique_modules == {
- __file__, # the language runtime itself
- runpy.__file__,
- } and last_module_name == runpy.__file__ :
- # this error will only be hit when the user provides a directory
- # the engine has a check to determine if the `main` file exists and will fail early
-
- # if a language runtime receives a directory, it's the language's responsibility to determine
- # whether the provided directory has a pulumi program
- pulumi.log.error(f"unable to find main python program `__main__.py` in `{user_program_abspath}`")
- sys.exit(PYTHON_PROCESS_EXITED_AFTER_SHOWING_USER_ACTIONABLE_MESSAGE_CODE)
- else:
- raise e
-
- coro = pulumi.runtime.run_in_stack(run)
- loop.run_until_complete(coro)
- exit_code = 0
- except pulumi.RunError as e:
- pulumi.log.error(str(e))
- except Exception:
- error_msg = "Program failed with an unhandled exception:\n" + _get_user_stacktrace(user_program_abspath)
- pulumi.log.error(error_msg)
- exit_code = PYTHON_PROCESS_EXITED_AFTER_SHOWING_USER_ACTIONABLE_MESSAGE_CODE
- finally:
- loop.close()
- sys.stdout.flush()
- sys.stderr.flush()
-
- sys.exit(exit_code)
diff --git a/codecov.yml b/codecov.yml
deleted file mode 100644
index 2802c29..0000000
--- a/codecov.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-comment:
- layout: "header, files, footer"
- hide_project_coverage: false
-
-coverage:
- status:
- project:
- default:
- informational: true
- patch:
- default:
- informational: true
diff --git a/docs/generate.go b/docs/generate.go
deleted file mode 100644
index 5901446..0000000
--- a/docs/generate.go
+++ /dev/null
@@ -1,216 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-//go:generate go run generate.go yaml ../provider/internal/embed
-
-// Package main ingests a multi-document YAML file and converts it into
-// Markdown examples.
-package main
-
-import (
- "fmt"
- "io"
- "log"
- "os"
- "os/exec"
- "path/filepath"
- "strings"
-
- "gopkg.in/yaml.v3"
-
- "github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"
-)
-
-func main() {
- if len(os.Args) < 3 {
- _, _ = fmt.Fprintf(os.Stdout, "Usage: %s \n", os.Args[0])
- os.Exit(1)
- }
- yamlPath := os.Args[1]
- mdPath := os.Args[2]
-
- if !filepath.IsAbs(yamlPath) {
- cwd, err := os.Getwd()
- contract.AssertNoErrorf(err, "getting working directory")
- yamlPath = filepath.Join(cwd, yamlPath)
- }
-
- if err := os.MkdirAll(mdPath, 0o750); err != nil {
- panic(err)
- }
- fileInfo, err := os.Lstat(mdPath)
- if err != nil || !fileInfo.IsDir() {
- fmt.Fprintf(os.Stderr, "Expect markdown destination %q to be a directory\n", mdPath)
- os.Exit(1)
- }
-
- yamlFiles, err := os.ReadDir(yamlPath)
- if err != nil {
- panic(err)
- }
- for _, yamlFile := range yamlFiles {
- if err := processYaml(filepath.Join(yamlPath, yamlFile.Name()), mdPath); err != nil {
- log.Fatal(fmt.Errorf("processing %q: %w", yamlFile.Name(), err))
- }
- }
-}
-
-func markdownExamples(examples []string) string {
- s := "{{% examples %}}\n## Example Usage\n"
- for _, example := range examples {
- s += example
- }
- s += "{{% /examples %}}"
- return s
-}
-
-func markdownExample(description string,
- typescript string,
- python string,
- csharp string,
- golang string,
- yaml string,
- java string,
-) string {
- return fmt.Sprintf("{{%% example %%}}\n### %s\n\n"+
- "```typescript\n%s```\n"+
- "```python\n%s```\n"+
- "```csharp\n%s```\n"+
- "```go\n%s```\n"+
- "```yaml\n%s```\n"+
- "```java\n%s```\n"+
- "{{%% /example %%}}\n",
- description, typescript, python, csharp, golang, yaml, java)
-}
-
-func convert(language, tempDir, programFile string) (string, error) {
- exampleDir := filepath.Join(tempDir, "example"+language)
- //nolint:gosec // No user-provided input.
- cmd := exec.Command(
- "pulumi",
- "convert",
- "--language",
- language,
- "--out",
- filepath.Clean(filepath.Join(tempDir, exampleDir)),
- "--generate-only",
- )
-
- cmd.Stderr = os.Stderr
- cmd.Stdout = os.Stdout
- cmd.Dir = tempDir
- if err := cmd.Run(); err != nil {
- return "", fmt.Errorf("converting: %w", err)
- }
- content, err := os.ReadFile(filepath.Clean(filepath.Join(tempDir, exampleDir, programFile)))
- if err != nil {
- return "", fmt.Errorf("reading: %w", err)
- }
-
- return string(content), nil
-}
-
-func processYaml(path, mdDir string) error {
- yamlFile, err := os.Open(filepath.Clean(path))
- if err != nil {
- return err
- }
-
- base := filepath.Base(path)
- md := strings.NewReplacer(".yaml", ".md", ".yml", ".md").Replace(base)
-
- defer contract.IgnoreClose(yamlFile)
- decoder := yaml.NewDecoder(yamlFile)
- exampleStrings := []string{}
- for {
- keepGoing, err := func() (bool, error) {
- example := map[string]interface{}{}
- err := decoder.Decode(&example)
- if err == io.EOF {
- return false, nil
- }
-
- description, ok := example["description"].(string)
- if !ok {
- description = ""
- }
- dir, err := os.MkdirTemp("", "")
- if err != nil {
- return false, err
- }
-
- defer func() {
- contract.IgnoreError(os.RemoveAll(dir))
- }()
-
- src, err := os.OpenFile(filepath.Clean(filepath.Join(dir, "Pulumi.yaml")), os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o600)
- if err != nil {
- return false, err
- }
-
- fmt.Println("Converting:", example)
-
- if err := yaml.NewEncoder(src).Encode(example); err != nil {
- return false, err
- }
- contract.AssertNoErrorf(src.Close(), "closing")
-
- typescript, err := convert("typescript", dir, "index.ts")
- if err != nil {
- return false, err
- }
- python, err := convert("python", dir, "__main__.py")
- if err != nil {
- return false, err
- }
- csharp, err := convert("csharp", dir, "Program.cs")
- if err != nil {
- return false, err
- }
- golang, err := convert("go", dir, "main.go")
- if err != nil {
- return false, err
- }
- java, err := convert("java", dir, "src/main/java/generated_program/App.java")
- if err != nil {
- return false, err
- }
-
- yamlContent, err := os.ReadFile(filepath.Clean(filepath.Join(dir, "Pulumi.yaml")))
- if err != nil {
- return false, err
- }
- yaml := string(yamlContent)
-
- exampleStrings = append(exampleStrings, markdownExample(description, typescript, python, csharp, golang, yaml, java))
-
- return true, nil
- }()
- if err != nil {
- return err
- }
- if !keepGoing {
- break
- }
- }
- _, _ = fmt.Fprintf(os.Stdout, "Writing %s\n", filepath.Join(mdDir, md))
- f, err := os.OpenFile(filepath.Clean(filepath.Join(mdDir, md)), os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o600)
- if err != nil {
- return err
- }
- defer contract.IgnoreClose(f)
- _, err = f.WriteString(markdownExamples(exampleStrings))
- contract.AssertNoErrorf(err, "writing examples")
- return nil
-}
diff --git a/docs/yaml/image-examples.yaml b/docs/yaml/image-examples.yaml
deleted file mode 100644
index bed715e..0000000
--- a/docs/yaml/image-examples.yaml
+++ /dev/null
@@ -1,190 +0,0 @@
-name: ecr
-description: Push to AWS ECR with caching
-outputs:
- ref: ${my-image.ref}
-resources:
- ecr-repository:
- type: aws:ecr:Repository
- my-image:
- type: docker-build:Image
- properties:
- tags:
- - ${ecr-repository.repositoryUrl}:latest
- push: true
- context:
- location: ./app
- cacheFrom:
- - registry:
- ref: ${ecr-repository.repositoryUrl}:cache
- cacheTo:
- - registry:
- ref: ${ecr-repository.repositoryUrl}:cache
- imageManifest: true
- ociMediaTypes: true
- registries:
- - username: ${auth-token.userName}
- password: ${auth-token.password}
- address: ${ecr-repository.repositoryUrl}
-runtime: yaml
-variables:
- auth-token:
- fn::aws:ecr:getAuthorizationToken:
- registryId: ${ecr-repository.registryId}
----
-name: multi-platform
-runtime: yaml
-description: Multi-platform image
-resources:
- image:
- type: docker-build:Image
- properties:
- context:
- location: "app"
- platforms:
- - plan9/amd64
- - plan9/386
- push: false
----
-name: registry
-runtime: yaml
-description: Registry export
-resources:
- image:
- type: docker-build:Image
- properties:
- tags:
- - "docker.io/pulumi/pulumi:3.107.0"
- context:
- location: "app"
- push: true
- registries:
- - address: docker.io
- username: pulumibot
- password: ${dockerHubPassword}
-outputs:
- ref: ${my-image.ref}
----
-name: caching
-runtime: yaml
-description: Caching
-resources:
- image:
- type: docker-build:Image
- properties:
- context:
- location: "app"
- cacheTo:
- - local:
- dest: tmp/cache
- mode: max
- cacheFrom:
- - local:
- src: tmp/cache
- push: false
----
-name: dbc
-runtime: yaml
-description: Docker Build Cloud
-resources:
- image:
- type: docker-build:Image
- properties:
- context:
- location: "app"
- exec: true
- builder:
- name: cloud-builder-name
- push: false
----
-name: build-args
-runtime: yaml
-description: Build arguments
-resources:
- image:
- type: docker-build:Image
- properties:
- context:
- location: "app"
- buildArgs:
- SET_ME_TO_TRUE: "true"
- push: false
----
-name: build-target
-runtime: yaml
-description: Build target
-resources:
- image:
- type: docker-build:Image
- properties:
- context:
- location: "app"
- target: "build-me"
- push: false
----
-name: named-contexts
-runtime: yaml
-description: Named contexts
-resources:
- image:
- type: docker-build:Image
- properties:
- context:
- location: app
- named:
- "golang:latest":
- location: "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"
- push: false
----
-name: remote-context
-runtime: yaml
-description: Remote context
-resources:
- image:
- type: docker-build:Image
- properties:
- context:
- location: "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"
- push: false
-
----
-name: inline
-runtime: yaml
-description: Inline Dockerfile
-resources:
- image:
- type: docker-build:Image
- properties:
- dockerfile:
- inline: |
- FROM busybox
- COPY hello.c ./
- context:
- location: "app"
- push: false
----
-name: remote-context
-runtime: yaml
-description: Remote context
-resources:
- image:
- type: docker-build:Image
- properties:
- dockerfile:
- location: app/Dockerfile
- context:
- location: "https://github.com/docker-library/hello-world.git"
- push: false
----
-name: docker-load
-runtime: yaml
-description: Local export
-resources:
- image:
- type: docker-build:Image
- properties:
- context:
- location: "app"
- exports:
- - docker:
- tar: true
- push: false
diff --git a/docs/yaml/index-examples.yaml b/docs/yaml/index-examples.yaml
deleted file mode 100644
index 079ea91..0000000
--- a/docs/yaml/index-examples.yaml
+++ /dev/null
@@ -1,48 +0,0 @@
-name: registry-caching
-description: Multi-platform registry caching
-runtime: yaml
-resources:
- arm64:
- type: docker-build:Image
- properties:
- context:
- location: "app"
- platforms:
- - linux/arm64
- tags:
- - "docker.io/pulumi/pulumi:3.107.0-arm64"
- cacheTo:
- - registry:
- ref: "docker.io/pulumi/pulumi:cache-arm64"
- mode: max
- cacheFrom:
- - registry:
- ref: "docker.io/pulumi/pulumi:cache-arm64"
-
- amd64:
- type: docker-build:Image
- properties:
- context:
- location: "app"
- platforms:
- - linux/amd64
- tags:
- - "docker.io/pulumi/pulumi:3.107.0-amd64"
- cacheTo:
- - registry:
- ref: "docker.io/pulumi/pulumi:cache-amd64"
- mode: max
- cacheFrom:
- - registry:
- ref: "docker.io/pulumi/pulumi:cache-amd64"
-
- index:
- type: docker-build:Index
- properties:
- tag: "docker.io/pulumi/pulumi:3.107.0"
- sources:
- - ${amd64.ref}
- - ${arm64.ref}
-
-outputs:
- ref: ${index.ref}
diff --git a/examples/app/Dockerfile b/examples/app/Dockerfile
deleted file mode 100644
index e17a80c..0000000
--- a/examples/app/Dockerfile
+++ /dev/null
@@ -1,2 +0,0 @@
-FROM alpine
-RUN echo 👍
diff --git a/examples/app/Dockerfile.buildArgs b/examples/app/Dockerfile.buildArgs
deleted file mode 100644
index 438ee01..0000000
--- a/examples/app/Dockerfile.buildArgs
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM alpine
-
-ARG SET_ME_TO_TRUE
-RUN [ "$SET_ME_TO_TRUE" = "true" ]
-RUN echo "That's the correct build arg, thanks! 👍"
diff --git a/examples/app/Dockerfile.emptyContext b/examples/app/Dockerfile.emptyContext
deleted file mode 100644
index 769593b..0000000
--- a/examples/app/Dockerfile.emptyContext
+++ /dev/null
@@ -1,2 +0,0 @@
-FROM alpine
-RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
diff --git a/examples/app/Dockerfile.extraHosts b/examples/app/Dockerfile.extraHosts
deleted file mode 100644
index 35b15f4..0000000
--- a/examples/app/Dockerfile.extraHosts
+++ /dev/null
@@ -1,3 +0,0 @@
-FROM bash AS base
-
-RUN getent hosts metadata.google.internal
diff --git a/examples/app/Dockerfile.multiPlatform b/examples/app/Dockerfile.multiPlatform
deleted file mode 100644
index 49d3c83..0000000
--- a/examples/app/Dockerfile.multiPlatform
+++ /dev/null
@@ -1,7 +0,0 @@
-FROM --platform=$BUILDPLATFORM alpine as build
-RUN echo ${BUILDPLATFORM} > buildplatform
-RUN echo ${TARGETPLATFORM} > targetplatform
-
-FROM build
-RUN cat buildplatform
-RUN cat targetplatform
diff --git a/examples/app/Dockerfile.namedContexts b/examples/app/Dockerfile.namedContexts
deleted file mode 100644
index 6e53dba..0000000
--- a/examples/app/Dockerfile.namedContexts
+++ /dev/null
@@ -1,5 +0,0 @@
-# syntax=docker/dockerfile:1.4
-FROM golang:latest
-
-RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
-RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
diff --git a/examples/app/Dockerfile.secrets b/examples/app/Dockerfile.secrets
deleted file mode 100644
index 513bbd2..0000000
--- a/examples/app/Dockerfile.secrets
+++ /dev/null
@@ -1,4 +0,0 @@
-FROM alpine
-
-RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
-
diff --git a/examples/app/Dockerfile.sshMount b/examples/app/Dockerfile.sshMount
deleted file mode 100644
index 055cb78..0000000
--- a/examples/app/Dockerfile.sshMount
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM alpine
-
-RUN apk add openssh-client
-
-RUN --mount=type=ssh ssh-add -l
diff --git a/examples/app/Dockerfile.target b/examples/app/Dockerfile.target
deleted file mode 100644
index 7cddec7..0000000
--- a/examples/app/Dockerfile.target
+++ /dev/null
@@ -1,8 +0,0 @@
-FROM alpine as build-me
-RUN echo 👍
-
-FROM build-me as also-build-me
-RUN echo 🤙
-
-FROM build-me as dont-build-me
-RUN [ "true" = "false" ]
diff --git a/examples/dotnet/.dockerignore b/examples/dotnet/.dockerignore
deleted file mode 100644
index 37ffae4..0000000
--- a/examples/dotnet/.dockerignore
+++ /dev/null
@@ -1,2 +0,0 @@
-command-output
-tmp
diff --git a/examples/dotnet/.gitignore b/examples/dotnet/.gitignore
deleted file mode 100644
index e645270..0000000
--- a/examples/dotnet/.gitignore
+++ /dev/null
@@ -1,353 +0,0 @@
-## Ignore Visual Studio temporary files, build results, and
-## files generated by popular Visual Studio add-ons.
-##
-## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
-
-# User-specific files
-*.rsuser
-*.suo
-*.user
-*.userosscache
-*.sln.docstates
-
-# User-specific files (MonoDevelop/Xamarin Studio)
-*.userprefs
-
-# Mono auto generated files
-mono_crash.*
-
-# Build results
-[Dd]ebug/
-[Dd]ebugPublic/
-[Rr]elease/
-[Rr]eleases/
-x64/
-x86/
-[Aa][Rr][Mm]/
-[Aa][Rr][Mm]64/
-bld/
-[Bb]in/
-[Oo]bj/
-[Ll]og/
-[Ll]ogs/
-
-# Visual Studio 2015/2017 cache/options directory
-.vs/
-# Uncomment if you have tasks that create the project's static files in wwwroot
-#wwwroot/
-
-# Visual Studio 2017 auto generated files
-Generated\ Files/
-
-# MSTest test Results
-[Tt]est[Rr]esult*/
-[Bb]uild[Ll]og.*
-
-# NUnit
-*.VisualState.xml
-TestResult.xml
-nunit-*.xml
-
-# Build Results of an ATL Project
-[Dd]ebugPS/
-[Rr]eleasePS/
-dlldata.c
-
-# Benchmark Results
-BenchmarkDotNet.Artifacts/
-
-# .NET Core
-project.lock.json
-project.fragment.lock.json
-artifacts/
-
-# StyleCop
-StyleCopReport.xml
-
-# Files built by Visual Studio
-*_i.c
-*_p.c
-*_h.h
-*.ilk
-*.meta
-*.obj
-*.iobj
-*.pch
-*.pdb
-*.ipdb
-*.pgc
-*.pgd
-*.rsp
-*.sbr
-*.tlb
-*.tli
-*.tlh
-*.tmp
-*.tmp_proj
-*_wpftmp.csproj
-*.log
-*.vspscc
-*.vssscc
-.builds
-*.pidb
-*.svclog
-*.scc
-
-# Chutzpah Test files
-_Chutzpah*
-
-# Visual C++ cache files
-ipch/
-*.aps
-*.ncb
-*.opendb
-*.opensdf
-*.sdf
-*.cachefile
-*.VC.db
-*.VC.VC.opendb
-
-# Visual Studio profiler
-*.psess
-*.vsp
-*.vspx
-*.sap
-
-# Visual Studio Trace Files
-*.e2e
-
-# TFS 2012 Local Workspace
-$tf/
-
-# Guidance Automation Toolkit
-*.gpState
-
-# ReSharper is a .NET coding add-in
-_ReSharper*/
-*.[Rr]e[Ss]harper
-*.DotSettings.user
-
-# JustCode is a .NET coding add-in
-.JustCode
-
-# TeamCity is a build add-in
-_TeamCity*
-
-# DotCover is a Code Coverage Tool
-*.dotCover
-
-# AxoCover is a Code Coverage Tool
-.axoCover/*
-!.axoCover/settings.json
-
-# Visual Studio code coverage results
-*.coverage
-*.coveragexml
-
-# NCrunch
-_NCrunch_*
-.*crunch*.local.xml
-nCrunchTemp_*
-
-# MightyMoose
-*.mm.*
-AutoTest.Net/
-
-# Web workbench (sass)
-.sass-cache/
-
-# Installshield output folder
-[Ee]xpress/
-
-# DocProject is a documentation generator add-in
-DocProject/buildhelp/
-DocProject/Help/*.HxT
-DocProject/Help/*.HxC
-DocProject/Help/*.hhc
-DocProject/Help/*.hhk
-DocProject/Help/*.hhp
-DocProject/Help/Html2
-DocProject/Help/html
-
-# Click-Once directory
-publish/
-
-# Publish Web Output
-*.[Pp]ublish.xml
-*.azurePubxml
-# Note: Comment the next line if you want to checkin your web deploy settings,
-# but database connection strings (with potential passwords) will be unencrypted
-*.pubxml
-*.publishproj
-
-# Microsoft Azure Web App publish settings. Comment the next line if you want to
-# checkin your Azure Web App publish settings, but sensitive information contained
-# in these scripts will be unencrypted
-PublishScripts/
-
-# NuGet Packages
-*.nupkg
-# NuGet Symbol Packages
-*.snupkg
-# The packages folder can be ignored because of Package Restore
-**/[Pp]ackages/*
-# except build/, which is used as an MSBuild target.
-!**/[Pp]ackages/build/
-# Uncomment if necessary however generally it will be regenerated when needed
-#!**/[Pp]ackages/repositories.config
-# NuGet v3's project.json files produces more ignorable files
-*.nuget.props
-*.nuget.targets
-
-# Microsoft Azure Build Output
-csx/
-*.build.csdef
-
-# Microsoft Azure Emulator
-ecf/
-rcf/
-
-# Windows Store app package directories and files
-AppPackages/
-BundleArtifacts/
-Package.StoreAssociation.xml
-_pkginfo.txt
-*.appx
-*.appxbundle
-*.appxupload
-
-# Visual Studio cache files
-# files ending in .cache can be ignored
-*.[Cc]ache
-# but keep track of directories ending in .cache
-!?*.[Cc]ache/
-
-# Others
-ClientBin/
-~$*
-*~
-*.dbmdl
-*.dbproj.schemaview
-*.jfm
-*.pfx
-*.publishsettings
-orleans.codegen.cs
-
-# Including strong name files can present a security risk
-# (https://github.com/github/gitignore/pull/2483#issue-259490424)
-#*.snk
-
-# Since there are multiple workflows, uncomment next line to ignore bower_components
-# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
-#bower_components/
-
-# RIA/Silverlight projects
-Generated_Code/
-
-# Backup & report files from converting an old project file
-# to a newer Visual Studio version. Backup files are not needed,
-# because we have git ;-)
-_UpgradeReport_Files/
-Backup*/
-UpgradeLog*.XML
-UpgradeLog*.htm
-ServiceFabricBackup/
-*.rptproj.bak
-
-# SQL Server files
-*.mdf
-*.ldf
-*.ndf
-
-# Business Intelligence projects
-*.rdl.data
-*.bim.layout
-*.bim_*.settings
-*.rptproj.rsuser
-*- [Bb]ackup.rdl
-*- [Bb]ackup ([0-9]).rdl
-*- [Bb]ackup ([0-9][0-9]).rdl
-
-# Microsoft Fakes
-FakesAssemblies/
-
-# GhostDoc plugin setting file
-*.GhostDoc.xml
-
-# Node.js Tools for Visual Studio
-.ntvs_analysis.dat
-node_modules/
-
-# Visual Studio 6 build log
-*.plg
-
-# Visual Studio 6 workspace options file
-*.opt
-
-# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
-*.vbw
-
-# Visual Studio LightSwitch build output
-**/*.HTMLClient/GeneratedArtifacts
-**/*.DesktopClient/GeneratedArtifacts
-**/*.DesktopClient/ModelManifest.xml
-**/*.Server/GeneratedArtifacts
-**/*.Server/ModelManifest.xml
-_Pvt_Extensions
-
-# Paket dependency manager
-.paket/paket.exe
-paket-files/
-
-# FAKE - F# Make
-.fake/
-
-# CodeRush personal settings
-.cr/personal
-
-# Python Tools for Visual Studio (PTVS)
-__pycache__/
-*.pyc
-
-# Cake - Uncomment if you are using it
-# tools/**
-# !tools/packages.config
-
-# Tabs Studio
-*.tss
-
-# Telerik's JustMock configuration file
-*.jmconfig
-
-# BizTalk build output
-*.btp.cs
-*.btm.cs
-*.odx.cs
-*.xsd.cs
-
-# OpenCover UI analysis results
-OpenCover/
-
-# Azure Stream Analytics local run output
-ASALocalRun/
-
-# MSBuild Binary and Structured Log
-*.binlog
-
-# NVidia Nsight GPU debugger configuration file
-*.nvuser
-
-# MFractors (Xamarin productivity tool) working folder
-.mfractor/
-
-# Local History for Visual Studio
-.localhistory/
-
-# BeatPulse healthcheck temp database
-healthchecksdb
-
-# Backup folder for Package Reference Convert tool in Visual Studio 2017
-MigrationBackup/
-
-# Ionide (cross platform F# VS Code tools) working folder
-.ionide/
diff --git a/examples/dotnet/Program.cs b/examples/dotnet/Program.cs
deleted file mode 100644
index 7c2c74d..0000000
--- a/examples/dotnet/Program.cs
+++ /dev/null
@@ -1,268 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-using Pulumi;
-using DockerBuild = Pulumi.DockerBuild;
-
-return await Deployment.RunAsync(() =>
-{
- var config = new Config();
- var dockerHubPassword = config.Require("dockerHubPassword");
- var multiPlatform = new DockerBuild.Image("multiPlatform", new()
- {
- Push = false,
- Dockerfile = new DockerBuild.Inputs.DockerfileArgs
- {
- Location = "./app/Dockerfile.multiPlatform",
- },
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "./app",
- },
- Platforms = new[]
- {
- DockerBuild.Platform.Plan9_amd64,
- DockerBuild.Platform.Plan9_386,
- },
- });
-
- var registryPush = new DockerBuild.Image("registryPush", new()
- {
- Push = false,
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "./app",
- },
- Tags = new[]
- {
- "docker.io/pulumibot/buildkit-e2e:example",
- },
- Exports = new[]
- {
- new DockerBuild.Inputs.ExportArgs
- {
- Registry = new DockerBuild.Inputs.ExportRegistryArgs
- {
- OciMediaTypes = true,
- Push = false,
- },
- },
- },
- Registries = new[]
- {
- new DockerBuild.Inputs.RegistryArgs
- {
- Address = "docker.io",
- Username = "pulumibot",
- Password = dockerHubPassword,
- },
- },
- });
-
- var cached = new DockerBuild.Image("cached", new()
- {
- Push = false,
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "./app",
- },
- CacheTo = new[]
- {
- new DockerBuild.Inputs.CacheToArgs
- {
- Local = new DockerBuild.Inputs.CacheToLocalArgs
- {
- Dest = "tmp/cache",
- Mode = DockerBuild.CacheMode.Max,
- },
- },
- },
- CacheFrom = new[]
- {
- new DockerBuild.Inputs.CacheFromArgs
- {
- Local = new DockerBuild.Inputs.CacheFromLocalArgs
- {
- Src = "tmp/cache",
- },
- },
- },
- });
-
- var buildArgs = new DockerBuild.Image("buildArgs", new()
- {
- Push = false,
- Dockerfile = new DockerBuild.Inputs.DockerfileArgs
- {
- Location = "./app/Dockerfile.buildArgs",
- },
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "./app",
- },
- BuildArgs =
- {
- { "SET_ME_TO_TRUE", "true" },
- },
- });
-
- var extraHosts = new DockerBuild.Image("extraHosts", new()
- {
- Push = false,
- Dockerfile = new DockerBuild.Inputs.DockerfileArgs
- {
- Location = "./app/Dockerfile.extraHosts",
- },
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "./app",
- },
- AddHosts = new[]
- {
- "metadata.google.internal:169.254.169.254",
- },
- });
-
- var sshMount = new DockerBuild.Image("sshMount", new()
- {
- Push = false,
- Dockerfile = new DockerBuild.Inputs.DockerfileArgs
- {
- Location = "./app/Dockerfile.sshMount",
- },
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "./app",
- },
- Ssh = new[]
- {
- new DockerBuild.Inputs.SSHArgs
- {
- Id = "default",
- },
- },
- });
-
- var secrets = new DockerBuild.Image("secrets", new()
- {
- Push = false,
- Dockerfile = new DockerBuild.Inputs.DockerfileArgs
- {
- Location = "./app/Dockerfile.secrets",
- },
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "./app",
- },
- Secrets =
- {
- { "password", "hunter2" },
- },
- });
-
- var labels = new DockerBuild.Image("labels", new()
- {
- Push = false,
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "./app",
- },
- Labels =
- {
- { "description", "This image will get a descriptive label 👍" },
- },
- });
-
- var target = new DockerBuild.Image("target", new()
- {
- Push = false,
- Dockerfile = new DockerBuild.Inputs.DockerfileArgs
- {
- Location = "./app/Dockerfile.target",
- },
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "./app",
- },
- Target = "build-me",
- });
-
- var namedContexts = new DockerBuild.Image("namedContexts", new()
- {
- Push = false,
- Dockerfile = new DockerBuild.Inputs.DockerfileArgs
- {
- Location = "./app/Dockerfile.namedContexts",
- },
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "./app",
- Named =
- {
- { "golang:latest", new DockerBuild.Inputs.ContextArgs
- {
- Location = "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984",
- } },
- },
- },
- });
-
- var remoteContext = new DockerBuild.Image("remoteContext", new()
- {
- Push = false,
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
- },
- });
-
- var remoteContextWithInline = new DockerBuild.Image("remoteContextWithInline", new()
- {
- Push = false,
- Dockerfile = new DockerBuild.Inputs.DockerfileArgs
- {
- Inline = @"FROM busybox
-COPY hello.c ./
-",
- },
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "https://github.com/docker-library/hello-world.git",
- },
- });
-
- var inline = new DockerBuild.Image("inline", new()
- {
- Push = false,
- Dockerfile = new DockerBuild.Inputs.DockerfileArgs
- {
- Inline = @"FROM alpine
-RUN echo ""This uses an inline Dockerfile! 👍""
-",
- },
- });
-
- var dockerLoad = new DockerBuild.Image("dockerLoad", new()
- {
- Push = false,
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "./app",
- },
- Exports = new[]
- {
- new DockerBuild.Inputs.ExportArgs
- {
- Docker = new DockerBuild.Inputs.ExportDockerArgs
- {
- Tar = true,
- },
- },
- },
- });
-
- return new Dictionary
- {
- ["platforms"] = multiPlatform.Platforms,
- };
-});
-
diff --git a/examples/dotnet/Pulumi.yaml b/examples/dotnet/Pulumi.yaml
deleted file mode 100644
index 96724a2..0000000
--- a/examples/dotnet/Pulumi.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-name: provider-docker-build
-runtime: dotnet
-config:
- dockerHubPassword:
- type: string
- secret: true
-plugins:
- providers:
- - name: docker-build
- path: ../../bin
diff --git a/examples/dotnet/app/Dockerfile b/examples/dotnet/app/Dockerfile
deleted file mode 100644
index e17a80c..0000000
--- a/examples/dotnet/app/Dockerfile
+++ /dev/null
@@ -1,2 +0,0 @@
-FROM alpine
-RUN echo 👍
diff --git a/examples/dotnet/app/Dockerfile.buildArgs b/examples/dotnet/app/Dockerfile.buildArgs
deleted file mode 100644
index 438ee01..0000000
--- a/examples/dotnet/app/Dockerfile.buildArgs
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM alpine
-
-ARG SET_ME_TO_TRUE
-RUN [ "$SET_ME_TO_TRUE" = "true" ]
-RUN echo "That's the correct build arg, thanks! 👍"
diff --git a/examples/dotnet/app/Dockerfile.emptyContext b/examples/dotnet/app/Dockerfile.emptyContext
deleted file mode 100644
index 769593b..0000000
--- a/examples/dotnet/app/Dockerfile.emptyContext
+++ /dev/null
@@ -1,2 +0,0 @@
-FROM alpine
-RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
diff --git a/examples/dotnet/app/Dockerfile.extraHosts b/examples/dotnet/app/Dockerfile.extraHosts
deleted file mode 100644
index 35b15f4..0000000
--- a/examples/dotnet/app/Dockerfile.extraHosts
+++ /dev/null
@@ -1,3 +0,0 @@
-FROM bash AS base
-
-RUN getent hosts metadata.google.internal
diff --git a/examples/dotnet/app/Dockerfile.multiPlatform b/examples/dotnet/app/Dockerfile.multiPlatform
deleted file mode 100644
index 49d3c83..0000000
--- a/examples/dotnet/app/Dockerfile.multiPlatform
+++ /dev/null
@@ -1,7 +0,0 @@
-FROM --platform=$BUILDPLATFORM alpine as build
-RUN echo ${BUILDPLATFORM} > buildplatform
-RUN echo ${TARGETPLATFORM} > targetplatform
-
-FROM build
-RUN cat buildplatform
-RUN cat targetplatform
diff --git a/examples/dotnet/app/Dockerfile.namedContexts b/examples/dotnet/app/Dockerfile.namedContexts
deleted file mode 100644
index 6e53dba..0000000
--- a/examples/dotnet/app/Dockerfile.namedContexts
+++ /dev/null
@@ -1,5 +0,0 @@
-# syntax=docker/dockerfile:1.4
-FROM golang:latest
-
-RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
-RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
diff --git a/examples/dotnet/app/Dockerfile.secrets b/examples/dotnet/app/Dockerfile.secrets
deleted file mode 100644
index 513bbd2..0000000
--- a/examples/dotnet/app/Dockerfile.secrets
+++ /dev/null
@@ -1,4 +0,0 @@
-FROM alpine
-
-RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
-
diff --git a/examples/dotnet/app/Dockerfile.sshMount b/examples/dotnet/app/Dockerfile.sshMount
deleted file mode 100644
index 055cb78..0000000
--- a/examples/dotnet/app/Dockerfile.sshMount
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM alpine
-
-RUN apk add openssh-client
-
-RUN --mount=type=ssh ssh-add -l
diff --git a/examples/dotnet/app/Dockerfile.target b/examples/dotnet/app/Dockerfile.target
deleted file mode 100644
index 7cddec7..0000000
--- a/examples/dotnet/app/Dockerfile.target
+++ /dev/null
@@ -1,8 +0,0 @@
-FROM alpine as build-me
-RUN echo 👍
-
-FROM build-me as also-build-me
-RUN echo 🤙
-
-FROM build-me as dont-build-me
-RUN [ "true" = "false" ]
diff --git a/examples/dotnet/provider-docker-build.csproj b/examples/dotnet/provider-docker-build.csproj
deleted file mode 100644
index a4fd588..0000000
--- a/examples/dotnet/provider-docker-build.csproj
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
- Exe
- net8.0
- enable
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/dotnet_test.go b/examples/dotnet_test.go
deleted file mode 100644
index 130ba24..0000000
--- a/examples/dotnet_test.go
+++ /dev/null
@@ -1,39 +0,0 @@
-//go:build dotnet || all
-// +build dotnet all
-
-package examples
-
-import (
- "os"
- "os/exec"
- "path"
- "path/filepath"
- "testing"
-
- "github.com/pulumi/pulumi/pkg/v3/testing/integration"
- "github.com/stretchr/testify/require"
-)
-
-func TestDotNetExample(t *testing.T) {
- cwd, err := os.Getwd()
- require.NoError(t, err)
-
- nuget := filepath.Join(cwd, "../nuget")
- t.Setenv("PULUMI_LOCAL_NUGET", nuget)
-
- cmd := exec.Command("dotnet", "nuget", "add", "source", nuget)
- _ = cmd.Run()
-
- test := integration.ProgramTestOptions{
- Dir: path.Join(cwd, "dotnet"),
- Dependencies: []string{
- "Pulumi.DockerBuild",
- },
- Secrets: map[string]string{
- "dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
- },
- NoParallel: true,
- }
-
- integration.ProgramTest(t, &test)
-}
diff --git a/examples/go/.dockerignore b/examples/go/.dockerignore
deleted file mode 100644
index 37ffae4..0000000
--- a/examples/go/.dockerignore
+++ /dev/null
@@ -1,2 +0,0 @@
-command-output
-tmp
diff --git a/examples/go/Pulumi.yaml b/examples/go/Pulumi.yaml
deleted file mode 100644
index cdca90a..0000000
--- a/examples/go/Pulumi.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-name: provider-docker-build
-runtime: go
-config:
- dockerHubPassword:
- type: string
- secret: true
-plugins:
- providers:
- - name: docker-build
- path: ../../bin
diff --git a/examples/go/app/Dockerfile b/examples/go/app/Dockerfile
deleted file mode 100644
index e17a80c..0000000
--- a/examples/go/app/Dockerfile
+++ /dev/null
@@ -1,2 +0,0 @@
-FROM alpine
-RUN echo 👍
diff --git a/examples/go/app/Dockerfile.buildArgs b/examples/go/app/Dockerfile.buildArgs
deleted file mode 100644
index 438ee01..0000000
--- a/examples/go/app/Dockerfile.buildArgs
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM alpine
-
-ARG SET_ME_TO_TRUE
-RUN [ "$SET_ME_TO_TRUE" = "true" ]
-RUN echo "That's the correct build arg, thanks! 👍"
diff --git a/examples/go/app/Dockerfile.emptyContext b/examples/go/app/Dockerfile.emptyContext
deleted file mode 100644
index 769593b..0000000
--- a/examples/go/app/Dockerfile.emptyContext
+++ /dev/null
@@ -1,2 +0,0 @@
-FROM alpine
-RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
diff --git a/examples/go/app/Dockerfile.extraHosts b/examples/go/app/Dockerfile.extraHosts
deleted file mode 100644
index 35b15f4..0000000
--- a/examples/go/app/Dockerfile.extraHosts
+++ /dev/null
@@ -1,3 +0,0 @@
-FROM bash AS base
-
-RUN getent hosts metadata.google.internal
diff --git a/examples/go/app/Dockerfile.multiPlatform b/examples/go/app/Dockerfile.multiPlatform
deleted file mode 100644
index 49d3c83..0000000
--- a/examples/go/app/Dockerfile.multiPlatform
+++ /dev/null
@@ -1,7 +0,0 @@
-FROM --platform=$BUILDPLATFORM alpine as build
-RUN echo ${BUILDPLATFORM} > buildplatform
-RUN echo ${TARGETPLATFORM} > targetplatform
-
-FROM build
-RUN cat buildplatform
-RUN cat targetplatform
diff --git a/examples/go/app/Dockerfile.namedContexts b/examples/go/app/Dockerfile.namedContexts
deleted file mode 100644
index 6e53dba..0000000
--- a/examples/go/app/Dockerfile.namedContexts
+++ /dev/null
@@ -1,5 +0,0 @@
-# syntax=docker/dockerfile:1.4
-FROM golang:latest
-
-RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
-RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
diff --git a/examples/go/app/Dockerfile.secrets b/examples/go/app/Dockerfile.secrets
deleted file mode 100644
index 513bbd2..0000000
--- a/examples/go/app/Dockerfile.secrets
+++ /dev/null
@@ -1,4 +0,0 @@
-FROM alpine
-
-RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
-
diff --git a/examples/go/app/Dockerfile.sshMount b/examples/go/app/Dockerfile.sshMount
deleted file mode 100644
index 055cb78..0000000
--- a/examples/go/app/Dockerfile.sshMount
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM alpine
-
-RUN apk add openssh-client
-
-RUN --mount=type=ssh ssh-add -l
diff --git a/examples/go/app/Dockerfile.target b/examples/go/app/Dockerfile.target
deleted file mode 100644
index 7cddec7..0000000
--- a/examples/go/app/Dockerfile.target
+++ /dev/null
@@ -1,8 +0,0 @@
-FROM alpine as build-me
-RUN echo 👍
-
-FROM build-me as also-build-me
-RUN echo 🤙
-
-FROM build-me as dont-build-me
-RUN [ "true" = "false" ]
diff --git a/examples/go/go.mod b/examples/go/go.mod
deleted file mode 100644
index 157a670..0000000
--- a/examples/go/go.mod
+++ /dev/null
@@ -1,99 +0,0 @@
-module provider-docker-build
-
-go 1.24.1
-
-toolchain go1.24.5
-
-require (
- github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.12
- github.com/pulumi/pulumi/sdk/v3 v3.192.0
-)
-
-require (
- dario.cat/mergo v1.0.1 // indirect
- github.com/BurntSushi/toml v1.5.0 // indirect
- github.com/Microsoft/go-winio v0.6.2 // indirect
- github.com/ProtonMail/go-crypto v1.2.0 // indirect
- github.com/agext/levenshtein v1.2.3 // indirect
- github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
- github.com/atotto/clipboard v0.1.4 // indirect
- github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
- github.com/blang/semver v3.5.1+incompatible // indirect
- github.com/charmbracelet/bubbles v0.21.0 // indirect
- github.com/charmbracelet/bubbletea v1.3.4 // indirect
- github.com/charmbracelet/colorprofile v0.3.0 // indirect
- github.com/charmbracelet/lipgloss v1.1.0 // indirect
- github.com/charmbracelet/x/ansi v0.8.0 // indirect
- github.com/charmbracelet/x/cellbuf v0.0.13 // indirect
- github.com/charmbracelet/x/term v0.2.1 // indirect
- github.com/cheggaaa/pb v1.0.29 // indirect
- github.com/cloudflare/circl v1.6.1 // indirect
- github.com/cyphar/filepath-securejoin v0.4.1 // indirect
- github.com/djherbis/times v1.6.0 // indirect
- github.com/emirpasic/gods v1.18.1 // indirect
- github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
- github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
- github.com/go-git/go-billy/v5 v5.6.2 // indirect
- github.com/go-git/go-git/v5 v5.16.0 // indirect
- github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/glog v1.2.4 // indirect
- github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
- github.com/google/uuid v1.6.0 // indirect
- github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
- github.com/hashicorp/errwrap v1.1.0 // indirect
- github.com/hashicorp/go-multierror v1.1.1 // indirect
- github.com/hashicorp/hcl/v2 v2.23.0 // indirect
- github.com/inconshreveable/mousetrap v1.1.0 // indirect
- github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
- github.com/kevinburke/ssh_config v1.2.0 // indirect
- github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
- github.com/mattn/go-isatty v0.0.20 // indirect
- github.com/mattn/go-localereader v0.0.1 // indirect
- github.com/mattn/go-runewidth v0.0.16 // indirect
- github.com/mitchellh/go-ps v1.0.0 // indirect
- github.com/mitchellh/go-wordwrap v1.0.1 // indirect
- github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
- github.com/muesli/cancelreader v0.2.2 // indirect
- github.com/muesli/termenv v0.16.0 // indirect
- github.com/opentracing/basictracer-go v1.1.0 // indirect
- github.com/opentracing/opentracing-go v1.2.0 // indirect
- github.com/pgavlin/fx v0.1.6 // indirect
- github.com/pjbgf/sha1cd v0.3.2 // indirect
- github.com/pkg/errors v0.9.1 // indirect
- github.com/pkg/term v1.1.0 // indirect
- github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect
- github.com/pulumi/esc v0.17.0 // indirect
- github.com/rivo/uniseg v0.4.7 // indirect
- github.com/rogpeppe/go-internal v1.14.1 // indirect
- github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect
- github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect
- github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
- github.com/skeema/knownhosts v1.3.1 // indirect
- github.com/spf13/cast v1.5.0 // indirect
- github.com/spf13/cobra v1.9.1 // indirect
- github.com/spf13/pflag v1.0.6 // indirect
- github.com/texttheater/golang-levenshtein v1.0.1 // indirect
- github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
- github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
- github.com/xanzy/ssh-agent v0.3.3 // indirect
- github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
- github.com/zclconf/go-cty v1.16.2 // indirect
- go.opentelemetry.io/otel v1.36.0 // indirect
- go.opentelemetry.io/otel/sdk v1.36.0 // indirect
- go.uber.org/atomic v1.11.0 // indirect
- golang.org/x/crypto v0.39.0 // indirect
- golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect
- golang.org/x/mod v0.25.0 // indirect
- golang.org/x/net v0.40.0 // indirect
- golang.org/x/sync v0.15.0 // indirect
- golang.org/x/sys v0.33.0 // indirect
- golang.org/x/term v0.32.0 // indirect
- golang.org/x/text v0.26.0 // indirect
- golang.org/x/tools v0.33.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 // indirect
- google.golang.org/grpc v1.72.1 // indirect
- google.golang.org/protobuf v1.36.6 // indirect
- gopkg.in/warnings.v0 v0.1.2 // indirect
- gopkg.in/yaml.v3 v3.0.1 // indirect
- lukechampine.com/frand v1.5.1 // indirect
-)
diff --git a/examples/go/go.sum b/examples/go/go.sum
deleted file mode 100644
index cae2c0f..0000000
--- a/examples/go/go.sum
+++ /dev/null
@@ -1,312 +0,0 @@
-dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
-dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
-github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
-github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
-github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
-github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
-github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
-github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
-github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
-github.com/ProtonMail/go-crypto v1.2.0 h1:+PhXXn4SPGd+qk76TlEePBfOfivE0zkWFenhGhFLzWs=
-github.com/ProtonMail/go-crypto v1.2.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE=
-github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo=
-github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
-github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
-github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
-github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY=
-github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4=
-github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
-github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
-github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
-github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
-github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
-github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
-github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
-github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
-github.com/charmbracelet/bubbles v0.21.0 h1:9TdC97SdRVg/1aaXNVWfFH3nnLAwOXr8Fn6u6mfQdFs=
-github.com/charmbracelet/bubbles v0.21.0/go.mod h1:HF+v6QUR4HkEpz62dx7ym2xc71/KBHg+zKwJtMw+qtg=
-github.com/charmbracelet/bubbletea v1.3.4 h1:kCg7B+jSCFPLYRA52SDZjr51kG/fMUEoPoZrkaDHyoI=
-github.com/charmbracelet/bubbletea v1.3.4/go.mod h1:dtcUCyCGEX3g9tosuYiut3MXgY/Jsv9nKVdibKKRRXo=
-github.com/charmbracelet/colorprofile v0.3.0 h1:KtLh9uuu1RCt+Hml4s6Hz+kB1PfV3wi++1h5ia65yKQ=
-github.com/charmbracelet/colorprofile v0.3.0/go.mod h1:oHJ340RS2nmG1zRGPmhJKJ/jf4FPNNk0P39/wBPA1G0=
-github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
-github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
-github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE=
-github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
-github.com/charmbracelet/x/cellbuf v0.0.13 h1:/KBBKHuVRbq1lYx5BzEHBAFBP8VcQzJejZ/IA3iR28k=
-github.com/charmbracelet/x/cellbuf v0.0.13/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
-github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
-github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
-github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo=
-github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30=
-github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
-github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
-github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
-github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s=
-github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/djherbis/times v1.6.0 h1:w2ctJ92J8fBvWPxugmXIv7Nz7Q3iDMKNx9v5ocVH20c=
-github.com/djherbis/times v1.6.0/go.mod h1:gOHeRAz2h+VJNZ5Gmc/o7iD9k4wW7NMVqieYCY99oc0=
-github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o=
-github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE=
-github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
-github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
-github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
-github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM=
-github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
-github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
-github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
-github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
-github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
-github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c=
-github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU=
-github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
-github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
-github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM=
-github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU=
-github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4=
-github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
-github.com/go-git/go-git/v5 v5.16.0 h1:k3kuOEpkc0DeY7xlL6NaaNg39xdgQbtH5mwCafHO9AQ=
-github.com/go-git/go-git/v5 v5.16.0/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
-github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
-github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc=
-github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
-github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
-github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
-github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
-github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
-github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
-github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
-github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
-github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU=
-github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw=
-github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
-github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
-github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
-github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
-github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
-github.com/hashicorp/hcl/v2 v2.23.0 h1:Fphj1/gCylPxHutVSEOf2fBOh1VE4AuLV7+kbJf3qos=
-github.com/hashicorp/hcl/v2 v2.23.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA=
-github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
-github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
-github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
-github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
-github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
-github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
-github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
-github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
-github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
-github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
-github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
-github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
-github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
-github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
-github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4=
-github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88=
-github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
-github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
-github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
-github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc=
-github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg=
-github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0=
-github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=
-github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI=
-github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo=
-github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
-github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
-github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc=
-github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
-github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
-github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
-github.com/opentracing/basictracer-go v1.1.0 h1:Oa1fTSBvAl8pa3U+IJYqrKm0NALwH9OsgwOqDv4xJW0=
-github.com/opentracing/basictracer-go v1.1.0/go.mod h1:V2HZueSJEp879yv285Aap1BS69fQMD+MNP1mRs6mBQc=
-github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
-github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
-github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
-github.com/pgavlin/fx v0.1.6 h1:r9jEg69DhNoCd3Xh0+5mIbdbS3PqWrVWujkY76MFRTU=
-github.com/pgavlin/fx v0.1.6/go.mod h1:KWZJ6fqBBSh8GxHYqwYCf3rYE7Gp2p0N8tJp8xv9u9M=
-github.com/pgavlin/fx/v2 v2.0.3 h1:ZBVklTFjxcWvBVPE+ti5qwnmTIQ0Gq6nuj3J5RKDtKk=
-github.com/pgavlin/fx/v2 v2.0.3/go.mod h1:Cvnwqq0BopdHUJ7CU50h1XPeKrF4ZwdFj1nJLXbAjCE=
-github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4=
-github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk=
-github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 h1:vkHw5I/plNdTr435cARxCW6q9gc0S/Yxz7Mkd38pOb0=
-github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231/go.mod h1:murToZ2N9hNJzewjHBgfFdXhZKjY3z5cYC1VXk+lbFE=
-github.com/pulumi/esc v0.17.0 h1:oaVOIyFTENlYDuqc3pW75lQT9jb2cd6ie/4/Twxn66w=
-github.com/pulumi/esc v0.17.0/go.mod h1:XnSxlt5NkmuAj304l/gK4pRErFbtqq6XpfX1tYT9Jbc=
-github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.12 h1:uzmw+0iic764m0Yvh4I/jRV1x3q49dVh5Ctq9RllsQ8=
-github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.12/go.mod h1:6zFMe786NvFDO03BVJwdw1R/Yms4F6vAU49iBHo8zbQ=
-github.com/pulumi/pulumi/sdk/v3 v3.192.0 h1:sfHuR3P02wSbV3xdSMEQ0+uC/HzlMz0YfKrVAXy1hSQ=
-github.com/pulumi/pulumi/sdk/v3 v3.192.0/go.mod h1:aV0+c5xpSYccWKmOjTZS9liYCqh7+peu3cQgSXu7CJw=
-github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
-github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
-github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
-github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
-github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
-github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI=
-github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs=
-github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4=
-github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY=
-github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
-github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
-github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
-github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8=
-github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY=
-github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
-github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
-github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
-github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
-github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
-github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
-github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
-github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
-github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U=
-github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8=
-github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o=
-github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
-github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
-github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
-github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
-github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
-github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
-github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/zclconf/go-cty v1.16.2 h1:LAJSwc3v81IRBZyUVQDUdZ7hs3SYs9jv0eZJDWHD/70=
-github.com/zclconf/go-cty v1.16.2/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
-go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
-go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
-go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk=
-go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
-go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
-go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
-golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
-golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM=
-golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8=
-golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w=
-golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
-golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
-golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
-golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
-golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
-golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc=
-golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 h1:cJfm9zPbe1e873mHJzmQ1nwVEeRDU/T1wXDK2kUSU34=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.72.1 h1:HR03wO6eyZ7lknl75XlxABNVLLFc2PAb6mHlYh756mA=
-google.golang.org/grpc v1.72.1/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
-google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
-google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
-gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-lukechampine.com/frand v1.5.1 h1:fg0eRtdmGFIxhP5zQJzM1lFDbD6CUfu/f+7WgAZd5/w=
-lukechampine.com/frand v1.5.1/go.mod h1:4VstaWc2plN4Mjr10chUD46RAVGWhpkZ5Nja8+Azp0Q=
-pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw=
-pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
diff --git a/examples/go/main.go b/examples/go/main.go
deleted file mode 100644
index 54e4979..0000000
--- a/examples/go/main.go
+++ /dev/null
@@ -1,233 +0,0 @@
-package main
-
-import (
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi/config"
-)
-
-func main() {
- pulumi.Run(func(ctx *pulumi.Context) error {
- cfg := config.New(ctx, "")
- dockerHubPassword := cfg.Require("dockerHubPassword")
- multiPlatform, err := dockerbuild.NewImage(ctx, "multiPlatform", &dockerbuild.ImageArgs{
- Push: pulumi.Bool(false),
- Dockerfile: &dockerbuild.DockerfileArgs{
- Location: pulumi.String("./app/Dockerfile.multiPlatform"),
- },
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("./app"),
- },
- Platforms: dockerbuild.PlatformArray{
- dockerbuild.Platform_Plan9_amd64,
- dockerbuild.Platform_Plan9_386,
- },
- })
- if err != nil {
- return err
- }
- _, err = dockerbuild.NewImage(ctx, "registryPush", &dockerbuild.ImageArgs{
- Push: pulumi.Bool(false),
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("./app"),
- },
- Tags: pulumi.StringArray{
- pulumi.String("docker.io/pulumibot/buildkit-e2e:example"),
- },
- Exports: dockerbuild.ExportArray{
- &dockerbuild.ExportArgs{
- Registry: &dockerbuild.ExportRegistryArgs{
- OciMediaTypes: pulumi.Bool(true),
- Push: pulumi.Bool(false),
- },
- },
- },
- Registries: dockerbuild.RegistryArray{
- &dockerbuild.RegistryArgs{
- Address: pulumi.String("docker.io"),
- Username: pulumi.String("pulumibot"),
- Password: pulumi.String(dockerHubPassword),
- },
- },
- })
- if err != nil {
- return err
- }
- _, err = dockerbuild.NewImage(ctx, "cached", &dockerbuild.ImageArgs{
- Push: pulumi.Bool(false),
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("./app"),
- },
- CacheTo: dockerbuild.CacheToArray{
- &dockerbuild.CacheToArgs{
- Local: &dockerbuild.CacheToLocalArgs{
- Dest: pulumi.String("tmp/cache"),
- Mode: dockerbuild.CacheModeMax,
- },
- },
- },
- CacheFrom: dockerbuild.CacheFromArray{
- &dockerbuild.CacheFromArgs{
- Local: &dockerbuild.CacheFromLocalArgs{
- Src: pulumi.String("tmp/cache"),
- },
- },
- },
- })
- if err != nil {
- return err
- }
- _, err = dockerbuild.NewImage(ctx, "buildArgs", &dockerbuild.ImageArgs{
- Push: pulumi.Bool(false),
- Dockerfile: &dockerbuild.DockerfileArgs{
- Location: pulumi.String("./app/Dockerfile.buildArgs"),
- },
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("./app"),
- },
- BuildArgs: pulumi.StringMap{
- "SET_ME_TO_TRUE": pulumi.String("true"),
- },
- })
- if err != nil {
- return err
- }
- _, err = dockerbuild.NewImage(ctx, "extraHosts", &dockerbuild.ImageArgs{
- Push: pulumi.Bool(false),
- Dockerfile: &dockerbuild.DockerfileArgs{
- Location: pulumi.String("./app/Dockerfile.extraHosts"),
- },
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("./app"),
- },
- AddHosts: pulumi.StringArray{
- pulumi.String("metadata.google.internal:169.254.169.254"),
- },
- })
- if err != nil {
- return err
- }
- _, err = dockerbuild.NewImage(ctx, "sshMount", &dockerbuild.ImageArgs{
- Push: pulumi.Bool(false),
- Dockerfile: &dockerbuild.DockerfileArgs{
- Location: pulumi.String("./app/Dockerfile.sshMount"),
- },
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("./app"),
- },
- Ssh: dockerbuild.SSHArray{
- &dockerbuild.SSHArgs{
- Id: pulumi.String("default"),
- },
- },
- })
- if err != nil {
- return err
- }
- _, err = dockerbuild.NewImage(ctx, "secrets", &dockerbuild.ImageArgs{
- Push: pulumi.Bool(false),
- Dockerfile: &dockerbuild.DockerfileArgs{
- Location: pulumi.String("./app/Dockerfile.secrets"),
- },
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("./app"),
- },
- Secrets: pulumi.StringMap{
- "password": pulumi.String("hunter2"),
- },
- })
- if err != nil {
- return err
- }
- _, err = dockerbuild.NewImage(ctx, "labels", &dockerbuild.ImageArgs{
- Push: pulumi.Bool(false),
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("./app"),
- },
- Labels: pulumi.StringMap{
- "description": pulumi.String("This image will get a descriptive label 👍"),
- },
- })
- if err != nil {
- return err
- }
- _, err = dockerbuild.NewImage(ctx, "target", &dockerbuild.ImageArgs{
- Push: pulumi.Bool(false),
- Dockerfile: &dockerbuild.DockerfileArgs{
- Location: pulumi.String("./app/Dockerfile.target"),
- },
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("./app"),
- },
- Target: pulumi.String("build-me"),
- })
- if err != nil {
- return err
- }
- _, err = dockerbuild.NewImage(ctx, "namedContexts", &dockerbuild.ImageArgs{
- Push: pulumi.Bool(false),
- Dockerfile: &dockerbuild.DockerfileArgs{
- Location: pulumi.String("./app/Dockerfile.namedContexts"),
- },
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("./app"),
- Named: dockerbuild.ContextMap{
- "golang:latest": &dockerbuild.ContextArgs{
- Location: pulumi.String("docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"),
- },
- },
- },
- })
- if err != nil {
- return err
- }
- _, err = dockerbuild.NewImage(ctx, "remoteContext", &dockerbuild.ImageArgs{
- Push: pulumi.Bool(false),
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"),
- },
- })
- if err != nil {
- return err
- }
- _, err = dockerbuild.NewImage(ctx, "remoteContextWithInline", &dockerbuild.ImageArgs{
- Push: pulumi.Bool(false),
- Dockerfile: &dockerbuild.DockerfileArgs{
- Inline: pulumi.String("FROM busybox\nCOPY hello.c ./\n"),
- },
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("https://github.com/docker-library/hello-world.git"),
- },
- })
- if err != nil {
- return err
- }
- _, err = dockerbuild.NewImage(ctx, "inline", &dockerbuild.ImageArgs{
- Push: pulumi.Bool(false),
- Dockerfile: &dockerbuild.DockerfileArgs{
- Inline: pulumi.String("FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n"),
- },
- })
- if err != nil {
- return err
- }
- _, err = dockerbuild.NewImage(ctx, "dockerLoad", &dockerbuild.ImageArgs{
- Push: pulumi.Bool(false),
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("./app"),
- },
- Exports: dockerbuild.ExportArray{
- &dockerbuild.ExportArgs{
- Docker: &dockerbuild.ExportDockerArgs{
- Tar: pulumi.Bool(true),
- },
- },
- },
- })
- if err != nil {
- return err
- }
- ctx.Export("platforms", multiPlatform.Platforms)
- return nil
- })
-}
diff --git a/examples/go_test.go b/examples/go_test.go
deleted file mode 100644
index 95588b5..0000000
--- a/examples/go_test.go
+++ /dev/null
@@ -1,30 +0,0 @@
-//go:build go || all
-// +build go all
-
-package examples
-
-import (
- "os"
- "path"
- "testing"
-
- "github.com/pulumi/pulumi/pkg/v3/testing/integration"
- "github.com/stretchr/testify/require"
-)
-
-func TestGoExample(t *testing.T) {
- cwd, err := os.Getwd()
- require.NoError(t, err)
-
- test := integration.ProgramTestOptions{
- Dir: path.Join(cwd, "go"),
- Dependencies: []string{
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild=../sdk/go/dockerbuild",
- },
- Secrets: map[string]string{
- "dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
- },
- }
-
- integration.ProgramTest(t, &test)
-}
diff --git a/examples/java/.dockerignore b/examples/java/.dockerignore
deleted file mode 100644
index 37ffae4..0000000
--- a/examples/java/.dockerignore
+++ /dev/null
@@ -1,2 +0,0 @@
-command-output
-tmp
diff --git a/examples/java/Pulumi.yaml b/examples/java/Pulumi.yaml
deleted file mode 100644
index 50cac76..0000000
--- a/examples/java/Pulumi.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-name: provider-docker-build
-runtime: java
-config:
- dockerHubPassword:
- type: string
- secret: true
-plugins:
- providers:
- - name: docker-build
- path: ../../bin
diff --git a/examples/java/app/Dockerfile b/examples/java/app/Dockerfile
deleted file mode 100644
index e17a80c..0000000
--- a/examples/java/app/Dockerfile
+++ /dev/null
@@ -1,2 +0,0 @@
-FROM alpine
-RUN echo 👍
diff --git a/examples/java/app/Dockerfile.buildArgs b/examples/java/app/Dockerfile.buildArgs
deleted file mode 100644
index 438ee01..0000000
--- a/examples/java/app/Dockerfile.buildArgs
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM alpine
-
-ARG SET_ME_TO_TRUE
-RUN [ "$SET_ME_TO_TRUE" = "true" ]
-RUN echo "That's the correct build arg, thanks! 👍"
diff --git a/examples/java/app/Dockerfile.emptyContext b/examples/java/app/Dockerfile.emptyContext
deleted file mode 100644
index 769593b..0000000
--- a/examples/java/app/Dockerfile.emptyContext
+++ /dev/null
@@ -1,2 +0,0 @@
-FROM alpine
-RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
diff --git a/examples/java/app/Dockerfile.extraHosts b/examples/java/app/Dockerfile.extraHosts
deleted file mode 100644
index 35b15f4..0000000
--- a/examples/java/app/Dockerfile.extraHosts
+++ /dev/null
@@ -1,3 +0,0 @@
-FROM bash AS base
-
-RUN getent hosts metadata.google.internal
diff --git a/examples/java/app/Dockerfile.multiPlatform b/examples/java/app/Dockerfile.multiPlatform
deleted file mode 100644
index 49d3c83..0000000
--- a/examples/java/app/Dockerfile.multiPlatform
+++ /dev/null
@@ -1,7 +0,0 @@
-FROM --platform=$BUILDPLATFORM alpine as build
-RUN echo ${BUILDPLATFORM} > buildplatform
-RUN echo ${TARGETPLATFORM} > targetplatform
-
-FROM build
-RUN cat buildplatform
-RUN cat targetplatform
diff --git a/examples/java/app/Dockerfile.namedContexts b/examples/java/app/Dockerfile.namedContexts
deleted file mode 100644
index 6e53dba..0000000
--- a/examples/java/app/Dockerfile.namedContexts
+++ /dev/null
@@ -1,5 +0,0 @@
-# syntax=docker/dockerfile:1.4
-FROM golang:latest
-
-RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
-RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
diff --git a/examples/java/app/Dockerfile.secrets b/examples/java/app/Dockerfile.secrets
deleted file mode 100644
index 513bbd2..0000000
--- a/examples/java/app/Dockerfile.secrets
+++ /dev/null
@@ -1,4 +0,0 @@
-FROM alpine
-
-RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
-
diff --git a/examples/java/app/Dockerfile.sshMount b/examples/java/app/Dockerfile.sshMount
deleted file mode 100644
index 055cb78..0000000
--- a/examples/java/app/Dockerfile.sshMount
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM alpine
-
-RUN apk add openssh-client
-
-RUN --mount=type=ssh ssh-add -l
diff --git a/examples/java/app/Dockerfile.target b/examples/java/app/Dockerfile.target
deleted file mode 100644
index 7cddec7..0000000
--- a/examples/java/app/Dockerfile.target
+++ /dev/null
@@ -1,8 +0,0 @@
-FROM alpine as build-me
-RUN echo 👍
-
-FROM build-me as also-build-me
-RUN echo 🤙
-
-FROM build-me as dont-build-me
-RUN [ "true" = "false" ]
diff --git a/examples/java/pom.xml b/examples/java/pom.xml
deleted file mode 100644
index b32d9ca..0000000
--- a/examples/java/pom.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
- 4.0.0
-
- com.pulumi
- provider-docker-build
- 1.0-SNAPSHOT
-
-
- UTF-8
- 11
- 11
- 11
- generated_program.App
-
-
-
-
-
- com.pulumi
- pulumi
- (,1.0]
-
-
- com.pulumi
- docker-build
- [0.0.0,)
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
- 3.2.2
-
-
-
- true
- ${mainClass}
-
-
-
-
-
- org.apache.maven.plugins
- maven-assembly-plugin
- 3.4.2
-
-
-
- true
- ${mainClass}
-
-
-
- jar-with-dependencies
-
-
-
-
- make-my-jar-with-dependencies
- package
-
- single
-
-
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
- 3.1.0
-
- ${mainClass}
- ${mainArgs}
-
-
-
- org.apache.maven.plugins
- maven-wrapper-plugin
- 3.1.1
-
- 3.8.5
-
-
-
-
-
diff --git a/examples/java/src/main/java/generated_program/App.java b/examples/java/src/main/java/generated_program/App.java
deleted file mode 100644
index 709cfaf..0000000
--- a/examples/java/src/main/java/generated_program/App.java
+++ /dev/null
@@ -1,204 +0,0 @@
-package generated_program;
-
-import com.pulumi.Context;
-import com.pulumi.Pulumi;
-import com.pulumi.core.Output;
-import com.pulumi.dockerbuild.Image;
-import com.pulumi.dockerbuild.ImageArgs;
-import com.pulumi.dockerbuild.inputs.DockerfileArgs;
-import com.pulumi.dockerbuild.inputs.BuildContextArgs;
-import com.pulumi.dockerbuild.inputs.ExportArgs;
-import com.pulumi.dockerbuild.inputs.ExportRegistryArgs;
-import com.pulumi.dockerbuild.inputs.RegistryArgs;
-import com.pulumi.dockerbuild.inputs.CacheToArgs;
-import com.pulumi.dockerbuild.inputs.CacheToLocalArgs;
-import com.pulumi.dockerbuild.inputs.CacheFromArgs;
-import com.pulumi.dockerbuild.inputs.CacheFromLocalArgs;
-import com.pulumi.dockerbuild.inputs.SSHArgs;
-import com.pulumi.dockerbuild.inputs.ExportDockerArgs;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-public class App {
- public static void main(String[] args) {
- Pulumi.run(App::stack);
- }
-
- public static void stack(Context ctx) {
- final var config = ctx.config();
- final var dockerHubPassword = config.get("dockerHubPassword");
- var multiPlatform = new Image("multiPlatform", ImageArgs.builder()
- .push(false)
- .dockerfile(DockerfileArgs.builder()
- .location("./app/Dockerfile.multiPlatform")
- .build())
- .context(BuildContextArgs.builder()
- .location("./app")
- .build())
- .platforms(
- "plan9/amd64",
- "plan9/386")
- .build());
-
- var registryPush = new Image("registryPush", ImageArgs.builder()
- .push(false)
- .context(BuildContextArgs.builder()
- .location("./app")
- .build())
- .tags("docker.io/pulumibot/buildkit-e2e:example")
- .exports(ExportArgs.builder()
- .registry(ExportRegistryArgs.builder()
- .ociMediaTypes(true)
- .push(false)
- .build())
- .build())
- .registries(RegistryArgs.builder()
- .address("docker.io")
- .username("pulumibot")
- .password(dockerHubPassword)
- .build())
- .build());
-
- var cached = new Image("cached", ImageArgs.builder()
- .push(false)
- .context(BuildContextArgs.builder()
- .location("./app")
- .build())
- .cacheTo(CacheToArgs.builder()
- .local(CacheToLocalArgs.builder()
- .dest("tmp/cache")
- .mode("max")
- .build())
- .build())
- .cacheFrom(CacheFromArgs.builder()
- .local(CacheFromLocalArgs.builder()
- .src("tmp/cache")
- .build())
- .build())
- .build());
-
- var buildArgs = new Image("buildArgs", ImageArgs.builder()
- .push(false)
- .dockerfile(DockerfileArgs.builder()
- .location("./app/Dockerfile.buildArgs")
- .build())
- .context(BuildContextArgs.builder()
- .location("./app")
- .build())
- .buildArgs(Map.of("SET_ME_TO_TRUE", "true"))
- .build());
-
- var extraHosts = new Image("extraHosts", ImageArgs.builder()
- .push(false)
- .dockerfile(DockerfileArgs.builder()
- .location("./app/Dockerfile.extraHosts")
- .build())
- .context(BuildContextArgs.builder()
- .location("./app")
- .build())
- .addHosts("metadata.google.internal:169.254.169.254")
- .build());
-
- var sshMount = new Image("sshMount", ImageArgs.builder()
- .push(false)
- .dockerfile(DockerfileArgs.builder()
- .location("./app/Dockerfile.sshMount")
- .build())
- .context(BuildContextArgs.builder()
- .location("./app")
- .build())
- .ssh(SSHArgs.builder()
- .id("default")
- .build())
- .build());
-
- var secrets = new Image("secrets", ImageArgs.builder()
- .push(false)
- .dockerfile(DockerfileArgs.builder()
- .location("./app/Dockerfile.secrets")
- .build())
- .context(BuildContextArgs.builder()
- .location("./app")
- .build())
- .secrets(Map.of("password", "hunter2"))
- .build());
-
- var labels = new Image("labels", ImageArgs.builder()
- .push(false)
- .context(BuildContextArgs.builder()
- .location("./app")
- .build())
- .labels(Map.of("description", "This image will get a descriptive label 👍"))
- .build());
-
- var target = new Image("target", ImageArgs.builder()
- .push(false)
- .dockerfile(DockerfileArgs.builder()
- .location("./app/Dockerfile.target")
- .build())
- .context(BuildContextArgs.builder()
- .location("./app")
- .build())
- .target("build-me")
- .build());
-
- var namedContexts = new Image("namedContexts", ImageArgs.builder()
- .push(false)
- .dockerfile(DockerfileArgs.builder()
- .location("./app/Dockerfile.namedContexts")
- .build())
- .context(BuildContextArgs.builder()
- .location("./app")
- .named(Map.of("golang:latest", Map.of("location", "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984")))
- .build())
- .build());
-
- var remoteContext = new Image("remoteContext", ImageArgs.builder()
- .push(false)
- .context(BuildContextArgs.builder()
- .location("https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile")
- .build())
- .build());
-
- var remoteContextWithInline = new Image("remoteContextWithInline", ImageArgs.builder()
- .push(false)
- .dockerfile(DockerfileArgs.builder()
- .inline("""
-FROM busybox
-COPY hello.c ./
- """)
- .build())
- .context(BuildContextArgs.builder()
- .location("https://github.com/docker-library/hello-world.git")
- .build())
- .build());
-
- var inline = new Image("inline", ImageArgs.builder()
- .push(false)
- .dockerfile(DockerfileArgs.builder()
- .inline("""
-FROM alpine
-RUN echo "This uses an inline Dockerfile! 👍"
- """)
- .build())
- .build());
-
- var dockerLoad = new Image("dockerLoad", ImageArgs.builder()
- .push(false)
- .context(BuildContextArgs.builder()
- .location("./app")
- .build())
- .exports(ExportArgs.builder()
- .docker(ExportDockerArgs.builder()
- .tar(true)
- .build())
- .build())
- .build());
-
- ctx.export("platforms", multiPlatform.platforms());
- }
-}
diff --git a/examples/java_test.go b/examples/java_test.go
deleted file mode 100644
index 70ff785..0000000
--- a/examples/java_test.go
+++ /dev/null
@@ -1,29 +0,0 @@
-//go:build java || all
-// +build java all
-
-package examples
-
-import (
- "os"
- "path"
- "testing"
-
- "github.com/pulumi/pulumi/pkg/v3/testing/integration"
- "github.com/stretchr/testify/require"
-)
-
-func TestJavaExample(t *testing.T) {
- t.Skip("not working yet")
-
- cwd, err := os.Getwd()
- require.NoError(t, err)
-
- test := integration.ProgramTestOptions{
- Dir: path.Join(cwd, "java"),
- Secrets: map[string]string{
- "dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
- },
- }
-
- integration.ProgramTest(t, &test)
-}
diff --git a/examples/main_test.go b/examples/main_test.go
deleted file mode 100644
index 9d2cec4..0000000
--- a/examples/main_test.go
+++ /dev/null
@@ -1,61 +0,0 @@
-package examples
-
-import (
- "crypto/rsa"
- "errors"
- "io"
- "math/rand"
- "net"
- "os"
- "path/filepath"
- "testing"
-
- "golang.org/x/crypto/ssh/agent"
-)
-
-func TestMain(m *testing.M) {
- sock := sshagent()
- os.Setenv("SSH_AUTH_SOCK", sock)
-
- os.Exit(m.Run())
-}
-
-// sshagent crates an in-memory SSH agent with one identity.
-func sshagent() string {
- dir, err := os.MkdirTemp(os.TempDir(), "docker-test-*")
- if err != nil {
- panic(err)
- }
-
- sock := filepath.Join(dir, "test.sock")
-
- l, err := net.Listen("unix", sock)
- if err != nil {
- panic(err)
- }
-
- a := agent.NewKeyring()
- //nolint:gosec
- key, err := rsa.GenerateKey(rand.New(rand.NewSource(42)), 2048)
- if err != nil {
- panic(err)
- }
- err = a.Add(agent.AddedKey{PrivateKey: key})
- if err != nil {
- panic(err)
- }
-
- go func() {
- for {
- conn, err := l.Accept()
- if err != nil {
- panic(err)
- }
- if err := agent.ServeAgent(a, conn); err != nil && !errors.Is(err, io.EOF) {
- panic(err)
- }
- }
- }()
-
- return sock
-}
diff --git a/examples/nodejs/.dockerignore b/examples/nodejs/.dockerignore
deleted file mode 100644
index 37ffae4..0000000
--- a/examples/nodejs/.dockerignore
+++ /dev/null
@@ -1,2 +0,0 @@
-command-output
-tmp
diff --git a/examples/nodejs/.gitignore b/examples/nodejs/.gitignore
deleted file mode 100644
index dc902b5..0000000
--- a/examples/nodejs/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/bin/
-/node_modules/
\ No newline at end of file
diff --git a/examples/nodejs/Pulumi.yaml b/examples/nodejs/Pulumi.yaml
deleted file mode 100644
index 8317291..0000000
--- a/examples/nodejs/Pulumi.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-name: provider-docker-build
-runtime: nodejs
-config:
- dockerHubPassword:
- type: string
- secret: true
-plugins:
- providers:
- - name: docker-build
- path: ../../bin
diff --git a/examples/nodejs/app/Dockerfile b/examples/nodejs/app/Dockerfile
deleted file mode 100644
index e17a80c..0000000
--- a/examples/nodejs/app/Dockerfile
+++ /dev/null
@@ -1,2 +0,0 @@
-FROM alpine
-RUN echo 👍
diff --git a/examples/nodejs/app/Dockerfile.buildArgs b/examples/nodejs/app/Dockerfile.buildArgs
deleted file mode 100644
index 438ee01..0000000
--- a/examples/nodejs/app/Dockerfile.buildArgs
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM alpine
-
-ARG SET_ME_TO_TRUE
-RUN [ "$SET_ME_TO_TRUE" = "true" ]
-RUN echo "That's the correct build arg, thanks! 👍"
diff --git a/examples/nodejs/app/Dockerfile.emptyContext b/examples/nodejs/app/Dockerfile.emptyContext
deleted file mode 100644
index 769593b..0000000
--- a/examples/nodejs/app/Dockerfile.emptyContext
+++ /dev/null
@@ -1,2 +0,0 @@
-FROM alpine
-RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
diff --git a/examples/nodejs/app/Dockerfile.extraHosts b/examples/nodejs/app/Dockerfile.extraHosts
deleted file mode 100644
index 35b15f4..0000000
--- a/examples/nodejs/app/Dockerfile.extraHosts
+++ /dev/null
@@ -1,3 +0,0 @@
-FROM bash AS base
-
-RUN getent hosts metadata.google.internal
diff --git a/examples/nodejs/app/Dockerfile.multiPlatform b/examples/nodejs/app/Dockerfile.multiPlatform
deleted file mode 100644
index 49d3c83..0000000
--- a/examples/nodejs/app/Dockerfile.multiPlatform
+++ /dev/null
@@ -1,7 +0,0 @@
-FROM --platform=$BUILDPLATFORM alpine as build
-RUN echo ${BUILDPLATFORM} > buildplatform
-RUN echo ${TARGETPLATFORM} > targetplatform
-
-FROM build
-RUN cat buildplatform
-RUN cat targetplatform
diff --git a/examples/nodejs/app/Dockerfile.namedContexts b/examples/nodejs/app/Dockerfile.namedContexts
deleted file mode 100644
index 6e53dba..0000000
--- a/examples/nodejs/app/Dockerfile.namedContexts
+++ /dev/null
@@ -1,5 +0,0 @@
-# syntax=docker/dockerfile:1.4
-FROM golang:latest
-
-RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
-RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
diff --git a/examples/nodejs/app/Dockerfile.secrets b/examples/nodejs/app/Dockerfile.secrets
deleted file mode 100644
index 513bbd2..0000000
--- a/examples/nodejs/app/Dockerfile.secrets
+++ /dev/null
@@ -1,4 +0,0 @@
-FROM alpine
-
-RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
-
diff --git a/examples/nodejs/app/Dockerfile.sshMount b/examples/nodejs/app/Dockerfile.sshMount
deleted file mode 100644
index 055cb78..0000000
--- a/examples/nodejs/app/Dockerfile.sshMount
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM alpine
-
-RUN apk add openssh-client
-
-RUN --mount=type=ssh ssh-add -l
diff --git a/examples/nodejs/app/Dockerfile.target b/examples/nodejs/app/Dockerfile.target
deleted file mode 100644
index 7cddec7..0000000
--- a/examples/nodejs/app/Dockerfile.target
+++ /dev/null
@@ -1,8 +0,0 @@
-FROM alpine as build-me
-RUN echo 👍
-
-FROM build-me as also-build-me
-RUN echo 🤙
-
-FROM build-me as dont-build-me
-RUN [ "true" = "false" ]
diff --git a/examples/nodejs/index.ts b/examples/nodejs/index.ts
deleted file mode 100644
index c5cdfbe..0000000
--- a/examples/nodejs/index.ts
+++ /dev/null
@@ -1,169 +0,0 @@
-import * as pulumi from "@pulumi/pulumi";
-import * as docker_build from "@pulumi/docker-build";
-
-const config = new pulumi.Config();
-const dockerHubPassword = config.require("dockerHubPassword");
-const multiPlatform = new docker_build.Image("multiPlatform", {
- push: false,
- dockerfile: {
- location: "./app/Dockerfile.multiPlatform",
- },
- context: {
- location: "./app",
- },
- platforms: [
- docker_build.Platform.Plan9_amd64,
- docker_build.Platform.Plan9_386,
- ],
-});
-const registryPush = new docker_build.Image("registryPush", {
- push: false,
- context: {
- location: "./app",
- },
- tags: ["docker.io/pulumibot/buildkit-e2e:example"],
- exports: [{
- registry: {
- ociMediaTypes: true,
- push: false,
- },
- }],
- registries: [{
- address: "docker.io",
- username: "pulumibot",
- password: dockerHubPassword,
- }],
-});
-const cached = new docker_build.Image("cached", {
- push: false,
- context: {
- location: "./app",
- },
- cacheTo: [{
- local: {
- dest: "tmp/cache",
- mode: docker_build.CacheMode.Max,
- },
- }],
- cacheFrom: [{
- local: {
- src: "tmp/cache",
- },
- }],
-});
-const buildArgs = new docker_build.Image("buildArgs", {
- push: false,
- dockerfile: {
- location: "./app/Dockerfile.buildArgs",
- },
- context: {
- location: "./app",
- },
- buildArgs: {
- SET_ME_TO_TRUE: "true",
- },
-});
-const extraHosts = new docker_build.Image("extraHosts", {
- push: false,
- dockerfile: {
- location: "./app/Dockerfile.extraHosts",
- },
- context: {
- location: "./app",
- },
- addHosts: ["metadata.google.internal:169.254.169.254"],
-});
-const sshMount = new docker_build.Image("sshMount", {
- push: false,
- dockerfile: {
- location: "./app/Dockerfile.sshMount",
- },
- context: {
- location: "./app",
- },
- ssh: [{
- id: "default",
- }],
-});
-const secrets = new docker_build.Image("secrets", {
- push: false,
- dockerfile: {
- location: "./app/Dockerfile.secrets",
- },
- context: {
- location: "./app",
- },
- secrets: {
- password: "hunter2",
- },
-});
-const labels = new docker_build.Image("labels", {
- push: false,
- context: {
- location: "./app",
- },
- labels: {
- description: "This image will get a descriptive label 👍",
- },
-});
-const target = new docker_build.Image("target", {
- push: false,
- dockerfile: {
- location: "./app/Dockerfile.target",
- },
- context: {
- location: "./app",
- },
- target: "build-me",
-});
-const namedContexts = new docker_build.Image("namedContexts", {
- push: false,
- dockerfile: {
- location: "./app/Dockerfile.namedContexts",
- },
- context: {
- location: "./app",
- named: {
- "golang:latest": {
- location: "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984",
- },
- },
- },
-});
-const remoteContext = new docker_build.Image("remoteContext", {
- push: false,
- context: {
- location: "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
- },
-});
-const remoteContextWithInline = new docker_build.Image("remoteContextWithInline", {
- push: false,
- dockerfile: {
- inline: `FROM busybox
-COPY hello.c ./
-`,
- },
- context: {
- location: "https://github.com/docker-library/hello-world.git",
- },
-});
-const inline = new docker_build.Image("inline", {
- push: false,
- dockerfile: {
- inline: `FROM alpine
-RUN echo "This uses an inline Dockerfile! 👍"
-`,
- },
-});
-const dockerLoad = new docker_build.Image("dockerLoad", {
- push: false,
- context: {
- location: "./app",
- },
- exports: [{
- docker: {
- tar: true,
- },
- }],
-});
-export const platforms = multiPlatform.platforms;
diff --git a/examples/nodejs/package.json b/examples/nodejs/package.json
deleted file mode 100644
index 21cd5ea..0000000
--- a/examples/nodejs/package.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "name": "provider-docker-build",
- "devDependencies": {
- "@types/node": "^18"
- },
- "dependencies": {
- "typescript": "^4.0.0",
- "@pulumi/pulumi": "3.184.0"
- }
-}
diff --git a/examples/nodejs/tsconfig.json b/examples/nodejs/tsconfig.json
deleted file mode 100644
index 11fc69a..0000000
--- a/examples/nodejs/tsconfig.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "compilerOptions": {
- "strict": true,
- "outDir": "bin",
- "target": "es2016",
- "module": "commonjs",
- "moduleResolution": "node",
- "sourceMap": true,
- "experimentalDecorators": true,
- "pretty": true,
- "noFallthroughCasesInSwitch": true,
- "noImplicitReturns": true,
- "forceConsistentCasingInFileNames": true
- },
- "files": [
- "index.ts",
- ]
-}
\ No newline at end of file
diff --git a/examples/nodejs_test.go b/examples/nodejs_test.go
deleted file mode 100644
index 95d0e1e..0000000
--- a/examples/nodejs_test.go
+++ /dev/null
@@ -1,255 +0,0 @@
-//go:build nodejs || all
-// +build nodejs all
-
-package examples
-
-import (
- "encoding/base64"
- "fmt"
- "math/rand"
- "os"
- "path"
- "path/filepath"
- "strings"
- "testing"
-
- "github.com/aws/aws-sdk-go/aws"
- "github.com/aws/aws-sdk-go/aws/session"
- "github.com/aws/aws-sdk-go/service/ecr"
- "github.com/pulumi/providertest"
- "github.com/pulumi/providertest/optproviderupgrade"
- "github.com/pulumi/providertest/pulumitest"
- "github.com/pulumi/providertest/pulumitest/assertpreview"
- "github.com/pulumi/providertest/pulumitest/opttest"
- "github.com/pulumi/pulumi/pkg/v3/testing/integration"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-)
-
-func TestNodeExample(t *testing.T) {
- cwd, err := os.Getwd()
- require.NoError(t, err)
-
- test := integration.ProgramTestOptions{
- Dir: path.Join(cwd, "nodejs"),
- Dependencies: []string{"@pulumi/docker-build"},
- Secrets: map[string]string{
- "dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
- },
- }
-
- integration.ProgramTest(t, &test)
-}
-
-func TestNodeExampleUpgrade(t *testing.T) {
- t.Parallel()
- var (
- providerName string = "docker-build"
- baselineVersion string = "0.0.7"
- )
-
- cwd, err := os.Getwd()
- require.NoError(t, err)
-
- options := []opttest.Option{
- opttest.DownloadProviderVersion(providerName, baselineVersion),
- opttest.LocalProviderPath(providerName, filepath.Join(cwd, "..", "bin")),
- opttest.YarnLink("@pulumi/docker-build"),
- opttest.TestInPlace(),
- }
-
- test := pulumitest.NewPulumiTest(t, filepath.Join(cwd, "upgrade-node"), options...)
- result := providertest.PreviewProviderUpgrade(t, test, providerName, baselineVersion,
- optproviderupgrade.DisableAttach())
-
- assertpreview.HasNoReplacements(t, result)
-}
-
-// TestCaching simulates a slow build with --cache-to enabled. We aren't able
-// to directly detect cache hits, so we re-run the update and confirm it took
-// less time than the image originally took to build.
-//
-// This is a moderately slow test because we need to "build" (i.e., sleep)
-// longer than it would take for cache layer uploads under slow network
-// conditions.
-func TestCaching(t *testing.T) {
- t.Parallel()
-
- sleep := 20.0 // seconds
-
- // Provision ECR outside of our stack, because the cache needs to be shared
- // across updates.
- ecr, ecrOK := tmpEcr(t)
-
- cwd, err := os.Getwd()
- require.NoError(t, err)
-
- localCache := t.TempDir()
-
- tests := []struct {
- name string
- skip bool
-
- cacheTo string
- cacheFrom string
- address string
- username string
- password string
- }{
- {
- name: "local",
- cacheTo: fmt.Sprintf("type=local,mode=max,oci-mediatypes=true,dest=%s", localCache),
- cacheFrom: fmt.Sprintf("type=local,src=%s", localCache),
- },
- {
- name: "gha",
- skip: os.Getenv("ACTIONS_CACHE_URL") == "",
- cacheTo: "type=gha,mode=max,scope=cache-test",
- cacheFrom: "type=gha,scope=cache-test",
- },
- {
- name: "dockerhub",
- skip: os.Getenv("DOCKER_HUB_PASSWORD") == "",
- cacheTo: "type=registry,mode=max,ref=docker.io/pulumibot/myapp:cache",
- cacheFrom: "type=registry,ref=docker.io/pulumibot/myapp:cache",
- address: "docker.io",
- username: "pulumibot",
- password: os.Getenv("DOCKER_HUB_PASSWORD"),
- },
- {
- name: "ecr",
- skip: !ecrOK,
- cacheTo: fmt.Sprintf("type=registry,mode=max,image-manifest=true,oci-mediatypes=true,ref=%s:cache", ecr.address),
- cacheFrom: fmt.Sprintf("type=registry,ref=%s:cache", ecr.address),
- address: ecr.address,
- username: ecr.username,
- password: ecr.password,
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- if tt.skip {
- t.Skip("Missing environment variables")
- }
-
- sleepFuzzed := sleep + rand.Float64() // Add some fuzz to bust any prior build caches.
-
- test := integration.ProgramTestOptions{
- Dir: path.Join(cwd, "tests", "caching"),
- ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) {
- duration, ok := stack.Outputs["durationSeconds"]
- assert.True(t, ok)
- assert.Greater(t, duration.(float64), sleepFuzzed)
- },
- Dependencies: []string{"@pulumi/docker-build"},
- Config: map[string]string{
- "SLEEP_SECONDS": fmt.Sprint(sleepFuzzed),
- "cacheTo": tt.cacheTo,
- "cacheFrom": tt.cacheFrom,
- "name": tt.name,
- "address": tt.address,
- "username": tt.username,
- },
- Secrets: map[string]string{
- "password": tt.password,
- },
- NoParallel: true,
- Quick: true,
- SkipPreview: true,
- SkipRefresh: true,
- Verbose: true,
- }
-
- // First run should be un-cached.
- integration.ProgramTest(t, &test)
-
- // Now run again and confirm our build was faster due to a cache hit.
- test.ExtraRuntimeValidation = func(t *testing.T, stack integration.RuntimeValidationStackInfo) {
- duration, ok := stack.Outputs["durationSeconds"]
- assert.True(t, ok)
- assert.Less(t, duration.(float64), sleepFuzzed)
- }
- test.Config["name"] += "-cached"
- integration.ProgramTest(t, &test)
- })
- }
-}
-
-func TestConfig(t *testing.T) {
- cwd, err := os.Getwd()
- require.NoError(t, err)
-
- test := integration.ProgramTestOptions{
- Dir: path.Join(cwd, "tests", "config"),
- Dependencies: []string{"@pulumi/docker-build"},
- SkipEmptyPreviewUpdate: true,
- }
-
- integration.ProgramTest(t, &test)
-}
-
-type ECR struct {
- address string
- username string
- password string
-}
-
-// tmpEcr creates a new ECR repo and cleans it up after the test concludes.
-func tmpEcr(t *testing.T) (ECR, bool) {
- sess, err := session.NewSession(&aws.Config{
- Region: aws.String("us-west-2"),
- })
- if err != nil {
- return ECR{}, false
- }
-
- svc := ecr.New(sess)
- name := strings.ToLower(t.Name()) + fmt.Sprint(rand.Intn(1000))
-
- // Always attempt to delete pre-existing repos, in case our cleanup didn't
- // run.
- _, _ = svc.DeleteRepository(&ecr.DeleteRepositoryInput{
- Force: aws.Bool(true),
- RepositoryName: aws.String(name),
- })
-
- params := &ecr.CreateRepositoryInput{
- RepositoryName: aws.String(name),
- }
- resp, err := svc.CreateRepository(params)
- if err != nil {
- return ECR{}, false
- }
- repo := resp.Repository
- t.Cleanup(func() {
- svc.DeleteRepository(&ecr.DeleteRepositoryInput{
- Force: aws.Bool(true),
- RegistryId: repo.RegistryId,
- RepositoryName: repo.RepositoryName,
- })
- })
-
- // Now grab auth for the repo.
- auth, err := svc.GetAuthorizationToken(&ecr.GetAuthorizationTokenInput{})
- if err != nil {
- return ECR{}, false
- }
- b64token := auth.AuthorizationData[0].AuthorizationToken
- token, err := base64.StdEncoding.DecodeString(*b64token)
- if err != nil {
- return ECR{}, false
- }
- parts := strings.SplitN(string(token), ":", 2)
- if len(parts) != 2 {
- return ECR{}, false
- }
- username := parts[0]
- password := parts[1]
-
- return ECR{
- address: *repo.RepositoryUri,
- username: username,
- password: password,
- }, true
-}
diff --git a/examples/python/.dockerignore b/examples/python/.dockerignore
deleted file mode 100644
index 37ffae4..0000000
--- a/examples/python/.dockerignore
+++ /dev/null
@@ -1,2 +0,0 @@
-command-output
-tmp
diff --git a/examples/python/.gitignore b/examples/python/.gitignore
deleted file mode 100644
index b664ab4..0000000
--- a/examples/python/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.pyc
-venv/
\ No newline at end of file
diff --git a/examples/python/Pulumi.yaml b/examples/python/Pulumi.yaml
deleted file mode 100644
index 44da823..0000000
--- a/examples/python/Pulumi.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-name: provider-docker-build
-runtime: python
-config:
- dockerHubPassword:
- type: string
- secret: true
-plugins:
- providers:
- - name: docker-build
- path: ../../bin
diff --git a/examples/python/__main__.py b/examples/python/__main__.py
deleted file mode 100644
index 7cf848c..0000000
--- a/examples/python/__main__.py
+++ /dev/null
@@ -1,155 +0,0 @@
-import pulumi
-import pulumi_docker_build as docker_build
-
-config = pulumi.Config()
-docker_hub_password = config.require("dockerHubPassword")
-multi_platform = docker_build.Image("multiPlatform",
- push=False,
- dockerfile={
- "location": "./app/Dockerfile.multiPlatform",
- },
- context={
- "location": "./app",
- },
- platforms=[
- docker_build.Platform.PLAN9_AMD64,
- docker_build.Platform.PLAN9_386,
- ])
-registry_push = docker_build.Image("registryPush",
- push=False,
- context={
- "location": "./app",
- },
- tags=["docker.io/pulumibot/buildkit-e2e:example"],
- exports=[{
- "registry": {
- "oci_media_types": True,
- "push": False,
- },
- }],
- registries=[{
- "address": "docker.io",
- "username": "pulumibot",
- "password": docker_hub_password,
- }])
-cached = docker_build.Image("cached",
- push=False,
- context={
- "location": "./app",
- },
- cache_to=[{
- "local": {
- "dest": "tmp/cache",
- "mode": docker_build.CacheMode.MAX,
- },
- }],
- cache_from=[{
- "local": {
- "src": "tmp/cache",
- },
- }])
-build_args = docker_build.Image("buildArgs",
- push=False,
- dockerfile={
- "location": "./app/Dockerfile.buildArgs",
- },
- context={
- "location": "./app",
- },
- build_args={
- "SET_ME_TO_TRUE": "true",
- })
-extra_hosts = docker_build.Image("extraHosts",
- push=False,
- dockerfile={
- "location": "./app/Dockerfile.extraHosts",
- },
- context={
- "location": "./app",
- },
- add_hosts=["metadata.google.internal:169.254.169.254"])
-ssh_mount = docker_build.Image("sshMount",
- push=False,
- dockerfile={
- "location": "./app/Dockerfile.sshMount",
- },
- context={
- "location": "./app",
- },
- ssh=[{
- "id": "default",
- }])
-secrets = docker_build.Image("secrets",
- push=False,
- dockerfile={
- "location": "./app/Dockerfile.secrets",
- },
- context={
- "location": "./app",
- },
- secrets={
- "password": "hunter2",
- })
-labels = docker_build.Image("labels",
- push=False,
- context={
- "location": "./app",
- },
- labels={
- "description": "This image will get a descriptive label 👍",
- })
-target = docker_build.Image("target",
- push=False,
- dockerfile={
- "location": "./app/Dockerfile.target",
- },
- context={
- "location": "./app",
- },
- target="build-me")
-named_contexts = docker_build.Image("namedContexts",
- push=False,
- dockerfile={
- "location": "./app/Dockerfile.namedContexts",
- },
- context={
- "location": "./app",
- "named": {
- "golang:latest": {
- "location": "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984",
- },
- },
- })
-remote_context = docker_build.Image("remoteContext",
- push=False,
- context={
- "location": "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
- })
-remote_context_with_inline = docker_build.Image("remoteContextWithInline",
- push=False,
- dockerfile={
- "inline": """FROM busybox
-COPY hello.c ./
-""",
- },
- context={
- "location": "https://github.com/docker-library/hello-world.git",
- })
-inline = docker_build.Image("inline",
- push=False,
- dockerfile={
- "inline": """FROM alpine
-RUN echo "This uses an inline Dockerfile! 👍"
-""",
- })
-docker_load = docker_build.Image("dockerLoad",
- push=False,
- context={
- "location": "./app",
- },
- exports=[{
- "docker": {
- "tar": True,
- },
- }])
-pulumi.export("platforms", multi_platform.platforms)
diff --git a/examples/python/app/Dockerfile b/examples/python/app/Dockerfile
deleted file mode 100644
index e17a80c..0000000
--- a/examples/python/app/Dockerfile
+++ /dev/null
@@ -1,2 +0,0 @@
-FROM alpine
-RUN echo 👍
diff --git a/examples/python/app/Dockerfile.buildArgs b/examples/python/app/Dockerfile.buildArgs
deleted file mode 100644
index 438ee01..0000000
--- a/examples/python/app/Dockerfile.buildArgs
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM alpine
-
-ARG SET_ME_TO_TRUE
-RUN [ "$SET_ME_TO_TRUE" = "true" ]
-RUN echo "That's the correct build arg, thanks! 👍"
diff --git a/examples/python/app/Dockerfile.emptyContext b/examples/python/app/Dockerfile.emptyContext
deleted file mode 100644
index 769593b..0000000
--- a/examples/python/app/Dockerfile.emptyContext
+++ /dev/null
@@ -1,2 +0,0 @@
-FROM alpine
-RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
diff --git a/examples/python/app/Dockerfile.extraHosts b/examples/python/app/Dockerfile.extraHosts
deleted file mode 100644
index 35b15f4..0000000
--- a/examples/python/app/Dockerfile.extraHosts
+++ /dev/null
@@ -1,3 +0,0 @@
-FROM bash AS base
-
-RUN getent hosts metadata.google.internal
diff --git a/examples/python/app/Dockerfile.multiPlatform b/examples/python/app/Dockerfile.multiPlatform
deleted file mode 100644
index 49d3c83..0000000
--- a/examples/python/app/Dockerfile.multiPlatform
+++ /dev/null
@@ -1,7 +0,0 @@
-FROM --platform=$BUILDPLATFORM alpine as build
-RUN echo ${BUILDPLATFORM} > buildplatform
-RUN echo ${TARGETPLATFORM} > targetplatform
-
-FROM build
-RUN cat buildplatform
-RUN cat targetplatform
diff --git a/examples/python/app/Dockerfile.namedContexts b/examples/python/app/Dockerfile.namedContexts
deleted file mode 100644
index 6e53dba..0000000
--- a/examples/python/app/Dockerfile.namedContexts
+++ /dev/null
@@ -1,5 +0,0 @@
-# syntax=docker/dockerfile:1.4
-FROM golang:latest
-
-RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
-RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
diff --git a/examples/python/app/Dockerfile.secrets b/examples/python/app/Dockerfile.secrets
deleted file mode 100644
index 513bbd2..0000000
--- a/examples/python/app/Dockerfile.secrets
+++ /dev/null
@@ -1,4 +0,0 @@
-FROM alpine
-
-RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
-
diff --git a/examples/python/app/Dockerfile.sshMount b/examples/python/app/Dockerfile.sshMount
deleted file mode 100644
index 055cb78..0000000
--- a/examples/python/app/Dockerfile.sshMount
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM alpine
-
-RUN apk add openssh-client
-
-RUN --mount=type=ssh ssh-add -l
diff --git a/examples/python/app/Dockerfile.target b/examples/python/app/Dockerfile.target
deleted file mode 100644
index 7cddec7..0000000
--- a/examples/python/app/Dockerfile.target
+++ /dev/null
@@ -1,8 +0,0 @@
-FROM alpine as build-me
-RUN echo 👍
-
-FROM build-me as also-build-me
-RUN echo 🤙
-
-FROM build-me as dont-build-me
-RUN [ "true" = "false" ]
diff --git a/examples/python/requirements.txt b/examples/python/requirements.txt
deleted file mode 100644
index bc4e430..0000000
--- a/examples/python/requirements.txt
+++ /dev/null
@@ -1 +0,0 @@
-pulumi>=3.0.0,<4.0.0
diff --git a/examples/python_test.go b/examples/python_test.go
deleted file mode 100644
index 0ff6310..0000000
--- a/examples/python_test.go
+++ /dev/null
@@ -1,31 +0,0 @@
-//go:build python || all
-// +build python all
-
-package examples
-
-import (
- "os"
- "path"
- "testing"
-
- "github.com/pulumi/pulumi/pkg/v3/testing/integration"
- "github.com/stretchr/testify/require"
-)
-
-func TestPythonExample(t *testing.T) {
- cwd, err := os.Getwd()
- require.NoError(t, err)
-
- test := integration.ProgramTestOptions{
- Dir: path.Join(cwd, "python"),
- RelativeWorkDir: ".",
- Dependencies: []string{
- path.Join("..", "sdk", "python", "bin"),
- },
- Secrets: map[string]string{
- "dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
- },
- }
-
- integration.ProgramTest(t, &test)
-}
diff --git a/examples/testdata/recorded/TestProviderUpgrade/upgrade-node/0.0.7/grpc.json b/examples/testdata/recorded/TestProviderUpgrade/upgrade-node/0.0.7/grpc.json
deleted file mode 100644
index 98ef671..0000000
--- a/examples/testdata/recorded/TestProviderUpgrade/upgrade-node/0.0.7/grpc.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{"method":"/pulumirpc.LanguageRuntime/GetPluginInfo","request":{},"response":{"version":"3.145.0-dev.0"}}
-{"method":"/pulumirpc.LanguageRuntime/GetRequiredPackages","request":{"info":{"entryPoint":".","options":{},"programDirectory":"/private/var/folders/xl/bqjwsf01315fs4yp20dj3x640000gn/T/TestNodeExampleUpgrade4279645683/006/upgrade-node","rootDirectory":"/private/var/folders/xl/bqjwsf01315fs4yp20dj3x640000gn/T/TestNodeExampleUpgrade4279645683/006/upgrade-node"}},"response":{"packages":[{"kind":"resource","name":"docker-build","version":"v0.1.0-alpha.0+dev"}]}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"transforms"},"response":{"hasSupport":true}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"deletedWith"},"response":{"hasSupport":true}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"invokeTransforms"},"response":{"hasSupport":true}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"resourceReferences"},"response":{"hasSupport":true}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"aliasSpecs"},"response":{"hasSupport":true}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"secrets"},"response":{"hasSupport":true}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"parameterization"},"response":{"hasSupport":true}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"outputValues"},"response":{"hasSupport":true}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"acceptResources":true,"acceptSecrets":true,"aliasSpecs":true,"customTimeouts":{},"name":"provider-docker-build-test","object":{},"sourcePosition":{"column":23,"line":38,"uri":"file:///private/var/folders/xl/bqjwsf01315fs4yp20dj3x640000gn/T/TestNodeExampleUpgrade4279645683/006/upgrade-node/node_modules/@pulumi/runtime/stack.ts"},"supportsPartialValues":true,"supportsResultReporting":true,"type":"pulumi:pulumi:Stack"},"response":{"object":{},"urn":"urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResourceOutputs","request":{"outputs":{},"urn":"urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test"},"response":{}}
-{"method":"/pulumirpc.ResourceProvider/Handshake","request":{"engineAddress":"127.0.0.1:56051","programDirectory":"/Users/rquitales/.pulumi/plugins/resource-docker-build-v0.0.7","rootDirectory":"/Users/rquitales/.pulumi/plugins/resource-docker-build-v0.0.7"}}
-{"method":"/pulumirpc.ResourceProvider/GetPluginInfo","request":{},"response":{"version":"v0.0.7"}}
-{"method":"/pulumirpc.ResourceProvider/CheckConfig","request":{"name":"default_0_1_0_alpha_0_dev","news":{"version":"0.1.0-alpha.0+dev"},"olds":{},"type":"pulumi:providers:docker-build","urn":"urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default_0_1_0_alpha_0_dev"},"response":{"inputs":{"host":""}}}
-{"method":"/pulumirpc.ResourceProvider/Configure","request":{"acceptResources":true,"acceptSecrets":true,"args":{"host":""},"sendsOldInputs":true,"sendsOldInputsToDelete":true,"variables":{"docker-build:config:host":""}},"response":{"acceptOutputs":true,"acceptResources":true,"acceptSecrets":true,"supportsPreview":true}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"name":"inline","news":{"buildOnPreview":true,"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n"},"network":"default","push":false},"olds":{},"randomSeed":"gfcHtIMoX4qpk2cxRceOJcYDaSsHyPNBhhd8lYTFcqw=","type":"docker-build:index:Image","urn":"urn:pulumi:test::provider-docker-build::docker-build:index:Image::inline"},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"."},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"name":"inline","properties":{"buildOnPreview":true,"context":{"location":"."},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"type":"docker-build:index:Image","urn":"urn:pulumi:test::provider-docker-build::docker-build:index:Image::inline"},"response":{"id":"inline","properties":{"buildOnPreview":true,"context":{"location":"."},"contextHash":"a9db789a55c8ad91fe04e176aefcf0b74f86636ae12e7cd475421416672da8c1","digest":"","dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"acceptResources":true,"acceptSecrets":true,"aliasSpecs":true,"custom":true,"customTimeouts":{},"name":"inline","object":{"buildOnPreview":true,"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n"},"network":"default","push":false},"parent":"urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test","propertyDependencies":{"buildOnPreview":{},"dockerfile":{},"network":{},"push":{}},"sourcePosition":{"column":16,"line":4,"uri":"file:///private/var/folders/xl/bqjwsf01315fs4yp20dj3x640000gn/T/TestNodeExampleUpgrade4279645683/006/upgrade-node/index.ts"},"supportsPartialValues":true,"supportsResultReporting":true,"type":"docker-build:index:Image","version":"0.1.0-alpha.0+dev"},"response":{"id":"inline","object":{"buildOnPreview":true,"context":{"location":"."},"contextHash":"a9db789a55c8ad91fe04e176aefcf0b74f86636ae12e7cd475421416672da8c1","digest":"","dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"urn":"urn:pulumi:test::provider-docker-build::docker-build:index:Image::inline"}}
-{"method":"/pulumirpc.LanguageRuntime/Run","request":{"configPropertyMap":{},"info":{"entryPoint":".","options":{},"programDirectory":"/private/var/folders/xl/bqjwsf01315fs4yp20dj3x640000gn/T/TestNodeExampleUpgrade4279645683/006/upgrade-node","rootDirectory":"/private/var/folders/xl/bqjwsf01315fs4yp20dj3x640000gn/T/TestNodeExampleUpgrade4279645683/006/upgrade-node"},"loaderTarget":"127.0.0.1:56055","monitorAddress":"127.0.0.1:56054","organization":"organization","parallel":40,"program":".","project":"provider-docker-build","pwd":"/private/var/folders/xl/bqjwsf01315fs4yp20dj3x640000gn/T/TestNodeExampleUpgrade4279645683/006/upgrade-node","stack":"test"},"response":{}}
\ No newline at end of file
diff --git a/examples/testdata/recorded/TestProviderUpgrade/upgrade-node/0.0.7/stack.json b/examples/testdata/recorded/TestProviderUpgrade/upgrade-node/0.0.7/stack.json
deleted file mode 100644
index 925b174..0000000
--- a/examples/testdata/recorded/TestProviderUpgrade/upgrade-node/0.0.7/stack.json
+++ /dev/null
@@ -1,96 +0,0 @@
-{
- "version": 3,
- "deployment": {
- "manifest": {
- "time": "2025-01-14T12:40:32.429451-08:00",
- "magic": "7c53c69df7094e39d5562ed2abf1e12099c2c54a7b9b411faca1dcb7ec1fef8a",
- "version": "v3.145.0"
- },
- "secrets_providers": {
- "type": "passphrase",
- "state": {
- "salt": "v1:EuqbHY9lEXg=:v1:xNv8Pt7D2Pf/iDkg:tOvHbUIXPITf+BgbbjqPZaWIqKD8jQ=="
- }
- },
- "resources": [
- {
- "urn": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
- "custom": false,
- "type": "pulumi:pulumi:Stack",
- "created": "2025-01-14T20:40:27.082534Z",
- "modified": "2025-01-14T20:40:27.082534Z",
- "sourcePosition": "project:///node_modules/@pulumi/runtime/stack.ts#38,23"
- },
- {
- "urn": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default_0_1_0_alpha_0_dev",
- "custom": true,
- "id": "04f4e431-4d74-43f1-86d5-52d410f3f6e8",
- "type": "pulumi:providers:docker-build",
- "inputs": {
- "__internal": {},
- "host": ""
- },
- "outputs": {
- "host": ""
- },
- "created": "2025-01-14T20:40:28.862159Z",
- "modified": "2025-01-14T20:40:28.862159Z"
- },
- {
- "urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::inline",
- "custom": true,
- "id": "inline",
- "type": "docker-build:index:Image",
- "inputs": {
- "buildOnPreview": true,
- "context": {
- "location": "."
- },
- "dockerfile": {
- "inline": "FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n",
- "location": ""
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "target": ""
- },
- "outputs": {
- "buildOnPreview": true,
- "context": {
- "location": "."
- },
- "contextHash": "a9db789a55c8ad91fe04e176aefcf0b74f86636ae12e7cd475421416672da8c1",
- "digest": "",
- "dockerfile": {
- "inline": "FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n",
- "location": ""
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "ref": "",
- "target": ""
- },
- "parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
- "provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default_0_1_0_alpha_0_dev::04f4e431-4d74-43f1-86d5-52d410f3f6e8",
- "propertyDependencies": {
- "buildOnPreview": [],
- "dockerfile": [],
- "network": [],
- "push": []
- },
- "created": "2025-01-14T20:40:32.357012Z",
- "modified": "2025-01-14T20:40:32.357012Z",
- "sourcePosition": "project:///index.ts#4,16"
- }
- ],
- "metadata": {}
- }
-}
\ No newline at end of file
diff --git a/examples/testdata/recorded/TestProviderUpgrade/upgrade/0.0.1/grpc.json b/examples/testdata/recorded/TestProviderUpgrade/upgrade/0.0.1/grpc.json
deleted file mode 100644
index 9d8a6b3..0000000
--- a/examples/testdata/recorded/TestProviderUpgrade/upgrade/0.0.1/grpc.json
+++ /dev/null
@@ -1,238 +0,0 @@
-{"method":"/pulumirpc.LanguageRuntime/GetPluginInfo","request":{},"response":{},"metadata":{"kind":"language","mode":"client","runtime":"yaml"}}
-{"method":"/pulumirpc.LanguageRuntime/GetRequiredPlugins","request":{"project":"deprecated","pwd":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","program":".","info":{"rootDirectory":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","programDirectory":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","entryPoint":".","options":{}}},"response":{"plugins":[{"name":"docker-build","kind":"resource"}]},"metadata":{"kind":"language","mode":"client","runtime":"yaml"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"resourceReferences"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"outputValues"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"deletedWith"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"aliasSpecs"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"transforms"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"pulumi:pulumi:Stack","name":"provider-docker-build-p-it-bryces-wor-upgrade-7b788721","object":{},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fgo%2Fpkg%2Fmod%2Fgithub.com%2Fpulumi%2Fpulumi%2Fsdk%2Fv3@v3.109.0%2Fgo%2Fpulumi%2Frun.go","line":113}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","object":{}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/GetPluginInfo","request":{},"response":{"version":"0.1.0-alpha.0+dev"},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/CheckConfig","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default","olds":{},"news":{}},"response":{"inputs":{"host":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Configure","request":{"variables":{"docker-build:config:host":""},"args":{"host":""},"acceptSecrets":true,"acceptResources":true,"sendsOldInputs":true,"sendsOldInputsToDelete":true},"response":{"acceptSecrets":true,"supportsPreview":true,"acceptResources":true,"acceptOutputs":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::multiPlatform","olds":{},"news":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.multiPlatform"},"platforms":["plan9/amd64","plan9/386"],"push":false},"randomSeed":"dU9nGeHtuY5WJ07dmNJzuNfMNpu5YSkT+/iPf7hkJzc="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::inline","olds":{},"news":{"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n"},"push":false},"randomSeed":"XqJMo5Kt3kgFUbYiaE63S5h/JCUlRMuJatK4VKfDrZ0="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::cached","olds":{},"news":{"cacheFrom":[{"local":{"src":"tmp/cache"}}],"cacheTo":[{"local":{"dest":"tmp/cache","mode":"max"}}],"context":{"location":"./app"},"push":false},"randomSeed":"COiEoFhH0tso6trAyR79dggykuPUuPdTDAb6rWLJEQM="},"response":{"inputs":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::buildArgs","olds":{},"news":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.buildArgs"},"push":false},"randomSeed":"Gqcahy0DgifH8J5t9K+BsxwiB9uRMFuQ9oxvjypJIrA="},"response":{"inputs":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::labels","olds":{},"news":{"context":{"location":"./app"},"labels":{"description":"This image will get a descriptive label 👍"},"push":false},"randomSeed":"ytb+Wil0bAmvXPONadCFP+parr+foknm4DcS15rd5TQ="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::dockerLoad","olds":{},"news":{"context":{"location":"./app"},"exports":[{"docker":{"tar":true}}],"push":false},"randomSeed":"PFor5hNxbNZQWonQLqkMofHhhnLaeCB6cOsQRA+ERzs="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::extraHosts","olds":{},"news":{"addHosts":["metadata.google.internal:169.254.169.254"],"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.extraHosts"},"push":false},"randomSeed":"tpi4T6Kip+uy6rCR8k8/KdxSWALhFFxqK9wksnJCfmc="},"response":{"inputs":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::registryPush","olds":{},"news":{"context":{"location":"./app"},"exports":[{"registry":{"ociMediaTypes":true,"push":false}}],"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"]},"randomSeed":"EBui8rdz/fz1NIUztJAk3k7Gc7+P2IfXASoakd6FA5M="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::namedContexts","olds":{},"news":{"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"location":"./app/Dockerfile.namedContexts"},"push":false},"randomSeed":"RgX3qPiWKOVCgLcmZp4QUOyvFoaaVoUTWViRXjhfQUI="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContext","olds":{},"news":{"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"push":false},"randomSeed":"+4AO29jRRRBb0gRp6MN5nVp6YFhhPNwi4oIUcwZjG2I="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::secrets","olds":{},"news":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.secrets"},"push":false,"secrets":{"password":"hunter2"}},"randomSeed":"o2Y/gjI4Jjn48JgGbW4AaWzJu3zB0C/rDgZsCM5kGw0="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"secrets":{"password":"hunter2"},"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContextWithInline","olds":{},"news":{"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n"},"push":false},"randomSeed":"3aunMbWswKRz30w9y7n2H24Cb3i4dFlOAYwcfR9w/54="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::sshMount","olds":{},"news":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.sshMount"},"push":false,"ssh":[{"id":"default"}]},"randomSeed":"zxXPBnfcEhgGkfYNKxuYMPGYTwEqZ2SaLarIx/NrHCM="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ssh":[{"id":"default"}],"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::target","olds":{},"news":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.target"},"push":false,"target":"build-me"},"randomSeed":"xZ7r1luOcYPTziWVg+rNAXWWVXmvNOAI4PwDkoogo4c="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":"build-me"}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::extraHosts","properties":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"preview":true},"response":{"id":"extraHosts","properties":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","digest":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"extraHosts","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"addHosts":["metadata.google.internal:169.254.169.254"],"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.extraHosts"},"push":false},"propertyDependencies":{"addHosts":{},"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::extraHosts","id":"extraHosts","object":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContext","properties":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"preview":true},"response":{"id":"remoteContext","properties":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"contextHash":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","digest":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"remoteContext","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"push":false},"propertyDependencies":{"context":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContext","id":"remoteContext","object":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::namedContexts","properties":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"preview":true},"response":{"id":"namedContexts","properties":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"contextHash":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","digest":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"namedContexts","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"location":"./app/Dockerfile.namedContexts"},"push":false},"propertyDependencies":{"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::namedContexts","id":"namedContexts","object":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::labels","properties":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"preview":true},"response":{"id":"labels","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","digest":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"labels","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"labels":{"description":"This image will get a descriptive label 👍"},"push":false},"propertyDependencies":{"context":{},"labels":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::labels","id":"labels","object":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::target","properties":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":"build-me"},"preview":true},"response":{"id":"target","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","digest":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","target":"build-me"}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"target","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.target"},"push":false,"target":"build-me"},"propertyDependencies":{"context":{},"dockerfile":{},"push":{},"target":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::target","id":"target","object":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":"build-me"}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::inline","properties":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"preview":true},"response":{"id":"inline","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","digest":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"inline","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n"},"push":false},"propertyDependencies":{"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::inline","id":"inline","object":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::secrets","properties":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"secrets":{"password":"hunter2"},"target":""},"preview":true},"response":{"id":"secrets","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","digest":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","secrets":{"password":"hunter2"},"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"secrets","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.secrets"},"push":false,"secrets":{"password":"hunter2"}},"propertyDependencies":{"context":{},"dockerfile":{},"push":{},"secrets":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::secrets","id":"secrets","object":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"secrets":{"password":"hunter2"},"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::sshMount","properties":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ssh":[{"id":"default"}],"target":""},"preview":true},"response":{"id":"sshMount","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","digest":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","ssh":[{"id":"default"}],"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"sshMount","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.sshMount"},"push":false,"ssh":[{"id":"default"}]},"propertyDependencies":{"context":{},"dockerfile":{},"push":{},"ssh":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::sshMount","id":"sshMount","object":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ssh":[{"id":"default"}],"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::buildArgs","properties":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"preview":true},"response":{"id":"buildArgs","properties":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","digest":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"buildArgs","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.buildArgs"},"push":false},"propertyDependencies":{"buildArgs":{},"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::buildArgs","id":"buildArgs","object":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::cached","properties":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"preview":true},"response":{"id":"cached","properties":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"contextHash":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","digest":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"cached","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"cacheFrom":[{"local":{"src":"tmp/cache"}}],"cacheTo":[{"local":{"dest":"tmp/cache","mode":"max"}}],"context":{"location":"./app"},"push":false},"propertyDependencies":{"cacheFrom":{},"cacheTo":{},"context":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::cached","id":"cached","object":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContextWithInline","properties":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"preview":true},"response":{"id":"remoteContextWithInline","properties":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"contextHash":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","digest":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"remoteContextWithInline","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n"},"push":false},"propertyDependencies":{"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContextWithInline","id":"remoteContextWithInline","object":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::registryPush","properties":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""},"preview":true},"response":{"id":"sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","digest":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"registryPush","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"exports":[{"registry":{"ociMediaTypes":true,"push":false}}],"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"]},"propertyDependencies":{"context":{},"exports":{},"push":{},"tags":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::registryPush","id":"sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","object":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::dockerLoad","properties":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"preview":true},"response":{"id":"sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","digest":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"dockerLoad","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"exports":[{"docker":{"tar":true}}],"push":false},"propertyDependencies":{"context":{},"exports":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::dockerLoad","id":"sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4","object":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::multiPlatform","properties":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"target":""},"preview":true},"response":{"id":"multiPlatform","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","digest":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"ref":"04da6b54-80e4-46f7-96ec-b56ff0331ba9","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"multiPlatform","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.multiPlatform"},"platforms":["plan9/amd64","plan9/386"],"push":false},"propertyDependencies":{"context":{},"dockerfile":{},"platforms":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::multiPlatform","id":"multiPlatform","object":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResourceOutputs","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","outputs":{"platforms":["plan9/amd64","plan9/386"]}},"response":{},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.LanguageRuntime/Run","request":{"project":"provider-docker-build","stack":"p-it-bryces-wor-upgrade-7b788721","pwd":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","program":".","dryRun":true,"parallel":40,"monitorAddress":"127.0.0.1:60047","organization":"organization","configPropertyMap":{},"info":{"rootDirectory":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","programDirectory":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","entryPoint":".","options":{}}},"response":{},"metadata":{"kind":"language","mode":"client","runtime":"yaml"}}
-{"method":"/pulumirpc.LanguageRuntime/GetPluginInfo","request":{},"response":{},"metadata":{"kind":"language","mode":"client","runtime":"yaml"}}
-{"method":"/pulumirpc.LanguageRuntime/GetRequiredPlugins","request":{"project":"deprecated","pwd":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","program":".","info":{"rootDirectory":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","programDirectory":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","entryPoint":".","options":{}}},"response":{"plugins":[{"name":"docker-build","kind":"resource"}]},"metadata":{"kind":"language","mode":"client","runtime":"yaml"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"resourceReferences"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"outputValues"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"deletedWith"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"aliasSpecs"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"transforms"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"pulumi:pulumi:Stack","name":"provider-docker-build-p-it-bryces-wor-upgrade-7b788721","object":{},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fgo%2Fpkg%2Fmod%2Fgithub.com%2Fpulumi%2Fpulumi%2Fsdk%2Fv3@v3.109.0%2Fgo%2Fpulumi%2Frun.go","line":113}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","object":{}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/GetPluginInfo","request":{},"response":{"version":"0.1.0-alpha.0+dev"},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/CheckConfig","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default","olds":{},"news":{}},"response":{"inputs":{"host":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Configure","request":{"variables":{"docker-build:config:host":""},"args":{"host":""},"acceptSecrets":true,"acceptResources":true,"sendsOldInputs":true,"sendsOldInputsToDelete":true},"response":{"acceptSecrets":true,"supportsPreview":true,"acceptResources":true,"acceptOutputs":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::buildArgs","olds":{},"news":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.buildArgs"},"push":false},"randomSeed":"FZMNXsuPFd7JqA7qMlAHnlCtWr2gKRa/ITgO7YohD44="},"response":{"inputs":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::dockerLoad","olds":{},"news":{"context":{"location":"./app"},"exports":[{"docker":{"tar":true}}],"push":false},"randomSeed":"DUB/i+Z/ucGQ+TVUulrwieB9dd8t+TOcUyfgnQQmjCc="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::cached","olds":{},"news":{"cacheFrom":[{"local":{"src":"tmp/cache"}}],"cacheTo":[{"local":{"dest":"tmp/cache","mode":"max"}}],"context":{"location":"./app"},"push":false},"randomSeed":"yxyIE0C4phiPUhheFV41Xg1bX+8wcbIgy3qyFjIVW6g="},"response":{"inputs":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::extraHosts","olds":{},"news":{"addHosts":["metadata.google.internal:169.254.169.254"],"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.extraHosts"},"push":false},"randomSeed":"eCBsJYwXwQDSSi4y7QcY/kdPKJPnu4JoKM38UlRyxHU="},"response":{"inputs":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::inline","olds":{},"news":{"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n"},"push":false},"randomSeed":"lNZQwWiX/qkTcLuNbUILnoM2tjPSdIVM/PrqJIvnv18="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::labels","olds":{},"news":{"context":{"location":"./app"},"labels":{"description":"This image will get a descriptive label 👍"},"push":false},"randomSeed":"zIa33eziRhsfR2RO7eY2ktEEvUgnnD8XfRzV2G+UM5Y="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::multiPlatform","olds":{},"news":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.multiPlatform"},"platforms":["plan9/amd64","plan9/386"],"push":false},"randomSeed":"STIHwB3iA+/8qMHjWIZkI5wjyplfH8wQzHdFF5W3i+E="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::namedContexts","olds":{},"news":{"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"location":"./app/Dockerfile.namedContexts"},"push":false},"randomSeed":"cDBwoi3YKtq7Zt4kIUwM+ZbCCHWdVMfnZdFNt7qnd7w="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::registryPush","olds":{},"news":{"context":{"location":"./app"},"exports":[{"registry":{"ociMediaTypes":true,"push":false}}],"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"]},"randomSeed":"Wi7wbKDyh7iNjdEvKOj1CZHpGlDhKMzknP7A+bhlriM="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContext","olds":{},"news":{"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"push":false},"randomSeed":"W+iS+Se45ETk6+abc4er+KlaA4TAH9irkx9Hkw/cm6U="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContextWithInline","olds":{},"news":{"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n"},"push":false},"randomSeed":"AiHGTww74Oht+dh8O8CojODnFHYGgPTbUPZLsbAM9jU="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::secrets","olds":{},"news":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.secrets"},"push":false,"secrets":{"password":"hunter2"}},"randomSeed":"1TlDiLt9Hldo6+7mqn8es7MX1hSx48Che3nECuQ/2ms="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"secrets":{"password":"hunter2"},"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::sshMount","olds":{},"news":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.sshMount"},"push":false,"ssh":[{"id":"default"}]},"randomSeed":"T55G55cr/92u/6J7gzFOx0M7YFQdga0z0m6t1fnJLFQ="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ssh":[{"id":"default"}],"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::target","olds":{},"news":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.target"},"push":false,"target":"build-me"},"randomSeed":"AJuyQw5wBse3pjxJmvz7Dh6y2vlMeUD1DCH4ZrM3tMw="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":"build-me"}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::secrets","properties":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"secrets":{"password":"hunter2"},"target":""}},"response":{"id":"secrets","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"5c1561571a60aa3b5a234a9c26f69e2ba5d9a18624f426109d36a1d729b23a21","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","secrets":{"password":"hunter2"},"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::buildArgs","properties":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"id":"buildArgs","properties":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"55695ddcfb4d08a0d78d1a74c7b0141dada73ed05bc4b056ba29a51e42c83381","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::sshMount","properties":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ssh":[{"id":"default"}],"target":""}},"response":{"id":"sshMount","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"71d21b382ab9ee0324ad820ce57a0a4318342a0a244931f51fc46b791f1b37e9","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","ssh":[{"id":"default"}],"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContext","properties":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"id":"remoteContext","properties":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"contextHash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","digest":"","dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::registryPush","properties":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""}},"response":{"id":"sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"docker.io/pulumibot/buildkit-e2e:example@sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::dockerLoad","properties":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"id":"sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::labels","properties":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"id":"labels","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::inline","properties":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"id":"inline","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"36c67969e6700e87bde75fcf604a7db1fa9593194718fc0ae1c498df43228aec","digest":"","dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::target","properties":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":"build-me"}},"response":{"id":"target","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"fefadf795b6b4b119e97a87067a25f52a16cc3375223acad7b3f642fdcd413fc","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":"build-me"}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"secrets","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.secrets"},"push":false,"secrets":{"password":"hunter2"}},"propertyDependencies":{"context":{},"dockerfile":{},"push":{},"secrets":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::secrets","id":"secrets","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"5c1561571a60aa3b5a234a9c26f69e2ba5d9a18624f426109d36a1d729b23a21","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","secrets":{"password":"hunter2"},"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"buildArgs","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.buildArgs"},"push":false},"propertyDependencies":{"buildArgs":{},"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::buildArgs","id":"buildArgs","object":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"55695ddcfb4d08a0d78d1a74c7b0141dada73ed05bc4b056ba29a51e42c83381","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"sshMount","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.sshMount"},"push":false,"ssh":[{"id":"default"}]},"propertyDependencies":{"context":{},"dockerfile":{},"push":{},"ssh":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::sshMount","id":"sshMount","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"71d21b382ab9ee0324ad820ce57a0a4318342a0a244931f51fc46b791f1b37e9","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","ssh":[{"id":"default"}],"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"remoteContext","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"push":false},"propertyDependencies":{"context":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContext","id":"remoteContext","object":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"contextHash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","digest":"","dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"registryPush","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"exports":[{"registry":{"ociMediaTypes":true,"push":false}}],"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"]},"propertyDependencies":{"context":{},"exports":{},"push":{},"tags":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::registryPush","id":"sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"docker.io/pulumibot/buildkit-e2e:example@sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::cached","properties":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"id":"cached","properties":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"dockerLoad","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"exports":[{"docker":{"tar":true}}],"push":false},"propertyDependencies":{"context":{},"exports":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::dockerLoad","id":"sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"labels","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"labels":{"description":"This image will get a descriptive label 👍"},"push":false},"propertyDependencies":{"context":{},"labels":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::labels","id":"labels","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"inline","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n"},"push":false},"propertyDependencies":{"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::inline","id":"inline","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"36c67969e6700e87bde75fcf604a7db1fa9593194718fc0ae1c498df43228aec","digest":"","dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"target","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.target"},"push":false,"target":"build-me"},"propertyDependencies":{"context":{},"dockerfile":{},"push":{},"target":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::target","id":"target","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"fefadf795b6b4b119e97a87067a25f52a16cc3375223acad7b3f642fdcd413fc","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":"build-me"}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"cached","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"cacheFrom":[{"local":{"src":"tmp/cache"}}],"cacheTo":[{"local":{"dest":"tmp/cache","mode":"max"}}],"context":{"location":"./app"},"push":false},"propertyDependencies":{"cacheFrom":{},"cacheTo":{},"context":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::cached","id":"cached","object":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::multiPlatform","properties":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"target":""}},"response":{"id":"multiPlatform","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"c7ecf546ed2402de04f2dfa56ca4adb6fd490eed4219d7f1b2e559cd475f1755","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"ref":"","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"multiPlatform","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.multiPlatform"},"platforms":["plan9/amd64","plan9/386"],"push":false},"propertyDependencies":{"context":{},"dockerfile":{},"platforms":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::multiPlatform","id":"multiPlatform","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"c7ecf546ed2402de04f2dfa56ca4adb6fd490eed4219d7f1b2e559cd475f1755","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResourceOutputs","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","outputs":{"platforms":["plan9/amd64","plan9/386"]}},"response":{},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::extraHosts","properties":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"id":"extraHosts","properties":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e5d510d9ce39d91260e3aa7f8c81d7517a76165eb35e7134cae2f3e4e9fcb712","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"extraHosts","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"addHosts":["metadata.google.internal:169.254.169.254"],"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.extraHosts"},"push":false},"propertyDependencies":{"addHosts":{},"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::extraHosts","id":"extraHosts","object":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e5d510d9ce39d91260e3aa7f8c81d7517a76165eb35e7134cae2f3e4e9fcb712","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContextWithInline","properties":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"id":"remoteContextWithInline","properties":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"contextHash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","digest":"","dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"remoteContextWithInline","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n"},"push":false},"propertyDependencies":{"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContextWithInline","id":"remoteContextWithInline","object":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"contextHash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","digest":"","dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Create","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::namedContexts","properties":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"id":"namedContexts","properties":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"contextHash":"3adfaaf17fbb548f06310e76d2826bccb223b49463504d0cc4fe86b0eef5d47d","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"namedContexts","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"location":"./app/Dockerfile.namedContexts"},"push":false},"propertyDependencies":{"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::namedContexts","id":"namedContexts","object":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"contextHash":"3adfaaf17fbb548f06310e76d2826bccb223b49463504d0cc4fe86b0eef5d47d","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.LanguageRuntime/Run","request":{"project":"provider-docker-build","stack":"p-it-bryces-wor-upgrade-7b788721","pwd":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","program":".","parallel":40,"monitorAddress":"127.0.0.1:60086","organization":"organization","configPropertyMap":{},"info":{"rootDirectory":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","programDirectory":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","entryPoint":".","options":{}}},"response":{},"metadata":{"kind":"language","mode":"client","runtime":"yaml"}}
-{"method":"/pulumirpc.LanguageRuntime/GetPluginInfo","request":{},"response":{},"metadata":{"kind":"language","mode":"client","runtime":"yaml"}}
-{"method":"/pulumirpc.LanguageRuntime/GetRequiredPlugins","request":{"project":"deprecated","pwd":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","program":".","info":{"rootDirectory":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","programDirectory":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","entryPoint":".","options":{}}},"response":{"plugins":[{"name":"docker-build","kind":"resource"}]},"metadata":{"kind":"language","mode":"client","runtime":"yaml"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"resourceReferences"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"outputValues"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"deletedWith"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"aliasSpecs"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"transforms"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"pulumi:pulumi:Stack","name":"provider-docker-build-p-it-bryces-wor-upgrade-7b788721","object":{},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fgo%2Fpkg%2Fmod%2Fgithub.com%2Fpulumi%2Fpulumi%2Fsdk%2Fv3@v3.109.0%2Fgo%2Fpulumi%2Frun.go","line":113}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","object":{}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/GetPluginInfo","request":{},"response":{"version":"0.1.0-alpha.0+dev"},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/CheckConfig","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default","olds":{"host":""},"news":{}},"response":{"inputs":{"host":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/DiffConfig","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default","olds":{"host":""},"news":{"host":""},"oldInputs":{"host":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Configure","request":{"variables":{"docker-build:config:host":""},"args":{"host":""},"acceptSecrets":true,"acceptResources":true,"sendsOldInputs":true,"sendsOldInputsToDelete":true},"response":{"acceptSecrets":true,"supportsPreview":true,"acceptResources":true,"acceptOutputs":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::cached","olds":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"cacheFrom":[{"local":{"src":"tmp/cache"}}],"cacheTo":[{"local":{"dest":"tmp/cache","mode":"max"}}],"context":{"location":"./app"},"push":false},"randomSeed":"ZWskN3jlqBMv6tmMC3iYcp72JlJi3BaynABwfJvItf0="},"response":{"inputs":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"cached","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::cached","olds":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"cached","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"cacheFrom":[{"local":{"src":"tmp/cache"}}],"cacheTo":[{"local":{"dest":"tmp/cache","mode":"max"}}],"context":{"location":"./app"},"push":false},"propertyDependencies":{"cacheFrom":{},"cacheTo":{},"context":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::cached","id":"cached","object":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::buildArgs","olds":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.buildArgs"},"push":false},"randomSeed":"w2fMu6b3i00ragSVGWmvIDtQcSnrc+tjouVOX94MOjs="},"response":{"inputs":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"buildArgs","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::buildArgs","olds":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"55695ddcfb4d08a0d78d1a74c7b0141dada73ed05bc4b056ba29a51e42c83381","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"buildArgs","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.buildArgs"},"push":false},"propertyDependencies":{"buildArgs":{},"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::buildArgs","id":"buildArgs","object":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"55695ddcfb4d08a0d78d1a74c7b0141dada73ed05bc4b056ba29a51e42c83381","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::dockerLoad","olds":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"context":{"location":"./app"},"exports":[{"docker":{"tar":true}}],"push":false},"randomSeed":"byZBE5Pr6wsJm1uCqGA7Y7/ONw/2rlV3aRk7xWWLEo8="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::dockerLoad","olds":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"dockerLoad","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"exports":[{"docker":{"tar":true}}],"push":false},"propertyDependencies":{"context":{},"exports":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::dockerLoad","id":"sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::extraHosts","olds":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"addHosts":["metadata.google.internal:169.254.169.254"],"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.extraHosts"},"push":false},"randomSeed":"p8FBq6krg4I7hAUYM4neg5YNRa3tWVakQOHYfF6vFN4="},"response":{"inputs":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"extraHosts","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::extraHosts","olds":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e5d510d9ce39d91260e3aa7f8c81d7517a76165eb35e7134cae2f3e4e9fcb712","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"extraHosts","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"addHosts":["metadata.google.internal:169.254.169.254"],"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.extraHosts"},"push":false},"propertyDependencies":{"addHosts":{},"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::extraHosts","id":"extraHosts","object":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e5d510d9ce39d91260e3aa7f8c81d7517a76165eb35e7134cae2f3e4e9fcb712","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::inline","olds":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n"},"push":false},"randomSeed":"G7n7xhvbi62QRvCJna5KrofLnmMIZ/vGJAdrCW/Rtrk="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"inline","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::inline","olds":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"36c67969e6700e87bde75fcf604a7db1fa9593194718fc0ae1c498df43228aec","digest":"","dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"inline","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n"},"push":false},"propertyDependencies":{"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::inline","id":"inline","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"36c67969e6700e87bde75fcf604a7db1fa9593194718fc0ae1c498df43228aec","digest":"","dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::labels","olds":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"context":{"location":"./app"},"labels":{"description":"This image will get a descriptive label 👍"},"push":false},"randomSeed":"0p/EMi8wX7/oogSrdOLh7212T5s3xiJg8LTvx472XvE="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"labels","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::labels","olds":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"labels","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"labels":{"description":"This image will get a descriptive label 👍"},"push":false},"propertyDependencies":{"context":{},"labels":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::labels","id":"labels","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::multiPlatform","olds":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"target":""},"news":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.multiPlatform"},"platforms":["plan9/amd64","plan9/386"],"push":false},"randomSeed":"/PtiUljglYok1d9FeJAyPeK5pqQgJHX7UDdo0iN6eh4="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"multiPlatform","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::multiPlatform","olds":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"c7ecf546ed2402de04f2dfa56ca4adb6fd490eed4219d7f1b2e559cd475f1755","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"ref":"","target":""},"news":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"multiPlatform","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.multiPlatform"},"platforms":["plan9/amd64","plan9/386"],"push":false},"propertyDependencies":{"context":{},"dockerfile":{},"platforms":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::multiPlatform","id":"multiPlatform","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"c7ecf546ed2402de04f2dfa56ca4adb6fd490eed4219d7f1b2e559cd475f1755","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::registryPush","olds":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""},"news":{"context":{"location":"./app"},"exports":[{"registry":{"ociMediaTypes":true,"push":false}}],"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"]},"randomSeed":"2MLryJXUSCtyYEay5UqLHXK2NmAO7gqFArJoR94yqxQ="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::registryPush","olds":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"docker.io/pulumibot/buildkit-e2e:example@sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""},"news":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"registryPush","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"exports":[{"registry":{"ociMediaTypes":true,"push":false}}],"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"]},"propertyDependencies":{"context":{},"exports":{},"push":{},"tags":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::registryPush","id":"sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"docker.io/pulumibot/buildkit-e2e:example@sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::namedContexts","olds":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"location":"./app/Dockerfile.namedContexts"},"push":false},"randomSeed":"jwjqrWoEo9bkNxg+c/bGkujinMxk9u6H6kXZz609seE="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"namedContexts","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::namedContexts","olds":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"contextHash":"3adfaaf17fbb548f06310e76d2826bccb223b49463504d0cc4fe86b0eef5d47d","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResourceOutputs","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","outputs":{"platforms":["plan9/amd64","plan9/386"]}},"response":{},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"namedContexts","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"location":"./app/Dockerfile.namedContexts"},"push":false},"propertyDependencies":{"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::namedContexts","id":"namedContexts","object":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"contextHash":"3adfaaf17fbb548f06310e76d2826bccb223b49463504d0cc4fe86b0eef5d47d","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContext","olds":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"push":false},"randomSeed":"CaplRfMxjiQCr1PCFJaqI/RWqzglzoESxXZfrdbwAt4="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"remoteContext","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContext","olds":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"contextHash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","digest":"","dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"remoteContext","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"push":false},"propertyDependencies":{"context":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContext","id":"remoteContext","object":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"contextHash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","digest":"","dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContextWithInline","olds":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n"},"push":false},"randomSeed":"xNAphsB4aznduk89CDvOVS8w52uf7APLGilnNvFeW4M="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"remoteContextWithInline","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContextWithInline","olds":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"contextHash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","digest":"","dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"remoteContextWithInline","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n"},"push":false},"propertyDependencies":{"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContextWithInline","id":"remoteContextWithInline","object":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"contextHash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","digest":"","dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::secrets","olds":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"secrets":{"password":"hunter2"},"target":""},"news":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.secrets"},"push":false,"secrets":{"password":"hunter2"}},"randomSeed":"2pWR2Fya+kqsX+fiRZsCijKKNyM4Vg7cV+zWbvgYd40="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"secrets":{"password":"hunter2"},"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"secrets","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::secrets","olds":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"5c1561571a60aa3b5a234a9c26f69e2ba5d9a18624f426109d36a1d729b23a21","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","secrets":{"password":"hunter2"},"target":""},"news":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"secrets":{"password":"hunter2"},"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"secrets":{"password":"hunter2"},"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"secrets","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.secrets"},"push":false,"secrets":{"password":"hunter2"}},"propertyDependencies":{"context":{},"dockerfile":{},"push":{},"secrets":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::secrets","id":"secrets","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"5c1561571a60aa3b5a234a9c26f69e2ba5d9a18624f426109d36a1d729b23a21","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","secrets":{"password":"hunter2"},"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::sshMount","olds":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ssh":[{"id":"default"}],"target":""},"news":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.sshMount"},"push":false,"ssh":[{"id":"default"}]},"randomSeed":"p3KkWQOMacJB3Xx3iA9xzZNVbq4cisgeBDusyc7Dd5M="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ssh":[{"id":"default"}],"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"sshMount","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::sshMount","olds":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"71d21b382ab9ee0324ad820ce57a0a4318342a0a244931f51fc46b791f1b37e9","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","ssh":[{"id":"default"}],"target":""},"news":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ssh":[{"id":"default"}],"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ssh":[{"id":"default"}],"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"sshMount","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.sshMount"},"push":false,"ssh":[{"id":"default"}]},"propertyDependencies":{"context":{},"dockerfile":{},"push":{},"ssh":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::sshMount","id":"sshMount","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"71d21b382ab9ee0324ad820ce57a0a4318342a0a244931f51fc46b791f1b37e9","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","ssh":[{"id":"default"}],"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::target","olds":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":"build-me"},"news":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.target"},"push":false,"target":"build-me"},"randomSeed":"NtYD6OUq2twAADxlS7q6b/RtDapKb1B5Ho88CrkTvRg="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":"build-me"}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"target","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::target","olds":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"fefadf795b6b4b119e97a87067a25f52a16cc3375223acad7b3f642fdcd413fc","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":"build-me"},"news":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":"build-me"},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":"build-me"}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"target","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.target"},"push":false,"target":"build-me"},"propertyDependencies":{"context":{},"dockerfile":{},"push":{},"target":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::target","id":"target","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"fefadf795b6b4b119e97a87067a25f52a16cc3375223acad7b3f642fdcd413fc","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":"build-me"}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.LanguageRuntime/Run","request":{"project":"provider-docker-build","stack":"p-it-bryces-wor-upgrade-7b788721","pwd":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","program":".","dryRun":true,"parallel":40,"monitorAddress":"127.0.0.1:60111","organization":"organization","configPropertyMap":{},"info":{"rootDirectory":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","programDirectory":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","entryPoint":".","options":{}}},"response":{},"metadata":{"kind":"language","mode":"client","runtime":"yaml"}}
-{"method":"/pulumirpc.LanguageRuntime/GetPluginInfo","request":{},"response":{},"metadata":{"kind":"language","mode":"client","runtime":"yaml"}}
-{"method":"/pulumirpc.LanguageRuntime/GetRequiredPlugins","request":{"project":"deprecated","pwd":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","program":".","info":{"rootDirectory":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","programDirectory":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","entryPoint":".","options":{}}},"response":{"plugins":[{"name":"docker-build","kind":"resource"}]},"metadata":{"kind":"language","mode":"client","runtime":"yaml"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"resourceReferences"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"outputValues"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"deletedWith"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"aliasSpecs"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/SupportsFeature","request":{"id":"transforms"},"response":{"hasSupport":true},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"pulumi:pulumi:Stack","name":"provider-docker-build-p-it-bryces-wor-upgrade-7b788721","object":{},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fgo%2Fpkg%2Fmod%2Fgithub.com%2Fpulumi%2Fpulumi%2Fsdk%2Fv3@v3.109.0%2Fgo%2Fpulumi%2Frun.go","line":113}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","object":{}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/GetPluginInfo","request":{},"response":{"version":"0.1.0-alpha.0+dev"},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/CheckConfig","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default","olds":{"host":""},"news":{}},"response":{"inputs":{"host":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/DiffConfig","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default","olds":{"host":""},"news":{"host":""},"oldInputs":{"host":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Configure","request":{"variables":{"docker-build:config:host":""},"args":{"host":""},"acceptSecrets":true,"acceptResources":true,"sendsOldInputs":true,"sendsOldInputsToDelete":true},"response":{"acceptSecrets":true,"supportsPreview":true,"acceptResources":true,"acceptOutputs":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::cached","olds":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"cacheFrom":[{"local":{"src":"tmp/cache"}}],"cacheTo":[{"local":{"dest":"tmp/cache","mode":"max"}}],"context":{"location":"./app"},"push":false},"randomSeed":"YlPwz+irKxTn1onICMkOdP6qPuH2AjQyDdO2UwPged4="},"response":{"inputs":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"cached","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::cached","olds":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"cached","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"cacheFrom":[{"local":{"src":"tmp/cache"}}],"cacheTo":[{"local":{"dest":"tmp/cache","mode":"max"}}],"context":{"location":"./app"},"push":false},"propertyDependencies":{"cacheFrom":{},"cacheTo":{},"context":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::cached","id":"cached","object":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::buildArgs","olds":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.buildArgs"},"push":false},"randomSeed":"ZD8yxSVnJPTrHTTgkkjj/8omgT2p16ynkABPukmQF0Q="},"response":{"inputs":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"buildArgs","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::buildArgs","olds":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"55695ddcfb4d08a0d78d1a74c7b0141dada73ed05bc4b056ba29a51e42c83381","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"buildArgs","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.buildArgs"},"push":false},"propertyDependencies":{"buildArgs":{},"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::buildArgs","id":"buildArgs","object":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"55695ddcfb4d08a0d78d1a74c7b0141dada73ed05bc4b056ba29a51e42c83381","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::dockerLoad","olds":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"context":{"location":"./app"},"exports":[{"docker":{"tar":true}}],"push":false},"randomSeed":"aAbPxtKNUA8gxPyARhZulNHP/6Vt4M7Olim0RngACqE="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::dockerLoad","olds":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"dockerLoad","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"exports":[{"docker":{"tar":true}}],"push":false},"propertyDependencies":{"context":{},"exports":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::dockerLoad","id":"sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::extraHosts","olds":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"addHosts":["metadata.google.internal:169.254.169.254"],"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.extraHosts"},"push":false},"randomSeed":"e6kvEVUQRH/xdMeQ2DOsyjpKlcF1hsfj3wai8X//zO8="},"response":{"inputs":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"extraHosts","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::extraHosts","olds":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e5d510d9ce39d91260e3aa7f8c81d7517a76165eb35e7134cae2f3e4e9fcb712","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"extraHosts","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"addHosts":["metadata.google.internal:169.254.169.254"],"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.extraHosts"},"push":false},"propertyDependencies":{"addHosts":{},"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::extraHosts","id":"extraHosts","object":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e5d510d9ce39d91260e3aa7f8c81d7517a76165eb35e7134cae2f3e4e9fcb712","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::inline","olds":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n"},"push":false},"randomSeed":"LzbI6Hzqd7u7gGJKzIw6YQcc6lQ6rqQB4pNq0sPYz64="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"inline","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::inline","olds":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"36c67969e6700e87bde75fcf604a7db1fa9593194718fc0ae1c498df43228aec","digest":"","dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"inline","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n"},"push":false},"propertyDependencies":{"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::inline","id":"inline","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"36c67969e6700e87bde75fcf604a7db1fa9593194718fc0ae1c498df43228aec","digest":"","dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::labels","olds":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"context":{"location":"./app"},"labels":{"description":"This image will get a descriptive label 👍"},"push":false},"randomSeed":"jYHvYFLcKQWdJpSasE1PwlWilrWqfx1pK3DeAUgjPj4="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"labels","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::labels","olds":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"labels","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"labels":{"description":"This image will get a descriptive label 👍"},"push":false},"propertyDependencies":{"context":{},"labels":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::labels","id":"labels","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::multiPlatform","olds":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"target":""},"news":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.multiPlatform"},"platforms":["plan9/amd64","plan9/386"],"push":false},"randomSeed":"uASdht9PbZ7eqA+irTXzT70A8/vLkMDvDz6p37ID7pU="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"multiPlatform","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::multiPlatform","olds":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"c7ecf546ed2402de04f2dfa56ca4adb6fd490eed4219d7f1b2e559cd475f1755","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"ref":"","target":""},"news":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"multiPlatform","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.multiPlatform"},"platforms":["plan9/amd64","plan9/386"],"push":false},"propertyDependencies":{"context":{},"dockerfile":{},"platforms":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::multiPlatform","id":"multiPlatform","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"c7ecf546ed2402de04f2dfa56ca4adb6fd490eed4219d7f1b2e559cd475f1755","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::namedContexts","olds":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"location":"./app/Dockerfile.namedContexts"},"push":false},"randomSeed":"DQmtLvsL7o7CYPZQipV/1LT+i944Ar572mKkVF4OAfY="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"namedContexts","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::namedContexts","olds":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"contextHash":"3adfaaf17fbb548f06310e76d2826bccb223b49463504d0cc4fe86b0eef5d47d","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"namedContexts","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"dockerfile":{"location":"./app/Dockerfile.namedContexts"},"push":false},"propertyDependencies":{"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::namedContexts","id":"namedContexts","object":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"contextHash":"3adfaaf17fbb548f06310e76d2826bccb223b49463504d0cc4fe86b0eef5d47d","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::registryPush","olds":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""},"news":{"context":{"location":"./app"},"exports":[{"registry":{"ociMediaTypes":true,"push":false}}],"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"]},"randomSeed":"tDOnnOAQPWITFZ3C5q5muS3yfoAwGPVRAljRVmRtqi8="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::registryPush","olds":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"docker.io/pulumibot/buildkit-e2e:example@sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""},"news":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"registryPush","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"exports":[{"registry":{"ociMediaTypes":true,"push":false}}],"push":false,"tags":["docker.io/pulumibot/buildkit-e2e:example"]},"propertyDependencies":{"context":{},"exports":{},"push":{},"tags":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::registryPush","id":"sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"docker.io/pulumibot/buildkit-e2e:example@sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContext","olds":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"push":false},"randomSeed":"o6ZbqfPdKuSOgWB7HF3l28QX3vGlQSMjgidCJtKpxMg="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"remoteContext","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContext","olds":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"contextHash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","digest":"","dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResourceOutputs","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","outputs":{"platforms":["plan9/amd64","plan9/386"]}},"response":{},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"remoteContext","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"push":false},"propertyDependencies":{"context":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContext","id":"remoteContext","object":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"contextHash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","digest":"","dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::secrets","olds":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"secrets":{"password":"hunter2"},"target":""},"news":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.secrets"},"push":false,"secrets":{"password":"hunter2"}},"randomSeed":"/5/ksFewBQi7wRXAj4xuv2CKJTcW5ZUbz4+rgjKE3jA="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"secrets":{"password":"hunter2"},"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"secrets","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::secrets","olds":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"5c1561571a60aa3b5a234a9c26f69e2ba5d9a18624f426109d36a1d729b23a21","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","secrets":{"password":"hunter2"},"target":""},"news":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"secrets":{"password":"hunter2"},"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"secrets":{"password":"hunter2"},"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"secrets","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.secrets"},"push":false,"secrets":{"password":"hunter2"}},"propertyDependencies":{"context":{},"dockerfile":{},"push":{},"secrets":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::secrets","id":"secrets","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"5c1561571a60aa3b5a234a9c26f69e2ba5d9a18624f426109d36a1d729b23a21","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","secrets":{"password":"hunter2"},"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContextWithInline","olds":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"news":{"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n"},"push":false},"randomSeed":"9ii22+m87HW/Fzxigp7uU8ogSpzUmAVh45+GLFjdOnA="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"remoteContextWithInline","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContextWithInline","olds":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"contextHash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","digest":"","dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"news":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"remoteContextWithInline","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"https://github.com/docker-library/hello-world.git"},"dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n"},"push":false},"propertyDependencies":{"context":{},"dockerfile":{},"push":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContextWithInline","id":"remoteContextWithInline","object":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"contextHash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","digest":"","dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::sshMount","olds":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ssh":[{"id":"default"}],"target":""},"news":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.sshMount"},"push":false,"ssh":[{"id":"default"}]},"randomSeed":"8yg7waJ1blvyXo8K0C0jflHueD+JoAov302Lp3iZkbg="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ssh":[{"id":"default"}],"target":""}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"sshMount","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::sshMount","olds":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"71d21b382ab9ee0324ad820ce57a0a4318342a0a244931f51fc46b791f1b37e9","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","ssh":[{"id":"default"}],"target":""},"news":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ssh":[{"id":"default"}],"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ssh":[{"id":"default"}],"target":""}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"sshMount","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.sshMount"},"push":false,"ssh":[{"id":"default"}]},"propertyDependencies":{"context":{},"dockerfile":{},"push":{},"ssh":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::sshMount","id":"sshMount","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"71d21b382ab9ee0324ad820ce57a0a4318342a0a244931f51fc46b791f1b37e9","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","ssh":[{"id":"default"}],"target":""}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.ResourceProvider/Check","request":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::target","olds":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":"build-me"},"news":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.target"},"push":false,"target":"build-me"},"randomSeed":"oRDdZiTWGCmPPp/DLBko63qKWS9ZN6FjERsvBlkkbX4="},"response":{"inputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":"build-me"}},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Diff","request":{"id":"target","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::target","olds":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"fefadf795b6b4b119e97a87067a25f52a16cc3375223acad7b3f642fdcd413fc","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":"build-me"},"news":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":"build-me"},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"target":"build-me"}},"response":{"changes":"DIFF_NONE","hasDetailedDiff":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceMonitor/RegisterResource","request":{"type":"docker-build:index:Image","name":"target","parent":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721","custom":true,"object":{"context":{"location":"./app"},"dockerfile":{"location":"./app/Dockerfile.target"},"push":false,"target":"build-me"},"propertyDependencies":{"context":{},"dockerfile":{},"push":{},"target":{}},"acceptSecrets":true,"customTimeouts":{},"acceptResources":true,"sourcePosition":{"uri":"project://%2FUsers%2Frunner%2Fwork%2Fpulumi-yaml%2Fpulumi-yaml%2Fpkg%2Fpulumiyaml%2Frun.go","line":1330}},"response":{"urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::target","id":"target","object":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"fefadf795b6b4b119e97a87067a25f52a16cc3375223acad7b3f642fdcd413fc","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":"build-me"}},"metadata":{"mode":"server"}}
-{"method":"/pulumirpc.LanguageRuntime/Run","request":{"project":"provider-docker-build","stack":"p-it-bryces-wor-upgrade-7b788721","pwd":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","program":".","parallel":40,"monitorAddress":"127.0.0.1:60131","organization":"organization","configPropertyMap":{},"info":{"rootDirectory":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","programDirectory":"/private/var/folders/kq/zdlx0fn57yl66gxktcyzylv40000gn/T/p-it-bryces-wor-upgrade-7b788721-304961874","entryPoint":".","options":{}}},"response":{},"metadata":{"kind":"language","mode":"client","runtime":"yaml"}}
-{"method":"/pulumirpc.ResourceProvider/GetPluginInfo","request":{},"response":{"version":"0.1.0-alpha.0+dev"},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Configure","request":{"variables":{"docker-build:config:host":""},"args":{"host":""},"acceptSecrets":true,"acceptResources":true,"sendsOldInputs":true,"sendsOldInputsToDelete":true},"response":{"acceptSecrets":true,"supportsPreview":true,"acceptResources":true,"acceptOutputs":true},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Delete","request":{"id":"sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::dockerLoad","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"docker":{"compression":"gzip","compressionLevel":0,"dest":"","forceCompression":false,"ociMediaTypes":false,"tar":true},"raw":""}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"response":{},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Delete","request":{"id":"remoteContextWithInline","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContextWithInline","properties":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"contextHash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","digest":"","dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"https://github.com/docker-library/hello-world.git"},"contextHash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","digest":"","dockerfile":{"inline":"FROM busybox\nCOPY hello.c ./\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"response":{},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Delete","request":{"id":"extraHosts","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::extraHosts","properties":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e5d510d9ce39d91260e3aa7f8c81d7517a76165eb35e7134cae2f3e4e9fcb712","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"oldInputs":{"addHosts":["metadata.google.internal:169.254.169.254"],"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e5d510d9ce39d91260e3aa7f8c81d7517a76165eb35e7134cae2f3e4e9fcb712","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.extraHosts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"response":{},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Delete","request":{"id":"target","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::target","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"fefadf795b6b4b119e97a87067a25f52a16cc3375223acad7b3f642fdcd413fc","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":"build-me"},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"fefadf795b6b4b119e97a87067a25f52a16cc3375223acad7b3f642fdcd413fc","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.target"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":"build-me"}},"response":{},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Delete","request":{"id":"secrets","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::secrets","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"5c1561571a60aa3b5a234a9c26f69e2ba5d9a18624f426109d36a1d729b23a21","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","secrets":{"password":"hunter2"},"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"5c1561571a60aa3b5a234a9c26f69e2ba5d9a18624f426109d36a1d729b23a21","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.secrets"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","secrets":{"password":"hunter2"},"target":""}},"response":{},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Delete","request":{"id":"namedContexts","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::namedContexts","properties":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"contextHash":"3adfaaf17fbb548f06310e76d2826bccb223b49463504d0cc4fe86b0eef5d47d","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app","named":{"golang:latest":{"location":"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"}}},"contextHash":"3adfaaf17fbb548f06310e76d2826bccb223b49463504d0cc4fe86b0eef5d47d","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.namedContexts"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"response":{},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Delete","request":{"id":"cached","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::cached","properties":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"oldInputs":{"buildOnPreview":true,"cacheFrom":[{"disabled":false,"local":{"digest":"","src":"tmp/cache"},"raw":""}],"cacheTo":[{"disabled":false,"local":{"compression":"gzip","compressionLevel":0,"dest":"tmp/cache","forceCompression":false,"ignoreError":false,"mode":"max"},"raw":""}],"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"response":{},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Delete","request":{"id":"sshMount","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::sshMount","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"71d21b382ab9ee0324ad820ce57a0a4318342a0a244931f51fc46b791f1b37e9","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","ssh":[{"id":"default"}],"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"71d21b382ab9ee0324ad820ce57a0a4318342a0a244931f51fc46b791f1b37e9","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.sshMount"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","ssh":[{"id":"default"}],"target":""}},"response":{},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Delete","request":{"id":"inline","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::inline","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"36c67969e6700e87bde75fcf604a7db1fa9593194718fc0ae1c498df43228aec","digest":"","dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"36c67969e6700e87bde75fcf604a7db1fa9593194718fc0ae1c498df43228aec","digest":"","dockerfile":{"inline":"FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"response":{},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Delete","request":{"id":"multiPlatform","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::multiPlatform","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"c7ecf546ed2402de04f2dfa56ca4adb6fd490eed4219d7f1b2e559cd475f1755","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"ref":"","target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"c7ecf546ed2402de04f2dfa56ca4adb6fd490eed4219d7f1b2e559cd475f1755","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.multiPlatform"},"exec":false,"load":false,"network":"default","noCache":false,"platforms":["plan9/amd64","plan9/386"],"pull":false,"push":false,"ref":"","target":""}},"response":{},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Delete","request":{"id":"buildArgs","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::buildArgs","properties":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"55695ddcfb4d08a0d78d1a74c7b0141dada73ed05bc4b056ba29a51e42c83381","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"oldInputs":{"buildArgs":{"SET_ME_TO_TRUE":"true"},"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"55695ddcfb4d08a0d78d1a74c7b0141dada73ed05bc4b056ba29a51e42c83381","digest":"","dockerfile":{"inline":"","location":"./app/Dockerfile.buildArgs"},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"response":{},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Delete","request":{"id":"labels","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::labels","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"labels":{"description":"This image will get a descriptive label 👍"},"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"response":{},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Delete","request":{"id":"remoteContext","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContext","properties":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"contextHash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","digest":"","dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"},"contextHash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","digest":"","dockerfile":{"inline":"","location":""},"exec":false,"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"","target":""}},"response":{},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
-{"method":"/pulumirpc.ResourceProvider/Delete","request":{"id":"sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","urn":"urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::registryPush","properties":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"docker.io/pulumibot/buildkit-e2e:example@sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""},"oldInputs":{"buildOnPreview":true,"context":{"location":"./app"},"contextHash":"e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5","digest":"sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","dockerfile":{"inline":"","location":"app/Dockerfile"},"exec":false,"exports":[{"disabled":false,"raw":"","registry":{"compression":"gzip","compressionLevel":0,"danglingNamePrefix":"","forceCompression":false,"ociMediaTypes":true,"push":false,"store":true}}],"load":false,"network":"default","noCache":false,"pull":false,"push":false,"ref":"docker.io/pulumibot/buildkit-e2e:example@sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a","tags":["docker.io/pulumibot/buildkit-e2e:example"],"target":""}},"response":{},"metadata":{"kind":"resource","mode":"client","name":"docker-build"}}
diff --git a/examples/testdata/recorded/TestProviderUpgrade/upgrade/0.0.1/stack.json b/examples/testdata/recorded/TestProviderUpgrade/upgrade/0.0.1/stack.json
deleted file mode 100755
index b621761..0000000
--- a/examples/testdata/recorded/TestProviderUpgrade/upgrade/0.0.1/stack.json
+++ /dev/null
@@ -1,944 +0,0 @@
-{
- "version": 3,
- "deployment": {
- "manifest": {
- "time": "2024-06-18T15:10:50.439881-07:00",
- "magic": "",
- "version": ""
- },
- "secrets_providers": {
- "type": "passphrase",
- "state": {
- "salt": "v1:uRYnzeN15MA=:v1:rpAZ+oxUTuiNyCpF:KQmWj5xMhsTrE2XhW35Gd1XoMW7RDg=="
- }
- },
- "resources": [
- {
- "urn": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
- "custom": false,
- "type": "pulumi:pulumi:Stack",
- "outputs": {
- "platforms": [
- "plan9/amd64",
- "plan9/386"
- ]
- },
- "created": "2024-06-18T22:10:48.091797Z",
- "modified": "2024-06-18T22:10:48.091797Z"
- },
- {
- "urn": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default",
- "custom": true,
- "id": "b62bb809-b83b-42cb-889c-46d524de5fe7",
- "type": "pulumi:providers:docker-build",
- "inputs": {
- "host": ""
- },
- "outputs": {
- "host": ""
- },
- "created": "2024-06-18T22:10:48.187658Z",
- "modified": "2024-06-18T22:10:48.187658Z"
- },
- {
- "urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::secrets",
- "custom": true,
- "id": "secrets",
- "type": "docker-build:index:Image",
- "inputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "dockerfile": {
- "inline": "",
- "location": "./app/Dockerfile.secrets"
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "secrets": {
- "password": "hunter2"
- },
- "target": ""
- },
- "outputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "contextHash": "5c1561571a60aa3b5a234a9c26f69e2ba5d9a18624f426109d36a1d729b23a21",
- "digest": "",
- "dockerfile": {
- "inline": "",
- "location": "./app/Dockerfile.secrets"
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "ref": "",
- "secrets": {
- "password": "hunter2"
- },
- "target": ""
- },
- "parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
- "provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
- "propertyDependencies": {
- "context": [],
- "dockerfile": [],
- "push": [],
- "secrets": []
- },
- "created": "2024-06-18T22:10:50.181453Z",
- "modified": "2024-06-18T22:10:50.181453Z"
- },
- {
- "urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::buildArgs",
- "custom": true,
- "id": "buildArgs",
- "type": "docker-build:index:Image",
- "inputs": {
- "buildArgs": {
- "SET_ME_TO_TRUE": "true"
- },
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "dockerfile": {
- "inline": "",
- "location": "./app/Dockerfile.buildArgs"
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "target": ""
- },
- "outputs": {
- "buildArgs": {
- "SET_ME_TO_TRUE": "true"
- },
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "contextHash": "55695ddcfb4d08a0d78d1a74c7b0141dada73ed05bc4b056ba29a51e42c83381",
- "digest": "",
- "dockerfile": {
- "inline": "",
- "location": "./app/Dockerfile.buildArgs"
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "ref": "",
- "target": ""
- },
- "parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
- "provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
- "propertyDependencies": {
- "buildArgs": [],
- "context": [],
- "dockerfile": [],
- "push": []
- },
- "created": "2024-06-18T22:10:50.182348Z",
- "modified": "2024-06-18T22:10:50.182348Z"
- },
- {
- "urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::sshMount",
- "custom": true,
- "id": "sshMount",
- "type": "docker-build:index:Image",
- "inputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "dockerfile": {
- "inline": "",
- "location": "./app/Dockerfile.sshMount"
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "ssh": [
- {
- "id": "default"
- }
- ],
- "target": ""
- },
- "outputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "contextHash": "71d21b382ab9ee0324ad820ce57a0a4318342a0a244931f51fc46b791f1b37e9",
- "digest": "",
- "dockerfile": {
- "inline": "",
- "location": "./app/Dockerfile.sshMount"
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "ref": "",
- "ssh": [
- {
- "id": "default"
- }
- ],
- "target": ""
- },
- "parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
- "provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
- "propertyDependencies": {
- "context": [],
- "dockerfile": [],
- "push": [],
- "ssh": []
- },
- "created": "2024-06-18T22:10:50.182807Z",
- "modified": "2024-06-18T22:10:50.182807Z"
- },
- {
- "urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::remoteContext",
- "custom": true,
- "id": "remoteContext",
- "type": "docker-build:index:Image",
- "inputs": {
- "buildOnPreview": true,
- "context": {
- "location": "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"
- },
- "dockerfile": {
- "inline": "",
- "location": ""
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "target": ""
- },
- "outputs": {
- "buildOnPreview": true,
- "context": {
- "location": "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"
- },
- "contextHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "digest": "",
- "dockerfile": {
- "inline": "",
- "location": ""
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "ref": "",
- "target": ""
- },
- "parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
- "provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
- "propertyDependencies": {
- "context": [],
- "push": []
- },
- "created": "2024-06-18T22:10:50.18341Z",
- "modified": "2024-06-18T22:10:50.18341Z"
- },
- {
- "urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::registryPush",
- "custom": true,
- "id": "sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a",
- "type": "docker-build:index:Image",
- "inputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "dockerfile": {
- "inline": "",
- "location": "app/Dockerfile"
- },
- "exec": false,
- "exports": [
- {
- "disabled": false,
- "raw": "",
- "registry": {
- "compression": "gzip",
- "compressionLevel": 0,
- "danglingNamePrefix": "",
- "forceCompression": false,
- "ociMediaTypes": true,
- "push": false,
- "store": true
- }
- }
- ],
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "tags": [
- "docker.io/pulumibot/buildkit-e2e:example"
- ],
- "target": ""
- },
- "outputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "contextHash": "e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5",
- "digest": "sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a",
- "dockerfile": {
- "inline": "",
- "location": "app/Dockerfile"
- },
- "exec": false,
- "exports": [
- {
- "disabled": false,
- "raw": "",
- "registry": {
- "compression": "gzip",
- "compressionLevel": 0,
- "danglingNamePrefix": "",
- "forceCompression": false,
- "ociMediaTypes": true,
- "push": false,
- "store": true
- }
- }
- ],
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "ref": "docker.io/pulumibot/buildkit-e2e:example@sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a",
- "tags": [
- "docker.io/pulumibot/buildkit-e2e:example"
- ],
- "target": ""
- },
- "parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
- "provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
- "propertyDependencies": {
- "context": [],
- "exports": [],
- "push": [],
- "tags": []
- },
- "created": "2024-06-18T22:10:50.183668Z",
- "modified": "2024-06-18T22:10:50.183668Z"
- },
- {
- "urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::dockerLoad",
- "custom": true,
- "id": "sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4",
- "type": "docker-build:index:Image",
- "inputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "dockerfile": {
- "inline": "",
- "location": "app/Dockerfile"
- },
- "exec": false,
- "exports": [
- {
- "disabled": false,
- "docker": {
- "compression": "gzip",
- "compressionLevel": 0,
- "dest": "",
- "forceCompression": false,
- "ociMediaTypes": false,
- "tar": true
- },
- "raw": ""
- }
- ],
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "target": ""
- },
- "outputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "contextHash": "e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5",
- "digest": "sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4",
- "dockerfile": {
- "inline": "",
- "location": "app/Dockerfile"
- },
- "exec": false,
- "exports": [
- {
- "disabled": false,
- "docker": {
- "compression": "gzip",
- "compressionLevel": 0,
- "dest": "",
- "forceCompression": false,
- "ociMediaTypes": false,
- "tar": true
- },
- "raw": ""
- }
- ],
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "ref": "",
- "target": ""
- },
- "parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
- "provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
- "propertyDependencies": {
- "context": [],
- "exports": [],
- "push": []
- },
- "created": "2024-06-18T22:10:50.183874Z",
- "modified": "2024-06-18T22:10:50.183874Z"
- },
- {
- "urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::labels",
- "custom": true,
- "id": "labels",
- "type": "docker-build:index:Image",
- "inputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "dockerfile": {
- "inline": "",
- "location": "app/Dockerfile"
- },
- "exec": false,
- "labels": {
- "description": "This image will get a descriptive label 👍"
- },
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "target": ""
- },
- "outputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "contextHash": "e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5",
- "digest": "",
- "dockerfile": {
- "inline": "",
- "location": "app/Dockerfile"
- },
- "exec": false,
- "labels": {
- "description": "This image will get a descriptive label 👍"
- },
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "ref": "",
- "target": ""
- },
- "parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
- "provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
- "propertyDependencies": {
- "context": [],
- "labels": [],
- "push": []
- },
- "created": "2024-06-18T22:10:50.183996Z",
- "modified": "2024-06-18T22:10:50.183996Z"
- },
- {
- "urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::inline",
- "custom": true,
- "id": "inline",
- "type": "docker-build:index:Image",
- "inputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "dockerfile": {
- "inline": "FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n",
- "location": ""
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "target": ""
- },
- "outputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "contextHash": "36c67969e6700e87bde75fcf604a7db1fa9593194718fc0ae1c498df43228aec",
- "digest": "",
- "dockerfile": {
- "inline": "FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n",
- "location": ""
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "ref": "",
- "target": ""
- },
- "parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
- "provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
- "propertyDependencies": {
- "context": [],
- "dockerfile": [],
- "push": []
- },
- "created": "2024-06-18T22:10:50.184088Z",
- "modified": "2024-06-18T22:10:50.184088Z"
- },
- {
- "urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::target",
- "custom": true,
- "id": "target",
- "type": "docker-build:index:Image",
- "inputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "dockerfile": {
- "inline": "",
- "location": "./app/Dockerfile.target"
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "target": "build-me"
- },
- "outputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "contextHash": "fefadf795b6b4b119e97a87067a25f52a16cc3375223acad7b3f642fdcd413fc",
- "digest": "",
- "dockerfile": {
- "inline": "",
- "location": "./app/Dockerfile.target"
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "ref": "",
- "target": "build-me"
- },
- "parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
- "provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
- "propertyDependencies": {
- "context": [],
- "dockerfile": [],
- "push": [],
- "target": []
- },
- "created": "2024-06-18T22:10:50.18426Z",
- "modified": "2024-06-18T22:10:50.18426Z"
- },
- {
- "urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::cached",
- "custom": true,
- "id": "cached",
- "type": "docker-build:index:Image",
- "inputs": {
- "buildOnPreview": true,
- "cacheFrom": [
- {
- "disabled": false,
- "local": {
- "digest": "",
- "src": "tmp/cache"
- },
- "raw": ""
- }
- ],
- "cacheTo": [
- {
- "disabled": false,
- "local": {
- "compression": "gzip",
- "compressionLevel": 0,
- "dest": "tmp/cache",
- "forceCompression": false,
- "ignoreError": false,
- "mode": "max"
- },
- "raw": ""
- }
- ],
- "context": {
- "location": "./app"
- },
- "dockerfile": {
- "inline": "",
- "location": "app/Dockerfile"
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "target": ""
- },
- "outputs": {
- "buildOnPreview": true,
- "cacheFrom": [
- {
- "disabled": false,
- "local": {
- "digest": "",
- "src": "tmp/cache"
- },
- "raw": ""
- }
- ],
- "cacheTo": [
- {
- "disabled": false,
- "local": {
- "compression": "gzip",
- "compressionLevel": 0,
- "dest": "tmp/cache",
- "forceCompression": false,
- "ignoreError": false,
- "mode": "max"
- },
- "raw": ""
- }
- ],
- "context": {
- "location": "./app"
- },
- "contextHash": "e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5",
- "digest": "",
- "dockerfile": {
- "inline": "",
- "location": "app/Dockerfile"
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "ref": "",
- "target": ""
- },
- "parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
- "provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
- "propertyDependencies": {
- "cacheFrom": [],
- "cacheTo": [],
- "context": [],
- "push": []
- },
- "created": "2024-06-18T22:10:50.206842Z",
- "modified": "2024-06-18T22:10:50.206842Z"
- },
- {
- "urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::multiPlatform",
- "custom": true,
- "id": "multiPlatform",
- "type": "docker-build:index:Image",
- "inputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "dockerfile": {
- "inline": "",
- "location": "./app/Dockerfile.multiPlatform"
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "platforms": [
- "plan9/amd64",
- "plan9/386"
- ],
- "pull": false,
- "push": false,
- "target": ""
- },
- "outputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "contextHash": "c7ecf546ed2402de04f2dfa56ca4adb6fd490eed4219d7f1b2e559cd475f1755",
- "digest": "",
- "dockerfile": {
- "inline": "",
- "location": "./app/Dockerfile.multiPlatform"
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "platforms": [
- "plan9/amd64",
- "plan9/386"
- ],
- "pull": false,
- "push": false,
- "ref": "",
- "target": ""
- },
- "parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
- "provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
- "propertyDependencies": {
- "context": [],
- "dockerfile": [],
- "platforms": [],
- "push": []
- },
- "created": "2024-06-18T22:10:50.257528Z",
- "modified": "2024-06-18T22:10:50.257528Z"
- },
- {
- "urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::extraHosts",
- "custom": true,
- "id": "extraHosts",
- "type": "docker-build:index:Image",
- "inputs": {
- "addHosts": [
- "metadata.google.internal:169.254.169.254"
- ],
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "dockerfile": {
- "inline": "",
- "location": "./app/Dockerfile.extraHosts"
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "target": ""
- },
- "outputs": {
- "addHosts": [
- "metadata.google.internal:169.254.169.254"
- ],
- "buildOnPreview": true,
- "context": {
- "location": "./app"
- },
- "contextHash": "e5d510d9ce39d91260e3aa7f8c81d7517a76165eb35e7134cae2f3e4e9fcb712",
- "digest": "",
- "dockerfile": {
- "inline": "",
- "location": "./app/Dockerfile.extraHosts"
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "ref": "",
- "target": ""
- },
- "parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
- "provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
- "propertyDependencies": {
- "addHosts": [],
- "context": [],
- "dockerfile": [],
- "push": []
- },
- "created": "2024-06-18T22:10:50.274264Z",
- "modified": "2024-06-18T22:10:50.274264Z"
- },
- {
- "urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::remoteContextWithInline",
- "custom": true,
- "id": "remoteContextWithInline",
- "type": "docker-build:index:Image",
- "inputs": {
- "buildOnPreview": true,
- "context": {
- "location": "https://github.com/docker-library/hello-world.git"
- },
- "dockerfile": {
- "inline": "FROM busybox\nCOPY hello.c ./\n",
- "location": ""
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "target": ""
- },
- "outputs": {
- "buildOnPreview": true,
- "context": {
- "location": "https://github.com/docker-library/hello-world.git"
- },
- "contextHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "digest": "",
- "dockerfile": {
- "inline": "FROM busybox\nCOPY hello.c ./\n",
- "location": ""
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "ref": "",
- "target": ""
- },
- "parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
- "provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
- "propertyDependencies": {
- "context": [],
- "dockerfile": [],
- "push": []
- },
- "created": "2024-06-18T22:10:50.332506Z",
- "modified": "2024-06-18T22:10:50.332506Z"
- },
- {
- "urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::namedContexts",
- "custom": true,
- "id": "namedContexts",
- "type": "docker-build:index:Image",
- "inputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app",
- "named": {
- "golang:latest": {
- "location": "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"
- }
- }
- },
- "dockerfile": {
- "inline": "",
- "location": "./app/Dockerfile.namedContexts"
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "target": ""
- },
- "outputs": {
- "buildOnPreview": true,
- "context": {
- "location": "./app",
- "named": {
- "golang:latest": {
- "location": "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"
- }
- }
- },
- "contextHash": "3adfaaf17fbb548f06310e76d2826bccb223b49463504d0cc4fe86b0eef5d47d",
- "digest": "",
- "dockerfile": {
- "inline": "",
- "location": "./app/Dockerfile.namedContexts"
- },
- "exec": false,
- "load": false,
- "network": "default",
- "noCache": false,
- "pull": false,
- "push": false,
- "ref": "",
- "target": ""
- },
- "parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
- "provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
- "propertyDependencies": {
- "context": [],
- "dockerfile": [],
- "push": []
- },
- "created": "2024-06-18T22:10:50.422524Z",
- "modified": "2024-06-18T22:10:50.422524Z"
- }
- ]
- }
-}
\ No newline at end of file
diff --git a/examples/tests/caching/Dockerfile b/examples/tests/caching/Dockerfile
deleted file mode 100644
index a48c983..0000000
--- a/examples/tests/caching/Dockerfile
+++ /dev/null
@@ -1,7 +0,0 @@
-FROM --platform=$BUILDPLATFORM golang:1.21.6-alpine3.18 as initial
-ARG SLEEP_SECONDS
-RUN sleep ${SLEEP_SECONDS} && echo ${SLEEP_SECONDS} > output
-
-FROM alpine:3.18 as final
-COPY --from=initial /go/output output
-RUN cat output
diff --git a/examples/tests/caching/Pulumi.yaml b/examples/tests/caching/Pulumi.yaml
deleted file mode 100644
index 7fa2fb4..0000000
--- a/examples/tests/caching/Pulumi.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-name: test-buildx-caching
-runtime: nodejs
-description: A minimal TypeScript Pulumi program
diff --git a/examples/tests/caching/index.ts b/examples/tests/caching/index.ts
deleted file mode 100644
index 02c8cdb..0000000
--- a/examples/tests/caching/index.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import * as buildx from "@pulumi/docker-build";
-import * as pulumi from "@pulumi/pulumi";
-
-const config = new pulumi.Config();
-
-const start = new Date().getTime();
-
-// docker buildx build \
-// -f Dockerfile \
-// --cache-to type=local,dest=tmp,mode=max,oci-mediatypes=true \
-// --cache-from type=local,src=tmp \
-// --build-arg SLEEP-MS=$SLEEP_MS \
-// -t not-pushed \
-// -f Dockerfile \
-// .
-const img = new buildx.Image(`buildx-${config.require("name")}`, {
- tags: ["not-pushed"],
- dockerfile: { location: "Dockerfile" },
- push: false,
- context: { location: "." },
- buildArgs: {
- SLEEP_SECONDS: config.require("SLEEP_SECONDS"),
- },
- cacheTo: [{ raw: config.require("cacheTo") }],
- cacheFrom: [{ raw: config.require("cacheFrom") }],
- // Set registry auth if it was provided.
- registries: config.require("username")
- ? [
- {
- address: config.getSecret("address"),
- username: config.getSecret("username"),
- password: config.getSecret("password"),
- },
- ]
- : undefined,
-});
-
-export const durationSeconds = img.ref.apply(
- (_) => (new Date().getTime() - start) / 1000.0
-);
diff --git a/examples/tests/caching/package.json b/examples/tests/caching/package.json
deleted file mode 100644
index a2636d8..0000000
--- a/examples/tests/caching/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "test-buildx-caching",
- "devDependencies": {
- "@types/node": "^20.0.0"
- },
- "dependencies": {
- "@pulumi/pulumi": "3.184.0"
- }
-}
diff --git a/examples/tests/caching/yarn.lock b/examples/tests/caching/yarn.lock
deleted file mode 100644
index 005269b..0000000
--- a/examples/tests/caching/yarn.lock
+++ /dev/null
@@ -1,1964 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@grpc/grpc-js@^1.10.1":
- version "1.11.1"
- resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.11.1.tgz#a92f33e98f1959feffcd1b25a33b113d2c977b70"
- integrity sha512-gyt/WayZrVPH2w/UTLansS7F9Nwld472JxxaETamrM8HNlsa+jSLNyKAZmhxI2Me4c3mQHFiS1wWHDY1g1Kthw==
- dependencies:
- "@grpc/proto-loader" "^0.7.13"
- "@js-sdsl/ordered-map" "^4.4.2"
-
-"@grpc/proto-loader@^0.7.13":
- version "0.7.13"
- resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.13.tgz#f6a44b2b7c9f7b609f5748c6eac2d420e37670cf"
- integrity sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==
- dependencies:
- lodash.camelcase "^4.3.0"
- long "^5.0.0"
- protobufjs "^7.2.5"
- yargs "^17.7.2"
-
-"@isaacs/cliui@^8.0.2":
- version "8.0.2"
- resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
- integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
- dependencies:
- string-width "^5.1.2"
- string-width-cjs "npm:string-width@^4.2.0"
- strip-ansi "^7.0.1"
- strip-ansi-cjs "npm:strip-ansi@^6.0.1"
- wrap-ansi "^8.1.0"
- wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
-
-"@isaacs/string-locale-compare@^1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b"
- integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==
-
-"@js-sdsl/ordered-map@^4.4.2":
- version "4.4.2"
- resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c"
- integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==
-
-"@logdna/tail-file@^2.0.6":
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/@logdna/tail-file/-/tail-file-2.2.0.tgz#158a362d293f940dacfd07c835bf3ae2f9e0455a"
- integrity sha512-XGSsWDweP80Fks16lwkAUIr54ICyBs6PsI4mpfTLQaWgEJRtY9xEV+PeyDpJ+sJEGZxqINlpmAwe/6tS1pP8Ng==
-
-"@npmcli/agent@^2.0.0":
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.2.tgz#967604918e62f620a648c7975461c9c9e74fc5d5"
- integrity sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==
- dependencies:
- agent-base "^7.1.0"
- http-proxy-agent "^7.0.0"
- https-proxy-agent "^7.0.1"
- lru-cache "^10.0.1"
- socks-proxy-agent "^8.0.3"
-
-"@npmcli/arborist@^7.3.1":
- version "7.5.4"
- resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-7.5.4.tgz#3dd9e531d6464ef6715e964c188e0880c471ac9b"
- integrity sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g==
- dependencies:
- "@isaacs/string-locale-compare" "^1.1.0"
- "@npmcli/fs" "^3.1.1"
- "@npmcli/installed-package-contents" "^2.1.0"
- "@npmcli/map-workspaces" "^3.0.2"
- "@npmcli/metavuln-calculator" "^7.1.1"
- "@npmcli/name-from-folder" "^2.0.0"
- "@npmcli/node-gyp" "^3.0.0"
- "@npmcli/package-json" "^5.1.0"
- "@npmcli/query" "^3.1.0"
- "@npmcli/redact" "^2.0.0"
- "@npmcli/run-script" "^8.1.0"
- bin-links "^4.0.4"
- cacache "^18.0.3"
- common-ancestor-path "^1.0.1"
- hosted-git-info "^7.0.2"
- json-parse-even-better-errors "^3.0.2"
- json-stringify-nice "^1.1.4"
- lru-cache "^10.2.2"
- minimatch "^9.0.4"
- nopt "^7.2.1"
- npm-install-checks "^6.2.0"
- npm-package-arg "^11.0.2"
- npm-pick-manifest "^9.0.1"
- npm-registry-fetch "^17.0.1"
- pacote "^18.0.6"
- parse-conflict-json "^3.0.0"
- proc-log "^4.2.0"
- proggy "^2.0.0"
- promise-all-reject-late "^1.0.0"
- promise-call-limit "^3.0.1"
- read-package-json-fast "^3.0.2"
- semver "^7.3.7"
- ssri "^10.0.6"
- treeverse "^3.0.0"
- walk-up-path "^3.0.1"
-
-"@npmcli/fs@^3.1.0", "@npmcli/fs@^3.1.1":
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.1.tgz#59cdaa5adca95d135fc00f2bb53f5771575ce726"
- integrity sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==
- dependencies:
- semver "^7.3.5"
-
-"@npmcli/git@^5.0.0":
- version "5.0.8"
- resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-5.0.8.tgz#8ba3ff8724192d9ccb2735a2aa5380a992c5d3d1"
- integrity sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==
- dependencies:
- "@npmcli/promise-spawn" "^7.0.0"
- ini "^4.1.3"
- lru-cache "^10.0.1"
- npm-pick-manifest "^9.0.0"
- proc-log "^4.0.0"
- promise-inflight "^1.0.1"
- promise-retry "^2.0.1"
- semver "^7.3.5"
- which "^4.0.0"
-
-"@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.1.0":
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz#63048e5f6e40947a3a88dcbcb4fd9b76fdd37c17"
- integrity sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==
- dependencies:
- npm-bundled "^3.0.0"
- npm-normalize-package-bin "^3.0.0"
-
-"@npmcli/map-workspaces@^3.0.2":
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz#27dc06c20c35ef01e45a08909cab9cb3da08cea6"
- integrity sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==
- dependencies:
- "@npmcli/name-from-folder" "^2.0.0"
- glob "^10.2.2"
- minimatch "^9.0.0"
- read-package-json-fast "^3.0.0"
-
-"@npmcli/metavuln-calculator@^7.1.1":
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz#4d3b6c3192f72bc8ad59476de0da939c33877fcf"
- integrity sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g==
- dependencies:
- cacache "^18.0.0"
- json-parse-even-better-errors "^3.0.0"
- pacote "^18.0.0"
- proc-log "^4.1.0"
- semver "^7.3.5"
-
-"@npmcli/name-from-folder@^2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815"
- integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==
-
-"@npmcli/node-gyp@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a"
- integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==
-
-"@npmcli/package-json@^5.0.0", "@npmcli/package-json@^5.1.0":
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.2.0.tgz#a1429d3111c10044c7efbfb0fce9f2c501f4cfad"
- integrity sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==
- dependencies:
- "@npmcli/git" "^5.0.0"
- glob "^10.2.2"
- hosted-git-info "^7.0.0"
- json-parse-even-better-errors "^3.0.0"
- normalize-package-data "^6.0.0"
- proc-log "^4.0.0"
- semver "^7.5.3"
-
-"@npmcli/promise-spawn@^7.0.0":
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz#1d53d34ffeb5d151bfa8ec661bcccda8bbdfd532"
- integrity sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==
- dependencies:
- which "^4.0.0"
-
-"@npmcli/query@^3.1.0":
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.1.0.tgz#bc202c59e122a06cf8acab91c795edda2cdad42c"
- integrity sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ==
- dependencies:
- postcss-selector-parser "^6.0.10"
-
-"@npmcli/redact@^2.0.0":
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-2.0.1.tgz#95432fd566e63b35c04494621767a4312c316762"
- integrity sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==
-
-"@npmcli/run-script@^8.0.0", "@npmcli/run-script@^8.1.0":
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-8.1.0.tgz#a563e5e29b1ca4e648a6b1bbbfe7220b4bfe39fc"
- integrity sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==
- dependencies:
- "@npmcli/node-gyp" "^3.0.0"
- "@npmcli/package-json" "^5.0.0"
- "@npmcli/promise-spawn" "^7.0.0"
- node-gyp "^10.0.0"
- proc-log "^4.0.0"
- which "^4.0.0"
-
-"@opentelemetry/api-logs@0.55.0":
- version "0.55.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.55.0.tgz#5cd7461820d864600250deb3803c32367a6bb2d2"
- integrity sha512-3cpa+qI45VHYcA5c0bHM6VHo9gicv3p5mlLHNG3rLyjQU8b7e0st1rWtrUn3JbZ3DwwCfhKop4eQ9UuYlC6Pkg==
- dependencies:
- "@opentelemetry/api" "^1.3.0"
-
-"@opentelemetry/api@^1.3.0", "@opentelemetry/api@^1.9":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe"
- integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==
-
-"@opentelemetry/context-async-hooks@1.30.1":
- version "1.30.1"
- resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz#4f76280691a742597fd0bf682982126857622948"
- integrity sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==
-
-"@opentelemetry/core@1.30.1":
- version "1.30.1"
- resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.30.1.tgz#a0b468bb396358df801881709ea38299fc30ab27"
- integrity sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==
- dependencies:
- "@opentelemetry/semantic-conventions" "1.28.0"
-
-"@opentelemetry/exporter-zipkin@^1.28":
- version "1.30.1"
- resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.30.1.tgz#d96213a38d201ef2d50c3ba29faeb6e579f70e77"
- integrity sha512-6S2QIMJahIquvFaaxmcwpvQQRD/YFaMTNoIxrfPIPOeITN+a8lfEcPDxNxn8JDAaxkg+4EnXhz8upVDYenoQjA==
- dependencies:
- "@opentelemetry/core" "1.30.1"
- "@opentelemetry/resources" "1.30.1"
- "@opentelemetry/sdk-trace-base" "1.30.1"
- "@opentelemetry/semantic-conventions" "1.28.0"
-
-"@opentelemetry/instrumentation-grpc@^0.55":
- version "0.55.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.55.0.tgz#b5161359060999f7ccbef26d6550beef021572fa"
- integrity sha512-n2ZH4pRwOy0Vhag/3eKqiyDBwcpUnGgJI9iiIRX7vivE0FMncaLazWphNFezRRaM/LuKwq1TD8pVUvieP68mow==
- dependencies:
- "@opentelemetry/instrumentation" "0.55.0"
- "@opentelemetry/semantic-conventions" "1.27.0"
-
-"@opentelemetry/instrumentation@0.55.0", "@opentelemetry/instrumentation@^0.55":
- version "0.55.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.55.0.tgz#ecac8afd8706f6e99b3bb6951b9e07c4c81533f0"
- integrity sha512-YDCMlaQRZkziLL3t6TONRgmmGxDx6MyQDXRD0dknkkgUZtOK5+8MWft1OXzmNu6XfBOdT12MKN5rz+jHUkafKQ==
- dependencies:
- "@opentelemetry/api-logs" "0.55.0"
- "@types/shimmer" "^1.2.0"
- import-in-the-middle "^1.8.1"
- require-in-the-middle "^7.1.1"
- semver "^7.5.2"
- shimmer "^1.2.1"
-
-"@opentelemetry/propagator-b3@1.30.1":
- version "1.30.1"
- resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-b3/-/propagator-b3-1.30.1.tgz#b73321e5f30f062a9229887a4aa80c771107fdd2"
- integrity sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ==
- dependencies:
- "@opentelemetry/core" "1.30.1"
-
-"@opentelemetry/propagator-jaeger@1.30.1":
- version "1.30.1"
- resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.30.1.tgz#c06c9dacbe818b80cfb13c4dbf0b57df1ad26b71"
- integrity sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg==
- dependencies:
- "@opentelemetry/core" "1.30.1"
-
-"@opentelemetry/resources@1.30.1", "@opentelemetry/resources@^1.28":
- version "1.30.1"
- resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.30.1.tgz#a4eae17ebd96947fdc7a64f931ca4b71e18ce964"
- integrity sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==
- dependencies:
- "@opentelemetry/core" "1.30.1"
- "@opentelemetry/semantic-conventions" "1.28.0"
-
-"@opentelemetry/sdk-trace-base@1.30.1", "@opentelemetry/sdk-trace-base@^1.28":
- version "1.30.1"
- resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz#41a42234096dc98e8f454d24551fc80b816feb34"
- integrity sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==
- dependencies:
- "@opentelemetry/core" "1.30.1"
- "@opentelemetry/resources" "1.30.1"
- "@opentelemetry/semantic-conventions" "1.28.0"
-
-"@opentelemetry/sdk-trace-node@^1.28":
- version "1.30.1"
- resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.30.1.tgz#bd7d68fcfb4d4ae76ea09810df9668b7dd09a2e5"
- integrity sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ==
- dependencies:
- "@opentelemetry/context-async-hooks" "1.30.1"
- "@opentelemetry/core" "1.30.1"
- "@opentelemetry/propagator-b3" "1.30.1"
- "@opentelemetry/propagator-jaeger" "1.30.1"
- "@opentelemetry/sdk-trace-base" "1.30.1"
- semver "^7.5.2"
-
-"@opentelemetry/semantic-conventions@1.27.0":
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz#1a857dcc95a5ab30122e04417148211e6f945e6c"
- integrity sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==
-
-"@opentelemetry/semantic-conventions@1.28.0":
- version "1.28.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz#337fb2bca0453d0726696e745f50064411f646d6"
- integrity sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==
-
-"@pkgjs/parseargs@^0.11.0":
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
- integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
-
-"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
- integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==
-
-"@protobufjs/base64@^1.1.2":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735"
- integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==
-
-"@protobufjs/codegen@^2.0.4":
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb"
- integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==
-
-"@protobufjs/eventemitter@^1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70"
- integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==
-
-"@protobufjs/fetch@^1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45"
- integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==
- dependencies:
- "@protobufjs/aspromise" "^1.1.1"
- "@protobufjs/inquire" "^1.1.0"
-
-"@protobufjs/float@^1.0.2":
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1"
- integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==
-
-"@protobufjs/inquire@^1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089"
- integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==
-
-"@protobufjs/path@^1.1.2":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d"
- integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==
-
-"@protobufjs/pool@^1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54"
- integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==
-
-"@protobufjs/utf8@^1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
- integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==
-
-"@pulumi/pulumi@3.184.0":
- version "3.184.0"
- resolved "https://registry.yarnpkg.com/@pulumi/pulumi/-/pulumi-3.184.0.tgz#650831728ed5c22ff1eda36349af860fadc5c9d1"
- integrity sha512-hseyV9cDUcu6MgXnnuKibIx5DtZVjS0judMYQdy74vau8CCKIAoIJGoURaKIl0KCT8OuvaMCHS+iOG/8o8VSCg==
- dependencies:
- "@grpc/grpc-js" "^1.10.1"
- "@logdna/tail-file" "^2.0.6"
- "@npmcli/arborist" "^7.3.1"
- "@opentelemetry/api" "^1.9"
- "@opentelemetry/exporter-zipkin" "^1.28"
- "@opentelemetry/instrumentation" "^0.55"
- "@opentelemetry/instrumentation-grpc" "^0.55"
- "@opentelemetry/resources" "^1.28"
- "@opentelemetry/sdk-trace-base" "^1.28"
- "@opentelemetry/sdk-trace-node" "^1.28"
- "@types/google-protobuf" "^3.15.5"
- "@types/semver" "^7.5.6"
- "@types/tmp" "^0.2.6"
- execa "^5.1.0"
- fdir "^6.1.1"
- google-protobuf "^3.5.0"
- got "^11.8.6"
- ini "^2.0.0"
- js-yaml "^3.14.0"
- minimist "^1.2.6"
- normalize-package-data "^6.0.0"
- picomatch "^3.0.1"
- pkg-dir "^7.0.0"
- require-from-string "^2.0.1"
- semver "^7.5.2"
- source-map-support "^0.5.6"
- tmp "^0.2.1"
- upath "^1.1.0"
-
-"@sigstore/bundle@^2.3.2":
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.3.2.tgz#ad4dbb95d665405fd4a7a02c8a073dbd01e4e95e"
- integrity sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==
- dependencies:
- "@sigstore/protobuf-specs" "^0.3.2"
-
-"@sigstore/core@^1.0.0", "@sigstore/core@^1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-1.1.0.tgz#5583d8f7ffe599fa0a89f2bf289301a5af262380"
- integrity sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==
-
-"@sigstore/protobuf-specs@^0.3.2":
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz#5becf88e494a920f548d0163e2978f81b44b7d6f"
- integrity sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==
-
-"@sigstore/sign@^2.3.2":
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-2.3.2.tgz#d3d01e56d03af96fd5c3a9b9897516b1233fc1c4"
- integrity sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==
- dependencies:
- "@sigstore/bundle" "^2.3.2"
- "@sigstore/core" "^1.0.0"
- "@sigstore/protobuf-specs" "^0.3.2"
- make-fetch-happen "^13.0.1"
- proc-log "^4.2.0"
- promise-retry "^2.0.1"
-
-"@sigstore/tuf@^2.3.4":
- version "2.3.4"
- resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-2.3.4.tgz#da1d2a20144f3b87c0172920cbc8dcc7851ca27c"
- integrity sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==
- dependencies:
- "@sigstore/protobuf-specs" "^0.3.2"
- tuf-js "^2.2.1"
-
-"@sigstore/verify@^1.2.1":
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-1.2.1.tgz#c7e60241b432890dcb8bd8322427f6062ef819e1"
- integrity sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==
- dependencies:
- "@sigstore/bundle" "^2.3.2"
- "@sigstore/core" "^1.1.0"
- "@sigstore/protobuf-specs" "^0.3.2"
-
-"@sindresorhus/is@^4.0.0":
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
- integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
-
-"@szmarczak/http-timer@^4.0.5":
- version "4.0.6"
- resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
- integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
- dependencies:
- defer-to-connect "^2.0.0"
-
-"@tufjs/canonical-json@2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a"
- integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==
-
-"@tufjs/models@2.0.1":
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-2.0.1.tgz#e429714e753b6c2469af3212e7f320a6973c2812"
- integrity sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==
- dependencies:
- "@tufjs/canonical-json" "2.0.0"
- minimatch "^9.0.4"
-
-"@types/cacheable-request@^6.0.1":
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183"
- integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==
- dependencies:
- "@types/http-cache-semantics" "*"
- "@types/keyv" "^3.1.4"
- "@types/node" "*"
- "@types/responselike" "^1.0.0"
-
-"@types/google-protobuf@^3.15.5":
- version "3.15.12"
- resolved "https://registry.yarnpkg.com/@types/google-protobuf/-/google-protobuf-3.15.12.tgz#eb2ba0eddd65712211a2b455dc6071d665ccf49b"
- integrity sha512-40um9QqwHjRS92qnOaDpL7RmDK15NuZYo9HihiJRbYkMQZlWnuH8AdvbMy8/o6lgLmKbDUKa+OALCltHdbOTpQ==
-
-"@types/http-cache-semantics@*":
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4"
- integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==
-
-"@types/keyv@^3.1.4":
- version "3.1.4"
- resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
- integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==
- dependencies:
- "@types/node" "*"
-
-"@types/node@*", "@types/node@>=13.7.0":
- version "22.1.0"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-22.1.0.tgz#6d6adc648b5e03f0e83c78dc788c2b037d0ad94b"
- integrity sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==
- dependencies:
- undici-types "~6.13.0"
-
-"@types/node@^20.0.0":
- version "20.14.14"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.14.tgz#6b655d4a88623b0edb98300bb9dd2107225f885e"
- integrity sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==
- dependencies:
- undici-types "~5.26.4"
-
-"@types/responselike@^1.0.0":
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50"
- integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==
- dependencies:
- "@types/node" "*"
-
-"@types/semver@^7.5.6":
- version "7.5.8"
- resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e"
- integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==
-
-"@types/shimmer@^1.2.0":
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/@types/shimmer/-/shimmer-1.2.0.tgz#9b706af96fa06416828842397a70dfbbf1c14ded"
- integrity sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==
-
-"@types/tmp@^0.2.6":
- version "0.2.6"
- resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.6.tgz#d785ee90c52d7cc020e249c948c36f7b32d1e217"
- integrity sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==
-
-abbrev@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf"
- integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==
-
-acorn-import-attributes@^1.9.5:
- version "1.9.5"
- resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef"
- integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==
-
-acorn@^8.8.2:
- version "8.12.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248"
- integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==
-
-agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317"
- integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==
- dependencies:
- debug "^4.3.4"
-
-aggregate-error@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
- integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
- dependencies:
- clean-stack "^2.0.0"
- indent-string "^4.0.0"
-
-ansi-regex@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
- integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-
-ansi-regex@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
- integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
-
-ansi-styles@^4.0.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
- integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
- dependencies:
- color-convert "^2.0.1"
-
-ansi-styles@^6.1.0:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
- integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
-
-argparse@^1.0.7:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
- integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
- dependencies:
- sprintf-js "~1.0.2"
-
-balanced-match@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
- integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-
-bin-links@^4.0.4:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.4.tgz#c3565832b8e287c85f109a02a17027d152a58a63"
- integrity sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==
- dependencies:
- cmd-shim "^6.0.0"
- npm-normalize-package-bin "^3.0.0"
- read-cmd-shim "^4.0.0"
- write-file-atomic "^5.0.0"
-
-brace-expansion@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
- integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
- dependencies:
- balanced-match "^1.0.0"
-
-buffer-from@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
- integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
-
-cacache@^18.0.0, cacache@^18.0.3:
- version "18.0.4"
- resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.4.tgz#4601d7578dadb59c66044e157d02a3314682d6a5"
- integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==
- dependencies:
- "@npmcli/fs" "^3.1.0"
- fs-minipass "^3.0.0"
- glob "^10.2.2"
- lru-cache "^10.0.1"
- minipass "^7.0.3"
- minipass-collect "^2.0.1"
- minipass-flush "^1.0.5"
- minipass-pipeline "^1.2.4"
- p-map "^4.0.0"
- ssri "^10.0.0"
- tar "^6.1.11"
- unique-filename "^3.0.0"
-
-cacheable-lookup@^5.0.3:
- version "5.0.4"
- resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
- integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
-
-cacheable-request@^7.0.2:
- version "7.0.4"
- resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817"
- integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==
- dependencies:
- clone-response "^1.0.2"
- get-stream "^5.1.0"
- http-cache-semantics "^4.0.0"
- keyv "^4.0.0"
- lowercase-keys "^2.0.0"
- normalize-url "^6.0.1"
- responselike "^2.0.0"
-
-chownr@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
- integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
-
-cjs-module-lexer@^1.2.2:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz#c485341ae8fd999ca4ee5af2d7a1c9ae01e0099c"
- integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==
-
-clean-stack@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
- integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
-
-cliui@^8.0.1:
- version "8.0.1"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
- integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
- dependencies:
- string-width "^4.2.0"
- strip-ansi "^6.0.1"
- wrap-ansi "^7.0.0"
-
-clone-response@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3"
- integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==
- dependencies:
- mimic-response "^1.0.0"
-
-cmd-shim@^6.0.0:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.3.tgz#c491e9656594ba17ac83c4bd931590a9d6e26033"
- integrity sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==
-
-color-convert@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
- integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
- dependencies:
- color-name "~1.1.4"
-
-color-name@~1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
- integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-
-common-ancestor-path@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7"
- integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==
-
-cross-spawn@^7.0.0, cross-spawn@^7.0.3:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
- integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
- dependencies:
- path-key "^3.1.0"
- shebang-command "^2.0.0"
- which "^2.0.1"
-
-cssesc@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
- integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
-
-debug@4, debug@^4.3.4, debug@^4.3.5:
- version "4.3.6"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b"
- integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==
- dependencies:
- ms "2.1.2"
-
-decompress-response@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
- integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
- dependencies:
- mimic-response "^3.1.0"
-
-defer-to-connect@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
- integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
-
-eastasianwidth@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
- integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
-
-emoji-regex@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
- integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
-
-emoji-regex@^9.2.2:
- version "9.2.2"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
- integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
-
-encoding@^0.1.13:
- version "0.1.13"
- resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
- integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
- dependencies:
- iconv-lite "^0.6.2"
-
-end-of-stream@^1.1.0:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
- integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
- dependencies:
- once "^1.4.0"
-
-env-paths@^2.2.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
- integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
-
-err-code@^2.0.2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
- integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
-
-escalade@^3.1.1:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
- integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
-
-esprima@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
- integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-
-execa@^5.1.0:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
- integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
- dependencies:
- cross-spawn "^7.0.3"
- get-stream "^6.0.0"
- human-signals "^2.1.0"
- is-stream "^2.0.0"
- merge-stream "^2.0.0"
- npm-run-path "^4.0.1"
- onetime "^5.1.2"
- signal-exit "^3.0.3"
- strip-final-newline "^2.0.0"
-
-exponential-backoff@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6"
- integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==
-
-fdir@^6.1.1:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.2.0.tgz#9120f438d566ef3e808ca37864d9dd18e1a4f9b5"
- integrity sha512-9XaWcDl0riOX5j2kYfy0kKdg7skw3IY6kA4LFT8Tk2yF9UdrADUy8D6AJuBLtf7ISm/MksumwAHE3WVbMRyCLw==
-
-find-up@^6.3.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790"
- integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==
- dependencies:
- locate-path "^7.1.0"
- path-exists "^5.0.0"
-
-foreground-child@^3.1.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77"
- integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==
- dependencies:
- cross-spawn "^7.0.0"
- signal-exit "^4.0.1"
-
-fs-minipass@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
- integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
- dependencies:
- minipass "^3.0.0"
-
-fs-minipass@^3.0.0:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54"
- integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==
- dependencies:
- minipass "^7.0.3"
-
-function-bind@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
- integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
-
-get-caller-file@^2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
- integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-
-get-stream@^5.1.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
- integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
- dependencies:
- pump "^3.0.0"
-
-get-stream@^6.0.0:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
- integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
-
-glob@^10.2.2, glob@^10.3.10:
- version "10.4.5"
- resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956"
- integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==
- dependencies:
- foreground-child "^3.1.0"
- jackspeak "^3.1.2"
- minimatch "^9.0.4"
- minipass "^7.1.2"
- package-json-from-dist "^1.0.0"
- path-scurry "^1.11.1"
-
-google-protobuf@^3.5.0:
- version "3.21.4"
- resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.21.4.tgz#2f933e8b6e5e9f8edde66b7be0024b68f77da6c9"
- integrity sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==
-
-got@^11.8.6:
- version "11.8.6"
- resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
- integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
- dependencies:
- "@sindresorhus/is" "^4.0.0"
- "@szmarczak/http-timer" "^4.0.5"
- "@types/cacheable-request" "^6.0.1"
- "@types/responselike" "^1.0.0"
- cacheable-lookup "^5.0.3"
- cacheable-request "^7.0.2"
- decompress-response "^6.0.0"
- http2-wrapper "^1.0.0-beta.5.2"
- lowercase-keys "^2.0.0"
- p-cancelable "^2.0.0"
- responselike "^2.0.0"
-
-graceful-fs@^4.2.6:
- version "4.2.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
- integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
-
-hasown@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
- integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
- dependencies:
- function-bind "^1.1.2"
-
-hosted-git-info@^7.0.0, hosted-git-info@^7.0.2:
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17"
- integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==
- dependencies:
- lru-cache "^10.0.1"
-
-http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
- integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
-
-http-proxy-agent@^7.0.0:
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e"
- integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==
- dependencies:
- agent-base "^7.1.0"
- debug "^4.3.4"
-
-http2-wrapper@^1.0.0-beta.5.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
- integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
- dependencies:
- quick-lru "^5.1.1"
- resolve-alpn "^1.0.0"
-
-https-proxy-agent@^7.0.1:
- version "7.0.5"
- resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2"
- integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==
- dependencies:
- agent-base "^7.0.2"
- debug "4"
-
-human-signals@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
- integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
-
-iconv-lite@^0.6.2:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
- integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
- dependencies:
- safer-buffer ">= 2.1.2 < 3.0.0"
-
-ignore-walk@^6.0.4:
- version "6.0.5"
- resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.5.tgz#ef8d61eab7da169078723d1f82833b36e200b0dd"
- integrity sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==
- dependencies:
- minimatch "^9.0.0"
-
-import-in-the-middle@^1.8.1:
- version "1.11.0"
- resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.11.0.tgz#a94c4925b8da18256cde3b3b7b38253e6ca5e708"
- integrity sha512-5DimNQGoe0pLUHbR9qK84iWaWjjbsxiqXnw6Qz64+azRgleqv9k2kTt5fw7QsOpmaGYtuxxursnPPsnTKEx10Q==
- dependencies:
- acorn "^8.8.2"
- acorn-import-attributes "^1.9.5"
- cjs-module-lexer "^1.2.2"
- module-details-from-path "^1.0.3"
-
-imurmurhash@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
- integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
-
-indent-string@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
- integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
-
-ini@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5"
- integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==
-
-ini@^4.1.3:
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.3.tgz#4c359675a6071a46985eb39b14e4a2c0ec98a795"
- integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==
-
-ip-address@^9.0.5:
- version "9.0.5"
- resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a"
- integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==
- dependencies:
- jsbn "1.1.0"
- sprintf-js "^1.1.3"
-
-is-core-module@^2.13.0:
- version "2.15.0"
- resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.0.tgz#71c72ec5442ace7e76b306e9d48db361f22699ea"
- integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==
- dependencies:
- hasown "^2.0.2"
-
-is-fullwidth-code-point@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
- integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-
-is-lambda@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5"
- integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==
-
-is-stream@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
- integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
-
-isexe@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
- integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
-
-isexe@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d"
- integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==
-
-jackspeak@^3.1.2:
- version "3.4.3"
- resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a"
- integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==
- dependencies:
- "@isaacs/cliui" "^8.0.2"
- optionalDependencies:
- "@pkgjs/parseargs" "^0.11.0"
-
-js-yaml@^3.14.0:
- version "3.14.1"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
- integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
- dependencies:
- argparse "^1.0.7"
- esprima "^4.0.0"
-
-jsbn@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040"
- integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==
-
-json-buffer@3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
- integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
-
-json-parse-even-better-errors@^3.0.0, json-parse-even-better-errors@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz#b43d35e89c0f3be6b5fbbe9dc6c82467b30c28da"
- integrity sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==
-
-json-stringify-nice@^1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67"
- integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==
-
-jsonparse@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
- integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==
-
-just-diff-apply@^5.2.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f"
- integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==
-
-just-diff@^6.0.0:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285"
- integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==
-
-keyv@^4.0.0:
- version "4.5.4"
- resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
- integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
- dependencies:
- json-buffer "3.0.1"
-
-locate-path@^7.1.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a"
- integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==
- dependencies:
- p-locate "^6.0.0"
-
-lodash.camelcase@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
- integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==
-
-long@^5.0.0:
- version "5.2.3"
- resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1"
- integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==
-
-lowercase-keys@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
- integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
-
-lru-cache@^10.0.1, lru-cache@^10.2.0, lru-cache@^10.2.2:
- version "10.4.3"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119"
- integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==
-
-make-fetch-happen@^13.0.0, make-fetch-happen@^13.0.1:
- version "13.0.1"
- resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz#273ba2f78f45e1f3a6dca91cede87d9fa4821e36"
- integrity sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==
- dependencies:
- "@npmcli/agent" "^2.0.0"
- cacache "^18.0.0"
- http-cache-semantics "^4.1.1"
- is-lambda "^1.0.1"
- minipass "^7.0.2"
- minipass-fetch "^3.0.0"
- minipass-flush "^1.0.5"
- minipass-pipeline "^1.2.4"
- negotiator "^0.6.3"
- proc-log "^4.2.0"
- promise-retry "^2.0.1"
- ssri "^10.0.0"
-
-merge-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
- integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-
-mimic-fn@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
- integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-
-mimic-response@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
- integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
-
-mimic-response@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
- integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
-
-minimatch@^9.0.0, minimatch@^9.0.4:
- version "9.0.5"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
- integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
- dependencies:
- brace-expansion "^2.0.1"
-
-minimist@^1.2.6:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
- integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
-
-minipass-collect@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863"
- integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==
- dependencies:
- minipass "^7.0.3"
-
-minipass-fetch@^3.0.0:
- version "3.0.5"
- resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.5.tgz#f0f97e40580affc4a35cc4a1349f05ae36cb1e4c"
- integrity sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==
- dependencies:
- minipass "^7.0.3"
- minipass-sized "^1.0.3"
- minizlib "^2.1.2"
- optionalDependencies:
- encoding "^0.1.13"
-
-minipass-flush@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
- integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
- dependencies:
- minipass "^3.0.0"
-
-minipass-pipeline@^1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
- integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
- dependencies:
- minipass "^3.0.0"
-
-minipass-sized@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70"
- integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==
- dependencies:
- minipass "^3.0.0"
-
-minipass@^3.0.0:
- version "3.3.6"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
- integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
- dependencies:
- yallist "^4.0.0"
-
-minipass@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
- integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
-
-"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.1.2:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
- integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
-
-minizlib@^2.1.1, minizlib@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
- integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
- dependencies:
- minipass "^3.0.0"
- yallist "^4.0.0"
-
-mkdirp@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
- integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-
-module-details-from-path@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b"
- integrity sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==
-
-ms@2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
-negotiator@^0.6.3:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
- integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
-
-node-gyp@^10.0.0:
- version "10.2.0"
- resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.2.0.tgz#80101c4aa4f7ab225f13fcc8daaaac4eb1a8dd86"
- integrity sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==
- dependencies:
- env-paths "^2.2.0"
- exponential-backoff "^3.1.1"
- glob "^10.3.10"
- graceful-fs "^4.2.6"
- make-fetch-happen "^13.0.0"
- nopt "^7.0.0"
- proc-log "^4.1.0"
- semver "^7.3.5"
- tar "^6.2.1"
- which "^4.0.0"
-
-nopt@^7.0.0, nopt@^7.2.1:
- version "7.2.1"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7"
- integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==
- dependencies:
- abbrev "^2.0.0"
-
-normalize-package-data@^6.0.0:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506"
- integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==
- dependencies:
- hosted-git-info "^7.0.0"
- semver "^7.3.5"
- validate-npm-package-license "^3.0.4"
-
-normalize-url@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
- integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
-
-npm-bundled@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.1.tgz#cca73e15560237696254b10170d8f86dad62da25"
- integrity sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==
- dependencies:
- npm-normalize-package-bin "^3.0.0"
-
-npm-install-checks@^6.0.0, npm-install-checks@^6.2.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe"
- integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==
- dependencies:
- semver "^7.1.1"
-
-npm-normalize-package-bin@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832"
- integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==
-
-npm-package-arg@^11.0.0, npm-package-arg@^11.0.2:
- version "11.0.3"
- resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.3.tgz#dae0c21199a99feca39ee4bfb074df3adac87e2d"
- integrity sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==
- dependencies:
- hosted-git-info "^7.0.0"
- proc-log "^4.0.0"
- semver "^7.3.5"
- validate-npm-package-name "^5.0.0"
-
-npm-packlist@^8.0.0:
- version "8.0.2"
- resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-8.0.2.tgz#5b8d1d906d96d21c85ebbeed2cf54147477c8478"
- integrity sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==
- dependencies:
- ignore-walk "^6.0.4"
-
-npm-pick-manifest@^9.0.0, npm-pick-manifest@^9.0.1:
- version "9.1.0"
- resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz#83562afde52b0b07cb6244361788d319ce7e8636"
- integrity sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==
- dependencies:
- npm-install-checks "^6.0.0"
- npm-normalize-package-bin "^3.0.0"
- npm-package-arg "^11.0.0"
- semver "^7.3.5"
-
-npm-registry-fetch@^17.0.0, npm-registry-fetch@^17.0.1:
- version "17.1.0"
- resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz#fb69e8e762d456f08bda2f5f169f7638fb92beb1"
- integrity sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==
- dependencies:
- "@npmcli/redact" "^2.0.0"
- jsonparse "^1.3.1"
- make-fetch-happen "^13.0.0"
- minipass "^7.0.2"
- minipass-fetch "^3.0.0"
- minizlib "^2.1.2"
- npm-package-arg "^11.0.0"
- proc-log "^4.0.0"
-
-npm-run-path@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
- integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
- dependencies:
- path-key "^3.0.0"
-
-once@^1.3.1, once@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
- dependencies:
- wrappy "1"
-
-onetime@^5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
- integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
- dependencies:
- mimic-fn "^2.1.0"
-
-p-cancelable@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
- integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==
-
-p-limit@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644"
- integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==
- dependencies:
- yocto-queue "^1.0.0"
-
-p-locate@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f"
- integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==
- dependencies:
- p-limit "^4.0.0"
-
-p-map@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
- integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
- dependencies:
- aggregate-error "^3.0.0"
-
-package-json-from-dist@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00"
- integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==
-
-pacote@^18.0.0, pacote@^18.0.6:
- version "18.0.6"
- resolved "https://registry.yarnpkg.com/pacote/-/pacote-18.0.6.tgz#ac28495e24f4cf802ef911d792335e378e86fac7"
- integrity sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==
- dependencies:
- "@npmcli/git" "^5.0.0"
- "@npmcli/installed-package-contents" "^2.0.1"
- "@npmcli/package-json" "^5.1.0"
- "@npmcli/promise-spawn" "^7.0.0"
- "@npmcli/run-script" "^8.0.0"
- cacache "^18.0.0"
- fs-minipass "^3.0.0"
- minipass "^7.0.2"
- npm-package-arg "^11.0.0"
- npm-packlist "^8.0.0"
- npm-pick-manifest "^9.0.0"
- npm-registry-fetch "^17.0.0"
- proc-log "^4.0.0"
- promise-retry "^2.0.1"
- sigstore "^2.2.0"
- ssri "^10.0.0"
- tar "^6.1.11"
-
-parse-conflict-json@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c"
- integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==
- dependencies:
- json-parse-even-better-errors "^3.0.0"
- just-diff "^6.0.0"
- just-diff-apply "^5.2.0"
-
-path-exists@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7"
- integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==
-
-path-key@^3.0.0, path-key@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
- integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-
-path-parse@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
- integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
-
-path-scurry@^1.11.1:
- version "1.11.1"
- resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2"
- integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==
- dependencies:
- lru-cache "^10.2.0"
- minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
-
-picomatch@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-3.0.1.tgz#817033161def55ec9638567a2f3bbc876b3e7516"
- integrity sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==
-
-pkg-dir@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11"
- integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==
- dependencies:
- find-up "^6.3.0"
-
-postcss-selector-parser@^6.0.10:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz#5be94b277b8955904476a2400260002ce6c56e38"
- integrity sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==
- dependencies:
- cssesc "^3.0.0"
- util-deprecate "^1.0.2"
-
-proc-log@^4.0.0, proc-log@^4.1.0, proc-log@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034"
- integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==
-
-proggy@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/proggy/-/proggy-2.0.0.tgz#154bb0e41d3125b518ef6c79782455c2c47d94e1"
- integrity sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A==
-
-promise-all-reject-late@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2"
- integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==
-
-promise-call-limit@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-3.0.1.tgz#3570f7a3f2aaaf8e703623a552cd74749688cf19"
- integrity sha512-utl+0x8gIDasV5X+PI5qWEPqH6fJS0pFtQ/4gZ95xfEFb/89dmh+/b895TbFDBLiafBvxD/PGTKfvxl4kH/pQg==
-
-promise-inflight@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
- integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==
-
-promise-retry@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
- integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==
- dependencies:
- err-code "^2.0.2"
- retry "^0.12.0"
-
-protobufjs@^7.2.5:
- version "7.3.2"
- resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.3.2.tgz#60f3b7624968868f6f739430cfbc8c9370e26df4"
- integrity sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==
- dependencies:
- "@protobufjs/aspromise" "^1.1.2"
- "@protobufjs/base64" "^1.1.2"
- "@protobufjs/codegen" "^2.0.4"
- "@protobufjs/eventemitter" "^1.1.0"
- "@protobufjs/fetch" "^1.1.0"
- "@protobufjs/float" "^1.0.2"
- "@protobufjs/inquire" "^1.1.0"
- "@protobufjs/path" "^1.1.2"
- "@protobufjs/pool" "^1.1.0"
- "@protobufjs/utf8" "^1.1.0"
- "@types/node" ">=13.7.0"
- long "^5.0.0"
-
-pump@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
- integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.1"
-
-quick-lru@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
- integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
-
-read-cmd-shim@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb"
- integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==
-
-read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049"
- integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==
- dependencies:
- json-parse-even-better-errors "^3.0.0"
- npm-normalize-package-bin "^3.0.0"
-
-require-directory@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
- integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
-
-require-from-string@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
- integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
-
-require-in-the-middle@^7.1.1:
- version "7.4.0"
- resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-7.4.0.tgz#606977820d4b5f9be75e5a108ce34cfed25b3bb4"
- integrity sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ==
- dependencies:
- debug "^4.3.5"
- module-details-from-path "^1.0.3"
- resolve "^1.22.8"
-
-resolve-alpn@^1.0.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
- integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
-
-resolve@^1.22.8:
- version "1.22.8"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
- integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
- dependencies:
- is-core-module "^2.13.0"
- path-parse "^1.0.7"
- supports-preserve-symlinks-flag "^1.0.0"
-
-responselike@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc"
- integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==
- dependencies:
- lowercase-keys "^2.0.0"
-
-retry@^0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
- integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
-
-"safer-buffer@>= 2.1.2 < 3.0.0":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
- integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-semver@^7.1.1, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3:
- version "7.6.3"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
- integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
-
-shebang-command@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
- integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
- dependencies:
- shebang-regex "^3.0.0"
-
-shebang-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
- integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-
-shimmer@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337"
- integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==
-
-signal-exit@^3.0.3:
- version "3.0.7"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
- integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
-
-signal-exit@^4.0.1:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
- integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
-
-sigstore@^2.2.0:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-2.3.1.tgz#0755dd2cc4820f2e922506da54d3d628e13bfa39"
- integrity sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==
- dependencies:
- "@sigstore/bundle" "^2.3.2"
- "@sigstore/core" "^1.0.0"
- "@sigstore/protobuf-specs" "^0.3.2"
- "@sigstore/sign" "^2.3.2"
- "@sigstore/tuf" "^2.3.4"
- "@sigstore/verify" "^1.2.1"
-
-smart-buffer@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
- integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
-
-socks-proxy-agent@^8.0.3:
- version "8.0.4"
- resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz#9071dca17af95f483300316f4b063578fa0db08c"
- integrity sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==
- dependencies:
- agent-base "^7.1.1"
- debug "^4.3.4"
- socks "^2.8.3"
-
-socks@^2.8.3:
- version "2.8.3"
- resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5"
- integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==
- dependencies:
- ip-address "^9.0.5"
- smart-buffer "^4.2.0"
-
-source-map-support@^0.5.6:
- version "0.5.21"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
- integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
-source-map@^0.6.0:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-spdx-correct@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c"
- integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==
- dependencies:
- spdx-expression-parse "^3.0.0"
- spdx-license-ids "^3.0.0"
-
-spdx-exceptions@^2.1.0:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66"
- integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==
-
-spdx-expression-parse@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
- integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
- dependencies:
- spdx-exceptions "^2.1.0"
- spdx-license-ids "^3.0.0"
-
-spdx-license-ids@^3.0.0:
- version "3.0.18"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326"
- integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==
-
-sprintf-js@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a"
- integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==
-
-sprintf-js@~1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
- integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
-
-ssri@^10.0.0, ssri@^10.0.6:
- version "10.0.6"
- resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.6.tgz#a8aade2de60ba2bce8688e3fa349bad05c7dc1e5"
- integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==
- dependencies:
- minipass "^7.0.3"
-
-"string-width-cjs@npm:string-width@^4.2.0":
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
- integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
- dependencies:
- emoji-regex "^8.0.0"
- is-fullwidth-code-point "^3.0.0"
- strip-ansi "^6.0.1"
-
-string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
- integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
- dependencies:
- emoji-regex "^8.0.0"
- is-fullwidth-code-point "^3.0.0"
- strip-ansi "^6.0.1"
-
-string-width@^5.0.1, string-width@^5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
- integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
- dependencies:
- eastasianwidth "^0.2.0"
- emoji-regex "^9.2.2"
- strip-ansi "^7.0.1"
-
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
- integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
- dependencies:
- ansi-regex "^5.0.1"
-
-strip-ansi@^6.0.0, strip-ansi@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
- integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
- dependencies:
- ansi-regex "^5.0.1"
-
-strip-ansi@^7.0.1:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
- integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
- dependencies:
- ansi-regex "^6.0.1"
-
-strip-final-newline@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
- integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
-
-supports-preserve-symlinks-flag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
- integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
-
-tar@^6.1.11, tar@^6.2.1:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a"
- integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==
- dependencies:
- chownr "^2.0.0"
- fs-minipass "^2.0.0"
- minipass "^5.0.0"
- minizlib "^2.1.1"
- mkdirp "^1.0.3"
- yallist "^4.0.0"
-
-tmp@^0.2.1:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae"
- integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==
-
-treeverse@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8"
- integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==
-
-tuf-js@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-2.2.1.tgz#fdd8794b644af1a75c7aaa2b197ddffeb2911b56"
- integrity sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==
- dependencies:
- "@tufjs/models" "2.0.1"
- debug "^4.3.4"
- make-fetch-happen "^13.0.1"
-
-undici-types@~5.26.4:
- version "5.26.5"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
- integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
-
-undici-types@~6.13.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5"
- integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==
-
-unique-filename@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea"
- integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==
- dependencies:
- unique-slug "^4.0.0"
-
-unique-slug@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3"
- integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==
- dependencies:
- imurmurhash "^0.1.4"
-
-upath@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
- integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
-
-util-deprecate@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
- integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
-
-validate-npm-package-license@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
- integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
- dependencies:
- spdx-correct "^3.0.0"
- spdx-expression-parse "^3.0.0"
-
-validate-npm-package-name@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8"
- integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==
-
-walk-up-path@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886"
- integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==
-
-which@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
- integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
- dependencies:
- isexe "^2.0.0"
-
-which@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a"
- integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==
- dependencies:
- isexe "^3.1.1"
-
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
- integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
-
-wrap-ansi@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
- integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
-
-wrap-ansi@^8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
- integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
- dependencies:
- ansi-styles "^6.1.0"
- string-width "^5.0.1"
- strip-ansi "^7.0.1"
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
- integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
-
-write-file-atomic@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7"
- integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==
- dependencies:
- imurmurhash "^0.1.4"
- signal-exit "^4.0.1"
-
-y18n@^5.0.5:
- version "5.0.8"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
- integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
-
-yallist@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
- integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-
-yargs-parser@^21.1.1:
- version "21.1.1"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
- integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
-
-yargs@^17.7.2:
- version "17.7.2"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
- integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
- dependencies:
- cliui "^8.0.1"
- escalade "^3.1.1"
- get-caller-file "^2.0.5"
- require-directory "^2.1.1"
- string-width "^4.2.3"
- y18n "^5.0.5"
- yargs-parser "^21.1.1"
-
-yocto-queue@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110"
- integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==
diff --git a/examples/tests/config/Pulumi.yaml b/examples/tests/config/Pulumi.yaml
deleted file mode 100644
index 0e60a31..0000000
--- a/examples/tests/config/Pulumi.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-name: test-buildx-config
-runtime: nodejs
-description: A minimal TypeScript Pulumi program
diff --git a/examples/tests/config/index.ts b/examples/tests/config/index.ts
deleted file mode 100644
index f2c893e..0000000
--- a/examples/tests/config/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import * as buildx from "@pulumi/docker-build";
-
-new buildx.Provider("with-structured-config", {
- registries: [{ username: "foo", password: "bar", address: "docker.io" }],
-});
diff --git a/examples/tests/config/package.json b/examples/tests/config/package.json
deleted file mode 100644
index a2636d8..0000000
--- a/examples/tests/config/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "test-buildx-caching",
- "devDependencies": {
- "@types/node": "^20.0.0"
- },
- "dependencies": {
- "@pulumi/pulumi": "3.184.0"
- }
-}
diff --git a/examples/tests/dockerhub/.dockerignore b/examples/tests/dockerhub/.dockerignore
deleted file mode 100644
index 72e8ffc..0000000
--- a/examples/tests/dockerhub/.dockerignore
+++ /dev/null
@@ -1 +0,0 @@
-*
diff --git a/examples/tests/dockerhub/Pulumi.yaml b/examples/tests/dockerhub/Pulumi.yaml
deleted file mode 100644
index 1670a8b..0000000
--- a/examples/tests/dockerhub/Pulumi.yaml
+++ /dev/null
@@ -1,34 +0,0 @@
-name: dockerhub
-description: Push to DockerHub with caching
-runtime: yaml
-plugins:
- providers:
- - name: docker-build
- path: ../../../bin
-outputs:
- ref: ${my-image.ref}
-resources:
- my-image:
- type: docker-build:Image
- properties:
- tags:
- - docker.io/pulumibot/buildkit-e2e
- push: true
- context:
- location: .
- dockerfile:
- inline: FROM alpine
- cacheFrom:
- - registry:
- ref: docker.io/pulumibot/buildkit-e2e:cache
- cacheTo:
- - registry:
- ref: docker.io/pulumibot/buildkit-e2e:cache
- registries:
- - username: pulumibot
- address: docker.io
- password: ${dockerHubPassword}
-config:
- dockerHubPassword:
- type: string
- secret: true
diff --git a/examples/tests/ecr/.dockerignore b/examples/tests/ecr/.dockerignore
deleted file mode 100644
index 72e8ffc..0000000
--- a/examples/tests/ecr/.dockerignore
+++ /dev/null
@@ -1 +0,0 @@
-*
diff --git a/examples/tests/ecr/Pulumi.yaml b/examples/tests/ecr/Pulumi.yaml
deleted file mode 100644
index 5499c2e..0000000
--- a/examples/tests/ecr/Pulumi.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
-name: ecr
-description: Push to AWS ECR with caching
-runtime: yaml
-plugins:
- providers:
- - name: docker-build
- path: ../../../bin
-outputs:
- ref: ${my-image.ref}
-resources:
- ecr-repository:
- type: aws:ecr:Repository
- properties:
- forceDelete: true
- my-image:
- type: docker-build:Image
- properties:
- tags:
- - ${ecr-repository.repositoryUrl}:latest
- push: true
- context:
- location: .
- dockerfile:
- inline: FROM alpine
- cacheFrom:
- - registry:
- ref: ${ecr-repository.repositoryUrl}:cache
- cacheTo:
- - registry:
- ref: ${ecr-repository.repositoryUrl}:cache
- imageManifest: true
- ociMediaTypes: true
- registries:
- - username: ${auth-token.userName}
- password: ${auth-token.password}
- address: ${ecr-repository.repositoryUrl}
-variables:
- auth-token:
- fn::aws:ecr:getAuthorizationToken:
- registryId: ${ecr-repository.registryId}
diff --git a/examples/tests/unauthenticated/.dockerignore b/examples/tests/unauthenticated/.dockerignore
deleted file mode 100644
index 72e8ffc..0000000
--- a/examples/tests/unauthenticated/.dockerignore
+++ /dev/null
@@ -1 +0,0 @@
-*
diff --git a/examples/tests/unauthenticated/Pulumi.yaml b/examples/tests/unauthenticated/Pulumi.yaml
deleted file mode 100644
index 024f5a0..0000000
--- a/examples/tests/unauthenticated/Pulumi.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-name: dockerhub-unauthenticated
-description: Pull an image from Dockerhub without credentials
-runtime: yaml
-plugins:
- providers:
- - name: docker-build
- path: ../../../bin
-resources:
- my-image:
- type: docker-build:Image
- properties:
- tags:
- - alpine-local
- load: true
- push: false
- context:
- location: .
- dockerfile:
- inline: FROM alpine
diff --git a/examples/upgrade-node/Pulumi.yaml b/examples/upgrade-node/Pulumi.yaml
deleted file mode 100644
index e5ddad5..0000000
--- a/examples/upgrade-node/Pulumi.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-name: provider-docker-build
-runtime: nodejs
-plugins:
- providers:
- - name: docker-build
- path: ../../bin
diff --git a/examples/upgrade-node/index.ts b/examples/upgrade-node/index.ts
deleted file mode 100644
index 593cec8..0000000
--- a/examples/upgrade-node/index.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import * as pulumi from "@pulumi/pulumi";
-import * as docker_build from "@pulumi/docker-build";
-
-const inline = new docker_build.Image("inline", {
- push: false,
- dockerfile: {
- inline: `FROM alpine
-RUN echo "This uses an inline Dockerfile! 👍"
-`,
- },
-});
diff --git a/examples/upgrade-node/package.json b/examples/upgrade-node/package.json
deleted file mode 100644
index 21cd5ea..0000000
--- a/examples/upgrade-node/package.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "name": "provider-docker-build",
- "devDependencies": {
- "@types/node": "^18"
- },
- "dependencies": {
- "typescript": "^4.0.0",
- "@pulumi/pulumi": "3.184.0"
- }
-}
diff --git a/examples/upgrade-node/tsconfig.json b/examples/upgrade-node/tsconfig.json
deleted file mode 100644
index 11fc69a..0000000
--- a/examples/upgrade-node/tsconfig.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "compilerOptions": {
- "strict": true,
- "outDir": "bin",
- "target": "es2016",
- "module": "commonjs",
- "moduleResolution": "node",
- "sourceMap": true,
- "experimentalDecorators": true,
- "pretty": true,
- "noFallthroughCasesInSwitch": true,
- "noImplicitReturns": true,
- "forceConsistentCasingInFileNames": true
- },
- "files": [
- "index.ts",
- ]
-}
\ No newline at end of file
diff --git a/examples/upgrade/Pulumi.yaml b/examples/upgrade/Pulumi.yaml
deleted file mode 100644
index e82a531..0000000
--- a/examples/upgrade/Pulumi.yaml
+++ /dev/null
@@ -1,183 +0,0 @@
-name: provider-docker-build
-runtime: yaml
-
-resources:
- # docker buildx build -f app/Dockerfile.multiPlatform --platform plan9/amd64,plan9/386 app
- multiPlatform:
- type: docker-build:Image
- properties:
- push: false
- dockerfile:
- location: "./app/Dockerfile.multiPlatform"
- context:
- location: "./app"
- platforms:
- - plan9/amd64
- - plan9/386
-
- # docker buildx build --output=type=registry app
- registryPush:
- type: docker-build:Image
- properties:
- push: false
- context:
- location: "./app"
- tags: ["docker.io/pulumibot/buildkit-e2e:example"]
- exports:
- - registry:
- ociMediaTypes: true
- push: false # Omit this to actually push images.
-
- # docker buildx build --cache-to=type=local,dest=tmp/cache,mode=max --cache-from=type=local,src=tmp/cache app
- cached:
- type: docker-build:Image
- properties:
- push: false
- context:
- location: "./app"
- cacheTo:
- - local:
- dest: tmp/cache
- mode: max
- cacheFrom:
- - local:
- src: tmp/cache
-
- # docker buildx build -f app/Dockerfile.buildArgs --build-arg SET_ME_TO_TRUE=true app
- buildArgs:
- type: docker-build:Image
- properties:
- push: false
- dockerfile:
- location: "./app/Dockerfile.buildArgs"
- context:
- location: "./app"
- buildArgs:
- SET_ME_TO_TRUE: "true"
-
- # docker buildx build -f app/Dockerfile.extraHosts --add-host metadata.google.internal:169.254.169.254 app
- extraHosts:
- type: docker-build:Image
- properties:
- push: false
- dockerfile:
- location: "./app/Dockerfile.extraHosts"
- context:
- location: "./app"
- addHosts:
- - "metadata.google.internal:169.254.169.254"
-
- # docker buildx build -f app/Dockerfile.sshMount --ssh default app
- sshMount:
- type: docker-build:Image
- properties:
- push: false
- dockerfile:
- location: "./app/Dockerfile.sshMount"
- context:
- location: "./app"
- ssh:
- - id: default
-
- # PASSWORD=hunter2 docker buildx build -f app/Dockerfile.secrets --secret id=password,env=PASSWORD app
- secrets:
- type: docker-build:Image
- properties:
- push: false
- dockerfile:
- location: "./app/Dockerfile.secrets"
- context:
- location: "./app"
- secrets:
- password: hunter2
-
- # docker buildx build --label "description=This image will get a descriptive label 👍" app
- labels:
- type: docker-build:Image
- properties:
- push: false
- context:
- location: "./app"
- labels:
- description: "This image will get a descriptive label 👍"
-
- # docker buildx build -f app/Dockerfile.target --target build-me app
- target:
- type: docker-build:Image
- properties:
- push: false
- dockerfile:
- location: "./app/Dockerfile.target"
- context:
- location: "./app"
- target: "build-me"
-
- # docker buildx build -f app/Dockerfile.namedContexts \
- # --build-context golang:latest=docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984 app
- namedContexts:
- type: docker-build:Image
- properties:
- push: false
- dockerfile:
- location: "./app/Dockerfile.namedContexts"
- context:
- location: "./app"
- named:
- "golang:latest":
- location: "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"
-
- # docker buildx build https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile
- remoteContext:
- type: docker-build:Image
- properties:
- push: false
- context:
- location: "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"
-
- # docker buildx build -f - https://github.com/docker-library/hello-world.git < buildplatform
-RUN echo ${TARGETPLATFORM} > targetplatform
-
-FROM build
-RUN cat buildplatform
-RUN cat targetplatform
diff --git a/examples/upgrade/app/Dockerfile.namedContexts b/examples/upgrade/app/Dockerfile.namedContexts
deleted file mode 100644
index 6e53dba..0000000
--- a/examples/upgrade/app/Dockerfile.namedContexts
+++ /dev/null
@@ -1,5 +0,0 @@
-# syntax=docker/dockerfile:1.4
-FROM golang:latest
-
-RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
-RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
diff --git a/examples/upgrade/app/Dockerfile.secrets b/examples/upgrade/app/Dockerfile.secrets
deleted file mode 100644
index 513bbd2..0000000
--- a/examples/upgrade/app/Dockerfile.secrets
+++ /dev/null
@@ -1,4 +0,0 @@
-FROM alpine
-
-RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
-
diff --git a/examples/upgrade/app/Dockerfile.sshMount b/examples/upgrade/app/Dockerfile.sshMount
deleted file mode 100644
index 055cb78..0000000
--- a/examples/upgrade/app/Dockerfile.sshMount
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM alpine
-
-RUN apk add openssh-client
-
-RUN --mount=type=ssh ssh-add -l
diff --git a/examples/upgrade/app/Dockerfile.target b/examples/upgrade/app/Dockerfile.target
deleted file mode 100644
index 7cddec7..0000000
--- a/examples/upgrade/app/Dockerfile.target
+++ /dev/null
@@ -1,8 +0,0 @@
-FROM alpine as build-me
-RUN echo 👍
-
-FROM build-me as also-build-me
-RUN echo 🤙
-
-FROM build-me as dont-build-me
-RUN [ "true" = "false" ]
diff --git a/examples/yaml/.dockerignore b/examples/yaml/.dockerignore
deleted file mode 100644
index 37ffae4..0000000
--- a/examples/yaml/.dockerignore
+++ /dev/null
@@ -1,2 +0,0 @@
-command-output
-tmp
diff --git a/examples/yaml/Pulumi.yaml b/examples/yaml/Pulumi.yaml
deleted file mode 100644
index b58fe60..0000000
--- a/examples/yaml/Pulumi.yaml
+++ /dev/null
@@ -1,193 +0,0 @@
-name: provider-docker-build
-runtime: yaml
-plugins:
- providers:
- - name: docker-build
- path: ../../bin
-
-resources:
- # docker buildx build -f app/Dockerfile.multiPlatform --platform plan9/amd64,plan9/386 app
- multiPlatform:
- type: docker-build:Image
- properties:
- push: false
- dockerfile:
- location: "./app/Dockerfile.multiPlatform"
- context:
- location: "./app"
- platforms:
- - plan9/amd64
- - plan9/386
-
- # docker buildx build --output=type=registry app
- registryPush:
- type: docker-build:Image
- properties:
- push: false
- context:
- location: "./app"
- tags: ["docker.io/pulumibot/buildkit-e2e:example"]
- exports:
- - registry:
- ociMediaTypes: true
- push: false # Omit this to actually push images.
- registries:
- - address: docker.io
- username: pulumibot
- password: ${dockerHubPassword}
-
- # docker buildx build --cache-to=type=local,dest=tmp/cache,mode=max --cache-from=type=local,src=tmp/cache app
- cached:
- type: docker-build:Image
- properties:
- push: false
- context:
- location: "./app"
- cacheTo:
- - local:
- dest: tmp/cache
- mode: max
- cacheFrom:
- - local:
- src: tmp/cache
-
- # docker buildx build -f app/Dockerfile.buildArgs --build-arg SET_ME_TO_TRUE=true app
- buildArgs:
- type: docker-build:Image
- properties:
- push: false
- dockerfile:
- location: "./app/Dockerfile.buildArgs"
- context:
- location: "./app"
- buildArgs:
- SET_ME_TO_TRUE: "true"
-
- # docker buildx build -f app/Dockerfile.extraHosts --add-host metadata.google.internal:169.254.169.254 app
- extraHosts:
- type: docker-build:Image
- properties:
- push: false
- dockerfile:
- location: "./app/Dockerfile.extraHosts"
- context:
- location: "./app"
- addHosts:
- - "metadata.google.internal:169.254.169.254"
-
- # docker buildx build -f app/Dockerfile.sshMount --ssh default app
- sshMount:
- type: docker-build:Image
- properties:
- push: false
- dockerfile:
- location: "./app/Dockerfile.sshMount"
- context:
- location: "./app"
- ssh:
- - id: default
-
- # PASSWORD=hunter2 docker buildx build -f app/Dockerfile.secrets --secret id=password,env=PASSWORD app
- secrets:
- type: docker-build:Image
- properties:
- push: false
- dockerfile:
- location: "./app/Dockerfile.secrets"
- context:
- location: "./app"
- secrets:
- password: hunter2
-
- # docker buildx build --label "description=This image will get a descriptive label 👍" app
- labels:
- type: docker-build:Image
- properties:
- push: false
- context:
- location: "./app"
- labels:
- description: "This image will get a descriptive label 👍"
-
- # docker buildx build -f app/Dockerfile.target --target build-me app
- target:
- type: docker-build:Image
- properties:
- push: false
- dockerfile:
- location: "./app/Dockerfile.target"
- context:
- location: "./app"
- target: "build-me"
-
- # docker buildx build -f app/Dockerfile.namedContexts \
- # --build-context golang:latest=docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984 app
- namedContexts:
- type: docker-build:Image
- properties:
- push: false
- dockerfile:
- location: "./app/Dockerfile.namedContexts"
- context:
- location: "./app"
- named:
- "golang:latest":
- location: "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"
-
- # docker buildx build https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile
- remoteContext:
- type: docker-build:Image
- properties:
- push: false
- context:
- location: "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"
-
- # docker buildx build -f - https://github.com/docker-library/hello-world.git < buildplatform
-RUN echo ${TARGETPLATFORM} > targetplatform
-
-FROM build
-RUN cat buildplatform
-RUN cat targetplatform
diff --git a/examples/yaml/app/Dockerfile.namedContexts b/examples/yaml/app/Dockerfile.namedContexts
deleted file mode 100644
index 6e53dba..0000000
--- a/examples/yaml/app/Dockerfile.namedContexts
+++ /dev/null
@@ -1,5 +0,0 @@
-# syntax=docker/dockerfile:1.4
-FROM golang:latest
-
-RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
-RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
diff --git a/examples/yaml/app/Dockerfile.secrets b/examples/yaml/app/Dockerfile.secrets
deleted file mode 100644
index 513bbd2..0000000
--- a/examples/yaml/app/Dockerfile.secrets
+++ /dev/null
@@ -1,4 +0,0 @@
-FROM alpine
-
-RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
-
diff --git a/examples/yaml/app/Dockerfile.sshMount b/examples/yaml/app/Dockerfile.sshMount
deleted file mode 100644
index 055cb78..0000000
--- a/examples/yaml/app/Dockerfile.sshMount
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM alpine
-
-RUN apk add openssh-client
-
-RUN --mount=type=ssh ssh-add -l
diff --git a/examples/yaml/app/Dockerfile.target b/examples/yaml/app/Dockerfile.target
deleted file mode 100644
index 7cddec7..0000000
--- a/examples/yaml/app/Dockerfile.target
+++ /dev/null
@@ -1,8 +0,0 @@
-FROM alpine as build-me
-RUN echo 👍
-
-FROM build-me as also-build-me
-RUN echo 🤙
-
-FROM build-me as dont-build-me
-RUN [ "true" = "false" ]
diff --git a/examples/yaml_test.go b/examples/yaml_test.go
deleted file mode 100644
index 3b8cc5b..0000000
--- a/examples/yaml_test.go
+++ /dev/null
@@ -1,90 +0,0 @@
-//go:build yaml || all
-// +build yaml all
-
-package examples
-
-import (
- "os"
- "path"
- "testing"
-
- "github.com/pulumi/providertest"
- "github.com/pulumi/providertest/providers"
- "github.com/pulumi/providertest/pulumitest"
- "github.com/pulumi/providertest/pulumitest/assertpreview"
- "github.com/pulumi/providertest/pulumitest/opttest"
- "github.com/pulumi/pulumi-docker-build/provider"
- "github.com/pulumi/pulumi/pkg/v3/testing/integration"
- pulumirpc "github.com/pulumi/pulumi/sdk/v3/proto/go"
- "github.com/stretchr/testify/require"
-)
-
-func TestYAMLExample(t *testing.T) {
- cwd, err := os.Getwd()
- require.NoError(t, err)
-
- test := integration.ProgramTestOptions{
- Dir: path.Join(cwd, "yaml"),
- Secrets: map[string]string{
- "dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
- },
- }
-
- integration.ProgramTest(t, &test)
-}
-
-func TestYAMLExampleUpgrade(t *testing.T) {
- pt := pulumitest.NewPulumiTest(t, "upgrade",
- opttest.AttachProviderServer("docker-build", providerServerFactory))
- previewResult := providertest.PreviewProviderUpgrade(t, pt, "docker-build", "0.0.1")
-
- assertpreview.HasNoChanges(t, previewResult)
-}
-
-func providerServerFactory(pt providers.PulumiTest) (pulumirpc.ResourceProviderServer, error) {
- return provider.New(nil)
-}
-
-func TestECR(t *testing.T) {
- if os.Getenv("AWS_SESSION_TOKEN") == "" {
- t.Skip("Missing AWS credentials")
- }
-
- cwd, err := os.Getwd()
- require.NoError(t, err)
-
- test := integration.ProgramTestOptions{
- Dir: path.Join(cwd, "tests/ecr"),
- }
-
- integration.ProgramTest(t, &test)
-}
-
-func TestDockerHub(t *testing.T) {
- if os.Getenv("DOCKER_HUB_PASSWORD") == "" {
- t.Skip("Missing DockerHub credentials")
- }
-
- cwd, err := os.Getwd()
- require.NoError(t, err)
-
- test := integration.ProgramTestOptions{
- Dir: path.Join(cwd, "tests/dockerhub"),
- Secrets: map[string]string{
- "dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
- },
- }
-
- integration.ProgramTest(t, &test)
-}
-
-func TestDockerHubUnauthenticated(t *testing.T) {
- cwd, err := os.Getwd()
- require.NoError(t, err)
-
- test := integration.ProgramTestOptions{
- Dir: path.Join(cwd, "tests/unauthenticated"),
- }
-
- integration.ProgramTest(t, &test)
-}
diff --git a/go.mod b/go.mod
deleted file mode 100644
index 095f8cc..0000000
--- a/go.mod
+++ /dev/null
@@ -1,496 +0,0 @@
-module github.com/pulumi/pulumi-docker-build
-
-go 1.24.1
-
-require (
- github.com/aws/aws-sdk-go v1.55.5
- github.com/blang/semver v3.5.1+incompatible
- github.com/distribution/reference v0.6.0
- github.com/docker/buildx v0.22.0
- github.com/docker/cli v28.0.4+incompatible
- github.com/docker/docker v28.0.1+incompatible
- github.com/golangci/golangci-lint v1.59.1
- github.com/moby/buildkit v0.20.1
- github.com/moby/patternmatcher v0.6.0
- github.com/muesli/reflow v0.3.0
- github.com/otiai10/copy v1.14.0
- github.com/pulumi/providertest v0.3.1
- github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet/v3 v3.0.0-20250806132441-44ca9a522cef
- github.com/pulumi/pulumi-go-provider v1.1.2
- github.com/pulumi/pulumi-java/pkg v1.16.0
- github.com/pulumi/pulumi-yaml v1.21.2
- github.com/pulumi/pulumi/pkg/v3 v3.192.0
- github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3 v3.0.0-20250806165243-bee5e4fa4815
- github.com/pulumi/pulumi/sdk/nodejs/cmd/pulumi-language-nodejs/v3 v3.0.0-20250806165243-bee5e4fa4815
- github.com/pulumi/pulumi/sdk/python/cmd/pulumi-language-python/v3 v3.0.0-20250806165243-bee5e4fa4815
- github.com/pulumi/pulumi/sdk/v3 v3.192.0
- github.com/regclient/regclient v0.7.1
- github.com/sirupsen/logrus v1.9.3
- github.com/spf13/afero v1.14.0
- github.com/stretchr/testify v1.10.0
- github.com/tonistiigi/fsutil v0.0.0-20250113203817-b14e27f4135a
- github.com/tonistiigi/go-csvvalue v0.0.0-20240710180619-ddb21b71c0b4
- go.opentelemetry.io/otel/metric v1.36.0
- go.opentelemetry.io/otel/sdk v1.36.0
- go.opentelemetry.io/otel/trace v1.36.0
- go.uber.org/mock v0.5.2
- golang.org/x/crypto v0.39.0
- golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0
- google.golang.org/protobuf v1.36.6
- gopkg.in/yaml.v3 v3.0.1
-)
-
-require (
- 4d63.com/gocheckcompilerdirectives v1.2.1 // indirect
- 4d63.com/gochecknoglobals v0.2.1 // indirect
- cloud.google.com/go v0.112.1 // indirect
- cloud.google.com/go/compute/metadata v0.6.0 // indirect
- cloud.google.com/go/iam v1.1.6 // indirect
- cloud.google.com/go/kms v1.15.7 // indirect
- cloud.google.com/go/logging v1.9.0 // indirect
- cloud.google.com/go/longrunning v0.5.5 // indirect
- cloud.google.com/go/storage v1.39.1 // indirect
- dario.cat/mergo v1.0.1 // indirect
- github.com/4meepo/tagalign v1.3.4 // indirect
- github.com/Abirdcfly/dupword v0.0.14 // indirect
- github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 // indirect
- github.com/AlecAivazis/survey/v2 v2.3.7 // indirect
- github.com/Antonboom/errname v0.1.13 // indirect
- github.com/Antonboom/nilnil v0.1.9 // indirect
- github.com/Antonboom/testifylint v1.3.1 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0 // indirect
- github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
- github.com/Azure/go-autorest v14.2.0+incompatible // indirect
- github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect
- github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3 // indirect
- github.com/BurntSushi/toml v1.5.0 // indirect
- github.com/Crocmagnon/fatcontext v0.2.2 // indirect
- github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 // indirect
- github.com/GaijinEntertainment/go-exhaustruct/v3 v3.2.0 // indirect
- github.com/Masterminds/semver/v3 v3.2.1 // indirect
- github.com/Microsoft/go-winio v0.6.2 // indirect
- github.com/OpenPeeDeeP/depguard/v2 v2.2.0 // indirect
- github.com/ProtonMail/go-crypto v1.2.0 // indirect
- github.com/agext/levenshtein v1.2.3 // indirect
- github.com/alecthomas/chroma v0.10.0 // indirect
- github.com/alecthomas/chroma/v2 v2.13.0 // indirect
- github.com/alecthomas/go-check-sumtype v0.1.4 // indirect
- github.com/alexkohler/nakedret/v2 v2.0.4 // indirect
- github.com/alexkohler/prealloc v1.0.0 // indirect
- github.com/alingse/asasalint v0.0.11 // indirect
- github.com/apparentlymart/go-cidr v1.0.1 // indirect
- github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
- github.com/ashanbrown/forbidigo v1.6.0 // indirect
- github.com/ashanbrown/makezero v1.1.1 // indirect
- github.com/atotto/clipboard v0.1.4 // indirect
- github.com/aws/aws-sdk-go-v2 v1.30.3 // indirect
- github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3 // indirect
- github.com/aws/aws-sdk-go-v2/config v1.27.27 // indirect
- github.com/aws/aws-sdk-go-v2/credentials v1.17.27 // indirect
- github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 // indirect
- github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.8 // indirect
- github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 // indirect
- github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 // indirect
- github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
- github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.15 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.17 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15 // indirect
- github.com/aws/aws-sdk-go-v2/service/kms v1.30.1 // indirect
- github.com/aws/aws-sdk-go-v2/service/s3 v1.58.2 // indirect
- github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 // indirect
- github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 // indirect
- github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 // indirect
- github.com/aws/smithy-go v1.20.3 // indirect
- github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
- github.com/aymerick/douceur v0.2.0 // indirect
- github.com/beorn7/perks v1.0.1 // indirect
- github.com/bkielbasa/cyclop v1.2.1 // indirect
- github.com/blizzy78/varnamelen v0.8.0 // indirect
- github.com/bombsimon/wsl/v4 v4.2.1 // indirect
- github.com/breml/bidichk v0.2.7 // indirect
- github.com/breml/errchkjson v0.3.6 // indirect
- github.com/butuzov/ireturn v0.3.0 // indirect
- github.com/butuzov/mirror v1.2.0 // indirect
- github.com/catenacyber/perfsprint v0.7.1 // indirect
- github.com/ccojocar/zxcvbn-go v1.0.2 // indirect
- github.com/cenkalti/backoff/v3 v3.2.2 // indirect
- github.com/cenkalti/backoff/v4 v4.3.0 // indirect
- github.com/cenkalti/backoff/v5 v5.0.2 // indirect
- github.com/cespare/xxhash/v2 v2.3.0 // indirect
- github.com/charithe/durationcheck v0.0.10 // indirect
- github.com/charmbracelet/bubbles v0.21.0 // indirect
- github.com/charmbracelet/bubbletea v1.3.4 // indirect
- github.com/charmbracelet/colorprofile v0.3.0 // indirect
- github.com/charmbracelet/glamour v0.6.0 // indirect
- github.com/charmbracelet/lipgloss v1.1.0 // indirect
- github.com/charmbracelet/x/ansi v0.8.0 // indirect
- github.com/charmbracelet/x/cellbuf v0.0.13 // indirect
- github.com/charmbracelet/x/term v0.2.1 // indirect
- github.com/chavacava/garif v0.1.0 // indirect
- github.com/cheggaaa/pb v1.0.29 // indirect
- github.com/ckaznocha/intrange v0.1.2 // indirect
- github.com/cloudflare/circl v1.6.1 // indirect
- github.com/compose-spec/compose-go/v2 v2.4.8 // indirect
- github.com/containerd/console v1.0.4 // indirect
- github.com/containerd/containerd/api v1.8.0 // indirect
- github.com/containerd/containerd/v2 v2.0.3 // indirect
- github.com/containerd/continuity v0.4.5 // indirect
- github.com/containerd/errdefs v1.0.0 // indirect
- github.com/containerd/errdefs/pkg v0.3.0 // indirect
- github.com/containerd/log v0.1.0 // indirect
- github.com/containerd/platforms v1.0.0-rc.1 // indirect
- github.com/containerd/ttrpc v1.2.7 // indirect
- github.com/containerd/typeurl/v2 v2.2.3 // indirect
- github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect
- github.com/curioswitch/go-reassign v0.2.0 // indirect
- github.com/cyphar/filepath-securejoin v0.4.1 // indirect
- github.com/daixiang0/gci v0.13.4 // indirect
- github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
- github.com/deckarep/golang-set/v2 v2.5.0 // indirect
- github.com/denis-tingaikin/go-header v0.5.0 // indirect
- github.com/djherbis/times v1.6.0 // indirect
- github.com/dlclark/regexp2 v1.11.0 // indirect
- github.com/docker/cli-docs-tool v0.9.0 // indirect
- github.com/docker/distribution v2.8.3+incompatible // indirect
- github.com/docker/docker-credential-helpers v0.8.2 // indirect
- github.com/docker/go-connections v0.5.0 // indirect
- github.com/docker/go-metrics v0.0.1 // indirect
- github.com/docker/go-units v0.5.0 // indirect
- github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 // indirect
- github.com/dustin/go-humanize v1.0.1 // indirect
- github.com/edsrzf/mmap-go v1.2.0 // indirect
- github.com/emicklei/go-restful/v3 v3.11.0 // indirect
- github.com/emirpasic/gods v1.18.1 // indirect
- github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
- github.com/erikgeiser/promptkit v0.9.0 // indirect
- github.com/ettle/strcase v0.2.0 // indirect
- github.com/fatih/color v1.17.0 // indirect
- github.com/fatih/structtag v1.2.0 // indirect
- github.com/felixge/httpsnoop v1.0.4 // indirect
- github.com/firefart/nonamedreturns v1.0.5 // indirect
- github.com/fsnotify/fsnotify v1.9.0 // indirect
- github.com/fvbommel/sortorder v1.0.1 // indirect
- github.com/fxamacker/cbor/v2 v2.7.0 // indirect
- github.com/fzipp/gocyclo v0.6.0 // indirect
- github.com/ghostiam/protogetter v0.3.6 // indirect
- github.com/go-critic/go-critic v0.11.4 // indirect
- github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
- github.com/go-git/go-billy/v5 v5.6.2 // indirect
- github.com/go-git/go-git/v5 v5.16.0 // indirect
- github.com/go-jose/go-jose/v3 v3.0.4 // indirect
- github.com/go-logr/logr v1.4.2 // indirect
- github.com/go-logr/stdr v1.2.2 // indirect
- github.com/go-ole/go-ole v1.2.6 // indirect
- github.com/go-openapi/jsonpointer v0.19.6 // indirect
- github.com/go-openapi/jsonreference v0.20.2 // indirect
- github.com/go-openapi/swag v0.22.4 // indirect
- github.com/go-toolsmith/astcast v1.1.0 // indirect
- github.com/go-toolsmith/astcopy v1.1.0 // indirect
- github.com/go-toolsmith/astequal v1.2.0 // indirect
- github.com/go-toolsmith/astfmt v1.1.0 // indirect
- github.com/go-toolsmith/astp v1.1.0 // indirect
- github.com/go-toolsmith/strparse v1.1.0 // indirect
- github.com/go-toolsmith/typep v1.1.0 // indirect
- github.com/go-viper/mapstructure/v2 v2.0.0 // indirect
- github.com/go-xmlfmt/xmlfmt v1.1.2 // indirect
- github.com/gobwas/glob v0.2.3 // indirect
- github.com/godbus/dbus/v5 v5.1.0 // indirect
- github.com/gofrs/flock v0.12.1 // indirect
- github.com/gofrs/uuid v4.2.0+incompatible // indirect
- github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang-jwt/jwt/v5 v5.2.2 // indirect
- github.com/golang/glog v1.2.4 // indirect
- github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
- github.com/golang/protobuf v1.5.4 // indirect
- github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a // indirect
- github.com/golangci/gofmt v0.0.0-20231018234816-f50ced29576e // indirect
- github.com/golangci/misspell v0.6.0 // indirect
- github.com/golangci/modinfo v0.3.4 // indirect
- github.com/golangci/plugin-module-register v0.1.1 // indirect
- github.com/golangci/revgrep v0.5.3 // indirect
- github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed // indirect
- github.com/google/gnostic-models v0.6.8 // indirect
- github.com/google/go-cmp v0.7.0 // indirect
- github.com/google/go-querystring v1.1.0 // indirect
- github.com/google/gofuzz v1.2.0 // indirect
- github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af // indirect
- github.com/google/s2a-go v0.1.7 // indirect
- github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
- github.com/google/uuid v1.6.0 // indirect
- github.com/google/wire v0.6.0 // indirect
- github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
- github.com/googleapis/gax-go/v2 v2.12.2 // indirect
- github.com/gordonklaus/ineffassign v0.1.0 // indirect
- github.com/gorilla/css v1.0.0 // indirect
- github.com/gorilla/mux v1.8.1 // indirect
- github.com/gorilla/websocket v1.5.0 // indirect
- github.com/gostaticanalysis/analysisutil v0.7.1 // indirect
- github.com/gostaticanalysis/comment v1.4.2 // indirect
- github.com/gostaticanalysis/forcetypeassert v0.1.0 // indirect
- github.com/gostaticanalysis/nilerr v0.1.1 // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect
- github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
- github.com/hashicorp/errwrap v1.1.0 // indirect
- github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
- github.com/hashicorp/go-cty-funcs v0.0.0-20241120183456-c51673e0b3dd // indirect
- github.com/hashicorp/go-multierror v1.1.1 // indirect
- github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
- github.com/hashicorp/go-rootcerts v1.0.2 // indirect
- github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8 // indirect
- github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect
- github.com/hashicorp/go-sockaddr v1.0.6 // indirect
- github.com/hashicorp/go-version v1.7.0 // indirect
- github.com/hashicorp/hcl v1.0.0 // indirect
- github.com/hashicorp/hcl/v2 v2.23.0 // indirect
- github.com/hashicorp/vault/api v1.12.0 // indirect
- github.com/hexops/gotextdiff v1.0.3 // indirect
- github.com/iancoleman/strcase v0.3.0 // indirect
- github.com/ijc/Gotty v0.0.0-20170406111628-a8b993ba6abd // indirect
- github.com/imdario/mergo v0.3.16 // indirect
- github.com/in-toto/in-toto-golang v0.5.0 // indirect
- github.com/inconshreveable/mousetrap v1.1.0 // indirect
- github.com/iwdgo/sigintwindows v0.2.2 // indirect
- github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
- github.com/jgautheron/goconst v1.7.1 // indirect
- github.com/jingyugao/rowserrcheck v1.1.1 // indirect
- github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af // indirect
- github.com/jjti/go-spancheck v0.6.1 // indirect
- github.com/jmespath/go-jmespath v0.4.0 // indirect
- github.com/jonboulle/clockwork v0.4.0 // indirect
- github.com/josharian/intern v1.0.0 // indirect
- github.com/json-iterator/go v1.1.12 // indirect
- github.com/julz/importas v0.1.0 // indirect
- github.com/karamaru-alpha/copyloopvar v1.1.0 // indirect
- github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
- github.com/kevinburke/ssh_config v1.2.0 // indirect
- github.com/kisielk/errcheck v1.7.0 // indirect
- github.com/kkHAIKE/contextcheck v1.1.5 // indirect
- github.com/klauspost/compress v1.17.11 // indirect
- github.com/kulti/thelper v0.6.3 // indirect
- github.com/kunwardeep/paralleltest v1.0.10 // indirect
- github.com/kylelemons/godebug v1.1.0 // indirect
- github.com/kyoh86/exportloopref v0.1.11 // indirect
- github.com/lasiar/canonicalheader v1.1.1 // indirect
- github.com/ldez/gomoddirectives v0.2.4 // indirect
- github.com/ldez/tagliatelle v0.5.0 // indirect
- github.com/leonklingele/grouper v1.1.2 // indirect
- github.com/lib/pq v1.10.9 // indirect
- github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
- github.com/lufeee/execinquery v1.2.1 // indirect
- github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
- github.com/macabu/inamedparam v0.1.3 // indirect
- github.com/magiconair/properties v1.8.6 // indirect
- github.com/mailru/easyjson v0.7.7 // indirect
- github.com/maratori/testableexamples v1.0.0 // indirect
- github.com/maratori/testpackage v1.1.1 // indirect
- github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26 // indirect
- github.com/mattn/go-colorable v0.1.13 // indirect
- github.com/mattn/go-isatty v0.0.20 // indirect
- github.com/mattn/go-localereader v0.0.1 // indirect
- github.com/mattn/go-runewidth v0.0.16 // indirect
- github.com/mattn/go-shellwords v1.0.12 // indirect
- github.com/mgechev/revive v1.3.7 // indirect
- github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
- github.com/microcosm-cc/bluemonday v1.0.21 // indirect
- github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/go-homedir v1.1.0 // indirect
- github.com/mitchellh/go-ps v1.0.0 // indirect
- github.com/mitchellh/go-wordwrap v1.0.1 // indirect
- github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect
- github.com/mitchellh/mapstructure v1.5.0 // indirect
- github.com/mitchellh/reflectwalk v1.0.2 // indirect
- github.com/moby/docker-image-spec v1.3.1 // indirect
- github.com/moby/locker v1.0.1 // indirect
- github.com/moby/moby v28.3.3+incompatible // indirect
- github.com/moby/spdystream v0.4.0 // indirect
- github.com/moby/sys/mountinfo v0.7.2 // indirect
- github.com/moby/sys/sequential v0.6.0 // indirect
- github.com/moby/sys/signal v0.7.1 // indirect
- github.com/moby/sys/user v0.3.0 // indirect
- github.com/moby/sys/userns v0.1.0 // indirect
- github.com/moby/term v0.5.2 // indirect
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
- github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/moricho/tparallel v0.3.1 // indirect
- github.com/morikuni/aec v1.0.0 // indirect
- github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
- github.com/muesli/cancelreader v0.2.2 // indirect
- github.com/muesli/termenv v0.16.0 // indirect
- github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
- github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
- github.com/nakabonne/nestif v0.3.1 // indirect
- github.com/natefinch/atomic v1.0.1 // indirect
- github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d // indirect
- github.com/nishanths/exhaustive v0.12.0 // indirect
- github.com/nishanths/predeclared v0.2.2 // indirect
- github.com/nunnatsa/ginkgolinter v0.16.2 // indirect
- github.com/nxadm/tail v1.4.11 // indirect
- github.com/olekukonko/tablewriter v0.0.5 // indirect
- github.com/opencontainers/go-digest v1.0.0 // indirect
- github.com/opencontainers/image-spec v1.1.0 // indirect
- github.com/opentracing/basictracer-go v1.1.0 // indirect
- github.com/opentracing/opentracing-go v1.2.0 // indirect
- github.com/pelletier/go-toml v1.9.5 // indirect
- github.com/pelletier/go-toml/v2 v2.2.3 // indirect
- github.com/pgavlin/aho-corasick v0.5.1 // indirect
- github.com/pgavlin/diff v0.0.0-20230503175810-113847418e2e // indirect
- github.com/pgavlin/fx v0.1.6 // indirect
- github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386 // indirect
- github.com/pgavlin/text v0.0.0-20240821195002-b51d0990e284 // indirect
- github.com/pjbgf/sha1cd v0.3.2 // indirect
- github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
- github.com/pkg/errors v0.9.1 // indirect
- github.com/pkg/term v1.1.0 // indirect
- github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
- github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
- github.com/polyfloyd/go-errorlint v1.5.2 // indirect
- github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
- github.com/prometheus/client_golang v1.20.5 // indirect
- github.com/prometheus/client_model v0.6.1 // indirect
- github.com/prometheus/common v0.55.0 // indirect
- github.com/prometheus/procfs v0.15.1 // indirect
- github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect
- github.com/pulumi/esc v0.17.0 // indirect
- github.com/pulumi/inflector v0.2.1 // indirect
- github.com/quasilyte/go-ruleguard v0.4.2 // indirect
- github.com/quasilyte/go-ruleguard/dsl v0.3.22 // indirect
- github.com/quasilyte/gogrep v0.5.0 // indirect
- github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 // indirect
- github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect
- github.com/rivo/uniseg v0.4.7 // indirect
- github.com/rogpeppe/go-internal v1.14.1 // indirect
- github.com/russross/blackfriday/v2 v2.1.0 // indirect
- github.com/ryancurrah/gomodguard v1.3.2 // indirect
- github.com/ryanrolds/sqlclosecheck v0.5.1 // indirect
- github.com/ryanuber/go-glob v1.0.0 // indirect
- github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect
- github.com/sanposhiho/wastedassign/v2 v2.0.7 // indirect
- github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect
- github.com/sashamelentyev/interfacebloat v1.1.0 // indirect
- github.com/sashamelentyev/usestdlibvars v1.26.0 // indirect
- github.com/secure-systems-lab/go-securesystemslib v0.4.0 // indirect
- github.com/securego/gosec/v2 v2.20.1-0.20240525090044-5f0084eb01a9 // indirect
- github.com/segmentio/asm v1.2.0 // indirect
- github.com/segmentio/encoding v0.4.1 // indirect
- github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
- github.com/serialx/hashring v0.0.0-20200727003509-22c0c7ab6b1b // indirect
- github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c // indirect
- github.com/shibumi/go-pathspec v1.3.0 // indirect
- github.com/shirou/gopsutil/v3 v3.24.5 // indirect
- github.com/shoenig/go-m1cpu v0.1.6 // indirect
- github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 // indirect
- github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546 // indirect
- github.com/sivchari/containedctx v1.0.3 // indirect
- github.com/sivchari/tenv v1.7.1 // indirect
- github.com/skeema/knownhosts v1.3.1 // indirect
- github.com/sonatard/noctx v0.0.2 // indirect
- github.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 // indirect
- github.com/sourcegraph/go-diff v0.7.0 // indirect
- github.com/spf13/cast v1.5.0 // indirect
- github.com/spf13/cobra v1.9.1 // indirect
- github.com/spf13/jwalterweatherman v1.1.0 // indirect
- github.com/spf13/pflag v1.0.6 // indirect
- github.com/spf13/viper v1.12.0 // indirect
- github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect
- github.com/stbenjam/no-sprintf-host-port v0.1.1 // indirect
- github.com/stretchr/objx v0.5.2 // indirect
- github.com/subosito/gotenv v1.4.1 // indirect
- github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c // indirect
- github.com/tdakkota/asciicheck v0.2.0 // indirect
- github.com/tetafro/godot v1.4.16 // indirect
- github.com/texttheater/golang-levenshtein v1.0.1 // indirect
- github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966 // indirect
- github.com/timonwong/loggercheck v0.9.4 // indirect
- github.com/tklauser/go-sysconf v0.3.12 // indirect
- github.com/tklauser/numcpus v0.6.1 // indirect
- github.com/tomarrell/wrapcheck/v2 v2.8.3 // indirect
- github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect
- github.com/tonistiigi/dchapes-mode v0.0.0-20241001053921-ca0759fec205 // indirect
- github.com/tonistiigi/jaeger-ui-rest v0.0.0-20250211190051-7d4944a45bb6 // indirect
- github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea // indirect
- github.com/tonistiigi/vt100 v0.0.0-20240514184818-90bafcd6abab // indirect
- github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
- github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
- github.com/ulikunitz/xz v0.5.12 // indirect
- github.com/ultraware/funlen v0.1.0 // indirect
- github.com/ultraware/whitespace v0.1.1 // indirect
- github.com/uudashr/gocognit v1.1.2 // indirect
- github.com/x448/float16 v0.8.4 // indirect
- github.com/xanzy/ssh-agent v0.3.3 // indirect
- github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
- github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
- github.com/xeipuuv/gojsonschema v1.2.0 // indirect
- github.com/xen0n/gosmopolitan v1.2.2 // indirect
- github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
- github.com/yagipy/maintidx v1.0.0 // indirect
- github.com/yeya24/promlinter v0.3.0 // indirect
- github.com/ykadowak/zerologlint v0.1.5 // indirect
- github.com/yuin/goldmark v1.5.2 // indirect
- github.com/yuin/goldmark-emoji v1.0.1 // indirect
- github.com/yusufpapurcu/wmi v1.2.4 // indirect
- github.com/zclconf/go-cty v1.16.3 // indirect
- gitlab.com/bosi/decorder v0.4.2 // indirect
- go-simpler.org/musttag v0.12.2 // indirect
- go-simpler.org/sloglint v0.7.1 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/auto/sdk v1.1.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.56.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 // indirect
- go.opentelemetry.io/otel v1.36.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.31.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.31.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.36.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0 // indirect
- go.opentelemetry.io/otel/sdk/metric v1.34.0 // indirect
- go.opentelemetry.io/proto/otlp v1.6.0 // indirect
- go.pennock.tech/tabular v1.1.3 // indirect
- go.uber.org/atomic v1.11.0 // indirect
- go.uber.org/automaxprocs v1.6.0 // indirect
- go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.27.0 // indirect
- gocloud.dev v0.37.0 // indirect
- gocloud.dev/secrets/hashivault v0.37.0 // indirect
- golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f // indirect
- golang.org/x/mod v0.25.0 // indirect
- golang.org/x/net v0.40.0 // indirect
- golang.org/x/oauth2 v0.30.0 // indirect
- golang.org/x/sync v0.15.0 // indirect
- golang.org/x/sys v0.33.0 // indirect
- golang.org/x/term v0.32.0 // indirect
- golang.org/x/text v0.26.0 // indirect
- golang.org/x/time v0.6.0 // indirect
- golang.org/x/tools v0.33.0 // indirect
- golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
- google.golang.org/api v0.169.0 // indirect
- google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20250519155744-55703ea1f237 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 // indirect
- google.golang.org/grpc v1.72.1 // indirect
- gopkg.in/inf.v0 v0.9.1 // indirect
- gopkg.in/ini.v1 v1.67.0 // indirect
- gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
- gopkg.in/warnings.v0 v0.1.2 // indirect
- gopkg.in/yaml.v2 v2.4.0 // indirect
- honnef.co/go/tools v0.4.7 // indirect
- k8s.io/api v0.31.2 // indirect
- k8s.io/apimachinery v0.31.2 // indirect
- k8s.io/client-go v0.31.2 // indirect
- k8s.io/klog/v2 v2.130.1 // indirect
- k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect
- k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect
- lukechampine.com/frand v1.5.1 // indirect
- mvdan.cc/gofumpt v0.6.0 // indirect
- mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f // indirect
- sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
- sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
- sigs.k8s.io/yaml v1.4.0 // indirect
-)
diff --git a/go.sum b/go.sum
deleted file mode 100644
index 006d35a..0000000
--- a/go.sum
+++ /dev/null
@@ -1,1478 +0,0 @@
-4d63.com/gocheckcompilerdirectives v1.2.1 h1:AHcMYuw56NPjq/2y615IGg2kYkBdTvOaojYCBcRE7MA=
-4d63.com/gocheckcompilerdirectives v1.2.1/go.mod h1:yjDJSxmDTtIHHCqX0ufRYZDL6vQtMG7tJdKVeWwsqvs=
-4d63.com/gochecknoglobals v0.2.1 h1:1eiorGsgHOFOuoOiJDy2psSrQbRdIHrlge0IJIkUgDc=
-4d63.com/gochecknoglobals v0.2.1/go.mod h1:KRE8wtJB3CXCsb1xy421JfTHIIbmT3U5ruxw2Qu8fSU=
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM=
-cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4=
-cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I=
-cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
-cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc=
-cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI=
-cloud.google.com/go/kms v1.15.7 h1:7caV9K3yIxvlQPAcaFffhlT7d1qpxjB1wHBtjWa13SM=
-cloud.google.com/go/kms v1.15.7/go.mod h1:ub54lbsa6tDkUwnu4W7Yt1aAIFLnspgh0kPGToDukeI=
-cloud.google.com/go/logging v1.9.0 h1:iEIOXFO9EmSiTjDmfpbRjOxECO7R8C7b8IXUGOj7xZw=
-cloud.google.com/go/logging v1.9.0/go.mod h1:1Io0vnZv4onoUnsVUQY3HZ3Igb1nBchky0A0y7BBBhE=
-cloud.google.com/go/longrunning v0.5.5 h1:GOE6pZFdSrTb4KAiKnXsJBtlE6mEyaW44oKyMILWnOg=
-cloud.google.com/go/longrunning v0.5.5/go.mod h1:WV2LAxD8/rg5Z1cNW6FJ/ZpX4E4VnDnoTk0yawPBB7s=
-cloud.google.com/go/storage v1.39.1 h1:MvraqHKhogCOTXTlct/9C3K3+Uy2jBmFYb3/Sp6dVtY=
-cloud.google.com/go/storage v1.39.1/go.mod h1:xK6xZmxZmo+fyP7+DEF6FhNc24/JAe95OLyOHCXFH1o=
-dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
-dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
-github.com/4meepo/tagalign v1.3.4 h1:P51VcvBnf04YkHzjfclN6BbsopfJR5rxs1n+5zHt+w8=
-github.com/4meepo/tagalign v1.3.4/go.mod h1:M+pnkHH2vG8+qhE5bVc/zeP7HS/j910Fwa9TUSyZVI0=
-github.com/Abirdcfly/dupword v0.0.14 h1:3U4ulkc8EUo+CaT105/GJ1BQwtgyj6+VaBVbAX11Ba8=
-github.com/Abirdcfly/dupword v0.0.14/go.mod h1:VKDAbxdY8YbKUByLGg8EETzYSuC4crm9WwI6Y3S0cLI=
-github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk=
-github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
-github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2 h1:dIScnXFlF784X79oi7MzVT6GWqr/W1uUt0pB5CsDs9M=
-github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2/go.mod h1:gCLVsLfv1egrcZu+GoJATN5ts75F2s62ih/457eWzOw=
-github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkkhIiSjQ=
-github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1reCfTwbto0Fduo=
-github.com/Antonboom/errname v0.1.13 h1:JHICqsewj/fNckzrfVSe+T33svwQxmjC+1ntDsHOVvM=
-github.com/Antonboom/errname v0.1.13/go.mod h1:uWyefRYRN54lBg6HseYCFhs6Qjcy41Y3Jl/dVhA87Ns=
-github.com/Antonboom/nilnil v0.1.9 h1:eKFMejSxPSA9eLSensFmjW2XTgTwJMjZ8hUHtV4s/SQ=
-github.com/Antonboom/nilnil v0.1.9/go.mod h1:iGe2rYwCq5/Me1khrysB4nwI7swQvjclR8/YRPl5ihQ=
-github.com/Antonboom/testifylint v1.3.1 h1:Uam4q1Q+2b6H7gvk9RQFw6jyVDdpzIirFOOrbs14eG4=
-github.com/Antonboom/testifylint v1.3.1/go.mod h1:NV0hTlteCkViPW9mSR4wEMfwp+Hs1T3dY60bkvSfhpM=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0/go.mod h1:XCW7KnZet0Opnr7HccfUw1PLc4CjHqpcaxW8DHklNkQ=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 h1:F0gBpfdPLGsw+nsgk6aqqkZS1jiixa5WwFe3fk/T3Ys=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2/go.mod h1:SqINnQ9lVVdRlyC8cd1lCI0SdX4n2paeABd2K8ggfnE=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8=
-github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY=
-github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY=
-github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 h1:m/sWOGCREuSBqg2htVQTBY8nOZpyajYztF0vUvSZTuM=
-github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0/go.mod h1:Pu5Zksi2KrU7LPbZbNINx6fuVrUp/ffvpxdDj+i8LeE=
-github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 h1:FbH3BbSb4bvGluTesZZ+ttN/MDsnMmQP36OSnDuSXqw=
-github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1/go.mod h1:9V2j0jn9jDEkCkv8w/bKTNppX/d0FVA1ud77xCIP4KA=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0 h1:PiSrjRPpkQNjrM8H0WwKMnZUdu1RGMtd/LdGKUrOo+c=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0/go.mod h1:oDrbWx4ewMylP7xHivfgixbfGBT6APAwsSoHRKotnIc=
-github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0 h1:mlmW46Q0B79I+Aj4azKC6xDMFN9a9SyZWESlGWYXbFs=
-github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0/go.mod h1:PXe2h+LKcWTX9afWdZoHyODqR4fBa5boUM/8uJfZ0Jo=
-github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg=
-github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
-github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
-github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
-github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk=
-github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE=
-github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM=
-github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3 h1:H5xDQaE3XowWfhZRUpnfC+rGZMEVoSiji+b+/HFAPU4=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
-github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
-github.com/Crocmagnon/fatcontext v0.2.2 h1:OrFlsDdOj9hW/oBEJBNSuH7QWf+E9WPVHw+x52bXVbk=
-github.com/Crocmagnon/fatcontext v0.2.2/go.mod h1:WSn/c/+MMNiD8Pri0ahRj0o9jVpeowzavOQplBJw6u0=
-github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM=
-github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs=
-github.com/GaijinEntertainment/go-exhaustruct/v3 v3.2.0 h1:sATXp1x6/axKxz2Gjxv8MALP0bXaNRfQinEwyfMcx8c=
-github.com/GaijinEntertainment/go-exhaustruct/v3 v3.2.0/go.mod h1:Nl76DrGNJTA1KJ0LePKBw/vznBX1EHbAZX8mwjR82nI=
-github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
-github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
-github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0=
-github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
-github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
-github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
-github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
-github.com/Microsoft/hcsshim v0.12.9 h1:2zJy5KA+l0loz1HzEGqyNnjd3fyZA31ZBCGKacp6lLg=
-github.com/Microsoft/hcsshim v0.12.9/go.mod h1:fJ0gkFAna6ukt0bLdKB8djt4XIJhF/vEPuoIWYVvZ8Y=
-github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s=
-github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
-github.com/OpenPeeDeeP/depguard/v2 v2.2.0 h1:vDfG60vDtIuf0MEOhmLlLLSzqaRM8EMcgJPdp74zmpA=
-github.com/OpenPeeDeeP/depguard/v2 v2.2.0/go.mod h1:CIzddKRvLBC4Au5aYP/i3nyaWQ+ClszLIuVocRiCYFQ=
-github.com/ProtonMail/go-crypto v1.2.0 h1:+PhXXn4SPGd+qk76TlEePBfOfivE0zkWFenhGhFLzWs=
-github.com/ProtonMail/go-crypto v1.2.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE=
-github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpHMqeKTCYkitsPqHNxTmd4SNR5r94FGM8=
-github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo=
-github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo=
-github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
-github.com/alecthomas/assert/v2 v2.6.0 h1:o3WJwILtexrEUk3cUVal3oiQY2tfgr/FHWiz/v2n4FU=
-github.com/alecthomas/assert/v2 v2.6.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
-github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek=
-github.com/alecthomas/chroma v0.10.0/go.mod h1:jtJATyUxlIORhUOFNA9NZDWGAQ8wpxQQqNSB4rjA/1s=
-github.com/alecthomas/chroma/v2 v2.13.0 h1:VP72+99Fb2zEcYM0MeaWJmV+xQvz5v5cxRHd+ooU1lI=
-github.com/alecthomas/chroma/v2 v2.13.0/go.mod h1:BUGjjsD+ndS6eX37YgTchSEG+Jg9Jv1GiZs9sqPqztk=
-github.com/alecthomas/go-check-sumtype v0.1.4 h1:WCvlB3l5Vq5dZQTFmodqL2g68uHiSwwlWcT5a2FGK0c=
-github.com/alecthomas/go-check-sumtype v0.1.4/go.mod h1:WyYPfhfkdhyrdaligV6svFopZV8Lqdzn5pyVBaV6jhQ=
-github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc=
-github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
-github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alexkohler/nakedret/v2 v2.0.4 h1:yZuKmjqGi0pSmjGpOC016LtPJysIL0WEUiaXW5SUnNg=
-github.com/alexkohler/nakedret/v2 v2.0.4/go.mod h1:bF5i0zF2Wo2o4X4USt9ntUWve6JbFv02Ff4vlkmS/VU=
-github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw=
-github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE=
-github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw=
-github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I=
-github.com/anchore/go-struct-converter v0.0.0-20221118182256-c68fdcfa2092 h1:aM1rlcoLz8y5B2r4tTLMiVTrMtpfY0O8EScKJxaSaEc=
-github.com/anchore/go-struct-converter v0.0.0-20221118182256-c68fdcfa2092/go.mod h1:rYqSE9HbjzpHTI74vwPvae4ZVYZd1lue2ta6xHPdblA=
-github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
-github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
-github.com/apparentlymart/go-cidr v1.0.1 h1:NmIwLZ/KdsjIUlhf+/Np40atNXm/+lZ5txfTJ/SpF+U=
-github.com/apparentlymart/go-cidr v1.0.1/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc=
-github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec=
-github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY=
-github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4=
-github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
-github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
-github.com/ashanbrown/forbidigo v1.6.0 h1:D3aewfM37Yb3pxHujIPSpTf6oQk9sc9WZi8gerOIVIY=
-github.com/ashanbrown/forbidigo v1.6.0/go.mod h1:Y8j9jy9ZYAEHXdu723cUlraTqbzjKF1MUyfOKL+AjcU=
-github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s=
-github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI=
-github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
-github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
-github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU=
-github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
-github.com/aws/aws-sdk-go-v2 v1.30.3 h1:jUeBtG0Ih+ZIFH0F4UkmL9w3cSpaMv9tYYDbzILP8dY=
-github.com/aws/aws-sdk-go-v2 v1.30.3/go.mod h1:nIQjQVp5sfpQcTc9mPSr1B0PaWK5ByX9MOoDadSN4lc=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3 h1:tW1/Rkad38LA15X4UQtjXZXNKsCgkshC3EbmcUmghTg=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3/go.mod h1:UbnqO+zjqk3uIt9yCACHJ9IVNhyhOCnYk8yA19SAWrM=
-github.com/aws/aws-sdk-go-v2/config v1.27.27 h1:HdqgGt1OAP0HkEDDShEl0oSYa9ZZBSOmKpdpsDMdO90=
-github.com/aws/aws-sdk-go-v2/config v1.27.27/go.mod h1:MVYamCg76dFNINkZFu4n4RjDixhVr51HLj4ErWzrVwg=
-github.com/aws/aws-sdk-go-v2/credentials v1.17.27 h1:2raNba6gr2IfA0eqqiP2XiQ0UVOpGPgDSi0I9iAP+UI=
-github.com/aws/aws-sdk-go-v2/credentials v1.17.27/go.mod h1:gniiwbGahQByxan6YjQUMcW4Aov6bLC3m+evgcoN4r4=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 h1:KreluoV8FZDEtI6Co2xuNk/UqI9iwMrOx/87PBNIKqw=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11/go.mod h1:SeSUYBLsMYFoRvHE0Tjvn7kbxaUhl75CJi1sbfhMxkU=
-github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.8 h1:u1KOU1S15ufyZqmH/rA3POkiRH6EcDANHj2xHRzq+zc=
-github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.8/go.mod h1:WPv2FRnkIOoDv/8j2gSUsI4qDc7392w5anFB/I89GZ8=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 h1:SoNJ4RlFEQEbtDcCEt+QG56MY4fm4W8rYirAmq+/DdU=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15/go.mod h1:U9ke74k1n2bf+RIgoX1SXFed1HLs51OgUSs+Ph0KJP8=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 h1:C6WHdGnTDIYETAm5iErQUiVNsclNx9qbJVPIt03B6bI=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15/go.mod h1:ZQLZqhcu+JhSrA9/NXRm8SkDvsycE+JkV3WGY41e+IM=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
-github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.15 h1:Z5r7SycxmSllHYmaAZPpmN8GviDrSGhMS6bldqtXZPw=
-github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.15/go.mod h1:CetW7bDE00QoGEmPUoZuRog07SGVAUVW6LFpNP0YfIg=
-github.com/aws/aws-sdk-go-v2/service/iam v1.31.4 h1:eVm30ZIDv//r6Aogat9I88b5YX1xASSLcEDqHYRPVl0=
-github.com/aws/aws-sdk-go-v2/service/iam v1.31.4/go.mod h1:aXWImQV0uTW35LM0A/T4wEg6R1/ReXUu4SM6/lUHYK0=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 h1:dT3MqvGhSoaIhRseqw2I0yH81l7wiR2vjs57O51EAm8=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3/go.mod h1:GlAeCkHwugxdHaueRr4nhPuY+WW+gR8UjlcqzPr1SPI=
-github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.17 h1:YPYe6ZmvUfDDDELqEKtAd6bo8zxhkm+XEFEzQisqUIE=
-github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.17/go.mod h1:oBtcnYua/CgzCWYN7NZ5j7PotFDaFSUjCYVTtfyn7vw=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 h1:HGErhhrxZlQ044RiM+WdoZxp0p+EGM62y3L6pwA4olE=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17/go.mod h1:RkZEx4l0EHYDJpWppMJ3nD9wZJAa8/0lq9aVC+r2UII=
-github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15 h1:246A4lSTXWJw/rmlQI+TT2OcqeDMKBdyjEQrafMaQdA=
-github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15/go.mod h1:haVfg3761/WF7YPuJOER2MP0k4UAXyHaLclKXB6usDg=
-github.com/aws/aws-sdk-go-v2/service/kms v1.30.1 h1:SBn4I0fJXF9FYOVRSVMWuhvEKoAHDikjGpS3wlmw5DE=
-github.com/aws/aws-sdk-go-v2/service/kms v1.30.1/go.mod h1:2snWQJQUKsbN66vAawJuOGX7dr37pfOq9hb0tZDGIqQ=
-github.com/aws/aws-sdk-go-v2/service/s3 v1.58.2 h1:sZXIzO38GZOU+O0C+INqbH7C2yALwfMWpd64tONS/NE=
-github.com/aws/aws-sdk-go-v2/service/s3 v1.58.2/go.mod h1:Lcxzg5rojyVPU/0eFwLtcyTaek/6Mtic5B1gJo7e/zE=
-github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 h1:BXx0ZIxvrJdSgSvKTZ+yRBeSqqgPM89VPlulEcl37tM=
-github.com/aws/aws-sdk-go-v2/service/sso v1.22.4/go.mod h1:ooyCOXjvJEsUw7x+ZDHeISPMhtwI3ZCB7ggFMcFfWLU=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 h1:yiwVzJW2ZxZTurVbYWA7QOrAaCYQR72t0wrSBfoesUE=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4/go.mod h1:0oxfLkpz3rQ/CHlx5hB7H69YUpFiI1tql6Q6Ne+1bCw=
-github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 h1:ZsDKRLXGWHk8WdtyYMoGNO7bTudrvuKpDKgMVRlepGE=
-github.com/aws/aws-sdk-go-v2/service/sts v1.30.3/go.mod h1:zwySh8fpFyXp9yOr/KVzxOl8SRqgf/IDw5aUt9UKFcQ=
-github.com/aws/smithy-go v1.20.3 h1:ryHwveWzPV5BIof6fyDvor6V3iUL7nTfiTKXHiW05nE=
-github.com/aws/smithy-go v1.20.3/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
-github.com/aymanbagabas/go-osc52 v1.0.3/go.mod h1:zT8H+Rk4VSabYN90pWyugflM3ZhpTZNC7cASDfUCdT4=
-github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
-github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
-github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
-github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
-github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
-github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
-github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
-github.com/bkielbasa/cyclop v1.2.1 h1:AeF71HZDob1P2/pRm1so9cd1alZnrpyc4q2uP2l0gJY=
-github.com/bkielbasa/cyclop v1.2.1/go.mod h1:K/dT/M0FPAiYjBgQGau7tz+3TMh4FWAEqlMhzFWCrgM=
-github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
-github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
-github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M=
-github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k=
-github.com/bmatcuk/doublestar v1.1.5/go.mod h1:wiQtGV+rzVYxB7WIlirSN++5HPtPlXEo9MEoZQC/PmE=
-github.com/bombsimon/wsl/v4 v4.2.1 h1:Cxg6u+XDWff75SIFFmNsqnIOgob+Q9hG6y/ioKbRFiM=
-github.com/bombsimon/wsl/v4 v4.2.1/go.mod h1:Xu/kDxGZTofQcDGCtQe9KCzhHphIe0fDuyWTxER9Feo=
-github.com/breml/bidichk v0.2.7 h1:dAkKQPLl/Qrk7hnP6P+E0xOodrq8Us7+U0o4UBOAlQY=
-github.com/breml/bidichk v0.2.7/go.mod h1:YodjipAGI9fGcYM7II6wFvGhdMYsC5pHDlGzqvEW3tQ=
-github.com/breml/errchkjson v0.3.6 h1:VLhVkqSBH96AvXEyclMR37rZslRrY2kcyq+31HCsVrA=
-github.com/breml/errchkjson v0.3.6/go.mod h1:jhSDoFheAF2RSDOlCfhHO9KqhZgAYLyvHe7bRCX8f/U=
-github.com/butuzov/ireturn v0.3.0 h1:hTjMqWw3y5JC3kpnC5vXmFJAWI/m31jaCYQqzkS6PL0=
-github.com/butuzov/ireturn v0.3.0/go.mod h1:A09nIiwiqzN/IoVo9ogpa0Hzi9fex1kd9PSD6edP5ZA=
-github.com/butuzov/mirror v1.2.0 h1:9YVK1qIjNspaqWutSv8gsge2e/Xpq1eqEkslEUHy5cs=
-github.com/butuzov/mirror v1.2.0/go.mod h1:DqZZDtzm42wIAIyHXeN8W/qb1EPlb9Qn/if9icBOpdQ=
-github.com/catenacyber/perfsprint v0.7.1 h1:PGW5G/Kxn+YrN04cRAZKC+ZuvlVwolYMrIyyTJ/rMmc=
-github.com/catenacyber/perfsprint v0.7.1/go.mod h1:/wclWYompEyjUD2FuIIDVKNkqz7IgBIWXIH3V0Zol50=
-github.com/ccojocar/zxcvbn-go v1.0.2 h1:na/czXU8RrhXO4EZme6eQJLR4PzcGsahsBOAwU6I3Vg=
-github.com/ccojocar/zxcvbn-go v1.0.2/go.mod h1:g1qkXtUSvHP8lhHp5GrSmTz6uWALGRMQdw6Qnz/hi60=
-github.com/cenkalti/backoff/v3 v3.2.2 h1:cfUAAO3yvKMYKPrvhDuHSwQnhZNk/RMHKdZqKTxfm6M=
-github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs=
-github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
-github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8=
-github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
-github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/charithe/durationcheck v0.0.10 h1:wgw73BiocdBDQPik+zcEoBG/ob8uyBHf2iyoHGPf5w4=
-github.com/charithe/durationcheck v0.0.10/go.mod h1:bCWXb7gYRysD1CU3C+u4ceO49LoGOY1C1L6uouGNreQ=
-github.com/charmbracelet/bubbles v0.21.0 h1:9TdC97SdRVg/1aaXNVWfFH3nnLAwOXr8Fn6u6mfQdFs=
-github.com/charmbracelet/bubbles v0.21.0/go.mod h1:HF+v6QUR4HkEpz62dx7ym2xc71/KBHg+zKwJtMw+qtg=
-github.com/charmbracelet/bubbletea v1.3.4 h1:kCg7B+jSCFPLYRA52SDZjr51kG/fMUEoPoZrkaDHyoI=
-github.com/charmbracelet/bubbletea v1.3.4/go.mod h1:dtcUCyCGEX3g9tosuYiut3MXgY/Jsv9nKVdibKKRRXo=
-github.com/charmbracelet/colorprofile v0.3.0 h1:KtLh9uuu1RCt+Hml4s6Hz+kB1PfV3wi++1h5ia65yKQ=
-github.com/charmbracelet/colorprofile v0.3.0/go.mod h1:oHJ340RS2nmG1zRGPmhJKJ/jf4FPNNk0P39/wBPA1G0=
-github.com/charmbracelet/glamour v0.6.0 h1:wi8fse3Y7nfcabbbDuwolqTqMQPMnVPeZhDM273bISc=
-github.com/charmbracelet/glamour v0.6.0/go.mod h1:taqWV4swIMMbWALc0m7AfE9JkPSU8om2538k9ITBxOc=
-github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
-github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
-github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE=
-github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
-github.com/charmbracelet/x/cellbuf v0.0.13 h1:/KBBKHuVRbq1lYx5BzEHBAFBP8VcQzJejZ/IA3iR28k=
-github.com/charmbracelet/x/cellbuf v0.0.13/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
-github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
-github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
-github.com/chavacava/garif v0.1.0 h1:2JHa3hbYf5D9dsgseMKAmc/MZ109otzgNFk5s87H9Pc=
-github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+UIPD+Gww=
-github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo=
-github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30=
-github.com/ckaznocha/intrange v0.1.2 h1:3Y4JAxcMntgb/wABQ6e8Q8leMd26JbX2790lIss9MTI=
-github.com/ckaznocha/intrange v0.1.2/go.mod h1:RWffCw/vKBwHeOEwWdCikAtY0q4gGt8VhJZEEA5n+RE=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
-github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb h1:EDmT6Q9Zs+SbUoc7Ik9EfrFqcylYqgPZ9ANSbTAntnE=
-github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb/go.mod h1:ZjrT6AXHbDs86ZSdt/osfBi5qfexBrKUdONk989Wnk4=
-github.com/compose-spec/compose-go/v2 v2.4.8 h1:7Myl8wDRl/4mRz77S+eyDJymGGEHu0diQdGSSeyq90A=
-github.com/compose-spec/compose-go/v2 v2.4.8/go.mod h1:lFN0DrMxIncJGYAXTfWuajfwj5haBJqrBkarHcnjJKc=
-github.com/containerd/cgroups/v3 v3.0.5 h1:44na7Ud+VwyE7LIoJ8JTNQOa549a8543BmzaJHo6Bzo=
-github.com/containerd/cgroups/v3 v3.0.5/go.mod h1:SA5DLYnXO8pTGYiAHXz94qvLQTKfVM5GEVisn4jpins=
-github.com/containerd/console v1.0.4 h1:F2g4+oChYvBTsASRTz8NP6iIAi97J3TtSAsLbIFn4ro=
-github.com/containerd/console v1.0.4/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk=
-github.com/containerd/containerd/api v1.8.0 h1:hVTNJKR8fMc/2Tiw60ZRijntNMd1U+JVMyTRdsD2bS0=
-github.com/containerd/containerd/api v1.8.0/go.mod h1:dFv4lt6S20wTu/hMcP4350RL87qPWLVa/OHOwmmdnYc=
-github.com/containerd/containerd/v2 v2.0.3 h1:zBKgwgZsuu+LPCMzCLgA4sC4MiZzZ59ZT31XkmiISQM=
-github.com/containerd/containerd/v2 v2.0.3/go.mod h1:5j9QUUaV/cy9ZeAx4S+8n9ffpf+iYnEj4jiExgcbuLY=
-github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4=
-github.com/containerd/continuity v0.4.5/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE=
-github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI=
-github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M=
-github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE=
-github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk=
-github.com/containerd/fifo v1.1.0 h1:4I2mbh5stb1u6ycIABlBw9zgtlK8viPI9QkQNRQEEmY=
-github.com/containerd/fifo v1.1.0/go.mod h1:bmC4NWMbXlt2EZ0Hc7Fx7QzTFxgPID13eH0Qu+MAb2o=
-github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
-github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
-github.com/containerd/nydus-snapshotter v0.15.0 h1:RqZRs1GPeM6T3wmuxJV9u+2Rg4YETVMwTmiDeX+iWC8=
-github.com/containerd/nydus-snapshotter v0.15.0/go.mod h1:biq0ijpeZe0I5yZFSJyHzFSjjRZQ7P7y/OuHyd7hYOw=
-github.com/containerd/platforms v1.0.0-rc.1 h1:83KIq4yy1erSRgOVHNk1HYdPvzdJ5CnsWaRoJX4C41E=
-github.com/containerd/platforms v1.0.0-rc.1/go.mod h1:J71L7B+aiM5SdIEqmd9wp6THLVRzJGXfNuWCZCllLA4=
-github.com/containerd/plugin v1.0.0 h1:c8Kf1TNl6+e2TtMHZt+39yAPDbouRH9WAToRjex483Y=
-github.com/containerd/plugin v1.0.0/go.mod h1:hQfJe5nmWfImiqT1q8Si3jLv3ynMUIBB47bQ+KexvO8=
-github.com/containerd/stargz-snapshotter v0.16.3 h1:zbQMm8dRuPHEOD4OqAYGajJJUwCeUzt4j7w9Iaw58u4=
-github.com/containerd/stargz-snapshotter/estargz v0.16.3 h1:7evrXtoh1mSbGj/pfRccTampEyKpjpOnS3CyiV1Ebr8=
-github.com/containerd/stargz-snapshotter/estargz v0.16.3/go.mod h1:uyr4BfYfOj3G9WBVE8cOlQmXAbPN9VEQpBBeJIuOipU=
-github.com/containerd/ttrpc v1.2.7 h1:qIrroQvuOL9HQ1X6KHe2ohc7p+HP/0VE6XPU7elJRqQ=
-github.com/containerd/ttrpc v1.2.7/go.mod h1:YCXHsb32f+Sq5/72xHubdiJRQY9inL4a4ZQrAbN1q9o=
-github.com/containerd/typeurl/v2 v2.2.3 h1:yNA/94zxWdvYACdYO8zofhrTVuQY73fFU1y++dYSw40=
-github.com/containerd/typeurl/v2 v2.2.3/go.mod h1:95ljDnPfD3bAbDJRugOiShd/DlAAsxGtUBhJxIn7SCk=
-github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0=
-github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
-github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s=
-github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE=
-github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo=
-github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc=
-github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s=
-github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
-github.com/daixiang0/gci v0.13.4 h1:61UGkmpoAcxHM2hhNkZEf5SzwQtWJXTSws7jaPyqwlw=
-github.com/daixiang0/gci v0.13.4/go.mod h1:12etP2OniiIdP4q+kjUGrC/rUagga7ODbqsom5Eo5Yk=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/deckarep/golang-set/v2 v2.5.0 h1:hn6cEZtQ0h3J8kFrHR/NrzyOoTnjgW1+FmNJzQ7y/sA=
-github.com/deckarep/golang-set/v2 v2.5.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4=
-github.com/denis-tingaikin/go-header v0.5.0 h1:SRdnP5ZKvcO9KKRP1KJrhFR3RrlGuD+42t4429eC9k8=
-github.com/denis-tingaikin/go-header v0.5.0/go.mod h1:mMenU5bWrok6Wl2UsZjy+1okegmwQ3UgWl4V1D8gjlY=
-github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
-github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
-github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
-github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
-github.com/djherbis/times v1.6.0 h1:w2ctJ92J8fBvWPxugmXIv7Nz7Q3iDMKNx9v5ocVH20c=
-github.com/djherbis/times v1.6.0/go.mod h1:gOHeRAz2h+VJNZ5Gmc/o7iD9k4wW7NMVqieYCY99oc0=
-github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
-github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI=
-github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
-github.com/docker/buildx v0.22.0 h1:pGTcGZa+kxpYUlM/6ACsp1hXhkEDulz++RNXPdE8Afk=
-github.com/docker/buildx v0.22.0/go.mod h1:ThbnUe4kNiStlq6cLXruElyEdSTdPL3k/QerNUmPvHE=
-github.com/docker/cli v28.0.4+incompatible h1:pBJSJeNd9QeIWPjRcV91RVJihd/TXB77q1ef64XEu4A=
-github.com/docker/cli v28.0.4+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
-github.com/docker/cli-docs-tool v0.9.0 h1:CVwQbE+ZziwlPqrJ7LRyUF6GvCA+6gj7MTCsayaK9t0=
-github.com/docker/cli-docs-tool v0.9.0/go.mod h1:ClrwlNW+UioiRyH9GiAOe1o3J/TsY3Tr1ipoypjAUtc=
-github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
-github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v28.0.1+incompatible h1:FCHjSRdXhNRFjlHMTv4jUNlIBbTeRjrWfeFuJp7jpo0=
-github.com/docker/docker v28.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo=
-github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M=
-github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0=
-github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c/go.mod h1:CADgU4DSXK5QUlFslkQu2yW2TKzFZcXq/leZfM0UH5Q=
-github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
-github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
-github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8=
-github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw=
-github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
-github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
-github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 h1:UhxFibDNY/bfvqU5CAUmr9zpesgbU6SWc8/B4mflAE4=
-github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
-github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
-github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
-github.com/edsrzf/mmap-go v1.2.0 h1:hXLYlkbaPzt1SaQk+anYwKSRNhufIDCchSPkUD6dD84=
-github.com/edsrzf/mmap-go v1.2.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q=
-github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o=
-github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE=
-github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
-github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
-github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
-github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
-github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM=
-github.com/erikgeiser/promptkit v0.9.0 h1:3qL1mS/ntCrXdb8sTP/ka82CJ9kEQaGuYXNrYJkWYBc=
-github.com/erikgeiser/promptkit v0.9.0/go.mod h1:pU9dtogSe3Jlc2AY77EP7R4WFP/vgD4v+iImC83KsCo=
-github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q=
-github.com/ettle/strcase v0.2.0/go.mod h1:DajmHElDSaX76ITe3/VHVyMin4LWSJN5Z909Wp+ED1A=
-github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
-github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
-github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
-github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4=
-github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94=
-github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
-github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
-github.com/firefart/nonamedreturns v1.0.5 h1:tM+Me2ZaXs8tfdDw3X6DOX++wMCOqzYUho6tUTYIdRA=
-github.com/firefart/nonamedreturns v1.0.5/go.mod h1:gHJjDqhGM4WyPt639SOZs+G89Ko7QKH5R5BhnO6xJhw=
-github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
-github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
-github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
-github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
-github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
-github.com/fvbommel/sortorder v1.0.1 h1:dSnXLt4mJYH25uDDGa3biZNQsozaUWDSWeKJ0qqFfzE=
-github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0=
-github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
-github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
-github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo=
-github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA=
-github.com/ghostiam/protogetter v0.3.6 h1:R7qEWaSgFCsy20yYHNIJsU9ZOb8TziSRRxuAOTVKeOk=
-github.com/ghostiam/protogetter v0.3.6/go.mod h1:7lpeDnEJ1ZjL/YtyoN99ljO4z0pd3H0d18/t2dPBxHw=
-github.com/gkampitakis/ciinfo v0.3.0 h1:gWZlOC2+RYYttL0hBqcoQhM7h1qNkVqvRCV1fOvpAv8=
-github.com/gkampitakis/ciinfo v0.3.0/go.mod h1:1NIwaOcFChN4fa/B0hEBdAb6npDlFL8Bwx4dfRLRqAo=
-github.com/gkampitakis/go-diff v1.3.2 h1:Qyn0J9XJSDTgnsgHRdz9Zp24RaJeKMUHg2+PDZZdC4M=
-github.com/gkampitakis/go-diff v1.3.2/go.mod h1:LLgOrpqleQe26cte8s36HTWcTmMEur6OPYerdAAS9tk=
-github.com/gkampitakis/go-snaps v0.4.9 h1:x6+GEQeYWC+cnLNsHK5uXXgEQADmlH/1EqMrjfXjzk8=
-github.com/gkampitakis/go-snaps v0.4.9/go.mod h1:8HW4KX3JKV8M0GSw69CvT+Jqhd1AlBPMPpBfjBI3bdY=
-github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c=
-github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU=
-github.com/go-critic/go-critic v0.11.4 h1:O7kGOCx0NDIni4czrkRIXTnit0mkyKOCePh3My6OyEU=
-github.com/go-critic/go-critic v0.11.4/go.mod h1:2QAdo4iuLik5S9YG0rT4wcZ8QxwHYkrr6/2MWAiv/vc=
-github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
-github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
-github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM=
-github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU=
-github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4=
-github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
-github.com/go-git/go-git/v5 v5.16.0 h1:k3kuOEpkc0DeY7xlL6NaaNg39xdgQbtH5mwCafHO9AQ=
-github.com/go-git/go-git/v5 v5.16.0/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8=
-github.com/go-jose/go-jose/v3 v3.0.4 h1:Wp5HA7bLQcKnf6YYao/4kpRpVMp/yf6+pJKV8WFSaNY=
-github.com/go-jose/go-jose/v3 v3.0.4/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ=
-github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
-github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
-github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
-github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
-github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
-github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
-github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE=
-github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
-github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
-github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
-github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
-github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU=
-github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
-github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
-github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
-github.com/go-toolsmith/astcast v1.1.0 h1:+JN9xZV1A+Re+95pgnMgDboWNVnIMMQXwfBwLRPgSC8=
-github.com/go-toolsmith/astcast v1.1.0/go.mod h1:qdcuFWeGGS2xX5bLM/c3U9lewg7+Zu4mr+xPwZIB4ZU=
-github.com/go-toolsmith/astcopy v1.1.0 h1:YGwBN0WM+ekI/6SS6+52zLDEf8Yvp3n2seZITCUBt5s=
-github.com/go-toolsmith/astcopy v1.1.0/go.mod h1:hXM6gan18VA1T/daUEHCFcYiW8Ai1tIwIzHY6srfEAw=
-github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4=
-github.com/go-toolsmith/astequal v1.1.0/go.mod h1:sedf7VIdCL22LD8qIvv7Nn9MuWJruQA/ysswh64lffQ=
-github.com/go-toolsmith/astequal v1.2.0 h1:3Fs3CYZ1k9Vo4FzFhwwewC3CHISHDnVUPC4x0bI2+Cw=
-github.com/go-toolsmith/astequal v1.2.0/go.mod h1:c8NZ3+kSFtFY/8lPso4v8LuJjdJiUFVnSuU3s0qrrDY=
-github.com/go-toolsmith/astfmt v1.1.0 h1:iJVPDPp6/7AaeLJEruMsBUlOYCmvg0MoCfJprsOmcco=
-github.com/go-toolsmith/astfmt v1.1.0/go.mod h1:OrcLlRwu0CuiIBp/8b5PYF9ktGVZUjlNMV634mhwuQ4=
-github.com/go-toolsmith/astp v1.1.0 h1:dXPuCl6u2llURjdPLLDxJeZInAeZ0/eZwFJmqZMnpQA=
-github.com/go-toolsmith/astp v1.1.0/go.mod h1:0T1xFGz9hicKs8Z5MfAqSUitoUYS30pDMsRVIDHs8CA=
-github.com/go-toolsmith/pkgload v1.2.2 h1:0CtmHq/02QhxcF7E9N5LIFcYFsMR5rdovfqTtRKkgIk=
-github.com/go-toolsmith/pkgload v1.2.2/go.mod h1:R2hxLNRKuAsiXCo2i5J6ZQPhnPMOVtU+f0arbFPWCus=
-github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8=
-github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQiyP2Bvw=
-github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ=
-github.com/go-toolsmith/typep v1.1.0 h1:fIRYDyF+JywLfqzyhdiHzRop/GQDxxNhLGQ6gFUNHus=
-github.com/go-toolsmith/typep v1.1.0/go.mod h1:fVIw+7zjdsMxDA3ITWnH1yOiw1rnTQKCsF/sk2H/qig=
-github.com/go-viper/mapstructure/v2 v2.0.0 h1:dhn8MZ1gZ0mzeodTG3jt5Vj/o87xZKuNAprG2mQfMfc=
-github.com/go-viper/mapstructure/v2 v2.0.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
-github.com/go-xmlfmt/xmlfmt v1.1.2 h1:Nea7b4icn8s57fTx1M5AI4qQT5HEM3rVUO8MuE6g80U=
-github.com/go-xmlfmt/xmlfmt v1.1.2/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM=
-github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
-github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
-github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
-github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
-github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E=
-github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0=
-github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0=
-github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
-github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
-github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc=
-github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
-github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
-github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
-github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM=
-github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk=
-github.com/golangci/gofmt v0.0.0-20231018234816-f50ced29576e h1:ULcKCDV1LOZPFxGZaA6TlQbiM3J2GCPnkx/bGF6sX/g=
-github.com/golangci/gofmt v0.0.0-20231018234816-f50ced29576e/go.mod h1:Pm5KhLPA8gSnQwrQ6ukebRcapGb/BG9iUkdaiCcGHJM=
-github.com/golangci/golangci-lint v1.59.1 h1:CRRLu1JbhK5avLABFJ/OHVSQ0Ie5c4ulsOId1h3TTks=
-github.com/golangci/golangci-lint v1.59.1/go.mod h1:jX5Oif4C7P0j9++YB2MMJmoNrb01NJ8ITqKWNLewThg=
-github.com/golangci/misspell v0.6.0 h1:JCle2HUTNWirNlDIAUO44hUsKhOFqGPoC4LZxlaSXDs=
-github.com/golangci/misspell v0.6.0/go.mod h1:keMNyY6R9isGaSAu+4Q8NMBwMPkh15Gtc8UCVoDtAWo=
-github.com/golangci/modinfo v0.3.4 h1:oU5huX3fbxqQXdfspamej74DFX0kyGLkw1ppvXoJ8GA=
-github.com/golangci/modinfo v0.3.4/go.mod h1:wytF1M5xl9u0ij8YSvhkEVPP3M5Mc7XLl1pxH3B2aUM=
-github.com/golangci/plugin-module-register v0.1.1 h1:TCmesur25LnyJkpsVrupv1Cdzo+2f7zX0H6Jkw1Ol6c=
-github.com/golangci/plugin-module-register v0.1.1/go.mod h1:TTpqoB6KkwOJMV8u7+NyXMrkwwESJLOkfl9TxR1DGFc=
-github.com/golangci/revgrep v0.5.3 h1:3tL7c1XBMtWHHqVpS5ChmiAAoe4PF/d5+ULzV9sLAzs=
-github.com/golangci/revgrep v0.5.3/go.mod h1:U4R/s9dlXZsg8uJmaR1GrloUr14D7qDl8gi2iPXJH8k=
-github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed h1:IURFTjxeTfNFP0hTEi1YKjB/ub8zkpaOqFFMApi2EAs=
-github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed/go.mod h1:XLXN8bNw4CGRPaqgl3bv/lhz7bsGPh4/xSaMTbo2vkQ=
-github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
-github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
-github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
-github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
-github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
-github.com/google/go-replayers/grpcreplay v1.1.0 h1:S5+I3zYyZ+GQz68OfbURDdt/+cSMqCK1wrvNx7WBzTE=
-github.com/google/go-replayers/grpcreplay v1.1.0/go.mod h1:qzAvJ8/wi57zq7gWqaE6AwLM6miiXUQwP1S+I9icmhk=
-github.com/google/go-replayers/httpreplay v1.2.0 h1:VM1wEyyjaoU53BwrOnaf9VhAyQQEEioJvFYxYcLRKzk=
-github.com/google/go-replayers/httpreplay v1.2.0/go.mod h1:WahEFFZZ7a1P4VM1qEeHy+tME4bwyqPcwWbNlUI1Mcg=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
-github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw=
-github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
-github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af h1:kmjWCqn2qkEml422C2Rrd27c3VGxi6a/6HNq8QmHRKM=
-github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo=
-github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
-github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
-github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
-github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
-github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
-github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
-github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/wire v0.6.0 h1:HBkoIh4BdSxoyo9PveV8giw7ZsaBOvzWKfcg/6MrVwI=
-github.com/google/wire v0.6.0/go.mod h1:F4QhpQ9EDIdJ1Mbop/NZBRB+5yrR6qg3BnctaoUk6NA=
-github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
-github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
-github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA=
-github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc=
-github.com/gordonklaus/ineffassign v0.1.0 h1:y2Gd/9I7MdY1oEIt+n+rowjBNDcLQq3RsH5hwJd0f9s=
-github.com/gordonklaus/ineffassign v0.1.0/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0=
-github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY=
-github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c=
-github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
-github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
-github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
-github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk=
-github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc=
-github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado=
-github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q=
-github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM=
-github.com/gostaticanalysis/forcetypeassert v0.1.0 h1:6eUflI3DiGusXGK6X7cCcIgVCpZ2CiZ1Q7jl6ZxNV70=
-github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak=
-github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk=
-github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A=
-github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M=
-github.com/gostaticanalysis/testutil v0.4.0 h1:nhdCmubdmDF6VEatUNjgUZBJKWRqugoISdUv3PPQgHY=
-github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI=
-github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU=
-github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw=
-github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
-github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
-github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
-github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
-github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
-github.com/hashicorp/go-cty-funcs v0.0.0-20241120183456-c51673e0b3dd h1:nwSMaLX+rf/ZPHTJHWO9K73be04SritSKvKuvpBvC2A=
-github.com/hashicorp/go-cty-funcs v0.0.0-20241120183456-c51673e0b3dd/go.mod h1:Abjk0jbRkDaNCzsRhOv2iDCofYpX1eVsjozoiK63qLA=
-github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
-github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
-github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
-github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
-github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU=
-github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk=
-github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc=
-github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
-github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8 h1:iBt4Ew4XEGLfh6/bPk4rSYmuZJGizr6/x/AEizP0CQc=
-github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8/go.mod h1:aiJI+PIApBRQG7FZTEBx5GiiX+HbOHilUdNxUZi4eV0=
-github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts=
-github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4=
-github.com/hashicorp/go-sockaddr v1.0.6 h1:RSG8rKU28VTUTvEKghe5gIhIQpv8evvNpnDEyqO4u9I=
-github.com/hashicorp/go-sockaddr v1.0.6/go.mod h1:uoUUmtwU7n9Dv3O4SNLeFvg0SxQ3lyjsj6+CCykpaxI=
-github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=
-github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
-github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
-github.com/hashicorp/hcl/v2 v2.23.0 h1:Fphj1/gCylPxHutVSEOf2fBOh1VE4AuLV7+kbJf3qos=
-github.com/hashicorp/hcl/v2 v2.23.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA=
-github.com/hashicorp/vault/api v1.12.0 h1:meCpJSesvzQyao8FCOgk2fGdoADAnbDu2WPJN1lDLJ4=
-github.com/hashicorp/vault/api v1.12.0/go.mod h1:si+lJCYO7oGkIoNPAN8j3azBLTn9SjMGS+jFaHd1Cck=
-github.com/hexops/autogold v1.3.0 h1:IEtGNPxBeBu8RMn8eKWh/Ll9dVNgSnJ7bp/qHgMQ14o=
-github.com/hexops/autogold v1.3.0/go.mod h1:d4hwi2rid66Sag+BVuHgwakW/EmaFr8vdTSbWDbrDRI=
-github.com/hexops/autogold/v2 v2.2.1 h1:JPUXuZQGkcQMv7eeDXuNMovjfoRYaa0yVcm+F3voaGY=
-github.com/hexops/autogold/v2 v2.2.1/go.mod h1:IJwxtUfj1BGLm0YsR/k+dIxYi6xbeLjqGke2bzcOTMI=
-github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
-github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
-github.com/hexops/valast v1.4.4 h1:rETyycw+/L2ZVJHHNxEBgh8KUn+87WugH9MxcEv9PGs=
-github.com/hexops/valast v1.4.4/go.mod h1:Jcy1pNH7LNraVaAZDLyv21hHg2WBv9Nf9FL6fGxU7o4=
-github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68=
-github.com/hinshun/vt10x v0.0.0-20220301184237-5011da428d02 h1:AgcIVYPa6XJnU3phs104wLj8l5GEththEw6+F79YsIY=
-github.com/hinshun/vt10x v0.0.0-20220301184237-5011da428d02/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68=
-github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
-github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
-github.com/ijc/Gotty v0.0.0-20170406111628-a8b993ba6abd h1:anPrsicrIi2ColgWTVPk+TrN42hJIWlfPHSBP9S0ZkM=
-github.com/ijc/Gotty v0.0.0-20170406111628-a8b993ba6abd/go.mod h1:3LVOLeyx9XVvwPgrt2be44XgSqndprz1G18rSk8KD84=
-github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
-github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
-github.com/in-toto/in-toto-golang v0.5.0 h1:hb8bgwr0M2hGdDsLjkJ3ZqJ8JFLL/tgYdAxF/XEFBbY=
-github.com/in-toto/in-toto-golang v0.5.0/go.mod h1:/Rq0IZHLV7Ku5gielPT4wPHJfH1GdHMCq8+WPxw8/BE=
-github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
-github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
-github.com/iwdgo/sigintwindows v0.2.2 h1:P6oWzpvV7MrEAmhUgs+zmarrWkyL77ycZz4v7+1gYAE=
-github.com/iwdgo/sigintwindows v0.2.2/go.mod h1:70wPb8oz8OnxPvsj2QMUjgIVhb8hMu5TUgX8KfFl7QY=
-github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
-github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
-github.com/jgautheron/goconst v1.7.1 h1:VpdAG7Ca7yvvJk5n8dMwQhfEZJh95kl/Hl9S1OI5Jkk=
-github.com/jgautheron/goconst v1.7.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4=
-github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs=
-github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c=
-github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48=
-github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0=
-github.com/jjti/go-spancheck v0.6.1 h1:ZK/wE5Kyi1VX3PJpUO2oEgeoI4FWOUm7Shb2Gbv5obI=
-github.com/jjti/go-spancheck v0.6.1/go.mod h1:vF1QkOO159prdo6mHRxak2CpzDpHAfKiPUDP/NeRnX8=
-github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
-github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
-github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
-github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
-github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4=
-github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc=
-github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
-github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
-github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
-github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY=
-github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0=
-github.com/karamaru-alpha/copyloopvar v1.1.0 h1:x7gNyKcC2vRBO1H2Mks5u1VxQtYvFiym7fCjIP8RPos=
-github.com/karamaru-alpha/copyloopvar v1.1.0/go.mod h1:u7CIfztblY0jZLOQZgH3oYsJzpC2A7S6u/lfgSXHy0k=
-github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
-github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
-github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
-github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
-github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6 h1:IsMZxCuZqKuao2vNdfD82fjjgPLfyHLpR41Z88viRWs=
-github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6/go.mod h1:3VeWNIJaW+O5xpRQbPp0Ybqu1vJd/pm7s2F473HRrkw=
-github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/errcheck v1.7.0 h1:+SbscKmWJ5mOK/bO1zS60F5I9WwZDWOfRsC4RwfwRV0=
-github.com/kisielk/errcheck v1.7.0/go.mod h1:1kLL+jV4e+CFfueBmI1dSK2ADDyQnlrnrY/FqKluHJQ=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kkHAIKE/contextcheck v1.1.5 h1:CdnJh63tcDe53vG+RebdpdXJTc9atMgGqdx8LXxiilg=
-github.com/kkHAIKE/contextcheck v1.1.5/go.mod h1:O930cpht4xb1YQpK+1+AgoM3mFsvxr7uyFptcnWTYUA=
-github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
-github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
-github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs=
-github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I=
-github.com/kunwardeep/paralleltest v1.0.10 h1:wrodoaKYzS2mdNVnc4/w31YaXFtsc21PCTdvWJ/lDDs=
-github.com/kunwardeep/paralleltest v1.0.10/go.mod h1:2C7s65hONVqY7Q5Efj5aLzRCNLjw2h4eMc9EcypGjcY=
-github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
-github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
-github.com/kyoh86/exportloopref v0.1.11 h1:1Z0bcmTypkL3Q4k+IDHMWTcnCliEZcaPiIe0/ymEyhQ=
-github.com/kyoh86/exportloopref v0.1.11/go.mod h1:qkV4UF1zGl6EkF1ox8L5t9SwyeBAZ3qLMd6up458uqA=
-github.com/lasiar/canonicalheader v1.1.1 h1:wC+dY9ZfiqiPwAexUApFush/csSPXeIi4QqyxXmng8I=
-github.com/lasiar/canonicalheader v1.1.1/go.mod h1:cXkb3Dlk6XXy+8MVQnF23CYKWlyA7kfQhSw2CcZtZb0=
-github.com/ldez/gomoddirectives v0.2.4 h1:j3YjBIjEBbqZ0NKtBNzr8rtMHTOrLPeiwTkfUJZ3alg=
-github.com/ldez/gomoddirectives v0.2.4/go.mod h1:oWu9i62VcQDYp9EQ0ONTfqLNh+mDLWWDO+SO0qSQw5g=
-github.com/ldez/tagliatelle v0.5.0 h1:epgfuYt9v0CG3fms0pEgIMNPuFf/LpPIfjk4kyqSioo=
-github.com/ldez/tagliatelle v0.5.0/go.mod h1:rj1HmWiL1MiKQuOONhd09iySTEkUuE/8+5jtPYz9xa4=
-github.com/leonklingele/grouper v1.1.2 h1:o1ARBDLOmmasUaNDesWqWCIFH3u7hoFlM84YrjT3mIY=
-github.com/leonklingele/grouper v1.1.2/go.mod h1:6D0M/HVkhs2yRKRFZUoGjeDy7EZTfFBE9gl4kjmIGkA=
-github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
-github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
-github.com/liquidgecka/testlib v0.0.0-20180123051607-561e6b271c63 h1:E1gsAMD4TysLS1Vt2CGR1EK/RtNPIT7YkiVOy9PS1IM=
-github.com/liquidgecka/testlib v0.0.0-20180123051607-561e6b271c63/go.mod h1:vwMPvLIhXhkJaBfsk/6l+eDuiQaIVHC0b6eCvUVBsB0=
-github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
-github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
-github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM=
-github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM=
-github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
-github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
-github.com/macabu/inamedparam v0.1.3 h1:2tk/phHkMlEL/1GNe/Yf6kkR/hkcUdAEY3L0hjYV1Mk=
-github.com/macabu/inamedparam v0.1.3/go.mod h1:93FLICAIk/quk7eaPPQvbzihUdn/QkGDwIZEoLtpH6I=
-github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo=
-github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
-github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
-github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI=
-github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE=
-github.com/maratori/testpackage v1.1.1 h1:S58XVV5AD7HADMmD0fNnziNHqKvSdDuEKdPD1rNTU04=
-github.com/maratori/testpackage v1.1.1/go.mod h1:s4gRK/ym6AMrqpOa/kEbQTV4Q4jb7WeLZzVhVVVOQMc=
-github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26 h1:gWg6ZQ4JhDfJPqlo2srm/LN17lpybq15AryXIRcWYLE=
-github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s=
-github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE=
-github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
-github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
-github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
-github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
-github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
-github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
-github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
-github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
-github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
-github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4=
-github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88=
-github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
-github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
-github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
-github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
-github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
-github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
-github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
-github.com/mattn/go-shellwords v1.0.12 h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebGE2xrk=
-github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y=
-github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/mgechev/revive v1.3.7 h1:502QY0vQGe9KtYJ9FpxMz9rL+Fc/P13CI5POL4uHCcE=
-github.com/mgechev/revive v1.3.7/go.mod h1:RJ16jUbF0OWC3co/+XTxmFNgEpUPwnnA0BRllX2aDNA=
-github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
-github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
-github.com/microcosm-cc/bluemonday v1.0.21 h1:dNH3e4PSyE4vNX+KlRGHT5KrSvjeUkoNPwEORjffHJg=
-github.com/microcosm-cc/bluemonday v1.0.21/go.mod h1:ytNkv4RrDrLJ2pqlsSI46O6IVXmZOBBD4SaJyDwwTkM=
-github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU=
-github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
-github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
-github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
-github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
-github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc=
-github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg=
-github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0=
-github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=
-github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4=
-github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE=
-github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
-github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
-github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
-github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
-github.com/moby/buildkit v0.20.1 h1:sT0ZXhhNo5rVbMcYfgttma3TdUHfO5JjFA0UAL8p9fY=
-github.com/moby/buildkit v0.20.1/go.mod h1:Rq9nB/fJImdk6QeM0niKtOHJqwKeYMrK847hTTDVuA4=
-github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
-github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
-github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg=
-github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
-github.com/moby/moby v28.3.3+incompatible h1:nzkZIIn9bQP9S553kNmJ+U8PBhdS2ciFWphV2vX/Zp4=
-github.com/moby/moby v28.3.3+incompatible/go.mod h1:fDXVQ6+S340veQPv35CzDahGBmHsiclFwfEygB/TWMc=
-github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
-github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
-github.com/moby/spdystream v0.4.0 h1:Vy79D6mHeJJjiPdFEL2yku1kl0chZpJfZcPpb16BRl8=
-github.com/moby/spdystream v0.4.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI=
-github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg=
-github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4=
-github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU=
-github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko=
-github.com/moby/sys/signal v0.7.1 h1:PrQxdvxcGijdo6UXXo/lU/TvHUWyPhj7UOpSo8tuvk0=
-github.com/moby/sys/signal v0.7.1/go.mod h1:Se1VGehYokAkrSQwL4tDzHvETwUZlnY7S5XtQ50mQp8=
-github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo=
-github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs=
-github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
-github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
-github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ=
-github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/moricho/tparallel v0.3.1 h1:fQKD4U1wRMAYNngDonW5XupoB/ZGJHdpzrWqgyg9krA=
-github.com/moricho/tparallel v0.3.1/go.mod h1:leENX2cUv7Sv2qDgdi0D0fCftN8fRC67Bcn8pqzeYNI=
-github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
-github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
-github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI=
-github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo=
-github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
-github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
-github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
-github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8=
-github.com/muesli/termenv v0.13.0/go.mod h1:sP1+uffeLaEYpyOTb8pLCUctGcGLnoFjSn4YJK5e2bc=
-github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc=
-github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
-github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
-github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
-github.com/mxschmitt/golang-combinations v1.0.0 h1:NFoO7CSP8MUcFlHpe1YdewKwMa15dgDbaqkVLC5DUPI=
-github.com/mxschmitt/golang-combinations v1.0.0/go.mod h1:RbMhWvfCelHR6WROvT2bVfxJvZHoEvBj71SKe+H0MYU=
-github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U=
-github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE=
-github.com/natefinch/atomic v1.0.1 h1:ZPYKxkqQOx3KZ+RsbnP/YsgvxWQPGxjC0oBt2AhwV0A=
-github.com/natefinch/atomic v1.0.1/go.mod h1:N/D/ELrljoqDyT3rZrsUmtsuzvHkeB/wWjHV22AZRbM=
-github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d h1:AREM5mwr4u1ORQBMvzfzBgpsctsbQikCVpvC+tX285E=
-github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU=
-github.com/nightlyone/lockfile v1.0.0 h1:RHep2cFKK4PonZJDdEl4GmkabuhbsRMgk/k3uAmxBiA=
-github.com/nightlyone/lockfile v1.0.0/go.mod h1:rywoIealpdNse2r832aiD9jRk8ErCatROs6LzC841CI=
-github.com/nishanths/exhaustive v0.12.0 h1:vIY9sALmw6T/yxiASewa4TQcFsVYZQQRUQJhKRf3Swg=
-github.com/nishanths/exhaustive v0.12.0/go.mod h1:mEZ95wPIZW+x8kC4TgC+9YCUgiST7ecevsVDTgc2obs=
-github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk=
-github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c=
-github.com/nunnatsa/ginkgolinter v0.16.2 h1:8iLqHIZvN4fTLDC0Ke9tbSZVcyVHoBs0HIbnVSxfHJk=
-github.com/nunnatsa/ginkgolinter v0.16.2/go.mod h1:4tWRinDN1FeJgU+iJANW/kz7xKN5nYRAOfJDQUS9dOQ=
-github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY=
-github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc=
-github.com/olareg/olareg v0.1.0 h1:1dXBOgPrig5N7zoXyIZVQqU0QBo6sD9pbL6UYjY75CA=
-github.com/olareg/olareg v0.1.0/go.mod h1:RBuU7JW7SoIIxZKzLRhq8sVtQeAHzCAtRrXEBx2KlM4=
-github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
-github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
-github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA=
-github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To=
-github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
-github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
-github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
-github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
-github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
-github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
-github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk=
-github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
-github.com/opencontainers/selinux v1.11.1 h1:nHFvthhM0qY8/m+vfhJylliSshm8G1jJ2jDMcgULaH8=
-github.com/opencontainers/selinux v1.11.1/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec=
-github.com/opentracing/basictracer-go v1.1.0 h1:Oa1fTSBvAl8pa3U+IJYqrKm0NALwH9OsgwOqDv4xJW0=
-github.com/opentracing/basictracer-go v1.1.0/go.mod h1:V2HZueSJEp879yv285Aap1BS69fQMD+MNP1mRs6mBQc=
-github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
-github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
-github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
-github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw=
-github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU=
-github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w=
-github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
-github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs=
-github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo=
-github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc=
-github.com/otiai10/mint v1.5.1 h1:XaPLeE+9vGbuyEHem1JNk3bYc7KKqyI/na0/mLd/Kks=
-github.com/otiai10/mint v1.5.1/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM=
-github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
-github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
-github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
-github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
-github.com/pgavlin/aho-corasick v0.5.1 h1:ujv4DzpWK8G+MhoPAKYAir7znMHtcRQLDVa0cwFRvHw=
-github.com/pgavlin/aho-corasick v0.5.1/go.mod h1:UyKgVsAp5Un59BCpzrpFkPyETFMn1tGjdbRYvoq0l2g=
-github.com/pgavlin/diff v0.0.0-20230503175810-113847418e2e h1:Or25BtWLCyWKjnLyuMDrQsc6VcCs1V2AiKdOnxHEeEk=
-github.com/pgavlin/diff v0.0.0-20230503175810-113847418e2e/go.mod h1:WGwlmuPAiQTGQUjxyAfP7j4JgbgiFvFpI/qRtsQtS/4=
-github.com/pgavlin/fx v0.1.6 h1:r9jEg69DhNoCd3Xh0+5mIbdbS3PqWrVWujkY76MFRTU=
-github.com/pgavlin/fx v0.1.6/go.mod h1:KWZJ6fqBBSh8GxHYqwYCf3rYE7Gp2p0N8tJp8xv9u9M=
-github.com/pgavlin/fx/v2 v2.0.3 h1:ZBVklTFjxcWvBVPE+ti5qwnmTIQ0Gq6nuj3J5RKDtKk=
-github.com/pgavlin/fx/v2 v2.0.3/go.mod h1:Cvnwqq0BopdHUJ7CU50h1XPeKrF4ZwdFj1nJLXbAjCE=
-github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386 h1:LoCV5cscNVWyK5ChN/uCoIFJz8jZD63VQiGJIRgr6uo=
-github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386/go.mod h1:MRxHTJrf9FhdfNQ8Hdeh9gmHevC9RJE/fu8M3JIGjoE=
-github.com/pgavlin/text v0.0.0-20240821195002-b51d0990e284 h1:qpLdAFg3kyV/mEsuMPBgLzFo3xRpKBdOff8m0up9eAs=
-github.com/pgavlin/text v0.0.0-20240821195002-b51d0990e284/go.mod h1:fk4+YyTLi0Ap0CsL1HA70/tAs6evqw3hbPGdR8rD/3E=
-github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4=
-github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A=
-github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
-github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
-github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk=
-github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw=
-github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo=
-github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/polyfloyd/go-errorlint v1.5.2 h1:SJhVik3Umsjh7mte1vE0fVZ5T1gznasQG3PV7U5xFdA=
-github.com/polyfloyd/go-errorlint v1.5.2/go.mod h1:sH1QC1pxxi0fFecsVIzBmxtrgd9IF/SkJpA6wqyKAJs=
-github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
-github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
-github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
-github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
-github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
-github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
-github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
-github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y=
-github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
-github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
-github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
-github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
-github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
-github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc=
-github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8=
-github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
-github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
-github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
-github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 h1:vkHw5I/plNdTr435cARxCW6q9gc0S/Yxz7Mkd38pOb0=
-github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231/go.mod h1:murToZ2N9hNJzewjHBgfFdXhZKjY3z5cYC1VXk+lbFE=
-github.com/pulumi/esc v0.17.0 h1:oaVOIyFTENlYDuqc3pW75lQT9jb2cd6ie/4/Twxn66w=
-github.com/pulumi/esc v0.17.0/go.mod h1:XnSxlt5NkmuAj304l/gK4pRErFbtqq6XpfX1tYT9Jbc=
-github.com/pulumi/inflector v0.2.1 h1:bqyiish3tq//vLeLiEstSFE5K7RNjy/ce47ed4QATu8=
-github.com/pulumi/inflector v0.2.1/go.mod h1:HUFCjcPTz96YtTuUlwG3i3EZG4WlniBvR9bd+iJxCUY=
-github.com/pulumi/providertest v0.3.1 h1:vlftr7TZlObh81mL88IhhF0/9ZbLrZZos4NAvR4HUUw=
-github.com/pulumi/providertest v0.3.1/go.mod h1:fFHUP4/9DRyYnHWiRnwcynMtM/a7hHR/QcJfcuZKO3A=
-github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet/v3 v3.0.0-20250806132441-44ca9a522cef h1:cxRa9R9To6OYKacIG2Em6zcM7BDNr6joC43uiV1lSVY=
-github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet/v3 v3.0.0-20250806132441-44ca9a522cef/go.mod h1:VLcnE1lj92EfRi7CRMzdPkQ9OQvrlg2upJM1lBZzNmg=
-github.com/pulumi/pulumi-go-provider v1.1.2 h1:NUQDXaftBDFTPMBPwxo8FhJUX0ymkv6a1XiXTnCDpvg=
-github.com/pulumi/pulumi-go-provider v1.1.2/go.mod h1:3lNIuxT/BArFyiKrVfv+UT7gMMtplss7V69KuBZ4zIk=
-github.com/pulumi/pulumi-java/pkg v1.16.0 h1:8KCiIXWv2uxfIks0SdgOezyXg4HZIoPfHID9eMg4nuM=
-github.com/pulumi/pulumi-java/pkg v1.16.0/go.mod h1:VeMZ1s9LfXBypao4A1tRF3EB7fYnYZ1LwImyg6FBX0c=
-github.com/pulumi/pulumi-yaml v1.21.2 h1:czqC5AazinfX6Bj0nqAAQ6x/Cr8/3oUz3HUjJg6tJ4o=
-github.com/pulumi/pulumi-yaml v1.21.2/go.mod h1:KOqDnuJksfIq8belFVFN3IEI4r0NgW69M0QPSj54On4=
-github.com/pulumi/pulumi/pkg/v3 v3.192.0 h1:gZRMPaNpW+VN3ng3h9r8De8wI0keWC9fIP0rcUDatMA=
-github.com/pulumi/pulumi/pkg/v3 v3.192.0/go.mod h1:+Zp3EzjzGW4PlcW8oITZgeOfFzIVbLWvHtUVixvGQcs=
-github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3 v3.0.0-20250806165243-bee5e4fa4815 h1:tipGG4aEPejP424igQYxJ6TOtWVtZJa0z679oIv00ho=
-github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3 v3.0.0-20250806165243-bee5e4fa4815/go.mod h1:V2MMs29cFeGBdZyFKxNqTGVfBgDLhIOGfrXOxheieuI=
-github.com/pulumi/pulumi/sdk/nodejs/cmd/pulumi-language-nodejs/v3 v3.0.0-20250806165243-bee5e4fa4815 h1:+QJTFK7UcOFTYCg3XaSTrRZHWJ6Hqza8w9oADa4pPcM=
-github.com/pulumi/pulumi/sdk/nodejs/cmd/pulumi-language-nodejs/v3 v3.0.0-20250806165243-bee5e4fa4815/go.mod h1:0kA9b5LsaXLEKQzo0o9UUsHtZkACthHYLyBVUDUVMxc=
-github.com/pulumi/pulumi/sdk/python/cmd/pulumi-language-python/v3 v3.0.0-20250806165243-bee5e4fa4815 h1:bkvtySMos0ij3fWZWZaU5sVrvGvU0dZCusoxpgEtX6I=
-github.com/pulumi/pulumi/sdk/python/cmd/pulumi-language-python/v3 v3.0.0-20250806165243-bee5e4fa4815/go.mod h1:SJtr0N/XFyelI7M7U0UbJXr15pgEdSmpN40cglTsRTA=
-github.com/pulumi/pulumi/sdk/v3 v3.192.0 h1:sfHuR3P02wSbV3xdSMEQ0+uC/HzlMz0YfKrVAXy1hSQ=
-github.com/pulumi/pulumi/sdk/v3 v3.192.0/go.mod h1:aV0+c5xpSYccWKmOjTZS9liYCqh7+peu3cQgSXu7CJw=
-github.com/quasilyte/go-ruleguard v0.4.2 h1:htXcXDK6/rO12kiTHKfHuqR4kr3Y4M0J0rOL6CH/BYs=
-github.com/quasilyte/go-ruleguard v0.4.2/go.mod h1:GJLgqsLeo4qgavUoL8JeGFNS7qcisx3awV/w9eWTmNI=
-github.com/quasilyte/go-ruleguard/dsl v0.3.22 h1:wd8zkOhSNr+I+8Qeciml08ivDt1pSXe60+5DqOpCjPE=
-github.com/quasilyte/go-ruleguard/dsl v0.3.22/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU=
-github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo=
-github.com/quasilyte/gogrep v0.5.0/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng=
-github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 h1:TCg2WBOl980XxGFEZSS6KlBGIV0diGdySzxATTWoqaU=
-github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0=
-github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs=
-github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ=
-github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E=
-github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw=
-github.com/regclient/regclient v0.7.1 h1:qEsJrTmZd98fZKjueAbrZCSNGU+ifnr6xjlSAs3WOPs=
-github.com/regclient/regclient v0.7.1/go.mod h1:+w/BFtJuw0h0nzIw/z2+1FuA2/dVXBzDq4rYmziJpMc=
-github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
-github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
-github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
-github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
-github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
-github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
-github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
-github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/ryancurrah/gomodguard v1.3.2 h1:CuG27ulzEB1Gu5Dk5gP8PFxSOZ3ptSdP5iI/3IXxM18=
-github.com/ryancurrah/gomodguard v1.3.2/go.mod h1:LqdemiFomEjcxOqirbQCb3JFvSxH2JUYMerTFd3sF2o=
-github.com/ryanrolds/sqlclosecheck v0.5.1 h1:dibWW826u0P8jNLsLN+En7+RqWWTYrjCB9fJfSfdyCU=
-github.com/ryanrolds/sqlclosecheck v0.5.1/go.mod h1:2g3dUjoS6AL4huFdv6wn55WpLIDjY7ZgUR4J8HOO/XQ=
-github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk=
-github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
-github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI=
-github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs=
-github.com/sanposhiho/wastedassign/v2 v2.0.7 h1:J+6nrY4VW+gC9xFzUc+XjPD3g3wF3je/NsJFwFK7Uxc=
-github.com/sanposhiho/wastedassign/v2 v2.0.7/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI=
-github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4=
-github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY=
-github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw=
-github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ=
-github.com/sashamelentyev/usestdlibvars v1.26.0 h1:LONR2hNVKxRmzIrZR0PhSF3mhCAzvnr+DcUiHgREfXE=
-github.com/sashamelentyev/usestdlibvars v1.26.0/go.mod h1:9nl0jgOfHKWNFS43Ojw0i7aRoS4j6EBye3YBhmAIRF8=
-github.com/secure-systems-lab/go-securesystemslib v0.4.0 h1:b23VGrQhTA8cN2CbBw7/FulN9fTtqYUdS5+Oxzt+DUE=
-github.com/secure-systems-lab/go-securesystemslib v0.4.0/go.mod h1:FGBZgq2tXWICsxWQW1msNf49F0Pf2Op5Htayx335Qbs=
-github.com/securego/gosec/v2 v2.20.1-0.20240525090044-5f0084eb01a9 h1:rnO6Zp1YMQwv8AyxzuwsVohljJgp4L0ZqiCgtACsPsc=
-github.com/securego/gosec/v2 v2.20.1-0.20240525090044-5f0084eb01a9/go.mod h1:dg7lPlu/xK/Ut9SedURCoZbVCR4yC7fM65DtH9/CDHs=
-github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys=
-github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs=
-github.com/segmentio/encoding v0.4.1 h1:KLGaLSW0jrmhB58Nn4+98spfvPvmo4Ci1P/WIQ9wn7w=
-github.com/segmentio/encoding v0.4.1/go.mod h1:/d03Cd8PoaDeceuhUUUQWjU0KhWjrmYrWPgtJHYZSnI=
-github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
-github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
-github.com/serialx/hashring v0.0.0-20200727003509-22c0c7ab6b1b h1:h+3JX2VoWTFuyQEo87pStk/a99dzIO1mM9KxIyLPGTU=
-github.com/serialx/hashring v0.0.0-20200727003509-22c0c7ab6b1b/go.mod h1:/yeG0My1xr/u+HZrFQ1tOQQQQrOawfyMUH13ai5brBc=
-github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU=
-github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs=
-github.com/shibumi/go-pathspec v1.3.0 h1:QUyMZhFo0Md5B8zV8x2tesohbb5kfbpTi9rBnKh5dkI=
-github.com/shibumi/go-pathspec v1.3.0/go.mod h1:Xutfslp817l2I1cZvgcfeMQJG5QnU2lh5tVaaMCl3jE=
-github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI=
-github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk=
-github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
-github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
-github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
-github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
-github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
-github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ=
-github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk=
-github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
-github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546 h1:pXY9qYc/MP5zdvqWEUH6SjNiu7VhSjuVFTFiTcphaLU=
-github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw=
-github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
-github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
-github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
-github.com/sivchari/containedctx v1.0.3 h1:x+etemjbsh2fB5ewm5FeLNi5bUjK0V8n0RB+Wwfd0XE=
-github.com/sivchari/containedctx v1.0.3/go.mod h1:c1RDvCbnJLtH4lLcYD/GqwiBSSf4F5Qk0xld2rBqzJ4=
-github.com/sivchari/tenv v1.7.1 h1:PSpuD4bu6fSmtWMxSGWcvqUUgIn7k3yOJhOIzVWn8Ak=
-github.com/sivchari/tenv v1.7.1/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg=
-github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8=
-github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY=
-github.com/sonatard/noctx v0.0.2 h1:L7Dz4De2zDQhW8S0t+KUjY0MAQJd6SgVwhzNIc4ok00=
-github.com/sonatard/noctx v0.0.2/go.mod h1:kzFz+CzWSjQ2OzIm46uJZoXuBpa2+0y3T36U18dWqIo=
-github.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 h1:8ZnTA26bBOoPkAbbitKPgNlpw0Bwt7ZlpYgZWHWJR/w=
-github.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67/go.mod h1:tNZjgbYncKL5HxvDULAr/mWDmFz4B7H8yrXEDlnoIiw=
-github.com/sourcegraph/go-diff v0.7.0 h1:9uLlrd5T46OXs5qpp8L/MTltk0zikUGi0sNNyCpA8G0=
-github.com/sourcegraph/go-diff v0.7.0/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs=
-github.com/spdx/tools-golang v0.5.3 h1:ialnHeEYUC4+hkm5vJm4qz2x+oEJbS0mAMFrNXdQraY=
-github.com/spdx/tools-golang v0.5.3/go.mod h1:/ETOahiAo96Ob0/RAIBmFZw6XN0yTnyr/uFZm2NTMhI=
-github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA=
-github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo=
-github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
-github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
-github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
-github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
-github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
-github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
-github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ=
-github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI=
-github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0=
-github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I=
-github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc=
-github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
-github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
-github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
-github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs=
-github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
-github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c h1:+aPplBwWcHBo6q9xrfWdMrT9o4kltkmmvpemgIjep/8=
-github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c/go.mod h1:SbErYREK7xXdsRiigaQiQkI9McGRzYMvlKYaP3Nimdk=
-github.com/tdakkota/asciicheck v0.2.0 h1:o8jvnUANo0qXtnslk2d3nMKTFNlOnJjRrNcj0j9qkHM=
-github.com/tdakkota/asciicheck v0.2.0/go.mod h1:Qb7Y9EgjCLJGup51gDHFzbI08/gbGhL/UVhYIPWG2rg=
-github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA=
-github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0=
-github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpRQGxTSkNYKJ51yaw6ChIqO+Je8UqsTKN/cDag=
-github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY=
-github.com/tetafro/godot v1.4.16 h1:4ChfhveiNLk4NveAZ9Pu2AN8QZ2nkUGFuadM9lrr5D0=
-github.com/tetafro/godot v1.4.16/go.mod h1:2oVxTBSftRTh4+MVfUaUXR6bn2GDXCaMcOG4Dk3rfio=
-github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U=
-github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8=
-github.com/theupdateframework/notary v0.7.0 h1:QyagRZ7wlSpjT5N2qQAh/pN+DVqgekv4DzbAiAiEL3c=
-github.com/theupdateframework/notary v0.7.0/go.mod h1:c9DRxcmhHmVLDay4/2fUYdISnHqbFDGRSlXPO0AhYWw=
-github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM=
-github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
-github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
-github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
-github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
-github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
-github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
-github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
-github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966 h1:quvGphlmUVU+nhpFa4gg4yJyTRJ13reZMDHrKwYw53M=
-github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966/go.mod h1:27bSVNWSBOHm+qRp1T9qzaIpsWEP6TbUnei/43HK+PQ=
-github.com/timonwong/loggercheck v0.9.4 h1:HKKhqrjcVj8sxL7K77beXh0adEm6DLjV/QOGeMXEVi4=
-github.com/timonwong/loggercheck v0.9.4/go.mod h1:caz4zlPcgvpEkXgVnAJGowHAMW2NwHaNlpS8xDbVhTg=
-github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
-github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
-github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
-github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
-github.com/tomarrell/wrapcheck/v2 v2.8.3 h1:5ov+Cbhlgi7s/a42BprYoxsr73CbdMUTzE3bRDFASUs=
-github.com/tomarrell/wrapcheck/v2 v2.8.3/go.mod h1:g9vNIyhb5/9TQgumxQyOEqDHsmGYcGsVMOx/xGkqdMo=
-github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw=
-github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw=
-github.com/tonistiigi/dchapes-mode v0.0.0-20241001053921-ca0759fec205 h1:eUk79E1w8yMtXeHSzjKorxuC8qJOnyXQnLaJehxpJaI=
-github.com/tonistiigi/dchapes-mode v0.0.0-20241001053921-ca0759fec205/go.mod h1:3Iuxbr0P7D3zUzBMAZB+ois3h/et0shEz0qApgHYGpY=
-github.com/tonistiigi/fsutil v0.0.0-20250113203817-b14e27f4135a h1:EfGw4G0x/8qXWgtcZ6KVaPS+wpWOQMaypczzP8ojkMY=
-github.com/tonistiigi/fsutil v0.0.0-20250113203817-b14e27f4135a/go.mod h1:Dl/9oEjK7IqnjAm21Okx/XIxUCFJzvh+XdVHUlBwXTw=
-github.com/tonistiigi/go-csvvalue v0.0.0-20240710180619-ddb21b71c0b4 h1:7I5c2Ig/5FgqkYOh/N87NzoyI9U15qUPXhDD8uCupv8=
-github.com/tonistiigi/go-csvvalue v0.0.0-20240710180619-ddb21b71c0b4/go.mod h1:278M4p8WsNh3n4a1eqiFcV2FGk7wE5fwUpUom9mK9lE=
-github.com/tonistiigi/jaeger-ui-rest v0.0.0-20250211190051-7d4944a45bb6 h1:RT/a0RvdX84iwtOrUK45+wjcNpaG+hS7n7XFYqj4axg=
-github.com/tonistiigi/jaeger-ui-rest v0.0.0-20250211190051-7d4944a45bb6/go.mod h1:3Ez1Paeg+0Ghu3KwpEGC1HgZ4CHDlg+Ez/5Baeomk54=
-github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea h1:SXhTLE6pb6eld/v/cCndK0AMpt1wiVFb/YYmqB3/QG0=
-github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea/go.mod h1:WPnis/6cRcDZSUvVmezrxJPkiO87ThFYsoUiMwWNDJk=
-github.com/tonistiigi/vt100 v0.0.0-20240514184818-90bafcd6abab h1:H6aJ0yKQ0gF49Qb2z5hI1UHxSQt4JMyxebFR15KnApw=
-github.com/tonistiigi/vt100 v0.0.0-20240514184818-90bafcd6abab/go.mod h1:ulncasL3N9uLrVann0m+CDlJKWsIAP34MPcOJF6VRvc=
-github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o=
-github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
-github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
-github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
-github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc=
-github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
-github.com/ultraware/funlen v0.1.0 h1:BuqclbkY6pO+cvxoq7OsktIXZpgBSkYTQtmwhAK81vI=
-github.com/ultraware/funlen v0.1.0/go.mod h1:XJqmOQja6DpxarLj6Jj1U7JuoS8PvL4nEqDaQhy22p4=
-github.com/ultraware/whitespace v0.1.1 h1:bTPOGejYFulW3PkcrqkeQwOd6NKOOXvmGD9bo/Gk8VQ=
-github.com/ultraware/whitespace v0.1.1/go.mod h1:XcP1RLD81eV4BW8UhQlpaR+SDc2givTvyI8a586WjW8=
-github.com/uudashr/gocognit v1.1.2 h1:l6BAEKJqQH2UpKAPKdMfZf5kE4W/2xk8pfU1OVLvniI=
-github.com/uudashr/gocognit v1.1.2/go.mod h1:aAVdLURqcanke8h3vg35BC++eseDm66Z7KmchI5et4k=
-github.com/vbatts/tar-split v0.11.6 h1:4SjTW5+PU11n6fZenf2IPoV8/tz3AaYHMWjf23envGs=
-github.com/vbatts/tar-split v0.11.6/go.mod h1:dqKNtesIOr2j2Qv3W/cHjnvk9I8+G7oAkFDFN6TCBEI=
-github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
-github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
-github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
-github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
-github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
-github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
-github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
-github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
-github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
-github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
-github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
-github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
-github.com/xen0n/gosmopolitan v1.2.2 h1:/p2KTnMzwRexIW8GlKawsTWOxn7UHA+jCMF/V8HHtvU=
-github.com/xen0n/gosmopolitan v1.2.2/go.mod h1:7XX7Mj61uLYrj0qmeN0zi7XDon9JRAEhYQqAPLVNTeg=
-github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
-github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
-github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM=
-github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk=
-github.com/yeya24/promlinter v0.3.0 h1:JVDbMp08lVCP7Y6NP3qHroGAO6z2yGKQtS5JsjqtoFs=
-github.com/yeya24/promlinter v0.3.0/go.mod h1:cDfJQQYv9uYciW60QT0eeHlFodotkYZlL+YcPQN+mW4=
-github.com/ykadowak/zerologlint v0.1.5 h1:Gy/fMz1dFQN9JZTPjv1hxEk+sRWm05row04Yoolgdiw=
-github.com/ykadowak/zerologlint v0.1.5/go.mod h1:KaUskqF3e/v59oPmdq1U1DnKcuHokl2/K1U4pmIELKg=
-github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-github.com/yuin/goldmark v1.5.2 h1:ALmeCk/px5FSm1MAcFBAsVKZjDuMVj8Tm7FFIlMJnqU=
-github.com/yuin/goldmark v1.5.2/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-github.com/yuin/goldmark-emoji v1.0.1 h1:ctuWEyzGBwiucEqxzwe0SOYDXPAucOrE9NQC18Wa1os=
-github.com/yuin/goldmark-emoji v1.0.1/go.mod h1:2w1E6FEWLcDQkoTE+7HU6QF1F6SLlNGjRIBbIZQFqkQ=
-github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
-github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
-github.com/zclconf/go-cty v1.4.0/go.mod h1:nHzOclRkoj++EU9ZjSrZvRG0BXIWt8c7loYc0qXAFGQ=
-github.com/zclconf/go-cty v1.16.3 h1:osr++gw2T61A8KVYHoQiFbFd1Lh3JOCXc/jFLJXKTxk=
-github.com/zclconf/go-cty v1.16.3/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
-github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo=
-github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM=
-gitlab.com/bosi/decorder v0.4.2 h1:qbQaV3zgwnBZ4zPMhGLW4KZe7A7NwxEhJx39R3shffo=
-gitlab.com/bosi/decorder v0.4.2/go.mod h1:muuhHoaJkA9QLcYHq4Mj8FJUwDZ+EirSHRiaTcTf6T8=
-go-simpler.org/assert v0.9.0 h1:PfpmcSvL7yAnWyChSjOz6Sp6m9j5lyK8Ok9pEL31YkQ=
-go-simpler.org/assert v0.9.0/go.mod h1:74Eqh5eI6vCK6Y5l3PI8ZYFXG4Sa+tkr70OIPJAUr28=
-go-simpler.org/musttag v0.12.2 h1:J7lRc2ysXOq7eM8rwaTYnNrHd5JwjppzB6mScysB2Cs=
-go-simpler.org/musttag v0.12.2/go.mod h1:uN1DVIasMTQKk6XSik7yrJoEysGtR2GRqvWnI9S7TYM=
-go-simpler.org/sloglint v0.7.1 h1:qlGLiqHbN5islOxjeLXoPtUdZXb669RW+BDQ+xOSNoU=
-go-simpler.org/sloglint v0.7.1/go.mod h1:OlaVDRh/FKKd4X4sIMbsz8st97vomydceL146Fthh/c=
-go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
-go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
-go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
-go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0 h1:yMkBS9yViCc7U7yeLzJPM2XizlfdVvBRSmsQDWu6qc0=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0/go.mod h1:n8MR6/liuGB5EmTETUBeU5ZgqMOlqKRxUaqPQBOANZ8=
-go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.56.0 h1:4BZHA+B1wXEQoGNHxW8mURaLhcdGwvRnmhGbm+odRbc=
-go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.56.0/go.mod h1:3qi2EEwMgB4xnKgPLqsDP3j9qxnHDZeHsnAxfjQqTko=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 h1:UP6IpuHFkUgOQL9FFQFrZ+5LiwhhYRbi7VZSIx6Nj5s=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0/go.mod h1:qxuZLtbq5QDtdeSHsS7bcf6EH6uO6jUAgk764zd3rhM=
-go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
-go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
-go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.31.0 h1:FZ6ei8GFW7kyPYdxJaV2rgI6M+4tvZzhYsQ2wgyVC08=
-go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.31.0/go.mod h1:MdEu/mC6j3D+tTEfvI15b5Ci2Fn7NneJ71YMoiS3tpI=
-go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.31.0 h1:ZsXq73BERAiNuuFXYqP4MR5hBrjXfMGSO+Cx7qoOZiM=
-go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.31.0/go.mod h1:hg1zaDMpyZJuUzjFxFsRYBoccE86tM9Uf4IqNMUxvrY=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0 h1:dNzwXjZKpMpE2JhmO+9HsPl42NIXFIFSUSSs0fiqra0=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0/go.mod h1:90PoxvaEB5n6AOdZvi+yWJQoE95U8Dhhw2bSyRqnTD0=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.36.0 h1:JgtbA0xkWHnTmYk7YusopJFX6uleBmAuZ8n05NEh8nQ=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.36.0/go.mod h1:179AK5aar5R3eS9FucPy6rggvU0g52cvKId8pv4+v0c=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0 h1:lUsI2TYsQw2r1IASwoROaCnjdj2cvC2+Jbxvk6nHnWU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0/go.mod h1:2HpZxxQurfGxJlJDblybejHB6RX6pmExPNe517hREw4=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.31.0 h1:UGZ1QwZWY67Z6BmckTU+9Rxn04m2bD3gD6Mk0OIOCPk=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.31.0/go.mod h1:fcwWuDuaObkkChiDlhEpSq9+X1C0omv+s5mBtToAQ64=
-go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
-go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
-go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
-go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
-go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk=
-go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w=
-go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
-go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
-go.opentelemetry.io/proto/otlp v1.6.0 h1:jQjP+AQyTf+Fe7OKj/MfkDrmK4MNVtw2NpXsf9fefDI=
-go.opentelemetry.io/proto/otlp v1.6.0/go.mod h1:cicgGehlFuNdgZkcALOCh3VE6K/u2tAjzlRhDwmVpZc=
-go.pennock.tech/tabular v1.1.3 h1:JYN3TdVkTjOWdZz2FwKcW7f69vRhPl4NAQqJ8RZAsmY=
-go.pennock.tech/tabular v1.1.3/go.mod h1:UzyxF5itNqTCS1ZGXfwDwbFgYj/lS+e67Fid68QOYZ0=
-go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
-go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
-go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
-go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko=
-go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o=
-go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
-go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-gocloud.dev v0.37.0 h1:XF1rN6R0qZI/9DYjN16Uy0durAmSlf58DHOcb28GPro=
-gocloud.dev v0.37.0/go.mod h1:7/O4kqdInCNsc6LqgmuFnS0GRew4XNNYWpA44yQnwco=
-gocloud.dev/secrets/hashivault v0.37.0 h1:5ehGtUBP29DFAgAs6bPw7fVSgqQ3TxaoK2xVcLp1x+c=
-gocloud.dev/secrets/hashivault v0.37.0/go.mod h1:4ClUWjBfP8wLdGts56acjHz3mWLuATMoH9vi74FjIv8=
-golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200422194213-44a606286825/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
-golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
-golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
-golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
-golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
-golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM=
-golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8=
-golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
-golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
-golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f h1:phY1HzDcf18Aq9A8KkmRtY9WvOFIxN8wgfvy6Zm1DV8=
-golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
-golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
-golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
-golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
-golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w=
-golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
-golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
-golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
-golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
-golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
-golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
-golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
-golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
-golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
-golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
-golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
-golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
-golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
-golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
-golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
-golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
-golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=
-golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
-golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
-golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
-golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
-golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
-golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
-golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
-golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
-golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
-golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
-golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
-golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
-golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU=
-golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU=
-golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
-golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
-golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4=
-golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
-golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
-golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k=
-golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
-golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
-golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=
-golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc=
-golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
-golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
-google.golang.org/api v0.169.0 h1:QwWPy71FgMWqJN/l6jVlFHUa29a7dcUy02I8o799nPY=
-google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7 h1:ImUcDPHjTrAqNhlOkSocDLfG9rrNHH7w7uoKWPaWZ8s=
-google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7/go.mod h1:/3XmxOjePkvmKrHuBy4zNFw7IzxJXtAgdpXi8Ll990U=
-google.golang.org/genproto/googleapis/api v0.0.0-20250519155744-55703ea1f237 h1:Kog3KlB4xevJlAcbbbzPfRG0+X9fdoGM+UBRKVz6Wr0=
-google.golang.org/genproto/googleapis/api v0.0.0-20250519155744-55703ea1f237/go.mod h1:ezi0AVyMKDWy5xAncvjLWH7UcLBB5n7y2fQ8MzjJcto=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 h1:cJfm9zPbe1e873mHJzmQ1nwVEeRDU/T1wXDK2kUSU34=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
-google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.72.1 h1:HR03wO6eyZ7lknl75XlxABNVLLFc2PAb6mHlYh756mA=
-google.golang.org/grpc v1.72.1/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
-google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
-gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
-gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
-gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
-gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
-gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o=
-gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.4.7 h1:9MDAWxMoSnB6QoSqiVr7P5mtkT9pOc1kSxchzPCnqJs=
-honnef.co/go/tools v0.4.7/go.mod h1:+rnGS1THNh8zMwnd2oVOTL9QF6vmfyG6ZXBULae2uc0=
-k8s.io/api v0.31.2 h1:3wLBbL5Uom/8Zy98GRPXpJ254nEFpl+hwndmk9RwmL0=
-k8s.io/api v0.31.2/go.mod h1:bWmGvrGPssSK1ljmLzd3pwCQ9MgoTsRCuK35u6SygUk=
-k8s.io/apimachinery v0.31.2 h1:i4vUt2hPK56W6mlT7Ry+AO8eEsyxMD1U44NR22CLTYw=
-k8s.io/apimachinery v0.31.2/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo=
-k8s.io/client-go v0.31.2 h1:Y2F4dxU5d3AQj+ybwSMqQnpZH9F30//1ObxOKlTI9yc=
-k8s.io/client-go v0.31.2/go.mod h1:NPa74jSVR/+eez2dFsEIHNa+3o09vtNaWwWwb1qSxSs=
-k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
-k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag=
-k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98=
-k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A=
-k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-lukechampine.com/frand v1.5.1 h1:fg0eRtdmGFIxhP5zQJzM1lFDbD6CUfu/f+7WgAZd5/w=
-lukechampine.com/frand v1.5.1/go.mod h1:4VstaWc2plN4Mjr10chUD46RAVGWhpkZ5Nja8+Azp0Q=
-mvdan.cc/gofumpt v0.6.0 h1:G3QvahNDmpD+Aek/bNOLrFR2XC6ZAdo62dZu65gmwGo=
-mvdan.cc/gofumpt v0.6.0/go.mod h1:4L0wf+kgIPZtcCWXynNS2e6bhmj73umwnuXSZarixzA=
-mvdan.cc/sh/v3 v3.7.0 h1:lSTjdP/1xsddtaKfGg7Myu7DnlHItd3/M2tomOcNNBg=
-mvdan.cc/sh/v3 v3.7.0/go.mod h1:K2gwkaesF/D7av7Kxl0HbF5kGOd2ArupNTX3X44+8l8=
-mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f h1:lMpcwN6GxNbWtbpI1+xzFLSW8XzX0u72NttUGVFjO3U=
-mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f/go.mod h1:RSLa7mKKCNeTTMHBw5Hsy2rfJmd6O2ivt9Dw9ZqCQpQ=
-pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw=
-pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
-sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
-sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
-sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
-sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
diff --git a/provider/cmd/pulumi-resource-docker-build/main.go b/provider/cmd/pulumi-resource-docker-build/main.go
deleted file mode 100644
index e6dfaed..0000000
--- a/provider/cmd/pulumi-resource-docker-build/main.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-// Package main invokes the provider as a gRPC server and runs forever.
-package main
-
-import (
- "github.com/pulumi/pulumi-docker-build/provider"
- "github.com/pulumi/pulumi/sdk/v3/go/common/util/cmdutil"
-)
-
-func main() {
- err := provider.Serve()
- if err != nil {
- cmdutil.ExitError(err.Error())
- }
-}
diff --git a/provider/cmd/pulumi-resource-docker-build/schema.json b/provider/cmd/pulumi-resource-docker-build/schema.json
deleted file mode 100644
index 8341918..0000000
--- a/provider/cmd/pulumi-resource-docker-build/schema.json
+++ /dev/null
@@ -1,1447 +0,0 @@
-{
- "name": "docker-build",
- "displayName": "docker-build",
- "description": "A Pulumi provider for building modern Docker images with buildx and BuildKit.",
- "keywords": [
- "docker",
- "buildkit",
- "buildx",
- "kind/native"
- ],
- "homepage": "https://pulumi.com",
- "license": "Apache-2.0",
- "repository": "https://github.com/pulumi/pulumi-docker-build",
- "publisher": "Pulumi",
- "meta": {
- "moduleFormat": "(.*)"
- },
- "language": {
- "csharp": {
- "packageReferences": {
- "Pulumi": "3.*"
- },
- "respectSchemaVersion": true
- },
- "go": {
- "importBasePath": "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild",
- "packageImportAliases": {
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild": "dockerbuild"
- },
- "respectSchemaVersion": true,
- "generics": "side-by-side"
- },
- "java": {
- "basePackage": "",
- "buildFiles": "gradle",
- "dependencies": {
- "com.google.code.findbugs:jsr305": "3.0.2",
- "com.google.code.gson:gson": "2.8.9",
- "com.pulumi:pulumi": "0.20.0"
- },
- "gradleNexusPublishPluginVersion": "1.1.0",
- "gradleTest": ""
- },
- "nodejs": {
- "respectSchemaVersion": true
- },
- "python": {
- "respectSchemaVersion": true,
- "pyproject": {
- "enabled": true
- }
- }
- },
- "config": {
- "variables": {
- "host": {
- "type": "string",
- "description": "The build daemon's address.",
- "default": "",
- "defaultInfo": {
- "environment": [
- "DOCKER_HOST"
- ]
- }
- },
- "registries": {
- "type": "array",
- "items": {
- "$ref": "#/types/docker-build:index:Registry"
- }
- }
- }
- },
- "types": {
- "docker-build:index:BuildContext": {
- "properties": {
- "location": {
- "type": "string",
- "description": "Resources to use for build context.\n\nThe location can be:\n* A relative or absolute path to a local directory (`.`, `./app`,\n `/app`, etc.).\n* A remote URL of a Git repository, tarball, or plain text file\n (`https://github.com/user/myrepo.git`, `http://server/context.tar.gz`,\n etc.)."
- },
- "named": {
- "type": "object",
- "additionalProperties": {
- "$ref": "#/types/docker-build:index:Context"
- },
- "description": "Additional build contexts to use.\n\nThese contexts are accessed with `FROM name` or `--from=name`\nstatements when using Dockerfile 1.4+ syntax.\n\nValues can be local paths, HTTP URLs, or `docker-image://` images."
- }
- },
- "type": "object",
- "required": [
- "location"
- ]
- },
- "docker-build:index:BuilderConfig": {
- "properties": {
- "name": {
- "type": "string",
- "description": "Name of an existing buildx builder to use.\n\nOnly `docker-container`, `kubernetes`, or `remote` drivers are\nsupported. The legacy `docker` driver is not supported.\n\nEquivalent to Docker's `--builder` flag."
- }
- },
- "type": "object"
- },
- "docker-build:index:CacheFrom": {
- "properties": {
- "azblob": {
- "$ref": "#/types/docker-build:index:CacheFromAzureBlob",
- "description": "Upload build caches to Azure's blob storage service."
- },
- "disabled": {
- "type": "boolean",
- "description": "When `true` this entry will be excluded. Defaults to `false`."
- },
- "gha": {
- "$ref": "#/types/docker-build:index:CacheFromGitHubActions",
- "description": "Recommended for use with GitHub Actions workflows.\n\nAn action like `crazy-max/ghaction-github-runtime` is recommended to\nexpose appropriate credentials to your GitHub workflow."
- },
- "local": {
- "$ref": "#/types/docker-build:index:CacheFromLocal",
- "description": "A simple backend which caches images on your local filesystem."
- },
- "raw": {
- "type": "string",
- "description": "A raw string as you would provide it to the Docker CLI (e.g.,\n`type=inline`)."
- },
- "registry": {
- "$ref": "#/types/docker-build:index:CacheFromRegistry",
- "description": "Upload build caches to remote registries."
- },
- "s3": {
- "$ref": "#/types/docker-build:index:CacheFromS3",
- "description": "Upload build caches to AWS S3 or an S3-compatible services such as\nMinIO."
- }
- },
- "type": "object"
- },
- "docker-build:index:CacheFromAzureBlob": {
- "properties": {
- "accountUrl": {
- "type": "string",
- "description": "Base URL of the storage account."
- },
- "name": {
- "type": "string",
- "description": "The name of the cache image."
- },
- "secretAccessKey": {
- "type": "string",
- "description": "Blob storage account key.",
- "secret": true
- }
- },
- "type": "object",
- "required": [
- "name"
- ]
- },
- "docker-build:index:CacheFromGitHubActions": {
- "properties": {
- "scope": {
- "type": "string",
- "description": "The scope to use for cache keys. Defaults to `buildkit`.\n\nThis should be set if building and caching multiple images in one\nworkflow, otherwise caches will overwrite each other.",
- "default": "buildkit"
- },
- "token": {
- "type": "string",
- "description": "The GitHub Actions token to use. This is not a personal access tokens\nand is typically generated automatically as part of each job.\n\nDefaults to `$ACTIONS_RUNTIME_TOKEN`, although a separate action like\n`crazy-max/ghaction-github-runtime` is recommended to expose this\nenvironment variable to your jobs.",
- "default": "",
- "defaultInfo": {
- "environment": [
- "ACTIONS_RUNTIME_TOKEN"
- ]
- },
- "secret": true
- },
- "url": {
- "type": "string",
- "description": "The cache server URL to use for artifacts.\n\nDefaults to `$ACTIONS_CACHE_URL`, although a separate action like\n`crazy-max/ghaction-github-runtime` is recommended to expose this\nenvironment variable to your jobs.",
- "default": "",
- "defaultInfo": {
- "environment": [
- "ACTIONS_CACHE_URL"
- ]
- }
- }
- },
- "type": "object"
- },
- "docker-build:index:CacheFromLocal": {
- "properties": {
- "digest": {
- "type": "string",
- "description": "Digest of manifest to import."
- },
- "src": {
- "type": "string",
- "description": "Path of the local directory where cache gets imported from."
- }
- },
- "type": "object",
- "required": [
- "src"
- ]
- },
- "docker-build:index:CacheFromRegistry": {
- "properties": {
- "ref": {
- "type": "string",
- "description": "Fully qualified name of the cache image to import."
- }
- },
- "type": "object",
- "required": [
- "ref"
- ]
- },
- "docker-build:index:CacheFromS3": {
- "properties": {
- "accessKeyId": {
- "type": "string",
- "description": "Defaults to `$AWS_ACCESS_KEY_ID`.",
- "default": "",
- "defaultInfo": {
- "environment": [
- "AWS_ACCESS_KEY_ID"
- ]
- }
- },
- "blobsPrefix": {
- "type": "string",
- "description": "Prefix to prepend to blob filenames."
- },
- "bucket": {
- "type": "string",
- "description": "Name of the S3 bucket."
- },
- "endpointUrl": {
- "type": "string",
- "description": "Endpoint of the S3 bucket."
- },
- "manifestsPrefix": {
- "type": "string",
- "description": "Prefix to prepend on manifest filenames."
- },
- "name": {
- "type": "string",
- "description": "Name of the cache image."
- },
- "region": {
- "type": "string",
- "description": "The geographic location of the bucket. Defaults to `$AWS_REGION`.",
- "default": "",
- "defaultInfo": {
- "environment": [
- "AWS_REGION"
- ]
- }
- },
- "secretAccessKey": {
- "type": "string",
- "description": "Defaults to `$AWS_SECRET_ACCESS_KEY`.",
- "default": "",
- "defaultInfo": {
- "environment": [
- "AWS_SECRET_ACCESS_KEY"
- ]
- },
- "secret": true
- },
- "sessionToken": {
- "type": "string",
- "description": "Defaults to `$AWS_SESSION_TOKEN`.",
- "default": "",
- "defaultInfo": {
- "environment": [
- "AWS_SESSION_TOKEN"
- ]
- },
- "secret": true
- },
- "usePathStyle": {
- "type": "boolean",
- "description": "Uses `bucket` in the URL instead of hostname when `true`."
- }
- },
- "type": "object",
- "required": [
- "bucket",
- "region"
- ]
- },
- "docker-build:index:CacheMode": {
- "type": "string",
- "enum": [
- {
- "description": "Only layers that are exported into the resulting image are cached.",
- "value": "min"
- },
- {
- "description": "All layers are cached, even those of intermediate steps.",
- "value": "max"
- }
- ]
- },
- "docker-build:index:CacheTo": {
- "properties": {
- "azblob": {
- "$ref": "#/types/docker-build:index:CacheToAzureBlob",
- "description": "Push cache to Azure's blob storage service."
- },
- "disabled": {
- "type": "boolean",
- "description": "When `true` this entry will be excluded. Defaults to `false`."
- },
- "gha": {
- "$ref": "#/types/docker-build:index:CacheToGitHubActions",
- "description": "Recommended for use with GitHub Actions workflows.\n\nAn action like `crazy-max/ghaction-github-runtime` is recommended to\nexpose appropriate credentials to your GitHub workflow."
- },
- "inline": {
- "$ref": "#/types/docker-build:index:CacheToInline",
- "description": "The inline cache storage backend is the simplest implementation to get\nstarted with, but it does not handle multi-stage builds. Consider the\n`registry` cache backend instead."
- },
- "local": {
- "$ref": "#/types/docker-build:index:CacheToLocal",
- "description": "A simple backend which caches imagines on your local filesystem."
- },
- "raw": {
- "type": "string",
- "description": "A raw string as you would provide it to the Docker CLI (e.g.,\n`type=inline`)"
- },
- "registry": {
- "$ref": "#/types/docker-build:index:CacheToRegistry",
- "description": "Push caches to remote registries. Incompatible with the `docker` build\ndriver."
- },
- "s3": {
- "$ref": "#/types/docker-build:index:CacheToS3",
- "description": "Push cache to AWS S3 or S3-compatible services such as MinIO."
- }
- },
- "type": "object"
- },
- "docker-build:index:CacheToAzureBlob": {
- "properties": {
- "accountUrl": {
- "type": "string",
- "description": "Base URL of the storage account."
- },
- "ignoreError": {
- "type": "boolean",
- "description": "Ignore errors caused by failed cache exports.",
- "default": false
- },
- "mode": {
- "$ref": "#/types/docker-build:index:CacheMode",
- "description": "The cache mode to use. Defaults to `min`.",
- "default": "min"
- },
- "name": {
- "type": "string",
- "description": "The name of the cache image."
- },
- "secretAccessKey": {
- "type": "string",
- "description": "Blob storage account key.",
- "secret": true
- }
- },
- "type": "object",
- "required": [
- "name"
- ]
- },
- "docker-build:index:CacheToGitHubActions": {
- "properties": {
- "ignoreError": {
- "type": "boolean",
- "description": "Ignore errors caused by failed cache exports.",
- "default": false
- },
- "mode": {
- "$ref": "#/types/docker-build:index:CacheMode",
- "description": "The cache mode to use. Defaults to `min`.",
- "default": "min"
- },
- "scope": {
- "type": "string",
- "description": "The scope to use for cache keys. Defaults to `buildkit`.\n\nThis should be set if building and caching multiple images in one\nworkflow, otherwise caches will overwrite each other.",
- "default": "buildkit"
- },
- "token": {
- "type": "string",
- "description": "The GitHub Actions token to use. This is not a personal access tokens\nand is typically generated automatically as part of each job.\n\nDefaults to `$ACTIONS_RUNTIME_TOKEN`, although a separate action like\n`crazy-max/ghaction-github-runtime` is recommended to expose this\nenvironment variable to your jobs.",
- "default": "",
- "defaultInfo": {
- "environment": [
- "ACTIONS_RUNTIME_TOKEN"
- ]
- },
- "secret": true
- },
- "url": {
- "type": "string",
- "description": "The cache server URL to use for artifacts.\n\nDefaults to `$ACTIONS_CACHE_URL`, although a separate action like\n`crazy-max/ghaction-github-runtime` is recommended to expose this\nenvironment variable to your jobs.",
- "default": "",
- "defaultInfo": {
- "environment": [
- "ACTIONS_CACHE_URL"
- ]
- }
- }
- },
- "type": "object"
- },
- "docker-build:index:CacheToInline": {
- "description": "Include an inline cache with the exported image.",
- "type": "object"
- },
- "docker-build:index:CacheToLocal": {
- "properties": {
- "compression": {
- "$ref": "#/types/docker-build:index:CompressionType",
- "description": "The compression type to use.",
- "default": "gzip"
- },
- "compressionLevel": {
- "type": "integer",
- "description": "Compression level from 0 to 22.",
- "default": 0
- },
- "dest": {
- "type": "string",
- "description": "Path of the local directory to export the cache."
- },
- "forceCompression": {
- "type": "boolean",
- "description": "Forcefully apply compression.",
- "default": false
- },
- "ignoreError": {
- "type": "boolean",
- "description": "Ignore errors caused by failed cache exports.",
- "default": false
- },
- "mode": {
- "$ref": "#/types/docker-build:index:CacheMode",
- "description": "The cache mode to use. Defaults to `min`.",
- "default": "min"
- }
- },
- "type": "object",
- "required": [
- "dest"
- ]
- },
- "docker-build:index:CacheToRegistry": {
- "properties": {
- "compression": {
- "$ref": "#/types/docker-build:index:CompressionType",
- "description": "The compression type to use.",
- "default": "gzip"
- },
- "compressionLevel": {
- "type": "integer",
- "description": "Compression level from 0 to 22.",
- "default": 0
- },
- "forceCompression": {
- "type": "boolean",
- "description": "Forcefully apply compression.",
- "default": false
- },
- "ignoreError": {
- "type": "boolean",
- "description": "Ignore errors caused by failed cache exports.",
- "default": false
- },
- "imageManifest": {
- "type": "boolean",
- "description": "Export cache manifest as an OCI-compatible image manifest instead of a\nmanifest list. Requires `ociMediaTypes` to also be `true`.\n\nSome registries like AWS ECR will not work with caching if this is\n`false`.\n\nDefaults to `false` to match Docker's default behavior.",
- "default": false
- },
- "mode": {
- "$ref": "#/types/docker-build:index:CacheMode",
- "description": "The cache mode to use. Defaults to `min`.",
- "default": "min"
- },
- "ociMediaTypes": {
- "type": "boolean",
- "description": "Whether to use OCI media types in exported manifests. Defaults to\n`true`.",
- "default": true
- },
- "ref": {
- "type": "string",
- "description": "Fully qualified name of the cache image to import."
- }
- },
- "type": "object",
- "required": [
- "ref"
- ]
- },
- "docker-build:index:CacheToS3": {
- "properties": {
- "accessKeyId": {
- "type": "string",
- "description": "Defaults to `$AWS_ACCESS_KEY_ID`.",
- "default": "",
- "defaultInfo": {
- "environment": [
- "AWS_ACCESS_KEY_ID"
- ]
- }
- },
- "blobsPrefix": {
- "type": "string",
- "description": "Prefix to prepend to blob filenames."
- },
- "bucket": {
- "type": "string",
- "description": "Name of the S3 bucket."
- },
- "endpointUrl": {
- "type": "string",
- "description": "Endpoint of the S3 bucket."
- },
- "ignoreError": {
- "type": "boolean",
- "description": "Ignore errors caused by failed cache exports.",
- "default": false
- },
- "manifestsPrefix": {
- "type": "string",
- "description": "Prefix to prepend on manifest filenames."
- },
- "mode": {
- "$ref": "#/types/docker-build:index:CacheMode",
- "description": "The cache mode to use. Defaults to `min`.",
- "default": "min"
- },
- "name": {
- "type": "string",
- "description": "Name of the cache image."
- },
- "region": {
- "type": "string",
- "description": "The geographic location of the bucket. Defaults to `$AWS_REGION`.",
- "default": "",
- "defaultInfo": {
- "environment": [
- "AWS_REGION"
- ]
- }
- },
- "secretAccessKey": {
- "type": "string",
- "description": "Defaults to `$AWS_SECRET_ACCESS_KEY`.",
- "default": "",
- "defaultInfo": {
- "environment": [
- "AWS_SECRET_ACCESS_KEY"
- ]
- },
- "secret": true
- },
- "sessionToken": {
- "type": "string",
- "description": "Defaults to `$AWS_SESSION_TOKEN`.",
- "default": "",
- "defaultInfo": {
- "environment": [
- "AWS_SESSION_TOKEN"
- ]
- },
- "secret": true
- },
- "usePathStyle": {
- "type": "boolean",
- "description": "Uses `bucket` in the URL instead of hostname when `true`."
- }
- },
- "type": "object",
- "required": [
- "bucket",
- "region"
- ]
- },
- "docker-build:index:CompressionType": {
- "type": "string",
- "enum": [
- {
- "description": "Use `gzip` for compression.",
- "value": "gzip"
- },
- {
- "description": "Use `estargz` for compression.",
- "value": "estargz"
- },
- {
- "description": "Use `zstd` for compression.",
- "value": "zstd"
- }
- ]
- },
- "docker-build:index:Context": {
- "properties": {
- "location": {
- "type": "string",
- "description": "Resources to use for build context.\n\nThe location can be:\n* A relative or absolute path to a local directory (`.`, `./app`,\n `/app`, etc.).\n* A remote URL of a Git repository, tarball, or plain text file\n (`https://github.com/user/myrepo.git`, `http://server/context.tar.gz`,\n etc.)."
- }
- },
- "type": "object",
- "required": [
- "location"
- ]
- },
- "docker-build:index:Dockerfile": {
- "properties": {
- "inline": {
- "type": "string",
- "description": "Raw Dockerfile contents.\n\nConflicts with `location`.\n\nEquivalent to invoking Docker with `-f -`."
- },
- "location": {
- "type": "string",
- "description": "Location of the Dockerfile to use.\n\nCan be a relative or absolute path to a local file, or a remote URL.\n\nDefaults to `${context.location}/Dockerfile` if context is on-disk.\n\nConflicts with `inline`."
- }
- },
- "type": "object"
- },
- "docker-build:index:Export": {
- "properties": {
- "cacheonly": {
- "$ref": "#/types/docker-build:index:ExportCacheOnly",
- "description": "A no-op export. Helpful for silencing the 'no exports' warning if you\njust want to populate caches."
- },
- "disabled": {
- "type": "boolean",
- "description": "When `true` this entry will be excluded. Defaults to `false`."
- },
- "docker": {
- "$ref": "#/types/docker-build:index:ExportDocker",
- "description": "Export as a Docker image layout."
- },
- "image": {
- "$ref": "#/types/docker-build:index:ExportImage",
- "description": "Outputs the build result into a container image format."
- },
- "local": {
- "$ref": "#/types/docker-build:index:ExportLocal",
- "description": "Export to a local directory as files and directories."
- },
- "oci": {
- "$ref": "#/types/docker-build:index:ExportOCI",
- "description": "Identical to the Docker exporter but uses OCI media types by default."
- },
- "raw": {
- "type": "string",
- "description": "A raw string as you would provide it to the Docker CLI (e.g.,\n`type=docker`)"
- },
- "registry": {
- "$ref": "#/types/docker-build:index:ExportRegistry",
- "description": "Identical to the Image exporter, but pushes by default."
- },
- "tar": {
- "$ref": "#/types/docker-build:index:ExportTar",
- "description": "Export to a local directory as a tarball."
- }
- },
- "type": "object"
- },
- "docker-build:index:ExportCacheOnly": {
- "type": "object"
- },
- "docker-build:index:ExportDocker": {
- "properties": {
- "annotations": {
- "type": "object",
- "additionalProperties": {
- "type": "string"
- },
- "description": "Attach an arbitrary key/value annotation to the image."
- },
- "compression": {
- "$ref": "#/types/docker-build:index:CompressionType",
- "description": "The compression type to use.",
- "default": "gzip"
- },
- "compressionLevel": {
- "type": "integer",
- "description": "Compression level from 0 to 22.",
- "default": 0
- },
- "dest": {
- "type": "string",
- "description": "The local export path."
- },
- "forceCompression": {
- "type": "boolean",
- "description": "Forcefully apply compression.",
- "default": false
- },
- "names": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "description": "Specify images names to export. This is overridden if tags are already specified."
- },
- "ociMediaTypes": {
- "type": "boolean",
- "description": "Use OCI media types in exporter manifests.",
- "default": false
- },
- "tar": {
- "type": "boolean",
- "description": "Bundle the output into a tarball layout.",
- "default": true
- }
- },
- "type": "object"
- },
- "docker-build:index:ExportImage": {
- "properties": {
- "annotations": {
- "type": "object",
- "additionalProperties": {
- "type": "string"
- },
- "description": "Attach an arbitrary key/value annotation to the image."
- },
- "compression": {
- "$ref": "#/types/docker-build:index:CompressionType",
- "description": "The compression type to use.",
- "default": "gzip"
- },
- "compressionLevel": {
- "type": "integer",
- "description": "Compression level from 0 to 22.",
- "default": 0
- },
- "danglingNamePrefix": {
- "type": "string",
- "description": "Name image with `prefix@`, used for anonymous images."
- },
- "forceCompression": {
- "type": "boolean",
- "description": "Forcefully apply compression.",
- "default": false
- },
- "insecure": {
- "type": "boolean",
- "description": "Allow pushing to an insecure registry."
- },
- "nameCanonical": {
- "type": "boolean",
- "description": "Add additional canonical name (`name@`)."
- },
- "names": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "description": "Specify images names to export. This is overridden if tags are already specified."
- },
- "ociMediaTypes": {
- "type": "boolean",
- "description": "Use OCI media types in exporter manifests.",
- "default": false
- },
- "push": {
- "type": "boolean",
- "description": "Push after creating the image. Defaults to `false`."
- },
- "pushByDigest": {
- "type": "boolean",
- "description": "Push image without name."
- },
- "store": {
- "type": "boolean",
- "description": "Store resulting images to the worker's image store and ensure all of\nits blobs are in the content store.\n\nDefaults to `true`.\n\nIgnored if the worker doesn't have image store (when using OCI workers,\nfor example).",
- "default": true
- },
- "unpack": {
- "type": "boolean",
- "description": "Unpack image after creation (for use with containerd). Defaults to\n`false`."
- }
- },
- "type": "object"
- },
- "docker-build:index:ExportLocal": {
- "properties": {
- "dest": {
- "type": "string",
- "description": "Output path."
- }
- },
- "type": "object",
- "required": [
- "dest"
- ]
- },
- "docker-build:index:ExportOCI": {
- "properties": {
- "annotations": {
- "type": "object",
- "additionalProperties": {
- "type": "string"
- },
- "description": "Attach an arbitrary key/value annotation to the image."
- },
- "compression": {
- "$ref": "#/types/docker-build:index:CompressionType",
- "description": "The compression type to use.",
- "default": "gzip"
- },
- "compressionLevel": {
- "type": "integer",
- "description": "Compression level from 0 to 22.",
- "default": 0
- },
- "dest": {
- "type": "string",
- "description": "The local export path."
- },
- "forceCompression": {
- "type": "boolean",
- "description": "Forcefully apply compression.",
- "default": false
- },
- "names": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "description": "Specify images names to export. This is overridden if tags are already specified."
- },
- "ociMediaTypes": {
- "type": "boolean",
- "description": "Use OCI media types in exporter manifests.",
- "default": true
- },
- "tar": {
- "type": "boolean",
- "description": "Bundle the output into a tarball layout.",
- "default": true
- }
- },
- "type": "object"
- },
- "docker-build:index:ExportRegistry": {
- "properties": {
- "annotations": {
- "type": "object",
- "additionalProperties": {
- "type": "string"
- },
- "description": "Attach an arbitrary key/value annotation to the image."
- },
- "compression": {
- "$ref": "#/types/docker-build:index:CompressionType",
- "description": "The compression type to use.",
- "default": "gzip"
- },
- "compressionLevel": {
- "type": "integer",
- "description": "Compression level from 0 to 22.",
- "default": 0
- },
- "danglingNamePrefix": {
- "type": "string",
- "description": "Name image with `prefix@`, used for anonymous images."
- },
- "forceCompression": {
- "type": "boolean",
- "description": "Forcefully apply compression.",
- "default": false
- },
- "insecure": {
- "type": "boolean",
- "description": "Allow pushing to an insecure registry."
- },
- "nameCanonical": {
- "type": "boolean",
- "description": "Add additional canonical name (`name@`)."
- },
- "names": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "description": "Specify images names to export. This is overridden if tags are already specified."
- },
- "ociMediaTypes": {
- "type": "boolean",
- "description": "Use OCI media types in exporter manifests.",
- "default": false
- },
- "push": {
- "type": "boolean",
- "description": "Push after creating the image. Defaults to `true`.",
- "default": true
- },
- "pushByDigest": {
- "type": "boolean",
- "description": "Push image without name."
- },
- "store": {
- "type": "boolean",
- "description": "Store resulting images to the worker's image store and ensure all of\nits blobs are in the content store.\n\nDefaults to `true`.\n\nIgnored if the worker doesn't have image store (when using OCI workers,\nfor example).",
- "default": true
- },
- "unpack": {
- "type": "boolean",
- "description": "Unpack image after creation (for use with containerd). Defaults to\n`false`."
- }
- },
- "type": "object"
- },
- "docker-build:index:ExportTar": {
- "properties": {
- "dest": {
- "type": "string",
- "description": "Output path."
- }
- },
- "type": "object",
- "required": [
- "dest"
- ]
- },
- "docker-build:index:NetworkMode": {
- "type": "string",
- "enum": [
- {
- "description": "The default sandbox network mode.",
- "value": "default"
- },
- {
- "description": "Host network mode.",
- "value": "host"
- },
- {
- "description": "Disable network access.",
- "value": "none"
- }
- ]
- },
- "docker-build:index:Platform": {
- "type": "string",
- "enum": [
- {
- "value": "darwin/386"
- },
- {
- "value": "darwin/amd64"
- },
- {
- "value": "darwin/arm"
- },
- {
- "value": "darwin/arm64"
- },
- {
- "value": "dragonfly/amd64"
- },
- {
- "value": "freebsd/386"
- },
- {
- "value": "freebsd/amd64"
- },
- {
- "value": "freebsd/arm"
- },
- {
- "value": "linux/386"
- },
- {
- "value": "linux/amd64"
- },
- {
- "value": "linux/arm"
- },
- {
- "value": "linux/arm64"
- },
- {
- "value": "linux/mips64"
- },
- {
- "value": "linux/mips64le"
- },
- {
- "value": "linux/ppc64le"
- },
- {
- "value": "linux/riscv64"
- },
- {
- "value": "linux/s390x"
- },
- {
- "value": "netbsd/386"
- },
- {
- "value": "netbsd/amd64"
- },
- {
- "value": "netbsd/arm"
- },
- {
- "value": "openbsd/386"
- },
- {
- "value": "openbsd/amd64"
- },
- {
- "value": "openbsd/arm"
- },
- {
- "value": "plan9/386"
- },
- {
- "value": "plan9/amd64"
- },
- {
- "value": "solaris/amd64"
- },
- {
- "value": "windows/386"
- },
- {
- "value": "windows/amd64"
- }
- ]
- },
- "docker-build:index:Registry": {
- "properties": {
- "address": {
- "type": "string",
- "description": "The registry's address (e.g. \"docker.io\")."
- },
- "password": {
- "type": "string",
- "description": "Password or token for the registry.",
- "secret": true
- },
- "username": {
- "type": "string",
- "description": "Username for the registry."
- }
- },
- "type": "object",
- "required": [
- "address"
- ]
- },
- "docker-build:index:SSH": {
- "properties": {
- "id": {
- "type": "string",
- "description": "Useful for distinguishing different servers that are part of the same\nbuild.\n\nA value of `default` is appropriate if only dealing with a single host."
- },
- "paths": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "description": "SSH agent socket or private keys to expose to the build under the given\nidentifier.\n\nDefaults to `[$SSH_AUTH_SOCK]`.\n\nNote that your keys are **not** automatically added when using an\nagent. Run `ssh-add -l` locally to confirm which public keys are\nvisible to the agent; these will be exposed to your build."
- }
- },
- "type": "object",
- "required": [
- "id"
- ]
- }
- },
- "provider": {
- "properties": {
- "host": {
- "type": "string",
- "description": "The build daemon's address.",
- "default": "",
- "defaultInfo": {
- "environment": [
- "DOCKER_HOST"
- ]
- }
- }
- },
- "type": "object",
- "inputProperties": {
- "host": {
- "type": "string",
- "description": "The build daemon's address.",
- "default": "",
- "defaultInfo": {
- "environment": [
- "DOCKER_HOST"
- ]
- }
- },
- "registries": {
- "type": "array",
- "items": {
- "$ref": "#/types/docker-build:index:Registry"
- }
- }
- }
- },
- "resources": {
- "docker-build:index:Image": {
- "description": "A Docker image built using buildx -- Docker's interface to the improved\nBuildKit backend.\n\n## Stability\n\n**This resource is pre-1.0 and in public preview.**\n\nWe will strive to keep APIs and behavior as stable as possible, but we\ncannot guarantee stability until version 1.0.\n\n## Migrating Pulumi Docker v3 and v4 Image resources\n\nThis provider's `Image` resource provides a superset of functionality over the `Image` resources available in versions 3 and 4 of the Pulumi Docker provider.\nExisting `Image` resources can be converted to the docker-build `Image` resources with minor modifications.\n\n### Behavioral differences\n\nThere are several key behavioral differences to keep in mind when transitioning images to the new `Image` resource.\n\n#### Previews\n\nVersion `3.x` of the Pulumi Docker provider always builds images during preview operations.\nThis is helpful as a safeguard to prevent \"broken\" images from merging, but users found the behavior unnecessarily redundant when running previews and updates locally.\n\nVersion `4.x` changed build-on-preview behavior to be opt-in.\nBy default, `v4.x` `Image` resources do _not_ build during previews, but this behavior can be toggled with the `buildOnPreview` option.\nSeveral users reported outages due to the default behavior allowing bad images to accidentally sneak through CI.\n\nThe default behavior of this provider's `Image` resource is similar to `3.x` and will build images during previews.\nThis behavior can be changed by specifying `buildOnPreview`.\n\n#### Push behavior\n\nVersions `3.x` and `4.x` of the Pulumi Docker provider attempt to push images to remote registries by default.\nThey expose a `skipPush: true` option to disable pushing.\n\nThis provider's `Image` resource matches the Docker CLI's behavior and does not push images anywhere by default.\n\nTo push images to a registry you can include `push: true` (equivalent to Docker's `--push` flag) or configure an `export` of type `registry` (equivalent to Docker's `--output type=registry`).\nLike Docker, if an image is configured without exports you will see a warning with instructions for how to enable pushing, but the build will still proceed normally.\n\n#### Secrets\n\nVersion `3.x` of the Pulumi Docker provider supports secrets by way of the `extraOptions` field.\n\nVersion `4.x` of the Pulumi Docker provider does not support secrets.\n\nThe `Image` resource supports secrets but does not require those secrets to exist on-disk or in environment variables.\nInstead, they should be passed directly as values.\n(Please be sure to familiarize yourself with Pulumi's [native secret handling](https://www.pulumi.com/docs/concepts/secrets/).)\nPulumi also provides [ESC](https://www.pulumi.com/product/esc/) to make it easier to share secrets across stacks and environments.\n\n#### Caching\n\nVersion `3.x` of the Pulumi Docker provider exposes `cacheFrom: bool | { stages: [...] }`.\nIt builds targets individually and pushes them to separate images for caching.\n\nVersion `4.x` exposes a similar parameter `cacheFrom: { images: [...] }` which pushes and pulls inline caches.\n\nBoth versions 3 and 4 require specific environment variables to be set and deviate from Docker's native caching behavior.\nThis can result in inefficient builds due to unnecessary image pulls, repeated file transfers, etc.\n\nThe `Image` resource delegates all caching behavior to Docker.\n`cacheFrom` and `cacheTo` options (equivalent to Docker's `--cache-to` and `--cache-from`) are exposed and provide additional cache targets, such as local disk, S3 storage, etc.\n\n#### Outputs\n\nVersions `3.x` and `4.x` of the provider exposed a `repoDigest` output which was a fully qualified tag with digest.\nIn `4.x` this could also be a single sha256 hash if the image wasn't pushed.\n\nUnlike earlier providers the `Image` resource can push multiple tags.\nAs a convenience, it exposes a `ref` output consisting of a tag with digest as long as the image was pushed.\nIf multiple tags were pushed this uses one at random.\n\nIf you need more control over tag references you can use the `digest` output, which is always a single sha256 hash as long as the image was exported somewhere.\n\n#### Tag deletion and refreshes\n\nVersions 3 and 4 of Pulumi Docker provider do not delete tags when the `Image` resource is deleted, nor do they confirm expected tags exist during `refresh` operations.\n\nThe `buidx.Image` will query your registries during `refresh` to ensure the expected tags exist.\nIf any are missing a subsequent `update` will push them.\n\nWhen a `Image` is deleted, it will _attempt_ to also delete any pushed tags.\nDeletion of remote tags is not guaranteed because not all registries support the manifest `DELETE` API (`docker.io` in particular).\nManifests are _not_ deleted in the same way during updates -- to do so safely would require a full build to determine whether a Pulumi operation should be an update or update-replace.\n\nUse the [`retainOnDelete: true`](https://www.pulumi.com/docs/concepts/options/retainondelete/) option if you do not want tags deleted.\n\n### Example migration\n\nExamples of \"fully-featured\" `v3` and `v4` `Image` resources are shown below, along with an example `Image` resource showing how they would look after migration.\n\nThe `v3` resource leverages `buildx` via a `DOCKER_BUILDKIT` environment variable and CLI flags passed in with `extraOption`.\nAfter migration, the environment variable is no longer needed and CLI flags are now properties on the `Image`.\nIn almost all cases, properties of `Image` are named after the Docker CLI flag they correspond to.\n\nThe `v4` resource is less functional than its `v3` counterpart because it lacks the flexibility of `extraOptions`.\nIt it is shown with parameters similar to the `v3` example for completeness.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### v3/v4 migration\n\n```typescript\n\n// v3 Image\nconst v3 = new docker.Image(\"v3-image\", {\n imageName: \"myregistry.com/user/repo:latest\",\n localImageName: \"local-tag\",\n skipPush: false,\n build: {\n dockerfile: \"./Dockerfile\",\n context: \"../app\",\n target: \"mytarget\",\n args: {\n MY_BUILD_ARG: \"foo\",\n },\n env: {\n DOCKER_BUILDKIT: \"1\",\n },\n extraOptions: [\n \"--cache-from\",\n \"type=registry,myregistry.com/user/repo:cache\",\n \"--cache-to\",\n \"type=registry,myregistry.com/user/repo:cache\",\n \"--add-host\",\n \"metadata.google.internal:169.254.169.254\",\n \"--secret\",\n \"id=mysecret,src=/local/secret\",\n \"--ssh\",\n \"default=/home/runner/.ssh/id_ed25519\",\n \"--network\",\n \"host\",\n \"--platform\",\n \"linux/amd64\",\n ],\n },\n registry: {\n server: \"myregistry.com\",\n username: \"username\",\n password: pulumi.secret(\"password\"),\n },\n});\n\n// v3 Image after migrating to docker-build.Image\nconst v3Migrated = new dockerbuild.Image(\"v3-to-buildx\", {\n tags: [\"myregistry.com/user/repo:latest\", \"local-tag\"],\n push: true,\n dockerfile: {\n location: \"./Dockerfile\",\n },\n context: {\n location: \"../app\",\n },\n target: \"mytarget\",\n buildArgs: {\n MY_BUILD_ARG: \"foo\",\n },\n cacheFrom: [{ registry: { ref: \"myregistry.com/user/repo:cache\" } }],\n cacheTo: [{ registry: { ref: \"myregistry.com/user/repo:cache\" } }],\n secrets: {\n mysecret: \"value\",\n },\n addHosts: [\"metadata.google.internal:169.254.169.254\"],\n ssh: {\n default: [\"/home/runner/.ssh/id_ed25519\"],\n },\n network: \"host\",\n platforms: [\"linux/amd64\"],\n registries: [{\n address: \"myregistry.com\",\n username: \"username\",\n password: pulumi.secret(\"password\"),\n }],\n});\n\n\n// v4 Image\nconst v4 = new docker.Image(\"v4-image\", {\n imageName: \"myregistry.com/user/repo:latest\",\n skipPush: false,\n build: {\n dockerfile: \"./Dockerfile\",\n context: \"../app\",\n target: \"mytarget\",\n args: {\n MY_BUILD_ARG: \"foo\",\n },\n cacheFrom: {\n images: [\"myregistry.com/user/repo:cache\"],\n },\n addHosts: [\"metadata.google.internal:169.254.169.254\"],\n network: \"host\",\n platform: \"linux/amd64\",\n },\n buildOnPreview: true,\n registry: {\n server: \"myregistry.com\",\n username: \"username\",\n password: pulumi.secret(\"password\"),\n },\n});\n\n// v4 Image after migrating to docker-build.Image\nconst v4Migrated = new dockerbuild.Image(\"v4-to-buildx\", {\n tags: [\"myregistry.com/user/repo:latest\"],\n push: true,\n dockerfile: {\n location: \"./Dockerfile\",\n },\n context: {\n location: \"../app\",\n },\n target: \"mytarget\",\n buildArgs: {\n MY_BUILD_ARG: \"foo\",\n },\n cacheFrom: [{ registry: { ref: \"myregistry.com/user/repo:cache\" } }],\n cacheTo: [{ registry: { ref: \"myregistry.com/user/repo:cache\" } }],\n addHosts: [\"metadata.google.internal:169.254.169.254\"],\n network: \"host\",\n platforms: [\"linux/amd64\"],\n registries: [{\n address: \"myregistry.com\",\n username: \"username\",\n password: pulumi.secret(\"password\"),\n }],\n});\n\n```\n\n{{% /example %}}\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Push to AWS ECR with caching\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as docker_build from \"@pulumi/docker-build\";\n\nconst ecrRepository = new aws.ecr.Repository(\"ecr-repository\", {});\nconst authToken = aws.ecr.getAuthorizationTokenOutput({\n registryId: ecrRepository.registryId,\n});\nconst myImage = new docker_build.Image(\"my-image\", {\n cacheFrom: [{\n registry: {\n ref: pulumi.interpolate`${ecrRepository.repositoryUrl}:cache`,\n },\n }],\n cacheTo: [{\n registry: {\n imageManifest: true,\n ociMediaTypes: true,\n ref: pulumi.interpolate`${ecrRepository.repositoryUrl}:cache`,\n },\n }],\n context: {\n location: \"./app\",\n },\n push: true,\n registries: [{\n address: ecrRepository.repositoryUrl,\n password: authToken.apply(authToken => authToken.password),\n username: authToken.apply(authToken => authToken.userName),\n }],\n tags: [pulumi.interpolate`${ecrRepository.repositoryUrl}:latest`],\n});\nexport const ref = myImage.ref;\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_docker_build as docker_build\n\necr_repository = aws.ecr.Repository(\"ecr-repository\")\nauth_token = aws.ecr.get_authorization_token_output(registry_id=ecr_repository.registry_id)\nmy_image = docker_build.Image(\"my-image\",\n cache_from=[{\n \"registry\": {\n \"ref\": ecr_repository.repository_url.apply(lambda repository_url: f\"{repository_url}:cache\"),\n },\n }],\n cache_to=[{\n \"registry\": {\n \"image_manifest\": True,\n \"oci_media_types\": True,\n \"ref\": ecr_repository.repository_url.apply(lambda repository_url: f\"{repository_url}:cache\"),\n },\n }],\n context={\n \"location\": \"./app\",\n },\n push=True,\n registries=[{\n \"address\": ecr_repository.repository_url,\n \"password\": auth_token.password,\n \"username\": auth_token.user_name,\n }],\n tags=[ecr_repository.repository_url.apply(lambda repository_url: f\"{repository_url}:latest\")])\npulumi.export(\"ref\", my_image.ref)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing DockerBuild = Pulumi.DockerBuild;\n\nreturn await Deployment.RunAsync(() => \n{\n var ecrRepository = new Aws.Ecr.Repository(\"ecr-repository\");\n\n var authToken = Aws.Ecr.GetAuthorizationToken.Invoke(new()\n {\n RegistryId = ecrRepository.RegistryId,\n });\n\n var myImage = new DockerBuild.Image(\"my-image\", new()\n {\n CacheFrom = new[]\n {\n new DockerBuild.Inputs.CacheFromArgs\n {\n Registry = new DockerBuild.Inputs.CacheFromRegistryArgs\n {\n Ref = ecrRepository.RepositoryUrl.Apply(repositoryUrl => $\"{repositoryUrl}:cache\"),\n },\n },\n },\n CacheTo = new[]\n {\n new DockerBuild.Inputs.CacheToArgs\n {\n Registry = new DockerBuild.Inputs.CacheToRegistryArgs\n {\n ImageManifest = true,\n OciMediaTypes = true,\n Ref = ecrRepository.RepositoryUrl.Apply(repositoryUrl => $\"{repositoryUrl}:cache\"),\n },\n },\n },\n Context = new DockerBuild.Inputs.BuildContextArgs\n {\n Location = \"./app\",\n },\n Push = true,\n Registries = new[]\n {\n new DockerBuild.Inputs.RegistryArgs\n {\n Address = ecrRepository.RepositoryUrl,\n Password = authToken.Apply(getAuthorizationTokenResult => getAuthorizationTokenResult.Password),\n Username = authToken.Apply(getAuthorizationTokenResult => getAuthorizationTokenResult.UserName),\n },\n },\n Tags = new[]\n {\n ecrRepository.RepositoryUrl.Apply(repositoryUrl => $\"{repositoryUrl}:latest\"),\n },\n });\n\n return new Dictionary\n {\n [\"ref\"] = myImage.Ref,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ecr\"\n\t\"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tecrRepository, err := ecr.NewRepository(ctx, \"ecr-repository\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tauthToken := ecr.GetAuthorizationTokenOutput(ctx, ecr.GetAuthorizationTokenOutputArgs{\n\t\t\tRegistryId: ecrRepository.RegistryId,\n\t\t}, nil)\n\t\tmyImage, err := dockerbuild.NewImage(ctx, \"my-image\", &dockerbuild.ImageArgs{\n\t\t\tCacheFrom: dockerbuild.CacheFromArray{\n\t\t\t\t&dockerbuild.CacheFromArgs{\n\t\t\t\t\tRegistry: &dockerbuild.CacheFromRegistryArgs{\n\t\t\t\t\t\tRef: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"%v:cache\", repositoryUrl), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCacheTo: dockerbuild.CacheToArray{\n\t\t\t\t&dockerbuild.CacheToArgs{\n\t\t\t\t\tRegistry: &dockerbuild.CacheToRegistryArgs{\n\t\t\t\t\t\tImageManifest: pulumi.Bool(true),\n\t\t\t\t\t\tOciMediaTypes: pulumi.Bool(true),\n\t\t\t\t\t\tRef: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"%v:cache\", repositoryUrl), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tContext: &dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"./app\"),\n\t\t\t},\n\t\t\tPush: pulumi.Bool(true),\n\t\t\tRegistries: dockerbuild.RegistryArray{\n\t\t\t\t&dockerbuild.RegistryArgs{\n\t\t\t\t\tAddress: ecrRepository.RepositoryUrl,\n\t\t\t\t\tPassword: authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) {\n\t\t\t\t\t\treturn &authToken.Password, nil\n\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t\tUsername: authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) {\n\t\t\t\t\t\treturn &authToken.UserName, nil\n\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"%v:latest\", repositoryUrl), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ref\", myImage.Ref)\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Push to AWS ECR with caching\nname: ecr\noutputs:\n ref: ${my-image.ref}\nresources:\n ecr-repository:\n type: aws:ecr:Repository\n my-image:\n properties:\n cacheFrom:\n - registry:\n ref: ${ecr-repository.repositoryUrl}:cache\n cacheTo:\n - registry:\n imageManifest: true\n ociMediaTypes: true\n ref: ${ecr-repository.repositoryUrl}:cache\n context:\n location: ./app\n push: true\n registries:\n - address: ${ecr-repository.repositoryUrl}\n password: ${auth-token.password}\n username: ${auth-token.userName}\n tags:\n - ${ecr-repository.repositoryUrl}:latest\n type: docker-build:Image\nruntime: yaml\nvariables:\n auth-token:\n fn::aws:ecr:getAuthorizationToken:\n registryId: ${ecr-repository.registryId}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.aws.ecr.Repository;\nimport com.pulumi.aws.ecr.EcrFunctions;\nimport com.pulumi.aws.ecr.inputs.GetAuthorizationTokenArgs;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.CacheFromArgs;\nimport com.pulumi.dockerbuild.inputs.CacheFromRegistryArgs;\nimport com.pulumi.dockerbuild.inputs.CacheToArgs;\nimport com.pulumi.dockerbuild.inputs.CacheToRegistryArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport com.pulumi.dockerbuild.inputs.RegistryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ecrRepository = new Repository(\"ecrRepository\");\n\n final var authToken = EcrFunctions.getAuthorizationToken(GetAuthorizationTokenArgs.builder()\n .registryId(ecrRepository.registryId())\n .build());\n\n var myImage = new Image(\"myImage\", ImageArgs.builder()\n .cacheFrom(CacheFromArgs.builder()\n .registry(CacheFromRegistryArgs.builder()\n .ref(ecrRepository.repositoryUrl().applyValue(repositoryUrl -> String.format(\"%s:cache\", repositoryUrl)))\n .build())\n .build())\n .cacheTo(CacheToArgs.builder()\n .registry(CacheToRegistryArgs.builder()\n .imageManifest(true)\n .ociMediaTypes(true)\n .ref(ecrRepository.repositoryUrl().applyValue(repositoryUrl -> String.format(\"%s:cache\", repositoryUrl)))\n .build())\n .build())\n .context(BuildContextArgs.builder()\n .location(\"./app\")\n .build())\n .push(true)\n .registries(RegistryArgs.builder()\n .address(ecrRepository.repositoryUrl())\n .password(authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult).applyValue(authToken -> authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult.password())))\n .username(authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult).applyValue(authToken -> authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult.userName())))\n .build())\n .tags(ecrRepository.repositoryUrl().applyValue(repositoryUrl -> String.format(\"%s:latest\", repositoryUrl)))\n .build());\n\n ctx.export(\"ref\", myImage.ref());\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Multi-platform image\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker_build from \"@pulumi/docker-build\";\n\nconst image = new docker_build.Image(\"image\", {\n context: {\n location: \"app\",\n },\n platforms: [\n docker_build.Platform.Plan9_amd64,\n docker_build.Platform.Plan9_386,\n ],\n push: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_docker_build as docker_build\n\nimage = docker_build.Image(\"image\",\n context={\n \"location\": \"app\",\n },\n platforms=[\n docker_build.Platform.PLAN9_AMD64,\n docker_build.Platform.PLAN9_386,\n ],\n push=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing DockerBuild = Pulumi.DockerBuild;\n\nreturn await Deployment.RunAsync(() => \n{\n var image = new DockerBuild.Image(\"image\", new()\n {\n Context = new DockerBuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Platforms = new[]\n {\n DockerBuild.Platform.Plan9_amd64,\n DockerBuild.Platform.Plan9_386,\n },\n Push = false,\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", &dockerbuild.ImageArgs{\n\t\t\tContext: &dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tPlatforms: docker - build.PlatformArray{\n\t\t\t\tdockerbuild.Platform_Plan9_amd64,\n\t\t\t\tdockerbuild.Platform_Plan9_386,\n\t\t\t},\n\t\t\tPush: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Multi-platform image\nname: multi-platform\nresources:\n image:\n properties:\n context:\n location: app\n platforms:\n - plan9/amd64\n - plan9/386\n push: false\n type: docker-build:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder()\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .platforms( \n \"plan9/amd64\",\n \"plan9/386\")\n .push(false)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Registry export\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker_build from \"@pulumi/docker-build\";\n\nconst image = new docker_build.Image(\"image\", {\n context: {\n location: \"app\",\n },\n push: true,\n registries: [{\n address: \"docker.io\",\n password: dockerHubPassword,\n username: \"pulumibot\",\n }],\n tags: [\"docker.io/pulumi/pulumi:3.107.0\"],\n});\nexport const ref = myImage.ref;\n```\n```python\nimport pulumi\nimport pulumi_docker_build as docker_build\n\nimage = docker_build.Image(\"image\",\n context={\n \"location\": \"app\",\n },\n push=True,\n registries=[{\n \"address\": \"docker.io\",\n \"password\": docker_hub_password,\n \"username\": \"pulumibot\",\n }],\n tags=[\"docker.io/pulumi/pulumi:3.107.0\"])\npulumi.export(\"ref\", my_image[\"ref\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing DockerBuild = Pulumi.DockerBuild;\n\nreturn await Deployment.RunAsync(() => \n{\n var image = new DockerBuild.Image(\"image\", new()\n {\n Context = new DockerBuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Push = true,\n Registries = new[]\n {\n new DockerBuild.Inputs.RegistryArgs\n {\n Address = \"docker.io\",\n Password = dockerHubPassword,\n Username = \"pulumibot\",\n },\n },\n Tags = new[]\n {\n \"docker.io/pulumi/pulumi:3.107.0\",\n },\n });\n\n return new Dictionary\n {\n [\"ref\"] = myImage.Ref,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", &dockerbuild.ImageArgs{\n\t\t\tContext: &dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tPush: pulumi.Bool(true),\n\t\t\tRegistries: dockerbuild.RegistryArray{\n\t\t\t\t&dockerbuild.RegistryArgs{\n\t\t\t\t\tAddress: pulumi.String(\"docker.io\"),\n\t\t\t\t\tPassword: pulumi.Any(dockerHubPassword),\n\t\t\t\t\tUsername: pulumi.String(\"pulumibot\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"docker.io/pulumi/pulumi:3.107.0\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ref\", myImage.Ref)\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Registry export\nname: registry\noutputs:\n ref: ${my-image.ref}\nresources:\n image:\n properties:\n context:\n location: app\n push: true\n registries:\n - address: docker.io\n password: ${dockerHubPassword}\n username: pulumibot\n tags:\n - docker.io/pulumi/pulumi:3.107.0\n type: docker-build:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport com.pulumi.dockerbuild.inputs.RegistryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder()\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .push(true)\n .registries(RegistryArgs.builder()\n .address(\"docker.io\")\n .password(dockerHubPassword)\n .username(\"pulumibot\")\n .build())\n .tags(\"docker.io/pulumi/pulumi:3.107.0\")\n .build());\n\n ctx.export(\"ref\", myImage.ref());\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Caching\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker_build from \"@pulumi/docker-build\";\n\nconst image = new docker_build.Image(\"image\", {\n cacheFrom: [{\n local: {\n src: \"tmp/cache\",\n },\n }],\n cacheTo: [{\n local: {\n dest: \"tmp/cache\",\n mode: docker_build.CacheMode.Max,\n },\n }],\n context: {\n location: \"app\",\n },\n push: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_docker_build as docker_build\n\nimage = docker_build.Image(\"image\",\n cache_from=[{\n \"local\": {\n \"src\": \"tmp/cache\",\n },\n }],\n cache_to=[{\n \"local\": {\n \"dest\": \"tmp/cache\",\n \"mode\": docker_build.CacheMode.MAX,\n },\n }],\n context={\n \"location\": \"app\",\n },\n push=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing DockerBuild = Pulumi.DockerBuild;\n\nreturn await Deployment.RunAsync(() => \n{\n var image = new DockerBuild.Image(\"image\", new()\n {\n CacheFrom = new[]\n {\n new DockerBuild.Inputs.CacheFromArgs\n {\n Local = new DockerBuild.Inputs.CacheFromLocalArgs\n {\n Src = \"tmp/cache\",\n },\n },\n },\n CacheTo = new[]\n {\n new DockerBuild.Inputs.CacheToArgs\n {\n Local = new DockerBuild.Inputs.CacheToLocalArgs\n {\n Dest = \"tmp/cache\",\n Mode = DockerBuild.CacheMode.Max,\n },\n },\n },\n Context = new DockerBuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Push = false,\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", &dockerbuild.ImageArgs{\n\t\t\tCacheFrom: dockerbuild.CacheFromArray{\n\t\t\t\t&dockerbuild.CacheFromArgs{\n\t\t\t\t\tLocal: &dockerbuild.CacheFromLocalArgs{\n\t\t\t\t\t\tSrc: pulumi.String(\"tmp/cache\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCacheTo: dockerbuild.CacheToArray{\n\t\t\t\t&dockerbuild.CacheToArgs{\n\t\t\t\t\tLocal: &dockerbuild.CacheToLocalArgs{\n\t\t\t\t\t\tDest: pulumi.String(\"tmp/cache\"),\n\t\t\t\t\t\tMode: dockerbuild.CacheModeMax,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tContext: &dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tPush: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Caching\nname: caching\nresources:\n image:\n properties:\n cacheFrom:\n - local:\n src: tmp/cache\n cacheTo:\n - local:\n dest: tmp/cache\n mode: max\n context:\n location: app\n push: false\n type: docker-build:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.CacheFromArgs;\nimport com.pulumi.dockerbuild.inputs.CacheFromLocalArgs;\nimport com.pulumi.dockerbuild.inputs.CacheToArgs;\nimport com.pulumi.dockerbuild.inputs.CacheToLocalArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder()\n .cacheFrom(CacheFromArgs.builder()\n .local(CacheFromLocalArgs.builder()\n .src(\"tmp/cache\")\n .build())\n .build())\n .cacheTo(CacheToArgs.builder()\n .local(CacheToLocalArgs.builder()\n .dest(\"tmp/cache\")\n .mode(\"max\")\n .build())\n .build())\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .push(false)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Docker Build Cloud\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker_build from \"@pulumi/docker-build\";\n\nconst image = new docker_build.Image(\"image\", {\n builder: {\n name: \"cloud-builder-name\",\n },\n context: {\n location: \"app\",\n },\n exec: true,\n push: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_docker_build as docker_build\n\nimage = docker_build.Image(\"image\",\n builder={\n \"name\": \"cloud-builder-name\",\n },\n context={\n \"location\": \"app\",\n },\n exec_=True,\n push=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing DockerBuild = Pulumi.DockerBuild;\n\nreturn await Deployment.RunAsync(() => \n{\n var image = new DockerBuild.Image(\"image\", new()\n {\n Builder = new DockerBuild.Inputs.BuilderConfigArgs\n {\n Name = \"cloud-builder-name\",\n },\n Context = new DockerBuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Exec = true,\n Push = false,\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", &dockerbuild.ImageArgs{\n\t\t\tBuilder: &dockerbuild.BuilderConfigArgs{\n\t\t\t\tName: pulumi.String(\"cloud-builder-name\"),\n\t\t\t},\n\t\t\tContext: &dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tExec: pulumi.Bool(true),\n\t\t\tPush: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Docker Build Cloud\nname: dbc\nresources:\n image:\n properties:\n builder:\n name: cloud-builder-name\n context:\n location: app\n exec: true\n push: false\n type: docker-build:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuilderConfigArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder()\n .builder(BuilderConfigArgs.builder()\n .name(\"cloud-builder-name\")\n .build())\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .exec(true)\n .push(false)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Build arguments\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker_build from \"@pulumi/docker-build\";\n\nconst image = new docker_build.Image(\"image\", {\n buildArgs: {\n SET_ME_TO_TRUE: \"true\",\n },\n context: {\n location: \"app\",\n },\n push: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_docker_build as docker_build\n\nimage = docker_build.Image(\"image\",\n build_args={\n \"SET_ME_TO_TRUE\": \"true\",\n },\n context={\n \"location\": \"app\",\n },\n push=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing DockerBuild = Pulumi.DockerBuild;\n\nreturn await Deployment.RunAsync(() => \n{\n var image = new DockerBuild.Image(\"image\", new()\n {\n BuildArgs = \n {\n { \"SET_ME_TO_TRUE\", \"true\" },\n },\n Context = new DockerBuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Push = false,\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", &dockerbuild.ImageArgs{\n\t\t\tBuildArgs: pulumi.StringMap{\n\t\t\t\t\"SET_ME_TO_TRUE\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tContext: &dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tPush: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Build arguments\nname: build-args\nresources:\n image:\n properties:\n buildArgs:\n SET_ME_TO_TRUE: \"true\"\n context:\n location: app\n push: false\n type: docker-build:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder()\n .buildArgs(Map.of(\"SET_ME_TO_TRUE\", \"true\"))\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .push(false)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Build target\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker_build from \"@pulumi/docker-build\";\n\nconst image = new docker_build.Image(\"image\", {\n context: {\n location: \"app\",\n },\n push: false,\n target: \"build-me\",\n});\n```\n```python\nimport pulumi\nimport pulumi_docker_build as docker_build\n\nimage = docker_build.Image(\"image\",\n context={\n \"location\": \"app\",\n },\n push=False,\n target=\"build-me\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing DockerBuild = Pulumi.DockerBuild;\n\nreturn await Deployment.RunAsync(() => \n{\n var image = new DockerBuild.Image(\"image\", new()\n {\n Context = new DockerBuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Push = false,\n Target = \"build-me\",\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", &dockerbuild.ImageArgs{\n\t\t\tContext: &dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tPush: pulumi.Bool(false),\n\t\t\tTarget: pulumi.String(\"build-me\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Build target\nname: build-target\nresources:\n image:\n properties:\n context:\n location: app\n push: false\n target: build-me\n type: docker-build:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder()\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .push(false)\n .target(\"build-me\")\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Named contexts\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker_build from \"@pulumi/docker-build\";\n\nconst image = new docker_build.Image(\"image\", {\n context: {\n location: \"app\",\n named: {\n \"golang:latest\": {\n location: \"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\",\n },\n },\n },\n push: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_docker_build as docker_build\n\nimage = docker_build.Image(\"image\",\n context={\n \"location\": \"app\",\n \"named\": {\n \"golang:latest\": {\n \"location\": \"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\",\n },\n },\n },\n push=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing DockerBuild = Pulumi.DockerBuild;\n\nreturn await Deployment.RunAsync(() => \n{\n var image = new DockerBuild.Image(\"image\", new()\n {\n Context = new DockerBuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n Named = \n {\n { \"golang:latest\", new DockerBuild.Inputs.ContextArgs\n {\n Location = \"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\",\n } },\n },\n },\n Push = false,\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", &dockerbuild.ImageArgs{\n\t\t\tContext: &dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t\tNamed: dockerbuild.ContextMap{\n\t\t\t\t\t\"golang:latest\": &dockerbuild.ContextArgs{\n\t\t\t\t\t\tLocation: pulumi.String(\"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tPush: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Named contexts\nname: named-contexts\nresources:\n image:\n properties:\n context:\n location: app\n named:\n golang:latest:\n location: docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\n push: false\n type: docker-build:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder()\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .named(Map.of(\"golang:latest\", Map.of(\"location\", \"docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984\")))\n .build())\n .push(false)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Remote context\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker_build from \"@pulumi/docker-build\";\n\nconst image = new docker_build.Image(\"image\", {\n context: {\n location: \"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\",\n },\n push: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_docker_build as docker_build\n\nimage = docker_build.Image(\"image\",\n context={\n \"location\": \"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\",\n },\n push=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing DockerBuild = Pulumi.DockerBuild;\n\nreturn await Deployment.RunAsync(() => \n{\n var image = new DockerBuild.Image(\"image\", new()\n {\n Context = new DockerBuild.Inputs.BuildContextArgs\n {\n Location = \"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\",\n },\n Push = false,\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", &dockerbuild.ImageArgs{\n\t\t\tContext: &dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\"),\n\t\t\t},\n\t\t\tPush: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Remote context\nname: remote-context\nresources:\n image:\n properties:\n context:\n location: https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\n push: false\n type: docker-build:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder()\n .context(BuildContextArgs.builder()\n .location(\"https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile\")\n .build())\n .push(false)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Inline Dockerfile\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker_build from \"@pulumi/docker-build\";\n\nconst image = new docker_build.Image(\"image\", {\n context: {\n location: \"app\",\n },\n dockerfile: {\n inline: `FROM busybox\nCOPY hello.c ./\n`,\n },\n push: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_docker_build as docker_build\n\nimage = docker_build.Image(\"image\",\n context={\n \"location\": \"app\",\n },\n dockerfile={\n \"inline\": \"\"\"FROM busybox\nCOPY hello.c ./\n\"\"\",\n },\n push=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing DockerBuild = Pulumi.DockerBuild;\n\nreturn await Deployment.RunAsync(() => \n{\n var image = new DockerBuild.Image(\"image\", new()\n {\n Context = new DockerBuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Dockerfile = new DockerBuild.Inputs.DockerfileArgs\n {\n Inline = @\"FROM busybox\nCOPY hello.c ./\n\",\n },\n Push = false,\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", &dockerbuild.ImageArgs{\n\t\t\tContext: &dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tDockerfile: &dockerbuild.DockerfileArgs{\n\t\t\t\tInline: pulumi.String(\"FROM busybox\\nCOPY hello.c ./\\n\"),\n\t\t\t},\n\t\t\tPush: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Inline Dockerfile\nname: inline\nresources:\n image:\n properties:\n context:\n location: app\n dockerfile:\n inline: |\n FROM busybox\n COPY hello.c ./\n push: false\n type: docker-build:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport com.pulumi.dockerbuild.inputs.DockerfileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder()\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .dockerfile(DockerfileArgs.builder()\n .inline(\"\"\"\nFROM busybox\nCOPY hello.c ./\n \"\"\")\n .build())\n .push(false)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Remote context\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker_build from \"@pulumi/docker-build\";\n\nconst image = new docker_build.Image(\"image\", {\n context: {\n location: \"https://github.com/docker-library/hello-world.git\",\n },\n dockerfile: {\n location: \"app/Dockerfile\",\n },\n push: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_docker_build as docker_build\n\nimage = docker_build.Image(\"image\",\n context={\n \"location\": \"https://github.com/docker-library/hello-world.git\",\n },\n dockerfile={\n \"location\": \"app/Dockerfile\",\n },\n push=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing DockerBuild = Pulumi.DockerBuild;\n\nreturn await Deployment.RunAsync(() => \n{\n var image = new DockerBuild.Image(\"image\", new()\n {\n Context = new DockerBuild.Inputs.BuildContextArgs\n {\n Location = \"https://github.com/docker-library/hello-world.git\",\n },\n Dockerfile = new DockerBuild.Inputs.DockerfileArgs\n {\n Location = \"app/Dockerfile\",\n },\n Push = false,\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", &dockerbuild.ImageArgs{\n\t\t\tContext: &dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"https://github.com/docker-library/hello-world.git\"),\n\t\t\t},\n\t\t\tDockerfile: &dockerbuild.DockerfileArgs{\n\t\t\t\tLocation: pulumi.String(\"app/Dockerfile\"),\n\t\t\t},\n\t\t\tPush: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Remote context\nname: remote-context\nresources:\n image:\n properties:\n context:\n location: https://github.com/docker-library/hello-world.git\n dockerfile:\n location: app/Dockerfile\n push: false\n type: docker-build:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport com.pulumi.dockerbuild.inputs.DockerfileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder()\n .context(BuildContextArgs.builder()\n .location(\"https://github.com/docker-library/hello-world.git\")\n .build())\n .dockerfile(DockerfileArgs.builder()\n .location(\"app/Dockerfile\")\n .build())\n .push(false)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Local export\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker_build from \"@pulumi/docker-build\";\n\nconst image = new docker_build.Image(\"image\", {\n context: {\n location: \"app\",\n },\n exports: [{\n docker: {\n tar: true,\n },\n }],\n push: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_docker_build as docker_build\n\nimage = docker_build.Image(\"image\",\n context={\n \"location\": \"app\",\n },\n exports=[{\n \"docker\": {\n \"tar\": True,\n },\n }],\n push=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing DockerBuild = Pulumi.DockerBuild;\n\nreturn await Deployment.RunAsync(() => \n{\n var image = new DockerBuild.Image(\"image\", new()\n {\n Context = new DockerBuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Exports = new[]\n {\n new DockerBuild.Inputs.ExportArgs\n {\n Docker = new DockerBuild.Inputs.ExportDockerArgs\n {\n Tar = true,\n },\n },\n },\n Push = false,\n });\n\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dockerbuild.NewImage(ctx, \"image\", &dockerbuild.ImageArgs{\n\t\t\tContext: &dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tExports: dockerbuild.ExportArray{\n\t\t\t\t&dockerbuild.ExportArgs{\n\t\t\t\t\tDocker: &dockerbuild.ExportDockerArgs{\n\t\t\t\t\t\tTar: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tPush: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Local export\nname: docker-load\nresources:\n image:\n properties:\n context:\n location: app\n exports:\n - docker:\n tar: true\n push: false\n type: docker-build:Image\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport com.pulumi.dockerbuild.inputs.ExportArgs;\nimport com.pulumi.dockerbuild.inputs.ExportDockerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image = new Image(\"image\", ImageArgs.builder()\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .exports(ExportArgs.builder()\n .docker(ExportDockerArgs.builder()\n .tar(true)\n .build())\n .build())\n .push(false)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}",
- "properties": {
- "addHosts": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "description": "Custom `host:ip` mappings to use during the build.\n\nEquivalent to Docker's `--add-host` flag."
- },
- "buildArgs": {
- "type": "object",
- "additionalProperties": {
- "type": "string"
- },
- "description": "`ARG` names and values to set during the build.\n\nThese variables are accessed like environment variables inside `RUN`\ninstructions.\n\nBuild arguments are persisted in the image, so you should use `secrets`\nif these arguments are sensitive.\n\nEquivalent to Docker's `--build-arg` flag."
- },
- "buildOnPreview": {
- "type": "boolean",
- "description": "Setting this to `false` will always skip image builds during previews,\nand setting it to `true` will always build images during previews.\n\nImages built during previews are never exported to registries, however\ncache manifests are still exported.\n\nOn-disk Dockerfiles are always validated for syntactic correctness\nregardless of this setting.\n\nDefaults to `true` as a safeguard against broken images merging as part\nof CI pipelines.",
- "default": true
- },
- "builder": {
- "$ref": "#/types/docker-build:index:BuilderConfig",
- "description": "Builder configuration."
- },
- "cacheFrom": {
- "type": "array",
- "items": {
- "$ref": "#/types/docker-build:index:CacheFrom"
- },
- "description": "Cache export configuration.\n\nEquivalent to Docker's `--cache-from` flag."
- },
- "cacheTo": {
- "type": "array",
- "items": {
- "$ref": "#/types/docker-build:index:CacheTo"
- },
- "description": "Cache import configuration.\n\nEquivalent to Docker's `--cache-to` flag."
- },
- "context": {
- "$ref": "#/types/docker-build:index:BuildContext",
- "description": "Build context settings. Defaults to the current directory.\n\nEquivalent to Docker's `PATH | URL | -` positional argument."
- },
- "contextHash": {
- "type": "string",
- "description": "A preliminary hash of the image's build context.\n\nPulumi uses this to determine if an image _may_ need to be re-built."
- },
- "digest": {
- "type": "string",
- "description": "A SHA256 digest of the image if it was exported to a registry or\nelsewhere.\n\nEmpty if the image was not exported.\n\nRegistry images can be referenced precisely as `@`. The\n`ref` output provides one such reference as a convenience."
- },
- "dockerfile": {
- "$ref": "#/types/docker-build:index:Dockerfile",
- "description": "Dockerfile settings.\n\nEquivalent to Docker's `--file` flag."
- },
- "exec": {
- "type": "boolean",
- "description": "Use `exec` mode to build this image.\n\nBy default the provider embeds a v25 Docker client with v0.12 buildx\nsupport. This helps ensure consistent behavior across environments and\nis compatible with alternative build backends (e.g. `buildkitd`), but\nit may not be desirable if you require a specific version of buildx.\nFor example you may want to run a custom `docker-buildx` binary with\nsupport for [Docker Build\nCloud](https://docs.docker.com/build/cloud/setup/) (DBC).\n\nWhen this is set to `true` the provider will instead execute the\n`docker-buildx` binary directly to perform its operations. The user is\nresponsible for ensuring this binary exists, with correct permissions\nand pre-configured builders, at a path Docker expects (e.g.\n`~/.docker/cli-plugins`).\n\nDebugging `exec` mode may be more difficult as Pulumi will not be able\nto surface fine-grained errors and warnings. Additionally credentials\nare temporarily written to disk in order to provide them to the\n`docker-buildx` binary."
- },
- "exports": {
- "type": "array",
- "items": {
- "$ref": "#/types/docker-build:index:Export"
- },
- "description": "Controls where images are persisted after building.\n\nImages are only stored in the local cache unless `exports` are\nexplicitly configured.\n\nExporting to multiple destinations requires a daemon running BuildKit\n0.13 or later.\n\nEquivalent to Docker's `--output` flag."
- },
- "labels": {
- "type": "object",
- "additionalProperties": {
- "type": "string"
- },
- "description": "Attach arbitrary key/value metadata to the image.\n\nEquivalent to Docker's `--label` flag."
- },
- "load": {
- "type": "boolean",
- "description": "When `true` the build will automatically include a `docker` export.\n\nDefaults to `false`.\n\nEquivalent to Docker's `--load` flag."
- },
- "network": {
- "$ref": "#/types/docker-build:index:NetworkMode",
- "description": "Set the network mode for `RUN` instructions. Defaults to `default`.\n\nFor custom networks, configure your builder with `--driver-opt network=...`.\n\nEquivalent to Docker's `--network` flag.",
- "default": "default"
- },
- "noCache": {
- "type": "boolean",
- "description": "Do not import cache manifests when building the image.\n\nEquivalent to Docker's `--no-cache` flag."
- },
- "platforms": {
- "type": "array",
- "items": {
- "$ref": "#/types/docker-build:index:Platform"
- },
- "description": "Set target platform(s) for the build. Defaults to the host's platform.\n\nEquivalent to Docker's `--platform` flag."
- },
- "pull": {
- "type": "boolean",
- "description": "Always pull referenced images.\n\nEquivalent to Docker's `--pull` flag."
- },
- "push": {
- "type": "boolean",
- "description": "When `true` the build will automatically include a `registry` export.\n\nDefaults to `false`.\n\nEquivalent to Docker's `--push` flag."
- },
- "ref": {
- "type": "string",
- "description": "If the image was pushed to any registries then this will contain a\nsingle fully-qualified tag including the build's digest.\n\nIf the image had tags but was not exported, this will take on a value\nof one of those tags.\n\nThis will be empty if the image had no exports and no tags.\n\nThis is only for convenience and may not be appropriate for situations\nwhere multiple tags or registries are involved. In those cases this\noutput is not guaranteed to be stable.\n\nFor more control over tags consumed by downstream resources you should\nuse the `digest` output."
- },
- "registries": {
- "type": "array",
- "items": {
- "$ref": "#/types/docker-build:index:Registry"
- },
- "description": "Registry credentials. Required if reading or exporting to private\nrepositories.\n\nCredentials are kept in-memory and do not pollute pre-existing\ncredentials on the host.\n\nSimilar to `docker login`."
- },
- "secrets": {
- "type": "object",
- "additionalProperties": {
- "type": "string"
- },
- "description": "A mapping of secret names to their corresponding values.\n\nUnlike the Docker CLI, these can be passed by value and do not need to\nexist on-disk or in environment variables.\n\nBuild arguments and environment variables are persistent in the final\nimage, so you should use this for sensitive values.\n\nSimilar to Docker's `--secret` flag."
- },
- "ssh": {
- "type": "array",
- "items": {
- "$ref": "#/types/docker-build:index:SSH"
- },
- "description": "SSH agent socket or keys to expose to the build.\n\nEquivalent to Docker's `--ssh` flag."
- },
- "tags": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "description": "Name and optionally a tag (format: `name:tag`).\n\nIf exporting to a registry, the name should include the fully qualified\nregistry address (e.g. `docker.io/pulumi/pulumi:latest`).\n\nEquivalent to Docker's `--tag` flag."
- },
- "target": {
- "type": "string",
- "description": "Set the target build stage(s) to build.\n\nIf not specified all targets will be built by default.\n\nEquivalent to Docker's `--target` flag."
- }
- },
- "type": "object",
- "required": [
- "contextHash",
- "digest",
- "push",
- "ref"
- ],
- "inputProperties": {
- "addHosts": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "description": "Custom `host:ip` mappings to use during the build.\n\nEquivalent to Docker's `--add-host` flag."
- },
- "buildArgs": {
- "type": "object",
- "additionalProperties": {
- "type": "string"
- },
- "description": "`ARG` names and values to set during the build.\n\nThese variables are accessed like environment variables inside `RUN`\ninstructions.\n\nBuild arguments are persisted in the image, so you should use `secrets`\nif these arguments are sensitive.\n\nEquivalent to Docker's `--build-arg` flag."
- },
- "buildOnPreview": {
- "type": "boolean",
- "description": "Setting this to `false` will always skip image builds during previews,\nand setting it to `true` will always build images during previews.\n\nImages built during previews are never exported to registries, however\ncache manifests are still exported.\n\nOn-disk Dockerfiles are always validated for syntactic correctness\nregardless of this setting.\n\nDefaults to `true` as a safeguard against broken images merging as part\nof CI pipelines.",
- "default": true
- },
- "builder": {
- "$ref": "#/types/docker-build:index:BuilderConfig",
- "description": "Builder configuration."
- },
- "cacheFrom": {
- "type": "array",
- "items": {
- "$ref": "#/types/docker-build:index:CacheFrom"
- },
- "description": "Cache export configuration.\n\nEquivalent to Docker's `--cache-from` flag."
- },
- "cacheTo": {
- "type": "array",
- "items": {
- "$ref": "#/types/docker-build:index:CacheTo"
- },
- "description": "Cache import configuration.\n\nEquivalent to Docker's `--cache-to` flag."
- },
- "context": {
- "$ref": "#/types/docker-build:index:BuildContext",
- "description": "Build context settings. Defaults to the current directory.\n\nEquivalent to Docker's `PATH | URL | -` positional argument."
- },
- "dockerfile": {
- "$ref": "#/types/docker-build:index:Dockerfile",
- "description": "Dockerfile settings.\n\nEquivalent to Docker's `--file` flag."
- },
- "exec": {
- "type": "boolean",
- "description": "Use `exec` mode to build this image.\n\nBy default the provider embeds a v25 Docker client with v0.12 buildx\nsupport. This helps ensure consistent behavior across environments and\nis compatible with alternative build backends (e.g. `buildkitd`), but\nit may not be desirable if you require a specific version of buildx.\nFor example you may want to run a custom `docker-buildx` binary with\nsupport for [Docker Build\nCloud](https://docs.docker.com/build/cloud/setup/) (DBC).\n\nWhen this is set to `true` the provider will instead execute the\n`docker-buildx` binary directly to perform its operations. The user is\nresponsible for ensuring this binary exists, with correct permissions\nand pre-configured builders, at a path Docker expects (e.g.\n`~/.docker/cli-plugins`).\n\nDebugging `exec` mode may be more difficult as Pulumi will not be able\nto surface fine-grained errors and warnings. Additionally credentials\nare temporarily written to disk in order to provide them to the\n`docker-buildx` binary."
- },
- "exports": {
- "type": "array",
- "items": {
- "$ref": "#/types/docker-build:index:Export"
- },
- "description": "Controls where images are persisted after building.\n\nImages are only stored in the local cache unless `exports` are\nexplicitly configured.\n\nExporting to multiple destinations requires a daemon running BuildKit\n0.13 or later.\n\nEquivalent to Docker's `--output` flag."
- },
- "labels": {
- "type": "object",
- "additionalProperties": {
- "type": "string"
- },
- "description": "Attach arbitrary key/value metadata to the image.\n\nEquivalent to Docker's `--label` flag."
- },
- "load": {
- "type": "boolean",
- "description": "When `true` the build will automatically include a `docker` export.\n\nDefaults to `false`.\n\nEquivalent to Docker's `--load` flag."
- },
- "network": {
- "$ref": "#/types/docker-build:index:NetworkMode",
- "description": "Set the network mode for `RUN` instructions. Defaults to `default`.\n\nFor custom networks, configure your builder with `--driver-opt network=...`.\n\nEquivalent to Docker's `--network` flag.",
- "default": "default"
- },
- "noCache": {
- "type": "boolean",
- "description": "Do not import cache manifests when building the image.\n\nEquivalent to Docker's `--no-cache` flag."
- },
- "platforms": {
- "type": "array",
- "items": {
- "$ref": "#/types/docker-build:index:Platform"
- },
- "description": "Set target platform(s) for the build. Defaults to the host's platform.\n\nEquivalent to Docker's `--platform` flag."
- },
- "pull": {
- "type": "boolean",
- "description": "Always pull referenced images.\n\nEquivalent to Docker's `--pull` flag."
- },
- "push": {
- "type": "boolean",
- "description": "When `true` the build will automatically include a `registry` export.\n\nDefaults to `false`.\n\nEquivalent to Docker's `--push` flag."
- },
- "registries": {
- "type": "array",
- "items": {
- "$ref": "#/types/docker-build:index:Registry"
- },
- "description": "Registry credentials. Required if reading or exporting to private\nrepositories.\n\nCredentials are kept in-memory and do not pollute pre-existing\ncredentials on the host.\n\nSimilar to `docker login`."
- },
- "secrets": {
- "type": "object",
- "additionalProperties": {
- "type": "string"
- },
- "description": "A mapping of secret names to their corresponding values.\n\nUnlike the Docker CLI, these can be passed by value and do not need to\nexist on-disk or in environment variables.\n\nBuild arguments and environment variables are persistent in the final\nimage, so you should use this for sensitive values.\n\nSimilar to Docker's `--secret` flag."
- },
- "ssh": {
- "type": "array",
- "items": {
- "$ref": "#/types/docker-build:index:SSH"
- },
- "description": "SSH agent socket or keys to expose to the build.\n\nEquivalent to Docker's `--ssh` flag."
- },
- "tags": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "description": "Name and optionally a tag (format: `name:tag`).\n\nIf exporting to a registry, the name should include the fully qualified\nregistry address (e.g. `docker.io/pulumi/pulumi:latest`).\n\nEquivalent to Docker's `--tag` flag."
- },
- "target": {
- "type": "string",
- "description": "Set the target build stage(s) to build.\n\nIf not specified all targets will be built by default.\n\nEquivalent to Docker's `--target` flag."
- }
- },
- "requiredInputs": [
- "push"
- ]
- },
- "docker-build:index:Index": {
- "description": "A wrapper around `docker buildx imagetools create` to create an index\n(or manifest list) referencing one or more existing images.\n\nIn most cases you do not need an `Index` to build a multi-platform\nimage -- specifying multiple platforms on the `Image` will handle this\nfor you automatically.\n\nHowever, as of April 2024, building multi-platform images _with\ncaching_ will only export a cache for one platform at a time (see [this\ndiscussion](https://github.com/docker/buildx/discussions/1382) for more\ndetails).\n\nTherefore this resource can be helpful if you are building\nmulti-platform images with caching: each platform can be built and\ncached separately, and an `Index` can join them all together. An\nexample of this is shown below.\n\nThis resource creates an OCI image index or a Docker manifest list\ndepending on the media types of the source images.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Multi-platform registry caching\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker_build from \"@pulumi/docker-build\";\n\nconst amd64 = new docker_build.Image(\"amd64\", {\n cacheFrom: [{\n registry: {\n ref: \"docker.io/pulumi/pulumi:cache-amd64\",\n },\n }],\n cacheTo: [{\n registry: {\n mode: docker_build.CacheMode.Max,\n ref: \"docker.io/pulumi/pulumi:cache-amd64\",\n },\n }],\n context: {\n location: \"app\",\n },\n platforms: [docker_build.Platform.Linux_amd64],\n tags: [\"docker.io/pulumi/pulumi:3.107.0-amd64\"],\n});\nconst arm64 = new docker_build.Image(\"arm64\", {\n cacheFrom: [{\n registry: {\n ref: \"docker.io/pulumi/pulumi:cache-arm64\",\n },\n }],\n cacheTo: [{\n registry: {\n mode: docker_build.CacheMode.Max,\n ref: \"docker.io/pulumi/pulumi:cache-arm64\",\n },\n }],\n context: {\n location: \"app\",\n },\n platforms: [docker_build.Platform.Linux_arm64],\n tags: [\"docker.io/pulumi/pulumi:3.107.0-arm64\"],\n});\nconst index = new docker_build.Index(\"index\", {\n sources: [\n amd64.ref,\n arm64.ref,\n ],\n tag: \"docker.io/pulumi/pulumi:3.107.0\",\n});\nexport const ref = index.ref;\n```\n```python\nimport pulumi\nimport pulumi_docker_build as docker_build\n\namd64 = docker_build.Image(\"amd64\",\n cache_from=[{\n \"registry\": {\n \"ref\": \"docker.io/pulumi/pulumi:cache-amd64\",\n },\n }],\n cache_to=[{\n \"registry\": {\n \"mode\": docker_build.CacheMode.MAX,\n \"ref\": \"docker.io/pulumi/pulumi:cache-amd64\",\n },\n }],\n context={\n \"location\": \"app\",\n },\n platforms=[docker_build.Platform.LINUX_AMD64],\n tags=[\"docker.io/pulumi/pulumi:3.107.0-amd64\"])\narm64 = docker_build.Image(\"arm64\",\n cache_from=[{\n \"registry\": {\n \"ref\": \"docker.io/pulumi/pulumi:cache-arm64\",\n },\n }],\n cache_to=[{\n \"registry\": {\n \"mode\": docker_build.CacheMode.MAX,\n \"ref\": \"docker.io/pulumi/pulumi:cache-arm64\",\n },\n }],\n context={\n \"location\": \"app\",\n },\n platforms=[docker_build.Platform.LINUX_ARM64],\n tags=[\"docker.io/pulumi/pulumi:3.107.0-arm64\"])\nindex = docker_build.Index(\"index\",\n sources=[\n amd64.ref,\n arm64.ref,\n ],\n tag=\"docker.io/pulumi/pulumi:3.107.0\")\npulumi.export(\"ref\", index.ref)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing DockerBuild = Pulumi.DockerBuild;\n\nreturn await Deployment.RunAsync(() => \n{\n var amd64 = new DockerBuild.Image(\"amd64\", new()\n {\n CacheFrom = new[]\n {\n new DockerBuild.Inputs.CacheFromArgs\n {\n Registry = new DockerBuild.Inputs.CacheFromRegistryArgs\n {\n Ref = \"docker.io/pulumi/pulumi:cache-amd64\",\n },\n },\n },\n CacheTo = new[]\n {\n new DockerBuild.Inputs.CacheToArgs\n {\n Registry = new DockerBuild.Inputs.CacheToRegistryArgs\n {\n Mode = DockerBuild.CacheMode.Max,\n Ref = \"docker.io/pulumi/pulumi:cache-amd64\",\n },\n },\n },\n Context = new DockerBuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Platforms = new[]\n {\n DockerBuild.Platform.Linux_amd64,\n },\n Tags = new[]\n {\n \"docker.io/pulumi/pulumi:3.107.0-amd64\",\n },\n });\n\n var arm64 = new DockerBuild.Image(\"arm64\", new()\n {\n CacheFrom = new[]\n {\n new DockerBuild.Inputs.CacheFromArgs\n {\n Registry = new DockerBuild.Inputs.CacheFromRegistryArgs\n {\n Ref = \"docker.io/pulumi/pulumi:cache-arm64\",\n },\n },\n },\n CacheTo = new[]\n {\n new DockerBuild.Inputs.CacheToArgs\n {\n Registry = new DockerBuild.Inputs.CacheToRegistryArgs\n {\n Mode = DockerBuild.CacheMode.Max,\n Ref = \"docker.io/pulumi/pulumi:cache-arm64\",\n },\n },\n },\n Context = new DockerBuild.Inputs.BuildContextArgs\n {\n Location = \"app\",\n },\n Platforms = new[]\n {\n DockerBuild.Platform.Linux_arm64,\n },\n Tags = new[]\n {\n \"docker.io/pulumi/pulumi:3.107.0-arm64\",\n },\n });\n\n var index = new DockerBuild.Index(\"index\", new()\n {\n Sources = new[]\n {\n amd64.Ref,\n arm64.Ref,\n },\n Tag = \"docker.io/pulumi/pulumi:3.107.0\",\n });\n\n return new Dictionary\n {\n [\"ref\"] = index.Ref,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tamd64, err := dockerbuild.NewImage(ctx, \"amd64\", &dockerbuild.ImageArgs{\n\t\t\tCacheFrom: dockerbuild.CacheFromArray{\n\t\t\t\t&dockerbuild.CacheFromArgs{\n\t\t\t\t\tRegistry: &dockerbuild.CacheFromRegistryArgs{\n\t\t\t\t\t\tRef: pulumi.String(\"docker.io/pulumi/pulumi:cache-amd64\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCacheTo: dockerbuild.CacheToArray{\n\t\t\t\t&dockerbuild.CacheToArgs{\n\t\t\t\t\tRegistry: &dockerbuild.CacheToRegistryArgs{\n\t\t\t\t\t\tMode: dockerbuild.CacheModeMax,\n\t\t\t\t\t\tRef: pulumi.String(\"docker.io/pulumi/pulumi:cache-amd64\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tContext: &dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tPlatforms: docker - build.PlatformArray{\n\t\t\t\tdockerbuild.Platform_Linux_amd64,\n\t\t\t},\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"docker.io/pulumi/pulumi:3.107.0-amd64\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tarm64, err := dockerbuild.NewImage(ctx, \"arm64\", &dockerbuild.ImageArgs{\n\t\t\tCacheFrom: dockerbuild.CacheFromArray{\n\t\t\t\t&dockerbuild.CacheFromArgs{\n\t\t\t\t\tRegistry: &dockerbuild.CacheFromRegistryArgs{\n\t\t\t\t\t\tRef: pulumi.String(\"docker.io/pulumi/pulumi:cache-arm64\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCacheTo: dockerbuild.CacheToArray{\n\t\t\t\t&dockerbuild.CacheToArgs{\n\t\t\t\t\tRegistry: &dockerbuild.CacheToRegistryArgs{\n\t\t\t\t\t\tMode: dockerbuild.CacheModeMax,\n\t\t\t\t\t\tRef: pulumi.String(\"docker.io/pulumi/pulumi:cache-arm64\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tContext: &dockerbuild.BuildContextArgs{\n\t\t\t\tLocation: pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tPlatforms: docker - build.PlatformArray{\n\t\t\t\tdockerbuild.Platform_Linux_arm64,\n\t\t\t},\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"docker.io/pulumi/pulumi:3.107.0-arm64\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tindex, err := dockerbuild.NewIndex(ctx, \"index\", &dockerbuild.IndexArgs{\n\t\t\tSources: pulumi.StringArray{\n\t\t\t\tamd64.Ref,\n\t\t\t\tarm64.Ref,\n\t\t\t},\n\t\t\tTag: pulumi.String(\"docker.io/pulumi/pulumi:3.107.0\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ref\", index.Ref)\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Multi-platform registry caching\nname: registry-caching\noutputs:\n ref: ${index.ref}\nresources:\n amd64:\n properties:\n cacheFrom:\n - registry:\n ref: docker.io/pulumi/pulumi:cache-amd64\n cacheTo:\n - registry:\n mode: max\n ref: docker.io/pulumi/pulumi:cache-amd64\n context:\n location: app\n platforms:\n - linux/amd64\n tags:\n - docker.io/pulumi/pulumi:3.107.0-amd64\n type: docker-build:Image\n arm64:\n properties:\n cacheFrom:\n - registry:\n ref: docker.io/pulumi/pulumi:cache-arm64\n cacheTo:\n - registry:\n mode: max\n ref: docker.io/pulumi/pulumi:cache-arm64\n context:\n location: app\n platforms:\n - linux/arm64\n tags:\n - docker.io/pulumi/pulumi:3.107.0-arm64\n type: docker-build:Image\n index:\n properties:\n sources:\n - ${amd64.ref}\n - ${arm64.ref}\n tag: docker.io/pulumi/pulumi:3.107.0\n type: docker-build:Index\nruntime: yaml\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.dockerbuild.Image;\nimport com.pulumi.dockerbuild.ImageArgs;\nimport com.pulumi.dockerbuild.inputs.CacheFromArgs;\nimport com.pulumi.dockerbuild.inputs.CacheFromRegistryArgs;\nimport com.pulumi.dockerbuild.inputs.CacheToArgs;\nimport com.pulumi.dockerbuild.inputs.CacheToRegistryArgs;\nimport com.pulumi.dockerbuild.inputs.BuildContextArgs;\nimport com.pulumi.dockerbuild.Index;\nimport com.pulumi.dockerbuild.IndexArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var amd64 = new Image(\"amd64\", ImageArgs.builder()\n .cacheFrom(CacheFromArgs.builder()\n .registry(CacheFromRegistryArgs.builder()\n .ref(\"docker.io/pulumi/pulumi:cache-amd64\")\n .build())\n .build())\n .cacheTo(CacheToArgs.builder()\n .registry(CacheToRegistryArgs.builder()\n .mode(\"max\")\n .ref(\"docker.io/pulumi/pulumi:cache-amd64\")\n .build())\n .build())\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .platforms(\"linux/amd64\")\n .tags(\"docker.io/pulumi/pulumi:3.107.0-amd64\")\n .build());\n\n var arm64 = new Image(\"arm64\", ImageArgs.builder()\n .cacheFrom(CacheFromArgs.builder()\n .registry(CacheFromRegistryArgs.builder()\n .ref(\"docker.io/pulumi/pulumi:cache-arm64\")\n .build())\n .build())\n .cacheTo(CacheToArgs.builder()\n .registry(CacheToRegistryArgs.builder()\n .mode(\"max\")\n .ref(\"docker.io/pulumi/pulumi:cache-arm64\")\n .build())\n .build())\n .context(BuildContextArgs.builder()\n .location(\"app\")\n .build())\n .platforms(\"linux/arm64\")\n .tags(\"docker.io/pulumi/pulumi:3.107.0-arm64\")\n .build());\n\n var index = new Index(\"index\", IndexArgs.builder()\n .sources( \n amd64.ref(),\n arm64.ref())\n .tag(\"docker.io/pulumi/pulumi:3.107.0\")\n .build());\n\n ctx.export(\"ref\", index.ref());\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}",
- "properties": {
- "push": {
- "type": "boolean",
- "description": "If true, push the index to the target registry.\n\nDefaults to `true`.",
- "default": true
- },
- "ref": {
- "type": "string",
- "description": "The pushed tag with digest.\n\nIdentical to the tag if the index was not pushed."
- },
- "registry": {
- "$ref": "#/types/docker-build:index:Registry",
- "description": "Authentication for the registry where the tagged index will be pushed.\n\nCredentials can also be included with the provider's configuration."
- },
- "sources": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "description": "Existing images to include in the index."
- },
- "tag": {
- "type": "string",
- "description": "The tag to apply to the index."
- }
- },
- "type": "object",
- "required": [
- "ref",
- "sources",
- "tag"
- ],
- "inputProperties": {
- "push": {
- "type": "boolean",
- "description": "If true, push the index to the target registry.\n\nDefaults to `true`.",
- "default": true
- },
- "registry": {
- "$ref": "#/types/docker-build:index:Registry",
- "description": "Authentication for the registry where the tagged index will be pushed.\n\nCredentials can also be included with the provider's configuration."
- },
- "sources": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "description": "Existing images to include in the index."
- },
- "tag": {
- "type": "string",
- "description": "The tag to apply to the index."
- }
- },
- "requiredInputs": [
- "sources",
- "tag"
- ]
- }
- }
-}
diff --git a/provider/doc.go b/provider/doc.go
deleted file mode 100644
index 995975c..0000000
--- a/provider/doc.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-// Package provider serves a Docker Buildx Pulumi provider.
-package provider
diff --git a/provider/internal/auth.go b/provider/internal/auth.go
deleted file mode 100644
index 01b56d8..0000000
--- a/provider/internal/auth.go
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import "github.com/pulumi/pulumi-go-provider/infer"
-
-// Registry contains credentials for authenticating with a remote registry.
-type Registry struct {
- Address string `pulumi:"address"`
- Password string `pulumi:"password,optional" provider:"secret"`
- Username string `pulumi:"username,optional"`
-}
-
-// Annotate sets docstrings on Registry.
-func (r *Registry) Annotate(a infer.Annotator) {
- a.Describe(&r.Address, `The registry's address (e.g. "docker.io").`)
- a.Describe(&r.Username, `Username for the registry.`)
- a.Describe(&r.Password, `Password or token for the registry.`)
-}
diff --git a/provider/internal/builder.go b/provider/internal/builder.go
deleted file mode 100644
index 406a1e6..0000000
--- a/provider/internal/builder.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "github.com/pulumi/pulumi-go-provider/infer"
-)
-
-var _ infer.Annotated = (*BuilderConfig)(nil)
-
-// BuilderConfig configures the builder to use for an image build.
-type BuilderConfig struct {
- Name string `pulumi:"name,optional"`
-}
-
-// Annotate sets docstrings on BuilderConfig.
-func (b *BuilderConfig) Annotate(a infer.Annotator) {
- a.Describe(&b.Name, dedent(`
- Name of an existing buildx builder to use.
-
- Only "docker-container", "kubernetes", or "remote" drivers are
- supported. The legacy "docker" driver is not supported.
-
- Equivalent to Docker's "--builder" flag.
- `))
-}
diff --git a/provider/internal/cache.go b/provider/internal/cache.go
deleted file mode 100644
index 5d0ab70..0000000
--- a/provider/internal/cache.go
+++ /dev/null
@@ -1,769 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "errors"
- "fmt"
- "strings"
-
- controllerapi "github.com/docker/buildx/controller/pb"
- "github.com/docker/buildx/util/buildflags"
-
- "github.com/pulumi/pulumi-go-provider/infer"
-)
-
-var (
- _ fmt.Stringer = (*CacheFrom)(nil)
- _ fmt.Stringer = (*CacheFromAzureBlob)(nil)
- _ fmt.Stringer = (*CacheFromGitHubActions)(nil)
- _ fmt.Stringer = (*CacheFromLocal)(nil)
- _ fmt.Stringer = (*CacheFromRegistry)(nil)
- _ fmt.Stringer = (*CacheFromS3)(nil)
- _ fmt.Stringer = (*CacheTo)(nil)
- _ fmt.Stringer = (*CacheToAzureBlob)(nil)
- _ fmt.Stringer = (*CacheToGitHubActions)(nil)
- _ fmt.Stringer = (*CacheToInline)(nil)
- _ fmt.Stringer = (*CacheToLocal)(nil)
- _ fmt.Stringer = (*CacheToRegistry)(nil)
- _ fmt.Stringer = (*CacheToS3)(nil)
- _ fmt.Stringer = CacheWithCompression{}
- _ fmt.Stringer = CacheWithIgnoreError{}
- _ fmt.Stringer = CacheWithMode{}
- _ fmt.Stringer = CacheWithOCI{}
- _ infer.Annotated = (*CacheFrom)(nil)
- _ infer.Annotated = (*CacheFromAzureBlob)(nil)
- _ infer.Annotated = (*CacheFromGitHubActions)(nil)
- _ infer.Annotated = (*CacheFromLocal)(nil)
- _ infer.Annotated = (*CacheFromRegistry)(nil)
- _ infer.Annotated = (*CacheFromS3)(nil)
- _ infer.Annotated = (*CacheTo)(nil)
- _ infer.Annotated = (*CacheToInline)(nil)
- _ infer.Annotated = (*CacheToLocal)(nil)
- _ infer.Annotated = (*CacheWithCompression)(nil)
- _ infer.Annotated = (*CacheWithIgnoreError)(nil)
- _ infer.Annotated = (*CacheWithMode)(nil)
- _ infer.Annotated = (*CacheWithOCI)(nil)
- _ infer.Enum[CacheMode] = (*CacheMode)(nil)
- _ infer.Enum[CompressionType] = (*CompressionType)(nil)
-)
-
-// CacheFromLocal pulls cache manifests from a local directory.
-type CacheFromLocal struct {
- Src string `pulumi:"src"`
- Digest string `pulumi:"digest,optional"`
-}
-
-// String returns the CLI-encoded value of these cache options, or an empty
-// string if the receiver is nil.
-func (c *CacheFromLocal) String() string {
- if c == nil {
- return ""
- }
- parts := []string{"type=local"}
- if c.Src != "" {
- parts = append(parts, "src="+c.Src)
- }
- if c.Digest != "" {
- parts = append(parts, "digest="+c.Digest)
- }
- return strings.Join(parts, ",")
-}
-
-// Annotate sets docstrings on CacheFromLocal.
-func (c *CacheFromLocal) Annotate(a infer.Annotator) {
- a.Describe(&c.Src, "Path of the local directory where cache gets imported from.")
- a.Describe(&c.Digest, "Digest of manifest to import.")
-}
-
-// CacheFromRegistry pulls cache manifests from a registry ref.
-type CacheFromRegistry struct {
- Ref string `pulumi:"ref"`
-}
-
-// Annotate sets docstrings on CacheFromRegistry.
-func (c *CacheFromRegistry) Annotate(a infer.Annotator) {
- a.Describe(&c.Ref, "Fully qualified name of the cache image to import.")
-}
-
-// String returns the CLI-encoded value of these cache options, or an empty
-// string if the receiver is nil.
-func (c *CacheFromRegistry) String() string {
- if c == nil {
- return ""
- }
- return "type=registry,ref=" + c.Ref
-}
-
-// CacheWithOCI exposes OCI media type options.
-type CacheWithOCI struct {
- OCI *bool `pulumi:"ociMediaTypes,optional"`
- ImageManifest *bool `pulumi:"imageManifest,optional"`
-}
-
-// Annotate sets docstrings on CacheWithOCI.
-func (c *CacheWithOCI) Annotate(a infer.Annotator) {
- a.Describe(&c.OCI, dedent(`
- Whether to use OCI media types in exported manifests. Defaults to
- "true".
- `))
- a.Describe(&c.ImageManifest, dedent(`
- Export cache manifest as an OCI-compatible image manifest instead of a
- manifest list. Requires "ociMediaTypes" to also be "true".
-
- Some registries like AWS ECR will not work with caching if this is
- "false".
-
- Defaults to "false" to match Docker's default behavior.
- `))
-
- a.SetDefault(&c.OCI, true)
- a.SetDefault(&c.ImageManifest, false)
-}
-
-// String returns the CLI-encoded value of these cache options, or an empty
-// string if unknown.
-func (c CacheWithOCI) String() string {
- if c.OCI == nil {
- return ""
- }
- parts := []string{fmt.Sprintf("oci-mediatypes=%t", *c.OCI)}
- if c.ImageManifest != nil {
- parts = append(parts, fmt.Sprintf("image-manifest=%t", *c.ImageManifest))
- }
- return strings.Join(parts, ",")
-}
-
-// CacheFromGitHubActions pulls cache manifests from the GitHub actions cache.
-type CacheFromGitHubActions struct {
- URL string `pulumi:"url,optional"`
- Token string `pulumi:"token,optional" provider:"secret"`
- Scope string `pulumi:"scope,optional"`
-}
-
-// Annotate sets docstrings on CacheFromGitHubActions.
-func (c *CacheFromGitHubActions) Annotate(a infer.Annotator) {
- a.SetDefault(&c.URL, "", "ACTIONS_CACHE_URL")
- a.SetDefault(&c.Token, "", "ACTIONS_RUNTIME_TOKEN")
- a.SetDefault(&c.Scope, "buildkit")
-
- a.Describe(&c.URL, dedent(`
- The cache server URL to use for artifacts.
-
- Defaults to "$ACTIONS_CACHE_URL", although a separate action like
- "crazy-max/ghaction-github-runtime" is recommended to expose this
- environment variable to your jobs.
- `))
- a.Describe(&c.Token, dedent(`
- The GitHub Actions token to use. This is not a personal access tokens
- and is typically generated automatically as part of each job.
-
- Defaults to "$ACTIONS_RUNTIME_TOKEN", although a separate action like
- "crazy-max/ghaction-github-runtime" is recommended to expose this
- environment variable to your jobs.
-
- `))
- a.Describe(&c.Scope, dedent(`
- The scope to use for cache keys. Defaults to "buildkit".
-
- This should be set if building and caching multiple images in one
- workflow, otherwise caches will overwrite each other.
- `))
-}
-
-func (c *CacheFromGitHubActions) String() string {
- if c == nil {
- return ""
- }
- parts := []string{"type=gha"}
- if c.Scope != "" {
- parts = append(parts, "scope="+c.Scope)
- }
- if c.Token != "" {
- parts = append(parts, "token="+c.Token)
- }
- if c.URL != "" {
- parts = append(parts, "url="+c.URL)
- }
- return strings.Join(parts, ",")
-}
-
-// CacheFromAzureBlob pulls cache manifests from Azure
-// blob storage.
-type CacheFromAzureBlob struct {
- Name string `pulumi:"name"`
- AccountURL string `pulumi:"accountUrl,optional"`
- SecretAccessKey string `pulumi:"secretAccessKey,optional" provider:"secret"`
-}
-
-// String returns the CLI-encoded value of these cache options, or an empty
-// string if the receiver is nil.
-func (c *CacheFromAzureBlob) String() string {
- if c == nil {
- return ""
- }
- parts := []string{"type=azblob"}
- if c.Name != "" {
- parts = append(parts, "name="+c.Name)
- }
- if c.AccountURL != "" {
- parts = append(parts, "account_url="+c.AccountURL)
- }
- if c.SecretAccessKey != "" {
- parts = append(parts, "secret_access_key="+c.SecretAccessKey)
- }
- return strings.Join(parts, ",")
-}
-
-// Annotate sets docstrings on CacheFromAzureBlob.
-func (c *CacheFromAzureBlob) Annotate(a infer.Annotator) {
- a.Describe(&c.Name, "The name of the cache image.")
- a.Describe(&c.AccountURL, "Base URL of the storage account.")
- a.Describe(&c.SecretAccessKey, "Blob storage account key.")
-}
-
-// CacheToAzureBlob pushes cache manifests to Azure blob storage.
-type CacheToAzureBlob struct {
- CacheWithMode
- CacheWithIgnoreError
-
- CacheFromAzureBlob
-}
-
-func (c *CacheToAzureBlob) String() string {
- if c == nil {
- return ""
- }
- return join(&c.CacheFromAzureBlob, c.CacheWithMode, c.CacheWithIgnoreError)
-}
-
-// CacheFromS3 pulls cache manifests from S3-compatible APIs.
-type CacheFromS3 struct {
- Region string `pulumi:"region"`
- Bucket string `pulumi:"bucket"`
- Name string `pulumi:"name,optional"`
- EndpointURL string `pulumi:"endpointUrl,optional"`
- BlobsPrefix string `pulumi:"blobsPrefix,optional"`
- ManifestsPrefix string `pulumi:"manifestsPrefix,optional"`
- UsePathStyle *bool `pulumi:"usePathStyle,optional"`
- AccessKeyID string `pulumi:"accessKeyId,optional"`
- SecretAccessKey string `pulumi:"secretAccessKey,optional" provider:"secret"`
- SessionToken string `pulumi:"sessionToken,optional" provider:"secret"`
-}
-
-// Annotate sets docstrings and defaults on CacheFromS3.
-func (c *CacheFromS3) Annotate(a infer.Annotator) {
- a.SetDefault(&c.Region, "", "AWS_REGION")
- a.SetDefault(&c.AccessKeyID, "", "AWS_ACCESS_KEY_ID")
- a.SetDefault(&c.SecretAccessKey, "", "AWS_SECRET_ACCESS_KEY")
- a.SetDefault(&c.SessionToken, "", "AWS_SESSION_TOKEN")
-
- a.Describe(&c.Bucket, dedent(`
- Name of the S3 bucket.
- `))
- a.Describe(&c.Region, dedent(`
- The geographic location of the bucket. Defaults to "$AWS_REGION".
- `))
- a.Describe(&c.AccessKeyID, dedent(`
- Defaults to "$AWS_ACCESS_KEY_ID".
- `))
- a.Describe(&c.SecretAccessKey, dedent(`
- Defaults to "$AWS_SECRET_ACCESS_KEY".
- `))
- a.Describe(&c.SessionToken, dedent(`
- Defaults to "$AWS_SESSION_TOKEN".
- `))
- a.Describe(&c.BlobsPrefix, dedent(`
- Prefix to prepend to blob filenames.
- `))
- a.Describe(&c.EndpointURL, dedent(`
- Endpoint of the S3 bucket.
- `))
- a.Describe(&c.ManifestsPrefix, dedent(`
- Prefix to prepend on manifest filenames.
- `))
- a.Describe(&c.Name, dedent(`
- Name of the cache image.
- `))
- a.Describe(&c.UsePathStyle, dedent(`
- Uses "bucket" in the URL instead of hostname when "true".
- `))
-}
-
-// String returns the CLI-encoded value of these cache options, or an empty
-// string if the receiver is nil.
-func (c *CacheFromS3) String() string {
- if c == nil {
- return ""
- }
- parts := []string{"type=s3"}
- if c.Bucket != "" {
- parts = append(parts, "bucket="+c.Bucket)
- }
- if c.Name != "" {
- parts = append(parts, "name="+c.Name)
- }
- if c.EndpointURL != "" {
- parts = append(parts, "endpoint_url="+c.EndpointURL)
- }
- if c.BlobsPrefix != "" {
- parts = append(parts, "blobs_prefix="+c.BlobsPrefix)
- }
- if c.ManifestsPrefix != "" {
- parts = append(parts, "manifests_prefix="+c.ManifestsPrefix)
- }
- if c.UsePathStyle != nil {
- parts = append(parts, fmt.Sprintf("use_path_type=%t", *c.UsePathStyle))
- }
- if c.AccessKeyID != "" {
- parts = append(parts, "access_key_id="+c.AccessKeyID)
- }
- if c.SecretAccessKey != "" {
- parts = append(parts, "secret_access_key="+c.SecretAccessKey)
- }
- if c.SessionToken != "" {
- parts = append(parts, "session_token="+c.SessionToken)
- }
-
- return strings.Join(parts, ",")
-}
-
-// CacheWithMode is a cache that can configure its mode.
-type CacheWithMode struct {
- Mode *CacheMode `pulumi:"mode,optional"`
-}
-
-// Annotate sets docstrings and defaults on CacheWithMode.
-func (c *CacheWithMode) Annotate(a infer.Annotator) {
- a.SetDefault(&c.Mode, Min)
- a.Describe(&c.Mode, dedent(`
- The cache mode to use. Defaults to "min".
- `))
-}
-
-func (c CacheWithMode) String() string {
- if c.Mode == nil {
- return ""
- }
- return fmt.Sprintf("mode=%s", *c.Mode)
-}
-
-// CacheWithIgnoreError exposes an option to ignore errors during caching.
-type CacheWithIgnoreError struct {
- IgnoreError *bool `pulumi:"ignoreError,optional"`
-}
-
-// Annotate sets docstrings and defaults on CacheWithIgnoreError.
-func (c *CacheWithIgnoreError) Annotate(a infer.Annotator) {
- a.SetDefault(&c.IgnoreError, false)
- a.Describe(&c.IgnoreError, "Ignore errors caused by failed cache exports.")
-}
-
-func (c CacheWithIgnoreError) String() string {
- if c.IgnoreError == nil {
- return ""
- }
- return fmt.Sprintf("ignore-error=%t", *c.IgnoreError)
-}
-
-// CacheToS3 pushes cache manifests to an S3-compatible API.
-type CacheToS3 struct {
- CacheWithMode
- CacheWithIgnoreError
-
- CacheFromS3
-}
-
-// String returns the CLI-encoded value of these cache options, or an empty
-// string if the receiver is nil.
-func (c *CacheToS3) String() string {
- if c == nil {
- return ""
- }
- return join(&c.CacheFromS3, c.CacheWithMode, c.CacheWithIgnoreError)
-}
-
-// Raw is a CLI-encoded cache entry appropriate for passing directly to the
-// CLI. Useful if the Docker backend supports cache types not captured by our
-// API, or if the user just prefers "type=..." inputs.
-type Raw string
-
-// String return the raw string as-is. This can be empty during previews where
-// the user has provided a value but it is unknown.
-func (c Raw) String() string {
- return string(c)
-}
-
-// CacheFrom is a "union" type for all of our available `--cache-from` options.
-type CacheFrom struct {
- Local *CacheFromLocal `pulumi:"local,optional"`
- Registry *CacheFromRegistry `pulumi:"registry,optional"`
- GHA *CacheFromGitHubActions `pulumi:"gha,optional"`
- AZBlob *CacheFromAzureBlob `pulumi:"azblob,optional"`
- S3 *CacheFromS3 `pulumi:"s3,optional"`
- Raw Raw `pulumi:"raw,optional"`
-
- Disabled bool `pulumi:"disabled,optional"`
-}
-
-// Annotate sets docstrings and defaults on CacheFrom.
-func (c *CacheFrom) Annotate(a infer.Annotator) {
- a.Describe(&c.Local, dedent(`
- A simple backend which caches images on your local filesystem.
- `))
- a.Describe(&c.Registry, dedent(`
- Upload build caches to remote registries.
- `))
- a.Describe(&c.GHA, dedent(`
- Recommended for use with GitHub Actions workflows.
-
- An action like "crazy-max/ghaction-github-runtime" is recommended to
- expose appropriate credentials to your GitHub workflow.
- `))
- a.Describe(&c.AZBlob, dedent(`
- Upload build caches to Azure's blob storage service.
- `))
- a.Describe(&c.S3, dedent(`
- Upload build caches to AWS S3 or an S3-compatible services such as
- MinIO.
- `))
- a.Describe(&c.Raw, dedent(`
- A raw string as you would provide it to the Docker CLI (e.g.,
- "type=inline").
- `))
-
- a.Describe(&c.Disabled, dedent(`
- When "true" this entry will be excluded. Defaults to "false".
- `))
-}
-
-// String returns a CLI-encoded value for this `--cache-from` entry, or an
-// empty string if disabled. `validate` should be called to ensure only one
-// entry was set.
-func (c CacheFrom) String() string {
- if c.Disabled {
- return ""
- }
- return join(c.Local, c.Registry, c.GHA, c.AZBlob, c.S3, c.Raw)
-}
-
-func (c CacheFrom) validate(preview bool) (*controllerapi.CacheOptionsEntry, error) {
- if strings.Count(c.String(), "type=") > 1 {
- return nil, errors.New("cacheFrom should only specify one cache type")
- }
- parsed, err := buildflags.ParseCacheEntry([]string{c.String()})
- if err != nil {
- return nil, err
- }
- if len(parsed) == 0 {
- // This can happen for example if we have a GHA cache configuration but no GitHub
- // environment variables set. Ignore the cacheFrom entry in this case.
- return nil, nil
- }
-
- pb := parsed[0].ToPB()
- if !isActive(pb) {
- pb = nil
- }
-
- return pb, nil
-}
-
-// isActive checks if the GitHub token is set in the cache entry.
-// If it is not a GHA cache entry, it will return true.
-// This is to maintain backwards compatibility with the old buildx behaviour.
-func isActive(ci *controllerapi.CacheOptionsEntry) bool {
- if ci.Type != "gha" {
- return true
- }
- return ci.Attrs["token"] != "" && (ci.Attrs["url"] != "" || ci.Attrs["url_v2"] != "")
-}
-
-// CacheToInline embeds cache information directly into an image.
-type CacheToInline struct{}
-
-// String returns the CLI-encoded value of these cache options, or an empty
-// string if unknown.
-func (c *CacheToInline) String() string {
- if c == nil {
- return ""
- }
- return "type=inline"
-}
-
-// Annotate sets docstrings on CacheToInline.
-func (c *CacheToInline) Annotate(a infer.Annotator) {
- a.Describe(&c, dedent(`
- Include an inline cache with the exported image.
- `))
-}
-
-// CacheToLocal writes cache manifests to a local directory.
-type CacheToLocal struct {
- CacheWithCompression
- CacheWithIgnoreError
- CacheWithMode
-
- Dest string `pulumi:"dest"`
-}
-
-// Annotate sets docstrings on CacheToLocal.
-func (c *CacheToLocal) Annotate(a infer.Annotator) {
- a.Describe(&c.Dest, dedent(`
- Path of the local directory to export the cache.
- `))
-}
-
-// String returns the CLI-encoded value of these cache options, or an empty
-// string if the receiver is nil.
-func (c *CacheToLocal) String() string {
- if c == nil {
- return ""
- }
- return join(
- Raw("type=local,dest="+c.Dest),
- c.CacheWithCompression,
- c.CacheWithIgnoreError,
- )
-}
-
-// CacheToRegistry pushes cache manifests to a remote registry.
-type CacheToRegistry struct {
- CacheWithMode
- CacheWithIgnoreError
- CacheWithOCI
- CacheWithCompression
-
- CacheFromRegistry
-}
-
-// String returns the CLI-encoded value of these cache options, or an empty
-// string if the receiver is nil.
-func (c *CacheToRegistry) String() string {
- if c == nil {
- return ""
- }
- return join(
- &c.CacheFromRegistry,
- c.CacheWithMode,
- c.CacheWithIgnoreError,
- c.CacheWithOCI,
- c.CacheWithCompression,
- )
-}
-
-// CacheWithCompression is a cache with options to configure compression
-// settings.
-type CacheWithCompression struct {
- Compression *CompressionType `pulumi:"compression,optional"`
- CompressionLevel int `pulumi:"compressionLevel,optional"`
- ForceCompression *bool `pulumi:"forceCompression,optional"`
-}
-
-// Annotate sets docstrings and defaults on CacheWithCompression.
-func (c *CacheWithCompression) Annotate(a infer.Annotator) {
- a.SetDefault(&c.Compression, Gzip)
- a.SetDefault(&c.CompressionLevel, 0)
- a.SetDefault(&c.ForceCompression, false)
-
- a.Describe(&c.Compression, "The compression type to use.")
- a.Describe(&c.CompressionLevel, "Compression level from 0 to 22.")
- a.Describe(&c.ForceCompression, "Forcefully apply compression.")
-}
-
-// String returns the CLI-encoded value of these cache options, or an empty
-// string if the receiver is nil.
-func (c CacheWithCompression) String() string {
- if c.CompressionLevel == 0 {
- return ""
- }
- parts := []string{}
- if c.Compression != nil {
- parts = append(parts, fmt.Sprintf("compression=%s", *c.Compression))
- }
- if c.CompressionLevel > 0 {
- cl := c.CompressionLevel
- if cl > 22 {
- cl = 22
- }
- parts = append(parts, fmt.Sprintf("compression-level=%d", cl))
- }
- if c.ForceCompression != nil {
- parts = append(parts, fmt.Sprintf("force-compression=%t", *c.ForceCompression))
- }
- return strings.Join(parts, ",")
-}
-
-// CacheToGitHubActions pushes cache manifests to the GitHub Actions cache
-// backend.
-type CacheToGitHubActions struct {
- CacheWithMode
- CacheWithIgnoreError
-
- CacheFromGitHubActions
-}
-
-// String returns the CLI-encoded value of these cache options, or an empty
-// string if the receiver is nil.
-func (c *CacheToGitHubActions) String() string {
- if c == nil {
- return ""
- }
- return join(&c.CacheFromGitHubActions, c.CacheWithMode, c.CacheWithIgnoreError)
-}
-
-// CacheTo is a "union" type for all of our available `--cache-to` options.
-type CacheTo struct {
- Inline *CacheToInline `pulumi:"inline,optional"`
- Local *CacheToLocal `pulumi:"local,optional"`
- Registry *CacheToRegistry `pulumi:"registry,optional"`
- GHA *CacheToGitHubActions `pulumi:"gha,optional"`
- AZBlob *CacheToAzureBlob `pulumi:"azblob,optional"`
- S3 *CacheToS3 `pulumi:"s3,optional"`
- Raw Raw `pulumi:"raw,optional"`
-
- Disabled bool `pulumi:"disabled,optional"`
-}
-
-// Annotate sets docstrings and defaults on CacheTo.
-func (c *CacheTo) Annotate(a infer.Annotator) {
- a.Describe(&c.Inline, dedent(`
- The inline cache storage backend is the simplest implementation to get
- started with, but it does not handle multi-stage builds. Consider the
- "registry" cache backend instead.
- `))
- a.Describe(&c.Local, dedent(`
- A simple backend which caches imagines on your local filesystem.
- `))
- a.Describe(&c.Registry, dedent(`
- Push caches to remote registries. Incompatible with the "docker" build
- driver.
- `))
- a.Describe(&c.GHA, dedent(`
- Recommended for use with GitHub Actions workflows.
-
- An action like "crazy-max/ghaction-github-runtime" is recommended to
- expose appropriate credentials to your GitHub workflow.
- `))
- a.Describe(&c.AZBlob, dedent(`
- Push cache to Azure's blob storage service.
- `))
- a.Describe(&c.S3, dedent(`
- Push cache to AWS S3 or S3-compatible services such as MinIO.
- `))
- a.Describe(&c.Raw, dedent(`
- A raw string as you would provide it to the Docker CLI (e.g.,
- "type=inline")`,
- ))
-
- a.Describe(&c.Disabled, dedent(`
- When "true" this entry will be excluded. Defaults to "false".
- `))
-}
-
-// String returns a CLI-encoded value for this `--cache-to` entry, or an
-// empty string if disabled. `validate` should be called to ensure only one
-// entry was set.
-func (c CacheTo) String() string {
- if c.Disabled {
- return ""
- }
- return join(c.Inline, c.Local, c.Registry, c.GHA, c.AZBlob, c.S3, c.Raw)
-}
-
-func (c CacheTo) validate(preview bool) (*controllerapi.CacheOptionsEntry, error) {
- if strings.Count(c.String(), "type=") > 1 {
- return nil, errors.New("cacheTo should only specify one cache type")
- }
- parsed, err := buildflags.ParseCacheEntry([]string{c.String()})
- if err != nil {
- return nil, err
- }
- if len(parsed) == 0 {
- // This can happen for example if we have a GHA cache configuration but no GitHub
- // environment variables set. Ignore the cacheTo entry in this case.
- return nil, nil
- }
-
- pb := parsed[0].ToPB()
- if !isActive(pb) {
- pb = nil
- }
-
- return pb, nil
-}
-
-// CacheMode controls the complexity of exported cache manifests.
-type CacheMode string
-
-const (
- // Min cache mode.
- Min CacheMode = "min"
- // Max cache mode.
- Max CacheMode = "max"
-)
-
-// Values returns all valid CacheMode values for SDK generation.
-func (CacheMode) Values() []infer.EnumValue[CacheMode] {
- return []infer.EnumValue[CacheMode]{
- {
- Value: Min,
- Description: "Only layers that are exported into the resulting image are cached.",
- },
- {
- Value: Max,
- Description: "All layers are cached, even those of intermediate steps.",
- },
- }
-}
-
-// CompressionType is the algorithm used for compressing blobs.
-type CompressionType string
-
-const (
- // Gzip compression.
- Gzip CompressionType = "gzip"
- // Estargz compression.
- Estargz CompressionType = "estargz"
- // Zstd compression.
- Zstd CompressionType = "zstd"
-)
-
-// Values returns all valid CompressionType values for SDK generation.
-func (CompressionType) Values() []infer.EnumValue[CompressionType] {
- return []infer.EnumValue[CompressionType]{
- {Value: Gzip, Description: "Use `gzip` for compression."},
- {Value: Estargz, Description: "Use `estargz` for compression."},
- {Value: Zstd, Description: "Use `zstd` for compression."},
- }
-}
-
-type joiner struct{ sep string }
-
-func (j joiner) join(ss ...fmt.Stringer) string {
- parts := []string{}
- for _, s := range ss {
- p := s.String()
- if p == "" {
- continue
- }
- parts = append(parts, p)
- }
- return strings.Join(parts, j.sep)
-}
-
-func join(ss ...fmt.Stringer) string {
- return joiner{","}.join(ss...)
-}
diff --git a/provider/internal/cache_test.go b/provider/internal/cache_test.go
deleted file mode 100644
index 3fda1bb..0000000
--- a/provider/internal/cache_test.go
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "fmt"
- "testing"
-
- "github.com/docker/buildx/util/buildflags"
- "github.com/stretchr/testify/assert"
-
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
-)
-
-func TestCacheString(t *testing.T) {
- t.Parallel()
- gzip := Gzip
-
- tests := []struct {
- name string
- given fmt.Stringer
- want string
- }{
- {
- name: "s3",
- given: CacheTo{S3: &CacheToS3{
- CacheFromS3: CacheFromS3{
- Region: "us-west-2",
- Bucket: "bucket-foo",
- Name: "myname",
- EndpointURL: "https://some.endpoint",
- BlobsPrefix: "blob-prefix",
- ManifestsPrefix: "manifest-prefix",
- UsePathStyle: pulumi.BoolRef(true),
- AccessKeyID: "access-key-id",
- SecretAccessKey: "secret-key",
- SessionToken: "session",
- },
- }},
- //nolint:lll // Taken from AWS reference docs.
- want: "type=s3,bucket=bucket-foo,name=myname,endpoint_url=https://some.endpoint,blobs_prefix=blob-prefix,manifests_prefix=manifest-prefix,use_path_type=true,access_key_id=access-key-id,secret_access_key=secret-key,session_token=session",
- },
- {
- name: "gha",
- given: CacheTo{GHA: &CacheToGitHubActions{}},
- want: "type=gha",
- },
- {
- name: "from-local",
- given: CacheFrom{Local: &CacheFromLocal{Src: "/foo/bar"}},
- want: "type=local,src=/foo/bar",
- },
- {
- name: "to-local",
- given: CacheTo{Local: &CacheToLocal{Dest: "/foo/bar"}},
- want: "type=local,dest=/foo/bar",
- },
- {
- name: "inline",
- given: CacheTo{Inline: &CacheToInline{}},
- want: "type=inline",
- },
- {
- name: "raw",
- given: CacheTo{Raw: Raw("type=gha")},
- want: "type=gha",
- },
- {
- name: "compression",
- given: CacheTo{Local: &CacheToLocal{
- Dest: "/foo",
- CacheWithCompression: CacheWithCompression{
- Compression: &gzip,
- CompressionLevel: 100,
- ForceCompression: pulumi.BoolRef(true),
- },
- }},
- want: "type=local,dest=/foo,compression=gzip,compression-level=22,force-compression=true",
- },
- {
- name: "ignore-error",
- given: CacheTo{
- AZBlob: &CacheToAzureBlob{
- CacheWithIgnoreError: CacheWithIgnoreError{pulumi.BoolRef(true)},
- },
- },
- want: "type=azblob,ignore-error=true",
- },
- {
- name: "oci",
- given: CacheTo{
- Registry: &CacheToRegistry{
- CacheFromRegistry: CacheFromRegistry{Ref: "docker.io/foo/bar:baz"},
- CacheWithOCI: CacheWithOCI{
- OCI: pulumi.BoolRef(true),
- ImageManifest: pulumi.BoolRef(true),
- },
- },
- },
- want: "type=registry,ref=docker.io/foo/bar:baz,oci-mediatypes=true,image-manifest=true",
- },
- {
- name: "disabled-to",
- given: CacheTo{
- Raw: Raw("type=gha"),
- Disabled: true,
- },
- want: "",
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
-
- actual := tt.given.String()
- assert.Equal(t, tt.want, actual)
-
- if tt.want != "" {
- // Our output should be parsable by Docker.
- _, err := buildflags.ParseCacheEntry([]string{actual})
- assert.NoError(t, err)
- }
- })
- }
-}
diff --git a/provider/internal/cli.go b/provider/internal/cli.go
deleted file mode 100644
index c3128ec..0000000
--- a/provider/internal/cli.go
+++ /dev/null
@@ -1,416 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-//go:generate go run go.uber.org/mock/mockgen -typed -package internal -source cli.go -destination mockcli_test.go --self_package github.com/pulumi/pulumi-docker-build/provider/internal
-
-package internal
-
-import (
- "bufio"
- "bytes"
- "context"
- "encoding/json"
- "errors"
- "fmt"
- "io"
- "os"
- "os/exec"
- "path/filepath"
- "strings"
-
- "github.com/docker/buildx/commands"
- "github.com/docker/cli/cli-plugins/manager"
- "github.com/docker/cli/cli/command"
- "github.com/docker/cli/cli/config/credentials"
- cfgtypes "github.com/docker/cli/cli/config/types"
- "github.com/docker/cli/cli/streams"
- "github.com/moby/buildkit/client"
- cp "github.com/otiai10/copy"
- "github.com/regclient/regclient"
- "github.com/regclient/regclient/config"
- "github.com/sirupsen/logrus"
-
- provider "github.com/pulumi/pulumi-go-provider"
- "github.com/pulumi/pulumi/sdk/v3/go/common/resource"
- "github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"
-)
-
-// cli wraps a DockerCLI instance with scoped auth credentials. It satisfies
-// the Cli interface so it can be used with Docker's cobra.Commands directly.
-//
-// It buffers stdout/stderr, and layers temporary auth configs on top of the
-// host's existing auth.
-type cli struct {
- command.Cli
-
- auths map[string]cfgtypes.AuthConfig
- host *host
-
- in string // stdin
- r, w *os.File // stdout
- err bytes.Buffer // stderr
- dumplogs bool // if true then tail() will re-log status messages
- builder Builder // for mocking build daemon responses
-}
-
-// Cli wraps the Docker interface for mock generation.
-type Cli interface {
- command.Cli
-}
-
-// wrap creates a new cli client with auth configs layered on top of our host's
-// auth. Repeated auth for the same host will take precedence over earlier
-// credentials.
-func wrap(host *host, registries ...Registry) (*cli, error) {
- // We need to create a new DockerCLI instance because we don't want the
- // auth changes we make to the ConfigFile to leak to the host.
- docker, err := newDockerCLI(host.config)
- if err != nil {
- return nil, err
- }
-
- auths := map[string]cfgtypes.AuthConfig{}
- for k, v := range host.auths {
- if k != config.DockerRegistryAuth {
- k = credentials.ConvertToHostname(k)
- }
- auths[k] = cfgtypes.AuthConfig{
- ServerAddress: v.ServerAddress,
- Username: v.Username,
- Password: v.Password,
- }
- }
-
- for _, r := range registries {
- // HostNewName takes care of DockerHub's special-casing for us.
- h := config.HostNewName(credentials.ConvertToHostname(r.Address))
- key := h.CredHost
- if key == "" {
- key = h.Hostname
- }
-
- auths[key] = cfgtypes.AuthConfig{
- ServerAddress: h.Hostname,
- Username: r.Username,
- Password: r.Password,
- }
- }
-
- // Override our config's auth and disable any credential helpers. Auth
- // lookups will now only return whatever we have in memory.
- cfg := docker.ConfigFile()
- cfg.AuthConfigs = auths
- cfg.CredentialHelpers = nil
- cfg.CredentialsStore = ""
-
- r, w, err := os.Pipe()
- if err != nil {
- return nil, err
- }
-
- wrapped := &cli{
- Cli: docker,
- host: host,
- auths: auths,
- r: r,
- w: w,
- builder: defaultBuilder{},
- }
-
- return wrapped, nil
-}
-
-func (c *cli) In() *streams.In {
- return streams.NewIn(io.NopCloser(strings.NewReader(c.in)))
-}
-
-func (c *cli) Out() *streams.Out {
- return streams.NewOut(c.w)
-}
-
-func (c *cli) Err() *streams.Out {
- return streams.NewOut(&c.err)
-}
-
-func (c *cli) SupportsMultipleExports() bool {
- return c.host.supportsMultipleExports
-}
-
-// rc returns a registry client with matching auth.
-func (c *cli) rc() *regclient.RegClient {
- hosts := []config.Host{}
- for k, v := range c.auths {
- h := config.HostNewName(k)
- h.User = v.Username
- h.Pass = v.Password
- hosts = append(hosts, *h)
- }
- return regclient.New(
- regclient.WithConfigHost(hosts...),
- )
-}
-
-// tail is meant to be called as a goroutine and will pipe output from the CLI
-// back to the Pulumi engine. Requires a corresponding call to close.
-func (c *cli) tail(ctx context.Context) {
- b := bytes.Buffer{}
-
- s := bufio.NewScanner(c.r)
- for s.Scan() {
- text := s.Text()
- provider.GetLogger(ctx).InfoStatus(text)
- _, _ = b.WriteString(text + "\n")
- }
- provider.GetLogger(ctx).InfoStatus("") // clear confusing "DONE" statements.
-
- if c.dumplogs {
- // Persist the full Docker output on error for easier debugging.
- if b.Len() > 0 {
- provider.GetLogger(ctx).Info(b.String())
- }
- if c.err.Len() > 0 {
- provider.GetLogger(ctx).Error(c.err.String())
- }
- }
-}
-
-// close flushes any outstanding logs and cleans up resources.
-func (c *cli) Close() error {
- return errors.Join(c.w.Close(), c.r.Close())
-}
-
-// execBuild performs a build by os.Exec'ing the docker-buildx binary.
-// Credentials are communicated to docker-buildx via a temporary directory.
-// Secrets are communicated via dynamic environment variables.
-func (c *cli) execBuild(ctx context.Context, b Build) (*client.SolveResponse, error) {
- // Setup a temporary directory for auth, and clean it up when we're done.
- tmp, err := os.MkdirTemp("", "pulumi-docker-")
- if err != nil {
- return nil, err
- }
- defer contract.IgnoreError(os.RemoveAll(tmp))
-
- opts := b.BuildOptions()
-
- builder, err := c.host.builderFor(ctx, b)
- if err != nil {
- return nil, err
- }
-
- // Docker expects a "$DOCKER_CONFIG/contexts" directory in addition to
- // "$DOCKER_CONFIG/config.json", so we attempt to copy this from the host
- // to our temporary directory. This doesn't always exist, so we ignore errors.
- hostConfigDir := filepath.Dir(c.ConfigFile().Filename)
- _ = cp.Copy(
- filepath.Join(hostConfigDir, "contexts"),
- filepath.Join(tmp, "contexts"),
- )
-
- // Save our temporary credentials to $tmp/config.json.
- tmpCfg := filepath.Join(tmp, filepath.Base(c.ConfigFile().Filename))
- c.ConfigFile().Filename = tmpCfg
- err = c.ConfigFile().Save()
- if err != nil {
- return nil, err
- }
-
- // We will spawn docker-buildx with DOCKER_CONFIG set to our temporary
- // directory for auth, but BUILDX_CONFIG will point to the host. There's a
- // bunch of builder state in there that we want to preserve.
- env := []string{
- "DOCKER_CONFIG=" + tmp,
- "BUILDX_CONFIG=" + filepath.Join(hostConfigDir, "buildx"),
- }
-
- // We need to write to this file in order to recover information about the
- // build, like the digest.
- metadata := filepath.Clean(filepath.Join(tmp, "metadata.json"))
- args := []string{
- "buildx",
- "build",
- "--progress", "plain",
- "--metadata-file", metadata,
- "--builder", builder.name,
- }
-
- // TODO: --allow
- // TODO: --annotation
- // TODO: --attest
- // TODO: --cgroup-parent
-
- for k, v := range opts.BuildArgs {
- args = append(args, "--build-arg", fmt.Sprintf("%s=%s", k, v))
- }
- if opts.Builder != "" {
- args = append(args, "--builder", opts.Builder)
- }
- for _, c := range opts.CacheFrom {
- args = append(args, "--cache-from", attrcsv(c.Type, c.Attrs))
- }
- for _, c := range opts.CacheTo {
- args = append(args, "--cache-to", attrcsv(c.Type, c.Attrs))
- }
- if opts.ExportLoad {
- args = append(args, "--load")
- }
- if opts.ExportPush {
- args = append(args, "--push")
- }
- for _, e := range opts.Exports {
- args = append(args, "--output", attrcsv(e.Type, e.Attrs))
- }
- for _, h := range opts.ExtraHosts {
- args = append(args, "--add-host", h)
- }
- for k, v := range opts.NamedContexts {
- args = append(args, "--build-context", fmt.Sprintf("%s=%s", k, v))
- }
- for k, v := range opts.Labels {
- args = append(args, "--label", fmt.Sprintf("%s=%s", k, v))
- }
- if opts.NetworkMode != "" {
- args = append(args, "--network", opts.NetworkMode)
- }
- if opts.NoCache {
- args = append(args, "--no-cache")
- }
- for _, p := range opts.Platforms {
- args = append(args, "--platform", p)
- }
- if opts.Pull {
- args = append(args, "--pull")
- }
- for _, ssh := range opts.SSH {
- s := ssh.ID
- if len(ssh.Paths) > 0 {
- s += "=" + strings.Join(ssh.Paths, ",")
- }
- args = append(args, "--ssh", s)
- }
- for _, t := range opts.Tags {
- args = append(args, "--tag", t)
- }
- if opts.Target != "" {
- args = append(args, "--target", opts.Target)
- }
- if opts.DockerfileName != "" {
- args = append(args, "-f", opts.DockerfileName)
- }
- if in := b.Inline(); in != "" {
- c.in = in
- args = append(args, "-f", "-")
- }
- if opts.ContextPath != "" {
- args = append(args, opts.ContextPath)
- }
-
- // We pass secrets by value via dynamic PULUMI_DOCKER_* environment
- // variables.
- for _, s := range opts.Secrets {
- envvar, err := resource.NewUniqueHex("PULUMI_DOCKER_", 0, 0)
- if err != nil {
- return nil, err
- }
- // We abuse the pb.Secret proto by stuffing the secret's value in
- // Env. We never serialize this proto so this is tolerable.
- env = append(env, fmt.Sprintf("%s=%s", envvar, s.Env))
- args = append(args, "--secret", fmt.Sprintf("id=%s,env=%s", s.ID, envvar))
- }
-
- // Invoke docker-buildx.
- err = c.exec(ctx, args, env)
- if err != nil {
- return nil, err
- }
-
- // Read the metadata file and transform it back into the map[string]string
- // structure originally returned by the exporter.
- _, err = os.Stat(metadata)
- if err != nil {
- return nil, fmt.Errorf("missing metadata: %w", err)
- }
- out, err := os.ReadFile(metadata)
- if err != nil {
- return nil, err
- }
- var raw map[string]any
- err = json.Unmarshal(out, &raw)
- if err != nil {
- return nil, err
- }
- resp := map[string]string{}
- for k, v := range raw {
- switch vv := v.(type) {
- case string:
- resp[k] = vv
- default:
- out, err := json.Marshal(v)
- if err != nil {
- continue
- }
- resp[k] = string(out)
- }
- }
-
- return &client.SolveResponse{ExporterResponse: resp}, nil
-}
-
-// exec invokes a Docker plugin binary. The first argument should be the name
-// of the plugin's subcommand, e.g. "buildx".
-func (c *cli) exec(ctx context.Context, args, extraEnv []string) error {
- if len(args) == 0 {
- return errors.New("args must be non-empty")
- }
- name := args[0]
-
- root := commands.NewRootCmd(name, false, c)
- plug, err := manager.GetPlugin(name, c, root)
- if err != nil {
- return err
- }
- if plug.Err != nil {
- return plug.Err
- }
-
- defer contract.IgnoreClose(c.w)
-
- runCmd, err := manager.PluginRunCommand(c, name, root)
- if err != nil {
- return err
- }
- // Create a new command that inherits from ctx.
- cmd := exec.CommandContext(ctx, //nolint:gosec // We take the first argument and binary from runCmd.
- runCmd.Path, append([]string{runCmd.Args[1]}, args...)...,
- )
- cmd.Stderr = c.Err()
- cmd.Stdout = c.Out()
- cmd.Stdin = c.In()
- cmd.Env = append(runCmd.Env, extraEnv...) //nolint:gocritic // We are intentionally assigning from runCmd to cmd
-
- return cmd.Run()
-}
-
-// attrcsv transforms key/values into a CSV: key1=value1,key2=value2,...
-func attrcsv(typ string, m map[string]string) string {
- s := []string{"type=" + typ}
- for k, v := range m {
- s = append(s, fmt.Sprintf("%s=%s", k, v))
- }
- return strings.Join(s, ",")
-}
-
-func init() {
- // Disable the CLI's tendency to log randomly to stdout.
- logrus.SetOutput(io.Discard)
-}
diff --git a/provider/internal/cli_test.go b/provider/internal/cli_test.go
deleted file mode 100644
index 48f59fb..0000000
--- a/provider/internal/cli_test.go
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "context"
- "io"
- "testing"
-
- "github.com/docker/cli/cli/config/types"
- "github.com/regclient/regclient/config"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-)
-
-func TestExec(t *testing.T) {
- t.Parallel()
-
- h, err := newHost(t.Context(), nil)
- require.NoError(t, err)
- cli, err := wrap(h)
- require.NoError(t, err)
-
- err = cli.exec(t.Context(), []string{"buildx", "version"}, nil)
- assert.NoError(t, err)
-
- out, err := io.ReadAll(cli.r)
- require.NoError(t, err)
- assert.Contains(t, string(out), "github.com/docker/buildx")
-}
-
-func TestWrappedAuth(t *testing.T) {
- t.Parallel()
- ecr := "https://1234.dkr.ecr.us-west-2.amazonaws.com"
-
- realhost, err := newHost(context.Background(), nil)
- require.NoError(t, err)
-
- h := &host{
- auths: map[string]types.AuthConfig{
- ecr: {
- Username: "host-aws-user",
- Password: "host-aws-password",
- ServerAddress: ecr,
- },
- "https://misc": { // Legacy config includes http/https scheme.
- Username: "host-misc-user",
- Password: "host-misc-password",
- ServerAddress: "misc",
- },
- },
- }
-
- registries := []Registry{
- {
- Address: "1234.dkr.ecr.us-west-2.amazonaws.com",
- Username: "resource-aws-user",
- Password: "resource-aws-password",
- },
- {
- Address: "docker.io",
- Username: "resource-dockerhub-user",
- Password: "resource-dockerhub-password",
- },
- }
-
- _, err = wrap(h, registries...)
- require.NoError(t, err)
-
- cli, err := wrap(h, registries...)
- require.NoError(t, err)
-
- expected := map[string]types.AuthConfig{
- "1234.dkr.ecr.us-west-2.amazonaws.com": {
- Username: "resource-aws-user",
- Password: "resource-aws-password",
- ServerAddress: "1234.dkr.ecr.us-west-2.amazonaws.com",
- },
- config.DockerRegistryAuth: {
- Username: "resource-dockerhub-user",
- Password: "resource-dockerhub-password",
- ServerAddress: config.DockerRegistryDNS,
- },
- "misc": {
- Username: "host-misc-user",
- Password: "host-misc-password",
- ServerAddress: "misc",
- },
- }
- assert.Equal(t, expected, cli.auths)
- assert.Len(t, h.auths, 2) // In-memory host auth is unchanged.
-
- // Assert that our on-disk host's auth is untouched.
- realhostRefreshed, err := newHost(context.Background(), nil)
- require.NoError(t, err)
- assert.Equal(t, realhost.auths, realhostRefreshed.auths)
-}
diff --git a/provider/internal/client.go b/provider/internal/client.go
deleted file mode 100644
index f5e7a8b..0000000
--- a/provider/internal/client.go
+++ /dev/null
@@ -1,447 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-//go:generate go run go.uber.org/mock/mockgen -typed -package internal -source client.go -destination mockclient_test.go --self_package github.com/pulumi/pulumi-docker-build/provider/internal -imports buildx=github.com/docker/buildx/build
-
-package internal
-
-import (
- "bytes"
- "context"
- "errors"
- "fmt"
- "os"
- "strings"
-
- "github.com/distribution/reference"
- buildx "github.com/docker/buildx/build"
- "github.com/docker/buildx/builder"
- "github.com/docker/buildx/commands"
- controllerapi "github.com/docker/buildx/controller/pb"
- "github.com/docker/buildx/util/confutil"
- "github.com/docker/buildx/util/dockerutil"
- "github.com/docker/buildx/util/platformutil"
- "github.com/docker/buildx/util/progress"
- "github.com/docker/cli/cli/command"
- "github.com/docker/cli/cli/flags"
- "github.com/docker/docker/api/types/image"
- "github.com/moby/buildkit/client"
- "github.com/moby/buildkit/session"
- "github.com/moby/buildkit/session/auth/authprovider"
- "github.com/moby/buildkit/util/progress/progressui"
- "github.com/regclient/regclient/types/descriptor"
- "github.com/regclient/regclient/types/errs"
- "github.com/regclient/regclient/types/manifest"
- "github.com/regclient/regclient/types/ref"
-
- provider "github.com/pulumi/pulumi-go-provider"
- "github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"
-)
-
-// Client handles all our Docker API calls.
-type Client interface {
- Build(ctx context.Context, b Build) (*client.SolveResponse, error)
- BuildKitEnabled() (bool, error)
- Inspect(ctx context.Context, id string) ([]descriptor.Descriptor, error)
- Delete(ctx context.Context, id string) error
-
- ManifestCreate(ctx context.Context, push bool, target string, refs ...string) error
- ManifestInspect(ctx context.Context, target string) (string, error)
- ManifestDelete(ctx context.Context, target string) error
-
- SupportsMultipleExports() bool
-}
-
-// registryGetter is something that can return a list of [Registry].
-type registryGetter interface {
- GetRegistries() []Registry
-}
-
-// clientF builds a Docker client. The order of registryGetters is significant.
-// We typically prefer credentials from args, then provider config, then the
-// host. Provide them to this function in order of increasing priority: host,
-// config, args.
-//
-// We ignore state because if its creds differ from those in args then they are
-// likely volatile and also likely expired.
-type clientF func(context.Context, *host, ...registryGetter) (Client, error)
-
-// RealClientF builds a real Docker client with auth layered on top of the
-// host's latent credentials.
-func RealClientF(_ context.Context, host *host, getters ...registryGetter) (Client, error) {
- auths := []Registry{}
- for _, rg := range getters {
- auths = append(auths, rg.GetRegistries()...)
- }
- return wrap(host, auths...)
-}
-
-func mockClientF(c Client) clientF {
- return func(context.Context, *host, ...registryGetter) (Client, error) {
- return c, nil
- }
-}
-
-// Build encapsulates all of the user-provider build parameters and options.
-type Build interface {
- BuildOptions() controllerapi.BuildOptions
- Inline() string
- ShouldExec() bool
- Secrets() session.Attachable
-}
-
-var _ Client = (*cli)(nil)
-
-func newDockerCLI(config *Config) (*command.DockerCli, error) {
- cli, err := command.NewDockerCli(
- command.WithDefaultContextStoreConfig(),
- command.WithContentTrustFromEnv(),
- )
- if err != nil {
- return nil, err
- }
-
- opts := flags.NewClientOptions()
- if config != nil && config.Host != "" {
- opts.Hosts = append(opts.Hosts, config.Host)
- }
- err = cli.Initialize(opts)
- if err != nil {
- return nil, err
- }
-
- return cli, nil
-}
-
-// Build performs a BuildKit build. Returns a map of target names (or one name,
-// "default", if no targets were specified) to SolveResponses, which capture
-// the build's digest and tags (if any).
-func (c *cli) Build(
- ctx context.Context,
- build Build,
-) (*client.SolveResponse, error) {
- opts := build.BuildOptions()
-
- go c.tail(ctx)
- defer contract.IgnoreClose(c)
-
- if build.ShouldExec() {
- return c.execBuild(ctx, build)
- }
-
- b, err := c.host.builderFor(ctx, build)
- if err != nil {
- return nil, err
- }
- printer, err := progress.NewPrinter(ctx, c.w,
- progressui.PlainMode,
- progress.WithDesc(
- fmt.Sprintf("building with %q instance using %s driver", b.name, b.driver),
- fmt.Sprintf("%s:%s", b.driver, b.name),
- ),
- )
- if err != nil {
- return nil, fmt.Errorf("creating printer: %w", err)
- }
-
- defer func() {
- // Wait for logs to flush if the build finished, but not if we're
- // exiting early.
- if ctx.Err() == nil {
- _ = printer.Wait()
- }
-
- // Log any warnings we got, separated by newlines.
- for _, w := range printer.Warnings() {
- b := &bytes.Buffer{}
- _, _ = b.Write(w.Short)
- for _, d := range w.Detail {
- _ = b.WriteByte('\n')
- _, _ = b.Write(d)
- }
- provider.GetLogger(ctx).Warning(b.String())
- }
- }()
-
- cacheFrom := []client.CacheOptionsEntry{}
- for _, c := range opts.CacheFrom {
- if c == nil {
- continue
- }
- cacheFrom = append(cacheFrom, client.CacheOptionsEntry{
- Type: c.Type,
- Attrs: c.Attrs,
- })
- }
- cacheTo := []client.CacheOptionsEntry{}
- for _, c := range opts.CacheTo {
- if c == nil {
- continue
- }
- cacheTo = append(cacheTo, client.CacheOptionsEntry{
- Type: c.Type,
- Attrs: c.Attrs,
- })
- }
- exports := []client.ExportEntry{}
- for _, e := range opts.Exports {
- if e == nil {
- continue
- }
- exports = append(exports, client.ExportEntry{
- Type: e.Type,
- Attrs: e.Attrs,
- OutputDir: e.Destination,
- })
- }
- platforms, _ := platformutil.Parse(opts.Platforms)
- platforms = platformutil.Dedupe(platforms)
-
- namedContexts := map[string]buildx.NamedContext{}
- for k, v := range opts.NamedContexts {
- ref, err := reference.ParseNormalizedNamed(k)
- if err != nil {
- return nil, err
- }
- name := strings.TrimSuffix(reference.FamiliarString(ref), ":latest")
- namedContexts[name] = buildx.NamedContext{Path: v}
- }
-
- ssh, err := controllerapi.CreateSSH(opts.SSH)
- if err != nil {
- return nil, err
- }
-
- target := opts.Target
- if target == "" {
- target = "default"
- }
- payload := map[string]buildx.Options{
- target: {
- Inputs: buildx.Inputs{
- ContextPath: opts.ContextPath,
- DockerfilePath: opts.DockerfileName,
- DockerfileInline: build.Inline(),
- NamedContexts: namedContexts,
- InStream: buildx.NewSyncMultiReader(strings.NewReader("")),
- },
- // Disable default provenance for now. Docker's `manifest create`
- // doesn't handle manifests with provenance included; more reason
- // to use imagetools instead.
- Attests: map[string]*string{"provenance": nil},
- BuildArgs: opts.BuildArgs,
- CacheFrom: cacheFrom,
- CacheTo: cacheTo,
- Exports: exports,
- ExtraHosts: opts.ExtraHosts,
- NetworkMode: opts.NetworkMode,
- NoCache: opts.NoCache,
- Labels: opts.Labels,
- Platforms: platforms,
- Pull: opts.Pull,
- Tags: opts.Tags,
- Target: opts.Target,
-
- Session: []session.Attachable{
- ssh,
- authprovider.NewDockerAuthProvider(authprovider.DockerAuthProviderConfig{ConfigFile: c.ConfigFile()}),
- build.Secrets(),
- },
- },
- }
-
- resultC := make(chan map[string]*client.SolveResponse)
- errC := make(chan error)
-
- // buildx.Build doesn't handle context cancellation, so we monitor it in a
- // goroutine. cli.Close cleans up our file descriptors, so if we do exit
- // early the remote build should terminate as soon as it sees the pipe has
- // broken.
- go func() {
- defer close(resultC)
- defer close(errC)
- results, err := c.builder.Build(
- ctx,
- b.nodes,
- payload,
- dockerutil.NewClient(c),
- confutil.NewConfig(c),
- printer,
- )
- if err != nil {
- errC <- err
- return
- }
- resultC <- results
- }()
-
- select {
- case results := <-resultC:
- return results[target], nil
- case err := <-errC:
- c.dumplogs = true
- return nil, err
- case <-ctx.Done():
- return nil, ctx.Err()
- }
-}
-
-// BuildKitEnabled returns true if the client supports buildkit.
-func (c *cli) BuildKitEnabled() (bool, error) {
- return c.Cli.BuildKitEnabled()
-}
-
-func (c *cli) ManifestCreate(ctx context.Context, push bool, target string, refs ...string) error {
- go c.tail(ctx)
- defer contract.IgnoreClose(c)
-
- args := []string{
- // "buildx",
- "imagetools",
- "create",
- "--progress=plain",
- "--tag", target,
- }
-
- if !push {
- args = append(args, "--dry-run")
- }
-
- args = append(args, refs...)
-
- cmd := commands.NewRootCmd(os.Args[0], false, c)
-
- cmd.SetArgs(args)
- cmd.SetErr(c.Err())
- cmd.SetOut(c.Out())
-
- provider.GetLogger(ctx).Debug(fmt.Sprint("creating manifest with args", args))
- return cmd.ExecuteContext(ctx)
-}
-
-func (c *cli) ManifestInspect(ctx context.Context, target string) (string, error) {
- rc := c.rc()
-
- ref, err := ref.New(target)
- if err != nil {
- return "", err
- }
-
- m, err := rc.ManifestHead(ctx, ref)
- if err != nil {
- return "", fmt.Errorf("fetching %q: %w", ref, err)
- }
-
- return string(m.GetDescriptor().Digest), nil
-}
-
-func (c *cli) ManifestDelete(ctx context.Context, target string) error {
- rc := c.rc()
-
- ref, err := ref.New(target)
- if err != nil {
- return err
- }
-
- err = rc.ManifestDelete(ctx, ref)
- if errors.Is(err, errs.ErrHTTPStatus) {
- provider.GetLogger(ctx).Warning("this registry does not support deletions")
- return nil
- }
- if err != nil {
- return err
- }
-
- return nil
-}
-
-// Inspect inspects an image.
-func (c *cli) Inspect(ctx context.Context, r string) ([]descriptor.Descriptor, error) {
- ref, err := ref.New(r)
- if err != nil {
- return nil, err
- }
- rc := c.rc()
-
- m, err := rc.ManifestGet(ctx, ref)
- if err != nil {
- return nil, err
- }
-
- if mi, ok := m.(manifest.Indexer); ok {
- return mi.GetManifestList()
- }
-
- return []descriptor.Descriptor{m.GetDescriptor()}, nil
-}
-
-// Delete attempts to delete an image with the given ref. Many registries don't
-// support the DELETE API yet, so this operation is not guaranteed to work.
-func (c *cli) Delete(ctx context.Context, r string) error {
- // Attempt to delete the ref locally if it exists.
- _, _ = c.Client().ImageRemove(ctx, r, image.RemoveOptions{
- Force: true, // Needed in case the image has multiple tags.
- })
-
- // Attempt to delete the ref remotely if it was pushed -- requires a
- // digest.
- ref, err := ref.New(r)
- if err != nil || ref.Digest == "" {
- return nil
- }
-
- rc := c.rc()
-
- // TODO: Multi-platform manifests are left dangling on ECR.
-
- _ = rc.ManifestDelete(ctx, ref)
-
- return nil
-}
-
-// Builder allows injecting mock responses from the build daemon.
-type Builder interface {
- Build(
- ctx context.Context,
- nodes []builder.Node,
- opts map[string]buildx.Options,
- docker *dockerutil.Client,
- cfg *confutil.Config,
- w progress.Writer,
- ) (resp map[string]*client.SolveResponse, err error)
-}
-
-type defaultBuilder struct{}
-
-func (defaultBuilder) Build(
- ctx context.Context,
- nodes []builder.Node,
- opts map[string]buildx.Options,
- docker *dockerutil.Client,
- cfg *confutil.Config,
- w progress.Writer,
-) (resp map[string]*client.SolveResponse, err error) {
- return buildx.Build(ctx, nodes, opts, docker, cfg, w)
-}
-
-func normalizeReference(ref string) (reference.Named, error) {
- namedRef, err := reference.ParseNormalizedNamed(ref)
- if err != nil {
- return nil, err
- }
- if _, isDigested := namedRef.(reference.Canonical); !isDigested {
- return reference.TagNameOnly(namedRef), nil
- }
- return namedRef, nil
-}
diff --git a/provider/internal/client_test.go b/provider/internal/client_test.go
deleted file mode 100644
index fa8c4f8..0000000
--- a/provider/internal/client_test.go
+++ /dev/null
@@ -1,489 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "bytes"
- "context"
- "errors"
- "io"
- "log/slog"
- "os"
- "path/filepath"
- "testing"
-
- buildx "github.com/docker/buildx/build"
- "github.com/docker/buildx/builder"
- "github.com/docker/buildx/util/confutil"
- "github.com/docker/buildx/util/dockerutil"
- "github.com/docker/buildx/util/progress"
- "github.com/docker/docker/api/types/registry"
- "github.com/moby/buildkit/client"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- "go.uber.org/mock/gomock"
-)
-
-func TestAuth(t *testing.T) {
- t.Parallel()
- user := "pulumibot"
- if u := os.Getenv("DOCKER_HUB_USER"); u != "" {
- user = u
- }
- password := os.Getenv("DOCKER_HUB_PASSWORD")
- address := "docker.io"
-
- cli := testcli(t, true, Registry{
- Address: address,
- Username: user,
- Password: password,
- })
-
- _, err := cli.Client().
- RegistryLogin(context.Background(), registry.AuthConfig{ServerAddress: address})
- assert.NoError(t, err)
-}
-
-func TestCustomHost(t *testing.T) {
- socket := "unix:///foo/bar.sock"
-
- //nolint:paralleltest // not compatible with Setenv
- t.Run("env", func(t *testing.T) {
- t.Setenv("DOCKER_HOST", socket)
-
- h, err := newHost(context.Background(), nil)
- require.NoError(t, err)
- cli, err := wrap(h)
- require.NoError(t, err)
-
- assert.Equal(t, socket, cli.Client().DaemonHost())
- assert.Equal(t, socket, cli.DockerEndpoint().Host)
- })
-
- t.Run("config", func(t *testing.T) {
- t.Parallel()
- h, err := newHost(context.Background(), &Config{Host: socket})
- require.NoError(t, err)
- cli, err := wrap(h)
- require.NoError(t, err)
-
- assert.Equal(t, socket, cli.Client().DaemonHost())
- assert.Equal(t, socket, cli.DockerEndpoint().Host)
- })
-}
-
-func TestBuild(t *testing.T) {
- t.Parallel()
-
- tmpdir := t.TempDir()
- Max := Max
-
- exampleContext := &BuildContext{Context: Context{Location: "../../examples/app"}}
-
- tests := []struct {
- name string
- skip bool
- args ImageArgs
-
- auths []Registry
- }{
- {
- name: "multiPlatform",
- args: ImageArgs{
- Context: exampleContext,
- Dockerfile: &Dockerfile{
- Location: "../../examples/app/Dockerfile.multiPlatform",
- },
- Platforms: []Platform{"plan9/amd64", "plan9/arm64"},
- },
- },
- {
- name: "registryPush",
- skip: os.Getenv("DOCKER_HUB_PASSWORD") == "",
- args: ImageArgs{
- Context: exampleContext,
- Tags: []string{"docker.io/pulumibot/buildkit-e2e:unit"},
- Push: true,
- },
- auths: []Registry{{
- Address: "docker.io",
- Username: "pulumibot",
- Password: os.Getenv("DOCKER_HUB_PASSWORD"),
- }},
- },
- {
- name: "cached",
- args: ImageArgs{
- Context: exampleContext,
- Tags: []string{"cached"},
- CacheTo: []CacheTo{{Local: &CacheToLocal{
- Dest: filepath.Join(tmpdir, "cache"),
- CacheWithMode: CacheWithMode{Mode: &Max},
- }}},
- CacheFrom: []CacheFrom{{Local: &CacheFromLocal{
- Src: filepath.Join(tmpdir, "cache"),
- }}},
- },
- },
- {
- name: "buildArgs",
- args: ImageArgs{
- Context: exampleContext,
- Dockerfile: &Dockerfile{
- Location: "../../examples/app/Dockerfile.buildArgs",
- },
- BuildArgs: map[string]string{
- "SET_ME_TO_TRUE": "true",
- },
- },
- },
- {
- name: "extraHosts",
- args: ImageArgs{
- Context: exampleContext,
- Dockerfile: &Dockerfile{
- Location: "../../examples/app/Dockerfile.extraHosts",
- },
- AddHosts: []string{
- "metadata.google.internal:169.254.169.254",
- },
- },
- },
- {
- name: "sshMount",
- skip: os.Getenv("SSH_AUTH_SOCK") == "",
- args: ImageArgs{
- Context: exampleContext,
- Dockerfile: &Dockerfile{
- Location: "../../examples/app/Dockerfile.sshMount",
- },
- SSH: []SSH{{ID: "default"}},
- },
- },
- {
- name: "secrets",
- args: ImageArgs{
- Context: exampleContext,
- Dockerfile: &Dockerfile{
- Location: "../../examples/app/Dockerfile.secrets",
- },
- Secrets: map[string]string{
- "password": "hunter2",
- },
- NoCache: true,
- },
- },
- {
- name: "labels",
- args: ImageArgs{
- Context: exampleContext,
- Labels: map[string]string{
- "description": "foo",
- },
- },
- },
- {
- name: "target",
- args: ImageArgs{
- Context: exampleContext,
- Dockerfile: &Dockerfile{
- Location: "../../examples/app/Dockerfile.target",
- },
- Target: "build-me",
- },
- },
- {
- name: "namedContext",
- args: ImageArgs{
- Context: &BuildContext{
- Context: Context{
- Location: "../../examples/app",
- },
- Named: NamedContexts{
- "golang:latest": Context{
- Location: "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984",
- },
- },
- },
- Dockerfile: &Dockerfile{
- Location: "../../examples/app/Dockerfile.namedContexts",
- },
- },
- },
- {
- name: "remoteContext",
- args: ImageArgs{
- Context: &BuildContext{
- Context: Context{
- Location: "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
- },
- },
- },
- },
- {
- name: "remoteContextWithInline",
- args: ImageArgs{
- Context: &BuildContext{
- Context: Context{
- Location: "https://github.com/docker-library/hello-world.git",
- },
- },
- Dockerfile: &Dockerfile{
- Inline: dedent(`
- FROM busybox
- COPY hello.c ./
- `),
- },
- },
- },
- {
- name: "inline",
- args: ImageArgs{
- Context: exampleContext,
- Dockerfile: &Dockerfile{
- Inline: dedent(`
- FROM alpine
- RUN echo 👍
- `),
- },
- },
- },
- {
- name: "dockerLoad",
- args: ImageArgs{
- Context: exampleContext,
- Load: true,
- },
- },
- }
-
- // Add an exec: true version for all of our test cases.
- for _, tt := range tests {
- tt.name = "exec-" + tt.name
- tt.args.Exec = true
- tmpdir := filepath.Join(t.TempDir(), "exec")
- for _, c := range tt.args.CacheTo {
- if c.Local != nil {
- c.Local.Dest = tmpdir
- }
- }
- for _, c := range tt.args.CacheFrom {
- if c.Local != nil {
- c.Local.Src = tmpdir
- }
- }
- tests = append(tests, tt)
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
- if tt.skip {
- t.Skip()
- }
- ctx := context.Background()
- cli := testcli(t, true, tt.auths...)
-
- build, err := tt.args.toBuild(ctx, true, false)
- require.NoError(t, err)
-
- _, err = cli.Build(ctx, build)
- assert.NoError(t, err, cli.err.String())
- })
- }
-}
-
-func TestBuildkitEnabled(t *testing.T) {
- t.Parallel()
- cli := testcli(t, false)
- ok, err := cli.BuildKitEnabled()
- assert.NoError(t, err)
- assert.True(t, ok)
-}
-
-func TestInspect(t *testing.T) {
- t.Parallel()
- cli := testcli(t, false)
- descriptors, err := cli.Inspect(context.Background(), "pulumibot/myapp:buildx")
- require.NoError(t, err)
- assert.Equal(
- t,
- "application/vnd.docker.distribution.manifest.v2+json",
- descriptors[0].MediaType,
- )
-}
-
-func TestNormalizeReference(t *testing.T) {
- t.Parallel()
- tests := []struct {
- ref string
- want string
- wantErr string
- }{
- {
- ref: "foo",
- want: "docker.io/library/foo:latest",
- },
- {
- ref: "pulumi/pulumi:v3.100.0",
- want: "docker.io/pulumi/pulumi:v3.100.0",
- },
- {
- ref: "invalid:ref:format",
- wantErr: "invalid reference format",
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.ref, func(t *testing.T) {
- t.Parallel()
- ref, err := normalizeReference(tt.ref)
- if err != nil {
- assert.ErrorContains(t, err, tt.wantErr)
- } else {
- assert.Equal(t, ref.String(), tt.want)
- }
- })
- }
-}
-
-//nolint:paralleltest // Overrides default logger.
-func TestBuildError(t *testing.T) {
- if os.Getenv("CI") != "" {
- t.Skip("flaky on CI for some reason")
- }
-
- l := slog.Default()
- defer slog.SetDefault(l)
-
- // Override go-provider's default logger to capture and tee to stdout.
- logger := &bytes.Buffer{}
- slog.SetDefault(
- slog.New(
- slog.NewTextHandler(io.MultiWriter(logger, os.Stdout), nil),
- ),
- )
-
- exampleContext := &BuildContext{Context: Context{Location: "../../examples/app"}}
-
- args := ImageArgs{
- Context: exampleContext,
- Dockerfile: &Dockerfile{
- Inline: "FROM alpine\nRUN echo hello\nRUN badcmd",
- },
- }
-
- ctx := context.Background()
- cli := testcli(t, true)
-
- build, err := args.toBuild(ctx, true, false)
- require.NoError(t, err)
-
- _, err = cli.Build(ctx, build)
- assert.Error(t, err)
-
- want := []string{
- `RUN echo hello`,
- `/bin/sh: badcmd: not found`,
- }
-
- for _, want := range want {
- assert.Contains(t, logger.String(), want)
- }
- assert.ErrorContains(t, err,
- `process "/bin/sh -c badcmd" did not complete successfully: exit code: 127`,
- )
-}
-
-func TestBuildExecError(t *testing.T) {
- t.Parallel()
-
- exampleContext := &BuildContext{Context: Context{Location: "../../examples/app"}}
-
- args := ImageArgs{
- Context: exampleContext,
- Dockerfile: &Dockerfile{
- Inline: "FROM alpine\nRUN echo hello\nRUN badcmd",
- },
- Exec: true,
- }
-
- ctx := context.Background()
- cli := testcli(t, true)
-
- build, err := args.toBuild(ctx, true, false)
- require.NoError(t, err)
-
- _, err = cli.Build(ctx, build)
- assert.Error(t, err)
-
- want := []string{
- `RUN echo hello`,
- `/bin/sh: badcmd: not found`,
- `process "/bin/sh -c badcmd" did not complete successfully: exit code: 127`,
- }
-
- for _, want := range want {
- assert.Contains(t, cli.err.String(), want)
- }
-}
-
-func TestBuildCancelation(t *testing.T) {
- t.Parallel()
- cli := testcli(t, true)
-
- ctrl := gomock.NewController(t)
-
- ctx, cancel := context.WithCancel(context.Background())
-
- b := NewMockBuilder(ctrl)
- b.EXPECT().Build(
- gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(),
- ).DoAndReturn(func(
- _ context.Context,
- _ []builder.Node,
- _ map[string]buildx.Options,
- _ *dockerutil.Client,
- _ *confutil.Config,
- _ progress.Writer,
- ) (map[string]*client.SolveResponse, error) {
- cancel()
- return nil, errors.New("cancel wasn't respected")
- })
- cli.builder = b
-
- resp, err := cli.Build(ctx, &build{})
- assert.ErrorIs(t, err, context.Canceled)
- assert.Nil(t, resp)
-}
-
-// testcli returns a new standalone CLI instance. Set ping to true if a live
-// daemon is required -- the test will be skipped if the daemon is not available.
-func testcli(t *testing.T, ping bool, auths ...Registry) *cli {
- h, err := newHost(context.Background(), nil)
- require.NoError(t, err)
-
- cli, err := wrap(h, auths...)
- require.NoError(t, err)
-
- if ping {
- _, err := cli.Client().Ping(context.Background())
- if err != nil {
- t.Skip(err)
- }
- }
-
- return cli
-}
diff --git a/provider/internal/context.go b/provider/internal/context.go
deleted file mode 100644
index fc00765..0000000
--- a/provider/internal/context.go
+++ /dev/null
@@ -1,357 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "context"
- "crypto/sha256"
- "encoding/hex"
- "errors"
- "fmt"
- "hash"
- "io"
- gofs "io/fs"
- "os"
- "path"
- "path/filepath"
- "slices"
- "syscall"
-
- buildx "github.com/docker/buildx/build"
- "github.com/moby/patternmatcher/ignorefile"
- "github.com/spf13/afero"
- "github.com/tonistiigi/fsutil"
- "golang.org/x/exp/maps"
-
- "github.com/pulumi/pulumi-go-provider/infer"
- "github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"
-)
-
-var (
- _ infer.Annotated = (*Context)(nil)
- _ infer.Annotated = (*BuildContext)(nil)
-)
-
-// Context represents Docker's `PATH | URL | -` context argument. Inline
-// context isn't supported yet.
-type Context struct {
- Location string `pulumi:"location"` // Location is a local directory or URL.
-}
-
-// BuildContext represents Docker's named and unamed contexts.
-type BuildContext struct {
- Context
- Named NamedContexts `pulumi:"named,optional"`
-}
-
-func (bc *BuildContext) namedMap() map[string]string {
- if bc == nil {
- return nil
- }
- return bc.Named.Map()
-}
-
-// NamedContexts correspond to Docker's `--build-context name=path` options.
-// The path can be local or a remote URL.
-type NamedContexts map[string]Context
-
-// Map returns NamedContexts as a simple map.
-func (nc NamedContexts) Map() map[string]string {
- m := map[string]string{}
- for k, v := range nc {
- m[k] = v.Location
- }
- return m
-}
-
-// Annotate sets docstrings on Context.
-func (c *Context) Annotate(a infer.Annotator) {
- a.Describe(&c.Location, dedent(`
- Resources to use for build context.
-
- The location can be:
- * A relative or absolute path to a local directory (".", "./app",
- "/app", etc.).
- * A remote URL of a Git repository, tarball, or plain text file
- ("https://github.com/user/myrepo.git", "http://server/context.tar.gz",
- etc.).
- `))
-}
-
-// validate returns a non-nil CheckError if the Context is invalid. The
-// returned Dockerfile may have defaults set to match Docker's default
-// handling. The returned Dockerfile should be validated separately. Non-nil
-// values are returned even in the case of errors to allow additional
-// validation to be performed.
-func (bc *BuildContext) validate(preview bool, d *Dockerfile) (*Dockerfile, *Context, error) {
- if d == nil {
- d = &Dockerfile{}
- }
- c := &Context{}
- if bc != nil {
- c = &bc.Context
- }
-
- if c.Location == "" && preview {
- // The field is required so we normally wouldn't need to check if it
- // exists, but during previews it can still be empty if the value is
- // unknown. This isn't an error, but it does prevent us from performing
- // a build later.
- return d, c, nil
- }
- // If this isn't a preview but our location still isn't set, default it to
- // the current directory.
- if c.Location == "" {
- c.Location = "."
- }
-
- if buildx.IsRemoteURL(c.Location) {
- // We assume remote URLs are always valid.
- return d, c, nil
- }
-
- abs, err := filepath.Abs(c.Location)
- if err != nil {
- return d, c, newCheckFailure(err, "context.location")
- }
-
- if d.Location == "" && d.Inline == "" {
- // If a Dockerfile wasn't provided and our context is on-disk, then
- // set our Dockerfile to a default of /Dockerfile.
- d.Location = filepath.Join(c.Location, "Dockerfile")
- }
-
- if isLocalDir(afero.NewOsFs(), abs) {
- // Our context exists -- nothing else to check.
- return d, c, nil
- }
-
- if c.Location != "-" {
- return d, c, newCheckFailure(
- fmt.Errorf("%q: not a valid directory or URL", c.Location),
- "context.location",
- )
- }
-
- return d, c, nil
-}
-
-// Annotate sets docstrings on BuildContext.
-func (bc *BuildContext) Annotate(a infer.Annotator) {
- a.Describe(&bc.Named, dedent(`
- Additional build contexts to use.
-
- These contexts are accessed with "FROM name" or "--from=name"
- statements when using Dockerfile 1.4+ syntax.
-
- Values can be local paths, HTTP URLs, or "docker-image://" images.
- `))
-}
-
-// hashFile hashes a file's contents and accumulates it into the provider Hash.
-func hashFile(
- h hash.Hash,
- fs fsutil.FS,
- relativePath string,
- fileMode gofs.FileMode,
-) error {
- if fileMode.IsDir() {
- return nil
- }
- if !(fileMode.IsRegular() || fileMode.Type() == os.ModeSymlink) {
- return nil
- }
-
- f, err := fs.Open(relativePath)
- if err != nil {
- return fmt.Errorf("could not open %q: %w", relativePath, err)
- }
- defer contract.IgnoreClose(f)
-
- _, err = io.Copy(h, f)
- if errors.Is(err, syscall.EISDIR) {
- // Ignore symlinks to directories.
- return nil
- }
- if err != nil {
- return fmt.Errorf("could not copy %q to hash: %w", relativePath, err)
- }
-
- h.Write([]byte(filepath.ToSlash(path.Clean(relativePath))))
- h.Write([]byte(fileMode.String()))
-
- return nil
-}
-
-// hashBuildContext accumulates hashes for files in a directory. If the file is
-// a symlink, the location it points to is hashed. If it is a regular file, we
-// hash the contents of the file. In order to detect file renames and mode
-// changes, we also write to the accumulator a relative name and file mode.
-func hashBuildContext(
- contextPath, dockerfilePath string,
- namedContexts map[string]string,
-) (string, error) {
- h := sha256.New()
- fs := afero.NewOsFs()
-
- // Grab .dockerignore if our context and/or Dockerfile is on-disk.
- excludes := []string{}
- if isLocalDir(fs, contextPath) || isLocalFile(fs, dockerfilePath) {
- e, err := getIgnorePatterns(fs, dockerfilePath, contextPath)
- if err != nil {
- return "", err
- }
- excludes = e
- }
-
- if isLocalFile(fs, dockerfilePath) {
- err := hashDockerfile(h, dockerfilePath)
- if err != nil {
- return "", nil
- }
- }
-
- if isLocalDir(fs, contextPath) {
- // Hash our context if it's on-disk.
- fs, err := rootFS(contextPath, excludes)
- if err != nil {
- return "", err
- }
- if _, err := hashPath(h, fs); err != nil {
- return "", err
- }
- }
-
- // Hash any local named contexts. Sort keys for stable iteration order.
- keys := maps.Keys(namedContexts)
- slices.Sort(keys)
- for _, key := range keys {
- namedContext := namedContexts[key]
- if isLocalDir(fs, namedContext) {
- fs, err := rootFS(namedContext, excludes)
- if err != nil {
- return "", err
- }
- if _, err := hashPath(h, fs); err != nil {
- return "", err
- }
- }
- }
-
- return hex.EncodeToString(h.Sum(nil)), nil
-}
-
-// hashPath hashes all paths within the provided FS.
-func hashPath(h hash.Hash, fs fsutil.FS) (string, error) {
- err := fs.Walk(
- context.Background(),
- "/",
- func(filePath string, dir gofs.DirEntry, err error) error {
- if err != nil {
- return err
- }
- if dir.IsDir() {
- return nil
- }
- // fsutil.Walk makes filePath relative to the root, we join it back to get an absolute path to
- // the file to hash.
- fi, err := dir.Info()
- if err != nil {
- return err
- }
- return hashFile(h, fs, filePath, fi.Mode())
- },
- )
- if err != nil {
- return "", fmt.Errorf("unable to hash build context: %w", err)
- }
- // create a hash of the entire input of the hash accumulator
- return hex.EncodeToString(h.Sum(nil)), nil
-}
-
-// hashDockerfile hashes the contents of a Dockerfile.
-func hashDockerfile(h hash.Hash, path string) error {
- // The Dockerfile might be capture by .dockerignore, so we explicitly hash
- // its content (but not filename -- to match Docker) in order to detect
- // changes in it.
- df, err := os.ReadFile(filepath.Clean(path))
- if err != nil {
- return fmt.Errorf("error reading dockerfile %q: %w", path, err)
- }
- _, err = h.Write(df)
- if err != nil {
- return fmt.Errorf("error hashing dockerfile %q: %w", path, err)
- }
- return nil
-}
-
-// getIgnorePatterns returns all patterns to ignore when constructing a build
-// context for the given Dockerfile, if any such patterns exist.
-//
-// Precedence is given to Dockerfile-specific ignore-files as per
-// https://docs.docker.com/build/building/context/#filename-and-location.
-func getIgnorePatterns(fs afero.Fs, dockerfilePath, contextRoot string) ([]string, error) {
- paths := []string{
- // Prefer .dockerignore if it's present.
- dockerfilePath + ".dockerignore",
- }
-
- if isLocalDir(fs, contextRoot) {
- // Otherwise fall back to the ignore-file at the root of our build context.
- paths = append(paths, filepath.Join(contextRoot, ".dockerignore"))
- }
-
- // Attempt to parse our candidate ignore-files, skipping any that don't
- // exist.
- for _, p := range paths {
- f, err := fs.Open(p)
- if errors.Is(err, afero.ErrFileNotFound) {
- continue
- }
- if err != nil {
- return nil, fmt.Errorf("reading %q: %w", p, err)
- }
-
- ignorePatterns, err := ignorefile.ReadAll(f)
- if err != nil {
- contract.IgnoreClose(f)
- return nil, fmt.Errorf("unable to parse %q: %w", p, err)
- }
- contract.IgnoreClose(f)
- return ignorePatterns, nil
- }
-
- return nil, nil
-}
-
-func isLocalDir(fs afero.Fs, path string) bool {
- stat, err := fs.Stat(path)
- return err == nil && stat.IsDir()
-}
-
-func isLocalFile(fs afero.Fs, path string) bool {
- stat, err := fs.Stat(path)
- return err == nil && !stat.IsDir()
-}
-
-// rootFS returns a new fsutil.FS scoped to the given root and with the given
-// exclusions.
-func rootFS(root string, excludes []string) (fsutil.FS, error) {
- fs, err := fsutil.NewFS(root)
- if err != nil {
- return nil, err
- }
- return fsutil.NewFilterFS(fs, &fsutil.FilterOpt{ExcludePatterns: excludes})
-}
diff --git a/provider/internal/context_test.go b/provider/internal/context_test.go
deleted file mode 100644
index 704afdf..0000000
--- a/provider/internal/context_test.go
+++ /dev/null
@@ -1,424 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "bufio"
- "os"
- "path/filepath"
- "strings"
- "syscall"
- "testing"
-
- "github.com/spf13/afero"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-)
-
-var _dockerfile = "Dockerfile"
-
-func TestValidateContext(t *testing.T) {
- t.Parallel()
- tests := []struct {
- name string
- c *BuildContext
- givenD Dockerfile
- preview bool
-
- wantD *Dockerfile
- wantC *Context
- wantErr string
- }{
- {
- name: "relative",
- c: &BuildContext{Context: Context{
- Location: "../internal/../internal/testdata/noop",
- }},
- wantD: &Dockerfile{
- Location: "../internal/testdata/noop/Dockerfile",
- },
- },
- {
- name: "missing directory",
- c: &BuildContext{Context: Context{
- Location: "/does/not/exist/",
- }},
- wantErr: "not a valid directory",
- },
- {
- name: "missing default Dockerfile",
- c: &BuildContext{Context: Context{
- Location: "testdata",
- }},
- wantD: &Dockerfile{Location: "testdata/Dockerfile"},
- },
- {
- name: "with explicit Dockerfile",
- c: &BuildContext{Context: Context{
- Location: "testdata",
- }},
- givenD: Dockerfile{
- Location: "testdata/Dockerfile.invalid",
- },
- },
- {
- name: "default location",
- c: &BuildContext{Context: Context{}},
- wantD: &Dockerfile{Location: "Dockerfile"},
- },
- {
- name: "remote context doesn't default to local Dockerfile",
- c: &BuildContext{Context: Context{
- Location: "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
- }},
- wantD: &Dockerfile{},
- },
- {
- name: "preview",
- c: &BuildContext{Context: Context{}},
- preview: true,
- },
- {
- name: "missing context defaults to current directory",
- c: nil,
- wantC: &Context{Location: "."},
- wantD: &Dockerfile{Location: "Dockerfile"},
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
-
- d, c, err := tt.c.validate(tt.preview, &tt.givenD)
-
- if tt.wantErr == "" {
- assert.NoError(t, err)
- } else {
- assert.ErrorContains(t, err, tt.wantErr)
- }
-
- if tt.wantD != nil {
- assert.Equal(t, tt.wantD.Location, d.Location)
- assert.Equal(t, tt.wantD.Inline, d.Inline)
- }
- if tt.wantC != nil {
- assert.Equal(t, tt.wantC.Location, c.Location)
- }
- })
- }
-}
-
-func TestHashIgnoresFile(t *testing.T) {
- t.Parallel()
-
- step1Dir := "./testdata/ignores/basedir"
- baseResult, err := hashBuildContext(step1Dir, filepath.Join(step1Dir, _dockerfile), nil)
- require.NoError(t, err)
-
- step2Dir := "./testdata/ignores/basedir-with-ignored-files"
- result, err := hashBuildContext(step2Dir, filepath.Join(step2Dir, _dockerfile), nil)
- require.NoError(t, err)
-
- assert.Equal(t, result, baseResult)
-}
-
-// Tests that we handle .dockerignore exclusions such as "!foo/*/bar".
-//
-// See:
-// - https://github.com/moby/moby/issues/30018
-// - https://github.com/moby/moby/issues/45608
-//
-// Buildkit handles these correctly (according to spec), Docker's classic builder does not.
-func TestHashIgnoresWildcards(t *testing.T) {
- t.Parallel()
- baselineDir := "testdata/ignores-wildcard/basedir"
- baselineResult, err := hashBuildContext(
- baselineDir,
- filepath.Join(baselineDir, _dockerfile),
- nil,
- )
- require.NoError(t, err)
-
- modIgnoredDir := "testdata/ignores-wildcard/basedir-modified-ignored-file"
- modIgnoredResult, err := hashBuildContext(
- modIgnoredDir,
- filepath.Join(modIgnoredDir, _dockerfile),
- nil,
- )
- require.NoError(t, err)
-
- modIncludedDir := "testdata/ignores-wildcard/basedir-modified-included-file"
- modIncludedResult, err := hashBuildContext(
- modIncludedDir,
- filepath.Join(modIncludedDir, _dockerfile),
- nil,
- )
- require.NoError(t, err)
-
- assert.Equal(
- t,
- baselineResult,
- modIgnoredResult,
- "hash should not change when modifying ignored files",
- )
- assert.NotEqual(t, baselineResult, modIncludedResult,
- "hash should change when modifying included (via wildcard ignore exclusion) files")
-}
-
-func BenchmarkHashBuildContext(b *testing.B) {
- dir := "testdata/ignores-wildcard/basedir-modified-ignored-file"
- for n := 0; n < b.N; n++ {
- _, err := hashBuildContext(dir, filepath.Join(dir, _dockerfile), nil)
- require.NoError(b, err)
-
- }
-}
-
-// Tests that we handle .dockerignore exclusions such as "!foo/*/bar", as above, when using a
-// relative context path.
-//
-//nolint:paralleltest // Incompatible with os.Chdir.
-func TestHashIgnoresWildcardsRelative(t *testing.T) {
- err := os.Chdir("testdata")
- require.NoError(t, err)
- defer func() {
- err = os.Chdir("..")
- require.NoError(t, err)
- }()
-
- baselineDir := "../testdata/ignores-wildcard/basedir"
- baselineResult, err := hashBuildContext(
- baselineDir,
- filepath.Join(baselineDir, _dockerfile),
- nil,
- )
- require.NoError(t, err)
-
- modIgnoredDir := "../testdata/ignores-wildcard/basedir-modified-ignored-file"
- modIgnoredResult, err := hashBuildContext(
- modIgnoredDir,
- filepath.Join(modIgnoredDir, _dockerfile),
- nil,
- )
- require.NoError(t, err)
-
- modIncludedDir := "../testdata/ignores-wildcard/basedir-modified-included-file"
- modIncludedResult, err := hashBuildContext(
- modIncludedDir,
- filepath.Join(modIncludedDir, _dockerfile),
- nil,
- )
- require.NoError(t, err)
-
- assert.Equal(
- t,
- baselineResult,
- modIgnoredResult,
- "hash should not change when modifying ignored files",
- )
- assert.NotEqual(t, baselineResult, modIncludedResult,
- "hash should change when modifying included (via wildcard ignore exclusion) files")
-}
-
-func TestHashIgnoresDockerfileOutsideDirMove(t *testing.T) {
- t.Parallel()
- appDir := "./testdata/dockerfile-location-irrelevant/app"
- baseResult, err := hashBuildContext(
- appDir,
- "./testdata/dockerfile-location-irrelevant/step1.Dockerfile",
- nil,
- )
- require.NoError(t, err)
-
- result, err := hashBuildContext(
- appDir,
- "./testdata/dockerfile-location-irrelevant/step2.Dockerfile",
- nil,
- )
- require.NoError(t, err)
-
- assert.Equal(t, result, baseResult)
-}
-
-func TestHashRenamingMatters(t *testing.T) {
- t.Parallel()
- step1Dir := "./testdata/filemode-matters/step1"
- baseResult, err := hashBuildContext(step1Dir, filepath.Join(step1Dir, _dockerfile), nil)
- require.NoError(t, err)
-
- step2Dir := "./testdata/renaming-matters/step2"
- result, err := hashBuildContext(step2Dir, filepath.Join(step2Dir, _dockerfile), nil)
- require.NoError(t, err)
-
- assert.NotEqual(t, result, baseResult)
-}
-
-func TestHashFilemodeMatters(t *testing.T) {
- t.Parallel()
- step1Dir := "./testdata/filemode-matters/step1"
- baseResult, err := hashBuildContext(step1Dir, filepath.Join(step1Dir, _dockerfile), nil)
- require.NoError(t, err)
-
- step2Dir := "./testdata/filemode-matters/step2-chmod-x"
- result, err := hashBuildContext(step2Dir, filepath.Join(step2Dir, _dockerfile), nil)
- require.NoError(t, err)
-
- assert.NotEqual(t, result, baseResult)
-}
-
-func TestHashDeepSymlinks(t *testing.T) {
- t.Parallel()
- dir := "./testdata/symlinks"
- _, err := hashBuildContext(dir, filepath.Join(dir, "Dockerfile"), nil)
- assert.NoError(t, err)
-}
-
-func TestIgnoreIrregularFiles(t *testing.T) {
- t.Parallel()
- dir := t.TempDir()
-
- // Create a Dockerfile
- dockerfile := filepath.Join(dir, "Dockerfile")
- err := os.WriteFile(dockerfile, []byte{}, 0o600)
- require.NoError(t, err)
-
- // Create a pipe which should be ignored. (We will time out trying to read
- // it if it's not.)
- pipe := filepath.Join(dir, "pipe")
- err = syscall.Mkfifo(pipe, 0o666)
- require.NoError(t, err)
- // Confirm it's irregular.
- fi, err := os.Stat(pipe)
- require.NoError(t, err)
- assert.False(t, fi.Mode().IsRegular())
-
- _, err = hashBuildContext(dir, dockerfile, nil)
- assert.NoError(t, err)
-}
-
-func TestHashUnignoredDirs(t *testing.T) {
- t.Parallel()
- step1Dir := "./testdata/unignores/basedir"
- baseResult, err := hashBuildContext(step1Dir, filepath.Join(step1Dir, _dockerfile), nil)
- require.NoError(t, err)
-
- step2Dir := "./testdata/unignores/basedir-with-unignored-files"
- unignoreResult, err := hashBuildContext(step2Dir, filepath.Join(step2Dir, _dockerfile), nil)
- require.NoError(t, err)
-
- assert.Equal(t, baseResult, unignoreResult)
-}
-
-func TestDockerIgnore(t *testing.T) {
- t.Parallel()
- tests := []struct {
- name string
-
- dockerfile string
- context string
- fs map[string]string
-
- want []string
- wantErr error
- }{
- {
- name: "Dockerfile with root dockerignore",
- dockerfile: "./foo/Dockerfile",
- fs: map[string]string{
- ".dockerignore": "rootignore",
- },
- want: []string{"rootignore"},
- },
- {
- name: "Dockerfile with root dockerignore and custom dockerignore",
- dockerfile: "./foo/Dockerfile",
- fs: map[string]string{
- "foo/Dockerfile.dockerignore": "customignore",
- ".dockerignore": "rootignore",
- },
- want: []string{"customignore"},
- },
- {
- name: "Dockerfile with root dockerignore and relative context",
- dockerfile: "./foo/Dockerfile",
- context: "../",
- fs: map[string]string{
- "../.dockerignore": "rootignore",
- },
- want: []string{"rootignore"},
- },
- {
- name: "Dockerfile without root dockerignore",
- dockerfile: "./foo/Dockerfile",
- want: nil,
- },
- {
- name: "Dockerfile with invalid root dockerignore",
- dockerfile: "./foo/Dockerfile",
- fs: map[string]string{
- ".dockerignore": strings.Repeat("*", bufio.MaxScanTokenSize),
- },
- wantErr: bufio.ErrTooLong,
- },
- {
- name: "custom.Dockerfile without custom dockerignore and without root dockerignore",
- dockerfile: "./foo/custom.Dockerfile",
- want: nil,
- },
- {
- name: "custom.Dockerfile with custom dockerignore and without root dockerignore",
- dockerfile: "./foo/custom.Dockerfile",
- fs: map[string]string{
- "foo/custom.Dockerfile.dockerignore": "customignore",
- },
- want: []string{"customignore"},
- },
- {
- name: "custom.Dockerfile with custom dockerignore and with root dockerignore",
- dockerfile: "foo/custom.Dockerfile",
- fs: map[string]string{
- "foo/custom.Dockerfile.dockerignore": "customignore",
- ".dockerignore": "rootignore",
- },
- want: []string{"customignore"},
- },
- {
- name: "custom.Dockerfile without custom dockerignore and with root dockerignore",
- dockerfile: "foo/custom.Dockerfile",
- fs: map[string]string{
- ".dockerignore": "rootignore",
- },
- want: []string{"rootignore"},
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
- fs := afero.NewMemMapFs()
- for fname, fdata := range tt.fs {
- f, err := fs.Create(fname)
- require.NoError(t, err)
- _, err = f.WriteString(fdata)
- require.NoError(t, err)
- }
- actual, err := getIgnorePatterns(fs, tt.dockerfile, tt.context)
-
- assert.ErrorIs(t, err, tt.wantErr)
- assert.Equal(t, tt.want, actual)
- })
- }
-}
diff --git a/provider/internal/coverage.out b/provider/internal/coverage.out
deleted file mode 100644
index dddbc6f..0000000
--- a/provider/internal/coverage.out
+++ /dev/null
@@ -1,870 +0,0 @@
-mode: set
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:34.47,36.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:38.65,40.9 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:40.9,42.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:43.2,44.9 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:44.9,46.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:47.2,48.9 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:48.9,50.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:51.2,51.46 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:51.46,53.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:54.2,55.18 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:60.3,62.27 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:62.27,64.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:68.2,68.13 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:68.13,70.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:72.2,73.62 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:73.62,75.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:77.2,81.59 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:81.59,83.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:83.16,85.4 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:87.3,88.23 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:88.23,90.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:92.3,92.17 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:95.2,95.66 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:98.69,99.13 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:100.17,101.42 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:102.27,103.38 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:104.15,105.52 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:106.10,107.61 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:111.66,118.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:123.36,127.16 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:127.16,129.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:131.2,134.9 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:134.9,136.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:138.2,141.19 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:141.19,144.3 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:146.2,146.78 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:146.78,150.3 3 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:152.2,152.24 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:152.24,154.17 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:154.17,156.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:157.3,157.23 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:157.23,160.4 2 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:161.3,161.17 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:166.2,166.21 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:166.21,168.46 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:168.46,171.4 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:174.2,174.16 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:178.102,185.18 4 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:185.18,186.31 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:186.31,188.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:189.3,189.21 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:193.2,193.27 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:193.27,196.17 3 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:196.17,198.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:198.9,198.22 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:198.22,199.36 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:199.36,200.13 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:202.4,202.67 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:202.67,203.13 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:205.4,205.19 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/deprecated/configencoding.go:209.2,209.20 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/auth.go:11.53,15.2 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/builder.go:13.53,22.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/buildx.go:33.46,36.2 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/buildx.go:39.54,46.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/buildx.go:46.16,48.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/buildx.go:49.2,56.12 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/buildx.go:60.44,76.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/buildx.go:79.69,84.2 4 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:39.42,40.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:40.14,42.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:43.2,44.17 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:44.17,46.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:47.2,47.20 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:47.20,49.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:50.2,50.33 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:53.54,56.2 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:62.57,64.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:66.45,67.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:67.14,69.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:70.2,70.51 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:78.52,92.2 4 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:94.39,95.18 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:95.18,97.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:98.2,99.28 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:99.28,101.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:102.2,102.33 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:111.62,138.2 6 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:140.50,141.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:141.14,143.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:144.2,145.19 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:145.19,147.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:148.2,148.19 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:148.19,150.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:151.2,151.17 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:151.17,153.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:154.2,154.33 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:163.46,164.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:164.14,166.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:167.2,168.18 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:168.18,170.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:171.2,171.24 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:171.24,173.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:174.2,174.29 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:174.29,176.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:177.2,177.33 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:180.58,184.2 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:193.44,194.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:194.14,196.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:197.2,197.77 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:213.51,249.2 14 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:251.39,252.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:252.14,254.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:255.2,256.20 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:256.20,258.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:259.2,259.18 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:259.18,261.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:262.2,262.25 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:262.25,264.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:265.2,265.25 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:265.25,267.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:268.2,268.29 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:268.29,270.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:271.2,271.27 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:271.27,273.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:274.2,274.25 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:274.25,276.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:277.2,277.29 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:277.29,279.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:280.2,280.26 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:280.26,282.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:284.2,284.33 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:291.53,296.2 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:298.40,299.18 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:299.18,301.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:302.2,302.39 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:309.60,312.2 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:314.47,315.26 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:315.26,317.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:318.2,318.55 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:328.37,329.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:329.14,331.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:332.2,332.70 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:337.30,339.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:352.54,380.2 7 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:382.41,383.16 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:383.16,385.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:386.2,386.64 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:391.41,392.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:392.14,394.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:395.2,395.22 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:406.52,410.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:412.40,413.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:413.14,415.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:416.2,420.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:432.43,433.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:433.14,435.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:436.2,442.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:451.60,459.2 6 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:461.47,462.29 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:462.29,464.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:465.2,466.25 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:466.25,468.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:469.2,469.28 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:469.28,471.14 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:471.14,473.4 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:474.3,474.65 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:476.2,476.31 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:476.31,478.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:479.2,479.33 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:489.48,490.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:490.14,492.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:493.2,493.81 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:508.52,541.2 8 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:543.39,544.16 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:544.16,546.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:547.2,547.74 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:557.56,568.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:578.68,584.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:588.49,590.23 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:590.23,592.14 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:592.14,593.12 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:595.3,595.27 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:597.2,597.35 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cache.go:600.38,602.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:31.62,33.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:33.16,35.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:55.2,56.28 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:56.28,58.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:60.2,60.31 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:60.31,67.3 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:80.2,100.16 6 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:100.16,102.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:104.2,114.21 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:177.32,179.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:181.34,183.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:185.31,187.2 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:190.41,192.28 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:192.28,197.3 4 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:198.2,200.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:205.42,207.15 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:207.15,209.35 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:209.35,211.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:214.2,215.15 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:215.15,217.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:218.2,218.30 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:222.29,225.19 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:225.19,227.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:228.2,228.12 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:231.76,235.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:235.16,237.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:238.2,243.16 4 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:243.16,245.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:251.2,252.52 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:252.52,257.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:260.2,263.16 4 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:263.16,265.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:266.2,298.35 4 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:298.35,300.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:301.2,301.24 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:301.24,303.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:304.2,304.35 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:304.35,306.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:307.2,307.33 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:307.33,309.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:310.2,310.21 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:310.21,312.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:313.2,313.21 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:313.21,315.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:316.2,316.33 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:316.33,318.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:319.2,319.36 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:319.36,321.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:322.2,322.39 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:322.39,324.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:325.2,325.32 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:325.32,327.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:328.2,328.18 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:328.18,330.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:331.2,331.35 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:331.35,333.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:334.2,334.15 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:334.15,336.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:337.2,337.31 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:337.31,339.25 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:339.25,341.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:342.3,342.34 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:344.2,344.30 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:344.30,346.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:347.2,347.23 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:347.23,349.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:350.2,350.31 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:350.31,352.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:353.2,353.32 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:353.32,356.3 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:357.2,357.28 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:357.28,359.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:361.2,361.33 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:361.33,367.3 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:369.2,370.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:370.16,372.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:376.2,377.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:377.16,379.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:380.2,381.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:381.16,383.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:384.2,386.16 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:386.16,388.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:389.2,390.24 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:390.24,391.25 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:392.15,393.16 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:394.11,396.18 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:396.18,397.13 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:399.4,399.25 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:403.2,404.18 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:404.18,406.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:407.2,409.8 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:414.60,417.20 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:417.20,419.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:420.2,425.16 4 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:425.16,427.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:428.2,428.21 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:428.21,430.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:432.2,445.16 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:445.16,447.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:448.2,455.18 6 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:467.54,469.22 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:469.22,471.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/cli.go:472.2,472.29 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:71.63,101.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:101.16,103.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:105.2,106.40 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:106.40,108.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:109.2,111.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:111.16,113.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:118.2,120.17 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:193.45,212.24 5 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:212.24,214.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:231.2,232.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:232.16,234.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:235.2,242.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:242.16,244.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:246.2,247.35 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:247.35,252.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:253.2,254.33 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:254.33,259.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:260.2,261.33 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:261.33,267.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:268.2,280.39 4 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:280.39,282.17 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:282.17,284.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:285.3,286.53 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:289.2,290.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:290.16,292.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:294.2,295.18 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:295.18,297.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:298.2,339.16 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:339.16,341.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:343.2,343.49 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:343.49,345.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:346.2,346.39 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:346.39,349.30 3 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:349.30,351.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:352.3,352.37 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:355.2,355.21 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:359.47,361.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:363.100,441.16 10 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:441.16,443.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:445.2,445.11 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:445.11,447.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:449.2,453.16 5 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:453.16,455.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:456.2,456.12 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:459.84,472.16 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:472.16,474.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:476.2,477.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:477.16,479.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:481.2,481.46 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:547.73,561.56 8 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:561.56,563.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:567.2,567.12 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:571.94,573.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:573.16,575.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:578.2,579.85 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:579.85,581.21 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:581.21,583.4 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:584.3,584.49 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:597.2,603.80 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:603.80,607.3 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:609.2,609.23 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:613.86,617.2 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:619.62,621.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:621.16,623.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:624.2,624.66 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:624.66,626.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/client.go:627.2,627.22 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:40.49,42.23 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:42.23,44.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:45.2,45.10 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:48.47,59.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:61.53,70.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:77.9,78.22 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:78.22,80.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:81.2,81.66 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:81.66,83.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:85.2,86.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:86.16,88.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:89.2,91.36 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:91.36,94.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:95.2,95.16 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:95.16,97.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:99.2,102.12 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:109.105,115.68 4 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:115.68,117.17 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:117.17,119.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:120.3,120.15 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:123.2,123.37 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:123.37,125.17 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:125.17,127.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:130.2,130.33 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:130.33,133.17 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:133.17,135.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:136.3,136.44 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:136.44,138.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:142.2,142.45 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:142.45,143.35 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:143.35,145.18 2 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:145.18,147.5 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:148.4,148.45 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:148.45,150.5 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:154.2,154.44 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:158.70,160.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:162.58,163.102 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:163.102,164.17 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:164.17,166.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:167.3,167.18 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:167.18,169.4 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:172.3,173.17 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:173.17,175.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:176.3,176.46 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:178.2,178.16 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:178.16,180.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:182.2,182.44 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:185.53,190.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:190.16,192.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:193.2,194.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:194.16,196.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:197.2,197.12 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:205.91,211.33 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:211.33,214.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:218.2,218.26 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:218.26,220.44 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:220.44,221.12 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:223.3,223.17 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:223.17,225.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:226.3,229.17 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:229.17,231.4 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:232.3,232.29 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:235.2,235.17 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:238.48,241.2 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:243.49,246.2 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:250.64,252.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:252.16,254.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/context.go:255.2,255.77 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/dedent.go:9.30,13.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/dockerfile.go:12.50,29.2 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:48.51,79.2 9 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:81.38,82.16 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:82.16,84.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:85.2,85.87 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:88.36,89.17 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:89.17,91.17 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:91.17,93.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:94.3,94.40 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:96.2,96.23 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:96.23,98.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:99.2,99.20 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:99.20,101.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:102.2,102.14 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:107.43,108.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:108.14,110.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:111.2,111.25 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:124.52,129.2 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:131.40,132.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:132.14,134.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:135.2,136.18 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:136.18,138.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:139.2,139.18 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:139.18,141.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:143.2,150.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:157.49,160.2 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:162.37,163.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:163.14,165.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:166.2,166.79 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:184.51,213.2 8 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:215.39,216.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:216.14,218.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:219.2,220.19 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:220.19,222.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:223.2,223.27 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:223.27,225.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:226.2,226.23 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:226.23,228.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:229.2,229.32 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:229.32,231.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:232.2,232.28 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:232.28,234.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:235.2,235.21 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:235.21,237.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:238.2,238.20 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:238.20,240.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:241.2,248.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:255.54,257.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:259.42,260.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:260.14,262.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:263.2,263.82 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:270.39,271.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:271.14,273.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:274.2,274.50 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:277.51,279.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:285.37,286.14 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:286.14,288.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:289.2,289.48 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:296.53,299.2 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:301.40,302.18 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:302.18,304.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:305.2,305.49 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:314.61,322.2 6 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:324.48,325.29 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:325.29,327.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:328.2,329.25 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:329.25,331.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:332.2,332.28 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:332.28,334.14 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:334.14,336.4 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:337.3,337.65 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:339.2,339.31 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:339.31,341.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:342.2,342.33 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:349.42,351.28 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:351.28,353.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:354.2,354.33 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:357.55,359.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:365.48,367.34 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:367.34,369.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:370.2,371.33 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:374.61,378.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/export.go:380.61,382.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:24.45,26.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:26.16,28.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:30.2,31.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:31.16,33.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:34.2,40.15 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:49.64,55.43 4 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:55.43,57.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:59.2,60.70 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:60.70,62.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:63.2,67.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:67.16,69.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:74.2,74.42 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:74.42,76.17 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:76.17,78.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:79.3,82.17 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:82.17,84.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:85.2,86.31 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:86.31,87.23 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:87.23,88.13 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:90.4,90.40 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:90.40,91.13 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:93.4,93.23 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:93.23,94.13 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:96.4,97.18 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:97.18,98.13 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:100.4,100.28 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:100.28,101.24 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:101.24,102.26 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:104.5,104.66 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:104.66,105.26 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:111.4,112.9 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:119.2,120.39 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:120.39,122.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/host.go:124.2,127.20 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:62.45,83.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:112.50,285.2 23 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:297.51,328.2 4 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:330.96,333.55 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:333.55,335.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:337.2,344.33 4 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:354.47,356.38 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:356.38,358.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:361.2,363.58 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:363.58,365.26 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:365.26,366.38 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:366.38,368.5 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:391.2,391.28 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:398.39,400.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:402.63,404.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:406.62,432.2 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:434.39,438.2 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:441.40,442.13 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:442.13,444.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:445.2,445.31 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:445.31,446.17 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:446.17,448.4 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:450.2,450.14 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:453.50,454.30 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:454.30,456.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:457.2,457.22 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:467.58,469.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:471.32,473.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:475.45,477.30 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:477.30,479.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:480.2,480.35 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:483.34,485.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:490.20,492.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:492.16,494.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:496.2,496.26 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:496.26,501.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:503.2,503.54 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:503.54,507.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:509.2,511.8 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:517.87,520.25 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:520.25,524.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:525.2,525.24 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:525.24,529.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:530.2,530.49 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:530.49,534.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:536.2,536.31 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:536.31,538.53 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:538.53,539.66 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:539.66,541.62 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:541.62,546.6 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:548.9,548.84 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:548.84,553.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:556.2,556.34 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:556.34,558.54 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:558.54,561.4 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:564.2,564.32 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:564.32,566.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:570.2,573.19 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:573.19,575.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:576.2,576.19 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:576.19,578.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:579.2,579.37 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:579.37,580.23 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:580.23,581.12 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:583.3,583.45 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:583.45,591.12 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:593.3,594.17 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:594.17,596.12 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:598.3,599.74 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:599.74,607.12 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:609.3,609.33 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:612.2,612.13 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:612.13,614.29 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:614.29,615.25 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:615.25,617.5 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:621.2,622.39 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:622.39,624.17 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:624.17,626.12 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:628.3,628.44 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:631.2,632.39 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:632.39,633.23 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:633.23,634.12 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:636.3,636.45 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:636.45,644.12 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:646.3,647.17 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:647.17,649.12 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:651.3,651.23 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:651.23,652.12 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:654.3,654.43 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:657.2,658.37 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:658.37,659.23 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:659.23,660.12 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:662.3,662.45 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:662.45,670.12 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:672.3,673.17 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:673.17,675.12 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:677.3,677.23 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:677.23,678.12 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:680.3,680.39 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:683.2,684.33 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:684.33,686.17 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:686.17,688.12 2 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:690.3,690.23 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:690.23,691.12 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:693.3,693.31 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:696.2,696.76 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:696.76,704.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:706.2,706.34 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:706.34,707.47 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:707.47,709.4 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:712.2,713.37 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:713.37,718.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:720.2,741.23 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:751.23,755.16 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:755.16,757.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:759.2,760.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:760.16,762.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:763.2,763.9 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:763.9,765.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:767.2,768.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:768.16,770.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:772.2,777.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:777.16,779.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:780.2,782.46 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:782.46,784.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:785.2,785.35 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:785.35,788.3 2 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:790.2,791.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:791.16,793.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:795.2,795.41 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:795.41,798.17 3 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:798.17,800.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:805.2,805.30 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:805.30,806.74 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:806.74,808.4 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:811.2,811.24 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:811.24,814.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:818.2,818.33 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:818.33,820.10 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:820.10,821.12 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:824.3,825.8 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:828.2,828.19 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:837.31,840.2 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:854.3,856.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:856.16,858.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:867.2,867.25 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:867.25,870.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:872.2,875.33 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:875.33,877.10 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:877.10,880.9 2 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:884.3,885.17 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:885.17,887.12 2 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:890.3,890.27 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:890.27,891.87 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:891.87,893.13 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:895.4,895.20 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:895.20,897.13 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:900.4,901.9 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:907.2,907.49 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:907.49,909.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:911.2,913.32 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:923.9,925.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:925.16,927.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:929.2,931.33 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:931.33,933.17 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:933.17,934.12 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:936.3,937.30 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:937.30,938.12 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:940.3,942.31 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:942.31,943.23 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:943.23,945.5 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:946.4,946.24 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:946.24,948.5 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:954.2,954.17 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:964.34,968.54 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:968.54,970.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:971.2,971.56 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:971.56,973.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:974.2,974.48 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:974.48,976.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:977.2,977.52 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:977.52,979.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:980.2,980.56 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:980.56,982.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:983.2,983.52 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:983.52,985.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:986.2,986.52 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:986.52,988.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:989.2,989.64 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:989.64,991.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:992.2,992.58 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:992.58,994.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:995.2,995.54 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:995.54,997.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:999.2,999.58 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:999.58,1001.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1002.2,1002.50 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1002.50,1004.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1005.2,1005.28 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1005.28,1007.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1008.2,1008.34 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1008.34,1010.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1011.2,1011.52 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1011.52,1013.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1014.2,1014.56 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1014.56,1016.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1017.2,1017.28 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1017.28,1019.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1020.2,1020.28 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1020.28,1022.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1023.2,1023.52 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1023.52,1025.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1026.2,1026.44 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1026.44,1028.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1029.2,1029.46 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1029.46,1031.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1032.2,1032.50 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1032.50,1034.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1038.2,1038.68 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1038.68,1040.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1043.2,1048.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1048.16,1050.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1051.2,1051.30 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1051.30,1053.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1056.2,1056.50 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1056.50,1058.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1058.8,1059.42 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1059.42,1061.74 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1061.74,1062.13 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1064.4,1065.9 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1069.2,1073.8 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1076.41,1078.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1078.16,1080.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1081.2,1082.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1082.16,1084.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1085.2,1085.12 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1091.51,1093.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1093.16,1095.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1096.2,1097.48 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1097.48,1099.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1101.2,1104.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1104.16,1106.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/image.go:1108.2,1108.28 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:40.46,50.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:52.50,71.2 4 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:78.32,81.2 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:89.24,93.16 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:93.16,95.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:97.2,97.13 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:97.13,99.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:103.2,104.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:104.16,106.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:108.2,109.19 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:117.44,122.16 4 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:122.16,124.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:132.2,133.84 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:133.84,136.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:137.2,137.85 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:137.85,140.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:141.2,141.16 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:141.16,143.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:145.2,145.49 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:145.49,147.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:149.2,149.32 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:157.48,159.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:159.16,161.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:176.2,176.74 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:176.74,184.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:186.2,186.35 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:186.35,187.61 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:187.61,195.4 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:198.2,198.28 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:201.82,203.16 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:203.16,205.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:206.2,208.70 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:208.70,210.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:211.2,211.12 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:219.34,223.26 3 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:223.26,225.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:226.2,226.52 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:226.52,228.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:229.2,229.52 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:229.52,231.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:232.2,232.54 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:232.54,234.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:237.2,241.8 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:248.19,251.55 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:251.55,253.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/images.go:255.2,259.33 4 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/network.go:15.60,30.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/platform.go:26.54,57.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/platform.go:59.35,61.2 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:14.49,16.26 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:16.26,17.17 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:17.17,18.12 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:20.3,20.29 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:22.2,22.15 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:28.43,29.16 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:29.16,31.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:32.2,32.16 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:39.43,40.16 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:40.16,42.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:43.2,43.41 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:52.51,53.16 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:53.16,55.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:56.2,56.44 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:62.64,63.31 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:63.31,65.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:66.2,68.26 3 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:68.26,69.20 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:69.20,70.12 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:72.3,72.20 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:72.20,73.12 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:75.3,75.22 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:77.2,77.17 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:82.59,83.38 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:83.38,85.3 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:87.2,89.29 3 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:89.29,90.42 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:90.42,91.12 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:93.3,93.15 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/preview.go:96.2,99.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/ssh.go:14.43,31.2 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/ssh.go:33.30,34.16 1 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/ssh.go:34.16,36.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/ssh.go:38.2,40.22 2 1
-github.com/pulumi/pulumi-docker/provider/v4/internal/ssh.go:40.22,42.3 1 0
-github.com/pulumi/pulumi-docker/provider/v4/internal/ssh.go:44.2,44.10 1 1
diff --git a/provider/internal/dedent.go b/provider/internal/dedent.go
deleted file mode 100644
index 613496d..0000000
--- a/provider/internal/dedent.go
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "strings"
-
- dd "github.com/muesli/reflow/dedent"
-)
-
-func dedent(s string) string {
- return strings.TrimSpace(dd.String(
- strings.ReplaceAll(s, `"`, "`"),
- ))
-}
diff --git a/provider/internal/dedent_test.go b/provider/internal/dedent_test.go
deleted file mode 100644
index 5f20844..0000000
--- a/provider/internal/dedent_test.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestDedent(t *testing.T) {
- t.Parallel()
- tests := []struct {
- name string
- given string
- want string
- }{
- {
- name: "simple case",
- given: `
- An optional map of named build-time argument variables to set during
- the Docker build. This flag allows you to pass build-time variables that
- can be accessed like environment variables inside the "RUN"
- instruction.`,
- want: `An optional map of named build-time argument variables to set during
-the Docker build. This flag allows you to pass build-time variables that
-can be accessed like environment variables inside the ` + "`RUN`\n" + `instruction.`,
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
- actual := dedent(tt.given)
- assert.Equal(t, tt.want, actual)
- })
- }
-}
diff --git a/provider/internal/doc.go b/provider/internal/doc.go
deleted file mode 100644
index ac50355..0000000
--- a/provider/internal/doc.go
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-// Package internal contains our clients, validation, and provider
-// implementation for interacting with Docker's buildx APIs.
-//
-// The provider has two primary modes of operation when building an image. The
-// default behavior is to use an embedded Docker CLI, which does not require to
-// actually be installed on a host in order to perform builds (a build daemon
-// must still be accessible locally or remotely). The second mode execs a
-// "docker-buildx" binary on the host to perform builds. This second mode was
-// added primarily for compatibility with Docker Build Cloud, which requires a
-// custom docker-buildx binary.
-//
-// # CLIs
-//
-// In both execution modes we have several CLI clients. The first client is
-// scoped to the host and initialized as part of the provider's Configure call.
-// We use this CLI for host-level operations, in particular when we potentially
-// initialize a new buildx builder and when we fetch existing credentials on
-// the host.
-//
-// Each operation then has a CLI instance scoped to the life of the operation.
-// This allows us to layer resource-scoped credentials on top of the host's
-// existing credentials, and in practice Docker seems to handle these
-// connections more reliably than a single CLI for all operations.
-//
-// # Credentials
-//
-// When using the embedded Docker client, secrets are communicated to the build
-// daemon natively via gRPC callbacks. When running in exec mode, credentials
-// must be communicated to the buildx binary via a configuration file. In order
-// to not pollute the host's existing credentials with e.g. short-lived ECR
-// tokens, we copy a small subset of the host's Docker config to a temporary
-// directory and use that for the lifetime of the exec operation.
-//
-// # Preview mode
-//
-// The pulumi-go-provider primarily operates on simple Go structs and doesn't
-// currently have a way to distinguish whether a value is unknown or empty. We
-// ignore anything that is a zero value during previews before we apply
-// validation or perform builds.
-//
-// # Diffs
-//
-// Another limitation of pulumi-go-provider is that it doesn't currently allow
-// us to override the default Diff behavior. We intentionally apply
-// "ignoreChanges" semantics to registry passwords, in order to reduce noise
-// and unnecessary updates, but as a result we have to re-implement Diff from
-// the ground up. This implementation is not nearly as rich as the default
-// experience and should be replaced when an alternative is available.
-package internal
diff --git a/provider/internal/dockerfile.go b/provider/internal/dockerfile.go
deleted file mode 100644
index 4d17a6c..0000000
--- a/provider/internal/dockerfile.go
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "bytes"
- "errors"
- "io"
- "os"
- "path/filepath"
- "strings"
-
- buildx "github.com/docker/buildx/build"
- "github.com/moby/buildkit/frontend/dockerfile/instructions"
- "github.com/moby/buildkit/frontend/dockerfile/parser"
-
- "github.com/pulumi/pulumi-go-provider/infer"
-)
-
-// Dockerfile references a local, remote, or inline Dockerfile.
-type Dockerfile struct {
- Location string `pulumi:"location,optional"`
- Inline string `pulumi:"inline,optional"`
-}
-
-// Annotate sets docstrings on Dockerfile.
-func (d *Dockerfile) Annotate(a infer.Annotator) {
- a.Describe(&d.Location, dedent(`
- Location of the Dockerfile to use.
-
- Can be a relative or absolute path to a local file, or a remote URL.
-
- Defaults to "${context.location}/Dockerfile" if context is on-disk.
-
- Conflicts with "inline".
- `))
- a.Describe(&d.Inline, dedent(`
- Raw Dockerfile contents.
-
- Conflicts with "location".
-
- Equivalent to invoking Docker with "-f -".
- `))
-}
-
-func (d *Dockerfile) validate(preview bool, c *Context) error {
- if d.Location != "" && d.Inline != "" {
- return newCheckFailure(
- errors.New(`only specify "file" or "inline", not both`),
- "dockerfile",
- )
- }
-
- if d.Location != "" {
- if buildx.IsRemoteURL(d.Location) {
- return nil
- }
- abs, err := filepath.Abs(d.Location)
- if err != nil {
- return err
- }
- f, err := os.Open(filepath.Clean(abs))
- if err != nil {
- return newCheckFailure(err, "dockerfile.location")
- }
- if err := parseDockerfile(f); err != nil {
- return newCheckFailure(err, "dockerfile.location")
- }
- return nil
- }
-
- if d.Inline != "" {
- err := parseDockerfile(strings.NewReader(d.Inline))
- if err != nil {
- return newCheckFailure(err, "dockerfile.inline")
- }
- return nil
- }
-
- if !preview && c != nil && !buildx.IsRemoteURL(c.Location) {
- return newCheckFailure(errors.New("missing 'location' or 'inline'"), "dockerfile")
- }
-
- return nil
-}
-
-func parseDockerfile(r io.Reader) error {
- df, _ := io.ReadAll(r)
- syntax, _, _, _ := parser.DetectSyntax(df)
- if syntax == "" {
- syntax = os.Getenv("BUILDKIT_SYNTAX")
- }
-
- // Disable validation if this uses a custom syntax.
- if syntax != "" && syntax != "docker/dockerfile:1" {
- return nil
- }
-
- parsed, err := parser.Parse(bytes.NewReader(df))
- if err != nil {
- return newCheckFailure(err, "dockerfile")
- }
-
- _, _, err = instructions.Parse(parsed.AST, nil)
- if err != nil {
- return newCheckFailure(err, "dockerfile")
- }
-
- return nil
-}
diff --git a/provider/internal/dockerfile_test.go b/provider/internal/dockerfile_test.go
deleted file mode 100644
index a645e4c..0000000
--- a/provider/internal/dockerfile_test.go
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestValidateDockerfile(t *testing.T) {
- t.Parallel()
- tests := []struct {
- name string
- d Dockerfile
- givenC Context
- preview bool
-
- wantErr string
- }{
- {
- name: "relative",
- d: Dockerfile{
- Location: "../internal/../internal/testdata/noop/Dockerfile",
- },
- },
- {
- name: "missing file",
- d: Dockerfile{
- Location: "/does/not/exist/Dockerfile",
- },
- wantErr: "no such file",
- },
- {
- name: "invalid syntax",
- d: Dockerfile{
- Location: "testdata/Dockerfile.invalid",
- },
- wantErr: "unknown instruction: RUNN",
- },
- {
- name: "invalid syntax inline",
- d: Dockerfile{
- Inline: "RUNN it",
- },
- wantErr: "unknown instruction: RUNN",
- },
- {
- name: "invalid syntax inline with default syntax directive",
- d: Dockerfile{
- Inline: `# syntax=docker/dockerfile:1
- RUNN it`,
- },
- wantErr: "unknown instruction: RUNN",
- },
- {
- name: "valid syntax inline",
- d: Dockerfile{
- Inline: "FROM scratch",
- },
- },
- {
- name: "valid custom syntax inline",
- d: Dockerfile{
- Inline: `# syntax=docker.io/docker/dockerfile:1.7-labs
-FROM public.ecr.aws/docker/library/node:22-alpine AS base
-
-WORKDIR /app
-COPY --parents ./package.json ./package-lock.json ./apps/*/package.json ./packages/*/package.json ./
-`,
- },
- },
- {
- name: "unset",
- d: Dockerfile{},
- wantErr: "missing 'location' or 'inline'",
- },
- {
- name: "unset with remote context",
- d: Dockerfile{},
- givenC: Context{Location: "https://github.com/foobar"},
- },
- {
- name: "preview",
- d: Dockerfile{},
- preview: true,
- },
- {
- name: "over-specified",
- d: Dockerfile{Location: ".", Inline: "FROM scratch"},
- wantErr: `only specify "file" or "inline", not both`,
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
-
- err := tt.d.validate(tt.preview, &tt.givenC)
-
- if tt.wantErr == "" {
- assert.NoError(t, err)
- } else {
- assert.ErrorContains(t, err, tt.wantErr)
- }
- })
- }
-}
diff --git a/provider/internal/embed/image-examples.md b/provider/internal/embed/image-examples.md
deleted file mode 100644
index ec09501..0000000
--- a/provider/internal/embed/image-examples.md
+++ /dev/null
@@ -1,1862 +0,0 @@
-{{% examples %}}
-## Example Usage
-{{% example %}}
-### Push to AWS ECR with caching
-
-```typescript
-import * as pulumi from "@pulumi/pulumi";
-import * as aws from "@pulumi/aws";
-import * as docker_build from "@pulumi/docker-build";
-
-const ecrRepository = new aws.ecr.Repository("ecr-repository", {});
-const authToken = aws.ecr.getAuthorizationTokenOutput({
- registryId: ecrRepository.registryId,
-});
-const myImage = new docker_build.Image("my-image", {
- cacheFrom: [{
- registry: {
- ref: pulumi.interpolate`${ecrRepository.repositoryUrl}:cache`,
- },
- }],
- cacheTo: [{
- registry: {
- imageManifest: true,
- ociMediaTypes: true,
- ref: pulumi.interpolate`${ecrRepository.repositoryUrl}:cache`,
- },
- }],
- context: {
- location: "./app",
- },
- push: true,
- registries: [{
- address: ecrRepository.repositoryUrl,
- password: authToken.apply(authToken => authToken.password),
- username: authToken.apply(authToken => authToken.userName),
- }],
- tags: [pulumi.interpolate`${ecrRepository.repositoryUrl}:latest`],
-});
-export const ref = myImage.ref;
-```
-```python
-import pulumi
-import pulumi_aws as aws
-import pulumi_docker_build as docker_build
-
-ecr_repository = aws.ecr.Repository("ecr-repository")
-auth_token = aws.ecr.get_authorization_token_output(registry_id=ecr_repository.registry_id)
-my_image = docker_build.Image("my-image",
- cache_from=[{
- "registry": {
- "ref": ecr_repository.repository_url.apply(lambda repository_url: f"{repository_url}:cache"),
- },
- }],
- cache_to=[{
- "registry": {
- "image_manifest": True,
- "oci_media_types": True,
- "ref": ecr_repository.repository_url.apply(lambda repository_url: f"{repository_url}:cache"),
- },
- }],
- context={
- "location": "./app",
- },
- push=True,
- registries=[{
- "address": ecr_repository.repository_url,
- "password": auth_token.password,
- "username": auth_token.user_name,
- }],
- tags=[ecr_repository.repository_url.apply(lambda repository_url: f"{repository_url}:latest")])
-pulumi.export("ref", my_image.ref)
-```
-```csharp
-using System.Collections.Generic;
-using System.Linq;
-using Pulumi;
-using Aws = Pulumi.Aws;
-using DockerBuild = Pulumi.DockerBuild;
-
-return await Deployment.RunAsync(() =>
-{
- var ecrRepository = new Aws.Ecr.Repository("ecr-repository");
-
- var authToken = Aws.Ecr.GetAuthorizationToken.Invoke(new()
- {
- RegistryId = ecrRepository.RegistryId,
- });
-
- var myImage = new DockerBuild.Image("my-image", new()
- {
- CacheFrom = new[]
- {
- new DockerBuild.Inputs.CacheFromArgs
- {
- Registry = new DockerBuild.Inputs.CacheFromRegistryArgs
- {
- Ref = ecrRepository.RepositoryUrl.Apply(repositoryUrl => $"{repositoryUrl}:cache"),
- },
- },
- },
- CacheTo = new[]
- {
- new DockerBuild.Inputs.CacheToArgs
- {
- Registry = new DockerBuild.Inputs.CacheToRegistryArgs
- {
- ImageManifest = true,
- OciMediaTypes = true,
- Ref = ecrRepository.RepositoryUrl.Apply(repositoryUrl => $"{repositoryUrl}:cache"),
- },
- },
- },
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "./app",
- },
- Push = true,
- Registries = new[]
- {
- new DockerBuild.Inputs.RegistryArgs
- {
- Address = ecrRepository.RepositoryUrl,
- Password = authToken.Apply(getAuthorizationTokenResult => getAuthorizationTokenResult.Password),
- Username = authToken.Apply(getAuthorizationTokenResult => getAuthorizationTokenResult.UserName),
- },
- },
- Tags = new[]
- {
- ecrRepository.RepositoryUrl.Apply(repositoryUrl => $"{repositoryUrl}:latest"),
- },
- });
-
- return new Dictionary
- {
- ["ref"] = myImage.Ref,
- };
-});
-
-```
-```go
-package main
-
-import (
- "fmt"
-
- "github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ecr"
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
-)
-
-func main() {
- pulumi.Run(func(ctx *pulumi.Context) error {
- ecrRepository, err := ecr.NewRepository(ctx, "ecr-repository", nil)
- if err != nil {
- return err
- }
- authToken := ecr.GetAuthorizationTokenOutput(ctx, ecr.GetAuthorizationTokenOutputArgs{
- RegistryId: ecrRepository.RegistryId,
- }, nil)
- myImage, err := dockerbuild.NewImage(ctx, "my-image", &dockerbuild.ImageArgs{
- CacheFrom: dockerbuild.CacheFromArray{
- &dockerbuild.CacheFromArgs{
- Registry: &dockerbuild.CacheFromRegistryArgs{
- Ref: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {
- return fmt.Sprintf("%v:cache", repositoryUrl), nil
- }).(pulumi.StringOutput),
- },
- },
- },
- CacheTo: dockerbuild.CacheToArray{
- &dockerbuild.CacheToArgs{
- Registry: &dockerbuild.CacheToRegistryArgs{
- ImageManifest: pulumi.Bool(true),
- OciMediaTypes: pulumi.Bool(true),
- Ref: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {
- return fmt.Sprintf("%v:cache", repositoryUrl), nil
- }).(pulumi.StringOutput),
- },
- },
- },
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("./app"),
- },
- Push: pulumi.Bool(true),
- Registries: dockerbuild.RegistryArray{
- &dockerbuild.RegistryArgs{
- Address: ecrRepository.RepositoryUrl,
- Password: authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) {
- return &authToken.Password, nil
- }).(pulumi.StringPtrOutput),
- Username: authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) {
- return &authToken.UserName, nil
- }).(pulumi.StringPtrOutput),
- },
- },
- Tags: pulumi.StringArray{
- ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {
- return fmt.Sprintf("%v:latest", repositoryUrl), nil
- }).(pulumi.StringOutput),
- },
- })
- if err != nil {
- return err
- }
- ctx.Export("ref", myImage.Ref)
- return nil
- })
-}
-```
-```yaml
-description: Push to AWS ECR with caching
-name: ecr
-outputs:
- ref: ${my-image.ref}
-resources:
- ecr-repository:
- type: aws:ecr:Repository
- my-image:
- properties:
- cacheFrom:
- - registry:
- ref: ${ecr-repository.repositoryUrl}:cache
- cacheTo:
- - registry:
- imageManifest: true
- ociMediaTypes: true
- ref: ${ecr-repository.repositoryUrl}:cache
- context:
- location: ./app
- push: true
- registries:
- - address: ${ecr-repository.repositoryUrl}
- password: ${auth-token.password}
- username: ${auth-token.userName}
- tags:
- - ${ecr-repository.repositoryUrl}:latest
- type: docker-build:Image
-runtime: yaml
-variables:
- auth-token:
- fn::aws:ecr:getAuthorizationToken:
- registryId: ${ecr-repository.registryId}
-```
-```java
-package generated_program;
-
-import com.pulumi.Context;
-import com.pulumi.Pulumi;
-import com.pulumi.core.Output;
-import com.pulumi.aws.ecr.Repository;
-import com.pulumi.aws.ecr.EcrFunctions;
-import com.pulumi.aws.ecr.inputs.GetAuthorizationTokenArgs;
-import com.pulumi.dockerbuild.Image;
-import com.pulumi.dockerbuild.ImageArgs;
-import com.pulumi.dockerbuild.inputs.CacheFromArgs;
-import com.pulumi.dockerbuild.inputs.CacheFromRegistryArgs;
-import com.pulumi.dockerbuild.inputs.CacheToArgs;
-import com.pulumi.dockerbuild.inputs.CacheToRegistryArgs;
-import com.pulumi.dockerbuild.inputs.BuildContextArgs;
-import com.pulumi.dockerbuild.inputs.RegistryArgs;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-public class App {
- public static void main(String[] args) {
- Pulumi.run(App::stack);
- }
-
- public static void stack(Context ctx) {
- var ecrRepository = new Repository("ecrRepository");
-
- final var authToken = EcrFunctions.getAuthorizationToken(GetAuthorizationTokenArgs.builder()
- .registryId(ecrRepository.registryId())
- .build());
-
- var myImage = new Image("myImage", ImageArgs.builder()
- .cacheFrom(CacheFromArgs.builder()
- .registry(CacheFromRegistryArgs.builder()
- .ref(ecrRepository.repositoryUrl().applyValue(repositoryUrl -> String.format("%s:cache", repositoryUrl)))
- .build())
- .build())
- .cacheTo(CacheToArgs.builder()
- .registry(CacheToRegistryArgs.builder()
- .imageManifest(true)
- .ociMediaTypes(true)
- .ref(ecrRepository.repositoryUrl().applyValue(repositoryUrl -> String.format("%s:cache", repositoryUrl)))
- .build())
- .build())
- .context(BuildContextArgs.builder()
- .location("./app")
- .build())
- .push(true)
- .registries(RegistryArgs.builder()
- .address(ecrRepository.repositoryUrl())
- .password(authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult).applyValue(authToken -> authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult.password())))
- .username(authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult).applyValue(authToken -> authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult.userName())))
- .build())
- .tags(ecrRepository.repositoryUrl().applyValue(repositoryUrl -> String.format("%s:latest", repositoryUrl)))
- .build());
-
- ctx.export("ref", myImage.ref());
- }
-}
-```
-{{% /example %}}
-{{% example %}}
-### Multi-platform image
-
-```typescript
-import * as pulumi from "@pulumi/pulumi";
-import * as docker_build from "@pulumi/docker-build";
-
-const image = new docker_build.Image("image", {
- context: {
- location: "app",
- },
- platforms: [
- docker_build.Platform.Plan9_amd64,
- docker_build.Platform.Plan9_386,
- ],
- push: false,
-});
-```
-```python
-import pulumi
-import pulumi_docker_build as docker_build
-
-image = docker_build.Image("image",
- context={
- "location": "app",
- },
- platforms=[
- docker_build.Platform.PLAN9_AMD64,
- docker_build.Platform.PLAN9_386,
- ],
- push=False)
-```
-```csharp
-using System.Collections.Generic;
-using System.Linq;
-using Pulumi;
-using DockerBuild = Pulumi.DockerBuild;
-
-return await Deployment.RunAsync(() =>
-{
- var image = new DockerBuild.Image("image", new()
- {
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "app",
- },
- Platforms = new[]
- {
- DockerBuild.Platform.Plan9_amd64,
- DockerBuild.Platform.Plan9_386,
- },
- Push = false,
- });
-
-});
-
-```
-```go
-package main
-
-import (
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
-)
-
-func main() {
- pulumi.Run(func(ctx *pulumi.Context) error {
- _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("app"),
- },
- Platforms: docker - build.PlatformArray{
- dockerbuild.Platform_Plan9_amd64,
- dockerbuild.Platform_Plan9_386,
- },
- Push: pulumi.Bool(false),
- })
- if err != nil {
- return err
- }
- return nil
- })
-}
-```
-```yaml
-description: Multi-platform image
-name: multi-platform
-resources:
- image:
- properties:
- context:
- location: app
- platforms:
- - plan9/amd64
- - plan9/386
- push: false
- type: docker-build:Image
-runtime: yaml
-```
-```java
-package generated_program;
-
-import com.pulumi.Context;
-import com.pulumi.Pulumi;
-import com.pulumi.core.Output;
-import com.pulumi.dockerbuild.Image;
-import com.pulumi.dockerbuild.ImageArgs;
-import com.pulumi.dockerbuild.inputs.BuildContextArgs;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-public class App {
- public static void main(String[] args) {
- Pulumi.run(App::stack);
- }
-
- public static void stack(Context ctx) {
- var image = new Image("image", ImageArgs.builder()
- .context(BuildContextArgs.builder()
- .location("app")
- .build())
- .platforms(
- "plan9/amd64",
- "plan9/386")
- .push(false)
- .build());
-
- }
-}
-```
-{{% /example %}}
-{{% example %}}
-### Registry export
-
-```typescript
-import * as pulumi from "@pulumi/pulumi";
-import * as docker_build from "@pulumi/docker-build";
-
-const image = new docker_build.Image("image", {
- context: {
- location: "app",
- },
- push: true,
- registries: [{
- address: "docker.io",
- password: dockerHubPassword,
- username: "pulumibot",
- }],
- tags: ["docker.io/pulumi/pulumi:3.107.0"],
-});
-export const ref = myImage.ref;
-```
-```python
-import pulumi
-import pulumi_docker_build as docker_build
-
-image = docker_build.Image("image",
- context={
- "location": "app",
- },
- push=True,
- registries=[{
- "address": "docker.io",
- "password": docker_hub_password,
- "username": "pulumibot",
- }],
- tags=["docker.io/pulumi/pulumi:3.107.0"])
-pulumi.export("ref", my_image["ref"])
-```
-```csharp
-using System.Collections.Generic;
-using System.Linq;
-using Pulumi;
-using DockerBuild = Pulumi.DockerBuild;
-
-return await Deployment.RunAsync(() =>
-{
- var image = new DockerBuild.Image("image", new()
- {
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "app",
- },
- Push = true,
- Registries = new[]
- {
- new DockerBuild.Inputs.RegistryArgs
- {
- Address = "docker.io",
- Password = dockerHubPassword,
- Username = "pulumibot",
- },
- },
- Tags = new[]
- {
- "docker.io/pulumi/pulumi:3.107.0",
- },
- });
-
- return new Dictionary
- {
- ["ref"] = myImage.Ref,
- };
-});
-
-```
-```go
-package main
-
-import (
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
-)
-
-func main() {
- pulumi.Run(func(ctx *pulumi.Context) error {
- _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("app"),
- },
- Push: pulumi.Bool(true),
- Registries: dockerbuild.RegistryArray{
- &dockerbuild.RegistryArgs{
- Address: pulumi.String("docker.io"),
- Password: pulumi.Any(dockerHubPassword),
- Username: pulumi.String("pulumibot"),
- },
- },
- Tags: pulumi.StringArray{
- pulumi.String("docker.io/pulumi/pulumi:3.107.0"),
- },
- })
- if err != nil {
- return err
- }
- ctx.Export("ref", myImage.Ref)
- return nil
- })
-}
-```
-```yaml
-description: Registry export
-name: registry
-outputs:
- ref: ${my-image.ref}
-resources:
- image:
- properties:
- context:
- location: app
- push: true
- registries:
- - address: docker.io
- password: ${dockerHubPassword}
- username: pulumibot
- tags:
- - docker.io/pulumi/pulumi:3.107.0
- type: docker-build:Image
-runtime: yaml
-```
-```java
-package generated_program;
-
-import com.pulumi.Context;
-import com.pulumi.Pulumi;
-import com.pulumi.core.Output;
-import com.pulumi.dockerbuild.Image;
-import com.pulumi.dockerbuild.ImageArgs;
-import com.pulumi.dockerbuild.inputs.BuildContextArgs;
-import com.pulumi.dockerbuild.inputs.RegistryArgs;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-public class App {
- public static void main(String[] args) {
- Pulumi.run(App::stack);
- }
-
- public static void stack(Context ctx) {
- var image = new Image("image", ImageArgs.builder()
- .context(BuildContextArgs.builder()
- .location("app")
- .build())
- .push(true)
- .registries(RegistryArgs.builder()
- .address("docker.io")
- .password(dockerHubPassword)
- .username("pulumibot")
- .build())
- .tags("docker.io/pulumi/pulumi:3.107.0")
- .build());
-
- ctx.export("ref", myImage.ref());
- }
-}
-```
-{{% /example %}}
-{{% example %}}
-### Caching
-
-```typescript
-import * as pulumi from "@pulumi/pulumi";
-import * as docker_build from "@pulumi/docker-build";
-
-const image = new docker_build.Image("image", {
- cacheFrom: [{
- local: {
- src: "tmp/cache",
- },
- }],
- cacheTo: [{
- local: {
- dest: "tmp/cache",
- mode: docker_build.CacheMode.Max,
- },
- }],
- context: {
- location: "app",
- },
- push: false,
-});
-```
-```python
-import pulumi
-import pulumi_docker_build as docker_build
-
-image = docker_build.Image("image",
- cache_from=[{
- "local": {
- "src": "tmp/cache",
- },
- }],
- cache_to=[{
- "local": {
- "dest": "tmp/cache",
- "mode": docker_build.CacheMode.MAX,
- },
- }],
- context={
- "location": "app",
- },
- push=False)
-```
-```csharp
-using System.Collections.Generic;
-using System.Linq;
-using Pulumi;
-using DockerBuild = Pulumi.DockerBuild;
-
-return await Deployment.RunAsync(() =>
-{
- var image = new DockerBuild.Image("image", new()
- {
- CacheFrom = new[]
- {
- new DockerBuild.Inputs.CacheFromArgs
- {
- Local = new DockerBuild.Inputs.CacheFromLocalArgs
- {
- Src = "tmp/cache",
- },
- },
- },
- CacheTo = new[]
- {
- new DockerBuild.Inputs.CacheToArgs
- {
- Local = new DockerBuild.Inputs.CacheToLocalArgs
- {
- Dest = "tmp/cache",
- Mode = DockerBuild.CacheMode.Max,
- },
- },
- },
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "app",
- },
- Push = false,
- });
-
-});
-
-```
-```go
-package main
-
-import (
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
-)
-
-func main() {
- pulumi.Run(func(ctx *pulumi.Context) error {
- _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{
- CacheFrom: dockerbuild.CacheFromArray{
- &dockerbuild.CacheFromArgs{
- Local: &dockerbuild.CacheFromLocalArgs{
- Src: pulumi.String("tmp/cache"),
- },
- },
- },
- CacheTo: dockerbuild.CacheToArray{
- &dockerbuild.CacheToArgs{
- Local: &dockerbuild.CacheToLocalArgs{
- Dest: pulumi.String("tmp/cache"),
- Mode: dockerbuild.CacheModeMax,
- },
- },
- },
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("app"),
- },
- Push: pulumi.Bool(false),
- })
- if err != nil {
- return err
- }
- return nil
- })
-}
-```
-```yaml
-description: Caching
-name: caching
-resources:
- image:
- properties:
- cacheFrom:
- - local:
- src: tmp/cache
- cacheTo:
- - local:
- dest: tmp/cache
- mode: max
- context:
- location: app
- push: false
- type: docker-build:Image
-runtime: yaml
-```
-```java
-package generated_program;
-
-import com.pulumi.Context;
-import com.pulumi.Pulumi;
-import com.pulumi.core.Output;
-import com.pulumi.dockerbuild.Image;
-import com.pulumi.dockerbuild.ImageArgs;
-import com.pulumi.dockerbuild.inputs.CacheFromArgs;
-import com.pulumi.dockerbuild.inputs.CacheFromLocalArgs;
-import com.pulumi.dockerbuild.inputs.CacheToArgs;
-import com.pulumi.dockerbuild.inputs.CacheToLocalArgs;
-import com.pulumi.dockerbuild.inputs.BuildContextArgs;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-public class App {
- public static void main(String[] args) {
- Pulumi.run(App::stack);
- }
-
- public static void stack(Context ctx) {
- var image = new Image("image", ImageArgs.builder()
- .cacheFrom(CacheFromArgs.builder()
- .local(CacheFromLocalArgs.builder()
- .src("tmp/cache")
- .build())
- .build())
- .cacheTo(CacheToArgs.builder()
- .local(CacheToLocalArgs.builder()
- .dest("tmp/cache")
- .mode("max")
- .build())
- .build())
- .context(BuildContextArgs.builder()
- .location("app")
- .build())
- .push(false)
- .build());
-
- }
-}
-```
-{{% /example %}}
-{{% example %}}
-### Docker Build Cloud
-
-```typescript
-import * as pulumi from "@pulumi/pulumi";
-import * as docker_build from "@pulumi/docker-build";
-
-const image = new docker_build.Image("image", {
- builder: {
- name: "cloud-builder-name",
- },
- context: {
- location: "app",
- },
- exec: true,
- push: false,
-});
-```
-```python
-import pulumi
-import pulumi_docker_build as docker_build
-
-image = docker_build.Image("image",
- builder={
- "name": "cloud-builder-name",
- },
- context={
- "location": "app",
- },
- exec_=True,
- push=False)
-```
-```csharp
-using System.Collections.Generic;
-using System.Linq;
-using Pulumi;
-using DockerBuild = Pulumi.DockerBuild;
-
-return await Deployment.RunAsync(() =>
-{
- var image = new DockerBuild.Image("image", new()
- {
- Builder = new DockerBuild.Inputs.BuilderConfigArgs
- {
- Name = "cloud-builder-name",
- },
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "app",
- },
- Exec = true,
- Push = false,
- });
-
-});
-
-```
-```go
-package main
-
-import (
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
-)
-
-func main() {
- pulumi.Run(func(ctx *pulumi.Context) error {
- _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{
- Builder: &dockerbuild.BuilderConfigArgs{
- Name: pulumi.String("cloud-builder-name"),
- },
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("app"),
- },
- Exec: pulumi.Bool(true),
- Push: pulumi.Bool(false),
- })
- if err != nil {
- return err
- }
- return nil
- })
-}
-```
-```yaml
-description: Docker Build Cloud
-name: dbc
-resources:
- image:
- properties:
- builder:
- name: cloud-builder-name
- context:
- location: app
- exec: true
- push: false
- type: docker-build:Image
-runtime: yaml
-```
-```java
-package generated_program;
-
-import com.pulumi.Context;
-import com.pulumi.Pulumi;
-import com.pulumi.core.Output;
-import com.pulumi.dockerbuild.Image;
-import com.pulumi.dockerbuild.ImageArgs;
-import com.pulumi.dockerbuild.inputs.BuilderConfigArgs;
-import com.pulumi.dockerbuild.inputs.BuildContextArgs;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-public class App {
- public static void main(String[] args) {
- Pulumi.run(App::stack);
- }
-
- public static void stack(Context ctx) {
- var image = new Image("image", ImageArgs.builder()
- .builder(BuilderConfigArgs.builder()
- .name("cloud-builder-name")
- .build())
- .context(BuildContextArgs.builder()
- .location("app")
- .build())
- .exec(true)
- .push(false)
- .build());
-
- }
-}
-```
-{{% /example %}}
-{{% example %}}
-### Build arguments
-
-```typescript
-import * as pulumi from "@pulumi/pulumi";
-import * as docker_build from "@pulumi/docker-build";
-
-const image = new docker_build.Image("image", {
- buildArgs: {
- SET_ME_TO_TRUE: "true",
- },
- context: {
- location: "app",
- },
- push: false,
-});
-```
-```python
-import pulumi
-import pulumi_docker_build as docker_build
-
-image = docker_build.Image("image",
- build_args={
- "SET_ME_TO_TRUE": "true",
- },
- context={
- "location": "app",
- },
- push=False)
-```
-```csharp
-using System.Collections.Generic;
-using System.Linq;
-using Pulumi;
-using DockerBuild = Pulumi.DockerBuild;
-
-return await Deployment.RunAsync(() =>
-{
- var image = new DockerBuild.Image("image", new()
- {
- BuildArgs =
- {
- { "SET_ME_TO_TRUE", "true" },
- },
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "app",
- },
- Push = false,
- });
-
-});
-
-```
-```go
-package main
-
-import (
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
-)
-
-func main() {
- pulumi.Run(func(ctx *pulumi.Context) error {
- _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{
- BuildArgs: pulumi.StringMap{
- "SET_ME_TO_TRUE": pulumi.String("true"),
- },
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("app"),
- },
- Push: pulumi.Bool(false),
- })
- if err != nil {
- return err
- }
- return nil
- })
-}
-```
-```yaml
-description: Build arguments
-name: build-args
-resources:
- image:
- properties:
- buildArgs:
- SET_ME_TO_TRUE: "true"
- context:
- location: app
- push: false
- type: docker-build:Image
-runtime: yaml
-```
-```java
-package generated_program;
-
-import com.pulumi.Context;
-import com.pulumi.Pulumi;
-import com.pulumi.core.Output;
-import com.pulumi.dockerbuild.Image;
-import com.pulumi.dockerbuild.ImageArgs;
-import com.pulumi.dockerbuild.inputs.BuildContextArgs;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-public class App {
- public static void main(String[] args) {
- Pulumi.run(App::stack);
- }
-
- public static void stack(Context ctx) {
- var image = new Image("image", ImageArgs.builder()
- .buildArgs(Map.of("SET_ME_TO_TRUE", "true"))
- .context(BuildContextArgs.builder()
- .location("app")
- .build())
- .push(false)
- .build());
-
- }
-}
-```
-{{% /example %}}
-{{% example %}}
-### Build target
-
-```typescript
-import * as pulumi from "@pulumi/pulumi";
-import * as docker_build from "@pulumi/docker-build";
-
-const image = new docker_build.Image("image", {
- context: {
- location: "app",
- },
- push: false,
- target: "build-me",
-});
-```
-```python
-import pulumi
-import pulumi_docker_build as docker_build
-
-image = docker_build.Image("image",
- context={
- "location": "app",
- },
- push=False,
- target="build-me")
-```
-```csharp
-using System.Collections.Generic;
-using System.Linq;
-using Pulumi;
-using DockerBuild = Pulumi.DockerBuild;
-
-return await Deployment.RunAsync(() =>
-{
- var image = new DockerBuild.Image("image", new()
- {
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "app",
- },
- Push = false,
- Target = "build-me",
- });
-
-});
-
-```
-```go
-package main
-
-import (
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
-)
-
-func main() {
- pulumi.Run(func(ctx *pulumi.Context) error {
- _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("app"),
- },
- Push: pulumi.Bool(false),
- Target: pulumi.String("build-me"),
- })
- if err != nil {
- return err
- }
- return nil
- })
-}
-```
-```yaml
-description: Build target
-name: build-target
-resources:
- image:
- properties:
- context:
- location: app
- push: false
- target: build-me
- type: docker-build:Image
-runtime: yaml
-```
-```java
-package generated_program;
-
-import com.pulumi.Context;
-import com.pulumi.Pulumi;
-import com.pulumi.core.Output;
-import com.pulumi.dockerbuild.Image;
-import com.pulumi.dockerbuild.ImageArgs;
-import com.pulumi.dockerbuild.inputs.BuildContextArgs;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-public class App {
- public static void main(String[] args) {
- Pulumi.run(App::stack);
- }
-
- public static void stack(Context ctx) {
- var image = new Image("image", ImageArgs.builder()
- .context(BuildContextArgs.builder()
- .location("app")
- .build())
- .push(false)
- .target("build-me")
- .build());
-
- }
-}
-```
-{{% /example %}}
-{{% example %}}
-### Named contexts
-
-```typescript
-import * as pulumi from "@pulumi/pulumi";
-import * as docker_build from "@pulumi/docker-build";
-
-const image = new docker_build.Image("image", {
- context: {
- location: "app",
- named: {
- "golang:latest": {
- location: "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984",
- },
- },
- },
- push: false,
-});
-```
-```python
-import pulumi
-import pulumi_docker_build as docker_build
-
-image = docker_build.Image("image",
- context={
- "location": "app",
- "named": {
- "golang:latest": {
- "location": "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984",
- },
- },
- },
- push=False)
-```
-```csharp
-using System.Collections.Generic;
-using System.Linq;
-using Pulumi;
-using DockerBuild = Pulumi.DockerBuild;
-
-return await Deployment.RunAsync(() =>
-{
- var image = new DockerBuild.Image("image", new()
- {
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "app",
- Named =
- {
- { "golang:latest", new DockerBuild.Inputs.ContextArgs
- {
- Location = "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984",
- } },
- },
- },
- Push = false,
- });
-
-});
-
-```
-```go
-package main
-
-import (
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
-)
-
-func main() {
- pulumi.Run(func(ctx *pulumi.Context) error {
- _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("app"),
- Named: dockerbuild.ContextMap{
- "golang:latest": &dockerbuild.ContextArgs{
- Location: pulumi.String("docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"),
- },
- },
- },
- Push: pulumi.Bool(false),
- })
- if err != nil {
- return err
- }
- return nil
- })
-}
-```
-```yaml
-description: Named contexts
-name: named-contexts
-resources:
- image:
- properties:
- context:
- location: app
- named:
- golang:latest:
- location: docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984
- push: false
- type: docker-build:Image
-runtime: yaml
-```
-```java
-package generated_program;
-
-import com.pulumi.Context;
-import com.pulumi.Pulumi;
-import com.pulumi.core.Output;
-import com.pulumi.dockerbuild.Image;
-import com.pulumi.dockerbuild.ImageArgs;
-import com.pulumi.dockerbuild.inputs.BuildContextArgs;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-public class App {
- public static void main(String[] args) {
- Pulumi.run(App::stack);
- }
-
- public static void stack(Context ctx) {
- var image = new Image("image", ImageArgs.builder()
- .context(BuildContextArgs.builder()
- .location("app")
- .named(Map.of("golang:latest", Map.of("location", "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984")))
- .build())
- .push(false)
- .build());
-
- }
-}
-```
-{{% /example %}}
-{{% example %}}
-### Remote context
-
-```typescript
-import * as pulumi from "@pulumi/pulumi";
-import * as docker_build from "@pulumi/docker-build";
-
-const image = new docker_build.Image("image", {
- context: {
- location: "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
- },
- push: false,
-});
-```
-```python
-import pulumi
-import pulumi_docker_build as docker_build
-
-image = docker_build.Image("image",
- context={
- "location": "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
- },
- push=False)
-```
-```csharp
-using System.Collections.Generic;
-using System.Linq;
-using Pulumi;
-using DockerBuild = Pulumi.DockerBuild;
-
-return await Deployment.RunAsync(() =>
-{
- var image = new DockerBuild.Image("image", new()
- {
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
- },
- Push = false,
- });
-
-});
-
-```
-```go
-package main
-
-import (
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
-)
-
-func main() {
- pulumi.Run(func(ctx *pulumi.Context) error {
- _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"),
- },
- Push: pulumi.Bool(false),
- })
- if err != nil {
- return err
- }
- return nil
- })
-}
-```
-```yaml
-description: Remote context
-name: remote-context
-resources:
- image:
- properties:
- context:
- location: https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile
- push: false
- type: docker-build:Image
-runtime: yaml
-```
-```java
-package generated_program;
-
-import com.pulumi.Context;
-import com.pulumi.Pulumi;
-import com.pulumi.core.Output;
-import com.pulumi.dockerbuild.Image;
-import com.pulumi.dockerbuild.ImageArgs;
-import com.pulumi.dockerbuild.inputs.BuildContextArgs;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-public class App {
- public static void main(String[] args) {
- Pulumi.run(App::stack);
- }
-
- public static void stack(Context ctx) {
- var image = new Image("image", ImageArgs.builder()
- .context(BuildContextArgs.builder()
- .location("https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile")
- .build())
- .push(false)
- .build());
-
- }
-}
-```
-{{% /example %}}
-{{% example %}}
-### Inline Dockerfile
-
-```typescript
-import * as pulumi from "@pulumi/pulumi";
-import * as docker_build from "@pulumi/docker-build";
-
-const image = new docker_build.Image("image", {
- context: {
- location: "app",
- },
- dockerfile: {
- inline: `FROM busybox
-COPY hello.c ./
-`,
- },
- push: false,
-});
-```
-```python
-import pulumi
-import pulumi_docker_build as docker_build
-
-image = docker_build.Image("image",
- context={
- "location": "app",
- },
- dockerfile={
- "inline": """FROM busybox
-COPY hello.c ./
-""",
- },
- push=False)
-```
-```csharp
-using System.Collections.Generic;
-using System.Linq;
-using Pulumi;
-using DockerBuild = Pulumi.DockerBuild;
-
-return await Deployment.RunAsync(() =>
-{
- var image = new DockerBuild.Image("image", new()
- {
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "app",
- },
- Dockerfile = new DockerBuild.Inputs.DockerfileArgs
- {
- Inline = @"FROM busybox
-COPY hello.c ./
-",
- },
- Push = false,
- });
-
-});
-
-```
-```go
-package main
-
-import (
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
-)
-
-func main() {
- pulumi.Run(func(ctx *pulumi.Context) error {
- _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("app"),
- },
- Dockerfile: &dockerbuild.DockerfileArgs{
- Inline: pulumi.String("FROM busybox\nCOPY hello.c ./\n"),
- },
- Push: pulumi.Bool(false),
- })
- if err != nil {
- return err
- }
- return nil
- })
-}
-```
-```yaml
-description: Inline Dockerfile
-name: inline
-resources:
- image:
- properties:
- context:
- location: app
- dockerfile:
- inline: |
- FROM busybox
- COPY hello.c ./
- push: false
- type: docker-build:Image
-runtime: yaml
-```
-```java
-package generated_program;
-
-import com.pulumi.Context;
-import com.pulumi.Pulumi;
-import com.pulumi.core.Output;
-import com.pulumi.dockerbuild.Image;
-import com.pulumi.dockerbuild.ImageArgs;
-import com.pulumi.dockerbuild.inputs.BuildContextArgs;
-import com.pulumi.dockerbuild.inputs.DockerfileArgs;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-public class App {
- public static void main(String[] args) {
- Pulumi.run(App::stack);
- }
-
- public static void stack(Context ctx) {
- var image = new Image("image", ImageArgs.builder()
- .context(BuildContextArgs.builder()
- .location("app")
- .build())
- .dockerfile(DockerfileArgs.builder()
- .inline("""
-FROM busybox
-COPY hello.c ./
- """)
- .build())
- .push(false)
- .build());
-
- }
-}
-```
-{{% /example %}}
-{{% example %}}
-### Remote context
-
-```typescript
-import * as pulumi from "@pulumi/pulumi";
-import * as docker_build from "@pulumi/docker-build";
-
-const image = new docker_build.Image("image", {
- context: {
- location: "https://github.com/docker-library/hello-world.git",
- },
- dockerfile: {
- location: "app/Dockerfile",
- },
- push: false,
-});
-```
-```python
-import pulumi
-import pulumi_docker_build as docker_build
-
-image = docker_build.Image("image",
- context={
- "location": "https://github.com/docker-library/hello-world.git",
- },
- dockerfile={
- "location": "app/Dockerfile",
- },
- push=False)
-```
-```csharp
-using System.Collections.Generic;
-using System.Linq;
-using Pulumi;
-using DockerBuild = Pulumi.DockerBuild;
-
-return await Deployment.RunAsync(() =>
-{
- var image = new DockerBuild.Image("image", new()
- {
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "https://github.com/docker-library/hello-world.git",
- },
- Dockerfile = new DockerBuild.Inputs.DockerfileArgs
- {
- Location = "app/Dockerfile",
- },
- Push = false,
- });
-
-});
-
-```
-```go
-package main
-
-import (
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
-)
-
-func main() {
- pulumi.Run(func(ctx *pulumi.Context) error {
- _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("https://github.com/docker-library/hello-world.git"),
- },
- Dockerfile: &dockerbuild.DockerfileArgs{
- Location: pulumi.String("app/Dockerfile"),
- },
- Push: pulumi.Bool(false),
- })
- if err != nil {
- return err
- }
- return nil
- })
-}
-```
-```yaml
-description: Remote context
-name: remote-context
-resources:
- image:
- properties:
- context:
- location: https://github.com/docker-library/hello-world.git
- dockerfile:
- location: app/Dockerfile
- push: false
- type: docker-build:Image
-runtime: yaml
-```
-```java
-package generated_program;
-
-import com.pulumi.Context;
-import com.pulumi.Pulumi;
-import com.pulumi.core.Output;
-import com.pulumi.dockerbuild.Image;
-import com.pulumi.dockerbuild.ImageArgs;
-import com.pulumi.dockerbuild.inputs.BuildContextArgs;
-import com.pulumi.dockerbuild.inputs.DockerfileArgs;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-public class App {
- public static void main(String[] args) {
- Pulumi.run(App::stack);
- }
-
- public static void stack(Context ctx) {
- var image = new Image("image", ImageArgs.builder()
- .context(BuildContextArgs.builder()
- .location("https://github.com/docker-library/hello-world.git")
- .build())
- .dockerfile(DockerfileArgs.builder()
- .location("app/Dockerfile")
- .build())
- .push(false)
- .build());
-
- }
-}
-```
-{{% /example %}}
-{{% example %}}
-### Local export
-
-```typescript
-import * as pulumi from "@pulumi/pulumi";
-import * as docker_build from "@pulumi/docker-build";
-
-const image = new docker_build.Image("image", {
- context: {
- location: "app",
- },
- exports: [{
- docker: {
- tar: true,
- },
- }],
- push: false,
-});
-```
-```python
-import pulumi
-import pulumi_docker_build as docker_build
-
-image = docker_build.Image("image",
- context={
- "location": "app",
- },
- exports=[{
- "docker": {
- "tar": True,
- },
- }],
- push=False)
-```
-```csharp
-using System.Collections.Generic;
-using System.Linq;
-using Pulumi;
-using DockerBuild = Pulumi.DockerBuild;
-
-return await Deployment.RunAsync(() =>
-{
- var image = new DockerBuild.Image("image", new()
- {
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "app",
- },
- Exports = new[]
- {
- new DockerBuild.Inputs.ExportArgs
- {
- Docker = new DockerBuild.Inputs.ExportDockerArgs
- {
- Tar = true,
- },
- },
- },
- Push = false,
- });
-
-});
-
-```
-```go
-package main
-
-import (
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
-)
-
-func main() {
- pulumi.Run(func(ctx *pulumi.Context) error {
- _, err := dockerbuild.NewImage(ctx, "image", &dockerbuild.ImageArgs{
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("app"),
- },
- Exports: dockerbuild.ExportArray{
- &dockerbuild.ExportArgs{
- Docker: &dockerbuild.ExportDockerArgs{
- Tar: pulumi.Bool(true),
- },
- },
- },
- Push: pulumi.Bool(false),
- })
- if err != nil {
- return err
- }
- return nil
- })
-}
-```
-```yaml
-description: Local export
-name: docker-load
-resources:
- image:
- properties:
- context:
- location: app
- exports:
- - docker:
- tar: true
- push: false
- type: docker-build:Image
-runtime: yaml
-```
-```java
-package generated_program;
-
-import com.pulumi.Context;
-import com.pulumi.Pulumi;
-import com.pulumi.core.Output;
-import com.pulumi.dockerbuild.Image;
-import com.pulumi.dockerbuild.ImageArgs;
-import com.pulumi.dockerbuild.inputs.BuildContextArgs;
-import com.pulumi.dockerbuild.inputs.ExportArgs;
-import com.pulumi.dockerbuild.inputs.ExportDockerArgs;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-public class App {
- public static void main(String[] args) {
- Pulumi.run(App::stack);
- }
-
- public static void stack(Context ctx) {
- var image = new Image("image", ImageArgs.builder()
- .context(BuildContextArgs.builder()
- .location("app")
- .build())
- .exports(ExportArgs.builder()
- .docker(ExportDockerArgs.builder()
- .tar(true)
- .build())
- .build())
- .push(false)
- .build());
-
- }
-}
-```
-{{% /example %}}
-{{% /examples %}}
\ No newline at end of file
diff --git a/provider/internal/embed/image-migration.md b/provider/internal/embed/image-migration.md
deleted file mode 100644
index 9e85b93..0000000
--- a/provider/internal/embed/image-migration.md
+++ /dev/null
@@ -1,224 +0,0 @@
-## Migrating Pulumi Docker v3 and v4 Image resources
-
-This provider's `Image` resource provides a superset of functionality over the `Image` resources available in versions 3 and 4 of the Pulumi Docker provider.
-Existing `Image` resources can be converted to the docker-build `Image` resources with minor modifications.
-
-### Behavioral differences
-
-There are several key behavioral differences to keep in mind when transitioning images to the new `Image` resource.
-
-#### Previews
-
-Version `3.x` of the Pulumi Docker provider always builds images during preview operations.
-This is helpful as a safeguard to prevent "broken" images from merging, but users found the behavior unnecessarily redundant when running previews and updates locally.
-
-Version `4.x` changed build-on-preview behavior to be opt-in.
-By default, `v4.x` `Image` resources do _not_ build during previews, but this behavior can be toggled with the `buildOnPreview` option.
-Several users reported outages due to the default behavior allowing bad images to accidentally sneak through CI.
-
-The default behavior of this provider's `Image` resource is similar to `3.x` and will build images during previews.
-This behavior can be changed by specifying `buildOnPreview`.
-
-#### Push behavior
-
-Versions `3.x` and `4.x` of the Pulumi Docker provider attempt to push images to remote registries by default.
-They expose a `skipPush: true` option to disable pushing.
-
-This provider's `Image` resource matches the Docker CLI's behavior and does not push images anywhere by default.
-
-To push images to a registry you can include `push: true` (equivalent to Docker's `--push` flag) or configure an `export` of type `registry` (equivalent to Docker's `--output type=registry`).
-Like Docker, if an image is configured without exports you will see a warning with instructions for how to enable pushing, but the build will still proceed normally.
-
-#### Secrets
-
-Version `3.x` of the Pulumi Docker provider supports secrets by way of the `extraOptions` field.
-
-Version `4.x` of the Pulumi Docker provider does not support secrets.
-
-The `Image` resource supports secrets but does not require those secrets to exist on-disk or in environment variables.
-Instead, they should be passed directly as values.
-(Please be sure to familiarize yourself with Pulumi's [native secret handling](https://www.pulumi.com/docs/concepts/secrets/).)
-Pulumi also provides [ESC](https://www.pulumi.com/product/esc/) to make it easier to share secrets across stacks and environments.
-
-#### Caching
-
-Version `3.x` of the Pulumi Docker provider exposes `cacheFrom: bool | { stages: [...] }`.
-It builds targets individually and pushes them to separate images for caching.
-
-Version `4.x` exposes a similar parameter `cacheFrom: { images: [...] }` which pushes and pulls inline caches.
-
-Both versions 3 and 4 require specific environment variables to be set and deviate from Docker's native caching behavior.
-This can result in inefficient builds due to unnecessary image pulls, repeated file transfers, etc.
-
-The `Image` resource delegates all caching behavior to Docker.
-`cacheFrom` and `cacheTo` options (equivalent to Docker's `--cache-to` and `--cache-from`) are exposed and provide additional cache targets, such as local disk, S3 storage, etc.
-
-#### Outputs
-
-Versions `3.x` and `4.x` of the provider exposed a `repoDigest` output which was a fully qualified tag with digest.
-In `4.x` this could also be a single sha256 hash if the image wasn't pushed.
-
-Unlike earlier providers the `Image` resource can push multiple tags.
-As a convenience, it exposes a `ref` output consisting of a tag with digest as long as the image was pushed.
-If multiple tags were pushed this uses one at random.
-
-If you need more control over tag references you can use the `digest` output, which is always a single sha256 hash as long as the image was exported somewhere.
-
-#### Tag deletion and refreshes
-
-Versions 3 and 4 of Pulumi Docker provider do not delete tags when the `Image` resource is deleted, nor do they confirm expected tags exist during `refresh` operations.
-
-The `buidx.Image` will query your registries during `refresh` to ensure the expected tags exist.
-If any are missing a subsequent `update` will push them.
-
-When a `Image` is deleted, it will _attempt_ to also delete any pushed tags.
-Deletion of remote tags is not guaranteed because not all registries support the manifest `DELETE` API (`docker.io` in particular).
-Manifests are _not_ deleted in the same way during updates -- to do so safely would require a full build to determine whether a Pulumi operation should be an update or update-replace.
-
-Use the [`retainOnDelete: true`](https://www.pulumi.com/docs/concepts/options/retainondelete/) option if you do not want tags deleted.
-
-### Example migration
-
-Examples of "fully-featured" `v3` and `v4` `Image` resources are shown below, along with an example `Image` resource showing how they would look after migration.
-
-The `v3` resource leverages `buildx` via a `DOCKER_BUILDKIT` environment variable and CLI flags passed in with `extraOption`.
-After migration, the environment variable is no longer needed and CLI flags are now properties on the `Image`.
-In almost all cases, properties of `Image` are named after the Docker CLI flag they correspond to.
-
-The `v4` resource is less functional than its `v3` counterpart because it lacks the flexibility of `extraOptions`.
-It it is shown with parameters similar to the `v3` example for completeness.
-
-{{% examples %}}
-## Example Usage
-{{% example %}}
-### v3/v4 migration
-
-```typescript
-
-// v3 Image
-const v3 = new docker.Image("v3-image", {
- imageName: "myregistry.com/user/repo:latest",
- localImageName: "local-tag",
- skipPush: false,
- build: {
- dockerfile: "./Dockerfile",
- context: "../app",
- target: "mytarget",
- args: {
- MY_BUILD_ARG: "foo",
- },
- env: {
- DOCKER_BUILDKIT: "1",
- },
- extraOptions: [
- "--cache-from",
- "type=registry,myregistry.com/user/repo:cache",
- "--cache-to",
- "type=registry,myregistry.com/user/repo:cache",
- "--add-host",
- "metadata.google.internal:169.254.169.254",
- "--secret",
- "id=mysecret,src=/local/secret",
- "--ssh",
- "default=/home/runner/.ssh/id_ed25519",
- "--network",
- "host",
- "--platform",
- "linux/amd64",
- ],
- },
- registry: {
- server: "myregistry.com",
- username: "username",
- password: pulumi.secret("password"),
- },
-});
-
-// v3 Image after migrating to docker-build.Image
-const v3Migrated = new dockerbuild.Image("v3-to-buildx", {
- tags: ["myregistry.com/user/repo:latest", "local-tag"],
- push: true,
- dockerfile: {
- location: "./Dockerfile",
- },
- context: {
- location: "../app",
- },
- target: "mytarget",
- buildArgs: {
- MY_BUILD_ARG: "foo",
- },
- cacheFrom: [{ registry: { ref: "myregistry.com/user/repo:cache" } }],
- cacheTo: [{ registry: { ref: "myregistry.com/user/repo:cache" } }],
- secrets: {
- mysecret: "value",
- },
- addHosts: ["metadata.google.internal:169.254.169.254"],
- ssh: {
- default: ["/home/runner/.ssh/id_ed25519"],
- },
- network: "host",
- platforms: ["linux/amd64"],
- registries: [{
- address: "myregistry.com",
- username: "username",
- password: pulumi.secret("password"),
- }],
-});
-
-
-// v4 Image
-const v4 = new docker.Image("v4-image", {
- imageName: "myregistry.com/user/repo:latest",
- skipPush: false,
- build: {
- dockerfile: "./Dockerfile",
- context: "../app",
- target: "mytarget",
- args: {
- MY_BUILD_ARG: "foo",
- },
- cacheFrom: {
- images: ["myregistry.com/user/repo:cache"],
- },
- addHosts: ["metadata.google.internal:169.254.169.254"],
- network: "host",
- platform: "linux/amd64",
- },
- buildOnPreview: true,
- registry: {
- server: "myregistry.com",
- username: "username",
- password: pulumi.secret("password"),
- },
-});
-
-// v4 Image after migrating to docker-build.Image
-const v4Migrated = new dockerbuild.Image("v4-to-buildx", {
- tags: ["myregistry.com/user/repo:latest"],
- push: true,
- dockerfile: {
- location: "./Dockerfile",
- },
- context: {
- location: "../app",
- },
- target: "mytarget",
- buildArgs: {
- MY_BUILD_ARG: "foo",
- },
- cacheFrom: [{ registry: { ref: "myregistry.com/user/repo:cache" } }],
- cacheTo: [{ registry: { ref: "myregistry.com/user/repo:cache" } }],
- addHosts: ["metadata.google.internal:169.254.169.254"],
- network: "host",
- platforms: ["linux/amd64"],
- registries: [{
- address: "myregistry.com",
- username: "username",
- password: pulumi.secret("password"),
- }],
-});
-
-```
-
-{{% /example %}}
diff --git a/provider/internal/embed/index-examples.md b/provider/internal/embed/index-examples.md
deleted file mode 100644
index 51f2e36..0000000
--- a/provider/internal/embed/index-examples.md
+++ /dev/null
@@ -1,408 +0,0 @@
-{{% examples %}}
-## Example Usage
-{{% example %}}
-### Multi-platform registry caching
-
-```typescript
-import * as pulumi from "@pulumi/pulumi";
-import * as docker_build from "@pulumi/docker-build";
-
-const amd64 = new docker_build.Image("amd64", {
- cacheFrom: [{
- registry: {
- ref: "docker.io/pulumi/pulumi:cache-amd64",
- },
- }],
- cacheTo: [{
- registry: {
- mode: docker_build.CacheMode.Max,
- ref: "docker.io/pulumi/pulumi:cache-amd64",
- },
- }],
- context: {
- location: "app",
- },
- platforms: [docker_build.Platform.Linux_amd64],
- tags: ["docker.io/pulumi/pulumi:3.107.0-amd64"],
-});
-const arm64 = new docker_build.Image("arm64", {
- cacheFrom: [{
- registry: {
- ref: "docker.io/pulumi/pulumi:cache-arm64",
- },
- }],
- cacheTo: [{
- registry: {
- mode: docker_build.CacheMode.Max,
- ref: "docker.io/pulumi/pulumi:cache-arm64",
- },
- }],
- context: {
- location: "app",
- },
- platforms: [docker_build.Platform.Linux_arm64],
- tags: ["docker.io/pulumi/pulumi:3.107.0-arm64"],
-});
-const index = new docker_build.Index("index", {
- sources: [
- amd64.ref,
- arm64.ref,
- ],
- tag: "docker.io/pulumi/pulumi:3.107.0",
-});
-export const ref = index.ref;
-```
-```python
-import pulumi
-import pulumi_docker_build as docker_build
-
-amd64 = docker_build.Image("amd64",
- cache_from=[{
- "registry": {
- "ref": "docker.io/pulumi/pulumi:cache-amd64",
- },
- }],
- cache_to=[{
- "registry": {
- "mode": docker_build.CacheMode.MAX,
- "ref": "docker.io/pulumi/pulumi:cache-amd64",
- },
- }],
- context={
- "location": "app",
- },
- platforms=[docker_build.Platform.LINUX_AMD64],
- tags=["docker.io/pulumi/pulumi:3.107.0-amd64"])
-arm64 = docker_build.Image("arm64",
- cache_from=[{
- "registry": {
- "ref": "docker.io/pulumi/pulumi:cache-arm64",
- },
- }],
- cache_to=[{
- "registry": {
- "mode": docker_build.CacheMode.MAX,
- "ref": "docker.io/pulumi/pulumi:cache-arm64",
- },
- }],
- context={
- "location": "app",
- },
- platforms=[docker_build.Platform.LINUX_ARM64],
- tags=["docker.io/pulumi/pulumi:3.107.0-arm64"])
-index = docker_build.Index("index",
- sources=[
- amd64.ref,
- arm64.ref,
- ],
- tag="docker.io/pulumi/pulumi:3.107.0")
-pulumi.export("ref", index.ref)
-```
-```csharp
-using System.Collections.Generic;
-using System.Linq;
-using Pulumi;
-using DockerBuild = Pulumi.DockerBuild;
-
-return await Deployment.RunAsync(() =>
-{
- var amd64 = new DockerBuild.Image("amd64", new()
- {
- CacheFrom = new[]
- {
- new DockerBuild.Inputs.CacheFromArgs
- {
- Registry = new DockerBuild.Inputs.CacheFromRegistryArgs
- {
- Ref = "docker.io/pulumi/pulumi:cache-amd64",
- },
- },
- },
- CacheTo = new[]
- {
- new DockerBuild.Inputs.CacheToArgs
- {
- Registry = new DockerBuild.Inputs.CacheToRegistryArgs
- {
- Mode = DockerBuild.CacheMode.Max,
- Ref = "docker.io/pulumi/pulumi:cache-amd64",
- },
- },
- },
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "app",
- },
- Platforms = new[]
- {
- DockerBuild.Platform.Linux_amd64,
- },
- Tags = new[]
- {
- "docker.io/pulumi/pulumi:3.107.0-amd64",
- },
- });
-
- var arm64 = new DockerBuild.Image("arm64", new()
- {
- CacheFrom = new[]
- {
- new DockerBuild.Inputs.CacheFromArgs
- {
- Registry = new DockerBuild.Inputs.CacheFromRegistryArgs
- {
- Ref = "docker.io/pulumi/pulumi:cache-arm64",
- },
- },
- },
- CacheTo = new[]
- {
- new DockerBuild.Inputs.CacheToArgs
- {
- Registry = new DockerBuild.Inputs.CacheToRegistryArgs
- {
- Mode = DockerBuild.CacheMode.Max,
- Ref = "docker.io/pulumi/pulumi:cache-arm64",
- },
- },
- },
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "app",
- },
- Platforms = new[]
- {
- DockerBuild.Platform.Linux_arm64,
- },
- Tags = new[]
- {
- "docker.io/pulumi/pulumi:3.107.0-arm64",
- },
- });
-
- var index = new DockerBuild.Index("index", new()
- {
- Sources = new[]
- {
- amd64.Ref,
- arm64.Ref,
- },
- Tag = "docker.io/pulumi/pulumi:3.107.0",
- });
-
- return new Dictionary
- {
- ["ref"] = index.Ref,
- };
-});
-
-```
-```go
-package main
-
-import (
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
-)
-
-func main() {
- pulumi.Run(func(ctx *pulumi.Context) error {
- amd64, err := dockerbuild.NewImage(ctx, "amd64", &dockerbuild.ImageArgs{
- CacheFrom: dockerbuild.CacheFromArray{
- &dockerbuild.CacheFromArgs{
- Registry: &dockerbuild.CacheFromRegistryArgs{
- Ref: pulumi.String("docker.io/pulumi/pulumi:cache-amd64"),
- },
- },
- },
- CacheTo: dockerbuild.CacheToArray{
- &dockerbuild.CacheToArgs{
- Registry: &dockerbuild.CacheToRegistryArgs{
- Mode: dockerbuild.CacheModeMax,
- Ref: pulumi.String("docker.io/pulumi/pulumi:cache-amd64"),
- },
- },
- },
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("app"),
- },
- Platforms: docker - build.PlatformArray{
- dockerbuild.Platform_Linux_amd64,
- },
- Tags: pulumi.StringArray{
- pulumi.String("docker.io/pulumi/pulumi:3.107.0-amd64"),
- },
- })
- if err != nil {
- return err
- }
- arm64, err := dockerbuild.NewImage(ctx, "arm64", &dockerbuild.ImageArgs{
- CacheFrom: dockerbuild.CacheFromArray{
- &dockerbuild.CacheFromArgs{
- Registry: &dockerbuild.CacheFromRegistryArgs{
- Ref: pulumi.String("docker.io/pulumi/pulumi:cache-arm64"),
- },
- },
- },
- CacheTo: dockerbuild.CacheToArray{
- &dockerbuild.CacheToArgs{
- Registry: &dockerbuild.CacheToRegistryArgs{
- Mode: dockerbuild.CacheModeMax,
- Ref: pulumi.String("docker.io/pulumi/pulumi:cache-arm64"),
- },
- },
- },
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("app"),
- },
- Platforms: docker - build.PlatformArray{
- dockerbuild.Platform_Linux_arm64,
- },
- Tags: pulumi.StringArray{
- pulumi.String("docker.io/pulumi/pulumi:3.107.0-arm64"),
- },
- })
- if err != nil {
- return err
- }
- index, err := dockerbuild.NewIndex(ctx, "index", &dockerbuild.IndexArgs{
- Sources: pulumi.StringArray{
- amd64.Ref,
- arm64.Ref,
- },
- Tag: pulumi.String("docker.io/pulumi/pulumi:3.107.0"),
- })
- if err != nil {
- return err
- }
- ctx.Export("ref", index.Ref)
- return nil
- })
-}
-```
-```yaml
-description: Multi-platform registry caching
-name: registry-caching
-outputs:
- ref: ${index.ref}
-resources:
- amd64:
- properties:
- cacheFrom:
- - registry:
- ref: docker.io/pulumi/pulumi:cache-amd64
- cacheTo:
- - registry:
- mode: max
- ref: docker.io/pulumi/pulumi:cache-amd64
- context:
- location: app
- platforms:
- - linux/amd64
- tags:
- - docker.io/pulumi/pulumi:3.107.0-amd64
- type: docker-build:Image
- arm64:
- properties:
- cacheFrom:
- - registry:
- ref: docker.io/pulumi/pulumi:cache-arm64
- cacheTo:
- - registry:
- mode: max
- ref: docker.io/pulumi/pulumi:cache-arm64
- context:
- location: app
- platforms:
- - linux/arm64
- tags:
- - docker.io/pulumi/pulumi:3.107.0-arm64
- type: docker-build:Image
- index:
- properties:
- sources:
- - ${amd64.ref}
- - ${arm64.ref}
- tag: docker.io/pulumi/pulumi:3.107.0
- type: docker-build:Index
-runtime: yaml
-```
-```java
-package generated_program;
-
-import com.pulumi.Context;
-import com.pulumi.Pulumi;
-import com.pulumi.core.Output;
-import com.pulumi.dockerbuild.Image;
-import com.pulumi.dockerbuild.ImageArgs;
-import com.pulumi.dockerbuild.inputs.CacheFromArgs;
-import com.pulumi.dockerbuild.inputs.CacheFromRegistryArgs;
-import com.pulumi.dockerbuild.inputs.CacheToArgs;
-import com.pulumi.dockerbuild.inputs.CacheToRegistryArgs;
-import com.pulumi.dockerbuild.inputs.BuildContextArgs;
-import com.pulumi.dockerbuild.Index;
-import com.pulumi.dockerbuild.IndexArgs;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-public class App {
- public static void main(String[] args) {
- Pulumi.run(App::stack);
- }
-
- public static void stack(Context ctx) {
- var amd64 = new Image("amd64", ImageArgs.builder()
- .cacheFrom(CacheFromArgs.builder()
- .registry(CacheFromRegistryArgs.builder()
- .ref("docker.io/pulumi/pulumi:cache-amd64")
- .build())
- .build())
- .cacheTo(CacheToArgs.builder()
- .registry(CacheToRegistryArgs.builder()
- .mode("max")
- .ref("docker.io/pulumi/pulumi:cache-amd64")
- .build())
- .build())
- .context(BuildContextArgs.builder()
- .location("app")
- .build())
- .platforms("linux/amd64")
- .tags("docker.io/pulumi/pulumi:3.107.0-amd64")
- .build());
-
- var arm64 = new Image("arm64", ImageArgs.builder()
- .cacheFrom(CacheFromArgs.builder()
- .registry(CacheFromRegistryArgs.builder()
- .ref("docker.io/pulumi/pulumi:cache-arm64")
- .build())
- .build())
- .cacheTo(CacheToArgs.builder()
- .registry(CacheToRegistryArgs.builder()
- .mode("max")
- .ref("docker.io/pulumi/pulumi:cache-arm64")
- .build())
- .build())
- .context(BuildContextArgs.builder()
- .location("app")
- .build())
- .platforms("linux/arm64")
- .tags("docker.io/pulumi/pulumi:3.107.0-arm64")
- .build());
-
- var index = new Index("index", IndexArgs.builder()
- .sources(
- amd64.ref(),
- arm64.ref())
- .tag("docker.io/pulumi/pulumi:3.107.0")
- .build());
-
- ctx.export("ref", index.ref());
- }
-}
-```
-{{% /example %}}
-{{% /examples %}}
\ No newline at end of file
diff --git a/provider/internal/export.go b/provider/internal/export.go
deleted file mode 100644
index 16671d4..0000000
--- a/provider/internal/export.go
+++ /dev/null
@@ -1,570 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "errors"
- "fmt"
- "os"
- "slices"
- "strings"
-
- controllerapi "github.com/docker/buildx/controller/pb"
- "github.com/moby/buildkit/client"
- "github.com/tonistiigi/go-csvvalue"
-
- "github.com/pulumi/pulumi-go-provider/infer"
-)
-
-var (
- _ fmt.Stringer = (*Export)(nil)
- _ fmt.Stringer = (*ExportDocker)(nil)
- _ fmt.Stringer = (*ExportImage)(nil)
- _ fmt.Stringer = (*ExportLocal)(nil)
- _ fmt.Stringer = (*ExportOCI)(nil)
- _ fmt.Stringer = (*ExportRegistry)(nil)
- _ fmt.Stringer = (*ExportTar)(nil)
- _ fmt.Stringer = ExportWithAnnotations{}
- _ fmt.Stringer = ExportWithCompression{}
- _ fmt.Stringer = ExportWithNames{}
- _ fmt.Stringer = ExportWithOCI{}
- _ infer.Annotated = (*Export)(nil)
- _ infer.Annotated = (*ExportDocker)(nil)
- _ infer.Annotated = (*ExportImage)(nil)
- _ infer.Annotated = (*ExportLocal)(nil)
- _ infer.Annotated = (*ExportOCI)(nil)
- _ infer.Annotated = (*ExportRegistry)(nil)
- _ infer.Annotated = (*ExportTar)(nil)
-)
-
-// Export is a "union" type for all of our available `--output` options.
-type Export struct {
- Tar *ExportTar `pulumi:"tar,optional"`
- Local *ExportLocal `pulumi:"local,optional"`
- Registry *ExportRegistry `pulumi:"registry,optional"`
- Image *ExportImage `pulumi:"image,optional"`
- OCI *ExportOCI `pulumi:"oci,optional"`
- Docker *ExportDocker `pulumi:"docker,optional"`
- CacheOnly *ExportCacheOnly `pulumi:"cacheonly,optional"`
- Raw Raw `pulumi:"raw,optional"`
-
- Disabled bool `pulumi:"disabled,optional"`
-}
-
-// Annotate sets docstrings on Export.
-func (e *Export) Annotate(a infer.Annotator) {
- a.Describe(&e.Tar, dedent(`
- Export to a local directory as a tarball.`,
- ))
- a.Describe(&e.Local, dedent(`
- Export to a local directory as files and directories.`,
- ))
- a.Describe(&e.Registry, dedent(`
- Identical to the Image exporter, but pushes by default.`,
- ))
- a.Describe(&e.Image, dedent(`
- Outputs the build result into a container image format.`,
- ))
- a.Describe(&e.OCI, dedent(`
- Identical to the Docker exporter but uses OCI media types by default.`,
- ))
- a.Describe(&e.Docker, dedent(`
- Export as a Docker image layout.`,
- ))
- a.Describe(&e.Raw, dedent(`
- A raw string as you would provide it to the Docker CLI (e.g.,
- "type=docker")`,
- ))
- a.Describe(&e.CacheOnly, dedent(`
- A no-op export. Helpful for silencing the 'no exports' warning if you
- just want to populate caches.
- `))
-
- a.Describe(&e.Disabled, dedent(`
- When "true" this entry will be excluded. Defaults to "false".
- `))
-}
-
-// String returns a CLI-encoded value for this `--output` entry, or an empty
-// string if disabled. `validate` should be called to ensure only one entry was
-// set.
-func (e Export) String() string {
- if e.Disabled {
- return ""
- }
- return join(e.Tar, e.Local, e.Registry, e.Image, e.OCI, e.Docker, e.CacheOnly, e.Raw)
-}
-
-// pushed returns true if the export would result in a registry push.
-func (e Export) pushed() bool {
- if e.Raw != "" {
- exp, err := parseExports([]string{e.Raw.String()})
- if err != nil {
- return false
- }
- return exp[0].Attrs["push"] == "true"
- }
- if e.Registry != nil {
- return e.Registry.Push == nil || *e.Registry.Push
- }
- if e.Image != nil {
- return e.Image.Push != nil && *e.Image.Push
- }
- return false
-}
-
-// parseExports is forked from docker/buildx@v0.18.0 from util/buildflags/export.go
-// to maintain the old logic. This is to get a working version of the provider with
-// the latest buildx while maintaining the old behaviour.
-//
-// TODO: Remove this fork and update existing logic/tests.
-func parseExports(inp []string) ([]*controllerapi.ExportEntry, error) {
- if len(inp) == 0 {
- return nil, nil
- }
- outs := make([]*controllerapi.ExportEntry, 0, len(inp))
-
- for _, s := range inp {
- fields, err := csvvalue.Fields(s, nil)
- if err != nil {
- return nil, err
- }
-
- out := controllerapi.ExportEntry{
- Attrs: map[string]string{},
- }
- if len(fields) == 1 && fields[0] == s && !strings.HasPrefix(s, "type=") {
- if s != "-" {
- outs = append(outs, &controllerapi.ExportEntry{
- Type: client.ExporterLocal,
- Destination: s,
- })
- continue
- }
- out = controllerapi.ExportEntry{
- Type: client.ExporterTar,
- Destination: s,
- }
- }
-
- if out.Type == "" {
- for _, field := range fields {
- parts := strings.SplitN(field, "=", 2)
- if len(parts) != 2 {
- return nil, fmt.Errorf("invalid value %s", field)
- }
- key := strings.TrimSpace(strings.ToLower(parts[0]))
- value := parts[1]
- switch key {
- case "type":
- out.Type = value
- default:
- out.Attrs[key] = value
- }
- }
- }
- if out.Type == "" {
- return nil, errors.New("type is required for output")
- }
-
- if out.Type == "registry" {
- out.Type = client.ExporterImage
- if _, ok := out.Attrs["push"]; !ok {
- out.Attrs["push"] = "true"
- }
- }
-
- if dest, ok := out.Attrs["dest"]; ok {
- out.Destination = dest
- delete(out.Attrs, "dest")
- }
-
- outs = append(outs, &out)
- }
- return outs, nil
-}
-
-func (e Export) validate(preview bool, tags []string) (*controllerapi.ExportEntry, error) {
- if strings.Count(e.String(), "type=") > 1 {
- return nil, errors.New("exports should only specify one export type")
- }
- ee, err := parseExports([]string{e.String()})
- if err != nil {
- return nil, err
- }
-
- exp := ee[0]
- if len(tags) == 0 && isRegistryPush(exp) && exp.Attrs["name"] == "" {
- return nil, errors.New(
- "at least one tag or export name is needed when pushing to a registry",
- )
- }
- if !preview {
- return exp, nil
- }
-
- // Don't perform registry pushes during previews.
- if exp.Type == "image" {
- exp.Attrs["push"] = "false"
- }
- return exp, nil
-}
-
-// ExportCacheOnly is a dummy/no-op --cache-to entry. It exists only to help
-// silence the "no exports configured" warning. By using this the user signals
-// that they intentionally do not want exports, and only caches will be
-// populated as a result.
-type ExportCacheOnly struct{}
-
-// String returns the CLI-encoded value of these export options, or an empty
-// string if the receiver is nil.
-func (e *ExportCacheOnly) String() string {
- if e == nil {
- return ""
- }
- return "type=cacheonly"
-}
-
-// ExportDocker pushes the final image to the local build daemon.
-type ExportDocker struct {
- ExportWithOCI
- ExportWithCompression
- ExportWithAnnotations
- ExportWithNames
-
- Dest string `pulumi:"dest,optional"`
- Tar *bool `pulumi:"tar,optional"`
-}
-
-// Annotate sets docstrings and defaults on ExportDocker.
-func (e *ExportDocker) Annotate(a infer.Annotator) {
- a.SetDefault(&e.Tar, true)
-
- a.Describe(&e.Dest, "The local export path.")
- a.Describe(&e.Tar, "Bundle the output into a tarball layout.")
-}
-
-// String returns the CLI-encoded value of these export options, or an empty
-// string if the receiver is nil.
-func (e *ExportDocker) String() string {
- if e == nil {
- return ""
- }
- parts := []string{}
- if e.Dest != "" {
- parts = append(parts, "dest="+e.Dest)
- }
- if e.Tar != nil {
- parts = append(parts, fmt.Sprintf("tar=%t", *e.Tar))
- }
-
- return join(
- Raw("type=docker"),
- Raw(strings.Join(parts, ",")),
- e.ExportWithOCI,
- e.ExportWithCompression,
- e.ExportWithAnnotations,
- e.ExportWithNames,
- )
-}
-
-// ExportOCI is a cache that defaults to using OCI media types.
-type ExportOCI struct {
- ExportDocker
-}
-
-// Annotate sets docstrings and defaults on ExportOCI.
-func (e *ExportOCI) Annotate(a infer.Annotator) {
- a.SetDefault(&e.OCI, true)
- a.Describe(&e.OCI, "Use OCI media types in exporter manifests.")
-}
-
-func (e *ExportOCI) String() string {
- if e == nil {
- return ""
- }
- return strings.Replace(e.ExportDocker.String(), "type=docker", "type=oci", 1)
-}
-
-// ExportImage can push the final image to remote registries.
-type ExportImage struct {
- ExportWithOCI
- ExportWithCompression
- ExportWithNames
- ExportWithAnnotations
-
- Push *bool `pulumi:"push,optional"`
- PushByDigest *bool `pulumi:"pushByDigest,optional"`
- Insecure *bool `pulumi:"insecure,optional"`
- DanglingNamePrefix string `pulumi:"danglingNamePrefix,optional"`
- NameCanonical *bool `pulumi:"nameCanonical,optional"`
- Unpack *bool `pulumi:"unpack,optional"`
- Store *bool `pulumi:"store,optional"`
-}
-
-// Annotate sets docstrings and defaults on ExportImage.
-func (e *ExportImage) Annotate(a infer.Annotator) {
- a.SetDefault(&e.Store, true)
-
- a.Describe(&e.Store, dedent(`
- Store resulting images to the worker's image store and ensure all of
- its blobs are in the content store.
-
- Defaults to "true".
-
- Ignored if the worker doesn't have image store (when using OCI workers,
- for example).
- `))
- a.Describe(&e.Push, dedent(`
- Push after creating the image. Defaults to "false".
- `))
- a.Describe(&e.DanglingNamePrefix, dedent(`
- Name image with "prefix@", used for anonymous images.
- `))
- a.Describe(&e.NameCanonical, dedent(`
- Add additional canonical name ("name@").
- `))
- a.Describe(&e.Insecure, dedent(`
- Allow pushing to an insecure registry.
- `))
- a.Describe(&e.PushByDigest, dedent(`
- Push image without name.
- `))
- a.Describe(&e.Unpack, dedent(`
- Unpack image after creation (for use with containerd). Defaults to
- "false".
- `))
-}
-
-// String returns the CLI-encoded value of these export options, or an empty
-// string if the receiver is nil.
-func (e *ExportImage) String() string {
- if e == nil {
- return ""
- }
- parts := []string{}
- if e.Push != nil {
- parts = append(parts, fmt.Sprintf("push=%t", *e.Push))
- }
- if e.PushByDigest != nil {
- parts = append(parts, fmt.Sprintf("push-by-digest=%t", *e.PushByDigest))
- }
- if e.Insecure != nil {
- parts = append(parts, fmt.Sprintf("insecure=%t", *e.Insecure))
- }
- if e.DanglingNamePrefix != "" {
- parts = append(parts, "dangling-name-prefix="+e.DanglingNamePrefix)
- }
- if e.NameCanonical != nil {
- parts = append(parts, fmt.Sprintf("name-canonical=%t", *e.NameCanonical))
- }
- if e.Unpack != nil {
- parts = append(parts, fmt.Sprintf("unpack=%t", *e.Unpack))
- }
- if e.Store != nil {
- parts = append(parts, fmt.Sprintf("store=%t", *e.Store))
- }
- return join(
- Raw("type=image"),
- Raw(strings.Join(parts, ",")),
- e.ExportWithOCI,
- e.ExportWithCompression,
- e.ExportWithNames,
- e.ExportWithAnnotations,
- )
-}
-
-// ExportRegistry is equivalent to ExportImage but defaults to push=true.
-type ExportRegistry struct {
- ExportImage
-}
-
-// Annotate sets docstrings and defaults on ExportRegistry.
-func (e *ExportRegistry) Annotate(a infer.Annotator) {
- a.Describe(&e.Push, dedent(`
- Push after creating the image. Defaults to "true".
- `))
- a.SetDefault(&e.Push, true)
-}
-
-// String returns the CLI-encoded value of these export options, or an empty
-// string if the receiver is nil.
-func (e *ExportRegistry) String() string {
- if e == nil {
- return ""
- }
- return strings.Replace(e.ExportImage.String(), "type=image", "type=registry", 1)
-}
-
-// ExportLocal writes the final image to disk.
-type ExportLocal struct {
- Dest string `pulumi:"dest"`
-}
-
-// String returns the CLI-encoded value of these export options, or an empty
-// string if the receiver is nil.
-func (e *ExportLocal) String() string {
- if e == nil {
- return ""
- }
- return "type=local,dest=" + e.Dest
-}
-
-// Annotate sets docstrings on ExportLocal.
-func (e *ExportLocal) Annotate(a infer.Annotator) {
- a.Describe(&e.Dest, "Output path.")
-}
-
-// Exists returns true if the exported directory exists and is populated with
-// some files.
-func (e *ExportLocal) Exists() bool {
- if e == nil {
- return true // Degenerate case.
- }
- files, err := os.ReadDir(e.Dest)
- if err != nil {
- return false
- }
- return len(files) > 0
-}
-
-// ExportTar is an export that uses the tar format for exporting.
-type ExportTar struct {
- ExportLocal
-}
-
-func (e *ExportTar) String() string {
- if e == nil {
- return ""
- }
- return "type=tar,dest=" + e.Dest
-}
-
-// Exists returns true if a file exists at the expected path.
-func (e *ExportTar) Exists() bool {
- if e == nil {
- return true // Degenerate case.
- }
- _, err := os.Stat(e.Dest)
- return err == nil
-}
-
-// ExportWithOCI is an export that support OCI media types.
-type ExportWithOCI struct {
- OCI *bool `pulumi:"ociMediaTypes,optional"`
-}
-
-// Annotate sets defaults on ExportWithOCI.
-func (c *ExportWithOCI) Annotate(a infer.Annotator) {
- a.SetDefault(&c.OCI, false)
- a.Describe(&c.OCI, "Use OCI media types in exporter manifests.")
-}
-
-func (c ExportWithOCI) String() string {
- if c.OCI == nil {
- return ""
- }
- return fmt.Sprintf("oci-mediatypes=%t", *c.OCI)
-}
-
-// ExportWithCompression is an export with options to configure compression
-// settings.
-type ExportWithCompression struct {
- Compression *CompressionType `pulumi:"compression,optional"`
- CompressionLevel int `pulumi:"compressionLevel,optional"`
- ForceCompression *bool `pulumi:"forceCompression,optional"`
-}
-
-// Annotate sets docstrings and defaults on ExportWithCompression.
-func (e *ExportWithCompression) Annotate(a infer.Annotator) {
- a.SetDefault(&e.Compression, Gzip)
- a.SetDefault(&e.CompressionLevel, 0)
- a.SetDefault(&e.ForceCompression, false)
-
- a.Describe(&e.Compression, "The compression type to use.")
- a.Describe(&e.CompressionLevel, "Compression level from 0 to 22.")
- a.Describe(&e.ForceCompression, "Forcefully apply compression.")
-}
-
-func (e ExportWithCompression) String() string {
- if e.CompressionLevel == 0 {
- return ""
- }
- parts := []string{}
- if e.Compression != nil {
- parts = append(parts, fmt.Sprintf("compression=%s", *e.Compression))
- }
- if e.CompressionLevel > 0 {
- cl := e.CompressionLevel
- if cl > 22 {
- cl = 22
- }
- parts = append(parts, fmt.Sprintf("compression-level=%d", cl))
- }
- if e.ForceCompression != nil {
- parts = append(parts, fmt.Sprintf("force-compression=%t", *e.ForceCompression))
- }
- return strings.Join(parts, ",")
-}
-
-// ExportWithNames is an export with configurable names (tags).
-type ExportWithNames struct {
- Names []string `pulumi:"names,optional"`
-}
-
-func (e ExportWithNames) String() string {
- parts := []string{}
- for _, n := range e.Names {
- parts = append(parts, "name="+n)
- }
- return strings.Join(parts, ",")
-}
-
-// Annotate sets docstrings on ExportWithNames.
-func (e *ExportWithNames) Annotate(a infer.Annotator) {
- a.Describe(
- &e.Names,
- "Specify images names to export. This is overridden if tags are already specified.",
- )
-}
-
-// ExportWithAnnotations is an export with configurable annotations.
-type ExportWithAnnotations struct {
- Annotations map[string]string `pulumi:"annotations,optional"`
-}
-
-func (e ExportWithAnnotations) String() string {
- parts := []string{}
- for k, v := range e.Annotations {
- parts = append(parts, fmt.Sprintf("annotation.%s=%s", k, v))
- }
- slices.Sort(parts)
- return strings.Join(parts, ",")
-}
-
-// Annotate sets docstrings on ExportWithAnnotations.
-func (e *ExportWithAnnotations) Annotate(a infer.Annotator) {
- a.Describe(&e.Annotations, dedent(`
- Attach an arbitrary key/value annotation to the image.
- `))
-}
-
-// isRegistryPush returns true if the ExportEntry results in an image pushed to
-// a registry.
-func isRegistryPush(export *controllerapi.ExportEntry) bool {
- // "type=registry" is shorthand for "type=image,push=true" so we only need
- // to check "image" types.
- return export.Type == "image" && export.Attrs["push"] == "true"
-}
diff --git a/provider/internal/export_test.go b/provider/internal/export_test.go
deleted file mode 100644
index 724e69f..0000000
--- a/provider/internal/export_test.go
+++ /dev/null
@@ -1,243 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "testing"
-
- controllerapi "github.com/docker/buildx/controller/pb"
- "github.com/docker/buildx/util/buildflags"
- "github.com/stretchr/testify/assert"
-
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
-)
-
-func TestValidateExport(t *testing.T) {
- t.Parallel()
-
- tests := []struct {
- name string
- e Export
- givenTags []string
- preview bool
-
- wantExp *controllerapi.ExportEntry
- wantErr string
- }{
- {
- name: "raw - no push on preview",
- preview: true,
- e: Export{Raw: "type=registry"},
- givenTags: []string{"docker.io/foo/bar"},
- wantExp: &controllerapi.ExportEntry{
- Type: "image",
- Attrs: map[string]string{"push": "false"},
- },
- },
- {
- name: "raw - push requires tags",
- e: Export{Raw: "type=registry"},
- wantErr: "tag or export name is needed",
- },
- {
- name: "registry - no push on preview",
- preview: true,
- e: Export{Registry: &ExportRegistry{}},
- givenTags: []string{"docker.io/foo/bar"},
- wantExp: &controllerapi.ExportEntry{
- Type: "image",
- Attrs: map[string]string{"push": "false"},
- },
- },
- {
- name: "registry - push requires tags",
- e: Export{Registry: &ExportRegistry{}},
- wantErr: "tag or export name is needed",
- },
- {
- name: "over-specified",
- e: Export{Raw: "type=registry", Registry: &ExportRegistry{}},
- wantErr: "specify one export type",
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
- e, err := tt.e.validate(tt.preview, tt.givenTags)
- if tt.wantErr == "" {
- assert.NoError(t, err)
- } else {
- assert.ErrorContains(t, err, tt.wantErr)
- }
- if tt.wantExp != nil {
- assert.Equal(t, tt.wantExp.Type, e.Type)
- assert.Equal(t, tt.wantExp.Attrs, e.Attrs)
- }
- })
- }
-}
-
-func TestExportString(t *testing.T) {
- t.Parallel()
- gzip := Gzip
- tests := []struct {
- name string
- given Export
- want string
- }{
- {
- name: "tar",
- given: Export{Tar: &ExportTar{ExportLocal: ExportLocal{Dest: "/foo"}}},
- want: "type=tar,dest=/foo",
- },
- {
- name: "local",
- given: Export{Local: &ExportLocal{Dest: "/bar"}},
- want: "type=local,dest=/bar",
- },
- {
- name: "registry-with-compression",
- given: Export{Registry: &ExportRegistry{
- ExportImage: ExportImage{
- ExportWithCompression: ExportWithCompression{
- Compression: &gzip,
- CompressionLevel: 100,
- ForceCompression: pulumi.BoolRef(true),
- },
- },
- }},
- want: "type=registry,compression=gzip,compression-level=22,force-compression=true",
- },
- {
- name: "registry-without-push",
- given: Export{Registry: &ExportRegistry{
- ExportImage: ExportImage{
- Push: pulumi.BoolRef(false),
- },
- }},
- want: "type=registry,push=false",
- },
- {
- name: "image",
- given: Export{
- Image: &ExportImage{
- Push: pulumi.BoolRef(true),
- PushByDigest: pulumi.BoolRef(true),
- Insecure: pulumi.BoolRef(true),
- DanglingNamePrefix: "prefix",
- Unpack: pulumi.BoolRef(true),
- Store: pulumi.BoolRef(false),
- },
- },
- want: "type=image,push=true,push-by-digest=true,insecure=true,dangling-name-prefix=prefix,unpack=true,store=false",
- },
- {
- name: "oci-with-names",
- given: Export{OCI: &ExportOCI{
- ExportDocker: ExportDocker{
- ExportWithNames: ExportWithNames{
- Names: []string{"foo", "bar"},
- },
- },
- }},
- want: "type=oci,name=foo,name=bar",
- },
- {
- name: "docker-with-annotations",
- given: Export{Docker: &ExportDocker{
- ExportWithAnnotations: ExportWithAnnotations{
- Annotations: map[string]string{
- "foo": "bar",
- "boo": "baz",
- },
- },
- }},
- want: "type=docker,annotation.boo=baz,annotation.foo=bar",
- },
- {
- name: "raw",
- given: Export{Raw: Raw("type=docker")},
- want: "type=docker",
- },
- {
- name: "disabled",
- given: Export{Raw: Raw("type=docker"), Disabled: true},
- want: "",
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
- actual := tt.given.String()
- assert.Equal(t, tt.want, tt.given.String())
-
- if tt.want != "" {
- // Our output should be parsable by Docker.
- _, err := buildflags.ParseExports([]string{actual})
- assert.NoError(t, err)
- }
- })
- }
-}
-
-func TestExportPushed(t *testing.T) {
- t.Parallel()
- tests := []struct {
- name string
- e Export
- want bool
- }{
- {
- name: "raw registry",
- e: Export{Raw: "type=registry"},
- want: true,
- },
- {
- name: "raw image",
- e: Export{Raw: "type=image"},
- want: false,
- },
- {
- name: "registry with no push",
- e: Export{Registry: &ExportRegistry{}},
- want: true,
- },
- {
- name: "registry with explicit push",
- e: Export{Registry: &ExportRegistry{ExportImage{Push: pulumi.BoolRef(false)}}},
- want: false,
- },
- {
- name: "image with explicit push",
- e: Export{Image: &ExportImage{Push: pulumi.BoolRef(true)}},
- want: true,
- },
- {
- name: "local",
- e: Export{Local: &ExportLocal{}},
- want: false,
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
- actual := tt.e.pushed()
- assert.Equal(t, tt.want, actual)
- })
- }
-}
diff --git a/provider/internal/host.go b/provider/internal/host.go
deleted file mode 100644
index cb9ad91..0000000
--- a/provider/internal/host.go
+++ /dev/null
@@ -1,210 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "context"
- "errors"
- "fmt"
- "path/filepath"
- "strings"
- "sync"
- "time"
-
- "github.com/blang/semver"
- "github.com/docker/buildx/builder"
- "github.com/docker/buildx/store/storeutil"
- "github.com/docker/cli/cli/command"
- cfgtypes "github.com/docker/cli/cli/config/types"
-)
-
-// host contains a host-level Docker CLI as well as a cache of initialized
-// builders. Operations on the host are serialized.
-type host struct {
- mu sync.Mutex
- cli command.Cli
- config *Config
- builders map[string]*cachedBuilder
- auths map[string]cfgtypes.AuthConfig
-
- // True if the buildkit daemon is at least v0.13.
- supportsMultipleExports bool
-}
-
-func newHost(ctx context.Context, config *Config) (*host, error) {
- docker, err := newDockerCLI(config)
- if err != nil {
- return nil, err
- }
- // Load existing credentials into memory.
- auths, err := docker.ConfigFile().GetAllCredentials()
- if err != nil {
- return nil, err
- }
-
- h := &host{
- cli: docker,
- config: config,
- builders: map[string]*cachedBuilder{},
- auths: auths,
- supportsMultipleExports: false, // Determined when we boot the builder.
- }
- return h, err
-}
-
-// builderFor ensures a builder is available and running. This is guarded by a
-// mutex to ensure other resources don't attempt to use the builder until it's
-// ready.
-//
-// If the build doesn't specify a builder by name, we will iterate through all
-// available builders until we find one that we can connect to.
-func (h *host) builderFor(ctx context.Context, build Build) (*cachedBuilder, error) {
- h.mu.Lock()
- defer h.mu.Unlock()
-
- opts := build.BuildOptions()
-
- if b, ok := h.builders[opts.Builder]; ok {
- return b, nil
- }
-
- txn, release, err := storeutil.GetStore(h.cli)
- if err != nil {
- return nil, fmt.Errorf("getting store: %w", err)
- }
- defer release()
-
- contextPathHash := opts.ContextPath
- if absContextPath, err := filepath.Abs(contextPathHash); err == nil {
- contextPathHash = absContextPath
- }
- b, err := builder.New(h.cli,
- builder.WithName(opts.Builder),
- builder.WithContextPathHash(contextPathHash),
- builder.WithStore(txn),
- )
- if err != nil && build.ShouldExec() && strings.HasPrefix(opts.Builder, "cloud-") {
- //nolint:revive // Human-readable.
- err = errors.Join(err,
- errors.New("Make sure you're logged in to Docker (`docker login`) if you're trying to use a cloud builder."),
- errors.New("Make sure you have the correct buildx plugin installed (https://github.com/docker/buildx-desktop)."),
- )
- }
- if err != nil && build.ShouldExec() {
- //nolint:revive // Human-readable.
- err = errors.Join(err, errors.New(
- "Make sure your buildx plugin is executable (`docker buildx version`)"),
- )
- }
- if err != nil {
- return nil, fmt.Errorf("new builder: %w", err)
- }
-
- // If we didn't request a particular builder, and we loaded a default
- // builder with an unsupported (docker) driver, then look for a builder we
- // do support.
- if b.Driver == "" && opts.Builder == "" {
- builders, err := builder.GetBuilders(h.cli, txn)
- if err != nil {
- return nil, fmt.Errorf("getting builders: %w", err)
- }
- nextbuilder:
- for _, bb := range builders {
- if bb.Driver == "" {
- continue
- }
- if err := bb.Validate(); err != nil {
- continue
- }
- if bb.Err() != nil {
- continue
- }
- nodes, err := bb.LoadNodes(ctx)
- if err != nil {
- continue
- }
- for idx := range nodes {
- n := nodes[idx]
- if n.Driver == nil {
- continue nextbuilder
- }
- if _, err := n.Driver.Dial(ctx); err != nil {
- continue nextbuilder
- }
- // TODO: Confirm the builder supports the requested platforms.
- }
- b = bb
- break
- }
- }
-
- if b.Driver == "" && opts.Builder == "" {
-
- // If we STILL don't have a builder, create a docker-container instance.
- b, err = builder.Create(
- ctx,
- txn,
- h.cli,
- builder.CreateOpts{Driver: "docker-container"},
- )
- if err != nil {
- return nil, fmt.Errorf("creating builder: %w", err)
- }
- ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
- defer cancel()
- if _, err := b.Boot(ctx); err != nil {
- return nil, fmt.Errorf("booting builder: %w", err)
- }
- }
-
- // Attempt to load nodes in order to determine the builder's driver. Ignore
- // errors for "exec" builds because it's possible to request builders with
- // drivers that are unknown to us.
- nodes, err := b.LoadNodes(ctx, builder.WithData())
- if err != nil && !build.ShouldExec() {
- if strings.Contains(err.Error(), "failed to find driver") {
- //nolint:revive // Human-readable.
- err = errors.Join(err, errors.New(
- "Use `exec: true` if you're trying to use Docker Build Cloud or other custom drivers.",
- ))
- }
- return nil, fmt.Errorf("loading nodes: %w", err)
- }
- // Attempt to determine our builder's buildkit version.
- for idx := range nodes {
- if nodes[idx].Version == "" {
- continue
- }
- v, err := semver.ParseTolerant(nodes[idx].Version)
- if err != nil {
- return nil, fmt.Errorf("parsing buildkit version %q: %w", nodes[idx].Version, err)
- }
- h.supportsMultipleExports = v.GE(semver.MustParse("0.13.0"))
- break
- }
-
- cached := &cachedBuilder{name: b.Name, driver: b.Driver, nodes: nodes}
- h.builders[opts.Builder] = cached
-
- return cached, nil
-}
-
-// cachedBuilder caches the builders we've loaded. Repeatedly fetching them can
-// sometimes result in EOF errors from the daemon, especially when under load.
-type cachedBuilder struct {
- name string
- driver string
- nodes []builder.Node
-}
diff --git a/provider/internal/image.go b/provider/internal/image.go
deleted file mode 100644
index 982abd2..0000000
--- a/provider/internal/image.go
+++ /dev/null
@@ -1,1045 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "context"
- "errors"
- "fmt"
- "reflect"
- "slices"
-
- // For examples/docs.
- _ "embed"
- // These imports are needed to register the drivers with buildkit.
- _ "github.com/docker/buildx/driver/docker-container"
- _ "github.com/docker/buildx/driver/kubernetes"
- _ "github.com/docker/buildx/driver/remote"
-
- "github.com/distribution/reference"
- controllerapi "github.com/docker/buildx/controller/pb"
- "github.com/docker/docker/errdefs"
- "github.com/moby/buildkit/exporter/containerimage/exptypes"
- "github.com/moby/buildkit/session"
- "github.com/moby/buildkit/session/secrets/secretsprovider"
- "github.com/regclient/regclient/types/ref"
-
- provider "github.com/pulumi/pulumi-go-provider"
- "github.com/pulumi/pulumi-go-provider/infer"
- "github.com/pulumi/pulumi/sdk/v3/go/property"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
-)
-
-var (
- _ infer.Annotated = (*Image)(nil)
- _ infer.Annotated = (*ImageArgs)(nil)
- _ infer.Annotated = (*ImageState)(nil)
- _ infer.CustomCheck[ImageArgs] = (*Image)(nil)
- _ infer.CustomDelete[ImageState] = (*Image)(nil)
- _ infer.CustomDiff[ImageArgs, ImageState] = (*Image)(nil)
- _ infer.CustomRead[ImageArgs, ImageState] = (*Image)(nil)
- _ infer.CustomResource[ImageArgs, ImageState] = (*Image)(nil)
- _ infer.CustomUpdate[ImageArgs, ImageState] = (*Image)(nil)
-)
-
-//go:embed embed/image-examples.md
-var _imageExamples string
-
-//go:embed embed/image-migration.md
-var _migration string
-
-// Image is a Docker image build using buildkit.
-type Image struct {
- clientF clientF
- config *Config
-}
-
-// Annotate provides a description of the Image resource.
-func (i *Image) Annotate(a infer.Annotator) {
- a.Describe(&i, dedent(`
- A Docker image built using buildx -- Docker's interface to the improved
- BuildKit backend.
-
- ## Stability
-
- **This resource is pre-1.0 and in public preview.**
-
- We will strive to keep APIs and behavior as stable as possible, but we
- cannot guarantee stability until version 1.0.
- `)+
- "\n\n"+_migration+
- "\n\n"+_imageExamples,
- )
-}
-
-// ImageArgs instantiates a new Image.
-type ImageArgs struct {
- AddHosts []string `pulumi:"addHosts,optional"`
- BuildArgs map[string]string `pulumi:"buildArgs,optional"`
- BuildOnPreview *bool `pulumi:"buildOnPreview,optional"`
- Builder *BuilderConfig `pulumi:"builder,optional"`
- CacheFrom []CacheFrom `pulumi:"cacheFrom,optional"`
- CacheTo []CacheTo `pulumi:"cacheTo,optional"`
- Context *BuildContext `pulumi:"context,optional"`
- Dockerfile *Dockerfile `pulumi:"dockerfile,optional"`
- Exports []Export `pulumi:"exports,optional"`
- Labels map[string]string `pulumi:"labels,optional"`
- Load bool `pulumi:"load,optional"`
- Network *NetworkMode `pulumi:"network,optional"`
- NoCache bool `pulumi:"noCache,optional"`
- Platforms []Platform `pulumi:"platforms,optional"`
- Pull bool `pulumi:"pull,optional"`
- Push bool `pulumi:"push"`
- Registries []Registry `pulumi:"registries,optional"`
- Secrets map[string]string `pulumi:"secrets,optional"`
- SSH []SSH `pulumi:"ssh,optional"`
- Tags []string `pulumi:"tags,optional"`
- Target string `pulumi:"target,optional"`
- Exec bool `pulumi:"exec,optional"`
-}
-
-// Annotate describes inputs to the Image resource.
-func (ia *ImageArgs) Annotate(a infer.Annotator) {
- a.Describe(&ia.AddHosts, dedent(`
- Custom "host:ip" mappings to use during the build.
-
- Equivalent to Docker's "--add-host" flag.
- `))
- a.Describe(&ia.BuildArgs, dedent(`
- "ARG" names and values to set during the build.
-
- These variables are accessed like environment variables inside "RUN"
- instructions.
-
- Build arguments are persisted in the image, so you should use "secrets"
- if these arguments are sensitive.
-
- Equivalent to Docker's "--build-arg" flag.
- `))
- a.Describe(&ia.BuildOnPreview, dedent(`
- Setting this to "false" will always skip image builds during previews,
- and setting it to "true" will always build images during previews.
-
- Images built during previews are never exported to registries, however
- cache manifests are still exported.
-
- On-disk Dockerfiles are always validated for syntactic correctness
- regardless of this setting.
-
- Defaults to "true" as a safeguard against broken images merging as part
- of CI pipelines.
- `))
- a.SetDefault(&ia.BuildOnPreview, pulumi.Bool(true))
- a.Describe(&ia.Builder, dedent(`
- Builder configuration.
- `))
- a.Describe(&ia.CacheFrom, dedent(`
- Cache export configuration.
-
- Equivalent to Docker's "--cache-from" flag.
- `))
- a.Describe(&ia.CacheTo, dedent(`
- Cache import configuration.
-
- Equivalent to Docker's "--cache-to" flag.
- `))
- a.Describe(&ia.Context, dedent(`
- Build context settings. Defaults to the current directory.
-
- Equivalent to Docker's "PATH | URL | -" positional argument.
- `))
- a.Describe(&ia.Dockerfile, dedent(`
- Dockerfile settings.
-
- Equivalent to Docker's "--file" flag.
- `))
- a.Describe(&ia.Exports, dedent(`
- Controls where images are persisted after building.
-
- Images are only stored in the local cache unless "exports" are
- explicitly configured.
-
- Exporting to multiple destinations requires a daemon running BuildKit
- 0.13 or later.
-
- Equivalent to Docker's "--output" flag.
- `))
- a.Describe(&ia.Labels, dedent(`
- Attach arbitrary key/value metadata to the image.
-
- Equivalent to Docker's "--label" flag.
- `))
- a.Describe(&ia.Load, dedent(`
- When "true" the build will automatically include a "docker" export.
-
- Defaults to "false".
-
- Equivalent to Docker's "--load" flag.
- `))
- a.Describe(&ia.Network, dedent(`
- Set the network mode for "RUN" instructions. Defaults to "default".
-
- For custom networks, configure your builder with "--driver-opt network=...".
-
- Equivalent to Docker's "--network" flag.
- `))
- a.Describe(&ia.NoCache, dedent(`
- Do not import cache manifests when building the image.
-
- Equivalent to Docker's "--no-cache" flag.
- `))
- a.Describe(&ia.Platforms, dedent(`
- Set target platform(s) for the build. Defaults to the host's platform.
-
- Equivalent to Docker's "--platform" flag.
- `))
- a.Describe(&ia.Pull, dedent(`
- Always pull referenced images.
-
- Equivalent to Docker's "--pull" flag.
- `))
- a.Describe(&ia.Push, dedent(`
- When "true" the build will automatically include a "registry" export.
-
- Defaults to "false".
-
- Equivalent to Docker's "--push" flag.
- `))
- a.Describe(&ia.Secrets, dedent(`
- A mapping of secret names to their corresponding values.
-
- Unlike the Docker CLI, these can be passed by value and do not need to
- exist on-disk or in environment variables.
-
- Build arguments and environment variables are persistent in the final
- image, so you should use this for sensitive values.
-
- Similar to Docker's "--secret" flag.
- `))
- a.Describe(&ia.SSH, dedent(`
- SSH agent socket or keys to expose to the build.
-
- Equivalent to Docker's "--ssh" flag.
- `))
- a.Describe(&ia.Tags, dedent(`
- Name and optionally a tag (format: "name:tag").
-
- If exporting to a registry, the name should include the fully qualified
- registry address (e.g. "docker.io/pulumi/pulumi:latest").
-
- Equivalent to Docker's "--tag" flag.
- `))
- a.Describe(&ia.Target, dedent(`
- Set the target build stage(s) to build.
-
- If not specified all targets will be built by default.
-
- Equivalent to Docker's "--target" flag.
- `))
- a.Describe(&ia.Registries, dedent(`
- Registry credentials. Required if reading or exporting to private
- repositories.
-
- Credentials are kept in-memory and do not pollute pre-existing
- credentials on the host.
-
- Similar to "docker login".
- `))
-
- a.Describe(&ia.Exec, dedent(`
- Use "exec" mode to build this image.
-
- By default the provider embeds a v25 Docker client with v0.12 buildx
- support. This helps ensure consistent behavior across environments and
- is compatible with alternative build backends (e.g. "buildkitd"), but
- it may not be desirable if you require a specific version of buildx.
- For example you may want to run a custom "docker-buildx" binary with
- support for [Docker Build
- Cloud](https://docs.docker.com/build/cloud/setup/) (DBC).
-
- When this is set to "true" the provider will instead execute the
- "docker-buildx" binary directly to perform its operations. The user is
- responsible for ensuring this binary exists, with correct permissions
- and pre-configured builders, at a path Docker expects (e.g.
- "~/.docker/cli-plugins").
-
- Debugging "exec" mode may be more difficult as Pulumi will not be able
- to surface fine-grained errors and warnings. Additionally credentials
- are temporarily written to disk in order to provide them to the
- "docker-buildx" binary.
- `))
-
- a.SetDefault(&ia.Network, Default)
-}
-
-// GetRegistries returns the image's registries, if any.
-func (ia ImageArgs) GetRegistries() []Registry {
- return ia.Registries
-}
-
-// ImageState is serialized to the program's state file.
-type ImageState struct {
- ImageArgs
-
- Digest string `pulumi:"digest" provider:"output"`
- ContextHash string `pulumi:"contextHash" provider:"output"`
- Ref string `pulumi:"ref" provider:"output"`
-}
-
-// Annotate describes outputs of the Image resource.
-func (is *ImageState) Annotate(a infer.Annotator) {
- is.ImageArgs.Annotate(a)
-
- a.Describe(&is.Digest, dedent(`
- A SHA256 digest of the image if it was exported to a registry or
- elsewhere.
-
- Empty if the image was not exported.
-
- Registry images can be referenced precisely as "@". The
- "ref" output provides one such reference as a convenience.
- `,
- ))
- a.Describe(&is.ContextHash, dedent(`
- A preliminary hash of the image's build context.
-
- Pulumi uses this to determine if an image _may_ need to be re-built.
- `))
- a.Describe(&is.Ref, dedent(`
- If the image was pushed to any registries then this will contain a
- single fully-qualified tag including the build's digest.
-
- If the image had tags but was not exported, this will take on a value
- of one of those tags.
-
- This will be empty if the image had no exports and no tags.
-
- This is only for convenience and may not be appropriate for situations
- where multiple tags or registries are involved. In those cases this
- output is not guaranteed to be stable.
-
- For more control over tags consumed by downstream resources you should
- use the "digest" output.
- `))
-}
-
-// client produces a CLI client scoped to this resource and layered on top of
-// any host-level credentials.
-func (i *Image) client(ctx context.Context, args ImageArgs) (Client, error) {
- return i.clientF(ctx, i.config.getHost(), i.config, args)
-}
-
-// Check validates ImageArgs, sets defaults, and ensures our client is
-// authenticated.
-func (i *Image) Check(
- ctx context.Context,
- req infer.CheckRequest,
-) (infer.CheckResponse[ImageArgs], error) {
- args, failures, err := infer.DefaultCheck[ImageArgs](ctx, req.NewInputs)
- if err != nil || len(failures) != 0 {
- return infer.CheckResponse[ImageArgs]{Failures: failures, Inputs: args}, err
- }
-
- // If the inputs aren't fully resolved we perform a weaker validation, for
- // example we might not be able to check the Dockerfile for syntactic
- // correctness.
- preview := property.New(req.NewInputs).HasComputed()
-
- cfg := infer.GetConfig[Config](ctx)
- supportsMultipleExports := true
- if cfg.host != nil {
- supportsMultipleExports = cfg.host.supportsMultipleExports
- }
- if _, berr := args.validate(supportsMultipleExports, preview); berr != nil {
- errs := berr.(interface{ Unwrap() []error }).Unwrap()
- for _, e := range errs {
- if cf, ok := e.(checkFailure); ok {
- failures = append(failures, cf.CheckFailure)
- }
- }
- }
-
- return infer.CheckResponse[ImageArgs]{Failures: failures, Inputs: args}, err
-}
-
-type checkFailure struct {
- provider.CheckFailure
-}
-
-func (cf checkFailure) Error() string {
- return cf.Reason
-}
-
-func newCheckFailure(err error, format string, args ...any) error {
- return checkFailure{
- provider.CheckFailure{Property: fmt.Sprintf(format, args...), Reason: err.Error()},
- }
-}
-
-// normalize returns a copy of ImageArgs after accounting for unknown (preview)
-// values and CLI push/load shorthand.
-//
-// During preview the go-provider sends unknown inputs as zero values. In order
-// to enable build-on-preview behavior, we omit zero values during previews.
-func (ia *ImageArgs) normalize(preview bool) ImageArgs {
- normalized := ImageArgs{
- AddHosts: filter(stringKeeper{preview}, ia.AddHosts...),
- BuildArgs: mapKeeper{preview}.keep(ia.BuildArgs),
- BuildOnPreview: ia.BuildOnPreview,
- Builder: ia.Builder,
- CacheFrom: filter(stringerKeeper[CacheFrom]{preview}, ia.CacheFrom...),
- CacheTo: filter(stringerKeeper[CacheTo]{preview}, ia.CacheTo...),
- Context: contextKeeper{preview}.keep(ia.Context),
- Dockerfile: ia.Dockerfile,
- Exports: filter(stringerKeeper[Export]{preview}, ia.Exports...),
- Labels: mapKeeper{preview}.keep(ia.Labels),
- Load: ia.Load,
- Network: ia.Network,
- NoCache: ia.NoCache,
- Platforms: filter(stringerKeeper[Platform]{preview}, ia.Platforms...),
- Pull: ia.Pull,
- Push: ia.Push,
- Registries: filter(registryKeeper{preview}, ia.Registries...),
- SSH: filter(stringerKeeper[SSH]{preview}, ia.SSH...),
- Secrets: mapKeeper{preview}.keep(ia.Secrets),
- Tags: filter(stringKeeper{preview}, ia.Tags...),
- Target: ia.Target,
- }
-
- // Handle --push/--load shorthand.
- if normalized.Push {
- normalized.Exports = append(normalized.Exports, Export{Raw: "type=registry"})
- }
- if normalized.Load {
- normalized.Exports = append(normalized.Exports, Export{Raw: "type=docker"})
- }
-
- return normalized
-}
-
-// buildable returns true if the ImageArgs has no unknown values and can
-// therefore be built during previews.
-func (ia *ImageArgs) buildable() bool {
- // We can build the given inputs if filtering unknowns is a no-op.
- filtered := ia.normalize(true)
- return reflect.DeepEqual(ia, &filtered)
-}
-
-// isExported returns true if the args include a registry export.
-func (ia *ImageArgs) isExported() bool {
- if ia.Push {
- return true
- }
- for _, e := range ia.Exports {
- if e.pushed() {
- return true
- }
- }
- return false
-}
-
-// shouldBuildOnPreview returns true if we should build this image during
-// previews.
-func (ia *ImageArgs) shouldBuildOnPreview() bool {
- if ia.BuildOnPreview != nil {
- return *ia.BuildOnPreview
- }
- return true
-}
-
-type build struct {
- opts controllerapi.BuildOptions
- secrets map[string]string
- inline string
- exec bool
-}
-
-func (b *build) BuildOptions() controllerapi.BuildOptions {
- return b.opts //nolint:govet // copylocks - not serialized.
-}
-
-func (b *build) Inline() string {
- return b.inline
-}
-
-func (b *build) Secrets() session.Attachable {
- m := map[string][]byte{}
- for k, v := range b.secrets {
- m[k] = []byte(v)
- }
- return secretsprovider.FromMap(m)
-}
-
-func (b *build) ShouldExec() bool {
- return b.exec
-}
-
-func (ia ImageArgs) toBuild(
- ctx context.Context,
- supportsMultipleExports bool,
- preview bool,
-) (Build, error) {
- opts, err := ia.validate(supportsMultipleExports, preview)
- if err != nil {
- return nil, err
- }
-
- if len(ia.Exports) == 0 && !ia.Push && !ia.Load {
- provider.GetLogger(ctx).Warning(
- "No exports were specified so the build will only remain in the local build cache. " +
- "Use `push` to upload the image to a registry, or silence this warning with a `cacheonly` export.")
- }
-
- if len(opts.Platforms) > 1 && len(opts.CacheTo) > 0 {
- provider.GetLogger(ctx).Warning(
- "Caching doesn't work reliably with multi-platform builds (https://github.com/docker/buildx/discussions/1382). " +
- "Instead, perform one cached build per platform and create an Index to join them all together.")
- }
-
- return &build{
- opts: opts, //nolint:govet // copylocks - not serialized.
- inline: ia.Dockerfile.Inline,
- secrets: ia.Secrets,
- exec: ia.Exec,
- }, nil
-}
-
-// validate confirms the ImageArgs are valid and returns BuildOptions
-// appropriate for passing to builders.
-func (ia *ImageArgs) validate(supportsMultipleExports, preview bool) (controllerapi.BuildOptions, error) {
- var multierr error
-
- if !supportsMultipleExports {
- if len(ia.Exports) > 1 {
- multierr = errors.Join(multierr,
- newCheckFailure(errors.New("multiple exports require a v0.13 buildkit daemon or newer"), "exports"),
- )
- }
- if ia.Push && ia.Load {
- multierr = errors.Join(
- multierr,
- newCheckFailure(
- errors.New("simultaneous push and load requires a v0.13 buildkit daemon or newer"),
- "push",
- ),
- )
- }
- if len(ia.Exports) > 0 && (ia.Push || ia.Load) {
- multierr = errors.Join(multierr,
- newCheckFailure(errors.New("multiple exports require a v0.13 buildkit daemon or newer"), "exports"),
- )
- }
- }
-
- dockerfile, context, err := ia.Context.validate(preview, ia.Dockerfile)
- if err != nil {
- multierr = errors.Join(multierr, err)
- }
- ia.Dockerfile = dockerfile
- // Set a default context if one wasn't provided.
- if ia.Context == nil {
- ia.Context = &BuildContext{Context: *context}
- }
-
- if err := ia.Dockerfile.validate(preview, context); err != nil {
- multierr = errors.Join(multierr, err)
- }
-
- // Discard any unknown inputs if this is a preview -- we don't want them to
- // cause validation errors.
- normalized := ia.normalize(preview)
-
- exports := []*controllerapi.ExportEntry{}
- for idx, e := range normalized.Exports {
- if e.Disabled {
- continue
- }
- exp, err := e.validate(preview, ia.Tags)
- if err != nil {
- multierr = errors.Join(multierr, newCheckFailure(err, "exports[%d]", idx))
- continue
- }
- if exp != nil {
- exports = append(exports, exp)
- }
- }
-
- platforms := []string{}
- for idx, p := range normalized.Platforms {
- platform, err := p.validate(preview)
- if err != nil {
- multierr = errors.Join(multierr, newCheckFailure(err, "platforms[%d]", idx))
- continue
- }
- if platform != "" {
- platforms = append(platforms, platform)
- }
- }
-
- cacheFrom := []*controllerapi.CacheOptionsEntry{}
- for idx, c := range normalized.CacheFrom {
- if c.String() == "" {
- continue // Disabled or unknown/preview.
- }
- cache, err := c.validate(preview)
- if err != nil {
- multierr = errors.Join(multierr, newCheckFailure(err, "cacheFrom[%d]", idx))
- continue
- }
- if cache != nil {
- cacheFrom = append(cacheFrom, cache)
- }
- }
-
- cacheTo := []*controllerapi.CacheOptionsEntry{}
- for idx, c := range normalized.CacheTo {
- if c.String() == "" {
- continue // Disabled or unknown/preview.
- }
- cache, err := c.validate(preview)
- if err != nil {
- multierr = errors.Join(multierr, newCheckFailure(err, "cacheTo[%d]", idx))
- continue
- }
- if cache != nil {
- cacheTo = append(cacheTo, cache)
- }
- }
-
- ssh := []*controllerapi.SSH{}
- for idx, s := range normalized.SSH {
- ss, err := s.validate()
- if err != nil {
- multierr = errors.Join(multierr, newCheckFailure(err, "ssh[%d]", idx))
- continue
- }
- if ss != nil {
- ssh = append(ssh, ss)
- }
- }
-
- for idx, t := range normalized.Tags {
- if _, err := reference.Parse(t); err != nil {
- multierr = errors.Join(multierr, newCheckFailure(err, "tags[%d]", idx))
- }
- }
-
- secrets := []*controllerapi.Secret{}
- for k, v := range normalized.Secrets {
- // We abuse the pb.Secret proto by stuffing the secret's value in
- // Env. We never serialize this proto so this is tolerable.
- secrets = append(secrets, &controllerapi.Secret{
- ID: k,
- Env: v,
- })
- }
-
- builder := BuilderConfig{}
- if normalized.Builder != nil {
- builder = *normalized.Builder
- }
-
- opts := controllerapi.BuildOptions{
- BuildArgs: normalized.BuildArgs,
- Builder: builder.Name,
- CacheFrom: cacheFrom,
- CacheTo: cacheTo,
- ContextPath: context.Location,
- DockerfileName: dockerfile.Location,
- Exports: exports,
- ExtraHosts: normalized.AddHosts,
- Labels: normalized.Labels,
- NetworkMode: normalized.Network.String(),
- NoCache: normalized.NoCache,
- NamedContexts: normalized.Context.namedMap(),
- Platforms: platforms,
- Pull: normalized.Pull,
- Secrets: secrets,
- SSH: ssh,
- Tags: normalized.Tags,
- Target: normalized.Target,
- }
-
- return opts, multierr //nolint:govet // copylocks - not serialized.
-}
-
-// Create builds an image using buildkit.
-func (i *Image) Create(
- ctx context.Context,
- req infer.CreateRequest[ImageArgs],
-) (infer.CreateResponse[ImageState], error) {
- input := req.Inputs
- state := ImageState{ImageArgs: input}
- id := req.Name
-
- // Default our ref to one of our tags.
- for _, tag := range state.Tags {
- if _, err := normalizeReference(tag); err != nil {
- continue
- }
- state.Ref = tag
- break
- }
-
- cli, err := i.client(ctx, input)
- if err != nil {
- return infer.CreateResponse[ImageState]{ID: id, Output: state}, err
- }
-
- ok, err := cli.BuildKitEnabled()
- if err != nil {
- return infer.CreateResponse[ImageState]{
- ID: id,
- Output: state,
- }, fmt.Errorf("checking buildkit compatibility: %w", err)
- }
- if !ok {
- return infer.CreateResponse[ImageState]{
- ID: id,
- Output: state,
- }, errors.New("buildkit is not supported on this host")
- }
-
- build, err := input.toBuild(ctx, cli.SupportsMultipleExports(), req.DryRun)
- if err != nil {
- return infer.CreateResponse[ImageState]{
- ID: id,
- Output: state,
- }, fmt.Errorf("preparing: %w", err)
- }
-
- hash, err := hashBuildContext(
- input.Context.Location,
- input.Dockerfile.Location,
- input.Context.Named.Map(),
- )
- if err != nil {
- return infer.CreateResponse[ImageState]{
- ID: id,
- Output: state,
- }, fmt.Errorf("hashing build context: %w", err)
- }
- state.ContextHash = hash
-
- if req.DryRun && !input.shouldBuildOnPreview() {
- return infer.CreateResponse[ImageState]{ID: id, Output: state}, nil
- }
- if req.DryRun && !input.buildable() {
- provider.GetLogger(ctx).Warning("Skipping preview build because some inputs are unknown.")
- return infer.CreateResponse[ImageState]{ID: id, Output: state}, nil
- }
-
- result, err := cli.Build(ctx, build)
- if err != nil {
- return infer.CreateResponse[ImageState]{ID: id, Output: state}, err
- }
-
- if d, ok := result.ExporterResponse[exptypes.ExporterImageDigestKey]; ok {
- state.Digest = d
- id = d
- }
-
- if state.Digest == "" {
- // Can't construct a ref, nothing else to do.
- return infer.CreateResponse[ImageState]{ID: id, Output: state}, nil
- }
-
- // Take the first registry tag we find and add a digest to it. That becomes
- // our simplified "ref" output.
- for _, tag := range state.Tags {
- ref, ok := addDigest(tag, state.Digest)
- if !ok {
- continue
- }
-
- state.Ref = ref
- break
- }
-
- return infer.CreateResponse[ImageState]{ID: id, Output: state}, nil
-}
-
-// Update builds a new image. Normally we create-replace resources, but for
-// images built locally there is nothing to delete. We treat those cases as
-// updates and simply re-build the image without deleting anything.
-func (i *Image) Update(
- ctx context.Context,
- req infer.UpdateRequest[ImageArgs, ImageState],
-) (infer.UpdateResponse[ImageState], error) {
- resp, err := i.Create(ctx,
- infer.CreateRequest[ImageArgs]{Name: req.ID, Inputs: req.Inputs, DryRun: req.DryRun},
- )
- return infer.UpdateResponse[ImageState]{Output: resp.Output}, err
-}
-
-// Read attempts to read manifests from an image's exports. An image without
-// exports will have no manifests.
-func (i *Image) Read(
- ctx context.Context,
- req infer.ReadRequest[ImageArgs, ImageState],
-) (
- infer.ReadResponse[ImageArgs, ImageState],
- error,
-) {
- state, input := req.State, req.Inputs
-
- cli, err := i.client(ctx, input)
- if err != nil {
- return infer.ReadResponse[ImageArgs, ImageState]{
- ID: req.ID,
- Inputs: input,
- State: state,
- }, err
- }
-
- if !state.isExported() {
- // Nothing was pushed -- all done.
- return infer.ReadResponse[ImageArgs, ImageState]{
- ID: req.ID,
- Inputs: input,
- State: state,
- }, nil
- }
-
- tagsToKeep := []string{}
-
- // Do a lookup on all of the tags at the digests we expect to see.
- for _, tag := range state.Tags {
- ref, ok := addDigest(tag, state.Digest)
- if !ok {
- // Not a pushed tag.
- tagsToKeep = append(tagsToKeep, tag)
- break
- }
-
- // Does a tag with this digest exist?
- descriptors, err := cli.Inspect(ctx, ref)
- if err != nil {
- provider.GetLogger(ctx).Warning(err.Error())
- continue
- }
-
- //nolint:gocritic // Bytes aren't copied in a hot path.
- for _, d := range descriptors {
- if d.Platform != nil && d.Platform.Architecture == "unknown" {
- // Ignore cache manifests.
- continue
- }
-
- tagsToKeep = append(tagsToKeep, tag)
- break
- }
- }
-
- // If we couldn't find the tags we expected then return an empty ID to
- // delete the resource.
- if len(input.Tags) > 0 && len(tagsToKeep) == 0 {
- return infer.ReadResponse[ImageArgs, ImageState]{ID: "", Inputs: input, State: state}, nil
- }
-
- state.Tags = tagsToKeep
-
- return infer.ReadResponse[ImageArgs, ImageState]{ID: req.ID, Inputs: input, State: state}, nil
-}
-
-// Delete deletes an Image. If the Image was already deleted out-of-band it is
-// treated as a success.
-func (i *Image) Delete(
- ctx context.Context,
- req infer.DeleteRequest[ImageState],
-) (infer.DeleteResponse, error) {
- state := req.State
- cli, err := i.client(ctx, state.ImageArgs)
- if err != nil {
- return infer.DeleteResponse{}, err
- }
-
- if state.Digest == "" {
- // Nothing was exported. Just try to delete the local image.
- return infer.DeleteResponse{}, cli.Delete(ctx, state.Ref)
- }
-
- digests := []string{}
-
- // Construct a ref with digest for each repository we pushed to.
- for _, tag := range state.Tags {
- ref, err := ref.New(tag)
- if err != nil {
- continue
- }
- digested := ref.SetDigest(state.Digest)
- digests = append(digests, digested.CommonName())
- }
-
- slices.Sort(digests)
- digests = slices.Compact(digests)
-
- var multierr error
- for _, digested := range digests {
- err = cli.Delete(ctx, digested)
- if errdefs.IsNotFound(err) {
- provider.GetLogger(ctx).Warning(digested + " not found")
- continue // Nothing to do.
- }
- multierr = errors.Join(multierr, err)
- }
-
- return infer.DeleteResponse{}, multierr
-}
-
-// Diff re-implements most of the default diff behavior, with the exception of
-// ignoring "password" changes on registry inputs.
-func (*Image) Diff(
- _ context.Context,
- req infer.DiffRequest[ImageArgs, ImageState],
-) (provider.DiffResponse, error) {
- olds, news := req.State, req.Inputs
-
- diff := map[string]provider.PropertyDiff{}
- update := provider.PropertyDiff{Kind: provider.Update}
-
- if !reflect.DeepEqual(olds.AddHosts, news.AddHosts) {
- diff["addHosts"] = update
- }
- if !reflect.DeepEqual(olds.BuildArgs, news.BuildArgs) {
- diff["buildArgs"] = update
- }
- if !reflect.DeepEqual(olds.BuildOnPreview, news.BuildOnPreview) {
- diff["buildOnPreview"] = update
- }
- if !reflect.DeepEqual(olds.Builder, news.Builder) {
- diff["builder"] = update
- }
- if !reflect.DeepEqual(olds.CacheFrom, news.CacheFrom) {
- diff["cacheFrom"] = update
- }
- if !reflect.DeepEqual(olds.CacheTo, news.CacheTo) {
- diff["cacheTo"] = update
- }
- if olds.Context.Location != news.Context.Location {
- diff["context.location"] = update
- }
- if !reflect.DeepEqual(olds.Context.Named, news.Context.Named) {
- diff["context.named"] = update
- }
- dockerfile, _, _ := news.Context.validate(true, news.Dockerfile)
- if !reflect.DeepEqual(olds.Dockerfile, dockerfile) {
- diff["dockerfile"] = update
- }
- // Use string comparison to ignore any manifests attached to the export.
- if fmt.Sprint(olds.Exports) != fmt.Sprint(news.Exports) {
- diff["exports"] = update
- }
- // Confirm local exports exist.
- for idx, e := range news.Exports {
- if !e.Local.Exists() || !e.Tar.Exists() {
- diff[fmt.Sprintf("exports[%d]", idx)] = update
- }
- }
- if !reflect.DeepEqual(olds.Labels, news.Labels) {
- diff["labels"] = update
- }
- if olds.Load != news.Load {
- diff["load"] = update
- }
- if !reflect.DeepEqual(olds.Network, news.Network) {
- diff["network"] = update
- }
- if !reflect.DeepEqual(olds.NoCache, news.NoCache) {
- diff["noCache"] = update
- }
- if !reflect.DeepEqual(olds.Platforms, news.Platforms) {
- diff["platforms"] = update
- }
- if !reflect.DeepEqual(olds.Pull, news.Pull) {
- diff["pull"] = update
- }
- if !reflect.DeepEqual(olds.Push, news.Push) {
- diff["push"] = update
- }
- if !reflect.DeepEqual(olds.Secrets, news.Secrets) {
- diff["secrets"] = update
- }
- if !reflect.DeepEqual(olds.SSH, news.SSH) {
- diff["ssh"] = update
- }
- if !reflect.DeepEqual(olds.Tags, news.Tags) {
- diff["tags"] = update
- }
- if !reflect.DeepEqual(olds.Target, news.Target) {
- diff["target"] = update
- }
-
- // pull=true indicates that we want to keep base layers up-to-date. In this
- // case we'll always perform the build.
- if news.Pull && (len(news.Exports) > 0 || news.Push || news.Load) {
- diff["contextHash"] = update
- }
-
- // Check if anything has changed in our build context.
- hash, err := hashBuildContext(
- news.Context.Location,
- dockerfile.Location,
- news.Context.Named.Map(),
- )
- if err != nil {
- return provider.DiffResponse{}, err
- }
- if hash != olds.ContextHash {
- diff["contextHash"] = update
- }
-
- // Registries need special handling because we ignore "password" changes to not introduce unnecessary changes.
- if len(olds.Registries) != len(news.Registries) {
- diff["registries"] = update
- } else {
- for idx, oldr := range olds.Registries {
- newr := news.Registries[idx]
- if (oldr.Username == newr.Username) && (oldr.Address == newr.Address) {
- continue
- }
- diff[fmt.Sprintf("registries[%d]", idx)] = update
- break
- }
- }
-
- return provider.DiffResponse{
- HasChanges: len(diff) > 0,
- DetailedDiff: diff,
- }, nil
-}
-
-// addDigest constructs a tagged ref with an "@" suffix.
-//
-// Returns false if the given ref was not fully qualified.
-func addDigest(ref, digest string) (string, bool) {
- named, err := reference.ParseNamed(ref)
- if err != nil {
- return "", false
- }
- tag := "latest"
- if tagged, ok := named.(reference.Tagged); ok {
- tag = tagged.Tag()
- }
-
- full, err := reference.Parse(
- fmt.Sprintf("%s:%s@%s", named.Name(), tag, digest),
- )
- if err != nil {
- return "", false
- }
-
- return full.String(), true
-}
diff --git a/provider/internal/image_test.go b/provider/internal/image_test.go
deleted file mode 100644
index defe144..0000000
--- a/provider/internal/image_test.go
+++ /dev/null
@@ -1,1133 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "context"
- "errors"
- "fmt"
- "os"
- "path/filepath"
- "testing"
-
- _ "github.com/docker/buildx/driver/docker-container"
-
- "github.com/distribution/reference"
- pb "github.com/docker/buildx/controller/pb"
- "github.com/moby/buildkit/client"
- "github.com/moby/buildkit/exporter/containerimage/exptypes"
- "github.com/regclient/regclient/types/descriptor"
- "github.com/regclient/regclient/types/platform"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- "go.uber.org/mock/gomock"
-
- provider "github.com/pulumi/pulumi-go-provider"
- "github.com/pulumi/pulumi-go-provider/infer"
- "github.com/pulumi/pulumi-go-provider/integration"
- "github.com/pulumi/pulumi/sdk/v3/go/common/resource"
- "github.com/pulumi/pulumi/sdk/v3/go/common/util/mapper"
- "github.com/pulumi/pulumi/sdk/v3/go/property"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
-)
-
-var _fakeURN = resource.NewURN("test", "provider", "a", "docker-build:index:Image", "test")
-
-func TestImageLifecycle(t *testing.T) {
- t.Parallel()
- noClient := func(t *testing.T) Client {
- ctrl := gomock.NewController(t)
- return NewMockClient(ctrl)
- }
-
- _, err := reference.ParseNamed("docker.io/pulumibot/buildkit-e2e")
- require.NoError(t, err)
-
- tests := []struct {
- name string
-
- op func(t *testing.T) integration.Operation
- client func(t *testing.T) Client
- }{
- {
- name: "happy path builds",
- client: func(t *testing.T) Client {
- ctrl := gomock.NewController(t)
- c := NewMockClient(ctrl)
- c.EXPECT().BuildKitEnabled().Return(true, nil).AnyTimes()
- c.EXPECT().SupportsMultipleExports().Return(true).AnyTimes()
- c.EXPECT().Build(gomock.Any(), gomock.AssignableToTypeOf(&build{})).DoAndReturn(
- func(_ context.Context, b Build) (*client.SolveResponse, error) {
- assert.Equal(t, "testdata/noop/Dockerfile", b.BuildOptions().DockerfileName)
- return &client.SolveResponse{
- ExporterResponse: map[string]string{
- exptypes.ExporterImageDigestKey: "sha256:98ea6e4f216f2fb4b69fff9b3a44842c38686ca685f3f55dc48c5d3fb1107be4",
- },
- }, nil
- },
- ).AnyTimes()
- c.EXPECT().Delete(gomock.Any(),
- "docker.io/pulumibot/buildkit-e2e@sha256:98ea6e4f216f2fb4b69fff9b3a44842c38686ca685f3f55dc48c5d3fb1107be4",
- ).
- Return(nil)
- return c
- },
- op: func(t *testing.T) integration.Operation {
- return integration.Operation{
- Inputs: property.NewMap(map[string]property.Value{
- "push": property.New(false),
- "tags": property.New(
- []property.Value{
- property.New("docker.io/pulumibot/buildkit-e2e"),
- property.New("docker.io/pulumibot/buildkit-e2e:main"),
- },
- ),
- "platforms": property.New(
- []property.Value{
- property.New("linux/arm64"),
- property.New("linux/amd64"),
- },
- ),
- "context": property.New(map[string]property.Value{
- "location": property.New("testdata/noop"),
- }),
- "dockerfile": property.New(map[string]property.Value{
- "location": property.New("testdata/noop/Dockerfile"),
- }),
- "exports": property.New(
- []property.Value{
- property.New(map[string]property.Value{
- "raw": property.New("type=registry"),
- },
- ),
- },
- ),
- "registries": property.New(
- []property.Value{
- property.New(map[string]property.Value{
- "address": property.New("fakeaddress"),
- "username": property.New("fakeuser"),
- "password": property.New("password").WithSecret(true),
- }),
- },
- ),
- }),
- }
- },
- },
- {
- name: "tags are required when pushing",
- client: noClient,
- op: func(t *testing.T) integration.Operation {
- return integration.Operation{
- Inputs: property.NewMap(map[string]property.Value{
- "push": property.New(false),
- "tags": property.New([]property.Value{}),
- "context": property.New(map[string]property.Value{
- "location": property.New("testdata/noop"),
- }),
- "exports": property.New(
- []property.Value{
- property.New(map[string]property.Value{
- "raw": property.New("type=registry"),
- }),
- },
- ),
- }),
- ExpectFailure: true,
- CheckFailures: []provider.CheckFailure{
- {
- Property: "exports[0]",
- Reason: "at least one tag or export name is needed when pushing to a registry",
- },
- },
- }
- },
- },
- {
- name: "invalid exports",
- client: noClient,
- op: func(t *testing.T) integration.Operation {
- return integration.Operation{
- Inputs: property.NewMap(map[string]property.Value{
- "push": property.New(false),
- "tags": property.New(
- []property.Value{property.New("invalid-exports")},
- ),
- "exports": property.New(
- []property.Value{
- property.New(map[string]property.Value{
- "raw": property.New("type="),
- }),
- },
- ),
- }),
- ExpectFailure: true,
- CheckFailures: []provider.CheckFailure{{
- Property: "exports[0]",
- Reason: "type is required for output",
- }},
- }
- },
- },
- {
- name: "requires buildkit",
- client: func(t *testing.T) Client {
- ctrl := gomock.NewController(t)
- c := NewMockClient(ctrl)
- gomock.InOrder(
- c.EXPECT().BuildKitEnabled().Return(false, nil), // Preview.
- )
- return c
- },
- op: func(t *testing.T) integration.Operation {
- return integration.Operation{
- Inputs: property.NewMap(map[string]property.Value{
- "push": property.New(false),
- "tags": property.New(
- []property.Value{property.New("foo")},
- ),
- "context": property.New(map[string]property.Value{
- "location": property.New("testdata/noop"),
- }),
- }),
- ExpectFailure: true,
- }
- },
- },
- {
- name: "error reading DOCKER_BUILDKIT",
- client: func(t *testing.T) Client {
- ctrl := gomock.NewController(t)
- c := NewMockClient(ctrl)
- gomock.InOrder(
- c.EXPECT().
- BuildKitEnabled().
- Return(false, errors.New("invalid DOCKER_BUILDKIT")), // Preview.
- )
- return c
- },
- op: func(t *testing.T) integration.Operation {
- return integration.Operation{
- Inputs: property.NewMap(map[string]property.Value{
- "push": property.New(false),
- "tags": property.New(
- []property.Value{property.New("foo")},
- ),
- "context": property.New(map[string]property.Value{
- "location": property.New("testdata/noop"),
- }),
- }),
- ExpectFailure: true,
- }
- },
- },
- {
- name: "file defaults to Dockerfile",
- client: func(t *testing.T) Client {
- ctrl := gomock.NewController(t)
- c := NewMockClient(ctrl)
- c.EXPECT().BuildKitEnabled().Return(true, nil).AnyTimes()
- c.EXPECT().SupportsMultipleExports().Return(true).AnyTimes()
- c.EXPECT().Build(gomock.Any(), gomock.AssignableToTypeOf(&build{})).DoAndReturn(
- func(_ context.Context, b Build) (*client.SolveResponse, error) {
- assert.Equal(t, "testdata/noop/Dockerfile", b.BuildOptions().DockerfileName)
- return &client.SolveResponse{
- ExporterResponse: map[string]string{"image.name": "test:latest"},
- }, nil
- },
- ).AnyTimes()
- c.EXPECT().Delete(gomock.Any(), "default-dockerfile").Return(nil)
- return c
- },
- op: func(t *testing.T) integration.Operation {
- return integration.Operation{
- Inputs: property.NewMap(map[string]property.Value{
- "push": property.New(false),
- "tags": property.New(
- []property.Value{
- property.New("default-dockerfile"),
- },
- ),
- "context": property.New(map[string]property.Value{
- "location": property.New("testdata/noop"),
- }),
- }),
- Hook: func(_, output property.Map) {
- dockerfile := output.Get("dockerfile")
- require.NotNil(t, dockerfile)
- require.True(t, dockerfile.IsMap())
- location := dockerfile.AsMap().Get("location")
- require.True(t, location.IsString())
- assert.Equal(t, "testdata/noop/Dockerfile", location.AsString())
- },
- }
- },
- },
- {
- name: "context defaults to current directory (pulumi-docker-build#78)",
- client: func(t *testing.T) Client {
- ctrl := gomock.NewController(t)
- c := NewMockClient(ctrl)
- c.EXPECT().BuildKitEnabled().Return(true, nil).AnyTimes()
- c.EXPECT().SupportsMultipleExports().Return(true).AnyTimes()
- c.EXPECT().Build(gomock.Any(), gomock.AssignableToTypeOf(&build{})).DoAndReturn(
- func(_ context.Context, b Build) (*client.SolveResponse, error) {
- assert.Equal(t, "FROM alpine:latest", b.Inline())
- return &client.SolveResponse{
- ExporterResponse: map[string]string{"image.name": "alpine:latest"},
- }, nil
- },
- ).AnyTimes()
- c.EXPECT().Delete(gomock.Any(), "inline-dockerfile").Return(nil)
- return c
- },
- op: func(t *testing.T) integration.Operation {
- return integration.Operation{
- Inputs: property.NewMap(map[string]property.Value{
- "push": property.New(false),
- "tags": property.New(
- []property.Value{
- property.New("inline-dockerfile"),
- },
- ),
- "buildOnPreview": property.New(true),
- "dockerfile": property.New(map[string]property.Value{
- "inline": property.New("FROM alpine:latest"),
- }),
- }),
- Hook: func(_, output property.Map) {
- context := output.Get("context")
- require.NotNil(t, context)
- require.True(t, context.IsMap())
- location := context.AsMap().Get("location")
- require.True(t, location.IsString())
- assert.Equal(t, ".", location.AsString())
- },
- }
- },
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
- lc := integration.LifeCycleTest{
- Resource: "docker-build:index:Image",
- Create: tt.op(t),
- }
- s := newServer(t.Context(), t, mockClientF(tt.client(t)))
-
- err := s.Configure(provider.ConfigureRequest{})
- require.NoError(t, err)
-
- lc.Run(t, s)
- })
- }
-}
-
-type errNotFound struct{}
-
-func (errNotFound) NotFound() {}
-func (errNotFound) Error() string { return "not found " }
-
-func TestDelete(t *testing.T) {
- t.Parallel()
- t.Run("image was already deleted", func(t *testing.T) {
- t.Parallel()
- ctrl := gomock.NewController(t)
- client := NewMockClient(ctrl)
- client.EXPECT().
- Delete(gomock.Any(), "docker.io/pulumi/test@sha256:foo").
- Return(errNotFound{})
-
- i := &Image{clientF: mockClientF(client)}
-
- _, err := i.Delete(t.Context(), infer.DeleteRequest[ImageState]{
- ID: "foo,bar",
- State: ImageState{
- ImageArgs: ImageArgs{
- Tags: []string{"docker.io/pulumi/test:foo"},
- Push: true,
- },
- Digest: "sha256:foo",
- },
- })
- assert.NoError(t, err)
- })
-}
-
-func TestRead(t *testing.T) {
- t.Parallel()
- tag := "docker.io/pulumi/pulumitest"
- digest := "sha256:3be99cafdcd80a8e620da56bdc215acab6213bb608d3d492c0ba1807128786a1"
-
- ctrl := gomock.NewController(t)
- client := NewMockClient(ctrl)
- client.EXPECT().Inspect(gomock.Any(), fmt.Sprintf("%s:latest@%s", tag, digest)).Return(
- []descriptor.Descriptor{
- {
- Platform: &platform.Platform{Architecture: "arm64"},
- },
- {
- Platform: &platform.Platform{Architecture: "unknown"},
- },
- }, nil)
-
- i := &Image{clientF: mockClientF(client)}
-
- resp, err := i.Read(t.Context(), infer.ReadRequest[ImageArgs, ImageState]{
- ID: "my-image",
- State: ImageState{
- ImageArgs: ImageArgs{
- Exports: []Export{{Raw: "type=registry"}},
- Tags: []string{tag},
- },
- Digest: digest,
- },
- })
-
- require.NoError(t, err)
- assert.Equal(t, []string{tag}, resp.State.Tags)
-}
-
-func TestImageDiff(t *testing.T) {
- t.Parallel()
- emptyDir := t.TempDir()
- host := Host
-
- hash, err := hashBuildContext(emptyDir, "", nil)
- require.NoError(t, err)
- baseArgs := ImageArgs{
- Context: &BuildContext{Context: Context{Location: emptyDir}},
- Dockerfile: &Dockerfile{Location: "testdata/noop"},
- Tags: []string{},
- }
- baseState := ImageState{
- ContextHash: hash,
- ImageArgs: baseArgs,
- }
-
- tests := []struct {
- name string
- state func(*testing.T, ImageState) ImageState
- inputs func(*testing.T, ImageArgs) ImageArgs
-
- wantChanges bool
- }{
- {
- name: "no diff if build context is unchanged",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(*testing.T, ImageArgs) ImageArgs { return baseArgs },
- wantChanges: false,
- },
- {
- name: "no diff if registry password changes",
- state: func(_ *testing.T, s ImageState) ImageState {
- s.Registries = []Registry{{
- Address: "foo",
- Username: "foo",
- Password: "foo",
- }}
- return s
- },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.Registries = []Registry{{
- Address: "foo",
- Username: "foo",
- Password: "DIFFERENT PASSWORD",
- }}
- return a
- },
- wantChanges: false,
- },
- {
- name: "no diff if pull=true but no exports",
- state: func(_ *testing.T, is ImageState) ImageState {
- is.Pull = true
- return is
- },
- inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
- ia.Pull = true
- return ia
- },
- wantChanges: false,
- },
- {
- name: "diff if pull=true with exports",
- state: func(_ *testing.T, is ImageState) ImageState {
- is.Pull = true
- is.Load = true
- return is
- },
- inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
- ia.Pull = true
- ia.Load = true
- return ia
- },
- wantChanges: true,
- },
- {
- name: "diff if build context changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(t *testing.T, a ImageArgs) ImageArgs {
- tmp := filepath.Join(a.Context.Location, "tmp")
- err := os.WriteFile(tmp, []byte{}, 0o600)
- require.NoError(t, err)
- t.Cleanup(func() { _ = os.Remove(tmp) })
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if registry added",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.Registries = []Registry{{}}
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if registry user changes",
- state: func(_ *testing.T, s ImageState) ImageState {
- s.Registries = []Registry{{
- Address: "foo",
- Username: "foo",
- Password: "foo",
- }}
- return s
- },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.Registries = []Registry{{
- Address: "DIFFERENT USER",
- Username: "foo",
- Password: "foo",
- }}
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if buildArgs changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.BuildArgs = map[string]string{
- "foo": "bar",
- }
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if pull changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
- ia.Pull = true
- return ia
- },
- wantChanges: true,
- },
- {
- name: "diff if load changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
- ia.Load = true
- return ia
- },
- wantChanges: true,
- },
- {
- name: "diff if push changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
- ia.Push = true
- return ia
- },
- wantChanges: true,
- },
- {
- name: "diff if buildOnPreview doesn't change",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
- val := true
- ia.BuildOnPreview = &val
- return ia
- },
- wantChanges: true,
- },
- {
- name: "diff if buildOnPreview changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
- val := false
- ia.BuildOnPreview = &val
- return ia
- },
- wantChanges: true,
- },
- {
- name: "diff if ssh changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
- ia.SSH = []SSH{{ID: "default"}}
- return ia
- },
- wantChanges: true,
- },
- {
- name: "diff if hosts change",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
- ia.AddHosts = []string{"localhost"}
- return ia
- },
- wantChanges: true,
- },
- {
- name: "diff if cacheFrom changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.CacheFrom = []CacheFrom{{Raw: "a"}}
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if cacheTo changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.CacheTo = []CacheTo{{Raw: "a"}}
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if context changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.Context = &BuildContext{Context: Context{Location: "testdata/ignores"}}
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if named context changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.Context = &BuildContext{Named: NamedContexts{"foo": Context{Location: "bar"}}}
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if network changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.Network = &host
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if dockerfile location changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.Dockerfile = &Dockerfile{Location: "testdata/ignores/basedir/Dockerfile"}
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if dockerfile inline changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.Dockerfile = &Dockerfile{Inline: "FROM scratch"}
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if platforms change",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.Platforms = []Platform{"linux/amd64"}
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if pull changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.Pull = true
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if builder changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.Builder = &BuilderConfig{Name: "foo"}
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if tags change",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.Tags = []string{"foo"}
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if exports change",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.Exports = []Export{{Raw: "foo"}}
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if target changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.Target = "foo"
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if pulling",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.Pull = true
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if noCache changes",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.NoCache = true
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if labels change",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.Labels = map[string]string{"foo": "bar"}
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if secrets change",
- state: func(*testing.T, ImageState) ImageState { return baseState },
- inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
- a.Secrets = map[string]string{"foo": "bar"}
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if local export doesn't exist",
- state: func(t *testing.T, state ImageState) ImageState {
- state.Exports = []Export{
- {Local: &ExportLocal{Dest: "not-real"}},
- }
- return state
- },
- inputs: func(_ *testing.T, args ImageArgs) ImageArgs {
- args.Exports = []Export{
- {Local: &ExportLocal{Dest: "not-real"}},
- }
- return args
- },
- wantChanges: true,
- },
- {
- name: "diff if tar export doesn't exist",
- state: func(t *testing.T, state ImageState) ImageState {
- state.Exports = []Export{
- {Tar: &ExportTar{ExportLocal: ExportLocal{Dest: "not-real"}}},
- }
- return state
- },
- inputs: func(_ *testing.T, args ImageArgs) ImageArgs {
- args.Exports = []Export{
- {Tar: &ExportTar{ExportLocal: ExportLocal{Dest: "not-real"}}},
- }
- return args
- },
- wantChanges: true,
- },
- }
-
- s := newServer(t.Context(), t, nil)
-
- encode := func(t *testing.T, x any) property.Map {
- raw, err := mapper.New(&mapper.Opts{IgnoreMissing: true}).Encode(x)
- require.NoError(t, err)
- return resource.FromResourcePropertyMap(resource.NewPropertyMapFromMap(raw))
- }
-
- for _, tt := range tests {
- baseState := baseState
- baseArgs := baseArgs
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
- resp, err := s.Diff(provider.DiffRequest{
- Urn: _fakeURN,
- State: encode(t, tt.state(t, baseState)),
- Inputs: encode(t, tt.inputs(t, baseArgs)),
- })
- assert.NoError(t, err)
- assert.Equal(t, tt.wantChanges, resp.HasChanges, resp.DetailedDiff)
- })
- }
-}
-
-func TestValidateImageArgs(t *testing.T) {
- t.Run("invalid inputs", func(t *testing.T) {
- t.Parallel()
- args := ImageArgs{
- Tags: []string{"a/bad:tag:format"},
- Exports: []Export{{Raw: "badexport,-"}},
- Context: &BuildContext{Context: Context{Location: "./testdata"}},
- Platforms: []Platform{","},
- CacheFrom: []CacheFrom{{Raw: "=badcachefrom"}},
- CacheTo: []CacheTo{{Raw: "=badcacheto"}},
- }
-
- _, err := args.validate(true, false)
- assert.ErrorContains(t, err, "invalid value badexport")
- assert.ErrorContains(t, err, "OSAndVersion specifier component must matc")
- assert.ErrorContains(t, err, "badcachefrom")
- assert.ErrorContains(t, err, "badcacheto")
- assert.ErrorContains(t, err, "invalid reference format")
- assert.ErrorContains(t, err, "testdata/Dockerfile")
- })
-
- t.Run("buildOnPreview", func(t *testing.T) {
- t.Parallel()
- args := ImageArgs{
- Context: &BuildContext{Context: Context{Location: "testdata/noop"}},
- Tags: []string{"my-tag"},
- Exports: []Export{{Registry: &ExportRegistry{ExportImage{Push: pulumi.BoolRef(true)}}}},
- }
- actual, err := args.validate(true, true)
- assert.NoError(t, err)
- assert.Equal(t, "image", actual.Exports[0].Type)
- assert.Equal(t, "false", actual.Exports[0].Attrs["push"])
-
- actual, err = args.validate(true, false)
- assert.NoError(t, err)
- assert.Equal(t, "image", actual.Exports[0].Type)
- assert.Equal(t, "true", actual.Exports[0].Attrs["push"])
- })
-
- t.Run("unknowns", func(t *testing.T) {
- t.Parallel()
- // pulumi-go-provider gives us zero-values when a property is unknown.
- // We can't distinguish this from user-provided zero-values, but we
- // should:
- // - not fail previews due to these zero values,
- // - not attempt builds with invalid zero values,
- // - not allow invalid zero values in non-preview operations.
- unknowns := ImageArgs{
- BuildArgs: map[string]string{
- "known": "value",
- "": "",
- },
- Builder: nil,
- CacheFrom: []CacheFrom{{GHA: &CacheFromGitHubActions{}}, {Raw: ""}},
- CacheTo: []CacheTo{{GHA: &CacheToGitHubActions{}}, {Raw: ""}},
- Context: nil,
- Exports: []Export{{Raw: ""}},
- Dockerfile: nil,
- Platforms: []Platform{"linux/amd64", ""},
- Registries: []Registry{
- {
- Address: "",
- Password: "",
- Username: "",
- },
- },
- Tags: []string{"known", ""},
- }
-
- _, err := unknowns.validate(true, true)
- assert.NoError(t, err)
- assert.False(t, unknowns.buildable())
-
- _, err = unknowns.validate(true, false)
- assert.Error(t, err)
- })
-
- t.Run("disabled caches", func(t *testing.T) {
- t.Parallel()
- args := ImageArgs{
- Context: &BuildContext{Context: Context{Location: "testdata/noop"}},
- CacheFrom: []CacheFrom{{Raw: "type=registry", Disabled: true}},
- CacheTo: []CacheTo{{Raw: "type=registry", Disabled: true}},
- Exports: []Export{{Raw: "type=registry", Disabled: true}},
- }
-
- opts, err := args.validate(true, true)
- assert.NoError(t, err)
- assert.Len(t, opts.CacheTo, 0)
- assert.Len(t, opts.CacheFrom, 0)
- assert.Len(t, opts.Exports, 0)
-
- opts, err = args.validate(true, false)
- assert.NoError(t, err)
- assert.Len(t, opts.CacheTo, 0)
- assert.Len(t, opts.CacheFrom, 0)
- assert.Len(t, opts.Exports, 0)
- })
-
- t.Run("environment variables", func(t *testing.T) {
- tests := []struct {
- name string
- envs map[string]string
- args ImageArgs
- wantCacheFrom *pb.CacheOptionsEntry
- wantCacheTo *pb.CacheOptionsEntry
- }{
- {
- name: "gha environment",
- envs: map[string]string{
- "ACTIONS_CACHE_URL": "test-cache-url",
- "ACTIONS_RUNTIME_TOKEN": "test-runtime-token",
- },
- args: ImageArgs{
- Context: &BuildContext{Context: Context{Location: "testdata/noop"}},
- CacheFrom: []CacheFrom{{GHA: &CacheFromGitHubActions{}}},
- CacheTo: []CacheTo{{GHA: &CacheToGitHubActions{
- CacheFromGitHubActions: CacheFromGitHubActions{},
- }}},
- },
- wantCacheFrom: &pb.CacheOptionsEntry{
- Type: "gha",
- Attrs: map[string]string{
- "token": "test-runtime-token",
- "url": "test-cache-url",
- },
- },
- wantCacheTo: &pb.CacheOptionsEntry{
- Type: "gha",
- Attrs: map[string]string{
- "token": "test-runtime-token",
- "url": "test-cache-url",
- },
- },
- },
- {
- name: "non-gha environment",
- envs: map[string]string{
- "ACTIONS_CACHE_URL": "",
- "ACTIONS_RUNTIME_TOKEN": "",
- },
- args: ImageArgs{
- Context: &BuildContext{Context: Context{Location: "testdata/noop"}},
- CacheFrom: []CacheFrom{{GHA: &CacheFromGitHubActions{}}},
- CacheTo: []CacheTo{{GHA: &CacheToGitHubActions{
- CacheFromGitHubActions: CacheFromGitHubActions{},
- }}},
- },
- wantCacheFrom: nil,
- wantCacheTo: nil,
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- for k, v := range tt.envs {
- t.Setenv(k, v)
- }
- validate := func(preview bool) {
- opts, err := tt.args.validate(true, preview)
- require.NoError(t, err)
- if tt.wantCacheFrom != nil {
- assert.Equal(t, tt.wantCacheFrom, opts.CacheFrom[0])
- } else {
- assert.Len(t, opts.CacheFrom, 0)
- }
- if tt.wantCacheTo != nil {
- assert.Equal(t, tt.wantCacheTo, opts.CacheTo[0])
- } else {
- assert.Len(t, opts.CacheTo, 0)
- }
- }
- validate(true)
- validate(false)
- })
- }
- })
-
- t.Run("multiple exports pre-0.13", func(t *testing.T) {
- t.Parallel()
- args := ImageArgs{
- Exports: []Export{{Raw: "type=local"}, {Raw: "type=tar"}},
- }
- _, err := args.validate(false, false)
- assert.ErrorContains(t, err, "multiple exports require a v0.13 buildkit daemon or newer")
- })
-
- t.Run("cache and export entries are union-ish", func(t *testing.T) {
- t.Parallel()
- args := ImageArgs{
- Exports: []Export{{Tar: &ExportTar{}, Local: &ExportLocal{}}},
- CacheTo: []CacheTo{{Raw: "type=tar", Local: &CacheToLocal{Dest: "/foo"}}},
- CacheFrom: []CacheFrom{{Raw: "type=tar", Registry: &CacheFromRegistry{}}},
- }
- _, err := args.validate(true, false)
- assert.ErrorContains(t, err, "exports should only specify one export type")
- assert.ErrorContains(t, err, "cacheFrom should only specify one cache type")
- assert.ErrorContains(t, err, "cacheTo should only specify one cache type")
- })
-
- t.Run("dockerfile parsing", func(t *testing.T) {
- t.Parallel()
- path := "./testdata/Dockerfile.invalid"
- data, err := os.ReadFile(path)
- require.NoError(t, err)
-
- for _, d := range []Dockerfile{
- {Location: path}, {Inline: string(data)},
- } {
- args := ImageArgs{Dockerfile: &d}
- _, err := args.validate(true, false)
- assert.ErrorContains(t, err, "unknown instruction: RUNN (did you mean RUN?)")
- }
- })
-}
-
-func TestBuildable(t *testing.T) {
- t.Parallel()
-
- tests := []struct {
- name string
- args ImageArgs
-
- want bool
- }{
- {
- name: "unknown tags",
- args: ImageArgs{Tags: []string{""}},
- want: false,
- },
- {
- name: "unknown exports",
- args: ImageArgs{
- Tags: []string{"known"},
- Exports: []Export{{Raw: ""}},
- },
- want: false,
- },
- {
- name: "unknown registry",
- args: ImageArgs{
- Tags: []string{"known"},
- Exports: []Export{{Docker: &ExportDocker{}}},
- Registries: []Registry{
- {
- Address: "docker.io",
- Username: "foo",
- Password: "",
- },
- },
- },
- want: false,
- },
- {
- name: "known tags",
- args: ImageArgs{
- Tags: []string{"known"},
- },
- want: true,
- },
- {
- name: "known exports",
- args: ImageArgs{
- Tags: []string{"known"},
- Exports: []Export{{Registry: &ExportRegistry{}}},
- },
- want: true,
- },
- {
- name: "known registry",
- args: ImageArgs{
- Tags: []string{"known"},
- Exports: []Export{{Registry: &ExportRegistry{}}},
- Registries: []Registry{
- {
- Address: "docker.io",
- Username: "foo",
- Password: "bar",
- },
- },
- },
- want: true,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
- actual := tt.args.buildable()
- assert.Equal(t, tt.want, actual)
- })
- }
-}
-
-func TestToBuild(t *testing.T) {
- t.Parallel()
- Max := Max
-
- ia := ImageArgs{
- Tags: []string{"foo", "bar"},
- Platforms: []Platform{"linux/amd64"},
- Context: &BuildContext{Context: Context{Location: "testdata/noop"}},
- CacheTo: []CacheTo{
- {GHA: &CacheToGitHubActions{CacheWithMode: CacheWithMode{&Max}}},
- {
- Registry: &CacheToRegistry{
- CacheFromRegistry: CacheFromRegistry{Ref: "docker.io/foo/bar"},
- },
- },
- {
- Registry: &CacheToRegistry{
- CacheFromRegistry: CacheFromRegistry{Ref: "docker.io/foo/bar:baz"},
- },
- },
- },
- CacheFrom: []CacheFrom{
- {S3: &CacheFromS3{Name: "bar"}},
- {Registry: &CacheFromRegistry{Ref: "docker.io/foo/bar"}},
- {Registry: &CacheFromRegistry{Ref: "docker.io/foo/bar:baz"}},
- },
- }
-
- _, err := ia.toBuild(context.Background(), true, false)
- assert.NoError(t, err)
-}
diff --git a/provider/internal/index.go b/provider/internal/index.go
deleted file mode 100644
index 3cbae69..0000000
--- a/provider/internal/index.go
+++ /dev/null
@@ -1,365 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "context"
- "errors"
- "fmt"
- "reflect"
- "strings"
-
- // For examples/docs.
- _ "embed"
-
- "github.com/regclient/regclient/types/errs"
-
- provider "github.com/pulumi/pulumi-go-provider"
- "github.com/pulumi/pulumi-go-provider/infer"
-)
-
-var (
- _ infer.Annotated = (*Index)(nil)
- _ infer.Annotated = (*IndexArgs)(nil)
- _ infer.Annotated = (*IndexState)(nil)
- _ infer.CustomCheck[IndexArgs] = (*Index)(nil)
- _ infer.CustomResource[IndexArgs, IndexState] = (*Index)(nil)
- _ infer.CustomDelete[IndexState] = (*Index)(nil)
- _ infer.CustomDiff[IndexArgs, IndexState] = (*Index)(nil)
- _ infer.CustomRead[IndexArgs, IndexState] = (*Index)(nil)
- _ infer.CustomUpdate[IndexArgs, IndexState] = (*Index)(nil)
-)
-
-//go:embed embed/index-examples.md
-var _indexExamples string
-
-// Index is an OCI index or manifest list on a remote registry.
-type Index struct {
- clientF clientF
- config *Config
-}
-
-// IndexArgs instantiate an Index.
-type IndexArgs struct {
- Tag string `pulumi:"tag"`
- Sources []string `pulumi:"sources"`
- Push *bool `pulumi:"push,optional"`
- Registry *Registry `pulumi:"registry,optional"`
-}
-
-func (i IndexArgs) isPushed() bool {
- if i.Push == nil {
- return true // default
- }
- return *i.Push
-}
-
-// GetRegistries returns the index's registry.
-func (i IndexArgs) GetRegistries() []Registry {
- if i.Registry == nil {
- return nil
- }
- return []Registry{*i.Registry}
-}
-
-// IndexState captures the state of an Index.
-type IndexState struct {
- IndexArgs
-
- Ref string `pulumi:"ref" provider:"output"`
-}
-
-// Annotate sets docstrings and defaults on Index.
-func (i *Index) Annotate(a infer.Annotator) {
- a.Describe(&i, dedent(`
- A wrapper around "docker buildx imagetools create" to create an index
- (or manifest list) referencing one or more existing images.
-
- In most cases you do not need an "Index" to build a multi-platform
- image -- specifying multiple platforms on the "Image" will handle this
- for you automatically.
-
- However, as of April 2024, building multi-platform images _with
- caching_ will only export a cache for one platform at a time (see [this
- discussion](https://github.com/docker/buildx/discussions/1382) for more
- details).
-
- Therefore this resource can be helpful if you are building
- multi-platform images with caching: each platform can be built and
- cached separately, and an "Index" can join them all together. An
- example of this is shown below.
-
- This resource creates an OCI image index or a Docker manifest list
- depending on the media types of the source images.
- `)+
- "\n\n"+_indexExamples,
- )
-}
-
-// Annotate sets docstrings and defaults on IndexArgs.
-func (i *IndexArgs) Annotate(a infer.Annotator) {
- a.Describe(&i.Registry, dedent(`
- Authentication for the registry where the tagged index will be pushed.
-
- Credentials can also be included with the provider's configuration.
- `))
- a.Describe(&i.Sources, dedent(`
- Existing images to include in the index.
- `))
- a.Describe(&i.Tag, dedent(`
- The tag to apply to the index.
- `))
- a.Describe(&i.Push, dedent(`
- If true, push the index to the target registry.
-
- Defaults to "true".
- `))
-
- a.SetDefault(&i.Push, true)
-}
-
-// Annotate sets docstrings on IndexState.
-func (i *IndexState) Annotate(a infer.Annotator) {
- a.Describe(&i.Ref, dedent(`
- The pushed tag with digest.
-
- Identical to the tag if the index was not pushed.
- `))
-}
-
-// Create is a passthrough to Update.
-func (i *Index) Create(
- ctx context.Context,
- req infer.CreateRequest[IndexArgs],
-) (infer.CreateResponse[IndexState], error) {
- resp, err := i.Update(ctx,
- infer.UpdateRequest[IndexArgs, IndexState]{
- ID: req.Name,
- State: IndexState{},
- Inputs: req.Inputs,
- DryRun: req.DryRun,
- },
- )
- return infer.CreateResponse[IndexState]{ID: req.Name, Output: resp.Output}, err
-}
-
-// Update performs `buildx imagetools create` to create a new OCI index /
-// manifest list.
-func (i *Index) Update(
- ctx context.Context,
- req infer.UpdateRequest[IndexArgs, IndexState],
-) (infer.UpdateResponse[IndexState], error) {
- state, input := req.State, req.Inputs
-
- state.IndexArgs = input
- state.Ref = input.Tag
-
- cli, err := i.client(ctx, input)
- if err != nil {
- return infer.UpdateResponse[IndexState]{Output: state}, err
- }
-
- if req.DryRun {
- return infer.UpdateResponse[IndexState]{Output: state}, nil
- }
-
- provider.GetLogger(ctx).
- Debugf("creating index with tag %s and sources %s", input.Tag, input.Sources)
-
- err = cli.ManifestCreate(ctx, input.isPushed(), input.Tag, input.Sources...)
- if err != nil {
- return infer.UpdateResponse[IndexState]{Output: state}, fmt.Errorf("creating: %w", err)
- }
-
- // Read remote manifest information, if it exists.
- live, err := i.Read(ctx,
- infer.ReadRequest[IndexArgs, IndexState]{ID: req.ID, Inputs: input, State: state},
- )
- if err != nil {
- return infer.UpdateResponse[IndexState]{Output: state}, fmt.Errorf("reading: %w", err)
- }
- return infer.UpdateResponse[IndexState]{Output: live.State}, nil
-}
-
-func (i *Index) Read(
- ctx context.Context,
- req infer.ReadRequest[IndexArgs, IndexState],
-) (infer.ReadResponse[IndexArgs, IndexState], error) {
- state, input := req.State, req.Inputs
-
- state.IndexArgs = input
- state.Ref = input.Tag
-
- if !input.isPushed() {
- provider.GetLogger(ctx).Debug("skipping read because index was not pushed")
- return infer.ReadResponse[IndexArgs, IndexState]{
- ID: req.ID,
- Inputs: input,
- State: state,
- }, nil // Nothing to read.
- }
-
- cli, err := i.client(ctx, input)
- if err != nil {
- return infer.ReadResponse[IndexArgs, IndexState]{
- ID: req.ID,
- Inputs: input,
- State: state,
- }, err
- }
-
- provider.GetLogger(ctx).Debug("reading index with tag " + input.Tag)
-
- digest, err := cli.ManifestInspect(ctx, input.Tag)
- if errors.Is(err, errs.ErrNotFound) {
- // A remote tag was expected but isn't there -- delete the resource.
- return infer.ReadResponse[IndexArgs, IndexState]{ID: "", Inputs: input, State: state}, nil
- }
- if errors.Is(err, errs.ErrHTTPUnauthorized) {
- provider.GetLogger(ctx).Warning("invalid credentials, skipping")
- return infer.ReadResponse[IndexArgs, IndexState]{
- ID: req.ID,
- Inputs: input,
- State: state,
- }, nil
- }
- if err != nil {
- return infer.ReadResponse[IndexArgs, IndexState]{
- ID: req.ID,
- Inputs: input,
- State: state,
- }, err
- }
-
- if ref, ok := addDigest(input.Tag, digest); ok {
- state.Ref = ref
- }
-
- return infer.ReadResponse[IndexArgs, IndexState]{ID: req.ID, Inputs: input, State: state}, nil
-}
-
-// Check confirms the Index's tag and source refs are all valid. This doesn't
-// fully capture input requirements -- for example buildx requires refs to all
-// exist on the same registry. This is sufficient to handle the most common
-// cases for now.
-func (i *Index) Check(
- ctx context.Context,
- req infer.CheckRequest,
-) (infer.CheckResponse[IndexArgs], error) {
- args, failures, err := infer.DefaultCheck[IndexArgs](ctx, req.NewInputs)
- if err != nil {
- return infer.CheckResponse[IndexArgs]{Failures: failures, Inputs: args}, err
- }
-
- if _, err := normalizeReference(args.Tag); args.Tag != "" && err != nil {
- failures = append(
- failures,
- provider.CheckFailure{
- Property: "target",
- Reason: err.Error(),
- },
- )
- }
-
- for idx, s := range args.Sources {
- if _, err := normalizeReference(s); s != "" && err != nil {
- failures = append(
- failures,
- provider.CheckFailure{
- Property: fmt.Sprintf("refs[%d]", idx),
- Reason: err.Error(),
- },
- )
- }
- }
-
- return infer.CheckResponse[IndexArgs]{Failures: failures, Inputs: args}, nil
-}
-
-// Delete attempts to delete the remote manifest.
-func (i *Index) Delete(
- ctx context.Context,
- req infer.DeleteRequest[IndexState],
-) (infer.DeleteResponse, error) {
- state := req.State
- if !state.isPushed() {
- return infer.DeleteResponse{}, nil // Nothing to delete.
- }
-
- cli, err := i.client(ctx, state.IndexArgs)
- if err != nil {
- return infer.DeleteResponse{}, err
- }
-
- err = cli.ManifestDelete(ctx, state.Ref)
- // TODO: Upstream buildx swallows the error types we'd like to test for
- // here.
- if err != nil && strings.Contains(err.Error(), "No such manifest:") {
- return infer.DeleteResponse{}, nil
- }
- return infer.DeleteResponse{}, err
-}
-
-// Diff returns a diff of proposed changes against current state. Ideally we
-// wouldn't need to implement all of this, but we currently have to in order to
-// force `ignoreChanges`-style behavior on our registry password (which can
-// change all the time due to short-lived AWS credentials).
-func (i *Index) Diff(
- _ context.Context,
- req infer.DiffRequest[IndexArgs, IndexState],
-) (provider.DiffResponse, error) {
- olds, news := req.State, req.Inputs
-
- diff := map[string]provider.PropertyDiff{}
- update := provider.PropertyDiff{Kind: provider.Update}
- replace := provider.PropertyDiff{Kind: provider.UpdateReplace}
-
- if olds.Tag != news.Tag {
- diff["tag"] = replace
- }
- if !reflect.DeepEqual(olds.Sources, news.Sources) {
- diff["sources"] = update
- }
- if olds.Registry != nil && news.Registry != nil {
- if olds.Registry.Address != news.Registry.Address {
- diff["registry.address"] = update
- if olds.Registry.Address != "" {
- diff["registry.address"] = replace
- }
- }
- if olds.Registry.Username != news.Registry.Username {
- diff["registry.username"] = update
- }
- }
- if (olds.Registry == nil && news.Registry != nil) ||
- (olds.Registry != nil && news.Registry == nil) {
- diff["registry"] = update
- }
- // Intentionally ignore changes to registry.password
-
- return provider.DiffResponse{
- HasChanges: len(diff) > 0,
- DetailedDiff: diff,
- }, nil
-}
-
-// client produces a CLI client scoped to this resource and layered on top of
-// any host-level credentials.
-func (i *Index) client(
- ctx context.Context,
- args IndexArgs,
-) (Client, error) {
- return i.clientF(ctx, i.config.getHost(), i.config, args)
-}
diff --git a/provider/internal/index_test.go b/provider/internal/index_test.go
deleted file mode 100644
index 5da04f3..0000000
--- a/provider/internal/index_test.go
+++ /dev/null
@@ -1,237 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "os"
- "testing"
-
- "github.com/regclient/regclient/types/errs"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- "go.uber.org/mock/gomock"
-
- provider "github.com/pulumi/pulumi-go-provider"
- "github.com/pulumi/pulumi-go-provider/integration"
- "github.com/pulumi/pulumi/sdk/v3/go/common/resource"
- "github.com/pulumi/pulumi/sdk/v3/go/common/util/mapper"
- "github.com/pulumi/pulumi/sdk/v3/go/property"
-)
-
-func TestIndexLifecycle(t *testing.T) {
- t.Parallel()
- realClient := func(t *testing.T) clientF { return RealClientF }
-
- tests := []struct {
- name string
- skip bool
-
- op func(t *testing.T) integration.Operation
- client func(t *testing.T) clientF
- }{
- {
- name: "not pushed",
- client: realClient,
- op: func(t *testing.T) integration.Operation {
- return integration.Operation{
- Inputs: property.NewMap(map[string]property.Value{
- "tag": property.New(
- "docker.io/pulumibot/buildkit-e2e:manifest-unit",
- ),
- "sources": property.New([]property.Value{
- property.New("docker.io/pulumibot/buildkit-e2e:arm64"),
- property.New("docker.io/pulumibot/buildkit-e2e:amd64"),
- }),
- "push": property.New(false),
- }),
- }
- },
- },
- {
- name: "pushed",
- skip: os.Getenv("DOCKER_HUB_PASSWORD") == "",
- client: realClient,
- op: func(t *testing.T) integration.Operation {
- return integration.Operation{
- Inputs: property.NewMap(map[string]property.Value{
- "tag": property.New(
- "docker.io/pulumibot/buildkit-e2e:manifest",
- ),
- "sources": property.New([]property.Value{
- property.New("docker.io/pulumibot/buildkit-e2e:arm64"),
- property.New("docker.io/pulumibot/buildkit-e2e:amd64"),
- }),
- "push": property.New(true),
- "registry": property.New(map[string]property.Value{
- "address": property.New("docker.io"),
- "username": property.New("pulumibot"),
- "password": property.New(os.Getenv("DOCKER_HUB_PASSWORD")).WithSecret(true),
- }),
- }),
- }
- },
- },
- {
- name: "expired credentials",
- client: func(t *testing.T) clientF {
- ctrl := gomock.NewController(t)
- c := NewMockClient(ctrl)
- c.EXPECT().ManifestCreate(gomock.Any(), true, gomock.Any(), gomock.Any())
- c.EXPECT().ManifestInspect(gomock.Any(), gomock.Any()).Return("", errs.ErrHTTPUnauthorized)
- c.EXPECT().ManifestDelete(gomock.Any(), gomock.Any()).Return(nil)
- return mockClientF(c)
- },
- op: func(t *testing.T) integration.Operation {
- return integration.Operation{
- Inputs: property.NewMap(map[string]property.Value{
- "tag": property.New(
- "docker.io/pulumibot/buildkit-e2e:manifest",
- ),
- "sources": property.New([]property.Value{
- property.New("docker.io/pulumibot/buildkit-e2e:arm64"),
- property.New("docker.io/pulumibot/buildkit-e2e:amd64"),
- }),
- "push": property.New(true),
- "registry": property.New(map[string]property.Value{
- "address": property.New("docker.io"),
- "username": property.New("pulumibot"),
- "password": property.New(os.Getenv("DOCKER_HUB_PASSWORD")).WithSecret(true),
- }),
- }),
- }
- },
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
- if tt.skip {
- t.Skip("missing environment variables")
- }
- lc := integration.LifeCycleTest{
- Resource: "docker-build:index:Index",
- Create: tt.op(t),
- }
- s := newServer(t.Context(), t, tt.client(t))
-
- err := s.Configure(provider.ConfigureRequest{})
- require.NoError(t, err)
-
- lc.Run(t, s)
- })
- }
-}
-
-func TestIndexDiff(t *testing.T) {
- t.Parallel()
- urn := resource.NewURN("test", "provider", "a", "docker-build:index:Index", "test")
- baseArgs := IndexArgs{Sources: []string{"docker.io/nginx:latest"}}
- baseState := IndexState{IndexArgs: baseArgs}
-
- tests := []struct {
- name string
- state func(*testing.T, IndexState) IndexState
- inputs func(*testing.T, IndexArgs) IndexArgs
-
- wantChanges bool
- }{
- {
- name: "no diff if no changes",
- state: func(*testing.T, IndexState) IndexState { return baseState },
- inputs: func(*testing.T, IndexArgs) IndexArgs { return baseArgs },
- wantChanges: false,
- },
- {
- name: "diff if tag changes",
- state: func(*testing.T, IndexState) IndexState { return baseState },
- inputs: func(t *testing.T, a IndexArgs) IndexArgs {
- a.Tag = "new-tag"
- return a
- },
- wantChanges: true,
- },
- {
- name: "no diff if registry password changes",
- state: func(_ *testing.T, s IndexState) IndexState {
- s.Registry = &Registry{
- Address: "foo",
- Username: "foo",
- Password: "foo",
- }
- return s
- },
- inputs: func(_ *testing.T, a IndexArgs) IndexArgs {
- a.Registry = &Registry{
- Address: "foo",
- Username: "foo",
- Password: "DIFFERENT PASSWORD",
- }
- return a
- },
- wantChanges: false,
- },
- {
- name: "diff if registry added",
- state: func(*testing.T, IndexState) IndexState { return baseState },
- inputs: func(_ *testing.T, a IndexArgs) IndexArgs {
- a.Registry = &Registry{Address: "foo.com", Username: "foo", Password: "foo"}
- return a
- },
- wantChanges: true,
- },
- {
- name: "diff if registry user changes",
- state: func(_ *testing.T, s IndexState) IndexState {
- s.Registry = &Registry{
- Address: "foo",
- Username: "foo",
- Password: "foo",
- }
- return s
- },
- inputs: func(_ *testing.T, a IndexArgs) IndexArgs {
- a.Registry = &Registry{
- Address: "DIFFERENT USER",
- Username: "foo",
- Password: "foo",
- }
- return a
- },
- wantChanges: true,
- },
- }
-
- s := newServer(t.Context(), t, nil)
-
- encode := func(t *testing.T, x any) property.Map {
- raw, err := mapper.New(&mapper.Opts{IgnoreMissing: true}).Encode(x)
- require.NoError(t, err)
- return resource.FromResourcePropertyMap(resource.NewPropertyMapFromMap(raw))
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
- resp, err := s.Diff(provider.DiffRequest{
- Urn: urn,
- State: encode(t, tt.state(t, baseState)),
- Inputs: encode(t, tt.inputs(t, baseArgs)),
- })
- assert.NoError(t, err)
- assert.Equal(t, tt.wantChanges, resp.HasChanges, resp.DetailedDiff)
- })
- }
-}
diff --git a/provider/internal/mockcli_test.go b/provider/internal/mockcli_test.go
deleted file mode 100644
index 5c33240..0000000
--- a/provider/internal/mockcli_test.go
+++ /dev/null
@@ -1,736 +0,0 @@
-// Code generated by MockGen. DO NOT EDIT.
-// Source: cli.go
-//
-// Generated by this command:
-//
-// mockgen -typed -package internal -source cli.go -destination mockcli_test.go --self_package github.com/pulumi/pulumi-docker-build/provider/internal
-//
-
-// Package internal is a generated GoMock package.
-package internal
-
-import (
- reflect "reflect"
-
- command "github.com/docker/cli/cli/command"
- configfile "github.com/docker/cli/cli/config/configfile"
- docker "github.com/docker/cli/cli/context/docker"
- store "github.com/docker/cli/cli/context/store"
- streams "github.com/docker/cli/cli/streams"
- client "github.com/docker/docker/client"
- metric "go.opentelemetry.io/otel/metric"
- resource "go.opentelemetry.io/otel/sdk/resource"
- trace "go.opentelemetry.io/otel/trace"
- gomock "go.uber.org/mock/gomock"
-)
-
-// MockCli is a mock of Cli interface.
-type MockCli struct {
- ctrl *gomock.Controller
- recorder *MockCliMockRecorder
- isgomock struct{}
-}
-
-// MockCliMockRecorder is the mock recorder for MockCli.
-type MockCliMockRecorder struct {
- mock *MockCli
-}
-
-// NewMockCli creates a new mock instance.
-func NewMockCli(ctrl *gomock.Controller) *MockCli {
- mock := &MockCli{ctrl: ctrl}
- mock.recorder = &MockCliMockRecorder{mock}
- return mock
-}
-
-// EXPECT returns an object that allows the caller to indicate expected use.
-func (m *MockCli) EXPECT() *MockCliMockRecorder {
- return m.recorder
-}
-
-// Apply mocks base method.
-func (m *MockCli) Apply(ops ...command.CLIOption) error {
- m.ctrl.T.Helper()
- varargs := []any{}
- for _, a := range ops {
- varargs = append(varargs, a)
- }
- ret := m.ctrl.Call(m, "Apply", varargs...)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// Apply indicates an expected call of Apply.
-func (mr *MockCliMockRecorder) Apply(ops ...any) *MockCliApplyCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Apply", reflect.TypeOf((*MockCli)(nil).Apply), ops...)
- return &MockCliApplyCall{Call: call}
-}
-
-// MockCliApplyCall wrap *gomock.Call
-type MockCliApplyCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliApplyCall) Return(arg0 error) *MockCliApplyCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliApplyCall) Do(f func(...command.CLIOption) error) *MockCliApplyCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliApplyCall) DoAndReturn(f func(...command.CLIOption) error) *MockCliApplyCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// BuildKitEnabled mocks base method.
-func (m *MockCli) BuildKitEnabled() (bool, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "BuildKitEnabled")
- ret0, _ := ret[0].(bool)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// BuildKitEnabled indicates an expected call of BuildKitEnabled.
-func (mr *MockCliMockRecorder) BuildKitEnabled() *MockCliBuildKitEnabledCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BuildKitEnabled", reflect.TypeOf((*MockCli)(nil).BuildKitEnabled))
- return &MockCliBuildKitEnabledCall{Call: call}
-}
-
-// MockCliBuildKitEnabledCall wrap *gomock.Call
-type MockCliBuildKitEnabledCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliBuildKitEnabledCall) Return(arg0 bool, arg1 error) *MockCliBuildKitEnabledCall {
- c.Call = c.Call.Return(arg0, arg1)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliBuildKitEnabledCall) Do(f func() (bool, error)) *MockCliBuildKitEnabledCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliBuildKitEnabledCall) DoAndReturn(f func() (bool, error)) *MockCliBuildKitEnabledCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// Client mocks base method.
-func (m *MockCli) Client() client.APIClient {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Client")
- ret0, _ := ret[0].(client.APIClient)
- return ret0
-}
-
-// Client indicates an expected call of Client.
-func (mr *MockCliMockRecorder) Client() *MockCliClientCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Client", reflect.TypeOf((*MockCli)(nil).Client))
- return &MockCliClientCall{Call: call}
-}
-
-// MockCliClientCall wrap *gomock.Call
-type MockCliClientCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliClientCall) Return(arg0 client.APIClient) *MockCliClientCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliClientCall) Do(f func() client.APIClient) *MockCliClientCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliClientCall) DoAndReturn(f func() client.APIClient) *MockCliClientCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// ConfigFile mocks base method.
-func (m *MockCli) ConfigFile() *configfile.ConfigFile {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "ConfigFile")
- ret0, _ := ret[0].(*configfile.ConfigFile)
- return ret0
-}
-
-// ConfigFile indicates an expected call of ConfigFile.
-func (mr *MockCliMockRecorder) ConfigFile() *MockCliConfigFileCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ConfigFile", reflect.TypeOf((*MockCli)(nil).ConfigFile))
- return &MockCliConfigFileCall{Call: call}
-}
-
-// MockCliConfigFileCall wrap *gomock.Call
-type MockCliConfigFileCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliConfigFileCall) Return(arg0 *configfile.ConfigFile) *MockCliConfigFileCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliConfigFileCall) Do(f func() *configfile.ConfigFile) *MockCliConfigFileCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliConfigFileCall) DoAndReturn(f func() *configfile.ConfigFile) *MockCliConfigFileCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// ContentTrustEnabled mocks base method.
-func (m *MockCli) ContentTrustEnabled() bool {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "ContentTrustEnabled")
- ret0, _ := ret[0].(bool)
- return ret0
-}
-
-// ContentTrustEnabled indicates an expected call of ContentTrustEnabled.
-func (mr *MockCliMockRecorder) ContentTrustEnabled() *MockCliContentTrustEnabledCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ContentTrustEnabled", reflect.TypeOf((*MockCli)(nil).ContentTrustEnabled))
- return &MockCliContentTrustEnabledCall{Call: call}
-}
-
-// MockCliContentTrustEnabledCall wrap *gomock.Call
-type MockCliContentTrustEnabledCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliContentTrustEnabledCall) Return(arg0 bool) *MockCliContentTrustEnabledCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliContentTrustEnabledCall) Do(f func() bool) *MockCliContentTrustEnabledCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliContentTrustEnabledCall) DoAndReturn(f func() bool) *MockCliContentTrustEnabledCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// ContextStore mocks base method.
-func (m *MockCli) ContextStore() store.Store {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "ContextStore")
- ret0, _ := ret[0].(store.Store)
- return ret0
-}
-
-// ContextStore indicates an expected call of ContextStore.
-func (mr *MockCliMockRecorder) ContextStore() *MockCliContextStoreCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ContextStore", reflect.TypeOf((*MockCli)(nil).ContextStore))
- return &MockCliContextStoreCall{Call: call}
-}
-
-// MockCliContextStoreCall wrap *gomock.Call
-type MockCliContextStoreCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliContextStoreCall) Return(arg0 store.Store) *MockCliContextStoreCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliContextStoreCall) Do(f func() store.Store) *MockCliContextStoreCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliContextStoreCall) DoAndReturn(f func() store.Store) *MockCliContextStoreCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// CurrentContext mocks base method.
-func (m *MockCli) CurrentContext() string {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "CurrentContext")
- ret0, _ := ret[0].(string)
- return ret0
-}
-
-// CurrentContext indicates an expected call of CurrentContext.
-func (mr *MockCliMockRecorder) CurrentContext() *MockCliCurrentContextCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CurrentContext", reflect.TypeOf((*MockCli)(nil).CurrentContext))
- return &MockCliCurrentContextCall{Call: call}
-}
-
-// MockCliCurrentContextCall wrap *gomock.Call
-type MockCliCurrentContextCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliCurrentContextCall) Return(arg0 string) *MockCliCurrentContextCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliCurrentContextCall) Do(f func() string) *MockCliCurrentContextCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliCurrentContextCall) DoAndReturn(f func() string) *MockCliCurrentContextCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// CurrentVersion mocks base method.
-func (m *MockCli) CurrentVersion() string {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "CurrentVersion")
- ret0, _ := ret[0].(string)
- return ret0
-}
-
-// CurrentVersion indicates an expected call of CurrentVersion.
-func (mr *MockCliMockRecorder) CurrentVersion() *MockCliCurrentVersionCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CurrentVersion", reflect.TypeOf((*MockCli)(nil).CurrentVersion))
- return &MockCliCurrentVersionCall{Call: call}
-}
-
-// MockCliCurrentVersionCall wrap *gomock.Call
-type MockCliCurrentVersionCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliCurrentVersionCall) Return(arg0 string) *MockCliCurrentVersionCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliCurrentVersionCall) Do(f func() string) *MockCliCurrentVersionCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliCurrentVersionCall) DoAndReturn(f func() string) *MockCliCurrentVersionCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// DefaultVersion mocks base method.
-func (m *MockCli) DefaultVersion() string {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "DefaultVersion")
- ret0, _ := ret[0].(string)
- return ret0
-}
-
-// DefaultVersion indicates an expected call of DefaultVersion.
-func (mr *MockCliMockRecorder) DefaultVersion() *MockCliDefaultVersionCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DefaultVersion", reflect.TypeOf((*MockCli)(nil).DefaultVersion))
- return &MockCliDefaultVersionCall{Call: call}
-}
-
-// MockCliDefaultVersionCall wrap *gomock.Call
-type MockCliDefaultVersionCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliDefaultVersionCall) Return(arg0 string) *MockCliDefaultVersionCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliDefaultVersionCall) Do(f func() string) *MockCliDefaultVersionCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliDefaultVersionCall) DoAndReturn(f func() string) *MockCliDefaultVersionCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// DockerEndpoint mocks base method.
-func (m *MockCli) DockerEndpoint() docker.Endpoint {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "DockerEndpoint")
- ret0, _ := ret[0].(docker.Endpoint)
- return ret0
-}
-
-// DockerEndpoint indicates an expected call of DockerEndpoint.
-func (mr *MockCliMockRecorder) DockerEndpoint() *MockCliDockerEndpointCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DockerEndpoint", reflect.TypeOf((*MockCli)(nil).DockerEndpoint))
- return &MockCliDockerEndpointCall{Call: call}
-}
-
-// MockCliDockerEndpointCall wrap *gomock.Call
-type MockCliDockerEndpointCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliDockerEndpointCall) Return(arg0 docker.Endpoint) *MockCliDockerEndpointCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliDockerEndpointCall) Do(f func() docker.Endpoint) *MockCliDockerEndpointCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliDockerEndpointCall) DoAndReturn(f func() docker.Endpoint) *MockCliDockerEndpointCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// Err mocks base method.
-func (m *MockCli) Err() *streams.Out {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Err")
- ret0, _ := ret[0].(*streams.Out)
- return ret0
-}
-
-// Err indicates an expected call of Err.
-func (mr *MockCliMockRecorder) Err() *MockCliErrCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Err", reflect.TypeOf((*MockCli)(nil).Err))
- return &MockCliErrCall{Call: call}
-}
-
-// MockCliErrCall wrap *gomock.Call
-type MockCliErrCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliErrCall) Return(arg0 *streams.Out) *MockCliErrCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliErrCall) Do(f func() *streams.Out) *MockCliErrCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliErrCall) DoAndReturn(f func() *streams.Out) *MockCliErrCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// In mocks base method.
-func (m *MockCli) In() *streams.In {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "In")
- ret0, _ := ret[0].(*streams.In)
- return ret0
-}
-
-// In indicates an expected call of In.
-func (mr *MockCliMockRecorder) In() *MockCliInCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "In", reflect.TypeOf((*MockCli)(nil).In))
- return &MockCliInCall{Call: call}
-}
-
-// MockCliInCall wrap *gomock.Call
-type MockCliInCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliInCall) Return(arg0 *streams.In) *MockCliInCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliInCall) Do(f func() *streams.In) *MockCliInCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliInCall) DoAndReturn(f func() *streams.In) *MockCliInCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// MeterProvider mocks base method.
-func (m *MockCli) MeterProvider() metric.MeterProvider {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "MeterProvider")
- ret0, _ := ret[0].(metric.MeterProvider)
- return ret0
-}
-
-// MeterProvider indicates an expected call of MeterProvider.
-func (mr *MockCliMockRecorder) MeterProvider() *MockCliMeterProviderCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MeterProvider", reflect.TypeOf((*MockCli)(nil).MeterProvider))
- return &MockCliMeterProviderCall{Call: call}
-}
-
-// MockCliMeterProviderCall wrap *gomock.Call
-type MockCliMeterProviderCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliMeterProviderCall) Return(arg0 metric.MeterProvider) *MockCliMeterProviderCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliMeterProviderCall) Do(f func() metric.MeterProvider) *MockCliMeterProviderCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliMeterProviderCall) DoAndReturn(f func() metric.MeterProvider) *MockCliMeterProviderCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// Out mocks base method.
-func (m *MockCli) Out() *streams.Out {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Out")
- ret0, _ := ret[0].(*streams.Out)
- return ret0
-}
-
-// Out indicates an expected call of Out.
-func (mr *MockCliMockRecorder) Out() *MockCliOutCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Out", reflect.TypeOf((*MockCli)(nil).Out))
- return &MockCliOutCall{Call: call}
-}
-
-// MockCliOutCall wrap *gomock.Call
-type MockCliOutCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliOutCall) Return(arg0 *streams.Out) *MockCliOutCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliOutCall) Do(f func() *streams.Out) *MockCliOutCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliOutCall) DoAndReturn(f func() *streams.Out) *MockCliOutCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// Resource mocks base method.
-func (m *MockCli) Resource() *resource.Resource {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Resource")
- ret0, _ := ret[0].(*resource.Resource)
- return ret0
-}
-
-// Resource indicates an expected call of Resource.
-func (mr *MockCliMockRecorder) Resource() *MockCliResourceCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Resource", reflect.TypeOf((*MockCli)(nil).Resource))
- return &MockCliResourceCall{Call: call}
-}
-
-// MockCliResourceCall wrap *gomock.Call
-type MockCliResourceCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliResourceCall) Return(arg0 *resource.Resource) *MockCliResourceCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliResourceCall) Do(f func() *resource.Resource) *MockCliResourceCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliResourceCall) DoAndReturn(f func() *resource.Resource) *MockCliResourceCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// ServerInfo mocks base method.
-func (m *MockCli) ServerInfo() command.ServerInfo {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "ServerInfo")
- ret0, _ := ret[0].(command.ServerInfo)
- return ret0
-}
-
-// ServerInfo indicates an expected call of ServerInfo.
-func (mr *MockCliMockRecorder) ServerInfo() *MockCliServerInfoCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ServerInfo", reflect.TypeOf((*MockCli)(nil).ServerInfo))
- return &MockCliServerInfoCall{Call: call}
-}
-
-// MockCliServerInfoCall wrap *gomock.Call
-type MockCliServerInfoCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliServerInfoCall) Return(arg0 command.ServerInfo) *MockCliServerInfoCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliServerInfoCall) Do(f func() command.ServerInfo) *MockCliServerInfoCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliServerInfoCall) DoAndReturn(f func() command.ServerInfo) *MockCliServerInfoCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// SetIn mocks base method.
-func (m *MockCli) SetIn(in *streams.In) {
- m.ctrl.T.Helper()
- m.ctrl.Call(m, "SetIn", in)
-}
-
-// SetIn indicates an expected call of SetIn.
-func (mr *MockCliMockRecorder) SetIn(in any) *MockCliSetInCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetIn", reflect.TypeOf((*MockCli)(nil).SetIn), in)
- return &MockCliSetInCall{Call: call}
-}
-
-// MockCliSetInCall wrap *gomock.Call
-type MockCliSetInCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliSetInCall) Return() *MockCliSetInCall {
- c.Call = c.Call.Return()
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliSetInCall) Do(f func(*streams.In)) *MockCliSetInCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliSetInCall) DoAndReturn(f func(*streams.In)) *MockCliSetInCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// TracerProvider mocks base method.
-func (m *MockCli) TracerProvider() trace.TracerProvider {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "TracerProvider")
- ret0, _ := ret[0].(trace.TracerProvider)
- return ret0
-}
-
-// TracerProvider indicates an expected call of TracerProvider.
-func (mr *MockCliMockRecorder) TracerProvider() *MockCliTracerProviderCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TracerProvider", reflect.TypeOf((*MockCli)(nil).TracerProvider))
- return &MockCliTracerProviderCall{Call: call}
-}
-
-// MockCliTracerProviderCall wrap *gomock.Call
-type MockCliTracerProviderCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockCliTracerProviderCall) Return(arg0 trace.TracerProvider) *MockCliTracerProviderCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockCliTracerProviderCall) Do(f func() trace.TracerProvider) *MockCliTracerProviderCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockCliTracerProviderCall) DoAndReturn(f func() trace.TracerProvider) *MockCliTracerProviderCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
diff --git a/provider/internal/mockclient_test.go b/provider/internal/mockclient_test.go
deleted file mode 100644
index a95bf81..0000000
--- a/provider/internal/mockclient_test.go
+++ /dev/null
@@ -1,602 +0,0 @@
-// Code generated by MockGen. DO NOT EDIT.
-// Source: client.go
-//
-// Generated by this command:
-//
-// mockgen -typed -package internal -source client.go -destination mockclient_test.go --self_package github.com/pulumi/pulumi-docker-build/provider/internal -imports buildx=github.com/docker/buildx/build
-//
-
-// Package internal is a generated GoMock package.
-package internal
-
-import (
- context "context"
- reflect "reflect"
-
- buildx "github.com/docker/buildx/build"
- builder "github.com/docker/buildx/builder"
- pb "github.com/docker/buildx/controller/pb"
- confutil "github.com/docker/buildx/util/confutil"
- dockerutil "github.com/docker/buildx/util/dockerutil"
- progress "github.com/docker/buildx/util/progress"
- client "github.com/moby/buildkit/client"
- session "github.com/moby/buildkit/session"
- descriptor "github.com/regclient/regclient/types/descriptor"
- gomock "go.uber.org/mock/gomock"
-)
-
-// MockClient is a mock of Client interface.
-type MockClient struct {
- ctrl *gomock.Controller
- recorder *MockClientMockRecorder
- isgomock struct{}
-}
-
-// MockClientMockRecorder is the mock recorder for MockClient.
-type MockClientMockRecorder struct {
- mock *MockClient
-}
-
-// NewMockClient creates a new mock instance.
-func NewMockClient(ctrl *gomock.Controller) *MockClient {
- mock := &MockClient{ctrl: ctrl}
- mock.recorder = &MockClientMockRecorder{mock}
- return mock
-}
-
-// EXPECT returns an object that allows the caller to indicate expected use.
-func (m *MockClient) EXPECT() *MockClientMockRecorder {
- return m.recorder
-}
-
-// Build mocks base method.
-func (m *MockClient) Build(ctx context.Context, b Build) (*client.SolveResponse, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Build", ctx, b)
- ret0, _ := ret[0].(*client.SolveResponse)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// Build indicates an expected call of Build.
-func (mr *MockClientMockRecorder) Build(ctx, b any) *MockClientBuildCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Build", reflect.TypeOf((*MockClient)(nil).Build), ctx, b)
- return &MockClientBuildCall{Call: call}
-}
-
-// MockClientBuildCall wrap *gomock.Call
-type MockClientBuildCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockClientBuildCall) Return(arg0 *client.SolveResponse, arg1 error) *MockClientBuildCall {
- c.Call = c.Call.Return(arg0, arg1)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockClientBuildCall) Do(f func(context.Context, Build) (*client.SolveResponse, error)) *MockClientBuildCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockClientBuildCall) DoAndReturn(f func(context.Context, Build) (*client.SolveResponse, error)) *MockClientBuildCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// BuildKitEnabled mocks base method.
-func (m *MockClient) BuildKitEnabled() (bool, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "BuildKitEnabled")
- ret0, _ := ret[0].(bool)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// BuildKitEnabled indicates an expected call of BuildKitEnabled.
-func (mr *MockClientMockRecorder) BuildKitEnabled() *MockClientBuildKitEnabledCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BuildKitEnabled", reflect.TypeOf((*MockClient)(nil).BuildKitEnabled))
- return &MockClientBuildKitEnabledCall{Call: call}
-}
-
-// MockClientBuildKitEnabledCall wrap *gomock.Call
-type MockClientBuildKitEnabledCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockClientBuildKitEnabledCall) Return(arg0 bool, arg1 error) *MockClientBuildKitEnabledCall {
- c.Call = c.Call.Return(arg0, arg1)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockClientBuildKitEnabledCall) Do(f func() (bool, error)) *MockClientBuildKitEnabledCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockClientBuildKitEnabledCall) DoAndReturn(f func() (bool, error)) *MockClientBuildKitEnabledCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// Delete mocks base method.
-func (m *MockClient) Delete(ctx context.Context, id string) error {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Delete", ctx, id)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// Delete indicates an expected call of Delete.
-func (mr *MockClientMockRecorder) Delete(ctx, id any) *MockClientDeleteCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockClient)(nil).Delete), ctx, id)
- return &MockClientDeleteCall{Call: call}
-}
-
-// MockClientDeleteCall wrap *gomock.Call
-type MockClientDeleteCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockClientDeleteCall) Return(arg0 error) *MockClientDeleteCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockClientDeleteCall) Do(f func(context.Context, string) error) *MockClientDeleteCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockClientDeleteCall) DoAndReturn(f func(context.Context, string) error) *MockClientDeleteCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// Inspect mocks base method.
-func (m *MockClient) Inspect(ctx context.Context, id string) ([]descriptor.Descriptor, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Inspect", ctx, id)
- ret0, _ := ret[0].([]descriptor.Descriptor)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// Inspect indicates an expected call of Inspect.
-func (mr *MockClientMockRecorder) Inspect(ctx, id any) *MockClientInspectCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Inspect", reflect.TypeOf((*MockClient)(nil).Inspect), ctx, id)
- return &MockClientInspectCall{Call: call}
-}
-
-// MockClientInspectCall wrap *gomock.Call
-type MockClientInspectCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockClientInspectCall) Return(arg0 []descriptor.Descriptor, arg1 error) *MockClientInspectCall {
- c.Call = c.Call.Return(arg0, arg1)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockClientInspectCall) Do(f func(context.Context, string) ([]descriptor.Descriptor, error)) *MockClientInspectCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockClientInspectCall) DoAndReturn(f func(context.Context, string) ([]descriptor.Descriptor, error)) *MockClientInspectCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// ManifestCreate mocks base method.
-func (m *MockClient) ManifestCreate(ctx context.Context, push bool, target string, refs ...string) error {
- m.ctrl.T.Helper()
- varargs := []any{ctx, push, target}
- for _, a := range refs {
- varargs = append(varargs, a)
- }
- ret := m.ctrl.Call(m, "ManifestCreate", varargs...)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// ManifestCreate indicates an expected call of ManifestCreate.
-func (mr *MockClientMockRecorder) ManifestCreate(ctx, push, target any, refs ...any) *MockClientManifestCreateCall {
- mr.mock.ctrl.T.Helper()
- varargs := append([]any{ctx, push, target}, refs...)
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ManifestCreate", reflect.TypeOf((*MockClient)(nil).ManifestCreate), varargs...)
- return &MockClientManifestCreateCall{Call: call}
-}
-
-// MockClientManifestCreateCall wrap *gomock.Call
-type MockClientManifestCreateCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockClientManifestCreateCall) Return(arg0 error) *MockClientManifestCreateCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockClientManifestCreateCall) Do(f func(context.Context, bool, string, ...string) error) *MockClientManifestCreateCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockClientManifestCreateCall) DoAndReturn(f func(context.Context, bool, string, ...string) error) *MockClientManifestCreateCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// ManifestDelete mocks base method.
-func (m *MockClient) ManifestDelete(ctx context.Context, target string) error {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "ManifestDelete", ctx, target)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// ManifestDelete indicates an expected call of ManifestDelete.
-func (mr *MockClientMockRecorder) ManifestDelete(ctx, target any) *MockClientManifestDeleteCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ManifestDelete", reflect.TypeOf((*MockClient)(nil).ManifestDelete), ctx, target)
- return &MockClientManifestDeleteCall{Call: call}
-}
-
-// MockClientManifestDeleteCall wrap *gomock.Call
-type MockClientManifestDeleteCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockClientManifestDeleteCall) Return(arg0 error) *MockClientManifestDeleteCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockClientManifestDeleteCall) Do(f func(context.Context, string) error) *MockClientManifestDeleteCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockClientManifestDeleteCall) DoAndReturn(f func(context.Context, string) error) *MockClientManifestDeleteCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// ManifestInspect mocks base method.
-func (m *MockClient) ManifestInspect(ctx context.Context, target string) (string, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "ManifestInspect", ctx, target)
- ret0, _ := ret[0].(string)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// ManifestInspect indicates an expected call of ManifestInspect.
-func (mr *MockClientMockRecorder) ManifestInspect(ctx, target any) *MockClientManifestInspectCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ManifestInspect", reflect.TypeOf((*MockClient)(nil).ManifestInspect), ctx, target)
- return &MockClientManifestInspectCall{Call: call}
-}
-
-// MockClientManifestInspectCall wrap *gomock.Call
-type MockClientManifestInspectCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockClientManifestInspectCall) Return(arg0 string, arg1 error) *MockClientManifestInspectCall {
- c.Call = c.Call.Return(arg0, arg1)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockClientManifestInspectCall) Do(f func(context.Context, string) (string, error)) *MockClientManifestInspectCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockClientManifestInspectCall) DoAndReturn(f func(context.Context, string) (string, error)) *MockClientManifestInspectCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// SupportsMultipleExports mocks base method.
-func (m *MockClient) SupportsMultipleExports() bool {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "SupportsMultipleExports")
- ret0, _ := ret[0].(bool)
- return ret0
-}
-
-// SupportsMultipleExports indicates an expected call of SupportsMultipleExports.
-func (mr *MockClientMockRecorder) SupportsMultipleExports() *MockClientSupportsMultipleExportsCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SupportsMultipleExports", reflect.TypeOf((*MockClient)(nil).SupportsMultipleExports))
- return &MockClientSupportsMultipleExportsCall{Call: call}
-}
-
-// MockClientSupportsMultipleExportsCall wrap *gomock.Call
-type MockClientSupportsMultipleExportsCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockClientSupportsMultipleExportsCall) Return(arg0 bool) *MockClientSupportsMultipleExportsCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockClientSupportsMultipleExportsCall) Do(f func() bool) *MockClientSupportsMultipleExportsCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockClientSupportsMultipleExportsCall) DoAndReturn(f func() bool) *MockClientSupportsMultipleExportsCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// MockBuild is a mock of Build interface.
-type MockBuild struct {
- ctrl *gomock.Controller
- recorder *MockBuildMockRecorder
- isgomock struct{}
-}
-
-// MockBuildMockRecorder is the mock recorder for MockBuild.
-type MockBuildMockRecorder struct {
- mock *MockBuild
-}
-
-// NewMockBuild creates a new mock instance.
-func NewMockBuild(ctrl *gomock.Controller) *MockBuild {
- mock := &MockBuild{ctrl: ctrl}
- mock.recorder = &MockBuildMockRecorder{mock}
- return mock
-}
-
-// EXPECT returns an object that allows the caller to indicate expected use.
-func (m *MockBuild) EXPECT() *MockBuildMockRecorder {
- return m.recorder
-}
-
-// BuildOptions mocks base method.
-func (m *MockBuild) BuildOptions() pb.BuildOptions {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "BuildOptions")
- ret0, _ := ret[0].(pb.BuildOptions)
- return ret0
-}
-
-// BuildOptions indicates an expected call of BuildOptions.
-func (mr *MockBuildMockRecorder) BuildOptions() *MockBuildBuildOptionsCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BuildOptions", reflect.TypeOf((*MockBuild)(nil).BuildOptions))
- return &MockBuildBuildOptionsCall{Call: call}
-}
-
-// MockBuildBuildOptionsCall wrap *gomock.Call
-type MockBuildBuildOptionsCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockBuildBuildOptionsCall) Return(arg0 pb.BuildOptions) *MockBuildBuildOptionsCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockBuildBuildOptionsCall) Do(f func() pb.BuildOptions) *MockBuildBuildOptionsCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockBuildBuildOptionsCall) DoAndReturn(f func() pb.BuildOptions) *MockBuildBuildOptionsCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// Inline mocks base method.
-func (m *MockBuild) Inline() string {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Inline")
- ret0, _ := ret[0].(string)
- return ret0
-}
-
-// Inline indicates an expected call of Inline.
-func (mr *MockBuildMockRecorder) Inline() *MockBuildInlineCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Inline", reflect.TypeOf((*MockBuild)(nil).Inline))
- return &MockBuildInlineCall{Call: call}
-}
-
-// MockBuildInlineCall wrap *gomock.Call
-type MockBuildInlineCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockBuildInlineCall) Return(arg0 string) *MockBuildInlineCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockBuildInlineCall) Do(f func() string) *MockBuildInlineCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockBuildInlineCall) DoAndReturn(f func() string) *MockBuildInlineCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// Secrets mocks base method.
-func (m *MockBuild) Secrets() session.Attachable {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Secrets")
- ret0, _ := ret[0].(session.Attachable)
- return ret0
-}
-
-// Secrets indicates an expected call of Secrets.
-func (mr *MockBuildMockRecorder) Secrets() *MockBuildSecretsCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Secrets", reflect.TypeOf((*MockBuild)(nil).Secrets))
- return &MockBuildSecretsCall{Call: call}
-}
-
-// MockBuildSecretsCall wrap *gomock.Call
-type MockBuildSecretsCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockBuildSecretsCall) Return(arg0 session.Attachable) *MockBuildSecretsCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockBuildSecretsCall) Do(f func() session.Attachable) *MockBuildSecretsCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockBuildSecretsCall) DoAndReturn(f func() session.Attachable) *MockBuildSecretsCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// ShouldExec mocks base method.
-func (m *MockBuild) ShouldExec() bool {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "ShouldExec")
- ret0, _ := ret[0].(bool)
- return ret0
-}
-
-// ShouldExec indicates an expected call of ShouldExec.
-func (mr *MockBuildMockRecorder) ShouldExec() *MockBuildShouldExecCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ShouldExec", reflect.TypeOf((*MockBuild)(nil).ShouldExec))
- return &MockBuildShouldExecCall{Call: call}
-}
-
-// MockBuildShouldExecCall wrap *gomock.Call
-type MockBuildShouldExecCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockBuildShouldExecCall) Return(arg0 bool) *MockBuildShouldExecCall {
- c.Call = c.Call.Return(arg0)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockBuildShouldExecCall) Do(f func() bool) *MockBuildShouldExecCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockBuildShouldExecCall) DoAndReturn(f func() bool) *MockBuildShouldExecCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
-
-// MockBuilder is a mock of Builder interface.
-type MockBuilder struct {
- ctrl *gomock.Controller
- recorder *MockBuilderMockRecorder
- isgomock struct{}
-}
-
-// MockBuilderMockRecorder is the mock recorder for MockBuilder.
-type MockBuilderMockRecorder struct {
- mock *MockBuilder
-}
-
-// NewMockBuilder creates a new mock instance.
-func NewMockBuilder(ctrl *gomock.Controller) *MockBuilder {
- mock := &MockBuilder{ctrl: ctrl}
- mock.recorder = &MockBuilderMockRecorder{mock}
- return mock
-}
-
-// EXPECT returns an object that allows the caller to indicate expected use.
-func (m *MockBuilder) EXPECT() *MockBuilderMockRecorder {
- return m.recorder
-}
-
-// Build mocks base method.
-func (m *MockBuilder) Build(ctx context.Context, nodes []builder.Node, opts map[string]buildx.Options, docker *dockerutil.Client, cfg *confutil.Config, w progress.Writer) (map[string]*client.SolveResponse, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Build", ctx, nodes, opts, docker, cfg, w)
- ret0, _ := ret[0].(map[string]*client.SolveResponse)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// Build indicates an expected call of Build.
-func (mr *MockBuilderMockRecorder) Build(ctx, nodes, opts, docker, cfg, w any) *MockBuilderBuildCall {
- mr.mock.ctrl.T.Helper()
- call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Build", reflect.TypeOf((*MockBuilder)(nil).Build), ctx, nodes, opts, docker, cfg, w)
- return &MockBuilderBuildCall{Call: call}
-}
-
-// MockBuilderBuildCall wrap *gomock.Call
-type MockBuilderBuildCall struct {
- *gomock.Call
-}
-
-// Return rewrite *gomock.Call.Return
-func (c *MockBuilderBuildCall) Return(resp map[string]*client.SolveResponse, err error) *MockBuilderBuildCall {
- c.Call = c.Call.Return(resp, err)
- return c
-}
-
-// Do rewrite *gomock.Call.Do
-func (c *MockBuilderBuildCall) Do(f func(context.Context, []builder.Node, map[string]buildx.Options, *dockerutil.Client, *confutil.Config, progress.Writer) (map[string]*client.SolveResponse, error)) *MockBuilderBuildCall {
- c.Call = c.Call.Do(f)
- return c
-}
-
-// DoAndReturn rewrite *gomock.Call.DoAndReturn
-func (c *MockBuilderBuildCall) DoAndReturn(f func(context.Context, []builder.Node, map[string]buildx.Options, *dockerutil.Client, *confutil.Config, progress.Writer) (map[string]*client.SolveResponse, error)) *MockBuilderBuildCall {
- c.Call = c.Call.DoAndReturn(f)
- return c
-}
diff --git a/provider/internal/network.go b/provider/internal/network.go
deleted file mode 100644
index 5e7afc6..0000000
--- a/provider/internal/network.go
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import "github.com/pulumi/pulumi-go-provider/infer"
-
-var _ = (infer.Enum[NetworkMode])((*NetworkMode)(nil))
-
-// NetworkMode is the --network parameter for a build.
-type NetworkMode string
-
-const (
- // Default network mode.
- Default NetworkMode = "default"
- // Host network mode.
- Host NetworkMode = "host"
- // None or no network mode.
- None NetworkMode = "none"
-)
-
-// Values returns all valid NetworkMode values for SDK generation.
-func (NetworkMode) Values() []infer.EnumValue[NetworkMode] {
- return []infer.EnumValue[NetworkMode]{
- {
- Value: Default,
- Description: "The default sandbox network mode.",
- },
- {
- Value: Host,
- Description: "Host network mode.",
- },
- {
- Value: None,
- Description: "Disable network access.",
- },
- }
-}
-
-func (n *NetworkMode) String() string {
- if n == nil {
- return string(Default)
- }
- return string(*n)
-}
diff --git a/provider/internal/platform.go b/provider/internal/platform.go
deleted file mode 100644
index eddefb9..0000000
--- a/provider/internal/platform.go
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "github.com/docker/buildx/util/platformutil"
-
- "github.com/pulumi/pulumi-go-provider/infer"
-)
-
-// These enum values are derived from
-// https://github.com/docker/cli/blob/d1b88930/cli/command/manifest/util.go#L22-L51
-
-var _ = (infer.Enum[Platform])((*Platform)(nil))
-
-// Platform is an enum capturing all available OS/architecture targets.
-type Platform string
-
-// Values returns all valid Platform values for SDK generation.
-func (Platform) Values() []infer.EnumValue[Platform] {
- return []infer.EnumValue[Platform]{
- {Value: "darwin/386"},
- {Value: "darwin/amd64"},
- {Value: "darwin/arm"},
- {Value: "darwin/arm64"},
- {Value: "dragonfly/amd64"},
- {Value: "freebsd/386"},
- {Value: "freebsd/amd64"},
- {Value: "freebsd/arm"},
- {Value: "linux/386"},
- {Value: "linux/amd64"},
- {Value: "linux/arm"},
- {Value: "linux/arm64"},
- {Value: "linux/mips64"},
- {Value: "linux/mips64le"},
- {Value: "linux/ppc64le"},
- {Value: "linux/riscv64"},
- {Value: "linux/s390x"},
- {Value: "netbsd/386"},
- {Value: "netbsd/amd64"},
- {Value: "netbsd/arm"},
- {Value: "openbsd/386"},
- {Value: "openbsd/amd64"},
- {Value: "openbsd/arm"},
- {Value: "plan9/386"},
- {Value: "plan9/amd64"},
- {Value: "solaris/amd64"},
- {Value: "windows/386"},
- {Value: "windows/amd64"},
- }
-}
-
-func (p Platform) String() string {
- return string(p)
-}
-
-func (p Platform) validate(preview bool) (string, error) {
- if preview && p == "" {
- // Unknown platform during preview -- nothing to do.
- return "", nil
- }
- _, err := platformutil.Parse([]string{string(p)})
- if err != nil {
- return "", err
- }
- return string(p), nil
-}
diff --git a/provider/internal/preview.go b/provider/internal/preview.go
deleted file mode 100644
index fc81d00..0000000
--- a/provider/internal/preview.go
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "fmt"
-)
-
-// keeper decides whether an element should be included for a preview
-// operation, optionally returning a mutated copy of that element.
-type keeper[T any] interface {
- keep(T) bool
-}
-
-// filter applies a keeper to each element, returning a new slice.
-func filter[T any](k keeper[T], elems ...T) []T {
- if elems == nil {
- return nil
- }
- result := make([]T, 0, len(elems))
- for _, e := range elems {
- if !k.keep(e) {
- continue
- }
- result = append(result, e)
- }
- return result
-}
-
-// stringKeeper preserves any non-empty string values for preview.
-type stringKeeper struct{ preview bool }
-
-func (k stringKeeper) keep(s string) bool {
- if !k.preview {
- return true
- }
- return s != ""
-}
-
-//nolint:structcheck // False positive due to generics.
-type stringerKeeper[T fmt.Stringer] struct{ preview bool }
-
-//nolint:unused // False positive due to generics.
-func (k stringerKeeper[T]) keep(t T) bool {
- if !k.preview {
- return true
- }
- return stringKeeper(k).keep(t.String())
-}
-
-// registryKeeper preserves any registries with known values for address and
-// password. This is imprecise and doesn't permit alternative auth strategies
-// like registry tokens, email, etc.
-type registryKeeper struct{ preview bool }
-
-//nolint:unused // False positive due to generics.
-func (k registryKeeper) keep(r Registry) bool {
- if !k.preview {
- return true
- }
- return r.Password != "" && r.Address != ""
-}
-
-// mapKeeper preserves map elements with known keys and values.
-type mapKeeper struct{ preview bool }
-
-func (k mapKeeper) keep(m map[string]string) map[string]string {
- if !k.preview || len(m) == 0 {
- return m
- }
- kk := stringKeeper(k)
- filtered := make(map[string]string)
- for key, val := range m {
- if !kk.keep(key) {
- continue
- }
- if !kk.keep(val) {
- continue
- }
- filtered[key] = val
- }
- return filtered
-}
-
-type contextKeeper struct{ preview bool }
-
-func (k contextKeeper) keep(bc *BuildContext) *BuildContext {
- if !k.preview || bc == nil || len(bc.Named) == 0 {
- return bc
- }
-
- named := NamedContexts{}
- sk := stringKeeper(k)
- for k, v := range bc.Named {
- if !sk.keep(k) || !sk.keep(v.Location) {
- continue
- }
- named[k] = v
- }
-
- return &BuildContext{
- Context: Context{bc.Location},
- Named: named,
- }
-}
diff --git a/provider/internal/provider.go b/provider/internal/provider.go
deleted file mode 100644
index e3265a3..0000000
--- a/provider/internal/provider.go
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "context"
- "fmt"
-
- provider "github.com/pulumi/pulumi-go-provider"
- "github.com/pulumi/pulumi-go-provider/infer"
- pschema "github.com/pulumi/pulumi-go-provider/middleware/schema"
- "github.com/pulumi/pulumi-java/pkg/codegen/java"
- csgen "github.com/pulumi/pulumi/pkg/v3/codegen/dotnet"
- gogen "github.com/pulumi/pulumi/pkg/v3/codegen/go"
- tsgen "github.com/pulumi/pulumi/pkg/v3/codegen/nodejs"
- pygen "github.com/pulumi/pulumi/pkg/v3/codegen/python"
- "github.com/pulumi/pulumi/pkg/v3/codegen/schema"
- "github.com/pulumi/pulumi/sdk/v3/go/common/tokens"
- "github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"
-)
-
-var (
- _ infer.CustomConfigure = (*Config)(nil)
- _ infer.Annotated = (*Config)(nil)
- _ infer.Annotated = (*Registry)(nil)
-)
-
-// Config configures the buildx provider.
-type Config struct {
- Host string `pulumi:"host,optional"`
- Registries []Registry `pulumi:"registries,optional"`
-
- host *host
-}
-
-// Annotate provides user-facing descriptions and defaults for Config's fields.
-func (c *Config) Annotate(a infer.Annotator) {
- a.Describe(&c.Host, "The build daemon's address.")
- a.SetDefault(&c.Host, "", "DOCKER_HOST")
-}
-
-// Configure validates and processes user-provided configuration values.
-func (c *Config) Configure(ctx context.Context) error {
- h, err := newHost(ctx, c)
- if err != nil {
- return fmt.Errorf("getting host: %w", err)
- }
- c.host = h
- return nil
-}
-
-// GetRegistries returns the config's registries, if any.
-func (c Config) GetRegistries() []Registry {
- return c.Registries
-}
-
-// getHost returns the config's host, or nil if the config is also nil.
-func (c *Config) getHost() *host {
- if c == nil {
- return nil
- }
- return c.host
-}
-
-// NewBuildxProvider returns a new buildx provider.
-func NewBuildxProvider(clientF clientF) provider.Provider {
- config := &Config{}
-
- prov := infer.Provider(
- infer.Options{
- Metadata: pschema.Metadata{
- DisplayName: "docker-build",
- Keywords: []string{"docker", "buildkit", "buildx", "kind/native"},
- Description: "A Pulumi provider for building modern Docker images with buildx and BuildKit.",
- Homepage: "https://pulumi.com",
- Publisher: "Pulumi",
- License: "Apache-2.0",
- Repository: "https://github.com/pulumi/pulumi-docker-build",
- LanguageMap: map[string]any{
- "go": gogen.GoPackageInfo{
- // GenerateResourceContainerTypes: true,
- RespectSchemaVersion: true,
- Generics: gogen.GenericsSettingSideBySide,
- PackageImportAliases: map[string]string{
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild": "dockerbuild",
- },
- ImportBasePath: "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild",
- },
- "csharp": csgen.CSharpPackageInfo{
- RespectSchemaVersion: true,
- PackageReferences: map[string]string{
- "Pulumi": "3.*",
- },
- },
- "java": java.PackageInfo{
- BuildFiles: "gradle",
- GradleNexusPublishPluginVersion: "1.1.0",
- Dependencies: map[string]string{
- "com.pulumi:pulumi": "0.20.0",
- "com.google.code.gson:gson": "2.8.9",
- "com.google.code.findbugs:jsr305": "3.0.2",
- },
- },
- "nodejs": tsgen.NodePackageInfo{
- RespectSchemaVersion: true,
- },
- "python": pygen.PackageInfo{
- RespectSchemaVersion: true,
- PyProject: struct {
- Enabled bool `json:"enabled,omitempty"`
- }{Enabled: true},
- },
- },
- },
- Resources: []infer.InferredResource{
- infer.Resource(&Image{clientF: clientF, config: config}),
- infer.Resource(&Index{clientF: clientF, config: config}),
- },
- ModuleMap: map[tokens.ModuleName]tokens.ModuleName{
- "internal": "index",
- },
- Config: infer.Config(config),
- },
- )
-
- return prov
-}
-
-// Schema returns our package specification.
-func Schema(ctx context.Context, version string) schema.PackageSpec {
- p := NewBuildxProvider(nil)
- spec, err := provider.GetSchema(ctx, "docker-build", version, p)
- contract.AssertNoErrorf(err, "missing schema")
- return spec
-}
diff --git a/provider/internal/provider_test.go b/provider/internal/provider_test.go
deleted file mode 100644
index f1bbe50..0000000
--- a/provider/internal/provider_test.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "context"
- "testing"
-
- "github.com/blang/semver"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-
- provider "github.com/pulumi/pulumi-go-provider"
- "github.com/pulumi/pulumi-go-provider/infer"
- "github.com/pulumi/pulumi-go-provider/integration"
- "github.com/pulumi/pulumi/sdk/v3/go/common/tokens"
-)
-
-func TestConfigure(t *testing.T) {
- t.Parallel()
-
- s := newServer(t.Context(), t, nil)
-
- err := s.Configure(
- provider.ConfigureRequest{},
- )
- assert.NoError(t, err)
-}
-
-// TestAnnotate sanity checks that our annotations don't panic.
-func TestAnnotate(t *testing.T) {
- t.Parallel()
-
- for _, tt := range []infer.Annotated{
- &Config{},
- &Image{},
- &ImageArgs{},
- &ImageState{},
- &Index{},
- &IndexArgs{},
- &IndexState{},
- } {
- tt.Annotate(annotator{})
- }
-}
-
-// TestSchema sanity checks that our schema doesn't panic.
-func TestSchema(t *testing.T) {
- t.Parallel()
-
- s := newServer(t.Context(), t, nil)
-
- _, err := s.GetSchema(provider.GetSchemaRequest{Version: 0})
- assert.NoError(t, err)
-}
-
-type annotator struct{}
-
-func (annotator) Deprecate(_ any, _ string) {}
-func (annotator) Describe(_ any, _ string) {}
-func (annotator) SetDefault(_, _ any, _ ...string) {}
-func (annotator) SetToken(tokens.ModuleName, tokens.TypeName) {}
-func (annotator) AddAlias(tokens.ModuleName, tokens.TypeName) {}
-func (annotator) SetResourceDeprecationMessage(_ string) {}
-
-func newServer(ctx context.Context, t *testing.T, clientF clientF) integration.Server {
- t.Helper()
-
- if clientF == nil {
- clientF = RealClientF
- }
-
- p := NewBuildxProvider(clientF)
-
- s, err := integration.NewServer(
- ctx,
- "docker-build", semver.Version{Major: 0},
- integration.WithProvider(p),
- )
- require.NoError(t, err)
- return s
-}
diff --git a/provider/internal/ssh.go b/provider/internal/ssh.go
deleted file mode 100644
index af649fb..0000000
--- a/provider/internal/ssh.go
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "strings"
-
- controllerapi "github.com/docker/buildx/controller/pb"
- "github.com/docker/buildx/util/buildflags"
-
- "github.com/pulumi/pulumi-go-provider/infer"
-)
-
-// SSH is an SSH option.
-type SSH struct {
- ID string `pulumi:"id"`
- Paths []string `pulumi:"paths,optional"`
-}
-
-// Annotate sets docstrings on SSH.
-func (s *SSH) Annotate(a infer.Annotator) {
- a.Describe(&s.ID, dedent(`
- Useful for distinguishing different servers that are part of the same
- build.
-
- A value of "default" is appropriate if only dealing with a single host.
- `))
- a.Describe(&s.Paths, dedent(`
- SSH agent socket or private keys to expose to the build under the given
- identifier.
-
- Defaults to "[$SSH_AUTH_SOCK]".
-
- Note that your keys are **not** automatically added when using an
- agent. Run "ssh-add -l" locally to confirm which public keys are
- visible to the agent; these will be exposed to your build.
- `))
-}
-
-// String returns a CLI-encoded value for the SSH option, or an empty string if
-// its ID is not known.
-func (s SSH) String() string {
- if s.ID == "" {
- return ""
- }
-
- r := s.ID
-
- if len(s.Paths) > 0 {
- r += "=" + strings.Join(s.Paths, ",")
- }
-
- return r
-}
-
-func (s SSH) validate() (*controllerapi.SSH, error) {
- parsed, err := buildflags.ParseSSHSpecs([]string{s.String()})
- if err != nil {
- return nil, err
- }
- if len(parsed) == 0 {
- return nil, nil
- }
-
- _, err = controllerapi.CreateSSH([]*controllerapi.SSH{{ID: s.ID, Paths: s.Paths}})
- return parsed[0], err
-}
diff --git a/provider/internal/ssh_test.go b/provider/internal/ssh_test.go
deleted file mode 100644
index ef54d71..0000000
--- a/provider/internal/ssh_test.go
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package internal
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestValidateSSH(t *testing.T) {
- t.Parallel()
- tests := []struct {
- name string
- ssh SSH
-
- wantErr string
- }{
- {
- name: "invalid path",
- ssh: SSH{ID: "foo", Paths: []string{"/not/real"}},
- wantErr: "/not/real: no such file or directory",
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- t.Parallel()
-
- _, err := tt.ssh.validate()
-
- if tt.wantErr == "" {
- assert.NoError(t, err)
- } else {
- assert.ErrorContains(t, err, tt.wantErr)
- }
- })
- }
-}
diff --git a/provider/internal/testdata/Dockerfile.invalid b/provider/internal/testdata/Dockerfile.invalid
deleted file mode 100644
index 936fd2a..0000000
--- a/provider/internal/testdata/Dockerfile.invalid
+++ /dev/null
@@ -1,2 +0,0 @@
-FROM scratch
-RUNN
diff --git a/provider/internal/testdata/dockerfile-location-irrelevant/app/foo.sh b/provider/internal/testdata/dockerfile-location-irrelevant/app/foo.sh
deleted file mode 100644
index 86f1c62..0000000
--- a/provider/internal/testdata/dockerfile-location-irrelevant/app/foo.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env bash
-
-echo "Hello, World!"
diff --git a/provider/internal/testdata/dockerfile-location-irrelevant/step1.Dockerfile b/provider/internal/testdata/dockerfile-location-irrelevant/step1.Dockerfile
deleted file mode 100644
index a79d7c2..0000000
--- a/provider/internal/testdata/dockerfile-location-irrelevant/step1.Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM scratch
-
-WORKDIR /app
-
-COPY ./bar .
diff --git a/provider/internal/testdata/dockerfile-location-irrelevant/step2.Dockerfile b/provider/internal/testdata/dockerfile-location-irrelevant/step2.Dockerfile
deleted file mode 100644
index a79d7c2..0000000
--- a/provider/internal/testdata/dockerfile-location-irrelevant/step2.Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM scratch
-
-WORKDIR /app
-
-COPY ./bar .
diff --git a/provider/internal/testdata/filemode-matters/step1/Dockerfile b/provider/internal/testdata/filemode-matters/step1/Dockerfile
deleted file mode 100644
index a79d7c2..0000000
--- a/provider/internal/testdata/filemode-matters/step1/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM scratch
-
-WORKDIR /app
-
-COPY ./bar .
diff --git a/provider/internal/testdata/filemode-matters/step1/foo.sh b/provider/internal/testdata/filemode-matters/step1/foo.sh
deleted file mode 100644
index 86f1c62..0000000
--- a/provider/internal/testdata/filemode-matters/step1/foo.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env bash
-
-echo "Hello, World!"
diff --git a/provider/internal/testdata/filemode-matters/step2-chmod-x/Dockerfile b/provider/internal/testdata/filemode-matters/step2-chmod-x/Dockerfile
deleted file mode 100644
index a79d7c2..0000000
--- a/provider/internal/testdata/filemode-matters/step2-chmod-x/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM scratch
-
-WORKDIR /app
-
-COPY ./bar .
diff --git a/provider/internal/testdata/filemode-matters/step2-chmod-x/foo.sh b/provider/internal/testdata/filemode-matters/step2-chmod-x/foo.sh
deleted file mode 100755
index 86f1c62..0000000
--- a/provider/internal/testdata/filemode-matters/step2-chmod-x/foo.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env bash
-
-echo "Hello, World!"
diff --git a/provider/internal/testdata/ignores-wildcard/basedir-modified-ignored-file/.dockerignore b/provider/internal/testdata/ignores-wildcard/basedir-modified-ignored-file/.dockerignore
deleted file mode 100644
index b3159b4..0000000
--- a/provider/internal/testdata/ignores-wildcard/basedir-modified-ignored-file/.dockerignore
+++ /dev/null
@@ -1,7 +0,0 @@
-# Ignore everything!
-*
-
-# Except changes to source data in this set of directories:
-!projects/*/src
-
-# This should therefore IGNORE projects/*/dist
diff --git a/provider/internal/testdata/ignores-wildcard/basedir-modified-ignored-file/Dockerfile b/provider/internal/testdata/ignores-wildcard/basedir-modified-ignored-file/Dockerfile
deleted file mode 100644
index a79d7c2..0000000
--- a/provider/internal/testdata/ignores-wildcard/basedir-modified-ignored-file/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM scratch
-
-WORKDIR /app
-
-COPY ./bar .
diff --git a/provider/internal/testdata/ignores-wildcard/basedir-modified-ignored-file/projects/foo/src/app.js b/provider/internal/testdata/ignores-wildcard/basedir-modified-ignored-file/projects/foo/src/app.js
deleted file mode 100644
index 2254108..0000000
--- a/provider/internal/testdata/ignores-wildcard/basedir-modified-ignored-file/projects/foo/src/app.js
+++ /dev/null
@@ -1 +0,0 @@
-console.log("Pulumi 💜");
diff --git a/provider/internal/testdata/ignores-wildcard/basedir-modified-included-file/.dockerignore b/provider/internal/testdata/ignores-wildcard/basedir-modified-included-file/.dockerignore
deleted file mode 100644
index b3159b4..0000000
--- a/provider/internal/testdata/ignores-wildcard/basedir-modified-included-file/.dockerignore
+++ /dev/null
@@ -1,7 +0,0 @@
-# Ignore everything!
-*
-
-# Except changes to source data in this set of directories:
-!projects/*/src
-
-# This should therefore IGNORE projects/*/dist
diff --git a/provider/internal/testdata/ignores-wildcard/basedir-modified-included-file/Dockerfile b/provider/internal/testdata/ignores-wildcard/basedir-modified-included-file/Dockerfile
deleted file mode 100644
index a79d7c2..0000000
--- a/provider/internal/testdata/ignores-wildcard/basedir-modified-included-file/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM scratch
-
-WORKDIR /app
-
-COPY ./bar .
diff --git a/provider/internal/testdata/ignores-wildcard/basedir-modified-included-file/projects/foo/src/app.js b/provider/internal/testdata/ignores-wildcard/basedir-modified-included-file/projects/foo/src/app.js
deleted file mode 100644
index 63d0f1a..0000000
--- a/provider/internal/testdata/ignores-wildcard/basedir-modified-included-file/projects/foo/src/app.js
+++ /dev/null
@@ -1 +0,0 @@
-console.log("💜 Pulumi (included)");
diff --git a/provider/internal/testdata/ignores-wildcard/basedir/.dockerignore b/provider/internal/testdata/ignores-wildcard/basedir/.dockerignore
deleted file mode 100644
index b3159b4..0000000
--- a/provider/internal/testdata/ignores-wildcard/basedir/.dockerignore
+++ /dev/null
@@ -1,7 +0,0 @@
-# Ignore everything!
-*
-
-# Except changes to source data in this set of directories:
-!projects/*/src
-
-# This should therefore IGNORE projects/*/dist
diff --git a/provider/internal/testdata/ignores-wildcard/basedir/Dockerfile b/provider/internal/testdata/ignores-wildcard/basedir/Dockerfile
deleted file mode 100644
index a79d7c2..0000000
--- a/provider/internal/testdata/ignores-wildcard/basedir/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM scratch
-
-WORKDIR /app
-
-COPY ./bar .
diff --git a/provider/internal/testdata/ignores-wildcard/basedir/projects/foo/src/app.js b/provider/internal/testdata/ignores-wildcard/basedir/projects/foo/src/app.js
deleted file mode 100644
index 2254108..0000000
--- a/provider/internal/testdata/ignores-wildcard/basedir/projects/foo/src/app.js
+++ /dev/null
@@ -1 +0,0 @@
-console.log("Pulumi 💜");
diff --git a/provider/internal/testdata/ignores/basedir-with-ignored-files/.dockerignore b/provider/internal/testdata/ignores/basedir-with-ignored-files/.dockerignore
deleted file mode 100644
index eb97a72..0000000
--- a/provider/internal/testdata/ignores/basedir-with-ignored-files/.dockerignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.dockerignore
-ignored.txt
-bar/ignored.js
diff --git a/provider/internal/testdata/ignores/basedir-with-ignored-files/Dockerfile b/provider/internal/testdata/ignores/basedir-with-ignored-files/Dockerfile
deleted file mode 100644
index a79d7c2..0000000
--- a/provider/internal/testdata/ignores/basedir-with-ignored-files/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM scratch
-
-WORKDIR /app
-
-COPY ./bar .
diff --git a/provider/internal/testdata/ignores/basedir-with-ignored-files/bar/app.js b/provider/internal/testdata/ignores/basedir-with-ignored-files/bar/app.js
deleted file mode 100644
index 2254108..0000000
--- a/provider/internal/testdata/ignores/basedir-with-ignored-files/bar/app.js
+++ /dev/null
@@ -1 +0,0 @@
-console.log("Pulumi 💜");
diff --git a/provider/internal/testdata/ignores/basedir-with-ignored-files/bar/ignored.js b/provider/internal/testdata/ignores/basedir-with-ignored-files/bar/ignored.js
deleted file mode 100644
index e69de29..0000000
diff --git a/provider/internal/testdata/ignores/basedir-with-ignored-files/foo.txt b/provider/internal/testdata/ignores/basedir-with-ignored-files/foo.txt
deleted file mode 100644
index 5716ca5..0000000
--- a/provider/internal/testdata/ignores/basedir-with-ignored-files/foo.txt
+++ /dev/null
@@ -1 +0,0 @@
-bar
diff --git a/provider/internal/testdata/ignores/basedir-with-ignored-files/ignored.txt b/provider/internal/testdata/ignores/basedir-with-ignored-files/ignored.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/provider/internal/testdata/ignores/basedir/Dockerfile b/provider/internal/testdata/ignores/basedir/Dockerfile
deleted file mode 100644
index a79d7c2..0000000
--- a/provider/internal/testdata/ignores/basedir/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM scratch
-
-WORKDIR /app
-
-COPY ./bar .
diff --git a/provider/internal/testdata/ignores/basedir/bar/app.js b/provider/internal/testdata/ignores/basedir/bar/app.js
deleted file mode 100644
index 2254108..0000000
--- a/provider/internal/testdata/ignores/basedir/bar/app.js
+++ /dev/null
@@ -1 +0,0 @@
-console.log("Pulumi 💜");
diff --git a/provider/internal/testdata/ignores/basedir/foo.txt b/provider/internal/testdata/ignores/basedir/foo.txt
deleted file mode 100644
index 5716ca5..0000000
--- a/provider/internal/testdata/ignores/basedir/foo.txt
+++ /dev/null
@@ -1 +0,0 @@
-bar
diff --git a/provider/internal/testdata/noop/Dockerfile b/provider/internal/testdata/noop/Dockerfile
deleted file mode 100644
index c35f1b5..0000000
--- a/provider/internal/testdata/noop/Dockerfile
+++ /dev/null
@@ -1 +0,0 @@
-FROM scratch
diff --git a/provider/internal/testdata/renaming-matters/step1/Dockerfile b/provider/internal/testdata/renaming-matters/step1/Dockerfile
deleted file mode 100644
index a79d7c2..0000000
--- a/provider/internal/testdata/renaming-matters/step1/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM scratch
-
-WORKDIR /app
-
-COPY ./bar .
diff --git a/provider/internal/testdata/renaming-matters/step1/foo.a.txt b/provider/internal/testdata/renaming-matters/step1/foo.a.txt
deleted file mode 100644
index 345e6ae..0000000
--- a/provider/internal/testdata/renaming-matters/step1/foo.a.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test
diff --git a/provider/internal/testdata/renaming-matters/step2/Dockerfile b/provider/internal/testdata/renaming-matters/step2/Dockerfile
deleted file mode 100644
index a79d7c2..0000000
--- a/provider/internal/testdata/renaming-matters/step2/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM scratch
-
-WORKDIR /app
-
-COPY ./bar .
diff --git a/provider/internal/testdata/renaming-matters/step2/foo.b.txt b/provider/internal/testdata/renaming-matters/step2/foo.b.txt
deleted file mode 100644
index 345e6ae..0000000
--- a/provider/internal/testdata/renaming-matters/step2/foo.b.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test
diff --git a/provider/internal/testdata/symlinks/Dockerfile b/provider/internal/testdata/symlinks/Dockerfile
deleted file mode 100644
index a79d7c2..0000000
--- a/provider/internal/testdata/symlinks/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM scratch
-
-WORKDIR /app
-
-COPY ./bar .
diff --git a/provider/internal/testdata/symlinks/linkedFromDeep.txt b/provider/internal/testdata/symlinks/linkedFromDeep.txt
deleted file mode 100644
index 552085f..0000000
--- a/provider/internal/testdata/symlinks/linkedFromDeep.txt
+++ /dev/null
@@ -1 +0,0 @@
-Hello,
diff --git a/provider/internal/testdata/symlinks/linkedToDeep.txt b/provider/internal/testdata/symlinks/linkedToDeep.txt
deleted file mode 100644
index 496c875..0000000
--- a/provider/internal/testdata/symlinks/linkedToDeep.txt
+++ /dev/null
@@ -1 +0,0 @@
-World!
diff --git a/provider/internal/testdata/symlinks/proxy-for-sub/dir/linkedFromTop.txt b/provider/internal/testdata/symlinks/proxy-for-sub/dir/linkedFromTop.txt
deleted file mode 100644
index 496c875..0000000
--- a/provider/internal/testdata/symlinks/proxy-for-sub/dir/linkedFromTop.txt
+++ /dev/null
@@ -1 +0,0 @@
-World!
diff --git a/provider/internal/testdata/symlinks/proxy-for-sub/dir/linkedToTop.txt b/provider/internal/testdata/symlinks/proxy-for-sub/dir/linkedToTop.txt
deleted file mode 100644
index 552085f..0000000
--- a/provider/internal/testdata/symlinks/proxy-for-sub/dir/linkedToTop.txt
+++ /dev/null
@@ -1 +0,0 @@
-Hello,
diff --git a/provider/internal/testdata/symlinks/sub/dir/linkedFromTop.txt b/provider/internal/testdata/symlinks/sub/dir/linkedFromTop.txt
deleted file mode 100644
index 496c875..0000000
--- a/provider/internal/testdata/symlinks/sub/dir/linkedFromTop.txt
+++ /dev/null
@@ -1 +0,0 @@
-World!
diff --git a/provider/internal/testdata/symlinks/sub/dir/linkedToTop.txt b/provider/internal/testdata/symlinks/sub/dir/linkedToTop.txt
deleted file mode 100644
index 552085f..0000000
--- a/provider/internal/testdata/symlinks/sub/dir/linkedToTop.txt
+++ /dev/null
@@ -1 +0,0 @@
-Hello,
diff --git a/provider/internal/testdata/unignores/basedir-with-unignored-files/.dockerignore b/provider/internal/testdata/unignores/basedir-with-unignored-files/.dockerignore
deleted file mode 100644
index e0ed9eb..0000000
--- a/provider/internal/testdata/unignores/basedir-with-unignored-files/.dockerignore
+++ /dev/null
@@ -1,6 +0,0 @@
-# Ignore everything
-*
-
-#Unignore everything
-!Dockerfile
-!top-dir
diff --git a/provider/internal/testdata/unignores/basedir-with-unignored-files/Dockerfile b/provider/internal/testdata/unignores/basedir-with-unignored-files/Dockerfile
deleted file mode 100644
index a79d7c2..0000000
--- a/provider/internal/testdata/unignores/basedir-with-unignored-files/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM scratch
-
-WORKDIR /app
-
-COPY ./bar .
diff --git a/provider/internal/testdata/unignores/basedir-with-unignored-files/top-dir/subdir/app.js b/provider/internal/testdata/unignores/basedir-with-unignored-files/top-dir/subdir/app.js
deleted file mode 100644
index 2254108..0000000
--- a/provider/internal/testdata/unignores/basedir-with-unignored-files/top-dir/subdir/app.js
+++ /dev/null
@@ -1 +0,0 @@
-console.log("Pulumi 💜");
diff --git a/provider/internal/testdata/unignores/basedir-with-unignored-files/top-dir/subdir/ignored.js b/provider/internal/testdata/unignores/basedir-with-unignored-files/top-dir/subdir/ignored.js
deleted file mode 100644
index e69de29..0000000
diff --git a/provider/internal/testdata/unignores/basedir/Dockerfile b/provider/internal/testdata/unignores/basedir/Dockerfile
deleted file mode 100644
index a79d7c2..0000000
--- a/provider/internal/testdata/unignores/basedir/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM scratch
-
-WORKDIR /app
-
-COPY ./bar .
diff --git a/provider/internal/testdata/unignores/basedir/top-dir/subdir/app.js b/provider/internal/testdata/unignores/basedir/top-dir/subdir/app.js
deleted file mode 100644
index 2254108..0000000
--- a/provider/internal/testdata/unignores/basedir/top-dir/subdir/app.js
+++ /dev/null
@@ -1 +0,0 @@
-console.log("Pulumi 💜");
diff --git a/provider/internal/testdata/unignores/basedir/top-dir/subdir/ignored.js b/provider/internal/testdata/unignores/basedir/top-dir/subdir/ignored.js
deleted file mode 100644
index e69de29..0000000
diff --git a/provider/provider.go b/provider/provider.go
deleted file mode 100644
index 982cec4..0000000
--- a/provider/provider.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package provider
-
-import (
- "github.com/pulumi/pulumi-docker-build/provider/internal"
- gp "github.com/pulumi/pulumi-go-provider"
- "github.com/pulumi/pulumi/pkg/v3/resource/provider"
- rpc "github.com/pulumi/pulumi/sdk/v3/proto/go"
-)
-
-// Version is initialized by the Go linker to contain the semver of this build.
-var Version = "0.0.1"
-
-// Name needs to match $PACK in Makefile.
-const Name string = "docker-build"
-
-// Serve launches the gRPC server for the resource provider.
-func Serve() error {
- return provider.Main(Name, New)
-}
-
-// New creates a new provider.
-func New(host *provider.HostClient) (rpc.ResourceProviderServer, error) {
- return gp.RawServer(Name, Version, internal.NewBuildxProvider(internal.RealClientF))(host)
-}
diff --git a/provider/provider_test.go b/provider/provider_test.go
deleted file mode 100644
index c92e634..0000000
--- a/provider/provider_test.go
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2024, Pulumi Corporation.
-//
-// 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.
-
-package provider
-
-import (
- "context"
- "testing"
-
- "github.com/blang/semver"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- emptypb "google.golang.org/protobuf/types/known/emptypb"
-)
-
-func TestVersion(t *testing.T) {
- t.Parallel()
-
- _, err := semver.Parse(Version)
- assert.NoError(t, err)
-
- p, err := New(nil)
- require.NoError(t, err)
-
- info, err := p.GetPluginInfo(context.Background(), &emptypb.Empty{})
- assert.NoError(t, err)
-
- require.NotEqual(t, "", Version)
- assert.Equal(t, Version, info.Version)
-}
diff --git a/renovate.json5 b/renovate.json5
deleted file mode 100644
index 542f0bd..0000000
--- a/renovate.json5
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- $schema: 'https://docs.renovatebot.com/renovate-schema.json',
- extends: [
- 'github>pulumi/renovate-config//default.json5',
- ],
- packageRules: [
- {
- matchDatasources: [
- 'go',
- ],
- matchPackageNames: [
- 'github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet/v3',
- 'github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3',
- 'github.com/pulumi/pulumi/sdk/nodejs/cmd/pulumi-language-nodejs/v3',
- 'github.com/pulumi/pulumi/sdk/python/cmd/pulumi-language-python/v3',
- ],
- matchUpdateTypes: [
- 'pin',
- 'digest',
- ],
- },
- ],
-}
diff --git a/scripts/get-versions.sh b/scripts/get-versions.sh
deleted file mode 100755
index 5cb1ca2..0000000
--- a/scripts/get-versions.sh
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env bash
-set -euo pipefail
-
-# This script can be simplified to use go when https://github.com/jdx/mise/discussions/6374 is fixed
-# e.g. go list -m -f '{{.GoVersion}}'
-
-module_path="github.com/pulumi/pulumi/pkg/v3"
-go_mod_path="."
-gomod="go.mod"
-
-if [[ "$go_mod_path" != "" && "$go_mod_path" != "." ]]; then
- gomod="$go_mod_path/$gomod"
-fi
-
-if [[ ! -f "$gomod" ]]; then
- echo "missing $gomod" >&2
- exit 1
-fi
-
-raw_version=$(awk -v module="$module_path" '
- $1 == module || $2 == module {
- for (i = 1; i <= NF; i++) {
- if ($i ~ /^v[0-9]/) {
- sub(/^v/, "", $i)
- print $i
- exit
- }
- }
- }
-' "$gomod")
-
-if [[ -z "${raw_version:-}" ]]; then
- echo "failed to determine Pulumi version from $gomod" >&2
- exit 1
-fi
-
-echo "PULUMI_VERSION_MISE=$raw_version"
-export PULUMI_VERSION_MISE=$raw_version
-
-# Prefer the toolchain directive if present, otherwise fall back to the `go` version line
-go_toolchain=$(awk '/^toolchain[[:space:]]+go[0-9]/{ print $2; exit }' "$gomod")
-
-if [[ -n "${go_toolchain:-}" ]]; then
- go_version=${go_toolchain#go}
-else
- go_version=$(awk '/^go[[:space:]]+[0-9]/{ print $2; exit }' "$gomod")
-fi
-
-if [[ -z "${go_version:-}" ]]; then
- echo "failed to determine Go version from $gomod" >&2
- exit 1
-fi
-
-echo "GO_VERSION_MISE=$go_version"
-export GO_VERSION_MISE=$go_version
diff --git a/sdk/dotnet/Config/Config.cs b/sdk/dotnet/Config/Config.cs
deleted file mode 100644
index 1ce47e3..0000000
--- a/sdk/dotnet/Config/Config.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Immutable;
-
-namespace Pulumi.DockerBuild
-{
- public static class Config
- {
- [global::System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "IDE1006", Justification =
- "Double underscore prefix used to avoid conflicts with variable names.")]
- private sealed class __Value
- {
- private readonly Func _getter;
- private T _value = default!;
- private bool _set;
-
- public __Value(Func getter)
- {
- _getter = getter;
- }
-
- public T Get() => _set ? _value : _getter();
-
- public void Set(T value)
- {
- _value = value;
- _set = true;
- }
- }
-
- private static readonly global::Pulumi.Config __config = new global::Pulumi.Config("docker-build");
-
- private static readonly __Value _host = new __Value(() => __config.Get("host") ?? Utilities.GetEnv("DOCKER_HOST") ?? "");
- ///
- /// The build daemon's address.
- ///
- public static string? Host
- {
- get => _host.Get();
- set => _host.Set(value);
- }
-
- private static readonly __Value> _registries = new __Value>(() => __config.GetObject>("registries"));
- public static ImmutableArray Registries
- {
- get => _registries.Get();
- set => _registries.Set(value);
- }
-
- public static class Types
- {
-
- public class Registry
- {
- ///
- /// The registry's address (e.g. "docker.io").
- ///
- public string Address { get; set; }
- ///
- /// Password or token for the registry.
- ///
- public string? Password { get; set; } = null!;
- ///
- /// Username for the registry.
- ///
- public string? Username { get; set; } = null!;
- }
- }
- }
-}
diff --git a/sdk/dotnet/Config/README.md b/sdk/dotnet/Config/README.md
deleted file mode 100644
index a778720..0000000
--- a/sdk/dotnet/Config/README.md
+++ /dev/null
@@ -1 +0,0 @@
-A Pulumi provider for building modern Docker images with buildx and BuildKit.
diff --git a/sdk/dotnet/Enums.cs b/sdk/dotnet/Enums.cs
deleted file mode 100644
index ada5bc5..0000000
--- a/sdk/dotnet/Enums.cs
+++ /dev/null
@@ -1,173 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.ComponentModel;
-using Pulumi;
-
-namespace Pulumi.DockerBuild
-{
- [EnumType]
- public readonly struct CacheMode : IEquatable
- {
- private readonly string _value;
-
- private CacheMode(string value)
- {
- _value = value ?? throw new ArgumentNullException(nameof(value));
- }
-
- ///
- /// Only layers that are exported into the resulting image are cached.
- ///
- public static CacheMode Min { get; } = new CacheMode("min");
- ///
- /// All layers are cached, even those of intermediate steps.
- ///
- public static CacheMode Max { get; } = new CacheMode("max");
-
- public static bool operator ==(CacheMode left, CacheMode right) => left.Equals(right);
- public static bool operator !=(CacheMode left, CacheMode right) => !left.Equals(right);
-
- public static explicit operator string(CacheMode value) => value._value;
-
- [EditorBrowsable(EditorBrowsableState.Never)]
- public override bool Equals(object? obj) => obj is CacheMode other && Equals(other);
- public bool Equals(CacheMode other) => string.Equals(_value, other._value, StringComparison.Ordinal);
-
- [EditorBrowsable(EditorBrowsableState.Never)]
- public override int GetHashCode() => _value?.GetHashCode() ?? 0;
-
- public override string ToString() => _value;
- }
-
- [EnumType]
- public readonly struct CompressionType : IEquatable
- {
- private readonly string _value;
-
- private CompressionType(string value)
- {
- _value = value ?? throw new ArgumentNullException(nameof(value));
- }
-
- ///
- /// Use `gzip` for compression.
- ///
- public static CompressionType Gzip { get; } = new CompressionType("gzip");
- ///
- /// Use `estargz` for compression.
- ///
- public static CompressionType Estargz { get; } = new CompressionType("estargz");
- ///
- /// Use `zstd` for compression.
- ///
- public static CompressionType Zstd { get; } = new CompressionType("zstd");
-
- public static bool operator ==(CompressionType left, CompressionType right) => left.Equals(right);
- public static bool operator !=(CompressionType left, CompressionType right) => !left.Equals(right);
-
- public static explicit operator string(CompressionType value) => value._value;
-
- [EditorBrowsable(EditorBrowsableState.Never)]
- public override bool Equals(object? obj) => obj is CompressionType other && Equals(other);
- public bool Equals(CompressionType other) => string.Equals(_value, other._value, StringComparison.Ordinal);
-
- [EditorBrowsable(EditorBrowsableState.Never)]
- public override int GetHashCode() => _value?.GetHashCode() ?? 0;
-
- public override string ToString() => _value;
- }
-
- [EnumType]
- public readonly struct NetworkMode : IEquatable
- {
- private readonly string _value;
-
- private NetworkMode(string value)
- {
- _value = value ?? throw new ArgumentNullException(nameof(value));
- }
-
- ///
- /// The default sandbox network mode.
- ///
- public static NetworkMode @Default { get; } = new NetworkMode("default");
- ///
- /// Host network mode.
- ///
- public static NetworkMode Host { get; } = new NetworkMode("host");
- ///
- /// Disable network access.
- ///
- public static NetworkMode None { get; } = new NetworkMode("none");
-
- public static bool operator ==(NetworkMode left, NetworkMode right) => left.Equals(right);
- public static bool operator !=(NetworkMode left, NetworkMode right) => !left.Equals(right);
-
- public static explicit operator string(NetworkMode value) => value._value;
-
- [EditorBrowsable(EditorBrowsableState.Never)]
- public override bool Equals(object? obj) => obj is NetworkMode other && Equals(other);
- public bool Equals(NetworkMode other) => string.Equals(_value, other._value, StringComparison.Ordinal);
-
- [EditorBrowsable(EditorBrowsableState.Never)]
- public override int GetHashCode() => _value?.GetHashCode() ?? 0;
-
- public override string ToString() => _value;
- }
-
- [EnumType]
- public readonly struct Platform : IEquatable
- {
- private readonly string _value;
-
- private Platform(string value)
- {
- _value = value ?? throw new ArgumentNullException(nameof(value));
- }
-
- public static Platform Darwin_386 { get; } = new Platform("darwin/386");
- public static Platform Darwin_amd64 { get; } = new Platform("darwin/amd64");
- public static Platform Darwin_arm { get; } = new Platform("darwin/arm");
- public static Platform Darwin_arm64 { get; } = new Platform("darwin/arm64");
- public static Platform Dragonfly_amd64 { get; } = new Platform("dragonfly/amd64");
- public static Platform Freebsd_386 { get; } = new Platform("freebsd/386");
- public static Platform Freebsd_amd64 { get; } = new Platform("freebsd/amd64");
- public static Platform Freebsd_arm { get; } = new Platform("freebsd/arm");
- public static Platform Linux_386 { get; } = new Platform("linux/386");
- public static Platform Linux_amd64 { get; } = new Platform("linux/amd64");
- public static Platform Linux_arm { get; } = new Platform("linux/arm");
- public static Platform Linux_arm64 { get; } = new Platform("linux/arm64");
- public static Platform Linux_mips64 { get; } = new Platform("linux/mips64");
- public static Platform Linux_mips64le { get; } = new Platform("linux/mips64le");
- public static Platform Linux_ppc64le { get; } = new Platform("linux/ppc64le");
- public static Platform Linux_riscv64 { get; } = new Platform("linux/riscv64");
- public static Platform Linux_s390x { get; } = new Platform("linux/s390x");
- public static Platform Netbsd_386 { get; } = new Platform("netbsd/386");
- public static Platform Netbsd_amd64 { get; } = new Platform("netbsd/amd64");
- public static Platform Netbsd_arm { get; } = new Platform("netbsd/arm");
- public static Platform Openbsd_386 { get; } = new Platform("openbsd/386");
- public static Platform Openbsd_amd64 { get; } = new Platform("openbsd/amd64");
- public static Platform Openbsd_arm { get; } = new Platform("openbsd/arm");
- public static Platform Plan9_386 { get; } = new Platform("plan9/386");
- public static Platform Plan9_amd64 { get; } = new Platform("plan9/amd64");
- public static Platform Solaris_amd64 { get; } = new Platform("solaris/amd64");
- public static Platform Windows_386 { get; } = new Platform("windows/386");
- public static Platform Windows_amd64 { get; } = new Platform("windows/amd64");
-
- public static bool operator ==(Platform left, Platform right) => left.Equals(right);
- public static bool operator !=(Platform left, Platform right) => !left.Equals(right);
-
- public static explicit operator string(Platform value) => value._value;
-
- [EditorBrowsable(EditorBrowsableState.Never)]
- public override bool Equals(object? obj) => obj is Platform other && Equals(other);
- public bool Equals(Platform other) => string.Equals(_value, other._value, StringComparison.Ordinal);
-
- [EditorBrowsable(EditorBrowsableState.Never)]
- public override int GetHashCode() => _value?.GetHashCode() ?? 0;
-
- public override string ToString() => _value;
- }
-}
diff --git a/sdk/dotnet/Image.cs b/sdk/dotnet/Image.cs
deleted file mode 100644
index 0ba601b..0000000
--- a/sdk/dotnet/Image.cs
+++ /dev/null
@@ -1,1120 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild
-{
- ///
- /// A Docker image built using buildx -- Docker's interface to the improved
- /// BuildKit backend.
- ///
- /// ## Stability
- ///
- /// **This resource is pre-1.0 and in public preview.**
- ///
- /// We will strive to keep APIs and behavior as stable as possible, but we
- /// cannot guarantee stability until version 1.0.
- ///
- /// ## Migrating Pulumi Docker v3 and v4 Image resources
- ///
- /// This provider's `Image` resource provides a superset of functionality over the `Image` resources available in versions 3 and 4 of the Pulumi Docker provider.
- /// Existing `Image` resources can be converted to the docker-build `Image` resources with minor modifications.
- ///
- /// ### Behavioral differences
- ///
- /// There are several key behavioral differences to keep in mind when transitioning images to the new `Image` resource.
- ///
- /// #### Previews
- ///
- /// Version `3.x` of the Pulumi Docker provider always builds images during preview operations.
- /// This is helpful as a safeguard to prevent "broken" images from merging, but users found the behavior unnecessarily redundant when running previews and updates locally.
- ///
- /// Version `4.x` changed build-on-preview behavior to be opt-in.
- /// By default, `v4.x` `Image` resources do _not_ build during previews, but this behavior can be toggled with the `buildOnPreview` option.
- /// Several users reported outages due to the default behavior allowing bad images to accidentally sneak through CI.
- ///
- /// The default behavior of this provider's `Image` resource is similar to `3.x` and will build images during previews.
- /// This behavior can be changed by specifying `buildOnPreview`.
- ///
- /// #### Push behavior
- ///
- /// Versions `3.x` and `4.x` of the Pulumi Docker provider attempt to push images to remote registries by default.
- /// They expose a `skipPush: true` option to disable pushing.
- ///
- /// This provider's `Image` resource matches the Docker CLI's behavior and does not push images anywhere by default.
- ///
- /// To push images to a registry you can include `push: true` (equivalent to Docker's `--push` flag) or configure an `export` of type `registry` (equivalent to Docker's `--output type=registry`).
- /// Like Docker, if an image is configured without exports you will see a warning with instructions for how to enable pushing, but the build will still proceed normally.
- ///
- /// #### Secrets
- ///
- /// Version `3.x` of the Pulumi Docker provider supports secrets by way of the `extraOptions` field.
- ///
- /// Version `4.x` of the Pulumi Docker provider does not support secrets.
- ///
- /// The `Image` resource supports secrets but does not require those secrets to exist on-disk or in environment variables.
- /// Instead, they should be passed directly as values.
- /// (Please be sure to familiarize yourself with Pulumi's [native secret handling](https://www.pulumi.com/docs/concepts/secrets/).)
- /// Pulumi also provides [ESC](https://www.pulumi.com/product/esc/) to make it easier to share secrets across stacks and environments.
- ///
- /// #### Caching
- ///
- /// Version `3.x` of the Pulumi Docker provider exposes `cacheFrom: bool | { stages: [...] }`.
- /// It builds targets individually and pushes them to separate images for caching.
- ///
- /// Version `4.x` exposes a similar parameter `cacheFrom: { images: [...] }` which pushes and pulls inline caches.
- ///
- /// Both versions 3 and 4 require specific environment variables to be set and deviate from Docker's native caching behavior.
- /// This can result in inefficient builds due to unnecessary image pulls, repeated file transfers, etc.
- ///
- /// The `Image` resource delegates all caching behavior to Docker.
- /// `cacheFrom` and `cacheTo` options (equivalent to Docker's `--cache-to` and `--cache-from`) are exposed and provide additional cache targets, such as local disk, S3 storage, etc.
- ///
- /// #### Outputs
- ///
- /// Versions `3.x` and `4.x` of the provider exposed a `repoDigest` output which was a fully qualified tag with digest.
- /// In `4.x` this could also be a single sha256 hash if the image wasn't pushed.
- ///
- /// Unlike earlier providers the `Image` resource can push multiple tags.
- /// As a convenience, it exposes a `ref` output consisting of a tag with digest as long as the image was pushed.
- /// If multiple tags were pushed this uses one at random.
- ///
- /// If you need more control over tag references you can use the `digest` output, which is always a single sha256 hash as long as the image was exported somewhere.
- ///
- /// #### Tag deletion and refreshes
- ///
- /// Versions 3 and 4 of Pulumi Docker provider do not delete tags when the `Image` resource is deleted, nor do they confirm expected tags exist during `refresh` operations.
- ///
- /// The `buidx.Image` will query your registries during `refresh` to ensure the expected tags exist.
- /// If any are missing a subsequent `update` will push them.
- ///
- /// When a `Image` is deleted, it will _attempt_ to also delete any pushed tags.
- /// Deletion of remote tags is not guaranteed because not all registries support the manifest `DELETE` API (`docker.io` in particular).
- /// Manifests are _not_ deleted in the same way during updates -- to do so safely would require a full build to determine whether a Pulumi operation should be an update or update-replace.
- ///
- /// Use the [`retainOnDelete: true`](https://www.pulumi.com/docs/concepts/options/retainondelete/) option if you do not want tags deleted.
- ///
- /// ### Example migration
- ///
- /// Examples of "fully-featured" `v3` and `v4` `Image` resources are shown below, along with an example `Image` resource showing how they would look after migration.
- ///
- /// The `v3` resource leverages `buildx` via a `DOCKER_BUILDKIT` environment variable and CLI flags passed in with `extraOption`.
- /// After migration, the environment variable is no longer needed and CLI flags are now properties on the `Image`.
- /// In almost all cases, properties of `Image` are named after the Docker CLI flag they correspond to.
- ///
- /// The `v4` resource is less functional than its `v3` counterpart because it lacks the flexibility of `extraOptions`.
- /// It it is shown with parameters similar to the `v3` example for completeness.
- ///
- /// ## Example Usage
- ///
- /// ## Example Usage
- /// ### Push to AWS ECR with caching
- /// ```csharp
- /// using System.Collections.Generic;
- /// using System.Linq;
- /// using Pulumi;
- /// using Aws = Pulumi.Aws;
- /// using DockerBuild = Pulumi.DockerBuild;
- ///
- /// return await Deployment.RunAsync(() =>
- /// {
- /// var ecrRepository = new Aws.Ecr.Repository("ecr-repository");
- ///
- /// var authToken = Aws.Ecr.GetAuthorizationToken.Invoke(new()
- /// {
- /// RegistryId = ecrRepository.RegistryId,
- /// });
- ///
- /// var myImage = new DockerBuild.Image("my-image", new()
- /// {
- /// CacheFrom = new[]
- /// {
- /// new DockerBuild.Inputs.CacheFromArgs
- /// {
- /// Registry = new DockerBuild.Inputs.CacheFromRegistryArgs
- /// {
- /// Ref = ecrRepository.RepositoryUrl.Apply(repositoryUrl => $"{repositoryUrl}:cache"),
- /// },
- /// },
- /// },
- /// CacheTo = new[]
- /// {
- /// new DockerBuild.Inputs.CacheToArgs
- /// {
- /// Registry = new DockerBuild.Inputs.CacheToRegistryArgs
- /// {
- /// ImageManifest = true,
- /// OciMediaTypes = true,
- /// Ref = ecrRepository.RepositoryUrl.Apply(repositoryUrl => $"{repositoryUrl}:cache"),
- /// },
- /// },
- /// },
- /// Context = new DockerBuild.Inputs.BuildContextArgs
- /// {
- /// Location = "./app",
- /// },
- /// Push = true,
- /// Registries = new[]
- /// {
- /// new DockerBuild.Inputs.RegistryArgs
- /// {
- /// Address = ecrRepository.RepositoryUrl,
- /// Password = authToken.Apply(getAuthorizationTokenResult => getAuthorizationTokenResult.Password),
- /// Username = authToken.Apply(getAuthorizationTokenResult => getAuthorizationTokenResult.UserName),
- /// },
- /// },
- /// Tags = new[]
- /// {
- /// ecrRepository.RepositoryUrl.Apply(repositoryUrl => $"{repositoryUrl}:latest"),
- /// },
- /// });
- ///
- /// return new Dictionary<string, object?>
- /// {
- /// ["ref"] = myImage.Ref,
- /// };
- /// });
- ///
- /// ```
- /// ### Multi-platform image
- /// ```csharp
- /// using System.Collections.Generic;
- /// using System.Linq;
- /// using Pulumi;
- /// using DockerBuild = Pulumi.DockerBuild;
- ///
- /// return await Deployment.RunAsync(() =>
- /// {
- /// var image = new DockerBuild.Image("image", new()
- /// {
- /// Context = new DockerBuild.Inputs.BuildContextArgs
- /// {
- /// Location = "app",
- /// },
- /// Platforms = new[]
- /// {
- /// DockerBuild.Platform.Plan9_amd64,
- /// DockerBuild.Platform.Plan9_386,
- /// },
- /// Push = false,
- /// });
- ///
- /// });
- ///
- /// ```
- /// ### Registry export
- /// ```csharp
- /// using System.Collections.Generic;
- /// using System.Linq;
- /// using Pulumi;
- /// using DockerBuild = Pulumi.DockerBuild;
- ///
- /// return await Deployment.RunAsync(() =>
- /// {
- /// var image = new DockerBuild.Image("image", new()
- /// {
- /// Context = new DockerBuild.Inputs.BuildContextArgs
- /// {
- /// Location = "app",
- /// },
- /// Push = true,
- /// Registries = new[]
- /// {
- /// new DockerBuild.Inputs.RegistryArgs
- /// {
- /// Address = "docker.io",
- /// Password = dockerHubPassword,
- /// Username = "pulumibot",
- /// },
- /// },
- /// Tags = new[]
- /// {
- /// "docker.io/pulumi/pulumi:3.107.0",
- /// },
- /// });
- ///
- /// return new Dictionary<string, object?>
- /// {
- /// ["ref"] = myImage.Ref,
- /// };
- /// });
- ///
- /// ```
- /// ### Caching
- /// ```csharp
- /// using System.Collections.Generic;
- /// using System.Linq;
- /// using Pulumi;
- /// using DockerBuild = Pulumi.DockerBuild;
- ///
- /// return await Deployment.RunAsync(() =>
- /// {
- /// var image = new DockerBuild.Image("image", new()
- /// {
- /// CacheFrom = new[]
- /// {
- /// new DockerBuild.Inputs.CacheFromArgs
- /// {
- /// Local = new DockerBuild.Inputs.CacheFromLocalArgs
- /// {
- /// Src = "tmp/cache",
- /// },
- /// },
- /// },
- /// CacheTo = new[]
- /// {
- /// new DockerBuild.Inputs.CacheToArgs
- /// {
- /// Local = new DockerBuild.Inputs.CacheToLocalArgs
- /// {
- /// Dest = "tmp/cache",
- /// Mode = DockerBuild.CacheMode.Max,
- /// },
- /// },
- /// },
- /// Context = new DockerBuild.Inputs.BuildContextArgs
- /// {
- /// Location = "app",
- /// },
- /// Push = false,
- /// });
- ///
- /// });
- ///
- /// ```
- /// ### Docker Build Cloud
- /// ```csharp
- /// using System.Collections.Generic;
- /// using System.Linq;
- /// using Pulumi;
- /// using DockerBuild = Pulumi.DockerBuild;
- ///
- /// return await Deployment.RunAsync(() =>
- /// {
- /// var image = new DockerBuild.Image("image", new()
- /// {
- /// Builder = new DockerBuild.Inputs.BuilderConfigArgs
- /// {
- /// Name = "cloud-builder-name",
- /// },
- /// Context = new DockerBuild.Inputs.BuildContextArgs
- /// {
- /// Location = "app",
- /// },
- /// Exec = true,
- /// Push = false,
- /// });
- ///
- /// });
- ///
- /// ```
- /// ### Build arguments
- /// ```csharp
- /// using System.Collections.Generic;
- /// using System.Linq;
- /// using Pulumi;
- /// using DockerBuild = Pulumi.DockerBuild;
- ///
- /// return await Deployment.RunAsync(() =>
- /// {
- /// var image = new DockerBuild.Image("image", new()
- /// {
- /// BuildArgs =
- /// {
- /// { "SET_ME_TO_TRUE", "true" },
- /// },
- /// Context = new DockerBuild.Inputs.BuildContextArgs
- /// {
- /// Location = "app",
- /// },
- /// Push = false,
- /// });
- ///
- /// });
- ///
- /// ```
- /// ### Build target
- /// ```csharp
- /// using System.Collections.Generic;
- /// using System.Linq;
- /// using Pulumi;
- /// using DockerBuild = Pulumi.DockerBuild;
- ///
- /// return await Deployment.RunAsync(() =>
- /// {
- /// var image = new DockerBuild.Image("image", new()
- /// {
- /// Context = new DockerBuild.Inputs.BuildContextArgs
- /// {
- /// Location = "app",
- /// },
- /// Push = false,
- /// Target = "build-me",
- /// });
- ///
- /// });
- ///
- /// ```
- /// ### Named contexts
- /// ```csharp
- /// using System.Collections.Generic;
- /// using System.Linq;
- /// using Pulumi;
- /// using DockerBuild = Pulumi.DockerBuild;
- ///
- /// return await Deployment.RunAsync(() =>
- /// {
- /// var image = new DockerBuild.Image("image", new()
- /// {
- /// Context = new DockerBuild.Inputs.BuildContextArgs
- /// {
- /// Location = "app",
- /// Named =
- /// {
- /// { "golang:latest", new DockerBuild.Inputs.ContextArgs
- /// {
- /// Location = "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984",
- /// } },
- /// },
- /// },
- /// Push = false,
- /// });
- ///
- /// });
- ///
- /// ```
- /// ### Remote context
- /// ```csharp
- /// using System.Collections.Generic;
- /// using System.Linq;
- /// using Pulumi;
- /// using DockerBuild = Pulumi.DockerBuild;
- ///
- /// return await Deployment.RunAsync(() =>
- /// {
- /// var image = new DockerBuild.Image("image", new()
- /// {
- /// Context = new DockerBuild.Inputs.BuildContextArgs
- /// {
- /// Location = "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
- /// },
- /// Push = false,
- /// });
- ///
- /// });
- ///
- /// ```
- /// ### Inline Dockerfile
- /// ```csharp
- /// using System.Collections.Generic;
- /// using System.Linq;
- /// using Pulumi;
- /// using DockerBuild = Pulumi.DockerBuild;
- ///
- /// return await Deployment.RunAsync(() =>
- /// {
- /// var image = new DockerBuild.Image("image", new()
- /// {
- /// Context = new DockerBuild.Inputs.BuildContextArgs
- /// {
- /// Location = "app",
- /// },
- /// Dockerfile = new DockerBuild.Inputs.DockerfileArgs
- /// {
- /// Inline = @"FROM busybox
- /// COPY hello.c ./
- /// ",
- /// },
- /// Push = false,
- /// });
- ///
- /// });
- ///
- /// ```
- /// ### Remote context
- /// ```csharp
- /// using System.Collections.Generic;
- /// using System.Linq;
- /// using Pulumi;
- /// using DockerBuild = Pulumi.DockerBuild;
- ///
- /// return await Deployment.RunAsync(() =>
- /// {
- /// var image = new DockerBuild.Image("image", new()
- /// {
- /// Context = new DockerBuild.Inputs.BuildContextArgs
- /// {
- /// Location = "https://github.com/docker-library/hello-world.git",
- /// },
- /// Dockerfile = new DockerBuild.Inputs.DockerfileArgs
- /// {
- /// Location = "app/Dockerfile",
- /// },
- /// Push = false,
- /// });
- ///
- /// });
- ///
- /// ```
- /// ### Local export
- /// ```csharp
- /// using System.Collections.Generic;
- /// using System.Linq;
- /// using Pulumi;
- /// using DockerBuild = Pulumi.DockerBuild;
- ///
- /// return await Deployment.RunAsync(() =>
- /// {
- /// var image = new DockerBuild.Image("image", new()
- /// {
- /// Context = new DockerBuild.Inputs.BuildContextArgs
- /// {
- /// Location = "app",
- /// },
- /// Exports = new[]
- /// {
- /// new DockerBuild.Inputs.ExportArgs
- /// {
- /// Docker = new DockerBuild.Inputs.ExportDockerArgs
- /// {
- /// Tar = true,
- /// },
- /// },
- /// },
- /// Push = false,
- /// });
- ///
- /// });
- ///
- /// ```
- ///
- [DockerBuildResourceType("docker-build:index:Image")]
- public partial class Image : global::Pulumi.CustomResource
- {
- ///
- /// Custom `host:ip` mappings to use during the build.
- ///
- /// Equivalent to Docker's `--add-host` flag.
- ///
- [Output("addHosts")]
- public Output> AddHosts { get; private set; } = null!;
-
- ///
- /// `ARG` names and values to set during the build.
- ///
- /// These variables are accessed like environment variables inside `RUN`
- /// instructions.
- ///
- /// Build arguments are persisted in the image, so you should use `secrets`
- /// if these arguments are sensitive.
- ///
- /// Equivalent to Docker's `--build-arg` flag.
- ///
- [Output("buildArgs")]
- public Output?> BuildArgs { get; private set; } = null!;
-
- ///
- /// Setting this to `false` will always skip image builds during previews,
- /// and setting it to `true` will always build images during previews.
- ///
- /// Images built during previews are never exported to registries, however
- /// cache manifests are still exported.
- ///
- /// On-disk Dockerfiles are always validated for syntactic correctness
- /// regardless of this setting.
- ///
- /// Defaults to `true` as a safeguard against broken images merging as part
- /// of CI pipelines.
- ///
- [Output("buildOnPreview")]
- public Output BuildOnPreview { get; private set; } = null!;
-
- ///
- /// Builder configuration.
- ///
- [Output("builder")]
- public Output Builder { get; private set; } = null!;
-
- ///
- /// Cache export configuration.
- ///
- /// Equivalent to Docker's `--cache-from` flag.
- ///
- [Output("cacheFrom")]
- public Output> CacheFrom { get; private set; } = null!;
-
- ///
- /// Cache import configuration.
- ///
- /// Equivalent to Docker's `--cache-to` flag.
- ///
- [Output("cacheTo")]
- public Output> CacheTo { get; private set; } = null!;
-
- ///
- /// Build context settings. Defaults to the current directory.
- ///
- /// Equivalent to Docker's `PATH | URL | -` positional argument.
- ///
- [Output("context")]
- public Output Context { get; private set; } = null!;
-
- ///
- /// A preliminary hash of the image's build context.
- ///
- /// Pulumi uses this to determine if an image _may_ need to be re-built.
- ///
- [Output("contextHash")]
- public Output ContextHash { get; private set; } = null!;
-
- ///
- /// A SHA256 digest of the image if it was exported to a registry or
- /// elsewhere.
- ///
- /// Empty if the image was not exported.
- ///
- /// Registry images can be referenced precisely as `<tag>@<digest>`. The
- /// `ref` output provides one such reference as a convenience.
- ///
- [Output("digest")]
- public Output Digest { get; private set; } = null!;
-
- ///
- /// Dockerfile settings.
- ///
- /// Equivalent to Docker's `--file` flag.
- ///
- [Output("dockerfile")]
- public Output Dockerfile { get; private set; } = null!;
-
- ///
- /// Use `exec` mode to build this image.
- ///
- /// By default the provider embeds a v25 Docker client with v0.12 buildx
- /// support. This helps ensure consistent behavior across environments and
- /// is compatible with alternative build backends (e.g. `buildkitd`), but
- /// it may not be desirable if you require a specific version of buildx.
- /// For example you may want to run a custom `docker-buildx` binary with
- /// support for [Docker Build
- /// Cloud](https://docs.docker.com/build/cloud/setup/) (DBC).
- ///
- /// When this is set to `true` the provider will instead execute the
- /// `docker-buildx` binary directly to perform its operations. The user is
- /// responsible for ensuring this binary exists, with correct permissions
- /// and pre-configured builders, at a path Docker expects (e.g.
- /// `~/.docker/cli-plugins`).
- ///
- /// Debugging `exec` mode may be more difficult as Pulumi will not be able
- /// to surface fine-grained errors and warnings. Additionally credentials
- /// are temporarily written to disk in order to provide them to the
- /// `docker-buildx` binary.
- ///
- [Output("exec")]
- public Output Exec { get; private set; } = null!;
-
- ///
- /// Controls where images are persisted after building.
- ///
- /// Images are only stored in the local cache unless `exports` are
- /// explicitly configured.
- ///
- /// Exporting to multiple destinations requires a daemon running BuildKit
- /// 0.13 or later.
- ///
- /// Equivalent to Docker's `--output` flag.
- ///
- [Output("exports")]
- public Output> Exports { get; private set; } = null!;
-
- ///
- /// Attach arbitrary key/value metadata to the image.
- ///
- /// Equivalent to Docker's `--label` flag.
- ///
- [Output("labels")]
- public Output?> Labels { get; private set; } = null!;
-
- ///
- /// When `true` the build will automatically include a `docker` export.
- ///
- /// Defaults to `false`.
- ///
- /// Equivalent to Docker's `--load` flag.
- ///
- [Output("load")]
- public Output Load { get; private set; } = null!;
-
- ///
- /// Set the network mode for `RUN` instructions. Defaults to `default`.
- ///
- /// For custom networks, configure your builder with `--driver-opt network=...`.
- ///
- /// Equivalent to Docker's `--network` flag.
- ///
- [Output("network")]
- public Output Network { get; private set; } = null!;
-
- ///
- /// Do not import cache manifests when building the image.
- ///
- /// Equivalent to Docker's `--no-cache` flag.
- ///
- [Output("noCache")]
- public Output NoCache { get; private set; } = null!;
-
- ///
- /// Set target platform(s) for the build. Defaults to the host's platform.
- ///
- /// Equivalent to Docker's `--platform` flag.
- ///
- [Output("platforms")]
- public Output> Platforms { get; private set; } = null!;
-
- ///
- /// Always pull referenced images.
- ///
- /// Equivalent to Docker's `--pull` flag.
- ///
- [Output("pull")]
- public Output Pull { get; private set; } = null!;
-
- ///
- /// When `true` the build will automatically include a `registry` export.
- ///
- /// Defaults to `false`.
- ///
- /// Equivalent to Docker's `--push` flag.
- ///
- [Output("push")]
- public Output Push { get; private set; } = null!;
-
- ///
- /// If the image was pushed to any registries then this will contain a
- /// single fully-qualified tag including the build's digest.
- ///
- /// If the image had tags but was not exported, this will take on a value
- /// of one of those tags.
- ///
- /// This will be empty if the image had no exports and no tags.
- ///
- /// This is only for convenience and may not be appropriate for situations
- /// where multiple tags or registries are involved. In those cases this
- /// output is not guaranteed to be stable.
- ///
- /// For more control over tags consumed by downstream resources you should
- /// use the `digest` output.
- ///
- [Output("ref")]
- public Output Ref { get; private set; } = null!;
-
- ///
- /// Registry credentials. Required if reading or exporting to private
- /// repositories.
- ///
- /// Credentials are kept in-memory and do not pollute pre-existing
- /// credentials on the host.
- ///
- /// Similar to `docker login`.
- ///
- [Output("registries")]
- public Output> Registries { get; private set; } = null!;
-
- ///
- /// A mapping of secret names to their corresponding values.
- ///
- /// Unlike the Docker CLI, these can be passed by value and do not need to
- /// exist on-disk or in environment variables.
- ///
- /// Build arguments and environment variables are persistent in the final
- /// image, so you should use this for sensitive values.
- ///
- /// Similar to Docker's `--secret` flag.
- ///
- [Output("secrets")]
- public Output?> Secrets { get; private set; } = null!;
-
- ///
- /// SSH agent socket or keys to expose to the build.
- ///
- /// Equivalent to Docker's `--ssh` flag.
- ///
- [Output("ssh")]
- public Output> Ssh { get; private set; } = null!;
-
- ///
- /// Name and optionally a tag (format: `name:tag`).
- ///
- /// If exporting to a registry, the name should include the fully qualified
- /// registry address (e.g. `docker.io/pulumi/pulumi:latest`).
- ///
- /// Equivalent to Docker's `--tag` flag.
- ///
- [Output("tags")]
- public Output> Tags { get; private set; } = null!;
-
- ///
- /// Set the target build stage(s) to build.
- ///
- /// If not specified all targets will be built by default.
- ///
- /// Equivalent to Docker's `--target` flag.
- ///
- [Output("target")]
- public Output Target { get; private set; } = null!;
-
-
- ///
- /// Create a Image resource with the given unique name, arguments, and options.
- ///
- ///
- /// The unique name of the resource
- /// The arguments used to populate this resource's properties
- /// A bag of options that control this resource's behavior
- public Image(string name, ImageArgs args, CustomResourceOptions? options = null)
- : base("docker-build:index:Image", name, args ?? new ImageArgs(), MakeResourceOptions(options, ""))
- {
- }
-
- private Image(string name, Input id, CustomResourceOptions? options = null)
- : base("docker-build:index:Image", name, null, MakeResourceOptions(options, id))
- {
- }
-
- private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id)
- {
- var defaultOptions = new CustomResourceOptions
- {
- Version = Utilities.Version,
- };
- var merged = CustomResourceOptions.Merge(defaultOptions, options);
- // Override the ID if one was specified for consistency with other language SDKs.
- merged.Id = id ?? merged.Id;
- return merged;
- }
- ///
- /// Get an existing Image resource's state with the given name, ID, and optional extra
- /// properties used to qualify the lookup.
- ///
- ///
- /// The unique name of the resulting resource.
- /// The unique provider ID of the resource to lookup.
- /// A bag of options that control this resource's behavior
- public static Image Get(string name, Input id, CustomResourceOptions? options = null)
- {
- return new Image(name, id, options);
- }
- }
-
- public sealed class ImageArgs : global::Pulumi.ResourceArgs
- {
- [Input("addHosts")]
- private InputList? _addHosts;
-
- ///
- /// Custom `host:ip` mappings to use during the build.
- ///
- /// Equivalent to Docker's `--add-host` flag.
- ///
- public InputList AddHosts
- {
- get => _addHosts ?? (_addHosts = new InputList());
- set => _addHosts = value;
- }
-
- [Input("buildArgs")]
- private InputMap? _buildArgs;
-
- ///
- /// `ARG` names and values to set during the build.
- ///
- /// These variables are accessed like environment variables inside `RUN`
- /// instructions.
- ///
- /// Build arguments are persisted in the image, so you should use `secrets`
- /// if these arguments are sensitive.
- ///
- /// Equivalent to Docker's `--build-arg` flag.
- ///
- public InputMap BuildArgs
- {
- get => _buildArgs ?? (_buildArgs = new InputMap());
- set => _buildArgs = value;
- }
-
- ///
- /// Setting this to `false` will always skip image builds during previews,
- /// and setting it to `true` will always build images during previews.
- ///
- /// Images built during previews are never exported to registries, however
- /// cache manifests are still exported.
- ///
- /// On-disk Dockerfiles are always validated for syntactic correctness
- /// regardless of this setting.
- ///
- /// Defaults to `true` as a safeguard against broken images merging as part
- /// of CI pipelines.
- ///
- [Input("buildOnPreview")]
- public Input? BuildOnPreview { get; set; }
-
- ///
- /// Builder configuration.
- ///
- [Input("builder")]
- public Input? Builder { get; set; }
-
- [Input("cacheFrom")]
- private InputList? _cacheFrom;
-
- ///
- /// Cache export configuration.
- ///
- /// Equivalent to Docker's `--cache-from` flag.
- ///
- public InputList CacheFrom
- {
- get => _cacheFrom ?? (_cacheFrom = new InputList());
- set => _cacheFrom = value;
- }
-
- [Input("cacheTo")]
- private InputList? _cacheTo;
-
- ///
- /// Cache import configuration.
- ///
- /// Equivalent to Docker's `--cache-to` flag.
- ///
- public InputList CacheTo
- {
- get => _cacheTo ?? (_cacheTo = new InputList());
- set => _cacheTo = value;
- }
-
- ///
- /// Build context settings. Defaults to the current directory.
- ///
- /// Equivalent to Docker's `PATH | URL | -` positional argument.
- ///
- [Input("context")]
- public Input? Context { get; set; }
-
- ///
- /// Dockerfile settings.
- ///
- /// Equivalent to Docker's `--file` flag.
- ///
- [Input("dockerfile")]
- public Input? Dockerfile { get; set; }
-
- ///
- /// Use `exec` mode to build this image.
- ///
- /// By default the provider embeds a v25 Docker client with v0.12 buildx
- /// support. This helps ensure consistent behavior across environments and
- /// is compatible with alternative build backends (e.g. `buildkitd`), but
- /// it may not be desirable if you require a specific version of buildx.
- /// For example you may want to run a custom `docker-buildx` binary with
- /// support for [Docker Build
- /// Cloud](https://docs.docker.com/build/cloud/setup/) (DBC).
- ///
- /// When this is set to `true` the provider will instead execute the
- /// `docker-buildx` binary directly to perform its operations. The user is
- /// responsible for ensuring this binary exists, with correct permissions
- /// and pre-configured builders, at a path Docker expects (e.g.
- /// `~/.docker/cli-plugins`).
- ///
- /// Debugging `exec` mode may be more difficult as Pulumi will not be able
- /// to surface fine-grained errors and warnings. Additionally credentials
- /// are temporarily written to disk in order to provide them to the
- /// `docker-buildx` binary.
- ///
- [Input("exec")]
- public Input? Exec { get; set; }
-
- [Input("exports")]
- private InputList? _exports;
-
- ///
- /// Controls where images are persisted after building.
- ///
- /// Images are only stored in the local cache unless `exports` are
- /// explicitly configured.
- ///
- /// Exporting to multiple destinations requires a daemon running BuildKit
- /// 0.13 or later.
- ///
- /// Equivalent to Docker's `--output` flag.
- ///
- public InputList Exports
- {
- get => _exports ?? (_exports = new InputList());
- set => _exports = value;
- }
-
- [Input("labels")]
- private InputMap? _labels;
-
- ///
- /// Attach arbitrary key/value metadata to the image.
- ///
- /// Equivalent to Docker's `--label` flag.
- ///
- public InputMap Labels
- {
- get => _labels ?? (_labels = new InputMap());
- set => _labels = value;
- }
-
- ///
- /// When `true` the build will automatically include a `docker` export.
- ///
- /// Defaults to `false`.
- ///
- /// Equivalent to Docker's `--load` flag.
- ///
- [Input("load")]
- public Input? Load { get; set; }
-
- ///
- /// Set the network mode for `RUN` instructions. Defaults to `default`.
- ///
- /// For custom networks, configure your builder with `--driver-opt network=...`.
- ///
- /// Equivalent to Docker's `--network` flag.
- ///
- [Input("network")]
- public Input? Network { get; set; }
-
- ///
- /// Do not import cache manifests when building the image.
- ///
- /// Equivalent to Docker's `--no-cache` flag.
- ///
- [Input("noCache")]
- public Input? NoCache { get; set; }
-
- [Input("platforms")]
- private InputList? _platforms;
-
- ///
- /// Set target platform(s) for the build. Defaults to the host's platform.
- ///
- /// Equivalent to Docker's `--platform` flag.
- ///
- public InputList Platforms
- {
- get => _platforms ?? (_platforms = new InputList());
- set => _platforms = value;
- }
-
- ///
- /// Always pull referenced images.
- ///
- /// Equivalent to Docker's `--pull` flag.
- ///
- [Input("pull")]
- public Input? Pull { get; set; }
-
- ///
- /// When `true` the build will automatically include a `registry` export.
- ///
- /// Defaults to `false`.
- ///
- /// Equivalent to Docker's `--push` flag.
- ///
- [Input("push", required: true)]
- public Input Push { get; set; } = null!;
-
- [Input("registries")]
- private InputList? _registries;
-
- ///
- /// Registry credentials. Required if reading or exporting to private
- /// repositories.
- ///
- /// Credentials are kept in-memory and do not pollute pre-existing
- /// credentials on the host.
- ///
- /// Similar to `docker login`.
- ///
- public InputList Registries
- {
- get => _registries ?? (_registries = new InputList());
- set => _registries = value;
- }
-
- [Input("secrets")]
- private InputMap? _secrets;
-
- ///
- /// A mapping of secret names to their corresponding values.
- ///
- /// Unlike the Docker CLI, these can be passed by value and do not need to
- /// exist on-disk or in environment variables.
- ///
- /// Build arguments and environment variables are persistent in the final
- /// image, so you should use this for sensitive values.
- ///
- /// Similar to Docker's `--secret` flag.
- ///
- public InputMap Secrets
- {
- get => _secrets ?? (_secrets = new InputMap());
- set => _secrets = value;
- }
-
- [Input("ssh")]
- private InputList? _ssh;
-
- ///
- /// SSH agent socket or keys to expose to the build.
- ///
- /// Equivalent to Docker's `--ssh` flag.
- ///
- public InputList Ssh
- {
- get => _ssh ?? (_ssh = new InputList());
- set => _ssh = value;
- }
-
- [Input("tags")]
- private InputList? _tags;
-
- ///
- /// Name and optionally a tag (format: `name:tag`).
- ///
- /// If exporting to a registry, the name should include the fully qualified
- /// registry address (e.g. `docker.io/pulumi/pulumi:latest`).
- ///
- /// Equivalent to Docker's `--tag` flag.
- ///
- public InputList Tags
- {
- get => _tags ?? (_tags = new InputList());
- set => _tags = value;
- }
-
- ///
- /// Set the target build stage(s) to build.
- ///
- /// If not specified all targets will be built by default.
- ///
- /// Equivalent to Docker's `--target` flag.
- ///
- [Input("target")]
- public Input? Target { get; set; }
-
- public ImageArgs()
- {
- BuildOnPreview = true;
- Network = Pulumi.DockerBuild.NetworkMode.@Default;
- }
- public static new ImageArgs Empty => new ImageArgs();
- }
-}
diff --git a/sdk/dotnet/Index.cs b/sdk/dotnet/Index.cs
deleted file mode 100644
index 841d9d8..0000000
--- a/sdk/dotnet/Index.cs
+++ /dev/null
@@ -1,259 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild
-{
- ///
- /// A wrapper around `docker buildx imagetools create` to create an index
- /// (or manifest list) referencing one or more existing images.
- ///
- /// In most cases you do not need an `Index` to build a multi-platform
- /// image -- specifying multiple platforms on the `Image` will handle this
- /// for you automatically.
- ///
- /// However, as of April 2024, building multi-platform images _with
- /// caching_ will only export a cache for one platform at a time (see [this
- /// discussion](https://github.com/docker/buildx/discussions/1382) for more
- /// details).
- ///
- /// Therefore this resource can be helpful if you are building
- /// multi-platform images with caching: each platform can be built and
- /// cached separately, and an `Index` can join them all together. An
- /// example of this is shown below.
- ///
- /// This resource creates an OCI image index or a Docker manifest list
- /// depending on the media types of the source images.
- ///
- /// ## Example Usage
- /// ### Multi-platform registry caching
- /// ```csharp
- /// using System.Collections.Generic;
- /// using System.Linq;
- /// using Pulumi;
- /// using DockerBuild = Pulumi.DockerBuild;
- ///
- /// return await Deployment.RunAsync(() =>
- /// {
- /// var amd64 = new DockerBuild.Image("amd64", new()
- /// {
- /// CacheFrom = new[]
- /// {
- /// new DockerBuild.Inputs.CacheFromArgs
- /// {
- /// Registry = new DockerBuild.Inputs.CacheFromRegistryArgs
- /// {
- /// Ref = "docker.io/pulumi/pulumi:cache-amd64",
- /// },
- /// },
- /// },
- /// CacheTo = new[]
- /// {
- /// new DockerBuild.Inputs.CacheToArgs
- /// {
- /// Registry = new DockerBuild.Inputs.CacheToRegistryArgs
- /// {
- /// Mode = DockerBuild.CacheMode.Max,
- /// Ref = "docker.io/pulumi/pulumi:cache-amd64",
- /// },
- /// },
- /// },
- /// Context = new DockerBuild.Inputs.BuildContextArgs
- /// {
- /// Location = "app",
- /// },
- /// Platforms = new[]
- /// {
- /// DockerBuild.Platform.Linux_amd64,
- /// },
- /// Tags = new[]
- /// {
- /// "docker.io/pulumi/pulumi:3.107.0-amd64",
- /// },
- /// });
- ///
- /// var arm64 = new DockerBuild.Image("arm64", new()
- /// {
- /// CacheFrom = new[]
- /// {
- /// new DockerBuild.Inputs.CacheFromArgs
- /// {
- /// Registry = new DockerBuild.Inputs.CacheFromRegistryArgs
- /// {
- /// Ref = "docker.io/pulumi/pulumi:cache-arm64",
- /// },
- /// },
- /// },
- /// CacheTo = new[]
- /// {
- /// new DockerBuild.Inputs.CacheToArgs
- /// {
- /// Registry = new DockerBuild.Inputs.CacheToRegistryArgs
- /// {
- /// Mode = DockerBuild.CacheMode.Max,
- /// Ref = "docker.io/pulumi/pulumi:cache-arm64",
- /// },
- /// },
- /// },
- /// Context = new DockerBuild.Inputs.BuildContextArgs
- /// {
- /// Location = "app",
- /// },
- /// Platforms = new[]
- /// {
- /// DockerBuild.Platform.Linux_arm64,
- /// },
- /// Tags = new[]
- /// {
- /// "docker.io/pulumi/pulumi:3.107.0-arm64",
- /// },
- /// });
- ///
- /// var index = new DockerBuild.Index("index", new()
- /// {
- /// Sources = new[]
- /// {
- /// amd64.Ref,
- /// arm64.Ref,
- /// },
- /// Tag = "docker.io/pulumi/pulumi:3.107.0",
- /// });
- ///
- /// return new Dictionary<string, object?>
- /// {
- /// ["ref"] = index.Ref,
- /// };
- /// });
- ///
- /// ```
- ///
- [DockerBuildResourceType("docker-build:index:Index")]
- public partial class Index : global::Pulumi.CustomResource
- {
- ///
- /// If true, push the index to the target registry.
- ///
- /// Defaults to `true`.
- ///
- [Output("push")]
- public Output Push { get; private set; } = null!;
-
- ///
- /// The pushed tag with digest.
- ///
- /// Identical to the tag if the index was not pushed.
- ///
- [Output("ref")]
- public Output Ref { get; private set; } = null!;
-
- ///
- /// Authentication for the registry where the tagged index will be pushed.
- ///
- /// Credentials can also be included with the provider's configuration.
- ///
- [Output("registry")]
- public Output Registry { get; private set; } = null!;
-
- ///
- /// Existing images to include in the index.
- ///
- [Output("sources")]
- public Output> Sources { get; private set; } = null!;
-
- ///
- /// The tag to apply to the index.
- ///
- [Output("tag")]
- public Output Tag { get; private set; } = null!;
-
-
- ///
- /// Create a Index resource with the given unique name, arguments, and options.
- ///
- ///
- /// The unique name of the resource
- /// The arguments used to populate this resource's properties
- /// A bag of options that control this resource's behavior
- public Index(string name, IndexArgs args, CustomResourceOptions? options = null)
- : base("docker-build:index:Index", name, args ?? new IndexArgs(), MakeResourceOptions(options, ""))
- {
- }
-
- private Index(string name, Input id, CustomResourceOptions? options = null)
- : base("docker-build:index:Index", name, null, MakeResourceOptions(options, id))
- {
- }
-
- private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id)
- {
- var defaultOptions = new CustomResourceOptions
- {
- Version = Utilities.Version,
- };
- var merged = CustomResourceOptions.Merge(defaultOptions, options);
- // Override the ID if one was specified for consistency with other language SDKs.
- merged.Id = id ?? merged.Id;
- return merged;
- }
- ///
- /// Get an existing Index resource's state with the given name, ID, and optional extra
- /// properties used to qualify the lookup.
- ///
- ///
- /// The unique name of the resulting resource.
- /// The unique provider ID of the resource to lookup.
- /// A bag of options that control this resource's behavior
- public static Index Get(string name, Input id, CustomResourceOptions? options = null)
- {
- return new Index(name, id, options);
- }
- }
-
- public sealed class IndexArgs : global::Pulumi.ResourceArgs
- {
- ///
- /// If true, push the index to the target registry.
- ///
- /// Defaults to `true`.
- ///
- [Input("push")]
- public Input? Push { get; set; }
-
- ///
- /// Authentication for the registry where the tagged index will be pushed.
- ///
- /// Credentials can also be included with the provider's configuration.
- ///
- [Input("registry")]
- public Input? Registry { get; set; }
-
- [Input("sources", required: true)]
- private InputList? _sources;
-
- ///
- /// Existing images to include in the index.
- ///
- public InputList Sources
- {
- get => _sources ?? (_sources = new InputList());
- set => _sources = value;
- }
-
- ///
- /// The tag to apply to the index.
- ///
- [Input("tag", required: true)]
- public Input Tag { get; set; } = null!;
-
- public IndexArgs()
- {
- Push = true;
- }
- public static new IndexArgs Empty => new IndexArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/BuildContextArgs.cs b/sdk/dotnet/Inputs/BuildContextArgs.cs
deleted file mode 100644
index ed1f377..0000000
--- a/sdk/dotnet/Inputs/BuildContextArgs.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class BuildContextArgs : global::Pulumi.ResourceArgs
- {
- ///
- /// Resources to use for build context.
- ///
- /// The location can be:
- /// * A relative or absolute path to a local directory (`.`, `./app`,
- /// `/app`, etc.).
- /// * A remote URL of a Git repository, tarball, or plain text file
- /// (`https://github.com/user/myrepo.git`, `http://server/context.tar.gz`,
- /// etc.).
- ///
- [Input("location", required: true)]
- public Input Location { get; set; } = null!;
-
- [Input("named")]
- private InputMap? _named;
-
- ///
- /// Additional build contexts to use.
- ///
- /// These contexts are accessed with `FROM name` or `--from=name`
- /// statements when using Dockerfile 1.4+ syntax.
- ///
- /// Values can be local paths, HTTP URLs, or `docker-image://` images.
- ///
- public InputMap Named
- {
- get => _named ?? (_named = new InputMap());
- set => _named = value;
- }
-
- public BuildContextArgs()
- {
- }
- public static new BuildContextArgs Empty => new BuildContextArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/BuilderConfigArgs.cs b/sdk/dotnet/Inputs/BuilderConfigArgs.cs
deleted file mode 100644
index 1ed2c79..0000000
--- a/sdk/dotnet/Inputs/BuilderConfigArgs.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class BuilderConfigArgs : global::Pulumi.ResourceArgs
- {
- ///
- /// Name of an existing buildx builder to use.
- ///
- /// Only `docker-container`, `kubernetes`, or `remote` drivers are
- /// supported. The legacy `docker` driver is not supported.
- ///
- /// Equivalent to Docker's `--builder` flag.
- ///
- [Input("name")]
- public Input? Name { get; set; }
-
- public BuilderConfigArgs()
- {
- }
- public static new BuilderConfigArgs Empty => new BuilderConfigArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/CacheFromArgs.cs b/sdk/dotnet/Inputs/CacheFromArgs.cs
deleted file mode 100644
index d914555..0000000
--- a/sdk/dotnet/Inputs/CacheFromArgs.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class CacheFromArgs : global::Pulumi.ResourceArgs
- {
- ///
- /// Upload build caches to Azure's blob storage service.
- ///
- [Input("azblob")]
- public Input? Azblob { get; set; }
-
- ///
- /// When `true` this entry will be excluded. Defaults to `false`.
- ///
- [Input("disabled")]
- public Input? Disabled { get; set; }
-
- ///
- /// Recommended for use with GitHub Actions workflows.
- ///
- /// An action like `crazy-max/ghaction-github-runtime` is recommended to
- /// expose appropriate credentials to your GitHub workflow.
- ///
- [Input("gha")]
- public Input? Gha { get; set; }
-
- ///
- /// A simple backend which caches images on your local filesystem.
- ///
- [Input("local")]
- public Input? Local { get; set; }
-
- ///
- /// A raw string as you would provide it to the Docker CLI (e.g.,
- /// `type=inline`).
- ///
- [Input("raw")]
- public Input? Raw { get; set; }
-
- ///
- /// Upload build caches to remote registries.
- ///
- [Input("registry")]
- public Input? Registry { get; set; }
-
- ///
- /// Upload build caches to AWS S3 or an S3-compatible services such as
- /// MinIO.
- ///
- [Input("s3")]
- public Input? S3 { get; set; }
-
- public CacheFromArgs()
- {
- }
- public static new CacheFromArgs Empty => new CacheFromArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/CacheFromAzureBlobArgs.cs b/sdk/dotnet/Inputs/CacheFromAzureBlobArgs.cs
deleted file mode 100644
index 0a5a385..0000000
--- a/sdk/dotnet/Inputs/CacheFromAzureBlobArgs.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class CacheFromAzureBlobArgs : global::Pulumi.ResourceArgs
- {
- ///
- /// Base URL of the storage account.
- ///
- [Input("accountUrl")]
- public Input? AccountUrl { get; set; }
-
- ///
- /// The name of the cache image.
- ///
- [Input("name", required: true)]
- public Input Name { get; set; } = null!;
-
- [Input("secretAccessKey")]
- private Input? _secretAccessKey;
-
- ///
- /// Blob storage account key.
- ///
- public Input? SecretAccessKey
- {
- get => _secretAccessKey;
- set
- {
- var emptySecret = Output.CreateSecret(0);
- _secretAccessKey = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1);
- }
- }
-
- public CacheFromAzureBlobArgs()
- {
- }
- public static new CacheFromAzureBlobArgs Empty => new CacheFromAzureBlobArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/CacheFromGitHubActionsArgs.cs b/sdk/dotnet/Inputs/CacheFromGitHubActionsArgs.cs
deleted file mode 100644
index dcff35c..0000000
--- a/sdk/dotnet/Inputs/CacheFromGitHubActionsArgs.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class CacheFromGitHubActionsArgs : global::Pulumi.ResourceArgs
- {
- ///
- /// The scope to use for cache keys. Defaults to `buildkit`.
- ///
- /// This should be set if building and caching multiple images in one
- /// workflow, otherwise caches will overwrite each other.
- ///
- [Input("scope")]
- public Input? Scope { get; set; }
-
- [Input("token")]
- private Input? _token;
-
- ///
- /// The GitHub Actions token to use. This is not a personal access tokens
- /// and is typically generated automatically as part of each job.
- ///
- /// Defaults to `$ACTIONS_RUNTIME_TOKEN`, although a separate action like
- /// `crazy-max/ghaction-github-runtime` is recommended to expose this
- /// environment variable to your jobs.
- ///
- public Input? Token
- {
- get => _token;
- set
- {
- var emptySecret = Output.CreateSecret(0);
- _token = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1);
- }
- }
-
- ///
- /// The cache server URL to use for artifacts.
- ///
- /// Defaults to `$ACTIONS_CACHE_URL`, although a separate action like
- /// `crazy-max/ghaction-github-runtime` is recommended to expose this
- /// environment variable to your jobs.
- ///
- [Input("url")]
- public Input? Url { get; set; }
-
- public CacheFromGitHubActionsArgs()
- {
- Scope = "buildkit";
- Token = Utilities.GetEnv("ACTIONS_RUNTIME_TOKEN") ?? "";
- Url = Utilities.GetEnv("ACTIONS_CACHE_URL") ?? "";
- }
- public static new CacheFromGitHubActionsArgs Empty => new CacheFromGitHubActionsArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/CacheFromLocalArgs.cs b/sdk/dotnet/Inputs/CacheFromLocalArgs.cs
deleted file mode 100644
index d59e7e0..0000000
--- a/sdk/dotnet/Inputs/CacheFromLocalArgs.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class CacheFromLocalArgs : global::Pulumi.ResourceArgs
- {
- ///
- /// Digest of manifest to import.
- ///
- [Input("digest")]
- public Input? Digest { get; set; }
-
- ///
- /// Path of the local directory where cache gets imported from.
- ///
- [Input("src", required: true)]
- public Input Src { get; set; } = null!;
-
- public CacheFromLocalArgs()
- {
- }
- public static new CacheFromLocalArgs Empty => new CacheFromLocalArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/CacheFromRegistryArgs.cs b/sdk/dotnet/Inputs/CacheFromRegistryArgs.cs
deleted file mode 100644
index f2bc57d..0000000
--- a/sdk/dotnet/Inputs/CacheFromRegistryArgs.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class CacheFromRegistryArgs : global::Pulumi.ResourceArgs
- {
- ///
- /// Fully qualified name of the cache image to import.
- ///
- [Input("ref", required: true)]
- public Input Ref { get; set; } = null!;
-
- public CacheFromRegistryArgs()
- {
- }
- public static new CacheFromRegistryArgs Empty => new CacheFromRegistryArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/CacheFromS3Args.cs b/sdk/dotnet/Inputs/CacheFromS3Args.cs
deleted file mode 100644
index 3a67ee2..0000000
--- a/sdk/dotnet/Inputs/CacheFromS3Args.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class CacheFromS3Args : global::Pulumi.ResourceArgs
- {
- ///
- /// Defaults to `$AWS_ACCESS_KEY_ID`.
- ///
- [Input("accessKeyId")]
- public Input? AccessKeyId { get; set; }
-
- ///
- /// Prefix to prepend to blob filenames.
- ///
- [Input("blobsPrefix")]
- public Input? BlobsPrefix { get; set; }
-
- ///
- /// Name of the S3 bucket.
- ///
- [Input("bucket", required: true)]
- public Input Bucket { get; set; } = null!;
-
- ///
- /// Endpoint of the S3 bucket.
- ///
- [Input("endpointUrl")]
- public Input? EndpointUrl { get; set; }
-
- ///
- /// Prefix to prepend on manifest filenames.
- ///
- [Input("manifestsPrefix")]
- public Input? ManifestsPrefix { get; set; }
-
- ///
- /// Name of the cache image.
- ///
- [Input("name")]
- public Input? Name { get; set; }
-
- ///
- /// The geographic location of the bucket. Defaults to `$AWS_REGION`.
- ///
- [Input("region", required: true)]
- public Input Region { get; set; } = null!;
-
- [Input("secretAccessKey")]
- private Input? _secretAccessKey;
-
- ///
- /// Defaults to `$AWS_SECRET_ACCESS_KEY`.
- ///
- public Input? SecretAccessKey
- {
- get => _secretAccessKey;
- set
- {
- var emptySecret = Output.CreateSecret(0);
- _secretAccessKey = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1);
- }
- }
-
- [Input("sessionToken")]
- private Input? _sessionToken;
-
- ///
- /// Defaults to `$AWS_SESSION_TOKEN`.
- ///
- public Input? SessionToken
- {
- get => _sessionToken;
- set
- {
- var emptySecret = Output.CreateSecret(0);
- _sessionToken = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1);
- }
- }
-
- ///
- /// Uses `bucket` in the URL instead of hostname when `true`.
- ///
- [Input("usePathStyle")]
- public Input? UsePathStyle { get; set; }
-
- public CacheFromS3Args()
- {
- AccessKeyId = Utilities.GetEnv("AWS_ACCESS_KEY_ID") ?? "";
- Region = Utilities.GetEnv("AWS_REGION") ?? "";
- SecretAccessKey = Utilities.GetEnv("AWS_SECRET_ACCESS_KEY") ?? "";
- SessionToken = Utilities.GetEnv("AWS_SESSION_TOKEN") ?? "";
- }
- public static new CacheFromS3Args Empty => new CacheFromS3Args();
- }
-}
diff --git a/sdk/dotnet/Inputs/CacheToArgs.cs b/sdk/dotnet/Inputs/CacheToArgs.cs
deleted file mode 100644
index 440e220..0000000
--- a/sdk/dotnet/Inputs/CacheToArgs.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class CacheToArgs : global::Pulumi.ResourceArgs
- {
- ///
- /// Push cache to Azure's blob storage service.
- ///
- [Input("azblob")]
- public Input? Azblob { get; set; }
-
- ///
- /// When `true` this entry will be excluded. Defaults to `false`.
- ///
- [Input("disabled")]
- public Input? Disabled { get; set; }
-
- ///
- /// Recommended for use with GitHub Actions workflows.
- ///
- /// An action like `crazy-max/ghaction-github-runtime` is recommended to
- /// expose appropriate credentials to your GitHub workflow.
- ///
- [Input("gha")]
- public Input? Gha { get; set; }
-
- ///
- /// The inline cache storage backend is the simplest implementation to get
- /// started with, but it does not handle multi-stage builds. Consider the
- /// `registry` cache backend instead.
- ///
- [Input("inline")]
- public Input? Inline { get; set; }
-
- ///
- /// A simple backend which caches imagines on your local filesystem.
- ///
- [Input("local")]
- public Input? Local { get; set; }
-
- ///
- /// A raw string as you would provide it to the Docker CLI (e.g.,
- /// `type=inline`)
- ///
- [Input("raw")]
- public Input? Raw { get; set; }
-
- ///
- /// Push caches to remote registries. Incompatible with the `docker` build
- /// driver.
- ///
- [Input("registry")]
- public Input? Registry { get; set; }
-
- ///
- /// Push cache to AWS S3 or S3-compatible services such as MinIO.
- ///
- [Input("s3")]
- public Input? S3 { get; set; }
-
- public CacheToArgs()
- {
- }
- public static new CacheToArgs Empty => new CacheToArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/CacheToAzureBlobArgs.cs b/sdk/dotnet/Inputs/CacheToAzureBlobArgs.cs
deleted file mode 100644
index 50befbb..0000000
--- a/sdk/dotnet/Inputs/CacheToAzureBlobArgs.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class CacheToAzureBlobArgs : global::Pulumi.ResourceArgs
- {
- ///
- /// Base URL of the storage account.
- ///
- [Input("accountUrl")]
- public Input? AccountUrl { get; set; }
-
- ///
- /// Ignore errors caused by failed cache exports.
- ///
- [Input("ignoreError")]
- public Input? IgnoreError { get; set; }
-
- ///
- /// The cache mode to use. Defaults to `min`.
- ///
- [Input("mode")]
- public Input? Mode { get; set; }
-
- ///
- /// The name of the cache image.
- ///
- [Input("name", required: true)]
- public Input Name { get; set; } = null!;
-
- [Input("secretAccessKey")]
- private Input? _secretAccessKey;
-
- ///
- /// Blob storage account key.
- ///
- public Input? SecretAccessKey
- {
- get => _secretAccessKey;
- set
- {
- var emptySecret = Output.CreateSecret(0);
- _secretAccessKey = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1);
- }
- }
-
- public CacheToAzureBlobArgs()
- {
- IgnoreError = false;
- Mode = Pulumi.DockerBuild.CacheMode.Min;
- }
- public static new CacheToAzureBlobArgs Empty => new CacheToAzureBlobArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/CacheToGitHubActionsArgs.cs b/sdk/dotnet/Inputs/CacheToGitHubActionsArgs.cs
deleted file mode 100644
index 25bf605..0000000
--- a/sdk/dotnet/Inputs/CacheToGitHubActionsArgs.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class CacheToGitHubActionsArgs : global::Pulumi.ResourceArgs
- {
- ///
- /// Ignore errors caused by failed cache exports.
- ///
- [Input("ignoreError")]
- public Input? IgnoreError { get; set; }
-
- ///
- /// The cache mode to use. Defaults to `min`.
- ///
- [Input("mode")]
- public Input? Mode { get; set; }
-
- ///
- /// The scope to use for cache keys. Defaults to `buildkit`.
- ///
- /// This should be set if building and caching multiple images in one
- /// workflow, otherwise caches will overwrite each other.
- ///
- [Input("scope")]
- public Input? Scope { get; set; }
-
- [Input("token")]
- private Input? _token;
-
- ///
- /// The GitHub Actions token to use. This is not a personal access tokens
- /// and is typically generated automatically as part of each job.
- ///
- /// Defaults to `$ACTIONS_RUNTIME_TOKEN`, although a separate action like
- /// `crazy-max/ghaction-github-runtime` is recommended to expose this
- /// environment variable to your jobs.
- ///
- public Input? Token
- {
- get => _token;
- set
- {
- var emptySecret = Output.CreateSecret(0);
- _token = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1);
- }
- }
-
- ///
- /// The cache server URL to use for artifacts.
- ///
- /// Defaults to `$ACTIONS_CACHE_URL`, although a separate action like
- /// `crazy-max/ghaction-github-runtime` is recommended to expose this
- /// environment variable to your jobs.
- ///
- [Input("url")]
- public Input? Url { get; set; }
-
- public CacheToGitHubActionsArgs()
- {
- IgnoreError = false;
- Mode = Pulumi.DockerBuild.CacheMode.Min;
- Scope = "buildkit";
- Token = Utilities.GetEnv("ACTIONS_RUNTIME_TOKEN") ?? "";
- Url = Utilities.GetEnv("ACTIONS_CACHE_URL") ?? "";
- }
- public static new CacheToGitHubActionsArgs Empty => new CacheToGitHubActionsArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/CacheToInlineArgs.cs b/sdk/dotnet/Inputs/CacheToInlineArgs.cs
deleted file mode 100644
index a70eb5a..0000000
--- a/sdk/dotnet/Inputs/CacheToInlineArgs.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- ///
- /// Include an inline cache with the exported image.
- ///
- public sealed class CacheToInlineArgs : global::Pulumi.ResourceArgs
- {
- public CacheToInlineArgs()
- {
- }
- public static new CacheToInlineArgs Empty => new CacheToInlineArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/CacheToLocalArgs.cs b/sdk/dotnet/Inputs/CacheToLocalArgs.cs
deleted file mode 100644
index f37c12b..0000000
--- a/sdk/dotnet/Inputs/CacheToLocalArgs.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class CacheToLocalArgs : global::Pulumi.ResourceArgs
- {
- ///
- /// The compression type to use.
- ///
- [Input("compression")]
- public Input? Compression { get; set; }
-
- ///
- /// Compression level from 0 to 22.
- ///
- [Input("compressionLevel")]
- public Input? CompressionLevel { get; set; }
-
- ///
- /// Path of the local directory to export the cache.
- ///
- [Input("dest", required: true)]
- public Input Dest { get; set; } = null!;
-
- ///
- /// Forcefully apply compression.
- ///
- [Input("forceCompression")]
- public Input? ForceCompression { get; set; }
-
- ///
- /// Ignore errors caused by failed cache exports.
- ///
- [Input("ignoreError")]
- public Input? IgnoreError { get; set; }
-
- ///
- /// The cache mode to use. Defaults to `min`.
- ///
- [Input("mode")]
- public Input? Mode { get; set; }
-
- public CacheToLocalArgs()
- {
- Compression = Pulumi.DockerBuild.CompressionType.Gzip;
- CompressionLevel = 0;
- ForceCompression = false;
- IgnoreError = false;
- Mode = Pulumi.DockerBuild.CacheMode.Min;
- }
- public static new CacheToLocalArgs Empty => new CacheToLocalArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/CacheToRegistryArgs.cs b/sdk/dotnet/Inputs/CacheToRegistryArgs.cs
deleted file mode 100644
index 2b6a2ef..0000000
--- a/sdk/dotnet/Inputs/CacheToRegistryArgs.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class CacheToRegistryArgs : global::Pulumi.ResourceArgs
- {
- ///
- /// The compression type to use.
- ///
- [Input("compression")]
- public Input? Compression { get; set; }
-
- ///
- /// Compression level from 0 to 22.
- ///
- [Input("compressionLevel")]
- public Input? CompressionLevel { get; set; }
-
- ///
- /// Forcefully apply compression.
- ///
- [Input("forceCompression")]
- public Input? ForceCompression { get; set; }
-
- ///
- /// Ignore errors caused by failed cache exports.
- ///
- [Input("ignoreError")]
- public Input? IgnoreError { get; set; }
-
- ///
- /// Export cache manifest as an OCI-compatible image manifest instead of a
- /// manifest list. Requires `ociMediaTypes` to also be `true`.
- ///
- /// Some registries like AWS ECR will not work with caching if this is
- /// `false`.
- ///
- /// Defaults to `false` to match Docker's default behavior.
- ///
- [Input("imageManifest")]
- public Input? ImageManifest { get; set; }
-
- ///
- /// The cache mode to use. Defaults to `min`.
- ///
- [Input("mode")]
- public Input? Mode { get; set; }
-
- ///
- /// Whether to use OCI media types in exported manifests. Defaults to
- /// `true`.
- ///
- [Input("ociMediaTypes")]
- public Input? OciMediaTypes { get; set; }
-
- ///
- /// Fully qualified name of the cache image to import.
- ///
- [Input("ref", required: true)]
- public Input Ref { get; set; } = null!;
-
- public CacheToRegistryArgs()
- {
- Compression = Pulumi.DockerBuild.CompressionType.Gzip;
- CompressionLevel = 0;
- ForceCompression = false;
- IgnoreError = false;
- ImageManifest = false;
- Mode = Pulumi.DockerBuild.CacheMode.Min;
- OciMediaTypes = true;
- }
- public static new CacheToRegistryArgs Empty => new CacheToRegistryArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/CacheToS3Args.cs b/sdk/dotnet/Inputs/CacheToS3Args.cs
deleted file mode 100644
index 76c6844..0000000
--- a/sdk/dotnet/Inputs/CacheToS3Args.cs
+++ /dev/null
@@ -1,118 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class CacheToS3Args : global::Pulumi.ResourceArgs
- {
- ///
- /// Defaults to `$AWS_ACCESS_KEY_ID`.
- ///
- [Input("accessKeyId")]
- public Input? AccessKeyId { get; set; }
-
- ///
- /// Prefix to prepend to blob filenames.
- ///
- [Input("blobsPrefix")]
- public Input? BlobsPrefix { get; set; }
-
- ///
- /// Name of the S3 bucket.
- ///
- [Input("bucket", required: true)]
- public Input Bucket { get; set; } = null!;
-
- ///
- /// Endpoint of the S3 bucket.
- ///
- [Input("endpointUrl")]
- public Input? EndpointUrl { get; set; }
-
- ///
- /// Ignore errors caused by failed cache exports.
- ///
- [Input("ignoreError")]
- public Input? IgnoreError { get; set; }
-
- ///
- /// Prefix to prepend on manifest filenames.
- ///
- [Input("manifestsPrefix")]
- public Input? ManifestsPrefix { get; set; }
-
- ///
- /// The cache mode to use. Defaults to `min`.
- ///
- [Input("mode")]
- public Input? Mode { get; set; }
-
- ///
- /// Name of the cache image.
- ///
- [Input("name")]
- public Input? Name { get; set; }
-
- ///
- /// The geographic location of the bucket. Defaults to `$AWS_REGION`.
- ///
- [Input("region", required: true)]
- public Input Region { get; set; } = null!;
-
- [Input("secretAccessKey")]
- private Input? _secretAccessKey;
-
- ///
- /// Defaults to `$AWS_SECRET_ACCESS_KEY`.
- ///
- public Input? SecretAccessKey
- {
- get => _secretAccessKey;
- set
- {
- var emptySecret = Output.CreateSecret(0);
- _secretAccessKey = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1);
- }
- }
-
- [Input("sessionToken")]
- private Input? _sessionToken;
-
- ///
- /// Defaults to `$AWS_SESSION_TOKEN`.
- ///
- public Input? SessionToken
- {
- get => _sessionToken;
- set
- {
- var emptySecret = Output.CreateSecret(0);
- _sessionToken = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1);
- }
- }
-
- ///
- /// Uses `bucket` in the URL instead of hostname when `true`.
- ///
- [Input("usePathStyle")]
- public Input? UsePathStyle { get; set; }
-
- public CacheToS3Args()
- {
- AccessKeyId = Utilities.GetEnv("AWS_ACCESS_KEY_ID") ?? "";
- IgnoreError = false;
- Mode = Pulumi.DockerBuild.CacheMode.Min;
- Region = Utilities.GetEnv("AWS_REGION") ?? "";
- SecretAccessKey = Utilities.GetEnv("AWS_SECRET_ACCESS_KEY") ?? "";
- SessionToken = Utilities.GetEnv("AWS_SESSION_TOKEN") ?? "";
- }
- public static new CacheToS3Args Empty => new CacheToS3Args();
- }
-}
diff --git a/sdk/dotnet/Inputs/ContextArgs.cs b/sdk/dotnet/Inputs/ContextArgs.cs
deleted file mode 100644
index 37afeaf..0000000
--- a/sdk/dotnet/Inputs/ContextArgs.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class ContextArgs : global::Pulumi.ResourceArgs
- {
- ///
- /// Resources to use for build context.
- ///
- /// The location can be:
- /// * A relative or absolute path to a local directory (`.`, `./app`,
- /// `/app`, etc.).
- /// * A remote URL of a Git repository, tarball, or plain text file
- /// (`https://github.com/user/myrepo.git`, `http://server/context.tar.gz`,
- /// etc.).
- ///
- [Input("location", required: true)]
- public Input Location { get; set; } = null!;
-
- public ContextArgs()
- {
- }
- public static new ContextArgs Empty => new ContextArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/DockerfileArgs.cs b/sdk/dotnet/Inputs/DockerfileArgs.cs
deleted file mode 100644
index a4876b5..0000000
--- a/sdk/dotnet/Inputs/DockerfileArgs.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class DockerfileArgs : global::Pulumi.ResourceArgs
- {
- ///
- /// Raw Dockerfile contents.
- ///
- /// Conflicts with `location`.
- ///
- /// Equivalent to invoking Docker with `-f -`.
- ///
- [Input("inline")]
- public Input? Inline { get; set; }
-
- ///
- /// Location of the Dockerfile to use.
- ///
- /// Can be a relative or absolute path to a local file, or a remote URL.
- ///
- /// Defaults to `${context.location}/Dockerfile` if context is on-disk.
- ///
- /// Conflicts with `inline`.
- ///
- [Input("location")]
- public Input? Location { get; set; }
-
- public DockerfileArgs()
- {
- }
- public static new DockerfileArgs Empty => new DockerfileArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/ExportArgs.cs b/sdk/dotnet/Inputs/ExportArgs.cs
deleted file mode 100644
index e77e2d2..0000000
--- a/sdk/dotnet/Inputs/ExportArgs.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class ExportArgs : global::Pulumi.ResourceArgs
- {
- ///
- /// A no-op export. Helpful for silencing the 'no exports' warning if you
- /// just want to populate caches.
- ///
- [Input("cacheonly")]
- public Input? Cacheonly { get; set; }
-
- ///
- /// When `true` this entry will be excluded. Defaults to `false`.
- ///
- [Input("disabled")]
- public Input? Disabled { get; set; }
-
- ///
- /// Export as a Docker image layout.
- ///
- [Input("docker")]
- public Input? Docker { get; set; }
-
- ///
- /// Outputs the build result into a container image format.
- ///
- [Input("image")]
- public Input? Image { get; set; }
-
- ///
- /// Export to a local directory as files and directories.
- ///
- [Input("local")]
- public Input? Local { get; set; }
-
- ///
- /// Identical to the Docker exporter but uses OCI media types by default.
- ///
- [Input("oci")]
- public Input? Oci { get; set; }
-
- ///
- /// A raw string as you would provide it to the Docker CLI (e.g.,
- /// `type=docker`)
- ///
- [Input("raw")]
- public Input? Raw { get; set; }
-
- ///
- /// Identical to the Image exporter, but pushes by default.
- ///
- [Input("registry")]
- public Input? Registry { get; set; }
-
- ///
- /// Export to a local directory as a tarball.
- ///
- [Input("tar")]
- public Input? Tar { get; set; }
-
- public ExportArgs()
- {
- }
- public static new ExportArgs Empty => new ExportArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/ExportCacheOnlyArgs.cs b/sdk/dotnet/Inputs/ExportCacheOnlyArgs.cs
deleted file mode 100644
index c86b9a8..0000000
--- a/sdk/dotnet/Inputs/ExportCacheOnlyArgs.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class ExportCacheOnlyArgs : global::Pulumi.ResourceArgs
- {
- public ExportCacheOnlyArgs()
- {
- }
- public static new ExportCacheOnlyArgs Empty => new ExportCacheOnlyArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/ExportDockerArgs.cs b/sdk/dotnet/Inputs/ExportDockerArgs.cs
deleted file mode 100644
index 3a6ac24..0000000
--- a/sdk/dotnet/Inputs/ExportDockerArgs.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class ExportDockerArgs : global::Pulumi.ResourceArgs
- {
- [Input("annotations")]
- private InputMap? _annotations;
-
- ///
- /// Attach an arbitrary key/value annotation to the image.
- ///
- public InputMap Annotations
- {
- get => _annotations ?? (_annotations = new InputMap());
- set => _annotations = value;
- }
-
- ///
- /// The compression type to use.
- ///
- [Input("compression")]
- public Input? Compression { get; set; }
-
- ///
- /// Compression level from 0 to 22.
- ///
- [Input("compressionLevel")]
- public Input? CompressionLevel { get; set; }
-
- ///
- /// The local export path.
- ///
- [Input("dest")]
- public Input? Dest { get; set; }
-
- ///
- /// Forcefully apply compression.
- ///
- [Input("forceCompression")]
- public Input? ForceCompression { get; set; }
-
- [Input("names")]
- private InputList? _names;
-
- ///
- /// Specify images names to export. This is overridden if tags are already specified.
- ///
- public InputList Names
- {
- get => _names ?? (_names = new InputList());
- set => _names = value;
- }
-
- ///
- /// Use OCI media types in exporter manifests.
- ///
- [Input("ociMediaTypes")]
- public Input? OciMediaTypes { get; set; }
-
- ///
- /// Bundle the output into a tarball layout.
- ///
- [Input("tar")]
- public Input? Tar { get; set; }
-
- public ExportDockerArgs()
- {
- Compression = Pulumi.DockerBuild.CompressionType.Gzip;
- CompressionLevel = 0;
- ForceCompression = false;
- OciMediaTypes = false;
- Tar = true;
- }
- public static new ExportDockerArgs Empty => new ExportDockerArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/ExportImageArgs.cs b/sdk/dotnet/Inputs/ExportImageArgs.cs
deleted file mode 100644
index 6529382..0000000
--- a/sdk/dotnet/Inputs/ExportImageArgs.cs
+++ /dev/null
@@ -1,122 +0,0 @@
-// *** WARNING: this file was generated by pulumi-language-dotnet. ***
-// *** Do not edit by hand unless you're certain you know what you are doing! ***
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.Threading.Tasks;
-using Pulumi.Serialization;
-
-namespace Pulumi.DockerBuild.Inputs
-{
-
- public sealed class ExportImageArgs : global::Pulumi.ResourceArgs
- {
- [Input("annotations")]
- private InputMap? _annotations;
-
- ///
- /// Attach an arbitrary key/value annotation to the image.
- ///
- public InputMap Annotations
- {
- get => _annotations ?? (_annotations = new InputMap());
- set => _annotations = value;
- }
-
- ///
- /// The compression type to use.
- ///
- [Input("compression")]
- public Input? Compression { get; set; }
-
- ///
- /// Compression level from 0 to 22.
- ///
- [Input("compressionLevel")]
- public Input? CompressionLevel { get; set; }
-
- ///
- /// Name image with `prefix@<digest>`, used for anonymous images.
- ///
- [Input("danglingNamePrefix")]
- public Input? DanglingNamePrefix { get; set; }
-
- ///
- /// Forcefully apply compression.
- ///
- [Input("forceCompression")]
- public Input? ForceCompression { get; set; }
-
- ///
- /// Allow pushing to an insecure registry.
- ///
- [Input("insecure")]
- public Input? Insecure { get; set; }
-
- ///
- /// Add additional canonical name (`name@<digest>`).
- ///
- [Input("nameCanonical")]
- public Input? NameCanonical { get; set; }
-
- [Input("names")]
- private InputList? _names;
-
- ///