Compare commits
60 Commits
blampe/gha
...
v0.0.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5f16c2f2fa | ||
|
|
9d35ccefac | ||
|
|
13fb5b6158 | ||
|
|
f8796f9095 | ||
|
|
5175dbeb3f | ||
|
|
2499eeb27b | ||
|
|
5135d9c759 | ||
|
|
f5e57ab70c | ||
|
|
2987a65183 | ||
|
|
fbc4ddec66 | ||
|
|
40a3223b23 | ||
|
|
72bd40b97c | ||
|
|
a6247a78b1 | ||
|
|
7597ca32ca | ||
|
|
0f23201468 | ||
|
|
d72c895b59 | ||
|
|
da63cd4cf4 | ||
|
|
561b185221 | ||
|
|
50b9b5ce3e | ||
|
|
bcf1c48554 | ||
|
|
40f5fdf15e | ||
|
|
b9a801e8ae | ||
|
|
43979f6d93 | ||
|
|
f4fa6ea93a | ||
|
|
dd2fb57edc | ||
|
|
717c819a77 | ||
|
|
c8a3d26d9e | ||
|
|
12788aca32 | ||
|
|
16ce5eca59 | ||
|
|
2c8abc1bdb | ||
|
|
7c40920db7 | ||
|
|
8313c4d8b9 | ||
|
|
ca01f67657 | ||
|
|
0edf5d6057 | ||
|
|
c7b41bc7e2 | ||
|
|
8028d11c58 | ||
|
|
23b00ae76a | ||
|
|
f5d8e81f24 | ||
|
|
7c9632e428 | ||
|
|
eca03ce6db | ||
|
|
59fd3c84e5 | ||
|
|
968ea6d57c | ||
|
|
02014becfd | ||
|
|
ebcf732c89 | ||
|
|
db520f164b | ||
|
|
12bf5dd689 | ||
|
|
4cd6d49ba9 | ||
|
|
3a9c246ffb | ||
|
|
fe4de036f1 | ||
|
|
5cb5ccbf53 | ||
|
|
da2fecf013 | ||
|
|
6efd4b045b | ||
|
|
b6c5d4d511 | ||
|
|
b455d9037f | ||
|
|
f9b5ed8f67 | ||
|
|
16196bb547 | ||
|
|
5bec2f3e1c | ||
|
|
91c652a702 | ||
|
|
cbf957533e | ||
|
|
d50d156bd8 |
83
.github/workflows/build.yml
vendored
83
.github/workflows/build.yml
vendored
@@ -64,11 +64,13 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
lfs: true
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@v1
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -118,14 +120,7 @@ jobs:
|
||||
- name: Build Provider
|
||||
run: make provider
|
||||
- name: Check worktree clean
|
||||
uses: pulumi/git-status-check-action@v1
|
||||
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: ./ci-scripts/ci/check-worktree-is-clean
|
||||
- run: git status --porcelain
|
||||
- name: Tar provider binaries
|
||||
run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
|
||||
@@ -167,11 +162,13 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
lfs: true
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@v1
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -222,14 +219,7 @@ jobs:
|
||||
- name: Build SDK
|
||||
run: make build_${{ matrix.language }}
|
||||
- name: Check worktree clean
|
||||
uses: pulumi/git-status-check-action@v1
|
||||
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: ./ci-scripts/ci/check-worktree-is-clean
|
||||
- run: git status --porcelain
|
||||
- name: Tar SDK folder
|
||||
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
|
||||
@@ -268,11 +258,13 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
lfs: true
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@v1
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -384,11 +376,8 @@ jobs:
|
||||
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: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -419,10 +408,11 @@ jobs:
|
||||
role-session-name: ${{ env.PROVIDER }}@githubActions
|
||||
role-external-id: upload-pulumi-release
|
||||
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
|
||||
uses: goreleaser/goreleaser-action@v5
|
||||
env:
|
||||
GORELEASER_CURRENT_TAG: v${{ steps.version.outputs.version }}
|
||||
with:
|
||||
args: -p 3 -f .goreleaser.prerelease.yml --clean --skip=validate --timeout 60m0s
|
||||
version: latest
|
||||
@@ -442,17 +432,13 @@ jobs:
|
||||
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: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: ci-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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -525,11 +511,13 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
lfs: true
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@v1
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -559,10 +547,11 @@ jobs:
|
||||
- name: Uncompress java SDK
|
||||
run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C
|
||||
${{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
|
||||
uses: gradle/gradle-build-action@v3
|
||||
env:
|
||||
PACKAGE_VERSION: ${{ env.PROVIDER_VERSION }}
|
||||
with:
|
||||
arguments: publishToSonatype closeAndReleaseSonatypeStagingRepository
|
||||
build-root-directory: ./sdk/java
|
||||
|
||||
118
.github/workflows/prerelease.yml
vendored
118
.github/workflows/prerelease.yml
vendored
@@ -56,11 +56,13 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
lfs: true
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@v1
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -110,14 +112,7 @@ jobs:
|
||||
- name: Build Provider
|
||||
run: make provider
|
||||
- name: Check worktree clean
|
||||
uses: pulumi/git-status-check-action@v1
|
||||
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: ./ci-scripts/ci/check-worktree-is-clean
|
||||
- run: git status --porcelain
|
||||
- name: Tar provider binaries
|
||||
run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
|
||||
@@ -159,11 +154,13 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
lfs: true
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@v1
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -214,14 +211,7 @@ jobs:
|
||||
- name: Build SDK
|
||||
run: make build_${{ matrix.language }}
|
||||
- name: Check worktree clean
|
||||
uses: pulumi/git-status-check-action@v1
|
||||
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: ./ci-scripts/ci/check-worktree-is-clean
|
||||
- run: git status --porcelain
|
||||
- name: Tar SDK folder
|
||||
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
|
||||
@@ -259,11 +249,13 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
lfs: true
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@v1
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -375,11 +367,8 @@ jobs:
|
||||
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: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -410,10 +399,11 @@ jobs:
|
||||
role-session-name: ${{ env.PROVIDER }}@githubActions
|
||||
role-external-id: upload-pulumi-release
|
||||
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
|
||||
uses: goreleaser/goreleaser-action@v5
|
||||
env:
|
||||
GORELEASER_CURRENT_TAG: v${{ steps.version.outputs.version }}
|
||||
with:
|
||||
args: -p 3 -f .goreleaser.prerelease.yml --clean --skip=validate --timeout 60m0s
|
||||
version: latest
|
||||
@@ -433,17 +423,13 @@ jobs:
|
||||
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: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: ci-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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -516,11 +502,13 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
lfs: true
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@v1
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -550,46 +538,12 @@ jobs:
|
||||
- name: Uncompress java SDK
|
||||
run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C
|
||||
${{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
|
||||
uses: gradle/gradle-build-action@v3
|
||||
env:
|
||||
PACKAGE_VERSION: ${{ env.PROVIDER_VERSION }}
|
||||
with:
|
||||
arguments: publishToSonatype closeAndReleaseSonatypeStagingRepository
|
||||
build-root-directory: ./sdk/java
|
||||
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
|
||||
|
||||
120
.github/workflows/release.yml
vendored
120
.github/workflows/release.yml
vendored
@@ -56,11 +56,13 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
lfs: true
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@v1
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -110,14 +112,7 @@ jobs:
|
||||
- name: Build Provider
|
||||
run: make provider
|
||||
- name: Check worktree clean
|
||||
uses: pulumi/git-status-check-action@v1
|
||||
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: ./ci-scripts/ci/check-worktree-is-clean
|
||||
- run: git status --porcelain
|
||||
- name: Tar provider binaries
|
||||
run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
|
||||
@@ -159,11 +154,13 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
lfs: true
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@v1
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -214,14 +211,7 @@ jobs:
|
||||
- name: Build SDK
|
||||
run: make build_${{ matrix.language }}
|
||||
- name: Check worktree clean
|
||||
uses: pulumi/git-status-check-action@v1
|
||||
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: ./ci-scripts/ci/check-worktree-is-clean
|
||||
- run: git status --porcelain
|
||||
- name: Tar SDK folder
|
||||
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
|
||||
@@ -259,11 +249,13 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
lfs: true
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@v1
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -375,11 +367,8 @@ jobs:
|
||||
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: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -410,10 +399,11 @@ jobs:
|
||||
role-session-name: ${{ env.PROVIDER }}@githubActions
|
||||
role-external-id: upload-pulumi-release
|
||||
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
|
||||
uses: goreleaser/goreleaser-action@v5
|
||||
env:
|
||||
GORELEASER_CURRENT_TAG: v${{ steps.version.outputs.version }}
|
||||
with:
|
||||
args: -p 3 release --clean --timeout 60m0s
|
||||
version: latest
|
||||
@@ -433,17 +423,13 @@ jobs:
|
||||
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: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: ci-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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -516,11 +502,13 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
lfs: true
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@v1
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -550,52 +538,34 @@ jobs:
|
||||
- name: Uncompress java SDK
|
||||
run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C
|
||||
${{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
|
||||
uses: gradle/gradle-build-action@v3
|
||||
env:
|
||||
PACKAGE_VERSION: ${{ env.PROVIDER_VERSION }}
|
||||
with:
|
||||
arguments: publishToSonatype closeAndReleaseSonatypeStagingRepository
|
||||
build-root-directory: ./sdk/java
|
||||
gradle-version: 7.4.1
|
||||
publish_go_sdk:
|
||||
tag_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
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
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
|
||||
repo: pulumi/pulumictl
|
||||
- name: Add SDK version tag
|
||||
run: git tag sdk/v$(pulumictl get version --language generic) && git push origin
|
||||
sdk/v$(pulumictl get version --language generic)
|
||||
name: tag_sdk
|
||||
dispatch_docs_build:
|
||||
runs-on: ubuntu-latest
|
||||
needs: publish_go_sdk
|
||||
needs: tag_sdk
|
||||
steps:
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
|
||||
48
.github/workflows/run-acceptance-tests.yml
vendored
48
.github/workflows/run-acceptance-tests.yml
vendored
@@ -81,11 +81,13 @@ jobs:
|
||||
with:
|
||||
lfs: true
|
||||
ref: ${{ env.PR_COMMIT_SHA }}
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@v1
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -135,14 +137,7 @@ jobs:
|
||||
- name: Build Provider
|
||||
run: make provider
|
||||
- name: Check worktree clean
|
||||
uses: pulumi/git-status-check-action@v1
|
||||
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: ./ci-scripts/ci/check-worktree-is-clean
|
||||
- run: git status --porcelain
|
||||
- name: Tar provider binaries
|
||||
run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
|
||||
@@ -187,11 +182,13 @@ jobs:
|
||||
with:
|
||||
lfs: true
|
||||
ref: ${{ env.PR_COMMIT_SHA }}
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@v1
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -242,14 +239,7 @@ jobs:
|
||||
- name: Build SDK
|
||||
run: make build_${{ matrix.language }}
|
||||
- name: Check worktree clean
|
||||
uses: pulumi/git-status-check-action@v1
|
||||
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: ./ci-scripts/ci/check-worktree-is-clean
|
||||
- run: git status --porcelain
|
||||
- name: Tar SDK folder
|
||||
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
|
||||
@@ -291,11 +281,13 @@ jobs:
|
||||
with:
|
||||
lfs: true
|
||||
ref: ${{ env.PR_COMMIT_SHA }}
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@v1
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
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
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
|
||||
9
.github/workflows/weekly-pulumi-update.yml
vendored
9
.github/workflows/weekly-pulumi-update.yml
vendored
@@ -54,11 +54,8 @@ jobs:
|
||||
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: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
@@ -133,7 +130,7 @@ jobs:
|
||||
uses: repo-sync/pull-request@v2.6.2
|
||||
with:
|
||||
source_branch: update-pulumi/${{ github.run_id }}-${{ github.run_number }}
|
||||
destination_branch: main
|
||||
destination_branch: master
|
||||
pr_title: Automated Pulumi/Pulumi upgrade
|
||||
github_token: ${{ secrets.PULUMI_BOT_TOKEN }}
|
||||
env:
|
||||
|
||||
12
CHANGELOG.md
12
CHANGELOG.md
@@ -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.
|
||||
|
||||
22
Makefile
22
Makefile
@@ -7,6 +7,7 @@ NODE_MODULE_NAME := @pulumi/docker-build
|
||||
NUGET_PKG_NAME := Pulumi.DockerBuild
|
||||
|
||||
PROVIDER := pulumi-resource-${PACK}
|
||||
VERSION ?= $(shell pulumictl get version)
|
||||
PROVIDER_PATH := provider
|
||||
VERSION_PATH := ${PROVIDER_PATH}.Version
|
||||
SCHEMA_PATH := ${PROVIDER_PATH}/cmd/pulumi-resource-${PACK}/schema.json
|
||||
@@ -20,12 +21,6 @@ TESTPARALLELISM := 4
|
||||
PULUMI := bin/pulumi
|
||||
GOGLANGCILINT := bin/golangci-lint
|
||||
|
||||
# Override during CI using `make [TARGET] PROVIDER_VERSION=""` or by setting a PROVIDER_VERSION environment variable
|
||||
# Local & branch builds will just used this fixed default version unless specified
|
||||
PROVIDER_VERSION ?= 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
|
||||
ensure:: tidy lint test_provider examples
|
||||
|
||||
@@ -36,11 +31,8 @@ tidy:
|
||||
.PHONY: provider
|
||||
provider: bin/${PROVIDER} bin/pulumi-gen-${PACK} # Required by CI
|
||||
|
||||
.PHONY: local_generate
|
||||
local_generate: sdk # Required by CI
|
||||
|
||||
provider_debug::
|
||||
(cd provider && go build -o $(WORKING_DIR)/bin/${PROVIDER} -gcflags="all=-N -l" -ldflags "-X ${PROJECT}/${VERSION_PATH}=${VERSION_GENERIC}" $(PROJECT)/${PROVIDER_PATH}/cmd/$(PROVIDER))
|
||||
(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
|
||||
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)
|
||||
|
||||
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
|
||||
touch bin/pulumi-gen-${PACK}
|
||||
@@ -192,7 +184,7 @@ go.sum: go.mod
|
||||
sdk: $(shell mkdir -p sdk)
|
||||
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: $(PULUMI) bin/${PROVIDER}
|
||||
rm -rf sdk/python
|
||||
@@ -208,7 +200,7 @@ sdk/python: $(PULUMI) bin/${PROVIDER}
|
||||
../venv/bin/python -m build .
|
||||
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: $(PULUMI) bin/${PROVIDER}
|
||||
rm -rf sdk/nodejs
|
||||
@@ -233,7 +225,7 @@ sdk/go: $(PULUMI) bin/${PROVIDER}
|
||||
go mod tidy
|
||||
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: $(PULUMI) bin/${PROVIDER}
|
||||
rm -rf sdk/dotnet
|
||||
@@ -243,7 +235,7 @@ sdk/dotnet: $(PULUMI) bin/${PROVIDER}
|
||||
dotnet build /p:Version=${DOTNET_VERSION}
|
||||
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: $(PULUMI) bin/${PROVIDER}
|
||||
rm -rf sdk/java
|
||||
|
||||
@@ -1,95 +1,7 @@
|
||||
module provider-docker-build
|
||||
|
||||
go 1.21.7
|
||||
|
||||
toolchain go1.21.9
|
||||
go 1.20
|
||||
|
||||
require (
|
||||
github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.0-20240425180359-26c144c916b7
|
||||
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
|
||||
github.com/pulumi/pulumi/sdk/v3 v3.111.1
|
||||
)
|
||||
|
||||
@@ -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
11
go.mod
@@ -14,12 +14,12 @@ require (
|
||||
github.com/moby/patternmatcher v0.6.0
|
||||
github.com/muesli/reflow v0.3.0
|
||||
github.com/otiai10/copy v1.14.0
|
||||
github.com/pulumi/providertest v0.0.12
|
||||
github.com/pulumi/pulumi-go-provider v0.16.1-0.20240426163030-72606b1e6fb7
|
||||
github.com/pulumi/pulumi-go-provider v0.16.0
|
||||
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/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/v3 v3.113.3
|
||||
github.com/pulumi/pulumi/sdk/v3 v3.113.0
|
||||
github.com/regclient/regclient v0.0.0-20240308005156-a7434cff9c6b
|
||||
github.com/sirupsen/logrus v1.9.3
|
||||
github.com/spf13/afero v1.11.0
|
||||
@@ -350,6 +350,7 @@ require (
|
||||
github.com/prometheus/procfs v0.12.0 // indirect
|
||||
github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // 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/quasilyte/go-ruleguard v0.4.2 // 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/typeparams v0.0.0-20240314144324-c7f7c6466f7f // 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/sync v0.6.0 // indirect
|
||||
golang.org/x/sys v0.18.0 // indirect
|
||||
|
||||
32
go.sum
32
go.sum
@@ -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-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/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/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4=
|
||||
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/providertest v0.0.12 h1:UjcFQHHs4AGJyJqxhvC2q8yVQ7Li+UyCyP95HZcK03U=
|
||||
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.1-0.20240426163030-72606b1e6fb7/go.mod h1:sJUl1EjF3BQXAkrOeRhS3kZq17lz2o2QnTQd+c1FepU=
|
||||
github.com/pulumi/pulumi-go-provider v0.16.0 h1:vLAiECprIoLdTPd0UFs9Vv/HgSw7l/SBAurRBm3vpSU=
|
||||
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/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/go.mod h1:RyEPo4MhL363sbAiFMVKRsQmXpQPDCY1S8pGv3E6Ij0=
|
||||
github.com/pulumi/pulumi/pkg/v3 v3.113.3 h1:x2KAb5ebeHsSzphbtPOvq5HNwF0y/KF0xYYrpjgGPFk=
|
||||
github.com/pulumi/pulumi/pkg/v3 v3.113.3/go.mod h1:HxNDclOZZ6agSIHLsDb77/8cSNIiYgIH8Ff1IctrCCM=
|
||||
github.com/pulumi/pulumi/pkg/v3 v3.113.0 h1:fo63QR2nB5ksqq0fxg5uPm/zbXW7eJVRdYpAawIda7I=
|
||||
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/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.3/go.mod h1:JWSzKBoHd8rlncC1DhXLf7YdV+Bk/Qf+hSZOOQh0WwQ=
|
||||
github.com/pulumi/pulumi/sdk/v3 v3.113.0 h1:CIlmxJZdjxpPPoFe/rrP1dWTwh3CB7ahs/dA6SHcbuE=
|
||||
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/go.mod h1:GJLgqsLeo4qgavUoL8JeGFNS7qcisx3awV/w9eWTmNI=
|
||||
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/theupdateframework/notary v0.7.0 h1:QyagRZ7wlSpjT5N2qQAh/pN+DVqgekv4DzbAiAiEL3c=
|
||||
github.com/theupdateframework/notary v0.7.0/go.mod h1:c9DRxcmhHmVLDay4/2fUYdISnHqbFDGRSlXPO0AhYWw=
|
||||
github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM=
|
||||
github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
|
||||
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
|
||||
github.com/tidwall/pretty v1.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/go.mod h1:27bSVNWSBOHm+qRp1T9qzaIpsWEP6TbUnei/43HK+PQ=
|
||||
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.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
|
||||
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.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
|
||||
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/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-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
|
||||
@@ -17,7 +17,6 @@ package internal
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strings"
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
// 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) {
|
||||
if strings.Count(c.String(), "type=") > 1 {
|
||||
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)
|
||||
}
|
||||
|
||||
// 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) {
|
||||
if strings.Count(c.String(), "type=") > 1 {
|
||||
return nil, errors.New("cacheTo should only specify one cache type")
|
||||
|
||||
@@ -19,7 +19,6 @@ package internal
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
@@ -41,6 +40,7 @@ import (
|
||||
"github.com/sirupsen/logrus"
|
||||
|
||||
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/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
|
||||
// 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)
|
||||
defer func() {
|
||||
c.done <- struct{}{}
|
||||
@@ -171,18 +171,18 @@ func (c *cli) tail(ctx context.Context) {
|
||||
s := bufio.NewScanner(c.r)
|
||||
for s.Scan() {
|
||||
text := s.Text()
|
||||
provider.GetLogger(ctx).InfoStatus(text)
|
||||
ctx.LogStatus(diag.Info, text)
|
||||
_, _ = b.WriteString(text + "\n")
|
||||
}
|
||||
provider.GetLogger(ctx).InfoStatus("") // clear confusing "DONE" statements.
|
||||
ctx.LogStatus(diag.Info, "") // clear confusing "DONE" statements.
|
||||
|
||||
if c.dumplogs {
|
||||
// Persist the full Docker output on error for easier debugging.
|
||||
if b.Len() > 0 {
|
||||
provider.GetLogger(ctx).Info(b.String())
|
||||
ctx.Log(diag.Info, b.String())
|
||||
}
|
||||
if c.err.Len() > 0 {
|
||||
provider.GetLogger(ctx).Error(c.err.String())
|
||||
ctx.Log(diag.Error, c.err.String())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,19 +45,20 @@ import (
|
||||
"github.com/regclient/regclient/types/ref"
|
||||
|
||||
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"
|
||||
)
|
||||
|
||||
// Client handles all our Docker API calls.
|
||||
type Client interface {
|
||||
Build(ctx context.Context, b Build) (*client.SolveResponse, error)
|
||||
Build(ctx provider.Context, b Build) (*client.SolveResponse, error)
|
||||
BuildKitEnabled() (bool, error)
|
||||
Inspect(ctx context.Context, id string) ([]descriptor.Descriptor, error)
|
||||
Delete(ctx context.Context, id string) error
|
||||
|
||||
ManifestCreate(ctx context.Context, push bool, target string, refs ...string) error
|
||||
ManifestInspect(ctx context.Context, target string) (string, error)
|
||||
ManifestDelete(ctx context.Context, target string) error
|
||||
ManifestCreate(ctx provider.Context, push bool, target string, refs ...string) error
|
||||
ManifestInspect(ctx provider.Context, target string) (string, error)
|
||||
ManifestDelete(ctx provider.Context, target string) error
|
||||
}
|
||||
|
||||
// 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
|
||||
// the build's digest and tags (if any).
|
||||
func (c *cli) Build(
|
||||
ctx context.Context,
|
||||
pctx provider.Context,
|
||||
build Build,
|
||||
) (*client.SolveResponse, error) {
|
||||
ctx := context.Context(pctx)
|
||||
opts := build.BuildOptions()
|
||||
|
||||
go c.tail(ctx)
|
||||
go c.tail(pctx)
|
||||
defer contract.IgnoreClose(c)
|
||||
|
||||
if build.ShouldExec() {
|
||||
@@ -132,7 +134,7 @@ func (c *cli) Build(
|
||||
for _, d := range w.Detail {
|
||||
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()
|
||||
}
|
||||
|
||||
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)
|
||||
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.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)
|
||||
}
|
||||
|
||||
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()
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
func (c *cli) ManifestDelete(ctx context.Context, target string) error {
|
||||
func (c *cli) ManifestDelete(ctx provider.Context, target string) error {
|
||||
rc := c.rc()
|
||||
|
||||
ref, err := ref.New(target)
|
||||
@@ -297,9 +299,9 @@ func (c *cli) ManifestDelete(ctx context.Context, target string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
err = rc.ManifestDelete(ctx, ref)
|
||||
err = rc.ManifestDelete(context.Context(ctx), ref)
|
||||
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
|
||||
}
|
||||
if err != nil {
|
||||
|
||||
@@ -17,8 +17,6 @@ package internal
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"io"
|
||||
"log/slog"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
@@ -26,6 +24,9 @@ import (
|
||||
"github.com/docker/docker/api/types/registry"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"go.uber.org/mock/gomock"
|
||||
|
||||
"github.com/pulumi/pulumi/sdk/v3/go/common/diag"
|
||||
)
|
||||
|
||||
func TestAuth(t *testing.T) {
|
||||
@@ -78,9 +79,21 @@ func TestCustomHost(t *testing.T) {
|
||||
|
||||
func TestBuild(t *testing.T) {
|
||||
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()
|
||||
Max := Max
|
||||
max := Max
|
||||
|
||||
exampleContext := &BuildContext{Context: Context{Location: "../../examples/app"}}
|
||||
|
||||
@@ -122,7 +135,7 @@ func TestBuild(t *testing.T) {
|
||||
Tags: []string{"cached"},
|
||||
CacheTo: []CacheTo{{Local: &CacheToLocal{
|
||||
Dest: filepath.Join(tmpdir, "cache"),
|
||||
CacheWithMode: CacheWithMode{Mode: &Max},
|
||||
CacheWithMode: CacheWithMode{Mode: &max},
|
||||
}}},
|
||||
CacheFrom: []CacheFrom{{Local: &CacheFromLocal{
|
||||
Src: filepath.Join(tmpdir, "cache"),
|
||||
@@ -287,13 +300,12 @@ func TestBuild(t *testing.T) {
|
||||
if tt.skip {
|
||||
t.Skip()
|
||||
}
|
||||
ctx := context.Background()
|
||||
cli := testcli(t, true, tt.auths...)
|
||||
|
||||
build, err := tt.args.toBuild(ctx, false)
|
||||
build, err := tt.args.toBuild(pctx, false)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = cli.Build(ctx, build)
|
||||
_, err = cli.Build(pctx, build)
|
||||
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) {
|
||||
t.Parallel()
|
||||
|
||||
if os.Getenv("CI") != "" {
|
||||
t.Skip("flaky on CI for some reason")
|
||||
}
|
||||
|
||||
l := slog.Default()
|
||||
defer slog.SetDefault(l)
|
||||
|
||||
// Override go-provider's default logger to capture and tee to stdout.
|
||||
logger := &bytes.Buffer{}
|
||||
slog.SetDefault(
|
||||
slog.New(
|
||||
slog.NewTextHandler(io.MultiWriter(logger, os.Stdout), nil),
|
||||
),
|
||||
)
|
||||
ctrl, ctx := gomock.WithContext(context.Background(), t)
|
||||
|
||||
exampleContext := &BuildContext{Context: Context{Location: "../../examples/app"}}
|
||||
|
||||
@@ -379,14 +383,28 @@ func TestBuildError(t *testing.T) {
|
||||
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)
|
||||
|
||||
build, err := args.toBuild(ctx, false)
|
||||
build, err := args.toBuild(pctx, false)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = cli.Build(ctx, build)
|
||||
_, err = cli.Build(pctx, build)
|
||||
assert.Error(t, err)
|
||||
|
||||
want := []string{
|
||||
@@ -395,7 +413,7 @@ func TestBuildError(t *testing.T) {
|
||||
}
|
||||
|
||||
for _, want := range want {
|
||||
assert.Contains(t, logger.String(), want)
|
||||
assert.Contains(t, logged.String(), want)
|
||||
}
|
||||
assert.ErrorContains(t, err,
|
||||
`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) {
|
||||
t.Parallel()
|
||||
ctrl, _ := gomock.WithContext(context.Background(), t)
|
||||
|
||||
exampleContext := &BuildContext{Context: Context{Location: "../../examples/app"}}
|
||||
|
||||
@@ -415,13 +434,20 @@ func TestBuildExecError(t *testing.T) {
|
||||
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)
|
||||
|
||||
build, err := args.toBuild(ctx, false)
|
||||
build, err := args.toBuild(pctx, false)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = cli.Build(ctx, build)
|
||||
_, err = cli.Build(pctx, build)
|
||||
assert.Error(t, err)
|
||||
|
||||
want := []string{
|
||||
|
||||
@@ -17,6 +17,9 @@ package deprecated
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"sort"
|
||||
|
||||
"google.golang.org/protobuf/types/known/structpb"
|
||||
|
||||
"github.com/pulumi/pulumi/pkg/v3/codegen/schema"
|
||||
"github.com/pulumi/pulumi/sdk/v3/go/common/resource"
|
||||
@@ -110,7 +113,6 @@ func (enc *ConfigEncoding) unmarshalOpts() plugin.MarshalOptions {
|
||||
return plugin.MarshalOptions{
|
||||
Label: "config",
|
||||
KeepUnknowns: true,
|
||||
KeepSecrets: true,
|
||||
SkipNulls: true,
|
||||
RejectAssets: true,
|
||||
}
|
||||
@@ -118,10 +120,15 @@ func (enc *ConfigEncoding) unmarshalOpts() plugin.MarshalOptions {
|
||||
|
||||
// Like plugin.UnmarshalPropertyValue but overrides string parsing with convertStringToPropertyValue.
|
||||
func (enc *ConfigEncoding) unmarshalPropertyValue(key resource.PropertyKey,
|
||||
pv resource.PropertyValue,
|
||||
) (resource.PropertyValue, error) {
|
||||
v *structpb.Value,
|
||||
) (*resource.PropertyValue, error) {
|
||||
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)]
|
||||
|
||||
// Only apply JSON-encoded recognition for known fields.
|
||||
@@ -129,10 +136,8 @@ func (enc *ConfigEncoding) unmarshalPropertyValue(key resource.PropertyKey,
|
||||
return pv, nil
|
||||
}
|
||||
|
||||
var (
|
||||
jsonString string
|
||||
jsonStringDetected, jsonStringSecret bool
|
||||
)
|
||||
var jsonString string
|
||||
var jsonStringDetected, jsonStringSecret bool
|
||||
|
||||
if pv.IsString() {
|
||||
jsonString = pv.StringValue()
|
||||
@@ -148,21 +153,22 @@ func (enc *ConfigEncoding) unmarshalPropertyValue(key resource.PropertyKey,
|
||||
if jsonStringDetected {
|
||||
v, err := enc.convertStringToPropertyValue(jsonString, prop)
|
||||
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 {
|
||||
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.
|
||||
if pv.IsComputed() {
|
||||
el := pv.V.(resource.Computed).Element
|
||||
if el.IsString() && el.StringValue() == "" {
|
||||
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.
|
||||
func (enc *ConfigEncoding) UnmarshalProperties(
|
||||
props resource.PropertyMap,
|
||||
props *structpb.Struct,
|
||||
) (resource.PropertyMap, error) {
|
||||
opts := enc.unmarshalOpts()
|
||||
|
||||
result := make(resource.PropertyMap)
|
||||
|
||||
// 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.
|
||||
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 {
|
||||
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
|
||||
|
||||
@@ -16,23 +16,23 @@ package deprecated
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"testing"
|
||||
|
||||
"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/sdk/v3/go/common/resource"
|
||||
"github.com/pulumi/pulumi/sdk/v3/go/common/resource/plugin"
|
||||
)
|
||||
|
||||
func TestConfigEncoding(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
type testCase struct {
|
||||
ty schema.TypeSpec
|
||||
given resource.PropertyValue
|
||||
want resource.PropertyValue
|
||||
ty schema.TypeSpec
|
||||
v *structpb.Value
|
||||
pv resource.PropertyValue
|
||||
}
|
||||
|
||||
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) {
|
||||
enc := makeEnc(tc.ty)
|
||||
key := resource.PropertyKey(knownKey)
|
||||
|
||||
actual, err := enc.unmarshalPropertyValue(key, tc.given)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, tc.want, actual)
|
||||
pv, err := enc.unmarshalPropertyValue(resource.PropertyKey(knownKey), tc.v)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, pv)
|
||||
assert.Equal(t, tc.pv, *pv)
|
||||
}
|
||||
|
||||
turnaroundTestCases := []testCase{
|
||||
{
|
||||
schema.TypeSpec{Type: "boolean"},
|
||||
resource.NewPropertyValue(`true`),
|
||||
makeValue(`true`),
|
||||
resource.NewBoolProperty(true),
|
||||
},
|
||||
{
|
||||
schema.TypeSpec{Type: "boolean"},
|
||||
resource.NewPropertyValue(`false`),
|
||||
makeValue(`false`),
|
||||
resource.NewBoolProperty(false),
|
||||
},
|
||||
{
|
||||
schema.TypeSpec{Type: "integer"},
|
||||
resource.NewPropertyValue(`0`),
|
||||
makeValue(`0`),
|
||||
resource.NewNumberProperty(0),
|
||||
},
|
||||
{
|
||||
schema.TypeSpec{Type: "integer"},
|
||||
resource.NewPropertyValue(`42`),
|
||||
makeValue(`42`),
|
||||
resource.NewNumberProperty(42),
|
||||
},
|
||||
{
|
||||
schema.TypeSpec{Type: "number"},
|
||||
resource.NewPropertyValue(`0`),
|
||||
makeValue(`0`),
|
||||
resource.NewNumberProperty(0.0),
|
||||
},
|
||||
{
|
||||
schema.TypeSpec{Type: "number"},
|
||||
resource.NewPropertyValue(`42.5`),
|
||||
makeValue(`42.5`),
|
||||
resource.NewNumberProperty(42.5),
|
||||
},
|
||||
{
|
||||
schema.TypeSpec{Type: "string"},
|
||||
resource.NewStringProperty(""),
|
||||
structpb.NewStringValue(""),
|
||||
resource.NewStringProperty(""),
|
||||
},
|
||||
{
|
||||
schema.TypeSpec{Type: "string"},
|
||||
resource.NewStringProperty("hello"),
|
||||
structpb.NewStringValue("hello"),
|
||||
resource.NewStringProperty("hello"),
|
||||
},
|
||||
{
|
||||
schema.TypeSpec{Type: "array"},
|
||||
resource.NewPropertyValue(`[]`),
|
||||
makeValue(`[]`),
|
||||
resource.NewArrayProperty([]resource.PropertyValue{}),
|
||||
},
|
||||
{
|
||||
schema.TypeSpec{Type: "array"},
|
||||
resource.NewPropertyValue(`["hello","there"]`),
|
||||
makeValue(`["hello","there"]`),
|
||||
resource.NewArrayProperty([]resource.PropertyValue{
|
||||
resource.NewStringProperty("hello"),
|
||||
resource.NewStringProperty("there"),
|
||||
@@ -114,12 +119,12 @@ func TestConfigEncoding(t *testing.T) {
|
||||
},
|
||||
{
|
||||
schema.TypeSpec{Type: "object"},
|
||||
resource.NewPropertyValue(`{}`),
|
||||
makeValue(`{}`),
|
||||
resource.NewObjectProperty(resource.PropertyMap{}),
|
||||
},
|
||||
{
|
||||
schema.TypeSpec{Type: "object"},
|
||||
resource.NewPropertyValue(`{"key":"value"}`),
|
||||
makeValue(`{"key":"value"}`),
|
||||
resource.NewObjectProperty(resource.PropertyMap{
|
||||
"key": resource.NewStringProperty("value"),
|
||||
}),
|
||||
@@ -130,7 +135,7 @@ func TestConfigEncoding(t *testing.T) {
|
||||
for i, tc := range turnaroundTestCases {
|
||||
tc := tc
|
||||
|
||||
t.Run(strconv.Itoa(i), func(t *testing.T) {
|
||||
t.Run(fmt.Sprintf("UnmarshalPropertyValue/%d", i), func(t *testing.T) {
|
||||
t.Parallel()
|
||||
checkUnmarshal(t, tc)
|
||||
})
|
||||
@@ -142,32 +147,32 @@ func TestConfigEncoding(t *testing.T) {
|
||||
cases := []testCase{
|
||||
{
|
||||
schema.TypeSpec{Type: "boolean"},
|
||||
resource.NewPropertyValue(""),
|
||||
makeValue(""),
|
||||
resource.NewBoolProperty(false),
|
||||
},
|
||||
{
|
||||
schema.TypeSpec{Type: "number"},
|
||||
resource.NewPropertyValue(""),
|
||||
makeValue(""),
|
||||
resource.NewNumberProperty(0.),
|
||||
},
|
||||
{
|
||||
schema.TypeSpec{Type: "integer"},
|
||||
resource.NewPropertyValue(""),
|
||||
makeValue(""),
|
||||
resource.NewNumberProperty(0),
|
||||
},
|
||||
{
|
||||
schema.TypeSpec{Type: "string"},
|
||||
resource.NewPropertyValue(""),
|
||||
makeValue(""),
|
||||
resource.NewStringProperty(""),
|
||||
},
|
||||
{
|
||||
schema.TypeSpec{Type: "object"},
|
||||
resource.NewPropertyValue(""),
|
||||
makeValue(""),
|
||||
resource.NewObjectProperty(make(resource.PropertyMap)),
|
||||
},
|
||||
{
|
||||
schema.TypeSpec{Type: "array"},
|
||||
resource.NewPropertyValue(""),
|
||||
makeValue(""),
|
||||
resource.NewArrayProperty([]resource.PropertyValue{}),
|
||||
},
|
||||
}
|
||||
@@ -182,18 +187,18 @@ func TestConfigEncoding(t *testing.T) {
|
||||
})
|
||||
|
||||
t.Run("computed", func(t *testing.T) {
|
||||
unk := resource.MakeComputed(resource.NewStringProperty(""))
|
||||
unk := makeValue(plugin.UnknownStringValue)
|
||||
|
||||
for i, tc := range turnaroundTestCases {
|
||||
tc := tc
|
||||
|
||||
t.Run(strconv.Itoa(i), func(t *testing.T) {
|
||||
t.Run(fmt.Sprintf("UnmarshalPropertyValue/%d", i), func(t *testing.T) {
|
||||
t.Parallel()
|
||||
// Unknown sentinel unmarshals to a Computed with a type-appropriate zero value.
|
||||
checkUnmarshal(t, testCase{
|
||||
ty: tc.ty,
|
||||
given: unk,
|
||||
want: resource.MakeComputed(makeEnc(tc.ty).zeroValue(tc.ty.Type)),
|
||||
tc.ty,
|
||||
unk,
|
||||
resource.MakeComputed(makeEnc(tc.ty).zeroValue(tc.ty.Type)),
|
||||
})
|
||||
})
|
||||
}
|
||||
@@ -210,30 +215,46 @@ func TestConfigEncoding(t *testing.T) {
|
||||
|
||||
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 {
|
||||
secretCases = append(secretCases, testCase{
|
||||
ty: tc.ty,
|
||||
given: resource.MakeSecret(tc.given),
|
||||
want: resource.MakeSecret(tc.want),
|
||||
tc.ty,
|
||||
pbSecret(tc.v),
|
||||
resource.MakeSecret(tc.pv),
|
||||
})
|
||||
}
|
||||
|
||||
for i, tc := range secretCases {
|
||||
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()
|
||||
|
||||
// Unmarshallin will remove secrts, so the expected value needs to be modified.
|
||||
tc.pv = tc.pv.SecretValue().Element
|
||||
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{
|
||||
schema.TypeSpec{Type: "object"},
|
||||
resource.MakeSecret(resource.NewPropertyValue(`{"key":"val"}`)),
|
||||
resource.MakeSecret(resource.NewObjectProperty(resource.PropertyMap{
|
||||
pbSecret(makeValue(`{"key":"val"}`)),
|
||||
resource.NewObjectProperty(resource.PropertyMap{
|
||||
"key": resource.NewStringProperty("val"),
|
||||
})),
|
||||
}),
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -241,7 +262,7 @@ func TestConfigEncoding(t *testing.T) {
|
||||
regressUnmarshalTestCases := []testCase{
|
||||
{
|
||||
schema.TypeSpec{Type: "array"},
|
||||
resource.NewPropertyValue(`
|
||||
makeValue(`
|
||||
[
|
||||
{
|
||||
"address": "somewhere.org",
|
||||
@@ -255,7 +276,7 @@ func TestConfigEncoding(t *testing.T) {
|
||||
resource.NewArrayProperty([]resource.PropertyValue{
|
||||
resource.NewObjectProperty(resource.PropertyMap{
|
||||
"address": resource.NewStringProperty("somewhere.org"),
|
||||
"password": resource.MakeSecret(resource.NewStringProperty("some-password")),
|
||||
"password": resource.NewStringProperty("some-password"),
|
||||
"username": resource.NewStringProperty("some-user"),
|
||||
}),
|
||||
}),
|
||||
@@ -265,7 +286,7 @@ func TestConfigEncoding(t *testing.T) {
|
||||
t.Run("regress-unmarshal", func(t *testing.T) {
|
||||
for i, tc := range regressUnmarshalTestCases {
|
||||
tc := tc
|
||||
t.Run(strconv.Itoa(i), func(t *testing.T) {
|
||||
t.Run(fmt.Sprintf("UnmarshalPropertyValue/%d", i), func(t *testing.T) {
|
||||
t.Parallel()
|
||||
checkUnmarshal(t, tc)
|
||||
})
|
||||
|
||||
@@ -38,6 +38,7 @@ import (
|
||||
|
||||
provider "github.com/pulumi/pulumi-go-provider"
|
||||
"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/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
|
||||
// any host-level credentials.
|
||||
func (i *Image) client(ctx context.Context, state ImageState, args ImageArgs) (Client, error) {
|
||||
cfg := infer.GetConfig[Config](ctx)
|
||||
// client produces a CLI client with scoped to this resource and layered on top
|
||||
// of any host-level credentials.
|
||||
func (i *Image) client(pctx provider.Context, state ImageState, args ImageArgs) (Client, error) {
|
||||
ctx := context.Context(pctx)
|
||||
|
||||
cfg := infer.GetConfig[Config](pctx)
|
||||
|
||||
if cli, ok := ctx.Value(_mockClientKey).(Client); ok {
|
||||
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
|
||||
// authenticated.
|
||||
func (i *Image) Check(
|
||||
_ context.Context,
|
||||
_ provider.Context,
|
||||
_ string,
|
||||
_ resource.PropertyMap,
|
||||
news resource.PropertyMap,
|
||||
@@ -488,7 +491,7 @@ func (b build) ShouldExec() bool {
|
||||
}
|
||||
|
||||
func (ia ImageArgs) toBuild(
|
||||
ctx context.Context,
|
||||
ctx provider.Context,
|
||||
preview bool,
|
||||
) (Build, error) {
|
||||
opts, err := ia.validate(preview)
|
||||
@@ -497,15 +500,18 @@ func (ia ImageArgs) toBuild(
|
||||
}
|
||||
|
||||
if len(ia.Exports) == 0 && !ia.Push && !ia.Load {
|
||||
provider.GetLogger(ctx).Warning(
|
||||
"No exports were specified so the build will only remain in the local build cache. " +
|
||||
"Use `push` to upload the image to a registry, or silence this warning with a `cacheonly` export.")
|
||||
ctx.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.",
|
||||
)
|
||||
}
|
||||
|
||||
if len(opts.Platforms) > 1 && len(opts.CacheTo) > 0 {
|
||||
provider.GetLogger(ctx).Warning(
|
||||
"Caching doesn't work reliably with multi-platform builds (https://github.com/docker/buildx/discussions/1382). " +
|
||||
"Instead, perform one cached build per platform and create an Index to join them all together.")
|
||||
ctx.Log(
|
||||
diag.Warning,
|
||||
"Caching doesn't work reliably with multi-platform builds (https://github.com/docker/buildx/discussions/1382). "+
|
||||
"Instead, perform one cached build per platform and create an Index to join them all together.",
|
||||
)
|
||||
}
|
||||
|
||||
return build{
|
||||
@@ -661,7 +667,7 @@ func (ia *ImageArgs) validate(preview bool) (controllerapi.BuildOptions, error)
|
||||
|
||||
// Create builds an image using buildkit.
|
||||
func (i *Image) Create(
|
||||
ctx context.Context,
|
||||
ctx provider.Context,
|
||||
name string,
|
||||
input ImageArgs,
|
||||
preview bool,
|
||||
@@ -710,7 +716,7 @@ func (i *Image) Create(
|
||||
return id, state, nil
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
@@ -748,7 +754,7 @@ func (i *Image) Create(
|
||||
// images built locally there is nothing to delete. We treat those cases as
|
||||
// updates and simply re-build the image without deleting anything.
|
||||
func (i *Image) Update(
|
||||
ctx context.Context,
|
||||
ctx provider.Context,
|
||||
name string,
|
||||
_ ImageState,
|
||||
input ImageArgs,
|
||||
@@ -761,7 +767,7 @@ func (i *Image) Update(
|
||||
// Read attempts to read manifests from an image's exports. An image without
|
||||
// exports will have no manifests.
|
||||
func (i *Image) Read(
|
||||
ctx context.Context,
|
||||
ctx provider.Context,
|
||||
name string,
|
||||
input ImageArgs,
|
||||
state ImageState,
|
||||
@@ -795,7 +801,7 @@ func (i *Image) Read(
|
||||
// Does a tag with this digest exist?
|
||||
descriptors, err := cli.Inspect(ctx, ref)
|
||||
if err != nil {
|
||||
provider.GetLogger(ctx).Warning(err.Error())
|
||||
ctx.Log(diag.Warning, err.Error())
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -824,7 +830,7 @@ func (i *Image) Read(
|
||||
// Delete deletes an Image. If the Image was already deleted out-of-band it is
|
||||
// treated as a success.
|
||||
func (i *Image) Delete(
|
||||
ctx context.Context,
|
||||
ctx provider.Context,
|
||||
_ string,
|
||||
state ImageState,
|
||||
) error {
|
||||
@@ -855,9 +861,9 @@ func (i *Image) Delete(
|
||||
|
||||
var multierr error
|
||||
for _, digested := range digests {
|
||||
err = cli.Delete(ctx, digested)
|
||||
err = cli.Delete(context.Context(ctx), digested)
|
||||
if errdefs.IsNotFound(err) {
|
||||
provider.GetLogger(ctx).Warning(digested + " not found")
|
||||
ctx.Log(diag.Warning, digested+" not found")
|
||||
continue // Nothing to do.
|
||||
}
|
||||
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
|
||||
// ignoring "password" changes on registry inputs.
|
||||
func (*Image) Diff(
|
||||
_ context.Context,
|
||||
_ provider.Context,
|
||||
_ string,
|
||||
olds ImageState,
|
||||
news ImageArgs,
|
||||
@@ -889,6 +895,12 @@ func (*Image) Diff(
|
||||
if !reflect.DeepEqual(olds.Builder, news.Builder) {
|
||||
diff["builder"] = update
|
||||
}
|
||||
if !reflect.DeepEqual(olds.CacheFrom, news.CacheFrom) {
|
||||
diff["cacheFrom"] = update
|
||||
}
|
||||
if !reflect.DeepEqual(olds.CacheTo, news.CacheTo) {
|
||||
diff["cacheTo"] = update
|
||||
}
|
||||
if olds.Context.Location != news.Context.Location {
|
||||
diff["context.location"] = update
|
||||
}
|
||||
@@ -969,31 +981,6 @@ func (*Image) Diff(
|
||||
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{
|
||||
HasChanges: len(diff) > 0,
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
@@ -65,7 +64,7 @@ func TestImageLifecycle(t *testing.T) {
|
||||
c := NewMockClient(ctrl)
|
||||
c.EXPECT().BuildKitEnabled().Return(true, nil).AnyTimes()
|
||||
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)
|
||||
return &client.SolveResponse{
|
||||
ExporterResponse: map[string]string{
|
||||
@@ -239,7 +238,7 @@ func TestImageLifecycle(t *testing.T) {
|
||||
c := NewMockClient(ctrl)
|
||||
c.EXPECT().BuildKitEnabled().Return(true, nil).AnyTimes()
|
||||
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)
|
||||
return &client.SolveResponse{
|
||||
ExporterResponse: map[string]string{"image.name": "test:latest"},
|
||||
@@ -370,7 +369,7 @@ func TestRead(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestImageDiff(t *testing.T) {
|
||||
// t.Parallel()
|
||||
t.Parallel()
|
||||
emptyDir := t.TempDir()
|
||||
host := Host
|
||||
|
||||
@@ -419,106 +418,6 @@ func TestImageDiff(t *testing.T) {
|
||||
},
|
||||
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",
|
||||
olds: func(_ *testing.T, is ImageState) ImageState {
|
||||
@@ -531,108 +430,6 @@ func TestImageDiff(t *testing.T) {
|
||||
},
|
||||
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",
|
||||
olds: func(_ *testing.T, is ImageState) ImageState {
|
||||
@@ -1163,14 +960,17 @@ func TestBuildable(t *testing.T) {
|
||||
|
||||
func TestToBuild(t *testing.T) {
|
||||
t.Parallel()
|
||||
Max := Max
|
||||
ctrl := gomock.NewController(t)
|
||||
pctx := NewMockProviderContext(ctrl)
|
||||
pctx.EXPECT().Log(gomock.Any(), gomock.Any()).AnyTimes()
|
||||
max := Max
|
||||
|
||||
ia := ImageArgs{
|
||||
Tags: []string{"foo", "bar"},
|
||||
Platforms: []Platform{"linux/amd64"},
|
||||
Context: &BuildContext{Context: Context{Location: "testdata/noop"}},
|
||||
CacheTo: []CacheTo{
|
||||
{GHA: &CacheToGitHubActions{CacheWithMode: CacheWithMode{&Max}}},
|
||||
{GHA: &CacheToGitHubActions{CacheWithMode: CacheWithMode{&max}}},
|
||||
{
|
||||
Registry: &CacheToRegistry{
|
||||
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)
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strings"
|
||||
@@ -25,6 +24,7 @@ import (
|
||||
|
||||
provider "github.com/pulumi/pulumi-go-provider"
|
||||
"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"
|
||||
)
|
||||
|
||||
@@ -121,7 +121,7 @@ func (i *IndexState) Annotate(a infer.Annotator) {
|
||||
|
||||
// Create is a passthrough to Update.
|
||||
func (i *Index) Create(
|
||||
ctx context.Context,
|
||||
ctx provider.Context,
|
||||
name string,
|
||||
input IndexArgs,
|
||||
preview bool,
|
||||
@@ -133,7 +133,7 @@ func (i *Index) Create(
|
||||
// Update performs `buildx imagetools create` to create a new OCI index /
|
||||
// manifest list.
|
||||
func (i *Index) Update(
|
||||
ctx context.Context,
|
||||
ctx provider.Context,
|
||||
name string,
|
||||
state IndexState,
|
||||
input IndexArgs,
|
||||
@@ -151,7 +151,7 @@ func (i *Index) Update(
|
||||
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...)
|
||||
if err != nil {
|
||||
@@ -166,7 +166,7 @@ func (i *Index) Update(
|
||||
}
|
||||
|
||||
func (i *Index) Read(
|
||||
ctx context.Context,
|
||||
ctx provider.Context,
|
||||
name string,
|
||||
input IndexArgs,
|
||||
state IndexState,
|
||||
@@ -175,7 +175,7 @@ func (i *Index) Read(
|
||||
state.Ref = input.Tag
|
||||
|
||||
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.
|
||||
}
|
||||
|
||||
@@ -184,7 +184,7 @@ func (i *Index) Read(
|
||||
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)
|
||||
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
|
||||
// cases for now.
|
||||
func (i *Index) Check(
|
||||
_ context.Context,
|
||||
_ provider.Context,
|
||||
_ string,
|
||||
_ resource.PropertyMap,
|
||||
news resource.PropertyMap,
|
||||
@@ -247,7 +247,7 @@ func (i *Index) Check(
|
||||
}
|
||||
|
||||
// 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 {
|
||||
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
|
||||
// change all the time due to short-lived AWS credentials).
|
||||
func (i *Index) Diff(
|
||||
_ context.Context,
|
||||
_ provider.Context,
|
||||
_ string,
|
||||
olds IndexState,
|
||||
news IndexArgs,
|
||||
@@ -309,10 +309,10 @@ func (i *Index) Diff(
|
||||
}, nil
|
||||
}
|
||||
|
||||
// client produces a CLI client scoped to this resource and layered on top of
|
||||
// any host-level credentials.
|
||||
// client produces a CLI client with scoped to this resource and layered on top
|
||||
// of any host-level credentials.
|
||||
func (i *Index) client(
|
||||
ctx context.Context,
|
||||
ctx provider.Context,
|
||||
_ IndexState,
|
||||
args IndexArgs,
|
||||
) (Client, error) {
|
||||
|
||||
1
provider/internal/metadata.json
Normal file
1
provider/internal/metadata.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
25
provider/internal/mockclient_test.go
generated
25
provider/internal/mockclient_test.go
generated
@@ -15,6 +15,7 @@ import (
|
||||
pb "github.com/docker/buildx/controller/pb"
|
||||
client "github.com/moby/buildkit/client"
|
||||
session "github.com/moby/buildkit/session"
|
||||
provider "github.com/pulumi/pulumi-go-provider"
|
||||
descriptor "github.com/regclient/regclient/types/descriptor"
|
||||
gomock "go.uber.org/mock/gomock"
|
||||
)
|
||||
@@ -43,7 +44,7 @@ func (m *MockClient) EXPECT() *MockClientMockRecorder {
|
||||
}
|
||||
|
||||
// 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()
|
||||
ret := m.ctrl.Call(m, "Build", ctx, b)
|
||||
ret0, _ := ret[0].(*client.SolveResponse)
|
||||
@@ -70,13 +71,13 @@ func (c *ClientBuildCall) Return(arg0 *client.SolveResponse, arg1 error) *Client
|
||||
}
|
||||
|
||||
// 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)
|
||||
return c
|
||||
}
|
||||
|
||||
// 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)
|
||||
return c
|
||||
}
|
||||
@@ -198,7 +199,7 @@ func (c *ClientInspectCall) DoAndReturn(f func(context.Context, string) ([]descr
|
||||
}
|
||||
|
||||
// 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()
|
||||
varargs := []any{ctx, push, target}
|
||||
for _, a := range refs {
|
||||
@@ -229,19 +230,19 @@ func (c *ClientManifestCreateCall) Return(arg0 error) *ClientManifestCreateCall
|
||||
}
|
||||
|
||||
// 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)
|
||||
return c
|
||||
}
|
||||
|
||||
// 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)
|
||||
return c
|
||||
}
|
||||
|
||||
// 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()
|
||||
ret := m.ctrl.Call(m, "ManifestDelete", ctx, target)
|
||||
ret0, _ := ret[0].(error)
|
||||
@@ -267,19 +268,19 @@ func (c *ClientManifestDeleteCall) Return(arg0 error) *ClientManifestDeleteCall
|
||||
}
|
||||
|
||||
// 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)
|
||||
return c
|
||||
}
|
||||
|
||||
// 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)
|
||||
return c
|
||||
}
|
||||
|
||||
// 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()
|
||||
ret := m.ctrl.Call(m, "ManifestInspect", ctx, target)
|
||||
ret0, _ := ret[0].(string)
|
||||
@@ -306,13 +307,13 @@ func (c *ClientManifestInspectCall) Return(arg0 string, arg1 error) *ClientManif
|
||||
}
|
||||
|
||||
// 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)
|
||||
return c
|
||||
}
|
||||
|
||||
// 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)
|
||||
return c
|
||||
}
|
||||
|
||||
386
provider/internal/mockprovidercontext_test.go
generated
Normal file
386
provider/internal/mockprovidercontext_test.go
generated
Normal 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
|
||||
}
|
||||
@@ -55,7 +55,7 @@ func (c *Config) Annotate(a infer.Annotator) {
|
||||
}
|
||||
|
||||
// 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)
|
||||
if err != nil {
|
||||
return fmt.Errorf("getting host: %w", err)
|
||||
|
||||
@@ -59,10 +59,7 @@ func TestAnnotate(t *testing.T) {
|
||||
func TestSchema(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
s := newServer(nil)
|
||||
|
||||
_, err := s.GetSchema(provider.GetSchemaRequest{Version: 0})
|
||||
assert.NoError(t, err)
|
||||
Schema(context.Background(), "v4")
|
||||
}
|
||||
|
||||
type annotator struct{}
|
||||
@@ -76,10 +73,10 @@ func newServer(client Client) integration.Server {
|
||||
|
||||
// Inject a mock client if provided.
|
||||
if client != nil {
|
||||
p = mwcontext.Wrap(p, func(ctx context.Context) context.Context {
|
||||
return context.WithValue(ctx, _mockClientKey, client)
|
||||
p = mwcontext.Wrap(p, func(ctx provider.Context) provider.Context {
|
||||
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)
|
||||
}
|
||||
|
||||
27
provider/internal/providercontext.go
Normal file
27
provider/internal/providercontext.go
Normal 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
|
||||
}
|
||||
@@ -16,13 +16,13 @@ package provider
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"github.com/pulumi/pulumi-docker-build/provider/internal"
|
||||
"github.com/pulumi/pulumi-docker-build/provider/internal/deprecated"
|
||||
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/sdk/v3/go/common/resource/plugin"
|
||||
rpc "github.com/pulumi/pulumi/sdk/v3/proto/go"
|
||||
)
|
||||
|
||||
@@ -39,7 +39,11 @@ func Serve() error {
|
||||
|
||||
// New creates a new provider.
|
||||
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
|
||||
@@ -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!
|
||||
// https://github.com/pulumi/pulumi/pull/15032 should be merged with this fix.
|
||||
func configurableProvider(p gp.Provider) gp.Provider {
|
||||
configure := p.Configure
|
||||
|
||||
p.Configure = func(ctx context.Context, req gp.ConfigureRequest) error {
|
||||
r, err := p.GetSchema(ctx, gp.GetSchemaRequest{Version: 0})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
spec := schema.PackageSpec{}
|
||||
err = json.Unmarshal([]byte(r.Schema), &spec)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ce := deprecated.New(spec.Config)
|
||||
if props, err := ce.UnmarshalProperties(req.Args); err == nil {
|
||||
req.Args = props
|
||||
}
|
||||
return configure(ctx, req)
|
||||
}
|
||||
|
||||
return p
|
||||
type configurableProvider struct {
|
||||
rpc.ResourceProviderServer
|
||||
}
|
||||
|
||||
func (p configurableProvider) Configure(
|
||||
ctx context.Context,
|
||||
request *rpc.ConfigureRequest,
|
||||
) (*rpc.ConfigureResponse, error) {
|
||||
schema := internal.Schema(ctx, Version)
|
||||
ce := deprecated.New(schema.Config)
|
||||
buildxReq := request
|
||||
if props, err := ce.UnmarshalProperties(request.Args); err == nil {
|
||||
args, _ := plugin.MarshalProperties(props, plugin.MarshalOptions{
|
||||
Label: "config",
|
||||
KeepUnknowns: true,
|
||||
SkipNulls: true,
|
||||
KeepSecrets: true,
|
||||
RejectAssets: true,
|
||||
})
|
||||
buildxReq.Args = args
|
||||
}
|
||||
return p.ResourceProviderServer.Configure(ctx, buildxReq)
|
||||
}
|
||||
|
||||
@@ -24,10 +24,7 @@ import (
|
||||
emptypb "google.golang.org/protobuf/types/known/emptypb"
|
||||
"google.golang.org/protobuf/types/known/structpb"
|
||||
|
||||
"github.com/pulumi/pulumi-docker-build/provider/internal"
|
||||
provider "github.com/pulumi/pulumi-go-provider"
|
||||
"github.com/pulumi/pulumi-go-provider/integration"
|
||||
"github.com/pulumi/pulumi/sdk/v3/go/common/resource/plugin"
|
||||
pulumirpc "github.com/pulumi/pulumi/sdk/v3/proto/go"
|
||||
)
|
||||
|
||||
// TestConfigure checks backwards-compatibility with SDKs that still send
|
||||
@@ -37,19 +34,20 @@ import (
|
||||
func TestConfigure(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
p := configurableProvider(internal.NewBuildxProvider())
|
||||
ctx := context.Background()
|
||||
|
||||
p, err := New(nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
args, err := structpb.NewStruct(map[string]any{
|
||||
"registries": `[{"address": "docker.io"}]`,
|
||||
})
|
||||
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 = s.Configure(provider.ConfigureRequest{
|
||||
Args: argsMap,
|
||||
_, err = p.Configure(ctx, &pulumirpc.ConfigureRequest{
|
||||
Args: args,
|
||||
})
|
||||
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
|
||||
4
sdk/go/dockerbuild/go.mod
generated
4
sdk/go/dockerbuild/go.mod
generated
@@ -4,7 +4,7 @@ go 1.21.7
|
||||
|
||||
require (
|
||||
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 (
|
||||
@@ -82,7 +82,7 @@ require (
|
||||
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.23.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
|
||||
|
||||
8
sdk/go/dockerbuild/go.sum
generated
8
sdk/go/dockerbuild/go.sum
generated
@@ -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/esc v0.6.2 h1:+z+l8cuwIauLSwXQS0uoI3rqB+YG4SzsZYtHfNoXBvw=
|
||||
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.3/go.mod h1:JWSzKBoHd8rlncC1DhXLf7YdV+Bk/Qf+hSZOOQh0WwQ=
|
||||
github.com/pulumi/pulumi/sdk/v3 v3.113.0 h1:CIlmxJZdjxpPPoFe/rrP1dWTwh3CB7ahs/dA6SHcbuE=
|
||||
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.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
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.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.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
|
||||
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
|
||||
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=
|
||||
|
||||
Reference in New Issue
Block a user