diff --git a/.ci-mgmt.yaml b/.ci-mgmt.yaml
deleted file mode 100644
index c813886..0000000
--- a/.ci-mgmt.yaml
+++ /dev/null
@@ -1,20 +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:
- 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
diff --git a/.config/mise.test.toml b/.config/mise.test.toml
deleted file mode 100644
index a97f5ff..0000000
--- a/.config/mise.test.toml
+++ /dev/null
@@ -1,4 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten when regenerated by https://github.com/pulumi/ci-mgmt
-
-[tools]
-"aqua:gotestyourself/gotestsum" = "1.12.0"
diff --git a/.config/mise.toml b/.config/mise.toml
deleted file mode 100644
index 88a27cf..0000000
--- a/.config/mise.toml
+++ /dev/null
@@ -1,35 +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]
-_.vfox-pulumi = { module_path = "." } # Sets GO_VERSION_MISE and PULUMI_VERSION_MISE
-PULUMI_HOME = "{{config_root}}/.pulumi"
-
-[tools]
-
-# Runtimes
-go = "{{ env.GO_VERSION_MISE }}"
-node = '20.19.5'
-python = '3.11.8'
-"vfox:version-fox/vfox-dotnet" = "8.0.20" # vfox backend doesn't work on Windows, gives "error converting Lua table to PreInstall (no version returned from vfox plugin)" https://github.com/jdx/mise/discussions/5876 https://github.com/jdx/mise/discussions/5550
-# Corretto version used as Java SE/OpenJDK version no longer offered
-java = 'corretto-11'
-
-# Executable tools
-"github:pulumi/pulumi" = "{{ env.PULUMI_VERSION_MISE }}"
-"github:pulumi/pulumictl" = '0.0.50'
-"github:pulumi/schema-tools" = "0.6.0"
-"go:github.com/pulumi/upgrade-provider" = "main"
-"aqua:gradle/gradle-distributions" = '7.6.6'
-golangci-lint = "2.9.0" # See note about about overrides if you need to customize this.
-"npm:yarn" = "1.22.22"
-
-[settings]
-experimental = true # Required for Go binaries (e.g. pulumictl).
-lockfile = false
-http_retries = 3
-pin = true # `mise use` should pin versions instead of defaulting to latest.
-fetch_remote_versions_cache = "24h" # Mise queries versions even if they're pinned to confirm they exist. Reduce GitHub API calls by doing that less often.
-
-[plugins]
-vfox-pulumi = "https://github.com/pulumi/vfox-pulumi"
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 8951ba6..0000000
--- a/.gitattributes
+++ /dev/null
@@ -1,2 +0,0 @@
-sdk/**/* linguist-generated=true
-.github/workflows/*.lock.yml linguist-generated=true merge=ours
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/download-provider/action.yml b/.github/actions/download-provider/action.yml
deleted file mode 100644
index 36b0a0c..0000000
--- a/.github/actions/download-provider/action.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-name: Download Provider Binary
-description: Downloads the provider binary artifact and restores executable permissions
-
-runs:
- using: "composite"
- steps:
- - name: Download provider
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- with:
- name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
- path: ${{ github.workspace }}/bin
-
- - name: UnTar provider binaries
- shell: bash
- run: tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{ github.workspace}}/bin
-
- - name: Restore Binary Permissions
- shell: bash
- run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print -exec chmod +x {} \;
diff --git a/.github/actions/download-sdk/action.yml b/.github/actions/download-sdk/action.yml
deleted file mode 100644
index e448416..0000000
--- a/.github/actions/download-sdk/action.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-name: Download SDK
-description: Downloads and extracts SDK artifacts for a specific language
-
-inputs:
- language:
- description: 'The SDK language to download (nodejs, python, dotnet, java)'
- required: true
-
-runs:
- using: "composite"
- steps:
- - name: Download SDK
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- with:
- name: ${{ inputs.language }}-sdk.tar.gz
- path: ${{ github.workspace }}/sdk/
-
- - name: UnTar SDK folder
- shell: bash
- run: tar -zxf ${{ github.workspace }}/sdk/${{ inputs.language }}.tar.gz -C ${{ github.workspace }}/sdk/${{ inputs.language }}
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}<
-
-# Upgrade workflows
-gh aw fix --write
-gh aw compile --validate
-```
-
-## Key Features of gh-aw
-
-- **Natural Language Workflows**: Write workflows in markdown with YAML frontmatter
-- **AI Engine Support**: Copilot, Claude, Codex, or custom engines
-- **MCP Server Integration**: Connect to Model Context Protocol servers for tools
-- **Safe Outputs**: Structured communication between AI and GitHub API
-- **Strict Mode**: Security-first validation and sandboxing
-- **Shared Components**: Reusable workflow building blocks
-- **Repo Memory**: Persistent git-backed storage for agents
-- **Sandboxed Execution**: All workflows run in the Agent Workflow Firewall (AWF) sandbox, enabling full `bash` and `edit` tools by default
-
-## Important Notes
-
-- Always reference the instructions file at https://github.com/github/gh-aw/blob/v0.56.2/.github/aw/github-agentic-workflows.md for complete documentation
-- Use the MCP tool `agentic-workflows` when running in GitHub Copilot Cloud
-- Workflows must be compiled to `.lock.yml` files before running in GitHub Actions
-- **Bash tools are enabled by default** - Don't restrict bash commands unnecessarily since workflows are sandboxed by the AWF
-- Follow security best practices: minimal permissions, explicit network access, no template injection
-- **Single-file output**: When creating a workflow, produce exactly **one** workflow `.md` file. Do not create separate documentation files (architecture docs, runbooks, usage guides, etc.). If documentation is needed, add a brief `## Usage` section inside the workflow file itself.
diff --git a/.github/aw/actions-lock.json b/.github/aw/actions-lock.json
deleted file mode 100644
index ac7c42a..0000000
--- a/.github/aw/actions-lock.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "entries": {
- "actions/github-script@v9.0.0": {
- "repo": "actions/github-script",
- "version": "v9.0.0",
- "sha": "3a2844b7e9c422d3c10d287c895573f7108da1b3"
- },
- "github/gh-aw-actions/setup@v0.71.5": {
- "repo": "github/gh-aw-actions/setup",
- "version": "v0.71.5",
- "sha": "b8068426813005612b960b5ab0b8bd2c27142323"
- },
- "github/gh-aw/actions/setup@v0.71.5": {
- "repo": "github/gh-aw/actions/setup",
- "version": "v0.71.5",
- "sha": "19ac811a4a85389c33b15128e1d7b7d4507f814a"
- }
- }
-}
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
deleted file mode 100644
index f71620e..0000000
--- a/.github/workflows/build.yml
+++ /dev/null
@@ -1,562 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
-
-name: main # For consistency with bridged providers.
-on:
- push:
- branches:
- - master
- - main
- - feature-**
- paths-ignore:
- - CHANGELOG.md
- tags-ignore:
- - v*
- - sdk/*
- - "**"
- workflow_dispatch: {}
-env:
- PROVIDER: docker-build
- TRAVIS_OS_NAME: linux
- GOVERSION: "1.21.x"
- NODEVERSION: "20.x"
- PYTHONVERSION: "3.11.8"
- DOTNETVERSION: "8.0.x"
- JAVAVERSION: "11"
- 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
- PULUMI_GO_DEP_ROOT: ${{ github.workspace }}/..
- PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
- TF_APPEND_USER_AGENT: pulumi
-
-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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- cache: 'true'
- github_token: ${{ secrets.GITHUB_TOKEN }}
- - if: github.event_name == 'pull_request'
- name: Install Schema Tools
- uses: jaxxstorm/action-install-gh-release@25e24d2d23ae098373794ef1d6faecb48ee52da8 # v3.0.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
- - 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@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
- with:
- name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
- path: ${{ github.workspace }}/bin/provider.tar.gz
- - name: Test Provider Library
- run: make test_provider
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Upload coverage reports to Codecov
- uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1
- env:
- CODECOV_TOKEN: ${{ steps.esc-secrets.outputs.CODECOV_TOKEN }}
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- github_token: ${{ steps.app-auth.outputs.token }}
- - name: Download Provider Binary
- uses: ./.github/actions/download-provider
- - 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
- - 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@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
- 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@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- github_token: ${{ steps.app-auth.outputs.token }}
- - name: Download Provider Binary
- uses: ./.github/actions/download-provider
- - name: Download SDK
- if: ${{ matrix.language != 'yaml' }}
- uses: ./.github/actions/download-sdk
- with:
- language: ${{ 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@197ccaa42ab49560ce838a3010eb8345ce086896
- 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@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- github_token: ${{ steps.app-auth.outputs.token }}
- - 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: Configure AWS Credentials
- uses: aws-actions/configure-aws-credentials@d979d5b3a71173a29b74b5b88418bfda9437d885 # v6.1.1
- 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_ACCOUNT_ENDPOINT: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_ACCOUNT_ENDPOINT }}
- AZURE_SIGNING_ACCOUNT_NAME: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_ACCOUNT_NAME }}
- AZURE_SIGNING_CERT_PROFILE_NAME: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CERT_PROFILE_NAME }}
- 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_ACCOUNT_ENDPOINT == '' && steps.esc-secrets.outputs.AZURE_SIGNING_ACCOUNT_NAME == '' && steps.esc-secrets.outputs.AZURE_SIGNING_CERT_PROFILE_NAME == '' }}
- 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@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Checkout Scripts Repo
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- with:
- path: ci-scripts
- repository: pulumi/scripts
- - run: echo "ci-scripts" >> .git/info/exclude
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- github_token: ${{ steps.app-auth.outputs.token }}
- - name: Download python SDK
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- 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@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- 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@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- 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@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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:
- name: lint
- uses: ./.github/workflows/lint.yml
- secrets: inherit
diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml
deleted file mode 100644
index d021597..0000000
--- a/.github/workflows/claude.yml
+++ /dev/null
@@ -1,139 +0,0 @@
-name: Claude Code
-
-on:
- # Responds to @claude mentions in comments.
- issue_comment:
- types: [created]
- pull_request_review_comment:
- types: [created]
- issues:
- types: [opened]
- pull_request_review:
- types: [submitted]
-
-jobs:
- claude:
- # Only run when @claude is mentioned by a trusted user (OWNER, MEMBER, or COLLABORATOR)
- # Note: the claude-code-action can only be triggered by users with write access to the repository so this is extra
- # see https://github.com/anthropics/claude-code-action/blob/main/docs/security.md
- if: |
- (github.event_name == 'issue_comment' &&
- contains(github.event.comment.body, '@claude') &&
- contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)) ||
- (github.event_name == 'pull_request_review_comment' &&
- contains(github.event.comment.body, '@claude') &&
- contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)) ||
- (github.event_name == 'pull_request_review' &&
- contains(github.event.review.body, '@claude') &&
- contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.review.author_association)) ||
- (github.event_name == 'issues' &&
- (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')) &&
- contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.issue.author_association))
- runs-on: ubuntu-latest
- permissions:
- contents: write
- pull-requests: write
- issues: write
- id-token: write
- actions: read
- steps:
- - 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@197ccaa42ab49560ce838a3010eb8345ce086896
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- with:
- fetch-depth: 0
- - name: Checkout PR head (if applicable)
- if: ${{ github.event.pull_request.number || (github.event.issue.pull_request && github.event.issue.number) }}
- env:
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- PR_NUMBER: ${{ github.event.pull_request.number || github.event.issue.number }}
- run: gh pr checkout "$PR_NUMBER"
- - name: Setup mise
- uses: jdx/mise-action@8d3b0ba20a9cea7b883d922ea958553c941ab082
- env:
- MISE_FETCH_REMOTE_VERSIONS_TIMEOUT: 30s
- with:
- version: 2026.3.7
- github_token: ${{ secrets.GITHUB_TOKEN }}
- # only saving the cache in the prerequisites job
- cache_save: false
- - name: Set git identity
- run: |-
- git config --global user.name "claude[bot]"
- git config --global user.email "bot@pulumi.com"
- shell: bash
- - name: Prepare local workspace
- # this runs install_plugins and upstream
- run: make prepare_local_workspace
- - name: Run Claude Code Review
- # Comment must contain '@claude review'
- if: |
- (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude review')) ||
- (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude review')) ||
- (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude review'))
- id: claude-review
- uses: anthropics/claude-code-action@787c5a0ce96a9a6cfb050ea0c8f4c05f2447c251 # v1
- with:
- anthropic_api_key: ${{ steps.esc-secrets.outputs.ANTHROPIC_API_KEY }}
- prompt: |
- REPO: ${{ github.repository }}
- PR NUMBER: ${{ github.event.pull_request.number || github.event.issue.number }}
-
- Review this pull request using the provider-code-review skill for guidelines.
- The PR branch is already checked out in the current working directory.
-
- Use `gh pr comment` for top-level feedback.
- Use `mcp__github_inline_comment__create_inline_comment` to highlight specific code issues.
- Only post GitHub comments - don't submit review text as messages.
- # Taken from https://github.com/anthropics/claude-code/blob/main/plugins/code-review/commands/code-review.md
- claude_args: |
- --allowedTools "Skill,Bash(gh issue view *),Bash(gh search *),Bash(gh issue list *),Bash(gh pr comment *),Bash(gh pr diff *),Bash(gh pr view *),Bash(gh pr list *),mcp__github_inline_comment__create_inline_comment"
- - name: Run Claude Code
- # Comment must contain '@claude', but not '@claude review'
- if: |
- !contains(github.event.comment.body, '@claude review') &&
- !contains(github.event.review.body, '@claude review')
- id: claude-action
- uses: anthropics/claude-code-action@787c5a0ce96a9a6cfb050ea0c8f4c05f2447c251 # v1
- with:
- anthropic_api_key: ${{ steps.esc-secrets.outputs.ANTHROPIC_API_KEY }}
- # This allows claude to read github action logs
- additional_permissions: |
- actions: read
- # Sandbox settings: --allowedTools controls which tools Claude can invoke,
- # but the sandbox also enforces OS-level filesystem restrictions. Edit()
- # rules in permissions.allow control all bash filesystem writes (mkdir,
- # output redirection, etc.), not just the Edit tool. Without these, commands
- # like `mkdir .pulumi` or `cmd > file.txt` would be blocked by the sandbox.
- settings: |
- {
- "permissions": {
- "allow": ["Edit(./**)", "Edit(/tmp/**)"]
- }
- }
- claude_args: |
- --max-turns 50
- --allowedTools "Skill,Edit,MultiEdit,Write,Read,Glob,Grep,LS,Bash(upgrade-provider *),Bash(./scripts/upstream.sh *),Bash(git *),Bash(GIT_EDITOR=* git *),Bash(make *),Bash(gh *),Bash(mkdir *),Bash(go mod tidy *),Bash(ls *),Bash(test *),Bash(cat *),Bash(pwd),Bash(head *),Bash(tail *),Bash(tee *),Bash(rg *),Bash(grep *),Bash(sed *),Bash(awk *),Bash(find *)"
- # If the claude action fails you don't get any logs on what claude was doing
- # Uploading the artifact allows you to download the artifact from the UI
- - name: Upload Claude review output on failure
- if: failure() && steps.claude-review.outputs.execution_file
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
- with:
- name: claude-review-execution-log
- path: ${{ steps.claude-review.outputs.execution_file }}
- retention-days: 7
- - name: Upload Claude output on failure
- if: failure() && steps.claude-action.outputs.execution_file
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
- with:
- name: claude-execution-log
- path: ${{ steps.claude-action.outputs.execution_file }}
- retention-days: 7
diff --git a/.github/workflows/command-dispatch.yml b/.github/workflows/command-dispatch.yml
deleted file mode 100644
index 0b65da1..0000000
--- a/.github/workflows/command-dispatch.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten when regenerated by https://github.com/pulumi/ci-mgmt
-
-env:
- 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
- PULUMI_GO_DEP_ROOT: ${{ github.workspace }}/..
- PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
- PULUMI_PULUMI_ENABLE_JOURNALING: "true"
- TF_APPEND_USER_AGENT: pulumi
-
-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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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@5c11dc7efead556e3bdabf664302212f79eb26fa # v5
- 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 72be7d8..0000000
--- a/.github/workflows/comment-on-stale-issues.yml
+++ /dev/null
@@ -1,44 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten when regenerated by https://github.com/pulumi/ci-mgmt
-name: "Comment on stale issues"
-
-on:
- workflow_dispatch: {}
- schedule:
- - cron: "46 4 * * *" # run once per day
-
-jobs:
- cleanup:
- runs-on: ubuntu-latest
- name: Stale issue job
- steps:
- - uses: pose/stale-issue-cleanup@d2922f61fc5669f4154408689f9bb2a981996112
- 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 cc79777..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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- with:
- persist-credentials: false
- - id: schema_changed
- name: Check for diff in schema
- uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
- 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@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
- 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 b3b47cb..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@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3
- 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/gh-aw-pr-rereview.lock.yml b/.github/workflows/gh-aw-pr-rereview.lock.yml
deleted file mode 100644
index d149135..0000000
--- a/.github/workflows/gh-aw-pr-rereview.lock.yml
+++ /dev/null
@@ -1,1360 +0,0 @@
-# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"8bf7a6fa0a734574a7aca098f60af0cc9406e7d93f826f50777126458d8589cc","compiler_version":"v0.71.5","strict":true,"agent_id":"claude"}
-# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"27d5ce7f107fe9357f9df03efb73ab90386fccae","version":"v5.0.5"},{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9"},{"repo":"actions/setup-node","sha":"48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e","version":"v6.4.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"b8068426813005612b960b5ab0b8bd2c27142323","version":"v0.71.5"},{"repo":"pulumi/esc-action","sha":"6cf9520e68354d86f81c455e8d43eabd58f5c9f5","version":"6cf9520e68354d86f81c455e8d43eabd58f5c9f5"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.40","digest":"sha256:14ff567e8d9d4c2fbc5e55c973488381c71d7e0fdbe72d30ee7b8a738fd86504","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.25.40@sha256:14ff567e8d9d4c2fbc5e55c973488381c71d7e0fdbe72d30ee7b8a738fd86504"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.40","digest":"sha256:2883ca3e5ae9f330cafdd9345bfd4ae17fc8da36c96d4c9a1f76e922b4c45280","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.40@sha256:2883ca3e5ae9f330cafdd9345bfd4ae17fc8da36c96d4c9a1f76e922b4c45280"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.40","digest":"sha256:b084f4a2c771f584ee68084ced52fa6b3245197a1889645d817462d307d3ac51","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.25.40@sha256:b084f4a2c771f584ee68084ced52fa6b3245197a1889645d817462d307d3ac51"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.6","digest":"sha256:2bb8eef86006a4c5963c55616a9c51c32f27bfdecb023b8aa6f91f6718d9171c","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.6@sha256:2bb8eef86006a4c5963c55616a9c51c32f27bfdecb023b8aa6f91f6718d9171c"},{"image":"ghcr.io/github/github-mcp-server:v1.0.3","digest":"sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959","pinned_image":"ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]}
-# ___ _ _
-# / _ \ | | (_)
-# | |_| | __ _ ___ _ __ | |_ _ ___
-# | _ |/ _` |/ _ \ '_ \| __| |/ __|
-# | | | | (_| | __/ | | | |_| | (__
-# \_| |_/\__, |\___|_| |_|\__|_|\___|
-# __/ |
-# _ _ |___/
-# | | | | / _| |
-# | | | | ___ _ __ _ __| |_| | _____ ____
-# | |/\| |/ _ \ '__| |/ /| _| |/ _ \ \ /\ / / ___|
-# \ /\ / (_) | | | | ( | | | | (_) \ V V /\__ \
-# \/ \/ \___/|_| |_|\_\|_| |_|\___/ \_/\_/ |___/
-#
-# This file was automatically generated by gh-aw (v0.71.5). DO NOT EDIT.
-#
-# To update this file, edit pulumi-labs/gh-aw-internal/.github/workflows/gh-aw-pr-rereview.md@8a92f53fac170563f7727cacab2dbedb5d5b9e29 and run:
-# gh aw compile
-# Not all edits will cause changes to this file.
-#
-# For more information: https://github.github.com/gh-aw/introduction/overview/
-#
-# Run PR re-review on explicit maintainer slash command.
-#
-# Source: pulumi-labs/gh-aw-internal/.github/workflows/gh-aw-pr-rereview.md@8a92f53fac170563f7727cacab2dbedb5d5b9e29
-#
-# Resolved workflow manifest:
-# Imports:
-# - shared/plugins/code-review/code-review.md
-# - shared/review.md
-#
-# Secrets used:
-# - GH_AW_GITHUB_MCP_SERVER_TOKEN
-# - GH_AW_GITHUB_TOKEN
-# - GITHUB_TOKEN
-#
-# Custom actions used:
-# - actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
-# - actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
-# - actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
-# - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9
-# - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
-# - actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
-# - actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
-# - github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5
-# - pulumi/esc-action@6cf9520e68354d86f81c455e8d43eabd58f5c9f5 # 6cf9520e68354d86f81c455e8d43eabd58f5c9f5
-#
-# Container images used:
-# - ghcr.io/github/gh-aw-firewall/agent:0.25.40@sha256:14ff567e8d9d4c2fbc5e55c973488381c71d7e0fdbe72d30ee7b8a738fd86504
-# - ghcr.io/github/gh-aw-firewall/api-proxy:0.25.40@sha256:2883ca3e5ae9f330cafdd9345bfd4ae17fc8da36c96d4c9a1f76e922b4c45280
-# - ghcr.io/github/gh-aw-firewall/squid:0.25.40@sha256:b084f4a2c771f584ee68084ced52fa6b3245197a1889645d817462d307d3ac51
-# - ghcr.io/github/gh-aw-mcpg:v0.3.6@sha256:2bb8eef86006a4c5963c55616a9c51c32f27bfdecb023b8aa6f91f6718d9171c
-# - ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959
-# - node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f
-
-name: "Internal PR Re-Review (Slash Command)"
-"on":
- issue_comment:
- types:
- - created
- - edited
- pull_request_review_comment:
- types:
- - created
- - edited
-
-permissions: {}
-
-concurrency:
- group: "gh-aw-${{ github.workflow }}-${{ github.event.issue.number || github.event.pull_request.number || github.run_id }}"
-
-run-name: "Internal PR Re-Review (Slash Command)"
-
-jobs:
- activation:
- needs: pre_activation
- if: "needs.pre_activation.outputs.activated == 'true' && (github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/review-again ') || startsWith(github.event.comment.body, '/review-again\n') || github.event.comment.body == '/review-again') && github.event.issue.pull_request != null || github.event_name == 'pull_request_review_comment' && (startsWith(github.event.comment.body, '/review-again ') || startsWith(github.event.comment.body, '/review-again\n') || github.event.comment.body == '/review-again'))"
- runs-on: ubuntu-slim
- permissions:
- actions: read
- contents: read
- issues: write
- pull-requests: write
- outputs:
- body: ${{ steps.sanitized.outputs.body }}
- comment_id: ${{ steps.add-comment.outputs.comment-id }}
- comment_repo: ${{ steps.add-comment.outputs.comment-repo }}
- comment_url: ${{ steps.add-comment.outputs.comment-url }}
- engine_id: ${{ steps.generate_aw_info.outputs.engine_id }}
- lockdown_check_failed: ${{ steps.generate_aw_info.outputs.lockdown_check_failed == 'true' }}
- model: ${{ steps.generate_aw_info.outputs.model }}
- secret_verification_result: ${{ steps.validate-secret.outputs.verification_result }}
- setup-trace-id: ${{ steps.setup.outputs.trace-id }}
- slash_command: ${{ needs.pre_activation.outputs.matched_command }}
- stale_lock_file_failed: ${{ steps.check-lock-file.outputs.stale_lock_file_failed == 'true' }}
- text: ${{ steps.sanitized.outputs.text }}
- title: ${{ steps.sanitized.outputs.title }}
- steps:
- - name: Setup Scripts
- id: setup
- uses: github/gh-aw-actions/setup@1fd109aa7587e59ad4022e04dcc5fdce4b0cd410 # v0.74.5
- with:
- destination: ${{ runner.temp }}/gh-aw/actions
- job-name: ${{ github.job }}
- trace-id: ${{ needs.pre_activation.outputs.setup-trace-id }}
- env:
- GH_AW_SETUP_WORKFLOW_NAME: "Internal PR Re-Review (Slash Command)"
- GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/gh-aw-pr-rereview.lock.yml@${{ github.ref }}
- GH_AW_INFO_VERSION: "2.1.126"
- - name: Generate agentic run info
- id: generate_aw_info
- env:
- GH_AW_INFO_ENGINE_ID: "claude"
- GH_AW_INFO_ENGINE_NAME: "Claude Code"
- GH_AW_INFO_MODEL: ${{ vars.GH_AW_MODEL_AGENT_CLAUDE || 'auto' }}
- GH_AW_INFO_VERSION: "2.1.126"
- GH_AW_INFO_AGENT_VERSION: "2.1.126"
- GH_AW_INFO_CLI_VERSION: "v0.71.5"
- GH_AW_INFO_WORKFLOW_NAME: "Internal PR Re-Review (Slash Command)"
- GH_AW_INFO_EXPERIMENTAL: "false"
- GH_AW_INFO_SUPPORTS_TOOLS_ALLOWLIST: "true"
- GH_AW_INFO_STAGED: "false"
- GH_AW_INFO_ALLOWED_DOMAINS: '["defaults"]'
- GH_AW_INFO_FIREWALL_ENABLED: "true"
- GH_AW_INFO_AWF_VERSION: "v0.25.40"
- GH_AW_INFO_AWMG_VERSION: ""
- GH_AW_INFO_FIREWALL_TYPE: "squid"
- GH_AW_COMPILED_STRICT: "true"
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_aw_info.cjs');
- await main(core, context);
- - name: Add eyes reaction for immediate feedback
- id: react
- if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id || github.event_name == 'pull_request_review' && github.event.pull_request.head.repo.id == github.repository_id
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_REACTION: "eyes"
- with:
- github-token: ${{ secrets.GITHUB_TOKEN }}
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/add_reaction.cjs');
- await main();
- - name: Validate ANTHROPIC_API_KEY secret
- id: validate-secret
- run: bash "${RUNNER_TEMP}/gh-aw/actions/validate_multi_secret.sh" ANTHROPIC_API_KEY 'Claude Code' https://github.github.com/gh-aw/reference/engines/#anthropic-claude-code
- env:
- ANTHROPIC_API_KEY: ${{ steps.esc-secrets.outputs.ANTHROPIC_API_KEY || '__GH_AW_ACTIVATION_PLACEHOLDER__' }}
- - name: Checkout .github and .agents folders
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- with:
- persist-credentials: false
- sparse-checkout: |
- .github
- .agents
- .claude
- .codex
- .crush
- .gemini
- .opencode
- .pi
- sparse-checkout-cone-mode: true
- fetch-depth: 1
- - name: Save agent config folders for base branch restoration
- env:
- GH_AW_AGENT_FOLDERS: ".agents .claude .codex .crush .gemini .github .opencode .pi"
- GH_AW_AGENT_FILES: ".crush.json AGENTS.md CLAUDE.md GEMINI.md PI.md opencode.jsonc"
- # poutine:ignore untrusted_checkout_exec
- run: bash "${RUNNER_TEMP}/gh-aw/actions/save_base_github_folders.sh"
- - name: Check workflow lock file
- id: check-lock-file
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_WORKFLOW_FILE: "gh-aw-pr-rereview.lock.yml"
- GH_AW_CONTEXT_WORKFLOW_REF: "${{ github.workflow_ref }}"
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/check_workflow_timestamp_api.cjs');
- await main();
- - name: Check compile-agentic version
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_COMPILED_VERSION: "v0.71.5"
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/check_version_updates.cjs');
- await main();
- - name: Compute current body text
- id: sanitized
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_ALLOWED_DOMAINS: "*.githubusercontent.com,anthropic.com,api.anthropic.com,api.github.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,cdn.playwright.dev,codeload.github.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,files.pythonhosted.org,ghcr.io,github-cloud.githubusercontent.com,github-cloud.s3.amazonaws.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,lfs.github.com,objects.githubusercontent.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,playwright.download.prss.microsoft.com,ppa.launchpad.net,pypi.org,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,sentry.io,statsig.anthropic.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com"
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/compute_text.cjs');
- await main();
- - name: Add comment with workflow run link
- id: add-comment
- if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id || github.event_name == 'pull_request_review' && github.event.pull_request.head.repo.id == github.repository_id
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_WORKFLOW_NAME: "Internal PR Re-Review (Slash Command)"
- GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e Reviewed by [{workflow_name}]({run_url})\",\"runStarted\":\"Started automated PR review for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}.\",\"runSuccess\":\"Finished automated PR review for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}.\",\"runFailure\":\"Automated PR review failed for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }} ({status}).\"}"
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/add_workflow_run_comment.cjs');
- await main();
- - name: Create prompt with built-in context
- env:
- GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
- GH_AW_SAFE_OUTPUTS: ${{ runner.temp }}/gh-aw/safeoutputs/outputs.jsonl
- GH_AW_GITHUB_ACTOR: ${{ github.actor }}
- GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }}
- GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: ${{ github.event.discussion.number }}
- GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }}
- GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }}
- GH_AW_GITHUB_REPOSITORY: ${{ github.repository }}
- GH_AW_GITHUB_RUN_ID: ${{ github.run_id }}
- GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }}
- GH_AW_IS_PR_COMMENT: ${{ github.event.issue.pull_request && 'true' || '' }}
- # poutine:ignore untrusted_checkout_exec
- run: |
- bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh"
- {
- cat << 'GH_AW_PROMPT_443953281d3e3d96_EOF'
-
- GH_AW_PROMPT_443953281d3e3d96_EOF
- cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md"
- cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md"
- cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md"
- cat "${RUNNER_TEMP}/gh-aw/prompts/cache_memory_prompt.md"
- cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md"
- cat << 'GH_AW_PROMPT_443953281d3e3d96_EOF'
-
- Tools: create_pull_request_review_comment(max:12), submit_pull_request_review, resolve_pull_request_review_thread(max:12), missing_tool, missing_data, noop
-
- GH_AW_PROMPT_443953281d3e3d96_EOF
- cat "${RUNNER_TEMP}/gh-aw/prompts/mcp_cli_tools_prompt.md"
- cat << 'GH_AW_PROMPT_443953281d3e3d96_EOF'
-
- The following GitHub context information is available for this workflow:
- {{#if __GH_AW_GITHUB_ACTOR__ }}
- - **actor**: __GH_AW_GITHUB_ACTOR__
- {{/if}}
- {{#if __GH_AW_GITHUB_REPOSITORY__ }}
- - **repository**: __GH_AW_GITHUB_REPOSITORY__
- {{/if}}
- {{#if __GH_AW_GITHUB_WORKSPACE__ }}
- - **workspace**: __GH_AW_GITHUB_WORKSPACE__
- {{/if}}
- {{#if __GH_AW_GITHUB_EVENT_ISSUE_NUMBER__ }}
- - **issue-number**: #__GH_AW_GITHUB_EVENT_ISSUE_NUMBER__
- {{/if}}
- {{#if __GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER__ }}
- - **discussion-number**: #__GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER__
- {{/if}}
- {{#if __GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER__ }}
- - **pull-request-number**: #__GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER__
- {{/if}}
- {{#if __GH_AW_GITHUB_EVENT_COMMENT_ID__ }}
- - **comment-id**: __GH_AW_GITHUB_EVENT_COMMENT_ID__
- {{/if}}
- {{#if __GH_AW_GITHUB_RUN_ID__ }}
- - **workflow-run-id**: __GH_AW_GITHUB_RUN_ID__
- {{/if}}
-
-
- GH_AW_PROMPT_443953281d3e3d96_EOF
- cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md"
- if [ "$GITHUB_EVENT_NAME" = "issue_comment" ] && [ -n "$GH_AW_IS_PR_COMMENT" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review_comment" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review" ]; then
- cat "${RUNNER_TEMP}/gh-aw/prompts/pr_context_prompt.md"
- fi
- cat << 'GH_AW_PROMPT_443953281d3e3d96_EOF'
-
- {{#runtime-import .github/workflows/shared/review.md}}
- {{#runtime-import .github/workflows/shared/plugins/code-review/code-review.md}}
- {{#runtime-import .github/workflows/gh-aw-pr-rereview.md}}
- GH_AW_PROMPT_443953281d3e3d96_EOF
- } > "$GH_AW_PROMPT"
- - name: Interpolate variables and render templates
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
- GH_AW_ENGINE_ID: "claude"
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/interpolate_prompt.cjs');
- await main();
- - name: Substitute placeholders
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
- GH_AW_ALLOWED_EXTENSIONS: ''
- GH_AW_CACHE_DESCRIPTION: ''
- GH_AW_CACHE_DIR: '/tmp/gh-aw/cache-memory/'
- GH_AW_GITHUB_ACTOR: ${{ github.actor }}
- GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }}
- GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: ${{ github.event.discussion.number }}
- GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }}
- GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }}
- GH_AW_GITHUB_REPOSITORY: ${{ github.repository }}
- GH_AW_GITHUB_RUN_ID: ${{ github.run_id }}
- GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }}
- GH_AW_IS_PR_COMMENT: ${{ github.event.issue.pull_request && 'true' || '' }}
- GH_AW_MCP_CLI_SERVERS_LIST: '- `safeoutputs` — run `safeoutputs --help` to see available tools'
- GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED: ${{ needs.pre_activation.outputs.activated }}
- GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_MATCHED_COMMAND: ${{ needs.pre_activation.outputs.matched_command }}
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
-
- const substitutePlaceholders = require('${{ runner.temp }}/gh-aw/actions/substitute_placeholders.cjs');
-
- // Call the substitution function
- return await substitutePlaceholders({
- file: process.env.GH_AW_PROMPT,
- substitutions: {
- GH_AW_ALLOWED_EXTENSIONS: process.env.GH_AW_ALLOWED_EXTENSIONS,
- GH_AW_CACHE_DESCRIPTION: process.env.GH_AW_CACHE_DESCRIPTION,
- GH_AW_CACHE_DIR: process.env.GH_AW_CACHE_DIR,
- GH_AW_GITHUB_ACTOR: process.env.GH_AW_GITHUB_ACTOR,
- GH_AW_GITHUB_EVENT_COMMENT_ID: process.env.GH_AW_GITHUB_EVENT_COMMENT_ID,
- GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: process.env.GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER,
- GH_AW_GITHUB_EVENT_ISSUE_NUMBER: process.env.GH_AW_GITHUB_EVENT_ISSUE_NUMBER,
- GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: process.env.GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER,
- GH_AW_GITHUB_REPOSITORY: process.env.GH_AW_GITHUB_REPOSITORY,
- GH_AW_GITHUB_RUN_ID: process.env.GH_AW_GITHUB_RUN_ID,
- GH_AW_GITHUB_WORKSPACE: process.env.GH_AW_GITHUB_WORKSPACE,
- GH_AW_IS_PR_COMMENT: process.env.GH_AW_IS_PR_COMMENT,
- GH_AW_MCP_CLI_SERVERS_LIST: process.env.GH_AW_MCP_CLI_SERVERS_LIST,
- GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED: process.env.GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED,
- GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_MATCHED_COMMAND: process.env.GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_MATCHED_COMMAND
- }
- });
- - name: Validate prompt placeholders
- env:
- GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
- # poutine:ignore untrusted_checkout_exec
- run: bash "${RUNNER_TEMP}/gh-aw/actions/validate_prompt_placeholders.sh"
- - name: Print prompt
- env:
- GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
- # poutine:ignore untrusted_checkout_exec
- run: bash "${RUNNER_TEMP}/gh-aw/actions/print_prompt_summary.sh"
- - name: Upload activation artifact
- if: success()
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
- with:
- name: activation
- include-hidden-files: true
- path: |
- /tmp/gh-aw/aw_info.json
- /tmp/gh-aw/aw-prompts/prompt.txt
- /tmp/gh-aw/github_rate_limits.jsonl
- /tmp/gh-aw/base
- if-no-files-found: ignore
- retention-days: 1
-
- agent:
- needs: activation
- runs-on: ubuntu-latest
- permissions:
- contents: read
- id-token: write
- pull-requests: read
- env:
- DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
- GH_AW_ASSETS_ALLOWED_EXTS: ""
- GH_AW_ASSETS_BRANCH: ""
- GH_AW_ASSETS_MAX_SIZE_KB: 0
- GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs
- GH_AW_WORKFLOW_ID_SANITIZED: ghawprrereview
- outputs:
- checkout_pr_success: ${{ steps.checkout-pr.outputs.checkout_pr_success || 'true' }}
- effective_tokens: ${{ steps.parse-mcp-gateway.outputs.effective_tokens }}
- has_patch: ${{ steps.collect_output.outputs.has_patch }}
- model: ${{ needs.activation.outputs.model }}
- output: ${{ steps.collect_output.outputs.output }}
- output_types: ${{ steps.collect_output.outputs.output_types }}
- setup-trace-id: ${{ steps.setup.outputs.trace-id }}
- steps:
- - name: Setup Scripts
- id: setup
- uses: github/gh-aw-actions/setup@1fd109aa7587e59ad4022e04dcc5fdce4b0cd410 # v0.74.5
- with:
- destination: ${{ runner.temp }}/gh-aw/actions
- job-name: ${{ github.job }}
- trace-id: ${{ needs.activation.outputs.setup-trace-id }}
- env:
- GH_AW_SETUP_WORKFLOW_NAME: "Internal PR Re-Review (Slash Command)"
- GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/gh-aw-pr-rereview.lock.yml@${{ github.ref }}
- GH_AW_INFO_VERSION: "2.1.126"
- - name: Set runtime paths
- id: set-runtime-paths
- run: |
- {
- echo "GH_AW_SAFE_OUTPUTS=${RUNNER_TEMP}/gh-aw/safeoutputs/outputs.jsonl"
- echo "GH_AW_SAFE_OUTPUTS_CONFIG_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/config.json"
- echo "GH_AW_SAFE_OUTPUTS_TOOLS_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/tools.json"
- } >> "$GITHUB_OUTPUT"
- - name: Checkout repository
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- with:
- persist-credentials: false
- - name: Create gh-aw temp directory
- run: bash "${RUNNER_TEMP}/gh-aw/actions/create_gh_aw_tmp_dir.sh"
- - name: Configure gh CLI for GitHub Enterprise
- run: bash "${RUNNER_TEMP}/gh-aw/actions/configure_gh_for_ghe.sh"
- env:
- GH_TOKEN: ${{ github.token }}
- - env:
- ESC_ACTION_ENVIRONMENT: imports/github-secrets
- 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@6cf9520e68354d86f81c455e8d43eabd58f5c9f5 # 6cf9520e68354d86f81c455e8d43eabd58f5c9f5
- - env:
- ANTHROPIC_API_KEY_FROM_ESC: ${{ steps.esc-secrets.outputs.ANTHROPIC_API_KEY }}
- name: Validate ESC secret output
- run: |
- test -n "$ANTHROPIC_API_KEY_FROM_ESC" || {
- echo "ESC did not return ANTHROPIC_API_KEY";
- exit 1;
- }
-
- # Cache memory file share configuration from frontmatter processed below
- - name: Create cache-memory directory
- run: bash "${RUNNER_TEMP}/gh-aw/actions/create_cache_memory_dir.sh"
- - name: Restore cache-memory file share data
- uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
- with:
- key: memory-none-nopolicy-${{ env.GH_AW_WORKFLOW_ID_SANITIZED }}-${{ github.run_id }}
- path: /tmp/gh-aw/cache-memory
- restore-keys: |
- memory-none-nopolicy-${{ env.GH_AW_WORKFLOW_ID_SANITIZED }}-
- - name: Setup cache-memory git repository
- env:
- GH_AW_CACHE_DIR: /tmp/gh-aw/cache-memory
- GH_AW_MIN_INTEGRITY: none
- run: bash "${RUNNER_TEMP}/gh-aw/actions/setup_cache_memory_git.sh"
- - name: Configure Git credentials
- env:
- REPO_NAME: ${{ github.repository }}
- SERVER_URL: ${{ github.server_url }}
- GITHUB_TOKEN: ${{ github.token }}
- run: |
- git config --global user.email "github-actions[bot]@users.noreply.github.com"
- git config --global user.name "github-actions[bot]"
- git config --global am.keepcr true
- # Re-authenticate git with GitHub token
- SERVER_URL_STRIPPED="${SERVER_URL#https://}"
- git remote set-url origin "https://x-access-token:${GITHUB_TOKEN}@${SERVER_URL_STRIPPED}/${REPO_NAME}.git"
- echo "Git configured with standard GitHub Actions identity"
- - name: Checkout PR branch
- id: checkout-pr
- if: |
- github.event.pull_request || github.event.issue.pull_request
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- with:
- github-token: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/checkout_pr_branch.cjs');
- await main();
- - name: Setup Node.js
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
- with:
- node-version: '24'
- package-manager-cache: false
- - name: Install AWF binary
- run: bash "${RUNNER_TEMP}/gh-aw/actions/install_awf_binary.sh" v0.25.40
- - name: Install Claude Code CLI
- run: npm install -g @anthropic-ai/claude-code@2.1.126
- - name: Determine automatic lockdown mode for GitHub MCP Server
- id: determine-automatic-lockdown
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9
- env:
- GH_AW_GITHUB_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN }}
- GH_AW_GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN }}
- with:
- script: |
- const determineAutomaticLockdown = require('${{ runner.temp }}/gh-aw/actions/determine_automatic_lockdown.cjs');
- await determineAutomaticLockdown(github, context, core);
- - name: Download activation artifact
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- with:
- name: activation
- path: /tmp/gh-aw
- - name: Restore agent config folders from base branch
- if: steps.checkout-pr.outcome == 'success'
- env:
- GH_AW_AGENT_FOLDERS: ".agents .claude .codex .crush .gemini .github .opencode .pi"
- GH_AW_AGENT_FILES: ".crush.json AGENTS.md CLAUDE.md GEMINI.md PI.md opencode.jsonc"
- run: bash "${RUNNER_TEMP}/gh-aw/actions/restore_base_github_folders.sh"
- - name: Download container images
- run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/gh-aw-firewall/agent:0.25.40@sha256:14ff567e8d9d4c2fbc5e55c973488381c71d7e0fdbe72d30ee7b8a738fd86504 ghcr.io/github/gh-aw-firewall/api-proxy:0.25.40@sha256:2883ca3e5ae9f330cafdd9345bfd4ae17fc8da36c96d4c9a1f76e922b4c45280 ghcr.io/github/gh-aw-firewall/squid:0.25.40@sha256:b084f4a2c771f584ee68084ced52fa6b3245197a1889645d817462d307d3ac51 ghcr.io/github/gh-aw-mcpg:v0.3.6@sha256:2bb8eef86006a4c5963c55616a9c51c32f27bfdecb023b8aa6f91f6718d9171c ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959 node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f
- - name: Generate Safe Outputs Config
- env:
- GITHUB_REPOSITORY: ${{ github.repository }}
- run: |
- mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs"
- mkdir -p /tmp/gh-aw/safeoutputs
- mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs
- cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << GH_AW_SAFE_OUTPUTS_CONFIG_903050e0712cea42_EOF
- {"create_pull_request_review_comment":{"max":12,"side":"RIGHT","target":"${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}","target-repo":"${GITHUB_REPOSITORY}"},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"},"report_incomplete":{},"resolve_pull_request_review_thread":{"max":12,"target":"${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}","target-repo":"${GITHUB_REPOSITORY}"},"submit_pull_request_review":{"allowed_events":["APPROVE","REQUEST_CHANGES","COMMENT"],"max":1,"target":"${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}"}}
- GH_AW_SAFE_OUTPUTS_CONFIG_903050e0712cea42_EOF
- - name: Generate Safe Outputs Tools
- env:
- GH_AW_TOOLS_META_JSON: |
- {
- "description_suffixes": {
- "create_pull_request_review_comment": " CONSTRAINTS: Maximum 12 review comment(s) can be created. Comments will be on the RIGHT side of the diff.",
- "resolve_pull_request_review_thread": " CONSTRAINTS: Maximum 12 review thread(s) can be resolved.",
- "submit_pull_request_review": " CONSTRAINTS: Maximum 1 review(s) can be submitted."
- },
- "repo_params": {},
- "dynamic_tools": []
- }
- GH_AW_VALIDATION_JSON: |
- {
- "create_pull_request_review_comment": {
- "defaultMax": 1,
- "fields": {
- "body": {
- "required": true,
- "type": "string",
- "sanitize": true,
- "maxLength": 65000
- },
- "line": {
- "required": true,
- "positiveInteger": true
- },
- "path": {
- "required": true,
- "type": "string"
- },
- "pull_request_number": {
- "optionalPositiveInteger": true
- },
- "repo": {
- "type": "string",
- "maxLength": 256
- },
- "side": {
- "type": "string",
- "enum": [
- "LEFT",
- "RIGHT"
- ]
- },
- "start_line": {
- "optionalPositiveInteger": true
- }
- },
- "customValidation": "startLineLessOrEqualLine"
- },
- "missing_data": {
- "defaultMax": 20,
- "fields": {
- "alternatives": {
- "type": "string",
- "sanitize": true,
- "maxLength": 256
- },
- "context": {
- "type": "string",
- "sanitize": true,
- "maxLength": 256
- },
- "data_type": {
- "type": "string",
- "sanitize": true,
- "maxLength": 128
- },
- "reason": {
- "type": "string",
- "sanitize": true,
- "maxLength": 256
- }
- }
- },
- "missing_tool": {
- "defaultMax": 20,
- "fields": {
- "alternatives": {
- "type": "string",
- "sanitize": true,
- "maxLength": 512
- },
- "reason": {
- "required": true,
- "type": "string",
- "sanitize": true,
- "maxLength": 256
- },
- "tool": {
- "type": "string",
- "sanitize": true,
- "maxLength": 128
- }
- }
- },
- "noop": {
- "defaultMax": 1,
- "fields": {
- "message": {
- "required": true,
- "type": "string",
- "sanitize": true,
- "maxLength": 65000
- }
- }
- },
- "report_incomplete": {
- "defaultMax": 5,
- "fields": {
- "details": {
- "type": "string",
- "sanitize": true,
- "maxLength": 65000
- },
- "reason": {
- "required": true,
- "type": "string",
- "sanitize": true,
- "maxLength": 1024
- }
- }
- },
- "resolve_pull_request_review_thread": {
- "defaultMax": 10,
- "fields": {
- "thread_id": {
- "required": true,
- "type": "string"
- }
- }
- },
- "submit_pull_request_review": {
- "defaultMax": 1,
- "fields": {
- "body": {
- "type": "string",
- "sanitize": true,
- "maxLength": 65000
- },
- "event": {
- "type": "string",
- "enum": [
- "APPROVE",
- "REQUEST_CHANGES",
- "COMMENT"
- ]
- }
- }
- }
- }
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_safe_outputs_tools.cjs');
- await main();
- - name: Generate Safe Outputs MCP Server Config
- id: safe-outputs-config
- run: |
- # Generate a secure random API key (360 bits of entropy, 40+ chars)
- # Mask immediately to prevent timing vulnerabilities
- API_KEY=$(openssl rand -base64 45 | tr -d '/+=')
- echo "::add-mask::${API_KEY}"
-
- PORT=3001
-
- # Set outputs for next steps
- {
- echo "safe_outputs_api_key=${API_KEY}"
- echo "safe_outputs_port=${PORT}"
- } >> "$GITHUB_OUTPUT"
-
- echo "Safe Outputs MCP server will run on port ${PORT}"
-
- - name: Start Safe Outputs MCP HTTP Server
- id: safe-outputs-start
- env:
- DEBUG: '*'
- GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }}
- GH_AW_SAFE_OUTPUTS_PORT: ${{ steps.safe-outputs-config.outputs.safe_outputs_port }}
- GH_AW_SAFE_OUTPUTS_API_KEY: ${{ steps.safe-outputs-config.outputs.safe_outputs_api_key }}
- GH_AW_SAFE_OUTPUTS_TOOLS_PATH: ${{ runner.temp }}/gh-aw/safeoutputs/tools.json
- GH_AW_SAFE_OUTPUTS_CONFIG_PATH: ${{ runner.temp }}/gh-aw/safeoutputs/config.json
- GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs
- run: |
- # Environment variables are set above to prevent template injection
- export DEBUG
- export GH_AW_SAFE_OUTPUTS
- export GH_AW_SAFE_OUTPUTS_PORT
- export GH_AW_SAFE_OUTPUTS_API_KEY
- export GH_AW_SAFE_OUTPUTS_TOOLS_PATH
- export GH_AW_SAFE_OUTPUTS_CONFIG_PATH
- export GH_AW_MCP_LOG_DIR
-
- bash "${RUNNER_TEMP}/gh-aw/actions/start_safe_outputs_server.sh"
-
- - name: Start MCP Gateway
- id: start-mcp-gateway
- env:
- GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }}
- GH_AW_SAFE_OUTPUTS_API_KEY: ${{ steps.safe-outputs-start.outputs.api_key }}
- GH_AW_SAFE_OUTPUTS_PORT: ${{ steps.safe-outputs-start.outputs.port }}
- GITHUB_MCP_GUARD_MIN_INTEGRITY: ${{ steps.determine-automatic-lockdown.outputs.min_integrity }}
- GITHUB_MCP_GUARD_REPOS: ${{ steps.determine-automatic-lockdown.outputs.repos }}
- GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- run: |
- set -eo pipefail
- mkdir -p "${RUNNER_TEMP}/gh-aw/mcp-config"
-
- # Export gateway environment variables for MCP config and gateway script
- export MCP_GATEWAY_PORT="8080"
- export MCP_GATEWAY_DOMAIN="host.docker.internal"
- export MCP_GATEWAY_HOST_DOMAIN="localhost"
- MCP_GATEWAY_API_KEY=$(openssl rand -base64 45 | tr -d '/+=')
- echo "::add-mask::${MCP_GATEWAY_API_KEY}"
- export MCP_GATEWAY_API_KEY
- export MCP_GATEWAY_PAYLOAD_DIR="/tmp/gh-aw/mcp-payloads"
- mkdir -p "${MCP_GATEWAY_PAYLOAD_DIR}"
- export MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD="524288"
- export DEBUG="*"
-
- export GH_AW_ENGINE="claude"
- MCP_GATEWAY_UID=$(id -u 2>/dev/null || echo '0')
- MCP_GATEWAY_GID=$(id -g 2>/dev/null || echo '0')
- DOCKER_SOCK_GID=$(stat -c '%g' /var/run/docker.sock 2>/dev/null || echo '0')
- export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host --add-host host.docker.internal:127.0.0.1 --user '"${MCP_GATEWAY_UID}"':'"${MCP_GATEWAY_GID}"' --group-add '"${DOCKER_SOCK_GID}"' -v /var/run/docker.sock:/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.3.6'
-
- GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node)
- cat << GH_AW_MCP_CONFIG_91e834cd5c9ca48d_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
- {
- "mcpServers": {
- "github": {
- "container": "ghcr.io/github/github-mcp-server:v1.0.3",
- "env": {
- "GITHUB_HOST": "$GITHUB_SERVER_URL",
- "GITHUB_PERSONAL_ACCESS_TOKEN": "$GITHUB_MCP_SERVER_TOKEN",
- "GITHUB_READ_ONLY": "1",
- "GITHUB_TOOLSETS": "pull_requests,repos"
- },
- "guard-policies": {
- "allow-only": {
- "min-integrity": "$GITHUB_MCP_GUARD_MIN_INTEGRITY",
- "repos": "$GITHUB_MCP_GUARD_REPOS"
- }
- }
- },
- "safeoutputs": {
- "type": "http",
- "url": "http://host.docker.internal:$GH_AW_SAFE_OUTPUTS_PORT",
- "headers": {
- "Authorization": "$GH_AW_SAFE_OUTPUTS_API_KEY"
- },
- "guard-policies": {
- "write-sink": {
- "accept": [
- "*"
- ]
- }
- }
- }
- },
- "gateway": {
- "port": $MCP_GATEWAY_PORT,
- "domain": "${MCP_GATEWAY_DOMAIN}",
- "apiKey": "${MCP_GATEWAY_API_KEY}",
- "payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}"
- }
- }
- GH_AW_MCP_CONFIG_91e834cd5c9ca48d_EOF
- - name: Mount MCP servers as CLIs
- id: mount-mcp-clis
- continue-on-error: true
- env:
- MCP_GATEWAY_API_KEY: ${{ steps.start-mcp-gateway.outputs.gateway-api-key }}
- MCP_GATEWAY_DOMAIN: ${{ steps.start-mcp-gateway.outputs.gateway-domain }}
- MCP_GATEWAY_PORT: ${{ steps.start-mcp-gateway.outputs.gateway-port }}
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/mount_mcp_as_cli.cjs');
- await main();
- - name: Clean credentials
- continue-on-error: true
- run: bash "${RUNNER_TEMP}/gh-aw/actions/clean_git_credentials.sh"
- - name: Audit pre-agent workspace
- id: pre_agent_audit
- continue-on-error: true
- run: bash "${RUNNER_TEMP}/gh-aw/actions/audit_pre_agent_workspace.sh"
- - name: Execute Claude Code CLI
- id: agentic_execution
- # Allowed tools (sorted):
- # - Bash
- # - BashOutput
- # - Edit
- # - Edit(/tmp/gh-aw/cache-memory/*)
- # - ExitPlanMode
- # - Glob
- # - Grep
- # - KillBash
- # - LS
- # - MultiEdit
- # - MultiEdit(/tmp/gh-aw/cache-memory/*)
- # - NotebookEdit
- # - NotebookRead
- # - Read
- # - Read(/tmp/gh-aw/cache-memory/*)
- # - Task
- # - TodoWrite
- # - Write
- # - Write(/tmp/gh-aw/cache-memory/*)
- # - mcp__github__download_workflow_run_artifact
- # - mcp__github__get_code_scanning_alert
- # - mcp__github__get_commit
- # - mcp__github__get_dependabot_alert
- # - mcp__github__get_discussion
- # - mcp__github__get_discussion_comments
- # - mcp__github__get_file_contents
- # - mcp__github__get_job_logs
- # - mcp__github__get_label
- # - mcp__github__get_latest_release
- # - mcp__github__get_me
- # - mcp__github__get_notification_details
- # - mcp__github__get_pull_request
- # - mcp__github__get_pull_request_comments
- # - mcp__github__get_pull_request_diff
- # - mcp__github__get_pull_request_files
- # - mcp__github__get_pull_request_review_comments
- # - mcp__github__get_pull_request_reviews
- # - mcp__github__get_pull_request_status
- # - mcp__github__get_release_by_tag
- # - mcp__github__get_secret_scanning_alert
- # - mcp__github__get_tag
- # - mcp__github__get_workflow_run
- # - mcp__github__get_workflow_run_logs
- # - mcp__github__get_workflow_run_usage
- # - mcp__github__issue_read
- # - mcp__github__list_branches
- # - mcp__github__list_code_scanning_alerts
- # - mcp__github__list_commits
- # - mcp__github__list_dependabot_alerts
- # - mcp__github__list_discussion_categories
- # - mcp__github__list_discussions
- # - mcp__github__list_issue_types
- # - mcp__github__list_issues
- # - mcp__github__list_label
- # - mcp__github__list_notifications
- # - mcp__github__list_pull_requests
- # - mcp__github__list_releases
- # - mcp__github__list_secret_scanning_alerts
- # - mcp__github__list_starred_repositories
- # - mcp__github__list_tags
- # - mcp__github__list_workflow_jobs
- # - mcp__github__list_workflow_run_artifacts
- # - mcp__github__list_workflow_runs
- # - mcp__github__list_workflows
- # - mcp__github__pull_request_read
- # - mcp__github__search_code
- # - mcp__github__search_issues
- # - mcp__github__search_orgs
- # - mcp__github__search_pull_requests
- # - mcp__github__search_repositories
- # - mcp__github__search_users
- # - mcp__safeoutputs
- timeout-minutes: 15
- run: |
- set -o pipefail
- touch /tmp/gh-aw/agent-step-summary.md
- (umask 177 && touch /tmp/gh-aw/agent-stdio.log)
- printf '%s\n' '{"$schema":"https://github.com/github/gh-aw-firewall/releases/download/v0.25.40/awf-config.schema.json","network":{"allowDomains":["*.githubusercontent.com","anthropic.com","api.anthropic.com","api.github.com","api.snapcraft.io","archive.ubuntu.com","azure.archive.ubuntu.com","cdn.playwright.dev","codeload.github.com","crl.geotrust.com","crl.globalsign.com","crl.identrust.com","crl.sectigo.com","crl.thawte.com","crl.usertrust.com","crl.verisign.com","crl3.digicert.com","crl4.digicert.com","crls.ssl.com","files.pythonhosted.org","ghcr.io","github-cloud.githubusercontent.com","github-cloud.s3.amazonaws.com","github.com","host.docker.internal","json-schema.org","json.schemastore.org","keyserver.ubuntu.com","lfs.github.com","objects.githubusercontent.com","ocsp.digicert.com","ocsp.geotrust.com","ocsp.globalsign.com","ocsp.identrust.com","ocsp.sectigo.com","ocsp.ssl.com","ocsp.thawte.com","ocsp.usertrust.com","ocsp.verisign.com","packagecloud.io","packages.cloud.google.com","packages.microsoft.com","playwright.download.prss.microsoft.com","ppa.launchpad.net","pypi.org","raw.githubusercontent.com","registry.npmjs.org","s.symcb.com","s.symcd.com","security.ubuntu.com","sentry.io","statsig.anthropic.com","ts-crl.ws.symantec.com","ts-ocsp.ws.symantec.com","www.googleapis.com"]},"apiProxy":{"enabled":true,"models":{"auto":["large"],"deep-research":["copilot/deep-research*","google/deep-research*"],"gemini-flash":["copilot/gemini-*flash*","google/gemini-*flash*"],"gemini-pro":["copilot/gemini-*pro*","google/gemini-*pro*"],"gpt-4.1":["copilot/gpt-4.1*","openai/gpt-4.1*"],"gpt-5":["copilot/gpt-5*","openai/gpt-5*"],"gpt-5-codex":["copilot/gpt-5*codex*","openai/gpt-5*codex*"],"gpt-5-mini":["copilot/gpt-5*mini*","openai/gpt-5*mini*"],"gpt-5-nano":["copilot/gpt-5*nano*","openai/gpt-5*nano*"],"gpt-5-pro":["copilot/gpt-5*pro*","openai/gpt-5*pro*"],"haiku":["copilot/*haiku*","anthropic/*haiku*"],"large":["sonnet","gpt-5-pro","gpt-5","gemini-pro"],"mini":["haiku","gpt-5-mini","gpt-5-nano","gemini-flash"],"opus":["copilot/*opus*","anthropic/*opus*"],"reasoning":["copilot/o1*","copilot/o3*","copilot/o4*","openai/o1*","openai/o3*","openai/o4*"],"small":["mini"],"sonnet":["copilot/*sonnet*","anthropic/*sonnet*"]}},"container":{"imageTag":"0.25.40,squid=sha256:b084f4a2c771f584ee68084ced52fa6b3245197a1889645d817462d307d3ac51,agent=sha256:14ff567e8d9d4c2fbc5e55c973488381c71d7e0fdbe72d30ee7b8a738fd86504,api-proxy=sha256:2883ca3e5ae9f330cafdd9345bfd4ae17fc8da36c96d4c9a1f76e922b4c45280,cli-proxy=sha256:3e7152911d4b4b7b97beef9d3d7d924ff7902227e86001ef3838fb728d5d514c"}}' > "${RUNNER_TEMP}/gh-aw/awf-config.json" && cp "${RUNNER_TEMP}/gh-aw/awf-config.json" /tmp/gh-aw/awf-config.json
- # shellcheck disable=SC1003
- sudo -E awf --config "${RUNNER_TEMP}/gh-aw/awf-config.json" --container-workdir "${GITHUB_WORKSPACE}" --mount "${RUNNER_TEMP}/gh-aw:${RUNNER_TEMP}/gh-aw:ro" --mount "${RUNNER_TEMP}/gh-aw:/host${RUNNER_TEMP}/gh-aw:ro" --tty --env-all --exclude-env ANTHROPIC_API_KEY --exclude-env GITHUB_MCP_SERVER_TOKEN --exclude-env MCP_GATEWAY_API_KEY --log-level info --proxy-logs-dir /tmp/gh-aw/sandbox/firewall/logs --audit-dir /tmp/gh-aw/sandbox/firewall/audit --enable-host-access --allow-host-ports 80,443,8080 --skip-pull \
- -- /bin/bash -c 'export PATH="${RUNNER_TEMP}/gh-aw/mcp-cli/bin:$PATH" && export PATH="$(find /opt/hostedtoolcache /home/runner/work/_tool -maxdepth 4 -type d -name bin 2>/dev/null | tr '\''\n'\'' '\'':'\'')$PATH"; [ -n "$GOROOT" ] && export PATH="$GOROOT/bin:$PATH" || true && GH_AW_NODE_EXEC="${GH_AW_NODE_BIN:-}"; if [ -z "$GH_AW_NODE_EXEC" ] || [ ! -x "$GH_AW_NODE_EXEC" ]; then GH_AW_NODE_EXEC="$(command -v node 2>/dev/null || echo node)"; fi; "$GH_AW_NODE_EXEC" ${RUNNER_TEMP}/gh-aw/actions/claude_harness.cjs claude --print --no-chrome --mcp-config "${{ runner.temp }}/gh-aw/mcp-config/mcp-servers.json" --allowed-tools '\''Bash,BashOutput,Edit,Edit(/tmp/gh-aw/cache-memory/*),ExitPlanMode,Glob,Grep,KillBash,LS,MultiEdit,MultiEdit(/tmp/gh-aw/cache-memory/*),NotebookEdit,NotebookRead,Read,Read(/tmp/gh-aw/cache-memory/*),Task,TodoWrite,Write,Write(/tmp/gh-aw/cache-memory/*),mcp__github__download_workflow_run_artifact,mcp__github__get_code_scanning_alert,mcp__github__get_commit,mcp__github__get_dependabot_alert,mcp__github__get_discussion,mcp__github__get_discussion_comments,mcp__github__get_file_contents,mcp__github__get_job_logs,mcp__github__get_label,mcp__github__get_latest_release,mcp__github__get_me,mcp__github__get_notification_details,mcp__github__get_pull_request,mcp__github__get_pull_request_comments,mcp__github__get_pull_request_diff,mcp__github__get_pull_request_files,mcp__github__get_pull_request_review_comments,mcp__github__get_pull_request_reviews,mcp__github__get_pull_request_status,mcp__github__get_release_by_tag,mcp__github__get_secret_scanning_alert,mcp__github__get_tag,mcp__github__get_workflow_run,mcp__github__get_workflow_run_logs,mcp__github__get_workflow_run_usage,mcp__github__issue_read,mcp__github__list_branches,mcp__github__list_code_scanning_alerts,mcp__github__list_commits,mcp__github__list_dependabot_alerts,mcp__github__list_discussion_categories,mcp__github__list_discussions,mcp__github__list_issue_types,mcp__github__list_issues,mcp__github__list_label,mcp__github__list_notifications,mcp__github__list_pull_requests,mcp__github__list_releases,mcp__github__list_secret_scanning_alerts,mcp__github__list_starred_repositories,mcp__github__list_tags,mcp__github__list_workflow_jobs,mcp__github__list_workflow_run_artifacts,mcp__github__list_workflow_runs,mcp__github__list_workflows,mcp__github__pull_request_read,mcp__github__search_code,mcp__github__search_issues,mcp__github__search_orgs,mcp__github__search_pull_requests,mcp__github__search_repositories,mcp__github__search_users,mcp__safeoutputs'\'' --debug-file /tmp/gh-aw/agent-stdio.log --verbose --permission-mode bypassPermissions --output-format stream-json --prompt-file /tmp/gh-aw/aw-prompts/prompt.txt${GH_AW_MODEL_AGENT_CLAUDE:+ --model "$GH_AW_MODEL_AGENT_CLAUDE"}' 2>&1 | tee -a /tmp/gh-aw/agent-stdio.log
- env:
- ANTHROPIC_API_KEY: ${{ steps.esc-secrets.outputs.ANTHROPIC_API_KEY || '__GH_AW_ACTIVATION_PLACEHOLDER__' }}
- BASH_DEFAULT_TIMEOUT_MS: 60000
- BASH_MAX_TIMEOUT_MS: 60000
- CLAUDE_CODE_DISABLE_FAST_MODE: 1
- DISABLE_BUG_COMMAND: 1
- DISABLE_ERROR_REPORTING: 1
- DISABLE_TELEMETRY: 1
- GH_AW_MCP_CONFIG: ${{ runner.temp }}/gh-aw/mcp-config/mcp-servers.json
- GH_AW_MODEL_AGENT_CLAUDE: ${{ vars.GH_AW_MODEL_AGENT_CLAUDE || '' }}
- GH_AW_PHASE: agent
- GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
- GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }}
- GH_AW_VERSION: v0.71.5
- GITHUB_AW: true
- GITHUB_STEP_SUMMARY: /tmp/gh-aw/agent-step-summary.md
- GITHUB_WORKSPACE: ${{ github.workspace }}
- GIT_AUTHOR_EMAIL: github-actions[bot]@users.noreply.github.com
- GIT_AUTHOR_NAME: github-actions[bot]
- GIT_COMMITTER_EMAIL: github-actions[bot]@users.noreply.github.com
- GIT_COMMITTER_NAME: github-actions[bot]
- MCP_TIMEOUT: 120000
- MCP_TOOL_TIMEOUT: 60000
- - name: Configure Git credentials
- env:
- REPO_NAME: ${{ github.repository }}
- SERVER_URL: ${{ github.server_url }}
- GITHUB_TOKEN: ${{ github.token }}
- run: |
- git config --global user.email "github-actions[bot]@users.noreply.github.com"
- git config --global user.name "github-actions[bot]"
- git config --global am.keepcr true
- # Re-authenticate git with GitHub token
- SERVER_URL_STRIPPED="${SERVER_URL#https://}"
- git remote set-url origin "https://x-access-token:${GITHUB_TOKEN}@${SERVER_URL_STRIPPED}/${REPO_NAME}.git"
- echo "Git configured with standard GitHub Actions identity"
- - name: Stop MCP Gateway
- if: always()
- continue-on-error: true
- env:
- MCP_GATEWAY_PORT: ${{ steps.start-mcp-gateway.outputs.gateway-port }}
- MCP_GATEWAY_API_KEY: ${{ steps.start-mcp-gateway.outputs.gateway-api-key }}
- GATEWAY_PID: ${{ steps.start-mcp-gateway.outputs.gateway-pid }}
- run: |
- bash "${RUNNER_TEMP}/gh-aw/actions/stop_mcp_gateway.sh" "$GATEWAY_PID"
- - name: Redact secrets in logs
- if: always()
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/redact_secrets.cjs');
- await main();
- env:
- GH_AW_SECRET_NAMES: 'GH_AW_GITHUB_MCP_SERVER_TOKEN,GH_AW_GITHUB_TOKEN,GITHUB_TOKEN'
- SECRET_GH_AW_GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN }}
- SECRET_GH_AW_GITHUB_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN }}
- SECRET_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Append agent step summary
- if: always()
- run: bash "${RUNNER_TEMP}/gh-aw/actions/append_agent_step_summary.sh"
- - name: Copy Safe Outputs
- if: always()
- env:
- GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }}
- run: |
- mkdir -p /tmp/gh-aw
- cp "$GH_AW_SAFE_OUTPUTS" /tmp/gh-aw/safeoutputs.jsonl 2>/dev/null || true
- - name: Ingest agent output
- id: collect_output
- if: always()
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }}
- GH_AW_ALLOWED_DOMAINS: "*.githubusercontent.com,anthropic.com,api.anthropic.com,api.github.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,cdn.playwright.dev,codeload.github.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,files.pythonhosted.org,ghcr.io,github-cloud.githubusercontent.com,github-cloud.s3.amazonaws.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,lfs.github.com,objects.githubusercontent.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,playwright.download.prss.microsoft.com,ppa.launchpad.net,pypi.org,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,sentry.io,statsig.anthropic.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com"
- GITHUB_SERVER_URL: ${{ github.server_url }}
- GITHUB_API_URL: ${{ github.api_url }}
- GH_AW_COMMAND: review-again
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/collect_ndjson_output.cjs');
- await main();
- - name: Parse agent logs for step summary
- if: always()
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_AGENT_OUTPUT: /tmp/gh-aw/agent-stdio.log
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_claude_log.cjs');
- await main();
- - name: Parse MCP Gateway logs for step summary
- if: always()
- id: parse-mcp-gateway
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_mcp_gateway_log.cjs');
- await main();
- - name: Print firewall logs
- if: always()
- continue-on-error: true
- env:
- AWF_LOGS_DIR: /tmp/gh-aw/sandbox/firewall/logs
- run: |
- # Fix permissions on firewall logs/audit dirs so they can be uploaded as artifacts
- # AWF runs with sudo, creating files owned by root
- sudo chmod -R a+r /tmp/gh-aw/sandbox/firewall 2>/dev/null || true
- # Only run awf logs summary if awf command exists (it may not be installed if workflow failed before install step)
- if command -v awf &> /dev/null; then
- awf logs summary | tee -a "$GITHUB_STEP_SUMMARY"
- else
- echo 'AWF binary not installed, skipping firewall log summary'
- fi
- - name: Parse token usage for step summary
- if: always()
- continue-on-error: true
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_token_usage.cjs');
- await main();
- - name: Print AWF reflect summary
- if: always()
- continue-on-error: true
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/awf_reflect_summary.cjs');
- await main();
- - name: Write agent output placeholder if missing
- if: always()
- run: |
- if [ ! -f /tmp/gh-aw/agent_output.json ]; then
- echo '{"items":[]}' > /tmp/gh-aw/agent_output.json
- fi
- - name: Commit cache-memory changes
- if: always()
- env:
- GH_AW_CACHE_DIR: /tmp/gh-aw/cache-memory
- run: bash "${RUNNER_TEMP}/gh-aw/actions/commit_cache_memory_git.sh"
- - name: Upload agent artifacts
- if: always()
- continue-on-error: true
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
- with:
- name: agent
- path: |
- /tmp/gh-aw/aw-prompts/prompt.txt
- /tmp/gh-aw/mcp-logs/
- /tmp/gh-aw/agent_usage.json
- /tmp/gh-aw/agent-stdio.log
- /tmp/gh-aw/pre-agent-audit.txt
- /tmp/gh-aw/agent/
- /tmp/gh-aw/github_rate_limits.jsonl
- /tmp/gh-aw/safeoutputs.jsonl
- /tmp/gh-aw/agent_output.json
- /tmp/gh-aw/awf-config.json
- /tmp/gh-aw/sandbox/firewall/logs/
- /tmp/gh-aw/sandbox/firewall/audit/
- /tmp/gh-aw/sandbox/firewall/awf-reflect.json
- if-no-files-found: ignore
-
- conclusion:
- needs:
- - activation
- - agent
- - safe_outputs
- if: >
- always() && (needs.agent.result != 'skipped' || needs.activation.outputs.lockdown_check_failed == 'true' ||
- needs.activation.outputs.stale_lock_file_failed == 'true')
- runs-on: ubuntu-slim
- permissions:
- contents: read
- pull-requests: write
- concurrency:
- group: "gh-aw-conclusion-gh-aw-pr-rereview"
- cancel-in-progress: false
- outputs:
- incomplete_count: ${{ steps.report_incomplete.outputs.incomplete_count }}
- noop_message: ${{ steps.noop.outputs.noop_message }}
- tools_reported: ${{ steps.missing_tool.outputs.tools_reported }}
- total_count: ${{ steps.missing_tool.outputs.total_count }}
- steps:
- - name: Setup Scripts
- id: setup
- uses: github/gh-aw-actions/setup@1fd109aa7587e59ad4022e04dcc5fdce4b0cd410 # v0.74.5
- with:
- destination: ${{ runner.temp }}/gh-aw/actions
- job-name: ${{ github.job }}
- trace-id: ${{ needs.activation.outputs.setup-trace-id }}
- env:
- GH_AW_SETUP_WORKFLOW_NAME: "Internal PR Re-Review (Slash Command)"
- GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/gh-aw-pr-rereview.lock.yml@${{ github.ref }}
- GH_AW_INFO_VERSION: "2.1.126"
- - name: Download agent output artifact
- id: download-agent-output
- continue-on-error: true
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- with:
- name: agent
- path: /tmp/gh-aw/
- - name: Setup agent output environment variable
- id: setup-agent-output-env
- if: steps.download-agent-output.outcome == 'success'
- run: |
- mkdir -p /tmp/gh-aw/
- find "/tmp/gh-aw/" -type f -print
- echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/agent_output.json" >> "$GITHUB_OUTPUT"
- - name: Process no-op messages
- id: noop
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
- GH_AW_NOOP_MAX: "1"
- GH_AW_WORKFLOW_NAME: "Internal PR Re-Review (Slash Command)"
- GH_AW_WORKFLOW_SOURCE: "pulumi-labs/gh-aw-internal/.github/workflows/gh-aw-pr-rereview.md@8a92f53fac170563f7727cacab2dbedb5d5b9e29"
- GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/pulumi-labs/gh-aw-internal/blob/8a92f53fac170563f7727cacab2dbedb5d5b9e29/.github/workflows/gh-aw-pr-rereview.md"
- GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
- GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }}
- GH_AW_NOOP_REPORT_AS_ISSUE: "true"
- with:
- github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/handle_noop_message.cjs');
- await main();
- - name: Record missing tool
- id: missing_tool
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
- GH_AW_MISSING_TOOL_CREATE_ISSUE: "true"
- GH_AW_WORKFLOW_NAME: "Internal PR Re-Review (Slash Command)"
- GH_AW_WORKFLOW_SOURCE: "pulumi-labs/gh-aw-internal/.github/workflows/gh-aw-pr-rereview.md@8a92f53fac170563f7727cacab2dbedb5d5b9e29"
- GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/pulumi-labs/gh-aw-internal/blob/8a92f53fac170563f7727cacab2dbedb5d5b9e29/.github/workflows/gh-aw-pr-rereview.md"
- with:
- github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/missing_tool.cjs');
- await main();
- - name: Record incomplete
- id: report_incomplete
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
- GH_AW_REPORT_INCOMPLETE_CREATE_ISSUE: "true"
- GH_AW_WORKFLOW_NAME: "Internal PR Re-Review (Slash Command)"
- GH_AW_WORKFLOW_SOURCE: "pulumi-labs/gh-aw-internal/.github/workflows/gh-aw-pr-rereview.md@8a92f53fac170563f7727cacab2dbedb5d5b9e29"
- GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/pulumi-labs/gh-aw-internal/blob/8a92f53fac170563f7727cacab2dbedb5d5b9e29/.github/workflows/gh-aw-pr-rereview.md"
- with:
- github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/report_incomplete_handler.cjs');
- await main();
- - name: Handle agent failure
- id: handle_agent_failure
- if: always()
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
- GH_AW_WORKFLOW_NAME: "Internal PR Re-Review (Slash Command)"
- GH_AW_WORKFLOW_SOURCE: "pulumi-labs/gh-aw-internal/.github/workflows/gh-aw-pr-rereview.md@8a92f53fac170563f7727cacab2dbedb5d5b9e29"
- GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/pulumi-labs/gh-aw-internal/blob/8a92f53fac170563f7727cacab2dbedb5d5b9e29/.github/workflows/gh-aw-pr-rereview.md"
- GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
- GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }}
- GH_AW_WORKFLOW_ID: "gh-aw-pr-rereview"
- GH_AW_ACTION_FAILURE_ISSUE_EXPIRES_HOURS: "168"
- GH_AW_ENGINE_ID: "claude"
- GH_AW_SECRET_VERIFICATION_RESULT: ${{ needs.activation.outputs.secret_verification_result }}
- GH_AW_CHECKOUT_PR_SUCCESS: ${{ needs.agent.outputs.checkout_pr_success }}
- GH_AW_ENGINE_API_HOSTS: "api.anthropic.com"
- GH_AW_LOCKDOWN_CHECK_FAILED: ${{ needs.activation.outputs.lockdown_check_failed }}
- GH_AW_STALE_LOCK_FILE_FAILED: ${{ needs.activation.outputs.stale_lock_file_failed }}
- GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e Reviewed by [{workflow_name}]({run_url})\",\"runStarted\":\"Started automated PR review for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}.\",\"runSuccess\":\"Finished automated PR review for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}.\",\"runFailure\":\"Automated PR review failed for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }} ({status}).\"}"
- GH_AW_GROUP_REPORTS: "false"
- GH_AW_FAILURE_REPORT_AS_ISSUE: "true"
- GH_AW_MISSING_TOOL_REPORT_AS_FAILURE: "true"
- GH_AW_MISSING_DATA_REPORT_AS_FAILURE: "true"
- GH_AW_TIMEOUT_MINUTES: "15"
- GH_AW_CACHE_MEMORY_ENABLED: "true"
- with:
- github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/handle_agent_failure.cjs');
- await main();
- - name: Update reaction comment with completion status
- id: conclusion
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
- GH_AW_COMMENT_ID: ${{ needs.activation.outputs.comment_id }}
- GH_AW_COMMENT_REPO: ${{ needs.activation.outputs.comment_repo }}
- GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
- GH_AW_WORKFLOW_NAME: "Internal PR Re-Review (Slash Command)"
- GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }}
- GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e Reviewed by [{workflow_name}]({run_url})\",\"runStarted\":\"Started automated PR review for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}.\",\"runSuccess\":\"Finished automated PR review for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}.\",\"runFailure\":\"Automated PR review failed for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }} ({status}).\"}"
- with:
- github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/notify_comment_error.cjs');
- await main();
-
- pre_activation:
- if: "(github.event_name != 'issue_comment' && github.event_name != 'pull_request_review_comment' || contains(fromJSON('[\"OWNER\",\"MEMBER\",\"COLLABORATOR\"]'), github.event.comment.author_association)) && (github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/review-again ') || startsWith(github.event.comment.body, '/review-again\n') || github.event.comment.body == '/review-again') && github.event.issue.pull_request != null || github.event_name == 'pull_request_review_comment' && (startsWith(github.event.comment.body, '/review-again ') || startsWith(github.event.comment.body, '/review-again\n') || github.event.comment.body == '/review-again'))"
- runs-on: ubuntu-slim
- outputs:
- activated: ${{ steps.check_membership.outputs.is_team_member == 'true' && steps.check_command_position.outputs.command_position_ok == 'true' }}
- matched_command: ${{ steps.check_command_position.outputs.matched_command }}
- setup-trace-id: ${{ steps.setup.outputs.trace-id }}
- steps:
- - name: Setup Scripts
- id: setup
- uses: github/gh-aw-actions/setup@1fd109aa7587e59ad4022e04dcc5fdce4b0cd410 # v0.74.5
- with:
- destination: ${{ runner.temp }}/gh-aw/actions
- job-name: ${{ github.job }}
- env:
- GH_AW_SETUP_WORKFLOW_NAME: "Internal PR Re-Review (Slash Command)"
- GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/gh-aw-pr-rereview.lock.yml@${{ github.ref }}
- GH_AW_INFO_VERSION: "2.1.126"
- - name: Check team membership for command workflow
- id: check_membership
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_REQUIRED_ROLES: "admin,maintainer,write"
- with:
- github-token: ${{ secrets.GITHUB_TOKEN }}
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
- await main();
- - name: Check command position
- id: check_command_position
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_COMMANDS: "[\"review-again\"]"
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs');
- await main();
-
- safe_outputs:
- needs:
- - activation
- - agent
- if: (!cancelled()) && needs.agent.result != 'skipped'
- runs-on: ubuntu-slim
- permissions:
- contents: read
- pull-requests: write
- timeout-minutes: 15
- env:
- GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/gh-aw-pr-rereview"
- GH_AW_EFFECTIVE_TOKENS: ${{ needs.agent.outputs.effective_tokens }}
- GH_AW_ENGINE_ID: "claude"
- GH_AW_ENGINE_MODEL: ${{ needs.agent.outputs.model }}
- GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e Reviewed by [{workflow_name}]({run_url})\",\"runStarted\":\"Started automated PR review for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}.\",\"runSuccess\":\"Finished automated PR review for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}.\",\"runFailure\":\"Automated PR review failed for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }} ({status}).\"}"
- GH_AW_WORKFLOW_ID: "gh-aw-pr-rereview"
- GH_AW_WORKFLOW_NAME: "Internal PR Re-Review (Slash Command)"
- GH_AW_WORKFLOW_SOURCE: "pulumi-labs/gh-aw-internal/.github/workflows/gh-aw-pr-rereview.md@8a92f53fac170563f7727cacab2dbedb5d5b9e29"
- GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/pulumi-labs/gh-aw-internal/blob/8a92f53fac170563f7727cacab2dbedb5d5b9e29/.github/workflows/gh-aw-pr-rereview.md"
- outputs:
- code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
- code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
- create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
- create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
- process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
- process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
- steps:
- - name: Setup Scripts
- id: setup
- uses: github/gh-aw-actions/setup@1fd109aa7587e59ad4022e04dcc5fdce4b0cd410 # v0.74.5
- with:
- destination: ${{ runner.temp }}/gh-aw/actions
- job-name: ${{ github.job }}
- trace-id: ${{ needs.activation.outputs.setup-trace-id }}
- env:
- GH_AW_SETUP_WORKFLOW_NAME: "Internal PR Re-Review (Slash Command)"
- GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/gh-aw-pr-rereview.lock.yml@${{ github.ref }}
- GH_AW_INFO_VERSION: "2.1.126"
- - name: Download agent output artifact
- id: download-agent-output
- continue-on-error: true
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- with:
- name: agent
- path: /tmp/gh-aw/
- - name: Setup agent output environment variable
- id: setup-agent-output-env
- if: steps.download-agent-output.outcome == 'success'
- run: |
- mkdir -p /tmp/gh-aw/
- find "/tmp/gh-aw/" -type f -print
- echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/agent_output.json" >> "$GITHUB_OUTPUT"
- - name: Configure GH_HOST for enterprise compatibility
- id: ghes-host-config
- shell: bash
- run: |
- # Derive GH_HOST from GITHUB_SERVER_URL so the gh CLI targets the correct
- # GitHub instance (GHES/GHEC). On github.com this is a harmless no-op.
- GH_HOST="${GITHUB_SERVER_URL#https://}"
- GH_HOST="${GH_HOST#http://}"
- echo "GH_HOST=${GH_HOST}" >> "$GITHUB_ENV"
- - name: Process Safe Outputs
- id: process_safe_outputs
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
- GH_AW_ALLOWED_DOMAINS: "*.githubusercontent.com,anthropic.com,api.anthropic.com,api.github.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,cdn.playwright.dev,codeload.github.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,files.pythonhosted.org,ghcr.io,github-cloud.githubusercontent.com,github-cloud.s3.amazonaws.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,lfs.github.com,objects.githubusercontent.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,playwright.download.prss.microsoft.com,ppa.launchpad.net,pypi.org,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,sentry.io,statsig.anthropic.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com"
- GITHUB_SERVER_URL: ${{ github.server_url }}
- GITHUB_API_URL: ${{ github.api_url }}
- GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"create_pull_request_review_comment\":{\"max\":12,\"side\":\"RIGHT\",\"target\":\"${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}\",\"target-repo\":\"${{ github.repository }}\"},\"create_report_incomplete_issue\":{},\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1,\"report-as-issue\":\"true\"},\"report_incomplete\":{},\"resolve_pull_request_review_thread\":{\"max\":12,\"target\":\"${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}\",\"target-repo\":\"${{ github.repository }}\"},\"submit_pull_request_review\":{\"allowed_events\":[\"APPROVE\",\"REQUEST_CHANGES\",\"COMMENT\"],\"max\":1,\"target\":\"${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}\"}}"
- with:
- github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/safe_output_handler_manager.cjs');
- await main();
- - name: Upload Safe Outputs Items
- if: always()
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
- with:
- name: safe-outputs-items
- path: |
- /tmp/gh-aw/safe-output-items.jsonl
- /tmp/gh-aw/temporary-id-map.json
- if-no-files-found: ignore
-
diff --git a/.github/workflows/gh-aw-pr-rereview.md b/.github/workflows/gh-aw-pr-rereview.md
deleted file mode 100644
index 4f02dd8..0000000
--- a/.github/workflows/gh-aw-pr-rereview.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-on:
- slash_command:
- events:
- - pull_request_comment
- - pull_request_review_comment
- name: review-again
-permissions:
- contents: read
- id-token: write
- pull-requests: read
-imports:
-- shared/review.md
-- shared/plugins/code-review/code-review.md
-description: Run PR re-review on explicit maintainer slash command.
-source: pulumi-labs/gh-aw-internal/.github/workflows/gh-aw-pr-rereview.md@8a92f53fac170563f7727cacab2dbedb5d5b9e29
-strict: true
-timeout-minutes: 15
----
-# Internal PR Re-Review (Slash Command)
diff --git a/.github/workflows/gh-aw-pr-review.lock.yml b/.github/workflows/gh-aw-pr-review.lock.yml
deleted file mode 100644
index 339afe6..0000000
--- a/.github/workflows/gh-aw-pr-review.lock.yml
+++ /dev/null
@@ -1,1301 +0,0 @@
-# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"ad712f5cace591c337965ff82715a5c987a1cf8cfbc40ba475443c34ec91641c","compiler_version":"v0.71.5","strict":true,"agent_id":"claude"}
-# gh-aw-manifest: {"version":1,"secrets":["GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache","sha":"27d5ce7f107fe9357f9df03efb73ab90386fccae","version":"v5.0.5"},{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9"},{"repo":"actions/setup-node","sha":"48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e","version":"v6.4.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"b8068426813005612b960b5ab0b8bd2c27142323","version":"v0.71.5"},{"repo":"pulumi/esc-action","sha":"6cf9520e68354d86f81c455e8d43eabd58f5c9f5","version":"6cf9520e68354d86f81c455e8d43eabd58f5c9f5"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.40","digest":"sha256:14ff567e8d9d4c2fbc5e55c973488381c71d7e0fdbe72d30ee7b8a738fd86504","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.25.40@sha256:14ff567e8d9d4c2fbc5e55c973488381c71d7e0fdbe72d30ee7b8a738fd86504"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.40","digest":"sha256:2883ca3e5ae9f330cafdd9345bfd4ae17fc8da36c96d4c9a1f76e922b4c45280","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.40@sha256:2883ca3e5ae9f330cafdd9345bfd4ae17fc8da36c96d4c9a1f76e922b4c45280"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.40","digest":"sha256:b084f4a2c771f584ee68084ced52fa6b3245197a1889645d817462d307d3ac51","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.25.40@sha256:b084f4a2c771f584ee68084ced52fa6b3245197a1889645d817462d307d3ac51"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.6","digest":"sha256:2bb8eef86006a4c5963c55616a9c51c32f27bfdecb023b8aa6f91f6718d9171c","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.6@sha256:2bb8eef86006a4c5963c55616a9c51c32f27bfdecb023b8aa6f91f6718d9171c"},{"image":"ghcr.io/github/github-mcp-server:v1.0.3","digest":"sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959","pinned_image":"ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]}
-# ___ _ _
-# / _ \ | | (_)
-# | |_| | __ _ ___ _ __ | |_ _ ___
-# | _ |/ _` |/ _ \ '_ \| __| |/ __|
-# | | | | (_| | __/ | | | |_| | (__
-# \_| |_/\__, |\___|_| |_|\__|_|\___|
-# __/ |
-# _ _ |___/
-# | | | | / _| |
-# | | | | ___ _ __ _ __| |_| | _____ ____
-# | |/\| |/ _ \ '__| |/ /| _| |/ _ \ \ /\ / / ___|
-# \ /\ / (_) | | | | ( | | | | (_) \ V V /\__ \
-# \/ \/ \___/|_| |_|\_\|_| |_|\___/ \_/\_/ |___/
-#
-# This file was automatically generated by gh-aw (v0.71.5). DO NOT EDIT.
-#
-# To update this file, edit pulumi-labs/gh-aw-internal/.github/workflows/gh-aw-pr-review.md@8a92f53fac170563f7727cacab2dbedb5d5b9e29 and run:
-# gh aw compile
-# Not all edits will cause changes to this file.
-#
-# For more information: https://github.github.com/gh-aw/introduction/overview/
-#
-# Automated PR review for trusted internal contributors.
-#
-# Source: pulumi-labs/gh-aw-internal/.github/workflows/gh-aw-pr-review.md@8a92f53fac170563f7727cacab2dbedb5d5b9e29
-#
-# Resolved workflow manifest:
-# Imports:
-# - shared/plugins/code-review/code-review.md
-# - shared/review.md
-#
-# Secrets used:
-# - GH_AW_GITHUB_MCP_SERVER_TOKEN
-# - GH_AW_GITHUB_TOKEN
-# - GITHUB_TOKEN
-#
-# Custom actions used:
-# - actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
-# - actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
-# - actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
-# - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9
-# - actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
-# - actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
-# - actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
-# - github/gh-aw-actions/setup@b8068426813005612b960b5ab0b8bd2c27142323 # v0.71.5
-# - pulumi/esc-action@6cf9520e68354d86f81c455e8d43eabd58f5c9f5 # 6cf9520e68354d86f81c455e8d43eabd58f5c9f5
-#
-# Container images used:
-# - ghcr.io/github/gh-aw-firewall/agent:0.25.40@sha256:14ff567e8d9d4c2fbc5e55c973488381c71d7e0fdbe72d30ee7b8a738fd86504
-# - ghcr.io/github/gh-aw-firewall/api-proxy:0.25.40@sha256:2883ca3e5ae9f330cafdd9345bfd4ae17fc8da36c96d4c9a1f76e922b4c45280
-# - ghcr.io/github/gh-aw-firewall/squid:0.25.40@sha256:b084f4a2c771f584ee68084ced52fa6b3245197a1889645d817462d307d3ac51
-# - ghcr.io/github/gh-aw-mcpg:v0.3.6@sha256:2bb8eef86006a4c5963c55616a9c51c32f27bfdecb023b8aa6f91f6718d9171c
-# - ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959
-# - node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f
-
-name: "Internal Trusted PR Reviewer"
-"on":
- pull_request:
- types:
- - opened
- - ready_for_review
- workflow_dispatch:
- inputs:
- aw_context:
- default: ""
- description: Agent caller context (used internally by Agentic Workflows).
- required: false
- type: string
- pr_number:
- description: Pull request number to review
- required: true
- type: string
-
-permissions: {}
-
-concurrency:
- group: "gh-aw-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}"
- cancel-in-progress: true
-
-run-name: "Internal Trusted PR Reviewer"
-
-jobs:
- activation:
- needs: pre_activation
- if: >
- needs.pre_activation.outputs.activated == 'true' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id)
- runs-on: ubuntu-slim
- permissions:
- actions: read
- contents: read
- outputs:
- body: ${{ steps.sanitized.outputs.body }}
- comment_id: ""
- comment_repo: ""
- engine_id: ${{ steps.generate_aw_info.outputs.engine_id }}
- lockdown_check_failed: ${{ steps.generate_aw_info.outputs.lockdown_check_failed == 'true' }}
- model: ${{ steps.generate_aw_info.outputs.model }}
- secret_verification_result: ${{ steps.validate-secret.outputs.verification_result }}
- setup-trace-id: ${{ steps.setup.outputs.trace-id }}
- stale_lock_file_failed: ${{ steps.check-lock-file.outputs.stale_lock_file_failed == 'true' }}
- text: ${{ steps.sanitized.outputs.text }}
- title: ${{ steps.sanitized.outputs.title }}
- steps:
- - name: Setup Scripts
- id: setup
- uses: github/gh-aw-actions/setup@1fd109aa7587e59ad4022e04dcc5fdce4b0cd410 # v0.74.5
- with:
- destination: ${{ runner.temp }}/gh-aw/actions
- job-name: ${{ github.job }}
- trace-id: ${{ needs.pre_activation.outputs.setup-trace-id }}
- env:
- GH_AW_SETUP_WORKFLOW_NAME: "Internal Trusted PR Reviewer"
- GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/gh-aw-pr-review.lock.yml@${{ github.ref }}
- GH_AW_INFO_VERSION: "2.1.126"
- - name: Generate agentic run info
- id: generate_aw_info
- env:
- GH_AW_INFO_ENGINE_ID: "claude"
- GH_AW_INFO_ENGINE_NAME: "Claude Code"
- GH_AW_INFO_MODEL: ${{ vars.GH_AW_MODEL_AGENT_CLAUDE || 'auto' }}
- GH_AW_INFO_VERSION: "2.1.126"
- GH_AW_INFO_AGENT_VERSION: "2.1.126"
- GH_AW_INFO_CLI_VERSION: "v0.71.5"
- GH_AW_INFO_WORKFLOW_NAME: "Internal Trusted PR Reviewer"
- GH_AW_INFO_EXPERIMENTAL: "false"
- GH_AW_INFO_SUPPORTS_TOOLS_ALLOWLIST: "true"
- GH_AW_INFO_STAGED: "false"
- GH_AW_INFO_ALLOWED_DOMAINS: '["defaults"]'
- GH_AW_INFO_FIREWALL_ENABLED: "true"
- GH_AW_INFO_AWF_VERSION: "v0.25.40"
- GH_AW_INFO_AWMG_VERSION: ""
- GH_AW_INFO_FIREWALL_TYPE: "squid"
- GH_AW_COMPILED_STRICT: "true"
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_aw_info.cjs');
- await main(core, context);
- - name: Validate ANTHROPIC_API_KEY secret
- id: validate-secret
- run: bash "${RUNNER_TEMP}/gh-aw/actions/validate_multi_secret.sh" ANTHROPIC_API_KEY 'Claude Code' https://github.github.com/gh-aw/reference/engines/#anthropic-claude-code
- env:
- ANTHROPIC_API_KEY: ${{ steps.esc-secrets.outputs.ANTHROPIC_API_KEY || '__GH_AW_ACTIVATION_PLACEHOLDER__' }}
- - name: Checkout .github and .agents folders
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- with:
- persist-credentials: false
- sparse-checkout: |
- .github
- .agents
- .claude
- .codex
- .crush
- .gemini
- .opencode
- .pi
- sparse-checkout-cone-mode: true
- fetch-depth: 1
- - name: Save agent config folders for base branch restoration
- env:
- GH_AW_AGENT_FOLDERS: ".agents .claude .codex .crush .gemini .github .opencode .pi"
- GH_AW_AGENT_FILES: ".crush.json AGENTS.md CLAUDE.md GEMINI.md PI.md opencode.jsonc"
- # poutine:ignore untrusted_checkout_exec
- run: bash "${RUNNER_TEMP}/gh-aw/actions/save_base_github_folders.sh"
- - name: Check workflow lock file
- id: check-lock-file
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_WORKFLOW_FILE: "gh-aw-pr-review.lock.yml"
- GH_AW_CONTEXT_WORKFLOW_REF: "${{ github.workflow_ref }}"
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/check_workflow_timestamp_api.cjs');
- await main();
- - name: Check compile-agentic version
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_COMPILED_VERSION: "v0.71.5"
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/check_version_updates.cjs');
- await main();
- - name: Compute current body text
- id: sanitized
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_ALLOWED_DOMAINS: "*.githubusercontent.com,anthropic.com,api.anthropic.com,api.github.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,cdn.playwright.dev,codeload.github.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,files.pythonhosted.org,ghcr.io,github-cloud.githubusercontent.com,github-cloud.s3.amazonaws.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,lfs.github.com,objects.githubusercontent.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,playwright.download.prss.microsoft.com,ppa.launchpad.net,pypi.org,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,sentry.io,statsig.anthropic.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com"
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/compute_text.cjs');
- await main();
- - name: Create prompt with built-in context
- env:
- GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
- GH_AW_SAFE_OUTPUTS: ${{ runner.temp }}/gh-aw/safeoutputs/outputs.jsonl
- GH_AW_GITHUB_ACTOR: ${{ github.actor }}
- GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }}
- GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: ${{ github.event.discussion.number }}
- GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }}
- GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }}
- GH_AW_GITHUB_REPOSITORY: ${{ github.repository }}
- GH_AW_GITHUB_RUN_ID: ${{ github.run_id }}
- GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }}
- # poutine:ignore untrusted_checkout_exec
- run: |
- bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh"
- {
- cat << 'GH_AW_PROMPT_07c71dfc55f4f480_EOF'
-
- GH_AW_PROMPT_07c71dfc55f4f480_EOF
- cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md"
- cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md"
- cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md"
- cat "${RUNNER_TEMP}/gh-aw/prompts/cache_memory_prompt.md"
- cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md"
- cat << 'GH_AW_PROMPT_07c71dfc55f4f480_EOF'
-
- Tools: create_pull_request_review_comment(max:12), submit_pull_request_review, resolve_pull_request_review_thread(max:12), missing_tool, missing_data, noop
-
- GH_AW_PROMPT_07c71dfc55f4f480_EOF
- cat "${RUNNER_TEMP}/gh-aw/prompts/mcp_cli_tools_prompt.md"
- cat << 'GH_AW_PROMPT_07c71dfc55f4f480_EOF'
-
- The following GitHub context information is available for this workflow:
- {{#if __GH_AW_GITHUB_ACTOR__ }}
- - **actor**: __GH_AW_GITHUB_ACTOR__
- {{/if}}
- {{#if __GH_AW_GITHUB_REPOSITORY__ }}
- - **repository**: __GH_AW_GITHUB_REPOSITORY__
- {{/if}}
- {{#if __GH_AW_GITHUB_WORKSPACE__ }}
- - **workspace**: __GH_AW_GITHUB_WORKSPACE__
- {{/if}}
- {{#if __GH_AW_GITHUB_EVENT_ISSUE_NUMBER__ }}
- - **issue-number**: #__GH_AW_GITHUB_EVENT_ISSUE_NUMBER__
- {{/if}}
- {{#if __GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER__ }}
- - **discussion-number**: #__GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER__
- {{/if}}
- {{#if __GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER__ }}
- - **pull-request-number**: #__GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER__
- {{/if}}
- {{#if __GH_AW_GITHUB_EVENT_COMMENT_ID__ }}
- - **comment-id**: __GH_AW_GITHUB_EVENT_COMMENT_ID__
- {{/if}}
- {{#if __GH_AW_GITHUB_RUN_ID__ }}
- - **workflow-run-id**: __GH_AW_GITHUB_RUN_ID__
- {{/if}}
-
-
- GH_AW_PROMPT_07c71dfc55f4f480_EOF
- cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md"
- cat << 'GH_AW_PROMPT_07c71dfc55f4f480_EOF'
-
- {{#runtime-import .github/workflows/shared/review.md}}
- {{#runtime-import .github/workflows/shared/plugins/code-review/code-review.md}}
- {{#runtime-import .github/workflows/gh-aw-pr-review.md}}
- GH_AW_PROMPT_07c71dfc55f4f480_EOF
- } > "$GH_AW_PROMPT"
- - name: Interpolate variables and render templates
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
- GH_AW_ENGINE_ID: "claude"
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/interpolate_prompt.cjs');
- await main();
- - name: Substitute placeholders
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
- GH_AW_ALLOWED_EXTENSIONS: ''
- GH_AW_CACHE_DESCRIPTION: ''
- GH_AW_CACHE_DIR: '/tmp/gh-aw/cache-memory/'
- GH_AW_GITHUB_ACTOR: ${{ github.actor }}
- GH_AW_GITHUB_EVENT_COMMENT_ID: ${{ github.event.comment.id }}
- GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: ${{ github.event.discussion.number }}
- GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }}
- GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }}
- GH_AW_GITHUB_REPOSITORY: ${{ github.repository }}
- GH_AW_GITHUB_RUN_ID: ${{ github.run_id }}
- GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }}
- GH_AW_MCP_CLI_SERVERS_LIST: '- `safeoutputs` — run `safeoutputs --help` to see available tools'
- GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED: ${{ needs.pre_activation.outputs.activated }}
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
-
- const substitutePlaceholders = require('${{ runner.temp }}/gh-aw/actions/substitute_placeholders.cjs');
-
- // Call the substitution function
- return await substitutePlaceholders({
- file: process.env.GH_AW_PROMPT,
- substitutions: {
- GH_AW_ALLOWED_EXTENSIONS: process.env.GH_AW_ALLOWED_EXTENSIONS,
- GH_AW_CACHE_DESCRIPTION: process.env.GH_AW_CACHE_DESCRIPTION,
- GH_AW_CACHE_DIR: process.env.GH_AW_CACHE_DIR,
- GH_AW_GITHUB_ACTOR: process.env.GH_AW_GITHUB_ACTOR,
- GH_AW_GITHUB_EVENT_COMMENT_ID: process.env.GH_AW_GITHUB_EVENT_COMMENT_ID,
- GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER: process.env.GH_AW_GITHUB_EVENT_DISCUSSION_NUMBER,
- GH_AW_GITHUB_EVENT_ISSUE_NUMBER: process.env.GH_AW_GITHUB_EVENT_ISSUE_NUMBER,
- GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER: process.env.GH_AW_GITHUB_EVENT_PULL_REQUEST_NUMBER,
- GH_AW_GITHUB_REPOSITORY: process.env.GH_AW_GITHUB_REPOSITORY,
- GH_AW_GITHUB_RUN_ID: process.env.GH_AW_GITHUB_RUN_ID,
- GH_AW_GITHUB_WORKSPACE: process.env.GH_AW_GITHUB_WORKSPACE,
- GH_AW_MCP_CLI_SERVERS_LIST: process.env.GH_AW_MCP_CLI_SERVERS_LIST,
- GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED: process.env.GH_AW_NEEDS_PRE_ACTIVATION_OUTPUTS_ACTIVATED
- }
- });
- - name: Validate prompt placeholders
- env:
- GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
- # poutine:ignore untrusted_checkout_exec
- run: bash "${RUNNER_TEMP}/gh-aw/actions/validate_prompt_placeholders.sh"
- - name: Print prompt
- env:
- GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
- # poutine:ignore untrusted_checkout_exec
- run: bash "${RUNNER_TEMP}/gh-aw/actions/print_prompt_summary.sh"
- - name: Upload activation artifact
- if: success()
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
- with:
- name: activation
- include-hidden-files: true
- path: |
- /tmp/gh-aw/aw_info.json
- /tmp/gh-aw/aw-prompts/prompt.txt
- /tmp/gh-aw/github_rate_limits.jsonl
- /tmp/gh-aw/base
- if-no-files-found: ignore
- retention-days: 1
-
- agent:
- needs: activation
- runs-on: ubuntu-latest
- permissions:
- contents: read
- id-token: write
- pull-requests: read
- env:
- DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
- GH_AW_ASSETS_ALLOWED_EXTS: ""
- GH_AW_ASSETS_BRANCH: ""
- GH_AW_ASSETS_MAX_SIZE_KB: 0
- GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs
- GH_AW_WORKFLOW_ID_SANITIZED: ghawprreview
- outputs:
- checkout_pr_success: ${{ steps.checkout-pr.outputs.checkout_pr_success || 'true' }}
- effective_tokens: ${{ steps.parse-mcp-gateway.outputs.effective_tokens }}
- has_patch: ${{ steps.collect_output.outputs.has_patch }}
- model: ${{ needs.activation.outputs.model }}
- output: ${{ steps.collect_output.outputs.output }}
- output_types: ${{ steps.collect_output.outputs.output_types }}
- setup-trace-id: ${{ steps.setup.outputs.trace-id }}
- steps:
- - name: Setup Scripts
- id: setup
- uses: github/gh-aw-actions/setup@1fd109aa7587e59ad4022e04dcc5fdce4b0cd410 # v0.74.5
- with:
- destination: ${{ runner.temp }}/gh-aw/actions
- job-name: ${{ github.job }}
- trace-id: ${{ needs.activation.outputs.setup-trace-id }}
- env:
- GH_AW_SETUP_WORKFLOW_NAME: "Internal Trusted PR Reviewer"
- GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/gh-aw-pr-review.lock.yml@${{ github.ref }}
- GH_AW_INFO_VERSION: "2.1.126"
- - name: Set runtime paths
- id: set-runtime-paths
- run: |
- {
- echo "GH_AW_SAFE_OUTPUTS=${RUNNER_TEMP}/gh-aw/safeoutputs/outputs.jsonl"
- echo "GH_AW_SAFE_OUTPUTS_CONFIG_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/config.json"
- echo "GH_AW_SAFE_OUTPUTS_TOOLS_PATH=${RUNNER_TEMP}/gh-aw/safeoutputs/tools.json"
- } >> "$GITHUB_OUTPUT"
- - name: Checkout repository
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- with:
- persist-credentials: false
- - name: Create gh-aw temp directory
- run: bash "${RUNNER_TEMP}/gh-aw/actions/create_gh_aw_tmp_dir.sh"
- - name: Configure gh CLI for GitHub Enterprise
- run: bash "${RUNNER_TEMP}/gh-aw/actions/configure_gh_for_ghe.sh"
- env:
- GH_TOKEN: ${{ github.token }}
- - env:
- ESC_ACTION_ENVIRONMENT: imports/github-secrets
- 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@6cf9520e68354d86f81c455e8d43eabd58f5c9f5 # 6cf9520e68354d86f81c455e8d43eabd58f5c9f5
- - env:
- ANTHROPIC_API_KEY_FROM_ESC: ${{ steps.esc-secrets.outputs.ANTHROPIC_API_KEY }}
- name: Validate ESC secret output
- run: |
- test -n "$ANTHROPIC_API_KEY_FROM_ESC" || {
- echo "ESC did not return ANTHROPIC_API_KEY";
- exit 1;
- }
-
- # Cache memory file share configuration from frontmatter processed below
- - name: Create cache-memory directory
- run: bash "${RUNNER_TEMP}/gh-aw/actions/create_cache_memory_dir.sh"
- - name: Restore cache-memory file share data
- uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
- with:
- key: memory-none-nopolicy-${{ env.GH_AW_WORKFLOW_ID_SANITIZED }}-${{ github.run_id }}
- path: /tmp/gh-aw/cache-memory
- restore-keys: |
- memory-none-nopolicy-${{ env.GH_AW_WORKFLOW_ID_SANITIZED }}-
- - name: Setup cache-memory git repository
- env:
- GH_AW_CACHE_DIR: /tmp/gh-aw/cache-memory
- GH_AW_MIN_INTEGRITY: none
- run: bash "${RUNNER_TEMP}/gh-aw/actions/setup_cache_memory_git.sh"
- - name: Configure Git credentials
- env:
- REPO_NAME: ${{ github.repository }}
- SERVER_URL: ${{ github.server_url }}
- GITHUB_TOKEN: ${{ github.token }}
- run: |
- git config --global user.email "github-actions[bot]@users.noreply.github.com"
- git config --global user.name "github-actions[bot]"
- git config --global am.keepcr true
- # Re-authenticate git with GitHub token
- SERVER_URL_STRIPPED="${SERVER_URL#https://}"
- git remote set-url origin "https://x-access-token:${GITHUB_TOKEN}@${SERVER_URL_STRIPPED}/${REPO_NAME}.git"
- echo "Git configured with standard GitHub Actions identity"
- - name: Checkout PR branch
- id: checkout-pr
- if: |
- github.event.pull_request || github.event.issue.pull_request
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- with:
- github-token: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/checkout_pr_branch.cjs');
- await main();
- - name: Setup Node.js
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
- with:
- node-version: '24'
- package-manager-cache: false
- - name: Install AWF binary
- run: bash "${RUNNER_TEMP}/gh-aw/actions/install_awf_binary.sh" v0.25.40
- - name: Install Claude Code CLI
- run: npm install -g @anthropic-ai/claude-code@2.1.126
- - name: Determine automatic lockdown mode for GitHub MCP Server
- id: determine-automatic-lockdown
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9
- env:
- GH_AW_GITHUB_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN }}
- GH_AW_GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN }}
- with:
- script: |
- const determineAutomaticLockdown = require('${{ runner.temp }}/gh-aw/actions/determine_automatic_lockdown.cjs');
- await determineAutomaticLockdown(github, context, core);
- - name: Download activation artifact
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- with:
- name: activation
- path: /tmp/gh-aw
- - name: Restore agent config folders from base branch
- if: steps.checkout-pr.outcome == 'success'
- env:
- GH_AW_AGENT_FOLDERS: ".agents .claude .codex .crush .gemini .github .opencode .pi"
- GH_AW_AGENT_FILES: ".crush.json AGENTS.md CLAUDE.md GEMINI.md PI.md opencode.jsonc"
- run: bash "${RUNNER_TEMP}/gh-aw/actions/restore_base_github_folders.sh"
- - name: Download container images
- run: bash "${RUNNER_TEMP}/gh-aw/actions/download_docker_images.sh" ghcr.io/github/gh-aw-firewall/agent:0.25.40@sha256:14ff567e8d9d4c2fbc5e55c973488381c71d7e0fdbe72d30ee7b8a738fd86504 ghcr.io/github/gh-aw-firewall/api-proxy:0.25.40@sha256:2883ca3e5ae9f330cafdd9345bfd4ae17fc8da36c96d4c9a1f76e922b4c45280 ghcr.io/github/gh-aw-firewall/squid:0.25.40@sha256:b084f4a2c771f584ee68084ced52fa6b3245197a1889645d817462d307d3ac51 ghcr.io/github/gh-aw-mcpg:v0.3.6@sha256:2bb8eef86006a4c5963c55616a9c51c32f27bfdecb023b8aa6f91f6718d9171c ghcr.io/github/github-mcp-server:v1.0.3@sha256:2ac27ef03461ef2b877031b838a7d1fd7f12b12d4ace7796d8cad91446d55959 node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f
- - name: Generate Safe Outputs Config
- env:
- GITHUB_REPOSITORY: ${{ github.repository }}
- run: |
- mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs"
- mkdir -p /tmp/gh-aw/safeoutputs
- mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs
- cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << GH_AW_SAFE_OUTPUTS_CONFIG_3c3fd634dc091370_EOF
- {"create_pull_request_review_comment":{"max":12,"side":"RIGHT","target":"${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}","target-repo":"${GITHUB_REPOSITORY}"},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"},"report_incomplete":{},"resolve_pull_request_review_thread":{"max":12,"target":"${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}","target-repo":"${GITHUB_REPOSITORY}"},"submit_pull_request_review":{"allowed_events":["APPROVE","REQUEST_CHANGES","COMMENT"],"max":1,"target":"${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}"}}
- GH_AW_SAFE_OUTPUTS_CONFIG_3c3fd634dc091370_EOF
- - name: Generate Safe Outputs Tools
- env:
- GH_AW_TOOLS_META_JSON: |
- {
- "description_suffixes": {
- "create_pull_request_review_comment": " CONSTRAINTS: Maximum 12 review comment(s) can be created. Comments will be on the RIGHT side of the diff.",
- "resolve_pull_request_review_thread": " CONSTRAINTS: Maximum 12 review thread(s) can be resolved.",
- "submit_pull_request_review": " CONSTRAINTS: Maximum 1 review(s) can be submitted."
- },
- "repo_params": {},
- "dynamic_tools": []
- }
- GH_AW_VALIDATION_JSON: |
- {
- "create_pull_request_review_comment": {
- "defaultMax": 1,
- "fields": {
- "body": {
- "required": true,
- "type": "string",
- "sanitize": true,
- "maxLength": 65000
- },
- "line": {
- "required": true,
- "positiveInteger": true
- },
- "path": {
- "required": true,
- "type": "string"
- },
- "pull_request_number": {
- "optionalPositiveInteger": true
- },
- "repo": {
- "type": "string",
- "maxLength": 256
- },
- "side": {
- "type": "string",
- "enum": [
- "LEFT",
- "RIGHT"
- ]
- },
- "start_line": {
- "optionalPositiveInteger": true
- }
- },
- "customValidation": "startLineLessOrEqualLine"
- },
- "missing_data": {
- "defaultMax": 20,
- "fields": {
- "alternatives": {
- "type": "string",
- "sanitize": true,
- "maxLength": 256
- },
- "context": {
- "type": "string",
- "sanitize": true,
- "maxLength": 256
- },
- "data_type": {
- "type": "string",
- "sanitize": true,
- "maxLength": 128
- },
- "reason": {
- "type": "string",
- "sanitize": true,
- "maxLength": 256
- }
- }
- },
- "missing_tool": {
- "defaultMax": 20,
- "fields": {
- "alternatives": {
- "type": "string",
- "sanitize": true,
- "maxLength": 512
- },
- "reason": {
- "required": true,
- "type": "string",
- "sanitize": true,
- "maxLength": 256
- },
- "tool": {
- "type": "string",
- "sanitize": true,
- "maxLength": 128
- }
- }
- },
- "noop": {
- "defaultMax": 1,
- "fields": {
- "message": {
- "required": true,
- "type": "string",
- "sanitize": true,
- "maxLength": 65000
- }
- }
- },
- "report_incomplete": {
- "defaultMax": 5,
- "fields": {
- "details": {
- "type": "string",
- "sanitize": true,
- "maxLength": 65000
- },
- "reason": {
- "required": true,
- "type": "string",
- "sanitize": true,
- "maxLength": 1024
- }
- }
- },
- "resolve_pull_request_review_thread": {
- "defaultMax": 10,
- "fields": {
- "thread_id": {
- "required": true,
- "type": "string"
- }
- }
- },
- "submit_pull_request_review": {
- "defaultMax": 1,
- "fields": {
- "body": {
- "type": "string",
- "sanitize": true,
- "maxLength": 65000
- },
- "event": {
- "type": "string",
- "enum": [
- "APPROVE",
- "REQUEST_CHANGES",
- "COMMENT"
- ]
- }
- }
- }
- }
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_safe_outputs_tools.cjs');
- await main();
- - name: Generate Safe Outputs MCP Server Config
- id: safe-outputs-config
- run: |
- # Generate a secure random API key (360 bits of entropy, 40+ chars)
- # Mask immediately to prevent timing vulnerabilities
- API_KEY=$(openssl rand -base64 45 | tr -d '/+=')
- echo "::add-mask::${API_KEY}"
-
- PORT=3001
-
- # Set outputs for next steps
- {
- echo "safe_outputs_api_key=${API_KEY}"
- echo "safe_outputs_port=${PORT}"
- } >> "$GITHUB_OUTPUT"
-
- echo "Safe Outputs MCP server will run on port ${PORT}"
-
- - name: Start Safe Outputs MCP HTTP Server
- id: safe-outputs-start
- env:
- DEBUG: '*'
- GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }}
- GH_AW_SAFE_OUTPUTS_PORT: ${{ steps.safe-outputs-config.outputs.safe_outputs_port }}
- GH_AW_SAFE_OUTPUTS_API_KEY: ${{ steps.safe-outputs-config.outputs.safe_outputs_api_key }}
- GH_AW_SAFE_OUTPUTS_TOOLS_PATH: ${{ runner.temp }}/gh-aw/safeoutputs/tools.json
- GH_AW_SAFE_OUTPUTS_CONFIG_PATH: ${{ runner.temp }}/gh-aw/safeoutputs/config.json
- GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs
- run: |
- # Environment variables are set above to prevent template injection
- export DEBUG
- export GH_AW_SAFE_OUTPUTS
- export GH_AW_SAFE_OUTPUTS_PORT
- export GH_AW_SAFE_OUTPUTS_API_KEY
- export GH_AW_SAFE_OUTPUTS_TOOLS_PATH
- export GH_AW_SAFE_OUTPUTS_CONFIG_PATH
- export GH_AW_MCP_LOG_DIR
-
- bash "${RUNNER_TEMP}/gh-aw/actions/start_safe_outputs_server.sh"
-
- - name: Start MCP Gateway
- id: start-mcp-gateway
- env:
- GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }}
- GH_AW_SAFE_OUTPUTS_API_KEY: ${{ steps.safe-outputs-start.outputs.api_key }}
- GH_AW_SAFE_OUTPUTS_PORT: ${{ steps.safe-outputs-start.outputs.port }}
- GITHUB_MCP_GUARD_MIN_INTEGRITY: ${{ steps.determine-automatic-lockdown.outputs.min_integrity }}
- GITHUB_MCP_GUARD_REPOS: ${{ steps.determine-automatic-lockdown.outputs.repos }}
- GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- run: |
- set -eo pipefail
- mkdir -p "${RUNNER_TEMP}/gh-aw/mcp-config"
-
- # Export gateway environment variables for MCP config and gateway script
- export MCP_GATEWAY_PORT="8080"
- export MCP_GATEWAY_DOMAIN="host.docker.internal"
- export MCP_GATEWAY_HOST_DOMAIN="localhost"
- MCP_GATEWAY_API_KEY=$(openssl rand -base64 45 | tr -d '/+=')
- echo "::add-mask::${MCP_GATEWAY_API_KEY}"
- export MCP_GATEWAY_API_KEY
- export MCP_GATEWAY_PAYLOAD_DIR="/tmp/gh-aw/mcp-payloads"
- mkdir -p "${MCP_GATEWAY_PAYLOAD_DIR}"
- export MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD="524288"
- export DEBUG="*"
-
- export GH_AW_ENGINE="claude"
- MCP_GATEWAY_UID=$(id -u 2>/dev/null || echo '0')
- MCP_GATEWAY_GID=$(id -g 2>/dev/null || echo '0')
- DOCKER_SOCK_GID=$(stat -c '%g' /var/run/docker.sock 2>/dev/null || echo '0')
- export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host --add-host host.docker.internal:127.0.0.1 --user '"${MCP_GATEWAY_UID}"':'"${MCP_GATEWAY_GID}"' --group-add '"${DOCKER_SOCK_GID}"' -v /var/run/docker.sock:/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.3.6'
-
- GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node)
- cat << GH_AW_MCP_CONFIG_b2ee33b9da289121_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
- {
- "mcpServers": {
- "github": {
- "container": "ghcr.io/github/github-mcp-server:v1.0.3",
- "env": {
- "GITHUB_HOST": "$GITHUB_SERVER_URL",
- "GITHUB_PERSONAL_ACCESS_TOKEN": "$GITHUB_MCP_SERVER_TOKEN",
- "GITHUB_READ_ONLY": "1",
- "GITHUB_TOOLSETS": "pull_requests,repos"
- },
- "guard-policies": {
- "allow-only": {
- "min-integrity": "$GITHUB_MCP_GUARD_MIN_INTEGRITY",
- "repos": "$GITHUB_MCP_GUARD_REPOS"
- }
- }
- },
- "safeoutputs": {
- "type": "http",
- "url": "http://host.docker.internal:$GH_AW_SAFE_OUTPUTS_PORT",
- "headers": {
- "Authorization": "$GH_AW_SAFE_OUTPUTS_API_KEY"
- },
- "guard-policies": {
- "write-sink": {
- "accept": [
- "*"
- ]
- }
- }
- }
- },
- "gateway": {
- "port": $MCP_GATEWAY_PORT,
- "domain": "${MCP_GATEWAY_DOMAIN}",
- "apiKey": "${MCP_GATEWAY_API_KEY}",
- "payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}"
- }
- }
- GH_AW_MCP_CONFIG_b2ee33b9da289121_EOF
- - name: Mount MCP servers as CLIs
- id: mount-mcp-clis
- continue-on-error: true
- env:
- MCP_GATEWAY_API_KEY: ${{ steps.start-mcp-gateway.outputs.gateway-api-key }}
- MCP_GATEWAY_DOMAIN: ${{ steps.start-mcp-gateway.outputs.gateway-domain }}
- MCP_GATEWAY_PORT: ${{ steps.start-mcp-gateway.outputs.gateway-port }}
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/mount_mcp_as_cli.cjs');
- await main();
- - name: Clean credentials
- continue-on-error: true
- run: bash "${RUNNER_TEMP}/gh-aw/actions/clean_git_credentials.sh"
- - name: Audit pre-agent workspace
- id: pre_agent_audit
- continue-on-error: true
- run: bash "${RUNNER_TEMP}/gh-aw/actions/audit_pre_agent_workspace.sh"
- - name: Execute Claude Code CLI
- id: agentic_execution
- # Allowed tools (sorted):
- # - Bash
- # - BashOutput
- # - Edit
- # - Edit(/tmp/gh-aw/cache-memory/*)
- # - ExitPlanMode
- # - Glob
- # - Grep
- # - KillBash
- # - LS
- # - MultiEdit
- # - MultiEdit(/tmp/gh-aw/cache-memory/*)
- # - NotebookEdit
- # - NotebookRead
- # - Read
- # - Read(/tmp/gh-aw/cache-memory/*)
- # - Task
- # - TodoWrite
- # - Write
- # - Write(/tmp/gh-aw/cache-memory/*)
- # - mcp__github__download_workflow_run_artifact
- # - mcp__github__get_code_scanning_alert
- # - mcp__github__get_commit
- # - mcp__github__get_dependabot_alert
- # - mcp__github__get_discussion
- # - mcp__github__get_discussion_comments
- # - mcp__github__get_file_contents
- # - mcp__github__get_job_logs
- # - mcp__github__get_label
- # - mcp__github__get_latest_release
- # - mcp__github__get_me
- # - mcp__github__get_notification_details
- # - mcp__github__get_pull_request
- # - mcp__github__get_pull_request_comments
- # - mcp__github__get_pull_request_diff
- # - mcp__github__get_pull_request_files
- # - mcp__github__get_pull_request_review_comments
- # - mcp__github__get_pull_request_reviews
- # - mcp__github__get_pull_request_status
- # - mcp__github__get_release_by_tag
- # - mcp__github__get_secret_scanning_alert
- # - mcp__github__get_tag
- # - mcp__github__get_workflow_run
- # - mcp__github__get_workflow_run_logs
- # - mcp__github__get_workflow_run_usage
- # - mcp__github__issue_read
- # - mcp__github__list_branches
- # - mcp__github__list_code_scanning_alerts
- # - mcp__github__list_commits
- # - mcp__github__list_dependabot_alerts
- # - mcp__github__list_discussion_categories
- # - mcp__github__list_discussions
- # - mcp__github__list_issue_types
- # - mcp__github__list_issues
- # - mcp__github__list_label
- # - mcp__github__list_notifications
- # - mcp__github__list_pull_requests
- # - mcp__github__list_releases
- # - mcp__github__list_secret_scanning_alerts
- # - mcp__github__list_starred_repositories
- # - mcp__github__list_tags
- # - mcp__github__list_workflow_jobs
- # - mcp__github__list_workflow_run_artifacts
- # - mcp__github__list_workflow_runs
- # - mcp__github__list_workflows
- # - mcp__github__pull_request_read
- # - mcp__github__search_code
- # - mcp__github__search_issues
- # - mcp__github__search_orgs
- # - mcp__github__search_pull_requests
- # - mcp__github__search_repositories
- # - mcp__github__search_users
- # - mcp__safeoutputs
- timeout-minutes: 15
- run: |
- set -o pipefail
- touch /tmp/gh-aw/agent-step-summary.md
- (umask 177 && touch /tmp/gh-aw/agent-stdio.log)
- printf '%s\n' '{"$schema":"https://github.com/github/gh-aw-firewall/releases/download/v0.25.40/awf-config.schema.json","network":{"allowDomains":["*.githubusercontent.com","anthropic.com","api.anthropic.com","api.github.com","api.snapcraft.io","archive.ubuntu.com","azure.archive.ubuntu.com","cdn.playwright.dev","codeload.github.com","crl.geotrust.com","crl.globalsign.com","crl.identrust.com","crl.sectigo.com","crl.thawte.com","crl.usertrust.com","crl.verisign.com","crl3.digicert.com","crl4.digicert.com","crls.ssl.com","files.pythonhosted.org","ghcr.io","github-cloud.githubusercontent.com","github-cloud.s3.amazonaws.com","github.com","host.docker.internal","json-schema.org","json.schemastore.org","keyserver.ubuntu.com","lfs.github.com","objects.githubusercontent.com","ocsp.digicert.com","ocsp.geotrust.com","ocsp.globalsign.com","ocsp.identrust.com","ocsp.sectigo.com","ocsp.ssl.com","ocsp.thawte.com","ocsp.usertrust.com","ocsp.verisign.com","packagecloud.io","packages.cloud.google.com","packages.microsoft.com","playwright.download.prss.microsoft.com","ppa.launchpad.net","pypi.org","raw.githubusercontent.com","registry.npmjs.org","s.symcb.com","s.symcd.com","security.ubuntu.com","sentry.io","statsig.anthropic.com","ts-crl.ws.symantec.com","ts-ocsp.ws.symantec.com","www.googleapis.com"]},"apiProxy":{"enabled":true,"models":{"auto":["large"],"deep-research":["copilot/deep-research*","google/deep-research*"],"gemini-flash":["copilot/gemini-*flash*","google/gemini-*flash*"],"gemini-pro":["copilot/gemini-*pro*","google/gemini-*pro*"],"gpt-4.1":["copilot/gpt-4.1*","openai/gpt-4.1*"],"gpt-5":["copilot/gpt-5*","openai/gpt-5*"],"gpt-5-codex":["copilot/gpt-5*codex*","openai/gpt-5*codex*"],"gpt-5-mini":["copilot/gpt-5*mini*","openai/gpt-5*mini*"],"gpt-5-nano":["copilot/gpt-5*nano*","openai/gpt-5*nano*"],"gpt-5-pro":["copilot/gpt-5*pro*","openai/gpt-5*pro*"],"haiku":["copilot/*haiku*","anthropic/*haiku*"],"large":["sonnet","gpt-5-pro","gpt-5","gemini-pro"],"mini":["haiku","gpt-5-mini","gpt-5-nano","gemini-flash"],"opus":["copilot/*opus*","anthropic/*opus*"],"reasoning":["copilot/o1*","copilot/o3*","copilot/o4*","openai/o1*","openai/o3*","openai/o4*"],"small":["mini"],"sonnet":["copilot/*sonnet*","anthropic/*sonnet*"]}},"container":{"imageTag":"0.25.40,squid=sha256:b084f4a2c771f584ee68084ced52fa6b3245197a1889645d817462d307d3ac51,agent=sha256:14ff567e8d9d4c2fbc5e55c973488381c71d7e0fdbe72d30ee7b8a738fd86504,api-proxy=sha256:2883ca3e5ae9f330cafdd9345bfd4ae17fc8da36c96d4c9a1f76e922b4c45280,cli-proxy=sha256:3e7152911d4b4b7b97beef9d3d7d924ff7902227e86001ef3838fb728d5d514c"}}' > "${RUNNER_TEMP}/gh-aw/awf-config.json" && cp "${RUNNER_TEMP}/gh-aw/awf-config.json" /tmp/gh-aw/awf-config.json
- # shellcheck disable=SC1003
- sudo -E awf --config "${RUNNER_TEMP}/gh-aw/awf-config.json" --container-workdir "${GITHUB_WORKSPACE}" --mount "${RUNNER_TEMP}/gh-aw:${RUNNER_TEMP}/gh-aw:ro" --mount "${RUNNER_TEMP}/gh-aw:/host${RUNNER_TEMP}/gh-aw:ro" --tty --env-all --exclude-env ANTHROPIC_API_KEY --exclude-env GITHUB_MCP_SERVER_TOKEN --exclude-env MCP_GATEWAY_API_KEY --log-level info --proxy-logs-dir /tmp/gh-aw/sandbox/firewall/logs --audit-dir /tmp/gh-aw/sandbox/firewall/audit --enable-host-access --allow-host-ports 80,443,8080 --skip-pull \
- -- /bin/bash -c 'export PATH="${RUNNER_TEMP}/gh-aw/mcp-cli/bin:$PATH" && export PATH="$(find /opt/hostedtoolcache /home/runner/work/_tool -maxdepth 4 -type d -name bin 2>/dev/null | tr '\''\n'\'' '\'':'\'')$PATH"; [ -n "$GOROOT" ] && export PATH="$GOROOT/bin:$PATH" || true && GH_AW_NODE_EXEC="${GH_AW_NODE_BIN:-}"; if [ -z "$GH_AW_NODE_EXEC" ] || [ ! -x "$GH_AW_NODE_EXEC" ]; then GH_AW_NODE_EXEC="$(command -v node 2>/dev/null || echo node)"; fi; "$GH_AW_NODE_EXEC" ${RUNNER_TEMP}/gh-aw/actions/claude_harness.cjs claude --print --no-chrome --mcp-config "${{ runner.temp }}/gh-aw/mcp-config/mcp-servers.json" --allowed-tools '\''Bash,BashOutput,Edit,Edit(/tmp/gh-aw/cache-memory/*),ExitPlanMode,Glob,Grep,KillBash,LS,MultiEdit,MultiEdit(/tmp/gh-aw/cache-memory/*),NotebookEdit,NotebookRead,Read,Read(/tmp/gh-aw/cache-memory/*),Task,TodoWrite,Write,Write(/tmp/gh-aw/cache-memory/*),mcp__github__download_workflow_run_artifact,mcp__github__get_code_scanning_alert,mcp__github__get_commit,mcp__github__get_dependabot_alert,mcp__github__get_discussion,mcp__github__get_discussion_comments,mcp__github__get_file_contents,mcp__github__get_job_logs,mcp__github__get_label,mcp__github__get_latest_release,mcp__github__get_me,mcp__github__get_notification_details,mcp__github__get_pull_request,mcp__github__get_pull_request_comments,mcp__github__get_pull_request_diff,mcp__github__get_pull_request_files,mcp__github__get_pull_request_review_comments,mcp__github__get_pull_request_reviews,mcp__github__get_pull_request_status,mcp__github__get_release_by_tag,mcp__github__get_secret_scanning_alert,mcp__github__get_tag,mcp__github__get_workflow_run,mcp__github__get_workflow_run_logs,mcp__github__get_workflow_run_usage,mcp__github__issue_read,mcp__github__list_branches,mcp__github__list_code_scanning_alerts,mcp__github__list_commits,mcp__github__list_dependabot_alerts,mcp__github__list_discussion_categories,mcp__github__list_discussions,mcp__github__list_issue_types,mcp__github__list_issues,mcp__github__list_label,mcp__github__list_notifications,mcp__github__list_pull_requests,mcp__github__list_releases,mcp__github__list_secret_scanning_alerts,mcp__github__list_starred_repositories,mcp__github__list_tags,mcp__github__list_workflow_jobs,mcp__github__list_workflow_run_artifacts,mcp__github__list_workflow_runs,mcp__github__list_workflows,mcp__github__pull_request_read,mcp__github__search_code,mcp__github__search_issues,mcp__github__search_orgs,mcp__github__search_pull_requests,mcp__github__search_repositories,mcp__github__search_users,mcp__safeoutputs'\'' --debug-file /tmp/gh-aw/agent-stdio.log --verbose --permission-mode bypassPermissions --output-format stream-json --prompt-file /tmp/gh-aw/aw-prompts/prompt.txt${GH_AW_MODEL_AGENT_CLAUDE:+ --model "$GH_AW_MODEL_AGENT_CLAUDE"}' 2>&1 | tee -a /tmp/gh-aw/agent-stdio.log
- env:
- ANTHROPIC_API_KEY: ${{ steps.esc-secrets.outputs.ANTHROPIC_API_KEY || '__GH_AW_ACTIVATION_PLACEHOLDER__' }}
- BASH_DEFAULT_TIMEOUT_MS: 60000
- BASH_MAX_TIMEOUT_MS: 60000
- CLAUDE_CODE_DISABLE_FAST_MODE: 1
- DISABLE_BUG_COMMAND: 1
- DISABLE_ERROR_REPORTING: 1
- DISABLE_TELEMETRY: 1
- GH_AW_MCP_CONFIG: ${{ runner.temp }}/gh-aw/mcp-config/mcp-servers.json
- GH_AW_MODEL_AGENT_CLAUDE: ${{ vars.GH_AW_MODEL_AGENT_CLAUDE || '' }}
- GH_AW_PHASE: agent
- GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt
- GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }}
- GH_AW_VERSION: v0.71.5
- GITHUB_AW: true
- GITHUB_STEP_SUMMARY: /tmp/gh-aw/agent-step-summary.md
- GITHUB_WORKSPACE: ${{ github.workspace }}
- GIT_AUTHOR_EMAIL: github-actions[bot]@users.noreply.github.com
- GIT_AUTHOR_NAME: github-actions[bot]
- GIT_COMMITTER_EMAIL: github-actions[bot]@users.noreply.github.com
- GIT_COMMITTER_NAME: github-actions[bot]
- MCP_TIMEOUT: 120000
- MCP_TOOL_TIMEOUT: 60000
- - name: Configure Git credentials
- env:
- REPO_NAME: ${{ github.repository }}
- SERVER_URL: ${{ github.server_url }}
- GITHUB_TOKEN: ${{ github.token }}
- run: |
- git config --global user.email "github-actions[bot]@users.noreply.github.com"
- git config --global user.name "github-actions[bot]"
- git config --global am.keepcr true
- # Re-authenticate git with GitHub token
- SERVER_URL_STRIPPED="${SERVER_URL#https://}"
- git remote set-url origin "https://x-access-token:${GITHUB_TOKEN}@${SERVER_URL_STRIPPED}/${REPO_NAME}.git"
- echo "Git configured with standard GitHub Actions identity"
- - name: Stop MCP Gateway
- if: always()
- continue-on-error: true
- env:
- MCP_GATEWAY_PORT: ${{ steps.start-mcp-gateway.outputs.gateway-port }}
- MCP_GATEWAY_API_KEY: ${{ steps.start-mcp-gateway.outputs.gateway-api-key }}
- GATEWAY_PID: ${{ steps.start-mcp-gateway.outputs.gateway-pid }}
- run: |
- bash "${RUNNER_TEMP}/gh-aw/actions/stop_mcp_gateway.sh" "$GATEWAY_PID"
- - name: Redact secrets in logs
- if: always()
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/redact_secrets.cjs');
- await main();
- env:
- GH_AW_SECRET_NAMES: 'GH_AW_GITHUB_MCP_SERVER_TOKEN,GH_AW_GITHUB_TOKEN,GITHUB_TOKEN'
- SECRET_GH_AW_GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN }}
- SECRET_GH_AW_GITHUB_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN }}
- SECRET_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Append agent step summary
- if: always()
- run: bash "${RUNNER_TEMP}/gh-aw/actions/append_agent_step_summary.sh"
- - name: Copy Safe Outputs
- if: always()
- env:
- GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }}
- run: |
- mkdir -p /tmp/gh-aw
- cp "$GH_AW_SAFE_OUTPUTS" /tmp/gh-aw/safeoutputs.jsonl 2>/dev/null || true
- - name: Ingest agent output
- id: collect_output
- if: always()
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }}
- GH_AW_ALLOWED_DOMAINS: "*.githubusercontent.com,anthropic.com,api.anthropic.com,api.github.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,cdn.playwright.dev,codeload.github.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,files.pythonhosted.org,ghcr.io,github-cloud.githubusercontent.com,github-cloud.s3.amazonaws.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,lfs.github.com,objects.githubusercontent.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,playwright.download.prss.microsoft.com,ppa.launchpad.net,pypi.org,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,sentry.io,statsig.anthropic.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com"
- GITHUB_SERVER_URL: ${{ github.server_url }}
- GITHUB_API_URL: ${{ github.api_url }}
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/collect_ndjson_output.cjs');
- await main();
- - name: Parse agent logs for step summary
- if: always()
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_AGENT_OUTPUT: /tmp/gh-aw/agent-stdio.log
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_claude_log.cjs');
- await main();
- - name: Parse MCP Gateway logs for step summary
- if: always()
- id: parse-mcp-gateway
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_mcp_gateway_log.cjs');
- await main();
- - name: Print firewall logs
- if: always()
- continue-on-error: true
- env:
- AWF_LOGS_DIR: /tmp/gh-aw/sandbox/firewall/logs
- run: |
- # Fix permissions on firewall logs/audit dirs so they can be uploaded as artifacts
- # AWF runs with sudo, creating files owned by root
- sudo chmod -R a+r /tmp/gh-aw/sandbox/firewall 2>/dev/null || true
- # Only run awf logs summary if awf command exists (it may not be installed if workflow failed before install step)
- if command -v awf &> /dev/null; then
- awf logs summary | tee -a "$GITHUB_STEP_SUMMARY"
- else
- echo 'AWF binary not installed, skipping firewall log summary'
- fi
- - name: Parse token usage for step summary
- if: always()
- continue-on-error: true
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/parse_token_usage.cjs');
- await main();
- - name: Print AWF reflect summary
- if: always()
- continue-on-error: true
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- with:
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/awf_reflect_summary.cjs');
- await main();
- - name: Write agent output placeholder if missing
- if: always()
- run: |
- if [ ! -f /tmp/gh-aw/agent_output.json ]; then
- echo '{"items":[]}' > /tmp/gh-aw/agent_output.json
- fi
- - name: Commit cache-memory changes
- if: always()
- env:
- GH_AW_CACHE_DIR: /tmp/gh-aw/cache-memory
- run: bash "${RUNNER_TEMP}/gh-aw/actions/commit_cache_memory_git.sh"
- - name: Upload agent artifacts
- if: always()
- continue-on-error: true
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
- with:
- name: agent
- path: |
- /tmp/gh-aw/aw-prompts/prompt.txt
- /tmp/gh-aw/mcp-logs/
- /tmp/gh-aw/agent_usage.json
- /tmp/gh-aw/agent-stdio.log
- /tmp/gh-aw/pre-agent-audit.txt
- /tmp/gh-aw/agent/
- /tmp/gh-aw/github_rate_limits.jsonl
- /tmp/gh-aw/safeoutputs.jsonl
- /tmp/gh-aw/agent_output.json
- /tmp/gh-aw/awf-config.json
- /tmp/gh-aw/sandbox/firewall/logs/
- /tmp/gh-aw/sandbox/firewall/audit/
- /tmp/gh-aw/sandbox/firewall/awf-reflect.json
- if-no-files-found: ignore
-
- conclusion:
- needs:
- - activation
- - agent
- - safe_outputs
- if: >
- always() && (needs.agent.result != 'skipped' || needs.activation.outputs.lockdown_check_failed == 'true' ||
- needs.activation.outputs.stale_lock_file_failed == 'true')
- runs-on: ubuntu-slim
- permissions:
- contents: read
- pull-requests: write
- concurrency:
- group: "gh-aw-conclusion-gh-aw-pr-review"
- cancel-in-progress: false
- outputs:
- incomplete_count: ${{ steps.report_incomplete.outputs.incomplete_count }}
- noop_message: ${{ steps.noop.outputs.noop_message }}
- tools_reported: ${{ steps.missing_tool.outputs.tools_reported }}
- total_count: ${{ steps.missing_tool.outputs.total_count }}
- steps:
- - name: Setup Scripts
- id: setup
- uses: github/gh-aw-actions/setup@1fd109aa7587e59ad4022e04dcc5fdce4b0cd410 # v0.74.5
- with:
- destination: ${{ runner.temp }}/gh-aw/actions
- job-name: ${{ github.job }}
- trace-id: ${{ needs.activation.outputs.setup-trace-id }}
- env:
- GH_AW_SETUP_WORKFLOW_NAME: "Internal Trusted PR Reviewer"
- GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/gh-aw-pr-review.lock.yml@${{ github.ref }}
- GH_AW_INFO_VERSION: "2.1.126"
- - name: Download agent output artifact
- id: download-agent-output
- continue-on-error: true
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- with:
- name: agent
- path: /tmp/gh-aw/
- - name: Setup agent output environment variable
- id: setup-agent-output-env
- if: steps.download-agent-output.outcome == 'success'
- run: |
- mkdir -p /tmp/gh-aw/
- find "/tmp/gh-aw/" -type f -print
- echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/agent_output.json" >> "$GITHUB_OUTPUT"
- - name: Process no-op messages
- id: noop
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
- GH_AW_NOOP_MAX: "1"
- GH_AW_WORKFLOW_NAME: "Internal Trusted PR Reviewer"
- GH_AW_WORKFLOW_SOURCE: "pulumi-labs/gh-aw-internal/.github/workflows/gh-aw-pr-review.md@8a92f53fac170563f7727cacab2dbedb5d5b9e29"
- GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/pulumi-labs/gh-aw-internal/blob/8a92f53fac170563f7727cacab2dbedb5d5b9e29/.github/workflows/gh-aw-pr-review.md"
- GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
- GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }}
- GH_AW_NOOP_REPORT_AS_ISSUE: "true"
- with:
- github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/handle_noop_message.cjs');
- await main();
- - name: Record missing tool
- id: missing_tool
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
- GH_AW_MISSING_TOOL_CREATE_ISSUE: "true"
- GH_AW_WORKFLOW_NAME: "Internal Trusted PR Reviewer"
- GH_AW_WORKFLOW_SOURCE: "pulumi-labs/gh-aw-internal/.github/workflows/gh-aw-pr-review.md@8a92f53fac170563f7727cacab2dbedb5d5b9e29"
- GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/pulumi-labs/gh-aw-internal/blob/8a92f53fac170563f7727cacab2dbedb5d5b9e29/.github/workflows/gh-aw-pr-review.md"
- with:
- github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/missing_tool.cjs');
- await main();
- - name: Record incomplete
- id: report_incomplete
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
- GH_AW_REPORT_INCOMPLETE_CREATE_ISSUE: "true"
- GH_AW_WORKFLOW_NAME: "Internal Trusted PR Reviewer"
- GH_AW_WORKFLOW_SOURCE: "pulumi-labs/gh-aw-internal/.github/workflows/gh-aw-pr-review.md@8a92f53fac170563f7727cacab2dbedb5d5b9e29"
- GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/pulumi-labs/gh-aw-internal/blob/8a92f53fac170563f7727cacab2dbedb5d5b9e29/.github/workflows/gh-aw-pr-review.md"
- with:
- github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/report_incomplete_handler.cjs');
- await main();
- - name: Handle agent failure
- id: handle_agent_failure
- if: always()
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
- GH_AW_WORKFLOW_NAME: "Internal Trusted PR Reviewer"
- GH_AW_WORKFLOW_SOURCE: "pulumi-labs/gh-aw-internal/.github/workflows/gh-aw-pr-review.md@8a92f53fac170563f7727cacab2dbedb5d5b9e29"
- GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/pulumi-labs/gh-aw-internal/blob/8a92f53fac170563f7727cacab2dbedb5d5b9e29/.github/workflows/gh-aw-pr-review.md"
- GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
- GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }}
- GH_AW_WORKFLOW_ID: "gh-aw-pr-review"
- GH_AW_ACTION_FAILURE_ISSUE_EXPIRES_HOURS: "168"
- GH_AW_ENGINE_ID: "claude"
- GH_AW_SECRET_VERIFICATION_RESULT: ${{ needs.activation.outputs.secret_verification_result }}
- GH_AW_CHECKOUT_PR_SUCCESS: ${{ needs.agent.outputs.checkout_pr_success }}
- GH_AW_ENGINE_API_HOSTS: "api.anthropic.com"
- GH_AW_LOCKDOWN_CHECK_FAILED: ${{ needs.activation.outputs.lockdown_check_failed }}
- GH_AW_STALE_LOCK_FILE_FAILED: ${{ needs.activation.outputs.stale_lock_file_failed }}
- GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e Reviewed by [{workflow_name}]({run_url})\",\"runStarted\":\"Started automated PR review for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}.\",\"runSuccess\":\"Finished automated PR review for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}.\",\"runFailure\":\"Automated PR review failed for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }} ({status}).\"}"
- GH_AW_GROUP_REPORTS: "false"
- GH_AW_FAILURE_REPORT_AS_ISSUE: "true"
- GH_AW_MISSING_TOOL_REPORT_AS_FAILURE: "true"
- GH_AW_MISSING_DATA_REPORT_AS_FAILURE: "true"
- GH_AW_TIMEOUT_MINUTES: "15"
- GH_AW_CACHE_MEMORY_ENABLED: "true"
- with:
- github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/handle_agent_failure.cjs');
- await main();
-
- pre_activation:
- if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
- runs-on: ubuntu-slim
- outputs:
- activated: ${{ steps.check_membership.outputs.is_team_member == 'true' }}
- matched_command: ''
- setup-trace-id: ${{ steps.setup.outputs.trace-id }}
- steps:
- - name: Setup Scripts
- id: setup
- uses: github/gh-aw-actions/setup@1fd109aa7587e59ad4022e04dcc5fdce4b0cd410 # v0.74.5
- with:
- destination: ${{ runner.temp }}/gh-aw/actions
- job-name: ${{ github.job }}
- env:
- GH_AW_SETUP_WORKFLOW_NAME: "Internal Trusted PR Reviewer"
- GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/gh-aw-pr-review.lock.yml@${{ github.ref }}
- GH_AW_INFO_VERSION: "2.1.126"
- - name: Check team membership for workflow
- id: check_membership
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_REQUIRED_ROLES: "admin,maintainer,write"
- with:
- github-token: ${{ secrets.GITHUB_TOKEN }}
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs');
- await main();
-
- safe_outputs:
- needs:
- - activation
- - agent
- if: (!cancelled()) && needs.agent.result != 'skipped'
- runs-on: ubuntu-slim
- permissions:
- contents: read
- pull-requests: write
- timeout-minutes: 15
- env:
- GH_AW_CALLER_WORKFLOW_ID: "${{ github.repository }}/gh-aw-pr-review"
- GH_AW_EFFECTIVE_TOKENS: ${{ needs.agent.outputs.effective_tokens }}
- GH_AW_ENGINE_ID: "claude"
- GH_AW_ENGINE_MODEL: ${{ needs.agent.outputs.model }}
- GH_AW_SAFE_OUTPUT_MESSAGES: "{\"footer\":\"\\u003e Reviewed by [{workflow_name}]({run_url})\",\"runStarted\":\"Started automated PR review for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}.\",\"runSuccess\":\"Finished automated PR review for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}.\",\"runFailure\":\"Automated PR review failed for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }} ({status}).\"}"
- GH_AW_WORKFLOW_ID: "gh-aw-pr-review"
- GH_AW_WORKFLOW_NAME: "Internal Trusted PR Reviewer"
- GH_AW_WORKFLOW_SOURCE: "pulumi-labs/gh-aw-internal/.github/workflows/gh-aw-pr-review.md@8a92f53fac170563f7727cacab2dbedb5d5b9e29"
- GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/pulumi-labs/gh-aw-internal/blob/8a92f53fac170563f7727cacab2dbedb5d5b9e29/.github/workflows/gh-aw-pr-review.md"
- outputs:
- code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
- code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
- create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
- create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
- process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
- process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
- steps:
- - name: Setup Scripts
- id: setup
- uses: github/gh-aw-actions/setup@1fd109aa7587e59ad4022e04dcc5fdce4b0cd410 # v0.74.5
- with:
- destination: ${{ runner.temp }}/gh-aw/actions
- job-name: ${{ github.job }}
- trace-id: ${{ needs.activation.outputs.setup-trace-id }}
- env:
- GH_AW_SETUP_WORKFLOW_NAME: "Internal Trusted PR Reviewer"
- GH_AW_CURRENT_WORKFLOW_REF: ${{ github.repository }}/.github/workflows/gh-aw-pr-review.lock.yml@${{ github.ref }}
- GH_AW_INFO_VERSION: "2.1.126"
- - name: Download agent output artifact
- id: download-agent-output
- continue-on-error: true
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- with:
- name: agent
- path: /tmp/gh-aw/
- - name: Setup agent output environment variable
- id: setup-agent-output-env
- if: steps.download-agent-output.outcome == 'success'
- run: |
- mkdir -p /tmp/gh-aw/
- find "/tmp/gh-aw/" -type f -print
- echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/agent_output.json" >> "$GITHUB_OUTPUT"
- - name: Configure GH_HOST for enterprise compatibility
- id: ghes-host-config
- shell: bash
- run: |
- # Derive GH_HOST from GITHUB_SERVER_URL so the gh CLI targets the correct
- # GitHub instance (GHES/GHEC). On github.com this is a harmless no-op.
- GH_HOST="${GITHUB_SERVER_URL#https://}"
- GH_HOST="${GH_HOST#http://}"
- echo "GH_HOST=${GH_HOST}" >> "$GITHUB_ENV"
- - name: Process Safe Outputs
- id: process_safe_outputs
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
- env:
- GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
- GH_AW_ALLOWED_DOMAINS: "*.githubusercontent.com,anthropic.com,api.anthropic.com,api.github.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,cdn.playwright.dev,codeload.github.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,files.pythonhosted.org,ghcr.io,github-cloud.githubusercontent.com,github-cloud.s3.amazonaws.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,lfs.github.com,objects.githubusercontent.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,playwright.download.prss.microsoft.com,ppa.launchpad.net,pypi.org,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,sentry.io,statsig.anthropic.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com"
- GITHUB_SERVER_URL: ${{ github.server_url }}
- GITHUB_API_URL: ${{ github.api_url }}
- GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG: "{\"create_pull_request_review_comment\":{\"max\":12,\"side\":\"RIGHT\",\"target\":\"${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}\",\"target-repo\":\"${{ github.repository }}\"},\"create_report_incomplete_issue\":{},\"missing_data\":{},\"missing_tool\":{},\"noop\":{\"max\":1,\"report-as-issue\":\"true\"},\"report_incomplete\":{},\"resolve_pull_request_review_thread\":{\"max\":12,\"target\":\"${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}\",\"target-repo\":\"${{ github.repository }}\"},\"submit_pull_request_review\":{\"allowed_events\":[\"APPROVE\",\"REQUEST_CHANGES\",\"COMMENT\"],\"max\":1,\"target\":\"${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}\"}}"
- with:
- github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- script: |
- const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
- setupGlobals(core, github, context, exec, io, getOctokit);
- const { main } = require('${{ runner.temp }}/gh-aw/actions/safe_output_handler_manager.cjs');
- await main();
- - name: Upload Safe Outputs Items
- if: always()
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
- with:
- name: safe-outputs-items
- path: |
- /tmp/gh-aw/safe-output-items.jsonl
- /tmp/gh-aw/temporary-id-map.json
- if-no-files-found: ignore
-
diff --git a/.github/workflows/gh-aw-pr-review.md b/.github/workflows/gh-aw-pr-review.md
deleted file mode 100644
index fa45754..0000000
--- a/.github/workflows/gh-aw-pr-review.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-on:
- pull_request:
- types:
- - opened
- - ready_for_review
- workflow_dispatch:
- inputs:
- pr_number:
- description: Pull request number to review
- required: true
- type: string
-permissions:
- contents: read
- id-token: write
- pull-requests: read
-imports:
-- shared/review.md
-- shared/plugins/code-review/code-review.md
-description: Automated PR review for trusted internal contributors.
-source: pulumi-labs/gh-aw-internal/.github/workflows/gh-aw-pr-review.md@8a92f53fac170563f7727cacab2dbedb5d5b9e29
-strict: true
-timeout-minutes: 15
----
-# Internal Trusted PR Reviewer
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
deleted file mode 100644
index 1ab593a..0000000
--- a/.github/workflows/lint.yml
+++ /dev/null
@@ -1,66 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten when regenerated by https://github.com/pulumi/ci-mgmt
-
-name: lint
-
-on:
- workflow_call:
- inputs: {}
-
-env:
- 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
- PULUMI_GO_DEP_ROOT: ${{ github.workspace }}/..
- PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
- PULUMI_PULUMI_ENABLE_JOURNALING: "true"
- TF_APPEND_USER_AGENT: pulumi
-
-jobs:
- lint:
- name: lint
- runs-on: ubuntu-latest
- permissions:
- contents: read
- pull-requests: write
- id-token: write # For ESC secrets.
- steps:
- - name: Checkout Repo
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - name: Setup mise
- uses: jdx/mise-action@8d3b0ba20a9cea7b883d922ea958553c941ab082
- env:
- MISE_FETCH_REMOTE_VERSIONS_TIMEOUT: 30s
- with:
- version: 2026.3.7
- github_token: ${{ steps.app-auth.outputs.token }}
- cache_save: false # A different job handles caching our tools.
- - name: prepare workspace
- continue-on-error: true
- run: make prepare_local_workspace
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: lint
- run: make lint
diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml
deleted file mode 100644
index e5695e5..0000000
--- a/.github/workflows/prerelease.yml
+++ /dev/null
@@ -1,603 +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
- TRAVIS_OS_NAME: linux
- GOVERSION: "1.21.x"
- NODEVERSION: "20.x"
- PYTHONVERSION: "3.11.8"
- DOTNETVERSION: "8.0.x"
- JAVAVERSION: "11"
- 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
- PULUMI_GO_DEP_ROOT: ${{ github.workspace }}/..
- PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
- TF_APPEND_USER_AGENT: pulumi
- IS_PRERELEASE: true
-
-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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- cache: 'true'
- github_token: ${{ secrets.GITHUB_TOKEN }}
- - if: github.event_name == 'pull_request'
- name: Install Schema Tools
- uses: jaxxstorm/action-install-gh-release@25e24d2d23ae098373794ef1d6faecb48ee52da8 # v3.0.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
- - 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@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
- with:
- name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
- path: ${{ github.workspace }}/bin/provider.tar.gz
- - name: Test Provider Library
- run: make test_provider
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Upload coverage reports to Codecov
- uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1
- env:
- CODECOV_TOKEN: ${{ steps.esc-secrets.outputs.CODECOV_TOKEN }}
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- github_token: ${{ steps.app-auth.outputs.token }}
- - name: Download Provider Binary
- uses: ./.github/actions/download-provider
- - 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
- - 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@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
- 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@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- github_token: ${{ steps.app-auth.outputs.token }}
- - name: Download Provider Binary
- uses: ./.github/actions/download-provider
- - name: Download SDK
- if: ${{ matrix.language != 'yaml' }}
- uses: ./.github/actions/download-sdk
- with:
- language: ${{ 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@197ccaa42ab49560ce838a3010eb8345ce086896
- 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@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- github_token: ${{ steps.app-auth.outputs.token }}
- - 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: Configure AWS Credentials
- uses: aws-actions/configure-aws-credentials@d979d5b3a71173a29b74b5b88418bfda9437d885 # v6.1.1
- 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_ACCOUNT_ENDPOINT: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_ACCOUNT_ENDPOINT }}
- AZURE_SIGNING_ACCOUNT_NAME: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_ACCOUNT_NAME }}
- AZURE_SIGNING_CERT_PROFILE_NAME: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CERT_PROFILE_NAME }}
- 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_ACCOUNT_ENDPOINT == '' && steps.esc-secrets.outputs.AZURE_SIGNING_ACCOUNT_NAME == '' && steps.esc-secrets.outputs.AZURE_SIGNING_CERT_PROFILE_NAME == '' }}
- 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@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Checkout Scripts Repo
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- with:
- path: ci-scripts
- repository: pulumi/scripts
- - run: echo "ci-scripts" >> .git/info/exclude
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- github_token: ${{ steps.app-auth.outputs.token }}
- - name: Download python SDK
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- 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@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- 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@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- 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@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- github_token: ${{ steps.app-auth.outputs.token }}
- - name: Download java SDK
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- 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@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
- 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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- with:
- lfs: true
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Download go SDK
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- 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 a02dd25..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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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 1689d70..0000000
--- a/.github/workflows/release.yml
+++ /dev/null
@@ -1,639 +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
- TRAVIS_OS_NAME: linux
- GOVERSION: "1.21.x"
- NODEVERSION: "20.x"
- PYTHONVERSION: "3.11.8"
- DOTNETVERSION: "8.0.x"
- JAVAVERSION: "11"
- 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
- PULUMI_GO_DEP_ROOT: ${{ github.workspace }}/..
- PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
- TF_APPEND_USER_AGENT: pulumi
-
-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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- cache: 'true'
- github_token: ${{ steps.app-auth.outputs.token }}
- - if: github.event_name == 'pull_request'
- name: Install Schema Tools
- uses: jaxxstorm/action-install-gh-release@25e24d2d23ae098373794ef1d6faecb48ee52da8 # v3.0.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
- - 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@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
- with:
- name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
- path: ${{ github.workspace }}/bin/provider.tar.gz
- - name: Test Provider Library
- run: make test_provider
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Upload coverage reports to Codecov
- uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1
- env:
- CODECOV_TOKEN: ${{ steps.esc-secrets.outputs.CODECOV_TOKEN }}
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- github_token: ${{ steps.app-auth.outputs.token }}
- - name: Download Provider Binary
- uses: ./.github/actions/download-provider
- - 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
- - 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@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
- 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@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- github_token: ${{ steps.app-auth.outputs.token }}
- - name: Download Provider Binary
- uses: ./.github/actions/download-provider
- - name: Download SDK
- if: ${{ matrix.language != 'yaml' }}
- uses: ./.github/actions/download-sdk
- with:
- language: ${{ 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@197ccaa42ab49560ce838a3010eb8345ce086896
- 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@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- github_token: ${{ steps.app-auth.outputs.token }}
- - 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: Configure AWS Credentials
- uses: aws-actions/configure-aws-credentials@d979d5b3a71173a29b74b5b88418bfda9437d885 # v6.1.1
- 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_ACCOUNT_ENDPOINT: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_ACCOUNT_ENDPOINT }}
- AZURE_SIGNING_ACCOUNT_NAME: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_ACCOUNT_NAME }}
- AZURE_SIGNING_CERT_PROFILE_NAME: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CERT_PROFILE_NAME }}
- 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_ACCOUNT_ENDPOINT == '' && steps.esc-secrets.outputs.AZURE_SIGNING_ACCOUNT_NAME == '' && steps.esc-secrets.outputs.AZURE_SIGNING_CERT_PROFILE_NAME == '' }}
- 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@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Checkout Scripts Repo
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- with:
- path: ci-scripts
- repository: pulumi/scripts
- - run: echo "ci-scripts" >> .git/info/exclude
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- github_token: ${{ steps.app-auth.outputs.token }}
- - name: Download python SDK
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- 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@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- 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@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- 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@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- github_token: ${{ steps.app-auth.outputs.token }}
- - name: Download java SDK
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- 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@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
- 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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- with:
- lfs: true
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Download go SDK
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- 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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - name: Install pulumictl
- uses: jaxxstorm/action-install-gh-release@25e24d2d23ae098373794ef1d6faecb48ee52da8 # v3.0.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 0ae8774..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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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@e8674b075228eee787fea43ef493e45ece1004c9 # v5.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@e8674b075228eee787fea43ef493e45ece1004c9 # v5.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 aada908..0000000
--- a/.github/workflows/run-acceptance-tests.yml
+++ /dev/null
@@ -1,536 +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
- TRAVIS_OS_NAME: linux
- GOVERSION: "1.21.x"
- NODEVERSION: "20.x"
- PYTHONVERSION: "3.11.8"
- DOTNETVERSION: "8.0.x"
- JAVAVERSION: "11"
- 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
- PULUMI_GO_DEP_ROOT: ${{ github.workspace }}/..
- PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
- PULUMI_PULUMI_ENABLE_JOURNALING: "true"
- TF_APPEND_USER_AGENT: pulumi
- 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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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@e8674b075228eee787fea43ef493e45ece1004c9 # v5.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- cache: 'true'
- github_token: ${{ steps.app-auth.outputs.token }}
- - if: github.event_name == 'pull_request'
- name: Install Schema Tools
- uses: jaxxstorm/action-install-gh-release@25e24d2d23ae098373794ef1d6faecb48ee52da8 # v3.0.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
- # This worktree check is a safeguard against someone forgetting to
- # re-build and commit locally, but we handle that commit automatically in
- # the case of dependency bumps.
- continue-on-error: ${{ contains(github.actor, 'renovate') }}
- - name: Commit SDK changes for Renovate
- if: steps.worktreeClean.outcome == 'failure' &&
- contains(github.actor, 'renovate') && github.event_name ==
- 'pull_request'
- shell: bash
- run: >
- 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 provider/cmd/pulumi-resource-docker-build/schema.json
-
- 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@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
- with:
- name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
- path: ${{ github.workspace }}/bin/provider.tar.gz
- - name: Test Provider Library
- run: make test_provider
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Upload coverage reports to Codecov
- uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1
- env:
- CODECOV_TOKEN: ${{ steps.esc-secrets.outputs.CODECOV_TOKEN }}
- - if: failure() && github.event_name == 'push'
- name: Notify Slack
- uses: 8398a7/action-slack@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- github_token: ${{ steps.app-auth.outputs.token }}
- - name: Download provider
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- 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
- continue-on-error: ${{ contains(github.actor, 'renovate') }}
- - name: Commit SDK changes for Renovate
- if: steps.worktreeClean.outcome == 'failure' &&
- contains(github.actor, 'renovate') && github.event_name ==
- 'pull_request'
- shell: bash
- run: >
- 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 provider/cmd/pulumi-resource-docker-build/schema.json
-
- 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@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
- 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@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - id: version
- name: Set Provider Version
- uses: pulumi/provider-version-action@3a647064cf4697c7c6352b9a1d9e554450cbe957 # v1.6.1
- with:
- set-env: PROVIDER_VERSION
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- github_token: ${{ steps.app-auth.outputs.token }}
- - name: Download provider
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- 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@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- 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@197ccaa42ab49560ce838a3010eb8345ce086896
- 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@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3.19.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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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@77639353504055053524efa7a3719aaf0b731ce9 # v1.2.4
- 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:
- if: github.event_name == 'repository_dispatch' ||
- github.event.pull_request.head.repo.full_name == github.repository
- name: lint
- uses: ./.github/workflows/lint.yml
- secrets: inherit
diff --git a/.github/workflows/shared/plugins/code-review/code-review.md b/.github/workflows/shared/plugins/code-review/code-review.md
deleted file mode 100644
index 242934b..0000000
--- a/.github/workflows/shared/plugins/code-review/code-review.md
+++ /dev/null
@@ -1,214 +0,0 @@
----
-description: High-signal PR review for gh-aw workflows using safe outputs
----
-
-Provide a code review for the given pull request.
-
-**Agent assumptions (applies to all agents and subagents):**
-- All tools are functional and will work without error. Do not test tools or make exploratory calls. Make sure this is clear to every subagent that is launched.
-- Only call a tool if it is required to complete the task. Every tool call should have a clear purpose.
-- Use GitHub MCP tools for repository reads. Do not use `gh` CLI commands for repository inspection or for posting review output.
-- Use the workflow PR number as the authoritative target.
-- Review output must be terse and issue-focused. Do not praise the PR, narrate checks that passed, explain why code is correct, or offer "good change" commentary.
-- Use only gh-aw safe outputs for review side effects:
- - `create-pull-request-review-comment` for actionable inline findings on changed lines
- - `resolve-pull-request-review-thread` for unresolved bot-authored review threads that are now fixed or clearly acknowledged
- - `submit-pull-request-review` for the final review decision
- - `noop` when no action should be taken
-- Use cache-memory only for short-lived continuity and deduplication hints. Treat live PR state and current review threads as the source of truth.
-- Never post free-form issue comments or use any side channel for review output.
-- Respect the workflow safe-output limits. Prioritize the highest-signal unique findings and keep the inline review set within the configured maximum.
-- Consult `.gitattributes` when relevant and treat files matched there as generated by default. Ignore findings that exist only in generated outputs such as `.lock.yml` files unless the corresponding source-of-truth files show a real behavioral problem.
-
-To do this, follow these steps precisely:
-
-1. Create a short todo list for yourself before starting.
-
-2. Launch a fast subagent to check if any of the following are true:
- - The pull request is closed
- - The pull request is a draft
- - The pull request does not need code review (e.g. automated PR, trivial change that is obviously correct)
- - Required PR context cannot be read from the workflow tools
-
- If any condition is true, call `noop` with a brief reason and stop.
-
-Note: Do not skip solely because prior automated review comments exist. Use prior comments for deduplication and stale-thread cleanup instead.
-
-3. Read any prior review memory for this PR from cache-memory before you start detailed analysis.
-
- Use a PR-specific file such as:
- - `/tmp/gh-aw/cache-memory/pr-${PR_NUMBER}.json`
-
- If a prior memory file exists, use it only as a hint for:
- - Previously reported issues
- - Dedupe patterns
- - Prior review timestamps
- - Risk areas worth re-checking
-
- Do not trust cache-memory over current GitHub state. If memory conflicts with the live PR, changed files, or review threads, trust the live PR and ignore stale memory.
-
-4. Launch a fast subagent to return a list of file paths (not their contents) for all relevant `CLAUDE.md` files including:
- - The root CLAUDE.md file, if it exists
- - Any CLAUDE.md files in directories containing files modified by the pull request
-
-5. Launch a subagent to summarize:
- - The PR title and description
- - The changed files
- - The main behavioral changes in the diff
- - Any obvious risk areas worth checking carefully
-
-6. Fetch existing review comments and review threads on the PR before preparing any new findings. Use them to identify:
- - Similar issues already flagged
- - Threads where a human already acknowledged the feedback
- - Comments on code that has changed since the earlier review and may now be stale
- - Unresolved bot-authored review threads that may now be fixed or obsolete
-
-7. Launch 4 review subagents in parallel. Each agent should return a list of candidate issues, where each issue includes:
- - A concise description
- - The reason it was flagged (for example `CLAUDE.md adherence` or `bug`)
- - The changed file path
- - The changed line or closest changed hunk
- - Why the issue is likely real
-
- Agents 1 + 2: CLAUDE.md compliance sonnet agents
- Audit changes for `CLAUDE.md` compliance in parallel. When evaluating a file, only consider `CLAUDE.md` files that share a path scope with that file or its parents.
-
- Agent 3: bug-focused review agent
- Scan for obvious bugs. Focus only on the diff itself without reading extra context. Flag only significant bugs; ignore nitpicks and likely false positives. Do not flag issues that you cannot validate without looking at context outside of the git diff.
-
- Agent 4: behavior-focused review agent
- Look for problems introduced by the new code, including security issues, incorrect logic, regressions, and missing error handling. Only look for issues that fall within changed code.
-
- **CRITICAL: We only want HIGH SIGNAL issues.** Flag issues where:
- - The code will fail to compile or parse (syntax errors, type errors, missing imports, unresolved references)
- - The code will definitely produce wrong results regardless of inputs (clear logic errors)
- - The code introduces a clear security or regression bug in changed lines
- - Clear, unambiguous `CLAUDE.md` violations where you can quote the exact rule being broken
-
- Do NOT flag:
- - Code style or quality concerns
- - Potential issues that depend on specific inputs or state
- - Subjective suggestions or improvements
-
- If you are not certain an issue is real, do not flag it. False positives erode trust and waste reviewer time.
-
- Each review subagent should receive the PR title and description so it can evaluate intent.
-
-8. For each candidate issue, launch validation subagents in parallel. Each validator should receive the PR title, description, issue description, affected file, and affected hunk. The validator must confirm that the issue is real with high confidence.
-
- For bug and logic issues, verify the changed code actually causes the stated problem.
-
- For `CLAUDE.md` issues, verify both:
- - The cited rule exists
- - The rule applies to that file path and is actually violated
-
-9. Filter out any issue that fails validation.
-
-10. Deduplicate and prune the validated issue list. Remove:
- - Issues already covered by an existing review comment
- - Issues in threads where a human has already acknowledged the feedback
- - Issues that were present in an earlier revision but are fixed in the latest code
- - Duplicate findings reported by multiple subagents
- - Findings that are not on changed lines or cannot be tied to a changed hunk
- - Findings that only came from cache-memory and are not confirmed by the current PR state
-
- Also create a separate internal list of review threads to resolve. A thread is eligible for resolution only when all of the following are true:
- - The thread is currently unresolved
- - The thread was started by this automation or another bot, not by a human reviewer
- - The underlying issue is fixed in the latest diff, outdated, or explicitly acknowledged by a human as intentionally left as-is
- - You have high confidence that resolving it will not hide an outstanding real issue
-
- Never resolve human-authored review threads. When uncertain, leave the thread unresolved.
-
-11. Classify the remaining issues:
- - `Blocking`: correctness, security, regression, data loss, or clear required-rule violations
- - `Non-blocking`: actionable but not merge-blocking concerns that are still worth interrupting the author for now
-
- Drop any candidate that is merely:
- - praise
- - reassurance
- - a follow-up idea
- - a readability suggestion with no concrete risk
- - an observation that does not require author action
-
-12. Produce a short internal summary of findings for yourself:
- - If issues remain, list the highest-signal ones first
- - If no issues remain, summarize that no actionable high-signal issues were found
-
-13. If no actionable issues remain, submit exactly one final review with `submit-pull-request-review`:
- - Use `APPROVE`
- - Use one short sentence only, such as `No actionable issues found.`
- - Do not create inline comments
- - Do not include praise, summaries of what was checked, or correctness narration
- - Before stopping, write a compact review memory file for this PR containing:
- - review timestamp
- - PR number
- - files reviewed
- - summary of what was checked
- - `issues_reported: []`
- - Stop after the final review is submitted and memory is updated
-
-14. If actionable issues remain, choose the highest-signal unique issues up to the safe-output comment limit. Create a list of planned inline comments for yourself before posting anything.
-
- Prefer zero comments over low-signal comments. Non-blocking comments should be rare.
-
-15. Post one inline comment per chosen issue using `create-pull-request-review-comment`. For each comment:
- - Provide a brief description of the issue
- - Explain why it matters
- - Reference the exact changed line
- - Cite the relevant `CLAUDE.md` rule when applicable
- - Keep the comment concise and actionable
- - Do not post comments that merely suggest optional follow-up cleanup or extra documentation
- - Do not post comments whose conclusion is that the code is acceptable as-is
- - Do not post duplicate comments for the same issue
-
-16. Resolve eligible stale review threads using `resolve-pull-request-review-thread` before submitting the final review.
- - Resolve only threads from your internal resolution list
- - Resolve only bot-authored threads
- - Do not add explanatory comments when resolving
- - If no threads qualify, do nothing
-
-17. Submit exactly one final review using `submit-pull-request-review`:
- - Use `REQUEST_CHANGES` when at least one blocking issue remains
- - Use `APPROVE` otherwise, including when only non-blocking inline comments were left
- - Do not use `COMMENT` as the final review state
- - Keep the summary to one or two short sentences
- - Do not restate inline comments in the final review; point readers to the inline comments instead
- - Do not include praise, correctness checklists, or "overall LGTM" framing unless there are zero inline comments and you are using the exact terse approval style above
-
-18. After the final review is submitted, update the PR-specific cache-memory file with a compact record of this review. Store only short-lived operational state such as:
- - review timestamp
- - PR number
- - files reviewed
- - issue fingerprints or short summaries
- - whether the final review was `APPROVE` or `REQUEST_CHANGES`
-
- Do not store secrets, tokens, personal data, or large blobs. Keep the file concise so future runs can use it for continuity and dedupe.
-
-Use this list when evaluating issues in Steps 4 and 5 (these are false positives, do NOT flag):
-
-- Pre-existing issues
-- Something that appears to be a bug but is actually correct
-- Pedantic nitpicks that a senior engineer would not flag
-- Issues that a linter will catch (do not run the linter to verify)
-- General code quality concerns (e.g., lack of test coverage, general security issues) unless explicitly required in CLAUDE.md
-- Issues mentioned in CLAUDE.md but explicitly silenced in the code (e.g., via a lint ignore comment)
-- Differences that exist only in files classified as generated by `.gitattributes`, unless they expose a real issue in the source workflow, prompt, or other source-of-truth file
-- Explanations that a change is good, correct, well-structured, or acceptable as-is
-- Non-blocking observations that do not require the author to change anything now
-- Requests for extra comments or documentation unless their absence creates a concrete correctness risk
-
-Notes:
-
-- Use GitHub tools for all repository reads. Do not use web fetch.
-- Always operate on the workflow PR target rather than guessing from local git state.
-- Inline comments should only be created for actionable issues on changed lines.
-- If you leave inline comments, the final review should not repeat them.
-- Cache-memory is best-effort and may be missing or stale. Use it to improve continuity, never to override current repository state.
-- When linking to code in an inline comment, use a full GitHub blob URL with a full SHA and a line range, for example: https://github.com/anthropics/claude-code/blob/c21d3c10bc8e898b7ac1a2d745bdc9bc4e423afe/package.json#L10-L15
- - Requires full git sha
- - Do not use shell substitution in the URL
- - Repo name must match the repo you're code reviewing
- - Use `#L[start]-L[end]`
- - Provide at least one line of context before and after when possible
-- If context checks fail or the PR is not reviewable, call `noop` with a brief explanation instead of exiting silently.
diff --git a/.github/workflows/shared/review.md b/.github/workflows/shared/review.md
deleted file mode 100644
index 48f0403..0000000
--- a/.github/workflows/shared/review.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-permissions:
- contents: read
- pull-requests: read
- id-token: write
-engine:
- id: claude
- env:
- ANTHROPIC_API_KEY: ${{ steps.esc-secrets.outputs.ANTHROPIC_API_KEY || '__GH_AW_ACTIVATION_PLACEHOLDER__' }}
-steps:
- - env:
- ESC_ACTION_ENVIRONMENT: imports/github-secrets
- 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@6cf9520e68354d86f81c455e8d43eabd58f5c9f5 # v1.5.0
- - name: Validate ESC secret output
- env:
- ANTHROPIC_API_KEY_FROM_ESC: ${{ steps.esc-secrets.outputs.ANTHROPIC_API_KEY }}
- run: |
- test -n "$ANTHROPIC_API_KEY_FROM_ESC" || {
- echo "ESC did not return ANTHROPIC_API_KEY";
- exit 1;
- }
-tools:
- cache-memory: true
- github:
- toolsets: [pull_requests, repos]
-safe-outputs:
- threat-detection: false
- create-pull-request-review-comment:
- max: 12
- side: "RIGHT"
- target: "${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}"
- target-repo: "${{ github.repository }}"
- resolve-pull-request-review-thread:
- max: 12
- target: "${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}"
- target-repo: "${{ github.repository }}"
- submit-pull-request-review:
- max: 1
- allowed-events: [APPROVE, REQUEST_CHANGES, COMMENT]
- target: "${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}"
- noop:
- max: 1
- messages:
- footer: "> Reviewed by [{workflow_name}]({run_url})"
- run-started: "Started automated PR review for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}."
- run-success: "Finished automated PR review for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}."
- run-failure: "Automated PR review failed for #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }} ({status})."
----
-
-
-Review pull request #${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }} in repository `${{ github.repository }}`.
-
-Workflow-specific rules:
-- Use `${{ github.event.pull_request.number || github.event.inputs.pr_number || github.event.issue.number }}` as the authoritative PR target.
-- Treat the imported review prompt as the source of the review procedure.
-- Use only gh-aw safe outputs for side effects:
- - `create-pull-request-review-comment` for actionable inline findings on changed lines
- - `resolve-pull-request-review-thread` for previously reported bot-authored threads that are now fixed or clearly acknowledged
- - `submit-pull-request-review` for the final review
- - `noop` when the PR is not reviewable or required context is missing
-- Submit exactly one final review:
- - `REQUEST_CHANGES` when at least one blocking issue exists.
- - `APPROVE` otherwise, including when only non-blocking observations exist.
- - Do not submit `COMMENT` as the final review state.
-- Do not post free-form issue comments outside safe outputs.
-- Respect the configured inline comment limit and prioritize the highest-signal unique findings.
-- Use cache-memory only as a best-effort continuity aid; live PR state and current review threads are authoritative.
-- Ignore discovery steps intended for runs without PR context.
diff --git a/.github/workflows/weekly-pulumi-update.yml b/.github/workflows/weekly-pulumi-update.yml
deleted file mode 100644
index 0e44b66..0000000
--- a/.github/workflows/weekly-pulumi-update.yml
+++ /dev/null
@@ -1,115 +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
- TRAVIS_OS_NAME: linux
- GOVERSION: "1.21.x"
- NODEVERSION: "20.x"
- PYTHONVERSION: "3.11.8"
- DOTNETVERSION: "8.0.x"
- JAVAVERSION: "11"
- 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
- PULUMI_GO_DEP_ROOT: ${{ github.workspace }}/..
- PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
- PULUMI_PULUMI_ENABLE_JOURNALING: "true"
- TF_APPEND_USER_AGENT: pulumi
-
-jobs:
- weekly-pulumi-update:
- runs-on: ubuntu-latest
- permissions: write-all
- steps:
- - name: Checkout Repo
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- 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
- - uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- id: app-auth
- with:
- app-id: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_APP_ID }}
- private-key: ${{ steps.esc-secrets.outputs.PULUMI_PROVIDER_AUTOMATION_PRIVATE_KEY }}
- owner: ${{ github.repository_owner }}
- - name: Setup Tools
- uses: ./.github/actions/setup-tools
- with:
- github_token: ${{ steps.app-auth.outputs.token }}
- - 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 }}
-
- gh repo view pulumi/pulumi --json latestRelease --jq .latestRelease.tagName | sed 's/^v//' > .pulumi.version
-
- VERSION=$(cat .pulumi.version) find . -name go.mod -execdir sh -c 'go get github.com/pulumi/pulumi/pkg/v3@v${VERSION} github.com/pulumi/pulumi/sdk/v3@v${VERSION}; go mod tidy' \;
-
- 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}"
-
- gh pr create -t "$msg" -b "$msg"
- 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 85ea1e7..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,22 +0,0 @@
-/vendor/
-**/bin/
-**/obj/
-**/node_modules/
-**/.vs
-**/.idea
-**/.ionide
-**/.vscode
-*.swp
-.pulumi
-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 f7c7984..0000000
--- a/.golangci.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-# WARNING: This file is autogenerated - changes will be overwritten when regenerated by https://github.com/pulumi/ci-mgmt
-
-version: "2"
-linters:
- enable:
- - goconst
- - gosec
- - lll
- - misspell
- - nakedret
- - revive
- - unconvert
- exclusions:
- generated: lax
- presets:
- - comments
- - common-false-positives
- - legacy
- - std-error-handling
- paths:
- - schema.go
- - pulumiManifest.go
- - pkg/vendored
- - third_party$
- - builtin$
- - examples$
- rules:
- - linters:
- - revive
- path: pkg/
- text: "var-naming" # https://github.com/pulumi/ci-mgmt/issues/2100
-formatters:
- enable:
- - gci
- - gofmt
- settings:
- 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-docker-build) # Custom section: local imports
- custom-order: true
- exclusions:
- generated: lax
- paths:
- - schema.go
- - pulumiManifest.go
- - pkg/vendored
- - third_party$
- - builtin$
- - examples$
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 9bb8131..0000000
--- a/.goreleaser.yml
+++ /dev/null
@@ -1,56 +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 67cd30e..0000000
--- a/.pulumi.version
+++ /dev/null
@@ -1 +0,0 @@
-3.239.0
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index bab8c42..0000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,143 +0,0 @@
-## Unreleased
-
-### Fixed
-
-- Fixes a regression where a 404 status code during deletion wasn't considered deleted. (https://github.com/pulumi/pulumi-docker-build/issues/849)
-
-## 0.0.15 (2025-10-17)
-
-### Changed
-
-- Arguments `CacheFromGitHubActions.URL` and `CacheFromGitHubActions.Token` have been removed. If the previous behaviour is desired, set the `ACTIONS_CACHE_URL` and `ACTIONS_RUNTIME_TOKEN` environment variables. (https://github.com/pulumi/pulumi-docker-build/issues/75)
-
-## 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 2478717..0000000
--- a/Makefile
+++ /dev/null
@@ -1,315 +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 := pulumi
-GOGLANGCILINT := golangci-lint
-GOTEST := go test
-
-# 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
- ${GOTEST} -short -v -coverprofile="coverage.txt" -coverpkg=./provider/... -timeout 2h -parallel ${TESTPARALLELISM} ./provider/...
-
-test_examples: install_nodejs_sdk install_dotnet_sdk
- ${GOTEST} -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/hcl
-
-examples/yaml:
- rm -rf ${WORKING_DIR}/examples/yaml/app
- cp -r ${WORKING_DIR}/examples/app ${WORKING_DIR}/examples/yaml/app
-
-examples/go: bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
- $(call example,go)
- @git checkout examples/go/go.mod
-
-examples/nodejs: bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
- $(call example,nodejs)
- @git checkout examples/nodejs/package.json
-
-examples/python: bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
- $(call example,python)
- @git checkout examples/python/requirements.txt
-
-examples/dotnet: bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
- $(call example,dotnet)
- @git checkout examples/dotnet/provider-docker-build.csproj
-
-examples/java: bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
- $(call example,java)
- @git checkout examples/java/pom.xml
-
-examples/hcl: bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
- $(call example,hcl)
-
-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} 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
- @mkdir -p bin
- 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: 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: 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: 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: 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: 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 with Azure Trusted Signing.
-AZURE_SIGNING_CLIENT_ID ?=
-AZURE_SIGNING_CLIENT_SECRET ?=
-AZURE_SIGNING_TENANT_ID ?=
-AZURE_SIGNING_ACCOUNT_ENDPOINT ?=
-AZURE_SIGNING_ACCOUNT_NAME ?=
-AZURE_SIGNING_CERT_PROFILE_NAME ?=
-SKIP_SIGNING ?=
-
-bin/jsign-7.4.jar:
- @mkdir -p bin
- wget https://github.com/ebourg/jsign/releases/download/7.4/jsign-7.4.jar --output-document=bin/jsign-7.4.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-7.4.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_ACCOUNT_ENDPOINT}|${AZURE_SIGNING_ACCOUNT_NAME}|${AZURE_SIGNING_CERT_PROFILE_NAME}|" == *"||"* ]]; 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_ACCOUNT_ENDPOINT, AZURE_SIGNING_ACCOUNT_NAME, AZURE_SIGNING_CERT_PROFILE_NAME"; \
- 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://codesigning.azure.net" | jq -r .accessToken); \
- ENDPOINT_HOST="$${AZURE_SIGNING_ACCOUNT_ENDPOINT#https://}"; \
- ENDPOINT_HOST="$${ENDPOINT_HOST#http://}"; \
- ENDPOINT_HOST="$${ENDPOINT_HOST%/}"; \
- java -jar bin/jsign-7.4.jar \
- --storetype TRUSTEDSIGNING \
- --keystore "$${ENDPOINT_HOST}" \
- --storepass "$${ACCESS_TOKEN}" \
- --alias "${AZURE_SIGNING_ACCOUNT_NAME}/${AZURE_SIGNING_CERT_PROFILE_NAME}" \
- $${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/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/_index.md b/docs/_index.md
deleted file mode 100644
index e4a9664..0000000
--- a/docs/_index.md
+++ /dev/null
@@ -1,428 +0,0 @@
----
-title: Docker Build
-meta_desc: Provides an overview of the Docker Build Provider for Pulumi.
-layout: package
----
-
-The Docker Build provider leverages [buildx and BuildKit](https://docs.docker.com/build/architecture/) to build modern Docker images with Pulumi.
-
-Not to be confused with the earlier
-[Docker](../docker) provider, which is still
-appropriate for managing resources unrelated to building images.
-
-| Provider | Use cases |
-| ---------------- | ----------------------------------------------------------------------- |
-| `@pulumi/docker-build` | Anything related to building images with `docker build`. |
-| `@pulumi/docker` | Everything else -- including running containers and creating networks. |
-
-## Example
-
-If your Pulumi program has a directory called `app` alongside it, containing a
-file named "Dockerfile" (which can be as simple as `FROM alpine` for the
-purpose of example), then the code below shows how to build a multi-platform
-image, publish it to a remote AWS ECR registry, and use an [inline
-cache](https://docs.docker.com/build/cache/backends/inline/) to speed up
-subsequent builds.
-
-{{< chooser language "typescript,python,csharp,go,yaml,java" >}}
-
-{{% choosable language typescript %}}
-
-```typescript
-import * as aws from "@pulumi/aws";
-import * as docker_build from "@pulumi/docker-build";
-
-// Create an ECR repository for pushing.
-const ecrRepository = new aws.ecr.Repository("ecr-repository", {});
-
-// Grab auth credentials for ECR.
-const authToken = aws.ecr.getAuthorizationTokenOutput({
- registryId: ecrRepository.registryId,
-});
-
-// Build and push an image to ECR with inline caching.
-const myImage = new docker_build.Image("my-image", {
- // Tag our image with our ECR repository's address.
- tags: [pulumi.interpolate`${ecrRepository.repositoryUrl}:latest`],
- context: {
- location: "./app",
- },
- // Use the pushed image as a cache source.
- cacheFrom: [{
- registry: {
- ref: pulumi.interpolate`${ecrRepository.repositoryUrl}:latest`,
- },
- }],
- // Include an inline cache with our pushed image.
- cacheTo: [{
- inline: {},
- }],
- // Build a multi-platform image manifest for ARM and AMD.
- platforms: [
- "linux/amd64",
- "linux/arm64",
- ],
- // Push the final result to ECR.
- push: true,
- // Provide our ECR credentials.
- registries: [{
- address: ecrRepository.repositoryUrl,
- password: authToken.password,
- username: authToken.userName,
- }],
-});
-
-// Export a ref for the pushed images so we can deploy it.
-export const ref = myImage.ref;
-```
-
-{{% /choosable %}}
-
-{{% choosable language python %}}
-
-```python
-import pulumi
-import pulumi_aws as aws
-import pulumi_docker_build as docker_build
-
-# Create an ECR repository for pushing.
-ecr_repository = aws.ecr.Repository("ecr-repository")
-
-# Grab auth credentials for ECR.
-auth_token = aws.ecr.get_authorization_token_output(registry_id=ecr_repository.registry_id)
-
-# Build and push an image to ECR with inline caching.
-my_image = docker_build.Image("my-image",
- # Tag our image with our ECR repository's address.
- tags=[ecr_repository.repository_url.apply(lambda repository_url: f"{repository_url}:latest")],
- context=docker_build.BuildContextArgs(
- location="./app",
- ),
- # Use the pushed image as a cache source.
- cache_from=[docker_build.CacheFromArgs(
- registry=docker_build.CacheFromRegistryArgs(
- ref=ecr_repository.repository_url.apply(lambda repository_url: f"{repository_url}:latest"),
- ),
- )],
- # Include an inline cache with our pushed image.
- cache_to=[docker_build.CacheToArgs(
- inline=docker_build.CacheToInlineArgs(),
- )],
- # Build a multi-platform image manifest for ARM and AMD.
- platforms=[
- docker_build.Platform.LINUX_AMD64,
- docker_build.Platform.LINUX_ARM64,
- ],
- # Push the final result to ECR.
- push=True,
- # Provide our ECR credentials.
- registries=[docker_build.RegistryArgs(
- address=ecr_repository.repository_url,
- password=auth_token.password,
- username=auth_token.user_name,
- )],
-)
-
-# Export a ref for the pushed images so we can deploy it.
-pulumi.export("ref", my_image.ref)
-```
-
-{{% /choosable %}}
-
-{{% choosable language csharp %}}
-
-```csharp
-using System.Collections.Generic;
-using System.Linq;
-using Pulumi;
-using Aws = Pulumi.Aws;
-using DockerBuild = Pulumi.DockerBuild;
-
-return await Deployment.RunAsync(() =>
-{
- // Create an ECR repository for pushing.
- var ecrRepository = new Aws.Ecr.Repository("ecr-repository");
-
- // Grab auth credentials for ECR.
- var authToken = Aws.Ecr.GetAuthorizationToken.Invoke(new()
- {
- RegistryId = ecrRepository.RegistryId,
- });
-
- // Build and push an image to ECR with inline caching.
- var myImage = new DockerBuild.Image("my-image", new()
- {
- // Tag our image with our ECR repository's address.
- Tags = new[]
- {
- ecrRepository.RepositoryUrl.Apply(repositoryUrl => $"{repositoryUrl}:latest"),
- },
- Context = new DockerBuild.Inputs.BuildContextArgs
- {
- Location = "./app",
- },
- // Use the pushed image as a cache source.
- CacheFrom = new[]
- {
- new DockerBuild.Inputs.CacheFromArgs
- {
- Registry = new DockerBuild.Inputs.CacheFromRegistryArgs
- {
- Ref = ecrRepository.RepositoryUrl.Apply(repositoryUrl => $"{repositoryUrl}:latest"),
- },
- },
- },
- // Include an inline cache with our pushed image.
- CacheTo = new[]
- {
- new DockerBuild.Inputs.CacheToArgs
- {
- Inline = null,
- },
- },
- // Build a multi-platform image manifest for ARM and AMD.
- Platforms = new[]
- {
- DockerBuild.Platform.Linux_amd64,
- DockerBuild.Platform.Linux_arm64,
- },
- // Push the final result to ECR.
- Push = true,
- // Provide our ECR credentials.
- Registries = new[]
- {
- new DockerBuild.Inputs.RegistryArgs
- {
- Address = ecrRepository.RepositoryUrl,
- Password = authToken.Apply(getAuthorizationTokenResult => getAuthorizationTokenResult.Password),
- Username = authToken.Apply(getAuthorizationTokenResult => getAuthorizationTokenResult.UserName),
- },
- },
- });
-
- // Export a ref for the pushed images so we can deploy it.
- return new Dictionary
- {
- ["ref"] = myImage.Ref,
- };
-});
-
-```
-
-{{% /choosable %}}
-
-{{% choosable language go %}}
-
-```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 {
- // Create an ECR repository for pushing.
- ecrRepository, err := ecr.NewRepository(ctx, "ecr-repository", nil)
- if err != nil {
- return err
- }
-
- // Grab auth credentials for ECR.
- authToken := ecr.GetAuthorizationTokenOutput(ctx, ecr.GetAuthorizationTokenOutputArgs{
- RegistryId: ecrRepository.RegistryId,
- }, nil)
-
- // Build and push an image to ECR with inline caching.
- myImage, err := dockerbuild.NewImage(ctx, "my-image", &dockerbuild.ImageArgs{
- // Tag our image with our ECR repository's address.
- Tags: pulumi.StringArray{
- ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {
- return fmt.Sprintf("%v:latest", repositoryUrl), nil
- }).(pulumi.StringOutput),
- },
- Context: &dockerbuild.BuildContextArgs{
- Location: pulumi.String("./app"),
- },
- // Use the pushed image as a cache source.
- CacheFrom: dockerbuild.CacheFromArray{
- &dockerbuild.CacheFromArgs{
- Registry: &dockerbuild.CacheFromRegistryArgs{
- Ref: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {
- return fmt.Sprintf("%v:latest", repositoryUrl), nil
- }).(pulumi.StringOutput),
- },
- },
- },
- // Include an inline cache with our pushed image.
- CacheTo: dockerbuild.CacheToArray{
- &dockerbuild.CacheToArgs{
- Inline: nil,
- },
- },
- // Build a multi-platform image manifest for ARM and AMD.
- Platforms: dockerbuild.PlatformArray{
- dockerbuild.Platform_Linux_amd64,
- dockerbuild.Platform_Linux_arm64,
- },
- // Push the final result to ECR.
- Push: pulumi.Bool(true),
- // Provide our ECR credentials.
- 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),
- },
- },
- })
- if err != nil {
- return err
- }
-
- // Export a ref for the pushed images so we can deploy it.
- ctx.Export("ref", myImage.Ref)
- return nil
- })
-}
-```
-
-{{% /choosable %}}
-
-{{% choosable language yaml %}}
-
-```yaml
-description: Push to AWS ECR with caching
-name: ecr
-outputs:
- ref: ${my-image.ref}
-resources:
- # Create an ECR repository for pushing.
- ecr-repository:
- type: aws:ecr:Repository
-
- # Build and push an image to ECR with inline caching.
- my-image:
- type: docker-build:Image
- properties:
- # Tag our image with our ECR repository's address.
- tags:
- - ${ecr-repository.repositoryUrl}:latest
- context:
- location: ./app
- # Use the pushed image as a cache source.
- cacheFrom:
- - registry:
- ref: ${ecr-repository.repositoryUrl}:latest
- # Include an inline cache with our pushed image.
- cacheTo:
- - inline: {}
- # Build a multi-platform image manifest for ARM and AMD.
- platforms:
- - linux/amd64
- - linux/arm64
- # Push the final result to ECR.
- push: true
- # Provide our ECR credentials.
- registries:
- - address: ${ecr-repository.repositoryUrl}
- password: ${auth-token.password}
- username: ${auth-token.userName}
-
-runtime: yaml
-variables:
- auth-token:
- # Grab auth credentials for ECR.
- fn::aws:ecr:getAuthorizationToken:
- registryId: ${ecr-repository.registryId}
-```
-
-{{% /choosable %}}
-
-{{% choosable language java %}}
-
-```java
-package myapp;
-
-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.CacheToInlineArgs;
-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) {
- // Create an ECR repository for pushing.
- var ecrRepository = new Repository("ecrRepository");
-
- // Grab auth credentials for ECR.
- final var authToken = EcrFunctions.getAuthorizationToken(GetAuthorizationTokenArgs.builder()
- .registryId(ecrRepository.registryId())
- .build());
-
- // Build and push an image to ECR with inline caching.
- var myImage = new Image("myImage", ImageArgs.builder()
- // Tag our image with our ECR repository's address.
- .tags(ecrRepository.repositoryUrl().applyValue(repositoryUrl -> String.format("%s:latest", repositoryUrl)))
- .context(BuildContextArgs.builder()
- .location("./app")
- .build())
- // Use the pushed image as a cache source.
- .cacheFrom(CacheFromArgs.builder()
- .registry(CacheFromRegistryArgs.builder()
- .ref(ecrRepository.repositoryUrl().applyValue(repositoryUrl -> String.format("%s:latest", repositoryUrl)))
- .build())
- .build())
- // Include an inline cache with our pushed image.
- .cacheTo(CacheToArgs.builder()
- .inline()
- .build())
- // Build a multi-platform image manifest for ARM and AMD.
- .platforms(
- "linux/amd64",
- "linux/arm64")
- // Push the final result to ECR.
- .push(true)
- // Provide our ECR credentials.
- .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())
- .build());
-
- ctx.export("ref", myImage.ref());
- }
-}
-```
-
-{{% /choosable %}}
-
-{{< /chooser >}}
diff --git a/docs/generate.go b/docs/generate.go
deleted file mode 100644
index 96fc7cb..0000000
--- a/docs/generate.go
+++ /dev/null
@@ -1,224 +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,
- hcl 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"+
- "```hcl\n%s```\n"+
- "```java\n%s```\n"+
- "{{%% /example %%}}\n",
- description, typescript, python, csharp, golang, yaml, hcl, 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
- }
- hcl, err := convert("hcl", dir, "program.hcl")
- 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, hcl, 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/installation-configuration.md b/docs/installation-configuration.md
deleted file mode 100644
index cd66298..0000000
--- a/docs/installation-configuration.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: Docker-Build Installation & Configuration
-meta_desc: Provides an overview on how to configure the Pulumi Docker-Build Provider.
-layout: package
----
-
-The Pulumi Docker-build provider builds modern Docker images with [buildx](https://docs.docker.com/reference/cli/docker/buildx/) and [BuildKit](https://docs.docker.com/build/buildkit/).
-
-## Installation
-
-The Docker-Build provider is available as a package in all Pulumi languages:
-
-* JavaScript/TypeScript: [`@pulumi/docker-build`](https://www.npmjs.com/package/@pulumi/docker-build)
-* Python: [`pulumi-docker-build`](https://pypi.org/project/pulumi-docker-build/)
-* Go: [`github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild`](https://github.com/pulumi/pulumi-docker-build)
-* .NET: [`Pulumi.DockerBuild`](https://www.nuget.org/packages/Pulumi.DockerBuild)
-* Java: [`com.pulumi/docker-build`](https://central.sonatype.com/artifact/com.pulumi/docker-build)
-
-## Configuring The Provider
-
-### Host
-
-The `DOCKER_HOST` environment variable can be used to specify a custom build daemon's location.
-
-```bash
-$ export DOCKER_HOST=tcp://127.0.0.1:2376/
-```
-
-This can also be specified in your stack's configuration:
-
-```bash
-$ pulumi config set docker-build:host tcp://127.0.0.1:2376/
-```
diff --git a/docs/yaml/image-examples.yaml b/docs/yaml/image-examples.yaml
deleted file mode 100644
index 1870e69..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: ${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 ce6dc41..0000000
--- a/examples/dotnet_test.go
+++ /dev/null
@@ -1,40 +0,0 @@
-//go:build dotnet || all
-// +build dotnet all
-
-package examples
-
-import (
- "os"
- "os/exec"
- "path"
- "path/filepath"
- "testing"
-
- "github.com/stretchr/testify/require"
-
- "github.com/pulumi/pulumi/pkg/v3/testing/integration"
-)
-
-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 95f8d50..0000000
--- a/examples/go/go.mod
+++ /dev/null
@@ -1,118 +0,0 @@
-module provider-docker-build
-
-go 1.25.8
-
-require (
- github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.17
- github.com/pulumi/pulumi/sdk/v3 v3.237.0
-)
-
-require (
- dario.cat/mergo v1.0.1 // 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/cenkalti/backoff/v5 v5.0.3 // indirect
- github.com/cespare/xxhash/v2 v2.3.0 // indirect
- github.com/charmbracelet/bubbles v1.0.0 // indirect
- github.com/charmbracelet/bubbletea v1.3.10 // indirect
- github.com/charmbracelet/colorprofile v0.4.3 // indirect
- github.com/charmbracelet/lipgloss v1.1.0 // indirect
- github.com/charmbracelet/x/ansi v0.11.7 // indirect
- github.com/charmbracelet/x/cellbuf v0.0.15 // indirect
- github.com/charmbracelet/x/term v0.2.2 // indirect
- github.com/cheggaaa/pb v1.0.29 // indirect
- github.com/clipperhouse/displaywidth v0.11.0 // indirect
- github.com/clipperhouse/uax29/v2 v2.7.0 // indirect
- github.com/cloudflare/circl v1.6.3 // 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.8.0 // indirect
- github.com/go-git/go-git/v5 v5.18.0 // indirect
- github.com/go-logr/logr v1.4.3 // indirect
- github.com/go-logr/stdr v1.2.2 // indirect
- github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/glog v1.2.5 // indirect
- github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
- github.com/google/uuid v1.6.0 // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.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/go-version v1.9.0 // indirect
- github.com/hashicorp/hcl/v2 v2.24.0 // indirect
- github.com/inconshreveable/mousetrap v1.1.0 // indirect
- github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
- github.com/json-iterator/go v1.1.12 // indirect
- github.com/kevinburke/ssh_config v1.2.0 // indirect
- github.com/klauspost/compress v1.18.0 // indirect
- github.com/lucasb-eyer/go-colorful v1.4.0 // indirect
- github.com/mattn/go-isatty v0.0.22 // indirect
- github.com/mattn/go-localereader v0.0.1 // indirect
- github.com/mattn/go-runewidth v0.0.23 // indirect
- github.com/mitchellh/go-ps v1.0.0 // indirect
- github.com/mitchellh/go-wordwrap v1.0.1 // indirect
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
- github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // 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/pgavlin/fx/v2 v2.0.12 // 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.24.0 // indirect
- github.com/rivo/uniseg v0.4.7 // indirect
- github.com/rogpeppe/go-internal v1.14.1 // indirect
- github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect
- github.com/sergi/go-diff v1.4.0 // indirect
- github.com/skeema/knownhosts v1.3.1 // indirect
- github.com/spf13/cast v1.5.0 // indirect
- github.com/spf13/cobra v1.10.2 // indirect
- github.com/spf13/pflag v1.0.10 // 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.17.0 // indirect
- go.opentelemetry.io/auto/sdk v1.2.1 // indirect
- go.opentelemetry.io/collector/featuregate v1.57.0 // indirect
- go.opentelemetry.io/collector/pdata v1.57.0 // indirect
- go.opentelemetry.io/otel v1.43.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 // indirect
- go.opentelemetry.io/otel/metric v1.43.0 // indirect
- go.opentelemetry.io/otel/sdk v1.43.0 // indirect
- go.opentelemetry.io/otel/trace v1.43.0 // indirect
- go.opentelemetry.io/proto/otlp v1.10.0 // indirect
- go.uber.org/atomic v1.11.0 // indirect
- go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/crypto v0.51.0 // indirect
- golang.org/x/exp v0.0.0-20250718183923-645b1fa84792 // indirect
- golang.org/x/mod v0.35.0 // indirect
- golang.org/x/net v0.54.0 // indirect
- golang.org/x/sync v0.20.0 // indirect
- golang.org/x/sys v0.44.0 // indirect
- golang.org/x/term v0.43.0 // indirect
- golang.org/x/text v0.37.0 // indirect
- golang.org/x/tools v0.44.0 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20260504160031-60b97b32f348 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20260504160031-60b97b32f348 // indirect
- google.golang.org/grpc v1.81.0 // indirect
- google.golang.org/protobuf v1.36.11 // 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 a0451f9..0000000
--- a/examples/go/go.sum
+++ /dev/null
@@ -1,356 +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/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/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM=
-github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
-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/charmbracelet/bubbles v1.0.0 h1:12J8/ak/uCZEMQ6KU7pcfwceyjLlWsDLAxB5fXonfvc=
-github.com/charmbracelet/bubbles v1.0.0/go.mod h1:9d/Zd5GdnauMI5ivUIVisuEm3ave1XwXtD1ckyV6r3E=
-github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlvF9nRvCICw=
-github.com/charmbracelet/bubbletea v1.3.10/go.mod h1:ORQfo0fk8U+po9VaNvnV95UPWA1BitP1E0N6xJPlHr4=
-github.com/charmbracelet/colorprofile v0.4.3 h1:QPa1IWkYI+AOB+fE+mg/5/4HRMZcaXex9t5KX76i20Q=
-github.com/charmbracelet/colorprofile v0.4.3/go.mod h1:/zT4BhpD5aGFpqQQqw7a+VtHCzu+zrQtt1zhMt9mR4Q=
-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.11.7 h1:kzv1kJvjg2S3r9KHo8hDdHFQLEqn4RBCb39dAYC84jI=
-github.com/charmbracelet/x/ansi v0.11.7/go.mod h1:9qGpnAVYz+8ACONkZBUWPtL7lulP9No6p1epAihUZwQ=
-github.com/charmbracelet/x/cellbuf v0.0.15 h1:ur3pZy0o6z/R7EylET877CBxaiE1Sp1GMxoFPAIztPI=
-github.com/charmbracelet/x/cellbuf v0.0.15/go.mod h1:J1YVbR7MUuEGIFPCaaZ96KDl5NoS0DAWkskup+mOY+Q=
-github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk=
-github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI=
-github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo=
-github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30=
-github.com/clipperhouse/displaywidth v0.11.0 h1:lBc6kY44VFw+TDx4I8opi/EtL9m20WSEFgwIwO+UVM8=
-github.com/clipperhouse/displaywidth v0.11.0/go.mod h1:bkrFNkf81G8HyVqmKGxsPufD3JhNl3dSqnGhOoSD/o0=
-github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk=
-github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM=
-github.com/cloudflare/circl v1.6.3 h1:9GPOhQGF9MCYUeXyMYlqTR6a5gTrgR/fBLXvUgtVcg8=
-github.com/cloudflare/circl v1.6.3/go.mod h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4=
-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.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
-github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
-github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
-github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps=
-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.8.0 h1:I8hjc3LbBlXTtVuFNJuwYuMiHvQJDq1AT6u4DwDzZG0=
-github.com/go-git/go-billy/v5 v5.8.0/go.mod h1:RpvI/rw4Vr5QA+Z60c6d6LXH0rYJo0uD5SqfmrrheCY=
-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.18.0 h1:O831KI+0PR51hM2kep6T8k+w0/LIAD490gvqMCvL5hM=
-github.com/go-git/go-git/v5 v5.18.0/go.mod h1:pW/VmeqkanRFqR6AljLcs7EA7FbZaN5MQqO7oZADXpo=
-github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
-github.com/go-logr/logr v1.4.3/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.5 h1:DrW6hGnjIhtvhOIiAKT6Psh/Kd/ldepEa81DKeiRJ5I=
-github.com/golang/glog v1.2.5/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/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-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-gateway/v2 v2.29.0 h1:5VipnvEpbqr2gA2VbM+nYVbkIF28c5ZQfqCBQ5g2xfk=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0/go.mod h1:Hyl3n6Twe1hvtd9XUXDec4pTvgMSEixRuQKPTMH2bNs=
-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/go-version v1.9.0 h1:CeOIz6k+LoN3qX9Z0tyQrPtiB1DFYRPfCIBtaXPSCnA=
-github.com/hashicorp/go-version v1.9.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/hcl/v2 v2.24.0 h1:2QJdZ454DSsYGoaE6QheQZjtKZSUs9Nh2izTWiwQxvE=
-github.com/hashicorp/hcl/v2 v2.24.0/go.mod h1:oGoO1FIQYfn/AgyOhlg9qLC6/nOJPX3qGbkZpYAcqfM=
-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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-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/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
-github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
-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.4.0 h1:UtrWVfLdarDgc44HcS7pYloGHJUjHV/4FwW4TvVgFr4=
-github.com/lucasb-eyer/go-colorful v1.4.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.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
-github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
-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.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4=
-github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4=
-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.23 h1:7ykA0T0jkPpzSvMS5i9uoNn2Xy3R383f9HDx3RybWcw=
-github.com/mattn/go-runewidth v0.0.23/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
-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/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 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8=
-github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-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.12 h1:SjjaJ68Dt8Z4zHwOpY/RPijd7lShs6xYupJbF9ra00M=
-github.com/pgavlin/fx/v2 v2.0.12/go.mod h1:M/nF/ooAOy+NUBooYYXl2REARzJ/giPJxfMs8fINfKc=
-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.24.0 h1:sCtiB0qbyrlU1ZNzJn4dTLYiChl8xeCBFbHWl1YoXJg=
-github.com/pulumi/esc v0.24.0/go.mod h1:eCOOkcDJS6eooGwdE4/E0+pOsvUWG254+KBmPCFwJpA=
-github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.17 h1:XSz9LZ4Q0267DW09I1DLoJhLXWzSeR0uH4/hD3owGT4=
-github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.17/go.mod h1:QgbLZb1Cd1yiX9GsIaZCRuFL/0ortNfUgsp/vx5YTws=
-github.com/pulumi/pulumi/sdk/v3 v3.237.0 h1:D0kx4fkUkiZWfreQg1ekeAifLJEC2+VRYzgboQClg9Q=
-github.com/pulumi/pulumi/sdk/v3 v3.237.0/go.mod h1:ybUihqUfVF1ZXBH3JNunYsAMz2P6i+7v5gzoJ60sVp0=
-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/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.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw=
-github.com/sergi/go-diff v1.4.0/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.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
-github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=
-github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
-github.com/spf13/pflag v1.0.10/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.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
-github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
-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.17.0 h1:seZvECve6XX4tmnvRzWtJNHdscMtYEx5R7bnnVyd/d0=
-github.com/zclconf/go-cty v1.17.0/go.mod h1:wqFzcImaLTI6A5HfsRwB0nj5n0MRZFwmey8YoFPPs3U=
-go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
-go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
-go.opentelemetry.io/collector/featuregate v1.57.0 h1:KPDSUKYn6MHwgyGRSGPPcW/G96HH93pxuvvPwM+R8nY=
-go.opentelemetry.io/collector/featuregate v1.57.0/go.mod h1:4ga1QBMPEejXXmpyJS8lmaRpknJ3Lb9Bvk6e420bUFU=
-go.opentelemetry.io/collector/internal/testutil v0.151.0 h1:CFjDItLuqzblItOsnK6IPSdrsOaZCaDjYpB8qWG+XHI=
-go.opentelemetry.io/collector/internal/testutil v0.151.0/go.mod h1:Jkjs6rkqs973LqgZ0Fe3zrokQRKULYXPIf4HuqStiEE=
-go.opentelemetry.io/collector/pdata v1.57.0 h1:oDWBMjEIqyJO3GJEB+iwqxj47rxDK19OKzwaFEaE4sg=
-go.opentelemetry.io/collector/pdata v1.57.0/go.mod h1:wZojinP6mNhLXudH8QXx/bjWzOsKMxi/FXwnk+12G/w=
-go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I=
-go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 h1:RAE+JPfvEmvy+0LzyUA25/SGawPwIUbZ6u0Wug54sLc=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0/go.mod h1:AGmbycVGEsRx9mXMZ75CsOyhSP6MFIcj/6dnG+vhVjk=
-go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM=
-go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY=
-go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg=
-go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg=
-go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw=
-go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A=
-go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A=
-go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0=
-go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g=
-go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk=
-go.opentelemetry.io/proto/slim/otlp v1.10.0 h1:iR97Vs/ZDR+y9TfuP9b1XBtdPWeC+OMslIBmhcLU7jM=
-go.opentelemetry.io/proto/slim/otlp v1.10.0/go.mod h1:lV9250stpjYLPNA5viFabIgP2QlUGRT1GdTgAf8SIUk=
-go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.3.0 h1:RUF5rO0hAlgiJt1fzQVzcVs3vZVNHIcMLgOgG4rWNcQ=
-go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.3.0/go.mod h1:I89cynRj8y+383o7tEQVg2SVA6SRgDVIouWPUVXjx0U=
-go.opentelemetry.io/proto/slim/otlp/profiles/v1development v0.3.0 h1:CQvJSldHRUN6Z8jsUeYv8J0lXRvygALXIzsmAeCcZE0=
-go.opentelemetry.io/proto/slim/otlp/profiles/v1development v0.3.0/go.mod h1:xSQ+mEfJe/GjK1LXEyVOoSI1N9JV9ZI923X5kup43W4=
-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/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
-go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-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.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI=
-golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8=
-golang.org/x/exp v0.0.0-20250718183923-645b1fa84792 h1:R9PFI6EUdfVKgwKjZef7QIwGcBKu86OEFpJ9nUEP2l4=
-golang.org/x/exp v0.0.0-20250718183923-645b1fa84792/go.mod h1:A+z0yzpGtvnG90cToK5n2tu8UJVP2XUATh+r+sfOOOc=
-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.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM=
-golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU=
-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.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w=
-golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ=
-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.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
-golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
-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.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ=
-golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4=
-golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk=
-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.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
-golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
-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.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c=
-golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI=
-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=
-gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
-gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
-google.golang.org/genproto/googleapis/api v0.0.0-20260504160031-60b97b32f348 h1:U8orV30l6KpDsi9dxU0CoJZGbjS8EEpw+6ba+XwGPQA=
-google.golang.org/genproto/googleapis/api v0.0.0-20260504160031-60b97b32f348/go.mod h1:Yzdzr5OOZFgSsEV2D/Xi9NL3bszpXFAg0hFJiRohcD8=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20260504160031-60b97b32f348 h1:pfIbyB44sWzHiCpRqIen67ZQnVXSfIxWrqUMk1qwODE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20260504160031-60b97b32f348/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
-google.golang.org/grpc v1.81.0 h1:W3G9N3KQf3BU+YuCtGKJk0CmxQNbAISICD/9AORxLIw=
-google.golang.org/grpc v1.81.0/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I=
-google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
-google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
-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.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.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk=
-pgregory.net/rapid v1.2.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
diff --git a/examples/go/main.go b/examples/go/main.go
deleted file mode 100644
index f40f170..0000000
--- a/examples/go/main.go
+++ /dev/null
@@ -1,234 +0,0 @@
-package main
-
-import (
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
- "github.com/pulumi/pulumi/sdk/v3/go/pulumi/config"
-
- "github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
-)
-
-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 def5a67..0000000
--- a/examples/go_test.go
+++ /dev/null
@@ -1,31 +0,0 @@
-//go:build go || all
-// +build go all
-
-package examples
-
-import (
- "os"
- "path"
- "testing"
-
- "github.com/stretchr/testify/require"
-
- "github.com/pulumi/pulumi/pkg/v3/testing/integration"
-)
-
-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/hcl/.dockerignore b/examples/hcl/.dockerignore
deleted file mode 100644
index 37ffae4..0000000
--- a/examples/hcl/.dockerignore
+++ /dev/null
@@ -1,2 +0,0 @@
-command-output
-tmp
diff --git a/examples/hcl/Pulumi.yaml b/examples/hcl/Pulumi.yaml
deleted file mode 100644
index 260f929..0000000
--- a/examples/hcl/Pulumi.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-name: provider-docker-build
-runtime: hcl
-config:
- dockerHubPassword:
- type: string
- secret: true
-plugins:
- providers:
- - name: docker-build
- path: ../../bin
diff --git a/examples/hcl/app/Dockerfile b/examples/hcl/app/Dockerfile
deleted file mode 100644
index e17a80c..0000000
--- a/examples/hcl/app/Dockerfile
+++ /dev/null
@@ -1,2 +0,0 @@
-FROM alpine
-RUN echo 👍
diff --git a/examples/hcl/app/Dockerfile.buildArgs b/examples/hcl/app/Dockerfile.buildArgs
deleted file mode 100644
index 438ee01..0000000
--- a/examples/hcl/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/hcl/app/Dockerfile.emptyContext b/examples/hcl/app/Dockerfile.emptyContext
deleted file mode 100644
index 769593b..0000000
--- a/examples/hcl/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/hcl/app/Dockerfile.extraHosts b/examples/hcl/app/Dockerfile.extraHosts
deleted file mode 100644
index 35b15f4..0000000
--- a/examples/hcl/app/Dockerfile.extraHosts
+++ /dev/null
@@ -1,3 +0,0 @@
-FROM bash AS base
-
-RUN getent hosts metadata.google.internal
diff --git a/examples/hcl/app/Dockerfile.multiPlatform b/examples/hcl/app/Dockerfile.multiPlatform
deleted file mode 100644
index 49d3c83..0000000
--- a/examples/hcl/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/hcl/app/Dockerfile.namedContexts b/examples/hcl/app/Dockerfile.namedContexts
deleted file mode 100644
index 6e53dba..0000000
--- a/examples/hcl/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/hcl/app/Dockerfile.secrets b/examples/hcl/app/Dockerfile.secrets
deleted file mode 100644
index 513bbd2..0000000
--- a/examples/hcl/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/hcl/app/Dockerfile.sshMount b/examples/hcl/app/Dockerfile.sshMount
deleted file mode 100644
index 055cb78..0000000
--- a/examples/hcl/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/hcl/app/Dockerfile.target b/examples/hcl/app/Dockerfile.target
deleted file mode 100644
index 7cddec7..0000000
--- a/examples/hcl/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/hcl/program.hcl b/examples/hcl/program.hcl
deleted file mode 100644
index 9ea764c..0000000
--- a/examples/hcl/program.hcl
+++ /dev/null
@@ -1,171 +0,0 @@
-pulumi {
- required_providers {
- docker-build = {
- source = "pulumi/docker-build"
- version = "0.1.0-alpha.0+dev"
- }
- }
-}
-
-resource "docker-build_image" "multiPlatform" {
- push = false
- dockerfile = {
- location = "./app/Dockerfile.multiPlatform"
- }
- context = {
- location = "./app"
- }
- platforms = ["plan9/amd64", "plan9/386"]
-}
-resource "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 = var.dockerHubPassword
- }
-}
-resource "docker-build_image" "cached" {
- push = false
- context = {
- location = "./app"
- }
- cache_to {
- local = {
- dest = "tmp/cache"
- mode = "max"
- }
- }
- cache_from {
- local = {
- src = "tmp/cache"
- }
- }
-}
-resource "docker-build_image" "buildArgs" {
- push = false
- dockerfile = {
- location = "./app/Dockerfile.buildArgs"
- }
- context = {
- location = "./app"
- }
- build_args = {
- "SET_ME_TO_TRUE" = "true"
- }
-}
-resource "docker-build_image" "extraHosts" {
- push = false
- dockerfile = {
- location = "./app/Dockerfile.extraHosts"
- }
- context = {
- location = "./app"
- }
- add_hosts = ["metadata.google.internal:169.254.169.254"]
-}
-resource "docker-build_image" "sshMount" {
- push = false
- dockerfile = {
- location = "./app/Dockerfile.sshMount"
- }
- context = {
- location = "./app"
- }
- ssh {
- id = "default"
- }
-}
-resource "docker-build_image" "secrets" {
- push = false
- dockerfile = {
- location = "./app/Dockerfile.secrets"
- }
- context = {
- location = "./app"
- }
- secrets = {
- "password" = "hunter2"
- }
-}
-resource "docker-build_image" "labels" {
- push = false
- context = {
- location = "./app"
- }
- labels = {
- "description" = "This image will get a descriptive label 👍"
- }
-}
-resource "docker-build_image" "target" {
- push = false
- dockerfile = {
- location = "./app/Dockerfile.target"
- }
- context = {
- location = "./app"
- }
- target = "build-me"
-}
-resource "docker-build_image" "namedContexts" {
- push = false
- dockerfile = {
- location = "./app/Dockerfile.namedContexts"
- }
- context = {
- location = "./app"
- named = {
- "golang:latest" = {
- location = "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"
- }
- }
- }
-}
-resource "docker-build_image" "remoteContext" {
- push = false
- context = {
- location = "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"
- }
-}
-resource "docker-build_image" "remoteContextWithInline" {
- push = false
- dockerfile = {
- inline = "FROM busybox\nCOPY hello.c ./\n"
- }
- context = {
- location = "https://github.com/docker-library/hello-world.git"
- }
-}
-resource "docker-build_image" "inline" {
- push = false
- dockerfile = {
- inline = "FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n"
- }
-}
-resource "docker-build_image" "dockerLoad" {
- push = false
- context = {
- location = "./app"
- }
- exports {
- docker = {
- tar = true
- }
- }
-}
-variable "dockerHubPassword" {
- type = string
-}
-output "platforms" {
- value = docker-build_image.multiPlatform.platforms
-}
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 a526211..0000000
--- a/examples/java_test.go
+++ /dev/null
@@ -1,30 +0,0 @@
-//go:build java || all
-// +build java all
-
-package examples
-
-import (
- "os"
- "path"
- "testing"
-
- "github.com/stretchr/testify/require"
-
- "github.com/pulumi/pulumi/pkg/v3/testing/integration"
-)
-
-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 a62c62b..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.243.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 c2f89dc..0000000
--- a/examples/nodejs_test.go
+++ /dev/null
@@ -1,256 +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/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-
- "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"
-)
-
-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 c4b2432..0000000
--- a/examples/python_test.go
+++ /dev/null
@@ -1,32 +0,0 @@
-//go:build python || all
-// +build python all
-
-package examples
-
-import (
- "os"
- "path"
- "testing"
-
- "github.com/stretchr/testify/require"
-
- "github.com/pulumi/pulumi/pkg/v3/testing/integration"
-)
-
-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 e3d562d..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.243.0"
- }
-}
diff --git a/examples/tests/caching/yarn.lock b/examples/tests/caching/yarn.lock
deleted file mode 100644
index ff482cc..0000000
--- a/examples/tests/caching/yarn.lock
+++ /dev/null
@@ -1,1642 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@grpc/grpc-js@^1.10.1", "@grpc/grpc-js@^1.7.1":
- version "1.14.3"
- resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.14.3.tgz#4c9b817a900ae4020ddc28515ae4b52c78cfb8da"
- integrity sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA==
- dependencies:
- "@grpc/proto-loader" "^0.8.0"
- "@js-sdsl/ordered-map" "^4.4.2"
-
-"@grpc/proto-loader@^0.8.0":
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.8.0.tgz#b6c324dd909c458a0e4aa9bfd3d69cf78a4b9bd8"
- integrity sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==
- dependencies:
- lodash.camelcase "^4.3.0"
- long "^5.0.0"
- protobufjs "^7.5.3"
- yargs "^17.7.2"
-
-"@isaacs/balanced-match@^4.0.1":
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29"
- integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==
-
-"@isaacs/brace-expansion@^5.0.1":
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz#0ef5a92d91f2fff2a37646ce54da9e5f599f6eff"
- integrity sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==
- dependencies:
- "@isaacs/balanced-match" "^4.0.1"
-
-"@isaacs/fs-minipass@^4.0.0":
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32"
- integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==
- dependencies:
- minipass "^7.0.4"
-
-"@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@^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-4.0.0.tgz#2bb2b1c0a170940511554a7986ae2a8be9fedcce"
- integrity sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==
- dependencies:
- agent-base "^7.1.0"
- http-proxy-agent "^7.0.0"
- https-proxy-agent "^7.0.1"
- lru-cache "^11.2.1"
- socks-proxy-agent "^8.0.3"
-
-"@npmcli/arborist@^9.0.0":
- version "9.2.0"
- resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-9.2.0.tgz#0ac8d0ed2dea1f1a3c459c4a203b19ccf9334a31"
- integrity sha512-FRvpUoL5RUaMZ+CNJAZAegHymbamcGptjktD72T8Td94OllbJcBlOZQ69cB/DiNTYDvGBU0uvmcBWivlip1h+Q==
- dependencies:
- "@isaacs/string-locale-compare" "^1.1.0"
- "@npmcli/fs" "^5.0.0"
- "@npmcli/installed-package-contents" "^4.0.0"
- "@npmcli/map-workspaces" "^5.0.0"
- "@npmcli/metavuln-calculator" "^9.0.2"
- "@npmcli/name-from-folder" "^4.0.0"
- "@npmcli/node-gyp" "^5.0.0"
- "@npmcli/package-json" "^7.0.0"
- "@npmcli/query" "^5.0.0"
- "@npmcli/redact" "^4.0.0"
- "@npmcli/run-script" "^10.0.0"
- bin-links "^6.0.0"
- cacache "^20.0.1"
- common-ancestor-path "^2.0.0"
- hosted-git-info "^9.0.0"
- json-stringify-nice "^1.1.4"
- lru-cache "^11.2.1"
- minimatch "^10.0.3"
- nopt "^9.0.0"
- npm-install-checks "^8.0.0"
- npm-package-arg "^13.0.0"
- npm-pick-manifest "^11.0.1"
- npm-registry-fetch "^19.0.0"
- pacote "^21.0.2"
- parse-conflict-json "^5.0.1"
- proc-log "^6.0.0"
- proggy "^4.0.0"
- promise-all-reject-late "^1.0.0"
- promise-call-limit "^3.0.1"
- semver "^7.3.7"
- ssri "^13.0.0"
- treeverse "^3.0.0"
- walk-up-path "^4.0.0"
-
-"@npmcli/fs@^5.0.0":
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-5.0.0.tgz#674619771907342b3d1ac197aaf1deeb657e3539"
- integrity sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==
- dependencies:
- semver "^7.3.5"
-
-"@npmcli/git@^7.0.0":
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-7.0.1.tgz#d1f6462af0e9901536e447beea922bc20dcc5762"
- integrity sha512-+XTFxK2jJF/EJJ5SoAzXk3qwIDfvFc5/g+bD274LZ7uY7LE8sTfG6Z8rOanPl2ZEvZWqNvmEdtXC25cE54VcoA==
- dependencies:
- "@npmcli/promise-spawn" "^9.0.0"
- ini "^6.0.0"
- lru-cache "^11.2.1"
- npm-pick-manifest "^11.0.1"
- proc-log "^6.0.0"
- promise-retry "^2.0.1"
- semver "^7.3.5"
- which "^6.0.0"
-
-"@npmcli/installed-package-contents@^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz#18e5070704cfe0278f9ae48038558b6efd438426"
- integrity sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA==
- dependencies:
- npm-bundled "^5.0.0"
- npm-normalize-package-bin "^5.0.0"
-
-"@npmcli/map-workspaces@^5.0.0":
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-5.0.3.tgz#5b887ec0b535a2ba64d1d338867326a2b9c041d1"
- integrity sha512-o2grssXo1e774E5OtEwwrgoszYRh0lqkJH+Pb9r78UcqdGJRDRfhpM8DvZPjzNLLNYeD/rNbjOKM3Ss5UABROw==
- dependencies:
- "@npmcli/name-from-folder" "^4.0.0"
- "@npmcli/package-json" "^7.0.0"
- glob "^13.0.0"
- minimatch "^10.0.3"
-
-"@npmcli/metavuln-calculator@^9.0.2":
- version "9.0.3"
- resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.3.tgz#57b330f3fb8ca34db2782ad5349ea4384bed9c96"
- integrity sha512-94GLSYhLXF2t2LAC7pDwLaM4uCARzxShyAQKsirmlNcpidH89VA4/+K1LbJmRMgz5gy65E/QBBWQdUvGLe2Frg==
- dependencies:
- cacache "^20.0.0"
- json-parse-even-better-errors "^5.0.0"
- pacote "^21.0.0"
- proc-log "^6.0.0"
- semver "^7.3.5"
-
-"@npmcli/name-from-folder@^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-4.0.0.tgz#b4d516ae4fab5ed4e8e8032abff3488703fc24a3"
- integrity sha512-qfrhVlOSqmKM8i6rkNdZzABj8MKEITGFAY+4teqBziksCQAOLutiAxM1wY2BKEd8KjUSpWmWCYxvXr0y4VTlPg==
-
-"@npmcli/node-gyp@^5.0.0":
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz#35475a58b5d791764a7252231197a14deefe8e47"
- integrity sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==
-
-"@npmcli/package-json@^7.0.0":
- version "7.0.4"
- resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-7.0.4.tgz#f4178e5d90b888f3bdf666915706f613c2d870d7"
- integrity sha512-0wInJG3j/K40OJt/33ax47WfWMzZTm6OQxB9cDhTt5huCP2a9g2GnlsxmfN+PulItNPIpPrZ+kfwwUil7eHcZQ==
- dependencies:
- "@npmcli/git" "^7.0.0"
- glob "^13.0.0"
- hosted-git-info "^9.0.0"
- json-parse-even-better-errors "^5.0.0"
- proc-log "^6.0.0"
- semver "^7.5.3"
- validate-npm-package-license "^3.0.4"
-
-"@npmcli/promise-spawn@^9.0.0":
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz#20e80cbdd2f24ad263a15de3ebbb1673cb82005b"
- integrity sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==
- dependencies:
- which "^6.0.0"
-
-"@npmcli/query@^5.0.0":
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-5.0.0.tgz#c8cb9ec42c2ef149077282e948dc068ecc79ee11"
- integrity sha512-8TZWfTQOsODpLqo9SVhVjHovmKXNpevHU0gO9e+y4V4fRIOneiXy0u0sMP9LmS71XivrEWfZWg50ReH4WRT4aQ==
- dependencies:
- postcss-selector-parser "^7.0.0"
-
-"@npmcli/redact@^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-4.0.0.tgz#c91121e02b7559a997614a2c1057cd7fc67608c4"
- integrity sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==
-
-"@npmcli/run-script@^10.0.0":
- version "10.0.3"
- resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-10.0.3.tgz#85c16cd893e44cad5edded441b002d8a1d3a8a8e"
- integrity sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==
- dependencies:
- "@npmcli/node-gyp" "^5.0.0"
- "@npmcli/package-json" "^7.0.0"
- "@npmcli/promise-spawn" "^9.0.0"
- node-gyp "^12.1.0"
- proc-log "^6.0.0"
- which "^6.0.0"
-
-"@opentelemetry/api-logs@0.57.2":
- version "0.57.2"
- resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz#d4001b9aa3580367b40fe889f3540014f766cc87"
- integrity sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==
- 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-trace-otlp-grpc@^0.57":
- version "0.57.2"
- resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.57.2.tgz#1c1e593a987c211a0e9134037b7a2a7f3836f8ba"
- integrity sha512-gHU1vA3JnHbNxEXg5iysqCWxN9j83d7/epTYBZflqQnTyCC4N7yZXn/dMM+bEmyhQPGjhCkNZLx4vZuChH1PYw==
- dependencies:
- "@grpc/grpc-js" "^1.7.1"
- "@opentelemetry/core" "1.30.1"
- "@opentelemetry/otlp-exporter-base" "0.57.2"
- "@opentelemetry/otlp-grpc-exporter-base" "0.57.2"
- "@opentelemetry/otlp-transformer" "0.57.2"
- "@opentelemetry/resources" "1.30.1"
- "@opentelemetry/sdk-trace-base" "1.30.1"
-
-"@opentelemetry/exporter-zipkin@^1.30":
- 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.57":
- version "0.57.2"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.57.2.tgz#18c2a5a1e168defd6452514c3416d085f4c72223"
- integrity sha512-TR6YQA67cLSZzdxbf2SrbADJy2Y8eBW1+9mF15P0VK2MYcpdoUSmQTF1oMkBwa3B9NwqDFA2fq7wYTTutFQqaQ==
- dependencies:
- "@opentelemetry/instrumentation" "0.57.2"
- "@opentelemetry/semantic-conventions" "1.28.0"
-
-"@opentelemetry/instrumentation@0.57.2", "@opentelemetry/instrumentation@^0.57":
- version "0.57.2"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.57.2.tgz#8924549d7941ba1b5c6f04d5529cf48330456d1d"
- integrity sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==
- dependencies:
- "@opentelemetry/api-logs" "0.57.2"
- "@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/otlp-exporter-base@0.57.2":
- version "0.57.2"
- resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.57.2.tgz#10636c8d0e377f3311e55741b0550b06f32a3e98"
- integrity sha512-XdxEzL23Urhidyebg5E6jZoaiW5ygP/mRjxLHixogbqwDy2Faduzb5N0o/Oi+XTIJu+iyxXdVORjXax+Qgfxag==
- dependencies:
- "@opentelemetry/core" "1.30.1"
- "@opentelemetry/otlp-transformer" "0.57.2"
-
-"@opentelemetry/otlp-grpc-exporter-base@0.57.2":
- version "0.57.2"
- resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.57.2.tgz#655ecb3a2a67da90c0042e34cbeaa57df266794e"
- integrity sha512-USn173KTWy0saqqRB5yU9xUZ2xdgb1Rdu5IosJnm9aV4hMTuFFRTUsQxbgc24QxpCHeoKzzCSnS/JzdV0oM2iQ==
- dependencies:
- "@grpc/grpc-js" "^1.7.1"
- "@opentelemetry/core" "1.30.1"
- "@opentelemetry/otlp-exporter-base" "0.57.2"
- "@opentelemetry/otlp-transformer" "0.57.2"
-
-"@opentelemetry/otlp-transformer@0.57.2":
- version "0.57.2"
- resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.57.2.tgz#a3bdd2c82ddd6fd87f513860fb4f6260e555d2c0"
- integrity sha512-48IIRj49gbQVK52jYsw70+Jv+JbahT8BqT2Th7C4H7RCM9d0gZ5sgNPoMpWldmfjvIsSgiGJtjfk9MeZvjhoig==
- dependencies:
- "@opentelemetry/api-logs" "0.57.2"
- "@opentelemetry/core" "1.30.1"
- "@opentelemetry/resources" "1.30.1"
- "@opentelemetry/sdk-logs" "0.57.2"
- "@opentelemetry/sdk-metrics" "1.30.1"
- "@opentelemetry/sdk-trace-base" "1.30.1"
- protobufjs "^7.3.0"
-
-"@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.30":
- 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-logs@0.57.2":
- version "0.57.2"
- resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-logs/-/sdk-logs-0.57.2.tgz#ddc9d1e2b86052b4b6bb954dd90fa3878bed8a23"
- integrity sha512-TXFHJ5c+BKggWbdEQ/inpgIzEmS2BGQowLE9UhsMd7YYlUfBQJ4uax0VF/B5NYigdM/75OoJGhAV3upEhK+3gg==
- dependencies:
- "@opentelemetry/api-logs" "0.57.2"
- "@opentelemetry/core" "1.30.1"
- "@opentelemetry/resources" "1.30.1"
-
-"@opentelemetry/sdk-metrics@1.30.1":
- version "1.30.1"
- resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-1.30.1.tgz#70e2bcd275b9df6e7e925e3fe53cfe71329b5fc8"
- integrity sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog==
- dependencies:
- "@opentelemetry/core" "1.30.1"
- "@opentelemetry/resources" "1.30.1"
-
-"@opentelemetry/sdk-trace-base@1.30.1", "@opentelemetry/sdk-trace-base@^1.30":
- 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.30":
- 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.28.0":
- version "1.28.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz#337fb2bca0453d0726696e745f50064411f646d6"
- integrity sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==
-
-"@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.243.0":
- version "3.243.0"
- resolved "https://registry.yarnpkg.com/@pulumi/pulumi/-/pulumi-3.243.0.tgz#a75ae019b1091f3f97351bf84d66b5d3c2e8ce0f"
- integrity sha512-KRIBErgCj9+gsEG7fOo3xRvvhq3VGw8gnzVpbFiyW2Zqr84MCIKDDVmj4MZDt/61KOn3OapI4ia1/6dSg3qwzQ==
- dependencies:
- "@grpc/grpc-js" "^1.10.1"
- "@logdna/tail-file" "^2.0.6"
- "@npmcli/arborist" "^9.0.0"
- "@opentelemetry/api" "^1.9"
- "@opentelemetry/exporter-trace-otlp-grpc" "^0.57"
- "@opentelemetry/exporter-zipkin" "^1.30"
- "@opentelemetry/instrumentation" "^0.57"
- "@opentelemetry/instrumentation-grpc" "^0.57"
- "@opentelemetry/resources" "^1.30"
- "@opentelemetry/sdk-trace-base" "^1.30"
- "@opentelemetry/sdk-trace-node" "^1.30"
- "@types/google-protobuf" "^3.15.5"
- "@types/semver" "^7.5.6"
- "@types/tmp" "^0.2.6"
- execa "^5.1.0"
- fdir "^6.5.0"
- google-protobuf "^3.21.4"
- ini "^2.0.0"
- js-yaml "^3.14.2"
- minimist "^1.2.6"
- normalize-package-data "^6.0.0"
- picomatch "^4.0.0"
- require-from-string "^2.0.1"
- semver "^7.5.2"
- source-map-support "^0.5.6"
- tmp "^0.2.4"
- upath "^1.1.0"
-
-"@sigstore/bundle@^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-4.0.0.tgz#854eda43eb6a59352037e49000177c8904572f83"
- integrity sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==
- dependencies:
- "@sigstore/protobuf-specs" "^0.5.0"
-
-"@sigstore/core@^3.1.0":
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-3.1.0.tgz#b418de73f56333ad9e369b915173d8c98e9b96d5"
- integrity sha512-o5cw1QYhNQ9IroioJxpzexmPjfCe7gzafd2RY3qnMpxr4ZEja+Jad/U8sgFpaue6bOaF+z7RVkyKVV44FN+N8A==
-
-"@sigstore/protobuf-specs@^0.5.0":
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz#e5f029edcb3a4329853a09b603011e61043eb005"
- integrity sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==
-
-"@sigstore/sign@^4.1.0":
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-4.1.0.tgz#63df15a137337b29f463a1d1c51e1f7d4c1db2f1"
- integrity sha512-Vx1RmLxLGnSUqx/o5/VsCjkuN5L7y+vxEEwawvc7u+6WtX2W4GNa7b9HEjmcRWohw/d6BpATXmvOwc78m+Swdg==
- dependencies:
- "@sigstore/bundle" "^4.0.0"
- "@sigstore/core" "^3.1.0"
- "@sigstore/protobuf-specs" "^0.5.0"
- make-fetch-happen "^15.0.3"
- proc-log "^6.1.0"
- promise-retry "^2.0.1"
-
-"@sigstore/tuf@^4.0.1":
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-4.0.1.tgz#9b080390936d79ea3b6a893b64baf3123e92d6d3"
- integrity sha512-OPZBg8y5Vc9yZjmWCHrlWPMBqW5yd8+wFNl+thMdtcWz3vjVSoJQutF8YkrzI0SLGnkuFof4HSsWUhXrf219Lw==
- dependencies:
- "@sigstore/protobuf-specs" "^0.5.0"
- tuf-js "^4.1.0"
-
-"@sigstore/verify@^3.1.0":
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-3.1.0.tgz#4046d4186421db779501fe87fa5acaa5d4d21b08"
- integrity sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag==
- dependencies:
- "@sigstore/bundle" "^4.0.0"
- "@sigstore/core" "^3.1.0"
- "@sigstore/protobuf-specs" "^0.5.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@4.1.0":
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-4.1.0.tgz#494b39cf5e2f6855d80031246dd236d8086069b3"
- integrity sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww==
- dependencies:
- "@tufjs/canonical-json" "2.0.0"
- minimatch "^10.1.1"
-
-"@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/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/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@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-4.0.0.tgz#ec933f0e27b6cd60e89b5c6b2a304af42209bb05"
- integrity sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==
-
-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"
-
-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-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"
-
-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"
-
-bin-links@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-6.0.0.tgz#0245114374463a694e161a1e65417e7939ab2eba"
- integrity sha512-X4CiKlcV2GjnCMwnKAfbVWpHa++65th9TuzAEYtZoATiOE2DQKhSp4CJlyLoTqdhBKlXjpXjCTYPNNFS33Fi6w==
- dependencies:
- cmd-shim "^8.0.0"
- npm-normalize-package-bin "^5.0.0"
- proc-log "^6.0.0"
- read-cmd-shim "^6.0.0"
- write-file-atomic "^7.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@^20.0.0, cacache@^20.0.1:
- version "20.0.3"
- resolved "https://registry.yarnpkg.com/cacache/-/cacache-20.0.3.tgz#bd65205d5e6d86e02bbfaf8e4ce6008f1b81d119"
- integrity sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw==
- dependencies:
- "@npmcli/fs" "^5.0.0"
- fs-minipass "^3.0.0"
- glob "^13.0.0"
- lru-cache "^11.1.0"
- minipass "^7.0.3"
- minipass-collect "^2.0.1"
- minipass-flush "^1.0.5"
- minipass-pipeline "^1.2.4"
- p-map "^7.0.2"
- ssri "^13.0.0"
- unique-filename "^5.0.0"
-
-chownr@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4"
- integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==
-
-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==
-
-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"
-
-cmd-shim@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-8.0.0.tgz#5be238f22f40faf3f7e8c92edc3f5d354f7657b2"
- integrity sha512-Jk/BK6NCapZ58BKUxlSI+ouKRbjH1NLZCgJkYoab+vEHUY3f6OzpNBN9u7HFSv9J6TRDGs4PLOHezoKGaFRSCA==
-
-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@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz#f1d361aea9236aad5b92a0ff5b9df1422dd360ff"
- integrity sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==
-
-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, debug@^4.4.3:
- version "4.4.3"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
- integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
- dependencies:
- ms "^2.1.3"
-
-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==
-
-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"
-
-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.5.0:
- version "6.5.0"
- resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350"
- integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==
-
-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@^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@^13.0.0:
- version "13.0.1"
- resolved "https://registry.yarnpkg.com/glob/-/glob-13.0.1.tgz#c59a2500c9a5f1ab9cdd370217ced63c2aa81e60"
- integrity sha512-B7U/vJpE3DkJ5WXTgTpTRN63uV42DseiXXKMwG14LQBXmsdeIoHAPbU/MEo6II0k5ED74uc2ZGTC6MwHFQhF6w==
- dependencies:
- minimatch "^10.1.2"
- minipass "^7.1.2"
- path-scurry "^2.0.0"
-
-google-protobuf@^3.21.4:
- version "3.21.4"
- resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.21.4.tgz#2f933e8b6e5e9f8edde66b7be0024b68f77da6c9"
- integrity sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==
-
-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:
- 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"
-
-hosted-git-info@^9.0.0:
- version "9.0.2"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-9.0.2.tgz#b38c8a802b274e275eeeccf9f4a1b1a0a8557ada"
- integrity sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==
- dependencies:
- lru-cache "^11.1.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"
-
-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@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-8.0.0.tgz#380c173badc3a18c57ff33440753f0052f572b14"
- integrity sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==
- dependencies:
- minimatch "^10.0.3"
-
-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==
-
-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@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/ini/-/ini-6.0.0.tgz#efc7642b276f6a37d22fdf56ef50889d7146bf30"
- integrity sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==
-
-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-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==
-
-js-yaml@^3.14.2:
- version "3.14.2"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.2.tgz#77485ce1dd7f33c061fd1b16ecea23b55fcb04b0"
- integrity sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==
- 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-parse-even-better-errors@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz#93c89f529f022e5dadc233409324f0167b1e903e"
- integrity sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==
-
-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==
-
-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==
-
-lru-cache@^10.0.1:
- version "10.4.3"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119"
- integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==
-
-lru-cache@^11.0.0, lru-cache@^11.1.0, lru-cache@^11.2.1:
- version "11.2.5"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.5.tgz#6811ae01652ae5d749948cdd80bcc22218c6744f"
- integrity sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==
-
-make-fetch-happen@^15.0.0, make-fetch-happen@^15.0.1, make-fetch-happen@^15.0.3:
- version "15.0.3"
- resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-15.0.3.tgz#1578d72885f2b3f9e5daa120b36a14fc31a84610"
- integrity sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw==
- dependencies:
- "@npmcli/agent" "^4.0.0"
- cacache "^20.0.1"
- http-cache-semantics "^4.1.1"
- minipass "^7.0.2"
- minipass-fetch "^5.0.0"
- minipass-flush "^1.0.5"
- minipass-pipeline "^1.2.4"
- negotiator "^1.0.0"
- proc-log "^6.0.0"
- promise-retry "^2.0.1"
- ssri "^13.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==
-
-minimatch@^10.0.3, minimatch@^10.1.1, minimatch@^10.1.2:
- version "10.1.2"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.1.2.tgz#6c3f289f9de66d628fa3feb1842804396a43d81c"
- integrity sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==
- dependencies:
- "@isaacs/brace-expansion" "^5.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@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-5.0.1.tgz#c8d62dc0393f9d4bc156421f7fb10321cd54a697"
- integrity sha512-yHK8pb0iCGat0lDrs/D6RZmCdaBT64tULXjdxjSMAqoDi18Q3qKEUTHypHQZQd9+FYpIS+lkvpq6C/R6SbUeRw==
- dependencies:
- minipass "^7.0.3"
- minipass-sized "^2.0.0"
- minizlib "^3.0.1"
- 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@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-2.0.0.tgz#2228ee97e3f74f6b22ba6d1319addb7621534306"
- integrity sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA==
- dependencies:
- minipass "^7.1.2"
-
-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@^7.0.2, minipass@^7.0.3, minipass@^7.0.4, 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@^3.0.1, minizlib@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c"
- integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==
- dependencies:
- minipass "^7.1.2"
-
-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.3:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
- integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-
-negotiator@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a"
- integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==
-
-node-gyp@^12.1.0:
- version "12.2.0"
- resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-12.2.0.tgz#ff73f6f509e33d8b7e768f889ffc9738ad117b07"
- integrity sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ==
- dependencies:
- env-paths "^2.2.0"
- exponential-backoff "^3.1.1"
- graceful-fs "^4.2.6"
- make-fetch-happen "^15.0.0"
- nopt "^9.0.0"
- proc-log "^6.0.0"
- semver "^7.3.5"
- tar "^7.5.4"
- tinyglobby "^0.2.12"
- which "^6.0.0"
-
-nopt@^9.0.0:
- version "9.0.0"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-9.0.0.tgz#6bff0836b2964d24508b6b41b5a9a49c4f4a1f96"
- integrity sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==
- dependencies:
- abbrev "^4.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"
-
-npm-bundled@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-5.0.0.tgz#5025d847cfd06c7b8d9432df01695d0133d9ee80"
- integrity sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw==
- dependencies:
- npm-normalize-package-bin "^5.0.0"
-
-npm-install-checks@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-8.0.0.tgz#f5d18e909bb8318d85093e9d8f36ac427c1cbe30"
- integrity sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==
- dependencies:
- semver "^7.1.1"
-
-npm-normalize-package-bin@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz#2b207ff260f2e525ddce93356614e2f736728f89"
- integrity sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==
-
-npm-package-arg@^13.0.0:
- version "13.0.2"
- resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-13.0.2.tgz#72a80f2afe8329860e63854489415e9e9a2f78a7"
- integrity sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==
- dependencies:
- hosted-git-info "^9.0.0"
- proc-log "^6.0.0"
- semver "^7.3.5"
- validate-npm-package-name "^7.0.0"
-
-npm-packlist@^10.0.1:
- version "10.0.3"
- resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-10.0.3.tgz#e22c039357faf81a75d1b0cdf53dd113f2bed9c7"
- integrity sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg==
- dependencies:
- ignore-walk "^8.0.0"
- proc-log "^6.0.0"
-
-npm-pick-manifest@^11.0.1:
- version "11.0.3"
- resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz#76cf6593a351849006c36b38a7326798e2a76d13"
- integrity sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==
- dependencies:
- npm-install-checks "^8.0.0"
- npm-normalize-package-bin "^5.0.0"
- npm-package-arg "^13.0.0"
- semver "^7.3.5"
-
-npm-registry-fetch@^19.0.0:
- version "19.1.1"
- resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz#51e96d21f409a9bc4f96af218a8603e884459024"
- integrity sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==
- dependencies:
- "@npmcli/redact" "^4.0.0"
- jsonparse "^1.3.1"
- make-fetch-happen "^15.0.0"
- minipass "^7.0.2"
- minipass-fetch "^5.0.0"
- minizlib "^3.0.1"
- npm-package-arg "^13.0.0"
- proc-log "^6.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"
-
-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-map@^7.0.2:
- version "7.0.4"
- resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.4.tgz#b81814255f542e252d5729dca4d66e5ec14935b8"
- integrity sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==
-
-pacote@^21.0.0, pacote@^21.0.2:
- version "21.2.0"
- resolved "https://registry.yarnpkg.com/pacote/-/pacote-21.2.0.tgz#d5d22839d2805d0c260b723f7cbebec3811efc8a"
- integrity sha512-OwidJA8uHuGYxoZhe4DBv3JJqGg4ojjVV5dwvVxRKq+bOBpgYMbYd/onIvSU1sv5nQIsb+zp4/0uqv6giFQVjg==
- dependencies:
- "@npmcli/git" "^7.0.0"
- "@npmcli/installed-package-contents" "^4.0.0"
- "@npmcli/package-json" "^7.0.0"
- "@npmcli/promise-spawn" "^9.0.0"
- "@npmcli/run-script" "^10.0.0"
- cacache "^20.0.0"
- fs-minipass "^3.0.0"
- minipass "^7.0.2"
- npm-package-arg "^13.0.0"
- npm-packlist "^10.0.1"
- npm-pick-manifest "^11.0.1"
- npm-registry-fetch "^19.0.0"
- proc-log "^6.0.0"
- promise-retry "^2.0.1"
- sigstore "^4.0.0"
- ssri "^13.0.0"
- tar "^7.4.3"
-
-parse-conflict-json@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-5.0.1.tgz#db4acd7472fb400c9808eb86611c2ff72f4c84ba"
- integrity sha512-ZHEmNKMq1wyJXNwLxyHnluPfRAFSIliBvbK/UiOceROt4Xh9Pz0fq49NytIaeaCUf5VR86hwQ/34FCcNU5/LKQ==
- dependencies:
- json-parse-even-better-errors "^5.0.0"
- just-diff "^6.0.0"
- just-diff-apply "^5.2.0"
-
-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@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.1.tgz#4b6572376cfd8b811fca9cd1f5c24b3cbac0fe10"
- integrity sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==
- dependencies:
- lru-cache "^11.0.0"
- minipass "^7.1.2"
-
-picomatch@^4.0.0, picomatch@^4.0.3:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589"
- integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==
-
-postcss-selector-parser@^7.0.0:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz#e75d2e0d843f620e5df69076166f4e16f891cb9f"
- integrity sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==
- dependencies:
- cssesc "^3.0.0"
- util-deprecate "^1.0.2"
-
-proc-log@^6.0.0, proc-log@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-6.1.0.tgz#18519482a37d5198e231133a70144a50f21f0215"
- integrity sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==
-
-proggy@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/proggy/-/proggy-4.0.0.tgz#85fa89d7c81bc3fb77992a80f47bb1e17c610fa3"
- integrity sha512-MbA4R+WQT76ZBm/5JUpV9yqcJt92175+Y0Bodg3HgiXzrmKu7Ggq+bpn6y6wHH+gN9NcyKn3yg1+d47VaKwNAQ==
-
-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-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.3.0, protobufjs@^7.5.3:
- version "7.5.4"
- resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.5.4.tgz#885d31fe9c4b37f25d1bb600da30b1c5b37d286a"
- integrity sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==
- 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"
-
-read-cmd-shim@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-6.0.0.tgz#98f5c8566e535829f1f8afb1595aaf05fd0f3970"
- integrity sha512-1zM5HuOfagXCBWMN83fuFI/x+T/UhZ7k+KIzhrHXcQoeX5+7gmaDYjELQHmmzIodumBHeByBJT4QYS7ufAgs7A==
-
-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@^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"
-
-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@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-4.1.0.tgz#d34b92a544a05e003a2430209d26d8dfafd805a0"
- integrity sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA==
- dependencies:
- "@sigstore/bundle" "^4.0.0"
- "@sigstore/core" "^3.1.0"
- "@sigstore/protobuf-specs" "^0.5.0"
- "@sigstore/sign" "^4.1.0"
- "@sigstore/tuf" "^4.0.1"
- "@sigstore/verify" "^3.1.0"
-
-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@^13.0.0:
- version "13.0.0"
- resolved "https://registry.yarnpkg.com/ssri/-/ssri-13.0.0.tgz#4226b303dc474003d88905f9098cb03361106c74"
- integrity sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==
- dependencies:
- minipass "^7.0.3"
-
-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"
-
-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-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@^7.4.3, tar@^7.5.4:
- version "7.5.7"
- resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.7.tgz#adf99774008ba1c89819f15dbd6019c630539405"
- integrity sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==
- dependencies:
- "@isaacs/fs-minipass" "^4.0.0"
- chownr "^3.0.0"
- minipass "^7.1.2"
- minizlib "^3.1.0"
- yallist "^5.0.0"
-
-tinyglobby@^0.2.12:
- version "0.2.15"
- resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2"
- integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==
- dependencies:
- fdir "^6.5.0"
- picomatch "^4.0.3"
-
-tmp@^0.2.4:
- version "0.2.5"
- resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8"
- integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==
-
-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@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-4.1.0.tgz#ae4ef9afa456fcb4af103dc50a43bc031f066603"
- integrity sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ==
- dependencies:
- "@tufjs/models" "4.1.0"
- debug "^4.4.3"
- make-fetch-happen "^15.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@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-5.0.0.tgz#8b17bbde1a7ca322dd1a1d23fe17c2b798c43f8f"
- integrity sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg==
- dependencies:
- unique-slug "^6.0.0"
-
-unique-slug@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-6.0.0.tgz#f46fd688a9bd972fd356c23d95812a3a4862ed88"
- integrity sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw==
- 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@^7.0.0:
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz#e57c3d721a4c8bbff454a246e7f7da811559ea0d"
- integrity sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==
-
-walk-up-path@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-4.0.0.tgz#590666dcf8146e2d72318164f1f2ac6ef51d4198"
- integrity sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==
-
-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@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/which/-/which-6.0.0.tgz#a3a721a14cdd9b991a722e493c177eeff82ff32a"
- integrity sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==
- dependencies:
- isexe "^3.1.1"
-
-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"
-
-write-file-atomic@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-7.0.0.tgz#f89def4f223e9bf8b06cc6fdb12bda3a917505c7"
- integrity sha512-YnlPC6JqnZl6aO4uRc+dx5PHguiR9S6WeoLtpxNT9wIG+BDya7ZNE1q7KOjVgaA73hKhKLpVPgJ5QA9THQ5BRg==
- 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==
-
-yallist@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533"
- integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==
-
-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"
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 e3d562d..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.243.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 4f1c7a2..0000000
--- a/examples/tests/ecr/Pulumi.yaml
+++ /dev/null
@@ -1,42 +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}
-config:
- aws:region: us-west-2
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 a62c62b..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.243.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 31bf9e6..0000000
--- a/examples/yaml_test.go
+++ /dev/null
@@ -1,106 +0,0 @@
-//go:build yaml || all
-// +build yaml all
-
-package examples
-
-import (
- "os"
- "path"
- "testing"
-
- "github.com/stretchr/testify/require"
-
- "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/pkg/v3/testing/integration"
- pulumirpc "github.com/pulumi/pulumi/sdk/v3/proto/go"
-
- "github.com/pulumi/pulumi-docker-build/provider"
-)
-
-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 TestHCLExample(t *testing.T) {
- cwd, err := os.Getwd()
- require.NoError(t, err)
-
- test := integration.ProgramTestOptions{
- Dir: path.Join(cwd, "hcl"),
- 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 7731c23..0000000
--- a/go.mod
+++ /dev/null
@@ -1,318 +0,0 @@
-module github.com/pulumi/pulumi-docker-build
-
-go 1.25.8
-
-require (
- github.com/aws/aws-sdk-go v1.55.5
- github.com/blang/semver v3.5.1+incompatible
- github.com/containerd/errdefs v1.0.0
- 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/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.7.0
- github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet/v3 v3.106.2
- github.com/pulumi/pulumi-go-provider v1.3.2
- github.com/pulumi/pulumi-java v1.28.0
- github.com/pulumi/pulumi/pkg/v3 v3.242.0
- github.com/pulumi/pulumi/sdk/v3 v3.242.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.11.1
- 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.43.0
- go.opentelemetry.io/otel/sdk v1.43.0
- go.opentelemetry.io/otel/trace v1.43.0
- go.uber.org/mock v0.6.0
- golang.org/x/crypto v0.51.0
- golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f
- google.golang.org/protobuf v1.36.11
- gopkg.in/yaml.v3 v3.0.1
-)
-
-require (
- cloud.google.com/go v0.112.1 // indirect
- cloud.google.com/go/compute/metadata v0.9.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/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 // 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/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
- github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3 // indirect
- github.com/BurntSushi/toml v1.6.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-cidr v1.0.1 // indirect
- github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
- github.com/atotto/clipboard v0.1.4 // indirect
- github.com/aws/aws-sdk-go-v2 v1.41.5 // 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/internal/configsources v1.4.21 // indirect
- github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 // indirect
- github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 // indirect
- github.com/aws/aws-sdk-go-v2/service/kms v1.30.1 // 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.24.2 // indirect
- github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
- github.com/bazelbuild/buildtools v0.0.0-20260211083412-859bfffeef82 // indirect
- github.com/beorn7/perks v1.0.1 // 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.3 // indirect
- github.com/cespare/xxhash/v2 v2.3.0 // indirect
- github.com/charmbracelet/bubbles v1.0.0 // indirect
- github.com/charmbracelet/bubbletea v1.3.10 // indirect
- github.com/charmbracelet/colorprofile v0.4.3 // indirect
- github.com/charmbracelet/lipgloss v1.1.0 // indirect
- github.com/charmbracelet/x/ansi v0.11.7 // indirect
- github.com/charmbracelet/x/cellbuf v0.0.15 // indirect
- github.com/charmbracelet/x/term v0.2.2 // indirect
- github.com/cheggaaa/pb v1.0.29 // indirect
- github.com/clipperhouse/displaywidth v0.11.0 // indirect
- github.com/clipperhouse/uax29/v2 v2.7.0 // indirect
- github.com/cloudflare/circl v1.6.3 // 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.7 // indirect
- github.com/containerd/continuity v0.4.5 // 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/cyphar/filepath-securejoin v0.6.1 // 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/djherbis/times v1.6.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/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/felixge/httpsnoop v1.0.4 // 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/git-pkgs/manifests v0.4.1 // indirect
- github.com/git-pkgs/packageurl-go v0.3.1 // indirect
- github.com/git-pkgs/purl v0.1.10 // indirect
- github.com/git-pkgs/vers v0.2.4 // indirect
- github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
- github.com/go-git/go-billy/v5 v5.9.0 // indirect
- github.com/go-git/go-git/v5 v5.19.0 // indirect
- github.com/go-jose/go-jose/v3 v3.0.5 // indirect
- github.com/go-logr/logr v1.4.3 // indirect
- github.com/go-logr/stdr v1.2.2 // 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-test/deep v1.1.1 // indirect
- github.com/go-viper/mapstructure/v2 v2.4.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.5 // indirect
- github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
- github.com/golang/protobuf v1.5.4 // 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/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/gorilla/mux v1.8.1 // indirect
- github.com/gorilla/websocket v1.5.0 // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.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-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.9.0 // indirect
- github.com/hashicorp/hcl v1.0.0 // indirect
- github.com/hashicorp/hcl/v2 v2.24.0 // indirect
- github.com/hashicorp/vault/api v1.12.0 // indirect
- github.com/iancoleman/strcase v0.3.0 // 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/jmespath/go-jmespath v0.4.0 // indirect
- github.com/josharian/intern v1.0.0 // indirect
- github.com/json-iterator/go v1.1.12 // indirect
- github.com/kevinburke/ssh_config v1.2.0 // indirect
- github.com/klauspost/compress v1.18.0 // indirect
- github.com/klauspost/cpuid/v2 v2.3.0 // indirect
- github.com/kylelemons/godebug v1.1.0 // indirect
- github.com/lucasb-eyer/go-colorful v1.4.0 // indirect
- github.com/mailru/easyjson v0.7.7 // indirect
- github.com/mattn/go-isatty v0.0.22 // indirect
- github.com/mattn/go-localereader v0.0.1 // indirect
- github.com/mattn/go-runewidth v0.0.23 // indirect
- github.com/mattn/go-shellwords v1.0.12 // 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/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.3-0.20250322232337-35a7c28c31ee // 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/natefinch/atomic v1.0.1 // indirect
- github.com/nxadm/tail v1.4.11 // 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/pgavlin/fx v0.1.6 // indirect
- github.com/pgavlin/fx/v2 v2.0.12 // indirect
- github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386 // indirect
- github.com/pjbgf/sha1cd v0.6.0 // 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/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.24.0 // indirect
- github.com/pulumi/inflector v0.2.1 // indirect
- github.com/rivo/uniseg v0.4.7 // indirect
- github.com/rogpeppe/go-internal v1.14.1 // indirect
- github.com/ryanuber/go-glob v1.0.0 // indirect
- github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect
- github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect
- github.com/secure-systems-lab/go-securesystemslib v0.4.0 // indirect
- github.com/segmentio/asm v1.2.0 // indirect
- github.com/segmentio/encoding v0.4.1 // indirect
- github.com/sergi/go-diff v1.4.0 // indirect
- github.com/serialx/hashring v0.0.0-20200727003509-22c0c7ab6b1b // indirect
- github.com/shibumi/go-pathspec v1.3.0 // indirect
- github.com/skeema/knownhosts v1.3.1 // indirect
- github.com/spf13/cast v1.5.0 // indirect
- github.com/spf13/cobra v1.10.2 // indirect
- github.com/spf13/pflag v1.0.10 // indirect
- github.com/texttheater/golang-levenshtein v1.0.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.15 // 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/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
- github.com/zclconf/go-cty v1.17.0 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/auto/sdk v1.2.1 // indirect
- go.opentelemetry.io/collector/featuregate v1.58.0 // indirect
- go.opentelemetry.io/collector/pdata v1.58.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.43.0 // indirect
- go.opentelemetry.io/otel/bridge/opentracing v1.33.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.43.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0 // indirect
- go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect
- go.opentelemetry.io/proto/otlp v1.10.0 // indirect
- go.uber.org/atomic v1.11.0 // indirect
- go.uber.org/multierr v1.11.0 // indirect
- gocloud.dev v0.37.0 // indirect
- gocloud.dev/secrets/hashivault v0.37.0 // indirect
- golang.org/x/mod v0.35.0 // indirect
- golang.org/x/net v0.54.0 // indirect
- golang.org/x/oauth2 v0.36.0 // indirect
- golang.org/x/sync v0.20.0 // indirect
- golang.org/x/sys v0.44.0 // indirect
- golang.org/x/term v0.43.0 // indirect
- golang.org/x/text v0.37.0 // indirect
- golang.org/x/time v0.12.0 // indirect
- golang.org/x/tools v0.44.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-20260519071638-aa98bba5eb94 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20260519071638-aa98bba5eb94 // indirect
- google.golang.org/grpc v1.81.1 // indirect
- gopkg.in/inf.v0 v0.9.1 // 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
- 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
- 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 42b520c..0000000
--- a/go.sum
+++ /dev/null
@@ -1,1039 +0,0 @@
-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.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs=
-cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10=
-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/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/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/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/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.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk=
-github.com/BurntSushi/toml v1.6.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/Microsoft/hcsshim v0.12.9 h1:2zJy5KA+l0loz1HzEGqyNnjd3fyZA31ZBCGKacp6lLg=
-github.com/Microsoft/hcsshim v0.12.9/go.mod h1:fJ0gkFAna6ukt0bLdKB8djt4XIJhF/vEPuoIWYVvZ8Y=
-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/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/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/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.41.5 h1:dj5kopbwUsVUVFgO4Fi5BIT3t4WyqIDjGKCangnV/yY=
-github.com/aws/aws-sdk-go-v2 v1.41.5/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 h1:eBMB84YGghSocM7PsjmmPffTa+1FBUeNvGvFou6V/4o=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI=
-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.4.21 h1:Rgg6wvjjtX8bNHcvi9OnXWwcE0a2vGpbwmtICOsvcf4=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21/go.mod h1:A/kJFst/nm//cyqonihbdpQZwiUhhzpqTsdbhDdRF9c=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 h1:PEgGVtPoB6NTpPrBgqSE5hE/o47Ij9qk/SEZFbUOe9A=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21/go.mod h1:p+hz+PRAYlY3zcpJhPwXlLC4C+kqn70WIHwnzAfs6ps=
-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.4.22 h1:rWyie/PxDRIdhNf4DzRk0lvjVOqFJuNnO8WwaIRVxzQ=
-github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22/go.mod h1:zd/JsJ4P7oGfUhXn1VyLqaRZwPmZwg44Jf2dS84Dm3Y=
-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.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI=
-github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13 h1:JRaIgADQS/U6uXDqlPiefP32yXTda7Kqfx+LgspooZM=
-github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13/go.mod h1:CEuVn5WqOMilYl+tbccq8+N2ieCy0gVn3OtRb0vBNNM=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 h1:c31//R3xgIJMSC8S6hEVq+38DcvUlgFY0FM6mSI5oto=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21/go.mod h1:r6+pf23ouCB718FUxaqzZdbpYFyDtehyZcmP5KL9FkA=
-github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 h1:ZlvrNcHSFFWURB8avufQq9gFsheUgjVD9536obIknfM=
-github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21/go.mod h1:cv3TNhVrssKR0O/xxLJVRfd2oazSnZnkUeTf6ctUwfQ=
-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.97.3 h1:HwxWTbTrIHm5qY+CAEur0s/figc3qwvLWsNkF4RPToo=
-github.com/aws/aws-sdk-go-v2/service/s3 v1.97.3/go.mod h1:uoA43SdFwacedBfSgfFSjjCvYe8aYBS7EnU5GZ/YKMM=
-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.24.2 h1:FzA3bu/nt/vDvmnkg+R8Xl46gmzEDam6mZ1hzmwXFng=
-github.com/aws/smithy-go v1.24.2/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc=
-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/bazelbuild/buildtools v0.0.0-20260211083412-859bfffeef82 h1:PmoVmwzAnGb0iCjulb7Mgsaqw2Wj36LQJ8VyYaFe/ak=
-github.com/bazelbuild/buildtools v0.0.0-20260211083412-859bfffeef82/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg=
-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/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/bmatcuk/doublestar v1.1.5/go.mod h1:wiQtGV+rzVYxB7WIlirSN++5HPtPlXEo9MEoZQC/PmE=
-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.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM=
-github.com/cenkalti/backoff/v5 v5.0.3/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/charmbracelet/bubbles v1.0.0 h1:12J8/ak/uCZEMQ6KU7pcfwceyjLlWsDLAxB5fXonfvc=
-github.com/charmbracelet/bubbles v1.0.0/go.mod h1:9d/Zd5GdnauMI5ivUIVisuEm3ave1XwXtD1ckyV6r3E=
-github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlvF9nRvCICw=
-github.com/charmbracelet/bubbletea v1.3.10/go.mod h1:ORQfo0fk8U+po9VaNvnV95UPWA1BitP1E0N6xJPlHr4=
-github.com/charmbracelet/colorprofile v0.4.3 h1:QPa1IWkYI+AOB+fE+mg/5/4HRMZcaXex9t5KX76i20Q=
-github.com/charmbracelet/colorprofile v0.4.3/go.mod h1:/zT4BhpD5aGFpqQQqw7a+VtHCzu+zrQtt1zhMt9mR4Q=
-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.11.7 h1:kzv1kJvjg2S3r9KHo8hDdHFQLEqn4RBCb39dAYC84jI=
-github.com/charmbracelet/x/ansi v0.11.7/go.mod h1:9qGpnAVYz+8ACONkZBUWPtL7lulP9No6p1epAihUZwQ=
-github.com/charmbracelet/x/cellbuf v0.0.15 h1:ur3pZy0o6z/R7EylET877CBxaiE1Sp1GMxoFPAIztPI=
-github.com/charmbracelet/x/cellbuf v0.0.15/go.mod h1:J1YVbR7MUuEGIFPCaaZ96KDl5NoS0DAWkskup+mOY+Q=
-github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk=
-github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI=
-github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo=
-github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/clipperhouse/displaywidth v0.11.0 h1:lBc6kY44VFw+TDx4I8opi/EtL9m20WSEFgwIwO+UVM8=
-github.com/clipperhouse/displaywidth v0.11.0/go.mod h1:bkrFNkf81G8HyVqmKGxsPufD3JhNl3dSqnGhOoSD/o0=
-github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk=
-github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM=
-github.com/cloudflare/circl v1.6.3 h1:9GPOhQGF9MCYUeXyMYlqTR6a5gTrgR/fBLXvUgtVcg8=
-github.com/cloudflare/circl v1.6.3/go.mod h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik=
-github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4=
-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.7 h1:55JsNhqP/L7VZOijyfq6Qn0O8Oeff0UizfRuP+2pc90=
-github.com/containerd/containerd/v2 v2.0.7/go.mod h1:su8B0Z1NFQMEIztOIbHwy7xtznbCms/kFlfsxIcQrZ8=
-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/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s=
-github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE=
-github.com/cyphar/filepath-securejoin v0.6.1 h1:5CeZ1jPXEiYt3+Z6zqprSAgSWiggmpVyciv8syjIpVE=
-github.com/cyphar/filepath-securejoin v0.6.1/go.mod h1:A8hd4EnAeyujCJRrICiOWqjS1AX0a9kM5XL+NwKoYSc=
-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/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/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/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/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA=
-github.com/envoyproxy/go-control-plane/envoy v1.37.0 h1:u3riX6BoYRfF4Dr7dwSOroNfdSbEPe9Yyl09/B6wBrQ=
-github.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQOAOHNYMALuowAnbjjEMkkWOi6A=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMDjpqGAGacLe2T0ds=
-github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0=
-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.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
-github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
-github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
-github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
-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/git-pkgs/manifests v0.4.1 h1:CWml+TrRXVzrfNJ2pTNKLqyi+9y/BFiQP/BX3pL4pPQ=
-github.com/git-pkgs/manifests v0.4.1/go.mod h1:7SPFwU9diUG1Az682/p4ZupHJkfpbWKwRvNPwCcOeVs=
-github.com/git-pkgs/packageurl-go v0.3.1 h1:WM3RBABQZLaRBxgKyYughc3cVBE8KyQxbSC6Jt5ak7M=
-github.com/git-pkgs/packageurl-go v0.3.1/go.mod h1:rcIxiG37BlQLB6FZfgdj9Fm7yjhRQd3l+5o7J0QPAk4=
-github.com/git-pkgs/purl v0.1.10 h1:NMjeF10nzFn3tdQlz6rbmHB+i+YkyrFQxho3e33ePTQ=
-github.com/git-pkgs/purl v0.1.10/go.mod h1:C5Vp/kyZ/wGckCLexx4wPVfUxEiToRkdsOPh5Z7ig/I=
-github.com/git-pkgs/vers v0.2.4 h1:Zr3jR/Xf1i/6cvBaJKPxhCwjzqz7uvYHE0Fhid/GPBk=
-github.com/git-pkgs/vers v0.2.4/go.mod h1:biTbSQK1qdbrsxDEKnqe3Jzclxz8vW6uDcwKjfUGcOo=
-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-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.9.0 h1:jItGXszUDRtR/AlferWPTMN4j38BQ88XnXKbilmmBPA=
-github.com/go-git/go-billy/v5 v5.9.0/go.mod h1:jCnQMLj9eUgGU7+ludSTYoZL/GGmii14RxKFj7ROgHw=
-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.19.0 h1:+WkVUQZSy/F1Gb13udrMKjIM2PrzsNfDKFSfo5tkMtc=
-github.com/go-git/go-git/v5 v5.19.0/go.mod h1:Pb1v0c7/g8aGQJwx9Us09W85yGoyvSwuhEGMH7zjDKQ=
-github.com/go-jose/go-jose/v3 v3.0.5 h1:BLLJWbC4nMZOfuPVxoZIxeYsn6Nl2r1fITaJ78UQlVQ=
-github.com/go-jose/go-jose/v3 v3.0.5/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.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
-github.com/go-logr/logr v1.4.3/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-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.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U=
-github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
-github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
-github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
-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.5 h1:DrW6hGnjIhtvhOIiAKT6Psh/Kd/ldepEa81DKeiRJ5I=
-github.com/golang/glog v1.2.5/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/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.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.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/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/grpc-ecosystem/grpc-gateway/v2 v2.29.0 h1:5VipnvEpbqr2gA2VbM+nYVbkIF28c5ZQfqCBQ5g2xfk=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0/go.mod h1:Hyl3n6Twe1hvtd9XUXDec4pTvgMSEixRuQKPTMH2bNs=
-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.9.0 h1:CeOIz6k+LoN3qX9Z0tyQrPtiB1DFYRPfCIBtaXPSCnA=
-github.com/hashicorp/go-version v1.9.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.24.0 h1:2QJdZ454DSsYGoaE6QheQZjtKZSUs9Nh2izTWiwQxvE=
-github.com/hashicorp/hcl/v2 v2.24.0/go.mod h1:oGoO1FIQYfn/AgyOhlg9qLC6/nOJPX3qGbkZpYAcqfM=
-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/v2 v2.3.1 h1:GcDwp9TkPkDG/wVodudePKPG8HbvEA8o8Z9hySIuAC4=
-github.com/hexops/autogold/v2 v2.3.1/go.mod h1:1vQ1sj0yXQNn8VOlQeefQPXTLr9Qy9cf8pMDanZ4Gmo=
-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.5.0 h1:FBTuvVi0wjTngtXJRZXMbkN/Dn6DgsUsBwch2DUJU8Y=
-github.com/hexops/valast v1.5.0/go.mod h1:Jcy1pNH7LNraVaAZDLyv21hHg2WBv9Nf9FL6fGxU7o4=
-github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
-github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
-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/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/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/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/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
-github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
-github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
-github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
-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/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
-github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
-github.com/lucasb-eyer/go-colorful v1.4.0 h1:UtrWVfLdarDgc44HcS7pYloGHJUjHV/4FwW4TvVgFr4=
-github.com/lucasb-eyer/go-colorful v1.4.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
-github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
-github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
-github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
-github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
-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.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4=
-github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4=
-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.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
-github.com/mattn/go-runewidth v0.0.23 h1:7ykA0T0jkPpzSvMS5i9uoNn2Xy3R383f9HDx3RybWcw=
-github.com/mattn/go-runewidth v0.0.23/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
-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/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/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/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8=
-github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-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.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/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/nightlyone/lockfile v1.0.0 h1:RHep2cFKK4PonZJDdEl4GmkabuhbsRMgk/k3uAmxBiA=
-github.com/nightlyone/lockfile v1.0.0/go.mod h1:rywoIealpdNse2r832aiD9jRk8ErCatROs6LzC841CI=
-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/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.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU=
-github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w=
-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/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.12 h1:SjjaJ68Dt8Z4zHwOpY/RPijd7lShs6xYupJbF9ra00M=
-github.com/pgavlin/fx/v2 v2.0.12/go.mod h1:M/nF/ooAOy+NUBooYYXl2REARzJ/giPJxfMs8fINfKc=
-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/pjbgf/sha1cd v0.6.0 h1:3WJ8Wz8gvDz29quX1OcEmkAlUg9diU4GxJHqs0/XiwU=
-github.com/pjbgf/sha1cd v0.6.0/go.mod h1:lhpGlyHLpQZoxMv8HcgXvZEhcGs0PG/vsZnEJ7H0iCM=
-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/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.24.0 h1:sCtiB0qbyrlU1ZNzJn4dTLYiChl8xeCBFbHWl1YoXJg=
-github.com/pulumi/esc v0.24.0/go.mod h1:eCOOkcDJS6eooGwdE4/E0+pOsvUWG254+KBmPCFwJpA=
-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.7.0 h1:nXydemrnkJfil6sd8AtvO81gJOTzYc1wFfgtco4zWDc=
-github.com/pulumi/providertest v0.7.0/go.mod h1:R7nigJF1sE3yUtNQSozNSfsUl/gK4xIDW0Mxmacl6IY=
-github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet/v3 v3.106.2 h1:U77T2dS9RWqRrMtzhEgTvo6diTyhp+0E4eFuN0nsrJw=
-github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet/v3 v3.106.2/go.mod h1:OcTMxxijNMcL9WfRVIt+vZwSn0jWvCakg+7yCA448Hc=
-github.com/pulumi/pulumi-go-provider v1.3.2 h1:G02Jzt1a5D8QwcdHTJIcdJ+IG6RUYTVDL1hg5yh4JaU=
-github.com/pulumi/pulumi-go-provider v1.3.2/go.mod h1:L99PGubfMAQ3nZcPIg2a6kQ5QA8dvF4bUmDgiXzRSc8=
-github.com/pulumi/pulumi-java v1.28.0 h1:6Ag08R0UtOKPlUrsaRugZ0NJJN7M8wmVo7bqPLsyrs8=
-github.com/pulumi/pulumi-java v1.28.0/go.mod h1:CgvZi5WWQKj84XRRRLXMj8qjQUvrgY2pnmbsJE49hks=
-github.com/pulumi/pulumi/pkg/v3 v3.242.0 h1:XSKYPCh2/WuRmK0qncQQ7vEbdXxbo7VM9959IwtaINg=
-github.com/pulumi/pulumi/pkg/v3 v3.242.0/go.mod h1:Mgt/CpfdxGZ57alOsScFNA+XN4hwkAE0Jby9VNamNLk=
-github.com/pulumi/pulumi/sdk/v3 v3.242.0 h1:gQIZ1ALbT5gCMuRoBscGzk7Rdbx9mbOc+YwDFxvRyss=
-github.com/pulumi/pulumi/sdk/v3 v3.242.0/go.mod h1:P9VS6pQws3YBu67uszFRHn24n5AwzeMlyC2hIiHGWHg=
-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/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-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/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/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/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.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw=
-github.com/sergi/go-diff v1.4.0/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/shibumi/go-pathspec v1.3.0 h1:QUyMZhFo0Md5B8zV8x2tesohbb5kfbpTi9rBnKh5dkI=
-github.com/shibumi/go-pathspec v1.3.0/go.mod h1:Xutfslp817l2I1cZvgcfeMQJG5QnU2lh5tVaaMCl3jE=
-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/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8=
-github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY=
-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.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
-github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=
-github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
-github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-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.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
-github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
-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/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.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY=
-github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
-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/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/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-github.com/zclconf/go-cty v1.4.0/go.mod h1:nHzOclRkoj++EU9ZjSrZvRG0BXIWt8c7loYc0qXAFGQ=
-github.com/zclconf/go-cty v1.17.0 h1:seZvECve6XX4tmnvRzWtJNHdscMtYEx5R7bnnVyd/d0=
-github.com/zclconf/go-cty v1.17.0/go.mod h1:wqFzcImaLTI6A5HfsRwB0nj5n0MRZFwmey8YoFPPs3U=
-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=
-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.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
-go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
-go.opentelemetry.io/collector/featuregate v1.58.0 h1:Kh6Dpgbxywv/Q3D6qPehaSxNCxvr/U/ki7CL4y3udCo=
-go.opentelemetry.io/collector/featuregate v1.58.0/go.mod h1:4ga1QBMPEejXXmpyJS8lmaRpknJ3Lb9Bvk6e420bUFU=
-go.opentelemetry.io/collector/internal/testutil v0.152.0 h1:8LGwekR7mLcUDhT1ofLmdnrHRFuUa3U7PBd95ZvJEjQ=
-go.opentelemetry.io/collector/internal/testutil v0.152.0/go.mod h1:Jkjs6rkqs973LqgZ0Fe3zrokQRKULYXPIf4HuqStiEE=
-go.opentelemetry.io/collector/pdata v1.58.0 h1:5Lxut3NxKp87066Pzt+3q7+JUuFI5B3teCyLZIF8wIs=
-go.opentelemetry.io/collector/pdata v1.58.0/go.mod h1:4vZtODINbC/JF3eGocnatdImzbRHseOywIcr+aULjCg=
-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.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I=
-go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0=
-go.opentelemetry.io/otel/bridge/opentracing v1.33.0 h1:eH88qvKdY7ns7Xu6WlJBQNOzZ3MVvBR6tEl2euaYS9w=
-go.opentelemetry.io/otel/bridge/opentracing v1.33.0/go.mod h1:FNai/nhRSn/kHyv+V1zaf/30BU8hO/DXo0MvV0PaUS8=
-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.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 h1:RAE+JPfvEmvy+0LzyUA25/SGawPwIUbZ6u0Wug54sLc=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0/go.mod h1:AGmbycVGEsRx9mXMZ75CsOyhSP6MFIcj/6dnG+vhVjk=
-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.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM=
-go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY=
-go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg=
-go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg=
-go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw=
-go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A=
-go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A=
-go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0=
-go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g=
-go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk=
-go.opentelemetry.io/proto/slim/otlp v1.10.0 h1:iR97Vs/ZDR+y9TfuP9b1XBtdPWeC+OMslIBmhcLU7jM=
-go.opentelemetry.io/proto/slim/otlp v1.10.0/go.mod h1:lV9250stpjYLPNA5viFabIgP2QlUGRT1GdTgAf8SIUk=
-go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.3.0 h1:RUF5rO0hAlgiJt1fzQVzcVs3vZVNHIcMLgOgG4rWNcQ=
-go.opentelemetry.io/proto/slim/otlp/collector/profiles/v1development v0.3.0/go.mod h1:I89cynRj8y+383o7tEQVg2SVA6SRgDVIouWPUVXjx0U=
-go.opentelemetry.io/proto/slim/otlp/profiles/v1development v0.3.0 h1:CQvJSldHRUN6Z8jsUeYv8J0lXRvygALXIzsmAeCcZE0=
-go.opentelemetry.io/proto/slim/otlp/profiles/v1development v0.3.0/go.mod h1:xSQ+mEfJe/GjK1LXEyVOoSI1N9JV9ZI923X5kup43W4=
-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/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y=
-go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU=
-go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
-go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-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.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.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI=
-golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM=
-golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80=
-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.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-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.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM=
-golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU=
-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-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-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.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.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w=
-golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ=
-golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
-golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
-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-20201020160332-67f06af15bc9/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.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
-golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
-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-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-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-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-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-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.8.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.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ=
-golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
-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.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.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4=
-golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk=
-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.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.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
-golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
-golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
-golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
-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-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-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.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-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.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c=
-golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI=
-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=
-gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
-gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
-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-20260519071638-aa98bba5eb94 h1:DddG61lE5LkX6144z22i0gma9BMBs5aZ9B8lZLobxyw=
-google.golang.org/genproto/googleapis/api v0.0.0-20260519071638-aa98bba5eb94/go.mod h1:1dCETSCY2YKZNXQE3h4fun3TYwF5p8jejRKZgfWAgAY=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20260519071638-aa98bba5eb94 h1:eZCjr/aAF8c5ccm5pb6T4EXgIei5MlAAPWPJk+5ArfY=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20260519071638-aa98bba5eb94/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
-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.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ=
-google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I=
-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.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
-google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
-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/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=
-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.9.2 h1:zsEMWL8SVKGHNztrx6uZrXdp7AX8r421Vvp23sz7ik4=
-mvdan.cc/gofumpt v0.9.2/go.mod h1:iB7Hn+ai8lPvofHd9ZFGVg2GOr8sBUw1QUWjNbmIL/s=
-pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk=
-pgregory.net/rapid v1.2.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 f4588c1..0000000
--- a/provider/cmd/pulumi-resource-docker-build/main.go
+++ /dev/null
@@ -1,29 +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/sdk/v3/go/common/util/cmdutil"
-
- "github.com/pulumi/pulumi-docker-build/provider"
-)
-
-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 d46fd15..0000000
--- a/provider/cmd/pulumi-resource-docker-build/schema.json
+++ /dev/null
@@ -1,1407 +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",
- "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": {
- "description": "Recommended for use with GitHub Actions workflows.\n\nAn action like `crazy-max/ghaction-github-runtime` is recommended to expose\nappropriate credentials to your GitHub workflow.",
- "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"
- }
- },
- "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": [
- "region",
- "bucket"
- ]
- },
- "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": {
- "description": "Recommended for use with GitHub Actions workflows.\n\nAn action like `crazy-max/ghaction-github-runtime` is recommended to expose\nappropriate credentials to your GitHub workflow.",
- "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"
- }
- },
- "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": [
- "region",
- "bucket"
- ]
- },
- "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"
- ]
- }
- },
- "registries": {
- "type": "array",
- "items": {
- "$ref": "#/types/docker-build:index:Registry"
- }
- }
- },
- "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/v7/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```hcl\npulumi {\n required_providers {\n aws = {\n source = \"pulumi/aws\"\n version = \"7.29.0\"\n }\n docker-build = {\n source = \"pulumi/docker-build\"\n version = \"0.0.15\"\n }\n }\n}\n\ndata \"aws_ecr_getauthorizationtoken\" \"authToken\" {\n registry_id = aws_ecr_repository.ecr-repository.registry_id\n}\n\nresource \"aws_ecr_repository\" \"ecr-repository\" {\n}\nresource \"docker-build_image\" \"my-image\" {\n cache_from {\n registry = {\n ref =\"${aws_ecr_repository.ecr-repository.repository_url}:cache\"\n }\n }\n cache_to {\n registry = {\n image_manifest = true\n oci_media_types = true\n ref =\"${aws_ecr_repository.ecr-repository.repository_url}:cache\"\n }\n }\n context = {\n location = \"./app\"\n }\n push = true\n registries {\n address = aws_ecr_repository.ecr-repository.repository_url\n password = data.aws_ecr_getauthorizationtoken.authToken.password\n username = data.aws_ecr_getauthorizationtoken.authToken.user_name\n }\n tags = [\"${aws_ecr_repository.ecr-repository.repository_url}:latest\"]\n}\noutput \"ref\" {\n value = docker-build_image.my-image.ref\n}\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.ArrayList;\nimport java.util.Arrays;\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(_authToken -> _authToken.password()))\n .username(authToken.applyValue(_authToken -> _authToken.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```hcl\npulumi {\n required_providers {\n docker-build = {\n source = \"pulumi/docker-build\"\n version = \"0.0.15\"\n }\n }\n}\n\nresource \"docker-build_image\" \"image\" {\n context = {\n location = \"app\"\n }\n platforms = [\"plan9/amd64\", \"plan9/386\"]\n push = false\n}\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.ArrayList;\nimport java.util.Arrays;\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 = image.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\", 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\"] = image.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\timage, 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\", image.Ref)\n\t\treturn nil\n\t})\n}\n```\n```yaml\ndescription: Registry export\nname: registry\noutputs:\n ref: ${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```hcl\npulumi {\n required_providers {\n docker-build = {\n source = \"pulumi/docker-build\"\n version = \"0.0.15\"\n }\n }\n}\n\nresource \"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}\noutput \"ref\" {\n value = docker-build_image.image.ref\n}\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.ArrayList;\nimport java.util.Arrays;\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\", image.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```hcl\npulumi {\n required_providers {\n docker-build = {\n source = \"pulumi/docker-build\"\n version = \"0.0.15\"\n }\n }\n}\n\nresource \"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 = \"max\"\n }\n }\n context = {\n location = \"app\"\n }\n push = false\n}\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.ArrayList;\nimport java.util.Arrays;\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```hcl\npulumi {\n required_providers {\n docker-build = {\n source = \"pulumi/docker-build\"\n version = \"0.0.15\"\n }\n }\n}\n\nresource \"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```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.ArrayList;\nimport java.util.Arrays;\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```hcl\npulumi {\n required_providers {\n docker-build = {\n source = \"pulumi/docker-build\"\n version = \"0.0.15\"\n }\n }\n}\n\nresource \"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```\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.ArrayList;\nimport java.util.Arrays;\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```hcl\npulumi {\n required_providers {\n docker-build = {\n source = \"pulumi/docker-build\"\n version = \"0.0.15\"\n }\n }\n}\n\nresource \"docker-build_image\" \"image\" {\n context = {\n location = \"app\"\n }\n push = false\n target = \"build-me\"\n}\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.ArrayList;\nimport java.util.Arrays;\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```hcl\npulumi {\n required_providers {\n docker-build = {\n source = \"pulumi/docker-build\"\n version = \"0.0.15\"\n }\n }\n}\n\nresource \"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```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.ArrayList;\nimport java.util.Arrays;\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\", ContextArgs.builder()\n%!v(PANIC=Format method: interface conversion: model.Expression is *model.TemplateExpression, not *model.LiteralValueExpression)))\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```hcl\npulumi {\n required_providers {\n docker-build = {\n source = \"pulumi/docker-build\"\n version = \"0.0.15\"\n }\n }\n}\n\nresource \"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```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.ArrayList;\nimport java.util.Arrays;\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```hcl\npulumi {\n required_providers {\n docker-build = {\n source = \"pulumi/docker-build\"\n version = \"0.0.15\"\n }\n }\n}\n\nresource \"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```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.ArrayList;\nimport java.util.Arrays;\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```hcl\npulumi {\n required_providers {\n docker-build = {\n source = \"pulumi/docker-build\"\n version = \"0.0.15\"\n }\n }\n}\n\nresource \"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```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.ArrayList;\nimport java.util.Arrays;\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```hcl\npulumi {\n required_providers {\n docker-build = {\n source = \"pulumi/docker-build\"\n version = \"0.0.15\"\n }\n }\n}\n\nresource \"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```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.ArrayList;\nimport java.util.Arrays;\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."
- }
- },
- "required": [
- "push",
- "digest",
- "contextHash",
- "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```hcl\npulumi {\n required_providers {\n docker-build = {\n source = \"pulumi/docker-build\"\n version = \"0.0.15\"\n }\n }\n}\n\nresource \"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 = \"max\"\n ref = \"docker.io/pulumi/pulumi:cache-amd64\"\n }\n }\n context = {\n location = \"app\"\n }\n platforms = [\"linux/amd64\"]\n tags = [\"docker.io/pulumi/pulumi:3.107.0-amd64\"]\n}\nresource \"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 = \"max\"\n ref = \"docker.io/pulumi/pulumi:cache-arm64\"\n }\n }\n context = {\n location = \"app\"\n }\n platforms = [\"linux/arm64\"]\n tags = [\"docker.io/pulumi/pulumi:3.107.0-arm64\"]\n}\nresource \"docker-build_index\" \"index\" {\n sources = [docker-build_image.amd64.ref, docker-build_image.arm64.ref]\n tag = \"docker.io/pulumi/pulumi:3.107.0\"\n}\noutput \"ref\" {\n value = docker-build_index.index.ref\n}\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.ArrayList;\nimport java.util.Arrays;\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."
- }
- },
- "required": [
- "tag",
- "sources",
- "ref"
- ],
- "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": [
- "tag",
- "sources"
- ]
- }
- }
-}
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 f33195c..0000000
--- a/provider/internal/cache.go
+++ /dev/null
@@ -1,758 +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"
- "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 {
- Scope string `pulumi:"scope,optional"`
-}
-
-// Annotate sets docstrings on CacheFromGitHubActions.
-func (c *CacheFromGitHubActions) Annotate(a infer.Annotator) {
- a.Describe(&c, 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.SetDefault(&c.Scope, "buildkit")
-
- 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)
- }
- // Preserving backwards compatibility with the old behaviour.
- if token := os.Getenv("ACTIONS_RUNTIME_TOKEN"); token != "" {
- parts = append(parts, "token="+token)
- }
- if url := os.Getenv("ACTIONS_CACHE_URL"); url != "" {
- parts = append(parts, "url="+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(_ 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(_ 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 f3c86d7..0000000
--- a/provider/internal/cache_test.go
+++ /dev/null
@@ -1,172 +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"
-)
-
-//nolint:paralleltest // We don't call t.Parallel here to prevent environment corruption.
-func TestCacheString(t *testing.T) {
- gzip := Gzip
-
- tests := []struct {
- name string
- arrange func(t *testing.T)
- 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{}},
- arrange: func(t *testing.T) {
- t.Setenv("ACTIONS_CACHE_URL", "")
- t.Setenv("ACTIONS_RUNTIME_TOKEN", "")
- },
- want: "type=gha",
- },
- {
- name: "gha-default-envs",
- arrange: func(t *testing.T) {
- t.Setenv("ACTIONS_CACHE_URL", "https://example.com")
- t.Setenv("ACTIONS_RUNTIME_TOKEN", "token")
- },
- given: CacheTo{GHA: &CacheToGitHubActions{
- CacheFromGitHubActions: CacheFromGitHubActions{
- Scope: "scope",
- },
- }},
- want: "type=gha,scope=scope,token=token,url=https://example.com",
- },
- {
- name: "gha-with-scope",
- arrange: func(t *testing.T) {
- t.Setenv("ACTIONS_CACHE_URL", "")
- t.Setenv("ACTIONS_RUNTIME_TOKEN", "")
- },
- given: CacheTo{GHA: &CacheToGitHubActions{
- CacheFromGitHubActions: CacheFromGitHubActions{
- Scope: "scope",
- },
- }},
- want: "type=gha,scope=scope",
- },
- {
- 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: "",
- },
- }
-
- //nolint:paralleltest // We don't call t.Parallel here to prevent environment corruption.
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- if tt.arrange != nil {
- tt.arrange(t)
- }
-
- 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 08e82ff..0000000
--- a/provider/internal/client.go
+++ /dev/null
@@ -1,454 +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/containerd/errdefs"
- "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 errors.Is(err, errs.ErrNotFound) {
- return "", fmt.Errorf("fetching %q: %w", ref, errdefs.ErrNotFound)
- }
- 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 errors.Is(err, errs.ErrNotFound) {
- 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 1435ab3..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 db4d63c..0000000
--- a/provider/internal/embed/image-examples.md
+++ /dev/null
@@ -1,2143 +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/v7/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}
-```
-```hcl
-pulumi {
- required_providers {
- aws = {
- source = "pulumi/aws"
- version = "7.29.0"
- }
- docker-build = {
- source = "pulumi/docker-build"
- version = "0.0.15"
- }
- }
-}
-
-data "aws_ecr_getauthorizationtoken" "authToken" {
- registry_id = aws_ecr_repository.ecr-repository.registry_id
-}
-
-resource "aws_ecr_repository" "ecr-repository" {
-}
-resource "docker-build_image" "my-image" {
- cache_from {
- registry = {
- ref ="${aws_ecr_repository.ecr-repository.repository_url}:cache"
- }
- }
- cache_to {
- registry = {
- image_manifest = true
- oci_media_types = true
- ref ="${aws_ecr_repository.ecr-repository.repository_url}:cache"
- }
- }
- context = {
- location = "./app"
- }
- push = true
- registries {
- address = aws_ecr_repository.ecr-repository.repository_url
- password = data.aws_ecr_getauthorizationtoken.authToken.password
- username = data.aws_ecr_getauthorizationtoken.authToken.user_name
- }
- tags = ["${aws_ecr_repository.ecr-repository.repository_url}:latest"]
-}
-output "ref" {
- value = docker-build_image.my-image.ref
-}
-```
-```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.ArrayList;
-import java.util.Arrays;
-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(_authToken -> _authToken.password()))
- .username(authToken.applyValue(_authToken -> _authToken.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
-```
-```hcl
-pulumi {
- required_providers {
- docker-build = {
- source = "pulumi/docker-build"
- version = "0.0.15"
- }
- }
-}
-
-resource "docker-build_image" "image" {
- context = {
- location = "app"
- }
- platforms = ["plan9/amd64", "plan9/386"]
- push = false
-}
-```
-```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.ArrayList;
-import java.util.Arrays;
-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 = image.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", 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"] = image.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 {
- image, 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", image.Ref)
- return nil
- })
-}
-```
-```yaml
-description: Registry export
-name: registry
-outputs:
- ref: ${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
-```
-```hcl
-pulumi {
- required_providers {
- docker-build = {
- source = "pulumi/docker-build"
- version = "0.0.15"
- }
- }
-}
-
-resource "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"]
-}
-output "ref" {
- value = docker-build_image.image.ref
-}
-```
-```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.ArrayList;
-import java.util.Arrays;
-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", image.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
-```
-```hcl
-pulumi {
- required_providers {
- docker-build = {
- source = "pulumi/docker-build"
- version = "0.0.15"
- }
- }
-}
-
-resource "docker-build_image" "image" {
- cache_from {
- local = {
- src = "tmp/cache"
- }
- }
- cache_to {
- local = {
- dest = "tmp/cache"
- mode = "max"
- }
- }
- context = {
- location = "app"
- }
- push = false
-}
-```
-```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.ArrayList;
-import java.util.Arrays;
-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
-```
-```hcl
-pulumi {
- required_providers {
- docker-build = {
- source = "pulumi/docker-build"
- version = "0.0.15"
- }
- }
-}
-
-resource "docker-build_image" "image" {
- builder = {
- name = "cloud-builder-name"
- }
- context = {
- location = "app"
- }
- exec = true
- push = false
-}
-```
-```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.ArrayList;
-import java.util.Arrays;
-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
-```
-```hcl
-pulumi {
- required_providers {
- docker-build = {
- source = "pulumi/docker-build"
- version = "0.0.15"
- }
- }
-}
-
-resource "docker-build_image" "image" {
- build_args = {
- "SET_ME_TO_TRUE" = "true"
- }
- context = {
- location = "app"
- }
- push = false
-}
-```
-```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.ArrayList;
-import java.util.Arrays;
-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
-```
-```hcl
-pulumi {
- required_providers {
- docker-build = {
- source = "pulumi/docker-build"
- version = "0.0.15"
- }
- }
-}
-
-resource "docker-build_image" "image" {
- context = {
- location = "app"
- }
- push = false
- target = "build-me"
-}
-```
-```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.ArrayList;
-import java.util.Arrays;
-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
-```
-```hcl
-pulumi {
- required_providers {
- docker-build = {
- source = "pulumi/docker-build"
- version = "0.0.15"
- }
- }
-}
-
-resource "docker-build_image" "image" {
- context = {
- location = "app"
- named = {
- "golang:latest" = {
- location = "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"
- }
- }
- }
- push = false
-}
-```
-```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.ArrayList;
-import java.util.Arrays;
-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", ContextArgs.builder()
-%!v(PANIC=Format method: interface conversion: model.Expression is *model.TemplateExpression, not *model.LiteralValueExpression)))
- .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
-```
-```hcl
-pulumi {
- required_providers {
- docker-build = {
- source = "pulumi/docker-build"
- version = "0.0.15"
- }
- }
-}
-
-resource "docker-build_image" "image" {
- context = {
- location = "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"
- }
- push = false
-}
-```
-```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.ArrayList;
-import java.util.Arrays;
-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
-```
-```hcl
-pulumi {
- required_providers {
- docker-build = {
- source = "pulumi/docker-build"
- version = "0.0.15"
- }
- }
-}
-
-resource "docker-build_image" "image" {
- context = {
- location = "app"
- }
- dockerfile = {
- inline = "FROM busybox\nCOPY hello.c ./\n"
- }
- push = false
-}
-```
-```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.ArrayList;
-import java.util.Arrays;
-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
-```
-```hcl
-pulumi {
- required_providers {
- docker-build = {
- source = "pulumi/docker-build"
- version = "0.0.15"
- }
- }
-}
-
-resource "docker-build_image" "image" {
- context = {
- location = "https://github.com/docker-library/hello-world.git"
- }
- dockerfile = {
- location = "app/Dockerfile"
- }
- push = false
-}
-```
-```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.ArrayList;
-import java.util.Arrays;
-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
-```
-```hcl
-pulumi {
- required_providers {
- docker-build = {
- source = "pulumi/docker-build"
- version = "0.0.15"
- }
- }
-}
-
-resource "docker-build_image" "image" {
- context = {
- location = "app"
- }
- exports {
- docker = {
- tar = true
- }
- }
- push = false
-}
-```
-```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.ArrayList;
-import java.util.Arrays;
-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 c0d1231..0000000
--- a/provider/internal/embed/index-examples.md
+++ /dev/null
@@ -1,462 +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
-```
-```hcl
-pulumi {
- required_providers {
- docker-build = {
- source = "pulumi/docker-build"
- version = "0.0.15"
- }
- }
-}
-
-resource "docker-build_image" "amd64" {
- cache_from {
- registry = {
- ref = "docker.io/pulumi/pulumi:cache-amd64"
- }
- }
- cache_to {
- 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"]
-}
-resource "docker-build_image" "arm64" {
- cache_from {
- registry = {
- ref = "docker.io/pulumi/pulumi:cache-arm64"
- }
- }
- cache_to {
- 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"]
-}
-resource "docker-build_index" "index" {
- sources = [docker-build_image.amd64.ref, docker-build_image.arm64.ref]
- tag = "docker.io/pulumi/pulumi:3.107.0"
-}
-output "ref" {
- value = docker-build_index.index.ref
-}
-```
-```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.ArrayList;
-import java.util.Arrays;
-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 7f01f11..0000000
--- a/provider/internal/export.go
+++ /dev/null
@@ -1,574 +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"
-)
-
-const (
- trueLiteral = "true"
-)
-
-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"] == trueLiteral
- }
- 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"] = trueLiteral
- }
- }
-
- 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 8ede0c0..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(_ 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"), //nolint:lll,staticcheck
- errors.New("Make sure you have the correct buildx plugin installed (https://github.com/docker/buildx-desktop)"), //nolint:lll,staticcheck
- )
- }
- if err != nil && build.ShouldExec() {
- //nolint:revive // Human-readable.
- err = errors.Join(err, errors.New( //nolint:staticcheck
- "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( //nolint:staticcheck
- "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 e6687e4..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/containerd/errdefs"
- "github.com/distribution/reference"
- controllerapi "github.com/docker/buildx/controller/pb"
- "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 c6670ad..0000000
--- a/provider/internal/image_test.go
+++ /dev/null
@@ -1,1137 +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(_ *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(_ *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(_ *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(_ *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(_ *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(_ *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(_ *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(_ *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(_ *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(_ *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(_ *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(_ *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(_ *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(_ *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(_ *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(_ *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(_ *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(_ *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",
- "ACTIONS_RESULTS_URL": "test-results-url",
- "ACTIONS_CACHE_SERVICE_V2": "true",
- },
- 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",
- "url_v2": "test-results-url",
- },
- },
- wantCacheTo: &pb.CacheOptionsEntry{
- Type: "gha",
- Attrs: map[string]string{
- "token": "test-runtime-token",
- "url": "test-cache-url",
- "url_v2": "test-results-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 711c974..0000000
--- a/provider/internal/index.go
+++ /dev/null
@@ -1,363 +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"
-
- // For examples/docs.
- _ "embed"
-
- "github.com/containerd/errdefs"
- "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 errdefs.IsNotFound(err) {
- // 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)
- if errdefs.IsNotFound(err) {
- 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 d05a8c9..0000000
--- a/provider/internal/index_test.go
+++ /dev/null
@@ -1,261 +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/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"
-)
-
-func TestIndexLifecycle(t *testing.T) {
- t.Parallel()
- realClient := func(_ *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(_ *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(_ *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(_ *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(_ *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(_ *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)
- })
- }
-}
-
-func TestIndexDelete(t *testing.T) {
- t.Parallel()
- t.Run("manifest already deleted (404)", func(t *testing.T) {
- t.Parallel()
- ctrl := gomock.NewController(t)
- client := NewMockClient(ctrl)
- client.EXPECT().
- ManifestDelete(gomock.Any(), "docker.io/pulumi/test:manifest").
- Return(errNotFound{})
-
- i := &Index{clientF: mockClientF(client)}
-
- _, err := i.Delete(t.Context(), infer.DeleteRequest[IndexState]{
- ID: "foo",
- State: IndexState{
- IndexArgs: IndexArgs{Tag: "docker.io/pulumi/test:manifest"},
- Ref: "docker.io/pulumi/test:manifest",
- },
- })
- assert.NoError(t, err)
- })
-}
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 cd737a6..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"
-
- csgen "github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet/v3/codegen"
- 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"
- 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 a87f9cd..0000000
--- a/provider/provider.go
+++ /dev/null
@@ -1,39 +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 (
- gp "github.com/pulumi/pulumi-go-provider"
- "github.com/pulumi/pulumi/pkg/v3/resource/provider"
- rpc "github.com/pulumi/pulumi/sdk/v3/proto/go"
-
- "github.com/pulumi/pulumi-docker-build/provider/internal"
-)
-
-// 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/.gitattributes b/sdk/dotnet/.gitattributes
deleted file mode 100644
index aae64e2..0000000
--- a/sdk/dotnet/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-* linguist-generated
diff --git a/sdk/dotnet/.gitignore b/sdk/dotnet/.gitignore
deleted file mode 100644
index 1746e32..0000000
--- a/sdk/dotnet/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-bin
-obj
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 6ec6ef7..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"] = image.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 e49acbf..0000000
--- a/sdk/dotnet/Inputs/CacheFromGitHubActionsArgs.cs
+++ /dev/null
@@ -1,36 +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
-{
-
- ///
- /// 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.
- ///
- 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; }
-
- public CacheFromGitHubActionsArgs()
- {
- Scope = "buildkit";
- }
- 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 e530974..0000000
--- a/sdk/dotnet/Inputs/CacheToGitHubActionsArgs.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
-{
-
- ///
- /// 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.
- ///
- 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; }
-
- public CacheToGitHubActionsArgs()
- {
- IgnoreError = false;
- Mode = Pulumi.DockerBuild.CacheMode.Min;
- Scope = "buildkit";
- }
- 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;
-
- ///
- /// 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; }
-
- ///
- /// Push after creating the image. Defaults to `false`.
- ///
- [Input("push")]
- public Input? Push { get; set; }
-
- ///
- /// Push image without name.
- ///
- [Input("pushByDigest")]
- public Input? PushByDigest { get; set; }
-
- ///
- /// 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).
- ///
- [Input("store")]
- public Input? Store { get; set; }
-
- ///
- /// Unpack image after creation (for use with containerd). Defaults to
- /// `false`.
- ///
- [Input("unpack")]
- public Input? Unpack { get; set; }
-
- public ExportImageArgs()
- {
- Compression = Pulumi.DockerBuild.CompressionType.Gzip;
- CompressionLevel = 0;
- ForceCompression = false;
- OciMediaTypes = false;
- Store = true;
- }
- public static new ExportImageArgs Empty => new ExportImageArgs();
- }
-}
diff --git a/sdk/dotnet/Inputs/ExportLocalArgs.cs b/sdk/dotnet/Inputs/ExportLocalArgs.cs
deleted file mode 100644
index 62da5b4..0000000
--- a/sdk/dotnet/Inputs/ExportLocalArgs.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 ExportLocalArgs : global::Pulumi.ResourceArgs
- {
- ///