Compare commits
67 Commits
v0.0.1-alp
...
v0.0.8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
80d25003de | ||
|
|
195fbfc784 | ||
|
|
2907567484 | ||
|
|
0a045d12bf | ||
|
|
9f3d3db1dd | ||
|
|
a18d56b485 | ||
|
|
2f620af3be | ||
|
|
9aa209c0fe | ||
|
|
2c2f8a68a3 | ||
|
|
7479f9f2a5 | ||
|
|
e15f743f8c | ||
|
|
ec4594a854 | ||
|
|
0ce316d7de | ||
|
|
0b7a26a9b6 | ||
|
|
b66e4a56fd | ||
|
|
0d17198e54 | ||
|
|
fb7912a889 | ||
|
|
4c03012268 | ||
|
|
bf6080cdc4 | ||
|
|
3d57abba75 | ||
|
|
9d3d0712f2 | ||
|
|
30a26f61e4 | ||
|
|
242d99d4d6 | ||
|
|
8151f0369f | ||
|
|
3e25f4a26a | ||
|
|
1affb91b69 | ||
|
|
06cf6ec5f8 | ||
|
|
5d7ff1eeca | ||
|
|
b1d2d5b5b3 | ||
|
|
d9c3284f40 | ||
|
|
81a7aa4ec4 | ||
|
|
0ba90b8cde | ||
|
|
3d127da671 | ||
|
|
0bd5fe74bc | ||
|
|
5cc3415b34 | ||
|
|
724836b5ef | ||
|
|
78057473ac | ||
|
|
cc8725ef27 | ||
|
|
bbdefef3c8 | ||
|
|
3ce3c83c3e | ||
|
|
343eadd0b6 | ||
|
|
1febe659ca | ||
|
|
233b5e0508 | ||
|
|
b8ecfb287a | ||
|
|
92ed9d50e9 | ||
|
|
dd64d7b65d | ||
|
|
4e8cf8f4ba | ||
|
|
44e082a0a0 | ||
|
|
effb497234 | ||
|
|
9a1706a203 | ||
|
|
c305ea88c4 | ||
|
|
f0aaf7095d | ||
|
|
c9e5913af1 | ||
|
|
1d6038bb07 | ||
|
|
ff71c251e1 | ||
|
|
9b789f3742 | ||
|
|
d3e22d5679 | ||
|
|
dc1ba98390 | ||
|
|
5cb40f8957 | ||
|
|
26c144c916 | ||
|
|
2545dd3089 | ||
|
|
c6ebf2c6ca | ||
|
|
1df5cb1edc | ||
|
|
9026e23f75 | ||
|
|
680b464bfc | ||
|
|
ffc60ed74e | ||
|
|
fd9735d956 |
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1 +1,2 @@
|
||||
sdk/**/* linguist-generated=true
|
||||
provider/internal/mock*.go linguist-generated=true
|
||||
|
||||
15
.github/dependabot.yml
vendored
15
.github/dependabot.yml
vendored
@@ -1,15 +0,0 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: gomod
|
||||
directory: /
|
||||
schedule:
|
||||
interval: daily
|
||||
groups:
|
||||
pulumi:
|
||||
patterns:
|
||||
- "github.com/pulumi/*"
|
||||
exclude-patterns:
|
||||
- "k8s.io/utils"
|
||||
labels:
|
||||
- dependencies
|
||||
- impact/no-changelog-required
|
||||
268
.github/workflows/build.yml
vendored
268
.github/workflows/build.yml
vendored
@@ -16,7 +16,7 @@ on:
|
||||
workflow_dispatch: {}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
|
||||
PROVIDER: dockerbuild
|
||||
PROVIDER: docker-build
|
||||
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
|
||||
PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
@@ -33,7 +33,7 @@ env:
|
||||
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
|
||||
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
|
||||
GOVERSION: 1.21.x
|
||||
NODEVERSION: 16.x
|
||||
NODEVERSION: 20.x
|
||||
PYTHONVERSION: "3.11"
|
||||
DOTNETVERSION: |
|
||||
6.0.x
|
||||
@@ -47,7 +47,6 @@ env:
|
||||
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
|
||||
AZURE_LOCATION: westus
|
||||
DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}
|
||||
GOLANGCI_LINT_TIMEOUT: 10m
|
||||
GOOGLE_CI_SERVICE_ACCOUNT_EMAIL: pulumi-ci@pulumi-ci-gcp-provider.iam.gserviceaccount.com
|
||||
GOOGLE_CI_WORKLOAD_IDENTITY_POOL: pulumi-ci
|
||||
GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER: pulumi-ci
|
||||
@@ -62,29 +61,28 @@ jobs:
|
||||
name: prerequisites
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
path: ci-scripts
|
||||
repository: pulumi/scripts
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- if: github.event_name == 'pull_request'
|
||||
name: Install Schema Tools
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/schema-tools
|
||||
- name: Build codegen binaries
|
||||
@@ -99,18 +97,20 @@ jobs:
|
||||
schema-tools compare -p ${{ env.PROVIDER }} -o ${{ github.event.repository.default_branch }} -n --local-path=provider/cmd/pulumi-resource-${{ env.PROVIDER }}/schema.json >> $GITHUB_ENV
|
||||
|
||||
echo 'EOF' >> $GITHUB_ENV
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
|
||||
- if: github.event_name == 'pull_request'
|
||||
name: Comment on PR with Details of Schema Check
|
||||
uses: thollander/actions-comment-pull-request@v2
|
||||
uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
|
||||
with:
|
||||
message: |
|
||||
${{ env.SCHEMA_CHANGES }}
|
||||
comment_tag: schemaCheck
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
comment-tag: schemaCheck
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
- if: contains(env.SCHEMA_CHANGES, 'Looking good! No breaking changes found.') &&
|
||||
github.actor == 'pulumi-bot'
|
||||
name: Add label if no breaking changes
|
||||
uses: actions-ecosystem/action-add-labels@v1.1.0
|
||||
uses: actions-ecosystem/action-add-labels@18f1af5e3544586314bbe15c0273249c770b2daf # v1.1.3
|
||||
with:
|
||||
labels: impact/no-changelog-required
|
||||
number: ${{ github.event.issue.number }}
|
||||
@@ -118,26 +118,33 @@ jobs:
|
||||
- name: Build Provider
|
||||
run: make provider
|
||||
- name: Check worktree clean
|
||||
run: ./ci-scripts/ci/check-worktree-is-clean
|
||||
uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
|
||||
with:
|
||||
allowed-changes: |-
|
||||
sdk/**/pulumi-plugin.json
|
||||
sdk/dotnet/Pulumi.*.csproj
|
||||
sdk/go/**/pulumiUtilities.go
|
||||
sdk/nodejs/package.json
|
||||
sdk/python/pyproject.toml
|
||||
- run: git status --porcelain
|
||||
- name: Tar provider binaries
|
||||
run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
|
||||
github.workspace}}/bin/ pulumi-resource-${{ env.PROVIDER }}
|
||||
pulumi-gen-${{ env.PROVIDER}}
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
||||
with:
|
||||
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
|
||||
path: ${{ github.workspace }}/bin/provider.tar.gz
|
||||
- name: Test Provider Library
|
||||
run: make test_provider
|
||||
- name: Upload coverage reports to Codecov
|
||||
uses: codecov/codecov-action@v4
|
||||
uses: codecov/codecov-action@015f24e6818733317a2da2edd6290ab26238649a # v5.0.7
|
||||
env:
|
||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure in building provider prerequisites
|
||||
fields: repo,commit,author,action
|
||||
@@ -157,51 +164,50 @@ jobs:
|
||||
name: build_sdks
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
path: ci-scripts
|
||||
repository: pulumi/scripts
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
node-version: ${{ env.NODEVERSION }}
|
||||
registry-url: https://registry.npmjs.org
|
||||
- name: Setup DotNet
|
||||
uses: actions/setup-dotnet@v4
|
||||
uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25 # v4.1.0
|
||||
with:
|
||||
dotnet-version: ${{ env.DOTNETVERSION }}
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
|
||||
with:
|
||||
python-version: ${{ env.PYTHONVERSION }}
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0
|
||||
with:
|
||||
java-version: ${{ env.JAVAVERSION }}
|
||||
distribution: temurin
|
||||
cache: gradle
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v3
|
||||
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
|
||||
with:
|
||||
gradle-version: "7.6"
|
||||
- name: Download provider + tfgen binaries
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
|
||||
path: ${{ github.workspace }}/bin
|
||||
@@ -216,19 +222,26 @@ jobs:
|
||||
- name: Build SDK
|
||||
run: make build_${{ matrix.language }}
|
||||
- name: Check worktree clean
|
||||
run: ./ci-scripts/ci/check-worktree-is-clean
|
||||
uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
|
||||
with:
|
||||
allowed-changes: |-
|
||||
sdk/**/pulumi-plugin.json
|
||||
sdk/dotnet/Pulumi.*.csproj
|
||||
sdk/go/**/pulumiUtilities.go
|
||||
sdk/nodejs/package.json
|
||||
sdk/python/pyproject.toml
|
||||
- run: git status --porcelain
|
||||
- name: Tar SDK folder
|
||||
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
||||
with:
|
||||
name: ${{ matrix.language }}-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/${{ matrix.language }}.tar.gz
|
||||
retention-days: 30
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure while building SDKs
|
||||
fields: repo,commit,author,action
|
||||
@@ -252,51 +265,50 @@ jobs:
|
||||
id-token: write
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
path: ci-scripts
|
||||
repository: pulumi/scripts
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
node-version: ${{ env.NODEVERSION }}
|
||||
registry-url: https://registry.npmjs.org
|
||||
- name: Setup DotNet
|
||||
uses: actions/setup-dotnet@v4
|
||||
uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25 # v4.1.0
|
||||
with:
|
||||
dotnet-version: ${{ env.DOTNETVERSION }}
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
|
||||
with:
|
||||
python-version: ${{ env.PYTHONVERSION }}
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0
|
||||
with:
|
||||
java-version: ${{ env.JAVAVERSION }}
|
||||
distribution: temurin
|
||||
cache: gradle
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v3
|
||||
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
|
||||
with:
|
||||
gradle-version: "7.6"
|
||||
- name: Download provider + tfgen binaries
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
|
||||
path: ${{ github.workspace }}/bin
|
||||
@@ -307,7 +319,7 @@ jobs:
|
||||
run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
|
||||
-exec chmod +x {} \;
|
||||
- name: Download SDK
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: ${{ matrix.language }}-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
@@ -326,7 +338,7 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: make install_${{ matrix.language}}_sdk
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-region: ${{ env.AWS_REGION }}
|
||||
@@ -335,7 +347,7 @@ jobs:
|
||||
role-session-name: ${{ env.PROVIDER }}@githubActions
|
||||
role-to-assume: ${{ secrets.AWS_CI_ROLE_ARN }}
|
||||
- name: Authenticate to Google Cloud
|
||||
uses: google-github-actions/auth@v0
|
||||
uses: google-github-actions/auth@6fc4af4b145ae7821d527454aa9bd537d1f2dc5f # v2.1.7
|
||||
with:
|
||||
workload_identity_provider: projects/${{ env.GOOGLE_PROJECT_NUMBER
|
||||
}}/locations/global/workloadIdentityPools/${{
|
||||
@@ -343,7 +355,7 @@ jobs:
|
||||
env.GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER }}
|
||||
service_account: ${{ env.GOOGLE_CI_SERVICE_ACCOUNT_EMAIL }}
|
||||
- name: Setup gcloud auth
|
||||
uses: google-github-actions/setup-gcloud@v2
|
||||
uses: google-github-actions/setup-gcloud@6189d56e4096ee891640bb02ac264be376592d6a # v2.1.2
|
||||
with:
|
||||
install_components: gke-gcloud-auth-plugin
|
||||
- name: Install gotestfmt
|
||||
@@ -355,10 +367,10 @@ jobs:
|
||||
run: >-
|
||||
set -euo pipefail
|
||||
|
||||
cd examples && go test -v -json -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 . 2>&1 | tee /tmp/gotest.log | gotestfmt
|
||||
cd examples && go test -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 .
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure in SDK tests
|
||||
fields: repo,commit,author,action
|
||||
@@ -369,17 +381,21 @@ jobs:
|
||||
name: publish
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Clear GitHub Actions Ubuntu runner disk space
|
||||
uses: jlumbroso/free-disk-space@v1.3.1
|
||||
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
|
||||
with:
|
||||
tool-cache: false
|
||||
dotnet: false
|
||||
@@ -388,13 +404,13 @@ jobs:
|
||||
swap-storage: true
|
||||
large-packages: false
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-region: us-east-2
|
||||
@@ -403,17 +419,16 @@ 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
|
||||
uses: goreleaser/goreleaser-action@5742e2a039330cbb23ebf35f046f814d4c6ff811 # v5.1.0
|
||||
env:
|
||||
GORELEASER_CURRENT_TAG: v${{ steps.version.outputs.version }}
|
||||
with:
|
||||
args: -p 3 -f .goreleaser.prerelease.yml --clean --skip=validate --timeout 60m0s
|
||||
version: latest
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure in publishing binaries
|
||||
fields: repo,commit,author,action
|
||||
@@ -424,41 +439,46 @@ jobs:
|
||||
name: publish_sdk
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
path: ci-scripts
|
||||
repository: pulumi/scripts
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
- run: echo "ci-scripts" >> .git/info/exclude
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
node-version: ${{ env.NODEVERSION }}
|
||||
registry-url: https://registry.npmjs.org
|
||||
- name: Setup DotNet
|
||||
uses: actions/setup-dotnet@v4
|
||||
uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25 # v4.1.0
|
||||
with:
|
||||
dotnet-version: ${{ env.DOTNETVERSION }}
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
|
||||
with:
|
||||
python-version: ${{ env.PYTHONVERSION }}
|
||||
- name: Download python SDK
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: python-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
@@ -466,7 +486,7 @@ jobs:
|
||||
run: tar -zxf ${{github.workspace}}/sdk/python.tar.gz -C
|
||||
${{github.workspace}}/sdk/python
|
||||
- name: Download dotnet SDK
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: dotnet-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
@@ -474,7 +494,7 @@ jobs:
|
||||
run: tar -zxf ${{github.workspace}}/sdk/dotnet.tar.gz -C
|
||||
${{github.workspace}}/sdk/dotnet
|
||||
- name: Download nodejs SDK
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: nodejs-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
@@ -482,7 +502,7 @@ jobs:
|
||||
run: tar -zxf ${{github.workspace}}/sdk/nodejs.tar.gz -C
|
||||
${{github.workspace}}/sdk/nodejs
|
||||
- name: Install Twine
|
||||
run: python -m pip install pip twine
|
||||
run: python -m pip install twine==5.0.0
|
||||
- name: Publish SDKs
|
||||
run: ./ci-scripts/ci/publish-tfgen-package ${{ github.workspace }}
|
||||
env:
|
||||
@@ -490,82 +510,32 @@ jobs:
|
||||
PYPI_PUBLISH_ARTIFACTS: all
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure in publishing SDK
|
||||
fields: repo,commit,author,action
|
||||
status: ${{ job.status }}
|
||||
publish_java_sdk:
|
||||
runs-on: ubuntu-latest
|
||||
continue-on-error: true
|
||||
needs: publish
|
||||
name: publish_java_sdk
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
lfs: true
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
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:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: ${{ env.JAVAVERSION }}
|
||||
distribution: temurin
|
||||
cache: gradle
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v3
|
||||
with:
|
||||
gradle-version: "7.6"
|
||||
- name: Download java SDK
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: java-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
- name: Uncompress java SDK
|
||||
run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C
|
||||
${{github.workspace}}/sdk/java
|
||||
- name: 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
|
||||
with:
|
||||
arguments: publishToSonatype closeAndReleaseSonatypeStagingRepository
|
||||
build-root-directory: ./sdk/java
|
||||
gradle-version: 7.4.1
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
ref: ${{ env.PR_COMMIT_SHA }}
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Disarm go:embed directives to enable linters that compile source code
|
||||
run: git grep -l 'go:embed' -- provider | xargs --no-run-if-empty sed -i
|
||||
's/go:embed/ goembed/g'
|
||||
- name: golangci-lint provider pkg
|
||||
uses: golangci/golangci-lint-action@v4
|
||||
uses: golangci/golangci-lint-action@971e284b6050e8a5849b72094c50ab08da042db8 # v6.1.1
|
||||
with:
|
||||
version: ${{ env.GOLANGCI_LINT_VERSION }}
|
||||
args: -c ../.golangci.yml --timeout ${{ env.GOLANGCI_LINT_TIMEOUT }}
|
||||
args: -c ../.golangci.yml
|
||||
working-directory: provider
|
||||
name: lint
|
||||
if: github.event_name == 'repository_dispatch' ||
|
||||
|
||||
10
.github/workflows/command-dispatch.yml
vendored
10
.github/workflows/command-dispatch.yml
vendored
@@ -8,7 +8,7 @@ on:
|
||||
- edited
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
|
||||
PROVIDER: dockerbuild
|
||||
PROVIDER: docker-build
|
||||
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
|
||||
PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
@@ -25,7 +25,7 @@ env:
|
||||
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
|
||||
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
|
||||
GOVERSION: 1.21.x
|
||||
NODEVERSION: 16.x
|
||||
NODEVERSION: 20.x
|
||||
PYTHONVERSION: "3.11"
|
||||
DOTNETVERSION: |
|
||||
6.0.x
|
||||
@@ -53,15 +53,15 @@ jobs:
|
||||
name: command-dispatch-for-testing
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- uses: peter-evans/slash-command-dispatch@v2
|
||||
- uses: peter-evans/slash-command-dispatch@13bc09769d122a64f75aa5037256f6f2d78be8c4 # v4.0.0
|
||||
with:
|
||||
token: ${{ secrets.PULUMI_BOT_TOKEN }}
|
||||
reaction-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
commands: run-acceptance-tests
|
||||
permission: write
|
||||
issue-type: pull-request
|
||||
repository: pulumi/pulumi-dockerbuild
|
||||
repository: pulumi/pulumi-docker-build
|
||||
if: ${{ github.event.issue.pull_request }}
|
||||
|
||||
265
.github/workflows/prerelease.yml
vendored
265
.github/workflows/prerelease.yml
vendored
@@ -7,7 +7,7 @@ on:
|
||||
- v*.*.*-**
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
|
||||
PROVIDER: dockerbuild
|
||||
PROVIDER: docker-build
|
||||
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
|
||||
PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
@@ -24,7 +24,7 @@ env:
|
||||
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
|
||||
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
|
||||
GOVERSION: 1.21.x
|
||||
NODEVERSION: 16.x
|
||||
NODEVERSION: 20.x
|
||||
PYTHONVERSION: "3.11"
|
||||
DOTNETVERSION: |
|
||||
6.0.x
|
||||
@@ -53,29 +53,28 @@ jobs:
|
||||
name: prerequisites
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
path: ci-scripts
|
||||
repository: pulumi/scripts
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- if: github.event_name == 'pull_request'
|
||||
name: Install Schema Tools
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/schema-tools
|
||||
- name: Build codegen binaries
|
||||
@@ -90,18 +89,20 @@ jobs:
|
||||
schema-tools compare -p ${{ env.PROVIDER }} -o ${{ github.event.repository.default_branch }} -n --local-path=provider/cmd/pulumi-resource-${{ env.PROVIDER }}/schema.json >> $GITHUB_ENV
|
||||
|
||||
echo 'EOF' >> $GITHUB_ENV
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
|
||||
- if: github.event_name == 'pull_request'
|
||||
name: Comment on PR with Details of Schema Check
|
||||
uses: thollander/actions-comment-pull-request@v2
|
||||
uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
|
||||
with:
|
||||
message: |
|
||||
${{ env.SCHEMA_CHANGES }}
|
||||
comment_tag: schemaCheck
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
comment-tag: schemaCheck
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
- if: contains(env.SCHEMA_CHANGES, 'Looking good! No breaking changes found.') &&
|
||||
github.actor == 'pulumi-bot'
|
||||
name: Add label if no breaking changes
|
||||
uses: actions-ecosystem/action-add-labels@v1.1.0
|
||||
uses: actions-ecosystem/action-add-labels@18f1af5e3544586314bbe15c0273249c770b2daf # v1.1.3
|
||||
with:
|
||||
labels: impact/no-changelog-required
|
||||
number: ${{ github.event.issue.number }}
|
||||
@@ -109,26 +110,33 @@ jobs:
|
||||
- name: Build Provider
|
||||
run: make provider
|
||||
- name: Check worktree clean
|
||||
run: ./ci-scripts/ci/check-worktree-is-clean
|
||||
uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
|
||||
with:
|
||||
allowed-changes: |-
|
||||
sdk/**/pulumi-plugin.json
|
||||
sdk/dotnet/Pulumi.*.csproj
|
||||
sdk/go/**/pulumiUtilities.go
|
||||
sdk/nodejs/package.json
|
||||
sdk/python/pyproject.toml
|
||||
- run: git status --porcelain
|
||||
- name: Tar provider binaries
|
||||
run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
|
||||
github.workspace}}/bin/ pulumi-resource-${{ env.PROVIDER }}
|
||||
pulumi-gen-${{ env.PROVIDER}}
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
||||
with:
|
||||
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
|
||||
path: ${{ github.workspace }}/bin/provider.tar.gz
|
||||
- name: Test Provider Library
|
||||
run: make test_provider
|
||||
- name: Upload coverage reports to Codecov
|
||||
uses: codecov/codecov-action@v4
|
||||
uses: codecov/codecov-action@015f24e6818733317a2da2edd6290ab26238649a # v5.0.7
|
||||
env:
|
||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure in building provider prerequisites
|
||||
fields: repo,commit,author,action
|
||||
@@ -148,51 +156,50 @@ jobs:
|
||||
name: build_sdks
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
path: ci-scripts
|
||||
repository: pulumi/scripts
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
node-version: ${{ env.NODEVERSION }}
|
||||
registry-url: https://registry.npmjs.org
|
||||
- name: Setup DotNet
|
||||
uses: actions/setup-dotnet@v4
|
||||
uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25 # v4.1.0
|
||||
with:
|
||||
dotnet-version: ${{ env.DOTNETVERSION }}
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
|
||||
with:
|
||||
python-version: ${{ env.PYTHONVERSION }}
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0
|
||||
with:
|
||||
java-version: ${{ env.JAVAVERSION }}
|
||||
distribution: temurin
|
||||
cache: gradle
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v3
|
||||
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
|
||||
with:
|
||||
gradle-version: "7.6"
|
||||
- name: Download provider + tfgen binaries
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
|
||||
path: ${{ github.workspace }}/bin
|
||||
@@ -207,18 +214,25 @@ jobs:
|
||||
- name: Build SDK
|
||||
run: make build_${{ matrix.language }}
|
||||
- name: Check worktree clean
|
||||
run: ./ci-scripts/ci/check-worktree-is-clean
|
||||
uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
|
||||
with:
|
||||
allowed-changes: |-
|
||||
sdk/**/pulumi-plugin.json
|
||||
sdk/dotnet/Pulumi.*.csproj
|
||||
sdk/go/**/pulumiUtilities.go
|
||||
sdk/nodejs/package.json
|
||||
sdk/python/pyproject.toml
|
||||
- run: git status --porcelain
|
||||
- name: Tar SDK folder
|
||||
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
||||
with:
|
||||
name: ${{ matrix.language }}-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/${{ matrix.language }}.tar.gz
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure while building SDKs
|
||||
fields: repo,commit,author,action
|
||||
@@ -242,51 +256,50 @@ jobs:
|
||||
id-token: write
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
path: ci-scripts
|
||||
repository: pulumi/scripts
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
node-version: ${{ env.NODEVERSION }}
|
||||
registry-url: https://registry.npmjs.org
|
||||
- name: Setup DotNet
|
||||
uses: actions/setup-dotnet@v4
|
||||
uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25 # v4.1.0
|
||||
with:
|
||||
dotnet-version: ${{ env.DOTNETVERSION }}
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
|
||||
with:
|
||||
python-version: ${{ env.PYTHONVERSION }}
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0
|
||||
with:
|
||||
java-version: ${{ env.JAVAVERSION }}
|
||||
distribution: temurin
|
||||
cache: gradle
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v3
|
||||
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
|
||||
with:
|
||||
gradle-version: "7.6"
|
||||
- name: Download provider + tfgen binaries
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
|
||||
path: ${{ github.workspace }}/bin
|
||||
@@ -297,7 +310,7 @@ jobs:
|
||||
run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
|
||||
-exec chmod +x {} \;
|
||||
- name: Download SDK
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: ${{ matrix.language }}-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
@@ -316,7 +329,7 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: make install_${{ matrix.language}}_sdk
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-region: ${{ env.AWS_REGION }}
|
||||
@@ -325,7 +338,7 @@ jobs:
|
||||
role-session-name: ${{ env.PROVIDER }}@githubActions
|
||||
role-to-assume: ${{ secrets.AWS_CI_ROLE_ARN }}
|
||||
- name: Authenticate to Google Cloud
|
||||
uses: google-github-actions/auth@v0
|
||||
uses: google-github-actions/auth@6fc4af4b145ae7821d527454aa9bd537d1f2dc5f # v2.1.7
|
||||
with:
|
||||
workload_identity_provider: projects/${{ env.GOOGLE_PROJECT_NUMBER
|
||||
}}/locations/global/workloadIdentityPools/${{
|
||||
@@ -333,7 +346,7 @@ jobs:
|
||||
env.GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER }}
|
||||
service_account: ${{ env.GOOGLE_CI_SERVICE_ACCOUNT_EMAIL }}
|
||||
- name: Setup gcloud auth
|
||||
uses: google-github-actions/setup-gcloud@v2
|
||||
uses: google-github-actions/setup-gcloud@6189d56e4096ee891640bb02ac264be376592d6a # v2.1.2
|
||||
with:
|
||||
install_components: gke-gcloud-auth-plugin
|
||||
- name: Install gotestfmt
|
||||
@@ -345,10 +358,10 @@ jobs:
|
||||
run: >-
|
||||
set -euo pipefail
|
||||
|
||||
cd examples && go test -v -json -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 . 2>&1 | tee /tmp/gotest.log | gotestfmt
|
||||
cd examples && go test -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 .
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure in SDK tests
|
||||
fields: repo,commit,author,action
|
||||
@@ -359,17 +372,21 @@ jobs:
|
||||
name: publish
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Clear GitHub Actions Ubuntu runner disk space
|
||||
uses: jlumbroso/free-disk-space@v1.3.1
|
||||
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
|
||||
with:
|
||||
tool-cache: false
|
||||
dotnet: false
|
||||
@@ -378,13 +395,13 @@ jobs:
|
||||
swap-storage: true
|
||||
large-packages: false
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-region: us-east-2
|
||||
@@ -393,17 +410,16 @@ 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
|
||||
uses: goreleaser/goreleaser-action@5742e2a039330cbb23ebf35f046f814d4c6ff811 # v5.1.0
|
||||
env:
|
||||
GORELEASER_CURRENT_TAG: v${{ steps.version.outputs.version }}
|
||||
with:
|
||||
args: -p 3 -f .goreleaser.prerelease.yml --clean --skip=validate --timeout 60m0s
|
||||
version: latest
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure in publishing binaries
|
||||
fields: repo,commit,author,action
|
||||
@@ -414,41 +430,46 @@ jobs:
|
||||
name: publish_sdk
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
path: ci-scripts
|
||||
repository: pulumi/scripts
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
- run: echo "ci-scripts" >> .git/info/exclude
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
node-version: ${{ env.NODEVERSION }}
|
||||
registry-url: https://registry.npmjs.org
|
||||
- name: Setup DotNet
|
||||
uses: actions/setup-dotnet@v4
|
||||
uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25 # v4.1.0
|
||||
with:
|
||||
dotnet-version: ${{ env.DOTNETVERSION }}
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
|
||||
with:
|
||||
python-version: ${{ env.PYTHONVERSION }}
|
||||
- name: Download python SDK
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: python-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
@@ -456,7 +477,7 @@ jobs:
|
||||
run: tar -zxf ${{github.workspace}}/sdk/python.tar.gz -C
|
||||
${{github.workspace}}/sdk/python
|
||||
- name: Download dotnet SDK
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: dotnet-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
@@ -464,7 +485,7 @@ jobs:
|
||||
run: tar -zxf ${{github.workspace}}/sdk/dotnet.tar.gz -C
|
||||
${{github.workspace}}/sdk/dotnet
|
||||
- name: Download nodejs SDK
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: nodejs-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
@@ -472,7 +493,7 @@ jobs:
|
||||
run: tar -zxf ${{github.workspace}}/sdk/nodejs.tar.gz -C
|
||||
${{github.workspace}}/sdk/nodejs
|
||||
- name: Install Twine
|
||||
run: python -m pip install pip twine
|
||||
run: python -m pip install twine==5.0.0
|
||||
- name: Publish SDKs
|
||||
run: ./ci-scripts/ci/publish-tfgen-package ${{ github.workspace }}
|
||||
env:
|
||||
@@ -480,7 +501,7 @@ jobs:
|
||||
PYPI_PUBLISH_ARTIFACTS: all
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure in publishing SDK
|
||||
fields: repo,commit,author,action
|
||||
@@ -492,50 +513,80 @@ jobs:
|
||||
name: publish_java_sdk
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
path: ci-scripts
|
||||
repository: pulumi/scripts
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0
|
||||
with:
|
||||
java-version: ${{ env.JAVAVERSION }}
|
||||
distribution: temurin
|
||||
cache: gradle
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v3
|
||||
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
|
||||
with:
|
||||
gradle-version: "7.6"
|
||||
- name: Download java SDK
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: java-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
- name: Uncompress java SDK
|
||||
run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C
|
||||
${{github.workspace}}/sdk/java
|
||||
- name: 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
|
||||
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
|
||||
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Download go SDK
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: go-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
- name: Uncompress go SDK
|
||||
run: tar -zxf ${{github.workspace}}/sdk/go.tar.gz -C
|
||||
${{github.workspace}}/sdk/go
|
||||
- name: Publish Go SDK
|
||||
uses: pulumi/publish-go-sdk-action@v1
|
||||
with:
|
||||
repository: ${{ github.repository }}
|
||||
base-ref: ${{ github.sha }}
|
||||
source: sdk/go/dockerbuild
|
||||
path: sdk/go/dockerbuild
|
||||
version: ${{ steps.version.outputs.version }}
|
||||
additive: false
|
||||
files: "**"
|
||||
|
||||
10
.github/workflows/pull-request.yml
vendored
10
.github/workflows/pull-request.yml
vendored
@@ -5,7 +5,7 @@ on:
|
||||
pull_request_target: {}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
|
||||
PROVIDER: dockerbuild
|
||||
PROVIDER: docker-build
|
||||
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
|
||||
PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
@@ -22,7 +22,7 @@ env:
|
||||
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
|
||||
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
|
||||
GOVERSION: 1.21.x
|
||||
NODEVERSION: 16.x
|
||||
NODEVERSION: 20.x
|
||||
PYTHONVERSION: "3.11"
|
||||
DOTNETVERSION: |
|
||||
6.0.x
|
||||
@@ -50,15 +50,15 @@ jobs:
|
||||
name: comment-on-pr
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Comment PR
|
||||
uses: thollander/actions-comment-pull-request@v2
|
||||
uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
|
||||
with:
|
||||
message: >
|
||||
PR is now waiting for a maintainer to run the acceptance tests.
|
||||
|
||||
**Note for the maintainer:** To run the acceptance tests, please comment */run-acceptance-tests* on the PR
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
if: github.event.pull_request.head.repo.full_name != github.repository
|
||||
|
||||
271
.github/workflows/release.yml
vendored
271
.github/workflows/release.yml
vendored
@@ -8,7 +8,7 @@ on:
|
||||
- "!v*.*.*-**"
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
|
||||
PROVIDER: dockerbuild
|
||||
PROVIDER: docker-build
|
||||
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
|
||||
PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
@@ -25,7 +25,7 @@ env:
|
||||
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
|
||||
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
|
||||
GOVERSION: 1.21.x
|
||||
NODEVERSION: 16.x
|
||||
NODEVERSION: 20.x
|
||||
PYTHONVERSION: "3.11"
|
||||
DOTNETVERSION: |
|
||||
6.0.x
|
||||
@@ -53,29 +53,28 @@ jobs:
|
||||
name: prerequisites
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
path: ci-scripts
|
||||
repository: pulumi/scripts
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- if: github.event_name == 'pull_request'
|
||||
name: Install Schema Tools
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/schema-tools
|
||||
- name: Build codegen binaries
|
||||
@@ -90,18 +89,20 @@ jobs:
|
||||
schema-tools compare -p ${{ env.PROVIDER }} -o ${{ github.event.repository.default_branch }} -n --local-path=provider/cmd/pulumi-resource-${{ env.PROVIDER }}/schema.json >> $GITHUB_ENV
|
||||
|
||||
echo 'EOF' >> $GITHUB_ENV
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
|
||||
- if: github.event_name == 'pull_request'
|
||||
name: Comment on PR with Details of Schema Check
|
||||
uses: thollander/actions-comment-pull-request@v2
|
||||
uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
|
||||
with:
|
||||
message: |
|
||||
${{ env.SCHEMA_CHANGES }}
|
||||
comment_tag: schemaCheck
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
comment-tag: schemaCheck
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
- if: contains(env.SCHEMA_CHANGES, 'Looking good! No breaking changes found.') &&
|
||||
github.actor == 'pulumi-bot'
|
||||
name: Add label if no breaking changes
|
||||
uses: actions-ecosystem/action-add-labels@v1.1.0
|
||||
uses: actions-ecosystem/action-add-labels@18f1af5e3544586314bbe15c0273249c770b2daf # v1.1.3
|
||||
with:
|
||||
labels: impact/no-changelog-required
|
||||
number: ${{ github.event.issue.number }}
|
||||
@@ -109,26 +110,33 @@ jobs:
|
||||
- name: Build Provider
|
||||
run: make provider
|
||||
- name: Check worktree clean
|
||||
run: ./ci-scripts/ci/check-worktree-is-clean
|
||||
uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
|
||||
with:
|
||||
allowed-changes: |-
|
||||
sdk/**/pulumi-plugin.json
|
||||
sdk/dotnet/Pulumi.*.csproj
|
||||
sdk/go/**/pulumiUtilities.go
|
||||
sdk/nodejs/package.json
|
||||
sdk/python/pyproject.toml
|
||||
- run: git status --porcelain
|
||||
- name: Tar provider binaries
|
||||
run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
|
||||
github.workspace}}/bin/ pulumi-resource-${{ env.PROVIDER }}
|
||||
pulumi-gen-${{ env.PROVIDER}}
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
||||
with:
|
||||
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
|
||||
path: ${{ github.workspace }}/bin/provider.tar.gz
|
||||
- name: Test Provider Library
|
||||
run: make test_provider
|
||||
- name: Upload coverage reports to Codecov
|
||||
uses: codecov/codecov-action@v4
|
||||
uses: codecov/codecov-action@015f24e6818733317a2da2edd6290ab26238649a # v5.0.7
|
||||
env:
|
||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure in building provider prerequisites
|
||||
fields: repo,commit,author,action
|
||||
@@ -148,51 +156,50 @@ jobs:
|
||||
name: build_sdks
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
path: ci-scripts
|
||||
repository: pulumi/scripts
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
node-version: ${{ env.NODEVERSION }}
|
||||
registry-url: https://registry.npmjs.org
|
||||
- name: Setup DotNet
|
||||
uses: actions/setup-dotnet@v4
|
||||
uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25 # v4.1.0
|
||||
with:
|
||||
dotnet-version: ${{ env.DOTNETVERSION }}
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
|
||||
with:
|
||||
python-version: ${{ env.PYTHONVERSION }}
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0
|
||||
with:
|
||||
java-version: ${{ env.JAVAVERSION }}
|
||||
distribution: temurin
|
||||
cache: gradle
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v3
|
||||
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
|
||||
with:
|
||||
gradle-version: "7.6"
|
||||
- name: Download provider + tfgen binaries
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
|
||||
path: ${{ github.workspace }}/bin
|
||||
@@ -207,18 +214,25 @@ jobs:
|
||||
- name: Build SDK
|
||||
run: make build_${{ matrix.language }}
|
||||
- name: Check worktree clean
|
||||
run: ./ci-scripts/ci/check-worktree-is-clean
|
||||
uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
|
||||
with:
|
||||
allowed-changes: |-
|
||||
sdk/**/pulumi-plugin.json
|
||||
sdk/dotnet/Pulumi.*.csproj
|
||||
sdk/go/**/pulumiUtilities.go
|
||||
sdk/nodejs/package.json
|
||||
sdk/python/pyproject.toml
|
||||
- run: git status --porcelain
|
||||
- name: Tar SDK folder
|
||||
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
||||
with:
|
||||
name: ${{ matrix.language }}-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/${{ matrix.language }}.tar.gz
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure while building SDKs
|
||||
fields: repo,commit,author,action
|
||||
@@ -242,51 +256,50 @@ jobs:
|
||||
id-token: write
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
path: ci-scripts
|
||||
repository: pulumi/scripts
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
node-version: ${{ env.NODEVERSION }}
|
||||
registry-url: https://registry.npmjs.org
|
||||
- name: Setup DotNet
|
||||
uses: actions/setup-dotnet@v4
|
||||
uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25 # v4.1.0
|
||||
with:
|
||||
dotnet-version: ${{ env.DOTNETVERSION }}
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
|
||||
with:
|
||||
python-version: ${{ env.PYTHONVERSION }}
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0
|
||||
with:
|
||||
java-version: ${{ env.JAVAVERSION }}
|
||||
distribution: temurin
|
||||
cache: gradle
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v3
|
||||
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
|
||||
with:
|
||||
gradle-version: "7.6"
|
||||
- name: Download provider + tfgen binaries
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
|
||||
path: ${{ github.workspace }}/bin
|
||||
@@ -297,7 +310,7 @@ jobs:
|
||||
run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
|
||||
-exec chmod +x {} \;
|
||||
- name: Download SDK
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: ${{ matrix.language }}-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
@@ -316,7 +329,7 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: make install_${{ matrix.language}}_sdk
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-region: ${{ env.AWS_REGION }}
|
||||
@@ -325,7 +338,7 @@ jobs:
|
||||
role-session-name: ${{ env.PROVIDER }}@githubActions
|
||||
role-to-assume: ${{ secrets.AWS_CI_ROLE_ARN }}
|
||||
- name: Authenticate to Google Cloud
|
||||
uses: google-github-actions/auth@v0
|
||||
uses: google-github-actions/auth@6fc4af4b145ae7821d527454aa9bd537d1f2dc5f # v2.1.7
|
||||
with:
|
||||
workload_identity_provider: projects/${{ env.GOOGLE_PROJECT_NUMBER
|
||||
}}/locations/global/workloadIdentityPools/${{
|
||||
@@ -333,7 +346,7 @@ jobs:
|
||||
env.GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER }}
|
||||
service_account: ${{ env.GOOGLE_CI_SERVICE_ACCOUNT_EMAIL }}
|
||||
- name: Setup gcloud auth
|
||||
uses: google-github-actions/setup-gcloud@v2
|
||||
uses: google-github-actions/setup-gcloud@6189d56e4096ee891640bb02ac264be376592d6a # v2.1.2
|
||||
with:
|
||||
install_components: gke-gcloud-auth-plugin
|
||||
- name: Install gotestfmt
|
||||
@@ -345,10 +358,10 @@ jobs:
|
||||
run: >-
|
||||
set -euo pipefail
|
||||
|
||||
cd examples && go test -v -json -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 . 2>&1 | tee /tmp/gotest.log | gotestfmt
|
||||
cd examples && go test -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 .
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure in SDK tests
|
||||
fields: repo,commit,author,action
|
||||
@@ -359,17 +372,21 @@ jobs:
|
||||
name: publish
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Clear GitHub Actions Ubuntu runner disk space
|
||||
uses: jlumbroso/free-disk-space@v1.3.1
|
||||
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
|
||||
with:
|
||||
tool-cache: false
|
||||
dotnet: false
|
||||
@@ -378,13 +395,13 @@ jobs:
|
||||
swap-storage: true
|
||||
large-packages: false
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-region: us-east-2
|
||||
@@ -393,17 +410,16 @@ 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
|
||||
uses: goreleaser/goreleaser-action@5742e2a039330cbb23ebf35f046f814d4c6ff811 # v5.1.0
|
||||
env:
|
||||
GORELEASER_CURRENT_TAG: v${{ steps.version.outputs.version }}
|
||||
with:
|
||||
args: -p 3 release --clean --timeout 60m0s
|
||||
version: latest
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure in publishing binaries
|
||||
fields: repo,commit,author,action
|
||||
@@ -414,41 +430,46 @@ jobs:
|
||||
name: publish_sdks
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
path: ci-scripts
|
||||
repository: pulumi/scripts
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
- run: echo "ci-scripts" >> .git/info/exclude
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
node-version: ${{ env.NODEVERSION }}
|
||||
registry-url: https://registry.npmjs.org
|
||||
- name: Setup DotNet
|
||||
uses: actions/setup-dotnet@v4
|
||||
uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25 # v4.1.0
|
||||
with:
|
||||
dotnet-version: ${{ env.DOTNETVERSION }}
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
|
||||
with:
|
||||
python-version: ${{ env.PYTHONVERSION }}
|
||||
- name: Download python SDK
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: python-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
@@ -456,7 +477,7 @@ jobs:
|
||||
run: tar -zxf ${{github.workspace}}/sdk/python.tar.gz -C
|
||||
${{github.workspace}}/sdk/python
|
||||
- name: Download dotnet SDK
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: dotnet-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
@@ -464,7 +485,7 @@ jobs:
|
||||
run: tar -zxf ${{github.workspace}}/sdk/dotnet.tar.gz -C
|
||||
${{github.workspace}}/sdk/dotnet
|
||||
- name: Download nodejs SDK
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: nodejs-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
@@ -472,7 +493,7 @@ jobs:
|
||||
run: tar -zxf ${{github.workspace}}/sdk/nodejs.tar.gz -C
|
||||
${{github.workspace}}/sdk/nodejs
|
||||
- name: Install Twine
|
||||
run: python -m pip install pip twine
|
||||
run: python -m pip install twine==5.0.0
|
||||
- name: Publish SDKs
|
||||
run: ./ci-scripts/ci/publish-tfgen-package ${{ github.workspace }}
|
||||
env:
|
||||
@@ -480,7 +501,7 @@ jobs:
|
||||
PYPI_PUBLISH_ARTIFACTS: all
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure in publishing SDK
|
||||
fields: repo,commit,author,action
|
||||
@@ -492,75 +513,89 @@ jobs:
|
||||
name: publish_java_sdk
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
path: ci-scripts
|
||||
repository: pulumi/scripts
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0
|
||||
with:
|
||||
java-version: ${{ env.JAVAVERSION }}
|
||||
distribution: temurin
|
||||
cache: gradle
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v3
|
||||
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
|
||||
with:
|
||||
gradle-version: "7.6"
|
||||
- name: Download java SDK
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: java-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
- name: Uncompress java SDK
|
||||
run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C
|
||||
${{github.workspace}}/sdk/java
|
||||
- name: 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
|
||||
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
|
||||
env:
|
||||
PACKAGE_VERSION: ${{ env.PROVIDER_VERSION }}
|
||||
with:
|
||||
arguments: publishToSonatype closeAndReleaseSonatypeStagingRepository
|
||||
build-root-directory: ./sdk/java
|
||||
gradle-version: 7.4.1
|
||||
tag_sdk:
|
||||
publish_go_sdk:
|
||||
runs-on: ubuntu-latest
|
||||
name: publish-go-sdk
|
||||
needs: publish_sdk
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
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
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Download go SDK
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: go-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
- name: Uncompress go SDK
|
||||
run: tar -zxf ${{github.workspace}}/sdk/go.tar.gz -C
|
||||
${{github.workspace}}/sdk/go
|
||||
- name: Publish Go SDK
|
||||
uses: pulumi/publish-go-sdk-action@v1
|
||||
with:
|
||||
repository: ${{ github.repository }}
|
||||
base-ref: ${{ github.sha }}
|
||||
source: sdk/go/dockerbuild
|
||||
path: sdk/go/dockerbuild
|
||||
version: ${{ steps.version.outputs.version }}
|
||||
additive: false
|
||||
files: "**"
|
||||
dispatch_docs_build:
|
||||
runs-on: ubuntu-latest
|
||||
needs: tag_sdk
|
||||
needs: publish_go_sdk
|
||||
steps:
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Dispatch Event
|
||||
|
||||
165
.github/workflows/run-acceptance-tests.yml
vendored
165
.github/workflows/run-acceptance-tests.yml
vendored
@@ -6,15 +6,12 @@ on:
|
||||
types:
|
||||
- run-acceptance-tests-command
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths-ignore:
|
||||
- CHANGELOG.md
|
||||
workflow_dispatch: {}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
|
||||
PROVIDER: dockerbuild
|
||||
PROVIDER: docker-build
|
||||
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
|
||||
PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
@@ -31,7 +28,7 @@ env:
|
||||
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
|
||||
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
|
||||
GOVERSION: 1.21.x
|
||||
NODEVERSION: 16.x
|
||||
NODEVERSION: 20.x
|
||||
PYTHONVERSION: "3.11"
|
||||
DOTNETVERSION: |
|
||||
6.0.x
|
||||
@@ -45,7 +42,6 @@ env:
|
||||
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
|
||||
AZURE_LOCATION: westus
|
||||
DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}
|
||||
GOLANGCI_LINT_TIMEOUT: 10m
|
||||
GOOGLE_CI_SERVICE_ACCOUNT_EMAIL: pulumi-ci@pulumi-ci-gcp-provider.iam.gserviceaccount.com
|
||||
GOOGLE_CI_WORKLOAD_IDENTITY_POOL: pulumi-ci
|
||||
GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER: pulumi-ci
|
||||
@@ -66,7 +62,7 @@ jobs:
|
||||
run-url=https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID
|
||||
>> "$GITHUB_OUTPUT"
|
||||
- name: Update with Result
|
||||
uses: peter-evans/create-or-update-comment@v1
|
||||
uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0
|
||||
with:
|
||||
token: ${{ secrets.PULUMI_BOT_TOKEN }}
|
||||
repository: ${{ github.event.client_payload.github.payload.repository.full_name }}
|
||||
@@ -78,30 +74,29 @@ jobs:
|
||||
name: prerequisites
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
ref: ${{ env.PR_COMMIT_SHA }}
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
path: ci-scripts
|
||||
repository: pulumi/scripts
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- if: github.event_name == 'pull_request'
|
||||
name: Install Schema Tools
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/schema-tools
|
||||
- name: Build codegen binaries
|
||||
@@ -116,18 +111,20 @@ jobs:
|
||||
schema-tools compare -p ${{ env.PROVIDER }} -o ${{ github.event.repository.default_branch }} -n --local-path=provider/cmd/pulumi-resource-${{ env.PROVIDER }}/schema.json >> $GITHUB_ENV
|
||||
|
||||
echo 'EOF' >> $GITHUB_ENV
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
|
||||
- if: github.event_name == 'pull_request'
|
||||
name: Comment on PR with Details of Schema Check
|
||||
uses: thollander/actions-comment-pull-request@v2
|
||||
uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
|
||||
with:
|
||||
message: |
|
||||
${{ env.SCHEMA_CHANGES }}
|
||||
comment_tag: schemaCheck
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
comment-tag: schemaCheck
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
- if: contains(env.SCHEMA_CHANGES, 'Looking good! No breaking changes found.') &&
|
||||
github.actor == 'pulumi-bot'
|
||||
name: Add label if no breaking changes
|
||||
uses: actions-ecosystem/action-add-labels@v1.1.0
|
||||
uses: actions-ecosystem/action-add-labels@18f1af5e3544586314bbe15c0273249c770b2daf # v1.1.3
|
||||
with:
|
||||
labels: impact/no-changelog-required
|
||||
number: ${{ github.event.issue.number }}
|
||||
@@ -135,26 +132,33 @@ jobs:
|
||||
- name: Build Provider
|
||||
run: make provider
|
||||
- name: Check worktree clean
|
||||
run: ./ci-scripts/ci/check-worktree-is-clean
|
||||
uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
|
||||
with:
|
||||
allowed-changes: |-
|
||||
sdk/**/pulumi-plugin.json
|
||||
sdk/dotnet/Pulumi.*.csproj
|
||||
sdk/go/**/pulumiUtilities.go
|
||||
sdk/nodejs/package.json
|
||||
sdk/python/pyproject.toml
|
||||
- run: git status --porcelain
|
||||
- name: Tar provider binaries
|
||||
run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
|
||||
github.workspace}}/bin/ pulumi-resource-${{ env.PROVIDER }}
|
||||
pulumi-gen-${{ env.PROVIDER}}
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
||||
with:
|
||||
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
|
||||
path: ${{ github.workspace }}/bin/provider.tar.gz
|
||||
- name: Test Provider Library
|
||||
run: make test_provider
|
||||
- name: Upload coverage reports to Codecov
|
||||
uses: codecov/codecov-action@v4
|
||||
uses: codecov/codecov-action@015f24e6818733317a2da2edd6290ab26238649a # v5.0.7
|
||||
env:
|
||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure in building provider prerequisites
|
||||
fields: repo,commit,author,action
|
||||
@@ -176,52 +180,51 @@ jobs:
|
||||
name: build_sdks
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
ref: ${{ env.PR_COMMIT_SHA }}
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
path: ci-scripts
|
||||
repository: pulumi/scripts
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
node-version: ${{ env.NODEVERSION }}
|
||||
registry-url: https://registry.npmjs.org
|
||||
- name: Setup DotNet
|
||||
uses: actions/setup-dotnet@v4
|
||||
uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25 # v4.1.0
|
||||
with:
|
||||
dotnet-version: ${{ env.DOTNETVERSION }}
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
|
||||
with:
|
||||
python-version: ${{ env.PYTHONVERSION }}
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0
|
||||
with:
|
||||
java-version: ${{ env.JAVAVERSION }}
|
||||
distribution: temurin
|
||||
cache: gradle
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v3
|
||||
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
|
||||
with:
|
||||
gradle-version: "7.6"
|
||||
- name: Download provider + tfgen binaries
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
|
||||
path: ${{ github.workspace }}/bin
|
||||
@@ -236,19 +239,26 @@ jobs:
|
||||
- name: Build SDK
|
||||
run: make build_${{ matrix.language }}
|
||||
- name: Check worktree clean
|
||||
run: ./ci-scripts/ci/check-worktree-is-clean
|
||||
uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
|
||||
with:
|
||||
allowed-changes: |-
|
||||
sdk/**/pulumi-plugin.json
|
||||
sdk/dotnet/Pulumi.*.csproj
|
||||
sdk/go/**/pulumiUtilities.go
|
||||
sdk/nodejs/package.json
|
||||
sdk/python/pyproject.toml
|
||||
- run: git status --porcelain
|
||||
- name: Tar SDK folder
|
||||
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
||||
with:
|
||||
name: ${{ matrix.language }}-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/${{ matrix.language }}.tar.gz
|
||||
retention-days: 30
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure while building SDKs
|
||||
fields: repo,commit,author,action
|
||||
@@ -274,52 +284,51 @@ jobs:
|
||||
id-token: write
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
ref: ${{ env.PR_COMMIT_SHA }}
|
||||
- name: Checkout Scripts Repo
|
||||
uses: actions/checkout@v4
|
||||
- id: version
|
||||
name: Set Provider Version
|
||||
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
|
||||
with:
|
||||
path: ci-scripts
|
||||
repository: pulumi/scripts
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
set-env: PROVIDER_VERSION
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
node-version: ${{ env.NODEVERSION }}
|
||||
registry-url: https://registry.npmjs.org
|
||||
- name: Setup DotNet
|
||||
uses: actions/setup-dotnet@v4
|
||||
uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25 # v4.1.0
|
||||
with:
|
||||
dotnet-version: ${{ env.DOTNETVERSION }}
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
|
||||
with:
|
||||
python-version: ${{ env.PYTHONVERSION }}
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0
|
||||
with:
|
||||
java-version: ${{ env.JAVAVERSION }}
|
||||
distribution: temurin
|
||||
cache: gradle
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v3
|
||||
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
|
||||
with:
|
||||
gradle-version: "7.6"
|
||||
- name: Download provider + tfgen binaries
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
|
||||
path: ${{ github.workspace }}/bin
|
||||
@@ -330,7 +339,7 @@ jobs:
|
||||
run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
|
||||
-exec chmod +x {} \;
|
||||
- name: Download SDK
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
||||
with:
|
||||
name: ${{ matrix.language }}-sdk.tar.gz
|
||||
path: ${{ github.workspace}}/sdk/
|
||||
@@ -349,7 +358,7 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: make install_${{ matrix.language}}_sdk
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-region: ${{ env.AWS_REGION }}
|
||||
@@ -358,7 +367,7 @@ jobs:
|
||||
role-session-name: ${{ env.PROVIDER }}@githubActions
|
||||
role-to-assume: ${{ secrets.AWS_CI_ROLE_ARN }}
|
||||
- name: Authenticate to Google Cloud
|
||||
uses: google-github-actions/auth@v0
|
||||
uses: google-github-actions/auth@6fc4af4b145ae7821d527454aa9bd537d1f2dc5f # v2.1.7
|
||||
with:
|
||||
workload_identity_provider: projects/${{ env.GOOGLE_PROJECT_NUMBER
|
||||
}}/locations/global/workloadIdentityPools/${{
|
||||
@@ -366,7 +375,7 @@ jobs:
|
||||
env.GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER }}
|
||||
service_account: ${{ env.GOOGLE_CI_SERVICE_ACCOUNT_EMAIL }}
|
||||
- name: Setup gcloud auth
|
||||
uses: google-github-actions/setup-gcloud@v2
|
||||
uses: google-github-actions/setup-gcloud@6189d56e4096ee891640bb02ac264be376592d6a # v2.1.2
|
||||
with:
|
||||
install_components: gke-gcloud-auth-plugin
|
||||
- name: Install gotestfmt
|
||||
@@ -378,10 +387,10 @@ jobs:
|
||||
run: >-
|
||||
set -euo pipefail
|
||||
|
||||
cd examples && go test -v -json -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 . 2>&1 | tee /tmp/gotest.log | gotestfmt
|
||||
cd examples && go test -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 .
|
||||
- if: failure() && github.event_name == 'push'
|
||||
name: Notify Slack
|
||||
uses: 8398a7/action-slack@v3
|
||||
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
|
||||
with:
|
||||
author_name: Failure in SDK tests
|
||||
fields: repo,commit,author,action
|
||||
@@ -392,8 +401,14 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
name: sentinel
|
||||
steps:
|
||||
- name: Is workflow a success
|
||||
run: echo yes
|
||||
- name: Mark workflow as successful
|
||||
uses: guibranco/github-status-action-v2@0849440ec82c5fa69b2377725b9b7852a3977e76 # v1.1.13
|
||||
with:
|
||||
authToken: ${{ secrets.GITHUB_TOKEN }}
|
||||
context: Sentinel
|
||||
state: success
|
||||
description: Sentinel checks passed
|
||||
sha: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||
if: github.event_name == 'repository_dispatch' ||
|
||||
github.event.pull_request.head.repo.full_name == github.repository
|
||||
needs:
|
||||
@@ -403,19 +418,23 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
ref: ${{ env.PR_COMMIT_SHA }}
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Disarm go:embed directives to enable linters that compile source code
|
||||
run: git grep -l 'go:embed' -- provider | xargs --no-run-if-empty sed -i
|
||||
's/go:embed/ goembed/g'
|
||||
- name: golangci-lint provider pkg
|
||||
uses: golangci/golangci-lint-action@v4
|
||||
uses: golangci/golangci-lint-action@971e284b6050e8a5849b72094c50ab08da042db8 # v6.1.1
|
||||
with:
|
||||
version: ${{ env.GOLANGCI_LINT_VERSION }}
|
||||
args: -c ../.golangci.yml --timeout ${{ env.GOLANGCI_LINT_TIMEOUT }}
|
||||
args: -c ../.golangci.yml
|
||||
working-directory: provider
|
||||
name: lint
|
||||
if: github.event_name == 'repository_dispatch' ||
|
||||
|
||||
33
.github/workflows/weekly-pulumi-update.yml
vendored
33
.github/workflows/weekly-pulumi-update.yml
vendored
@@ -7,7 +7,7 @@ on:
|
||||
workflow_dispatch: {}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
|
||||
PROVIDER: dockerbuild
|
||||
PROVIDER: docker-build
|
||||
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
|
||||
PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
@@ -24,7 +24,7 @@ env:
|
||||
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
|
||||
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
|
||||
GOVERSION: 1.21.x
|
||||
NODEVERSION: 16.x
|
||||
NODEVERSION: 20.x
|
||||
PYTHONVERSION: "3.11"
|
||||
DOTNETVERSION: |
|
||||
6.0.x
|
||||
@@ -51,32 +51,31 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
lfs: true
|
||||
- name: Unshallow clone for tags
|
||||
run: git fetch --prune --unshallow --tags
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
|
||||
with:
|
||||
go-version: ${{ env.GOVERSION }}
|
||||
cache-dependency-path: "**/*.sum"
|
||||
- name: Install pulumictl
|
||||
uses: jaxxstorm/action-install-gh-release@v1.11.0
|
||||
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
|
||||
with:
|
||||
repo: pulumi/pulumictl
|
||||
- name: Install Pulumi CLI
|
||||
uses: pulumi/actions@v5
|
||||
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
|
||||
- name: Setup DotNet
|
||||
uses: actions/setup-dotnet@v4
|
||||
uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25 # v4.1.0
|
||||
with:
|
||||
dotnet-version: ${{ env.DOTNETVERSION }}
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
with:
|
||||
node-version: ${{ env.NODEVERSION }}
|
||||
registry-url: https://registry.npmjs.org
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
|
||||
with:
|
||||
python-version: ${{ env.PYTHONVERSION }}
|
||||
- name: Update Pulumi/Pulumi
|
||||
@@ -90,6 +89,8 @@ jobs:
|
||||
|
||||
for MODFILE in $(find . -name go.mod); do pushd $(dirname $MODFILE); go get github.com/pulumi/pulumi/pkg/v3 github.com/pulumi/pulumi/sdk/v3; go mod tidy; popd; done
|
||||
|
||||
gh repo view pulumi/pulumi --json latestRelease --jq .latestRelease.tagName | sed 's/^v//' > .pulumi.version
|
||||
|
||||
git update-index -q --refresh
|
||||
|
||||
if ! git diff-files --quiet; then echo changes=1 >> "$GITHUB_OUTPUT"; fi
|
||||
@@ -126,12 +127,10 @@ jobs:
|
||||
- name: Create PR
|
||||
id: create-pr
|
||||
if: steps.gomod.outputs.changes != 0
|
||||
uses: repo-sync/pull-request@v2.6.2
|
||||
with:
|
||||
source_branch: update-pulumi/${{ github.run_id }}-${{ github.run_number }}
|
||||
destination_branch: master
|
||||
pr_title: Automated Pulumi/Pulumi upgrade
|
||||
github_token: ${{ secrets.PULUMI_BOT_TOKEN }}
|
||||
run: |
|
||||
ver=$(cat .pulumi.version)
|
||||
msg="Automated upgrade: bump pulumi/pulumi to ${ver}"
|
||||
gh pr create -t "$msg" -b "$msg" -B main
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
|
||||
name: weekly-pulumi-update
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -5,6 +5,7 @@
|
||||
**/.vs
|
||||
**/.idea
|
||||
**/.ionide
|
||||
**/.vscode
|
||||
*.swp
|
||||
Pulumi.*.yaml
|
||||
yarn.lock
|
||||
|
||||
@@ -1,36 +1,67 @@
|
||||
run:
|
||||
timeout: 10m
|
||||
|
||||
linters:
|
||||
enable-all: false
|
||||
enable:
|
||||
- depguard
|
||||
- errcheck
|
||||
- exhaustive
|
||||
- prealloc
|
||||
- gofumpt
|
||||
- revive
|
||||
- exportloopref
|
||||
- gci
|
||||
- gocritic
|
||||
- gofumpt
|
||||
- goheader
|
||||
- gosec
|
||||
- govet
|
||||
- importas
|
||||
- ineffassign
|
||||
- lll
|
||||
- misspell
|
||||
- nolintlint
|
||||
- nakedret
|
||||
- unconvert
|
||||
- unused
|
||||
- nolintlint
|
||||
- paralleltest
|
||||
- perfsprint
|
||||
- depguard
|
||||
- importas
|
||||
- prealloc
|
||||
- revive
|
||||
- unconvert
|
||||
- unused
|
||||
|
||||
linters-settings:
|
||||
nakedret:
|
||||
# Make an issue if func has more lines of code than this setting, and it has naked returns.
|
||||
# Default: 30
|
||||
max-func-lines: 60
|
||||
nolintlint:
|
||||
# Some linter exclusions are added to generated or templated files
|
||||
# pre-emptively.
|
||||
# Don't complain about these.
|
||||
allow-unused: true
|
||||
depguard:
|
||||
rules:
|
||||
protobuf:
|
||||
deny:
|
||||
- pkg: "github.com/golang/protobuf"
|
||||
desc: Use google.golang.org/protobuf instead
|
||||
gci:
|
||||
sections:
|
||||
- standard # Standard section: captures all standard library packages.
|
||||
- blank # Blank section: contains all blank imports.
|
||||
- default # Default section: contains all imports that could not be matched to another section type.
|
||||
- prefix(github.com/pulumi/) # Custom section: groups all imports with the github.com/pulumi/ prefix.
|
||||
- prefix(github.com/pulumi/pulumi-dockerbuild/) # Custom section: local imports
|
||||
custom-order: true
|
||||
gocritic:
|
||||
enable-all: true
|
||||
disabled-checks:
|
||||
- hugeParam
|
||||
- importShadow
|
||||
goheader:
|
||||
template: |-
|
||||
Copyright 2024, Pulumi Corporation.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
govet:
|
||||
enable:
|
||||
- nilness
|
||||
@@ -40,22 +71,18 @@ linters-settings:
|
||||
- sortslice
|
||||
# Detect write to struct/arrays by-value that aren't read again.
|
||||
- unusedwrite
|
||||
gci:
|
||||
sections:
|
||||
- standard # Standard section: captures all standard library packages.
|
||||
- blank # Blank section: contains all blank imports.
|
||||
- default # Default section: contains all imports that could not be matched to another section type.
|
||||
- prefix(github.com/pulumi/) # Custom section: groups all imports with the github.com/pulumi/ prefix.
|
||||
- prefix(github.com/pulumi/pulumi-dockerbuild) # Custom section: local imports
|
||||
custom-order: true
|
||||
depguard:
|
||||
rules:
|
||||
protobuf:
|
||||
deny:
|
||||
- pkg: "github.com/golang/protobuf"
|
||||
desc: Use google.golang.org/protobuf instead
|
||||
nakedret:
|
||||
# Make an issue if func has more lines of code than this setting, and it has naked returns.
|
||||
# Default: 30
|
||||
max-func-lines: 60
|
||||
nolintlint:
|
||||
# Some linter exclusions are added to generated or templated files
|
||||
# pre-emptively.
|
||||
# Don't complain about these.
|
||||
allow-unused: true
|
||||
|
||||
issues:
|
||||
exclude-use-default: false
|
||||
exclude-rules:
|
||||
# Don't warn on unused parameters.
|
||||
# Parameter names are useful; replacing them with '_' is undesirable.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
|
||||
|
||||
project_name: pulumi-dockerbuild
|
||||
project_name: pulumi-docker-build
|
||||
builds:
|
||||
- dir: provider
|
||||
env:
|
||||
@@ -14,10 +14,14 @@ builds:
|
||||
- amd64
|
||||
- arm64
|
||||
ignore: []
|
||||
main: ./cmd/pulumi-resource-dockerbuild/
|
||||
main: ./cmd/pulumi-resource-docker-build/
|
||||
ldflags:
|
||||
- -X github.com/pulumi/pulumi-dockerbuild/provider/pkg/version.Version={{.Tag}}
|
||||
binary: pulumi-resource-dockerbuild
|
||||
- -s
|
||||
- -w
|
||||
- -X
|
||||
github.com/pulumi/pulumi-docker-build/provider/pkg/version.Version={{.Tag}}
|
||||
- -X github.com/pulumi/pulumi-docker-build/provider.Version={{.Tag}}
|
||||
binary: pulumi-resource-docker-build
|
||||
archives:
|
||||
- name_template: "{{ .Binary }}-{{ .Tag }}-{{ .Os }}-{{ .Arch }}"
|
||||
id: archive
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
|
||||
|
||||
project_name: pulumi-dockerbuild
|
||||
project_name: pulumi-docker-build
|
||||
builds:
|
||||
- dir: provider
|
||||
env:
|
||||
@@ -14,10 +14,14 @@ builds:
|
||||
- amd64
|
||||
- arm64
|
||||
ignore: []
|
||||
main: ./cmd/pulumi-resource-dockerbuild/
|
||||
main: ./cmd/pulumi-resource-docker-build/
|
||||
ldflags:
|
||||
- -X github.com/pulumi/pulumi-dockerbuild/provider/pkg/version.Version={{.Tag}}
|
||||
binary: pulumi-resource-dockerbuild
|
||||
- -s
|
||||
- -w
|
||||
- -X
|
||||
github.com/pulumi/pulumi-docker-build/provider/pkg/version.Version={{.Tag}}
|
||||
- -X github.com/pulumi/pulumi-docker-build/provider.Version={{.Tag}}
|
||||
binary: pulumi-resource-docker-build
|
||||
archives:
|
||||
- name_template: "{{ .Binary }}-{{ .Tag }}-{{ .Os }}-{{ .Arch }}"
|
||||
id: archive
|
||||
|
||||
1
.pulumi.version
Normal file
1
.pulumi.version
Normal file
@@ -0,0 +1 @@
|
||||
3.136.1
|
||||
74
CHANGELOG.md
Normal file
74
CHANGELOG.md
Normal file
@@ -0,0 +1,74 @@
|
||||
## Unreleased
|
||||
|
||||
### Added
|
||||
|
||||
- Multiple exports are now allowed if the build daemon is detected to have
|
||||
version 0.13 of Buildkit or newer. (https://github.com/pulumi/pulumi-docker-build/issues/21)
|
||||
|
||||
### Changed
|
||||
|
||||
- Upgraded buildx from 0.16.0 to 0.18.0.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Custom `# syntax=` directives no longer cause validation errors. (https://github.com/pulumi/pulumi-docker-build/issues/300)
|
||||
|
||||
## 0.0.7 (2024-10-16)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed an issue where registry authentication couldn't be specified on the
|
||||
provider. (https://github.com/pulumi/pulumi-docker-build/issues/262)
|
||||
|
||||
## 0.0.6 (2024-08-13)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Refreshing an `Index` resource will no longer fail if its stored credentials
|
||||
have expired. (https://github.com/pulumi/pulumi-docker-build/pull/194)
|
||||
|
||||
### Changed
|
||||
|
||||
- Local and tar exporters will now trigger an update if an export doesn't exist
|
||||
at the expected path. (https://github.com/pulumi/pulumi-docker-build/pull/195)
|
||||
|
||||
## 0.0.5 (2024-08-08)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed Go SDK publishing.
|
||||
|
||||
### Changed
|
||||
|
||||
- Upgraded docker from 27.0.3 to 27.1.0.
|
||||
|
||||
## 0.0.4 (2024-07-15)
|
||||
|
||||
### Changed
|
||||
|
||||
- Upgraded buildkit from 0.13.0 to 0.15.0.
|
||||
- Upgraded buildx from 0.13.1. to 0.16.0.
|
||||
- Upgraded docker from 26.0.0-rc1 to 27.0.3.
|
||||
- Fixed an issue where warnings were not displayed correctly.
|
||||
|
||||
## 0.0.3 (2024-05-31)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed the default value for `ACTIONS_CACHE_URL` when using GitHub action caching. (https://github.com/pulumi/pulumi-docker-build/pull/80)
|
||||
- Fixed Java SDK publishing. (https://github.com/pulumi/pulumi-docker-build/pull/89)
|
||||
- Fixed a panic that could occur when `context` was omitted. (https://github.com/pulumi/pulumi-docker-build/pull/83)
|
||||
|
||||
### Changed
|
||||
|
||||
- The provider will now wait for new builders to fully boot.
|
||||
|
||||
## 0.0.2 (2024-04-25)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Upgraded pulumi-go-provider to fix a panic during cancellation.
|
||||
|
||||
## 0.0.1 (2024-04-23)
|
||||
|
||||
Initial release.
|
||||
80
CODE-OF-CONDUCT.md
Normal file
80
CODE-OF-CONDUCT.md
Normal file
@@ -0,0 +1,80 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, gender identity and expression, level of experience,
|
||||
education, socio-economic status, nationality, personal appearance, race,
|
||||
religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
* Contribute in a positive and constructive way
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Community Guidelines
|
||||
* Be clear and stay on topic. Communicating with strangers on the Internet can make it hard to convey or read tone, and sarcasm is frequently misunderstood. Try to use clear language, and think about how the other person will receive it.
|
||||
* Don’t cross-post the same thing in multiple GitHub Discussion topics or multiple Slack channels. This can make it difficult for people answering your questions and creates "scrollback spam".
|
||||
* Public discussion is preferred to private. Avoid using Slack DMs for questions, and instead share them in public Slack channels or GitHub Discussion threads. This allows a larger audience to both share their knowledge as well as learn from your question or issue. If you're having a problem, chances are someone else is having a similar problem. Learning in public is a community contribution.
|
||||
* Minimize notifications to other community members. Avoid tagging other community members in Slack messages or Discussion threads, unless you are replying to something specific. Community members are here to help each other, but are not "on call" for support, and we expect everyone to try to minimize "notification fatigue". If your issue is time-sensitive or critical, use methods like support@pulumi.com instead.
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, GitHub Discussions posts,
|
||||
and other contributions that are not aligned to this Code of Conduct, or to ban
|
||||
temporarily or permanently any contributor for other behaviors that they deem
|
||||
inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces (including the Community Slack
|
||||
and GitHub Discussions forums) and in public spaces when an individual is representing the
|
||||
project or its community. Examples of representing a project or community include
|
||||
using an official project e-mail address, posting via an official social media account,
|
||||
or acting as an appointed representative at an online or offline event. Representation
|
||||
of a project may be further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at code-of-conduct@pulumi.com. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
97
Makefile
97
Makefile
@@ -1,13 +1,12 @@
|
||||
PROJECT_NAME := Pulumi Docker Build Resource Provider
|
||||
|
||||
PACK := dockerbuild
|
||||
PACK := docker-build
|
||||
PACKDIR := sdk
|
||||
PROJECT := github.com/pulumi/pulumi-dockerbuild
|
||||
NODE_MODULE_NAME := @pulumi/dockerbuild
|
||||
NUGET_PKG_NAME := Pulumi.Dockerbuild
|
||||
PROJECT := github.com/pulumi/pulumi-docker-build
|
||||
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
|
||||
@@ -19,18 +18,32 @@ EXAMPLES_DIR := ${WORKING_DIR}/examples/yaml
|
||||
TESTPARALLELISM := 4
|
||||
|
||||
PULUMI := bin/pulumi
|
||||
GOGLANGCILINT := bin/golangci-lint
|
||||
|
||||
# Override during CI using `make [TARGET] PROVIDER_VERSION=""` or by setting a PROVIDER_VERSION environment variable
|
||||
# Local & branch builds will just used this fixed default version unless specified
|
||||
PROVIDER_VERSION ?= 0.1.0-alpha.0+dev
|
||||
# Use this normalised version everywhere rather than the raw input to ensure consistency.
|
||||
VERSION_GENERIC = $(shell pulumictl convert-version --language generic --version "$(PROVIDER_VERSION)")
|
||||
|
||||
export PULUMI_IGNORE_AMBIENT_PLUGINS = true
|
||||
export PULUMI_DISABLE_AUTOMATIC_PLUGIN_ACQUISITION = true
|
||||
|
||||
.PHONY: ensure
|
||||
ensure:: tidy lint test_provider examples
|
||||
|
||||
.PHONY: tidy
|
||||
tidy: go.sum
|
||||
tidy:
|
||||
go mod tidy
|
||||
|
||||
.PHONY: provider
|
||||
provider: bin/${PROVIDER} bin/pulumi-gen-${PACK} # Required by CI
|
||||
|
||||
.PHONY: local_generate
|
||||
local_generate: sdk # Required by CI
|
||||
|
||||
provider_debug::
|
||||
(cd provider && go build -o $(WORKING_DIR)/bin/${PROVIDER} -gcflags="all=-N -l" -ldflags "-X ${PROJECT}/${VERSION_PATH}=${VERSION}" $(PROJECT)/${PROVIDER_PATH}/cmd/$(PROVIDER))
|
||||
(cd provider && go build -o $(WORKING_DIR)/bin/${PROVIDER} -gcflags="all=-N -l" -ldflags "-X ${PROJECT}/${VERSION_PATH}=${VERSION_GENERIC}" $(PROJECT)/${PROVIDER_PATH}/cmd/$(PROVIDER))
|
||||
|
||||
test_provider:: # Required by CI
|
||||
go test -short -v -coverprofile="coverage.txt" -coverpkg=./provider/... -timeout 2h -parallel ${TESTPARALLELISM} ./provider/...
|
||||
@@ -44,7 +57,11 @@ test_all:: test_provider test_examples
|
||||
gen_examples:
|
||||
|
||||
examples: $(shell mkdir -p examples)
|
||||
examples: sdk examples/go examples/nodejs examples/python examples/dotnet examples/java
|
||||
examples: sdk examples/yaml examples/go examples/nodejs examples/python examples/dotnet examples/java
|
||||
|
||||
examples/yaml:
|
||||
rm -rf ${WORKING_DIR}/examples/yaml/app
|
||||
cp -r ${WORKING_DIR}/examples/app ${WORKING_DIR}/examples/yaml/app
|
||||
|
||||
examples/go: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
|
||||
$(call example,go)
|
||||
@@ -60,7 +77,7 @@ examples/python: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.y
|
||||
|
||||
examples/dotnet: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
|
||||
$(call example,dotnet)
|
||||
@git checkout examples/dotnet/provider-dockerbuild.csproj
|
||||
@git checkout examples/dotnet/provider-docker-build.csproj
|
||||
|
||||
examples/java: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
|
||||
$(call example,java)
|
||||
@@ -68,6 +85,15 @@ examples/java: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yam
|
||||
|
||||
${PULUMI}: go.sum
|
||||
GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi/pkg/v3/cmd/pulumi
|
||||
GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3
|
||||
GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi/sdk/nodejs/cmd/pulumi-language-nodejs/v3
|
||||
GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi/sdk/python/cmd/pulumi-language-python/v3
|
||||
GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi-java/pkg/cmd/pulumi-language-java
|
||||
GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet
|
||||
GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi-yaml/cmd/pulumi-converter-yaml
|
||||
|
||||
${GOGLANGCILINT}: go.sum
|
||||
GOBIN=${WORKING_DIR}/bin go install github.com/golangci/golangci-lint/cmd/golangci-lint
|
||||
|
||||
define pulumi_login
|
||||
export PULUMI_CONFIG_PASSPHRASE=asdfqwerty1234; \
|
||||
@@ -75,7 +101,6 @@ define pulumi_login
|
||||
endef
|
||||
|
||||
define example
|
||||
echo "GOT $(1)"
|
||||
rm -rf ${WORKING_DIR}/examples/$(1)
|
||||
$(PULUMI) convert \
|
||||
--cwd ${WORKING_DIR}/examples/yaml \
|
||||
@@ -84,6 +109,8 @@ define example
|
||||
--non-interactive \
|
||||
--language $(1) \
|
||||
--out ${WORKING_DIR}/examples/$(1)
|
||||
cp -r ${WORKING_DIR}/examples/app ${WORKING_DIR}/examples/$(1)/app
|
||||
cp ${WORKING_DIR}/examples/yaml/.dockerignore ${WORKING_DIR}/examples/$(1)/.dockerignore
|
||||
endef
|
||||
|
||||
up::
|
||||
@@ -107,20 +134,18 @@ devcontainer::
|
||||
cp -f .devcontainer/devcontainer.json .devcontainer.json
|
||||
|
||||
.PHONY: build
|
||||
build:: provider dotnet_sdk go_sdk nodejs_sdk python_sdk
|
||||
build:: provider sdk/dotnet sdk/go sdk/nodejs sdk/python sdk/java ${SCHEMA_PATH}
|
||||
|
||||
# Required for the codegen action that runs in pulumi/pulumi
|
||||
only_build:: build
|
||||
|
||||
.PHONY: lint
|
||||
lint:
|
||||
golangci-lint run --fix -c .golangci.yml --timeout 10m
|
||||
lint: ${GOGLANGCILINT}
|
||||
${GOGLANGCILINT} run --fix -c .golangci.yml
|
||||
|
||||
install:: install_nodejs_sdk install_dotnet_sdk
|
||||
cp $(WORKING_DIR)/bin/${PROVIDER} ${GOPATH}/bin
|
||||
|
||||
GO_TEST := go test -v -count=1 -cover -timeout 2h -parallel ${TESTPARALLELISM}
|
||||
|
||||
|
||||
install_dotnet_sdk:: # Required by CI
|
||||
rm -rf $(WORKING_DIR)/nuget/$(NUGET_PKG_NAME).*.nupkg
|
||||
@@ -139,7 +164,7 @@ install_nodejs_sdk:: # Required by CI
|
||||
codegen: # Required by CI
|
||||
|
||||
.PHONY: generate_schema
|
||||
generate_schema: # Required by CI
|
||||
generate_schema: ${SCHEMA_PATH} # Required by CI
|
||||
|
||||
.PHONY: build_go install_go_sdk
|
||||
generate_go: sdk/go # Required by CI
|
||||
@@ -162,24 +187,23 @@ generate_dotnet: sdk/dotnet # Required by CI
|
||||
build_dotnet: # Required by CI
|
||||
|
||||
${SCHEMA_PATH}: bin/${PROVIDER}
|
||||
pulumi package get-schema bin/${PROVIDER} > $(SCHEMA_PATH)
|
||||
pulumi package get-schema bin/${PROVIDER} | jq 'del(.version)' > $(SCHEMA_PATH)
|
||||
|
||||
bin/${PROVIDER}: $(shell find ./provider -name '*.go') go.mod
|
||||
(cd provider && go build -o ../bin/${PROVIDER} -ldflags "-X ${PROJECT}/${VERSION_PATH}=${VERSION}" $(PROJECT)/${PROVIDER_PATH}/cmd/$(PROVIDER))
|
||||
(cd provider && go build -o ../bin/${PROVIDER} -ldflags "-X ${PROJECT}/${VERSION_PATH}=${VERSION_GENERIC}" $(PROJECT)/${PROVIDER_PATH}/cmd/$(PROVIDER))
|
||||
|
||||
bin/pulumi-gen-${PACK}: # Required by CI
|
||||
touch bin/pulumi-gen-${PACK}
|
||||
|
||||
$(shell find . -name '*.go'):
|
||||
|
||||
go.mod: $(shell find . -name '*.go')
|
||||
go.sum: go.mod
|
||||
go mod tidy
|
||||
|
||||
sdk: $(shell mkdir -p sdk)
|
||||
sdk: sdk/python sdk/nodejs sdk/java sdk/python sdk/go sdk/dotnet
|
||||
|
||||
sdk/python: PYPI_VERSION := $(shell pulumictl get version --language python)
|
||||
# Folders can't be used for up-to-date checks as they will be marked as up-to-date even if the step fails - leading to a broken state.
|
||||
.PHONY: sdk/*
|
||||
|
||||
sdk/python: TMPDIR := $(shell mktemp -d)
|
||||
sdk/python: $(PULUMI) bin/${PROVIDER}
|
||||
rm -rf sdk/python
|
||||
@@ -187,15 +211,12 @@ sdk/python: $(PULUMI) bin/${PROVIDER}
|
||||
cp README.md ${TMPDIR}/python/
|
||||
cd ${TMPDIR}/python/ && \
|
||||
rm -rf ./bin/ ../python.bin/ && cp -R . ../python.bin && mv ../python.bin ./bin && \
|
||||
sed -i.bak -e 's/^ version = .*/ version = "$(PYPI_VERSION)"/g' ./bin/pyproject.toml && \
|
||||
rm ./bin/pyproject.toml.bak && \
|
||||
python3 -m venv venv && \
|
||||
./venv/bin/python -m pip install build && \
|
||||
cd ./bin && \
|
||||
../venv/bin/python -m build .
|
||||
mv -f ${TMPDIR}/python ${WORKING_DIR}/sdk/.
|
||||
|
||||
sdk/nodejs: NODE_VERSION := $(shell pulumictl get version --language javascript)
|
||||
sdk/nodejs: TMPDIR := $(shell mktemp -d)
|
||||
sdk/nodejs: $(PULUMI) bin/${PROVIDER}
|
||||
rm -rf sdk/nodejs
|
||||
@@ -204,35 +225,37 @@ sdk/nodejs: $(PULUMI) bin/${PROVIDER}
|
||||
cd ${TMPDIR}/nodejs/ && \
|
||||
yarn install && \
|
||||
yarn run tsc && \
|
||||
cp README.md LICENSE package.json yarn.lock bin/ && \
|
||||
sed -i.bak 's/$${VERSION}/$(NODE_VERSION)/g' bin/package.json && \
|
||||
rm ./bin/package.json.bak
|
||||
cp README.md LICENSE package.json yarn.lock bin/
|
||||
mv -f ${TMPDIR}/nodejs ${WORKING_DIR}/sdk/.
|
||||
|
||||
sdk/go: TMPDIR := $(shell mktemp -d)
|
||||
sdk/go: PATH := "$(WORKING_DIR)/bin:$(PATH)"
|
||||
sdk/go: $(PULUMI) bin/${PROVIDER}
|
||||
rm -rf sdk/go
|
||||
$(PULUMI) package gen-sdk bin/$(PROVIDER) --language go -o ${TMPDIR}
|
||||
cp go.mod ${TMPDIR}/go/${PACK}/go.mod
|
||||
cd ${TMPDIR}/go/${PACK} && \
|
||||
go mod edit -module=github.com/pulumi/pulumi-${PACK}/${PACKDIR}/go/${PACK} && \
|
||||
PATH=$(PATH) $(PULUMI) package gen-sdk bin/$(PROVIDER) --language go -o ${TMPDIR}
|
||||
cp go.mod ${TMPDIR}/go/dockerbuild/go.mod
|
||||
cd ${TMPDIR}/go/dockerbuild && \
|
||||
go mod edit -module=github.com/pulumi/pulumi-${PACK}/${PACKDIR}/go/dockerbuild && \
|
||||
go mod tidy
|
||||
mv -f ${TMPDIR}/go ${WORKING_DIR}/sdk/.
|
||||
mv -f ${TMPDIR}/go ${WORKING_DIR}/sdk/go
|
||||
|
||||
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
|
||||
$(PULUMI) package gen-sdk bin/${PROVIDER} --language dotnet -o ${TMPDIR}
|
||||
cd ${TMPDIR}/dotnet/ && \
|
||||
echo "$(DOTNET_VERSION)" > version.txt && \
|
||||
dotnet build /p:Version=${DOTNET_VERSION}
|
||||
echo "$(VERSION_GENERIC)" > version.txt && \
|
||||
dotnet build
|
||||
mv -f ${TMPDIR}/dotnet ${WORKING_DIR}/sdk/.
|
||||
|
||||
sdk/java: PACKAGE_VERSION := $(shell pulumictl get version --language generic)
|
||||
sdk/java: PACKAGE_VERSION := $(shell pulumictl convert-version --language generic -v "$(VERSION_GENERIC)")
|
||||
sdk/java: TMPDIR := $(shell mktemp -d)
|
||||
sdk/java: $(PULUMI) bin/${PROVIDER}
|
||||
rm -rf sdk/java
|
||||
$(PULUMI) package gen-sdk --language java bin/${PROVIDER} -o ${TMPDIR}
|
||||
cd ${TMPDIR}/java/ && gradle --console=plain build
|
||||
mv -f ${TMPDIR}/java ${WORKING_DIR}/sdk/.
|
||||
|
||||
docs: $(shell find docs/yaml -type f) $(shell find ./provider/internal/embed -name '*.md') ${SCHEMA_PATH}
|
||||
go generate docs/generate.go
|
||||
@touch docs
|
||||
|
||||
117
README.md
117
README.md
@@ -1,106 +1,23 @@
|
||||
# Pulumi Native Provider Boilerplate
|
||||
[](https://slack.pulumi.com)
|
||||
[](https://www.npmjs.com/package/@pulumi/docker-build)
|
||||
[](https://pypi.org/project/pulumi-docker-build)
|
||||
[](https://badge.fury.io/nu/pulumi.dockerbuild)
|
||||
[](https://pkg.go.dev/github.com/pulumi/pulumi-docker-build/sdk/go)
|
||||
[](https://github.com/pulumi/pulumi-docker-build/blob/main/LICENSE)
|
||||
|
||||
This repository is a boilerplate showing how to create and locally test a native Pulumi provider.
|
||||
# Docker-Build Resource Provider
|
||||
|
||||
## Authoring a Pulumi Native Provider
|
||||
A [Pulumi](http://pulumi.com) provider for building modern Docker images with [buildx](https://docs.docker.com/build/architecture/) and [BuildKit](https://docs.docker.com/build/buildkit/).
|
||||
|
||||
This boilerplate creates a working Pulumi-owned provider named `xyz`.
|
||||
It implements a random number generator that you can [build and test out for yourself](#test-against-the-example) and then replace the Random code with code specific to your provider.
|
||||
Not to be confused with the earlier
|
||||
[Docker](http://github.com/pulumi/pulumi-docker) provider, which is still
|
||||
appropriate for managing resources unrelated to building images.
|
||||
|
||||
| Provider | Use cases |
|
||||
| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `@pulumi/docker-build` | Anything related to building images with `docker build`. |
|
||||
| `@pulumi/docker` | Everything else -- including running containers and creating networks. |
|
||||
|
||||
### Prerequisites
|
||||
## Reference
|
||||
|
||||
Prerequisites for this repository are already satisfied by the [Pulumi Devcontainer](https://github.com/pulumi/devcontainer) if you are using Github Codespaces, or VSCode.
|
||||
|
||||
If you are not using VSCode, you will need to ensure the following tools are installed and present in your `$PATH`:
|
||||
|
||||
* [`pulumictl`](https://github.com/pulumi/pulumictl#installation)
|
||||
* [Go 1.21](https://golang.org/dl/) or 1.latest
|
||||
* [NodeJS](https://nodejs.org/en/) 14.x. We recommend using [nvm](https://github.com/nvm-sh/nvm) to manage NodeJS installations.
|
||||
* [Yarn](https://yarnpkg.com/)
|
||||
* [TypeScript](https://www.typescriptlang.org/)
|
||||
* [Python](https://www.python.org/downloads/) (called as `python3`). For recent versions of MacOS, the system-installed version is fine.
|
||||
* [.NET](https://dotnet.microsoft.com/download)
|
||||
|
||||
|
||||
### Build & test the boilerplate XYZ provider
|
||||
|
||||
1. Create a new Github CodeSpaces environment using this repository.
|
||||
1. Open a terminal in the CodeSpaces environment.
|
||||
1. Run `make build install` to build and install the provider.
|
||||
1. Run `make gen_examples` to generate the example programs in `examples/` off of the source `examples/yaml` example program.
|
||||
1. Run `make up` to run the example program in `examples/yaml`.
|
||||
1. Run `make down` to tear down the example program.
|
||||
|
||||
### Creating a new provider repository
|
||||
|
||||
Pulumi offers this repository as a [GitHub template repository](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-repository-from-a-template) for convenience. From this repository:
|
||||
|
||||
1. Click "Use this template".
|
||||
1. Set the following options:
|
||||
* Owner: pulumi
|
||||
* Repository name: pulumi-xyz-native (replace "xyz" with the name of your provider)
|
||||
* Description: Pulumi provider for xyz
|
||||
* Repository type: Public
|
||||
1. Clone the generated repository.
|
||||
|
||||
From the templated repository:
|
||||
|
||||
1. Search-replace `xyz` with the name of your desired provider.
|
||||
|
||||
#### Build the provider and install the plugin
|
||||
|
||||
```bash
|
||||
$ make build install
|
||||
```
|
||||
|
||||
This will:
|
||||
|
||||
1. Create the SDK codegen binary and place it in a `./bin` folder (gitignored)
|
||||
2. Create the provider binary and place it in the `./bin` folder (gitignored)
|
||||
3. Generate the dotnet, Go, Node, and Python SDKs and place them in the `./sdk` folder
|
||||
4. Install the provider on your machine.
|
||||
|
||||
#### Test against the example
|
||||
|
||||
```bash
|
||||
$ cd examples/simple
|
||||
$ yarn link @pulumi/xyz
|
||||
$ yarn install
|
||||
$ pulumi stack init test
|
||||
$ pulumi up
|
||||
```
|
||||
|
||||
Now that you have completed all of the above steps, you have a working provider that generates a random string for you.
|
||||
|
||||
#### A brief repository overview
|
||||
|
||||
You now have:
|
||||
|
||||
1. A `provider/` folder containing the building and implementation logic
|
||||
1. `cmd/pulumi-resource-xyz/main.go` - holds the provider's sample implementation logic.
|
||||
2. `deployment-templates` - a set of files to help you around deployment and publication
|
||||
3. `sdk` - holds the generated code libraries created by `pulumi-gen-xyz/main.go`
|
||||
4. `examples` a folder of Pulumi programs to try locally and/or use in CI.
|
||||
5. A `Makefile` and this `README`.
|
||||
|
||||
#### Additional Details
|
||||
|
||||
This repository depends on the pulumi-go-provider library. For more details on building providers, please check
|
||||
the [Pulumi Go Provider docs](https://github.com/pulumi/pulumi-go-provider).
|
||||
|
||||
### Build Examples
|
||||
|
||||
Create an example program using the resources defined in your provider, and place it in the `examples/` folder.
|
||||
|
||||
You can now repeat the steps for [build, install, and test](#test-against-the-example).
|
||||
|
||||
## Configuring CI and releases
|
||||
|
||||
1. Follow the instructions laid out in the [deployment templates](./deployment-templates/README-DEPLOYMENT.md).
|
||||
|
||||
## References
|
||||
|
||||
Other resources/examples for implementing providers:
|
||||
* [Pulumi Command provider](https://github.com/pulumi/pulumi-command/blob/master/provider/pkg/provider/provider.go)
|
||||
* [Pulumi Go Provider repository](https://github.com/pulumi/pulumi-go-provider)
|
||||
For more information, including examples and migration guidance, please see the Docker-Build provider's detailed [API documentation](https://www.pulumi.com/registry/packages/docker-build/).
|
||||
|
||||
204
bin/pulumi-language-python-exec
Executable file
204
bin/pulumi-language-python-exec
Executable file
@@ -0,0 +1,204 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright 2016-2018, Pulumi Corporation. All rights reserved.
|
||||
|
||||
import argparse
|
||||
import asyncio
|
||||
from typing import Optional
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
import traceback
|
||||
import runpy
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
|
||||
# The user might not have installed Pulumi yet in their environment - provide a high-quality error message in that case.
|
||||
try:
|
||||
import pulumi
|
||||
import pulumi.runtime
|
||||
except ImportError:
|
||||
# For whatever reason, sys.stderr.write is not picked up by the engine as a message, but 'print' is. The Python
|
||||
# langhost automatically flushes stdout and stderr on shutdown, so we don't need to do it here - just trust that
|
||||
# Python does the sane thing when printing to stderr.
|
||||
print(traceback.format_exc(), file=sys.stderr)
|
||||
print("""
|
||||
It looks like the Pulumi SDK has not been installed. Have you run pip install?
|
||||
If you are running in a virtualenv, you must run pip install -r requirements.txt from inside the virtualenv.""", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
# use exit code 32 to signal to the language host that an error message was displayed to the user
|
||||
PYTHON_PROCESS_EXITED_AFTER_SHOWING_USER_ACTIONABLE_MESSAGE_CODE = 32
|
||||
|
||||
def get_abs_module_path(mod_path):
|
||||
path, ext = os.path.splitext(mod_path)
|
||||
if not ext:
|
||||
path = os.path.join(path, '__main__')
|
||||
return os.path.abspath(path)
|
||||
|
||||
|
||||
def _get_user_stacktrace(user_program_abspath: str) -> str:
|
||||
'''grabs the current stacktrace and truncates it to show the only stacks pertaining to a user's program'''
|
||||
tb = traceback.extract_tb(sys.exc_info()[2])
|
||||
|
||||
for frame_index, frame in enumerate(tb):
|
||||
# loop over stack frames until we reach the main program
|
||||
# then return the traceback truncated to the user's code
|
||||
cur_module = frame[0]
|
||||
if get_abs_module_path(user_program_abspath) == get_abs_module_path(cur_module):
|
||||
# we have detected the start of a user's stack trace
|
||||
remaining_frames = len(tb)-frame_index
|
||||
|
||||
# include remaining frames from the bottom by negating
|
||||
return traceback.format_exc(limit=-remaining_frames)
|
||||
|
||||
# we did not detect a __main__ program, return normal traceback
|
||||
return traceback.format_exc()
|
||||
|
||||
def _set_default_executor(loop, parallelism: Optional[int]):
|
||||
'''configure this event loop to respect the settings provided.'''
|
||||
if parallelism is None:
|
||||
return
|
||||
parallelism = max(parallelism, 1)
|
||||
exec = ThreadPoolExecutor(max_workers=parallelism)
|
||||
loop.set_default_executor(exec)
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Parse the arguments, program name, and optional arguments.
|
||||
ap = argparse.ArgumentParser(description='Execute a Pulumi Python program')
|
||||
ap.add_argument('--project', help='Set the project name')
|
||||
ap.add_argument('--stack', help='Set the stack name')
|
||||
ap.add_argument('--parallel', help='Run P resource operations in parallel (default=none)')
|
||||
ap.add_argument('--dry_run', help='Simulate resource changes, but without making them')
|
||||
ap.add_argument('--pwd', help='Change the working directory before running the program')
|
||||
ap.add_argument('--monitor', help='An RPC address for the resource monitor to connect to')
|
||||
ap.add_argument('--engine', help='An RPC address for the engine to connect to')
|
||||
ap.add_argument('--tracing', help='A Zipkin-compatible endpoint to send tracing data to')
|
||||
ap.add_argument('--organization', help='Set the organization name')
|
||||
ap.add_argument('PROGRAM', help='The Python program to run')
|
||||
ap.add_argument('ARGS', help='Arguments to pass to the program', nargs='*')
|
||||
args = ap.parse_args()
|
||||
|
||||
# If any config variables are present, parse and set them, so subsequent accesses are fast.
|
||||
config_env = pulumi.runtime.get_config_env()
|
||||
if hasattr(pulumi.runtime, "get_config_secret_keys_env") and hasattr(pulumi.runtime, "set_all_config"):
|
||||
# If the pulumi SDK has `get_config_secret_keys_env` and `set_all_config`, use them
|
||||
# to set the config and secret keys.
|
||||
config_secret_keys_env = pulumi.runtime.get_config_secret_keys_env()
|
||||
pulumi.runtime.set_all_config(config_env, config_secret_keys_env)
|
||||
else:
|
||||
# Otherwise, fallback to setting individual config values.
|
||||
for k, v in config_env.items():
|
||||
pulumi.runtime.set_config(k, v)
|
||||
|
||||
# Configure the runtime so that the user program hooks up to Pulumi as appropriate.
|
||||
# New versions of pulumi python support setting organization, old versions do not
|
||||
try:
|
||||
settings = pulumi.runtime.Settings(
|
||||
monitor=args.monitor,
|
||||
engine=args.engine,
|
||||
project=args.project,
|
||||
stack=args.stack,
|
||||
parallel=int(args.parallel),
|
||||
dry_run=args.dry_run == "true",
|
||||
organization=args.organization,
|
||||
)
|
||||
except TypeError:
|
||||
settings = pulumi.runtime.Settings(
|
||||
monitor=args.monitor,
|
||||
engine=args.engine,
|
||||
project=args.project,
|
||||
stack=args.stack,
|
||||
parallel=int(args.parallel),
|
||||
dry_run=args.dry_run == "true"
|
||||
)
|
||||
|
||||
pulumi.runtime.configure(settings)
|
||||
|
||||
# Finally, swap in the args, chdir if needed, and run the program as if it had been executed directly.
|
||||
sys.argv = [args.PROGRAM] + args.ARGS
|
||||
if args.pwd is not None:
|
||||
os.chdir(args.pwd)
|
||||
|
||||
successful = False
|
||||
|
||||
try:
|
||||
# The docs for get_running_loop are somewhat misleading because they state:
|
||||
# This function can only be called from a coroutine or a callback. However, if the function is
|
||||
# called from outside a coroutine or callback (the standard case when running `pulumi up`), the function
|
||||
# raises a RuntimeError as expected and falls through to the exception clause below.
|
||||
loop = asyncio.get_running_loop()
|
||||
except RuntimeError:
|
||||
loop = asyncio.new_event_loop()
|
||||
asyncio.set_event_loop(loop)
|
||||
|
||||
# Configure the event loop to respect the parallelism value provided as input.
|
||||
_set_default_executor(loop, settings.parallel)
|
||||
|
||||
# We are (unfortunately) suppressing the log output of asyncio to avoid showing to users some of the bad things we
|
||||
# do in our programming model.
|
||||
#
|
||||
# Fundamentally, Pulumi is a way for users to build asynchronous dataflow graphs that, as their deployments
|
||||
# progress, resolve naturally and eventually result in the complete resolution of the graph. If one node in the
|
||||
# graph fails (i.e. a resource fails to create, there's an exception in an apply, etc.), part of the graph remains
|
||||
# unevaluated at the time that we exit.
|
||||
#
|
||||
# asyncio abhors this. It gets very upset if the process terminates without having observed every future that we
|
||||
# have resolved. If we are terminating abnormally, it is highly likely that we are not going to observe every single
|
||||
# future that we have created. Furthermore, it's *harmless* to do this - asyncio logs errors because it thinks it
|
||||
# needs to tell users that they're doing bad things (which, to their credit, they are), but we are doing this
|
||||
# deliberately.
|
||||
#
|
||||
# In order to paper over this for our users, we simply turn off the logger for asyncio. Users won't see any asyncio
|
||||
# error messages, but if they stick to the Pulumi programming model, they wouldn't be seeing any anyway.
|
||||
logging.getLogger("asyncio").setLevel(logging.CRITICAL)
|
||||
exit_code = 1
|
||||
try:
|
||||
# record the location of the user's program to return user tracebacks
|
||||
user_program_abspath = os.path.abspath(args.PROGRAM)
|
||||
def run():
|
||||
try:
|
||||
runpy.run_path(args.PROGRAM, run_name='__main__')
|
||||
except ImportError as e:
|
||||
def fix_module_file(m: str) -> str:
|
||||
# Work around python 11 reporting "<frozen runpy>" rather
|
||||
# than runpy.__file__ in the traceback.
|
||||
return runpy.__file__ if m == "<frozen runpy>" else m
|
||||
|
||||
# detect if the main pulumi python program does not exist
|
||||
stack_modules = [fix_module_file(f.filename) for f in traceback.extract_tb(e.__traceback__)]
|
||||
unique_modules = set(module for module in stack_modules)
|
||||
last_module_name = stack_modules[-1]
|
||||
|
||||
# we identify a missing program error if
|
||||
# 1. the only modules in the stack trace are
|
||||
# - `pulumi-language-python-exec`
|
||||
# - `runpy`
|
||||
# 2. the last function in the stack trace is in the `runpy` module
|
||||
if unique_modules == {
|
||||
__file__, # the language runtime itself
|
||||
runpy.__file__,
|
||||
} and last_module_name == runpy.__file__ :
|
||||
# this error will only be hit when the user provides a directory
|
||||
# the engine has a check to determine if the `main` file exists and will fail early
|
||||
|
||||
# if a language runtime receives a directory, it's the language's responsibility to determine
|
||||
# whether the provided directory has a pulumi program
|
||||
pulumi.log.error(f"unable to find main python program `__main__.py` in `{user_program_abspath}`")
|
||||
sys.exit(PYTHON_PROCESS_EXITED_AFTER_SHOWING_USER_ACTIONABLE_MESSAGE_CODE)
|
||||
else:
|
||||
raise e
|
||||
|
||||
coro = pulumi.runtime.run_in_stack(run)
|
||||
loop.run_until_complete(coro)
|
||||
exit_code = 0
|
||||
except pulumi.RunError as e:
|
||||
pulumi.log.error(str(e))
|
||||
except Exception:
|
||||
error_msg = "Program failed with an unhandled exception:\n" + _get_user_stacktrace(user_program_abspath)
|
||||
pulumi.log.error(error_msg)
|
||||
exit_code = PYTHON_PROCESS_EXITED_AFTER_SHOWING_USER_ACTIONABLE_MESSAGE_CODE
|
||||
finally:
|
||||
loop.close()
|
||||
sys.stdout.flush()
|
||||
sys.stderr.flush()
|
||||
|
||||
sys.exit(exit_code)
|
||||
216
docs/generate.go
Normal file
216
docs/generate.go
Normal file
@@ -0,0 +1,216 @@
|
||||
// Copyright 2024, Pulumi Corporation.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:generate go run generate.go yaml ../provider/internal/embed
|
||||
|
||||
// Package main ingests a multi-document YAML file and converts it into
|
||||
// Markdown examples.
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
|
||||
"github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"
|
||||
)
|
||||
|
||||
func main() {
|
||||
if len(os.Args) < 3 {
|
||||
_, _ = fmt.Fprintf(os.Stdout, "Usage: %s <yaml source dir path> <markdown destination path>\n", os.Args[0])
|
||||
os.Exit(1)
|
||||
}
|
||||
yamlPath := os.Args[1]
|
||||
mdPath := os.Args[2]
|
||||
|
||||
if !filepath.IsAbs(yamlPath) {
|
||||
cwd, err := os.Getwd()
|
||||
contract.AssertNoErrorf(err, "getting working directory")
|
||||
yamlPath = filepath.Join(cwd, yamlPath)
|
||||
}
|
||||
|
||||
if err := os.MkdirAll(mdPath, 0o750); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fileInfo, err := os.Lstat(mdPath)
|
||||
if err != nil || !fileInfo.IsDir() {
|
||||
fmt.Fprintf(os.Stderr, "Expect markdown destination %q to be a directory\n", mdPath)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
yamlFiles, err := os.ReadDir(yamlPath)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
for _, yamlFile := range yamlFiles {
|
||||
if err := processYaml(filepath.Join(yamlPath, yamlFile.Name()), mdPath); err != nil {
|
||||
log.Fatal(fmt.Errorf("processing %q: %w", yamlFile.Name(), err))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func markdownExamples(examples []string) string {
|
||||
s := "{{% examples %}}\n## Example Usage\n"
|
||||
for _, example := range examples {
|
||||
s += example
|
||||
}
|
||||
s += "{{% /examples %}}"
|
||||
return s
|
||||
}
|
||||
|
||||
func markdownExample(description string,
|
||||
typescript string,
|
||||
python string,
|
||||
csharp string,
|
||||
golang string,
|
||||
yaml string,
|
||||
java string,
|
||||
) string {
|
||||
return fmt.Sprintf("{{%% example %%}}\n### %s\n\n"+
|
||||
"```typescript\n%s```\n"+
|
||||
"```python\n%s```\n"+
|
||||
"```csharp\n%s```\n"+
|
||||
"```go\n%s```\n"+
|
||||
"```yaml\n%s```\n"+
|
||||
"```java\n%s```\n"+
|
||||
"{{%% /example %%}}\n",
|
||||
description, typescript, python, csharp, golang, yaml, java)
|
||||
}
|
||||
|
||||
func convert(language, tempDir, programFile string) (string, error) {
|
||||
exampleDir := filepath.Join(tempDir, "example"+language)
|
||||
//nolint:gosec // No user-provided input.
|
||||
cmd := exec.Command(
|
||||
"pulumi",
|
||||
"convert",
|
||||
"--language",
|
||||
language,
|
||||
"--out",
|
||||
filepath.Clean(filepath.Join(tempDir, exampleDir)),
|
||||
"--generate-only",
|
||||
)
|
||||
|
||||
cmd.Stderr = os.Stderr
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Dir = tempDir
|
||||
if err := cmd.Run(); err != nil {
|
||||
return "", fmt.Errorf("converting: %w", err)
|
||||
}
|
||||
content, err := os.ReadFile(filepath.Clean(filepath.Join(tempDir, exampleDir, programFile)))
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("reading: %w", err)
|
||||
}
|
||||
|
||||
return string(content), nil
|
||||
}
|
||||
|
||||
func processYaml(path, mdDir string) error {
|
||||
yamlFile, err := os.Open(filepath.Clean(path))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
base := filepath.Base(path)
|
||||
md := strings.NewReplacer(".yaml", ".md", ".yml", ".md").Replace(base)
|
||||
|
||||
defer contract.IgnoreClose(yamlFile)
|
||||
decoder := yaml.NewDecoder(yamlFile)
|
||||
exampleStrings := []string{}
|
||||
for {
|
||||
keepGoing, err := func() (bool, error) {
|
||||
example := map[string]interface{}{}
|
||||
err := decoder.Decode(&example)
|
||||
if err == io.EOF {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
description, ok := example["description"].(string)
|
||||
if !ok {
|
||||
description = ""
|
||||
}
|
||||
dir, err := os.MkdirTemp("", "")
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
defer func() {
|
||||
contract.IgnoreError(os.RemoveAll(dir))
|
||||
}()
|
||||
|
||||
src, err := os.OpenFile(filepath.Clean(filepath.Join(dir, "Pulumi.yaml")), os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o600)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
fmt.Println("Converting:", example)
|
||||
|
||||
if err := yaml.NewEncoder(src).Encode(example); err != nil {
|
||||
return false, err
|
||||
}
|
||||
contract.AssertNoErrorf(src.Close(), "closing")
|
||||
|
||||
typescript, err := convert("typescript", dir, "index.ts")
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
python, err := convert("python", dir, "__main__.py")
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
csharp, err := convert("csharp", dir, "Program.cs")
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
golang, err := convert("go", dir, "main.go")
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
java, err := convert("java", dir, "src/main/java/generated_program/App.java")
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
yamlContent, err := os.ReadFile(filepath.Clean(filepath.Join(dir, "Pulumi.yaml")))
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
yaml := string(yamlContent)
|
||||
|
||||
exampleStrings = append(exampleStrings, markdownExample(description, typescript, python, csharp, golang, yaml, java))
|
||||
|
||||
return true, nil
|
||||
}()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !keepGoing {
|
||||
break
|
||||
}
|
||||
}
|
||||
_, _ = fmt.Fprintf(os.Stdout, "Writing %s\n", filepath.Join(mdDir, md))
|
||||
f, err := os.OpenFile(filepath.Clean(filepath.Join(mdDir, md)), os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o600)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer contract.IgnoreClose(f)
|
||||
_, err = f.WriteString(markdownExamples(exampleStrings))
|
||||
contract.AssertNoErrorf(err, "writing examples")
|
||||
return nil
|
||||
}
|
||||
190
docs/yaml/image-examples.yaml
Normal file
190
docs/yaml/image-examples.yaml
Normal file
@@ -0,0 +1,190 @@
|
||||
name: ecr
|
||||
description: Push to AWS ECR with caching
|
||||
outputs:
|
||||
ref: ${my-image.ref}
|
||||
resources:
|
||||
ecr-repository:
|
||||
type: aws:ecr:Repository
|
||||
my-image:
|
||||
type: docker-build:Image
|
||||
properties:
|
||||
tags:
|
||||
- ${ecr-repository.repositoryUrl}:latest
|
||||
push: true
|
||||
context:
|
||||
location: ./app
|
||||
cacheFrom:
|
||||
- registry:
|
||||
ref: ${ecr-repository.repositoryUrl}:cache
|
||||
cacheTo:
|
||||
- registry:
|
||||
ref: ${ecr-repository.repositoryUrl}:cache
|
||||
imageManifest: true
|
||||
ociMediaTypes: true
|
||||
registries:
|
||||
- username: ${auth-token.userName}
|
||||
password: ${auth-token.password}
|
||||
address: ${ecr-repository.repositoryUrl}
|
||||
runtime: yaml
|
||||
variables:
|
||||
auth-token:
|
||||
fn::aws:ecr:getAuthorizationToken:
|
||||
registryId: ${ecr-repository.registryId}
|
||||
---
|
||||
name: multi-platform
|
||||
runtime: yaml
|
||||
description: Multi-platform image
|
||||
resources:
|
||||
image:
|
||||
type: docker-build:Image
|
||||
properties:
|
||||
context:
|
||||
location: "app"
|
||||
platforms:
|
||||
- plan9/amd64
|
||||
- plan9/386
|
||||
push: false
|
||||
---
|
||||
name: registry
|
||||
runtime: yaml
|
||||
description: Registry export
|
||||
resources:
|
||||
image:
|
||||
type: docker-build:Image
|
||||
properties:
|
||||
tags:
|
||||
- "docker.io/pulumi/pulumi:3.107.0"
|
||||
context:
|
||||
location: "app"
|
||||
push: true
|
||||
registries:
|
||||
- address: docker.io
|
||||
username: pulumibot
|
||||
password: ${dockerHubPassword}
|
||||
outputs:
|
||||
ref: ${my-image.ref}
|
||||
---
|
||||
name: caching
|
||||
runtime: yaml
|
||||
description: Caching
|
||||
resources:
|
||||
image:
|
||||
type: docker-build:Image
|
||||
properties:
|
||||
context:
|
||||
location: "app"
|
||||
cacheTo:
|
||||
- local:
|
||||
dest: tmp/cache
|
||||
mode: max
|
||||
cacheFrom:
|
||||
- local:
|
||||
src: tmp/cache
|
||||
push: false
|
||||
---
|
||||
name: dbc
|
||||
runtime: yaml
|
||||
description: Docker Build Cloud
|
||||
resources:
|
||||
image:
|
||||
type: docker-build:Image
|
||||
properties:
|
||||
context:
|
||||
location: "app"
|
||||
exec: true
|
||||
builder:
|
||||
name: cloud-builder-name
|
||||
push: false
|
||||
---
|
||||
name: build-args
|
||||
runtime: yaml
|
||||
description: Build arguments
|
||||
resources:
|
||||
image:
|
||||
type: docker-build:Image
|
||||
properties:
|
||||
context:
|
||||
location: "app"
|
||||
buildArgs:
|
||||
SET_ME_TO_TRUE: "true"
|
||||
push: false
|
||||
---
|
||||
name: build-target
|
||||
runtime: yaml
|
||||
description: Build target
|
||||
resources:
|
||||
image:
|
||||
type: docker-build:Image
|
||||
properties:
|
||||
context:
|
||||
location: "app"
|
||||
target: "build-me"
|
||||
push: false
|
||||
---
|
||||
name: named-contexts
|
||||
runtime: yaml
|
||||
description: Named contexts
|
||||
resources:
|
||||
image:
|
||||
type: docker-build:Image
|
||||
properties:
|
||||
context:
|
||||
location: app
|
||||
named:
|
||||
"golang:latest":
|
||||
location: "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"
|
||||
push: false
|
||||
---
|
||||
name: remote-context
|
||||
runtime: yaml
|
||||
description: Remote context
|
||||
resources:
|
||||
image:
|
||||
type: docker-build:Image
|
||||
properties:
|
||||
context:
|
||||
location: "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"
|
||||
push: false
|
||||
|
||||
---
|
||||
name: inline
|
||||
runtime: yaml
|
||||
description: Inline Dockerfile
|
||||
resources:
|
||||
image:
|
||||
type: docker-build:Image
|
||||
properties:
|
||||
dockerfile:
|
||||
inline: |
|
||||
FROM busybox
|
||||
COPY hello.c ./
|
||||
context:
|
||||
location: "app"
|
||||
push: false
|
||||
---
|
||||
name: remote-context
|
||||
runtime: yaml
|
||||
description: Remote context
|
||||
resources:
|
||||
image:
|
||||
type: docker-build:Image
|
||||
properties:
|
||||
dockerfile:
|
||||
location: app/Dockerfile
|
||||
context:
|
||||
location: "https://github.com/docker-library/hello-world.git"
|
||||
push: false
|
||||
---
|
||||
name: docker-load
|
||||
runtime: yaml
|
||||
description: Local export
|
||||
resources:
|
||||
image:
|
||||
type: docker-build:Image
|
||||
properties:
|
||||
context:
|
||||
location: "app"
|
||||
exports:
|
||||
- docker:
|
||||
tar: true
|
||||
push: false
|
||||
48
docs/yaml/index-examples.yaml
Normal file
48
docs/yaml/index-examples.yaml
Normal file
@@ -0,0 +1,48 @@
|
||||
name: registry-caching
|
||||
description: Multi-platform registry caching
|
||||
runtime: yaml
|
||||
resources:
|
||||
arm64:
|
||||
type: docker-build:Image
|
||||
properties:
|
||||
context:
|
||||
location: "app"
|
||||
platforms:
|
||||
- linux/arm64
|
||||
tags:
|
||||
- "docker.io/pulumi/pulumi:3.107.0-arm64"
|
||||
cacheTo:
|
||||
- registry:
|
||||
ref: "docker.io/pulumi/pulumi:cache-arm64"
|
||||
mode: max
|
||||
cacheFrom:
|
||||
- registry:
|
||||
ref: "docker.io/pulumi/pulumi:cache-arm64"
|
||||
|
||||
amd64:
|
||||
type: docker-build:Image
|
||||
properties:
|
||||
context:
|
||||
location: "app"
|
||||
platforms:
|
||||
- linux/amd64
|
||||
tags:
|
||||
- "docker.io/pulumi/pulumi:3.107.0-amd64"
|
||||
cacheTo:
|
||||
- registry:
|
||||
ref: "docker.io/pulumi/pulumi:cache-amd64"
|
||||
mode: max
|
||||
cacheFrom:
|
||||
- registry:
|
||||
ref: "docker.io/pulumi/pulumi:cache-amd64"
|
||||
|
||||
index:
|
||||
type: docker-build:Index
|
||||
properties:
|
||||
tag: "docker.io/pulumi/pulumi:3.107.0"
|
||||
sources:
|
||||
- ${amd64.ref}
|
||||
- ${arm64.ref}
|
||||
|
||||
outputs:
|
||||
ref: ${index.ref}
|
||||
2
examples/app/Dockerfile
Normal file
2
examples/app/Dockerfile
Normal file
@@ -0,0 +1,2 @@
|
||||
FROM alpine
|
||||
RUN echo 👍
|
||||
5
examples/app/Dockerfile.buildArgs
Normal file
5
examples/app/Dockerfile.buildArgs
Normal file
@@ -0,0 +1,5 @@
|
||||
FROM alpine
|
||||
|
||||
ARG SET_ME_TO_TRUE
|
||||
RUN [ "$SET_ME_TO_TRUE" = "true" ]
|
||||
RUN echo "That's the correct build arg, thanks! 👍"
|
||||
2
examples/app/Dockerfile.emptyContext
Normal file
2
examples/app/Dockerfile.emptyContext
Normal file
@@ -0,0 +1,2 @@
|
||||
FROM alpine
|
||||
RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
|
||||
3
examples/app/Dockerfile.extraHosts
Normal file
3
examples/app/Dockerfile.extraHosts
Normal file
@@ -0,0 +1,3 @@
|
||||
FROM bash AS base
|
||||
|
||||
RUN getent hosts metadata.google.internal
|
||||
7
examples/app/Dockerfile.multiPlatform
Normal file
7
examples/app/Dockerfile.multiPlatform
Normal file
@@ -0,0 +1,7 @@
|
||||
FROM --platform=$BUILDPLATFORM alpine as build
|
||||
RUN echo ${BUILDPLATFORM} > buildplatform
|
||||
RUN echo ${TARGETPLATFORM} > targetplatform
|
||||
|
||||
FROM build
|
||||
RUN cat buildplatform
|
||||
RUN cat targetplatform
|
||||
5
examples/app/Dockerfile.namedContexts
Normal file
5
examples/app/Dockerfile.namedContexts
Normal file
@@ -0,0 +1,5 @@
|
||||
# syntax=docker/dockerfile:1.4
|
||||
FROM golang:latest
|
||||
|
||||
RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
|
||||
RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
|
||||
4
examples/app/Dockerfile.secrets
Normal file
4
examples/app/Dockerfile.secrets
Normal file
@@ -0,0 +1,4 @@
|
||||
FROM alpine
|
||||
|
||||
RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
|
||||
|
||||
5
examples/app/Dockerfile.sshMount
Normal file
5
examples/app/Dockerfile.sshMount
Normal file
@@ -0,0 +1,5 @@
|
||||
FROM alpine
|
||||
|
||||
RUN apk add openssh-client
|
||||
|
||||
RUN --mount=type=ssh ssh-add -l
|
||||
8
examples/app/Dockerfile.target
Normal file
8
examples/app/Dockerfile.target
Normal file
@@ -0,0 +1,8 @@
|
||||
FROM alpine as build-me
|
||||
RUN echo 👍
|
||||
|
||||
FROM build-me as also-build-me
|
||||
RUN echo 🤙
|
||||
|
||||
FROM build-me as dont-build-me
|
||||
RUN [ "true" = "false" ]
|
||||
2
examples/dotnet/.dockerignore
Normal file
2
examples/dotnet/.dockerignore
Normal file
@@ -0,0 +1,2 @@
|
||||
command-output
|
||||
tmp
|
||||
@@ -1,18 +1,268 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Pulumi;
|
||||
using Dockerbuild = Pulumi.Dockerbuild;
|
||||
using DockerBuild = Pulumi.DockerBuild;
|
||||
|
||||
return await Deployment.RunAsync(() =>
|
||||
{
|
||||
var myRandomResource = new Dockerbuild.Random("myRandomResource", new()
|
||||
var config = new Config();
|
||||
var dockerHubPassword = config.Require("dockerHubPassword");
|
||||
var multiPlatform = new DockerBuild.Image("multiPlatform", new()
|
||||
{
|
||||
Length = 24,
|
||||
Push = false,
|
||||
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||
{
|
||||
Location = "./app/Dockerfile.multiPlatform",
|
||||
},
|
||||
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||
{
|
||||
Location = "./app",
|
||||
},
|
||||
Platforms = new[]
|
||||
{
|
||||
DockerBuild.Platform.Plan9_amd64,
|
||||
DockerBuild.Platform.Plan9_386,
|
||||
},
|
||||
});
|
||||
|
||||
var registryPush = new DockerBuild.Image("registryPush", new()
|
||||
{
|
||||
Push = false,
|
||||
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||
{
|
||||
Location = "./app",
|
||||
},
|
||||
Tags = new[]
|
||||
{
|
||||
"docker.io/pulumibot/buildkit-e2e:example",
|
||||
},
|
||||
Exports = new[]
|
||||
{
|
||||
new DockerBuild.Inputs.ExportArgs
|
||||
{
|
||||
Registry = new DockerBuild.Inputs.ExportRegistryArgs
|
||||
{
|
||||
OciMediaTypes = true,
|
||||
Push = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
Registries = new[]
|
||||
{
|
||||
new DockerBuild.Inputs.RegistryArgs
|
||||
{
|
||||
Address = "docker.io",
|
||||
Username = "pulumibot",
|
||||
Password = dockerHubPassword,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
var cached = new DockerBuild.Image("cached", new()
|
||||
{
|
||||
Push = false,
|
||||
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||
{
|
||||
Location = "./app",
|
||||
},
|
||||
CacheTo = new[]
|
||||
{
|
||||
new DockerBuild.Inputs.CacheToArgs
|
||||
{
|
||||
Local = new DockerBuild.Inputs.CacheToLocalArgs
|
||||
{
|
||||
Dest = "tmp/cache",
|
||||
Mode = DockerBuild.CacheMode.Max,
|
||||
},
|
||||
},
|
||||
},
|
||||
CacheFrom = new[]
|
||||
{
|
||||
new DockerBuild.Inputs.CacheFromArgs
|
||||
{
|
||||
Local = new DockerBuild.Inputs.CacheFromLocalArgs
|
||||
{
|
||||
Src = "tmp/cache",
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
var buildArgs = new DockerBuild.Image("buildArgs", new()
|
||||
{
|
||||
Push = false,
|
||||
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||
{
|
||||
Location = "./app/Dockerfile.buildArgs",
|
||||
},
|
||||
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||
{
|
||||
Location = "./app",
|
||||
},
|
||||
BuildArgs =
|
||||
{
|
||||
{ "SET_ME_TO_TRUE", "true" },
|
||||
},
|
||||
});
|
||||
|
||||
var extraHosts = new DockerBuild.Image("extraHosts", new()
|
||||
{
|
||||
Push = false,
|
||||
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||
{
|
||||
Location = "./app/Dockerfile.extraHosts",
|
||||
},
|
||||
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||
{
|
||||
Location = "./app",
|
||||
},
|
||||
AddHosts = new[]
|
||||
{
|
||||
"metadata.google.internal:169.254.169.254",
|
||||
},
|
||||
});
|
||||
|
||||
var sshMount = new DockerBuild.Image("sshMount", new()
|
||||
{
|
||||
Push = false,
|
||||
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||
{
|
||||
Location = "./app/Dockerfile.sshMount",
|
||||
},
|
||||
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||
{
|
||||
Location = "./app",
|
||||
},
|
||||
Ssh = new[]
|
||||
{
|
||||
new DockerBuild.Inputs.SSHArgs
|
||||
{
|
||||
Id = "default",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
var secrets = new DockerBuild.Image("secrets", new()
|
||||
{
|
||||
Push = false,
|
||||
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||
{
|
||||
Location = "./app/Dockerfile.secrets",
|
||||
},
|
||||
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||
{
|
||||
Location = "./app",
|
||||
},
|
||||
Secrets =
|
||||
{
|
||||
{ "password", "hunter2" },
|
||||
},
|
||||
});
|
||||
|
||||
var labels = new DockerBuild.Image("labels", new()
|
||||
{
|
||||
Push = false,
|
||||
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||
{
|
||||
Location = "./app",
|
||||
},
|
||||
Labels =
|
||||
{
|
||||
{ "description", "This image will get a descriptive label 👍" },
|
||||
},
|
||||
});
|
||||
|
||||
var target = new DockerBuild.Image("target", new()
|
||||
{
|
||||
Push = false,
|
||||
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||
{
|
||||
Location = "./app/Dockerfile.target",
|
||||
},
|
||||
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||
{
|
||||
Location = "./app",
|
||||
},
|
||||
Target = "build-me",
|
||||
});
|
||||
|
||||
var namedContexts = new DockerBuild.Image("namedContexts", new()
|
||||
{
|
||||
Push = false,
|
||||
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||
{
|
||||
Location = "./app/Dockerfile.namedContexts",
|
||||
},
|
||||
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||
{
|
||||
Location = "./app",
|
||||
Named =
|
||||
{
|
||||
{ "golang:latest", new DockerBuild.Inputs.ContextArgs
|
||||
{
|
||||
Location = "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984",
|
||||
} },
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
var remoteContext = new DockerBuild.Image("remoteContext", new()
|
||||
{
|
||||
Push = false,
|
||||
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||
{
|
||||
Location = "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
|
||||
},
|
||||
});
|
||||
|
||||
var remoteContextWithInline = new DockerBuild.Image("remoteContextWithInline", new()
|
||||
{
|
||||
Push = false,
|
||||
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||
{
|
||||
Inline = @"FROM busybox
|
||||
COPY hello.c ./
|
||||
",
|
||||
},
|
||||
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||
{
|
||||
Location = "https://github.com/docker-library/hello-world.git",
|
||||
},
|
||||
});
|
||||
|
||||
var inline = new DockerBuild.Image("inline", new()
|
||||
{
|
||||
Push = false,
|
||||
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||
{
|
||||
Inline = @"FROM alpine
|
||||
RUN echo ""This uses an inline Dockerfile! 👍""
|
||||
",
|
||||
},
|
||||
});
|
||||
|
||||
var dockerLoad = new DockerBuild.Image("dockerLoad", new()
|
||||
{
|
||||
Push = false,
|
||||
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||
{
|
||||
Location = "./app",
|
||||
},
|
||||
Exports = new[]
|
||||
{
|
||||
new DockerBuild.Inputs.ExportArgs
|
||||
{
|
||||
Docker = new DockerBuild.Inputs.ExportDockerArgs
|
||||
{
|
||||
Tar = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
return new Dictionary<string, object?>
|
||||
{
|
||||
["value"] = myRandomResource.Result,
|
||||
["platforms"] = multiPlatform.Platforms,
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
name: provider-dockerbuild
|
||||
name: provider-docker-build
|
||||
runtime: dotnet
|
||||
config:
|
||||
dockerHubPassword:
|
||||
type: string
|
||||
secret: true
|
||||
plugins:
|
||||
providers:
|
||||
- name: dockerbuild
|
||||
- name: docker-build
|
||||
path: ../../bin
|
||||
|
||||
2
examples/dotnet/app/Dockerfile
Normal file
2
examples/dotnet/app/Dockerfile
Normal file
@@ -0,0 +1,2 @@
|
||||
FROM alpine
|
||||
RUN echo 👍
|
||||
5
examples/dotnet/app/Dockerfile.buildArgs
Normal file
5
examples/dotnet/app/Dockerfile.buildArgs
Normal file
@@ -0,0 +1,5 @@
|
||||
FROM alpine
|
||||
|
||||
ARG SET_ME_TO_TRUE
|
||||
RUN [ "$SET_ME_TO_TRUE" = "true" ]
|
||||
RUN echo "That's the correct build arg, thanks! 👍"
|
||||
2
examples/dotnet/app/Dockerfile.emptyContext
Normal file
2
examples/dotnet/app/Dockerfile.emptyContext
Normal file
@@ -0,0 +1,2 @@
|
||||
FROM alpine
|
||||
RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
|
||||
3
examples/dotnet/app/Dockerfile.extraHosts
Normal file
3
examples/dotnet/app/Dockerfile.extraHosts
Normal file
@@ -0,0 +1,3 @@
|
||||
FROM bash AS base
|
||||
|
||||
RUN getent hosts metadata.google.internal
|
||||
7
examples/dotnet/app/Dockerfile.multiPlatform
Normal file
7
examples/dotnet/app/Dockerfile.multiPlatform
Normal file
@@ -0,0 +1,7 @@
|
||||
FROM --platform=$BUILDPLATFORM alpine as build
|
||||
RUN echo ${BUILDPLATFORM} > buildplatform
|
||||
RUN echo ${TARGETPLATFORM} > targetplatform
|
||||
|
||||
FROM build
|
||||
RUN cat buildplatform
|
||||
RUN cat targetplatform
|
||||
5
examples/dotnet/app/Dockerfile.namedContexts
Normal file
5
examples/dotnet/app/Dockerfile.namedContexts
Normal file
@@ -0,0 +1,5 @@
|
||||
# syntax=docker/dockerfile:1.4
|
||||
FROM golang:latest
|
||||
|
||||
RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
|
||||
RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
|
||||
4
examples/dotnet/app/Dockerfile.secrets
Normal file
4
examples/dotnet/app/Dockerfile.secrets
Normal file
@@ -0,0 +1,4 @@
|
||||
FROM alpine
|
||||
|
||||
RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
|
||||
|
||||
5
examples/dotnet/app/Dockerfile.sshMount
Normal file
5
examples/dotnet/app/Dockerfile.sshMount
Normal file
@@ -0,0 +1,5 @@
|
||||
FROM alpine
|
||||
|
||||
RUN apk add openssh-client
|
||||
|
||||
RUN --mount=type=ssh ssh-add -l
|
||||
8
examples/dotnet/app/Dockerfile.target
Normal file
8
examples/dotnet/app/Dockerfile.target
Normal file
@@ -0,0 +1,8 @@
|
||||
FROM alpine as build-me
|
||||
RUN echo 👍
|
||||
|
||||
FROM build-me as also-build-me
|
||||
RUN echo 🤙
|
||||
|
||||
FROM build-me as dont-build-me
|
||||
RUN [ "true" = "false" ]
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Pulumi" Version="3.*" />
|
||||
<PackageReference Include="Pulumi.Dockerbuild" Version="*" />
|
||||
<PackageReference Include="Pulumi.DockerBuild" Version="0.0.2-alpha.1712594380+4cd6d49b.dirty" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -27,7 +27,7 @@ func TestDotNetExample(t *testing.T) {
|
||||
test := integration.ProgramTestOptions{
|
||||
Dir: path.Join(cwd, "dotnet"),
|
||||
Dependencies: []string{
|
||||
"Pulumi.Dockerbuild",
|
||||
"Pulumi.DockerBuild",
|
||||
},
|
||||
Secrets: map[string]string{
|
||||
"dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
|
||||
|
||||
2
examples/go/.dockerignore
Normal file
2
examples/go/.dockerignore
Normal file
@@ -0,0 +1,2 @@
|
||||
command-output
|
||||
tmp
|
||||
@@ -1,6 +1,10 @@
|
||||
name: provider-dockerbuild
|
||||
name: provider-docker-build
|
||||
runtime: go
|
||||
config:
|
||||
dockerHubPassword:
|
||||
type: string
|
||||
secret: true
|
||||
plugins:
|
||||
providers:
|
||||
- name: dockerbuild
|
||||
- name: docker-build
|
||||
path: ../../bin
|
||||
|
||||
2
examples/go/app/Dockerfile
Normal file
2
examples/go/app/Dockerfile
Normal file
@@ -0,0 +1,2 @@
|
||||
FROM alpine
|
||||
RUN echo 👍
|
||||
5
examples/go/app/Dockerfile.buildArgs
Normal file
5
examples/go/app/Dockerfile.buildArgs
Normal file
@@ -0,0 +1,5 @@
|
||||
FROM alpine
|
||||
|
||||
ARG SET_ME_TO_TRUE
|
||||
RUN [ "$SET_ME_TO_TRUE" = "true" ]
|
||||
RUN echo "That's the correct build arg, thanks! 👍"
|
||||
2
examples/go/app/Dockerfile.emptyContext
Normal file
2
examples/go/app/Dockerfile.emptyContext
Normal file
@@ -0,0 +1,2 @@
|
||||
FROM alpine
|
||||
RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
|
||||
3
examples/go/app/Dockerfile.extraHosts
Normal file
3
examples/go/app/Dockerfile.extraHosts
Normal file
@@ -0,0 +1,3 @@
|
||||
FROM bash AS base
|
||||
|
||||
RUN getent hosts metadata.google.internal
|
||||
7
examples/go/app/Dockerfile.multiPlatform
Normal file
7
examples/go/app/Dockerfile.multiPlatform
Normal file
@@ -0,0 +1,7 @@
|
||||
FROM --platform=$BUILDPLATFORM alpine as build
|
||||
RUN echo ${BUILDPLATFORM} > buildplatform
|
||||
RUN echo ${TARGETPLATFORM} > targetplatform
|
||||
|
||||
FROM build
|
||||
RUN cat buildplatform
|
||||
RUN cat targetplatform
|
||||
5
examples/go/app/Dockerfile.namedContexts
Normal file
5
examples/go/app/Dockerfile.namedContexts
Normal file
@@ -0,0 +1,5 @@
|
||||
# syntax=docker/dockerfile:1.4
|
||||
FROM golang:latest
|
||||
|
||||
RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
|
||||
RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
|
||||
4
examples/go/app/Dockerfile.secrets
Normal file
4
examples/go/app/Dockerfile.secrets
Normal file
@@ -0,0 +1,4 @@
|
||||
FROM alpine
|
||||
|
||||
RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
|
||||
|
||||
5
examples/go/app/Dockerfile.sshMount
Normal file
5
examples/go/app/Dockerfile.sshMount
Normal file
@@ -0,0 +1,5 @@
|
||||
FROM alpine
|
||||
|
||||
RUN apk add openssh-client
|
||||
|
||||
RUN --mount=type=ssh ssh-add -l
|
||||
8
examples/go/app/Dockerfile.target
Normal file
8
examples/go/app/Dockerfile.target
Normal file
@@ -0,0 +1,8 @@
|
||||
FROM alpine as build-me
|
||||
RUN echo 👍
|
||||
|
||||
FROM build-me as also-build-me
|
||||
RUN echo 🤙
|
||||
|
||||
FROM build-me as dont-build-me
|
||||
RUN [ "true" = "false" ]
|
||||
@@ -1,7 +1,94 @@
|
||||
module provider-dockerbuild
|
||||
module provider-docker-build
|
||||
|
||||
go 1.20
|
||||
go 1.21.7
|
||||
|
||||
toolchain go1.21.9
|
||||
|
||||
require (
|
||||
github.com/pulumi/pulumi/sdk/v3 v3.111.1
|
||||
github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.0-20240425180359-26c144c916b7
|
||||
github.com/pulumi/pulumi/sdk/v3 v3.136.1
|
||||
)
|
||||
|
||||
require (
|
||||
dario.cat/mergo v1.0.0 // indirect
|
||||
github.com/BurntSushi/toml v1.2.1 // indirect
|
||||
github.com/Microsoft/go-winio v0.6.1 // indirect
|
||||
github.com/ProtonMail/go-crypto v1.0.0 // 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.25.0 // 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.12.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/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.10.0 // 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.2-0.20230802210424-5b0b94c5c0d3 // indirect
|
||||
github.com/skeema/knownhosts v1.2.2 // 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/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.25.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 // indirect
|
||||
golang.org/x/mod v0.18.0 // indirect
|
||||
golang.org/x/net v0.27.0 // indirect
|
||||
golang.org/x/sync v0.7.0 // indirect
|
||||
golang.org/x/sys v0.22.0 // indirect
|
||||
golang.org/x/term v0.22.0 // indirect
|
||||
golang.org/x/text v0.16.0 // indirect
|
||||
golang.org/x/tools v0.22.0 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240311173647-c811ad7063a7 // indirect
|
||||
google.golang.org/grpc v1.63.2 // 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
|
||||
)
|
||||
|
||||
317
examples/go/go.sum
Normal file
317
examples/go/go.sum
Normal file
@@ -0,0 +1,317 @@
|
||||
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
|
||||
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
|
||||
github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
|
||||
github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
||||
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 v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78=
|
||||
github.com/ProtonMail/go-crypto v1.0.0/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.25.0 h1:bAfwk7jRz7FKFl9RzlIULPkStffg5k6pNt5dywy4TcM=
|
||||
github.com/charmbracelet/bubbletea v0.25.0/go.mod h1:EN3QDR1T5ZdWmdfDzYcqOCAps45+QIJbLOBxmVNWNNg=
|
||||
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.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE=
|
||||
github.com/gliderlabs/ssh v0.3.7/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8=
|
||||
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.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys=
|
||||
github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY=
|
||||
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.10.0 h1:jzBKzkLVW0mePeanDRfqSQoCJ5yrkux0jIwAkUxpRKE=
|
||||
github.com/pulumi/esc v0.10.0/go.mod h1:2Bfa+FWj/xl8CKqRTWbWgDX0SOD4opdQgvYSURTGK2c=
|
||||
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.136.1 h1:VJWTgdBrLvvzIkMbGq/epNEfT65P9gTvw14UF/I7hTI=
|
||||
github.com/pulumi/pulumi/sdk/v3 v3.136.1/go.mod h1:PvKsX88co8XuwuPdzolMvew5lZV+4JmZfkeSjj7A6dI=
|
||||
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.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
|
||||
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
|
||||
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A=
|
||||
github.com/skeema/knownhosts v1.2.2/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/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.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30=
|
||||
golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M=
|
||||
golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 h1:LoYXNGAShUG3m/ehNk4iFctuhGX/+R1ZpfJ4/ia80JM=
|
||||
golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI=
|
||||
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.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0=
|
||||
golang.org/x/mod v0.18.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.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys=
|
||||
golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=
|
||||
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.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
|
||||
golang.org/x/sync v0.7.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.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
|
||||
golang.org/x/sys v0.22.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.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk=
|
||||
golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4=
|
||||
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.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
|
||||
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
|
||||
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.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA=
|
||||
golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c=
|
||||
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.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
|
||||
google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
|
||||
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=
|
||||
@@ -1,19 +1,233 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild"
|
||||
"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
|
||||
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
|
||||
"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config"
|
||||
)
|
||||
|
||||
func main() {
|
||||
pulumi.Run(func(ctx *pulumi.Context) error {
|
||||
myRandomResource, err := dockerbuild.NewRandom(ctx, "myRandomResource", &dockerbuild.RandomArgs{
|
||||
Length: pulumi.Int(24),
|
||||
cfg := config.New(ctx, "")
|
||||
dockerHubPassword := cfg.Require("dockerHubPassword")
|
||||
multiPlatform, err := dockerbuild.NewImage(ctx, "multiPlatform", &dockerbuild.ImageArgs{
|
||||
Push: pulumi.Bool(false),
|
||||
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||
Location: pulumi.String("./app/Dockerfile.multiPlatform"),
|
||||
},
|
||||
Context: &dockerbuild.BuildContextArgs{
|
||||
Location: pulumi.String("./app"),
|
||||
},
|
||||
Platforms: dockerbuild.PlatformArray{
|
||||
dockerbuild.Platform_Plan9_amd64,
|
||||
dockerbuild.Platform_Plan9_386,
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
ctx.Export("value", myRandomResource.Result)
|
||||
_, err = dockerbuild.NewImage(ctx, "registryPush", &dockerbuild.ImageArgs{
|
||||
Push: pulumi.Bool(false),
|
||||
Context: &dockerbuild.BuildContextArgs{
|
||||
Location: pulumi.String("./app"),
|
||||
},
|
||||
Tags: pulumi.StringArray{
|
||||
pulumi.String("docker.io/pulumibot/buildkit-e2e:example"),
|
||||
},
|
||||
Exports: dockerbuild.ExportArray{
|
||||
&dockerbuild.ExportArgs{
|
||||
Registry: &dockerbuild.ExportRegistryArgs{
|
||||
OciMediaTypes: pulumi.Bool(true),
|
||||
Push: pulumi.Bool(false),
|
||||
},
|
||||
},
|
||||
},
|
||||
Registries: dockerbuild.RegistryArray{
|
||||
&dockerbuild.RegistryArgs{
|
||||
Address: pulumi.String("docker.io"),
|
||||
Username: pulumi.String("pulumibot"),
|
||||
Password: pulumi.String(dockerHubPassword),
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = dockerbuild.NewImage(ctx, "cached", &dockerbuild.ImageArgs{
|
||||
Push: pulumi.Bool(false),
|
||||
Context: &dockerbuild.BuildContextArgs{
|
||||
Location: pulumi.String("./app"),
|
||||
},
|
||||
CacheTo: dockerbuild.CacheToArray{
|
||||
&dockerbuild.CacheToArgs{
|
||||
Local: &dockerbuild.CacheToLocalArgs{
|
||||
Dest: pulumi.String("tmp/cache"),
|
||||
Mode: dockerbuild.CacheModeMax,
|
||||
},
|
||||
},
|
||||
},
|
||||
CacheFrom: dockerbuild.CacheFromArray{
|
||||
&dockerbuild.CacheFromArgs{
|
||||
Local: &dockerbuild.CacheFromLocalArgs{
|
||||
Src: pulumi.String("tmp/cache"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = dockerbuild.NewImage(ctx, "buildArgs", &dockerbuild.ImageArgs{
|
||||
Push: pulumi.Bool(false),
|
||||
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||
Location: pulumi.String("./app/Dockerfile.buildArgs"),
|
||||
},
|
||||
Context: &dockerbuild.BuildContextArgs{
|
||||
Location: pulumi.String("./app"),
|
||||
},
|
||||
BuildArgs: pulumi.StringMap{
|
||||
"SET_ME_TO_TRUE": pulumi.String("true"),
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = dockerbuild.NewImage(ctx, "extraHosts", &dockerbuild.ImageArgs{
|
||||
Push: pulumi.Bool(false),
|
||||
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||
Location: pulumi.String("./app/Dockerfile.extraHosts"),
|
||||
},
|
||||
Context: &dockerbuild.BuildContextArgs{
|
||||
Location: pulumi.String("./app"),
|
||||
},
|
||||
AddHosts: pulumi.StringArray{
|
||||
pulumi.String("metadata.google.internal:169.254.169.254"),
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = dockerbuild.NewImage(ctx, "sshMount", &dockerbuild.ImageArgs{
|
||||
Push: pulumi.Bool(false),
|
||||
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||
Location: pulumi.String("./app/Dockerfile.sshMount"),
|
||||
},
|
||||
Context: &dockerbuild.BuildContextArgs{
|
||||
Location: pulumi.String("./app"),
|
||||
},
|
||||
Ssh: dockerbuild.SSHArray{
|
||||
&dockerbuild.SSHArgs{
|
||||
Id: pulumi.String("default"),
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = dockerbuild.NewImage(ctx, "secrets", &dockerbuild.ImageArgs{
|
||||
Push: pulumi.Bool(false),
|
||||
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||
Location: pulumi.String("./app/Dockerfile.secrets"),
|
||||
},
|
||||
Context: &dockerbuild.BuildContextArgs{
|
||||
Location: pulumi.String("./app"),
|
||||
},
|
||||
Secrets: pulumi.StringMap{
|
||||
"password": pulumi.String("hunter2"),
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = dockerbuild.NewImage(ctx, "labels", &dockerbuild.ImageArgs{
|
||||
Push: pulumi.Bool(false),
|
||||
Context: &dockerbuild.BuildContextArgs{
|
||||
Location: pulumi.String("./app"),
|
||||
},
|
||||
Labels: pulumi.StringMap{
|
||||
"description": pulumi.String("This image will get a descriptive label 👍"),
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = dockerbuild.NewImage(ctx, "target", &dockerbuild.ImageArgs{
|
||||
Push: pulumi.Bool(false),
|
||||
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||
Location: pulumi.String("./app/Dockerfile.target"),
|
||||
},
|
||||
Context: &dockerbuild.BuildContextArgs{
|
||||
Location: pulumi.String("./app"),
|
||||
},
|
||||
Target: pulumi.String("build-me"),
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = dockerbuild.NewImage(ctx, "namedContexts", &dockerbuild.ImageArgs{
|
||||
Push: pulumi.Bool(false),
|
||||
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||
Location: pulumi.String("./app/Dockerfile.namedContexts"),
|
||||
},
|
||||
Context: &dockerbuild.BuildContextArgs{
|
||||
Location: pulumi.String("./app"),
|
||||
Named: dockerbuild.ContextMap{
|
||||
"golang:latest": &dockerbuild.ContextArgs{
|
||||
Location: pulumi.String("docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = dockerbuild.NewImage(ctx, "remoteContext", &dockerbuild.ImageArgs{
|
||||
Push: pulumi.Bool(false),
|
||||
Context: &dockerbuild.BuildContextArgs{
|
||||
Location: pulumi.String("https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"),
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = dockerbuild.NewImage(ctx, "remoteContextWithInline", &dockerbuild.ImageArgs{
|
||||
Push: pulumi.Bool(false),
|
||||
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||
Inline: pulumi.String("FROM busybox\nCOPY hello.c ./\n"),
|
||||
},
|
||||
Context: &dockerbuild.BuildContextArgs{
|
||||
Location: pulumi.String("https://github.com/docker-library/hello-world.git"),
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = dockerbuild.NewImage(ctx, "inline", &dockerbuild.ImageArgs{
|
||||
Push: pulumi.Bool(false),
|
||||
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||
Inline: pulumi.String("FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n"),
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = dockerbuild.NewImage(ctx, "dockerLoad", &dockerbuild.ImageArgs{
|
||||
Push: pulumi.Bool(false),
|
||||
Context: &dockerbuild.BuildContextArgs{
|
||||
Location: pulumi.String("./app"),
|
||||
},
|
||||
Exports: dockerbuild.ExportArray{
|
||||
&dockerbuild.ExportArgs{
|
||||
Docker: &dockerbuild.ExportDockerArgs{
|
||||
Tar: pulumi.Bool(true),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
ctx.Export("platforms", multiPlatform.Platforms)
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ func TestGoExample(t *testing.T) {
|
||||
test := integration.ProgramTestOptions{
|
||||
Dir: path.Join(cwd, "go"),
|
||||
Dependencies: []string{
|
||||
"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild=../sdk/go/dockerbuild",
|
||||
"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild=../sdk/go/dockerbuild",
|
||||
},
|
||||
Secrets: map[string]string{
|
||||
"dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
|
||||
|
||||
2
examples/java/.dockerignore
Normal file
2
examples/java/.dockerignore
Normal file
@@ -0,0 +1,2 @@
|
||||
command-output
|
||||
tmp
|
||||
@@ -1,6 +1,10 @@
|
||||
name: provider-dockerbuild
|
||||
name: provider-docker-build
|
||||
runtime: java
|
||||
config:
|
||||
dockerHubPassword:
|
||||
type: string
|
||||
secret: true
|
||||
plugins:
|
||||
providers:
|
||||
- name: dockerbuild
|
||||
- name: docker-build
|
||||
path: ../../bin
|
||||
|
||||
2
examples/java/app/Dockerfile
Normal file
2
examples/java/app/Dockerfile
Normal file
@@ -0,0 +1,2 @@
|
||||
FROM alpine
|
||||
RUN echo 👍
|
||||
5
examples/java/app/Dockerfile.buildArgs
Normal file
5
examples/java/app/Dockerfile.buildArgs
Normal file
@@ -0,0 +1,5 @@
|
||||
FROM alpine
|
||||
|
||||
ARG SET_ME_TO_TRUE
|
||||
RUN [ "$SET_ME_TO_TRUE" = "true" ]
|
||||
RUN echo "That's the correct build arg, thanks! 👍"
|
||||
2
examples/java/app/Dockerfile.emptyContext
Normal file
2
examples/java/app/Dockerfile.emptyContext
Normal file
@@ -0,0 +1,2 @@
|
||||
FROM alpine
|
||||
RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
|
||||
3
examples/java/app/Dockerfile.extraHosts
Normal file
3
examples/java/app/Dockerfile.extraHosts
Normal file
@@ -0,0 +1,3 @@
|
||||
FROM bash AS base
|
||||
|
||||
RUN getent hosts metadata.google.internal
|
||||
7
examples/java/app/Dockerfile.multiPlatform
Normal file
7
examples/java/app/Dockerfile.multiPlatform
Normal file
@@ -0,0 +1,7 @@
|
||||
FROM --platform=$BUILDPLATFORM alpine as build
|
||||
RUN echo ${BUILDPLATFORM} > buildplatform
|
||||
RUN echo ${TARGETPLATFORM} > targetplatform
|
||||
|
||||
FROM build
|
||||
RUN cat buildplatform
|
||||
RUN cat targetplatform
|
||||
5
examples/java/app/Dockerfile.namedContexts
Normal file
5
examples/java/app/Dockerfile.namedContexts
Normal file
@@ -0,0 +1,5 @@
|
||||
# syntax=docker/dockerfile:1.4
|
||||
FROM golang:latest
|
||||
|
||||
RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
|
||||
RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
|
||||
4
examples/java/app/Dockerfile.secrets
Normal file
4
examples/java/app/Dockerfile.secrets
Normal file
@@ -0,0 +1,4 @@
|
||||
FROM alpine
|
||||
|
||||
RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
|
||||
|
||||
5
examples/java/app/Dockerfile.sshMount
Normal file
5
examples/java/app/Dockerfile.sshMount
Normal file
@@ -0,0 +1,5 @@
|
||||
FROM alpine
|
||||
|
||||
RUN apk add openssh-client
|
||||
|
||||
RUN --mount=type=ssh ssh-add -l
|
||||
8
examples/java/app/Dockerfile.target
Normal file
8
examples/java/app/Dockerfile.target
Normal file
@@ -0,0 +1,8 @@
|
||||
FROM alpine as build-me
|
||||
RUN echo 👍
|
||||
|
||||
FROM build-me as also-build-me
|
||||
RUN echo 🤙
|
||||
|
||||
FROM build-me as dont-build-me
|
||||
RUN [ "true" = "false" ]
|
||||
@@ -5,7 +5,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.pulumi</groupId>
|
||||
<artifactId>provider-dockerbuild</artifactId>
|
||||
<artifactId>provider-docker-build</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
|
||||
<properties>
|
||||
@@ -25,7 +25,7 @@
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.pulumi</groupId>
|
||||
<artifactId>dockerbuild</artifactId>
|
||||
<artifactId>docker-build</artifactId>
|
||||
<version>[0.0.0,)</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
@@ -3,8 +3,19 @@ package generated_program;
|
||||
import com.pulumi.Context;
|
||||
import com.pulumi.Pulumi;
|
||||
import com.pulumi.core.Output;
|
||||
import com.pulumi.dockerbuild.Random;
|
||||
import com.pulumi.dockerbuild.RandomArgs;
|
||||
import com.pulumi.dockerbuild.Image;
|
||||
import com.pulumi.dockerbuild.ImageArgs;
|
||||
import com.pulumi.dockerbuild.inputs.DockerfileArgs;
|
||||
import com.pulumi.dockerbuild.inputs.BuildContextArgs;
|
||||
import com.pulumi.dockerbuild.inputs.ExportArgs;
|
||||
import com.pulumi.dockerbuild.inputs.ExportRegistryArgs;
|
||||
import com.pulumi.dockerbuild.inputs.RegistryArgs;
|
||||
import com.pulumi.dockerbuild.inputs.CacheToArgs;
|
||||
import com.pulumi.dockerbuild.inputs.CacheToLocalArgs;
|
||||
import com.pulumi.dockerbuild.inputs.CacheFromArgs;
|
||||
import com.pulumi.dockerbuild.inputs.CacheFromLocalArgs;
|
||||
import com.pulumi.dockerbuild.inputs.SSHArgs;
|
||||
import com.pulumi.dockerbuild.inputs.ExportDockerArgs;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
@@ -18,10 +29,176 @@ public class App {
|
||||
}
|
||||
|
||||
public static void stack(Context ctx) {
|
||||
var myRandomResource = new Random("myRandomResource", RandomArgs.builder()
|
||||
.length(24)
|
||||
final var config = ctx.config();
|
||||
final var dockerHubPassword = config.get("dockerHubPassword");
|
||||
var multiPlatform = new Image("multiPlatform", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.location("./app/Dockerfile.multiPlatform")
|
||||
.build())
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.platforms(
|
||||
"plan9/amd64",
|
||||
"plan9/386")
|
||||
.build());
|
||||
|
||||
ctx.export("value", myRandomResource.result());
|
||||
var registryPush = new Image("registryPush", ImageArgs.builder()
|
||||
.push(false)
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.tags("docker.io/pulumibot/buildkit-e2e:example")
|
||||
.exports(ExportArgs.builder()
|
||||
.registry(ExportRegistryArgs.builder()
|
||||
.ociMediaTypes(true)
|
||||
.push(false)
|
||||
.build())
|
||||
.build())
|
||||
.registries(RegistryArgs.builder()
|
||||
.address("docker.io")
|
||||
.username("pulumibot")
|
||||
.password(dockerHubPassword)
|
||||
.build())
|
||||
.build());
|
||||
|
||||
var cached = new Image("cached", ImageArgs.builder()
|
||||
.push(false)
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.cacheTo(CacheToArgs.builder()
|
||||
.local(CacheToLocalArgs.builder()
|
||||
.dest("tmp/cache")
|
||||
.mode("max")
|
||||
.build())
|
||||
.build())
|
||||
.cacheFrom(CacheFromArgs.builder()
|
||||
.local(CacheFromLocalArgs.builder()
|
||||
.src("tmp/cache")
|
||||
.build())
|
||||
.build())
|
||||
.build());
|
||||
|
||||
var buildArgs = new Image("buildArgs", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.location("./app/Dockerfile.buildArgs")
|
||||
.build())
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.buildArgs(Map.of("SET_ME_TO_TRUE", "true"))
|
||||
.build());
|
||||
|
||||
var extraHosts = new Image("extraHosts", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.location("./app/Dockerfile.extraHosts")
|
||||
.build())
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.addHosts("metadata.google.internal:169.254.169.254")
|
||||
.build());
|
||||
|
||||
var sshMount = new Image("sshMount", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.location("./app/Dockerfile.sshMount")
|
||||
.build())
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.ssh(SSHArgs.builder()
|
||||
.id("default")
|
||||
.build())
|
||||
.build());
|
||||
|
||||
var secrets = new Image("secrets", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.location("./app/Dockerfile.secrets")
|
||||
.build())
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.secrets(Map.of("password", "hunter2"))
|
||||
.build());
|
||||
|
||||
var labels = new Image("labels", ImageArgs.builder()
|
||||
.push(false)
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.labels(Map.of("description", "This image will get a descriptive label 👍"))
|
||||
.build());
|
||||
|
||||
var target = new Image("target", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.location("./app/Dockerfile.target")
|
||||
.build())
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.target("build-me")
|
||||
.build());
|
||||
|
||||
var namedContexts = new Image("namedContexts", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.location("./app/Dockerfile.namedContexts")
|
||||
.build())
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.named(Map.of("golang:latest", Map.of("location", "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984")))
|
||||
.build())
|
||||
.build());
|
||||
|
||||
var remoteContext = new Image("remoteContext", ImageArgs.builder()
|
||||
.push(false)
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile")
|
||||
.build())
|
||||
.build());
|
||||
|
||||
var remoteContextWithInline = new Image("remoteContextWithInline", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.inline("""
|
||||
FROM busybox
|
||||
COPY hello.c ./
|
||||
""")
|
||||
.build())
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("https://github.com/docker-library/hello-world.git")
|
||||
.build())
|
||||
.build());
|
||||
|
||||
var inline = new Image("inline", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.inline("""
|
||||
FROM alpine
|
||||
RUN echo "This uses an inline Dockerfile! 👍"
|
||||
""")
|
||||
.build())
|
||||
.build());
|
||||
|
||||
var dockerLoad = new Image("dockerLoad", ImageArgs.builder()
|
||||
.push(false)
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.exports(ExportArgs.builder()
|
||||
.docker(ExportDockerArgs.builder()
|
||||
.tar(true)
|
||||
.build())
|
||||
.build())
|
||||
.build());
|
||||
|
||||
ctx.export("platforms", multiPlatform.platforms());
|
||||
}
|
||||
}
|
||||
|
||||
61
examples/main_test.go
Normal file
61
examples/main_test.go
Normal file
@@ -0,0 +1,61 @@
|
||||
package examples
|
||||
|
||||
import (
|
||||
"crypto/rsa"
|
||||
"errors"
|
||||
"io"
|
||||
"math/rand"
|
||||
"net"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"golang.org/x/crypto/ssh/agent"
|
||||
)
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
sock := sshagent()
|
||||
os.Setenv("SSH_AUTH_SOCK", sock)
|
||||
|
||||
os.Exit(m.Run())
|
||||
}
|
||||
|
||||
// sshagent crates an in-memory SSH agent with one identity.
|
||||
func sshagent() string {
|
||||
dir, err := os.MkdirTemp(os.TempDir(), "docker-test-*")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
sock := filepath.Join(dir, "test.sock")
|
||||
|
||||
l, err := net.Listen("unix", sock)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
a := agent.NewKeyring()
|
||||
//nolint:gosec
|
||||
key, err := rsa.GenerateKey(rand.New(rand.NewSource(42)), 2048)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = a.Add(agent.AddedKey{PrivateKey: key})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
go func() {
|
||||
for {
|
||||
conn, err := l.Accept()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if err := agent.ServeAgent(a, conn); err != nil && !errors.Is(err, io.EOF) {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
return sock
|
||||
}
|
||||
2
examples/nodejs/.dockerignore
Normal file
2
examples/nodejs/.dockerignore
Normal file
@@ -0,0 +1,2 @@
|
||||
command-output
|
||||
tmp
|
||||
@@ -1,6 +1,10 @@
|
||||
name: provider-dockerbuild
|
||||
name: provider-docker-build
|
||||
runtime: nodejs
|
||||
config:
|
||||
dockerHubPassword:
|
||||
type: string
|
||||
secret: true
|
||||
plugins:
|
||||
providers:
|
||||
- name: dockerbuild
|
||||
- name: docker-build
|
||||
path: ../../bin
|
||||
|
||||
2
examples/nodejs/app/Dockerfile
Normal file
2
examples/nodejs/app/Dockerfile
Normal file
@@ -0,0 +1,2 @@
|
||||
FROM alpine
|
||||
RUN echo 👍
|
||||
5
examples/nodejs/app/Dockerfile.buildArgs
Normal file
5
examples/nodejs/app/Dockerfile.buildArgs
Normal file
@@ -0,0 +1,5 @@
|
||||
FROM alpine
|
||||
|
||||
ARG SET_ME_TO_TRUE
|
||||
RUN [ "$SET_ME_TO_TRUE" = "true" ]
|
||||
RUN echo "That's the correct build arg, thanks! 👍"
|
||||
2
examples/nodejs/app/Dockerfile.emptyContext
Normal file
2
examples/nodejs/app/Dockerfile.emptyContext
Normal file
@@ -0,0 +1,2 @@
|
||||
FROM alpine
|
||||
RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
|
||||
3
examples/nodejs/app/Dockerfile.extraHosts
Normal file
3
examples/nodejs/app/Dockerfile.extraHosts
Normal file
@@ -0,0 +1,3 @@
|
||||
FROM bash AS base
|
||||
|
||||
RUN getent hosts metadata.google.internal
|
||||
7
examples/nodejs/app/Dockerfile.multiPlatform
Normal file
7
examples/nodejs/app/Dockerfile.multiPlatform
Normal file
@@ -0,0 +1,7 @@
|
||||
FROM --platform=$BUILDPLATFORM alpine as build
|
||||
RUN echo ${BUILDPLATFORM} > buildplatform
|
||||
RUN echo ${TARGETPLATFORM} > targetplatform
|
||||
|
||||
FROM build
|
||||
RUN cat buildplatform
|
||||
RUN cat targetplatform
|
||||
5
examples/nodejs/app/Dockerfile.namedContexts
Normal file
5
examples/nodejs/app/Dockerfile.namedContexts
Normal file
@@ -0,0 +1,5 @@
|
||||
# syntax=docker/dockerfile:1.4
|
||||
FROM golang:latest
|
||||
|
||||
RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
|
||||
RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
|
||||
4
examples/nodejs/app/Dockerfile.secrets
Normal file
4
examples/nodejs/app/Dockerfile.secrets
Normal file
@@ -0,0 +1,4 @@
|
||||
FROM alpine
|
||||
|
||||
RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
|
||||
|
||||
5
examples/nodejs/app/Dockerfile.sshMount
Normal file
5
examples/nodejs/app/Dockerfile.sshMount
Normal file
@@ -0,0 +1,5 @@
|
||||
FROM alpine
|
||||
|
||||
RUN apk add openssh-client
|
||||
|
||||
RUN --mount=type=ssh ssh-add -l
|
||||
8
examples/nodejs/app/Dockerfile.target
Normal file
8
examples/nodejs/app/Dockerfile.target
Normal file
@@ -0,0 +1,8 @@
|
||||
FROM alpine as build-me
|
||||
RUN echo 👍
|
||||
|
||||
FROM build-me as also-build-me
|
||||
RUN echo 🤙
|
||||
|
||||
FROM build-me as dont-build-me
|
||||
RUN [ "true" = "false" ]
|
||||
@@ -1,5 +1,169 @@
|
||||
import * as pulumi from "@pulumi/pulumi";
|
||||
import * as dockerbuild from "@pulumi/dockerbuild";
|
||||
import * as docker_build from "@pulumi/docker-build";
|
||||
|
||||
const myRandomResource = new dockerbuild.Random("myRandomResource", {length: 24});
|
||||
export const value = myRandomResource.result;
|
||||
const config = new pulumi.Config();
|
||||
const dockerHubPassword = config.require("dockerHubPassword");
|
||||
const multiPlatform = new docker_build.Image("multiPlatform", {
|
||||
push: false,
|
||||
dockerfile: {
|
||||
location: "./app/Dockerfile.multiPlatform",
|
||||
},
|
||||
context: {
|
||||
location: "./app",
|
||||
},
|
||||
platforms: [
|
||||
docker_build.Platform.Plan9_amd64,
|
||||
docker_build.Platform.Plan9_386,
|
||||
],
|
||||
});
|
||||
const registryPush = new docker_build.Image("registryPush", {
|
||||
push: false,
|
||||
context: {
|
||||
location: "./app",
|
||||
},
|
||||
tags: ["docker.io/pulumibot/buildkit-e2e:example"],
|
||||
exports: [{
|
||||
registry: {
|
||||
ociMediaTypes: true,
|
||||
push: false,
|
||||
},
|
||||
}],
|
||||
registries: [{
|
||||
address: "docker.io",
|
||||
username: "pulumibot",
|
||||
password: dockerHubPassword,
|
||||
}],
|
||||
});
|
||||
const cached = new docker_build.Image("cached", {
|
||||
push: false,
|
||||
context: {
|
||||
location: "./app",
|
||||
},
|
||||
cacheTo: [{
|
||||
local: {
|
||||
dest: "tmp/cache",
|
||||
mode: docker_build.CacheMode.Max,
|
||||
},
|
||||
}],
|
||||
cacheFrom: [{
|
||||
local: {
|
||||
src: "tmp/cache",
|
||||
},
|
||||
}],
|
||||
});
|
||||
const buildArgs = new docker_build.Image("buildArgs", {
|
||||
push: false,
|
||||
dockerfile: {
|
||||
location: "./app/Dockerfile.buildArgs",
|
||||
},
|
||||
context: {
|
||||
location: "./app",
|
||||
},
|
||||
buildArgs: {
|
||||
SET_ME_TO_TRUE: "true",
|
||||
},
|
||||
});
|
||||
const extraHosts = new docker_build.Image("extraHosts", {
|
||||
push: false,
|
||||
dockerfile: {
|
||||
location: "./app/Dockerfile.extraHosts",
|
||||
},
|
||||
context: {
|
||||
location: "./app",
|
||||
},
|
||||
addHosts: ["metadata.google.internal:169.254.169.254"],
|
||||
});
|
||||
const sshMount = new docker_build.Image("sshMount", {
|
||||
push: false,
|
||||
dockerfile: {
|
||||
location: "./app/Dockerfile.sshMount",
|
||||
},
|
||||
context: {
|
||||
location: "./app",
|
||||
},
|
||||
ssh: [{
|
||||
id: "default",
|
||||
}],
|
||||
});
|
||||
const secrets = new docker_build.Image("secrets", {
|
||||
push: false,
|
||||
dockerfile: {
|
||||
location: "./app/Dockerfile.secrets",
|
||||
},
|
||||
context: {
|
||||
location: "./app",
|
||||
},
|
||||
secrets: {
|
||||
password: "hunter2",
|
||||
},
|
||||
});
|
||||
const labels = new docker_build.Image("labels", {
|
||||
push: false,
|
||||
context: {
|
||||
location: "./app",
|
||||
},
|
||||
labels: {
|
||||
description: "This image will get a descriptive label 👍",
|
||||
},
|
||||
});
|
||||
const target = new docker_build.Image("target", {
|
||||
push: false,
|
||||
dockerfile: {
|
||||
location: "./app/Dockerfile.target",
|
||||
},
|
||||
context: {
|
||||
location: "./app",
|
||||
},
|
||||
target: "build-me",
|
||||
});
|
||||
const namedContexts = new docker_build.Image("namedContexts", {
|
||||
push: false,
|
||||
dockerfile: {
|
||||
location: "./app/Dockerfile.namedContexts",
|
||||
},
|
||||
context: {
|
||||
location: "./app",
|
||||
named: {
|
||||
"golang:latest": {
|
||||
location: "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984",
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
const remoteContext = new docker_build.Image("remoteContext", {
|
||||
push: false,
|
||||
context: {
|
||||
location: "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
|
||||
},
|
||||
});
|
||||
const remoteContextWithInline = new docker_build.Image("remoteContextWithInline", {
|
||||
push: false,
|
||||
dockerfile: {
|
||||
inline: `FROM busybox
|
||||
COPY hello.c ./
|
||||
`,
|
||||
},
|
||||
context: {
|
||||
location: "https://github.com/docker-library/hello-world.git",
|
||||
},
|
||||
});
|
||||
const inline = new docker_build.Image("inline", {
|
||||
push: false,
|
||||
dockerfile: {
|
||||
inline: `FROM alpine
|
||||
RUN echo "This uses an inline Dockerfile! 👍"
|
||||
`,
|
||||
},
|
||||
});
|
||||
const dockerLoad = new docker_build.Image("dockerLoad", {
|
||||
push: false,
|
||||
context: {
|
||||
location: "./app",
|
||||
},
|
||||
exports: [{
|
||||
docker: {
|
||||
tar: true,
|
||||
},
|
||||
}],
|
||||
});
|
||||
export const platforms = multiPlatform.platforms;
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
{
|
||||
"name": "provider-dockerbuild",
|
||||
"name": "provider-docker-build",
|
||||
"devDependencies": {
|
||||
"@types/node": "^18"
|
||||
},
|
||||
"dependencies": {
|
||||
"typescript": "^4.0.0",
|
||||
"@pulumi/pulumi": "^3.0.0"
|
||||
"@pulumi/pulumi": "^3.128.0"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,11 +4,19 @@
|
||||
package examples
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/session"
|
||||
"github.com/aws/aws-sdk-go/service/ecr"
|
||||
"github.com/pulumi/pulumi/pkg/v3/testing/integration"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
@@ -18,7 +26,7 @@ func TestNodeExample(t *testing.T) {
|
||||
|
||||
test := integration.ProgramTestOptions{
|
||||
Dir: path.Join(cwd, "nodejs"),
|
||||
Dependencies: []string{"@pulumi/dockerbuild"},
|
||||
Dependencies: []string{"@pulumi/docker-build"},
|
||||
Secrets: map[string]string{
|
||||
"dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
|
||||
},
|
||||
@@ -26,3 +34,192 @@ func TestNodeExample(t *testing.T) {
|
||||
|
||||
integration.ProgramTest(t, &test)
|
||||
}
|
||||
|
||||
// TestCaching simulates a slow build with --cache-to enabled. We aren't able
|
||||
// to directly detect cache hits, so we re-run the update and confirm it took
|
||||
// less time than the image originally took to build.
|
||||
//
|
||||
// This is a moderately slow test because we need to "build" (i.e., sleep)
|
||||
// longer than it would take for cache layer uploads under slow network
|
||||
// conditions.
|
||||
func TestCaching(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
sleep := 20.0 // seconds
|
||||
|
||||
// Provision ECR outside of our stack, because the cache needs to be shared
|
||||
// across updates.
|
||||
ecr, ecrOK := tmpEcr(t)
|
||||
|
||||
cwd, err := os.Getwd()
|
||||
require.NoError(t, err)
|
||||
|
||||
localCache := t.TempDir()
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
skip bool
|
||||
|
||||
cacheTo string
|
||||
cacheFrom string
|
||||
address string
|
||||
username string
|
||||
password string
|
||||
}{
|
||||
{
|
||||
name: "local",
|
||||
cacheTo: fmt.Sprintf("type=local,mode=max,oci-mediatypes=true,dest=%s", localCache),
|
||||
cacheFrom: fmt.Sprintf("type=local,src=%s", localCache),
|
||||
},
|
||||
{
|
||||
name: "gha",
|
||||
skip: os.Getenv("ACTIONS_CACHE_URL") == "",
|
||||
cacheTo: "type=gha,mode=max,scope=cache-test",
|
||||
cacheFrom: "type=gha,scope=cache-test",
|
||||
},
|
||||
{
|
||||
name: "dockerhub",
|
||||
skip: os.Getenv("DOCKER_HUB_PASSWORD") == "",
|
||||
cacheTo: "type=registry,mode=max,ref=docker.io/pulumibot/myapp:cache",
|
||||
cacheFrom: "type=registry,ref=docker.io/pulumibot/myapp:cache",
|
||||
address: "docker.io",
|
||||
username: "pulumibot",
|
||||
password: os.Getenv("DOCKER_HUB_PASSWORD"),
|
||||
},
|
||||
{
|
||||
name: "ecr",
|
||||
skip: !ecrOK,
|
||||
cacheTo: fmt.Sprintf("type=registry,mode=max,image-manifest=true,oci-mediatypes=true,ref=%s:cache", ecr.address),
|
||||
cacheFrom: fmt.Sprintf("type=registry,ref=%s:cache", ecr.address),
|
||||
address: ecr.address,
|
||||
username: ecr.username,
|
||||
password: ecr.password,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
tt := tt
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if tt.skip {
|
||||
t.Skip("Missing environment variables")
|
||||
}
|
||||
|
||||
sleepFuzzed := sleep + rand.Float64() // Add some fuzz to bust any prior build caches.
|
||||
|
||||
test := integration.ProgramTestOptions{
|
||||
Dir: path.Join(cwd, "tests", "caching"),
|
||||
ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) {
|
||||
duration, ok := stack.Outputs["durationSeconds"]
|
||||
assert.True(t, ok)
|
||||
assert.Greater(t, duration.(float64), sleepFuzzed)
|
||||
},
|
||||
Dependencies: []string{"@pulumi/docker-build"},
|
||||
Config: map[string]string{
|
||||
"SLEEP_SECONDS": fmt.Sprint(sleepFuzzed),
|
||||
"cacheTo": tt.cacheTo,
|
||||
"cacheFrom": tt.cacheFrom,
|
||||
"name": tt.name,
|
||||
"address": tt.address,
|
||||
"username": tt.username,
|
||||
},
|
||||
Secrets: map[string]string{
|
||||
"password": tt.password,
|
||||
},
|
||||
NoParallel: true,
|
||||
Quick: true,
|
||||
SkipPreview: true,
|
||||
SkipRefresh: true,
|
||||
Verbose: true,
|
||||
}
|
||||
|
||||
// First run should be un-cached.
|
||||
integration.ProgramTest(t, &test)
|
||||
|
||||
// Now run again and confirm our build was faster due to a cache hit.
|
||||
test.ExtraRuntimeValidation = func(t *testing.T, stack integration.RuntimeValidationStackInfo) {
|
||||
duration, ok := stack.Outputs["durationSeconds"]
|
||||
assert.True(t, ok)
|
||||
assert.Less(t, duration.(float64), sleepFuzzed)
|
||||
}
|
||||
test.Config["name"] += "-cached"
|
||||
integration.ProgramTest(t, &test)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestConfig(t *testing.T) {
|
||||
cwd, err := os.Getwd()
|
||||
require.NoError(t, err)
|
||||
|
||||
test := integration.ProgramTestOptions{
|
||||
Dir: path.Join(cwd, "tests", "config"),
|
||||
Dependencies: []string{"@pulumi/docker-build"},
|
||||
}
|
||||
|
||||
integration.ProgramTest(t, &test)
|
||||
}
|
||||
|
||||
type ECR struct {
|
||||
address string
|
||||
username string
|
||||
password string
|
||||
}
|
||||
|
||||
// tmpEcr creates a new ECR repo and cleans it up after the test concludes.
|
||||
func tmpEcr(t *testing.T) (ECR, bool) {
|
||||
sess, err := session.NewSession(&aws.Config{
|
||||
Region: aws.String("us-west-2"),
|
||||
})
|
||||
if err != nil {
|
||||
return ECR{}, false
|
||||
}
|
||||
|
||||
svc := ecr.New(sess)
|
||||
name := strings.ToLower(t.Name()) + fmt.Sprint(rand.Intn(1000))
|
||||
|
||||
// Always attempt to delete pre-existing repos, in case our cleanup didn't
|
||||
// run.
|
||||
_, _ = svc.DeleteRepository(&ecr.DeleteRepositoryInput{
|
||||
Force: aws.Bool(true),
|
||||
RepositoryName: aws.String(name),
|
||||
})
|
||||
|
||||
params := &ecr.CreateRepositoryInput{
|
||||
RepositoryName: aws.String(name),
|
||||
}
|
||||
resp, err := svc.CreateRepository(params)
|
||||
if err != nil {
|
||||
return ECR{}, false
|
||||
}
|
||||
repo := resp.Repository
|
||||
t.Cleanup(func() {
|
||||
svc.DeleteRepository(&ecr.DeleteRepositoryInput{
|
||||
Force: aws.Bool(true),
|
||||
RegistryId: repo.RegistryId,
|
||||
RepositoryName: repo.RepositoryName,
|
||||
})
|
||||
})
|
||||
|
||||
// Now grab auth for the repo.
|
||||
auth, err := svc.GetAuthorizationToken(&ecr.GetAuthorizationTokenInput{})
|
||||
if err != nil {
|
||||
return ECR{}, false
|
||||
}
|
||||
b64token := auth.AuthorizationData[0].AuthorizationToken
|
||||
token, err := base64.StdEncoding.DecodeString(*b64token)
|
||||
if err != nil {
|
||||
return ECR{}, false
|
||||
}
|
||||
parts := strings.SplitN(string(token), ":", 2)
|
||||
if len(parts) != 2 {
|
||||
return ECR{}, false
|
||||
}
|
||||
username := parts[0]
|
||||
password := parts[1]
|
||||
|
||||
return ECR{
|
||||
address: *repo.RepositoryUri,
|
||||
username: username,
|
||||
password: password,
|
||||
}, true
|
||||
}
|
||||
|
||||
2
examples/python/.dockerignore
Normal file
2
examples/python/.dockerignore
Normal file
@@ -0,0 +1,2 @@
|
||||
command-output
|
||||
tmp
|
||||
@@ -1,6 +1,10 @@
|
||||
name: provider-dockerbuild
|
||||
name: provider-docker-build
|
||||
runtime: python
|
||||
config:
|
||||
dockerHubPassword:
|
||||
type: string
|
||||
secret: true
|
||||
plugins:
|
||||
providers:
|
||||
- name: dockerbuild
|
||||
- name: docker-build
|
||||
path: ../../bin
|
||||
|
||||
@@ -1,5 +1,155 @@
|
||||
import pulumi
|
||||
import pulumi_dockerbuild as dockerbuild
|
||||
import pulumi_docker_build as docker_build
|
||||
|
||||
my_random_resource = dockerbuild.Random("myRandomResource", length=24)
|
||||
pulumi.export("value", my_random_resource.result)
|
||||
config = pulumi.Config()
|
||||
docker_hub_password = config.require("dockerHubPassword")
|
||||
multi_platform = docker_build.Image("multiPlatform",
|
||||
push=False,
|
||||
dockerfile=docker_build.DockerfileArgs(
|
||||
location="./app/Dockerfile.multiPlatform",
|
||||
),
|
||||
context=docker_build.BuildContextArgs(
|
||||
location="./app",
|
||||
),
|
||||
platforms=[
|
||||
docker_build.Platform.PLAN9_AMD64,
|
||||
docker_build.Platform.PLAN9_386,
|
||||
])
|
||||
registry_push = docker_build.Image("registryPush",
|
||||
push=False,
|
||||
context=docker_build.BuildContextArgs(
|
||||
location="./app",
|
||||
),
|
||||
tags=["docker.io/pulumibot/buildkit-e2e:example"],
|
||||
exports=[docker_build.ExportArgs(
|
||||
registry=docker_build.ExportRegistryArgs(
|
||||
oci_media_types=True,
|
||||
push=False,
|
||||
),
|
||||
)],
|
||||
registries=[docker_build.RegistryArgs(
|
||||
address="docker.io",
|
||||
username="pulumibot",
|
||||
password=docker_hub_password,
|
||||
)])
|
||||
cached = docker_build.Image("cached",
|
||||
push=False,
|
||||
context=docker_build.BuildContextArgs(
|
||||
location="./app",
|
||||
),
|
||||
cache_to=[docker_build.CacheToArgs(
|
||||
local=docker_build.CacheToLocalArgs(
|
||||
dest="tmp/cache",
|
||||
mode=docker_build.CacheMode.MAX,
|
||||
),
|
||||
)],
|
||||
cache_from=[docker_build.CacheFromArgs(
|
||||
local=docker_build.CacheFromLocalArgs(
|
||||
src="tmp/cache",
|
||||
),
|
||||
)])
|
||||
build_args = docker_build.Image("buildArgs",
|
||||
push=False,
|
||||
dockerfile=docker_build.DockerfileArgs(
|
||||
location="./app/Dockerfile.buildArgs",
|
||||
),
|
||||
context=docker_build.BuildContextArgs(
|
||||
location="./app",
|
||||
),
|
||||
build_args={
|
||||
"SET_ME_TO_TRUE": "true",
|
||||
})
|
||||
extra_hosts = docker_build.Image("extraHosts",
|
||||
push=False,
|
||||
dockerfile=docker_build.DockerfileArgs(
|
||||
location="./app/Dockerfile.extraHosts",
|
||||
),
|
||||
context=docker_build.BuildContextArgs(
|
||||
location="./app",
|
||||
),
|
||||
add_hosts=["metadata.google.internal:169.254.169.254"])
|
||||
ssh_mount = docker_build.Image("sshMount",
|
||||
push=False,
|
||||
dockerfile=docker_build.DockerfileArgs(
|
||||
location="./app/Dockerfile.sshMount",
|
||||
),
|
||||
context=docker_build.BuildContextArgs(
|
||||
location="./app",
|
||||
),
|
||||
ssh=[docker_build.SSHArgs(
|
||||
id="default",
|
||||
)])
|
||||
secrets = docker_build.Image("secrets",
|
||||
push=False,
|
||||
dockerfile=docker_build.DockerfileArgs(
|
||||
location="./app/Dockerfile.secrets",
|
||||
),
|
||||
context=docker_build.BuildContextArgs(
|
||||
location="./app",
|
||||
),
|
||||
secrets={
|
||||
"password": "hunter2",
|
||||
})
|
||||
labels = docker_build.Image("labels",
|
||||
push=False,
|
||||
context=docker_build.BuildContextArgs(
|
||||
location="./app",
|
||||
),
|
||||
labels={
|
||||
"description": "This image will get a descriptive label 👍",
|
||||
})
|
||||
target = docker_build.Image("target",
|
||||
push=False,
|
||||
dockerfile=docker_build.DockerfileArgs(
|
||||
location="./app/Dockerfile.target",
|
||||
),
|
||||
context=docker_build.BuildContextArgs(
|
||||
location="./app",
|
||||
),
|
||||
target="build-me")
|
||||
named_contexts = docker_build.Image("namedContexts",
|
||||
push=False,
|
||||
dockerfile=docker_build.DockerfileArgs(
|
||||
location="./app/Dockerfile.namedContexts",
|
||||
),
|
||||
context=docker_build.BuildContextArgs(
|
||||
location="./app",
|
||||
named={
|
||||
"golang:latest": docker_build.ContextArgs(
|
||||
location="docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984",
|
||||
),
|
||||
},
|
||||
))
|
||||
remote_context = docker_build.Image("remoteContext",
|
||||
push=False,
|
||||
context=docker_build.BuildContextArgs(
|
||||
location="https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
|
||||
))
|
||||
remote_context_with_inline = docker_build.Image("remoteContextWithInline",
|
||||
push=False,
|
||||
dockerfile=docker_build.DockerfileArgs(
|
||||
inline="""FROM busybox
|
||||
COPY hello.c ./
|
||||
""",
|
||||
),
|
||||
context=docker_build.BuildContextArgs(
|
||||
location="https://github.com/docker-library/hello-world.git",
|
||||
))
|
||||
inline = docker_build.Image("inline",
|
||||
push=False,
|
||||
dockerfile=docker_build.DockerfileArgs(
|
||||
inline="""FROM alpine
|
||||
RUN echo "This uses an inline Dockerfile! 👍"
|
||||
""",
|
||||
))
|
||||
docker_load = docker_build.Image("dockerLoad",
|
||||
push=False,
|
||||
context=docker_build.BuildContextArgs(
|
||||
location="./app",
|
||||
),
|
||||
exports=[docker_build.ExportArgs(
|
||||
docker=docker_build.ExportDockerArgs(
|
||||
tar=True,
|
||||
),
|
||||
)])
|
||||
pulumi.export("platforms", multi_platform.platforms)
|
||||
|
||||
2
examples/python/app/Dockerfile
Normal file
2
examples/python/app/Dockerfile
Normal file
@@ -0,0 +1,2 @@
|
||||
FROM alpine
|
||||
RUN echo 👍
|
||||
5
examples/python/app/Dockerfile.buildArgs
Normal file
5
examples/python/app/Dockerfile.buildArgs
Normal file
@@ -0,0 +1,5 @@
|
||||
FROM alpine
|
||||
|
||||
ARG SET_ME_TO_TRUE
|
||||
RUN [ "$SET_ME_TO_TRUE" = "true" ]
|
||||
RUN echo "That's the correct build arg, thanks! 👍"
|
||||
2
examples/python/app/Dockerfile.emptyContext
Normal file
2
examples/python/app/Dockerfile.emptyContext
Normal file
@@ -0,0 +1,2 @@
|
||||
FROM alpine
|
||||
RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
|
||||
3
examples/python/app/Dockerfile.extraHosts
Normal file
3
examples/python/app/Dockerfile.extraHosts
Normal file
@@ -0,0 +1,3 @@
|
||||
FROM bash AS base
|
||||
|
||||
RUN getent hosts metadata.google.internal
|
||||
7
examples/python/app/Dockerfile.multiPlatform
Normal file
7
examples/python/app/Dockerfile.multiPlatform
Normal file
@@ -0,0 +1,7 @@
|
||||
FROM --platform=$BUILDPLATFORM alpine as build
|
||||
RUN echo ${BUILDPLATFORM} > buildplatform
|
||||
RUN echo ${TARGETPLATFORM} > targetplatform
|
||||
|
||||
FROM build
|
||||
RUN cat buildplatform
|
||||
RUN cat targetplatform
|
||||
5
examples/python/app/Dockerfile.namedContexts
Normal file
5
examples/python/app/Dockerfile.namedContexts
Normal file
@@ -0,0 +1,5 @@
|
||||
# syntax=docker/dockerfile:1.4
|
||||
FROM golang:latest
|
||||
|
||||
RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
|
||||
RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
|
||||
4
examples/python/app/Dockerfile.secrets
Normal file
4
examples/python/app/Dockerfile.secrets
Normal file
@@ -0,0 +1,4 @@
|
||||
FROM alpine
|
||||
|
||||
RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
|
||||
|
||||
5
examples/python/app/Dockerfile.sshMount
Normal file
5
examples/python/app/Dockerfile.sshMount
Normal file
@@ -0,0 +1,5 @@
|
||||
FROM alpine
|
||||
|
||||
RUN apk add openssh-client
|
||||
|
||||
RUN --mount=type=ssh ssh-add -l
|
||||
8
examples/python/app/Dockerfile.target
Normal file
8
examples/python/app/Dockerfile.target
Normal file
@@ -0,0 +1,8 @@
|
||||
FROM alpine as build-me
|
||||
RUN echo 👍
|
||||
|
||||
FROM build-me as also-build-me
|
||||
RUN echo 🤙
|
||||
|
||||
FROM build-me as dont-build-me
|
||||
RUN [ "true" = "false" ]
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user