Compare commits

..

60 Commits

Author SHA1 Message Date
Bryce Lampe
5f16c2f2fa Fix unauthenticated example 2024-04-25 10:13:52 -07:00
Bryce Lampe
9d35ccefac Regenerate SDKs 2024-04-25 09:58:30 -07:00
Bryce Lampe
13fb5b6158 Update examples and docs for required push 2024-04-25 09:51:24 -07:00
Bryce Lampe
f8796f9095 Make push a required param 2024-04-25 09:25:50 -07:00
Bryce Lampe
5175dbeb3f Add an upgrade test 2024-04-25 09:22:20 -07:00
Bryce Lampe
2499eeb27b Don't tidy 2024-04-23 09:33:42 -07:00
Bryce Lampe
5135d9c759 Update preview docs 2024-04-23 09:13:42 -07:00
Bryce Lampe
f5e57ab70c Merge branch 'main' of github.com:pulumi/pulumi-docker-build into forklift 2024-04-22 16:29:36 -07:00
Bryce Lampe
2987a65183 Fix diff behavior for buildOnPreview 2024-04-22 16:28:45 -07:00
Bryce Lampe
fbc4ddec66 Regenerate schema 2024-04-22 16:05:51 -07:00
Bryce Lampe
40a3223b23 Build images during preview by default 2024-04-22 16:04:01 -07:00
Bryce Lampe
72bd40b97c Add note about stability and tweak index docs 2024-04-22 15:57:02 -07:00
Bryce Lampe
a6247a78b1 Update README 2024-04-22 13:52:59 -07:00
Bryce Lampe
7597ca32ca Fix host auth key format 2024-04-22 12:44:24 -07:00
Bryce Lampe
0f23201468 Extend cli auth wrap test 2024-04-22 12:34:20 -07:00
Bryce Lampe
d72c895b59 Add a test for unauthenticated dockerhub pulls 2024-04-22 12:17:37 -07:00
Bryce Lampe
da63cd4cf4 Fix target docs 2024-04-22 12:04:35 -07:00
Bryce Lampe
561b185221 Don't log empty status or errors 2024-04-22 11:22:36 -07:00
Bryce Lampe
50b9b5ce3e Upgrade go-provider to fix panic 2024-04-22 11:22:00 -07:00
Bryce Lampe
bcf1c48554 More renames 2024-04-19 16:29:31 -07:00
Bryce Lampe
40f5fdf15e Test version 2024-04-18 10:08:12 -07:00
Bryce Lampe
b9a801e8ae Ignore EOF 2024-04-17 12:27:03 -07:00
Bryce Lampe
43979f6d93 Tweak ssh agent 2024-04-17 12:16:03 -07:00
Bryce Lampe
f4fa6ea93a Merge branch 'main' of github.com:pulumi/pulumi-docker-build into forklift 2024-04-17 11:27:44 -07:00
Bryce Lampe
dd2fb57edc Skip flakey test for now 2024-04-17 10:33:43 -07:00
Bryce Lampe
717c819a77 Disable race detection for now 2024-04-17 09:40:10 -07:00
Bryce Lampe
c8a3d26d9e Panic on SSH agent errors in test 2024-04-17 08:59:26 -07:00
Bryce Lampe
12788aca32 Fix test 2024-04-16 23:30:11 -07:00
Bryce Lampe
16ce5eca59 Improve logging 2024-04-16 23:15:43 -07:00
Bryce Lampe
2c8abc1bdb Fix dotnet case sensitivity 2024-04-16 20:41:24 -07:00
Bryce Lampe
7c40920db7 go mod tidy 2024-04-16 20:39:41 -07:00
Bryce Lampe
8313c4d8b9 fix path 2024-04-16 20:00:34 -07:00
Bryce Lampe
ca01f67657 Unit test for auth wrapping 2024-04-16 17:53:34 -07:00
Bryce Lampe
0edf5d6057 Pin pulumi-language-go 2024-04-16 17:36:49 -07:00
Bryce Lampe
c7b41bc7e2 Regenerate schema 2024-04-16 16:57:15 -07:00
Bryce Lampe
8028d11c58 Lint 2024-04-16 16:55:43 -07:00
Bryce Lampe
23b00ae76a Upgrade buildx 2024-04-16 16:53:45 -07:00
Bryce Lampe
f5d8e81f24 Fix auth again 2024-04-16 16:53:45 -07:00
Bryce Lampe
7c9632e428 Regenerate SDKs 2024-04-16 13:03:25 -07:00
Bryce Lampe
eca03ce6db Fix optional/pointer indirection errors 2024-04-16 13:03:21 -07:00
Bryce Lampe
59fd3c84e5 Merge branch 'main' of github.com:pulumi/pulumi-docker-build into forklift 2024-04-16 11:27:19 -07:00
Bryce Lampe
968ea6d57c Add mock CLI 2024-04-16 11:03:26 -07:00
Bryce Lampe
02014becfd Bump pulumi and go-provider 2024-04-16 11:01:48 -07:00
Bryce Lampe
ebcf732c89 Update workflows to reflect rename 2024-04-16 11:01:12 -07:00
Bryce Lampe
db520f164b Merge branch 'main' of github.com:pulumi/pulumi-docker-build into forklift 2024-04-16 10:55:40 -07:00
Bryce Lampe
12bf5dd689 Rename to docker-build 2024-04-15 15:16:05 -07:00
Bryce Lampe
4cd6d49ba9 Add nil guards around caches and exports 2024-04-08 09:39:40 -07:00
Bryce Lampe
3a9c246ffb Fix build 2024-03-29 15:43:29 -07:00
Bryce Lampe
fe4de036f1 Upgrade go-provider for panic fix 2024-03-29 15:37:14 -07:00
Bryce Lampe
5cb5ccbf53 Fix ECR auth 2024-03-29 15:35:50 -07:00
Bryce Lampe
da2fecf013 Fix references to buildx.Image 2024-03-29 11:22:08 -07:00
Bryce Lampe
6efd4b045b Add license to SDK 2024-03-28 10:52:17 -07:00
Bryce Lampe
b6c5d4d511 Fix go tests 2024-03-27 15:27:07 -07:00
Bryce Lampe
b455d9037f Add an identity to the agent 2024-03-27 15:16:08 -07:00
Bryce Lampe
f9b5ed8f67 Use in-memory SSH agent 2024-03-27 13:53:41 -07:00
Bryce Lampe
16196bb547 Regenerate SDK 2024-03-27 12:18:57 -07:00
Bryce Lampe
5bec2f3e1c Add SSH test 2024-03-27 11:30:40 -07:00
Bryce Lampe
91c652a702 Regenerate Go 2024-03-26 17:06:19 -07:00
Bryce Lampe
cbf957533e more lint 2024-03-26 15:36:24 -07:00
Bryce Lampe
d50d156bd8 Forklift buildx provider 2024-03-26 13:30:22 -07:00
30 changed files with 872 additions and 1169 deletions

View File

