Compare commits

..

73 Commits

Author SHA1 Message Date
Pulumi Bot
f224057d62 [internal] Update GitHub Actions workflow files 2025-10-29 05:44:36 +00:00
Pulumi Bot
faffc8cc45 Update GitHub Actions workflows. (#633)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 5619381e924fbac90750f41b6a27cadcd11c4c2d.
2025-10-22 05:56:54 +00:00
Alberto Pose
2b1230f252 Introduce ${GOTEST} Makefile variable to override test runner. (#632)
Allow to use other tools like `gotestsum` locally.
2025-10-20 15:20:48 +01:00
Pulumi Bot
eaf5461bbc Update GitHub Actions workflows. (#631)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit f0bcdaf5cb0825e542d0a2eb71f05d538135a9bc.
2025-10-18 05:52:38 +00:00
Alberto Pose
38e65a3f81 Remove URL and Token arguments from CacheFromGitHubActions. (#626)
Fixes #75

Arguments URL and Token have been removed but `$ACTIONS_CACHE_URL` and
`$ACTIONS_RUNTIME_TOKEN` env variables could be injected if desired.

---------

Co-authored-by: Bryce Lampe <bryce@pulumi.com>
2025-10-17 11:00:40 +01:00
Pulumi Bot
1811524e66 Update GitHub Actions workflows. (#629)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 16969054030269fefacac22b8536d1f80ed8e2d9.
2025-10-16 05:52:39 +00:00
Pulumi Bot
361335bba0 Update GitHub Actions workflows. (#628)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 0fccf404186fee66f0a9bb9b53959a52b4812c5e.
2025-10-14 05:54:14 +00:00
Pulumi Bot
49deed7d9c Update GitHub Actions workflows. (#627)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit b4e68d0418afb9fa72c1e31347a01f7fae952eff.
2025-10-10 05:51:39 +00:00
Alberto Pose
ff8995c434 Move _index.md and installation-configuration.md into the repo. (#622)
Related to: https://github.com/pulumi/registry/pull/8814

Make this provider follow the Pulumi official convention of [using the
`_index.md` and
`installation-configuration.md`](https://www.pulumi.com/docs/iac/build-with-pulumi/publishing-packages/#write-documentation).
2025-10-09 09:34:35 +01:00
Pulumi Bot
c159079132 Update GitHub Actions workflows. (#624)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 45de636c4cb364e6fc2ab50006d5358239005657.
2025-10-09 05:52:11 +00:00
Pulumi Bot
24ebad1ee5 Update GitHub Actions workflows. (#623)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 93823adfede429861d981e43f485afda9292376e.
2025-10-08 05:55:33 +00:00
Alberto Pose
40c723d82f Remove installation of pulumi CLI and golangci-lint from Makefile (#621)
Installation of runtime and tools should now be done through `mise`.

In addition, the following binaries are included with `pulumi` CLI:

* pulumi-language-go
* pulumi-language-nodejs
* pulumi-language-python
* pulumi-language-java
* pulumi-language-dotnet
* pulumi-converter-yaml
2025-10-07 16:18:53 +01:00
Pulumi Bot
36362d0317 Update GitHub Actions workflows. (#620)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 23f84aba12118601865d1a686c2c46a4ec3fa729.
2025-10-03 22:26:52 +00:00
Pulumi Bot
0b684b81fb Update GitHub Actions workflows. (#619)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 58bbf9b943afc66c10382b6fa89dc3e226f18f20.
2025-10-03 05:53:37 +00:00
Pulumi Bot
ebf4290bb2 Update GitHub Actions workflows. (#617)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 72d9a2e28cf75e7d1ba2c5e6324d26546c95e4cb.
2025-10-02 05:55:45 +00:00
Pulumi Bot
c7b2867559 Update GitHub Actions workflows. (#616)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit d2d946e761bab19abc5e5a598d44cf709dae77e9.
2025-10-01 05:54:01 +00:00
Bryce Lampe
5e589f61ec Upgrade go-provider to 1.1.2 (#615)
Fixes https://github.com/pulumi/pulumi-docker-build/issues/579.
2025-09-30 16:40:35 -07:00
Pulumi Bot
5f0c2ede72 Update GitHub Actions workflows. (#613)
This PR was automatically generated by the
update-workflows-single-bridged-provider workflow in the pulumi/ci-mgmt
repo, from commit f16439eadce749cfc5fc959f926069e5943f4640.
2025-09-29 22:24:54 +00:00
Pulumi Bot
d27e6d14db Update GitHub Actions workflows. (#612)
This PR was automatically generated by the
update-workflows-single-bridged-provider workflow in the pulumi/ci-mgmt
repo, from commit e43a0e1c1f44e3e431240deb0ac363cf172ae9a9.
2025-09-29 15:36:43 -04:00
Cory Hall
6ae16f10ff chore: update modulePath in ci-mgmt (#607)
This is needed for https://github.com/pulumi/ci-mgmt/pull/1730
2025-09-29 12:01:37 -04:00
Pulumi Bot
f17e43bad7 Update GitHub Actions workflows. (#604)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 2b81d6d332c32c7ebc106fb53b745cbbfec266c7.
2025-09-16 05:49:46 +00:00
Pulumi Bot
bce330f598 Update GitHub Actions workflows. (#603)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 0337d8381eace02d1b6fb82d43e3ab543bf5774a.
2025-09-12 23:58:08 +00:00
Pulumi Bot
5107181566 Update GitHub Actions workflows. (#602)
This PR was automatically generated by the
update-workflows-single-bridged-provider workflow in the pulumi/ci-mgmt
repo, from commit c390ce58d72b0eb947d844358c3204353b21839c.
2025-09-11 19:03:02 +00:00
Bryce Lampe
0a2dd6e758 Confirming ESC fixes (#599)
Validating https://github.com/pulumi/ci-mgmt/pull/1705.
2025-09-10 14:19:45 -07:00
Pulumi Bot
a0e387d0a8 Update GitHub Actions workflows. (#597)
This PR was automatically generated by the
update-workflows-single-bridged-provider workflow in the pulumi/ci-mgmt
repo, from commit 42e0ba87f4de47d7ab085a3916669e193ec1ff4e.

---------

Co-authored-by: Bryce Lampe <bryce@pulumi.com>
2025-09-10 19:49:21 +00:00
Bryce Lampe
daa144c232 Use ESC for secrets (#594)
Refs https://github.com/pulumi/ci-mgmt/issues/1481
2025-09-10 09:45:06 -07:00
Pulumi Bot
1203c3b31f Update GitHub Actions workflows. (#595)
This PR was automatically generated by the
update-workflows-single-bridged-provider workflow in the pulumi/ci-mgmt
repo, from commit 4125efba3dbbc633190a388a9f8b0408d755089c.
2025-09-10 16:11:45 +00:00
Pulumi Bot
62ff8bf2d2 Update GitHub Actions workflows. (#593)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 2ce6f269d9892f74ed14f645f41e402e7ff8d416.

Co-authored-by: Bryce Lampe <bryce@pulumi.com>
2025-09-05 21:49:19 +00:00
Pulumi Bot
3b7e31b388 Automated upgrade: bump pulumi/pulumi to 3.192.0 (#592)
Automated upgrade: bump pulumi/pulumi to 3.192.0

---------

Co-authored-by: Bryce Lampe <bryce@pulumi.com>
2025-09-05 14:36:43 -07:00
Pulumi Bot
c46d343c53 Update GitHub Actions workflows. (#586)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit ed2094cef48b491325b4ceebfceb6c0a555f1c04.
2025-08-28 05:49:05 +00:00
Pulumi Bot
4166f9da1b Update GitHub Actions workflows. (#585)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 89dd865db8cef8be4f3f0a978cf8007892e51567.
2025-08-27 19:47:54 +00:00
Bryce Lampe
4e934974ee Update p-go-provider to fix version replacement behavior (#584)
Updates p-go-provider to pull in
https://github.com/pulumi/pulumi-go-provider/pull/410. In particular
this fixes an issue where the provider would get replaced on version
changes.

Fixes https://github.com/pulumi/pulumi-docker-build/issues/581
2025-08-27 11:14:21 -07:00
Pulumi Bot
4262717644 Update GitHub Actions workflows. (#582)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 19c542b12a65e3f3ec1d8213111262a9887dcda0.
2025-08-26 05:48:46 +00:00
Pulumi Bot
997794b59f Update GitHub Actions workflows. (#580)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit dfe14f327ab8b4653dc5a4edf60e1f13814519e9.
2025-08-23 05:46:29 +00:00
Pulumi Bot
a168c92f12 Update GitHub Actions workflows. (#577)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 9b60d6c643780f4a645273cb6a5b3dcce6687d94.
2025-08-15 21:38:53 +00:00
Pulumi Bot
91fdae679d Update GitHub Actions workflows. (#575)
This PR was automatically generated by the
update-workflows-single-bridged-provider workflow in the pulumi/ci-mgmt
repo, from commit 4ac37ece8be37ce71d07d3e42b89c7c306173b9b.
2025-08-15 16:45:42 +00:00
Pulumi Bot
ee4aa2505e Update GitHub Actions workflows. (#574)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit f90df7559c86efa5ae3108b58c7d554865f2eb56.
2025-08-15 05:47:34 +00:00
Pulumi Bot
9fa5fcabe5 Update GitHub Actions workflows. (#572)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit b21f824c0283ef293cdf550403adf1d4bbfcfdb1.
2025-08-14 05:48:17 +00:00
Matthew (Matt) Jeffryes
b7d239127c Update pulumi/pulumi dependency to 3.187.0 (#568)
Fixes https://github.com/pulumi/pulumi-docker-build/issues/551
(sort of - the underlying problem that this repo pins SDK dependencies
that don't get automatically update by the workflow still exists, but it
should at least work until the codegen APIs change again.)
2025-08-12 14:47:58 -07:00
Pulumi Bot
c4526b3f31 Update GitHub Actions workflows. (#567)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 44b6bb6137363838b9ea58d69a7ad2f45bb93b7f.
2025-08-12 05:51:01 +00:00
Pulumi Bot
eebb4e8d0e Update GitHub Actions workflows. (#566)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit c53718801bb3dd185442d5f4161ab52eae5e2ab7.
2025-08-09 05:48:18 +00:00
Pulumi Bot
3bca7cb8c7 Update GitHub Actions workflows. (#564)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit b3ee77fa5b79734c33e2a074744b4f5873e72478.
2025-08-06 05:52:02 +00:00
Pulumi Bot
3a50555d36 Update GitHub Actions workflows. (#563)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit a94a4e21904c11dcb4a6d42bed9806407ac2cdad.
2025-07-26 05:49:46 +00:00
Pulumi Bot
591c008fb9 Update GitHub Actions workflows. (#561)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 584f336d188f5bdd50ba9a49066dfcc18c1ac79d.
2025-07-24 05:49:39 +00:00
pulumi-renovate[bot]
6c093a4d08 Migrate renovate config (#559)
The Renovate config in this repository needs migrating. Typically this
is because one or more configuration options you are using have been
renamed.

You don't need to merge this PR right away, because Renovate will
continue to migrate these fields internally each time it runs. But later
some of these fields may be fully deprecated and the migrations removed.
So it's a good idea to merge this migration PR soon.



#### [PLEASE
NOTE](https://docs.renovatebot.com/configuration-options#configmigration):
JSON5 config file migrated! All comments & trailing commas were removed.

🔕 **Ignore**: Close this PR and you won't be reminded about config
migration again, but one day your current config may no longer be valid.

 Got questions? Does something look wrong to you? Please don't hesitate
to [request help
here](https://redirect.github.com/renovatebot/renovate/discussions).


---

This PR has been generated by [Renovate
Bot](https://redirect.github.com/renovatebot/renovate).

Co-authored-by: pulumi-renovate[bot] <189166143+pulumi-renovate[bot]@users.noreply.github.com>
2025-07-21 13:04:32 -07:00
Pulumi Bot
0f8587b289 Update GitHub Actions workflows. (#560)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 5610283a822c5ed77127abb5942c8116ea1de49f.
2025-07-19 05:47:36 +00:00
pulumi-renovate[bot]
41be3ce857 Update first-party Pulumi dependencies (#530)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [@pulumi/pulumi](https://redirect.github.com/pulumi/pulumi)
([source](https://redirect.github.com/pulumi/pulumi/tree/HEAD/sdk/nodejs))
| dependencies | minor | [`3.165.0` ->
`3.184.0`](https://renovatebot.com/diffs/npm/@pulumi%2fpulumi/3.165.0/3.184.0)
|
|
[github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild](https://redirect.github.com/pulumi/pulumi-docker-build)
| require | patch | `v0.0.11` -> `v0.0.12` |
|
[github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet/v3](https://redirect.github.com/pulumi/pulumi-dotnet)
| require | minor | `v3.0.0-20250515194217-855e3e4c894c` -> `v3.85.1` |
|
[github.com/pulumi/pulumi-go-provider](https://redirect.github.com/pulumi/pulumi-go-provider)
| require | minor | `v1.0.0-rc.2` -> `v1.1.0` |
|
[github.com/pulumi/pulumi-java/pkg](https://redirect.github.com/pulumi/pulumi-java)
| require | minor | `v1.11.0` -> `v1.16.0` |
|
[github.com/pulumi/pulumi-yaml](https://redirect.github.com/pulumi/pulumi-yaml)
| require | minor | `v1.17.0` -> `v1.21.2` |
|
[github.com/pulumi/pulumi/pkg/v3](https://redirect.github.com/pulumi/pulumi)
| require | minor | `v3.169.0` -> `v3.184.0` |
|
[github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3](https://redirect.github.com/pulumi/pulumi)
| require | minor | `v3.0.0-20250508095305-a4bdc94d01aa` -> `v3.184.0` |
|
[github.com/pulumi/pulumi/sdk/nodejs/cmd/pulumi-language-nodejs/v3](https://redirect.github.com/pulumi/pulumi)
| require | minor | `v3.0.0-20250508095305-a4bdc94d01aa` -> `v3.184.0` |
|
[github.com/pulumi/pulumi/sdk/python/cmd/pulumi-language-python/v3](https://redirect.github.com/pulumi/pulumi)
| require | minor | `v3.0.0-20250508095305-a4bdc94d01aa` -> `v3.184.0` |
| [pulumi/actions](https://redirect.github.com/pulumi/actions) | action
| minor | `v6.3.0` -> `v6.5.0` |

---

### Release Notes

<details>
<summary>pulumi/pulumi (@&#8203;pulumi/pulumi)</summary>

###
[`v3.184.0`](https://redirect.github.com/pulumi/pulumi/releases/tag/v3.184.0)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.183.0...v3.184.0)

##### 3.184.0 (2025-07-18)

##### Features

-   \[sdk/go] Allow setting resource hooks in transforms
[#&#8203;20058](https://redirect.github.com/pulumi/pulumi/pull/20058)

-   \[sdk/nodejs] Allow setting resource hooks in transforms
[#&#8203;20057](https://redirect.github.com/pulumi/pulumi/pull/20057)

##### Bug Fixes

- \[auto/go] Fix refresh/destroy with inline programs and --run-program
flag

- \[cli/package] Fix `package add` command when using uv 0.8.0 or later
[#&#8203;20075](https://redirect.github.com/pulumi/pulumi/pull/20075)

-   \[sdk/nodejs] Fix before exit handler

- \[programgen/python] Fix imports of packages and modules with multiple
name parts, such as "devOps"
[#&#8203;20053](https://redirect.github.com/pulumi/pulumi/pull/20053)

##### Miscellaneous

- \[sdk/nodejs] Simplify determining the Node.js entrypoint and respect
package.exports
[#&#8203;19985](https://redirect.github.com/pulumi/pulumi/pull/19985)

###
[`v3.183.0`](https://redirect.github.com/pulumi/pulumi/releases/tag/v3.183.0)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.182.0...v3.183.0)

##### 3.183.0 (2025-07-16)

##### Features

-   \[cli] Support reading v4 checkpoints/deployments
[#&#8203;20046](https://redirect.github.com/pulumi/pulumi/pull/20046)

-   \[cli] Allow transforms to set resource hooks
[#&#8203;20051](https://redirect.github.com/pulumi/pulumi/pull/20051)

-   \[protobuf] Add hooks to TransformResourceOptions
[#&#8203;20050](https://redirect.github.com/pulumi/pulumi/pull/20050)

- \[auto/{go,nodejs,python}] Support --run-program for inline programs
in refresh and destroy operations
[#&#8203;19912](https://redirect.github.com/pulumi/pulumi/pull/19912)

- \[cli/new] Reflect templates published with `pulumi template publish`
in the results of `pulumi new`
[#&#8203;19940](https://redirect.github.com/pulumi/pulumi/pull/19940)

-   \[sdk/nodejs] Automatic ESM configuration
[#&#8203;19980](https://redirect.github.com/pulumi/pulumi/pull/19980)

-   \[sdk/python] Allow setting resource hooks in transforms
[#&#8203;20052](https://redirect.github.com/pulumi/pulumi/pull/20052)

##### Bug Fixes

- \[cli] Fix a panic in the `console` command when a non-existant stack
was passed as a --stack argument
[#&#8203;20043](https://redirect.github.com/pulumi/pulumi/pull/20043)

- \[sdk/nodejs] Try to normalize component names when auto-inferring
them
[#&#8203;20048](https://redirect.github.com/pulumi/pulumi/pull/20048)

-   \[sdk/python/automation] Fix wrong name after stack rename
[#&#8203;20028](https://redirect.github.com/pulumi/pulumi/pull/20028)

##### Miscellaneous

-   \[pkg] Update pulumi-java to v1.16.0
[#&#8203;20063](https://redirect.github.com/pulumi/pulumi/pull/20063)

###
[`v3.182.0`](https://redirect.github.com/pulumi/pulumi/releases/tag/v3.182.0)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.181.0...v3.182.0)

##### 3.182.0 (2025-07-14)

##### Features

-   \[engine] Implement ResourceHooks in the engine
[#&#8203;19874](https://redirect.github.com/pulumi/pulumi/pull/19874)

- \[engine] Prevent destroy without running the program if any resource
have delete hooks
[#&#8203;19933](https://redirect.github.com/pulumi/pulumi/pull/19933)

- \[engine] Send `Cancel` message to analyzer plugins on engine shutdown
[#&#8203;20015](https://redirect.github.com/pulumi/pulumi/pull/20015)

-   \[sdk/go] Implement ResourceHooks in the Go SDK
[#&#8203;20002](https://redirect.github.com/pulumi/pulumi/pull/20002)

-   \[sdk/nodejs] Implement ResourceHooks in the Node.js SDK
[#&#8203;19946](https://redirect.github.com/pulumi/pulumi/pull/19946)

-   \[sdk/python] Implement ResourceHooks in the Python SDK
[#&#8203;19876](https://redirect.github.com/pulumi/pulumi/pull/19876)

##### Bug Fixes

- \[cli] Fix `stack select` when local default-org differs from the
service setting for default-org
[#&#8203;20010](https://redirect.github.com/pulumi/pulumi/pull/20010)

-   \[cli/new] Fix the AI prompt flow of pulumi new command
[#&#8203;19998](https://redirect.github.com/pulumi/pulumi/pull/19998)

- \[engine] Fix an issue where the engine would not issue creates and
deletes in the correct order for delete before create replacements where
dependencies had changed
[#&#8203;19945](https://redirect.github.com/pulumi/pulumi/pull/19945)

-   \[engine] Handle cancellation during construct
[#&#8203;19976](https://redirect.github.com/pulumi/pulumi/pull/19976)

-   \[engine] Run after delete hooks for component resources
[#&#8203;20025](https://redirect.github.com/pulumi/pulumi/pull/20025)

-   \[sdk/{go,nodejs,python}] Pass resource hooks through to construct
[#&#8203;20016](https://redirect.github.com/pulumi/pulumi/pull/20016)

- \[sdkgen/go] Fix panic in SDK go generator for a
map\[string]map\[string]union type
[#&#8203;19731](https://redirect.github.com/pulumi/pulumi/pull/19731)

- \[sdk/python] Log safely in Python in the presence of
`PULUMI_ERROR_OUTPUT_STRING`
[#&#8203;18903](https://redirect.github.com/pulumi/pulumi/pull/18903)

##### Miscellaneous

-   \[sdk/{go,nodejs,python}] Add PULUMI_AUTOMATION_API
[#&#8203;19974](https://redirect.github.com/pulumi/pulumi/pull/19974)

-   \[sdk/{go,nodejs,python}] Add type and name to ResourceHookArgs
[#&#8203;20017](https://redirect.github.com/pulumi/pulumi/pull/20017)

###
[`v3.181.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31810-2025-06-27)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.180.0...v3.181.0)

##### Features

- \[auto/nodejs] Add `previewRefresh` to allow dry-runs of `refresh`
commands
[#&#8203;19948](https://redirect.github.com/pulumi/pulumi/pull/19948)

- \[auto] Support providing runProgram to `preview` and `up` in auto sdk
[#&#8203;19729](https://redirect.github.com/pulumi/pulumi/pull/19729)

-   \[cli] Warn more aggressively for very old CLI versions
[#&#8203;19894](https://redirect.github.com/pulumi/pulumi/pull/19894)

- \[cli] Add `pulumi template publish` experimental command to publish
templates to the Pulumi Registry
[#&#8203;19864](https://redirect.github.com/pulumi/pulumi/pull/19864)

-   \[cli/plugin] Allow `plugin run` to run local binary plugins
[#&#8203;19903](https://redirect.github.com/pulumi/pulumi/pull/19903)

- \[auto/python] Add `preview_refresh` to allow dry-runs of `refresh`
commands
[#&#8203;19900](https://redirect.github.com/pulumi/pulumi/pull/19900)

- \[auto/python] Add `preview_destroy` to allow dry-runs of `destroy`
commands
[#&#8203;19947](https://redirect.github.com/pulumi/pulumi/pull/19947)

-   \[engine] Add `SignalAndWaitForShutdown` RPC call
[#&#8203;19837](https://redirect.github.com/pulumi/pulumi/pull/19837)

-   \[engine] Add lifecycle protobuf definitions
[#&#8203;19746](https://redirect.github.com/pulumi/pulumi/pull/19746)

##### Bug Fixes

-   \[engine] Restore asset and archive hash values after transforms
[#&#8203;19960](https://redirect.github.com/pulumi/pulumi/pull/19960)

- \[cli] Make it possible for inline automation programs to be used with
refresh/destroy
[#&#8203;19916](https://redirect.github.com/pulumi/pulumi/pull/19916)

- \[cli] Do not assume that package sources without file path prefixes
(`./`, `../`) are file paths
[#&#8203;19930](https://redirect.github.com/pulumi/pulumi/pull/19930)

- \[engine] Fix untargeted resources not always being sent to stack
analysis
[#&#8203;19943](https://redirect.github.com/pulumi/pulumi/pull/19943)
[#&#8203;19926](https://redirect.github.com/pulumi/pulumi/pull/19926)

- \[engine] Fix a panic when mixing --target, --refresh, and provider
upgrades
[#&#8203;19935](https://redirect.github.com/pulumi/pulumi/pull/19935)

- \[engine] Fix transforms holding onto engine locks during execution,
instead of just during collection
[#&#8203;19950](https://redirect.github.com/pulumi/pulumi/pull/19950)

-   \[engine] Synthesize delete steps for views during preview
[#&#8203;19952](https://redirect.github.com/pulumi/pulumi/pull/19952)

-   \[sdk/nodejs] Fix the use of parameterised packages and mocks
[#&#8203;19917](https://redirect.github.com/pulumi/pulumi/pull/19917)

###
[`v3.180.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31800-2025-06-26)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.178.0...v3.180.0)

##### Features

- \[auto] Support providing runProgram to `preview` and `up` in auto sdk
[#&#8203;19729](https://redirect.github.com/pulumi/pulumi/pull/19729)

-   \[cli] Warn more aggressively for very old CLI versions
[#&#8203;19894](https://redirect.github.com/pulumi/pulumi/pull/19894)

- \[cli] Add `pulumi template publish` experimental command to publish
templates to the Pulumi Registry
[#&#8203;19864](https://redirect.github.com/pulumi/pulumi/pull/19864)

-   \[cli/plugin] Allow `plugin run` to run local binary plugins
[#&#8203;19903](https://redirect.github.com/pulumi/pulumi/pull/19903)

- \[auto/python] Add `preview_refresh` to allow dry-runs of `refresh`
commands
[#&#8203;19900](https://redirect.github.com/pulumi/pulumi/pull/19900)

- \[auto/python] Add `preview_destroy` to allow dry-runs of `destroy`
commands
[#&#8203;19947](https://redirect.github.com/pulumi/pulumi/pull/19947)

-   \[engine] Add `SignalAndWaitForShutdown` RPC call
[#&#8203;19837](https://redirect.github.com/pulumi/pulumi/pull/19837)

-   \[engine] Add lifecycle protobuf definitions
[#&#8203;19746](https://redirect.github.com/pulumi/pulumi/pull/19746)

##### Bug Fixes

- \[cli] Make it possible for inline automation programs to be used with
refresh/destroy
[#&#8203;19916](https://redirect.github.com/pulumi/pulumi/pull/19916)

- \[cli] Do not assume that package sources without file path prefixes
(`./`, `../`) are file paths
[#&#8203;19930](https://redirect.github.com/pulumi/pulumi/pull/19930)

- \[engine] Fix untargeted resources not always being sent to stack
analysis
[#&#8203;19943](https://redirect.github.com/pulumi/pulumi/pull/19943)
[#&#8203;19926](https://redirect.github.com/pulumi/pulumi/pull/19926)

- \[engine] Fix a panic when mixing --target, --refresh, and provider
upgrades
[#&#8203;19935](https://redirect.github.com/pulumi/pulumi/pull/19935)

- \[engine] Fix transforms holding onto engine locks during execution,
instead of just during collection
[#&#8203;19950](https://redirect.github.com/pulumi/pulumi/pull/19950)

-   \[engine] Synthesize delete steps for views during preview
[#&#8203;19952](https://redirect.github.com/pulumi/pulumi/pull/19952)

-   \[sdk/nodejs] Fix the use of parameterised packages and mocks
[#&#8203;19917](https://redirect.github.com/pulumi/pulumi/pull/19917)

###
[`v3.178.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31780-2025-06-20)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.177.0...v3.178.0)

##### Features

- \[protobuf] Allow providers to request to --refresh by default from
partial failures

##### Bug Fixes

- \[auto/go] Fix destroy with debug option results in `unknown flag
--debug` error
[#&#8203;19885](https://redirect.github.com/pulumi/pulumi/pull/19885)

- \[backend/diy] Allow DIY backend to remove stacks that are empty
except for their root stack resource, inline with the behaviour of the
cloud backend
[#&#8203;19883](https://redirect.github.com/pulumi/pulumi/pull/19883)

- \[auto/python] Fix parallelism issue when running inline programs with
the automation API
[#&#8203;19855](https://redirect.github.com/pulumi/pulumi/pull/19855)

- \[cli] Fix `pulumi stack select` unnecessarily fetching stack
metadata.

The `pulumi stack select` command now only fetches stack names instead
of complete metadata,
since the selection UI only displays stack names. This significantly
improves performance,
especially for DIY backends where metadata fetching can be slow.

Previously, the command was fetching the same metadata as `pulumi stack
ls` (last update time,
resource count, etc.) but never displaying this information to the user,
causing unnecessary
delays during stack selection.
[#&#8203;19760](https://redirect.github.com/pulumi/pulumi/pull/19760)

-   \[cli/install] Don't consult the registry when `--file` is specified
[#&#8203;19859](https://redirect.github.com/pulumi/pulumi/pull/19859)

- \[engine] Fix policy pack versions for remediations from python policy
packs
[#&#8203;19856](https://redirect.github.com/pulumi/pulumi/pull/19856)

-   \[engine] Fix views with --refresh --run-program
[#&#8203;19877](https://redirect.github.com/pulumi/pulumi/pull/19877)

##### Miscellaneous

-   \[ci] Make `make install` install all subprojects
[#&#8203;19892](https://redirect.github.com/pulumi/pulumi/pull/19892)

-   \[cli] Update dotnet, java and yaml language runtimes
[#&#8203;19896](https://redirect.github.com/pulumi/pulumi/pull/19896)

-   \[cli/env] Bump esc to 0.14.3
[#&#8203;19886](https://redirect.github.com/pulumi/pulumi/pull/19886)

###
[`v3.177.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31770-2025-06-13)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.176.0...v3.177.0)

##### Features

-   \[sdk/yaml] Enable support for views by default
[#&#8203;19847](https://redirect.github.com/pulumi/pulumi/pull/19847)

##### Bug Fixes

-   \[auto/nodejs] Fix stack name in object after rename operations
[#&#8203;19836](https://redirect.github.com/pulumi/pulumi/pull/19836)

-   \[cli] Respect `--generate-only` when `convert`ing local SDKs

###
[`v3.176.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31760-2025-06-12)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.175.0...v3.176.0)

##### Features

-   \[engine] Enable support for views by default
[#&#8203;19813](https://redirect.github.com/pulumi/pulumi/pull/19813)

- \[cli/install] Resolve plugin download URLs by referencing the Pulumi
Registry
[#&#8203;19762](https://redirect.github.com/pulumi/pulumi/pull/19762)

- \[cli/plugin] Improve the error message when installing unknown
resource plugins
[#&#8203;19773](https://redirect.github.com/pulumi/pulumi/pull/19773)

-   \[sdk/go] Add experimental policy as code SDK
[#&#8203;19670](https://redirect.github.com/pulumi/pulumi/pull/19670)

##### Bug Fixes

-   \[cli] Fix `package add` always reporting providers as crashing
[#&#8203;19769](https://redirect.github.com/pulumi/pulumi/pull/19769)

-   \[programgen] Fix panic in programgen

- \[cli/display] Send output about installing policy packs to stderr
instead of stdout
[#&#8203;19816](https://redirect.github.com/pulumi/pulumi/pull/19816)

-   \[sdk/{go,nodejs,python}] Fix use of parameterized packages in mocks
[#&#8203;19722](https://redirect.github.com/pulumi/pulumi/pull/19722)

##### Miscellaneous

-   \[engine] Close SourceIterator
[#&#8203;19740](https://redirect.github.com/pulumi/pulumi/pull/19740)

-   \[pkg] Update go.opentelemetry.io/otel to v1.36.0
[#&#8203;19822](https://redirect.github.com/pulumi/pulumi/pull/19822)

###
[`v3.175.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31750-2025-06-05)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.174.0...v3.175.0)

##### Bug Fixes

- \[engine] Use the new resource goal in `refresh --run-program` with
aliases instead of the old one
[#&#8203;19578](https://redirect.github.com/pulumi/pulumi/pull/19578)

-   \[engine] Fix panic when importing resources.
[#&#8203;19750](https://redirect.github.com/pulumi/pulumi/pull/19750)

###
[`v3.174.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31740-2025-06-04)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.173.0...v3.174.0)

##### Features

-   \[auto/go] Add PolicyPacks to preview/up options
[#&#8203;19702](https://redirect.github.com/pulumi/pulumi/pull/19702)

- \[engine] Overhaul of how the import option works, the engine can now
import and then update a resource in a single deployment
[#&#8203;19339](https://redirect.github.com/pulumi/pulumi/pull/19339)

-   \[yaml] Update YAML to 1.19.2
[#&#8203;19727](https://redirect.github.com/pulumi/pulumi/pull/19727)

- \[sdkgen/python] Add sdkgen for non object method invoke return values
[#&#8203;19660](https://redirect.github.com/pulumi/pulumi/pull/19660)

##### Bug Fixes

- \[engine] Fix loading of non-client language runtimes when running
inline programs
[#&#8203;19713](https://redirect.github.com/pulumi/pulumi/pull/19713)

-   \[engine] Revert recent changes to the config system
[#&#8203;19721](https://redirect.github.com/pulumi/pulumi/pull/19721)

- \[sdk] Fix of breaking change to WithMocks which splits interface for
MethodCall
[#&#8203;19687](https://redirect.github.com/pulumi/pulumi/pull/19687)

##### Miscellaneous

-   \[cli] Ensure logs and tracing are fully written out before exiting
[#&#8203;19714](https://redirect.github.com/pulumi/pulumi/pull/19714)

-   \[engine] Log callbacks requests
[#&#8203;19691](https://redirect.github.com/pulumi/pulumi/pull/19691)

-   \[sdk/nodejs] Require Node.js >= 20
[#&#8203;19697](https://redirect.github.com/pulumi/pulumi/pull/19697)

###
[`v3.173.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31730-2025-05-29)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.172.0...v3.173.0)

##### Bug Fixes

-   \[sdk/go] Revert breaking change to WithMocks
[#&#8203;19683](https://redirect.github.com/pulumi/pulumi/pull/19683)

###
[`v3.172.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31720-2025-05-29)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.171.0...v3.172.0)

##### Features

- \[protobuf] Extend provider protocol to allow providers to request to
--refresh resources by default
[#&#8203;19487](https://redirect.github.com/pulumi/pulumi/pull/19487)

-   \[sdk/go] Add sdk support for scalar call returns from providers
[#&#8203;19589](https://redirect.github.com/pulumi/pulumi/pull/19589)

##### Bug Fixes

- \[auto/python] Revert: Add `on_error` callback for capturing
incremental stderr output, which used a library not compatible with
Windows
[#&#8203;19649](https://redirect.github.com/pulumi/pulumi/pull/19649)

- \[cli] Improve error message when stack select is run in
non-interactive mode
[#&#8203;19628](https://redirect.github.com/pulumi/pulumi/pull/19628)

- \[cli] Fix `up --refresh --run-program` to use the new program based
refresh logic
[#&#8203;19667](https://redirect.github.com/pulumi/pulumi/pull/19667)

-   \[sdkgen] Fix data race in codegen type conversions
[#&#8203;19604](https://redirect.github.com/pulumi/pulumi/pull/19604)

-   \[cli/config] Warn about YAML null being read as empty string
[#&#8203;19483](https://redirect.github.com/pulumi/pulumi/pull/19483)

- \[cli/display] Fix color of Copilot summarize-error so its more
readable on light terminals
[#&#8203;19644](https://redirect.github.com/pulumi/pulumi/pull/19644)

- \[cli/engine] Shut down plugins more gracefully when the CLI is
shutting down
[#&#8203;19603](https://redirect.github.com/pulumi/pulumi/pull/19603)

- \[programgen/python] Add pulumi as reserved keyword in binder to fix
python codegen issues
[#&#8203;19277](https://redirect.github.com/pulumi/pulumi/pull/19277)

##### Miscellaneous

-   \[sdk/python] Remove workaround for UWP reparse point issue
[#&#8203;19627](https://redirect.github.com/pulumi/pulumi/pull/19627)

###
[`v3.171.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31710-2025-05-21)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.170.0...v3.171.0)

##### Features

-   \[cli] Add `pulumi esc` as an alias for `pulumi env`
[#&#8203;19610](https://redirect.github.com/pulumi/pulumi/pull/19610)

-   \[engine] Elide `StackReference` outputs that fail to decrypt
[#&#8203;19533](https://redirect.github.com/pulumi/pulumi/pull/19533)

- \[programgen] Ensure convert uses the output project directory as the
working directory
[#&#8203;19582](https://redirect.github.com/pulumi/pulumi/pull/19582)

- \[cli/display] Release explain-preview and summarize-error Copilot
features
[#&#8203;19544](https://redirect.github.com/pulumi/pulumi/pull/19544)

- \[cli/engine] Enable debugging of source based plugins, using
`--attach-debugger plugin=<name>`
[#&#8203;19553](https://redirect.github.com/pulumi/pulumi/pull/19553)

- \[cli/install] Allow `pulumi install` to install dependencies inside
plugin project folders
[#&#8203;19580](https://redirect.github.com/pulumi/pulumi/pull/19580)

- \[auto/python] Add `on_error` callback for capturing incremental
stderr output
[#&#8203;19541](https://redirect.github.com/pulumi/pulumi/pull/19541)

- \[programgen/nodejs] Add `callSingle` to the NodeJS SDK to support
non-object method return values
[#&#8203;19387](https://redirect.github.com/pulumi/pulumi/pull/19387)

- \[programgen/python] Add sdk support for scalar call returns from
providers
[#&#8203;19419](https://redirect.github.com/pulumi/pulumi/pull/19419)

- \[sdk/python] Add new provider interface to
`pulumi.provider.experimental.provider`
[#&#8203;19080](https://redirect.github.com/pulumi/pulumi/pull/19080)

-   \[sdk/python] Support enum references in component providers
[#&#8203;19471](https://redirect.github.com/pulumi/pulumi/pull/19471)

##### Bug Fixes

-   \[cli] Enumerate supported CI systems deterministically
[#&#8203;19593](https://redirect.github.com/pulumi/pulumi/pull/19593)

- \[engine] Make the engine respect errors from plugin Handshake methods
[#&#8203;19595](https://redirect.github.com/pulumi/pulumi/pull/19595)

- \[cli/install] Fix installation of python policies to default to
virtualenv rather than site-packages
[#&#8203;19570](https://redirect.github.com/pulumi/pulumi/pull/19570)

###
[`v3.170.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31700-2025-05-15)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.169.0...v3.170.0)

##### Features

- \[engine] The engine now defers policy pack installation to the
language hosts
[#&#8203;19477](https://redirect.github.com/pulumi/pulumi/pull/19477)

- \[programgen] Copy assets emitted from converter plugins to target
directory of the generated projects
[#&#8203;19500](https://redirect.github.com/pulumi/pulumi/pull/19500)

- \[programgen] Add GeneratedProjectDirectory to ConvertProgramRequest
for converter plugins
[#&#8203;19513](https://redirect.github.com/pulumi/pulumi/pull/19513)

- \[sdk/nodejs] Pass `ignoreChanges`, `replaceOnChanges`,
`customTimeouts`, `retainOnDelete`, and `deletedWith` to the provider
constructor
[#&#8203;19496](https://redirect.github.com/pulumi/pulumi/pull/19496)

- \[sdk/nodejs] Pass `ignoreChanges`, `replaceOnChanges`,
`customTimeouts`, `retainOnDelete`, and `deletedWith` to the provider
constructor
[#&#8203;19494](https://redirect.github.com/pulumi/pulumi/pull/19494)

##### Bug Fixes

-   \[auto/python] Fix hang in automation API operations
[#&#8203;19539](https://redirect.github.com/pulumi/pulumi/pull/19539)

- \[cli/config] Config system now maintains types based on the YAML type
from the config file
[#&#8203;19503](https://redirect.github.com/pulumi/pulumi/pull/19503)

-   \[cli/install] Don't overwrite versions embedded in the plugin spec

##### Miscellaneous

-   \[engine] Split analyzer handshake into handshake and stackconfigure
[#&#8203;19506](https://redirect.github.com/pulumi/pulumi/pull/19506)

-   \[sdk] Add optional cache duration to CLIVersionResponse apitype
[#&#8203;19523](https://redirect.github.com/pulumi/pulumi/pull/19523)

- \[sdk/go] Accept `context.Context` in `workspace.GetPluginInfo` and
`workspace.GetPluginPath`.
[#&#8203;19527](https://redirect.github.com/pulumi/pulumi/pull/19527)

- \[sdk/go] Accept `context.Context` wherever new `plugin.Context`s are
created.
[#&#8203;19526](https://redirect.github.com/pulumi/pulumi/pull/19526)

###
[`v3.169.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31690-2025-05-08)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.168.0...v3.169.0)

##### Features

- \[cli] Add `--run-program` to `preview` and `up` for use with
`--refresh`
[#&#8203;19449](https://redirect.github.com/pulumi/pulumi/pull/19449)

- \[engine] Use language runtimes `RunPlugin` method for booting policy
packs

-   \[pkg] Add MainContext to allow for provider cancelation
[#&#8203;19445](https://redirect.github.com/pulumi/pulumi/pull/19445)

- \[auto/{nodejs,python}] Add --config-file option to Automation API
operations (Preview, Up, Refresh, Destroy) for NodeJS, and Python

##### Bug Fixes

- \[engine] Fix `refresh --run-program` hanging on non-trivial programs
[#&#8203;19448](https://redirect.github.com/pulumi/pulumi/pull/19448)

- \[programgen/nodejs] Fix generating imports for functions in 3-rd
party packages such as
[@&#8203;pulumiverse/scaleway](https://redirect.github.com/pulumiverse/scaleway)
[#&#8203;19410](https://redirect.github.com/pulumi/pulumi/pull/19410)

###
[`v3.168.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31680-2025-05-07)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.167.0...v3.168.0)

##### Features

- \[cli] Consider unresolved references a validation error; add the
`--allow-dangling-references` flag to opt out of this behaviour
[#&#8203;19216](https://redirect.github.com/pulumi/pulumi/pull/19216)

-   \[sdk] Support Node.js 24
[#&#8203;19420](https://redirect.github.com/pulumi/pulumi/pull/19420)

-   \[cli/state] Add pulumi state protect
[#&#8203;19355](https://redirect.github.com/pulumi/pulumi/pull/19355)

-   \[sdk/go] Update to Go 1.23
[#&#8203;19118](https://redirect.github.com/pulumi/pulumi/pull/19118)

-   \[sdk/go] Add a Delete method to property.Map
[#&#8203;19384](https://redirect.github.com/pulumi/pulumi/pull/19384)

- \[sdk/go] Support private GitHub and GitLab instances, when installing
plugins directly from a repository
[#&#8203;19377](https://redirect.github.com/pulumi/pulumi/pull/19377)

-   \[sdk/python] Support Resource References
[#&#8203;19226](https://redirect.github.com/pulumi/pulumi/pull/19226)

##### Bug Fixes

- \[engine] Adjust analyzer handshake request that stack configuration
is optional
[#&#8203;19435](https://redirect.github.com/pulumi/pulumi/pull/19435)

-   \[cli/display] Fix race condition when rendering progress events
[#&#8203;19434](https://redirect.github.com/pulumi/pulumi/pull/19434)

- \[cli/package] Make sure namespaces from Git Plugins are always
lowercase
[#&#8203;19441](https://redirect.github.com/pulumi/pulumi/pull/19441)

-   \[cli/plugin] Allow creating analyzer plugins without config
[#&#8203;19393](https://redirect.github.com/pulumi/pulumi/pull/19393)
[#&#8203;19395](https://redirect.github.com/pulumi/pulumi/pull/19395)

##### Miscellaneous

-   \[cli] Update yaml, java & dotnet

###
[`v3.167.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31670-2025-05-01)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.166.0...v3.167.0)

##### Features

- \[auto/nodejs] Add `onError` callback for capturing incremental stderr
output
[#&#8203;19372](https://redirect.github.com/pulumi/pulumi/pull/19372)

-   \[pkg] Allow for hyphens in function names
[#&#8203;19352](https://redirect.github.com/pulumi/pulumi/pull/19352)

-   \[auto/python] Add the ability to configure a remote executor image
[#&#8203;19304](https://redirect.github.com/pulumi/pulumi/pull/19304)

-   \[sdk/yaml] Update pulumi-yaml to v1.18.0
[#&#8203;19381](https://redirect.github.com/pulumi/pulumi/pull/19381)

##### Bug Fixes

- \[auto/nodejs] Fix flag mismatch with preview-only refresh operations
[#&#8203;19370](https://redirect.github.com/pulumi/pulumi/pull/19370)

-   \[cli/plugin] Allow creating analyzer plugins without config
[#&#8203;19392](https://redirect.github.com/pulumi/pulumi/pull/19392)

- \[auto/python] Fix flag mismatch with preview-only refresh operations
[#&#8203;19373](https://redirect.github.com/pulumi/pulumi/pull/19373)

###
[`v3.166.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31660-2025-04-29)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.165.0...v3.166.0)

##### Features

-   \[engine] Add Handshake to analyzer plugins
[#&#8203;19328](https://redirect.github.com/pulumi/pulumi/pull/19328)

- \[auto/go] Add `--exclude` and `--exclude-dependents` to the
Automation API
[#&#8203;19333](https://redirect.github.com/pulumi/pulumi/pull/19333)

- \[auto/python] Add `--exclude` and `--exclude-dependents` to the
Automation API
[#&#8203;19310](https://redirect.github.com/pulumi/pulumi/pull/19310)

- \[cli/package] Introduce `pulumi package info` to show information
about a package

-   \[sdk/python] Decorate resources and enums with their type token
[#&#8203;19357](https://redirect.github.com/pulumi/pulumi/pull/19357)

##### Bug Fixes

-   \[cli] Always save fully qualified stack names to the settings file
[#&#8203;19336](https://redirect.github.com/pulumi/pulumi/pull/19336)

- \[engine] Fix error message when trying to load plugins in private
repositories with no authentication
[#&#8203;19331](https://redirect.github.com/pulumi/pulumi/pull/19331)

-   \[sdk/nodejs] Return complete package descriptors for dependencies
[#&#8203;19346](https://redirect.github.com/pulumi/pulumi/pull/19346)

##### Miscellaneous

-   \[cli/package] Mark package publish command as non-experimental
[#&#8203;19356](https://redirect.github.com/pulumi/pulumi/pull/19356)

- \[sdk/python] Move pulumi.provider.experimental.provider to
pulumi.provider.experimental.component

</details>

<details>
<summary>pulumi/pulumi-docker-build
(github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild)</summary>

###
[`v0.0.12`](https://redirect.github.com/pulumi/pulumi-docker-build/compare/v0.0.11...v0.0.12)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-docker-build/compare/v0.0.11...v0.0.12)

</details>

<details>
<summary>pulumi/pulumi-dotnet
(github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet/v3)</summary>

###
[`v3.85.1`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3851---2025-07-11)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.85.0...v3.85.1)

##### Bug Fixes

- \[sdk] Pick versioned artifacts when publishing
[#&#8203;667](https://redirect.github.com/pulumi/pulumi-dotnet/pull/667)

###
[`v3.85.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3850---2025-07-11)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.84.0...v3.85.0)

##### Improvements

- \[sdk] Implement resource hooks in the .Net SDK
[#&#8203;663](https://redirect.github.com/pulumi/pulumi-dotnet/pull/663)

##### Bug Fixes

- \[sdk] Disable stack auto parenting for resources that are read from
the engine
[#&#8203;615](https://redirect.github.com/pulumi/pulumi-dotnet/pull/615)

##### Improvements

- \[sdk/provider] Send old inputs to diff and update and delete
[#&#8203;650](https://redirect.github.com/pulumi/pulumi-dotnet/pull/650)

###
[`v3.84.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3840---2025-06-18)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.83.2...v3.84.0)

##### Improvements

- \[sdk] Add support for invoke transforms
[#&#8203;606](https://redirect.github.com/pulumi/pulumi-dotnet/pull/606)

###
[`v3.83.2`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3832---2025-06-12)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.82.1...v3.83.2)

##### Bug Fixes

- \[build] Fix release process
[#&#8203;643](https://redirect.github.com/pulumi/pulumi-dotnet/pull/643)

- \[runtime] Respect grpc cancellation to stop running subcommands when
the engine has requested it
[#&#8203;642](https://redirect.github.com/pulumi/pulumi-dotnet/pull/642)

###
[`v3.82.1`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3821---2025-05-28)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.82.0...v3.82.1)

##### Bug Fixes

- \[runtime] Fix gen-sdk fails if there are dangling references
[#&#8203;614](https://redirect.github.com/pulumi/pulumi-dotnet/pull/614)

###
[`v3.82.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3820---2025-05-21)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.81.0...v3.82.0)

##### Improvements

- \[runtime] Enable debugging providers using --attach-debugger=plugins
[#&#8203;600](https://redirect.github.com/pulumi/pulumi-dotnet/pull/600)

###
[`v3.81.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3810---2025-05-15)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.80.0...v3.81.0)

##### Improvements

- \[sdk] Update PropertyValue to track secretness and dependencies
directly on PropertyValue
[#&#8203;591](https://redirect.github.com/pulumi/pulumi-dotnet/pull/591)

##### Bug Fixes

- \[sdk] Component output properties are no longer overwritten with
`unknown`
[#&#8203;595](https://redirect.github.com/pulumi/pulumi-dotnet/pull/595)

##### Improvements

- \[sdk/auto] Expose `--remote-executor-*` flags in the Automation API
[#&#8203;587](https://redirect.github.com/pulumi/pulumi-dotnet/pull/587)

###
[`v3.80.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3800---2025-05-07)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.79.0...v3.80.0)

##### Improvements

- \[sdk/auto] Add --run-program to destory and refresh operations
[#&#8203;580](https://redirect.github.com/pulumi/pulumi-dotnet/pull/580)

- \[sdk/auto] Add `--exclude` and `--exclude-dependents` to the
Automation API
[#&#8203;582](https://redirect.github.com/pulumi/pulumi-dotnet/pull/582)

###
[`v3.79.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3790---2025-04-24)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.78.0...v3.79.0)

##### Bug Fixes

- \[sdk] Fix deserialising InputMap<T> with unknown values
[#&#8203;570](https://redirect.github.com/pulumi/pulumi-dotnet/pull/570)

##### Improvements

- \[sdk/auto] Adds the `ConfigFile` option to all operation options in
the Automation API (UpOptions, PreviewOptions, RefreshOptions,
DestroyOptions) to support specifyin
[#&#8203;573](https://redirect.github.com/pulumi/pulumi-dotnet/pull/573)

###
[`v3.78.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3780---2025-04-08)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.77.0...v3.78.0)

##### Bug Fixes

- \[sdk] Async context is now captured from the main program and
restored in transform functions
[#&#8203;561](https://redirect.github.com/pulumi/pulumi-dotnet/pull/561)

- \[sdk] Use the invariant culture when converting strings/numbers,
replace some readonly fields with readonly properties in
`Pulumi.Experimental`, and rename some generic type parameters to follow
the standard naming convention of being prefixed by `T`, e.g.
`InputMap<V>` => `InputMap<TValue>`
[#&#8203;564](https://redirect.github.com/pulumi/pulumi-dotnet/pull/564)

##### Improvements

- \[sdk/auto] Add the `--preview-only` flag to the `destroy` command in
the Automation API
[#&#8203;554](https://redirect.github.com/pulumi/pulumi-dotnet/pull/554)

- \[sdk/provider] Replaced `PropertyValue.TryUnwrap` with `Unwrap`
[#&#8203;562](https://redirect.github.com/pulumi/pulumi-dotnet/pull/562)

##### Bug Fixes

- \[sdk/provider] Add missing support for EnumType to
PropertyValueSerializer
[#&#8203;557](https://redirect.github.com/pulumi/pulumi-dotnet/pull/557)

###
[`v3.77.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3770---2025-03-27)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.76.1...v3.77.0)

##### Bug Fixes

- \[sdk] Exclude resource references from property dependencies for
packaged components
[#&#8203;488](https://redirect.github.com/pulumi/pulumi-dotnet/pull/488)

##### Improvements

- \[sdk/auto] Add --show-reads Support for Pulumi Up & Preview
[#&#8203;542](https://redirect.github.com/pulumi/pulumi-dotnet/pull/542)

- \[sdk/provider] Infer package name and namespace in
ComponentProviderHost
[#&#8203;555](https://redirect.github.com/pulumi/pulumi-dotnet/pull/555)

- \[sdk/provider] Default the version of ComponentProviderHost to 0.0.0
[#&#8203;556](https://redirect.github.com/pulumi/pulumi-dotnet/pull/556)

##### Bug Fixes

- \[sdk/provider] Handle logging arguments in provider's
getEngineAddress
[#&#8203;536](https://redirect.github.com/pulumi/pulumi-dotnet/pull/536)

###
[`v3.76.1`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3761---2025-03-10)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.76.0...v3.76.1)

###
[`v3.76.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3760---2025-03-10)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.75.2...v3.76.0)

##### Improvements

- \[sdk] Make OutputConstructorAttribute optional
[#&#8203;438](https://redirect.github.com/pulumi/pulumi-dotnet/pull/438)

- \[sdk] Log a warning when trying to convert outputs to strings
[#&#8203;525](https://redirect.github.com/pulumi/pulumi-dotnet/pull/525)

- \[sdk/auto] Add `pulumi install` to Automation Api
[#&#8203;426](https://redirect.github.com/pulumi/pulumi-dotnet/pull/426)

- \[sdk/auto] Add `--refresh` to preview, up and destroy commands
[#&#8203;431](https://redirect.github.com/pulumi/pulumi-dotnet/pull/431)

##### Bug Fixes

- \[sdk/converter] Fix conversion for nested Output<T>
[#&#8203;527](https://redirect.github.com/pulumi/pulumi-dotnet/pull/527)

###
[`v3.75.2`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3752---2025-02-26)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.75.1...v3.75.2)

##### Bug Fixes

- \[runtime] Revert changes to target net8 in provider SDKs
[#&#8203;515](https://redirect.github.com/pulumi/pulumi-dotnet/pull/515)

###
[`v3.75.1`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3751---2025-02-26)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.75.0...v3.75.1)

Follow up release after v3.75, this reverts the updates to targeting
net8.

###
[`v3.75.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3750---2025-02-26)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.74.0...v3.75.0)

##### Improvements

- \[sdk] updated pulumi submodule and go.mod sdk/pkg and excluded
failing conformance tests
[#&#8203;482](https://redirect.github.com/pulumi/pulumi-dotnet/pull/482)

- \[sdk] Support parameterization for remote component resources
[#&#8203;502](https://redirect.github.com/pulumi/pulumi-dotnet/pull/502)

##### bug-fixes

- \[sdk] Fix inconsistent behavior of inheritance for InputAttribute and
OutputAttribute
[#&#8203;506](https://redirect.github.com/pulumi/pulumi-dotnet/pull/506)

##### Improvements

- \[sdk/auto] Add the `--preview-only` flag for the `refresh` command
[#&#8203;496](https://redirect.github.com/pulumi/pulumi-dotnet/pull/496)

- \[sdk/provider] Schema Analyzer to infer component schemas from
classes
[#&#8203;468](https://redirect.github.com/pulumi/pulumi-dotnet/pull/468)

- \[sdk/provider] Implement component provider host for auto-inferred
components
[#&#8203;507](https://redirect.github.com/pulumi/pulumi-dotnet/pull/507)

###
[`v3.74.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3740---2025-02-19)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.73.0...v3.74.0)

##### Improvements

- \[sdk] Add ability to disable ToString on Output<T>
[#&#8203;461](https://redirect.github.com/pulumi/pulumi-dotnet/pull/461)

##### bug-fixes

- \[sdk] Handle null in InputMap/List implicit conversions
[#&#8203;459](https://redirect.github.com/pulumi/pulumi-dotnet/pull/459)

- \[sdk] Fix the Provider and Providers option when used in resource
transforms
[#&#8203;460](https://redirect.github.com/pulumi/pulumi-dotnet/pull/460)

- \[sdk] Fix adding the same value to InputMap multiple times
[#&#8203;462](https://redirect.github.com/pulumi/pulumi-dotnet/pull/462)

###
[`v3.73.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3730---2025-02-06)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.72.0...v3.73.0)

##### Improvements

- \[sdk] InputMap and InputList no longer flatten nested
unknowns/secrets to apply to the whole object.
[#&#8203;449](https://redirect.github.com/pulumi/pulumi-dotnet/pull/449)

##### Bug Fixes

- \[runtime] Don't parse runtime options at startup, defer to the
options sent for specific methods
[#&#8203;451](https://redirect.github.com/pulumi/pulumi-dotnet/pull/451)

###
[`v3.72.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3720---2025-01-30)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.71.1...v3.72.0)

##### Bug Fixes

- \[sdk] Avoid calling invokes with dependencies on unknown resources
[#&#8203;441](https://redirect.github.com/pulumi/pulumi-dotnet/pull/441)

- \[sdk] Wait for resources in the input property dependencies
[#&#8203;444](https://redirect.github.com/pulumi/pulumi-dotnet/pull/444)

##### Improvements

- \[runtime] Plugins with msbuild warnings can still be run
[#&#8203;437](https://redirect.github.com/pulumi/pulumi-dotnet/pull/437)

- \[runtime] Implement GetRequiredPackages to replace GetRequiredPlugins
[#&#8203;440](https://redirect.github.com/pulumi/pulumi-dotnet/pull/440)

###
[`v3.71.1`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3711---2024-12-19)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.71.0...v3.71.1)

##### Bug Fixes

- \[sdk] Await background tasks during inline deployment
[#&#8203;420](https://redirect.github.com/pulumi/pulumi-dotnet/pull/420)

- \[sdk] Fix parameterized explicit providers
[#&#8203;435](https://redirect.github.com/pulumi/pulumi-dotnet/pull/435)

- \[runtime] Fix the language plugin to return a version
[#&#8203;390](https://redirect.github.com/pulumi/pulumi-dotnet/pull/390)

###
[`v3.71.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3710---2024-12-05)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.70.0...v3.71.0)

##### Improvements

- \[sdk] Allow specifying dependencies for output invokes
[#&#8203;412](https://redirect.github.com/pulumi/pulumi-dotnet/pull/412)

- \[sdk/provider] Add Parameterize to the provider interface
[#&#8203;404](https://redirect.github.com/pulumi/pulumi-dotnet/pull/404)

###
[`v3.70.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3700---2024-11-27)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.69.0...v3.70.0)

##### Bug Fixes

- \[sdk/auto] Fix warning for inline programs
[#&#8203;388](https://redirect.github.com/pulumi/pulumi-dotnet/pull/388)

##### Improvements

- \[runtime] Reduce binary size by stripping debug information
[#&#8203;411](https://redirect.github.com/pulumi/pulumi-dotnet/pull/411)

###
[`v3.69.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3690---2024-11-21)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.68.0...v3.69.0)

##### Improvements

- \[sdk] Make Pulumi.RunException public
[#&#8203;364](https://redirect.github.com/pulumi/pulumi-dotnet/pull/364)

- \[sdk] Add `DeferredOutput` for resolving some output/input cycles
[#&#8203;385](https://redirect.github.com/pulumi/pulumi-dotnet/pull/385)

##### bug-fixes

- \[sdk] Support input lists and maps in JsonSerializer.SerializeAsync
and JsonSerializer.DeserializeAsync
[#&#8203;372](https://redirect.github.com/pulumi/pulumi-dotnet/pull/372)

- \[sdk] Fix publishing to set a required property used by the
Automation Api to Install Pulumi cli
[#&#8203;393](https://redirect.github.com/pulumi/pulumi-dotnet/pull/393)

##### Improvements

- \[sdk/auto] Lessen the strictness of `OperationTypeConverter` to allow
unknown operations
[#&#8203;350](https://redirect.github.com/pulumi/pulumi-dotnet/pull/350)

- \[sdk/auto] Update YamlDotNet to v16.1.2
[#&#8203;354](https://redirect.github.com/pulumi/pulumi-dotnet/pull/354)

- \[sdk/auto] Add pulumi stack change-secrets-provider to automation api
[#&#8203;383](https://redirect.github.com/pulumi/pulumi-dotnet/pull/383)

- \[sdk/provider] OutputReference.Value will normalize to null for
Computed values
[#&#8203;381](https://redirect.github.com/pulumi/pulumi-dotnet/pull/381)

##### Bug Fixes

- \[sdk/provider] Fix a bug deserialising unknown secrets
[#&#8203;378](https://redirect.github.com/pulumi/pulumi-dotnet/pull/378)

- \[runtime] Improve the detections of project files when attaching a
debugger
[#&#8203;255](https://redirect.github.com/pulumi/pulumi-dotnet/pull/255)

- \[runtime] Fix RunPlugin with new versions of the pulumi cli
[#&#8203;395](https://redirect.github.com/pulumi/pulumi-dotnet/pull/395)

###
[`v3.68.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3680---2024-09-17)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.67.1...v3.68.0)

##### Improvements

- \[sdk] Parameterized providers are now considered stable
[#&#8203;347](https://redirect.github.com/pulumi/pulumi-dotnet/pull/347)

- \[sdk/provider] Support authoring multi-language components in .NET
[#&#8203;275](https://redirect.github.com/pulumi/pulumi-dotnet/pull/275)

###
[`v3.67.1`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3671---2024-09-13)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.67.0...v3.67.1)

##### Bug Fixes

- \[runtime] Fix debugger support
[#&#8203;343](https://redirect.github.com/pulumi/pulumi-dotnet/pull/343)

###
[`v3.67.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3670---2024-09-10)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.66.2...v3.67.0)

##### Improvements

- \[sdk] Add support for attaching debuggers
[#&#8203;332](https://redirect.github.com/pulumi/pulumi-dotnet/pull/332)

##### Bug Fixes

- \[sdk/provider] Fix serialization of ComponentResources (no id
required)
[#&#8203;331](https://redirect.github.com/pulumi/pulumi-dotnet/pull/331)

- \[sdk/provider] Fix output value serialization.
[#&#8203;337](https://redirect.github.com/pulumi/pulumi-dotnet/pull/337)

###
[`v3.66.2`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3662---2024-08-20)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.66.1...v3.66.2)

##### Bug Fixes

- \[sdk] Update Pulumi.Protobuf to v3.27.3 (fork)
[#&#8203;324](https://redirect.github.com/pulumi/pulumi-dotnet/pull/324)

###
[`v3.66.1`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3661---2024-08-09)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.66.0...v3.66.1)

##### Bug Fixes

- \[sdk] Fix binary compatibility with provider SDKs built using older
version of the core SDK
[#&#8203;318](https://redirect.github.com/pulumi/pulumi-dotnet/pull/318)

###
[`v3.66.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3660---2024-08-09)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.65.0...v3.66.0)

##### Improvements

- \[sdk] Support package parameterization for
Read/RegisterResource/Call/Invoke
[#&#8203;311](https://redirect.github.com/pulumi/pulumi-dotnet/pull/311)

##### Bug Fixes

- \[sdk] Fix type annotations for inputListFromT0/1
[#&#8203;301](https://redirect.github.com/pulumi/pulumi-dotnet/pull/301)

- \[sdk] Fix race condition in GrpcMonitor's GrpcChannel management
[#&#8203;304](https://redirect.github.com/pulumi/pulumi-dotnet/pull/304)

- \[sdk] Fix unknown inputs deserialization
[#&#8203;306](https://redirect.github.com/pulumi/pulumi-dotnet/pull/306)

- \[sdk] Fix program hanging when a resource transformation throws an
exception
[#&#8203;307](https://redirect.github.com/pulumi/pulumi-dotnet/pull/307)

- \[sdk] Fix handling of input properties with backing fields
[#&#8203;308](https://redirect.github.com/pulumi/pulumi-dotnet/pull/308)

##### Improvements

- \[sdk/auto] Implement Stack.ImportAsync() for batch importing
resources into a stack
[#&#8203;296](https://redirect.github.com/pulumi/pulumi-dotnet/pull/296)

###
[`v3.65.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3650---2024-07-18)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.64.0...v3.65.0)

##### Improvements

- \[sdk] Update Grpc dependency.
[#&#8203;256](https://redirect.github.com/pulumi/pulumi-dotnet/pull/256)

- \[sdk] Strongly type URN values in Provider
[#&#8203;293](https://redirect.github.com/pulumi/pulumi-dotnet/pull/293)

##### Bug Fixes

- \[sdk] Enable .net analyzers and fix warnings.
[#&#8203;278](https://redirect.github.com/pulumi/pulumi-dotnet/pull/278)

- \[sdk] Bufix Parsing of CustomTimeouts
[#&#8203;290](https://redirect.github.com/pulumi/pulumi-dotnet/pull/290)

- \[sdk] Add support for deserializing output values and use them from
transforms
[#&#8203;298](https://redirect.github.com/pulumi/pulumi-dotnet/pull/298)

##### Improvements

- \[runtime] Update pulumi/pulumi to 3.121
[#&#8203;288](https://redirect.github.com/pulumi/pulumi-dotnet/pull/288)

###
[`v3.64.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3640---2024-06-10)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.63.1...v3.64.0)

##### Improvements

- \[sdk] Make transforms a stable feature, not experimental
[#&#8203;270](https://redirect.github.com/pulumi/pulumi-dotnet/pull/270)

- \[sdk/provider] Refactor Provider tests in order to prepare
integration testing
[#&#8203;277](https://redirect.github.com/pulumi/pulumi-dotnet/pull/277)

##### Bug Fixes

- \[runtime] Upgrade dependencies
[#&#8203;279](https://redirect.github.com/pulumi/pulumi-dotnet/pull/279)

###
[`v3.63.1`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3631---2024-04-25)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.63.0...v3.63.1)

##### Bug Fixes

- \[sdk] Remove Google.Protobuf pinned dependency.
[#&#8203;268](https://redirect.github.com/pulumi/pulumi-dotnet/pull/268)

###
[`v3.63.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3630---2024-04-25)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.62.0...v3.63.0)

##### Improvements

- \[sdk] Support the Result field for better support of up
--continue-on-error
[#&#8203;259](https://redirect.github.com/pulumi/pulumi-dotnet/pull/259)

##### Bug Fixes

- \[sdk] Revert gRPC update that broke large messages.
[#&#8203;266](https://redirect.github.com/pulumi/pulumi-dotnet/pull/266)

##### Improvements

- \[sdk/auto] Add ContinueOnError option to the automation API
[#&#8203;265](https://redirect.github.com/pulumi/pulumi-dotnet/pull/265)

###
[`v3.62.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3620---2024-04-22)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.61.0...v3.62.0)

##### Improvements

- \[sdk] Allow apply to have unknown values during updates
[#&#8203;258](https://redirect.github.com/pulumi/pulumi-dotnet/pull/258)

##### Bug Fixes

- \[sdk] Use InvariantCulture when parsing numbers from config
[#&#8203;262](https://redirect.github.com/pulumi/pulumi-dotnet/pull/262)

- \[sdk] Pin Google.Protobuf to 3.24.
[#&#8203;263](https://redirect.github.com/pulumi/pulumi-dotnet/pull/263)

###
[`v3.61.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3610---2024-04-16)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.60.0...v3.61.0)

##### Improvements

- \[sdk] Add attribute to handle deserialization of constructor
parameters with name overrides
[#&#8203;231](https://redirect.github.com/pulumi/pulumi-dotnet/pull/231)

- \[sdk] Add experimental support for the new transforms system
[#&#8203;234](https://redirect.github.com/pulumi/pulumi-dotnet/pull/234)

- \[sdk] Add FSharp Ops helpers
[#&#8203;250](https://redirect.github.com/pulumi/pulumi-dotnet/pull/250)

- \[sdk] Handle Outputs in derived Stacks
[#&#8203;251](https://redirect.github.com/pulumi/pulumi-dotnet/pull/251)

###
[`v3.60.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3600---2024-03-05)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.59.0...v3.60.0)

##### Improvements

- \[sdk] Add environment add and remove commands to automation api
[#&#8203;210](https://redirect.github.com/pulumi/pulumi-dotnet/pull/210)

- \[sdk] Update Grpc dependency.
[#&#8203;219](https://redirect.github.com/pulumi/pulumi-dotnet/pull/219)

- \[sdk] Drop support for netcoreapp3.1
[#&#8203;235](https://redirect.github.com/pulumi/pulumi-dotnet/pull/235)

- \[sdk/auto] Add new API to install the Pulumi CLI from the Automation
API
[#&#8203;226](https://redirect.github.com/pulumi/pulumi-dotnet/pull/226)

- \[sdk/provider] Initial implementation of a reflection-based
PropertyValue deserializer
[#&#8203;201](https://redirect.github.com/pulumi/pulumi-dotnet/pull/201)

###
[`v3.59.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3590---2023-11-15)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.58.0...v3.59.0)

##### Improvements

- \[sdk] Implement reflection-based RegisterOutputs() for component
resources
[#&#8203;200](https://redirect.github.com/pulumi/pulumi-dotnet/pull/200)

- \[sdk] Support .NET 8.
[#&#8203;205](https://redirect.github.com/pulumi/pulumi-dotnet/pull/205)

##### Bug Fixes

- \[sdk/auto] Fix issue with specifying a git username for remote
workspaces.
[#&#8203;186](https://redirect.github.com/pulumi/pulumi-dotnet/pull/186)

###
[`v3.58.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3580---2023-10-27)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.57.0...v3.58.0)

##### Bug Fixes

- \[sdk] Register and await tasks created from `Apply` that don't return
anything.
[#&#8203;183](https://redirect.github.com/pulumi/pulumi-dotnet/pull/183)

##### Improvements

- \[sdk/auto] Add support for the path option for config operations.
[#&#8203;191](https://redirect.github.com/pulumi/pulumi-dotnet/pull/191)

###
[`v3.57.0`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.57.0)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.56.2...v3.57.0)

##### Improvements

- Converter SDK: add `Args: string[]` to the `ConvertProgramRequest`
fields which allows converter plugins to access args provided to `pulumi
convert`

###
[`v3.56.2`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.56.2)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.56.1...v3.56.2)

##### Improvements

- Plugin: clean up resources and exit cleanly on receiving SIGINT or
CTRL_BREAK.

##### Bug Fixes

###
[`v3.56.1`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.56.1)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.56.0...v3.56.1)

##### Bug Fixes

- \[sdk/automation-api] Adds guards in a non-destructive way against
invalid JSON engine event data.

[#&#8203;167](https://redirect.github.com/pulumi/pulumi-dotnet/pull/167)

###
[`v3.56.0`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.56.0)

[Compare Source](https:

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - "every weekday" (UTC).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Renovate
Bot](https://redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOS4wIiwidXBkYXRlZEluVmVyIjoiMzkuMTkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwiaW1wYWN0L25vLWNoYW5nZWxvZy1yZXF1aXJlZCJdfQ==-->

---------

Co-authored-by: pulumi-renovate[bot] <189166143+pulumi-renovate[bot]@users.noreply.github.com>
Co-authored-by: Bryce Lampe <bryce@pulumi.com>
2025-07-18 23:53:59 +00:00
Pulumi Bot
41c9563cd9 Update GitHub Actions workflows. (#556)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 3ea631495d8b234d63f01ede2bd40b2762bcc595.
2025-06-17 05:52:02 +00:00
Pulumi Bot
0f032c1f00 Update GitHub Actions workflows. (#555)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 03dcc6282f6e8b629b6a3cc35661997622d8e0ca.
2025-06-12 05:47:49 +00:00
Pulumi Bot
7309652425 Update GitHub Actions workflows. (#554)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit e5045b810db34310235bbe1a83d3c3758995e790.
2025-06-07 05:48:34 +00:00
Bryce Lampe
448c16a695 Improve exec error messages (#553)
Fixes https://github.com/pulumi/pulumi-docker-build/issues/549.
2025-06-04 11:53:24 -07:00
Pulumi Bot
f459033434 Update GitHub Actions workflows. (#552)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 9983e5b04e591b71339227336332131e8fda153d.
2025-05-23 05:48:08 +00:00
Pulumi Bot
afa2625655 Update GitHub Actions workflows. (#550)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 00e10f05873768ef726a49069865722353f8ca3a.
2025-05-22 05:48:21 +00:00
Pulumi Bot
0ec7f16bd7 Update GitHub Actions workflows. (#548)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 06a4a07bc11ada9498ce86091ac0d55443ee294b.
2025-05-17 05:46:30 +00:00
Bryce Lampe
82057d3065 Freeze v0.0.12 (#547)
### Changed

- Upgraded pulumi-go-provider to v1.0.0-rc2.

### Fixed

- Builds now respect cancellation.
(https://github.com/pulumi/pulumi-docker-build/issues/533,
https://github.com/pulumi/pulumi-docker-build/pull/522)
2025-05-16 12:08:02 -07:00
Pulumi Bot
4ea5b9a5d0 Update GitHub Actions workflows. (#546)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 06a4a07bc11ada9498ce86091ac0d55443ee294b.
2025-05-16 05:50:09 +00:00
Bryce Lampe
4436ab5e76 Changes for upcoming go-provider v1.0 (#525)
Fixes #535
2025-05-15 16:38:58 -07:00
Pulumi Bot
a59206e63c Update GitHub Actions workflows. (#545)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit cbb506c8323134f33314a4877d8cd305b127d6da.
2025-05-15 05:45:20 +00:00
Pulumi Bot
27abab8846 Update GitHub Actions workflows. (#544)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 5e6b747e32eb956036f294bce851d4f17a9fb91d.
2025-05-14 05:47:00 +00:00
Bryce Lampe
30a01b6893 Handle context cancellation during builds (#539)
`buildx.Build` doesn't terminate if context is canceled, so this PR
rearranges things such that we can wait for the build or context to
finish.

Fixes #533.
2025-05-05 16:12:48 -07:00
Pulumi Bot
1cba556bd2 Update GitHub Actions workflows. (#541)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 32350b582889a810aa1e8465fc4f7a65666fa1c1.
2025-05-05 05:47:20 +00:00
Pulumi Bot
6722ef8f68 Update GitHub Actions workflows. (#540)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 2fc5dd575a82667c4703a7fcb031c73ad98d0d6c.
2025-05-03 05:48:02 +00:00
Ian Wahbe
7eb1e3fe50 Flow context.Context through image builds (#522)
This should help with cancel responsiveness. Right now, there are
multiple places where docker does not respond to cancel for long periods
of time.
2025-05-02 12:31:40 +02:00
Pulumi Bot
7ca0d3a6a4 Update GitHub Actions workflows. (#538)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit c2ecd95490e11d58e65add09cd1771e72475b14f.
2025-05-02 05:49:32 +00:00
Bryce Lampe
52d8cfcd96 Fix bad dependencies (#536)
I had to relax branch protections in order to merge #527 and during that
 time Renovate was able to sneak some bad PRs in.

This rolls those changes back.
2025-05-01 15:47:53 -07:00
Bryce Lampe
7009361c0f Add missing changelog entries (#527) 2025-04-29 11:14:40 -07:00
pulumi-renovate[bot]
bfc77e1fe2 Update module github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet to v3 (#391)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet](https://redirect.github.com/pulumi/pulumi-dotnet)
| require | major | `v0.0.0-20241219213128-b19d8c8da35b` -> `v3.79.0` |

---

### Release Notes

<details>
<summary>pulumi/pulumi-dotnet
(github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet)</summary>

###
[`v3.79.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3790---2025-04-24)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.78.0...v3.79.0)

##### Bug Fixes

- \[sdk] Fix deserialising InputMap<T> with unknown values
[#&#8203;570](https://redirect.github.com/pulumi/pulumi-dotnet/pull/570)

##### Improvements

- \[sdk/auto] Adds the `ConfigFile` option to all operation options in
the Automation API (UpOptions, PreviewOptions, RefreshOptions,
DestroyOptions) to support specifyin
[#&#8203;573](https://redirect.github.com/pulumi/pulumi-dotnet/pull/573)

###
[`v3.78.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3780---2025-04-08)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.77.0...v3.78.0)

##### Bug Fixes

- \[sdk] Async context is now captured from the main program and
restored in transform functions
[#&#8203;561](https://redirect.github.com/pulumi/pulumi-dotnet/pull/561)

- \[sdk] Use the invariant culture when converting strings/numbers,
replace some readonly fields with readonly properties in
`Pulumi.Experimental`, and rename some generic type parameters to follow
the standard naming convention of being prefixed by `T`, e.g.
`InputMap<V>` => `InputMap<TValue>`
[#&#8203;564](https://redirect.github.com/pulumi/pulumi-dotnet/pull/564)

##### Improvements

- \[sdk/auto] Add the `--preview-only` flag to the `destroy` command in
the Automation API
[#&#8203;554](https://redirect.github.com/pulumi/pulumi-dotnet/pull/554)

- \[sdk/provider] Replaced `PropertyValue.TryUnwrap` with `Unwrap`
[#&#8203;562](https://redirect.github.com/pulumi/pulumi-dotnet/pull/562)

##### Bug Fixes

- \[sdk/provider] Add missing support for EnumType to
PropertyValueSerializer
[#&#8203;557](https://redirect.github.com/pulumi/pulumi-dotnet/pull/557)

###
[`v3.77.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3770---2025-03-27)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.76.1...v3.77.0)

##### Bug Fixes

- \[sdk] Exclude resource references from property dependencies for
packaged components
[#&#8203;488](https://redirect.github.com/pulumi/pulumi-dotnet/pull/488)

##### Improvements

- \[sdk/auto] Add --show-reads Support for Pulumi Up & Preview
[#&#8203;542](https://redirect.github.com/pulumi/pulumi-dotnet/pull/542)

- \[sdk/provider] Infer package name and namespace in
ComponentProviderHost
[#&#8203;555](https://redirect.github.com/pulumi/pulumi-dotnet/pull/555)

- \[sdk/provider] Default the version of ComponentProviderHost to 0.0.0
[#&#8203;556](https://redirect.github.com/pulumi/pulumi-dotnet/pull/556)

##### Bug Fixes

- \[sdk/provider] Handle logging arguments in provider's
getEngineAddress
[#&#8203;536](https://redirect.github.com/pulumi/pulumi-dotnet/pull/536)

###
[`v3.76.1`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3761---2025-03-10)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.76.0...v3.76.1)

###
[`v3.76.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3760---2025-03-10)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.75.2...v3.76.0)

##### Improvements

- \[sdk] Make OutputConstructorAttribute optional
[#&#8203;438](https://redirect.github.com/pulumi/pulumi-dotnet/pull/438)

- \[sdk] Log a warning when trying to convert outputs to strings
[#&#8203;525](https://redirect.github.com/pulumi/pulumi-dotnet/pull/525)

- \[sdk/auto] Add `pulumi install` to Automation Api
[#&#8203;426](https://redirect.github.com/pulumi/pulumi-dotnet/pull/426)

- \[sdk/auto] Add `--refresh` to preview, up and destroy commands
[#&#8203;431](https://redirect.github.com/pulumi/pulumi-dotnet/pull/431)

##### Bug Fixes

- \[sdk/converter] Fix conversion for nested Output<T>
[#&#8203;527](https://redirect.github.com/pulumi/pulumi-dotnet/pull/527)

###
[`v3.75.2`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3752---2025-02-26)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.75.1...v3.75.2)

##### Bug Fixes

- \[runtime] Revert changes to target net8 in provider SDKs
[#&#8203;515](https://redirect.github.com/pulumi/pulumi-dotnet/pull/515)

###
[`v3.75.1`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3751---2025-02-26)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.75.0...v3.75.1)

Follow up release after v3.75, this reverts the updates to targeting
net8.

###
[`v3.75.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3750---2025-02-26)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.74.0...v3.75.0)

##### Improvements

- \[sdk] updated pulumi submodule and go.mod sdk/pkg and excluded
failing conformance tests
[#&#8203;482](https://redirect.github.com/pulumi/pulumi-dotnet/pull/482)

- \[sdk] Support parameterization for remote component resources
[#&#8203;502](https://redirect.github.com/pulumi/pulumi-dotnet/pull/502)

##### bug-fixes

- \[sdk] Fix inconsistent behavior of inheritance for InputAttribute and
OutputAttribute
[#&#8203;506](https://redirect.github.com/pulumi/pulumi-dotnet/pull/506)

##### Improvements

- \[sdk/auto] Add the `--preview-only` flag for the `refresh` command
[#&#8203;496](https://redirect.github.com/pulumi/pulumi-dotnet/pull/496)

- \[sdk/provider] Schema Analyzer to infer component schemas from
classes
[#&#8203;468](https://redirect.github.com/pulumi/pulumi-dotnet/pull/468)

- \[sdk/provider] Implement component provider host for auto-inferred
components
[#&#8203;507](https://redirect.github.com/pulumi/pulumi-dotnet/pull/507)

###
[`v3.74.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3740---2025-02-19)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.73.0...v3.74.0)

##### Improvements

- \[sdk] Add ability to disable ToString on Output<T>
[#&#8203;461](https://redirect.github.com/pulumi/pulumi-dotnet/pull/461)

##### bug-fixes

- \[sdk] Handle null in InputMap/List implicit conversions
[#&#8203;459](https://redirect.github.com/pulumi/pulumi-dotnet/pull/459)

- \[sdk] Fix the Provider and Providers option when used in resource
transforms
[#&#8203;460](https://redirect.github.com/pulumi/pulumi-dotnet/pull/460)

- \[sdk] Fix adding the same value to InputMap multiple times
[#&#8203;462](https://redirect.github.com/pulumi/pulumi-dotnet/pull/462)

###
[`v3.73.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3730---2025-02-06)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.72.0...v3.73.0)

##### Improvements

- \[sdk] InputMap and InputList no longer flatten nested
unknowns/secrets to apply to the whole object.
[#&#8203;449](https://redirect.github.com/pulumi/pulumi-dotnet/pull/449)

##### Bug Fixes

- \[runtime] Don't parse runtime options at startup, defer to the
options sent for specific methods
[#&#8203;451](https://redirect.github.com/pulumi/pulumi-dotnet/pull/451)

###
[`v3.72.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3720---2025-01-30)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.71.1...v3.72.0)

##### Bug Fixes

- \[sdk] Avoid calling invokes with dependencies on unknown resources
[#&#8203;441](https://redirect.github.com/pulumi/pulumi-dotnet/pull/441)

- \[sdk] Wait for resources in the input property dependencies
[#&#8203;444](https://redirect.github.com/pulumi/pulumi-dotnet/pull/444)

##### Improvements

- \[runtime] Plugins with msbuild warnings can still be run
[#&#8203;437](https://redirect.github.com/pulumi/pulumi-dotnet/pull/437)

- \[runtime] Implement GetRequiredPackages to replace GetRequiredPlugins
[#&#8203;440](https://redirect.github.com/pulumi/pulumi-dotnet/pull/440)

###
[`v3.71.1`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3711---2024-12-19)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.71.0...v3.71.1)

##### Bug Fixes

- \[sdk] Await background tasks during inline deployment
[#&#8203;420](https://redirect.github.com/pulumi/pulumi-dotnet/pull/420)

- \[sdk] Fix parameterized explicit providers
[#&#8203;435](https://redirect.github.com/pulumi/pulumi-dotnet/pull/435)

- \[runtime] Fix the language plugin to return a version
[#&#8203;390](https://redirect.github.com/pulumi/pulumi-dotnet/pull/390)

###
[`v3.71.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3710---2024-12-05)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.70.0...v3.71.0)

##### Improvements

- \[sdk] Allow specifying dependencies for output invokes
[#&#8203;412](https://redirect.github.com/pulumi/pulumi-dotnet/pull/412)

- \[sdk/provider] Add Parameterize to the provider interface
[#&#8203;404](https://redirect.github.com/pulumi/pulumi-dotnet/pull/404)

###
[`v3.70.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3700---2024-11-27)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.69.0...v3.70.0)

##### Bug Fixes

- \[sdk/auto] Fix warning for inline programs
[#&#8203;388](https://redirect.github.com/pulumi/pulumi-dotnet/pull/388)

##### Improvements

- \[runtime] Reduce binary size by stripping debug information
[#&#8203;411](https://redirect.github.com/pulumi/pulumi-dotnet/pull/411)

###
[`v3.69.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3690---2024-11-21)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.68.0...v3.69.0)

##### Improvements

- \[sdk] Make Pulumi.RunException public
[#&#8203;364](https://redirect.github.com/pulumi/pulumi-dotnet/pull/364)

- \[sdk] Add `DeferredOutput` for resolving some output/input cycles
[#&#8203;385](https://redirect.github.com/pulumi/pulumi-dotnet/pull/385)

##### bug-fixes

- \[sdk] Support input lists and maps in JsonSerializer.SerializeAsync
and JsonSerializer.DeserializeAsync
[#&#8203;372](https://redirect.github.com/pulumi/pulumi-dotnet/pull/372)

- \[sdk] Fix publishing to set a required property used by the
Automation Api to Install Pulumi cli
[#&#8203;393](https://redirect.github.com/pulumi/pulumi-dotnet/pull/393)

##### Improvements

- \[sdk/auto] Lessen the strictness of `OperationTypeConverter` to allow
unknown operations
[#&#8203;350](https://redirect.github.com/pulumi/pulumi-dotnet/pull/350)

- \[sdk/auto] Update YamlDotNet to v16.1.2
[#&#8203;354](https://redirect.github.com/pulumi/pulumi-dotnet/pull/354)

- \[sdk/auto] Add pulumi stack change-secrets-provider to automation api
[#&#8203;383](https://redirect.github.com/pulumi/pulumi-dotnet/pull/383)

- \[sdk/provider] OutputReference.Value will normalize to null for
Computed values
[#&#8203;381](https://redirect.github.com/pulumi/pulumi-dotnet/pull/381)

##### Bug Fixes

- \[sdk/provider] Fix a bug deserialising unknown secrets
[#&#8203;378](https://redirect.github.com/pulumi/pulumi-dotnet/pull/378)

- \[runtime] Improve the detections of project files when attaching a
debugger
[#&#8203;255](https://redirect.github.com/pulumi/pulumi-dotnet/pull/255)

- \[runtime] Fix RunPlugin with new versions of the pulumi cli
[#&#8203;395](https://redirect.github.com/pulumi/pulumi-dotnet/pull/395)

###
[`v3.68.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3680---2024-09-17)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.67.1...v3.68.0)

##### Improvements

- \[sdk] Parameterized providers are now considered stable
[#&#8203;347](https://redirect.github.com/pulumi/pulumi-dotnet/pull/347)

- \[sdk/provider] Support authoring multi-language components in .NET
[#&#8203;275](https://redirect.github.com/pulumi/pulumi-dotnet/pull/275)

###
[`v3.67.1`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3671---2024-09-13)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.67.0...v3.67.1)

##### Bug Fixes

- \[runtime] Fix debugger support
[#&#8203;343](https://redirect.github.com/pulumi/pulumi-dotnet/pull/343)

###
[`v3.67.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3670---2024-09-10)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.66.2...v3.67.0)

##### Improvements

- \[sdk] Add support for attaching debuggers
[#&#8203;332](https://redirect.github.com/pulumi/pulumi-dotnet/pull/332)

##### Bug Fixes

- \[sdk/provider] Fix serialization of ComponentResources (no id
required)
[#&#8203;331](https://redirect.github.com/pulumi/pulumi-dotnet/pull/331)

- \[sdk/provider] Fix output value serialization.
[#&#8203;337](https://redirect.github.com/pulumi/pulumi-dotnet/pull/337)

###
[`v3.66.2`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3662---2024-08-20)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.66.1...v3.66.2)

##### Bug Fixes

- \[sdk] Update Pulumi.Protobuf to v3.27.3 (fork)
[#&#8203;324](https://redirect.github.com/pulumi/pulumi-dotnet/pull/324)

###
[`v3.66.1`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3661---2024-08-09)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.66.0...v3.66.1)

##### Bug Fixes

- \[sdk] Fix binary compatibility with provider SDKs built using older
version of the core SDK
[#&#8203;318](https://redirect.github.com/pulumi/pulumi-dotnet/pull/318)

###
[`v3.66.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3660---2024-08-09)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.65.0...v3.66.0)

##### Improvements

- \[sdk] Support package parameterization for
Read/RegisterResource/Call/Invoke
[#&#8203;311](https://redirect.github.com/pulumi/pulumi-dotnet/pull/311)

##### Bug Fixes

- \[sdk] Fix type annotations for inputListFromT0/1
[#&#8203;301](https://redirect.github.com/pulumi/pulumi-dotnet/pull/301)

- \[sdk] Fix race condition in GrpcMonitor's GrpcChannel management
[#&#8203;304](https://redirect.github.com/pulumi/pulumi-dotnet/pull/304)

- \[sdk] Fix unknown inputs deserialization
[#&#8203;306](https://redirect.github.com/pulumi/pulumi-dotnet/pull/306)

- \[sdk] Fix program hanging when a resource transformation throws an
exception
[#&#8203;307](https://redirect.github.com/pulumi/pulumi-dotnet/pull/307)

- \[sdk] Fix handling of input properties with backing fields
[#&#8203;308](https://redirect.github.com/pulumi/pulumi-dotnet/pull/308)

##### Improvements

- \[sdk/auto] Implement Stack.ImportAsync() for batch importing
resources into a stack
[#&#8203;296](https://redirect.github.com/pulumi/pulumi-dotnet/pull/296)

###
[`v3.65.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3650---2024-07-18)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.64.0...v3.65.0)

##### Improvements

- \[sdk] Update Grpc dependency.
[#&#8203;256](https://redirect.github.com/pulumi/pulumi-dotnet/pull/256)

- \[sdk] Strongly type URN values in Provider
[#&#8203;293](https://redirect.github.com/pulumi/pulumi-dotnet/pull/293)

##### Bug Fixes

- \[sdk] Enable .net analyzers and fix warnings.
[#&#8203;278](https://redirect.github.com/pulumi/pulumi-dotnet/pull/278)

- \[sdk] Bufix Parsing of CustomTimeouts
[#&#8203;290](https://redirect.github.com/pulumi/pulumi-dotnet/pull/290)

- \[sdk] Add support for deserializing output values and use them from
transforms
[#&#8203;298](https://redirect.github.com/pulumi/pulumi-dotnet/pull/298)

##### Improvements

- \[runtime] Update pulumi/pulumi to 3.121
[#&#8203;288](https://redirect.github.com/pulumi/pulumi-dotnet/pull/288)

###
[`v3.64.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3640---2024-06-10)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.63.1...v3.64.0)

##### Improvements

- \[sdk] Make transforms a stable feature, not experimental
[#&#8203;270](https://redirect.github.com/pulumi/pulumi-dotnet/pull/270)

- \[sdk/provider] Refactor Provider tests in order to prepare
integration testing
[#&#8203;277](https://redirect.github.com/pulumi/pulumi-dotnet/pull/277)

##### Bug Fixes

- \[runtime] Upgrade dependencies
[#&#8203;279](https://redirect.github.com/pulumi/pulumi-dotnet/pull/279)

###
[`v3.63.1`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3631---2024-04-25)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.63.0...v3.63.1)

##### Bug Fixes

- \[sdk] Remove Google.Protobuf pinned dependency.
[#&#8203;268](https://redirect.github.com/pulumi/pulumi-dotnet/pull/268)

###
[`v3.63.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3630---2024-04-25)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.62.0...v3.63.0)

##### Improvements

- \[sdk] Support the Result field for better support of up
--continue-on-error
[#&#8203;259](https://redirect.github.com/pulumi/pulumi-dotnet/pull/259)

##### Bug Fixes

- \[sdk] Revert gRPC update that broke large messages.
[#&#8203;266](https://redirect.github.com/pulumi/pulumi-dotnet/pull/266)

##### Improvements

- \[sdk/auto] Add ContinueOnError option to the automation API
[#&#8203;265](https://redirect.github.com/pulumi/pulumi-dotnet/pull/265)

###
[`v3.62.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3620---2024-04-22)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.61.0...v3.62.0)

##### Improvements

- \[sdk] Allow apply to have unknown values during updates
[#&#8203;258](https://redirect.github.com/pulumi/pulumi-dotnet/pull/258)

##### Bug Fixes

- \[sdk] Use InvariantCulture when parsing numbers from config
[#&#8203;262](https://redirect.github.com/pulumi/pulumi-dotnet/pull/262)

- \[sdk] Pin Google.Protobuf to 3.24.
[#&#8203;263](https://redirect.github.com/pulumi/pulumi-dotnet/pull/263)

###
[`v3.61.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3610---2024-04-16)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.60.0...v3.61.0)

##### Improvements

- \[sdk] Add attribute to handle deserialization of constructor
parameters with name overrides
[#&#8203;231](https://redirect.github.com/pulumi/pulumi-dotnet/pull/231)

- \[sdk] Add experimental support for the new transforms system
[#&#8203;234](https://redirect.github.com/pulumi/pulumi-dotnet/pull/234)

- \[sdk] Add FSharp Ops helpers
[#&#8203;250](https://redirect.github.com/pulumi/pulumi-dotnet/pull/250)

- \[sdk] Handle Outputs in derived Stacks
[#&#8203;251](https://redirect.github.com/pulumi/pulumi-dotnet/pull/251)

###
[`v3.60.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3600---2024-03-05)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.59.0...v3.60.0)

##### Improvements

- \[sdk] Add environment add and remove commands to automation api
[#&#8203;210](https://redirect.github.com/pulumi/pulumi-dotnet/pull/210)

- \[sdk] Update Grpc dependency.
[#&#8203;219](https://redirect.github.com/pulumi/pulumi-dotnet/pull/219)

- \[sdk] Drop support for netcoreapp3.1
[#&#8203;235](https://redirect.github.com/pulumi/pulumi-dotnet/pull/235)

- \[sdk/auto] Add new API to install the Pulumi CLI from the Automation
API
[#&#8203;226](https://redirect.github.com/pulumi/pulumi-dotnet/pull/226)

- \[sdk/provider] Initial implementation of a reflection-based
PropertyValue deserializer
[#&#8203;201](https://redirect.github.com/pulumi/pulumi-dotnet/pull/201)

###
[`v3.59.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3590---2023-11-15)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.58.0...v3.59.0)

##### Improvements

- \[sdk] Implement reflection-based RegisterOutputs() for component
resources
[#&#8203;200](https://redirect.github.com/pulumi/pulumi-dotnet/pull/200)

- \[sdk] Support .NET 8.
[#&#8203;205](https://redirect.github.com/pulumi/pulumi-dotnet/pull/205)

##### Bug Fixes

- \[sdk/auto] Fix issue with specifying a git username for remote
workspaces.
[#&#8203;186](https://redirect.github.com/pulumi/pulumi-dotnet/pull/186)

###
[`v3.58.0`](https://redirect.github.com/pulumi/pulumi-dotnet/blob/HEAD/CHANGELOG.md#v3580---2023-10-27)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.57.0...v3.58.0)

##### Bug Fixes

- \[sdk] Register and await tasks created from `Apply` that don't return
anything.
[#&#8203;183](https://redirect.github.com/pulumi/pulumi-dotnet/pull/183)

##### Improvements

- \[sdk/auto] Add support for the path option for config operations.
[#&#8203;191](https://redirect.github.com/pulumi/pulumi-dotnet/pull/191)

###
[`v3.57.0`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.57.0)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.56.2...v3.57.0)

##### Improvements

- Converter SDK: add `Args: string[]` to the `ConvertProgramRequest`
fields which allows converter plugins to access args provided to `pulumi
convert`

###
[`v3.56.2`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.56.2)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.56.1...v3.56.2)

##### Improvements

- Plugin: clean up resources and exit cleanly on receiving SIGINT or
CTRL_BREAK.

##### Bug Fixes

###
[`v3.56.1`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.56.1)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.56.0...v3.56.1)

##### Bug Fixes

- \[sdk/automation-api] Adds guards in a non-destructive way against
invalid JSON engine event data.

[#&#8203;167](https://redirect.github.com/pulumi/pulumi-dotnet/pull/167)

###
[`v3.56.0`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.56.0)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.55.2...v3.56.0)

##### Improvements

##### Bug Fixes

-   \[sdk] Fix the default version for dotnet providers.

[#&#8203;148](https://redirect.github.com/pulumi/pulumi-dotnet/pull/148)

##### Improvements

- \[sdk] - Implements a `Converter` abstraction for building language
converter plugins for Pulumi in dotnet.

[#&#8203;165](https://redirect.github.com/pulumi/pulumi-dotnet/pull/165)

###
[`v3.55.2`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.55.2)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.55.1...v3.55.2)

##### Improvements

##### Bug Fixes

-   \[sdk] Fix the default version for dotnet providers.

[#&#8203;148](https://redirect.github.com/pulumi/pulumi-dotnet/pull/148)

###
[`v3.55.1`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.55.1)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.55.0...v3.55.1)

##### Improvements

##### Bug Fixes

-   \[sdk] Fix serialization secret JSON resource arguments.

[#&#8203;144](https://redirect.github.com/pulumi/pulumi-dotnet/pull/144)

###
[`v3.55.0`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.55.0)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.54.1...v3.55.0)

##### Improvements

- \[sdk] When an exception is thrown from the constructor of a `Stack`
subclass, prevent `TargetInvocationException` from obscuring the error
message.

[#&#8203;106](https://redirect.github.com/pulumi/pulumi-dotnet/pull/106)

- \[sdk/auto] Added additional fields to `WhoAmIResult` for URL and
organizations.

[#&#8203;120](https://redirect.github.com/pulumi/pulumi-dotnet/pull/120)

- \[sdk/auto] Expose additional Pulumi refresh options to the Automation
API.

[#&#8203;117](https://redirect.github.com/pulumi/pulumi-dotnet/pull/117)

-   \[sdk] Updated to the latest pulumi protobuf specification.

[#&#8203;135](https://redirect.github.com/pulumi/pulumi-dotnet/pull/135)

-   \[sdk] Added `GetDouble` to `Config`.

[#&#8203;143](https://redirect.github.com/pulumi/pulumi-dotnet/pull/143)

##### Bug Fixes

-   \[sdk] Fix JSON serialisation of Input<T> types.

[#&#8203;112](https://redirect.github.com/pulumi/pulumi-dotnet/pull/112)

- \[sdk] Improve the error message from not implemented provider
methods.

[#&#8203;125](https://redirect.github.com/pulumi/pulumi-dotnet/pull/125)

###
[`v3.54.1`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.54.1)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.54.0...v3.54.1)

##### Improvements

##### Bug Fixes

###
[`v3.54.0`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.54.0)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.53.0...v3.54.0)

##### Improvements

- \[sdk] Lazily initialize all alias combinations for older Pulumi
engines during `RegisterRequest` preparation, not when constructing
resources. Re-enable tests for `AllAliases`
[#&#8203;97](https://redirect.github.com/pulumi/pulumi-dotnet/pull/97)

- \[sdk/providers] Updated names of "Olds" and "News" to make it clear
if they are old/new inputs or state. Also removed the GetPluginInfo
overload, version should now be passed into the main Serve method
(defaults to the assembly version).
[#&#8203;99](https://redirect.github.com/pulumi/pulumi-dotnet/pull/99)

- \[sdk] Added `StackReference.GetOutputDetailsAsync` to retrieve output
values from stack references directly.

[#&#8203;103](https://redirect.github.com/pulumi/pulumi-dotnet/pull/103)

##### Bug Fixes

###
[`v3.53.0`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.53.0)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.52.1...v3.53.0)

##### Improvements

-   \[sdk/auto] Add stack tag methods to the automation API.
[#&#8203;89](https://redirect.github.com/pulumi/pulumi-dotnet/pull/89)

##### Bug Fixes

-   \[sdk] Fix MockMonitor reporting DeletedWith wasn't supported.
[#&#8203;93](https://redirect.github.com/pulumi/pulumi-dotnet/pull/93)

-   \[sdk] Fix paket referencing Pulumi.
[#&#8203;91](https://redirect.github.com/pulumi/pulumi-dotnet/pull/91)

- \[sdk] Correctly check for alias support in the engine and map fully
specified alias urns.
[#&#8203;88](https://redirect.github.com/pulumi/pulumi-dotnet/pull/88)

- \[sdk] Bring back the correct fallback behavior for calculating
aliases for older Pulumi engines.

###
[`v3.52.1`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.52.1)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.52.0...v3.52.1)

##### Improvements

- \[sdk] Delegates alias computation to engine
[#&#8203;14](https://redirect.github.com/pulumi/pulumi-dotnet/issues/14)

##### Bug Fixes

- \[sdk] Work around a port parsing bug in the engine when using
providers.
[#&#8203;82](https://redirect.github.com/pulumi/pulumi-dotnet/pull/82)

-   \[sdk] Rename "ID" properties to "Id" in the provider interfaces.
[#&#8203;84](https://redirect.github.com/pulumi/pulumi-dotnet/pull/84)

-   \[sdk] Fix a mixup of Urn and Id in the provider interface.
[#&#8203;83](https://redirect.github.com/pulumi/pulumi-dotnet/pull/83)

###
[`v3.52.0`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.52.0)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.51.2...v3.52.0)

##### Improvements

- \[sdk] Add experimental support for writing custom resource providers.
This is a preview release, code
documentation and test coverage is known to be minimal, and all APIs are
subject to change. However it is
complete enough to try out, and we hope to get feedback on the interface
to refine and stabilize this
    shortly.
[#&#8203;76](https://redirect.github.com/pulumi/pulumi-dotnet/pull/76)

##### Bug Fixes

###
[`v3.51.2`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.51.2)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.51.1...v3.51.2)

##### Improvements

-   \[sdk] Multi-target .NET Core 3.1 and .NET 6.0.
[#&#8203;69](https://redirect.github.com/pulumi/pulumi-dotnet/pull/69)

##### Bug Fixes

###
[`v3.51.1`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.51.1)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.51.0...v3.51.1)

##### Improvements

-   \[revert] Re-introduce support for .NET Core 3.1.
[#&#8203;67](https://redirect.github.com/pulumi/pulumi-dotnet/pull/67)

##### Bug Fixes

###
[`v3.51.0`](https://redirect.github.com/pulumi/pulumi-dotnet/releases/tag/v3.51.0)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-dotnet/compare/v3.50.0...v3.51.0)

##### Improvements

-   \[auto] Adds SkipInstallDependencies option for Remote Workspaces
[#&#8203;64](https://redirect.github.com/pulumi/pulumi-dotnet/pull/64)

-   \[sdk] Drop support for .NET Core 3.1.
[#&#8203;10](https://redirect.github.com/pulumi/pulumi-dotnet/pull/10)

-   \[sdk] Add Output.JsonDeserialize.
[#&#8203;65](https://redirect.github.com/pulumi/pulumi-dotnet/pull/65)

##### Bug Fixes

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - "every weekday" (UTC).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Renovate
Bot](https://redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOS4wIiwidXBkYXRlZEluVmVyIjoiMzkuMTkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwiaW1wYWN0L25vLWNoYW5nZWxvZy1yZXF1aXJlZCJdfQ==-->

Co-authored-by: pulumi-renovate[bot] <189166143+pulumi-renovate[bot]@users.noreply.github.com>
2025-04-29 11:14:31 -07:00
pulumi-renovate[bot]
a38b227131 Update first-party Pulumi dependencies (#524)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[github.com/pulumi/pulumi/pkg/v3](https://redirect.github.com/pulumi/pulumi)
| require | minor | `v3.163.0` -> `v3.165.0` |
|
[github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3](https://redirect.github.com/pulumi/pulumi)
| require | minor | `v3.0.0-20250417110128-49fb14839a5a` -> `v3.165.0` |
|
[github.com/pulumi/pulumi/sdk/nodejs/cmd/pulumi-language-nodejs/v3](https://redirect.github.com/pulumi/pulumi)
| require | minor | `v3.0.0-20250417110128-49fb14839a5a` -> `v3.165.0` |
|
[github.com/pulumi/pulumi/sdk/python/cmd/pulumi-language-python/v3](https://redirect.github.com/pulumi/pulumi)
| require | minor | `v3.0.0-20250417110128-49fb14839a5a` -> `v3.165.0` |
|
[github.com/pulumi/pulumi/sdk/v3](https://redirect.github.com/pulumi/pulumi)
| require | minor | `v3.163.0` -> `v3.165.0` |
| [pulumi/esc-action](https://redirect.github.com/pulumi/esc-action) |
action | minor | `v1.3.0` -> `v1.4.0` |

---

### Release Notes

<details>
<summary>pulumi/pulumi (github.com/pulumi/pulumi/pkg/v3)</summary>

###
[`v3.165.0`](https://redirect.github.com/pulumi/pulumi/releases/tag/v3.165.0)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.163.0...v3.165.0)

#### 3.165.0 (2025-04-25)

##### Features

- \[cli] Add PULUMI_RUN_PROGRAM environment variable to globally set
--run-program
[#&#8203;19293](https://redirect.github.com/pulumi/pulumi/pull/19293)

- \[auto/{go,nodejs,python}] Add --run-program to automation api for
destroy and refresh
[#&#8203;19218](https://redirect.github.com/pulumi/pulumi/pull/19218)

-   \[auto/nodejs] Add the ability to configure a remote executor image
[#&#8203;19286](https://redirect.github.com/pulumi/pulumi/pull/19286)

-   \[programgen] Support provider resources in generatehcl2definition
[#&#8203;19192](https://redirect.github.com/pulumi/pulumi/pull/19192)

-   \[sdk/dotnet] Update dotnet to v3.79.0
[#&#8203;19302](https://redirect.github.com/pulumi/pulumi/pull/19302)

-   \[cli/package] Change default registry source to private

- \[sdk/nodejs] Add resourceName and resourceType to get the runtime
name and type token for resources
[#&#8203;18842](https://redirect.github.com/pulumi/pulumi/pull/18842)

- \[sdk/nodejs] Add `--exclude` and `--exclude-dependents` to the NodeJS
Automation API
[#&#8203;19270](https://redirect.github.com/pulumi/pulumi/pull/19270)

-   \[sdk/python] Add bootstrap-less mode for Python component providers
[#&#8203;19198](https://redirect.github.com/pulumi/pulumi/pull/19198)

-   \[sdk/python] Add pulumi.type_token decorator
[#&#8203;19309](https://redirect.github.com/pulumi/pulumi/pull/19309)

##### Bug Fixes

- \[engine] Fix ImportID being lost from state during update operations
[#&#8203;19314](https://redirect.github.com/pulumi/pulumi/pull/19314)

-   \[pkg] Update Dependencies in the JSON schema
[#&#8203;19282](https://redirect.github.com/pulumi/pulumi/pull/19282)

- \[cli/import] Fix an error when importing a resource that already
exists with the matching ID
[#&#8203;19290](https://redirect.github.com/pulumi/pulumi/pull/19290)

-   \[cli/install] Handle local plugin paths with a version number
[#&#8203;19254](https://redirect.github.com/pulumi/pulumi/pull/19254)

-   \[cli/package] Detect readme in subdir for package publishing
[#&#8203;19298](https://redirect.github.com/pulumi/pulumi/pull/19298)

- \[programgen] Fix generation of ImportID when building programs from
state
[#&#8203;19237](https://redirect.github.com/pulumi/pulumi/pull/19237)

-   \[sdk/go] Make log message for "Hiding logs" less visible
[#&#8203;19261](https://redirect.github.com/pulumi/pulumi/pull/19261)

-   \[sdk/go] Improve output when plugin crashes
[#&#8203;19305](https://redirect.github.com/pulumi/pulumi/pull/19305)

- \[components/nodejs] Fix component construct when the there's a
namespace in the `name` field in \`package.json
[#&#8203;19242](https://redirect.github.com/pulumi/pulumi/pull/19242)

-   \[sdk/nodejs] Don't discard non-outputty component outputs
[#&#8203;19228](https://redirect.github.com/pulumi/pulumi/pull/19228)

- \[sdk/nodejs] Use PackageSpec.Dependencies for component provider
dependencies
[#&#8203;19236](https://redirect.github.com/pulumi/pulumi/pull/19236)

##### Miscellaneous

- \[sdk/{nodejs,python}] Don’t install python/nodejs runtimes during
make build
[#&#8203;19250](https://redirect.github.com/pulumi/pulumi/pull/19250)

</details>

<details>
<summary>pulumi/esc-action (pulumi/esc-action)</summary>

###
[`v1.4.0`](https://redirect.github.com/pulumi/esc-action/compare/v1.3.0...v1.4.0)

[Compare
Source](https://redirect.github.com/pulumi/esc-action/compare/v1.3.0...v1.4.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - "every weekday" (UTC).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Renovate
Bot](https://redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOS4wIiwidXBkYXRlZEluVmVyIjoiMzkuMTkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwiaW1wYWN0L25vLWNoYW5nZWxvZy1yZXF1aXJlZCJdfQ==-->

Co-authored-by: pulumi-renovate[bot] <189166143+pulumi-renovate[bot]@users.noreply.github.com>
2025-04-29 11:14:03 -07:00
Bryce Lampe
c9efdfecc8 Restore yaml build tag (#528)
I suspect this was removed accidentally in #490. Without this tag we run
the tests on every language shard, so let's restore it.
2025-04-29 11:13:49 -07:00
Pulumi Bot
038d10bc74 Update GitHub Actions workflows. (#526)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 627bf354e5cc8738fca0170e504a4e429447e70a.
2025-04-29 05:43:41 +00:00
pulumi-renovate[bot]
8987df0a8e Update first-party Pulumi dependencies (#390)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [@pulumi/pulumi](https://redirect.github.com/pulumi/pulumi)
([source](https://redirect.github.com/pulumi/pulumi/tree/HEAD/sdk/nodejs))
| dependencies | minor | [`3.144.1` ->
`3.165.0`](https://renovatebot.com/diffs/npm/@pulumi%2fpulumi/3.144.1/3.165.0)
|
| [@pulumi/pulumi](https://redirect.github.com/pulumi/pulumi)
([source](https://redirect.github.com/pulumi/pulumi/tree/HEAD/sdk/nodejs))
| dependencies | minor | [`3.128.0` ->
`3.165.0`](https://renovatebot.com/diffs/npm/@pulumi%2fpulumi/3.128.0/3.165.0)
|
|
[github.com/pulumi/providertest](https://redirect.github.com/pulumi/providertest)
| require | minor | `v0.1.3` -> `v0.3.1` |
|
[github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild](https://redirect.github.com/pulumi/pulumi-docker-build)
| require | patch | `v0.0.8` -> `v0.0.11` |
|
[github.com/pulumi/pulumi-java/pkg](https://redirect.github.com/pulumi/pulumi-java)
| require | minor | `v1.9.0` -> `v1.10.0` |
|
[github.com/pulumi/pulumi-yaml](https://redirect.github.com/pulumi/pulumi-yaml)
| require | minor | `v1.15.1` -> `v1.17.0` |
|
[github.com/pulumi/pulumi/pkg/v3](https://redirect.github.com/pulumi/pulumi)
| require | minor | `v3.163.0` -> `v3.165.0` |
|
[github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3](https://redirect.github.com/pulumi/pulumi)
| require | minor | `v3.0.0-20250417154401-0ff190607702` -> `v3.165.0` |
|
[github.com/pulumi/pulumi/sdk/nodejs/cmd/pulumi-language-nodejs/v3](https://redirect.github.com/pulumi/pulumi)
| require | minor | `v3.0.0-20250417154401-0ff190607702` -> `v3.165.0` |
|
[github.com/pulumi/pulumi/sdk/python/cmd/pulumi-language-python/v3](https://redirect.github.com/pulumi/pulumi)
| require | minor | `v3.0.0-20250417154401-0ff190607702` -> `v3.165.0` |
|
[github.com/pulumi/pulumi/sdk/v3](https://redirect.github.com/pulumi/pulumi)
| require | minor | `v3.163.0` -> `v3.165.0` |
|
[github.com/pulumi/pulumi/sdk/v3](https://redirect.github.com/pulumi/pulumi)
| require | minor | `v3.153.1` -> `v3.165.0` |
| [pulumi/esc-action](https://redirect.github.com/pulumi/esc-action) |
action | minor | `v1.3.0` -> `v1.4.0` |

---

### Release Notes

<details>
<summary>pulumi/pulumi (@&#8203;pulumi/pulumi)</summary>

###
[`v3.165.0`](https://redirect.github.com/pulumi/pulumi/releases/tag/v3.165.0)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.163.0...v3.165.0)

##### 3.165.0 (2025-04-25)

##### Features

- \[cli] Add PULUMI_RUN_PROGRAM environment variable to globally set
--run-program
[#&#8203;19293](https://redirect.github.com/pulumi/pulumi/pull/19293)

- \[auto/{go,nodejs,python}] Add --run-program to automation api for
destroy and refresh
[#&#8203;19218](https://redirect.github.com/pulumi/pulumi/pull/19218)

-   \[auto/nodejs] Add the ability to configure a remote executor image
[#&#8203;19286](https://redirect.github.com/pulumi/pulumi/pull/19286)

-   \[programgen] Support provider resources in generatehcl2definition
[#&#8203;19192](https://redirect.github.com/pulumi/pulumi/pull/19192)

-   \[sdk/dotnet] Update dotnet to v3.79.0
[#&#8203;19302](https://redirect.github.com/pulumi/pulumi/pull/19302)

-   \[cli/package] Change default registry source to private

- \[sdk/nodejs] Add resourceName and resourceType to get the runtime
name and type token for resources
[#&#8203;18842](https://redirect.github.com/pulumi/pulumi/pull/18842)

- \[sdk/nodejs] Add `--exclude` and `--exclude-dependents` to the NodeJS
Automation API
[#&#8203;19270](https://redirect.github.com/pulumi/pulumi/pull/19270)

-   \[sdk/python] Add bootstrap-less mode for Python component providers
[#&#8203;19198](https://redirect.github.com/pulumi/pulumi/pull/19198)

-   \[sdk/python] Add pulumi.type_token decorator
[#&#8203;19309](https://redirect.github.com/pulumi/pulumi/pull/19309)

##### Bug Fixes

- \[engine] Fix ImportID being lost from state during update operations
[#&#8203;19314](https://redirect.github.com/pulumi/pulumi/pull/19314)

-   \[pkg] Update Dependencies in the JSON schema
[#&#8203;19282](https://redirect.github.com/pulumi/pulumi/pull/19282)

- \[cli/import] Fix an error when importing a resource that already
exists with the matching ID
[#&#8203;19290](https://redirect.github.com/pulumi/pulumi/pull/19290)

-   \[cli/install] Handle local plugin paths with a version number
[#&#8203;19254](https://redirect.github.com/pulumi/pulumi/pull/19254)

-   \[cli/package] Detect readme in subdir for package publishing
[#&#8203;19298](https://redirect.github.com/pulumi/pulumi/pull/19298)

- \[programgen] Fix generation of ImportID when building programs from
state
[#&#8203;19237](https://redirect.github.com/pulumi/pulumi/pull/19237)

-   \[sdk/go] Make log message for "Hiding logs" less visible
[#&#8203;19261](https://redirect.github.com/pulumi/pulumi/pull/19261)

-   \[sdk/go] Improve output when plugin crashes
[#&#8203;19305](https://redirect.github.com/pulumi/pulumi/pull/19305)

- \[components/nodejs] Fix component construct when the there's a
namespace in the `name` field in \`package.json
[#&#8203;19242](https://redirect.github.com/pulumi/pulumi/pull/19242)

-   \[sdk/nodejs] Don't discard non-outputty component outputs
[#&#8203;19228](https://redirect.github.com/pulumi/pulumi/pull/19228)

- \[sdk/nodejs] Use PackageSpec.Dependencies for component provider
dependencies
[#&#8203;19236](https://redirect.github.com/pulumi/pulumi/pull/19236)

##### Miscellaneous

- \[sdk/{nodejs,python}] Don’t install python/nodejs runtimes during
make build
[#&#8203;19250](https://redirect.github.com/pulumi/pulumi/pull/19250)

###
[`v3.163.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31630-2025-04-16)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.162.0...v3.163.0)

##### Features

-   \[cli/display] Display \[unknown] rather than output<T> in diffs
[#&#8203;19204](https://redirect.github.com/pulumi/pulumi/pull/19204)

- \[programgen] Add import to HCL2 serialization as well as other
missing functions
[#&#8203;19163](https://redirect.github.com/pulumi/pulumi/pull/19163)

- \[programgen/{dotnet,go,nodejs,python}] Utilize resource option import
in codegen for go, nodejs, python, dotnet
[#&#8203;19177](https://redirect.github.com/pulumi/pulumi/pull/19177)

- \[cli/package] Save package source to `packages` in Pulumi.yaml on
`package add`
[#&#8203;19157](https://redirect.github.com/pulumi/pulumi/pull/19157)

-   \[sdk/python] Add static pulumi_type property to resource classes
[#&#8203;19221](https://redirect.github.com/pulumi/pulumi/pull/19221)

##### Bug Fixes

-   \[cli/new] Don't require to be logged in to retrieve templates
[#&#8203;19196](https://redirect.github.com/pulumi/pulumi/pull/19196)

- \[engine] Fix ReplaceOnChanges being respected during
deleteBeforeReplace checks
[#&#8203;19188](https://redirect.github.com/pulumi/pulumi/pull/19188)

-   \[programgen/go] Fix handling of build metadata in provider versions
[#&#8203;19149](https://redirect.github.com/pulumi/pulumi/pull/19149)

-   \[sdk/python] Support optional types using 3.10 union syntax
[#&#8203;19207](https://redirect.github.com/pulumi/pulumi/pull/19207)

##### Miscellaneous

-   \[sdk/nodejs] Target ES2020 instead of ES2016
[#&#8203;19191](https://redirect.github.com/pulumi/pulumi/pull/19191)

###
[`v3.162.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31620-2025-04-09)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.161.0...v3.162.0)

##### Bug Fixes

- \[sdk/nodejs] Add back the @&#8203;pulumi/pulumi/queryable module used
by [@&#8203;pulumi/policy](https://redirect.github.com/pulumi/policy)
[#&#8203;19172](https://redirect.github.com/pulumi/pulumi/pull/19172)

###
[`v3.161.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31610-2025-04-09)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.160.0...v3.161.0)

##### Features

-   \[yaml] Upgrade yaml to 1.16.0
[#&#8203;19148](https://redirect.github.com/pulumi/pulumi/pull/19148)
[#&#8203;19143](https://redirect.github.com/pulumi/pulumi/pull/19143)

-   \[sdk/dotnet] Upgrade dotnet to v3.78.0
[#&#8203;19148](https://redirect.github.com/pulumi/pulumi/pull/19148)

-   \[sdk/go] Add `property.Path` and associated functions.
[#&#8203;17500](https://redirect.github.com/pulumi/pulumi/pull/17500)

-   \[sdk/go] Make `property.Value` immutable
[#&#8203;17500](https://redirect.github.com/pulumi/pulumi/pull/17500)

-   \[sdk/java] Upgrade Java to 1.9.0
[#&#8203;19148](https://redirect.github.com/pulumi/pulumi/pull/19148)

-   \[sdk/python] Add enum support for Python component schema inference
[#&#8203;19072](https://redirect.github.com/pulumi/pulumi/pull/19072)

##### Bug Fixes

- \[cli/new] Avoid creating a main.py file when chosing the uv toolchain
[#&#8203;19154](https://redirect.github.com/pulumi/pulumi/pull/19154)

- \[cli/package] Fix schema versioning when explicit package version is
given

- \[components/nodejs] Fix schema inference for optional boolean
properties
[#&#8203;19133](https://redirect.github.com/pulumi/pulumi/pull/19133)

- \[cli/plugin] Fix slowness of workspace.DetectProjectFromPath
affecting pulumi convert timings
[#&#8203;19082](https://redirect.github.com/pulumi/pulumi/pull/19082)

-   \[sdk/python] Serialize component description to the JSON schema
[#&#8203;19093](https://redirect.github.com/pulumi/pulumi/pull/19093)

-   \[sdk/python] Return an InputPropertyError for invalid enum values
[#&#8203;19116](https://redirect.github.com/pulumi/pulumi/pull/19116)

-   \[sdk/python] Properties used in component outputs are never plain
[#&#8203;19135](https://redirect.github.com/pulumi/pulumi/pull/19135)

##### Miscellaneous

-   \[protobuf] Remove StreamInvoke from the Provider service
[#&#8203;19129](https://redirect.github.com/pulumi/pulumi/pull/19129)

###
[`v3.160.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31600-2025-04-01)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.159.0...v3.160.0)

##### Features

-   \[cli] Add `--run-program` support to `pulumi destroy`
[#&#8203;19044](https://redirect.github.com/pulumi/pulumi/pull/19044)

- \[cli] Improve the usability and expressiveness of the pulumi watch
command.
[#&#8203;19083](https://redirect.github.com/pulumi/pulumi/pull/19083)

-   \[programgen/go] Generated Go programs now target Go 1.23
[#&#8203;19026](https://redirect.github.com/pulumi/pulumi/pull/19026)

##### Bug Fixes

-   \[sdk/nodejs] Fix names in type references in components
[#&#8203;19066](https://redirect.github.com/pulumi/pulumi/pull/19066)

- \[sdk/nodejs] Fix SDK generation for components that use resource
references and are namespaced

##### Miscellaneous

-   \[cli] Update pulumi-language-dotnet to 3.77.0
[#&#8203;19053](https://redirect.github.com/pulumi/pulumi/pull/19053)

-   \[cli] Update moby/moby to 26.1.5
[#&#8203;19081](https://redirect.github.com/pulumi/pulumi/pull/19081)

- \[cli/package] Update `package add` command format string to show that
file paths to packages can also be used
[#&#8203;19003](https://redirect.github.com/pulumi/pulumi/pull/19003)

###
[`v3.159.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31590-2025-03-27)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.158.0...v3.159.0)

##### Features

- \[auto/nodejs] Add the `--preview-only` option for `destroy` in the
NodeJS Automation API
[#&#8203;19030](https://redirect.github.com/pulumi/pulumi/pull/19030)

- \[auto/python] Add `--preview-only` option for `destroy` in the Python
Automation API
[#&#8203;19028](https://redirect.github.com/pulumi/pulumi/pull/19028)

- \[cli/new] Allow `pulumi new` to use templates defined in the Pulumi
Cloud
[#&#8203;18627](https://redirect.github.com/pulumi/pulumi/pull/18627)

- \[components/nodejs] Construct components based on explicit component
classes
[#&#8203;18996](https://redirect.github.com/pulumi/pulumi/pull/18996)

- \[cli/package] Support GITHUB_TOKEN and GITLAB_TOKEN in `pulumi
package add` for Git packages
[#&#8203;18991](https://redirect.github.com/pulumi/pulumi/pull/18991)

- \[cli/package] Stop allowing overriding namespace in
PulumiPlugin.yaml, start inferring it for Git plugins
[#&#8203;19016](https://redirect.github.com/pulumi/pulumi/pull/19016)

- \[programgen/nodejs] Add canOutput code generation and conformance
tests
[#&#8203;18897](https://redirect.github.com/pulumi/pulumi/pull/18897)

- \[sdk/nodejs] Allow namespace for components to be set in
PulumiPlugin.yaml
[#&#8203;18982](https://redirect.github.com/pulumi/pulumi/pull/18982)

- \[sdk/nodejs] Run componentProviderHost automatically in RunPlugin if
any Components are exported
[#&#8203;18984](https://redirect.github.com/pulumi/pulumi/pull/18984)

- \[sdk/python] Avoid error messages due to missing a missing
implementation of `GetRequiredPackages` in the Python Automation API
server
[#&#8203;19020](https://redirect.github.com/pulumi/pulumi/pull/19020)

-   \[sdk/python] Pass list of components to component_provider_host
[#&#8203;19021](https://redirect.github.com/pulumi/pulumi/pull/19021)

##### Bug Fixes

-   \[programgen] Fix plugin resolution in convert
[#&#8203;19040](https://redirect.github.com/pulumi/pulumi/pull/19040)

- \[programgen/nodejs] Fix references to variables that were renamed due
to keyword overlap etc in resource attributes
[#&#8203;19041](https://redirect.github.com/pulumi/pulumi/pull/19041)

- \[cli/package] Use correct local path for Git based components with a
version tag
[#&#8203;19023](https://redirect.github.com/pulumi/pulumi/pull/19023)

-   \[sdk/python] Set name and namespace via component_provider_host
[#&#8203;18985](https://redirect.github.com/pulumi/pulumi/pull/18985)

##### Miscellaneous

-   \[cli] Update language plugins to java@1.8.0 and yaml@1.15.1

###
[`v3.158.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31580-2025-03-24)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.157.0...v3.158.0)

##### Features

- \[sdkgen] Aliases in provider schemas can now be set with just an
array of strings for the aliased types
[#&#8203;18925](https://redirect.github.com/pulumi/pulumi/pull/18925)

- \[cli/engine] Allow targets to be excluded with the `--exclude` flag.
`--exclude-dependents` can also be used to exclude all children of an
excluded target as well
[#&#8203;18828](https://redirect.github.com/pulumi/pulumi/pull/18828)

- \[sdk/{go,python}] Add pulumiResourceName and pulumiResourceType to
get the runtime name and type token for resources
[#&#8203;18959](https://redirect.github.com/pulumi/pulumi/pull/18959)

-   \[cli/{install,package}] Install package SDKs on `pulumi install`
[#&#8203;18940](https://redirect.github.com/pulumi/pulumi/pull/18940)

-   \[programgen/nodejs] Add tryOutput generation to nodejs
[#&#8203;18852](https://redirect.github.com/pulumi/pulumi/pull/18852)

-   \[sdk/{nodejs,python}] Report an error when no components are found
[#&#8203;18988](https://redirect.github.com/pulumi/pulumi/pull/18988)

-   \[cli/package] Add experimental package publishing command
[#&#8203;18818](https://redirect.github.com/pulumi/pulumi/pull/18818)

- \[cli/package] Allow overriding name and namespace of plugins in
PulumiPlugin.yaml
[#&#8203;18990](https://redirect.github.com/pulumi/pulumi/pull/18990)

-   \[sdk/yaml] Upgrade pulumi-yaml to 1.15.0
[#&#8203;19002](https://redirect.github.com/pulumi/pulumi/pull/19002)

##### Bug Fixes

-   \[cli/display] Don't print "same" outputs in `--refresh`
[#&#8203;18943](https://redirect.github.com/pulumi/pulumi/pull/18943)

- \[engine sdk/go] Allow retain on delete to be overridden back to false
by child resources that inherit it
[#&#8203;18956](https://redirect.github.com/pulumi/pulumi/pull/18956)

- \[cli/{install,package}] Avoid duplicate packages in requirements.txt
[#&#8203;18972](https://redirect.github.com/pulumi/pulumi/pull/18972)

- \[cli/state] State rename no longer overly strictly validates
resources names
[#&#8203;18938](https://redirect.github.com/pulumi/pulumi/pull/18938)

-   \[pkg] The `refresh` command now respects `TargetDependents`
[#&#8203;18905](https://redirect.github.com/pulumi/pulumi/pull/18905)

-   \[sdk/python] Report better error messages for various error cases
[#&#8203;18983](https://redirect.github.com/pulumi/pulumi/pull/18983)

-   \[sdk/python] Remove the dev dependency on `pytest-watch`
[#&#8203;19008](https://redirect.github.com/pulumi/pulumi/pull/19008)

###
[`v3.157.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31570-2025-03-18)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.156.0...v3.157.0)

##### Features

- \[engine] Allow protect to be overridden back to false by child
resources that inherit it

- \[engine] Add an envvar PULUMI_PARALLEL_DIFF to run diff calculations
in parallel
[#&#8203;18872](https://redirect.github.com/pulumi/pulumi/pull/18872)

-   \[yaml] Introduce the packages section in Pulumi.yaml
[#&#8203;18917](https://redirect.github.com/pulumi/pulumi/pull/18917)

-   \[sdk/go] Add a Parent option to AnalyzerResourceOptions
[#&#8203;18927](https://redirect.github.com/pulumi/pulumi/pull/18927)

- \[sdk/nodejs] Add support for resource referenced in component
provider
[#&#8203;18885](https://redirect.github.com/pulumi/pulumi/pull/18885)

- \[sdkgen/nodejs] Change Node.js code generation to use
[@&#8203;types/node](https://redirect.github.com/types/node) of version
18 instead of 14
[#&#8203;18922](https://redirect.github.com/pulumi/pulumi/pull/18922)

- \[cli/package] Disambiguate packages with a different namespace than
"pulumi"
[#&#8203;18418](https://redirect.github.com/pulumi/pulumi/pull/18418)

- \[cli] Add parallel stack fetching for DIY backends (AWS S3, Azure
Blob, GCP Storage) to improve performance when selecting stacks.
Configure with PULUMI_DIY_BACKEND_PARALLEL environment variable.
[#&#8203;18909](https://redirect.github.com/pulumi/pulumi/pull/18909)

##### Bug Fixes

-   \[cli/package] Fix explicitly named package names in NodeJS
[#&#8203;18933](https://redirect.github.com/pulumi/pulumi/pull/18933)

- \[sdkgen/dotnet] Support parameterization in generated remote
component resources for .NET
[#&#8203;18699](https://redirect.github.com/pulumi/pulumi/pull/18699)

##### Miscellaneous

-   \[cli] Remove `query` command
[#&#8203;18891](https://redirect.github.com/pulumi/pulumi/pull/18891)

###
[`v3.156.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31560-2025-03-13)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.155.0...v3.156.0)

##### Bug Fixes

-   \[sdk/go] Fix overriding protect in child resources

- \[sdk/python] Fix mapping input names in Construct recursively in
component providers
[#&#8203;18864](https://redirect.github.com/pulumi/pulumi/pull/18864)

###
[`v3.155.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31550-2025-03-12)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.154.0...v3.155.0)

##### Features

- \[engine] Add batch encryption for snapshot serialization to increase
performance working with many secrets
[#&#8203;18743](https://redirect.github.com/pulumi/pulumi/pull/18743)

-   \[sdk/dotnet] Upgrade pulumi dotnet to 3.76.1
[#&#8203;18853](https://redirect.github.com/pulumi/pulumi/pull/18853)

##### Bug Fixes

- \[cli/display] Fix a timestamp inconsistency between the JSON display
and the engine event log
[#&#8203;18838](https://redirect.github.com/pulumi/pulumi/pull/18838)

-   \[engine] Engine will respect cgroup limits for --parallel
[#&#8203;18815](https://redirect.github.com/pulumi/pulumi/pull/18815)

- \[engine] Return an error on malformed provider references rather than
ignoring them
[#&#8203;18854](https://redirect.github.com/pulumi/pulumi/pull/18854)

##### Miscellaneous

-   \[ci] Run CI with Go 1.23 and 1.24
[#&#8203;18841](https://redirect.github.com/pulumi/pulumi/pull/18841)

###
[`v3.154.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31540-2025-03-07)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.153.1...v3.154.0)

##### Features

- \[cli] Set the --parallel flag with PULUMI_PARALLEL environment
variable
[#&#8203;18782](https://redirect.github.com/pulumi/pulumi/pull/18782)

-   \[engine] Pass URN and ID to providers Configure method
[#&#8203;18807](https://redirect.github.com/pulumi/pulumi/pull/18807)

-   \[yaml] Upgrade pulumi-yaml to 1.14.1
[#&#8203;18819](https://redirect.github.com/pulumi/pulumi/pull/18819)

- \[cli/{config,state}] Support a PULUMI_STACK environment variable for
selecting your stack
[#&#8203;18717](https://redirect.github.com/pulumi/pulumi/pull/18717)

- \[auto/go] Add the ability to rename the given stack to the Go
Automation API
[#&#8203;18723](https://redirect.github.com/pulumi/pulumi/pull/18723)

- \[auto/go] Automation API for Go now permits setting --diff flag on
refresh
[#&#8203;18792](https://redirect.github.com/pulumi/pulumi/pull/18792)

- \[cli/install] Correctly marshal PluginSpec in GetRequiredPackages, so
pulumi install can install git plugins
[#&#8203;18786](https://redirect.github.com/pulumi/pulumi/pull/18786)

-   \[auto/nodejs] Add `stack rename` to the NodeJS Automation API
[#&#8203;18696](https://redirect.github.com/pulumi/pulumi/pull/18696)

- \[auto/python] Add the ability to rename the given stack to the Python
Automation API
[#&#8203;18712](https://redirect.github.com/pulumi/pulumi/pull/18712)

- \[sdk/python] Log a warning when trying to convert outputs to strings
now logs a warning
[#&#8203;18790](https://redirect.github.com/pulumi/pulumi/pull/18790)

##### Bug Fixes

- \[cli] Stack selections will now always be saved as if `stack select`
had been used
[#&#8203;14519](https://redirect.github.com/pulumi/pulumi/pull/14519)

-   \[cli/plugin] Fix plugin "exited prematurely" false positives
[#&#8203;18793](https://redirect.github.com/pulumi/pulumi/pull/18793)

###
[`v3.153.1`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31531-2025-02-28)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.153.0...v3.153.1)

##### Bug Fixes

-   \[programgen] Fix concurrent map write panics in the caching mapper
[#&#8203;18746](https://redirect.github.com/pulumi/pulumi/pull/18746)

- \[sdk/python] Fix `get_organization` returning `None` from older SDKs
[#&#8203;18769](https://redirect.github.com/pulumi/pulumi/pull/18769)

###
[`v3.153.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31530-2025-02-27)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.152.0...v3.153.0)

##### Features

-   \[sdkgen/dotnet] Update pulumi-dotnet to v3.75.2

- \[auto/python] Add `--preview-only` to the `refresh` command in the
Python Automation API
[#&#8203;18674](https://redirect.github.com/pulumi/pulumi/pull/18674)

- \[sdk/{dotnet,go,java,nodejs,python,yaml}] Add the ability to lookup
project root from sdks, equivalent to path.root in Terraform
[#&#8203;18595](https://redirect.github.com/pulumi/pulumi/pull/18595)

##### Bug Fixes

-   \[cli] Make policy rm and stack rm non-interactive when requested
[#&#8203;18708](https://redirect.github.com/pulumi/pulumi/pull/18708)

-   \[engine] Fix a panic when importing a stack reference
[#&#8203;18704](https://redirect.github.com/pulumi/pulumi/pull/18704)

-   \[cli/new] Report all errors from git clone for multiple refs.
[#&#8203;18702](https://redirect.github.com/pulumi/pulumi/pull/18702)

- \[cli/package] Correctly deal with subdirs in package add when no
version number is specified
[#&#8203;18605](https://redirect.github.com/pulumi/pulumi/pull/18605)

- \[cli/package] Improve disambiguation for package loading when a name
is passed in
[#&#8203;18709](https://redirect.github.com/pulumi/pulumi/pull/18709)

- \[programgen/dotnet] Fix generating SDKs for .NET projects when using
pulumi convert
[#&#8203;18510](https://redirect.github.com/pulumi/pulumi/pull/18510)

-   \[sdkgen/dotnet] Revert provider SDKs to target net6
[#&#8203;18729](https://redirect.github.com/pulumi/pulumi/pull/18729)

- \[sdk/{go,nodejs,python}] Exclude resource references from property
dependencies for packaged components
[#&#8203;18620](https://redirect.github.com/pulumi/pulumi/pull/18620)

-   \[sdk/nodejs] Fix incorrect dependencies due to missing await
[#&#8203;17629](https://redirect.github.com/pulumi/pulumi/pull/17629)

- \[sdk/nodejs] Fix searching for pulumi packages past junction points
on Windows
[#&#8203;18715](https://redirect.github.com/pulumi/pulumi/pull/18715)

##### Miscellaneous

- \[sdk/python] Fix merge method typing for ResourceOptions and
Invoke\*Options
[#&#8203;18061](https://redirect.github.com/pulumi/pulumi/pull/18061)

###
[`v3.152.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31520-2025-02-21)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.151.0...v3.152.0)

##### Bug Fixes

-   \[auto] Fix `up` with nested secret in config file
[#&#8203;18676](https://redirect.github.com/pulumi/pulumi/pull/18676)

-   \[cli] Fix mapping in the presence of hardcoded entries
[#&#8203;18680](https://redirect.github.com/pulumi/pulumi/pull/18680)

###
[`v3.151.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31510-2025-02-21)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.150.0...v3.151.0)

##### Features

- \[engine] Changes to source position metadata will be batched in the
snapshot system
[#&#8203;18579](https://redirect.github.com/pulumi/pulumi/pull/18579)

- \[cli/display] Add --show-secrets args to pulumi up and pulumi
preview, showing secrets in the CLI output. Fixing
[#&#8203;9830](https://redirect.github.com/pulumi/pulumi/issues/9830)
[#&#8203;18503](https://redirect.github.com/pulumi/pulumi/pull/18503)

-   \[auto/go] Include stderr when InstallPulumiCommand fails
[#&#8203;18549](https://redirect.github.com/pulumi/pulumi/pull/18549)

- \[auto/nodejs] Add the `--preview-only` flag to the `refresh` command
in the NodeJS Automation API
[#&#8203;18662](https://redirect.github.com/pulumi/pulumi/pull/18662)

- \[auto/nodejs] Support `--clear-pending-creates` for the `refresh`
command in the NodeJS automation API
[#&#8203;18653](https://redirect.github.com/pulumi/pulumi/pull/18653)

- \[cli/package] Support parameterizing providers when calling
`get-mapping`

- \[auto/python] Add `--clear-pending-creates` to the `refresh` command
in the Python Automation API
[#&#8203;18658](https://redirect.github.com/pulumi/pulumi/pull/18658)

- \[backend/service] Don't send "gitHub:owner" and "gitHub:repo" tags to
the service.
[#&#8203;18489](https://redirect.github.com/pulumi/pulumi/pull/18489)

-   \[backend/service] Add bulk encrypte service types
[#&#8203;18588](https://redirect.github.com/pulumi/pulumi/pull/18588)

-   \[programgen] Add conformance test for dynamic lists and returns
[#&#8203;18424](https://redirect.github.com/pulumi/pulumi/pull/18424)

-   \[programgen] Implement a first version of `try` in PCL
[#&#8203;18454](https://redirect.github.com/pulumi/pulumi/pull/18454)

-   \[programgen] Implement a version of can in PCL
[#&#8203;18571](https://redirect.github.com/pulumi/pulumi/pull/18571)

- \[programgen] Support parameterized mapping from source ecosystems
(e.g. Terraform) to Pulumi when converting programs

- \[sdk/nodejs] \[Experimental/Components] Add infrastructure for
component discovery and schema inference
[#&#8203;18580](https://redirect.github.com/pulumi/pulumi/pull/18580)

- \[sdk/nodejs] \[Experimental/Components] Infer simple inputs/outputs
and optionality
[#&#8203;18590](https://redirect.github.com/pulumi/pulumi/pull/18590)

-   \[sdk/nodejs] \[Experimental/Components] Instantiate components
[#&#8203;18583](https://redirect.github.com/pulumi/pulumi/pull/18583)

-   \[sdk/nodejs] \[Experimental/Components]: Handle ComplexType
[#&#8203;18602](https://redirect.github.com/pulumi/pulumi/pull/18602)

- \[sdk/nodejs] \[Experimental/Components] Hook up inputs & outputs in
the provider
[#&#8203;18600](https://redirect.github.com/pulumi/pulumi/pull/18600)

-   \[sdk/nodejs] \[Experimental/Components] Infer input types
[#&#8203;18597](https://redirect.github.com/pulumi/pulumi/pull/18597)

-   \[sdk/python] \[Experimental/Components] Handle Assets and Archives
[#&#8203;18513](https://redirect.github.com/pulumi/pulumi/pull/18513)

- \[sdk/python] \[Experimental/Components]: Infer type and property
descriptions
[#&#8203;18540](https://redirect.github.com/pulumi/pulumi/pull/18540)

##### Bug Fixes

-   \[cli] Fix nesting directories when generating multiple sdks
[#&#8203;18332](https://redirect.github.com/pulumi/pulumi/pull/18332)

- \[cli] Fix a panic in `help new` when local templates weren't present
[#&#8203;18661](https://redirect.github.com/pulumi/pulumi/pull/18661)

-   \[engine] Send parent URN to resource transforms
[#&#8203;18642](https://redirect.github.com/pulumi/pulumi/pull/18642)

- \[engine] The engine will now call DiffConfig on explict providers to
decide replace semantics, this matches the behaviour for default
providers
[#&#8203;18509](https://redirect.github.com/pulumi/pulumi/pull/18509)

-   \[engine] Don't overwrite schema versions if they exist
[#&#8203;18672](https://redirect.github.com/pulumi/pulumi/pull/18672)

-   \[pkg] Do not cache schema if we never read it back
[#&#8203;18618](https://redirect.github.com/pulumi/pulumi/pull/18618)

-   \[cli/config] Fix reading YAML config with uint64 sized numbers
[#&#8203;18582](https://redirect.github.com/pulumi/pulumi/pull/18582)

- \[sdk/nodejs] Improve type inference for `output` and `Unwrap` when
used on tuples
[#&#8203;18652](https://redirect.github.com/pulumi/pulumi/pull/18652)

-   \[cli/package] Avoid panic'ing when the project file is invalid
[#&#8203;18537](https://redirect.github.com/pulumi/pulumi/pull/18537)

- \[sdk/python] \[Experimental/Components] Detect more map and array
types
[#&#8203;18546](https://redirect.github.com/pulumi/pulumi/pull/18546)

- \[sdk/python] \[Experimental/Components] Return Python stack trace on
error
[#&#8203;18558](https://redirect.github.com/pulumi/pulumi/pull/18558)

- \[sdk/python] Fix source position information to point to user code,
not provider SDKs
[#&#8203;18575](https://redirect.github.com/pulumi/pulumi/pull/18575)

##### Miscellaneous

-   \[sdk/dotnet] Update dotnet to 8.0 LTS
[#&#8203;18619](https://redirect.github.com/pulumi/pulumi/pull/18619)

###
[`v3.150.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31500-2025-02-11)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.149.0...v3.150.0)

##### Features

-   \[cli/state] Add `--all` to `state delete`
[#&#8203;18502](https://redirect.github.com/pulumi/pulumi/pull/18502)

-   \[sdk/python] \[Experimental/Components] Check for required inputs
[#&#8203;18487](https://redirect.github.com/pulumi/pulumi/pull/18487)

-   \[sdk/python] \[Experimental/Components] Infer plain types
[#&#8203;18483](https://redirect.github.com/pulumi/pulumi/pull/18483)

##### Bug Fixes

-   \[engine] Fix a potential panic for corrupted secret values
[#&#8203;18501](https://redirect.github.com/pulumi/pulumi/pull/18501)

- \[engine] Apply autonaming strategy only to custom resources, not
components
[#&#8203;18523](https://redirect.github.com/pulumi/pulumi/pull/18523)

- \[sdk/python] \[Experimental/Components] Throw an error when
encountring resource references
[#&#8203;18485](https://redirect.github.com/pulumi/pulumi/pull/18485)

##### Miscellaneous

-   \[pkg] Change BulkDecrypt to return list instead of map
[#&#8203;18486](https://redirect.github.com/pulumi/pulumi/pull/18486)

###
[`v3.149.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31490-2025-02-07)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.148.0...v3.149.0)

##### Features

-   \[cli] Update `pulumi-java` to 1.2.0

- \[cli/display] Always print resource summaries in preview, even after
errors
[#&#8203;18465](https://redirect.github.com/pulumi/pulumi/pull/18465)

-   \[cli/plugin] Improve the warning when using plugins from PATH
[#&#8203;18476](https://redirect.github.com/pulumi/pulumi/pull/18476)

-   \[engine] Deployments continue past delete errors due to protect
[#&#8203;18396](https://redirect.github.com/pulumi/pulumi/pull/18396)

- \[sdk/python] \[Experimental/Components] Add infrastructure to
bootstrap providers from component resources
[#&#8203;18403](https://redirect.github.com/pulumi/pulumi/pull/18403)
[#&#8203;18401](https://redirect.github.com/pulumi/pulumi/pull/18401)

- \[sdk/python] \[Experimental/Components] Analyze ComponentResource
properties
[#&#8203;18403](https://redirect.github.com/pulumi/pulumi/pull/18403)

- \[sdk/python] \[Experimental/Components] Infer ComplexTypes for
ComponentResources
[#&#8203;18405](https://redirect.github.com/pulumi/pulumi/pull/18405)

- \[sdk/python] \[Experimental/Components] Handle complex types in
inputs and outputs
[#&#8203;18419](https://redirect.github.com/pulumi/pulumi/pull/18419)

- \[sdk/python] \[Experimental/Components] Support array types in
component schema inference
[#&#8203;18469](https://redirect.github.com/pulumi/pulumi/pull/18469)

- \[sdk/python] \[Experimental/Components] Support dict types in
component schema inference
[#&#8203;18472](https://redirect.github.com/pulumi/pulumi/pull/18472)

##### Bug Fixes

-   \[engine] Filter \__internal keys when calling providers DiffConfig
[#&#8203;18440](https://redirect.github.com/pulumi/pulumi/pull/18440)

- \[engine] The engine will correctly use old state for provider config
with no reported differences
[#&#8203;18411](https://redirect.github.com/pulumi/pulumi/pull/18411)

-   \[cli/config] Fix setting indexed top-level config keys
[#&#8203;18444](https://redirect.github.com/pulumi/pulumi/pull/18444)

- \[cli/import] Fix the declaration of parameterized providers in import
JSON files
[#&#8203;18450](https://redirect.github.com/pulumi/pulumi/pull/18450)

- \[sdk/go] Provide a better error message when a Go program can't be
run
[#&#8203;18383](https://redirect.github.com/pulumi/pulumi/pull/18383)

-   \[cli/package] Allow https:// prefixes for Git repository URLs
[#&#8203;18380](https://redirect.github.com/pulumi/pulumi/pull/18380)

- \[cli/package] Fix package add and code generation when package name
contains dashes in Go
[#&#8203;18457](https://redirect.github.com/pulumi/pulumi/pull/18457)

-   \[sdk/python] \[Experimental/Components] Handle inputs and outputs
[#&#8203;18408](https://redirect.github.com/pulumi/pulumi/pull/18408)

###
[`v3.148.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31480-2025-01-31)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.147.0...v3.148.0)

##### Features

-   \[cli/config] Introduce `--type` flag for `config set`
[#&#8203;18287](https://redirect.github.com/pulumi/pulumi/pull/18287)

- \[cli/new] Improve docs for disambiguating repositories on hosts where
the URL is ambiguous
[#&#8203;18379](https://redirect.github.com/pulumi/pulumi/pull/18379)

- \[cli/package] Automatically get latest version for git based plugins
if none is specified
[#&#8203;18215](https://redirect.github.com/pulumi/pulumi/pull/18215)

- \[cli/package] Allow plugins from git sources to live in
subdirectories in the repository
[#&#8203;18322](https://redirect.github.com/pulumi/pulumi/pull/18322)

- \[sdk/python] Support commits in prerelease versions of generated
Python SDKs
[#&#8203;18289](https://redirect.github.com/pulumi/pulumi/pull/18289)

##### Bug Fixes

- \[cli/config] Fix parsing of config keys with paths and colons in path
segments
[#&#8203;18378](https://redirect.github.com/pulumi/pulumi/pull/18378)

- \[engine] Fix some plugin context leaks, which could leave plugin
processes running on exit
[#&#8203;18373](https://redirect.github.com/pulumi/pulumi/pull/18373)

-   \[cli/package] Respect virtualenv option in package add/link
[#&#8203;18319](https://redirect.github.com/pulumi/pulumi/pull/18319)

- \[programgen/nodejs] Handle keyword overlap of "this" keyword for
local variables
[#&#8203;18177](https://redirect.github.com/pulumi/pulumi/pull/18177)

-   \[sdk/nodejs] Fix debug strings triggering the Output toString error
[#&#8203;18016](https://redirect.github.com/pulumi/pulumi/pull/18016)

-   \[sdk/nodejs] Use the corepack executable from dev dependencies
[#&#8203;18393](https://redirect.github.com/pulumi/pulumi/pull/18393)

-   \[sdk/python] Allow Pip 25
[#&#8203;18343](https://redirect.github.com/pulumi/pulumi/pull/18343)

-   \[sdk/python] Make RunPlugin default to using a virtualenv
[#&#8203;18371](https://redirect.github.com/pulumi/pulumi/pull/18371)

##### Miscellaneous

-   \[sdk/{dotnet,java}] Update Java to 1.1.0 and Dotnet to 3.72.0
[#&#8203;18394](https://redirect.github.com/pulumi/pulumi/pull/18394)

-   \[sdkgen] Align pulumi.json and schema.go
[#&#8203;18334](https://redirect.github.com/pulumi/pulumi/pull/18334)

###
[`v3.147.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31470-2025-01-21)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.146.0...v3.147.0)

##### Features

-   \[cli] Update go.mod to require go1.22
[#&#8203;18274](https://redirect.github.com/pulumi/pulumi/pull/18274)

-   \[cli/config] Improve documentation for pulumi config set
[#&#8203;18285](https://redirect.github.com/pulumi/pulumi/pull/18285)

-   \[cli/package] Allow short hashes as versions in package add
[#&#8203;18277](https://redirect.github.com/pulumi/pulumi/pull/18277)

- \[cli/{package,plugin}] Support getting plugins from remote git
sources
[#&#8203;17827](https://redirect.github.com/pulumi/pulumi/pull/17827)

##### Bug Fixes

- \[engine] Skip acquiring program packages during refresh when running
inline automation programs
[#&#8203;18283](https://redirect.github.com/pulumi/pulumi/pull/18283)

-   \[sdk/nodejs] Avoid unnecessary Node.js installations
[#&#8203;18293](https://redirect.github.com/pulumi/pulumi/pull/18293)

- \[sdk/{nodejs,python}] Fix handling of DependencyResource when
checking invoke deps
[#&#8203;18275](https://redirect.github.com/pulumi/pulumi/pull/18275)

- \[sdk/{nodejs,python}] Permit output arguments in plain invokes for
backwards compatibility
[#&#8203;18304](https://redirect.github.com/pulumi/pulumi/pull/18304)

##### Miscellaneous

-   \[sdk/python] Manage the publish dependencies in pyproject.toml
[#&#8203;18261](https://redirect.github.com/pulumi/pulumi/pull/18261)

###
[`v3.146.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31460-2025-01-15)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.145.0...v3.146.0)

##### Features

- \[cli] Allow specifying a version with `pulumi convert
--from=<plugin>@&#8203;<version>`
[#&#8203;18220](https://redirect.github.com/pulumi/pulumi/pull/18220)

-   \[cli] Enable Autonaming Configuration in non-experimental mode
[#&#8203;18228](https://redirect.github.com/pulumi/pulumi/pull/18228)

- \[cli] Retrieve Git metadata from the environment if not running in a
repository
[#&#8203;12871](https://redirect.github.com/pulumi/pulumi/pull/12871)

-   \[pkg] Add a `call` intrinsic to PCL
[#&#8203;18206](https://redirect.github.com/pulumi/pulumi/pull/18206)

- \[auto/go] Add `Color` option to `optdestroy`, `optpreview`,
`optrefresh`, and `optup` packages to allow explicit configuration of
output color.
[#&#8203;18184](https://redirect.github.com/pulumi/pulumi/pull/18184)

- \[cli/import] Add support for parameterized packages to `pulumi
import`
[#&#8203;18038](https://redirect.github.com/pulumi/pulumi/pull/18038)

- \[cli/import] Import can now import resources from parameterized
providers
[#&#8203;18039](https://redirect.github.com/pulumi/pulumi/pull/18039)

-   \[cli/new] Add support for Copilot templates
[#&#8203;16825](https://redirect.github.com/pulumi/pulumi/pull/16825)

##### Bug Fixes

- \[auto/go] Fix rejection of `nil` inline programs in the Go automation
API
[#&#8203;18214](https://redirect.github.com/pulumi/pulumi/pull/18214)

-   \[sdk/go] Improve error messages for wrong stack output types
[#&#8203;18245](https://redirect.github.com/pulumi/pulumi/pull/18245)

- \[sdk/{nodejs,python}] Wait for resource in the input property
dependencies
[#&#8203;18204](https://redirect.github.com/pulumi/pulumi/pull/18204)

- \[cli/plugin] Show plugin kind in plugin rm correctly. Also show the
usage string if the plugin type is incorrect
[#&#8203;18179](https://redirect.github.com/pulumi/pulumi/pull/18179)

-   \[cli/plugin] Passthrough unstructured logs from dynamic providers
[#&#8203;18253](https://redirect.github.com/pulumi/pulumi/pull/18253)

-   \[sdk/python] Fix callbackserver shutdown
[#&#8203;18190](https://redirect.github.com/pulumi/pulumi/pull/18190)

###
[`v3.145.0`](https://redirect.github.com/pulumi/pulumi/blob/HEAD/CHANGELOG.md#31450-2025-01-07)

[Compare
Source](https://redirect.github.com/pulumi/pulumi/compare/v3.144.1...v3.145.0)

##### Features

- \[auto/go] Support --clear-pending-creates for refresh command in Go
Automation API for preview refresh and refresh operations.
[#&#8203;18101](https://redirect.github.com/pulumi/pulumi/pull/18101)

- \[programgen/{java,sdkgen/java}] Only use gRPC to communicate with the
Java host
[#&#8203;18138](https://redirect.github.com/pulumi/pulumi/pull/18138)

- \[cli/package] Support bridging to terraform providers automatically
in pulumi convert
[#&#8203;17992](https://redirect.github.com/pulumi/pulumi/pull/17992)

-   \[sdk/go] Implement deferred output for the Go SDK and program-gen
[#&#8203;17885](https://redirect.github.com/pulumi/pulumi/pull/17885)

##### Bug Fixes

-   \[cli] Fix TestPackageAddGoParameterized to utilize version path
[#&#8203;18150](https://redirect.github.com/pulumi/pulumi/pull/18150)

- \[cli/engine] Clarify the usage string for the --expect-no-changes
flag
[#&#8203;18105](https://redirect.github.com/pulumi/pulumi/pull/18105)

-   \[auto/go] Return error if no inline program specified
[#&#8203;18086](https://redirect.github.com/pulumi/pulumi/pull/18086)

- \[auto/go] Interrupt programs gracefully when the context is canceled
[#&#8203;18124](https://redirect.github.com/pulumi/pulumi/pull/18124)

- \[cli/new] Provide a better error message when pulumi new --ai
generates a program with errors
[#&#8203;18091](https://redirect.github.com/pulumi/pulumi/pull/18091)

-   \[cli/new] Provide a more meaningful message for the --language flag
[#&#8203;18092](https://redirect.github.com/pulumi/pulumi/pull/18092)

- \[engine] Enable `pulumi:pulumi:getResource` to hydrate `Read`
resources
[#&#8203;18070](https://redirect.github.com/pulumi/pulumi/pull/18070)

-   \[programgen] Allow for case-insensitive terraform convert source
[#&#8203;18111](https://redirect.github.com/pulumi/pulumi/pull/18111)

- \[programgen/go] Fix importing module names in Go programs that aren't
lower-case
[#&#8203;18113](https://redirect.github.com/pulumi/pulumi/pull/18113)

-   \[sdk/go] Fix panic when diffing computed property values
[#&#8203;18104](https://redirect.github.com/pulumi/pulumi/pull/18104)

- \[sdk/go] Avoid calling invokes with dependencies on unknown resources
[#&#8203;18133](https://redirect.github.com/pulumi/pulumi/pull/18133)

-   \[sdk/nodejs] Fix source maps when using jest
[#&#8203;18108](https://redirect.github.com/pulumi/pulumi/pull/18108)

- \[sdk/nodejs] Avoid calling invokes with dependencies on unknown
resources
[#&#8203;18152](https://redirect.github.com/pulumi/pulumi/pull/18152)

- \[sdk/python] Fix reading pulumi-plugin.json when using the uv
toolchain
[#&#8203;18107](https://redirect.github.com/pulumi/pulumi/pull/18107)

-   \[sdk/python] Fix ListPackages when using uv
[#&#8203;18121](https://redirect.github.com/pulumi/pulumi/pull/18121)

-   \[sdk/python] Fix dynamic providers when using Poetry or uv
[#&#8203;18126](https://redirect.github.com/pulumi/pulumi/pull/18126)

-   \[sdk/python] Fix prerelease version
[#&#8203;18125](https://redirect.github.com/pulumi/pulumi/pull/18125)

- \[sdk/python] Avoid calling invokes with dependencies on unknown
resources
[#&#8203;18141](https://redirect.github.com/pulumi/pulumi/pull/18141)

##### Miscellaneous

- \[programgen/java] Bump Java SDK dependency version so that `package
gen-sdk` emits buildable code
[#&#8203;18130](https://redirect.github.com/pulumi/pulumi/pull/18130)

-   \[sdk/python] Switch to pyproject.toml + uv
[#&#8203;18081](https://redirect.github.com/pulumi/pulumi/pull/18081)

-   \[sdk/python] Move mypy configuration into pyproject.toml
[#&#8203;18118](https://redirect.github.com/pulumi/pulumi/pull/18118)

-   \[sdk/python] Move pyright configuration into pyproject.toml
[#&#8203;18116](https://redirect.github.com/pulumi/pulumi/pull/18116)

-   \[sdk/python] Move ruff configuration into pyproject.toml
[#&#8203;18117](https://redirect.github.com/pulumi/pulumi/pull/18117)

</details>

<details>
<summary>pulumi/providertest (github.com/pulumi/providertest)</summary>

###
[`v0.3.1`](https://redirect.github.com/pulumi/providertest/releases/tag/v0.3.1)

[Compare
Source](https://redirect.github.com/pulumi/providertest/compare/v0.3.0...v0.3.1)

#### What's Changed

- feat: fixing login support on windows by
[@&#8203;rshade](https://redirect.github.com/rshade) in
[https://github.com/pulumi/providertest/pull/137](https://redirect.github.com/pulumi/providertest/pull/137)

#### New Contributors

- [@&#8203;rshade](https://redirect.github.com/rshade) made their first
contribution in
[https://github.com/pulumi/providertest/pull/137](https://redirect.github.com/pulumi/providertest/pull/137)

**Full Changelog**:
https://github.com/pulumi/providertest/compare/v0.3.0...v0.3.1

###
[`v0.3.0`](https://redirect.github.com/pulumi/providertest/compare/v0.2.0...v0.3.0)

[Compare
Source](https://redirect.github.com/pulumi/providertest/compare/v0.2.0...v0.3.0)

###
[`v0.2.0`](https://redirect.github.com/pulumi/providertest/releases/tag/v0.2.0)

[Compare
Source](https://redirect.github.com/pulumi/providertest/compare/v0.1.7...v0.2.0)

##### What's Changed

- BREAKING CHANGE: Remove ProviderTest abstraction by
[@&#8203;danielrbradley](https://redirect.github.com/danielrbradley) in
[https://github.com/pulumi/providertest/pull/133](https://redirect.github.com/pulumi/providertest/pull/133)

**Full Changelog**:
https://github.com/pulumi/providertest/compare/v0.1.7...v0.2.0

###
[`v0.1.7`](https://redirect.github.com/pulumi/providertest/releases/tag/v0.1.7)

[Compare
Source](https://redirect.github.com/pulumi/providertest/compare/v0.1.6...v0.1.7)

##### What's Changed

- Improve convert by
[@&#8203;danielrbradley](https://redirect.github.com/danielrbradley) in
[https://github.com/pulumi/providertest/pull/130](https://redirect.github.com/pulumi/providertest/pull/130)
- Docs & variable tidy up by
[@&#8203;danielrbradley](https://redirect.github.com/danielrbradley) in
[https://github.com/pulumi/providertest/pull/131](https://redirect.github.com/pulumi/providertest/pull/131)

**Full Changelog**:
https://github.com/pulumi/providertest/compare/v0.1.6...v0.1.7

###
[`v0.1.6`](https://redirect.github.com/pulumi/providertest/releases/tag/v0.1.6)

[Compare
Source](https://redirect.github.com/pulumi/providertest/compare/v0.1.5...v0.1.6)

##### What's Changed

- Update README.md to steer toward pulumitest by
[@&#8203;mjeffryes](https://redirect.github.com/mjeffryes) in
[https://github.com/pulumi/providertest/pull/123](https://redirect.github.com/pulumi/providertest/pull/123)
- Add support for custom temp directory by
[@&#8203;danielrbradley](https://redirect.github.com/danielrbradley) in
[https://github.com/pulumi/providertest/pull/125](https://redirect.github.com/pulumi/providertest/pull/125)
- Fix retention & location of temp dir via env vars by
[@&#8203;danielrbradley](https://redirect.github.com/danielrbradley) in
[https://github.com/pulumi/providertest/pull/126](https://redirect.github.com/pulumi/providertest/pull/126)
- Deprecate ProviderTest by
[@&#8203;danielrbradley](https://redirect.github.com/danielrbradley) in
[https://github.com/pulumi/providertest/pull/128](https://redirect.github.com/pulumi/providertest/pull/128)
- Further docs updates from feedback by
[@&#8203;danielrbradley](https://redirect.github.com/danielrbradley) in
[https://github.com/pulumi/providertest/pull/129](https://redirect.github.com/pulumi/providertest/pull/129)

**Full Changelog**:
https://github.com/pulumi/providertest/compare/v0.1.5...v0.1.6

###
[`v0.1.5`](https://redirect.github.com/pulumi/providertest/releases/tag/v0.1.5)

[Compare
Source](https://redirect.github.com/pulumi/providertest/compare/v0.1.4...v0.1.5)

##### What's Changed

- Add handshake GRPC method replay by
[@&#8203;VenelinMartinov](https://redirect.github.com/VenelinMartinov)
in
[https://github.com/pulumi/providertest/pull/118](https://redirect.github.com/pulumi/providertest/pull/118)
- Fix secret identification by
[@&#8203;danielrbradley](https://redirect.github.com/danielrbradley) in
[https://github.com/pulumi/providertest/pull/121](https://redirect.github.com/pulumi/providertest/pull/121)
- Show diffs for all previews by
[@&#8203;thomas11](https://redirect.github.com/thomas11) in
[https://github.com/pulumi/providertest/pull/120](https://redirect.github.com/pulumi/providertest/pull/120)

**Full Changelog**:
https://github.com/pulumi/providertest/compare/v0.1.4...v0.1.5

###
[`v0.1.4`](https://redirect.github.com/pulumi/providertest/releases/tag/v0.1.4)

[Compare
Source](https://redirect.github.com/pulumi/providertest/compare/v0.1.3...v0.1.4)

##### What's Changed

- Clean up failed tests by default by
[@&#8203;danielrbradley](https://redirect.github.com/danielrbradley) in
[https://github.com/pulumi/providertest/pull/112](https://redirect.github.com/pulumi/providertest/pull/112)
- Fix tool install by
[@&#8203;danielrbradley](https://redirect.github.com/danielrbradley) in
[https://github.com/pulumi/providertest/pull/115](https://redirect.github.com/pulumi/providertest/pull/115)
- Failed test cleanup usability improvements by
[@&#8203;danielrbradley](https://redirect.github.com/danielrbradley) in
[https://github.com/pulumi/providertest/pull/114](https://redirect.github.com/pulumi/providertest/pull/114)
- Fix secret sanitizing for non string values by
[@&#8203;danielrbradley](https://redirect.github.com/danielrbradley) in
[https://github.com/pulumi/providertest/pull/113](https://redirect.github.com/pulumi/providertest/pull/113)
- Bump minimum pulumi requirement by
[@&#8203;blampe](https://redirect.github.com/blampe) in
[https://github.com/pulumi/providertest/pull/119](https://redirect.github.com/pulumi/providertest/pull/119)

**Full Changelog**:
https://github.com/pulumi/providertest/compare/v0.1.3...v0.1.4

</details>

<details>
<summary>pulumi/pulumi-docker-build
(github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild)</summary>

###
[`v0.0.11`](https://redirect.github.com/pulumi/pulumi-docker-build/compare/v0.0.10...v0.0.11)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-docker-build/compare/v0.0.10...v0.0.11)

###
[`v0.0.10`](https://redirect.github.com/pulumi/pulumi-docker-build/compare/v0.0.9...v0.0.10)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-docker-build/compare/v0.0.9...v0.0.10)

###
[`v0.0.9`](https://redirect.github.com/pulumi/pulumi-docker-build/compare/v0.0.8...v0.0.9)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-docker-build/compare/v0.0.8...v0.0.9)

</details>

<details>
<summary>pulumi/pulumi-java
(github.com/pulumi/pulumi-java/pkg)</summary>

###
[`v1.10.0`](https://redirect.github.com/pulumi/pulumi-java/releases/tag/v1.10.0)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-java/compare/v1.9.0...v1.10.0)

##### Improvements

-   Support generating programs using the `import` resource option

##### Bug Fixes

</details>

<details>
<summary>pulumi/pulumi-yaml (github.com/pulumi/pulumi-yaml)</summary>

###
[`v1.17.0`](https://redirect.github.com/pulumi/pulumi-yaml/blob/HEAD/CHANGELOG.md#v1170---2025-04-24)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-yaml/compare/v1.16.0...v1.17.0)

##### Improvements

- \[runtime] Make setting resource properties using an object variables
possible
[#&#8203;779](https://redirect.github.com/pulumi/pulumi-yaml/pull/779)

##### Bug Fixes

- \[runtime] Use PluginDownloadURL resource option correctly when
loading plugins
[#&#8203;776](https://redirect.github.com/pulumi/pulumi-yaml/pull/776)

###
[`v1.16.0`](https://redirect.github.com/pulumi/pulumi-yaml/blob/HEAD/CHANGELOG.md#v1160---2025-04-08)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-yaml/compare/v1.15.2...v1.16.0)

##### Improvements

- \[runtime] Update pulumi/pulumi to 3.160.0
[#&#8203;773](https://redirect.github.com/pulumi/pulumi-yaml/pull/773)

###
[`v1.15.2`](https://redirect.github.com/pulumi/pulumi-yaml/blob/HEAD/CHANGELOG.md#v1152---2025-04-08)

[Compare
Source](https://redirect.github.com/pulumi/pulumi-yaml/compare/v1.15.1...v1.15.2)

##### Bug Fixes

- \[runtime] Allow default values for integer config
[#&#8203;771](https://redirect.github.com/pulumi/pulumi-yaml/pull/771)

</details>

<details>
<summary>pulumi/esc-action (pulumi/esc-action)</summary>

###
[`v1.4.0`](https://redirect.github.com/pulumi/esc-action/compare/v1.3.0...v1.4.0)

[Compare
Source](https://redirect.github.com/pulumi/esc-action/compare/v1.3.0...v1.4.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - "every weekday" (UTC).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Renovate
Bot](https://redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOS4wIiwidXBkYXRlZEluVmVyIjoiMzkuMTkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwiaW1wYWN0L25vLWNoYW5nZWxvZy1yZXF1aXJlZCJdfQ==-->

---------

Co-authored-by: pulumi-renovate[bot] <189166143+pulumi-renovate[bot]@users.noreply.github.com>
Co-authored-by: Bryce Lampe <bryce@pulumi.com>
2025-04-28 20:23:17 +00:00
Pulumi Bot
1a178f020f Update GitHub Actions workflows. (#521)
This PR was automatically generated by the
update-workflows-ecosystem-providers workflow in the pulumi/ci-mgmt
repo, from commit 88045b2cfb3dd09aafe04c394d3ea20f512ad9fe.
2025-04-22 05:47:16 +00:00
Ramon Quitales
8c5a9ac033 Fix weekly pulumi/pulumi update (#501)
Fixes: #497 

This PR follows the `weekly-pulumi-update` CI workflow steps to update
our `pulumi/pulumi` dependency, with manual intervention to resolve
tooling update conflicts. Before generating the SDKs, it's necessary to
update the language tools and otel packages to ensure compatibility with
the latest changes.

Additional command executed for the manual updates:

```sh
TOOLS=(
    "github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3"
    "github.com/pulumi/pulumi/sdk/nodejs/cmd/pulumi-language-nodejs/v3"
    "github.com/pulumi/pulumi/sdk/python/cmd/pulumi-language-python/v3"
    "go.opentelemetry.io/otel/exporters/otlp/otlptrace"
)

for TOOL in "${TOOLS[@]}"; do
    go get -u $TOOL
    go mod tidy
done
```

---

Note: the Go directive is upgraded to v1.24 as
`github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3` requires Go
v1.24
([ref](5c96e4e6aa/sdk/go/pulumi-language-go/go.mod (L3))).
2025-04-21 11:26:37 -07:00
430 changed files with 60539 additions and 403 deletions

29
.ci-mgmt.yaml Normal file
View File

@@ -0,0 +1,29 @@
template: native
provider: docker-build
major-version: 0
providerDefaultBranch: main
providerVersion: github.com/pulumi/pulumi-docker-build/provider.Version
aws: true
modulePath: .
gcp: true
sdkModuleDir: sdk/go/dockerbuild
parallel: 3
esc:
enabled: true
envOverride:
AWS_REGION: us-west-2
PULUMI_API: "https://api.pulumi-staging.io"
ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
AZURE_LOCATION: westus
DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}
GOOGLE_CI_SERVICE_ACCOUNT_EMAIL: pulumi-ci@pulumi-ci-gcp-provider.iam.gserviceaccount.com
GOOGLE_CI_WORKLOAD_IDENTITY_POOL: pulumi-ci
GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER: pulumi-ci
GOOGLE_PROJECT: pulumi-ci-gcp-provider
GOOGLE_PROJECT_NUMBER: 895284651812
GOOGLE_REGION: us-central1
GOOGLE_ZONE: us-central1-a
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}

87
.config/mise.lock Normal file
View File

@@ -0,0 +1,87 @@
[[tools.dotnet]]
version = "8.0.414"
backend = "asdf:dotnet"
[[tools."github:pulumi/pulumictl"]]
version = "0.0.50"
backend = "github:pulumi/pulumictl"
[tools."github:pulumi/pulumictl".platforms.linux-x64]
checksum = "blake3:c128dd74993f779c613296fe7cd21c20cbd323f24e59cb76e007620660b60348"
name = "pulumictl-v0.0.50-linux-amd64.tar.gz"
size = 27744219
url = "https://github.com/pulumi/pulumictl/releases/download/v0.0.50/pulumictl-v0.0.50-linux-amd64.tar.gz"
url_api = ""
[[tools."github:pulumi/schema-tools"]]
version = "0.6.0"
backend = "github:pulumi/schema-tools"
[tools."github:pulumi/schema-tools".platforms.linux-x64]
checksum = "blake3:82dfe616fee18b4258f6e3d2dc3c4e9f14afd43a0a4cc33eff2d2a04088d6ca3"
name = "schema-tools-v0.6.0-linux-amd64.tar.gz"
size = 14282746
url = "https://github.com/pulumi/schema-tools/releases/download/v0.6.0/schema-tools-v0.6.0-linux-amd64.tar.gz"
url_api = ""
[[tools.go]]
version = "1.24.1"
backend = "core:go"
[tools.go.platforms.linux-x64]
checksum = "sha256:cb2396bae64183cdccf81a9a6df0aea3bce9511fc21469fb89a0c00470088073"
size = 78503123
url = "https://dl.google.com/go/go1.24.1.linux-amd64.tar.gz"
[[tools.golangci-lint]]
version = "1.64.8"
backend = "aqua:golangci/golangci-lint"
[tools.golangci-lint.platforms.linux-x64]
checksum = "sha256:b6270687afb143d019f387c791cd2a6f1cb383be9b3124d241ca11bd3ce2e54e"
size = 12364828
url = "https://github.com/golangci/golangci-lint/releases/download/v1.64.8/golangci-lint-1.64.8-linux-amd64.tar.gz"
[[tools.gradle]]
version = "7.6.6"
backend = "aqua:gradle/gradle"
[tools.gradle.platforms.linux-x64]
checksum = "blake3:5cad8fc455b720b68a0bd2907d435e2919581708243f84f27845fe8812a09323"
size = 128439774
url = "https://github.com/gradle/gradle-distributions/releases/download/v7.6.6/gradle-7.6.6-bin.zip"
[[tools.java]]
version = "corretto-11.0.28.6.1"
backend = "core:java"
[tools.java.platforms.linux-x64]
checksum = "sha256:70734c46e0bbeb7f45b721756ba0b2f1f1e1ef85a11e10d5a488f06b257dadd9"
size = 195648709
url = "https://corretto.aws/downloads/resources/11.0.28.6.1/amazon-corretto-11.0.28.6.1-linux-x64.tar.gz"
[[tools.node]]
version = "20.19.5"
backend = "core:node"
[tools.node.platforms.linux-x64]
checksum = "sha256:4eba5fbe1fb10753bc06e42f001a91c5cec16798b7764a3e9257adc59af47fe1"
size = 47041607
url = "https://nodejs.org/dist/v20.19.5/node-v20.19.5-linux-x64.tar.gz"
[[tools."npm:yarn"]]
version = "1.22.22"
backend = "npm:yarn"
[[tools.pulumi]]
version = "3.192.0"
backend = "aqua:pulumi/pulumi"
[tools.pulumi.platforms.linux-x64]
checksum = "sha512:6351213bee02ade5b76407d9b43cdb243fa461ca38231b03410de5aa1f697e55ab6467da2a9e37ebbff7be6cd3485d833e9ad8f29d4de6919bbdd471fb25e45a"
size = 92867578
url = "https://github.com/pulumi/pulumi/releases/download/v3.192.0/pulumi-v3.192.0-linux-x64.tar.gz"
[[tools.python]]
version = "3.11.8"
backend = "core:python"

11
.config/mise.test.toml Normal file
View File

@@ -0,0 +1,11 @@
# WARNING: This file is autogenerated - changes will be overwritten when regenerated by https://github.com/pulumi/ci-mgmt
# Overrides for test workflows
[env]
# Acceptance (specifically providertest) tests require that PULUMI_HOME be the default
PULUMI_HOME = "{{ env.HOME }}/.pulumi"
[tools]
# always use pulumi latest for tests
pulumi = "latest"

29
.config/mise.toml Normal file
View File

@@ -0,0 +1,29 @@
# WARNING: This file is autogenerated - changes will be overwritten when regenerated by https://github.com/pulumi/ci-mgmt
# You can create your own root-level mise.toml file to override/augment this. See https://mise.jdx.dev/configuration.html
[env]
_.source = "{{config_root}}/scripts/get-versions.sh"
PULUMI_HOME = "{{config_root}}/.pulumi"
[tools]
# Runtimes
# TODO: we may not need `get_env` once https://github.com/jdx/mise/discussions/6339 is fixed
go = "{{ get_env(name='GO_VERSION_MISE', default='latest') }}"
node = '20.19.5'
python = '3.11.8'
dotnet = '8.0.414'
# Corretto version used as Java SE/OpenJDK version no longer offered
java = 'corretto-11'
# Executable tools
pulumi = "{{ get_env(name='PULUMI_VERSION_MISE', default='latest') }}"
"github:pulumi/pulumictl" = 'latest'
"github:pulumi/schema-tools" = "latest"
gradle = '7.6'
golangci-lint = "1.64.8" # See note about about overrides if you need to customize this.
"npm:yarn" = "1.22.22"
[settings]
experimental = true # Required for Go binaries (e.g. pulumictl).
lockfile = true

1
.devcontainer Submodule

Submodule .devcontainer added at dce1e31630

68
.devcontainer.json Normal file
View File

@@ -0,0 +1,68 @@
// Reference:
// - https://containers.dev/features
// - https://containers.dev/implementors/features
// - https://code.visualstudio.com/docs/getstarted/settings
{
"name": "pulumi",
"image": "ghcr.io/pulumi/devcontainer",
"customizations": {
"vscode": {
"settings": [
"go.testTags", "all",
"go.buildTags", "all",
"editor.minimap.enabled", false,
"explorer.openEditors.visible", 1,
"editor.quickSuggestionsDelay", 0,
"editor.suggestSelection", "first",
"editor.snippetSuggestions", "top",
"editor.gotoLocation.multipleReferences", "goto",
"editor.gotoLocation.multipleDefinitions", "goto",
"editor.gotoLocation.multipleDeclarations", "goto",
"editor.gotoLocation.multipleImplementations", "goto",
"editor.gotoLocation.multipleTypeDefinitions", "goto",
"editor.terminal.integrated.shell.linux", "/usr/bin/zsh",
"files.trimTrailingWhitespace", true,
"files.trimFinalNewlines", true
],
"extensions": [
"golang.go",
"vscodevim.vim",
"github.copilot",
"ms-python.python",
"jetpack-io.devbox",
"redhat.vscode-yaml",
"esbenp.prettier-vscode",
"ms-vscode.makefile-tools",
"ms-azuretools.vscode-docker",
"github.vscode-pull-request-github",
"ms-vscode-remote.remote-containers",
"visualstudioexptteam.vscodeintellicode",
"bierner.markdown-preview-github-styles"
]
}
},
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"installZsh": true,
"configureZshAsDefaultShell": true,
"installOhMyZsh": true,
"installOhMyZshConfig": true,
"upgradePackages": true,
"nonFreePackages": true,
"username": "vscode",
"userUid": "automatic",
"userGid": "automatic"
},
"ghcr.io/devcontainers/features/docker-outside-of-docker:1": {
"moby": false,
"installDockerBuildx": true,
"version": "latest",
"dockerDashComposeVersion": "v2"
}
},
"postCreateCommand": "git submodule update --init --recursive",
"remoteUser": "vscode",
"forwardPorts": [1313],
"runArgs": ["--network=host"]
}

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
sdk/**/* linguist-generated=true
provider/internal/mock*.go linguist-generated=true

69
.github/ISSUE_TEMPLATE/bug.yaml vendored Normal file
View File

@@ -0,0 +1,69 @@
name: Bug Report
description: Report something that's not working correctly
labels: ["kind/bug", "needs-triage"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
You can also ask questions on our [Community Slack](https://slack.pulumi.com/).
- type: textarea
id: what-happened
attributes:
label: Describe what happened
description: Please summarize what happened, including what Pulumi commands you ran, as well as
an inline snippet of any relevant error or console output.
validations:
required: true
- type: textarea
id: sample-program
attributes:
label: Sample program
description: |
<details><summary>Provide a reproducible sample program</summary>
If this is a bug you encountered while running a Pulumi command, please provide us with a minimal,
self-contained Pulumi program that reproduces this behavior so that we can investigate on our end.
Without a functional reproduction, we will not be able to prioritize this bug.
**Note:** If the program output is more than a few lines, please send us a Gist or a link to a file.
</details>
validations:
required: true
- type: textarea
id: log-output
attributes:
label: Log output
description: |
<details><summary>How to Submit Logs</summary>
If this is something that is dependent on your environment, please also provide us with the output of
`pulumi up --logtostderr --logflow -v=10` from the root of your project.
We may also ask you to supply us with debug output following [these steps](https://www.pulumi.com/docs/using-pulumi/pulumi-packages/debugging-provider-packages/).
**Note:** If the log output is more than a few lines, please send us a Gist or a link to a file.
</details>
- type: textarea
id: resources
attributes:
label: Affected Resource(s)
description: Please list the affected Pulumi Resource(s) or Function(s).
validations:
required: false
- type: textarea
id: versions
attributes:
label: Output of `pulumi about`
description: Provide the output of `pulumi about` from the root of your project.
validations:
required: true
- type: textarea
id: ctx
attributes:
label: Additional context
description: Anything else you would like to add?
validations:
required: false
- type: textarea
id: voting
attributes:
label: Contributing
value: |
Vote on this issue by adding a 👍 reaction.
To contribute a fix for this issue, leave a comment (and link to your pull request, if you've opened one already).

35
.github/ISSUE_TEMPLATE/epic.md vendored Normal file
View File

@@ -0,0 +1,35 @@
---
name: Epic
about: Tracks a shippable unit of work
title: '[Epic] {your-title-here}'
labels: kind/epic
projects: ['pulumi/32']
assignees: ''
type: Epic
---
## Overview
<!-- Start with a one- to three-sentence summary that should be understandable by any Pulumian or community member, even those without any context on the work. -->
## Key KPIs
<!-- What KPIs should this Epic will move; what could we measure to observe that this project was successful? -->
## Key Stakeholders
- Product and Engineering: <!-- Teams and individuals involved in the design and implementation -->
- Documentation: <!-- Representative from the docs team -->
- Marketing/Partnerships: <!-- Representative from the Marketing team -->
- Customers: <!-- [Tracking Issue](add-link-and-uncomment) -->
## Key Deliverables
<!-- List any discrete chunks of work or milestones that are planned in the epic (eg. subcomponent A, dogfood release, beta, etc.) -->
### References 📔
<!-- Any project that is more than one iteration should have a Project Board using this [template](https://github.com/orgs/pulumi/projects/131). -->
- [ ] Project View <!-- [Link](add-link-and-uncomment) -->
- [ ] PR/FAQ <!-- [Link](add-link-and-uncomment) -->
- [ ] Design Doc <!-- [Link](add-link-and-uncomment) -->
- [ ] UX Designs <!-- [Link](add-link-and-uncomment) -->
- [ ] Decision Log <!-- [Link](add-link-and-uncomment) -->
<!-- Work items should be added to the project board linked above -->

12
.github/actions/esc-action/action.yaml vendored Normal file
View File

@@ -0,0 +1,12 @@
name: "Load secrets"
description: |
This is a temporary action which assists with our migration to ESC. Instead
of surrounding every step that references secrets with an "if ESC" block, we
instead modify those steps to consume their secrets from this step's outputs.
Then, later, we can replace this action with esc-action to actually load
secrets from ESC.
inputs: {}
outputs: {}
runs:
using: "node20"
main: "index.js"

14
.github/actions/esc-action/index.js vendored Normal file
View File

@@ -0,0 +1,14 @@
const fs = require("fs");
const file = process.env["GITHUB_OUTPUT"];
var stream = fs.createWriteStream(file, { flags: "a" });
for (const [name, value] of Object.entries(process.env)) {
try {
stream.write(`${name}<<EEEOOOFFF\n${value}\nEEEOOOFFF\n`); // << syntax accommodates multiline strings.
} catch (err) {
console.log(`error: failed to set output for ${name}: ${err.message}`);
}
}
stream.end();

768
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,768 @@
# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
name: main # For consistency with bridged providers.
on:
push:
branches:
- master
- main
- feature-**
paths-ignore:
- CHANGELOG.md
tags-ignore:
- v*
- sdk/*
- "**"
workflow_dispatch: {}
env:
PROVIDER: docker-build
TRAVIS_OS_NAME: linux
GOVERSION: "1.21.x"
NODEVERSION: "20.x"
PYTHONVERSION: "3.11.8"
DOTNETVERSION: "8.0.x"
JAVAVERSION: "11"
ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
AWS_REGION: us-west-2
AZURE_LOCATION: westus
GOOGLE_CI_SERVICE_ACCOUNT_EMAIL: pulumi-ci@pulumi-ci-gcp-provider.iam.gserviceaccount.com
GOOGLE_CI_WORKLOAD_IDENTITY_POOL: pulumi-ci
GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER: pulumi-ci
GOOGLE_PROJECT: pulumi-ci-gcp-provider
GOOGLE_PROJECT_NUMBER: "895284651812"
GOOGLE_REGION: us-central1
GOOGLE_ZONE: us-central1-a
PULUMI_API: https://api.pulumi-staging.io
jobs:
prerequisites:
runs-on: ubuntu-latest
name: prerequisites
permissions:
id-token: write # For ESC secrets.
pull-requests: write # For schema check comment.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- if: github.event_name == 'pull_request'
name: Install Schema Tools
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/schema-tools
- name: Build codegen binaries
run: make codegen
- name: Build Schema
run: make generate_schema
- if: github.event_name == 'pull_request'
name: Check Schema is Valid
run: >-
{
echo 'SCHEMA_CHANGES<<EOF';
schema-tools compare -p ${{ env.PROVIDER }} -o ${{ github.event.repository.default_branch }} -n --local-path=provider/cmd/pulumi-resource-${{ env.PROVIDER }}/schema.json;
echo 'EOF';
} >> "$GITHUB_ENV"
env:
GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
- if: github.event_name == 'pull_request' && github.actor != 'dependabot[bot]'
name: Comment on PR with Details of Schema Check
uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
with:
message: |
${{ env.SCHEMA_CHANGES }}
comment-tag: schemaCheck
github-token: ${{ secrets.GITHUB_TOKEN }}
- if: contains(env.SCHEMA_CHANGES, 'Looking good! No breaking changes found.') &&
github.actor == 'pulumi-bot'
name: Add label if no breaking changes
uses: actions-ecosystem/action-add-labels@18f1af5e3544586314bbe15c0273249c770b2daf # v1.1.3
with:
labels: impact/no-changelog-required
number: ${{ github.event.issue.number }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Build Provider
run: make provider
- name: Check worktree clean
id: worktreeClean
uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
with:
allowed-changes: |-
sdk/**/pulumi-plugin.json
sdk/dotnet/*.*.csproj
sdk/dotnet/version.txt
sdk/go/**/pulumiUtilities.go
sdk/nodejs/package.json
sdk/python/pyproject.toml
sdk/java/build.gradle
- name: Commit SDK changes for Renovate
if: failure() && steps.worktreeClean.outcome == 'failure' &&
contains(github.actor, 'renovate') && github.event_name ==
'pull_request'
shell: bash
run: >
git diff --quiet -- sdk && echo "no changes to sdk" && exit
git config --global user.email "bot@pulumi.com"
git config --global user.name "pulumi-bot"
# Stash local changes and check out the PR's branch directly.
git stash
git fetch
git checkout "origin/$HEAD_REF"
# Apply and add our changes, but don't commit any files we expect to
# always change due to versioning.
git stash pop
git add sdk
git reset sdk/python/*/pulumi-plugin.json \
sdk/python/pyproject.toml \
sdk/dotnet/pulumi-plugin.json \
sdk/dotnet/*.*.csproj \
sdk/dotnet/version.txt \
sdk/go/*/pulumi-plugin.json \
sdk/go/*/internal/pulumiUtilities.go \
sdk/nodejs/package.json
git commit -m 'Commit SDK for Renovate'
# Push with pulumi-bot credentials to trigger a re-run of the
# workflow. https://github.com/orgs/community/discussions/25702
git push https://pulumi-bot:${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}@github.com/${{ github.repository }} "HEAD:$HEAD_REF"
env:
HEAD_REF: ${{ github.head_ref }}
- run: git status --porcelain
- name: Tar provider binaries
run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
github.workspace}}/bin/ pulumi-resource-${{ env.PROVIDER }}
pulumi-gen-${{ env.PROVIDER}}
- name: Upload artifacts
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin/provider.tar.gz
- name: Test Provider Library
run: make test_provider
env:
ARM_CLIENT_SECRET: ${{ steps.esc-secrets.outputs.ARM_CLIENT_SECRET }}
DIGITALOCEAN_TOKEN: ${{ steps.esc-secrets.outputs.DIGITALOCEAN_TOKEN }}
DOCKER_HUB_PASSWORD: ${{ steps.esc-secrets.outputs.DOCKER_HUB_PASSWORD }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
env:
CODECOV_TOKEN: ${{ steps.esc-secrets.outputs.CODECOV_TOKEN }}
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in building provider prerequisites
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
build_sdks:
needs: prerequisites
runs-on: pulumi-ubuntu-8core
strategy:
fail-fast: ${{ ! contains(github.actor, 'renovate') }}
matrix:
language:
- nodejs
- python
- dotnet
- go
- java
name: build_sdks
permissions:
pull-requests: write # For Renovate SDK updates.
id-token: write # For ESC secrets.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
cache: gradle
- name: Setup Gradle
uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0
with:
gradle-version: "7.6"
- name: Download provider
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin
- name: UnTar provider binaries
run: tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
github.workspace}}/bin
- name: Restore Binary Permissions
run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
-exec chmod +x {} \;
- name: Generate SDK
run: make generate_${{ matrix.language }}
- name: Build SDK
run: make build_${{ matrix.language }}
- name: Check worktree clean
id: worktreeClean
uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
with:
allowed-changes: |-
sdk/**/pulumi-plugin.json
sdk/dotnet/*.*.csproj
sdk/dotnet/version.txt
sdk/go/**/pulumiUtilities.go
sdk/nodejs/package.json
sdk/python/pyproject.toml
sdk/java/build.gradle
- name: Commit SDK changes for Renovate
if: failure() && steps.worktreeClean.outcome == 'failure' &&
contains(github.actor, 'renovate') && github.event_name ==
'pull_request'
shell: bash
run: >
git diff --quiet -- sdk && echo "no changes to sdk" && exit
git config --global user.email "bot@pulumi.com"
git config --global user.name "pulumi-bot"
# Stash local changes and check out the PR's branch directly.
git stash
git fetch
git checkout "origin/$HEAD_REF"
# Apply and add our changes, but don't commit any files we expect to
# always change due to versioning.
git stash pop
git add sdk
git reset sdk/python/*/pulumi-plugin.json \
sdk/python/pyproject.toml \
sdk/dotnet/pulumi-plugin.json \
sdk/dotnet/*.*.csproj \
sdk/dotnet/version.txt \
sdk/go/*/pulumi-plugin.json \
sdk/go/*/internal/pulumiUtilities.go \
sdk/nodejs/package.json
git commit -m 'Commit SDK for Renovate'
# Push with pulumi-bot credentials to trigger a re-run of the
# workflow. https://github.com/orgs/community/discussions/25702
git push https://pulumi-bot:${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}@github.com/${{ github.repository }} "HEAD:$HEAD_REF"
env:
HEAD_REF: ${{ github.head_ref }}
- run: git status --porcelain
- name: Tar SDK folder
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
- name: Upload artifacts
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: ${{ matrix.language }}-sdk.tar.gz
path: ${{ github.workspace}}/sdk/${{ matrix.language }}.tar.gz
retention-days: 30
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure while building SDKs
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
tag_release_if_labeled_needs_release:
name: Tag release if labeled as needs-release
needs: publish
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write # For ESC secrets.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- name: check if this commit needs release
if: ${{ env.RELEASE_BOT_ENDPOINT != '' }}
uses: pulumi/action-release-by-pr-label@main
with:
command: "release-if-needed"
repo: ${{ github.repository }}
commit: ${{ github.sha }}
slack_channel: C02MGR8JVST
env:
RELEASE_BOT_ENDPOINT: ${{ steps.esc-secrets.outputs.RELEASE_BOT_ENDPOINT }}
RELEASE_BOT_KEY: ${{ steps.esc-secrets.outputs.RELEASE_BOT_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
test:
runs-on: pulumi-ubuntu-8core
needs:
- build_sdks
strategy:
fail-fast: true
matrix:
language:
- nodejs
- python
- dotnet
- go
- java
- yaml
name: test
permissions:
contents: read
id-token: write # For ESC secrets and Pulumi access token OIDC.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
cache: gradle
- name: Setup Gradle
uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0
with:
gradle-version: "7.6"
- name: Download provider
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin
- name: UnTar provider binaries
run: tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
github.workspace}}/bin
- name: Restore Binary Permissions
run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
-exec chmod +x {} \;
- name: Download SDK
if: ${{ matrix.language != 'yaml' }}
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: ${{ matrix.language }}-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: UnTar SDK folder
if: ${{ matrix.language != 'yaml' }}
run: tar -zxf ${{ github.workspace}}/sdk/${{ matrix.language}}.tar.gz -C ${{
github.workspace}}/sdk/${{ matrix.language}}
- name: Update path
run: echo "${{ github.workspace }}/bin" >> "$GITHUB_PATH"
- name: Install Node dependencies
run: yarn global add typescript
- run: dotnet nuget add source ${{ github.workspace }}/nuget
- name: Install Python deps
run: |-
pip3 install virtualenv==20.0.23
pip3 install pipenv
- name: Install dependencies
if: ${{ matrix.language != 'yaml' }}
run: make install_${{ matrix.language}}_sdk
- name: Generate Pulumi Access Token
id: generate_pulumi_token
uses: pulumi/auth-actions@1c89817aab0c66407723cdef72b05266e7376640 # v1.0.1
with:
organization: pulumi
requested-token-type: urn:pulumi:token-type:access_token:organization
export-environment-variables: false
- name: Export AWS Credentials
uses: pulumi/esc-action@efb0bc8946938f0dfbfa00e829196ec95f0d0ea7 # v1.4.0
env:
PULUMI_ACCESS_TOKEN: ${{ steps.generate_pulumi_token.outputs.pulumi-access-token }}
with:
environment: logins/pulumi-ci
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@7c6bc770dae815cd3e89ee6cdf493a5fab2cc093 # v3.0.0
with:
workload_identity_provider: projects/${{ env.GOOGLE_PROJECT_NUMBER
}}/locations/global/workloadIdentityPools/${{
env.GOOGLE_CI_WORKLOAD_IDENTITY_POOL }}/providers/${{
env.GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER }}
service_account: ${{ env.GOOGLE_CI_SERVICE_ACCOUNT_EMAIL }}
- name: Setup gcloud auth
uses: google-github-actions/setup-gcloud@aa5489c8933f4cc7a4f7d45035b3b1440c9c10db # v3.0.1
with:
install_components: gke-gcloud-auth-plugin
- name: Install gotestfmt
uses: GoTestTools/gotestfmt-action@v2
with:
version: v2.5.0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Run tests
run: >-
set -euo pipefail
cd examples && go test -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 .
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in SDK tests
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
publish:
runs-on: ubuntu-latest
needs: test
name: publish
permissions:
contents: read
id-token: write # For ESC secrets.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Clear GitHub Actions Ubuntu runner disk space
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
with:
tool-cache: false
dotnet: false
android: true
haskell: true
swap-storage: true
large-packages: false
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@00943011d9042930efac3dcd3a170e4273319bc8 # v5.1.0
with:
aws-access-key-id: ${{ steps.esc-secrets.outputs.AWS_ACCESS_KEY_ID }}
aws-region: us-east-2
aws-secret-access-key: ${{ steps.esc-secrets.outputs.AWS_SECRET_ACCESS_KEY }}
role-duration-seconds: 7200
role-session-name: ${{ env.PROVIDER }}@githubActions
role-external-id: upload-pulumi-release
role-to-assume: ${{ steps.esc-secrets.outputs.AWS_UPLOAD_ROLE_ARN }}
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@5742e2a039330cbb23ebf35f046f814d4c6ff811 # v5.1.0
env:
GORELEASER_CURRENT_TAG: v${{ steps.version.outputs.version }}
AZURE_SIGNING_CLIENT_ID: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_ID }}
AZURE_SIGNING_CLIENT_SECRET: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_SECRET }}
AZURE_SIGNING_TENANT_ID: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_TENANT_ID }}
AZURE_SIGNING_KEY_VAULT_URI: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_KEY_VAULT_URI }}
SKIP_SIGNING: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_ID == '' && steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_SECRET == '' && steps.esc-secrets.outputs.AZURE_SIGNING_TENANT_ID == '' && steps.esc-secrets.outputs.AZURE_SIGNING_KEY_VAULT_URI == '' }}
GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
with:
args: -p 3 -f .goreleaser.prerelease.yml --clean --skip=validate --timeout 60m0s
version: latest
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in publishing binaries
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
publish_sdk:
runs-on: ubuntu-latest
needs: publish
name: publish_sdk
permissions:
contents: read
id-token: write # For ESC secrets.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout Scripts Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
path: ci-scripts
repository: pulumi/scripts
- run: echo "ci-scripts" >> .git/info/exclude
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Download python SDK
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: python-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: Uncompress python SDK
run: tar -zxf ${{github.workspace}}/sdk/python.tar.gz -C
${{github.workspace}}/sdk/python
- name: Download dotnet SDK
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dotnet-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: Uncompress dotnet SDK
run: tar -zxf ${{github.workspace}}/sdk/dotnet.tar.gz -C
${{github.workspace}}/sdk/dotnet
- name: Download nodejs SDK
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: nodejs-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: Uncompress nodejs SDK
run: tar -zxf ${{github.workspace}}/sdk/nodejs.tar.gz -C
${{github.workspace}}/sdk/nodejs
- name: Install Twine
run: python -m pip install twine==5.0.0
- name: Publish SDKs
run: ./ci-scripts/ci/publish-tfgen-package ${{ github.workspace }}
env:
NUGET_PUBLISH_KEY: ${{ steps.esc-secrets.outputs.NUGET_PUBLISH_KEY }}
NODE_AUTH_TOKEN: ${{ steps.esc-secrets.outputs.NPM_TOKEN }}
PYPI_PUBLISH_ARTIFACTS: all
PYPI_USERNAME: __token__
PYPI_PASSWORD: ${{ steps.esc-secrets.outputs.PYPI_API_TOKEN }}
SIGNING_KEY_ID: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_KEY_ID }}
SIGNING_KEY: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_KEY }}
SIGNING_PASSWORD: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_PASSWORD }}
PUBLISH_REPO_USERNAME: ${{ steps.esc-secrets.outputs.OSSRH_USERNAME }}
PUBLISH_REPO_PASSWORD: ${{ steps.esc-secrets.outputs.OSSRH_PASSWORD }}
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in publishing SDK
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
persist-credentials: false
ref: ${{ env.PR_COMMIT_SHA }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Disarm go:embed directives to enable linters that compile source code
run: git grep -l 'go:embed' -- provider | xargs --no-run-if-empty sed -i
's/go:embed/ goembed/g'
- name: golangci-lint provider pkg
uses: golangci/golangci-lint-action@55c2c1448f86e01eaae002a5a3a9624417608d84 # v6.5.2
with:
version: ${{ env.GOLANGCI_LINT_VERSION }}
working-directory: .
name: lint
if: github.event_name == 'repository_dispatch' ||
github.event.pull_request.head.repo.full_name == github.repository

54
.github/workflows/command-dispatch.yml vendored Normal file
View File

@@ -0,0 +1,54 @@
# WARNING: This file is autogenerated - changes will be overwritten when regenerated by https://github.com/pulumi/ci-mgmt
env:
ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
AWS_REGION: us-west-2
AZURE_LOCATION: westus
GOOGLE_CI_SERVICE_ACCOUNT_EMAIL: pulumi-ci@pulumi-ci-gcp-provider.iam.gserviceaccount.com
GOOGLE_CI_WORKLOAD_IDENTITY_POOL: pulumi-ci
GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER: pulumi-ci
GOOGLE_PROJECT: pulumi-ci-gcp-provider
GOOGLE_PROJECT_NUMBER: "895284651812"
GOOGLE_REGION: us-central1
GOOGLE_ZONE: us-central1-a
PULUMI_API: https://api.pulumi-staging.io
jobs:
command-dispatch-for-testing:
name: command-dispatch-for-testing
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write # For ESC secrets.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- uses: peter-evans/slash-command-dispatch@13bc09769d122a64f75aa5037256f6f2d78be8c4 # v4
with:
commands: |
run-acceptance-tests
release
issue-type: pull-request
permission: write
reaction-token: ${{ secrets.GITHUB_TOKEN }}
repository: pulumi/pulumi-docker-build
token: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
name: command-dispatch
on:
issue_comment:
types:
- created
- edited

View File

@@ -0,0 +1,42 @@
name: "Comment on stale issues"
on:
schedule:
- cron: "46 4 * * *" # run once per day
jobs:
cleanup:
runs-on: ubuntu-latest
name: Stale issue job
steps:
- uses: aws-actions/stale-issue-cleanup@5650b49bcd757a078f6ca06c373d7807b773f9bc # v7.1.0
with:
issue-types: issues # only look at issues (ignore pull-requests)
# Setting messages to an empty string causes the automation to skip that category
ancient-issue-message: "Unfortunately, it looks like this issue hasn't seen any updates in a while. If you're still experiencing this issue, could you leave a quick comment to let us know so we can prioritize it?"
ancient-pr-message: ""
stale-issue-message: ""
stale-pr-message: ""
# These labels are required
stale-issue-label: awaiting-feedback # somewhat confusingly, this is also used for when labeling "ancient" issues
exempt-issue-labels: kind/enhancement,kind/task,kind/epic,kind/engineering, awaiting-upstream # only run on kind/bug for now, ignore awaiting-upstream too.
stale-pr-label: no-pr-activity # unused because we aren't processing PRs
exempt-pr-labels: awaiting-approval # unused because we aren't processing PRs
response-requested-label: response-requested # unused because we don't set a "stale-issue-message" above
# Issue timing
days-before-close: 10000 # this action lacks the option not to close, so just set this indefinitly far in the future
days-before-ancient: 180 # 6 months
# If you don't want to mark a issue as being ancient based on a
# threshold of "upvotes", you can set this here. An "upvote" is
# the total number of +1, heart, hooray, and rocket reactions
# on an issue.
minimum-upvotes-to-exempt: 2
repo-token: ${{ secrets.GITHUB_TOKEN }}
loglevel: DEBUG
# Set dry-run to true to not perform label or close actions.
dry-run: true

View File

@@ -0,0 +1,43 @@
# WARNING: This file is autogenerated - changes will be overwritten when regenerated by https://github.com/pulumi/ci-mgmt
jobs:
warn_codegen:
name: warn_codegen
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- id: schema_changed
name: Check for diff in schema
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
with:
filters: "changed: 'provider/cmd/**/schema.json'"
- id: sdk_changed
if: steps.schema_changed.outputs.changed == 'false'
name: Check for diff in sdk/**
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
with:
filters: "changed: 'sdk/**'"
- if: steps.sdk_changed.outputs.changed == 'true' &&
github.event.pull_request.head.repo.full_name != github.repository
name: Send codegen warning as comment on PR
uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
message: >
Hello and thank you for your pull request! :heart: :sparkles:
It looks like you're directly modifying files in the language SDKs, many of which are autogenerated.
Be sure any files you're editing do not begin with a code generation warning.
For generated files, you will need to make changes in `resources.go` instead, and [generate the code](https://github.com/pulumi/${{ github.event.repository.name }}/blob/master/CONTRIBUTING.md#committing-generated-code).
name: warn-codegen
on:
pull_request_target:
branches:
- main
types:
- opened

View File

@@ -0,0 +1,25 @@
permissions: write-all # Equivalent to default permissions plus id-token: write
name: Export secrets to ESC
on: [workflow_dispatch]
jobs:
export-to-esc:
runs-on: ubuntu-latest
name: export GitHub secrets to ESC
steps:
- name: Generate a GitHub token
id: generate-token
uses: actions/create-github-app-token@v1
with:
app-id: 1256780 # Export Secrets GitHub App
private-key: ${{ secrets.EXPORT_SECRETS_PRIVATE_KEY }}
- name: Export secrets to ESC
uses: pulumi/esc-export-secrets-action@9d6485759b6adff2538ae91f1b77cc96265c9dad # v1
with:
organization: pulumi
org-environment: imports/github-secrets
exclude-secrets: EXPORT_SECRETS_PRIVATE_KEY
github-token: ${{ steps.generate-token.outputs.token }}
oidc-auth: true
oidc-requested-token-type: urn:pulumi:token-type:access_token:organization
env:
GITHUB_SECRETS: ${{ toJSON(secrets) }}

796
.github/workflows/prerelease.yml vendored Normal file
View File

@@ -0,0 +1,796 @@
# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
name: prerelease
on:
push:
tags:
- v*.*.*-**
env:
PROVIDER: docker-build
TRAVIS_OS_NAME: linux
GOVERSION: "1.21.x"
NODEVERSION: "20.x"
PYTHONVERSION: "3.11.8"
DOTNETVERSION: "8.0.x"
JAVAVERSION: "11"
ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
AWS_REGION: us-west-2
AZURE_LOCATION: westus
GOOGLE_CI_SERVICE_ACCOUNT_EMAIL: pulumi-ci@pulumi-ci-gcp-provider.iam.gserviceaccount.com
GOOGLE_CI_WORKLOAD_IDENTITY_POOL: pulumi-ci
GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER: pulumi-ci
GOOGLE_PROJECT: pulumi-ci-gcp-provider
GOOGLE_PROJECT_NUMBER: "895284651812"
GOOGLE_REGION: us-central1
GOOGLE_ZONE: us-central1-a
PULUMI_API: https://api.pulumi-staging.io
IS_PRERELEASE: true
jobs:
prerequisites:
runs-on: ubuntu-latest
name: prerequisites
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- if: github.event_name == 'pull_request'
name: Install Schema Tools
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/schema-tools
- name: Build codegen binaries
run: make codegen
- name: Build Schema
run: make generate_schema
- if: github.event_name == 'pull_request'
name: Check Schema is Valid
run: >-
{
echo 'SCHEMA_CHANGES<<EOF';
schema-tools compare -p ${{ env.PROVIDER }} -o ${{ github.event.repository.default_branch }} -n --local-path=provider/cmd/pulumi-resource-${{ env.PROVIDER }}/schema.json;
echo 'EOF';
} >> "$GITHUB_ENV"
env:
GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
- if: github.event_name == 'pull_request' && github.actor != 'dependabot[bot]'
name: Comment on PR with Details of Schema Check
uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
with:
message: |
${{ env.SCHEMA_CHANGES }}
comment-tag: schemaCheck
github-token: ${{ secrets.GITHUB_TOKEN }}
- if: contains(env.SCHEMA_CHANGES, 'Looking good! No breaking changes found.') &&
github.actor == 'pulumi-bot'
name: Add label if no breaking changes
uses: actions-ecosystem/action-add-labels@18f1af5e3544586314bbe15c0273249c770b2daf # v1.1.3
with:
labels: impact/no-changelog-required
number: ${{ github.event.issue.number }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Build Provider
run: make provider
- name: Check worktree clean
id: worktreeClean
uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
with:
allowed-changes: |-
sdk/**/pulumi-plugin.json
sdk/dotnet/*.*.csproj
sdk/dotnet/version.txt
sdk/go/**/pulumiUtilities.go
sdk/nodejs/package.json
sdk/python/pyproject.toml
sdk/java/build.gradle
- name: Commit SDK changes for Renovate
if: failure() && steps.worktreeClean.outcome == 'failure' &&
contains(github.actor, 'renovate') && github.event_name ==
'pull_request'
shell: bash
run: >
git diff --quiet -- sdk && echo "no changes to sdk" && exit
git config --global user.email "bot@pulumi.com"
git config --global user.name "pulumi-bot"
# Stash local changes and check out the PR's branch directly.
git stash
git fetch
git checkout "origin/$HEAD_REF"
# Apply and add our changes, but don't commit any files we expect to
# always change due to versioning.
git stash pop
git add sdk
git reset sdk/python/*/pulumi-plugin.json \
sdk/python/pyproject.toml \
sdk/dotnet/pulumi-plugin.json \
sdk/dotnet/*.*.csproj \
sdk/dotnet/version.txt \
sdk/go/*/pulumi-plugin.json \
sdk/go/*/internal/pulumiUtilities.go \
sdk/nodejs/package.json
git commit -m 'Commit SDK for Renovate'
# Push with pulumi-bot credentials to trigger a re-run of the
# workflow. https://github.com/orgs/community/discussions/25702
git push https://pulumi-bot:${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}@github.com/${{ github.repository }} "HEAD:$HEAD_REF"
env:
HEAD_REF: ${{ github.head_ref }}
- run: git status --porcelain
- name: Tar provider binaries
run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
github.workspace}}/bin/ pulumi-resource-${{ env.PROVIDER }}
pulumi-gen-${{ env.PROVIDER}}
- name: Upload artifacts
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin/provider.tar.gz
- name: Test Provider Library
run: make test_provider
env:
ARM_CLIENT_SECRET: ${{ steps.esc-secrets.outputs.ARM_CLIENT_SECRET }}
DIGITALOCEAN_TOKEN: ${{ steps.esc-secrets.outputs.DIGITALOCEAN_TOKEN }}
DOCKER_HUB_PASSWORD: ${{ steps.esc-secrets.outputs.DOCKER_HUB_PASSWORD }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
env:
CODECOV_TOKEN: ${{ steps.esc-secrets.outputs.CODECOV_TOKEN }}
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in building provider prerequisites
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
build_sdks:
needs: prerequisites
runs-on: pulumi-ubuntu-8core
strategy:
fail-fast: ${{ ! contains(github.actor, 'renovate') }}
matrix:
language:
- nodejs
- python
- dotnet
- go
- java
name: build_sdks
permissions:
pull-requests: write # For Renovate SDK updates.
id-token: write # For ESC secrets.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
cache: gradle
- name: Setup Gradle
uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0
with:
gradle-version: "7.6"
- name: Download provider
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin
- name: UnTar provider binaries
run: tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
github.workspace}}/bin
- name: Restore Binary Permissions
run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
-exec chmod +x {} \;
- name: Generate SDK
run: make generate_${{ matrix.language }}
- name: Build SDK
run: make build_${{ matrix.language }}
- name: Check worktree clean
id: worktreeClean
uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
with:
allowed-changes: |-
sdk/**/pulumi-plugin.json
sdk/dotnet/*.*.csproj
sdk/dotnet/version.txt
sdk/go/**/pulumiUtilities.go
sdk/nodejs/package.json
sdk/python/pyproject.toml
sdk/java/build.gradle
- name: Commit ${{ matrix.language }} SDK changes for Renovate
if: failure() && steps.worktreeClean.outcome == 'failure' &&
contains(github.actor, 'renovate') && github.event_name ==
'pull_request'
shell: bash
run: >
git diff --quiet -- sdk && echo "no changes to sdk" && exit
git config --global user.email "bot@pulumi.com"
git config --global user.name "pulumi-bot"
# Stash local changes and check out the PR's branch directly.
git stash
git fetch
git checkout "origin/$HEAD_REF"
# Apply and add our changes, but don't commit any files we expect to
# always change due to versioning.
git stash pop
git add sdk
git reset sdk/python/*/pulumi-plugin.json \
sdk/python/pyproject.toml \
sdk/dotnet/pulumi-plugin.json \
sdk/dotnet/*.*.csproj \
sdk/dotnet/version.txt \
sdk/go/*/pulumi-plugin.json \
sdk/go/*/internal/pulumiUtilities.go \
sdk/nodejs/package.json
git commit -m 'Commit ${{ matrix.language }} SDK for Renovate'
# Push with pulumi-bot credentials to trigger a re-run of the
# workflow. https://github.com/orgs/community/discussions/25702
git push https://pulumi-bot:${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}@github.com/${{ github.repository }} "HEAD:$HEAD_REF"
env:
HEAD_REF: ${{ github.head_ref }}
- run: git status --porcelain
- name: Tar SDK folder
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
- name: Upload artifacts
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: ${{ matrix.language }}-sdk.tar.gz
path: ${{ github.workspace}}/sdk/${{ matrix.language }}.tar.gz
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure while building SDKs
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
test:
runs-on: pulumi-ubuntu-8core
needs:
- build_sdks
strategy:
fail-fast: true
matrix:
language:
- nodejs
- python
- dotnet
- go
- java
- yaml
name: test
permissions:
contents: read
id-token: write # For ESC secrets and Pulumi access token OIDC.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
cache: gradle
- name: Setup Gradle
uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0
with:
gradle-version: "7.6"
- name: Download provider
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin
- name: UnTar provider binaries
run: tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
github.workspace}}/bin
- name: Restore Binary Permissions
run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
-exec chmod +x {} \;
- name: Download SDK
if: ${{ matrix.language != 'yaml' }}
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: ${{ matrix.language }}-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: UnTar SDK folder
if: ${{ matrix.language != 'yaml' }}
run: tar -zxf ${{ github.workspace}}/sdk/${{ matrix.language}}.tar.gz -C ${{
github.workspace}}/sdk/${{ matrix.language}}
- name: Update path
run: echo "${{ github.workspace }}/bin" >> "$GITHUB_PATH"
- name: Install Node dependencies
run: yarn global add typescript
- run: dotnet nuget add source ${{ github.workspace }}/nuget
- name: Install Python deps
run: |-
pip3 install virtualenv==20.0.23
pip3 install pipenv
- name: Install dependencies
if: ${{ matrix.language != 'yaml' }}
run: make install_${{ matrix.language}}_sdk
- name: Generate Pulumi Access Token
id: generate_pulumi_token
uses: pulumi/auth-actions@1c89817aab0c66407723cdef72b05266e7376640 # v1.0.1
with:
organization: pulumi
requested-token-type: urn:pulumi:token-type:access_token:organization
export-environment-variables: false
- name: Export AWS Credentials
uses: pulumi/esc-action@efb0bc8946938f0dfbfa00e829196ec95f0d0ea7 # v1.4.0
env:
PULUMI_ACCESS_TOKEN: ${{ steps.generate_pulumi_token.outputs.pulumi-access-token }}
with:
environment: logins/pulumi-ci
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@7c6bc770dae815cd3e89ee6cdf493a5fab2cc093 # v3.0.0
with:
workload_identity_provider: projects/${{ env.GOOGLE_PROJECT_NUMBER
}}/locations/global/workloadIdentityPools/${{
env.GOOGLE_CI_WORKLOAD_IDENTITY_POOL }}/providers/${{
env.GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER }}
service_account: ${{ env.GOOGLE_CI_SERVICE_ACCOUNT_EMAIL }}
- name: Setup gcloud auth
uses: google-github-actions/setup-gcloud@aa5489c8933f4cc7a4f7d45035b3b1440c9c10db # v3.0.1
with:
install_components: gke-gcloud-auth-plugin
- name: Install gotestfmt
uses: GoTestTools/gotestfmt-action@v2
with:
version: v2.5.0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Run tests
run: >-
set -euo pipefail
cd examples && go test -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 .
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in SDK tests
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
publish:
runs-on: ubuntu-latest
needs: test
name: publish
permissions:
contents: read
id-token: write # For ESC secrets.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Clear GitHub Actions Ubuntu runner disk space
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
with:
tool-cache: false
dotnet: false
android: true
haskell: true
swap-storage: true
large-packages: false
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@00943011d9042930efac3dcd3a170e4273319bc8 # v5.1.0
with:
aws-access-key-id: ${{ steps.esc-secrets.outputs.AWS_ACCESS_KEY_ID }}
aws-region: us-east-2
aws-secret-access-key: ${{ steps.esc-secrets.outputs.AWS_SECRET_ACCESS_KEY }}
role-duration-seconds: 7200
role-session-name: ${{ env.PROVIDER }}@githubActions
role-external-id: upload-pulumi-release
role-to-assume: ${{ steps.esc-secrets.outputs.AWS_UPLOAD_ROLE_ARN }}
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@5742e2a039330cbb23ebf35f046f814d4c6ff811 # v5.1.0
env:
GORELEASER_CURRENT_TAG: v${{ steps.version.outputs.version }}
AZURE_SIGNING_CLIENT_ID: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_ID }}
AZURE_SIGNING_CLIENT_SECRET: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_SECRET }}
AZURE_SIGNING_TENANT_ID: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_TENANT_ID }}
AZURE_SIGNING_KEY_VAULT_URI: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_KEY_VAULT_URI }}
SKIP_SIGNING: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_ID == '' && steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_SECRET == '' && steps.esc-secrets.outputs.AZURE_SIGNING_TENANT_ID == '' && steps.esc-secrets.outputs.AZURE_SIGNING_KEY_VAULT_URI == '' }}
GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
with:
args: -p 3 -f .goreleaser.prerelease.yml --clean --skip=validate --timeout 60m0s
version: latest
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in publishing binaries
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
publish_sdk:
runs-on: ubuntu-latest
needs: publish
name: publish_sdk
permissions:
contents: read
id-token: write # For ESC secrets.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout Scripts Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
path: ci-scripts
repository: pulumi/scripts
- run: echo "ci-scripts" >> .git/info/exclude
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Download python SDK
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: python-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: Uncompress python SDK
run: tar -zxf ${{github.workspace}}/sdk/python.tar.gz -C
${{github.workspace}}/sdk/python
- name: Download dotnet SDK
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dotnet-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: Uncompress dotnet SDK
run: tar -zxf ${{github.workspace}}/sdk/dotnet.tar.gz -C
${{github.workspace}}/sdk/dotnet
- name: Download nodejs SDK
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: nodejs-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: Uncompress nodejs SDK
run: tar -zxf ${{github.workspace}}/sdk/nodejs.tar.gz -C
${{github.workspace}}/sdk/nodejs
- name: Install Twine
run: python -m pip install twine==5.0.0
- name: Publish SDKs
run: ./ci-scripts/ci/publish-tfgen-package ${{ github.workspace }}
env:
NUGET_PUBLISH_KEY: ${{ steps.esc-secrets.outputs.NUGET_PUBLISH_KEY }}
NODE_AUTH_TOKEN: ${{ steps.esc-secrets.outputs.NPM_TOKEN }}
PYPI_PUBLISH_ARTIFACTS: all
PYPI_USERNAME: __token__
PYPI_PASSWORD: ${{ steps.esc-secrets.outputs.PYPI_API_TOKEN }}
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in publishing SDK
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
publish_java_sdk:
runs-on: ubuntu-latest
continue-on-error: true
needs: publish
name: publish_java_sdk
permissions:
contents: read
id-token: write # For ESC secrets.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
cache: gradle
- name: Setup Gradle
uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0
with:
gradle-version: "7.6"
- name: Download java SDK
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: java-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: Uncompress java SDK
run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C
${{github.workspace}}/sdk/java
- name: Setup Gradle
uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0
with:
gradle-version: "7.6"
- name: Publish Java SDK
run: gradle -p ./sdk/java publishToSonatype closeAndReleaseSonatypeStagingRepository
env:
PACKAGE_VERSION: ${{ env.PROVIDER_VERSION }}
SIGNING_KEY_ID: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_KEY_ID }}
SIGNING_KEY: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_KEY }}
SIGNING_PASSWORD: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_PASSWORD }}
PUBLISH_REPO_PASSWORD: ${{ steps.esc-secrets.outputs.OSSRH_PASSWORD }}
PUBLISH_REPO_USERNAME: ${{ steps.esc-secrets.outputs.OSSRH_USERNAME }}
publish_go_sdk:
runs-on: ubuntu-latest
name: publish-go-sdk
needs: publish_sdk
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Download go SDK
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: go-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: Uncompress go SDK
run: tar -zxf ${{github.workspace}}/sdk/go.tar.gz -C
${{github.workspace}}/sdk/go
- name: Publish Go SDK
uses: pulumi/publish-go-sdk-action@v1
with:
repository: ${{ github.repository }}
base-ref: ${{ github.sha }}
source: sdk/go/dockerbuild
path: sdk/go/dockerbuild
version: ${{ steps.version.outputs.version }}
additive: false
files: "**"

24
.github/workflows/pull-request.yml vendored Normal file
View File

@@ -0,0 +1,24 @@
# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
name: pull-request
on:
pull_request_target: {}
jobs:
comment-on-pr:
runs-on: ubuntu-latest
name: comment-on-pr
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- name: Comment PR
uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
with:
message: >
PR is now waiting for a maintainer to run the acceptance tests.
**Note for the maintainer:** To run the acceptance tests, please comment */run-acceptance-tests* on the PR
github-token: ${{ secrets.GITHUB_TOKEN }}
if: github.event.pull_request.head.repo.full_name != github.repository

829
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,829 @@
# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
name: release
on:
push:
tags:
- v*.*.*
- "!v*.*.*-**"
env:
PROVIDER: docker-build
TRAVIS_OS_NAME: linux
GOVERSION: "1.21.x"
NODEVERSION: "20.x"
PYTHONVERSION: "3.11.8"
DOTNETVERSION: "8.0.x"
JAVAVERSION: "11"
ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
AWS_REGION: us-west-2
AZURE_LOCATION: westus
GOOGLE_CI_SERVICE_ACCOUNT_EMAIL: pulumi-ci@pulumi-ci-gcp-provider.iam.gserviceaccount.com
GOOGLE_CI_WORKLOAD_IDENTITY_POOL: pulumi-ci
GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER: pulumi-ci
GOOGLE_PROJECT: pulumi-ci-gcp-provider
GOOGLE_PROJECT_NUMBER: "895284651812"
GOOGLE_REGION: us-central1
GOOGLE_ZONE: us-central1-a
PULUMI_API: https://api.pulumi-staging.io
jobs:
prerequisites:
runs-on: ubuntu-latest
name: prerequisites
permissions:
id-token: write # For ESC secrets.
pull-requests: write # For schema check comment.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- if: github.event_name == 'pull_request'
name: Install Schema Tools
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/schema-tools
- name: Build codegen binaries
run: make codegen
- name: Build Schema
run: make generate_schema
- if: github.event_name == 'pull_request'
name: Check Schema is Valid
run: >-
{
echo 'SCHEMA_CHANGES<<EOF';
schema-tools compare -p ${{ env.PROVIDER }} -o ${{ github.event.repository.default_branch }} -n --local-path=provider/cmd/pulumi-resource-${{ env.PROVIDER }}/schema.json;
echo 'EOF';
} >> "$GITHUB_ENV"
env:
GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
- if: github.event_name == 'pull_request' && github.actor != 'dependabot[bot]'
name: Comment on PR with Details of Schema Check
uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
with:
message: |
${{ env.SCHEMA_CHANGES }}
comment-tag: schemaCheck
github-token: ${{ secrets.GITHUB_TOKEN }}
- if: contains(env.SCHEMA_CHANGES, 'Looking good! No breaking changes found.') &&
github.actor == 'pulumi-bot'
name: Add label if no breaking changes
uses: actions-ecosystem/action-add-labels@18f1af5e3544586314bbe15c0273249c770b2daf # v1.1.3
with:
labels: impact/no-changelog-required
number: ${{ github.event.issue.number }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Build Provider
run: make provider
- name: Check worktree clean
id: worktreeClean
uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
with:
allowed-changes: |-
sdk/**/pulumi-plugin.json
sdk/dotnet/*.*.csproj
sdk/dotnet/version.txt
sdk/go/**/pulumiUtilities.go
sdk/nodejs/package.json
sdk/python/pyproject.toml
sdk/java/build.gradle
- name: Commit SDK changes for Renovate
if: failure() && steps.worktreeClean.outcome == 'failure' &&
contains(github.actor, 'renovate') && github.event_name ==
'pull_request'
shell: bash
run: >
git diff --quiet -- sdk && echo "no changes to sdk" && exit
git config --global user.email "bot@pulumi.com"
git config --global user.name "pulumi-bot"
# Stash local changes and check out the PR's branch directly.
git stash
git fetch
git checkout "origin/$HEAD_REF"
# Apply and add our changes, but don't commit any files we expect to
# always change due to versioning.
git stash pop
git add sdk
git reset sdk/python/*/pulumi-plugin.json \
sdk/python/pyproject.toml \
sdk/dotnet/pulumi-plugin.json \
sdk/dotnet/*.*.csproj \
sdk/dotnet/version.txt \
sdk/go/*/pulumi-plugin.json \
sdk/go/*/internal/pulumiUtilities.go \
sdk/nodejs/package.json
git commit -m 'Commit SDK for Renovate'
# Push with pulumi-bot credentials to trigger a re-run of the
# workflow. https://github.com/orgs/community/discussions/25702
git push https://pulumi-bot:${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}@github.com/${{ github.repository }} "HEAD:$HEAD_REF"
env:
HEAD_REF: ${{ github.head_ref }}
- run: git status --porcelain
- name: Tar provider binaries
run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
github.workspace}}/bin/ pulumi-resource-${{ env.PROVIDER }}
pulumi-gen-${{ env.PROVIDER}}
- name: Upload artifacts
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin/provider.tar.gz
- name: Test Provider Library
run: make test_provider
env:
ARM_CLIENT_SECRET: ${{ steps.esc-secrets.outputs.ARM_CLIENT_SECRET }}
DIGITALOCEAN_TOKEN: ${{ steps.esc-secrets.outputs.DIGITALOCEAN_TOKEN }}
DOCKER_HUB_PASSWORD: ${{ steps.esc-secrets.outputs.DOCKER_HUB_PASSWORD }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
env:
CODECOV_TOKEN: ${{ steps.esc-secrets.outputs.CODECOV_TOKEN }}
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in building provider prerequisites
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
build_sdks:
needs: prerequisites
runs-on: pulumi-ubuntu-8core
strategy:
fail-fast: ${{ ! contains(github.actor, 'renovate') }}
matrix:
language:
- nodejs
- python
- dotnet
- go
- java
name: build_sdks
permissions:
contents: read
id-token: write # For ESC secrets.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
cache: gradle
- name: Setup Gradle
uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0
with:
gradle-version: "7.6"
- name: Download provider
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin
- name: UnTar provider binaries
run: tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
github.workspace}}/bin
- name: Restore Binary Permissions
run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
-exec chmod +x {} \;
- name: Generate SDK
run: make generate_${{ matrix.language }}
- name: Build SDK
run: make build_${{ matrix.language }}
- name: Check worktree clean
id: worktreeClean
uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
with:
allowed-changes: |-
sdk/**/pulumi-plugin.json
sdk/dotnet/*.*.csproj
sdk/dotnet/version.txt
sdk/go/**/pulumiUtilities.go
sdk/nodejs/package.json
sdk/python/pyproject.toml
sdk/java/build.gradle
- name: Commit SDK changes for Renovate
if: failure() && steps.worktreeClean.outcome == 'failure' &&
contains(github.actor, 'renovate') && github.event_name ==
'pull_request'
shell: bash
run: >
git diff --quiet -- sdk && echo "no changes to sdk" && exit
git config --global user.email "bot@pulumi.com"
git config --global user.name "pulumi-bot"
# Stash local changes and check out the PR's branch directly.
git stash
git fetch
git checkout "origin/$HEAD_REF"
# Apply and add our changes, but don't commit any files we expect to
# always change due to versioning.
git stash pop
git add sdk
git reset sdk/python/*/pulumi-plugin.json \
sdk/python/pyproject.toml \
sdk/dotnet/pulumi-plugin.json \
sdk/dotnet/*.*.csproj \
sdk/dotnet/version.txt \
sdk/go/*/pulumi-plugin.json \
sdk/go/*/internal/pulumiUtilities.go \
sdk/nodejs/package.json
git commit -m 'Commit SDK for Renovate'
# Push with pulumi-bot credentials to trigger a re-run of the
# workflow. https://github.com/orgs/community/discussions/25702
git push https://pulumi-bot:${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}@github.com/${{ github.repository }} "HEAD:$HEAD_REF"
env:
HEAD_REF: ${{ github.head_ref }}
- run: git status --porcelain
- name: Tar SDK folder
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
- name: Upload artifacts
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: ${{ matrix.language }}-sdk.tar.gz
path: ${{ github.workspace}}/sdk/${{ matrix.language }}.tar.gz
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure while building SDKs
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
test:
runs-on: pulumi-ubuntu-8core
needs:
- build_sdks
strategy:
fail-fast: true
matrix:
language:
- nodejs
- python
- dotnet
- go
- java
- yaml
name: test
permissions:
contents: read
id-token: write # For ESC secrets.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
cache: gradle
- name: Setup Gradle
uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0
with:
gradle-version: "7.6"
- name: Download provider
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin
- name: UnTar provider binaries
run: tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
github.workspace}}/bin
- name: Restore Binary Permissions
run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
-exec chmod +x {} \;
- name: Download SDK
if: ${{ matrix.language != 'yaml' }}
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: ${{ matrix.language }}-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: UnTar SDK folder
if: ${{ matrix.language != 'yaml' }}
run: tar -zxf ${{ github.workspace}}/sdk/${{ matrix.language}}.tar.gz -C ${{
github.workspace}}/sdk/${{ matrix.language}}
- name: Update path
run: echo "${{ github.workspace }}/bin" >> "$GITHUB_PATH"
- name: Install Node dependencies
run: yarn global add typescript
- run: dotnet nuget add source ${{ github.workspace }}/nuget
- name: Install Python deps
run: |-
pip3 install virtualenv==20.0.23
pip3 install pipenv
- name: Install dependencies
if: ${{ matrix.language != 'yaml' }}
run: make install_${{ matrix.language}}_sdk
- name: Generate Pulumi Access Token
id: generate_pulumi_token
uses: pulumi/auth-actions@1c89817aab0c66407723cdef72b05266e7376640 # v1.0.1
with:
organization: pulumi
requested-token-type: urn:pulumi:token-type:access_token:organization
export-environment-variables: false
- name: Export AWS Credentials
uses: pulumi/esc-action@efb0bc8946938f0dfbfa00e829196ec95f0d0ea7 # v1.4.0
env:
PULUMI_ACCESS_TOKEN: ${{ steps.generate_pulumi_token.outputs.pulumi-access-token }}
with:
environment: logins/pulumi-ci
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@7c6bc770dae815cd3e89ee6cdf493a5fab2cc093 # v3.0.0
with:
workload_identity_provider: projects/${{ env.GOOGLE_PROJECT_NUMBER
}}/locations/global/workloadIdentityPools/${{
env.GOOGLE_CI_WORKLOAD_IDENTITY_POOL }}/providers/${{
env.GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER }}
service_account: ${{ env.GOOGLE_CI_SERVICE_ACCOUNT_EMAIL }}
- name: Setup gcloud auth
uses: google-github-actions/setup-gcloud@aa5489c8933f4cc7a4f7d45035b3b1440c9c10db # v3.0.1
with:
install_components: gke-gcloud-auth-plugin
- name: Install gotestfmt
uses: GoTestTools/gotestfmt-action@v2
with:
version: v2.5.0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Run tests
run: >-
set -euo pipefail
cd examples && go test -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 .
env:
GTIHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in SDK tests
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
publish:
runs-on: ubuntu-latest
needs: test
name: publish
permissions:
contents: read
id-token: write # For ESC secrets.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Clear GitHub Actions Ubuntu runner disk space
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
with:
tool-cache: false
dotnet: false
android: true
haskell: true
swap-storage: true
large-packages: false
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@00943011d9042930efac3dcd3a170e4273319bc8 # v5.1.0
with:
aws-access-key-id: ${{ steps.esc-secrets.outputs.AWS_ACCESS_KEY_ID }}
aws-region: us-east-2
aws-secret-access-key: ${{ steps.esc-secrets.outputs.AWS_SECRET_ACCESS_KEY }}
role-duration-seconds: 7200
role-session-name: ${{ env.PROVIDER }}@githubActions
role-external-id: upload-pulumi-release
role-to-assume: ${{ steps.esc-secrets.outputs.AWS_UPLOAD_ROLE_ARN }}
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@5742e2a039330cbb23ebf35f046f814d4c6ff811 # v5.1.0
env:
GORELEASER_CURRENT_TAG: v${{ steps.version.outputs.version }}
AZURE_SIGNING_CLIENT_ID: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_ID }}
AZURE_SIGNING_CLIENT_SECRET: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_SECRET }}
AZURE_SIGNING_TENANT_ID: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_TENANT_ID }}
AZURE_SIGNING_KEY_VAULT_URI: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_KEY_VAULT_URI }}
SKIP_SIGNING: ${{ steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_ID == '' && steps.esc-secrets.outputs.AZURE_SIGNING_CLIENT_SECRET == '' && steps.esc-secrets.outputs.AZURE_SIGNING_TENANT_ID == '' && steps.esc-secrets.outputs.AZURE_SIGNING_KEY_VAULT_URI == '' }}
GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
with:
args: -p 3 release --clean --timeout 60m0s
version: latest
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in publishing binaries
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
publish_sdk:
runs-on: ubuntu-latest
needs: publish
name: publish_sdks
permissions:
contents: read
id-token: write # For ESC secrets.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout Scripts Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
path: ci-scripts
repository: pulumi/scripts
- run: echo "ci-scripts" >> .git/info/exclude
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Download python SDK
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: python-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: Uncompress python SDK
run: tar -zxf ${{github.workspace}}/sdk/python.tar.gz -C
${{github.workspace}}/sdk/python
- name: Download dotnet SDK
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dotnet-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: Uncompress dotnet SDK
run: tar -zxf ${{github.workspace}}/sdk/dotnet.tar.gz -C
${{github.workspace}}/sdk/dotnet
- name: Download nodejs SDK
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: nodejs-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: Uncompress nodejs SDK
run: tar -zxf ${{github.workspace}}/sdk/nodejs.tar.gz -C
${{github.workspace}}/sdk/nodejs
- name: Install Twine
run: python -m pip install twine==5.0.0
- name: Publish SDKs
run: ./ci-scripts/ci/publish-tfgen-package ${{ github.workspace }}
env:
NUGET_PUBLISH_KEY: ${{ steps.esc-secrets.outputs.NUGET_PUBLISH_KEY }}
NODE_AUTH_TOKEN: ${{ steps.esc-secrets.outputs.NPM_TOKEN }}
PYPI_PUBLISH_ARTIFACTS: all
PYPI_USERNAME: __token__
PYPI_PASSWORD: ${{ steps.esc-secrets.outputs.PYPI_API_TOKEN }}
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in publishing SDK
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
publish_java_sdk:
runs-on: ubuntu-latest
continue-on-error: true
needs: publish
name: publish_java_sdk
permissions:
contents: read
id-token: write # For ESC secrets.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
cache: gradle
- name: Setup Gradle
uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0
with:
gradle-version: "7.6"
- name: Download java SDK
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: java-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: Uncompress java SDK
run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C
${{github.workspace}}/sdk/java
- name: Setup Gradle
uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0
with:
gradle-version: "7.6"
- name: Publish Java SDK
run: gradle -p ./sdk/java publishToSonatype closeAndReleaseSonatypeStagingRepository
env:
PACKAGE_VERSION: ${{ env.PROVIDER_VERSION }}
SIGNING_KEY_ID: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_KEY_ID }}
SIGNING_KEY: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_KEY }}
SIGNING_PASSWORD: ${{ steps.esc-secrets.outputs.JAVA_SIGNING_PASSWORD }}
PUBLISH_REPO_PASSWORD: ${{ steps.esc-secrets.outputs.OSSRH_PASSWORD }}
PUBLISH_REPO_USERNAME: ${{ steps.esc-secrets.outputs.OSSRH_USERNAME }}
publish_go_sdk:
runs-on: ubuntu-latest
name: publish-go-sdk
needs: publish_sdk
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Download go SDK
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: go-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: Uncompress go SDK
run: tar -zxf ${{github.workspace}}/sdk/go.tar.gz -C
${{github.workspace}}/sdk/go
- name: Publish Go SDK
uses: pulumi/publish-go-sdk-action@v1
with:
repository: ${{ github.repository }}
base-ref: ${{ github.sha }}
source: sdk/go/dockerbuild
path: sdk/go/dockerbuild
version: ${{ steps.version.outputs.version }}
additive: false
files: "**"
dispatch_docs_build:
runs-on: ubuntu-latest
needs: publish_go_sdk
permissions:
contents: read
id-token: write # For ESC secrets.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Dispatch Event
run: pulumictl create docs-build pulumi-${{ env.PROVIDER }}
"${GITHUB_REF#refs/tags/}"
env:
GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
name: dispatch_docs_build

54
.github/workflows/release_command.yml vendored Normal file
View File

@@ -0,0 +1,54 @@
# WARNING: This file is autogenerated - changes will be overwritten when regenerated by https://github.com/pulumi/ci-mgmt
name: release-command
on:
repository_dispatch:
types:
- release-command
jobs:
should_release:
name: Should release PR
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- name: Should release PR
uses: pulumi/action-release-by-pr-label@main
with:
command: "should-release"
repo: ${{ github.repository }}
pr: ${{ github.event.client_payload.pull_request.number }}
version: ${{ github.event.client_payload.slash_command.args.all }}
slack_channel: ${{ steps.esc-secrets.outputs.RELEASE_OPS_STAGING_SLACK_CHANNEL }}
env:
RELEASE_BOT_ENDPOINT: ${{ steps.esc-secrets.outputs.RELEASE_BOT_ENDPOINT }}
RELEASE_BOT_KEY: ${{ steps.esc-secrets.outputs.RELEASE_BOT_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- if: failure()
name: Notify failure
uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
repository: ${{ github.event.client_payload.github.payload.repository.full_name }}
issue-number: ${{ github.event.client_payload.github.payload.issue.number }}
body: |
"release command failed: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
- if: success()
name: Notify success
uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
repository: ${{ github.event.client_payload.github.payload.repository.full_name }}
comment-id: ${{ github.event.client_payload.github.payload.comment.id }}
reaction-type: hooray

View File

@@ -0,0 +1,612 @@
# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
name: run-acceptance-tests
on:
repository_dispatch:
types:
- run-acceptance-tests-command
pull_request:
paths-ignore:
- CHANGELOG.md
workflow_dispatch: {}
env:
PROVIDER: docker-build
TRAVIS_OS_NAME: linux
GOVERSION: "1.21.x"
NODEVERSION: "20.x"
PYTHONVERSION: "3.11.8"
DOTNETVERSION: "8.0.x"
JAVAVERSION: "11"
ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
AWS_REGION: us-west-2
AZURE_LOCATION: westus
GOOGLE_CI_SERVICE_ACCOUNT_EMAIL: pulumi-ci@pulumi-ci-gcp-provider.iam.gserviceaccount.com
GOOGLE_CI_WORKLOAD_IDENTITY_POOL: pulumi-ci
GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER: pulumi-ci
GOOGLE_PROJECT: pulumi-ci-gcp-provider
GOOGLE_PROJECT_NUMBER: "895284651812"
GOOGLE_REGION: us-central1
GOOGLE_ZONE: us-central1-a
PULUMI_API: https://api.pulumi-staging.io
PR_COMMIT_SHA: ${{ github.event.client_payload.pull_request.head.sha }}
jobs:
comment-notification:
if: github.event_name == 'repository_dispatch'
runs-on: ubuntu-latest
name: comment-notification
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
persist-credentials: false
ref: ${{ env.PR_COMMIT_SHA }}
- name: Create URL to the run output
id: vars
run: echo
"run-url=https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID"
>> "$GITHUB_OUTPUT"
- name: Update with Result
uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
repository: ${{ github.event.client_payload.github.payload.repository.full_name }}
issue-number: ${{ github.event.client_payload.github.payload.issue.number }}
body: "Please view the PR build: ${{ steps.vars.outputs.run-url }}"
prerequisites:
runs-on: ubuntu-latest
name: prerequisites
permissions:
id-token: write # For ESC secrets.
pull-requests: write # For schema check comment.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
persist-credentials: false
ref: ${{ env.PR_COMMIT_SHA }}
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- if: github.event_name == 'pull_request'
name: Install Schema Tools
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/schema-tools
- name: Build codegen binaries
run: make codegen
- name: Build Schema
run: make generate_schema
- if: github.event_name == 'pull_request'
name: Check Schema is Valid
run: >-
{
echo 'SCHEMA_CHANGES<<EOF';
schema-tools compare -p ${{ env.PROVIDER }} -o ${{ github.event.repository.default_branch }} -n --local-path=provider/cmd/pulumi-resource-${{ env.PROVIDER }}/schema.json;
echo 'EOF';
} >> "$GITHUB_ENV"
env:
GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
- if: github.event_name == 'pull_request' && github.actor != 'dependabot[bot]'
name: Comment on PR with Details of Schema Check
uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
with:
message: |
${{ env.SCHEMA_CHANGES }}
comment-tag: schemaCheck
github-token: ${{ secrets.GITHUB_TOKEN }}
- if: contains(env.SCHEMA_CHANGES, 'Looking good! No breaking changes found.') &&
github.actor == 'pulumi-bot'
name: Add label if no breaking changes
uses: actions-ecosystem/action-add-labels@18f1af5e3544586314bbe15c0273249c770b2daf # v1.1.3
with:
labels: impact/no-changelog-required
number: ${{ github.event.issue.number }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Build Provider
run: make provider
- name: Check worktree clean
id: worktreeClean
uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
with:
allowed-changes: |-
sdk/**/pulumi-plugin.json
sdk/dotnet/*.*.csproj
sdk/dotnet/version.txt
sdk/go/**/pulumiUtilities.go
sdk/nodejs/package.json
sdk/python/pyproject.toml
sdk/java/build.gradle
- name: Commit SDK changes for Renovate
if: failure() && steps.worktreeClean.outcome == 'failure' &&
contains(github.actor, 'renovate') && github.event_name ==
'pull_request'
shell: bash
run: >
git diff --quiet -- sdk && echo "no changes to sdk" && exit
git config --global user.email "bot@pulumi.com"
git config --global user.name "pulumi-bot"
# Stash local changes and check out the PR's branch directly.
git stash
git fetch
git checkout "origin/$HEAD_REF"
# Apply and add our changes, but don't commit any files we expect to
# always change due to versioning.
git stash pop
git add sdk
git reset sdk/python/*/pulumi-plugin.json \
sdk/python/pyproject.toml \
sdk/dotnet/pulumi-plugin.json \
sdk/dotnet/*.*.csproj \
sdk/dotnet/version.txt \
sdk/go/*/pulumi-plugin.json \
sdk/go/*/internal/pulumiUtilities.go \
sdk/nodejs/package.json
git commit -m 'Commit SDK for Renovate'
# Push with pulumi-bot credentials to trigger a re-run of the
# workflow. https://github.com/orgs/community/discussions/25702
git push https://pulumi-bot:${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}@github.com/${{ github.repository }} "HEAD:$HEAD_REF"
env:
HEAD_REF: ${{ github.head_ref }}
- run: git status --porcelain
- name: Tar provider binaries
run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
github.workspace}}/bin/ pulumi-resource-${{ env.PROVIDER }}
pulumi-gen-${{ env.PROVIDER}}
- name: Upload artifacts
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin/provider.tar.gz
- name: Test Provider Library
run: make test_provider
env:
ARM_CLIENT_SECRET: ${{ steps.esc-secrets.outputs.ARM_CLIENT_SECRET }}
DIGITALOCEAN_TOKEN: ${{ steps.esc-secrets.outputs.DIGITALOCEAN_TOKEN }}
DOCKER_HUB_PASSWORD: ${{ steps.esc-secrets.outputs.DOCKER_HUB_PASSWORD }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
env:
CODECOV_TOKEN: ${{ steps.esc-secrets.outputs.CODECOV_TOKEN }}
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in building provider prerequisites
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
if: github.event_name == 'repository_dispatch' ||
github.event.pull_request.head.repo.full_name == github.repository
build_sdks:
needs: prerequisites
runs-on: pulumi-ubuntu-8core
strategy:
fail-fast: ${{ ! contains(github.actor, 'renovate') }}
matrix:
language:
- nodejs
- python
- dotnet
- go
- java
name: build_sdks
permissions:
contents: read
id-token: write # For ESC secrets.
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
persist-credentials: false
ref: ${{ env.PR_COMMIT_SHA }}
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
cache: gradle
- name: Setup Gradle
uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0
with:
gradle-version: "7.6"
- name: Download provider
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin
- name: UnTar provider binaries
run: tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
github.workspace}}/bin
- name: Restore Binary Permissions
run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
-exec chmod +x {} \;
- name: Generate SDK
run: make generate_${{ matrix.language }}
- name: Build SDK
run: make build_${{ matrix.language }}
- name: Check worktree clean
id: worktreeClean
uses: pulumi/git-status-check-action@54000b91124a8dd9fd6a872cb41f5dd246a46e7c # v1.1.1
with:
allowed-changes: |-
sdk/**/pulumi-plugin.json
sdk/dotnet/*.*.csproj
sdk/dotnet/version.txt
sdk/go/**/pulumiUtilities.go
sdk/nodejs/package.json
sdk/python/pyproject.toml
sdk/java/build.gradle
- name: Commit SDK changes for Renovate
if: failure() && steps.worktreeClean.outcome == 'failure' &&
contains(github.actor, 'renovate') && github.event_name ==
'pull_request'
shell: bash
run: >
git diff --quiet -- sdk && echo "no changes to sdk" && exit
git config --global user.email "bot@pulumi.com"
git config --global user.name "pulumi-bot"
# Stash local changes and check out the PR's branch directly.
git stash
git fetch
git checkout "origin/$HEAD_REF"
# Apply and add our changes, but don't commit any files we expect to
# always change due to versioning.
git stash pop
git add sdk
git reset sdk/python/*/pulumi-plugin.json \
sdk/python/pyproject.toml \
sdk/dotnet/pulumi-plugin.json \
sdk/dotnet/*.*.csproj \
sdk/dotnet/version.txt \
sdk/go/*/pulumi-plugin.json \
sdk/go/*/internal/pulumiUtilities.go \
sdk/nodejs/package.json
git commit -m 'Commit SDK for Renovate'
# Push with pulumi-bot credentials to trigger a re-run of the
# workflow. https://github.com/orgs/community/discussions/25702
git push https://pulumi-bot:${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}@github.com/${{ github.repository }} "HEAD:$HEAD_REF"
env:
HEAD_REF: ${{ github.head_ref }}
- run: git status --porcelain
- name: Tar SDK folder
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
- name: Upload artifacts
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: ${{ matrix.language }}-sdk.tar.gz
path: ${{ github.workspace}}/sdk/${{ matrix.language }}.tar.gz
retention-days: 30
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure while building SDKs
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
if: github.event_name == 'repository_dispatch' ||
github.event.pull_request.head.repo.full_name == github.repository
test:
runs-on: pulumi-ubuntu-8core
needs:
- build_sdks
strategy:
fail-fast: true
matrix:
language:
- nodejs
- python
- dotnet
- go
- java
- yaml
name: test
permissions:
contents: read
id-token: write
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
persist-credentials: false
ref: ${{ env.PR_COMMIT_SHA }}
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
cache: gradle
- name: Setup Gradle
uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0
with:
gradle-version: "7.6"
- name: Download provider
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin
- name: UnTar provider binaries
run: tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{
github.workspace}}/bin
- name: Restore Binary Permissions
run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
-exec chmod +x {} \;
- name: Download SDK
if: ${{ matrix.language != 'yaml' }}
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: ${{ matrix.language }}-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: UnTar SDK folder
if: ${{ matrix.language != 'yaml' }}
run: tar -zxf ${{ github.workspace}}/sdk/${{ matrix.language}}.tar.gz -C ${{
github.workspace}}/sdk/${{ matrix.language}}
- name: Update path
run: echo "${{ github.workspace }}/bin" >> "$GITHUB_PATH"
- name: Install Node dependencies
run: yarn global add typescript
- run: dotnet nuget add source ${{ github.workspace }}/nuget
- name: Install Python deps
run: |-
pip3 install virtualenv==20.0.23
pip3 install pipenv
- name: Install dependencies
if: ${{ matrix.language != 'yaml' }}
run: make install_${{ matrix.language}}_sdk
- name: Generate Pulumi Access Token
id: generate_pulumi_token
uses: pulumi/auth-actions@1c89817aab0c66407723cdef72b05266e7376640 # v1.0.1
with:
organization: pulumi
requested-token-type: urn:pulumi:token-type:access_token:organization
export-environment-variables: false
- name: Export AWS Credentials
uses: pulumi/esc-action@efb0bc8946938f0dfbfa00e829196ec95f0d0ea7 # v1.4.0
env:
PULUMI_ACCESS_TOKEN: ${{ steps.generate_pulumi_token.outputs.pulumi-access-token }}
with:
environment: logins/pulumi-ci
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@7c6bc770dae815cd3e89ee6cdf493a5fab2cc093 # v3.0.0
with:
workload_identity_provider: projects/${{ env.GOOGLE_PROJECT_NUMBER
}}/locations/global/workloadIdentityPools/${{
env.GOOGLE_CI_WORKLOAD_IDENTITY_POOL }}/providers/${{
env.GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER }}
service_account: ${{ env.GOOGLE_CI_SERVICE_ACCOUNT_EMAIL }}
- name: Setup gcloud auth
uses: google-github-actions/setup-gcloud@aa5489c8933f4cc7a4f7d45035b3b1440c9c10db # v3.0.1
with:
install_components: gke-gcloud-auth-plugin
- name: Install gotestfmt
uses: GoTestTools/gotestfmt-action@v2
with:
version: v2.5.0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Run tests
run: >-
set -euo pipefail
cd examples && go test -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 .
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in SDK tests
fields: repo,commit,author,action
status: ${{ job.status }}
env:
SLACK_WEBHOOK_URL: ${{ steps.esc-secrets.outputs.SLACK_WEBHOOK_URL }}
if: github.event_name == 'repository_dispatch' ||
github.event.pull_request.head.repo.full_name == github.repository
sentinel:
runs-on: ubuntu-latest
name: sentinel
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
persist-credentials: false
ref: ${{ env.PR_COMMIT_SHA }}
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- name: Mark workflow as successful
uses: guibranco/github-status-action-v2@0849440ec82c5fa69b2377725b9b7852a3977e76 # v1.1.13
with:
authToken: ${{ secrets.GITHUB_TOKEN }}
context: Sentinel
state: success
description: Sentinel checks passed
sha: ${{ github.event.pull_request.head.sha || github.sha }}
permissions:
statuses: write
id-token: write # For ESC secrets.
if: github.event_name == 'repository_dispatch' ||
github.event.pull_request.head.repo.full_name == github.repository
needs:
- test
- prerequisites
- lint
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
persist-credentials: false
ref: ${{ env.PR_COMMIT_SHA }}
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Disarm go:embed directives to enable linters that compile source code
run: git grep -l 'go:embed' -- provider | xargs --no-run-if-empty sed -i
's/go:embed/ goembed/g'
- name: golangci-lint provider pkg
uses: golangci/golangci-lint-action@55c2c1448f86e01eaae002a5a3a9624417608d84 # v6.5.2
with:
version: ${{ env.GOLANGCI_LINT_VERSION }}
working-directory: .
name: lint
if: github.event_name == 'repository_dispatch' ||
github.event.pull_request.head.repo.full_name == github.repository

View File

@@ -0,0 +1,142 @@
# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
name: weekly-pulumi-update
on:
schedule:
- cron: 35 12 * * 4
workflow_dispatch: {}
env:
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
PROVIDER: docker-build
TRAVIS_OS_NAME: linux
GOVERSION: "1.21.x"
NODEVERSION: "20.x"
PYTHONVERSION: "3.11.8"
DOTNETVERSION: "8.0.x"
JAVAVERSION: "11"
ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
AWS_REGION: us-west-2
AZURE_LOCATION: westus
GOOGLE_CI_SERVICE_ACCOUNT_EMAIL: pulumi-ci@pulumi-ci-gcp-provider.iam.gserviceaccount.com
GOOGLE_CI_WORKLOAD_IDENTITY_POOL: pulumi-ci
GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER: pulumi-ci
GOOGLE_PROJECT: pulumi-ci-gcp-provider
GOOGLE_PROJECT_NUMBER: "895284651812"
GOOGLE_REGION: us-central1
GOOGLE_ZONE: us-central1-a
PULUMI_API: https://api.pulumi-staging.io
jobs:
weekly-pulumi-update:
runs-on: ubuntu-latest
permissions: write-all
steps:
- name: Checkout Repo
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
lfs: true
- env:
ESC_ACTION_ENVIRONMENT: github-secrets/${{ github.repository_owner }}-${{ github.event.repository.name }}
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: "false"
ESC_ACTION_OIDC_AUTH: "true"
ESC_ACTION_OIDC_ORGANIZATION: pulumi
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization
id: esc-secrets
name: Fetch secrets from ESC
uses: pulumi/esc-action@9eb774255b1a4afb7855678ae8d4a77359da0d9b
- name: Install Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@cc7494be991dba0978f7ffafaf995b0449a0998e # v6.5.0
- name: Setup DotNet
uses: actions/setup-dotnet@d4c94342e560b34958eacfc5d055d21461ed1c5d # v5.0.0
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Node
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup Python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Setup Java
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
cache: gradle
- name: Setup Gradle
uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0
with:
gradle-version: "7.6"
- name: Update Pulumi/Pulumi
id: gomod
run: >-
git config --local user.email 'bot@pulumi.com'
git config --local user.name 'pulumi-bot'
git checkout -b update-pulumi/${{ github.run_id }}-${{ github.run_number }}
find . -name go.mod -execdir sh -c 'go get github.com/pulumi/pulumi/pkg/v3 github.com/pulumi/pulumi/sdk/v3; go mod tidy' \;
gh repo view pulumi/pulumi --json latestRelease --jq .latestRelease.tagName | sed 's/^v//' > .pulumi.version
git update-index -q --refresh
if ! git diff-files --quiet; then echo changes=1 >> "$GITHUB_OUTPUT"; fi
- name: Provider with Pulumi Upgrade
if: steps.gomod.outputs.changes != 0
run: >-
make codegen && make local_generate
git add sdk/nodejs
git commit -m "Regenerating Node.js SDK based on updated modules" || echo "ignore commit failure, may be empty"
git add sdk/python
git commit -m "Regenerating Python SDK based on updated modules" || echo "ignore commit failure, may be empty"
git add sdk/dotnet
git commit -m "Regenerating .NET SDK based on updated modules" || echo "ignore commit failure, may be empty"
git add sdk/go*
git commit -m "Regenerating Go SDK based on updated modules" || echo "ignore commit failure, may be empty"
git add sdk/java*
git commit -m "Regenerating Java SDK based on updated modules" || echo "ignore commit failure, may be empty"
git add .
git commit -m "Updated modules" || echo "ignore commit failure, may be empty"
git push origin update-pulumi/${{ github.run_id }}-${{ github.run_number }}
- name: Create PR
id: create-pr
if: steps.gomod.outputs.changes != 0
run: >
ver=$(cat .pulumi.version)
msg="Automated upgrade: bump pulumi/pulumi to ${ver}"
# See https://github.com/cli/cli/issues/6485#issuecomment-2560935183 for --head workaround
gh pr create -t "$msg" -b "$msg" --head "$(git branch --show-current)"
env:
GITHUB_TOKEN: ${{ steps.esc-secrets.outputs.PULUMI_BOT_TOKEN }}
name: weekly-pulumi-update

21
.gitignore vendored Normal file
View File

@@ -0,0 +1,21 @@
/vendor/
**/bin/
**/obj/
**/node_modules/
**/.vs
**/.idea
**/.ionide
**/.vscode
*.swp
Pulumi.*.yaml
yarn.lock
ci-scripts
nuget/
coverage.txt
sdk/dotnet/version.txt
sdk/java/.gradle
sdk/java/build/
sdk/java/build.gradle
sdk/python/venv

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule ".devcontainer"]
path = .devcontainer
url = https://github.com/pulumi/devcontainer

104
.golangci.yml Normal file
View File

@@ -0,0 +1,104 @@
run:
timeout: 10m
linters:
enable-all: false
enable:
- depguard
- errcheck
- exhaustive
- copyloopvar
- gci
- gocritic
- gofumpt
- goheader
- gosec
- govet
- importas
- ineffassign
- lll
- misspell
- nakedret
- nolintlint
- paralleltest
- perfsprint
- prealloc
- revive
- unconvert
- unused
linters-settings:
depguard:
rules:
protobuf:
deny:
- pkg: "github.com/golang/protobuf"
desc: Use google.golang.org/protobuf instead
gci:
sections:
- standard # Standard section: captures all standard library packages.
- blank # Blank section: contains all blank imports.
- default # Default section: contains all imports that could not be matched to another section type.
- prefix(github.com/pulumi/) # Custom section: groups all imports with the github.com/pulumi/ prefix.
- prefix(github.com/pulumi/pulumi-dockerbuild/) # Custom section: local imports
custom-order: true
gocritic:
enable-all: true
disabled-checks:
- hugeParam
- importShadow
goheader:
template: |-
Copyright 2024, Pulumi Corporation.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
govet:
enable:
- nilness
# Reject comparisons of reflect.Value with DeepEqual or '=='.
- reflectvaluecompare
# Reject sort.Slice calls with a non-slice argument.
- sortslice
# Detect write to struct/arrays by-value that aren't read again.
- unusedwrite
nakedret:
# Make an issue if func has more lines of code than this setting, and it has naked returns.
# Default: 30
max-func-lines: 60
nolintlint:
# Some linter exclusions are added to generated or templated files
# pre-emptively.
# Don't complain about these.
allow-unused: true
issues:
exclude-use-default: false
exclude-rules:
# Don't warn on unused parameters.
# Parameter names are useful; replacing them with '_' is undesirable.
- linters: [revive]
text: 'unused-parameter: parameter \S+ seems to be unused, consider removing or renaming it as _'
# staticcheck already has smarter checks for empty blocks.
# revive's empty-block linter has false positives.
# For example, as of writing this, the following is not allowed.
# for foo() { }
- linters: [revive]
text: "empty-block: this block is empty, you can remove it"
# We *frequently* use the term 'new' in the context of properties
# (new and old properties),
# and we rarely use the 'new' built-in function.
# It's fine to ignore these cases.
- linters: [revive]
text: "redefines-builtin-id: redefinition of the built-in function new"

View File

@@ -0,0 +1,57 @@
# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
project_name: pulumi-docker-build
builds:
- id: build-provider
dir: provider
env:
- CGO_ENABLED=0
- GO111MODULE=on
goos:
- darwin
- linux
goarch:
- amd64
- arm64
ignore: &a1 []
main: ./cmd/pulumi-resource-docker-build/
ldflags: &a2
- -s
- -w
- -X
github.com/pulumi/pulumi-docker-build/provider/pkg/version.Version={{.Tag}}
- -X github.com/pulumi/pulumi-docker-build/provider.Version={{.Tag}}
binary: pulumi-resource-docker-build
- id: build-provider-sign-windows
dir: provider
env:
- CGO_ENABLED=0
- GO111MODULE=on
goos:
- windows
goarch:
- amd64
- arm64
ignore: *a1
main: ./cmd/pulumi-resource-docker-build/
ldflags: *a2
binary: pulumi-resource-docker-build
hooks:
post:
- make sign-goreleaser-exe-{{ .Arch }}
archives:
- name_template: "{{ .Binary }}-{{ .Tag }}-{{ .Os }}-{{ .Arch }}"
id: archive
snapshot:
name_template: "{{ .Tag }}-SNAPSHOT"
changelog:
skip: true
release:
disable: true
blobs:
- provider: s3
region: us-west-2
bucket: get.pulumi.com
folder: releases/plugins/
ids:
- archive

57
.goreleaser.yml Normal file
View File

@@ -0,0 +1,57 @@
# WARNING: This file is autogenerated - changes will be overwritten if not made via https://github.com/pulumi/ci-mgmt
project_name: pulumi-docker-build
builds:
- id: build-provider
dir: provider
env:
- CGO_ENABLED=0
- GO111MODULE=on
goos:
- darwin
- linux
goarch:
- amd64
- arm64
ignore: &a1 []
main: ./cmd/pulumi-resource-docker-build/
ldflags: &a2
- -s
- -w
- -X
github.com/pulumi/pulumi-docker-build/provider/pkg/version.Version={{.Tag}}
- -X github.com/pulumi/pulumi-docker-build/provider.Version={{.Tag}}
binary: pulumi-resource-docker-build
- id: build-provider-sign-windows
dir: provider
env:
- CGO_ENABLED=0
- GO111MODULE=on
goos:
- windows
goarch:
- amd64
- arm64
ignore: *a1
main: ./cmd/pulumi-resource-docker-build/
ldflags: *a2
binary: pulumi-resource-docker-build
hooks:
post:
- make sign-goreleaser-exe-{{ .Arch }}
archives:
- name_template: "{{ .Binary }}-{{ .Tag }}-{{ .Os }}-{{ .Arch }}"
id: archive
snapshot:
name_template: "{{ .Tag }}-SNAPSHOT"
changelog:
skip: true
release:
disable: false
blobs:
- provider: s3
region: us-west-2
bucket: get.pulumi.com
folder: releases/plugins/
ids:
- archive

1
.pulumi.version Normal file
View File

@@ -0,0 +1 @@
3.192.0

137
CHANGELOG.md Normal file
View File

@@ -0,0 +1,137 @@
## Unreleased
## Changed
- Arguments `CacheFromGitHubActions.URL` and `CacheFromGitHubActions.Token` have been removed. If the previous behaviour is desired, set the `ACTIONS_CACHE_URL` and `ACTIONS_RUNTIME_TOKEN` environment variables. (https://github.com/pulumi/pulumi-docker-build/issues/75)
## 0.0.14 (2025-09-30)
### Fixed
- A warning is no longer emitted for the reserved `__internal` key. (https://github.com/pulumi/pulumi-docker-build/issues/579)
## 0.0.13 (2025-08-27)
### Changed
- Docker Build Cloud and `exec` errors are more helpful. (https://github.com/pulumi/pulumi-docker-build/issues/549)
### Fixed
- The provider is no longer replaced on version changes. (https://github.com/pulumi/pulumi-docker-build/issues/581)
## 0.0.12 (2025-05-16)
### Changed
- Upgraded pulumi-go-provider to v1.0.0-rc2.
### Fixed
- Builds now respect cancellation. (https://github.com/pulumi/pulumi-docker-build/issues/533, https://github.com/pulumi/pulumi-docker-build/pull/522)
## 0.0.11 (2025-04-11)
### Changed
- Upgraded buildx from 0.18.0 to 0.20.1 to remain compatible with upcoming
changes to GitHub Actions. (https://github.com/pulumi/pulumi-docker-build/pull/519)
### Fixed
- Upgrading docker-build no longer causes resource replacements. (<https://github.com/pulumi/pulumi-docker-build/issues/404>)
- Fixed a panic that could occur in `exec` mode. (https://github.com/pulumi/pulumi-docker-build/issues/482)
- The default GitHub Actions cache scope is now correctly set as `buildkit`. (https://github.com/pulumi/pulumi-docker-build/issues/496)
## 0.0.10 (2025-01-27)
### Changed
- Windows binaries are now signed. (https://github.com/pulumi/pulumi-docker-build/pull/429)
## 0.0.9 (2025-01-16)
### Changed
- Upgraded pulumi-go-provider to v0.24.1. (https://github.com/pulumi/pulumi-docker-build/pull/413)
### Fixed
- `ACTIONS_RUNTIME_TOKEN` is now correctly marked as a secret. (https://github.com/pulumi/pulumi-docker-build/issues/403)
## 0.0.8 (2024-12-10)
### Added
- Multiple exports are now allowed if the build daemon is detected to have
version 0.13 of Buildkit or newer.
(https://github.com/pulumi/pulumi-docker-build/issues/21)
### Changed
- Upgraded buildx from 0.16.0 to 0.18.0.
### Fixed
- Custom `# syntax=` directives no longer cause validation errors.
(https://github.com/pulumi/pulumi-docker-build/issues/300)
## 0.0.7 (2024-10-16)
### Fixed
- Fixed an issue where registry authentication couldn't be specified on the
provider. (<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
View 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.
* Dont 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

305
Makefile Normal file
View File

@@ -0,0 +1,305 @@
PROJECT_NAME := Pulumi Docker Build Resource Provider
PACK := docker-build
PACKDIR := sdk
PROJECT := github.com/pulumi/pulumi-docker-build
NODE_MODULE_NAME := @pulumi/docker-build
NUGET_PKG_NAME := Pulumi.DockerBuild
PROVIDER := pulumi-resource-${PACK}
PROVIDER_PATH := provider
VERSION_PATH := ${PROVIDER_PATH}.Version
SCHEMA_PATH := ${PROVIDER_PATH}/cmd/pulumi-resource-${PACK}/schema.json
GOPATH := $(shell go env GOPATH)
WORKING_DIR := $(shell pwd)
EXAMPLES_DIR := ${WORKING_DIR}/examples/yaml
TESTPARALLELISM := 4
PULUMI := pulumi
GOGLANGCILINT := golangci-lint
GOTEST := go test
# Override during CI using `make [TARGET] PROVIDER_VERSION=""` or by setting a PROVIDER_VERSION environment variable
# Local & branch builds will just used this fixed default version unless specified
PROVIDER_VERSION ?= 0.1.0-alpha.0+dev
# Use this normalised version everywhere rather than the raw input to ensure consistency.
VERSION_GENERIC = $(shell pulumictl convert-version --language generic --version "$(PROVIDER_VERSION)")
export PULUMI_IGNORE_AMBIENT_PLUGINS = true
export PULUMI_DISABLE_AUTOMATIC_PLUGIN_ACQUISITION = true
.PHONY: ensure
ensure:: tidy lint test_provider examples
.PHONY: tidy
tidy:
go mod tidy
.PHONY: provider
provider: bin/${PROVIDER} bin/pulumi-gen-${PACK} # Required by CI
.PHONY: local_generate
local_generate: sdk # Required by CI
provider_debug::
(cd provider && go build -o $(WORKING_DIR)/bin/${PROVIDER} -gcflags="all=-N -l" -ldflags "-X ${PROJECT}/${VERSION_PATH}=${VERSION_GENERIC}" $(PROJECT)/${PROVIDER_PATH}/cmd/$(PROVIDER))
test_provider:: # Required by CI
${GOTEST} -short -v -coverprofile="coverage.txt" -coverpkg=./provider/... -timeout 2h -parallel ${TESTPARALLELISM} ./provider/...
test_examples: install_nodejs_sdk install_dotnet_sdk
${GOTEST} -short -v -cover -tags=all -timeout 2h -parallel ${TESTPARALLELISM} ./examples/...
test_all:: test_provider test_examples
.PHONY:
gen_examples:
examples: $(shell mkdir -p examples)
examples: sdk examples/yaml examples/go examples/nodejs examples/python examples/dotnet examples/java
examples/yaml:
rm -rf ${WORKING_DIR}/examples/yaml/app
cp -r ${WORKING_DIR}/examples/app ${WORKING_DIR}/examples/yaml/app
examples/go: bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
$(call example,go)
@git checkout examples/go/go.mod
examples/nodejs: bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
$(call example,nodejs)
@git checkout examples/nodejs/package.json
examples/python: bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
$(call example,python)
@git checkout examples/python/requirements.txt
examples/dotnet: bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
$(call example,dotnet)
@git checkout examples/dotnet/provider-docker-build.csproj
examples/java: bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
$(call example,java)
@git checkout examples/java/pom.xml
define pulumi_login
export PULUMI_CONFIG_PASSPHRASE=asdfqwerty1234; \
pulumi login --local;
endef
define example
rm -rf ${WORKING_DIR}/examples/$(1)
pulumi convert \
--cwd ${WORKING_DIR}/examples/yaml \
--logtostderr \
--generate-only \
--non-interactive \
--language $(1) \
--out ${WORKING_DIR}/examples/$(1)
cp -r ${WORKING_DIR}/examples/app ${WORKING_DIR}/examples/$(1)/app
cp ${WORKING_DIR}/examples/yaml/.dockerignore ${WORKING_DIR}/examples/$(1)/.dockerignore
endef
up::
$(call pulumi_login) \
cd ${EXAMPLES_DIR} && \
pulumi stack init dev && \
pulumi stack select dev && \
pulumi config set name dev && \
pulumi up -y
down::
$(call pulumi_login) \
cd ${EXAMPLES_DIR} && \
pulumi stack select dev && \
pulumi destroy -y && \
pulumi stack rm dev -y
devcontainer::
git submodule update --init --recursive .devcontainer
git submodule update --remote --merge .devcontainer
cp -f .devcontainer/devcontainer.json .devcontainer.json
.PHONY: build
build:: provider sdk/dotnet sdk/go sdk/nodejs sdk/python sdk/java ${SCHEMA_PATH}
# Required for the codegen action that runs in pulumi/pulumi
only_build:: build
.PHONY: lint
lint:
${GOGLANGCILINT} run --fix -c .golangci.yml
install:: install_nodejs_sdk install_dotnet_sdk
cp $(WORKING_DIR)/bin/${PROVIDER} ${GOPATH}/bin
install_dotnet_sdk:: # Required by CI
rm -rf $(WORKING_DIR)/nuget/$(NUGET_PKG_NAME).*.nupkg
mkdir -p $(WORKING_DIR)/nuget
find . -name '*.nupkg' -print -exec cp -p {} ${WORKING_DIR}/nuget \;
install_python_sdk:: # Required by CI
install_go_sdk:: # Required by CI
install_nodejs_sdk:: # Required by CI
-yarn unlink --cwd $(WORKING_DIR)/sdk/nodejs/bin
yarn link --cwd $(WORKING_DIR)/sdk/nodejs/bin
.PHONY: codegen
codegen: # Required by CI
.PHONY: generate_schema
generate_schema: ${SCHEMA_PATH} # Required by CI
.PHONY: build_go install_go_sdk
generate_go: sdk/go # Required by CI
build_go: # Required by CI
.PHONY: build_java install_java_sdk
generate_java: sdk/java # Required by CI
build_java: # Required by CI
.PHONY: build_python install_python_sdk
generate_python: sdk/python # Required by CI
build_python: # Required by CI
.PHONY: build_nodejs install_nodejs_sdk
generate_nodejs: sdk/nodejs # Required by CI
build_nodejs: # Required by CI
.PHONY: build_dotnet install_dotnet_sdk
generate_dotnet: sdk/dotnet # Required by CI
build_dotnet: # Required by CI
${SCHEMA_PATH}: bin/${PROVIDER}
pulumi package get-schema ./bin/${PROVIDER} | jq 'del(.version)' > $(SCHEMA_PATH)
bin/${PROVIDER}: $(shell find ./provider -name '*.go') go.mod
(cd provider && go build -o ../bin/${PROVIDER} -ldflags "-X ${PROJECT}/${VERSION_PATH}=${VERSION_GENERIC}" $(PROJECT)/${PROVIDER_PATH}/cmd/$(PROVIDER))
bin/pulumi-gen-${PACK}: # Required by CI
touch bin/pulumi-gen-${PACK}
go.mod: $(shell find . -name '*.go')
go.sum: go.mod
sdk: $(shell mkdir -p sdk)
sdk: sdk/python sdk/nodejs sdk/java sdk/python sdk/go sdk/dotnet
# Folders can't be used for up-to-date checks as they will be marked as up-to-date even if the step fails - leading to a broken state.
.PHONY: sdk/*
sdk/python: TMPDIR := $(shell mktemp -d)
sdk/python: bin/${PROVIDER}
rm -rf sdk/python
$(PULUMI) package gen-sdk ./bin/$(PROVIDER) --language python -o ${TMPDIR}
cp README.md ${TMPDIR}/python/
cd ${TMPDIR}/python/ && \
rm -rf ./bin/ ../python.bin/ && cp -R . ../python.bin && mv ../python.bin ./bin && \
python3 -m venv venv && \
./venv/bin/python -m pip install build && \
cd ./bin && \
../venv/bin/python -m build .
mv -f ${TMPDIR}/python ${WORKING_DIR}/sdk/.
sdk/nodejs: TMPDIR := $(shell mktemp -d)
sdk/nodejs: bin/${PROVIDER}
rm -rf sdk/nodejs
$(PULUMI) package gen-sdk ./bin/$(PROVIDER) --language nodejs -o ${TMPDIR}
cp README.md LICENSE ${TMPDIR}/nodejs
cd ${TMPDIR}/nodejs/ && \
yarn install && \
yarn run tsc && \
cp README.md LICENSE package.json yarn.lock bin/
mv -f ${TMPDIR}/nodejs ${WORKING_DIR}/sdk/.
sdk/go: TMPDIR := $(shell mktemp -d)
sdk/go: PATH := "$(WORKING_DIR)/bin:$(PATH)"
sdk/go: bin/${PROVIDER}
rm -rf sdk/go
PATH=$(PATH) $(PULUMI) package gen-sdk ./bin/$(PROVIDER) --language go -o ${TMPDIR}
cp go.mod ${TMPDIR}/go/dockerbuild/go.mod
cd ${TMPDIR}/go/dockerbuild && \
go mod edit -module=github.com/pulumi/pulumi-${PACK}/${PACKDIR}/go/dockerbuild && \
go mod tidy
mv -f ${TMPDIR}/go ${WORKING_DIR}/sdk/go
sdk/dotnet: TMPDIR := $(shell mktemp -d)
sdk/dotnet: bin/${PROVIDER}
rm -rf sdk/dotnet
$(PULUMI) package gen-sdk ./bin/${PROVIDER} --language dotnet -o ${TMPDIR}
cd ${TMPDIR}/dotnet/ && \
echo "$(VERSION_GENERIC)" > version.txt && \
dotnet build
mv -f ${TMPDIR}/dotnet ${WORKING_DIR}/sdk/.
sdk/java: PACKAGE_VERSION := $(shell pulumictl convert-version --language generic -v "$(VERSION_GENERIC)")
sdk/java: TMPDIR := $(shell mktemp -d)
sdk/java: bin/${PROVIDER}
rm -rf sdk/java
$(PULUMI) package gen-sdk --language java ./bin/${PROVIDER} -o ${TMPDIR}
cd ${TMPDIR}/java/ && gradle --console=plain build
mv -f ${TMPDIR}/java ${WORKING_DIR}/sdk/.
docs: $(shell find docs/yaml -type f) $(shell find ./provider/internal/embed -name '*.md') ${SCHEMA_PATH}
go generate docs/generate.go
@touch docs
# Set these variables to enable signing of the windows binary
AZURE_SIGNING_CLIENT_ID ?=
AZURE_SIGNING_CLIENT_SECRET ?=
AZURE_SIGNING_TENANT_ID ?=
AZURE_SIGNING_KEY_VAULT_URI ?=
SKIP_SIGNING ?=
bin/jsign-6.0.jar:
wget https://github.com/ebourg/jsign/releases/download/6.0/jsign-6.0.jar --output-document=bin/jsign-6.0.jar
sign-goreleaser-exe-amd64: GORELEASER_ARCH := amd64_v1
sign-goreleaser-exe-arm64: GORELEASER_ARCH := arm64
# Set the shell to bash to allow for the use of bash syntax.
sign-goreleaser-exe-%: SHELL:=/bin/bash
sign-goreleaser-exe-%: bin/jsign-6.0.jar
@# Only sign windows binary if fully configured.
@# Test variables set by joining with | between and looking for || showing at least one variable is empty.
@# Move the binary to a temporary location and sign it there to avoid the target being up-to-date if signing fails.
@set -e; \
if [[ "${SKIP_SIGNING}" != "true" ]]; then \
if [[ "|${AZURE_SIGNING_CLIENT_ID}|${AZURE_SIGNING_CLIENT_SECRET}|${AZURE_SIGNING_TENANT_ID}|${AZURE_SIGNING_KEY_VAULT_URI}|" == *"||"* ]]; then \
echo "Can't sign windows binaries as required configuration not set: AZURE_SIGNING_CLIENT_ID, AZURE_SIGNING_CLIENT_SECRET, AZURE_SIGNING_TENANT_ID, AZURE_SIGNING_KEY_VAULT_URI"; \
echo "To rebuild with signing delete the unsigned windows exe file and rebuild with the fixed configuration"; \
if [[ "${CI}" == "true" ]]; then exit 1; fi; \
else \
file=dist/build-provider-sign-windows_windows_${GORELEASER_ARCH}/pulumi-resource-docker-build.exe; \
mv $${file} $${file}.unsigned; \
az login --service-principal \
--username "${AZURE_SIGNING_CLIENT_ID}" \
--password "${AZURE_SIGNING_CLIENT_SECRET}" \
--tenant "${AZURE_SIGNING_TENANT_ID}" \
--output none; \
ACCESS_TOKEN=$$(az account get-access-token --resource "https://vault.azure.net" | jq -r .accessToken); \
java -jar bin/jsign-6.0.jar \
--storetype AZUREKEYVAULT \
--keystore "PulumiCodeSigning" \
--url "${AZURE_SIGNING_KEY_VAULT_URI}" \
--storepass "$${ACCESS_TOKEN}" \
$${file}.unsigned; \
mv $${file}.unsigned $${file}; \
az logout; \
fi; \
fi
# To make an immediately observable change to .ci-mgmt.yaml:
#
# - Edit .ci-mgmt.yaml
# - Run make ci-mgmt to apply the change locally.
#
ci-mgmt: .ci-mgmt.yaml
go run github.com/pulumi/ci-mgmt/provider-ci@master generate
.PHONY: ci-mgmt
fi

204
bin/pulumi-language-python-exec Executable file
View 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)

12
codecov.yml Normal file
View File

@@ -0,0 +1,12 @@
comment:
layout: "header, files, footer"
hide_project_coverage: false
coverage:
status:
project:
default:
informational: true
patch:
default:
informational: true

428
docs/_index.md Normal file
View File

@@ -0,0 +1,428 @@
---
title: Docker Build
meta_desc: Provides an overview of the Docker Build Provider for Pulumi.
layout: package
---
The Docker Build provider leverages [buildx and BuildKit](https://docs.docker.com/build/architecture/) to build modern Docker images with Pulumi.
Not to be confused with the earlier
[Docker](../docker) provider, which is still
appropriate for managing resources unrelated to building images.
| Provider | Use cases |
| ---------------- | ----------------------------------------------------------------------- |
| `@pulumi/docker-build` | Anything related to building images with `docker build`. |
| `@pulumi/docker` | Everything else -- including running containers and creating networks. |
## Example
If your Pulumi program has a directory called `app` alongside it, containing a
file named "Dockerfile" (which can be as simple as `FROM alpine` for the
purpose of example), then the code below shows how to build a multi-platform
image, publish it to a remote AWS ECR registry, and use an [inline
cache](https://docs.docker.com/build/cache/backends/inline/) to speed up
subsequent builds.
{{< chooser language "typescript,python,csharp,go,yaml,java" / >}}
{{% choosable language typescript %}}
```typescript
import * as aws from "@pulumi/aws";
import * as docker_build from "@pulumi/docker-build";
// Create an ECR repository for pushing.
const ecrRepository = new aws.ecr.Repository("ecr-repository", {});
// Grab auth credentials for ECR.
const authToken = aws.ecr.getAuthorizationTokenOutput({
registryId: ecrRepository.registryId,
});
// Build and push an image to ECR with inline caching.
const myImage = new docker_build.Image("my-image", {
// Tag our image with our ECR repository's address.
tags: [pulumi.interpolate`${ecrRepository.repositoryUrl}:latest`],
context: {
location: "./app",
},
// Use the pushed image as a cache source.
cacheFrom: [{
registry: {
ref: pulumi.interpolate`${ecrRepository.repositoryUrl}:latest`,
},
}],
// Include an inline cache with our pushed image.
cacheTo: [{
inline: {},
}],
// Build a multi-platform image manifest for ARM and AMD.
platforms: [
"linux/amd64",
"linux/arm64",
],
// Push the final result to ECR.
push: true,
// Provide our ECR credentials.
registries: [{
address: ecrRepository.repositoryUrl,
password: authToken.password,
username: authToken.userName,
}],
});
// Export a ref for the pushed images so we can deploy it.
export const ref = myImage.ref;
```
{{% /choosable %}}
{{% choosable language python %}}
```python
import pulumi
import pulumi_aws as aws
import pulumi_docker_build as docker_build
# Create an ECR repository for pushing.
ecr_repository = aws.ecr.Repository("ecr-repository")
# Grab auth credentials for ECR.
auth_token = aws.ecr.get_authorization_token_output(registry_id=ecr_repository.registry_id)
# Build and push an image to ECR with inline caching.
my_image = docker_build.Image("my-image",
# Tag our image with our ECR repository's address.
tags=[ecr_repository.repository_url.apply(lambda repository_url: f"{repository_url}:latest")],
context=docker_build.BuildContextArgs(
location="./app",
),
# Use the pushed image as a cache source.
cache_from=[docker_build.CacheFromArgs(
registry=docker_build.CacheFromRegistryArgs(
ref=ecr_repository.repository_url.apply(lambda repository_url: f"{repository_url}:latest"),
),
)],
# Include an inline cache with our pushed image.
cache_to=[docker_build.CacheToArgs(
inline=docker_build.CacheToInlineArgs(),
)],
# Build a multi-platform image manifest for ARM and AMD.
platforms=[
docker_build.Platform.LINUX_AMD64,
docker_build.Platform.LINUX_ARM64,
],
# Push the final result to ECR.
push=True,
# Provide our ECR credentials.
registries=[docker_build.RegistryArgs(
address=ecr_repository.repository_url,
password=auth_token.password,
username=auth_token.user_name,
)],
)
# Export a ref for the pushed images so we can deploy it.
pulumi.export("ref", my_image.ref)
```
{{% /choosable %}}
{{% choosable language csharp %}}
```csharp
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
using DockerBuild = Pulumi.DockerBuild;
return await Deployment.RunAsync(() =>
{
// Create an ECR repository for pushing.
var ecrRepository = new Aws.Ecr.Repository("ecr-repository");
// Grab auth credentials for ECR.
var authToken = Aws.Ecr.GetAuthorizationToken.Invoke(new()
{
RegistryId = ecrRepository.RegistryId,
});
// Build and push an image to ECR with inline caching.
var myImage = new DockerBuild.Image("my-image", new()
{
// Tag our image with our ECR repository's address.
Tags = new[]
{
ecrRepository.RepositoryUrl.Apply(repositoryUrl => $"{repositoryUrl}:latest"),
},
Context = new DockerBuild.Inputs.BuildContextArgs
{
Location = "./app",
},
// Use the pushed image as a cache source.
CacheFrom = new[]
{
new DockerBuild.Inputs.CacheFromArgs
{
Registry = new DockerBuild.Inputs.CacheFromRegistryArgs
{
Ref = ecrRepository.RepositoryUrl.Apply(repositoryUrl => $"{repositoryUrl}:latest"),
},
},
},
// Include an inline cache with our pushed image.
CacheTo = new[]
{
new DockerBuild.Inputs.CacheToArgs
{
Inline = null,
},
},
// Build a multi-platform image manifest for ARM and AMD.
Platforms = new[]
{
DockerBuild.Platform.Linux_amd64,
DockerBuild.Platform.Linux_arm64,
},
// Push the final result to ECR.
Push = true,
// Provide our ECR credentials.
Registries = new[]
{
new DockerBuild.Inputs.RegistryArgs
{
Address = ecrRepository.RepositoryUrl,
Password = authToken.Apply(getAuthorizationTokenResult => getAuthorizationTokenResult.Password),
Username = authToken.Apply(getAuthorizationTokenResult => getAuthorizationTokenResult.UserName),
},
},
});
// Export a ref for the pushed images so we can deploy it.
return new Dictionary<string, object?>
{
["ref"] = myImage.Ref,
};
});
```
{{% /choosable %}}
{{% choosable language go %}}
```go
package main
import (
"fmt"
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ecr"
"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
// Create an ECR repository for pushing.
ecrRepository, err := ecr.NewRepository(ctx, "ecr-repository", nil)
if err != nil {
return err
}
// Grab auth credentials for ECR.
authToken := ecr.GetAuthorizationTokenOutput(ctx, ecr.GetAuthorizationTokenOutputArgs{
RegistryId: ecrRepository.RegistryId,
}, nil)
// Build and push an image to ECR with inline caching.
myImage, err := dockerbuild.NewImage(ctx, "my-image", &dockerbuild.ImageArgs{
// Tag our image with our ECR repository's address.
Tags: pulumi.StringArray{
ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {
return fmt.Sprintf("%v:latest", repositoryUrl), nil
}).(pulumi.StringOutput),
},
Context: &dockerbuild.BuildContextArgs{
Location: pulumi.String("./app"),
},
// Use the pushed image as a cache source.
CacheFrom: dockerbuild.CacheFromArray{
&dockerbuild.CacheFromArgs{
Registry: &dockerbuild.CacheFromRegistryArgs{
Ref: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {
return fmt.Sprintf("%v:latest", repositoryUrl), nil
}).(pulumi.StringOutput),
},
},
},
// Include an inline cache with our pushed image.
CacheTo: dockerbuild.CacheToArray{
&dockerbuild.CacheToArgs{
Inline: nil,
},
},
// Build a multi-platform image manifest for ARM and AMD.
Platforms: dockerbuild.PlatformArray{
dockerbuild.Platform_Linux_amd64,
dockerbuild.Platform_Linux_arm64,
},
// Push the final result to ECR.
Push: pulumi.Bool(true),
// Provide our ECR credentials.
Registries: dockerbuild.RegistryArray{
&dockerbuild.RegistryArgs{
Address: ecrRepository.RepositoryUrl,
Password: authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) {
return &authToken.Password, nil
}).(pulumi.StringPtrOutput),
Username: authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) {
return &authToken.UserName, nil
}).(pulumi.StringPtrOutput),
},
},
})
if err != nil {
return err
}
// Export a ref for the pushed images so we can deploy it.
ctx.Export("ref", myImage.Ref)
return nil
})
}
```
{{% /choosable %}}
{{% choosable language yaml %}}
```yaml
description: Push to AWS ECR with caching
name: ecr
outputs:
ref: ${my-image.ref}
resources:
# Create an ECR repository for pushing.
ecr-repository:
type: aws:ecr:Repository
# Build and push an image to ECR with inline caching.
my-image:
type: docker-build:Image
properties:
# Tag our image with our ECR repository's address.
tags:
- ${ecr-repository.repositoryUrl}:latest
context:
location: ./app
# Use the pushed image as a cache source.
cacheFrom:
- registry:
ref: ${ecr-repository.repositoryUrl}:latest
# Include an inline cache with our pushed image.
cacheTo:
- inline: {}
# Build a multi-platform image manifest for ARM and AMD.
platforms:
- linux/amd64
- linux/arm64
# Push the final result to ECR.
push: true
# Provide our ECR credentials.
registries:
- address: ${ecr-repository.repositoryUrl}
password: ${auth-token.password}
username: ${auth-token.userName}
runtime: yaml
variables:
auth-token:
# Grab auth credentials for ECR.
fn::aws:ecr:getAuthorizationToken:
registryId: ${ecr-repository.registryId}
```
{{% /choosable %}}
{{% choosable language java %}}
```java
package myapp;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.ecr.Repository;
import com.pulumi.aws.ecr.EcrFunctions;
import com.pulumi.aws.ecr.inputs.GetAuthorizationTokenArgs;
import com.pulumi.dockerbuild.Image;
import com.pulumi.dockerbuild.ImageArgs;
import com.pulumi.dockerbuild.inputs.CacheFromArgs;
import com.pulumi.dockerbuild.inputs.CacheFromRegistryArgs;
import com.pulumi.dockerbuild.inputs.CacheToArgs;
import com.pulumi.dockerbuild.inputs.CacheToInlineArgs;
import com.pulumi.dockerbuild.inputs.BuildContextArgs;
import com.pulumi.dockerbuild.inputs.RegistryArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
// Create an ECR repository for pushing.
var ecrRepository = new Repository("ecrRepository");
// Grab auth credentials for ECR.
final var authToken = EcrFunctions.getAuthorizationToken(GetAuthorizationTokenArgs.builder()
.registryId(ecrRepository.registryId())
.build());
// Build and push an image to ECR with inline caching.
var myImage = new Image("myImage", ImageArgs.builder()
// Tag our image with our ECR repository's address.
.tags(ecrRepository.repositoryUrl().applyValue(repositoryUrl -> String.format("%s:latest", repositoryUrl)))
.context(BuildContextArgs.builder()
.location("./app")
.build())
// Use the pushed image as a cache source.
.cacheFrom(CacheFromArgs.builder()
.registry(CacheFromRegistryArgs.builder()
.ref(ecrRepository.repositoryUrl().applyValue(repositoryUrl -> String.format("%s:latest", repositoryUrl)))
.build())
.build())
// Include an inline cache with our pushed image.
.cacheTo(CacheToArgs.builder()
.inline()
.build())
// Build a multi-platform image manifest for ARM and AMD.
.platforms(
"linux/amd64",
"linux/arm64")
// Push the final result to ECR.
.push(true)
// Provide our ECR credentials.
.registries(RegistryArgs.builder()
.address(ecrRepository.repositoryUrl())
.password(authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult).applyValue(authToken -> authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult.password())))
.username(authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult).applyValue(authToken -> authToken.applyValue(getAuthorizationTokenResult -> getAuthorizationTokenResult.userName())))
.build())
.build());
ctx.export("ref", myImage.ref());
}
}
```
{{% /choosable %}}
{{< /chooser >}}

216
docs/generate.go Normal file
View 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
}

View File

@@ -0,0 +1,33 @@
---
title: Docker-Build Installation & Configuration
meta_desc: Provides an overview on how to configure the Pulumi Docker-Build Provider.
layout: package
---
The Pulumi Docker-build provider builds modern Docker images with [buildx](https://docs.docker.com/reference/cli/docker/buildx/) and [BuildKit](https://docs.docker.com/build/buildkit/).
## Installation
The Docker-Build provider is available as a package in all Pulumi languages:
* JavaScript/TypeScript: [`@pulumi/docker-build`](https://www.npmjs.com/package/@pulumi/docker-build)
* Python: [`pulumi-docker-build`](https://pypi.org/project/pulumi-docker-build/)
* Go: [`github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild`](https://github.com/pulumi/pulumi-docker-build)
* .NET: [`Pulumi.DockerBuild`](https://www.nuget.org/packages/Pulumi.DockerBuild)
* Java: [`com.pulumi/docker-build`](https://central.sonatype.com/artifact/com.pulumi/docker-build)
## Configuring The Provider
### Host
The `DOCKER_HOST` environment variable can be used to specify a custom build daemon's location.
```bash
$ export DOCKER_HOST=tcp://127.0.0.1:2376/
```
This can also be specified in your stack's configuration:
```bash
$ pulumi config set docker-build:host tcp://127.0.0.1:2376/
```

View 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

View 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
View File

@@ -0,0 +1,2 @@
FROM alpine
RUN echo 👍

View 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! 👍"

View 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 👍"

View File

@@ -0,0 +1,3 @@
FROM bash AS base
RUN getent hosts metadata.google.internal

View 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

View 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 👍"

View File

@@ -0,0 +1,4 @@
FROM alpine
RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]

View File

@@ -0,0 +1,5 @@
FROM alpine
RUN apk add openssh-client
RUN --mount=type=ssh ssh-add -l

View 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" ]

View File

@@ -0,0 +1,2 @@
command-output
tmp

353
examples/dotnet/.gitignore vendored Normal file
View File

@@ -0,0 +1,353 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/

268
examples/dotnet/Program.cs Normal file
View File

@@ -0,0 +1,268 @@
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using DockerBuild = Pulumi.DockerBuild;
return await Deployment.RunAsync(() =>
{
var config = new Config();
var dockerHubPassword = config.Require("dockerHubPassword");
var multiPlatform = new DockerBuild.Image("multiPlatform", new()
{
Push = false,
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
{
Location = "./app/Dockerfile.multiPlatform",
},
Context = new DockerBuild.Inputs.BuildContextArgs
{
Location = "./app",
},
Platforms = new[]
{
DockerBuild.Platform.Plan9_amd64,
DockerBuild.Platform.Plan9_386,
},
});
var registryPush = new DockerBuild.Image("registryPush", new()
{
Push = false,
Context = new DockerBuild.Inputs.BuildContextArgs
{
Location = "./app",
},
Tags = new[]
{
"docker.io/pulumibot/buildkit-e2e:example",
},
Exports = new[]
{
new DockerBuild.Inputs.ExportArgs
{
Registry = new DockerBuild.Inputs.ExportRegistryArgs
{
OciMediaTypes = true,
Push = false,
},
},
},
Registries = new[]
{
new DockerBuild.Inputs.RegistryArgs
{
Address = "docker.io",
Username = "pulumibot",
Password = dockerHubPassword,
},
},
});
var cached = new DockerBuild.Image("cached", new()
{
Push = false,
Context = new DockerBuild.Inputs.BuildContextArgs
{
Location = "./app",
},
CacheTo = new[]
{
new DockerBuild.Inputs.CacheToArgs
{
Local = new DockerBuild.Inputs.CacheToLocalArgs
{
Dest = "tmp/cache",
Mode = DockerBuild.CacheMode.Max,
},
},
},
CacheFrom = new[]
{
new DockerBuild.Inputs.CacheFromArgs
{
Local = new DockerBuild.Inputs.CacheFromLocalArgs
{
Src = "tmp/cache",
},
},
},
});
var buildArgs = new DockerBuild.Image("buildArgs", new()
{
Push = false,
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
{
Location = "./app/Dockerfile.buildArgs",
},
Context = new DockerBuild.Inputs.BuildContextArgs
{
Location = "./app",
},
BuildArgs =
{
{ "SET_ME_TO_TRUE", "true" },
},
});
var extraHosts = new DockerBuild.Image("extraHosts", new()
{
Push = false,
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
{
Location = "./app/Dockerfile.extraHosts",
},
Context = new DockerBuild.Inputs.BuildContextArgs
{
Location = "./app",
},
AddHosts = new[]
{
"metadata.google.internal:169.254.169.254",
},
});
var sshMount = new DockerBuild.Image("sshMount", new()
{
Push = false,
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
{
Location = "./app/Dockerfile.sshMount",
},
Context = new DockerBuild.Inputs.BuildContextArgs
{
Location = "./app",
},
Ssh = new[]
{
new DockerBuild.Inputs.SSHArgs
{
Id = "default",
},
},
});
var secrets = new DockerBuild.Image("secrets", new()
{
Push = false,
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
{
Location = "./app/Dockerfile.secrets",
},
Context = new DockerBuild.Inputs.BuildContextArgs
{
Location = "./app",
},
Secrets =
{
{ "password", "hunter2" },
},
});
var labels = new DockerBuild.Image("labels", new()
{
Push = false,
Context = new DockerBuild.Inputs.BuildContextArgs
{
Location = "./app",
},
Labels =
{
{ "description", "This image will get a descriptive label 👍" },
},
});
var target = new DockerBuild.Image("target", new()
{
Push = false,
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
{
Location = "./app/Dockerfile.target",
},
Context = new DockerBuild.Inputs.BuildContextArgs
{
Location = "./app",
},
Target = "build-me",
});
var namedContexts = new DockerBuild.Image("namedContexts", new()
{
Push = false,
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
{
Location = "./app/Dockerfile.namedContexts",
},
Context = new DockerBuild.Inputs.BuildContextArgs
{
Location = "./app",
Named =
{
{ "golang:latest", new DockerBuild.Inputs.ContextArgs
{
Location = "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984",
} },
},
},
});
var remoteContext = new DockerBuild.Image("remoteContext", new()
{
Push = false,
Context = new DockerBuild.Inputs.BuildContextArgs
{
Location = "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
},
});
var remoteContextWithInline = new DockerBuild.Image("remoteContextWithInline", new()
{
Push = false,
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
{
Inline = @"FROM busybox
COPY hello.c ./
",
},
Context = new DockerBuild.Inputs.BuildContextArgs
{
Location = "https://github.com/docker-library/hello-world.git",
},
});
var inline = new DockerBuild.Image("inline", new()
{
Push = false,
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
{
Inline = @"FROM alpine
RUN echo ""This uses an inline Dockerfile! 👍""
",
},
});
var dockerLoad = new DockerBuild.Image("dockerLoad", new()
{
Push = false,
Context = new DockerBuild.Inputs.BuildContextArgs
{
Location = "./app",
},
Exports = new[]
{
new DockerBuild.Inputs.ExportArgs
{
Docker = new DockerBuild.Inputs.ExportDockerArgs
{
Tar = true,
},
},
},
});
return new Dictionary<string, object?>
{
["platforms"] = multiPlatform.Platforms,
};
});

View File

@@ -0,0 +1,10 @@
name: provider-docker-build
runtime: dotnet
config:
dockerHubPassword:
type: string
secret: true
plugins:
providers:
- name: docker-build
path: ../../bin

View File

@@ -0,0 +1,2 @@
FROM alpine
RUN echo 👍

View 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! 👍"

View 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 👍"

View File

@@ -0,0 +1,3 @@
FROM bash AS base
RUN getent hosts metadata.google.internal

View 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

View 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 👍"

View File

@@ -0,0 +1,4 @@
FROM alpine
RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]

View File

@@ -0,0 +1,5 @@
FROM alpine
RUN apk add openssh-client
RUN --mount=type=ssh ssh-add -l

View 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" ]

View File

@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Pulumi" Version="3.*" />
<PackageReference Include="Pulumi.DockerBuild" Version="0.0.2-alpha.1712594380+4cd6d49b.dirty" />
</ItemGroup>
</Project>

39
examples/dotnet_test.go Normal file
View File

@@ -0,0 +1,39 @@
//go:build dotnet || all
// +build dotnet all
package examples
import (
"os"
"os/exec"
"path"
"path/filepath"
"testing"
"github.com/pulumi/pulumi/pkg/v3/testing/integration"
"github.com/stretchr/testify/require"
)
func TestDotNetExample(t *testing.T) {
cwd, err := os.Getwd()
require.NoError(t, err)
nuget := filepath.Join(cwd, "../nuget")
t.Setenv("PULUMI_LOCAL_NUGET", nuget)
cmd := exec.Command("dotnet", "nuget", "add", "source", nuget)
_ = cmd.Run()
test := integration.ProgramTestOptions{
Dir: path.Join(cwd, "dotnet"),
Dependencies: []string{
"Pulumi.DockerBuild",
},
Secrets: map[string]string{
"dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
},
NoParallel: true,
}
integration.ProgramTest(t, &test)
}

View File

@@ -0,0 +1,2 @@
command-output
tmp

10
examples/go/Pulumi.yaml Normal file
View File

@@ -0,0 +1,10 @@
name: provider-docker-build
runtime: go
config:
dockerHubPassword:
type: string
secret: true
plugins:
providers:
- name: docker-build
path: ../../bin

View File

@@ -0,0 +1,2 @@
FROM alpine
RUN echo 👍

View 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! 👍"

View 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 👍"

View File

@@ -0,0 +1,3 @@
FROM bash AS base
RUN getent hosts metadata.google.internal

View 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

View 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 👍"

View File

@@ -0,0 +1,4 @@
FROM alpine
RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]

View File

@@ -0,0 +1,5 @@
FROM alpine
RUN apk add openssh-client
RUN --mount=type=ssh ssh-add -l

View 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" ]

99
examples/go/go.mod Normal file
View File

@@ -0,0 +1,99 @@
module provider-docker-build
go 1.24.1
toolchain go1.24.5
require (
github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.12
github.com/pulumi/pulumi/sdk/v3 v3.192.0
)
require (
dario.cat/mergo v1.0.1 // indirect
github.com/BurntSushi/toml v1.5.0 // indirect
github.com/Microsoft/go-winio v0.6.2 // indirect
github.com/ProtonMail/go-crypto v1.2.0 // indirect
github.com/agext/levenshtein v1.2.3 // indirect
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
github.com/atotto/clipboard v0.1.4 // indirect
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
github.com/blang/semver v3.5.1+incompatible // indirect
github.com/charmbracelet/bubbles v0.21.0 // indirect
github.com/charmbracelet/bubbletea v1.3.4 // indirect
github.com/charmbracelet/colorprofile v0.3.0 // indirect
github.com/charmbracelet/lipgloss v1.1.0 // indirect
github.com/charmbracelet/x/ansi v0.8.0 // indirect
github.com/charmbracelet/x/cellbuf v0.0.13 // indirect
github.com/charmbracelet/x/term v0.2.1 // indirect
github.com/cheggaaa/pb v1.0.29 // indirect
github.com/cloudflare/circl v1.6.1 // indirect
github.com/cyphar/filepath-securejoin v0.4.1 // indirect
github.com/djherbis/times v1.6.0 // indirect
github.com/emirpasic/gods v1.18.1 // indirect
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
github.com/go-git/go-billy/v5 v5.6.2 // indirect
github.com/go-git/go-git/v5 v5.16.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/glog v1.2.4 // indirect
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/hcl/v2 v2.23.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
github.com/kevinburke/ssh_config v1.2.0 // indirect
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-localereader v0.0.1 // indirect
github.com/mattn/go-runewidth v0.0.16 // indirect
github.com/mitchellh/go-ps v1.0.0 // indirect
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
github.com/muesli/cancelreader v0.2.2 // indirect
github.com/muesli/termenv v0.16.0 // indirect
github.com/opentracing/basictracer-go v1.1.0 // indirect
github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/pgavlin/fx v0.1.6 // indirect
github.com/pjbgf/sha1cd v0.3.2 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pkg/term v1.1.0 // indirect
github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect
github.com/pulumi/esc v0.17.0 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/rogpeppe/go-internal v1.14.1 // indirect
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
github.com/skeema/knownhosts v1.3.1 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/spf13/cobra v1.9.1 // indirect
github.com/spf13/pflag v1.0.6 // indirect
github.com/texttheater/golang-levenshtein v1.0.1 // indirect
github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
github.com/xanzy/ssh-agent v0.3.3 // indirect
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
github.com/zclconf/go-cty v1.16.2 // indirect
go.opentelemetry.io/otel v1.36.0 // indirect
go.opentelemetry.io/otel/sdk v1.36.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
golang.org/x/crypto v0.39.0 // indirect
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect
golang.org/x/mod v0.25.0 // indirect
golang.org/x/net v0.40.0 // indirect
golang.org/x/sync v0.15.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/term v0.32.0 // indirect
golang.org/x/text v0.26.0 // indirect
golang.org/x/tools v0.33.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 // indirect
google.golang.org/grpc v1.72.1 // indirect
google.golang.org/protobuf v1.36.6 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
lukechampine.com/frand v1.5.1 // indirect
)

312
examples/go/go.sum Normal file
View File

@@ -0,0 +1,312 @@
dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
github.com/ProtonMail/go-crypto v1.2.0 h1:+PhXXn4SPGd+qk76TlEePBfOfivE0zkWFenhGhFLzWs=
github.com/ProtonMail/go-crypto v1.2.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE=
github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo=
github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY=
github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/charmbracelet/bubbles v0.21.0 h1:9TdC97SdRVg/1aaXNVWfFH3nnLAwOXr8Fn6u6mfQdFs=
github.com/charmbracelet/bubbles v0.21.0/go.mod h1:HF+v6QUR4HkEpz62dx7ym2xc71/KBHg+zKwJtMw+qtg=
github.com/charmbracelet/bubbletea v1.3.4 h1:kCg7B+jSCFPLYRA52SDZjr51kG/fMUEoPoZrkaDHyoI=
github.com/charmbracelet/bubbletea v1.3.4/go.mod h1:dtcUCyCGEX3g9tosuYiut3MXgY/Jsv9nKVdibKKRRXo=
github.com/charmbracelet/colorprofile v0.3.0 h1:KtLh9uuu1RCt+Hml4s6Hz+kB1PfV3wi++1h5ia65yKQ=
github.com/charmbracelet/colorprofile v0.3.0/go.mod h1:oHJ340RS2nmG1zRGPmhJKJ/jf4FPNNk0P39/wBPA1G0=
github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE=
github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
github.com/charmbracelet/x/cellbuf v0.0.13 h1:/KBBKHuVRbq1lYx5BzEHBAFBP8VcQzJejZ/IA3iR28k=
github.com/charmbracelet/x/cellbuf v0.0.13/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo=
github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30=
github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s=
github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/djherbis/times v1.6.0 h1:w2ctJ92J8fBvWPxugmXIv7Nz7Q3iDMKNx9v5ocVH20c=
github.com/djherbis/times v1.6.0/go.mod h1:gOHeRAz2h+VJNZ5Gmc/o7iD9k4wW7NMVqieYCY99oc0=
github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o=
github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE=
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM=
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c=
github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU=
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM=
github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU=
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4=
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
github.com/go-git/go-git/v5 v5.16.0 h1:k3kuOEpkc0DeY7xlL6NaaNg39xdgQbtH5mwCafHO9AQ=
github.com/go-git/go-git/v5 v5.16.0/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8=
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc=
github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU=
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/hashicorp/hcl/v2 v2.23.0 h1:Fphj1/gCylPxHutVSEOf2fBOh1VE4AuLV7+kbJf3qos=
github.com/hashicorp/hcl/v2 v2.23.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4=
github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88=
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc=
github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg=
github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0=
github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI=
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo=
github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc=
github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
github.com/opentracing/basictracer-go v1.1.0 h1:Oa1fTSBvAl8pa3U+IJYqrKm0NALwH9OsgwOqDv4xJW0=
github.com/opentracing/basictracer-go v1.1.0/go.mod h1:V2HZueSJEp879yv285Aap1BS69fQMD+MNP1mRs6mBQc=
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
github.com/pgavlin/fx v0.1.6 h1:r9jEg69DhNoCd3Xh0+5mIbdbS3PqWrVWujkY76MFRTU=
github.com/pgavlin/fx v0.1.6/go.mod h1:KWZJ6fqBBSh8GxHYqwYCf3rYE7Gp2p0N8tJp8xv9u9M=
github.com/pgavlin/fx/v2 v2.0.3 h1:ZBVklTFjxcWvBVPE+ti5qwnmTIQ0Gq6nuj3J5RKDtKk=
github.com/pgavlin/fx/v2 v2.0.3/go.mod h1:Cvnwqq0BopdHUJ7CU50h1XPeKrF4ZwdFj1nJLXbAjCE=
github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4=
github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk=
github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 h1:vkHw5I/plNdTr435cARxCW6q9gc0S/Yxz7Mkd38pOb0=
github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231/go.mod h1:murToZ2N9hNJzewjHBgfFdXhZKjY3z5cYC1VXk+lbFE=
github.com/pulumi/esc v0.17.0 h1:oaVOIyFTENlYDuqc3pW75lQT9jb2cd6ie/4/Twxn66w=
github.com/pulumi/esc v0.17.0/go.mod h1:XnSxlt5NkmuAj304l/gK4pRErFbtqq6XpfX1tYT9Jbc=
github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.12 h1:uzmw+0iic764m0Yvh4I/jRV1x3q49dVh5Ctq9RllsQ8=
github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.12/go.mod h1:6zFMe786NvFDO03BVJwdw1R/Yms4F6vAU49iBHo8zbQ=
github.com/pulumi/pulumi/sdk/v3 v3.192.0 h1:sfHuR3P02wSbV3xdSMEQ0+uC/HzlMz0YfKrVAXy1hSQ=
github.com/pulumi/pulumi/sdk/v3 v3.192.0/go.mod h1:aV0+c5xpSYccWKmOjTZS9liYCqh7+peu3cQgSXu7CJw=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI=
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs=
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4=
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY=
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8=
github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY=
github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U=
github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8=
github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o=
github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/zclconf/go-cty v1.16.2 h1:LAJSwc3v81IRBZyUVQDUdZ7hs3SYs9jv0eZJDWHD/70=
github.com/zclconf/go-cty v1.16.2/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk=
go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w=
go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM=
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w=
golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc=
golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 h1:cJfm9zPbe1e873mHJzmQ1nwVEeRDU/T1wXDK2kUSU34=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
google.golang.org/grpc v1.72.1 h1:HR03wO6eyZ7lknl75XlxABNVLLFc2PAb6mHlYh756mA=
google.golang.org/grpc v1.72.1/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
lukechampine.com/frand v1.5.1 h1:fg0eRtdmGFIxhP5zQJzM1lFDbD6CUfu/f+7WgAZd5/w=
lukechampine.com/frand v1.5.1/go.mod h1:4VstaWc2plN4Mjr10chUD46RAVGWhpkZ5Nja8+Azp0Q=
pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw=
pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=

233
examples/go/main.go Normal file
View File

@@ -0,0 +1,233 @@
package main
import (
"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
cfg := config.New(ctx, "")
dockerHubPassword := cfg.Require("dockerHubPassword")
multiPlatform, err := dockerbuild.NewImage(ctx, "multiPlatform", &dockerbuild.ImageArgs{
Push: pulumi.Bool(false),
Dockerfile: &dockerbuild.DockerfileArgs{
Location: pulumi.String("./app/Dockerfile.multiPlatform"),
},
Context: &dockerbuild.BuildContextArgs{
Location: pulumi.String("./app"),
},
Platforms: dockerbuild.PlatformArray{
dockerbuild.Platform_Plan9_amd64,
dockerbuild.Platform_Plan9_386,
},
})
if err != nil {
return err
}
_, err = dockerbuild.NewImage(ctx, "registryPush", &dockerbuild.ImageArgs{
Push: pulumi.Bool(false),
Context: &dockerbuild.BuildContextArgs{
Location: pulumi.String("./app"),
},
Tags: pulumi.StringArray{
pulumi.String("docker.io/pulumibot/buildkit-e2e:example"),
},
Exports: dockerbuild.ExportArray{
&dockerbuild.ExportArgs{
Registry: &dockerbuild.ExportRegistryArgs{
OciMediaTypes: pulumi.Bool(true),
Push: pulumi.Bool(false),
},
},
},
Registries: dockerbuild.RegistryArray{
&dockerbuild.RegistryArgs{
Address: pulumi.String("docker.io"),
Username: pulumi.String("pulumibot"),
Password: pulumi.String(dockerHubPassword),
},
},
})
if err != nil {
return err
}
_, err = dockerbuild.NewImage(ctx, "cached", &dockerbuild.ImageArgs{
Push: pulumi.Bool(false),
Context: &dockerbuild.BuildContextArgs{
Location: pulumi.String("./app"),
},
CacheTo: dockerbuild.CacheToArray{
&dockerbuild.CacheToArgs{
Local: &dockerbuild.CacheToLocalArgs{
Dest: pulumi.String("tmp/cache"),
Mode: dockerbuild.CacheModeMax,
},
},
},
CacheFrom: dockerbuild.CacheFromArray{
&dockerbuild.CacheFromArgs{
Local: &dockerbuild.CacheFromLocalArgs{
Src: pulumi.String("tmp/cache"),
},
},
},
})
if err != nil {
return err
}
_, err = dockerbuild.NewImage(ctx, "buildArgs", &dockerbuild.ImageArgs{
Push: pulumi.Bool(false),
Dockerfile: &dockerbuild.DockerfileArgs{
Location: pulumi.String("./app/Dockerfile.buildArgs"),
},
Context: &dockerbuild.BuildContextArgs{
Location: pulumi.String("./app"),
},
BuildArgs: pulumi.StringMap{
"SET_ME_TO_TRUE": pulumi.String("true"),
},
})
if err != nil {
return err
}
_, err = dockerbuild.NewImage(ctx, "extraHosts", &dockerbuild.ImageArgs{
Push: pulumi.Bool(false),
Dockerfile: &dockerbuild.DockerfileArgs{
Location: pulumi.String("./app/Dockerfile.extraHosts"),
},
Context: &dockerbuild.BuildContextArgs{
Location: pulumi.String("./app"),
},
AddHosts: pulumi.StringArray{
pulumi.String("metadata.google.internal:169.254.169.254"),
},
})
if err != nil {
return err
}
_, err = dockerbuild.NewImage(ctx, "sshMount", &dockerbuild.ImageArgs{
Push: pulumi.Bool(false),
Dockerfile: &dockerbuild.DockerfileArgs{
Location: pulumi.String("./app/Dockerfile.sshMount"),
},
Context: &dockerbuild.BuildContextArgs{
Location: pulumi.String("./app"),
},
Ssh: dockerbuild.SSHArray{
&dockerbuild.SSHArgs{
Id: pulumi.String("default"),
},
},
})
if err != nil {
return err
}
_, err = dockerbuild.NewImage(ctx, "secrets", &dockerbuild.ImageArgs{
Push: pulumi.Bool(false),
Dockerfile: &dockerbuild.DockerfileArgs{
Location: pulumi.String("./app/Dockerfile.secrets"),
},
Context: &dockerbuild.BuildContextArgs{
Location: pulumi.String("./app"),
},
Secrets: pulumi.StringMap{
"password": pulumi.String("hunter2"),
},
})
if err != nil {
return err
}
_, err = dockerbuild.NewImage(ctx, "labels", &dockerbuild.ImageArgs{
Push: pulumi.Bool(false),
Context: &dockerbuild.BuildContextArgs{
Location: pulumi.String("./app"),
},
Labels: pulumi.StringMap{
"description": pulumi.String("This image will get a descriptive label 👍"),
},
})
if err != nil {
return err
}
_, err = dockerbuild.NewImage(ctx, "target", &dockerbuild.ImageArgs{
Push: pulumi.Bool(false),
Dockerfile: &dockerbuild.DockerfileArgs{
Location: pulumi.String("./app/Dockerfile.target"),
},
Context: &dockerbuild.BuildContextArgs{
Location: pulumi.String("./app"),
},
Target: pulumi.String("build-me"),
})
if err != nil {
return err
}
_, err = dockerbuild.NewImage(ctx, "namedContexts", &dockerbuild.ImageArgs{
Push: pulumi.Bool(false),
Dockerfile: &dockerbuild.DockerfileArgs{
Location: pulumi.String("./app/Dockerfile.namedContexts"),
},
Context: &dockerbuild.BuildContextArgs{
Location: pulumi.String("./app"),
Named: dockerbuild.ContextMap{
"golang:latest": &dockerbuild.ContextArgs{
Location: pulumi.String("docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"),
},
},
},
})
if err != nil {
return err
}
_, err = dockerbuild.NewImage(ctx, "remoteContext", &dockerbuild.ImageArgs{
Push: pulumi.Bool(false),
Context: &dockerbuild.BuildContextArgs{
Location: pulumi.String("https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"),
},
})
if err != nil {
return err
}
_, err = dockerbuild.NewImage(ctx, "remoteContextWithInline", &dockerbuild.ImageArgs{
Push: pulumi.Bool(false),
Dockerfile: &dockerbuild.DockerfileArgs{
Inline: pulumi.String("FROM busybox\nCOPY hello.c ./\n"),
},
Context: &dockerbuild.BuildContextArgs{
Location: pulumi.String("https://github.com/docker-library/hello-world.git"),
},
})
if err != nil {
return err
}
_, err = dockerbuild.NewImage(ctx, "inline", &dockerbuild.ImageArgs{
Push: pulumi.Bool(false),
Dockerfile: &dockerbuild.DockerfileArgs{
Inline: pulumi.String("FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n"),
},
})
if err != nil {
return err
}
_, err = dockerbuild.NewImage(ctx, "dockerLoad", &dockerbuild.ImageArgs{
Push: pulumi.Bool(false),
Context: &dockerbuild.BuildContextArgs{
Location: pulumi.String("./app"),
},
Exports: dockerbuild.ExportArray{
&dockerbuild.ExportArgs{
Docker: &dockerbuild.ExportDockerArgs{
Tar: pulumi.Bool(true),
},
},
},
})
if err != nil {
return err
}
ctx.Export("platforms", multiPlatform.Platforms)
return nil
})
}

30
examples/go_test.go Normal file
View File

@@ -0,0 +1,30 @@
//go:build go || all
// +build go all
package examples
import (
"os"
"path"
"testing"
"github.com/pulumi/pulumi/pkg/v3/testing/integration"
"github.com/stretchr/testify/require"
)
func TestGoExample(t *testing.T) {
cwd, err := os.Getwd()
require.NoError(t, err)
test := integration.ProgramTestOptions{
Dir: path.Join(cwd, "go"),
Dependencies: []string{
"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild=../sdk/go/dockerbuild",
},
Secrets: map[string]string{
"dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
},
}
integration.ProgramTest(t, &test)
}

View File

@@ -0,0 +1,2 @@
command-output
tmp

10
examples/java/Pulumi.yaml Normal file
View File

@@ -0,0 +1,10 @@
name: provider-docker-build
runtime: java
config:
dockerHubPassword:
type: string
secret: true
plugins:
providers:
- name: docker-build
path: ../../bin

View File

@@ -0,0 +1,2 @@
FROM alpine
RUN echo 👍

View 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! 👍"

View 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 👍"

View File

@@ -0,0 +1,3 @@
FROM bash AS base
RUN getent hosts metadata.google.internal

View 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

View 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 👍"

View File

@@ -0,0 +1,4 @@
FROM alpine
RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]

View File

@@ -0,0 +1,5 @@
FROM alpine
RUN apk add openssh-client
RUN --mount=type=ssh ssh-add -l

View 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" ]

92
examples/java/pom.xml Normal file
View File

@@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.pulumi</groupId>
<artifactId>provider-docker-build</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<encoding>UTF-8</encoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.release>11</maven.compiler.release>
<mainClass>generated_program.App</mainClass>
<mainArgs/>
</properties>
<dependencies>
<dependency>
<groupId>com.pulumi</groupId>
<artifactId>pulumi</artifactId>
<version>(,1.0]</version>
</dependency>
<dependency>
<groupId>com.pulumi</groupId>
<artifactId>docker-build</artifactId>
<version>[0.0.0,)</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>${mainClass}</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.4.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>${mainClass}</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-my-jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<mainClass>${mainClass}</mainClass>
<commandlineArgs>${mainArgs}</commandlineArgs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-wrapper-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<mavenVersion>3.8.5</mavenVersion>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,204 @@
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.dockerbuild.Image;
import com.pulumi.dockerbuild.ImageArgs;
import com.pulumi.dockerbuild.inputs.DockerfileArgs;
import com.pulumi.dockerbuild.inputs.BuildContextArgs;
import com.pulumi.dockerbuild.inputs.ExportArgs;
import com.pulumi.dockerbuild.inputs.ExportRegistryArgs;
import com.pulumi.dockerbuild.inputs.RegistryArgs;
import com.pulumi.dockerbuild.inputs.CacheToArgs;
import com.pulumi.dockerbuild.inputs.CacheToLocalArgs;
import com.pulumi.dockerbuild.inputs.CacheFromArgs;
import com.pulumi.dockerbuild.inputs.CacheFromLocalArgs;
import com.pulumi.dockerbuild.inputs.SSHArgs;
import com.pulumi.dockerbuild.inputs.ExportDockerArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var config = ctx.config();
final var dockerHubPassword = config.get("dockerHubPassword");
var multiPlatform = new Image("multiPlatform", ImageArgs.builder()
.push(false)
.dockerfile(DockerfileArgs.builder()
.location("./app/Dockerfile.multiPlatform")
.build())
.context(BuildContextArgs.builder()
.location("./app")
.build())
.platforms(
"plan9/amd64",
"plan9/386")
.build());
var registryPush = new Image("registryPush", ImageArgs.builder()
.push(false)
.context(BuildContextArgs.builder()
.location("./app")
.build())
.tags("docker.io/pulumibot/buildkit-e2e:example")
.exports(ExportArgs.builder()
.registry(ExportRegistryArgs.builder()
.ociMediaTypes(true)
.push(false)
.build())
.build())
.registries(RegistryArgs.builder()
.address("docker.io")
.username("pulumibot")
.password(dockerHubPassword)
.build())
.build());
var cached = new Image("cached", ImageArgs.builder()
.push(false)
.context(BuildContextArgs.builder()
.location("./app")
.build())
.cacheTo(CacheToArgs.builder()
.local(CacheToLocalArgs.builder()
.dest("tmp/cache")
.mode("max")
.build())
.build())
.cacheFrom(CacheFromArgs.builder()
.local(CacheFromLocalArgs.builder()
.src("tmp/cache")
.build())
.build())
.build());
var buildArgs = new Image("buildArgs", ImageArgs.builder()
.push(false)
.dockerfile(DockerfileArgs.builder()
.location("./app/Dockerfile.buildArgs")
.build())
.context(BuildContextArgs.builder()
.location("./app")
.build())
.buildArgs(Map.of("SET_ME_TO_TRUE", "true"))
.build());
var extraHosts = new Image("extraHosts", ImageArgs.builder()
.push(false)
.dockerfile(DockerfileArgs.builder()
.location("./app/Dockerfile.extraHosts")
.build())
.context(BuildContextArgs.builder()
.location("./app")
.build())
.addHosts("metadata.google.internal:169.254.169.254")
.build());
var sshMount = new Image("sshMount", ImageArgs.builder()
.push(false)
.dockerfile(DockerfileArgs.builder()
.location("./app/Dockerfile.sshMount")
.build())
.context(BuildContextArgs.builder()
.location("./app")
.build())
.ssh(SSHArgs.builder()
.id("default")
.build())
.build());
var secrets = new Image("secrets", ImageArgs.builder()
.push(false)
.dockerfile(DockerfileArgs.builder()
.location("./app/Dockerfile.secrets")
.build())
.context(BuildContextArgs.builder()
.location("./app")
.build())
.secrets(Map.of("password", "hunter2"))
.build());
var labels = new Image("labels", ImageArgs.builder()
.push(false)
.context(BuildContextArgs.builder()
.location("./app")
.build())
.labels(Map.of("description", "This image will get a descriptive label 👍"))
.build());
var target = new Image("target", ImageArgs.builder()
.push(false)
.dockerfile(DockerfileArgs.builder()
.location("./app/Dockerfile.target")
.build())
.context(BuildContextArgs.builder()
.location("./app")
.build())
.target("build-me")
.build());
var namedContexts = new Image("namedContexts", ImageArgs.builder()
.push(false)
.dockerfile(DockerfileArgs.builder()
.location("./app/Dockerfile.namedContexts")
.build())
.context(BuildContextArgs.builder()
.location("./app")
.named(Map.of("golang:latest", Map.of("location", "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984")))
.build())
.build());
var remoteContext = new Image("remoteContext", ImageArgs.builder()
.push(false)
.context(BuildContextArgs.builder()
.location("https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile")
.build())
.build());
var remoteContextWithInline = new Image("remoteContextWithInline", ImageArgs.builder()
.push(false)
.dockerfile(DockerfileArgs.builder()
.inline("""
FROM busybox
COPY hello.c ./
""")
.build())
.context(BuildContextArgs.builder()
.location("https://github.com/docker-library/hello-world.git")
.build())
.build());
var inline = new Image("inline", ImageArgs.builder()
.push(false)
.dockerfile(DockerfileArgs.builder()
.inline("""
FROM alpine
RUN echo "This uses an inline Dockerfile! 👍"
""")
.build())
.build());
var dockerLoad = new Image("dockerLoad", ImageArgs.builder()
.push(false)
.context(BuildContextArgs.builder()
.location("./app")
.build())
.exports(ExportArgs.builder()
.docker(ExportDockerArgs.builder()
.tar(true)
.build())
.build())
.build());
ctx.export("platforms", multiPlatform.platforms());
}
}

29
examples/java_test.go Normal file
View File

@@ -0,0 +1,29 @@
//go:build java || all
// +build java all
package examples
import (
"os"
"path"
"testing"
"github.com/pulumi/pulumi/pkg/v3/testing/integration"
"github.com/stretchr/testify/require"
)
func TestJavaExample(t *testing.T) {
t.Skip("not working yet")
cwd, err := os.Getwd()
require.NoError(t, err)
test := integration.ProgramTestOptions{
Dir: path.Join(cwd, "java"),
Secrets: map[string]string{
"dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
},
}
integration.ProgramTest(t, &test)
}

61
examples/main_test.go Normal file
View 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
}

View File

@@ -0,0 +1,2 @@
command-output
tmp

2
examples/nodejs/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/bin/
/node_modules/

View File

@@ -0,0 +1,10 @@
name: provider-docker-build
runtime: nodejs
config:
dockerHubPassword:
type: string
secret: true
plugins:
providers:
- name: docker-build
path: ../../bin

View File

@@ -0,0 +1,2 @@
FROM alpine
RUN echo 👍

View 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! 👍"

View 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 👍"

View File

@@ -0,0 +1,3 @@
FROM bash AS base
RUN getent hosts metadata.google.internal

View 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

Some files were not shown because too many files have changed in this diff Show More