@@ -64,11 +64,13 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version - name: Checkout Scripts Repo
name: Set Provider Version uses: actions/checkout@v4
uses: pulumi/provider-version-action@v1
with: with:
set-env: PROVIDER_VERSION path: ci-scripts
repository: pulumi/scripts
- name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -118,14 +120,7 @@ jobs:
- name: Build Provider - name: Build Provider
run: make provider run: make provider
- name: Check worktree clean - name: Check worktree clean
uses: pulumi/git-status-check-action@v1 run: ./ci-scripts/ci/check-worktree-is-clean
with:
allowed-changes: |-
sdk/**/pulumi-plugin.json
sdk/dotnet/Pulumi.*.csproj
sdk/go/*/internal/pulumiUtilities.go
sdk/nodejs/package.json
sdk/python/pyproject.toml
- run: git status --porcelain - run: git status --porcelain
- name: Tar provider binaries - name: Tar provider binaries
run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{ run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
@@ -167,11 +162,13 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version - name: Checkout Scripts Repo
name: Set Provider Version uses: actions/checkout@v4
uses: pulumi/provider-version-action@v1
with: with:
set-env: PROVIDER_VERSION path: ci-scripts
repository: pulumi/scripts
- name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -222,14 +219,7 @@ jobs:
- name: Build SDK - name: Build SDK
run: make build_${{ matrix.language }} run: make build_${{ matrix.language }}
- name: Check worktree clean - name: Check worktree clean
uses: pulumi/git-status-check-action@v1 run: ./ci-scripts/ci/check-worktree-is-clean
with:
allowed-changes: |-
sdk/**/pulumi-plugin.json
sdk/dotnet/Pulumi.*.csproj
sdk/go/*/internal/pulumiUtilities.go
sdk/nodejs/package.json
sdk/python/pyproject.toml
- run: git status --porcelain - run: git status --porcelain
- name: Tar SDK folder - name: Tar SDK folder
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} . run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
@@ -268,11 +258,13 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version - name: Checkout Scripts Repo
name: Set Provider Version uses: actions/checkout@v4
uses: pulumi/provider-version-action@v1
with: with:
set-env: PROVIDER_VERSION path: ci-scripts
repository: pulumi/scripts
- name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -384,11 +376,8 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version - name: Unshallow clone for tags
name: Set Provider Version run: git fetch --prune --unshallow --tags
uses: pulumi/provider-version-action@v1
with:
set-env: PROVIDER_VERSION
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -419,10 +408,11 @@ jobs:
role-session-name: ${{ env.PROVIDER }}@githubActions role-session-name: ${{ env.PROVIDER }}@githubActions
role-external-id: upload-pulumi-release role-external-id: upload-pulumi-release
role-to-assume: ${{ secrets.AWS_UPLOAD_ROLE_ARN }} role-to-assume: ${{ secrets.AWS_UPLOAD_ROLE_ARN }}
- name: Set PreRelease Version
run: echo "GORELEASER_CURRENT_TAG=v$(pulumictl get version --language generic)"
>> $GITHUB_ENV
- name: Run GoReleaser - name: Run GoReleaser
uses: goreleaser/goreleaser-action@v5 uses: goreleaser/goreleaser-action@v5
env:
GORELEASER_CURRENT_TAG: v${{ steps.version.outputs.version }}
with: with:
args: -p 3 -f .goreleaser.prerelease.yml --clean --skip=validate --timeout 60m0s args: -p 3 -f .goreleaser.prerelease.yml --clean --skip=validate --timeout 60m0s
version: latest version: latest
@@ -442,17 +432,13 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@v1
with:
set-env: PROVIDER_VERSION
- name: Checkout Scripts Repo - name: Checkout Scripts Repo
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
path: ci-scripts path: ci-scripts
repository: pulumi/scripts repository: pulumi/scripts
- run: echo "ci-scripts" >> .git/info/exclude - name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -525,11 +511,13 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version - name: Checkout Scripts Repo
name: Set Provider Version uses: actions/checkout@v4
uses: pulumi/provider-version-action@v1
with: with:
set-env: PROVIDER_VERSION path: ci-scripts
repository: pulumi/scripts
- name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -559,10 +547,11 @@ jobs:
- name: Uncompress java SDK - name: Uncompress java SDK
run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C
${{github.workspace}}/sdk/java ${{github.workspace}}/sdk/java
- name: Set PACKAGE_VERSION to Env
run: echo "PACKAGE_VERSION=$(pulumictl get version --language generic)" >>
$GITHUB_ENV
- name: Publish Java SDK - name: Publish Java SDK
uses: gradle/gradle-build-action@v3 uses: gradle/gradle-build-action@v3
env:
PACKAGE_VERSION: ${{ env.PROVIDER_VERSION }}
with: with:
arguments: publishToSonatype closeAndReleaseSonatypeStagingRepository arguments: publishToSonatype closeAndReleaseSonatypeStagingRepository
build-root-directory: ./sdk/java build-root-directory: ./sdk/java

View File

@@ -56,11 +56,13 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version - name: Checkout Scripts Repo
name: Set Provider Version uses: actions/checkout@v4
uses: pulumi/provider-version-action@v1
with: with:
set-env: PROVIDER_VERSION path: ci-scripts
repository: pulumi/scripts
- name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -110,14 +112,7 @@ jobs:
- name: Build Provider - name: Build Provider
run: make provider run: make provider
- name: Check worktree clean - name: Check worktree clean
uses: pulumi/git-status-check-action@v1 run: ./ci-scripts/ci/check-worktree-is-clean
with:
allowed-changes: |-
sdk/**/pulumi-plugin.json
sdk/dotnet/Pulumi.*.csproj
sdk/go/*/internal/pulumiUtilities.go
sdk/nodejs/package.json
sdk/python/pyproject.toml
- run: git status --porcelain - run: git status --porcelain
- name: Tar provider binaries - name: Tar provider binaries
run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{ run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
@@ -159,11 +154,13 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version - name: Checkout Scripts Repo
name: Set Provider Version uses: actions/checkout@v4
uses: pulumi/provider-version-action@v1
with: with:
set-env: PROVIDER_VERSION path: ci-scripts
repository: pulumi/scripts
- name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -214,14 +211,7 @@ jobs:
- name: Build SDK - name: Build SDK
run: make build_${{ matrix.language }} run: make build_${{ matrix.language }}
- name: Check worktree clean - name: Check worktree clean
uses: pulumi/git-status-check-action@v1 run: ./ci-scripts/ci/check-worktree-is-clean
with:
allowed-changes: |-
sdk/**/pulumi-plugin.json
sdk/dotnet/Pulumi.*.csproj
sdk/go/*/internal/pulumiUtilities.go
sdk/nodejs/package.json
sdk/python/pyproject.toml
- run: git status --porcelain - run: git status --porcelain
- name: Tar SDK folder - name: Tar SDK folder
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} . run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
@@ -259,11 +249,13 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version - name: Checkout Scripts Repo
name: Set Provider Version uses: actions/checkout@v4
uses: pulumi/provider-version-action@v1
with: with:
set-env: PROVIDER_VERSION path: ci-scripts
repository: pulumi/scripts
- name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -375,11 +367,8 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version - name: Unshallow clone for tags
name: Set Provider Version run: git fetch --prune --unshallow --tags
uses: pulumi/provider-version-action@v1
with:
set-env: PROVIDER_VERSION
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -410,10 +399,11 @@ jobs:
role-session-name: ${{ env.PROVIDER }}@githubActions role-session-name: ${{ env.PROVIDER }}@githubActions
role-external-id: upload-pulumi-release role-external-id: upload-pulumi-release
role-to-assume: ${{ secrets.AWS_UPLOAD_ROLE_ARN }} role-to-assume: ${{ secrets.AWS_UPLOAD_ROLE_ARN }}
- name: Set PreRelease Version
run: echo "GORELEASER_CURRENT_TAG=v$(pulumictl get version --language generic)"
>> $GITHUB_ENV
- name: Run GoReleaser - name: Run GoReleaser
uses: goreleaser/goreleaser-action@v5 uses: goreleaser/goreleaser-action@v5
env:
GORELEASER_CURRENT_TAG: v${{ steps.version.outputs.version }}
with: with:
args: -p 3 -f .goreleaser.prerelease.yml --clean --skip=validate --timeout 60m0s args: -p 3 -f .goreleaser.prerelease.yml --clean --skip=validate --timeout 60m0s
version: latest version: latest
@@ -433,17 +423,13 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@v1
with:
set-env: PROVIDER_VERSION
- name: Checkout Scripts Repo - name: Checkout Scripts Repo
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
path: ci-scripts path: ci-scripts
repository: pulumi/scripts repository: pulumi/scripts
- run: echo "ci-scripts" >> .git/info/exclude - name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -516,11 +502,13 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version - name: Checkout Scripts Repo
name: Set Provider Version uses: actions/checkout@v4
uses: pulumi/provider-version-action@v1
with: with:
set-env: PROVIDER_VERSION path: ci-scripts
repository: pulumi/scripts
- name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -550,46 +538,12 @@ jobs:
- name: Uncompress java SDK - name: Uncompress java SDK
run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C
${{github.workspace}}/sdk/java ${{github.workspace}}/sdk/java
- name: Set PACKAGE_VERSION to Env
run: echo "PACKAGE_VERSION=$(pulumictl get version --language generic)" >>
$GITHUB_ENV
- name: Publish Java SDK - name: Publish Java SDK
uses: gradle/gradle-build-action@v3 uses: gradle/gradle-build-action@v3
env:
PACKAGE_VERSION: ${{ env.PROVIDER_VERSION }}
with: with:
arguments: publishToSonatype closeAndReleaseSonatypeStagingRepository arguments: publishToSonatype closeAndReleaseSonatypeStagingRepository
build-root-directory: ./sdk/java build-root-directory: ./sdk/java
gradle-version: 7.4.1 gradle-version: 7.4.1
publish_go_sdk:
runs-on: ubuntu-latest
name: publish-go-sdk
needs: publish_sdk
steps:
- name: Checkout Repo
uses: actions/checkout@v4
with:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@v1
with:
set-env: PROVIDER_VERSION
- name: Download go SDK
uses: actions/download-artifact@v4
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
path: sdk
version: ${{ steps.version.outputs.version }}
additive: false
files: |-
go.*
go/**
!*.tar.gz

View File

@@ -56,11 +56,13 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version - name: Checkout Scripts Repo
name: Set Provider Version uses: actions/checkout@v4
uses: pulumi/provider-version-action@v1
with: with:
set-env: PROVIDER_VERSION path: ci-scripts
repository: pulumi/scripts
- name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -110,14 +112,7 @@ jobs:
- name: Build Provider - name: Build Provider
run: make provider run: make provider
- name: Check worktree clean - name: Check worktree clean
uses: pulumi/git-status-check-action@v1 run: ./ci-scripts/ci/check-worktree-is-clean
with:
allowed-changes: |-
sdk/**/pulumi-plugin.json
sdk/dotnet/Pulumi.*.csproj
sdk/go/*/internal/pulumiUtilities.go
sdk/nodejs/package.json
sdk/python/pyproject.toml
- run: git status --porcelain - run: git status --porcelain
- name: Tar provider binaries - name: Tar provider binaries
run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{ run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
@@ -159,11 +154,13 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version - name: Checkout Scripts Repo
name: Set Provider Version uses: actions/checkout@v4
uses: pulumi/provider-version-action@v1
with: with:
set-env: PROVIDER_VERSION path: ci-scripts
repository: pulumi/scripts
- name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -214,14 +211,7 @@ jobs:
- name: Build SDK - name: Build SDK
run: make build_${{ matrix.language }} run: make build_${{ matrix.language }}
- name: Check worktree clean - name: Check worktree clean
uses: pulumi/git-status-check-action@v1 run: ./ci-scripts/ci/check-worktree-is-clean
with:
allowed-changes: |-
sdk/**/pulumi-plugin.json
sdk/dotnet/Pulumi.*.csproj
sdk/go/*/internal/pulumiUtilities.go
sdk/nodejs/package.json
sdk/python/pyproject.toml
- run: git status --porcelain - run: git status --porcelain
- name: Tar SDK folder - name: Tar SDK folder
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} . run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
@@ -259,11 +249,13 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version - name: Checkout Scripts Repo
name: Set Provider Version uses: actions/checkout@v4
uses: pulumi/provider-version-action@v1
with: with:
set-env: PROVIDER_VERSION path: ci-scripts
repository: pulumi/scripts
- name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -375,11 +367,8 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version - name: Unshallow clone for tags
name: Set Provider Version run: git fetch --prune --unshallow --tags
uses: pulumi/provider-version-action@v1
with:
set-env: PROVIDER_VERSION
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -410,10 +399,11 @@ jobs:
role-session-name: ${{ env.PROVIDER }}@githubActions role-session-name: ${{ env.PROVIDER }}@githubActions
role-external-id: upload-pulumi-release role-external-id: upload-pulumi-release
role-to-assume: ${{ secrets.AWS_UPLOAD_ROLE_ARN }} role-to-assume: ${{ secrets.AWS_UPLOAD_ROLE_ARN }}
- name: Set PreRelease Version
run: echo "GORELEASER_CURRENT_TAG=v$(pulumictl get version --language generic)"
>> $GITHUB_ENV
- name: Run GoReleaser - name: Run GoReleaser
uses: goreleaser/goreleaser-action@v5 uses: goreleaser/goreleaser-action@v5
env:
GORELEASER_CURRENT_TAG: v${{ steps.version.outputs.version }}
with: with:
args: -p 3 release --clean --timeout 60m0s args: -p 3 release --clean --timeout 60m0s
version: latest version: latest
@@ -433,17 +423,13 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@v1
with:
set-env: PROVIDER_VERSION
- name: Checkout Scripts Repo - name: Checkout Scripts Repo
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
path: ci-scripts path: ci-scripts
repository: pulumi/scripts repository: pulumi/scripts
- run: echo "ci-scripts" >> .git/info/exclude - name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -516,11 +502,13 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version - name: Checkout Scripts Repo
name: Set Provider Version uses: actions/checkout@v4
uses: pulumi/provider-version-action@v1
with: with:
set-env: PROVIDER_VERSION path: ci-scripts
repository: pulumi/scripts
- name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -550,52 +538,34 @@ jobs:
- name: Uncompress java SDK - name: Uncompress java SDK
run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C
${{github.workspace}}/sdk/java ${{github.workspace}}/sdk/java
- name: Set PACKAGE_VERSION to Env
run: echo "PACKAGE_VERSION=$(pulumictl get version --language generic)" >>
$GITHUB_ENV
- name: Publish Java SDK - name: Publish Java SDK
uses: gradle/gradle-build-action@v3 uses: gradle/gradle-build-action@v3
env:
PACKAGE_VERSION: ${{ env.PROVIDER_VERSION }}
with: with:
arguments: publishToSonatype closeAndReleaseSonatypeStagingRepository arguments: publishToSonatype closeAndReleaseSonatypeStagingRepository
build-root-directory: ./sdk/java build-root-directory: ./sdk/java
gradle-version: 7.4.1 gradle-version: 7.4.1
publish_go_sdk: tag_sdk:
runs-on: ubuntu-latest runs-on: ubuntu-latest
name: publish-go-sdk
needs: publish_sdk needs: publish_sdk
steps: steps:
- name: Checkout Repo - name: Checkout Repo
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version - name: Install pulumictl
name: Set Provider Version uses: jaxxstorm/action-install-gh-release@v1.11.0
uses: pulumi/provider-version-action@v1
with: with:
set-env: PROVIDER_VERSION repo: pulumi/pulumictl
- name: Download go SDK - name: Add SDK version tag
uses: actions/download-artifact@v4 run: git tag sdk/v$(pulumictl get version --language generic) && git push origin
with: sdk/v$(pulumictl get version --language generic)
name: go-sdk.tar.gz name: tag_sdk
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
path: sdk
version: ${{ steps.version.outputs.version }}
additive: false
files: |-
go.*
go/**
!*.tar.gz
dispatch_docs_build: dispatch_docs_build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: publish_go_sdk needs: tag_sdk
steps: steps:
- name: Install pulumictl - name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@v1.11.0 uses: jaxxstorm/action-install-gh-release@v1.11.0

View File

@@ -81,11 +81,13 @@ jobs:
with: with:
lfs: true lfs: true
ref: ${{ env.PR_COMMIT_SHA }} ref: ${{ env.PR_COMMIT_SHA }}
- id: version - name: Checkout Scripts Repo
name: Set Provider Version uses: actions/checkout@v4
uses: pulumi/provider-version-action@v1
with: with:
set-env: PROVIDER_VERSION path: ci-scripts
repository: pulumi/scripts
- name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -135,14 +137,7 @@ jobs:
- name: Build Provider - name: Build Provider
run: make provider run: make provider
- name: Check worktree clean - name: Check worktree clean
uses: pulumi/git-status-check-action@v1 run: ./ci-scripts/ci/check-worktree-is-clean
with:
allowed-changes: |-
sdk/**/pulumi-plugin.json
sdk/dotnet/Pulumi.*.csproj
sdk/go/*/internal/pulumiUtilities.go
sdk/nodejs/package.json
sdk/python/pyproject.toml
- run: git status --porcelain - run: git status --porcelain
- name: Tar provider binaries - name: Tar provider binaries
run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{ run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
@@ -187,11 +182,13 @@ jobs:
with: with:
lfs: true lfs: true
ref: ${{ env.PR_COMMIT_SHA }} ref: ${{ env.PR_COMMIT_SHA }}
- id: version - name: Checkout Scripts Repo
name: Set Provider Version uses: actions/checkout@v4
uses: pulumi/provider-version-action@v1
with: with:
set-env: PROVIDER_VERSION path: ci-scripts
repository: pulumi/scripts
- name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -242,14 +239,7 @@ jobs:
- name: Build SDK - name: Build SDK
run: make build_${{ matrix.language }} run: make build_${{ matrix.language }}
- name: Check worktree clean - name: Check worktree clean
uses: pulumi/git-status-check-action@v1 run: ./ci-scripts/ci/check-worktree-is-clean
with:
allowed-changes: |-
sdk/**/pulumi-plugin.json
sdk/dotnet/Pulumi.*.csproj
sdk/go/*/internal/pulumiUtilities.go
sdk/nodejs/package.json
sdk/python/pyproject.toml
- run: git status --porcelain - run: git status --porcelain
- name: Tar SDK folder - name: Tar SDK folder
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} . run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
@@ -291,11 +281,13 @@ jobs:
with: with:
lfs: true lfs: true
ref: ${{ env.PR_COMMIT_SHA }} ref: ${{ env.PR_COMMIT_SHA }}
- id: version - name: Checkout Scripts Repo
name: Set Provider Version uses: actions/checkout@v4
uses: pulumi/provider-version-action@v1
with: with:
set-env: PROVIDER_VERSION path: ci-scripts
repository: pulumi/scripts
- name: Unshallow clone for tags
run: git fetch --prune --unshallow --tags
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:

View File

@@ -54,11 +54,8 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
lfs: true lfs: true
- id: version - name: Unshallow clone for tags
name: Set Provider Version run: git fetch --prune --unshallow --tags
uses: pulumi/provider-version-action@v1
with:
set-env: PROVIDER_VERSION
- name: Install Go - name: Install Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@@ -133,7 +130,7 @@ jobs:
uses: repo-sync/pull-request@v2.6.2 uses: repo-sync/pull-request@v2.6.2
with: with:
source_branch: update-pulumi/${{ github.run_id }}-${{ github.run_number }} source_branch: update-pulumi/${{ github.run_id }}-${{ github.run_number }}
destination_branch: main destination_branch: master
pr_title: Automated Pulumi/Pulumi upgrade pr_title: Automated Pulumi/Pulumi upgrade
github_token: ${{ secrets.PULUMI_BOT_TOKEN }} github_token: ${{ secrets.PULUMI_BOT_TOKEN }}
env: env:

View File

@@ -1,12 +0,0 @@
## Unreleased
## 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.

View File

@@ -7,6 +7,7 @@ NODE_MODULE_NAME := @pulumi/docker-build
NUGET_PKG_NAME := Pulumi.DockerBuild NUGET_PKG_NAME := Pulumi.DockerBuild
PROVIDER := pulumi-resource-${PACK} PROVIDER := pulumi-resource-${PACK}
VERSION ?= $(shell pulumictl get version)
PROVIDER_PATH := provider PROVIDER_PATH := provider
VERSION_PATH := ${PROVIDER_PATH}.Version VERSION_PATH := ${PROVIDER_PATH}.Version
SCHEMA_PATH := ${PROVIDER_PATH}/cmd/pulumi-resource-${PACK}/schema.json SCHEMA_PATH := ${PROVIDER_PATH}/cmd/pulumi-resource-${PACK}/schema.json
@@ -20,12 +21,6 @@ TESTPARALLELISM := 4
PULUMI := bin/pulumi PULUMI := bin/pulumi
GOGLANGCILINT := bin/golangci-lint GOGLANGCILINT := bin/golangci-lint
# Override during CI using `make [TARGET] PROVIDER_VERSION=""` or by setting a PROVIDER_VERSION environment variable
# Local & branch builds will just used this fixed default version unless specified
PROVIDER_VERSION ?= 1.0.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)")
.PHONY: ensure .PHONY: ensure
ensure:: tidy lint test_provider examples ensure:: tidy lint test_provider examples
@@ -36,11 +31,8 @@ tidy:
.PHONY: provider .PHONY: provider
provider: bin/${PROVIDER} bin/pulumi-gen-${PACK} # Required by CI provider: bin/${PROVIDER} bin/pulumi-gen-${PACK} # Required by CI
.PHONY: local_generate
local_generate: sdk # Required by CI
provider_debug:: 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)) (cd provider && go build -o $(WORKING_DIR)/bin/${PROVIDER} -gcflags="all=-N -l" -ldflags "-X ${PROJECT}/${VERSION_PATH}=${VERSION}" $(PROJECT)/${PROVIDER_PATH}/cmd/$(PROVIDER))
test_provider:: # Required by CI test_provider:: # Required by CI
go test -short -v -coverprofile="coverage.txt" -coverpkg=./provider/... -timeout 2h -parallel ${TESTPARALLELISM} ./provider/... go test -short -v -coverprofile="coverage.txt" -coverpkg=./provider/... -timeout 2h -parallel ${TESTPARALLELISM} ./provider/...
@@ -181,7 +173,7 @@ ${SCHEMA_PATH}: bin/${PROVIDER}
pulumi package get-schema bin/${PROVIDER} > $(SCHEMA_PATH) pulumi package get-schema bin/${PROVIDER} > $(SCHEMA_PATH)
bin/${PROVIDER}: $(shell find ./provider -name '*.go') go.mod 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)) (cd provider && go build -o ../bin/${PROVIDER} -ldflags "-X ${PROJECT}/${VERSION_PATH}=${VERSION}" $(PROJECT)/${PROVIDER_PATH}/cmd/$(PROVIDER))
bin/pulumi-gen-${PACK}: # Required by CI bin/pulumi-gen-${PACK}: # Required by CI
touch bin/pulumi-gen-${PACK} touch bin/pulumi-gen-${PACK}
@@ -192,7 +184,7 @@ go.sum: go.mod
sdk: $(shell mkdir -p sdk) sdk: $(shell mkdir -p sdk)
sdk: sdk/python sdk/nodejs sdk/java sdk/python sdk/go sdk/dotnet sdk: sdk/python sdk/nodejs sdk/java sdk/python sdk/go sdk/dotnet
sdk/python: PYPI_VERSION := $(shell pulumictl convert-version --language python -v "$(VERSION_GENERIC)") sdk/python: PYPI_VERSION := $(shell pulumictl get version --language python)
sdk/python: TMPDIR := $(shell mktemp -d) sdk/python: TMPDIR := $(shell mktemp -d)
sdk/python: $(PULUMI) bin/${PROVIDER} sdk/python: $(PULUMI) bin/${PROVIDER}
rm -rf sdk/python rm -rf sdk/python
@@ -208,7 +200,7 @@ sdk/python: $(PULUMI) bin/${PROVIDER}
../venv/bin/python -m build . ../venv/bin/python -m build .
mv -f ${TMPDIR}/python ${WORKING_DIR}/sdk/. mv -f ${TMPDIR}/python ${WORKING_DIR}/sdk/.
sdk/nodejs: NODE_VERSION := $(shell pulumictl convert-version --language javascript -v "$(VERSION_GENERIC)") sdk/nodejs: NODE_VERSION := $(shell pulumictl get version --language javascript)
sdk/nodejs: TMPDIR := $(shell mktemp -d) sdk/nodejs: TMPDIR := $(shell mktemp -d)
sdk/nodejs: $(PULUMI) bin/${PROVIDER} sdk/nodejs: $(PULUMI) bin/${PROVIDER}
rm -rf sdk/nodejs rm -rf sdk/nodejs
@@ -233,7 +225,7 @@ sdk/go: $(PULUMI) bin/${PROVIDER}
go mod tidy go mod tidy
mv -f ${TMPDIR}/go ${WORKING_DIR}/sdk/go mv -f ${TMPDIR}/go ${WORKING_DIR}/sdk/go
sdk/dotnet: DOTNET_VERSION := $(shell pulumictl convert-version --language dotnet -v "$(VERSION_GENERIC)") sdk/dotnet: DOTNET_VERSION := $(shell pulumictl get version --language dotnet)
sdk/dotnet: TMPDIR := $(shell mktemp -d) sdk/dotnet: TMPDIR := $(shell mktemp -d)
sdk/dotnet: $(PULUMI) bin/${PROVIDER} sdk/dotnet: $(PULUMI) bin/${PROVIDER}
rm -rf sdk/dotnet rm -rf sdk/dotnet
@@ -243,7 +235,7 @@ sdk/dotnet: $(PULUMI) bin/${PROVIDER}
dotnet build /p:Version=${DOTNET_VERSION} dotnet build /p:Version=${DOTNET_VERSION}
mv -f ${TMPDIR}/dotnet ${WORKING_DIR}/sdk/. mv -f ${TMPDIR}/dotnet ${WORKING_DIR}/sdk/.
sdk/java: PACKAGE_VERSION := $(shell pulumictl convert-version --language generic -v "$(VERSION_GENERIC)") sdk/java: PACKAGE_VERSION := $(shell pulumictl get version --language generic)
sdk/java: TMPDIR := $(shell mktemp -d) sdk/java: TMPDIR := $(shell mktemp -d)
sdk/java: $(PULUMI) bin/${PROVIDER} sdk/java: $(PULUMI) bin/${PROVIDER}
rm -rf sdk/java rm -rf sdk/java

View File

@@ -1,95 +1,7 @@
module provider-docker-build module provider-docker-build
go 1.21.7 go 1.20
toolchain go1.21.9
require ( require (
github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.0-20240425180359-26c144c916b7 github.com/pulumi/pulumi/sdk/v3 v3.111.1
github.com/pulumi/pulumi/sdk/v3 v3.113.3
)
require (
dario.cat/mergo v1.0.0 // indirect
github.com/Microsoft/go-winio v0.6.1 // indirect
github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect
github.com/agext/levenshtein v1.2.3 // indirect
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
github.com/atotto/clipboard v0.1.4 // indirect
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
github.com/blang/semver v3.5.1+incompatible // indirect
github.com/charmbracelet/bubbles v0.16.1 // indirect
github.com/charmbracelet/bubbletea v0.24.2 // indirect
github.com/charmbracelet/lipgloss v0.7.1 // indirect
github.com/cheggaaa/pb v1.0.29 // indirect
github.com/cloudflare/circl v1.3.7 // indirect
github.com/containerd/console v1.0.4 // indirect
github.com/cyphar/filepath-securejoin v0.2.4 // indirect
github.com/djherbis/times v1.5.0 // indirect
github.com/emirpasic/gods v1.18.1 // indirect
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
github.com/go-git/go-billy/v5 v5.5.0 // indirect
github.com/go-git/go-git/v5 v5.11.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/glog v1.2.0 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/hcl/v2 v2.19.1 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
github.com/kevinburke/ssh_config v1.2.0 // indirect
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-localereader v0.0.1 // indirect
github.com/mattn/go-runewidth v0.0.15 // indirect
github.com/mitchellh/go-ps v1.0.0 // indirect
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
github.com/muesli/cancelreader v0.2.2 // indirect
github.com/muesli/reflow v0.3.0 // indirect
github.com/muesli/termenv v0.15.2 // indirect
github.com/opentracing/basictracer-go v1.1.0 // indirect
github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/pgavlin/fx v0.1.6 // indirect
github.com/pjbgf/sha1cd v0.3.0 // 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.6.2 // indirect
github.com/rivo/uniseg v0.4.4 // indirect
github.com/rogpeppe/go-internal v1.12.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/sergi/go-diff v1.3.1 // indirect
github.com/skeema/knownhosts v1.2.1 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/spf13/cobra v1.8.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/texttheater/golang-levenshtein v1.0.1 // indirect
github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 // 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/zclconf/go-cty v1.14.1 // indirect
go.uber.org/atomic v1.10.0 // indirect
golang.org/x/crypto v0.21.0 // indirect
golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 // indirect
golang.org/x/mod v0.16.0 // indirect
golang.org/x/net v0.22.0 // indirect
golang.org/x/sync v0.6.0 // indirect
golang.org/x/sys v0.18.0 // indirect
golang.org/x/term v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/tools v0.19.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240311173647-c811ad7063a7 // indirect
google.golang.org/grpc v1.62.1 // indirect
google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
lukechampine.com/frand v1.4.2 // indirect
) )

View File

@@ -1,317 +0,0 @@
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
dario.cat/mergo v1.0.0/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.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg=
github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0=
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY=
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA=
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/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
github.com/charmbracelet/bubbles v0.16.1 h1:6uzpAAaT9ZqKssntbvZMlksWHruQLNxg49H5WdeuYSY=
github.com/charmbracelet/bubbles v0.16.1/go.mod h1:2QCp9LFlEsBQMvIYERr7Ww2H2bA7xen1idUDIzm/+Xc=
github.com/charmbracelet/bubbletea v0.24.2 h1:uaQIKx9Ai6Gdh5zpTbGiWpytMU+CfsPp06RaW2cx/SY=
github.com/charmbracelet/bubbletea v0.24.2/go.mod h1:XdrNrV4J8GiyshTtx3DNuYkR1FDaJmO3l2nejekbsgg=
github.com/charmbracelet/lipgloss v0.7.1 h1:17WMwi7N1b1rVWOjMT+rCh7sQkvDU75B2hbZpc5Kc1E=
github.com/charmbracelet/lipgloss v0.7.1/go.mod h1:yG0k3giv8Qj8edTCbbg6AlQ5e8KNWpFujkNawKNhE2c=
github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo=
github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30=
github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU=
github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA=
github.com/containerd/console v1.0.4 h1:F2g4+oChYvBTsASRTz8NP6iIAi97J3TtSAsLbIFn4ro=
github.com/containerd/console v1.0.4/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk=
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg=
github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/djherbis/times v1.5.0 h1:79myA211VwPhFTqUk8xehWrsEO+zcIZj0zT8mXPVARU=
github.com/djherbis/times v1.5.0/go.mod h1:5q7FDLvbNg1L/KaBmPcWlVR9NmoKo3+ucqUA3ijQhA0=
github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU=
github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM=
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY=
github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4=
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.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU=
github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow=
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.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4=
github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY=
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.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68=
github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
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.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU=
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/hashicorp/hcl/v2 v2.19.1 h1://i05Jqznmb2EXqa39Nsvyan2o5XyMowW5fnCKW5RPI=
github.com/hashicorp/hcl/v2 v2.19.1/go.mod h1:ThLC89FV4p9MPW804KVbe/cEXoQ8NZEh+JtMeeGErHE=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4=
github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88=
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc=
github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg=
github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0=
github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI=
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo=
github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
github.com/muesli/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.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo=
github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8=
github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo=
github.com/onsi/gomega v1.31.1/go.mod h1:y40C95dwAD1Nz36SsEnxvfFe8FFfNxzI5eJ0EYGyAy0=
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/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4=
github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI=
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 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/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.6.2 h1:+z+l8cuwIauLSwXQS0uoI3rqB+YG4SzsZYtHfNoXBvw=
github.com/pulumi/esc v0.6.2/go.mod h1:jNnYNjzsOgVTjCp0LL24NsCk8ZJxq4IoLQdCT0X7l8k=
github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.0-20240425180359-26c144c916b7 h1:elp7Ar01zvIJtRQv+megjeGSfpxxzPYyKBGfDDtWFBA=
github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.0-20240425180359-26c144c916b7/go.mod h1:48lEA1mq2tRC4SfASAJmLYG1hRWM5sP5VPFeoZEM54U=
github.com/pulumi/pulumi/sdk/v3 v3.113.3 h1:ySNxoL+O9TtS9WiPa9SWu6mthJryryRzP0kyYaQlNaU=
github.com/pulumi/pulumi/sdk/v3 v3.113.3/go.mod h1:JWSzKBoHd8rlncC1DhXLf7YdV+Bk/Qf+hSZOOQh0WwQ=
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.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI=
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs=
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4=
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY=
github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8=
github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ=
github.com/skeema/knownhosts v1.2.1/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo=
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.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
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.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U=
github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8=
github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 h1:X9dsIWPuuEJlPX//UmRKophhOKCGXc46RVIGuttks68=
github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7/go.mod h1:UxoP3EypF8JfGEjAII8jx1q8rQyDnX8qdTCs/UQBVIE=
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/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.14.1 h1:t9fyA35fwjjUMcmL5hLER+e/rEPqrbCK1/OSE4SI9KA=
github.com/zclconf/go-cty v1.14.1/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-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.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 h1:hNQpMuAJe5CtcUqCXaWga3FHu+kQvCqcsoVaQgSV60o=
golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
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.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
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-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.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc=
golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
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-20190626221950-04f50cda93cb/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-20220520151302-bc2c85ada10a/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.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
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.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
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.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
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.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.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240311173647-c811ad7063a7 h1:8EeVk1VKMD+GD/neyEHGmz7pFblqPjHoi+PGQIlLx2s=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240311173647-c811ad7063a7/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
lukechampine.com/frand v1.4.2 h1:RzFIpOvkMXuPMBb9maa4ND4wjBn71E1Jpf8BzJHMaVw=
lukechampine.com/frand v1.4.2/go.mod h1:4S/TM2ZgrKejMcKMbeLjISpJMO+/eZ1zu3vYX9dtj3s=
pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw=
pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=

11
go.mod
View File

@@ -14,12 +14,12 @@ require (
github.com/moby/patternmatcher v0.6.0 github.com/moby/patternmatcher v0.6.0
github.com/muesli/reflow v0.3.0 github.com/muesli/reflow v0.3.0
github.com/otiai10/copy v1.14.0 github.com/otiai10/copy v1.14.0
github.com/pulumi/providertest v0.0.12 github.com/pulumi/pulumi-go-provider v0.16.0
github.com/pulumi/pulumi-go-provider v0.16.1-0.20240426163030-72606b1e6fb7 github.com/pulumi/pulumi-go-provider/integration v0.10.1-0.20240314105842-9fbffb634faf
github.com/pulumi/pulumi-java/pkg v0.10.0 github.com/pulumi/pulumi-java/pkg v0.10.0
github.com/pulumi/pulumi/pkg/v3 v3.113.3 github.com/pulumi/pulumi/pkg/v3 v3.113.0
github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3 v3.0.0-20240415162817-44c8de53d5d2 github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3 v3.0.0-20240415162817-44c8de53d5d2
github.com/pulumi/pulumi/sdk/v3 v3.113.3 github.com/pulumi/pulumi/sdk/v3 v3.113.0
github.com/regclient/regclient v0.0.0-20240308005156-a7434cff9c6b github.com/regclient/regclient v0.0.0-20240308005156-a7434cff9c6b
github.com/sirupsen/logrus v1.9.3 github.com/sirupsen/logrus v1.9.3
github.com/spf13/afero v1.11.0 github.com/spf13/afero v1.11.0
@@ -350,6 +350,7 @@ require (
github.com/prometheus/procfs v0.12.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect
github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect
github.com/pulumi/esc v0.6.2 // indirect github.com/pulumi/esc v0.6.2 // indirect
github.com/pulumi/providertest v0.0.12 // indirect
github.com/pulumi/pulumi-yaml v1.6.0 // indirect github.com/pulumi/pulumi-yaml v1.6.0 // indirect
github.com/quasilyte/go-ruleguard v0.4.2 // indirect github.com/quasilyte/go-ruleguard v0.4.2 // indirect
github.com/quasilyte/gogrep v0.5.0 // indirect github.com/quasilyte/gogrep v0.5.0 // indirect
@@ -454,7 +455,7 @@ require (
golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 // indirect golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 // indirect
golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f // indirect golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f // indirect
golang.org/x/mod v0.16.0 // indirect golang.org/x/mod v0.16.0 // indirect
golang.org/x/net v0.23.0 // indirect golang.org/x/net v0.22.0 // indirect
golang.org/x/oauth2 v0.18.0 // indirect golang.org/x/oauth2 v0.18.0 // indirect
golang.org/x/sync v0.6.0 // indirect golang.org/x/sync v0.6.0 // indirect
golang.org/x/sys v0.18.0 // indirect golang.org/x/sys v0.18.0 // indirect

32
go.sum
View File

@@ -1151,12 +1151,6 @@ github.com/ghostiam/protogetter v0.3.5/go.mod h1:7lpeDnEJ1ZjL/YtyoN99ljO4z0pd3H0
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U= github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U=
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.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY=
github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4=
github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
@@ -2316,18 +2310,20 @@ github.com/pulumi/esc v0.6.2 h1:+z+l8cuwIauLSwXQS0uoI3rqB+YG4SzsZYtHfNoXBvw=
github.com/pulumi/esc v0.6.2/go.mod h1:jNnYNjzsOgVTjCp0LL24NsCk8ZJxq4IoLQdCT0X7l8k= github.com/pulumi/esc v0.6.2/go.mod h1:jNnYNjzsOgVTjCp0LL24NsCk8ZJxq4IoLQdCT0X7l8k=
github.com/pulumi/providertest v0.0.12 h1:UjcFQHHs4AGJyJqxhvC2q8yVQ7Li+UyCyP95HZcK03U= github.com/pulumi/providertest v0.0.12 h1:UjcFQHHs4AGJyJqxhvC2q8yVQ7Li+UyCyP95HZcK03U=
github.com/pulumi/providertest v0.0.12/go.mod h1:REAoaN+hGOtdWJGirfWYqcSjCejlbGfzyVTUuemJTuE= github.com/pulumi/providertest v0.0.12/go.mod h1:REAoaN+hGOtdWJGirfWYqcSjCejlbGfzyVTUuemJTuE=
github.com/pulumi/pulumi-go-provider v0.16.1-0.20240426163030-72606b1e6fb7 h1:zHoiZbyFIeEfdoaqwA9Lp3jzdDgtdCPKM2aWhaA4EGg= github.com/pulumi/pulumi-go-provider v0.16.0 h1:vLAiECprIoLdTPd0UFs9Vv/HgSw7l/SBAurRBm3vpSU=
github.com/pulumi/pulumi-go-provider v0.16.1-0.20240426163030-72606b1e6fb7/go.mod h1:sJUl1EjF3BQXAkrOeRhS3kZq17lz2o2QnTQd+c1FepU= github.com/pulumi/pulumi-go-provider v0.16.0/go.mod h1:2yjjeyMSmsb/o/BRJeWk+kcXrJWF5U2EulJKnN7qVLs=
github.com/pulumi/pulumi-go-provider/integration v0.10.1-0.20240314105842-9fbffb634faf h1:7fDWArOUFH+qQ9EywoC4K2ElXP76Ks/CtVJkEBmv2pk=
github.com/pulumi/pulumi-go-provider/integration v0.10.1-0.20240314105842-9fbffb634faf/go.mod h1:sf87soow+4JkV361vHI0W04hpJmWiWajzJytFMNonCE=
github.com/pulumi/pulumi-java/pkg v0.10.0 h1:D1i5MiiNrxYr2uJ1szcj1aQwF9DYv7TTsPmajB9dKSw= github.com/pulumi/pulumi-java/pkg v0.10.0 h1:D1i5MiiNrxYr2uJ1szcj1aQwF9DYv7TTsPmajB9dKSw=
github.com/pulumi/pulumi-java/pkg v0.10.0/go.mod h1:xu6UgYtQm+xXOo1/DZNa2CWVPytu+RMkZVTtI7w7ffY= github.com/pulumi/pulumi-java/pkg v0.10.0/go.mod h1:xu6UgYtQm+xXOo1/DZNa2CWVPytu+RMkZVTtI7w7ffY=
github.com/pulumi/pulumi-yaml v1.6.0 h1:mb/QkebWXTa1fR+P3ZkCCHGXOYC6iTN8X8By9eNz8xM= github.com/pulumi/pulumi-yaml v1.6.0 h1:mb/QkebWXTa1fR+P3ZkCCHGXOYC6iTN8X8By9eNz8xM=
github.com/pulumi/pulumi-yaml v1.6.0/go.mod h1:RyEPo4MhL363sbAiFMVKRsQmXpQPDCY1S8pGv3E6Ij0= github.com/pulumi/pulumi-yaml v1.6.0/go.mod h1:RyEPo4MhL363sbAiFMVKRsQmXpQPDCY1S8pGv3E6Ij0=
github.com/pulumi/pulumi/pkg/v3 v3.113.3 h1:x2KAb5ebeHsSzphbtPOvq5HNwF0y/KF0xYYrpjgGPFk= github.com/pulumi/pulumi/pkg/v3 v3.113.0 h1:fo63QR2nB5ksqq0fxg5uPm/zbXW7eJVRdYpAawIda7I=
github.com/pulumi/pulumi/pkg/v3 v3.113.3/go.mod h1:HxNDclOZZ6agSIHLsDb77/8cSNIiYgIH8Ff1IctrCCM= github.com/pulumi/pulumi/pkg/v3 v3.113.0/go.mod h1:i5hGDlTN59giiXHfrigWEo30x51FPUj8GllAlVkUcQA=
github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3 v3.0.0-20240415162817-44c8de53d5d2 h1:HVBduxIfM/MFBdkOrxUD3oJjz22MPE+8ZbeGGz8sJsA= github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3 v3.0.0-20240415162817-44c8de53d5d2 h1:HVBduxIfM/MFBdkOrxUD3oJjz22MPE+8ZbeGGz8sJsA=
github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3 v3.0.0-20240415162817-44c8de53d5d2/go.mod h1:tVLWi2SXi6Cr1u/vzFqWOV+Kzb3MrXJUoSMoqg+pr0g= github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3 v3.0.0-20240415162817-44c8de53d5d2/go.mod h1:tVLWi2SXi6Cr1u/vzFqWOV+Kzb3MrXJUoSMoqg+pr0g=
github.com/pulumi/pulumi/sdk/v3 v3.113.3 h1:ySNxoL+O9TtS9WiPa9SWu6mthJryryRzP0kyYaQlNaU= github.com/pulumi/pulumi/sdk/v3 v3.113.0 h1:CIlmxJZdjxpPPoFe/rrP1dWTwh3CB7ahs/dA6SHcbuE=
github.com/pulumi/pulumi/sdk/v3 v3.113.3/go.mod h1:JWSzKBoHd8rlncC1DhXLf7YdV+Bk/Qf+hSZOOQh0WwQ= github.com/pulumi/pulumi/sdk/v3 v3.113.0/go.mod h1:JWSzKBoHd8rlncC1DhXLf7YdV+Bk/Qf+hSZOOQh0WwQ=
github.com/quasilyte/go-ruleguard v0.4.2 h1:htXcXDK6/rO12kiTHKfHuqR4kr3Y4M0J0rOL6CH/BYs= github.com/quasilyte/go-ruleguard v0.4.2 h1:htXcXDK6/rO12kiTHKfHuqR4kr3Y4M0J0rOL6CH/BYs=
github.com/quasilyte/go-ruleguard v0.4.2/go.mod h1:GJLgqsLeo4qgavUoL8JeGFNS7qcisx3awV/w9eWTmNI= github.com/quasilyte/go-ruleguard v0.4.2/go.mod h1:GJLgqsLeo4qgavUoL8JeGFNS7qcisx3awV/w9eWTmNI=
github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo= github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo=
@@ -2539,15 +2535,7 @@ github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqa
github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= 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 h1:QyagRZ7wlSpjT5N2qQAh/pN+DVqgekv4DzbAiAiEL3c=
github.com/theupdateframework/notary v0.7.0/go.mod h1:c9DRxcmhHmVLDay4/2fUYdISnHqbFDGRSlXPO0AhYWw= 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.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966 h1:quvGphlmUVU+nhpFa4gg4yJyTRJ13reZMDHrKwYw53M= github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966 h1:quvGphlmUVU+nhpFa4gg4yJyTRJ13reZMDHrKwYw53M=
github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966/go.mod h1:27bSVNWSBOHm+qRp1T9qzaIpsWEP6TbUnei/43HK+PQ= github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966/go.mod h1:27bSVNWSBOHm+qRp1T9qzaIpsWEP6TbUnei/43HK+PQ=
github.com/timonwong/loggercheck v0.9.4 h1:HKKhqrjcVj8sxL7K77beXh0adEm6DLjV/QOGeMXEVi4= github.com/timonwong/loggercheck v0.9.4 h1:HKKhqrjcVj8sxL7K77beXh0adEm6DLjV/QOGeMXEVi4=
@@ -3001,8 +2989,8 @@ golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= 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.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc=
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=

View File

@@ -17,7 +17,6 @@ package internal
import ( import (
"errors" "errors"
"fmt" "fmt"
"reflect"
"strings" "strings"
controllerapi "github.com/docker/buildx/controller/pb" controllerapi "github.com/docker/buildx/controller/pb"
@@ -461,23 +460,6 @@ func (c CacheFrom) String() string {
return join(c.Local, c.Registry, c.GHA, c.AZBlob, c.S3, c.Raw) return join(c.Local, c.Registry, c.GHA, c.AZBlob, c.S3, c.Raw)
} }
// Diff returns false if both cache entries are identical enough to ignore
// changes during diff. Differences to tokens are allowed.
func (c CacheFrom) Diff(other CacheFrom) bool {
if c.GHA != nil && other.GHA != nil {
other.GHA.Token = c.GHA.Token
}
if c.S3 != nil && other.S3 != nil {
other.S3.AccessKeyID = c.S3.AccessKeyID
other.S3.SecretAccessKey = c.S3.SecretAccessKey
other.S3.SessionToken = c.S3.SessionToken
}
if c.AZBlob != nil && other.AZBlob != nil {
other.AZBlob.SecretAccessKey = c.AZBlob.SecretAccessKey
}
return reflect.DeepEqual(c, other)
}
func (c CacheFrom) validate(preview bool) (*controllerapi.CacheOptionsEntry, error) { func (c CacheFrom) validate(preview bool) (*controllerapi.CacheOptionsEntry, error) {
if strings.Count(c.String(), "type=") > 1 { if strings.Count(c.String(), "type=") > 1 {
return nil, errors.New("cacheFrom should only specify one cache type") return nil, errors.New("cacheFrom should only specify one cache type")
@@ -688,23 +670,6 @@ func (c CacheTo) String() string {
return join(c.Inline, c.Local, c.Registry, c.GHA, c.AZBlob, c.S3, c.Raw) return join(c.Inline, c.Local, c.Registry, c.GHA, c.AZBlob, c.S3, c.Raw)
} }
// Diff returns false if both cache entries are identical enough to ignore
// changes during diff. Differences to tokens are allowed.
func (c CacheTo) Diff(other CacheTo) bool {
if c.GHA != nil && other.GHA != nil {
other.GHA.Token = c.GHA.Token
}
if c.S3 != nil && other.S3 != nil {
other.S3.AccessKeyID = c.S3.AccessKeyID
other.S3.SecretAccessKey = c.S3.SecretAccessKey
other.S3.SessionToken = c.S3.SessionToken
}
if c.AZBlob != nil && other.AZBlob != nil {
other.AZBlob.SecretAccessKey = c.AZBlob.SecretAccessKey
}
return reflect.DeepEqual(c, other)
}
func (c CacheTo) validate(preview bool) (*controllerapi.CacheOptionsEntry, error) { func (c CacheTo) validate(preview bool) (*controllerapi.CacheOptionsEntry, error) {
if strings.Count(c.String(), "type=") > 1 { if strings.Count(c.String(), "type=") > 1 {
return nil, errors.New("cacheTo should only specify one cache type") return nil, errors.New("cacheTo should only specify one cache type")

View File

@@ -19,7 +19,6 @@ package internal
import ( import (
"bufio" "bufio"
"bytes" "bytes"
"context"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
@@ -41,6 +40,7 @@ import (
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
provider "github.com/pulumi/pulumi-go-provider" provider "github.com/pulumi/pulumi-go-provider"
"github.com/pulumi/pulumi/sdk/v3/go/common/diag"
"github.com/pulumi/pulumi/sdk/v3/go/common/resource" "github.com/pulumi/pulumi/sdk/v3/go/common/resource"
"github.com/pulumi/pulumi/sdk/v3/go/common/util/contract" "github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"
) )
@@ -157,7 +157,7 @@ func (c *cli) rc() *regclient.RegClient {
// tail is meant to be called as a goroutine and will pipe output from the CLI // 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. // back to the Pulumi engine. Requires a corresponding call to close.
func (c *cli) tail(ctx context.Context) { func (c *cli) tail(ctx provider.Context) {
c.done = make(chan struct{}, 1) c.done = make(chan struct{}, 1)
defer func() { defer func() {
c.done <- struct{}{} c.done <- struct{}{}
@@ -171,18 +171,18 @@ func (c *cli) tail(ctx context.Context) {
s := bufio.NewScanner(c.r) s := bufio.NewScanner(c.r)
for s.Scan() { for s.Scan() {
text := s.Text() text := s.Text()
provider.GetLogger(ctx).InfoStatus(text) ctx.LogStatus(diag.Info, text)
_, _ = b.WriteString(text + "\n") _, _ = b.WriteString(text + "\n")
} }
provider.GetLogger(ctx).InfoStatus("") // clear confusing "DONE" statements. ctx.LogStatus(diag.Info, "") // clear confusing "DONE" statements.
if c.dumplogs { if c.dumplogs {
// Persist the full Docker output on error for easier debugging. // Persist the full Docker output on error for easier debugging.
if b.Len() > 0 { if b.Len() > 0 {
provider.GetLogger(ctx).Info(b.String()) ctx.Log(diag.Info, b.String())
} }
if c.err.Len() > 0 { if c.err.Len() > 0 {
provider.GetLogger(ctx).Error(c.err.String()) ctx.Log(diag.Error, c.err.String())
} }
} }
} }

View File

@@ -45,19 +45,20 @@ import (
"github.com/regclient/regclient/types/ref" "github.com/regclient/regclient/types/ref"
provider "github.com/pulumi/pulumi-go-provider" provider "github.com/pulumi/pulumi-go-provider"
"github.com/pulumi/pulumi/sdk/v3/go/common/diag"
"github.com/pulumi/pulumi/sdk/v3/go/common/util/contract" "github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"
) )
// Client handles all our Docker API calls. // Client handles all our Docker API calls.
type Client interface { type Client interface {
Build(ctx context.Context, b Build) (*client.SolveResponse, error) Build(ctx provider.Context, b Build) (*client.SolveResponse, error)
BuildKitEnabled() (bool, error) BuildKitEnabled() (bool, error)
Inspect(ctx context.Context, id string) ([]descriptor.Descriptor, error) Inspect(ctx context.Context, id string) ([]descriptor.Descriptor, error)
Delete(ctx context.Context, id string) error Delete(ctx context.Context, id string) error
ManifestCreate(ctx context.Context, push bool, target string, refs ...string) error ManifestCreate(ctx provider.Context, push bool, target string, refs ...string) error
ManifestInspect(ctx context.Context, target string) (string, error) ManifestInspect(ctx provider.Context, target string) (string, error)
ManifestDelete(ctx context.Context, target string) error ManifestDelete(ctx provider.Context, target string) error
} }
// Build encapsulates all of the user-provider build parameters and options. // Build encapsulates all of the user-provider build parameters and options.
@@ -97,12 +98,13 @@ func newDockerCLI(config *Config) (*command.DockerCli, error) {
// "default", if no targets were specified) to SolveResponses, which capture // "default", if no targets were specified) to SolveResponses, which capture
// the build's digest and tags (if any). // the build's digest and tags (if any).
func (c *cli) Build( func (c *cli) Build(
ctx context.Context, pctx provider.Context,
build Build, build Build,
) (*client.SolveResponse, error) { ) (*client.SolveResponse, error) {
ctx := context.Context(pctx)
opts := build.BuildOptions() opts := build.BuildOptions()
go c.tail(ctx) go c.tail(pctx)
defer contract.IgnoreClose(c) defer contract.IgnoreClose(c)
if build.ShouldExec() { if build.ShouldExec() {
@@ -132,7 +134,7 @@ func (c *cli) Build(
for _, d := range w.Detail { for _, d := range w.Detail {
fmt.Fprintf(b, "\n%s", d) fmt.Fprintf(b, "\n%s", d)
} }
provider.GetLogger(ctx).Warning(b.String()) pctx.Log(diag.Warning, b.String())
} }
}() }()
@@ -245,7 +247,7 @@ func (c *cli) BuildKitEnabled() (bool, error) {
return c.Cli.BuildKitEnabled() return c.Cli.BuildKitEnabled()
} }
func (c *cli) ManifestCreate(ctx context.Context, push bool, target string, refs ...string) error { func (c *cli) ManifestCreate(ctx provider.Context, push bool, target string, refs ...string) error {
go c.tail(ctx) go c.tail(ctx)
defer contract.IgnoreClose(c) defer contract.IgnoreClose(c)
@@ -269,11 +271,11 @@ func (c *cli) ManifestCreate(ctx context.Context, push bool, target string, refs
cmd.SetErr(c.Err()) cmd.SetErr(c.Err())
cmd.SetOut(c.Out()) cmd.SetOut(c.Out())
provider.GetLogger(ctx).Debug(fmt.Sprint("creating manifest with args", args)) ctx.Log(diag.Debug, fmt.Sprint("creating manifest with args", args))
return cmd.ExecuteContext(ctx) return cmd.ExecuteContext(ctx)
} }
func (c *cli) ManifestInspect(ctx context.Context, target string) (string, error) { func (c *cli) ManifestInspect(ctx provider.Context, target string) (string, error) {
rc := c.rc() rc := c.rc()
ref, err := ref.New(target) ref, err := ref.New(target)
@@ -289,7 +291,7 @@ func (c *cli) ManifestInspect(ctx context.Context, target string) (string, error
return string(m.GetDescriptor().Digest), nil return string(m.GetDescriptor().Digest), nil
} }
func (c *cli) ManifestDelete(ctx context.Context, target string) error { func (c *cli) ManifestDelete(ctx provider.Context, target string) error {
rc := c.rc() rc := c.rc()
ref, err := ref.New(target) ref, err := ref.New(target)
@@ -297,9 +299,9 @@ func (c *cli) ManifestDelete(ctx context.Context, target string) error {
return err return err
} }
err = rc.ManifestDelete(ctx, ref) err = rc.ManifestDelete(context.Context(ctx), ref)
if errors.Is(err, errs.ErrHTTPStatus) { if errors.Is(err, errs.ErrHTTPStatus) {
provider.GetLogger(ctx).Warning("this registry does not support deletions") ctx.Log(diag.Warning, "this registry does not support deletions")
return nil return nil
} }
if err != nil { if err != nil {

View File

@@ -17,8 +17,6 @@ package internal
import ( import (
"bytes" "bytes"
"context" "context"
"io"
"log/slog"
"os" "os"
"path/filepath" "path/filepath"
"testing" "testing"
@@ -26,6 +24,9 @@ import (
"github.com/docker/docker/api/types/registry" "github.com/docker/docker/api/types/registry"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.uber.org/mock/gomock"
"github.com/pulumi/pulumi/sdk/v3/go/common/diag"
) )
func TestAuth(t *testing.T) { func TestAuth(t *testing.T) {
@@ -78,9 +79,21 @@ func TestCustomHost(t *testing.T) {
func TestBuild(t *testing.T) { func TestBuild(t *testing.T) {
t.Parallel() t.Parallel()
// Workaround for https://github.com/pulumi/pulumi-go-provider/issues/159
ctrl, ctx := gomock.WithContext(context.Background(), t)
pctx := NewMockProviderContext(ctrl)
pctx.EXPECT().Log(gomock.Any(), gomock.Any()).AnyTimes()
pctx.EXPECT().LogStatus(gomock.Any(), gomock.Any()).AnyTimes()
pctx.EXPECT().Done().Return(ctx.Done()).AnyTimes()
pctx.EXPECT().
Value(gomock.Any()).
DoAndReturn(func(key any) any { return ctx.Value(key) }).
AnyTimes()
pctx.EXPECT().Err().Return(ctx.Err()).AnyTimes()
pctx.EXPECT().Deadline().Return(ctx.Deadline()).AnyTimes()
tmpdir := t.TempDir() tmpdir := t.TempDir()
Max := Max max := Max
exampleContext := &BuildContext{Context: Context{Location: "../../examples/app"}} exampleContext := &BuildContext{Context: Context{Location: "../../examples/app"}}
@@ -122,7 +135,7 @@ func TestBuild(t *testing.T) {
Tags: []string{"cached"}, Tags: []string{"cached"},
CacheTo: []CacheTo{{Local: &CacheToLocal{ CacheTo: []CacheTo{{Local: &CacheToLocal{
Dest: filepath.Join(tmpdir, "cache"), Dest: filepath.Join(tmpdir, "cache"),
CacheWithMode: CacheWithMode{Mode: &Max}, CacheWithMode: CacheWithMode{Mode: &max},
}}}, }}},
CacheFrom: []CacheFrom{{Local: &CacheFromLocal{ CacheFrom: []CacheFrom{{Local: &CacheFromLocal{
Src: filepath.Join(tmpdir, "cache"), Src: filepath.Join(tmpdir, "cache"),
@@ -287,13 +300,12 @@ func TestBuild(t *testing.T) {
if tt.skip { if tt.skip {
t.Skip() t.Skip()
} }
ctx := context.Background()
cli := testcli(t, true, tt.auths...) cli := testcli(t, true, tt.auths...)
build, err := tt.args.toBuild(ctx, false) build, err := tt.args.toBuild(pctx, false)
require.NoError(t, err) require.NoError(t, err)
_, err = cli.Build(ctx, build) _, err = cli.Build(pctx, build)
assert.NoError(t, err, cli.err.String()) assert.NoError(t, err, cli.err.String())
}) })
} }
@@ -354,22 +366,14 @@ func TestNormalizeReference(t *testing.T) {
} }
} }
//nolint:paralleltest // Overrides default logger.
func TestBuildError(t *testing.T) { func TestBuildError(t *testing.T) {
t.Parallel()
if os.Getenv("CI") != "" { if os.Getenv("CI") != "" {
t.Skip("flaky on CI for some reason") t.Skip("flaky on CI for some reason")
} }
l := slog.Default() ctrl, ctx := gomock.WithContext(context.Background(), t)
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"}} exampleContext := &BuildContext{Context: Context{Location: "../../examples/app"}}
@@ -379,14 +383,28 @@ func TestBuildError(t *testing.T) {
Inline: "FROM alpine\nRUN echo hello\nRUN badcmd", Inline: "FROM alpine\nRUN echo hello\nRUN badcmd",
}, },
} }
logged := bytes.Buffer{}
pctx := NewMockProviderContext(ctrl)
pctx.EXPECT().Done().Return(ctx.Done()).AnyTimes()
pctx.EXPECT().
Value(gomock.Any()).
DoAndReturn(func(key any) any { return ctx.Value(key) }).
AnyTimes()
pctx.EXPECT().Err().Return(ctx.Err()).AnyTimes()
pctx.EXPECT().Deadline().Return(ctx.Deadline()).AnyTimes()
pctx.EXPECT().LogStatus(gomock.Any(), gomock.Any()).AnyTimes()
pctx.EXPECT().Log(gomock.Any(), gomock.Any()).DoAndReturn(func(_ diag.Severity, msg string) {
logged.WriteString(msg)
}).AnyTimes()
ctx := context.Background()
cli := testcli(t, true) cli := testcli(t, true)
build, err := args.toBuild(ctx, false) build, err := args.toBuild(pctx, false)
require.NoError(t, err) require.NoError(t, err)
_, err = cli.Build(ctx, build) _, err = cli.Build(pctx, build)
assert.Error(t, err) assert.Error(t, err)
want := []string{ want := []string{
@@ -395,7 +413,7 @@ func TestBuildError(t *testing.T) {
} }
for _, want := range want { for _, want := range want {
assert.Contains(t, logger.String(), want) assert.Contains(t, logged.String(), want)
} }
assert.ErrorContains(t, err, assert.ErrorContains(t, err,
`process "/bin/sh -c badcmd" did not complete successfully: exit code: 127`, `process "/bin/sh -c badcmd" did not complete successfully: exit code: 127`,
@@ -404,6 +422,7 @@ func TestBuildError(t *testing.T) {
func TestBuildExecError(t *testing.T) { func TestBuildExecError(t *testing.T) {
t.Parallel() t.Parallel()
ctrl, _ := gomock.WithContext(context.Background(), t)
exampleContext := &BuildContext{Context: Context{Location: "../../examples/app"}} exampleContext := &BuildContext{Context: Context{Location: "../../examples/app"}}
@@ -415,13 +434,20 @@ func TestBuildExecError(t *testing.T) {
Exec: true, Exec: true,
} }
ctx := context.Background() pctx := NewMockProviderContext(ctrl)
pctx.EXPECT().Log(
diag.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.",
)
pctx.EXPECT().LogStatus(gomock.Any(), gomock.Any()).AnyTimes()
cli := testcli(t, true) cli := testcli(t, true)
build, err := args.toBuild(ctx, false) build, err := args.toBuild(pctx, false)
require.NoError(t, err) require.NoError(t, err)
_, err = cli.Build(ctx, build) _, err = cli.Build(pctx, build)
assert.Error(t, err) assert.Error(t, err)
want := []string{ want := []string{

View File

@@ -17,6 +17,9 @@ package deprecated
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"sort"
"google.golang.org/protobuf/types/known/structpb"
"github.com/pulumi/pulumi/pkg/v3/codegen/schema" "github.com/pulumi/pulumi/pkg/v3/codegen/schema"
"github.com/pulumi/pulumi/sdk/v3/go/common/resource" "github.com/pulumi/pulumi/sdk/v3/go/common/resource"
@@ -110,7 +113,6 @@ func (enc *ConfigEncoding) unmarshalOpts() plugin.MarshalOptions {
return plugin.MarshalOptions{ return plugin.MarshalOptions{
Label: "config", Label: "config",
KeepUnknowns: true, KeepUnknowns: true,
KeepSecrets: true,
SkipNulls: true, SkipNulls: true,
RejectAssets: true, RejectAssets: true,
} }
@@ -118,10 +120,15 @@ func (enc *ConfigEncoding) unmarshalOpts() plugin.MarshalOptions {
// Like plugin.UnmarshalPropertyValue but overrides string parsing with convertStringToPropertyValue. // Like plugin.UnmarshalPropertyValue but overrides string parsing with convertStringToPropertyValue.
func (enc *ConfigEncoding) unmarshalPropertyValue(key resource.PropertyKey, func (enc *ConfigEncoding) unmarshalPropertyValue(key resource.PropertyKey,
pv resource.PropertyValue, v *structpb.Value,
) (resource.PropertyValue, error) { ) (*resource.PropertyValue, error) {
opts := enc.unmarshalOpts() opts := enc.unmarshalOpts()
pv, err := plugin.UnmarshalPropertyValue(key, v, enc.unmarshalOpts())
if err != nil {
return nil, fmt.Errorf("error unmarshalling property %q: %w", key, err)
}
prop, ok := enc.schema.Variables[string(key)] prop, ok := enc.schema.Variables[string(key)]
// Only apply JSON-encoded recognition for known fields. // Only apply JSON-encoded recognition for known fields.
@@ -129,10 +136,8 @@ func (enc *ConfigEncoding) unmarshalPropertyValue(key resource.PropertyKey,
return pv, nil return pv, nil
} }
var ( var jsonString string
jsonString string var jsonStringDetected, jsonStringSecret bool
jsonStringDetected, jsonStringSecret bool
)
if pv.IsString() { if pv.IsString() {
jsonString = pv.StringValue() jsonString = pv.StringValue()
@@ -148,21 +153,22 @@ func (enc *ConfigEncoding) unmarshalPropertyValue(key resource.PropertyKey,
if jsonStringDetected { if jsonStringDetected {
v, err := enc.convertStringToPropertyValue(jsonString, prop) v, err := enc.convertStringToPropertyValue(jsonString, prop)
if err != nil { if err != nil {
return resource.PropertyValue{}, fmt.Errorf("error unmarshalling property %q: %w", key, err) return nil, fmt.Errorf("error unmarshalling property %q: %w", key, err)
} }
if jsonStringSecret { if jsonStringSecret {
return resource.MakeSecret(v), nil s := resource.MakeSecret(v)
return &s, nil
} }
return v, nil return &v, nil
} }
// Computed sentinels are coming in as always having an empty string, but the encoding coerces them to a zero // Computed sentinels are coming in as always having an empty string, but the encoding coerses them to a zero
// value of the appropriate type. // value of the appropriate type.
if pv.IsComputed() { if pv.IsComputed() {
el := pv.V.(resource.Computed).Element el := pv.V.(resource.Computed).Element
if el.IsString() && el.StringValue() == "" { if el.IsString() && el.StringValue() == "" {
res := resource.MakeComputed(enc.zeroValue(prop.Type)) res := resource.MakeComputed(enc.zeroValue(prop.Type))
return res, nil return &res, nil
} }
} }
@@ -171,20 +177,36 @@ func (enc *ConfigEncoding) unmarshalPropertyValue(key resource.PropertyKey,
// UnmarshalProperties is copied from plugin.UnmarshalProperties substituting plugin.UnmarshalPropertyValue. // UnmarshalProperties is copied from plugin.UnmarshalProperties substituting plugin.UnmarshalPropertyValue.
func (enc *ConfigEncoding) UnmarshalProperties( func (enc *ConfigEncoding) UnmarshalProperties(
props resource.PropertyMap, props *structpb.Struct,
) (resource.PropertyMap, error) { ) (resource.PropertyMap, error) {
opts := enc.unmarshalOpts()
result := make(resource.PropertyMap) result := make(resource.PropertyMap)
// First sort the keys so we enumerate them in order (in case errors happen, we want determinism). // First sort the keys so we enumerate them in order (in case errors happen, we want determinism).
keys := props.StableKeys() var keys []string
if props != nil {
for k := range props.Fields {
keys = append(keys, k)
}
sort.Strings(keys)
}
// And now unmarshal every field it into the map. // And now unmarshal every field it into the map.
for _, key := range keys { for _, key := range keys {
v, err := enc.unmarshalPropertyValue(key, props[key]) pk := resource.PropertyKey(key)
v, err := enc.unmarshalPropertyValue(pk, props.Fields[key])
if err != nil { if err != nil {
return resource.PropertyMap{}, err return nil, err
} else if v != nil {
if opts.SkipNulls && v.IsNull() {
continue
}
if opts.SkipInternalKeys && resource.IsInternalPropertyKey(pk) {
continue
}
result[pk] = *v
} }
result[key] = v
} }
return result, nil return result, nil

View File

@@ -16,23 +16,23 @@ package deprecated
import ( import (
"fmt" "fmt"
"strconv"
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" structpb "google.golang.org/protobuf/types/known/structpb"
"github.com/pulumi/pulumi/pkg/v3/codegen/schema" "github.com/pulumi/pulumi/pkg/v3/codegen/schema"
"github.com/pulumi/pulumi/sdk/v3/go/common/resource" "github.com/pulumi/pulumi/sdk/v3/go/common/resource"
"github.com/pulumi/pulumi/sdk/v3/go/common/resource/plugin"
) )
func TestConfigEncoding(t *testing.T) { func TestConfigEncoding(t *testing.T) {
t.Parallel() t.Parallel()
type testCase struct { type testCase struct {
ty schema.TypeSpec ty schema.TypeSpec
given resource.PropertyValue v *structpb.Value
want resource.PropertyValue pv resource.PropertyValue
} }
knownKey := "mykey" knownKey := "mykey"
@@ -49,64 +49,69 @@ func TestConfigEncoding(t *testing.T) {
) )
} }
makeValue := func(x any) *structpb.Value {
vv, err := structpb.NewValue(x)
assert.NoErrorf(t, err, "structpb.NewValue failed")
return vv
}
checkUnmarshal := func(t *testing.T, tc testCase) { checkUnmarshal := func(t *testing.T, tc testCase) {
enc := makeEnc(tc.ty) enc := makeEnc(tc.ty)
key := resource.PropertyKey(knownKey) pv, err := enc.unmarshalPropertyValue(resource.PropertyKey(knownKey), tc.v)
assert.NoError(t, err)
actual, err := enc.unmarshalPropertyValue(key, tc.given) assert.NotNil(t, pv)
require.NoError(t, err) assert.Equal(t, tc.pv, *pv)
assert.Equal(t, tc.want, actual)
} }
turnaroundTestCases := []testCase{ turnaroundTestCases := []testCase{
{ {
schema.TypeSpec{Type: "boolean"}, schema.TypeSpec{Type: "boolean"},
resource.NewPropertyValue(`true`), makeValue(`true`),
resource.NewBoolProperty(true), resource.NewBoolProperty(true),
}, },
{ {
schema.TypeSpec{Type: "boolean"}, schema.TypeSpec{Type: "boolean"},
resource.NewPropertyValue(`false`), makeValue(`false`),
resource.NewBoolProperty(false), resource.NewBoolProperty(false),
}, },
{ {
schema.TypeSpec{Type: "integer"}, schema.TypeSpec{Type: "integer"},
resource.NewPropertyValue(`0`), makeValue(`0`),
resource.NewNumberProperty(0), resource.NewNumberProperty(0),
}, },
{ {
schema.TypeSpec{Type: "integer"}, schema.TypeSpec{Type: "integer"},
resource.NewPropertyValue(`42`), makeValue(`42`),
resource.NewNumberProperty(42), resource.NewNumberProperty(42),
}, },
{ {
schema.TypeSpec{Type: "number"}, schema.TypeSpec{Type: "number"},
resource.NewPropertyValue(`0`), makeValue(`0`),
resource.NewNumberProperty(0.0), resource.NewNumberProperty(0.0),
}, },
{ {
schema.TypeSpec{Type: "number"}, schema.TypeSpec{Type: "number"},
resource.NewPropertyValue(`42.5`), makeValue(`42.5`),
resource.NewNumberProperty(42.5), resource.NewNumberProperty(42.5),
}, },
{ {
schema.TypeSpec{Type: "string"}, schema.TypeSpec{Type: "string"},
resource.NewStringProperty(""), structpb.NewStringValue(""),
resource.NewStringProperty(""), resource.NewStringProperty(""),
}, },
{ {
schema.TypeSpec{Type: "string"}, schema.TypeSpec{Type: "string"},
resource.NewStringProperty("hello"), structpb.NewStringValue("hello"),
resource.NewStringProperty("hello"), resource.NewStringProperty("hello"),
}, },
{ {
schema.TypeSpec{Type: "array"}, schema.TypeSpec{Type: "array"},
resource.NewPropertyValue(`[]`), makeValue(`[]`),
resource.NewArrayProperty([]resource.PropertyValue{}), resource.NewArrayProperty([]resource.PropertyValue{}),
}, },
{ {
schema.TypeSpec{Type: "array"}, schema.TypeSpec{Type: "array"},
resource.NewPropertyValue(`["hello","there"]`), makeValue(`["hello","there"]`),
resource.NewArrayProperty([]resource.PropertyValue{ resource.NewArrayProperty([]resource.PropertyValue{
resource.NewStringProperty("hello"), resource.NewStringProperty("hello"),
resource.NewStringProperty("there"), resource.NewStringProperty("there"),
@@ -114,12 +119,12 @@ func TestConfigEncoding(t *testing.T) {
}, },
{ {
schema.TypeSpec{Type: "object"}, schema.TypeSpec{Type: "object"},
resource.NewPropertyValue(`{}`), makeValue(`{}`),
resource.NewObjectProperty(resource.PropertyMap{}), resource.NewObjectProperty(resource.PropertyMap{}),
}, },
{ {
schema.TypeSpec{Type: "object"}, schema.TypeSpec{Type: "object"},
resource.NewPropertyValue(`{"key":"value"}`), makeValue(`{"key":"value"}`),
resource.NewObjectProperty(resource.PropertyMap{ resource.NewObjectProperty(resource.PropertyMap{
"key": resource.NewStringProperty("value"), "key": resource.NewStringProperty("value"),
}), }),
@@ -130,7 +135,7 @@ func TestConfigEncoding(t *testing.T) {
for i, tc := range turnaroundTestCases { for i, tc := range turnaroundTestCases {
tc := tc tc := tc
t.Run(strconv.Itoa(i), func(t *testing.T) { t.Run(fmt.Sprintf("UnmarshalPropertyValue/%d", i), func(t *testing.T) {
t.Parallel() t.Parallel()
checkUnmarshal(t, tc) checkUnmarshal(t, tc)
}) })
@@ -142,32 +147,32 @@ func TestConfigEncoding(t *testing.T) {
cases := []testCase{ cases := []testCase{
{ {
schema.TypeSpec{Type: "boolean"}, schema.TypeSpec{Type: "boolean"},
resource.NewPropertyValue(""), makeValue(""),
resource.NewBoolProperty(false), resource.NewBoolProperty(false),
}, },
{ {
schema.TypeSpec{Type: "number"}, schema.TypeSpec{Type: "number"},
resource.NewPropertyValue(""), makeValue(""),
resource.NewNumberProperty(0.), resource.NewNumberProperty(0.),
}, },
{ {
schema.TypeSpec{Type: "integer"}, schema.TypeSpec{Type: "integer"},
resource.NewPropertyValue(""), makeValue(""),
resource.NewNumberProperty(0), resource.NewNumberProperty(0),
}, },
{ {
schema.TypeSpec{Type: "string"}, schema.TypeSpec{Type: "string"},
resource.NewPropertyValue(""), makeValue(""),
resource.NewStringProperty(""), resource.NewStringProperty(""),
}, },
{ {
schema.TypeSpec{Type: "object"}, schema.TypeSpec{Type: "object"},
resource.NewPropertyValue(""), makeValue(""),
resource.NewObjectProperty(make(resource.PropertyMap)), resource.NewObjectProperty(make(resource.PropertyMap)),
}, },
{ {
schema.TypeSpec{Type: "array"}, schema.TypeSpec{Type: "array"},
resource.NewPropertyValue(""), makeValue(""),
resource.NewArrayProperty([]resource.PropertyValue{}), resource.NewArrayProperty([]resource.PropertyValue{}),
}, },
} }
@@ -182,18 +187,18 @@ func TestConfigEncoding(t *testing.T) {
}) })
t.Run("computed", func(t *testing.T) { t.Run("computed", func(t *testing.T) {
unk := resource.MakeComputed(resource.NewStringProperty("")) unk := makeValue(plugin.UnknownStringValue)
for i, tc := range turnaroundTestCases { for i, tc := range turnaroundTestCases {
tc := tc tc := tc
t.Run(strconv.Itoa(i), func(t *testing.T) { t.Run(fmt.Sprintf("UnmarshalPropertyValue/%d", i), func(t *testing.T) {
t.Parallel() t.Parallel()
// Unknown sentinel unmarshals to a Computed with a type-appropriate zero value. // Unknown sentinel unmarshals to a Computed with a type-appropriate zero value.
checkUnmarshal(t, testCase{ checkUnmarshal(t, testCase{
ty: tc.ty, tc.ty,
given: unk, unk,
want: resource.MakeComputed(makeEnc(tc.ty).zeroValue(tc.ty.Type)), resource.MakeComputed(makeEnc(tc.ty).zeroValue(tc.ty.Type)),
}) })
}) })
} }
@@ -210,30 +215,46 @@ func TestConfigEncoding(t *testing.T) {
var secretCases []testCase var secretCases []testCase
pbSecret := func(v *structpb.Value) *structpb.Value {
return structpb.NewStructValue(&structpb.Struct{Fields: map[string]*structpb.Value{
"4dabf18193072939515e22adb298388d": makeValue("1b47061264138c4ac30d75fd1eb44270"),
"value": v,
}})
}
for _, tc := range turnaroundTestCases { for _, tc := range turnaroundTestCases {
secretCases = append(secretCases, testCase{ secretCases = append(secretCases, testCase{
ty: tc.ty, tc.ty,
given: resource.MakeSecret(tc.given), pbSecret(tc.v),
want: resource.MakeSecret(tc.want), resource.MakeSecret(tc.pv),
}) })
} }
for i, tc := range secretCases { for i, tc := range secretCases {
tc := tc tc := tc
t.Run(strconv.Itoa(i), func(t *testing.T) { t.Run(fmt.Sprintf("secret/UnmarshalPropertyValue/%d", i), func(t *testing.T) {
t.Parallel() t.Parallel()
// Unmarshallin will remove secrts, so the expected value needs to be modified.
tc.pv = tc.pv.SecretValue().Element
checkUnmarshal(t, tc) checkUnmarshal(t, tc)
}) })
} }
t.Run("nested secrets", func(t *testing.T) { t.Run("tolerate secrets in Configure", func(t *testing.T) {
// This is a bit of a histirocal quirk: the engine may send secrets to Configure before
// receiving the response from Configure indicating that the provider does not want to receive
// secrets. These are simply ignored. The engine does not currently send secrets to CheckConfig.
// The engine does take care of making sure the secrets are stored as such in the statefile.
//
// Check here that unmarshalilng such values removes the secrets.
checkUnmarshal(t, testCase{ checkUnmarshal(t, testCase{
schema.TypeSpec{Type: "object"}, schema.TypeSpec{Type: "object"},
resource.MakeSecret(resource.NewPropertyValue(`{"key":"val"}`)), pbSecret(makeValue(`{"key":"val"}`)),
resource.MakeSecret(resource.NewObjectProperty(resource.PropertyMap{ resource.NewObjectProperty(resource.PropertyMap{
"key": resource.NewStringProperty("val"), "key": resource.NewStringProperty("val"),
})), }),
}) })
}) })
}) })
@@ -241,7 +262,7 @@ func TestConfigEncoding(t *testing.T) {
regressUnmarshalTestCases := []testCase{ regressUnmarshalTestCases := []testCase{
{ {
schema.TypeSpec{Type: "array"}, schema.TypeSpec{Type: "array"},
resource.NewPropertyValue(` makeValue(`
[ [
{ {
"address": "somewhere.org", "address": "somewhere.org",
@@ -255,7 +276,7 @@ func TestConfigEncoding(t *testing.T) {
resource.NewArrayProperty([]resource.PropertyValue{ resource.NewArrayProperty([]resource.PropertyValue{
resource.NewObjectProperty(resource.PropertyMap{ resource.NewObjectProperty(resource.PropertyMap{
"address": resource.NewStringProperty("somewhere.org"), "address": resource.NewStringProperty("somewhere.org"),
"password": resource.MakeSecret(resource.NewStringProperty("some-password")), "password": resource.NewStringProperty("some-password"),
"username": resource.NewStringProperty("some-user"), "username": resource.NewStringProperty("some-user"),
}), }),
}), }),
@@ -265,7 +286,7 @@ func TestConfigEncoding(t *testing.T) {
t.Run("regress-unmarshal", func(t *testing.T) { t.Run("regress-unmarshal", func(t *testing.T) {
for i, tc := range regressUnmarshalTestCases { for i, tc := range regressUnmarshalTestCases {
tc := tc tc := tc
t.Run(strconv.Itoa(i), func(t *testing.T) { t.Run(fmt.Sprintf("UnmarshalPropertyValue/%d", i), func(t *testing.T) {
t.Parallel() t.Parallel()
checkUnmarshal(t, tc) checkUnmarshal(t, tc)
}) })

View File

@@ -38,6 +38,7 @@ import (
provider "github.com/pulumi/pulumi-go-provider" provider "github.com/pulumi/pulumi-go-provider"
"github.com/pulumi/pulumi-go-provider/infer" "github.com/pulumi/pulumi-go-provider/infer"
"github.com/pulumi/pulumi/sdk/v3/go/common/diag"
"github.com/pulumi/pulumi/sdk/v3/go/common/resource" "github.com/pulumi/pulumi/sdk/v3/go/common/resource"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi" "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
) )
@@ -328,10 +329,12 @@ func (is *ImageState) Annotate(a infer.Annotator) {
`)) `))
} }
// client produces a CLI client scoped to this resource and layered on top of // client produces a CLI client with scoped to this resource and layered on top
// any host-level credentials. // of any host-level credentials.
func (i *Image) client(ctx context.Context, state ImageState, args ImageArgs) (Client, error) { func (i *Image) client(pctx provider.Context, state ImageState, args ImageArgs) (Client, error) {
cfg := infer.GetConfig[Config](ctx) ctx := context.Context(pctx)
cfg := infer.GetConfig[Config](pctx)
if cli, ok := ctx.Value(_mockClientKey).(Client); ok { if cli, ok := ctx.Value(_mockClientKey).(Client); ok {
return cli, nil return cli, nil
@@ -350,7 +353,7 @@ func (i *Image) client(ctx context.Context, state ImageState, args ImageArgs) (C
// Check validates ImageArgs, sets defaults, and ensures our client is // Check validates ImageArgs, sets defaults, and ensures our client is
// authenticated. // authenticated.
func (i *Image) Check( func (i *Image) Check(
_ context.Context, _ provider.Context,
_ string, _ string,
_ resource.PropertyMap, _ resource.PropertyMap,
news resource.PropertyMap, news resource.PropertyMap,
@@ -488,7 +491,7 @@ func (b build) ShouldExec() bool {
} }
func (ia ImageArgs) toBuild( func (ia ImageArgs) toBuild(
ctx context.Context, ctx provider.Context,
preview bool, preview bool,
) (Build, error) { ) (Build, error) {
opts, err := ia.validate(preview) opts, err := ia.validate(preview)
@@ -497,15 +500,18 @@ func (ia ImageArgs) toBuild(
} }
if len(ia.Exports) == 0 && !ia.Push && !ia.Load { if len(ia.Exports) == 0 && !ia.Push && !ia.Load {
provider.GetLogger(ctx).Warning( ctx.Log(diag.Warning,
"No exports were specified so the build will only remain in the local build cache. " + "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.") "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 { if len(opts.Platforms) > 1 && len(opts.CacheTo) > 0 {
provider.GetLogger(ctx).Warning( ctx.Log(
"Caching doesn't work reliably with multi-platform builds (https://github.com/docker/buildx/discussions/1382). " + diag.Warning,
"Instead, perform one cached build per platform and create an Index to join them all together.") "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{ return build{
@@ -661,7 +667,7 @@ func (ia *ImageArgs) validate(preview bool) (controllerapi.BuildOptions, error)
// Create builds an image using buildkit. // Create builds an image using buildkit.
func (i *Image) Create( func (i *Image) Create(
ctx context.Context, ctx provider.Context,
name string, name string,
input ImageArgs, input ImageArgs,
preview bool, preview bool,
@@ -710,7 +716,7 @@ func (i *Image) Create(
return id, state, nil return id, state, nil
} }
if preview && !input.buildable() { if preview && !input.buildable() {
provider.GetLogger(ctx).Warning("Skipping preview build because some inputs are unknown.") ctx.Log(diag.Warning, "Skipping preview build because some inputs are unknown.")
return id, state, nil return id, state, nil
} }
@@ -748,7 +754,7 @@ func (i *Image) Create(
// images built locally there is nothing to delete. We treat those cases as // images built locally there is nothing to delete. We treat those cases as
// updates and simply re-build the image without deleting anything. // updates and simply re-build the image without deleting anything.
func (i *Image) Update( func (i *Image) Update(
ctx context.Context, ctx provider.Context,
name string, name string,
_ ImageState, _ ImageState,
input ImageArgs, input ImageArgs,
@@ -761,7 +767,7 @@ func (i *Image) Update(
// Read attempts to read manifests from an image's exports. An image without // Read attempts to read manifests from an image's exports. An image without
// exports will have no manifests. // exports will have no manifests.
func (i *Image) Read( func (i *Image) Read(
ctx context.Context, ctx provider.Context,
name string, name string,
input ImageArgs, input ImageArgs,
state ImageState, state ImageState,
@@ -795,7 +801,7 @@ func (i *Image) Read(
// Does a tag with this digest exist? // Does a tag with this digest exist?
descriptors, err := cli.Inspect(ctx, ref) descriptors, err := cli.Inspect(ctx, ref)
if err != nil { if err != nil {
provider.GetLogger(ctx).Warning(err.Error()) ctx.Log(diag.Warning, err.Error())
continue continue
} }
@@ -824,7 +830,7 @@ func (i *Image) Read(
// Delete deletes an Image. If the Image was already deleted out-of-band it is // Delete deletes an Image. If the Image was already deleted out-of-band it is
// treated as a success. // treated as a success.
func (i *Image) Delete( func (i *Image) Delete(
ctx context.Context, ctx provider.Context,
_ string, _ string,
state ImageState, state ImageState,
) error { ) error {
@@ -855,9 +861,9 @@ func (i *Image) Delete(
var multierr error var multierr error
for _, digested := range digests { for _, digested := range digests {
err = cli.Delete(ctx, digested) err = cli.Delete(context.Context(ctx), digested)
if errdefs.IsNotFound(err) { if errdefs.IsNotFound(err) {
provider.GetLogger(ctx).Warning(digested + " not found") ctx.Log(diag.Warning, digested+" not found")
continue // Nothing to do. continue // Nothing to do.
} }
multierr = errors.Join(multierr, err) multierr = errors.Join(multierr, err)
@@ -869,7 +875,7 @@ func (i *Image) Delete(
// Diff re-implements most of the default diff behavior, with the exception of // Diff re-implements most of the default diff behavior, with the exception of
// ignoring "password" changes on registry inputs. // ignoring "password" changes on registry inputs.
func (*Image) Diff( func (*Image) Diff(
_ context.Context, _ provider.Context,
_ string, _ string,
olds ImageState, olds ImageState,
news ImageArgs, news ImageArgs,
@@ -889,6 +895,12 @@ func (*Image) Diff(
if !reflect.DeepEqual(olds.Builder, news.Builder) { if !reflect.DeepEqual(olds.Builder, news.Builder) {
diff["builder"] = update 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 { if olds.Context.Location != news.Context.Location {
diff["context.location"] = update diff["context.location"] = update
} }
@@ -969,31 +981,6 @@ func (*Image) Diff(
break break
} }
} }
// The GHA cache needs similar handling to ignore changes to the token.
if len(olds.CacheFrom) != len(news.CacheFrom) {
diff["cacheFrom"] = update
} else {
for idx, oldc := range olds.CacheFrom {
newc := news.CacheFrom[idx]
if newc.Diff(oldc) {
continue
}
diff[fmt.Sprintf("cacheFrom[%d]", idx)] = update
break
}
}
if len(olds.CacheTo) != len(news.CacheTo) {
diff["cacheTo"] = update
} else {
for idx, oldc := range olds.CacheTo {
newc := news.CacheTo[idx]
if !newc.Diff(oldc) {
continue
}
diff[fmt.Sprintf("cacheTo[%d]", idx)] = update
break
}
}
return provider.DiffResponse{ return provider.DiffResponse{
HasChanges: len(diff) > 0, HasChanges: len(diff) > 0,

View File

@@ -15,7 +15,6 @@
package internal package internal
import ( import (
"context"
"errors" "errors"
"fmt" "fmt"
"os" "os"
@@ -65,7 +64,7 @@ func TestImageLifecycle(t *testing.T) {
c := NewMockClient(ctrl) c := NewMockClient(ctrl)
c.EXPECT().BuildKitEnabled().Return(true, nil).AnyTimes() c.EXPECT().BuildKitEnabled().Return(true, nil).AnyTimes()
c.EXPECT().Build(gomock.Any(), gomock.AssignableToTypeOf(build{})).DoAndReturn( c.EXPECT().Build(gomock.Any(), gomock.AssignableToTypeOf(build{})).DoAndReturn(
func(_ context.Context, b Build) (*client.SolveResponse, error) { func(_ provider.Context, b Build) (*client.SolveResponse, error) {
assert.Equal(t, "testdata/noop/Dockerfile", b.BuildOptions().DockerfileName) assert.Equal(t, "testdata/noop/Dockerfile", b.BuildOptions().DockerfileName)
return &client.SolveResponse{ return &client.SolveResponse{
ExporterResponse: map[string]string{ ExporterResponse: map[string]string{
@@ -239,7 +238,7 @@ func TestImageLifecycle(t *testing.T) {
c := NewMockClient(ctrl) c := NewMockClient(ctrl)
c.EXPECT().BuildKitEnabled().Return(true, nil).AnyTimes() c.EXPECT().BuildKitEnabled().Return(true, nil).AnyTimes()
c.EXPECT().Build(gomock.Any(), gomock.AssignableToTypeOf(build{})).DoAndReturn( c.EXPECT().Build(gomock.Any(), gomock.AssignableToTypeOf(build{})).DoAndReturn(
func(_ context.Context, b Build) (*client.SolveResponse, error) { func(_ provider.Context, b Build) (*client.SolveResponse, error) {
assert.Equal(t, "testdata/noop/Dockerfile", b.BuildOptions().DockerfileName) assert.Equal(t, "testdata/noop/Dockerfile", b.BuildOptions().DockerfileName)
return &client.SolveResponse{ return &client.SolveResponse{
ExporterResponse: map[string]string{"image.name": "test:latest"}, ExporterResponse: map[string]string{"image.name": "test:latest"},
@@ -370,7 +369,7 @@ func TestRead(t *testing.T) {
} }
func TestImageDiff(t *testing.T) { func TestImageDiff(t *testing.T) {
// t.Parallel() t.Parallel()
emptyDir := t.TempDir() emptyDir := t.TempDir()
host := Host host := Host
@@ -419,106 +418,6 @@ func TestImageDiff(t *testing.T) {
}, },
wantChanges: false, wantChanges: false,
}, },
{
name: "no diff if cache tokens change",
olds: func(_ *testing.T, s ImageState) ImageState {
s.CacheTo = []CacheTo{
{
GHA: &CacheToGitHubActions{
CacheFromGitHubActions: CacheFromGitHubActions{
URL: "unchanged-cacheto-url",
Token: "old-cacheto-token",
},
},
},
{
S3: &CacheToS3{
CacheFromS3: CacheFromS3{
AccessKeyID: "old-cacheto-access-key-id",
SecretAccessKey: "old-cacheto-secret-access-key",
SessionToken: "old-cacheto-session-token",
},
},
},
{
AZBlob: &CacheToAzureBlob{
CacheFromAzureBlob: CacheFromAzureBlob{
SecretAccessKey: "old-cacheto-secret-access-key",
},
},
},
}
s.CacheFrom = []CacheFrom{
{
GHA: &CacheFromGitHubActions{
URL: "unchanged-cachefrom-url",
Token: "old-cachefrom-token",
},
},
{
S3: &CacheFromS3{
AccessKeyID: "old-cachefrom-access-key-id",
SecretAccessKey: "old-cachefrom-secret-access-key",
SessionToken: "old-cachefrom-session-token",
},
},
{
AZBlob: &CacheFromAzureBlob{
SecretAccessKey: "old-cachefrom-secret-access-key",
},
},
}
return s
},
news: func(_ *testing.T, a ImageArgs) ImageArgs {
a.CacheTo = []CacheTo{
{
GHA: &CacheToGitHubActions{
CacheFromGitHubActions: CacheFromGitHubActions{
URL: "unchanged-cacheto-url",
Token: "new-cacheto-token",
},
},
},
{
S3: &CacheToS3{
CacheFromS3: CacheFromS3{
AccessKeyID: "new-cacheto-access-key-id",
SecretAccessKey: "new-cacheto-secret-access-key",
SessionToken: "new-cacheto-session-token",
},
},
},
{
AZBlob: &CacheToAzureBlob{
CacheFromAzureBlob: CacheFromAzureBlob{
SecretAccessKey: "new-cacheto-secret-access-key",
},
},
},
}
a.CacheFrom = []CacheFrom{
{
GHA: &CacheFromGitHubActions{
URL: "unchanged-cachefrom-url",
Token: "new-cachefrom-token",
},
}, {
S3: &CacheFromS3{
AccessKeyID: "new-cachefrom-access-key-id",
SecretAccessKey: "new-cachefrom-secret-access-key",
SessionToken: "new-cachefrom-session-token",
},
}, {
AZBlob: &CacheFromAzureBlob{
SecretAccessKey: "new-cachefrom-secret-access-key",
},
},
}
return a
},
wantChanges: false,
},
{ {
name: "no diff if pull=true but no exports", name: "no diff if pull=true but no exports",
olds: func(_ *testing.T, is ImageState) ImageState { olds: func(_ *testing.T, is ImageState) ImageState {
@@ -531,108 +430,6 @@ func TestImageDiff(t *testing.T) {
}, },
wantChanges: false, wantChanges: false,
}, },
{
name: "diff if gha cache parameters change",
olds: func(_ *testing.T, s ImageState) ImageState {
s.CacheTo = []CacheTo{{
GHA: &CacheToGitHubActions{
CacheFromGitHubActions: CacheFromGitHubActions{
Scope: "old-cacheto-scope",
},
},
}}
s.CacheFrom = []CacheFrom{{
GHA: &CacheFromGitHubActions{
Scope: "old-cachefrom-scope",
},
}}
return s
},
news: func(_ *testing.T, a ImageArgs) ImageArgs {
a.CacheTo = []CacheTo{{
GHA: &CacheToGitHubActions{
CacheFromGitHubActions: CacheFromGitHubActions{
Scope: "new-cacheto-scope",
},
},
}}
a.CacheFrom = []CacheFrom{{
GHA: &CacheFromGitHubActions{
Scope: "new-cachefrom-scope",
},
}}
return a
},
wantChanges: true,
},
{
name: "diff if s3 cache parameters change",
olds: func(_ *testing.T, s ImageState) ImageState {
s.CacheTo = []CacheTo{{
S3: &CacheToS3{
CacheFromS3: CacheFromS3{
Region: "old-cacheto-region",
},
},
}}
s.CacheFrom = []CacheFrom{{
S3: &CacheFromS3{
Region: "old-cachefrom-region",
},
}}
return s
},
news: func(_ *testing.T, a ImageArgs) ImageArgs {
a.CacheTo = []CacheTo{{
S3: &CacheToS3{
CacheFromS3: CacheFromS3{
Region: "new-cacheto-region",
},
},
}}
a.CacheFrom = []CacheFrom{{
S3: &CacheFromS3{
Region: "new-cachefrom-region",
},
}}
return a
},
wantChanges: true,
},
{
name: "diff if azblob cache parameters change",
olds: func(_ *testing.T, s ImageState) ImageState {
s.CacheTo = []CacheTo{{
AZBlob: &CacheToAzureBlob{
CacheFromAzureBlob: CacheFromAzureBlob{
Name: "old-cacheto-name",
},
},
}}
s.CacheFrom = []CacheFrom{{
AZBlob: &CacheFromAzureBlob{
Name: "old-cachefrom-name",
},
}}
return s
},
news: func(_ *testing.T, a ImageArgs) ImageArgs {
a.CacheTo = []CacheTo{{
AZBlob: &CacheToAzureBlob{
CacheFromAzureBlob: CacheFromAzureBlob{
Name: "new-cacheto-name",
},
},
}}
a.CacheFrom = []CacheFrom{{
AZBlob: &CacheFromAzureBlob{
Name: "new-cachefrom-name",
},
}}
return a
},
wantChanges: true,
},
{ {
name: "diff if pull=true with exports", name: "diff if pull=true with exports",
olds: func(_ *testing.T, is ImageState) ImageState { olds: func(_ *testing.T, is ImageState) ImageState {
@@ -1163,14 +960,17 @@ func TestBuildable(t *testing.T) {
func TestToBuild(t *testing.T) { func TestToBuild(t *testing.T) {
t.Parallel() t.Parallel()
Max := Max ctrl := gomock.NewController(t)
pctx := NewMockProviderContext(ctrl)
pctx.EXPECT().Log(gomock.Any(), gomock.Any()).AnyTimes()
max := Max
ia := ImageArgs{ ia := ImageArgs{
Tags: []string{"foo", "bar"}, Tags: []string{"foo", "bar"},
Platforms: []Platform{"linux/amd64"}, Platforms: []Platform{"linux/amd64"},
Context: &BuildContext{Context: Context{Location: "testdata/noop"}}, Context: &BuildContext{Context: Context{Location: "testdata/noop"}},
CacheTo: []CacheTo{ CacheTo: []CacheTo{
{GHA: &CacheToGitHubActions{CacheWithMode: CacheWithMode{&Max}}}, {GHA: &CacheToGitHubActions{CacheWithMode: CacheWithMode{&max}}},
{ {
Registry: &CacheToRegistry{ Registry: &CacheToRegistry{
CacheFromRegistry: CacheFromRegistry{Ref: "docker.io/foo/bar"}, CacheFromRegistry: CacheFromRegistry{Ref: "docker.io/foo/bar"},
@@ -1189,6 +989,6 @@ func TestToBuild(t *testing.T) {
}, },
} }
_, err := ia.toBuild(context.Background(), false) _, err := ia.toBuild(pctx, false)
assert.NoError(t, err) assert.NoError(t, err)
} }

View File

@@ -15,7 +15,6 @@
package internal package internal
import ( import (
"context"
"fmt" "fmt"
"reflect" "reflect"
"strings" "strings"
@@ -25,6 +24,7 @@ import (
provider "github.com/pulumi/pulumi-go-provider" provider "github.com/pulumi/pulumi-go-provider"
"github.com/pulumi/pulumi-go-provider/infer" "github.com/pulumi/pulumi-go-provider/infer"
"github.com/pulumi/pulumi/sdk/v3/go/common/diag"
"github.com/pulumi/pulumi/sdk/v3/go/common/resource" "github.com/pulumi/pulumi/sdk/v3/go/common/resource"
) )
@@ -121,7 +121,7 @@ func (i *IndexState) Annotate(a infer.Annotator) {
// Create is a passthrough to Update. // Create is a passthrough to Update.
func (i *Index) Create( func (i *Index) Create(
ctx context.Context, ctx provider.Context,
name string, name string,
input IndexArgs, input IndexArgs,
preview bool, preview bool,
@@ -133,7 +133,7 @@ func (i *Index) Create(
// Update performs `buildx imagetools create` to create a new OCI index / // Update performs `buildx imagetools create` to create a new OCI index /
// manifest list. // manifest list.
func (i *Index) Update( func (i *Index) Update(
ctx context.Context, ctx provider.Context,
name string, name string,
state IndexState, state IndexState,
input IndexArgs, input IndexArgs,
@@ -151,7 +151,7 @@ func (i *Index) Update(
return state, nil return state, nil
} }
provider.GetLogger(ctx).Debugf("creating index with tag %s and sources %s", input.Tag, input.Sources) ctx.Log(diag.Debug, fmt.Sprintf("creating index with tag %s and sources %s", input.Tag, input.Sources))
err = cli.ManifestCreate(ctx, input.Push, input.Tag, input.Sources...) err = cli.ManifestCreate(ctx, input.Push, input.Tag, input.Sources...)
if err != nil { if err != nil {
@@ -166,7 +166,7 @@ func (i *Index) Update(
} }
func (i *Index) Read( func (i *Index) Read(
ctx context.Context, ctx provider.Context,
name string, name string,
input IndexArgs, input IndexArgs,
state IndexState, state IndexState,
@@ -175,7 +175,7 @@ func (i *Index) Read(
state.Ref = input.Tag state.Ref = input.Tag
if !input.Push { if !input.Push {
provider.GetLogger(ctx).Debug("skipping read because index was not pushed") ctx.Log(diag.Debug, "skipping read because index was not pushed")
return name, input, state, nil // Nothing to read. return name, input, state, nil // Nothing to read.
} }
@@ -184,7 +184,7 @@ func (i *Index) Read(
return name, input, state, err return name, input, state, err
} }
provider.GetLogger(ctx).Debug("reading index with tag " + input.Tag) ctx.Log(diag.Debug, "reading index with tag "+input.Tag)
digest, err := cli.ManifestInspect(ctx, input.Tag) digest, err := cli.ManifestInspect(ctx, input.Tag)
if err != nil && strings.Contains(err.Error(), "No such manifest:") && input.Push { if err != nil && strings.Contains(err.Error(), "No such manifest:") && input.Push {
@@ -211,7 +211,7 @@ func (i *Index) Read(
// exist on the same registry. This is sufficient to handle the most common // exist on the same registry. This is sufficient to handle the most common
// cases for now. // cases for now.
func (i *Index) Check( func (i *Index) Check(
_ context.Context, _ provider.Context,
_ string, _ string,
_ resource.PropertyMap, _ resource.PropertyMap,
news resource.PropertyMap, news resource.PropertyMap,
@@ -247,7 +247,7 @@ func (i *Index) Check(
} }
// Delete attempts to delete the remote manifest. // Delete attempts to delete the remote manifest.
func (i *Index) Delete(ctx context.Context, _ string, state IndexState) error { func (i *Index) Delete(ctx provider.Context, _ string, state IndexState) error {
if !state.Push { if !state.Push {
return nil // Nothing to delete. return nil // Nothing to delete.
} }
@@ -271,7 +271,7 @@ func (i *Index) Delete(ctx context.Context, _ string, state IndexState) error {
// force `ignoreChanges`-style behavior on our registry password (which can // force `ignoreChanges`-style behavior on our registry password (which can
// change all the time due to short-lived AWS credentials). // change all the time due to short-lived AWS credentials).
func (i *Index) Diff( func (i *Index) Diff(
_ context.Context, _ provider.Context,
_ string, _ string,
olds IndexState, olds IndexState,
news IndexArgs, news IndexArgs,
@@ -309,10 +309,10 @@ func (i *Index) Diff(
}, nil }, nil
} }
// client produces a CLI client scoped to this resource and layered on top of // client produces a CLI client with scoped to this resource and layered on top
// any host-level credentials. // of any host-level credentials.
func (i *Index) client( func (i *Index) client(
ctx context.Context, ctx provider.Context,
_ IndexState, _ IndexState,
args IndexArgs, args IndexArgs,
) (Client, error) { ) (Client, error) {

View File

@@ -0,0 +1 @@
{}

View File

@@ -15,6 +15,7 @@ import (
pb "github.com/docker/buildx/controller/pb" pb "github.com/docker/buildx/controller/pb"
client "github.com/moby/buildkit/client" client "github.com/moby/buildkit/client"
session "github.com/moby/buildkit/session" session "github.com/moby/buildkit/session"
provider "github.com/pulumi/pulumi-go-provider"
descriptor "github.com/regclient/regclient/types/descriptor" descriptor "github.com/regclient/regclient/types/descriptor"
gomock "go.uber.org/mock/gomock" gomock "go.uber.org/mock/gomock"
) )
@@ -43,7 +44,7 @@ func (m *MockClient) EXPECT() *MockClientMockRecorder {
} }
// Build mocks base method. // Build mocks base method.
func (m *MockClient) Build(ctx context.Context, b Build) (*client.SolveResponse, error) { func (m *MockClient) Build(ctx provider.Context, b Build) (*client.SolveResponse, error) {
m.ctrl.T.Helper() m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Build", ctx, b) ret := m.ctrl.Call(m, "Build", ctx, b)
ret0, _ := ret[0].(*client.SolveResponse) ret0, _ := ret[0].(*client.SolveResponse)
@@ -70,13 +71,13 @@ func (c *ClientBuildCall) Return(arg0 *client.SolveResponse, arg1 error) *Client
} }
// Do rewrite *gomock.Call.Do // Do rewrite *gomock.Call.Do
func (c *ClientBuildCall) Do(f func(context.Context, Build) (*client.SolveResponse, error)) *ClientBuildCall { func (c *ClientBuildCall) Do(f func(provider.Context, Build) (*client.SolveResponse, error)) *ClientBuildCall {
c.Call = c.Call.Do(f) c.Call = c.Call.Do(f)
return c return c
} }
// DoAndReturn rewrite *gomock.Call.DoAndReturn // DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *ClientBuildCall) DoAndReturn(f func(context.Context, Build) (*client.SolveResponse, error)) *ClientBuildCall { func (c *ClientBuildCall) DoAndReturn(f func(provider.Context, Build) (*client.SolveResponse, error)) *ClientBuildCall {
c.Call = c.Call.DoAndReturn(f) c.Call = c.Call.DoAndReturn(f)
return c return c
} }
@@ -198,7 +199,7 @@ func (c *ClientInspectCall) DoAndReturn(f func(context.Context, string) ([]descr
} }
// ManifestCreate mocks base method. // ManifestCreate mocks base method.
func (m *MockClient) ManifestCreate(ctx context.Context, push bool, target string, refs ...string) error { func (m *MockClient) ManifestCreate(ctx provider.Context, push bool, target string, refs ...string) error {
m.ctrl.T.Helper() m.ctrl.T.Helper()
varargs := []any{ctx, push, target} varargs := []any{ctx, push, target}
for _, a := range refs { for _, a := range refs {
@@ -229,19 +230,19 @@ func (c *ClientManifestCreateCall) Return(arg0 error) *ClientManifestCreateCall
} }
// Do rewrite *gomock.Call.Do // Do rewrite *gomock.Call.Do
func (c *ClientManifestCreateCall) Do(f func(context.Context, bool, string, ...string) error) *ClientManifestCreateCall { func (c *ClientManifestCreateCall) Do(f func(provider.Context, bool, string, ...string) error) *ClientManifestCreateCall {
c.Call = c.Call.Do(f) c.Call = c.Call.Do(f)
return c return c
} }
// DoAndReturn rewrite *gomock.Call.DoAndReturn // DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *ClientManifestCreateCall) DoAndReturn(f func(context.Context, bool, string, ...string) error) *ClientManifestCreateCall { func (c *ClientManifestCreateCall) DoAndReturn(f func(provider.Context, bool, string, ...string) error) *ClientManifestCreateCall {
c.Call = c.Call.DoAndReturn(f) c.Call = c.Call.DoAndReturn(f)
return c return c
} }
// ManifestDelete mocks base method. // ManifestDelete mocks base method.
func (m *MockClient) ManifestDelete(ctx context.Context, target string) error { func (m *MockClient) ManifestDelete(ctx provider.Context, target string) error {
m.ctrl.T.Helper() m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "ManifestDelete", ctx, target) ret := m.ctrl.Call(m, "ManifestDelete", ctx, target)
ret0, _ := ret[0].(error) ret0, _ := ret[0].(error)
@@ -267,19 +268,19 @@ func (c *ClientManifestDeleteCall) Return(arg0 error) *ClientManifestDeleteCall
} }
// Do rewrite *gomock.Call.Do // Do rewrite *gomock.Call.Do
func (c *ClientManifestDeleteCall) Do(f func(context.Context, string) error) *ClientManifestDeleteCall { func (c *ClientManifestDeleteCall) Do(f func(provider.Context, string) error) *ClientManifestDeleteCall {
c.Call = c.Call.Do(f) c.Call = c.Call.Do(f)
return c return c
} }
// DoAndReturn rewrite *gomock.Call.DoAndReturn // DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *ClientManifestDeleteCall) DoAndReturn(f func(context.Context, string) error) *ClientManifestDeleteCall { func (c *ClientManifestDeleteCall) DoAndReturn(f func(provider.Context, string) error) *ClientManifestDeleteCall {
c.Call = c.Call.DoAndReturn(f) c.Call = c.Call.DoAndReturn(f)
return c return c
} }
// ManifestInspect mocks base method. // ManifestInspect mocks base method.
func (m *MockClient) ManifestInspect(ctx context.Context, target string) (string, error) { func (m *MockClient) ManifestInspect(ctx provider.Context, target string) (string, error) {
m.ctrl.T.Helper() m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "ManifestInspect", ctx, target) ret := m.ctrl.Call(m, "ManifestInspect", ctx, target)
ret0, _ := ret[0].(string) ret0, _ := ret[0].(string)
@@ -306,13 +307,13 @@ func (c *ClientManifestInspectCall) Return(arg0 string, arg1 error) *ClientManif
} }
// Do rewrite *gomock.Call.Do // Do rewrite *gomock.Call.Do
func (c *ClientManifestInspectCall) Do(f func(context.Context, string) (string, error)) *ClientManifestInspectCall { func (c *ClientManifestInspectCall) Do(f func(provider.Context, string) (string, error)) *ClientManifestInspectCall {
c.Call = c.Call.Do(f) c.Call = c.Call.Do(f)
return c return c
} }
// DoAndReturn rewrite *gomock.Call.DoAndReturn // DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *ClientManifestInspectCall) DoAndReturn(f func(context.Context, string) (string, error)) *ClientManifestInspectCall { func (c *ClientManifestInspectCall) DoAndReturn(f func(provider.Context, string) (string, error)) *ClientManifestInspectCall {
c.Call = c.Call.DoAndReturn(f) c.Call = c.Call.DoAndReturn(f)
return c return c
} }

View File

@@ -0,0 +1,386 @@
// Code generated by MockGen. DO NOT EDIT.
// Source: providercontext.go
//
// Generated by this command:
//
// mockgen -typed -package internal -source providercontext.go -destination mockprovidercontext_test.go --self_package github.com/pulumi/pulumi-docker/provider/v4/internal
//
// Package internal is a generated GoMock package.
package internal
import (
reflect "reflect"
time "time"
provider "github.com/pulumi/pulumi-go-provider"
diag "github.com/pulumi/pulumi/sdk/v3/go/common/diag"
gomock "go.uber.org/mock/gomock"
)
// MockProviderContext is a mock of ProviderContext interface.
type MockProviderContext struct {
ctrl *gomock.Controller
recorder *MockProviderContextMockRecorder
}
// MockProviderContextMockRecorder is the mock recorder for MockProviderContext.
type MockProviderContextMockRecorder struct {
mock *MockProviderContext
}
// NewMockProviderContext creates a new mock instance.
func NewMockProviderContext(ctrl *gomock.Controller) *MockProviderContext {
mock := &MockProviderContext{ctrl: ctrl}
mock.recorder = &MockProviderContextMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockProviderContext) EXPECT() *MockProviderContextMockRecorder {
return m.recorder
}
// Deadline mocks base method.
func (m *MockProviderContext) Deadline() (time.Time, bool) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Deadline")
ret0, _ := ret[0].(time.Time)
ret1, _ := ret[1].(bool)
return ret0, ret1
}
// Deadline indicates an expected call of Deadline.
func (mr *MockProviderContextMockRecorder) Deadline() *ProviderContextDeadlineCall {
mr.mock.ctrl.T.Helper()
call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Deadline", reflect.TypeOf((*MockProviderContext)(nil).Deadline))
return &ProviderContextDeadlineCall{Call: call}
}
// ProviderContextDeadlineCall wrap *gomock.Call
type ProviderContextDeadlineCall struct {
*gomock.Call
}
// Return rewrite *gomock.Call.Return
func (c *ProviderContextDeadlineCall) Return(deadline time.Time, ok bool) *ProviderContextDeadlineCall {
c.Call = c.Call.Return(deadline, ok)
return c
}
// Do rewrite *gomock.Call.Do
func (c *ProviderContextDeadlineCall) Do(f func() (time.Time, bool)) *ProviderContextDeadlineCall {
c.Call = c.Call.Do(f)
return c
}
// DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *ProviderContextDeadlineCall) DoAndReturn(f func() (time.Time, bool)) *ProviderContextDeadlineCall {
c.Call = c.Call.DoAndReturn(f)
return c
}
// Done mocks base method.
func (m *MockProviderContext) Done() <-chan struct{} {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Done")
ret0, _ := ret[0].(<-chan struct{})
return ret0
}
// Done indicates an expected call of Done.
func (mr *MockProviderContextMockRecorder) Done() *ProviderContextDoneCall {
mr.mock.ctrl.T.Helper()
call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Done", reflect.TypeOf((*MockProviderContext)(nil).Done))
return &ProviderContextDoneCall{Call: call}
}
// ProviderContextDoneCall wrap *gomock.Call
type ProviderContextDoneCall struct {
*gomock.Call
}
// Return rewrite *gomock.Call.Return
func (c *ProviderContextDoneCall) Return(arg0 <-chan struct{}) *ProviderContextDoneCall {
c.Call = c.Call.Return(arg0)
return c
}
// Do rewrite *gomock.Call.Do
func (c *ProviderContextDoneCall) Do(f func() <-chan struct{}) *ProviderContextDoneCall {
c.Call = c.Call.Do(f)
return c
}
// DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *ProviderContextDoneCall) DoAndReturn(f func() <-chan struct{}) *ProviderContextDoneCall {
c.Call = c.Call.DoAndReturn(f)
return c
}
// Err mocks base method.
func (m *MockProviderContext) Err() error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Err")
ret0, _ := ret[0].(error)
return ret0
}
// Err indicates an expected call of Err.
func (mr *MockProviderContextMockRecorder) Err() *ProviderContextErrCall {
mr.mock.ctrl.T.Helper()
call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Err", reflect.TypeOf((*MockProviderContext)(nil).Err))
return &ProviderContextErrCall{Call: call}
}
// ProviderContextErrCall wrap *gomock.Call
type ProviderContextErrCall struct {
*gomock.Call
}
// Return rewrite *gomock.Call.Return
func (c *ProviderContextErrCall) Return(arg0 error) *ProviderContextErrCall {
c.Call = c.Call.Return(arg0)
return c
}
// Do rewrite *gomock.Call.Do
func (c *ProviderContextErrCall) Do(f func() error) *ProviderContextErrCall {
c.Call = c.Call.Do(f)
return c
}
// DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *ProviderContextErrCall) DoAndReturn(f func() error) *ProviderContextErrCall {
c.Call = c.Call.DoAndReturn(f)
return c
}
// Log mocks base method.
func (m *MockProviderContext) Log(severity diag.Severity, msg string) {
m.ctrl.T.Helper()
m.ctrl.Call(m, "Log", severity, msg)
}
// Log indicates an expected call of Log.
func (mr *MockProviderContextMockRecorder) Log(severity, msg any) *ProviderContextLogCall {
mr.mock.ctrl.T.Helper()
call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Log", reflect.TypeOf((*MockProviderContext)(nil).Log), severity, msg)
return &ProviderContextLogCall{Call: call}
}
// ProviderContextLogCall wrap *gomock.Call
type ProviderContextLogCall struct {
*gomock.Call
}
// Return rewrite *gomock.Call.Return
func (c *ProviderContextLogCall) Return() *ProviderContextLogCall {
c.Call = c.Call.Return()
return c
}
// Do rewrite *gomock.Call.Do
func (c *ProviderContextLogCall) Do(f func(diag.Severity, string)) *ProviderContextLogCall {
c.Call = c.Call.Do(f)
return c
}
// DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *ProviderContextLogCall) DoAndReturn(f func(diag.Severity, string)) *ProviderContextLogCall {
c.Call = c.Call.DoAndReturn(f)
return c
}
// LogStatus mocks base method.
func (m *MockProviderContext) LogStatus(severity diag.Severity, msg string) {
m.ctrl.T.Helper()
m.ctrl.Call(m, "LogStatus", severity, msg)
}
// LogStatus indicates an expected call of LogStatus.
func (mr *MockProviderContextMockRecorder) LogStatus(severity, msg any) *ProviderContextLogStatusCall {
mr.mock.ctrl.T.Helper()
call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LogStatus", reflect.TypeOf((*MockProviderContext)(nil).LogStatus), severity, msg)
return &ProviderContextLogStatusCall{Call: call}
}
// ProviderContextLogStatusCall wrap *gomock.Call
type ProviderContextLogStatusCall struct {
*gomock.Call
}
// Return rewrite *gomock.Call.Return
func (c *ProviderContextLogStatusCall) Return() *ProviderContextLogStatusCall {
c.Call = c.Call.Return()
return c
}
// Do rewrite *gomock.Call.Do
func (c *ProviderContextLogStatusCall) Do(f func(diag.Severity, string)) *ProviderContextLogStatusCall {
c.Call = c.Call.Do(f)
return c
}
// DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *ProviderContextLogStatusCall) DoAndReturn(f func(diag.Severity, string)) *ProviderContextLogStatusCall {
c.Call = c.Call.DoAndReturn(f)
return c
}
// LogStatusf mocks base method.
func (m *MockProviderContext) LogStatusf(severity diag.Severity, msg string, args ...any) {
m.ctrl.T.Helper()
varargs := []any{severity, msg}
for _, a := range args {
varargs = append(varargs, a)
}
m.ctrl.Call(m, "LogStatusf", varargs...)
}
// LogStatusf indicates an expected call of LogStatusf.
func (mr *MockProviderContextMockRecorder) LogStatusf(severity, msg any, args ...any) *ProviderContextLogStatusfCall {
mr.mock.ctrl.T.Helper()
varargs := append([]any{severity, msg}, args...)
call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LogStatusf", reflect.TypeOf((*MockProviderContext)(nil).LogStatusf), varargs...)
return &ProviderContextLogStatusfCall{Call: call}
}
// ProviderContextLogStatusfCall wrap *gomock.Call
type ProviderContextLogStatusfCall struct {
*gomock.Call
}
// Return rewrite *gomock.Call.Return
func (c *ProviderContextLogStatusfCall) Return() *ProviderContextLogStatusfCall {
c.Call = c.Call.Return()
return c
}
// Do rewrite *gomock.Call.Do
func (c *ProviderContextLogStatusfCall) Do(f func(diag.Severity, string, ...any)) *ProviderContextLogStatusfCall {
c.Call = c.Call.Do(f)
return c
}
// DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *ProviderContextLogStatusfCall) DoAndReturn(f func(diag.Severity, string, ...any)) *ProviderContextLogStatusfCall {
c.Call = c.Call.DoAndReturn(f)
return c
}
// Logf mocks base method.
func (m *MockProviderContext) Logf(severity diag.Severity, msg string, args ...any) {
m.ctrl.T.Helper()
varargs := []any{severity, msg}
for _, a := range args {
varargs = append(varargs, a)
}
m.ctrl.Call(m, "Logf", varargs...)
}
// Logf indicates an expected call of Logf.
func (mr *MockProviderContextMockRecorder) Logf(severity, msg any, args ...any) *ProviderContextLogfCall {
mr.mock.ctrl.T.Helper()
varargs := append([]any{severity, msg}, args...)
call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Logf", reflect.TypeOf((*MockProviderContext)(nil).Logf), varargs...)
return &ProviderContextLogfCall{Call: call}
}
// ProviderContextLogfCall wrap *gomock.Call
type ProviderContextLogfCall struct {
*gomock.Call
}
// Return rewrite *gomock.Call.Return
func (c *ProviderContextLogfCall) Return() *ProviderContextLogfCall {
c.Call = c.Call.Return()
return c
}
// Do rewrite *gomock.Call.Do
func (c *ProviderContextLogfCall) Do(f func(diag.Severity, string, ...any)) *ProviderContextLogfCall {
c.Call = c.Call.Do(f)
return c
}
// DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *ProviderContextLogfCall) DoAndReturn(f func(diag.Severity, string, ...any)) *ProviderContextLogfCall {
c.Call = c.Call.DoAndReturn(f)
return c
}
// RuntimeInformation mocks base method.
func (m *MockProviderContext) RuntimeInformation() provider.RunInfo {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "RuntimeInformation")
ret0, _ := ret[0].(provider.RunInfo)
return ret0
}
// RuntimeInformation indicates an expected call of RuntimeInformation.
func (mr *MockProviderContextMockRecorder) RuntimeInformation() *ProviderContextRuntimeInformationCall {
mr.mock.ctrl.T.Helper()
call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RuntimeInformation", reflect.TypeOf((*MockProviderContext)(nil).RuntimeInformation))
return &ProviderContextRuntimeInformationCall{Call: call}
}
// ProviderContextRuntimeInformationCall wrap *gomock.Call
type ProviderContextRuntimeInformationCall struct {
*gomock.Call
}
// Return rewrite *gomock.Call.Return
func (c *ProviderContextRuntimeInformationCall) Return(arg0 provider.RunInfo) *ProviderContextRuntimeInformationCall {
c.Call = c.Call.Return(arg0)
return c
}
// Do rewrite *gomock.Call.Do
func (c *ProviderContextRuntimeInformationCall) Do(f func() provider.RunInfo) *ProviderContextRuntimeInformationCall {
c.Call = c.Call.Do(f)
return c
}
// DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *ProviderContextRuntimeInformationCall) DoAndReturn(f func() provider.RunInfo) *ProviderContextRuntimeInformationCall {
c.Call = c.Call.DoAndReturn(f)
return c
}
// Value mocks base method.
func (m *MockProviderContext) Value(key any) any {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Value", key)
ret0, _ := ret[0].(any)
return ret0
}
// Value indicates an expected call of Value.
func (mr *MockProviderContextMockRecorder) Value(key any) *ProviderContextValueCall {
mr.mock.ctrl.T.Helper()
call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Value", reflect.TypeOf((*MockProviderContext)(nil).Value), key)
return &ProviderContextValueCall{Call: call}
}
// ProviderContextValueCall wrap *gomock.Call
type ProviderContextValueCall struct {
*gomock.Call
}
// Return rewrite *gomock.Call.Return
func (c *ProviderContextValueCall) Return(arg0 any) *ProviderContextValueCall {
c.Call = c.Call.Return(arg0)
return c
}
// Do rewrite *gomock.Call.Do
func (c *ProviderContextValueCall) Do(f func(any) any) *ProviderContextValueCall {
c.Call = c.Call.Do(f)
return c
}
// DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *ProviderContextValueCall) DoAndReturn(f func(any) any) *ProviderContextValueCall {
c.Call = c.Call.DoAndReturn(f)
return c
}

View File

@@ -55,7 +55,7 @@ func (c *Config) Annotate(a infer.Annotator) {
} }
// Configure validates and processes user-provided configuration values. // Configure validates and processes user-provided configuration values.
func (c *Config) Configure(_ context.Context) error { func (c *Config) Configure(_ provider.Context) error {
h, err := newHost(c) h, err := newHost(c)
if err != nil { if err != nil {
return fmt.Errorf("getting host: %w", err) return fmt.Errorf("getting host: %w", err)

View File

@@ -59,10 +59,7 @@ func TestAnnotate(t *testing.T) {
func TestSchema(t *testing.T) { func TestSchema(t *testing.T) {
t.Parallel() t.Parallel()
s := newServer(nil) Schema(context.Background(), "v4")
_, err := s.GetSchema(provider.GetSchemaRequest{Version: 0})
assert.NoError(t, err)
} }
type annotator struct{} type annotator struct{}
@@ -76,10 +73,10 @@ func newServer(client Client) integration.Server {
// Inject a mock client if provided. // Inject a mock client if provided.
if client != nil { if client != nil {
p = mwcontext.Wrap(p, func(ctx context.Context) context.Context { p = mwcontext.Wrap(p, func(ctx provider.Context) provider.Context {
return context.WithValue(ctx, _mockClientKey, client) return provider.CtxWithValue(ctx, _mockClientKey, client)
}) })
} }
return integration.NewServer("docker-build", semver.Version{Major: 0}, p) return integration.NewServer("docker", semver.Version{Major: 4}, p)
} }

View File

@@ -0,0 +1,27 @@
// 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 providercontext.go -destination mockprovidercontext_test.go --self_package github.com/pulumi/pulumi-docker/provider/v4/internal
package internal
import (
provider "github.com/pulumi/pulumi-go-provider"
)
// ProviderContext is a workaround for
// https://github.com/pulumi/pulumi-go-provider/issues/159
type ProviderContext interface {
provider.Context
}

View File

@@ -16,13 +16,13 @@ package provider
import ( import (
"context" "context"
"encoding/json" "fmt"
"github.com/pulumi/pulumi-docker-build/provider/internal" "github.com/pulumi/pulumi-docker-build/provider/internal"
"github.com/pulumi/pulumi-docker-build/provider/internal/deprecated" "github.com/pulumi/pulumi-docker-build/provider/internal/deprecated"
gp "github.com/pulumi/pulumi-go-provider" gp "github.com/pulumi/pulumi-go-provider"
"github.com/pulumi/pulumi/pkg/v3/codegen/schema"
"github.com/pulumi/pulumi/pkg/v3/resource/provider" "github.com/pulumi/pulumi/pkg/v3/resource/provider"
"github.com/pulumi/pulumi/sdk/v3/go/common/resource/plugin"
rpc "github.com/pulumi/pulumi/sdk/v3/proto/go" rpc "github.com/pulumi/pulumi/sdk/v3/proto/go"
) )
@@ -39,7 +39,11 @@ func Serve() error {
// New creates a new provider. // New creates a new provider.
func New(host *provider.HostClient) (rpc.ResourceProviderServer, error) { func New(host *provider.HostClient) (rpc.ResourceProviderServer, error) {
return gp.RawServer(Name, Version, configurableProvider(internal.NewBuildxProvider()))(host) server, err := gp.RawServer(Name, Version, internal.NewBuildxProvider())(host)
if err != nil {
return nil, fmt.Errorf("building raw server: %w", err)
}
return &configurableProvider{ResourceProviderServer: server}, nil
} }
// configurableProvider is a workaround for // configurableProvider is a workaround for
@@ -50,26 +54,26 @@ func New(host *provider.HostClient) (rpc.ResourceProviderServer, error) {
// //
// If you find yourself in a position where you need to copy this -- STOP! // If you find yourself in a position where you need to copy this -- STOP!
// https://github.com/pulumi/pulumi/pull/15032 should be merged with this fix. // https://github.com/pulumi/pulumi/pull/15032 should be merged with this fix.
func configurableProvider(p gp.Provider) gp.Provider { type configurableProvider struct {
configure := p.Configure rpc.ResourceProviderServer
}
p.Configure = func(ctx context.Context, req gp.ConfigureRequest) error {
r, err := p.GetSchema(ctx, gp.GetSchemaRequest{Version: 0}) func (p configurableProvider) Configure(
if err != nil { ctx context.Context,
return err request *rpc.ConfigureRequest,
} ) (*rpc.ConfigureResponse, error) {
spec := schema.PackageSpec{} schema := internal.Schema(ctx, Version)
err = json.Unmarshal([]byte(r.Schema), &spec) ce := deprecated.New(schema.Config)
if err != nil { buildxReq := request
return err if props, err := ce.UnmarshalProperties(request.Args); err == nil {
} args, _ := plugin.MarshalProperties(props, plugin.MarshalOptions{
Label: "config",
ce := deprecated.New(spec.Config) KeepUnknowns: true,
if props, err := ce.UnmarshalProperties(req.Args); err == nil { SkipNulls: true,
req.Args = props KeepSecrets: true,
} RejectAssets: true,
return configure(ctx, req) })
} buildxReq.Args = args
}
return p return p.ResourceProviderServer.Configure(ctx, buildxReq)
} }

View File

@@ -24,10 +24,7 @@ import (
emptypb "google.golang.org/protobuf/types/known/emptypb" emptypb "google.golang.org/protobuf/types/known/emptypb"
"google.golang.org/protobuf/types/known/structpb" "google.golang.org/protobuf/types/known/structpb"
"github.com/pulumi/pulumi-docker-build/provider/internal" pulumirpc "github.com/pulumi/pulumi/sdk/v3/proto/go"
provider "github.com/pulumi/pulumi-go-provider"
"github.com/pulumi/pulumi-go-provider/integration"
"github.com/pulumi/pulumi/sdk/v3/go/common/resource/plugin"
) )
// TestConfigure checks backwards-compatibility with SDKs that still send // TestConfigure checks backwards-compatibility with SDKs that still send
@@ -37,19 +34,20 @@ import (
func TestConfigure(t *testing.T) { func TestConfigure(t *testing.T) {
t.Parallel() t.Parallel()
p := configurableProvider(internal.NewBuildxProvider()) ctx := context.Background()
p, err := New(nil)
require.NoError(t, err)
args, err := structpb.NewStruct(map[string]any{ args, err := structpb.NewStruct(map[string]any{
"registries": `[{"address": "docker.io"}]`, "registries": `[{"address": "docker.io"}]`,
}) })
require.NoError(t, err) require.NoError(t, err)
argsMap, err := plugin.UnmarshalProperties(args, plugin.MarshalOptions{})
require.NoError(t, err)
s := integration.NewServer("docker-build", semver.Version{Major: 0}, p) _, err = p.Configure(ctx, &pulumirpc.ConfigureRequest{
err = s.Configure(provider.ConfigureRequest{ Args: args,
Args: argsMap,
}) })
assert.NoError(t, err) assert.NoError(t, err)
} }

View File

@@ -4,7 +4,7 @@ go 1.21.7
require ( require (
github.com/blang/semver v3.5.1+incompatible github.com/blang/semver v3.5.1+incompatible
github.com/pulumi/pulumi/sdk/v3 v3.113.3 github.com/pulumi/pulumi/sdk/v3 v3.113.0
) )
require ( require (
@@ -82,7 +82,7 @@ require (
golang.org/x/crypto v0.21.0 // indirect golang.org/x/crypto v0.21.0 // indirect
golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 // indirect golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 // indirect
golang.org/x/mod v0.16.0 // indirect golang.org/x/mod v0.16.0 // indirect
golang.org/x/net v0.23.0 // indirect golang.org/x/net v0.22.0 // indirect
golang.org/x/sync v0.6.0 // indirect golang.org/x/sync v0.6.0 // indirect
golang.org/x/sys v0.18.0 // indirect golang.org/x/sys v0.18.0 // indirect
golang.org/x/term v0.18.0 // indirect golang.org/x/term v0.18.0 // indirect

View File

@@ -154,8 +154,8 @@ github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 h1:vkHw5I/plNdTr435
github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231/go.mod h1:murToZ2N9hNJzewjHBgfFdXhZKjY3z5cYC1VXk+lbFE= github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231/go.mod h1:murToZ2N9hNJzewjHBgfFdXhZKjY3z5cYC1VXk+lbFE=
github.com/pulumi/esc v0.6.2 h1:+z+l8cuwIauLSwXQS0uoI3rqB+YG4SzsZYtHfNoXBvw= github.com/pulumi/esc v0.6.2 h1:+z+l8cuwIauLSwXQS0uoI3rqB+YG4SzsZYtHfNoXBvw=
github.com/pulumi/esc v0.6.2/go.mod h1:jNnYNjzsOgVTjCp0LL24NsCk8ZJxq4IoLQdCT0X7l8k= github.com/pulumi/esc v0.6.2/go.mod h1:jNnYNjzsOgVTjCp0LL24NsCk8ZJxq4IoLQdCT0X7l8k=
github.com/pulumi/pulumi/sdk/v3 v3.113.3 h1:ySNxoL+O9TtS9WiPa9SWu6mthJryryRzP0kyYaQlNaU= github.com/pulumi/pulumi/sdk/v3 v3.113.0 h1:CIlmxJZdjxpPPoFe/rrP1dWTwh3CB7ahs/dA6SHcbuE=
github.com/pulumi/pulumi/sdk/v3 v3.113.3/go.mod h1:JWSzKBoHd8rlncC1DhXLf7YdV+Bk/Qf+hSZOOQh0WwQ= github.com/pulumi/pulumi/sdk/v3 v3.113.0/go.mod h1:JWSzKBoHd8rlncC1DhXLf7YdV+Bk/Qf+hSZOOQh0WwQ=
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= 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.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
@@ -236,8 +236,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc=
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/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-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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=