Compare commits

...

35 Commits

Author SHA1 Message Date
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
Ramon Quitales
4d858c52b9 Prepare for v0.0.11 release (#520) 2025-04-11 21:19:58 +00:00
Ramon Quitales
f83b7a0a44 chore: update moby/buildkit to v0.20.1 (#519)
**Description:**  
This PR updates the `moby/buildkit` dependency to `v0.20.1` in order to
remain compatible with recent changes required by GitHub Actions (GHA)
caching.

During the upgrade, several upstream behavioral changes required forking
and restoring legacy logic to maintain compatibility:

- Introduced `containsGithubToken` to replicate logic that was
previously in `buildflags.ParseCacheEntry`, which is now removed. This
check ensures we return `nil` instead of a zero-value object.
- Forked the previous implementation of `ParseExports`, as its upstream
logic changed significantly. This ensures short-term compatibility for
release before the GHA deprecation deadline.
- A follow-up issue will be created to improve this forked logic and
align more closely with upstream behavior.

🚨 **Fixes critical issue:**  
This change addresses a high-priority issue where GitHub Actions cache
will stop working due to the upcoming deprecation of the legacy caching
service (effective **April 15, 2025**).

Recent build failures showed errors like:
> *"This legacy service is shutting down, effective April 15, 2025.
Migrate to the new service ASAP. For more information:
https://gh.io/gha-cache-sunset"*

Root cause was identified in #515, where using `buildx >= 0.21.0` is
required.
This repo was previously using `buildx 0.18.0`.

Closes: #515
2025-04-11 13:42:47 -07:00
Ramon Quitales
0b5c155cad chore: pin golangci-lint to latest v1 release (#518)
This PR pins the installation of golangci-lint to the latest v1 release
(v1.64.8). Installing from latest pulls in v2 changes that causes a
runtime panic when running locally.
2025-04-11 13:23:22 -07:00
Matthew (Matt) Jeffryes
c6b9fc8f02 Adopt ci-mgmt.yaml (#511)
Now that ci-mgmt/provider-ci has a "native" template, we can adopt it
for this provider.
2025-04-09 14:06:42 -07:00
Eron Wright
780fe97f99 Use 'buildkit' as default scope (#516)
This PR updates the schema to use the correct default value for `scope`
in the GHA caching options. This should be effectively a no-op.


From: https://docs.docker.com/build/cache/backends/gha/

<img width="892" alt="image"
src="https://github.com/user-attachments/assets/690cde79-e30e-4085-81fd-1c9dc1c6d7e9"
/>


Closes #496
2025-04-09 14:01:21 -07:00
Pulumi Bot
706136a454 Update GitHub Actions workflows. (#510)
This PR was automatically generated by the
update-native-provider-workflows workflow in the pulumi/ci-mgmt repo,
from commit 36cb726549926a647ec654cce5548a346edd0b64.
2025-04-01 11:53:17 -07:00
Pulumi Bot
c9d2bc3255 Update GitHub Actions workflows. (#499)
This PR was automatically generated by the
update-native-provider-workflows workflow in the pulumi/ci-mgmt repo,
from commit 71465cfa76e13d1f583aef9ced6fd3d4703190a2.
2025-03-21 12:00:21 -07:00
Eron Wright
20f5f536dc Handle case of missing GH variables (#492)
Closes #482 

I traced the problem to where buildx parses the cli args
([here](fa4461b9a1/util/buildflags/cache.go (L14))),
and confirmed it applies defaults based on GHA environment variables and
ignores the cacheTo/cacheFrom directive altogether when the variables
aren't available.

The fix is to ignore the GHA cache directive when it the upstream parser
ignores it.
2025-03-20 09:27:59 -07:00
Pulumi Bot
f41c8c927d Update GitHub Actions workflows. (#495)
This PR was automatically generated by the
update-native-provider-workflows workflow in the pulumi/ci-mgmt repo,
from commit 7e46f216ed41ab1bd04d110cae578e6d53cfe9eb.
2025-03-18 10:46:32 -07:00
Ramon Quitales
2c4b4260dc Fix weekly-pulumi-update (#491)
Fixes: #485

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
2025-03-18 10:15:07 -07:00
Daniel Bradley
1251ad4f94 Upgrade upgrade test to use pulumitest (#490)
We're deprecating providertest.NewProviderTest, so use the new
pulumitest based approach instead.

- Update test code to use PreviewProviderUpgrade.
- Use provider attachment instead of the bin directory.
- Rename state.json to stack.json & let the first run migrate the stack
to a stable, non-machine dependent name.
2025-03-18 08:41:40 +00:00
Pulumi Bot
8ff1017270 Automated upgrade: bump pulumi/pulumi to 3.153.1 (#472)
Automated upgrade: bump pulumi/pulumi to 3.153.1
2025-03-03 16:49:18 +01:00
Pulumi Bot
e93eb024db Update GitHub Actions workflows. (#471)
This PR was automatically generated by the
update-native-provider-workflows workflow in the pulumi/ci-mgmt repo,
from commit 0c2df975c437cffd8381f4d00708276e53d95bb2.
2025-03-03 16:32:22 +01:00
Pulumi Bot
c095c4c7ef Update GitHub Actions workflows. (#468)
This PR was automatically generated by the
update-native-provider-workflows workflow in the pulumi/ci-mgmt repo,
from commit ea6479fcbca4b3b86182ffdd8731b26746795508.

---------

Co-authored-by: Eron Wright <eronwright@gmail.com>
Co-authored-by: Eron Wright <eron@pulumi.com>
2025-02-28 09:00:39 -08:00
Pulumi Bot
90ee40ceb4 Update GitHub Actions workflows. (#431)
This PR was automatically generated by the
rollout-single-native-provider-workflow workflow in the pulumi/ci-mgmt
repo, from commit 50c552c6cdeb4eae0daff4be525adf0706f2513a.
2025-01-27 22:12:26 +00:00
Ramon Quitales
2fdcae409d Sign Windows release binaries (#429)
### Proposed changes

This PR adds a new Makefile target `make sign-goreleaser-exe` target to
sign all built GoReleaser windows binaries. This PR contains 2 changes:

- Makefile target
- Copied ci-mgmt workflow files for validation purposes (generated from:
https://github.com/pulumi/ci-mgmt/pull/1318)

Please see the linked ci-mgmt issue for status of GitHub actions
workflows to validate that the binaries are signed.
2025-01-27 13:03:02 -08:00
202 changed files with 4567 additions and 4268 deletions

26
.ci-mgmt.yaml Normal file
View File

@@ -0,0 +1,26 @@
template: native
provider: docker-build
major-version: 0
providerDefaultBranch: main
providerVersion: github.com/pulumi/pulumi-docker-build/provider.Version
aws: true
gcp: true
sdkModuleDir: sdk/go/dockerbuild
parallel: 3
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 }}

View File

@@ -15,6 +15,13 @@ on:
- "**"
workflow_dispatch: {}
env:
AZURE_SIGNING_CLIENT_ID: ${{ secrets.AZURE_SIGNING_CLIENT_ID }}
AZURE_SIGNING_CLIENT_SECRET: ${{ secrets.AZURE_SIGNING_CLIENT_SECRET }}
AZURE_SIGNING_TENANT_ID: ${{ secrets.AZURE_SIGNING_TENANT_ID }}
AZURE_SIGNING_KEY_VAULT_URI: ${{ secrets.AZURE_SIGNING_KEY_VAULT_URI }}
SKIP_SIGNING: ${{ secrets.AZURE_SIGNING_CLIENT_ID == '' &&
secrets.AZURE_SIGNING_CLIENT_SECRET == '' && secrets.AZURE_SIGNING_TENANT_ID
== '' && secrets.AZURE_SIGNING_KEY_VAULT_URI == '' }}
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
PROVIDER: docker-build
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
@@ -32,29 +39,27 @@ env:
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
GOVERSION: 1.21.x
NODEVERSION: 20.x
PYTHONVERSION: "3.11"
DOTNETVERSION: |
6.0.x
3.1.301
GOVERSION: "1.21.x"
NODEVERSION: "20.x"
PYTHONVERSION: "3.11.8"
DOTNETVERSION: "8.0.x"
JAVAVERSION: "11"
AWS_REGION: us-west-2
PULUMI_API: https://api.pulumi-staging.io
ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
AWS_REGION: us-west-2
AZURE_LOCATION: westus
DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
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_PROJECT_NUMBER: "895284651812"
GOOGLE_REGION: us-central1
GOOGLE_ZONE: us-central1-a
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
PULUMI_API: https://api.pulumi-staging.io
jobs:
prerequisites:
runs-on: ubuntu-latest
@@ -66,23 +71,23 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- if: github.event_name == 'pull_request'
name: Install Schema Tools
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/schema-tools
- name: Build codegen binaries
@@ -174,19 +179,19 @@ jobs:
github.workspace}}/bin/ pulumi-resource-${{ env.PROVIDER }}
pulumi-gen-${{ env.PROVIDER}}
- name: Upload artifacts
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
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
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@1e68e06f1dbfde0e4cefc87efeba9e4643565303 # v5.1.2
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in building provider prerequisites
fields: repo,commit,author,action
@@ -211,35 +216,35 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@87b7050bc53ea08284295505d98d2aa94301e852 # v4.2.0
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Setup Java
uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4.6.0
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
@@ -248,8 +253,8 @@ jobs:
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
with:
gradle-version: "7.6"
- name: Download provider + tfgen binaries
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
- name: Download provider
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin
@@ -318,14 +323,14 @@ jobs:
- name: Tar SDK folder
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
- name: Upload artifacts
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
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@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure while building SDKs
fields: repo,commit,author,action
@@ -343,6 +348,7 @@ jobs:
- dotnet
- go
- java
- yaml
name: test
permissions:
contents: read
@@ -354,35 +360,35 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@87b7050bc53ea08284295505d98d2aa94301e852 # v4.2.0
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Setup Java
uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4.6.0
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
@@ -391,8 +397,8 @@ jobs:
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
with:
gradle-version: "7.6"
- name: Download provider + tfgen binaries
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
- name: Download provider
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin
@@ -403,11 +409,13 @@ jobs:
run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
-exec chmod +x {} \;
- name: Download SDK
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
if: ${{ matrix.language != 'yaml' }}
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.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
@@ -420,18 +428,23 @@ jobs:
pip3 install virtualenv==20.0.23
pip3 install pipenv
- name: Install dependencies
if: ${{ matrix.language != 'yaml' }}
run: make install_${{ matrix.language}}_sdk
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
- name: Generate Pulumi Access Token
id: generate_pulumi_token
uses: pulumi/auth-actions@1c89817aab0c66407723cdef72b05266e7376640 # v1.0.1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-region: ${{ env.AWS_REGION }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
role-duration-seconds: 3600
role-session-name: ${{ env.PROVIDER }}@githubActions
role-to-assume: ${{ secrets.AWS_CI_ROLE_ARN }}
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@6fc4af4b145ae7821d527454aa9bd537d1f2dc5f # v2.1.7
uses: google-github-actions/auth@ba79af03959ebeac9769e648f473a284504d9193 # v2.1.10
with:
workload_identity_provider: projects/${{ env.GOOGLE_PROJECT_NUMBER
}}/locations/global/workloadIdentityPools/${{
@@ -439,7 +452,7 @@ jobs:
env.GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER }}
service_account: ${{ env.GOOGLE_CI_SERVICE_ACCOUNT_EMAIL }}
- name: Setup gcloud auth
uses: google-github-actions/setup-gcloud@6189d56e4096ee891640bb02ac264be376592d6a # v2.1.2
uses: google-github-actions/setup-gcloud@77e7a554d41e2ee56fc945c52dfd3f33d12def9a # v2.1.4
with:
install_components: gke-gcloud-auth-plugin
- name: Install gotestfmt
@@ -454,7 +467,7 @@ jobs:
cd examples && go test -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 .
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in SDK tests
fields: repo,commit,author,action
@@ -470,11 +483,11 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
@@ -488,13 +501,13 @@ jobs:
swap-storage: true
large-packages: false
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-region: us-east-2
@@ -512,7 +525,7 @@ jobs:
version: latest
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in publishing binaries
fields: repo,commit,author,action
@@ -528,7 +541,7 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Checkout Scripts Repo
@@ -538,31 +551,31 @@ jobs:
repository: pulumi/scripts
- run: echo "ci-scripts" >> .git/info/exclude
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@87b7050bc53ea08284295505d98d2aa94301e852 # v4.2.0
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Download python SDK
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: python-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
@@ -570,7 +583,7 @@ jobs:
run: tar -zxf ${{github.workspace}}/sdk/python.tar.gz -C
${{github.workspace}}/sdk/python
- name: Download dotnet SDK
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: dotnet-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
@@ -578,7 +591,7 @@ jobs:
run: tar -zxf ${{github.workspace}}/sdk/dotnet.tar.gz -C
${{github.workspace}}/sdk/dotnet
- name: Download nodejs SDK
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: nodejs-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
@@ -594,7 +607,7 @@ jobs:
PYPI_PUBLISH_ARTIFACTS: all
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in publishing SDK
fields: repo,commit,author,action
@@ -609,7 +622,7 @@ jobs:
persist-credentials: false
ref: ${{ env.PR_COMMIT_SHA }}
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
@@ -617,7 +630,7 @@ jobs:
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@971e284b6050e8a5849b72094c50ab08da042db8 # v6.1.1
uses: golangci/golangci-lint-action@55c2c1448f86e01eaae002a5a3a9624417608d84 # v6.5.2
with:
version: ${{ env.GOLANGCI_LINT_VERSION }}
args: -c ../.golangci.yml

View File

@@ -24,29 +24,27 @@ env:
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
GOVERSION: 1.21.x
NODEVERSION: 20.x
PYTHONVERSION: "3.11"
DOTNETVERSION: |
6.0.x
3.1.301
GOVERSION: "1.21.x"
NODEVERSION: "20.x"
PYTHONVERSION: "3.11.8"
DOTNETVERSION: "8.0.x"
JAVAVERSION: "11"
AWS_REGION: us-west-2
PULUMI_API: https://api.pulumi-staging.io
ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
AWS_REGION: us-west-2
AZURE_LOCATION: westus
DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
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_PROJECT_NUMBER: "895284651812"
GOOGLE_REGION: us-central1
GOOGLE_ZONE: us-central1-a
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
PULUMI_API: https://api.pulumi-staging.io
jobs:
command-dispatch-for-testing:
runs-on: ubuntu-latest

View File

@@ -6,6 +6,13 @@ on:
tags:
- v*.*.*-**
env:
AZURE_SIGNING_CLIENT_ID: ${{ secrets.AZURE_SIGNING_CLIENT_ID }}
AZURE_SIGNING_CLIENT_SECRET: ${{ secrets.AZURE_SIGNING_CLIENT_SECRET }}
AZURE_SIGNING_TENANT_ID: ${{ secrets.AZURE_SIGNING_TENANT_ID }}
AZURE_SIGNING_KEY_VAULT_URI: ${{ secrets.AZURE_SIGNING_KEY_VAULT_URI }}
SKIP_SIGNING: ${{ secrets.AZURE_SIGNING_CLIENT_ID == '' &&
secrets.AZURE_SIGNING_CLIENT_SECRET == '' && secrets.AZURE_SIGNING_TENANT_ID
== '' && secrets.AZURE_SIGNING_KEY_VAULT_URI == '' }}
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
PROVIDER: docker-build
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
@@ -23,29 +30,27 @@ env:
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
GOVERSION: 1.21.x
NODEVERSION: 20.x
PYTHONVERSION: "3.11"
DOTNETVERSION: |
6.0.x
3.1.301
GOVERSION: "1.21.x"
NODEVERSION: "20.x"
PYTHONVERSION: "3.11.8"
DOTNETVERSION: "8.0.x"
JAVAVERSION: "11"
AWS_REGION: us-west-2
PULUMI_API: https://api.pulumi-staging.io
ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
AWS_REGION: us-west-2
AZURE_LOCATION: westus
DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
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_PROJECT_NUMBER: "895284651812"
GOOGLE_REGION: us-central1
GOOGLE_ZONE: us-central1-a
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
PULUMI_API: https://api.pulumi-staging.io
IS_PRERELEASE: true
jobs:
prerequisites:
@@ -58,23 +63,23 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- if: github.event_name == 'pull_request'
name: Install Schema Tools
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/schema-tools
- name: Build codegen binaries
@@ -166,19 +171,19 @@ jobs:
github.workspace}}/bin/ pulumi-resource-${{ env.PROVIDER }}
pulumi-gen-${{ env.PROVIDER}}
- name: Upload artifacts
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
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
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@1e68e06f1dbfde0e4cefc87efeba9e4643565303 # v5.1.2
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in building provider prerequisites
fields: repo,commit,author,action
@@ -203,35 +208,35 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@87b7050bc53ea08284295505d98d2aa94301e852 # v4.2.0
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Setup Java
uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4.6.0
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
@@ -240,8 +245,8 @@ jobs:
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
with:
gradle-version: "7.6"
- name: Download provider + tfgen binaries
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
- name: Download provider
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin
@@ -310,13 +315,13 @@ jobs:
- name: Tar SDK folder
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
- name: Upload artifacts
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
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@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure while building SDKs
fields: repo,commit,author,action
@@ -334,6 +339,7 @@ jobs:
- dotnet
- go
- java
- yaml
name: test
permissions:
contents: read
@@ -345,35 +351,35 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@87b7050bc53ea08284295505d98d2aa94301e852 # v4.2.0
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Setup Java
uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4.6.0
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
@@ -382,8 +388,8 @@ jobs:
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
with:
gradle-version: "7.6"
- name: Download provider + tfgen binaries
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
- name: Download provider
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin
@@ -394,11 +400,13 @@ jobs:
run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
-exec chmod +x {} \;
- name: Download SDK
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
if: ${{ matrix.language != 'yaml' }}
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.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
@@ -411,18 +419,23 @@ jobs:
pip3 install virtualenv==20.0.23
pip3 install pipenv
- name: Install dependencies
if: ${{ matrix.language != 'yaml' }}
run: make install_${{ matrix.language}}_sdk
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
- name: Generate Pulumi Access Token
id: generate_pulumi_token
uses: pulumi/auth-actions@1c89817aab0c66407723cdef72b05266e7376640 # v1.0.1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-region: ${{ env.AWS_REGION }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
role-duration-seconds: 3600
role-session-name: ${{ env.PROVIDER }}@githubActions
role-to-assume: ${{ secrets.AWS_CI_ROLE_ARN }}
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@6fc4af4b145ae7821d527454aa9bd537d1f2dc5f # v2.1.7
uses: google-github-actions/auth@ba79af03959ebeac9769e648f473a284504d9193 # v2.1.10
with:
workload_identity_provider: projects/${{ env.GOOGLE_PROJECT_NUMBER
}}/locations/global/workloadIdentityPools/${{
@@ -430,7 +443,7 @@ jobs:
env.GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER }}
service_account: ${{ env.GOOGLE_CI_SERVICE_ACCOUNT_EMAIL }}
- name: Setup gcloud auth
uses: google-github-actions/setup-gcloud@6189d56e4096ee891640bb02ac264be376592d6a # v2.1.2
uses: google-github-actions/setup-gcloud@77e7a554d41e2ee56fc945c52dfd3f33d12def9a # v2.1.4
with:
install_components: gke-gcloud-auth-plugin
- name: Install gotestfmt
@@ -445,7 +458,7 @@ jobs:
cd examples && go test -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 .
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in SDK tests
fields: repo,commit,author,action
@@ -461,11 +474,11 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
@@ -479,13 +492,13 @@ jobs:
swap-storage: true
large-packages: false
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-region: us-east-2
@@ -503,7 +516,7 @@ jobs:
version: latest
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in publishing binaries
fields: repo,commit,author,action
@@ -519,7 +532,7 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Checkout Scripts Repo
@@ -529,31 +542,31 @@ jobs:
repository: pulumi/scripts
- run: echo "ci-scripts" >> .git/info/exclude
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@87b7050bc53ea08284295505d98d2aa94301e852 # v4.2.0
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Download python SDK
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: python-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
@@ -561,7 +574,7 @@ jobs:
run: tar -zxf ${{github.workspace}}/sdk/python.tar.gz -C
${{github.workspace}}/sdk/python
- name: Download dotnet SDK
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: dotnet-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
@@ -569,7 +582,7 @@ jobs:
run: tar -zxf ${{github.workspace}}/sdk/dotnet.tar.gz -C
${{github.workspace}}/sdk/dotnet
- name: Download nodejs SDK
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: nodejs-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
@@ -585,7 +598,7 @@ jobs:
PYPI_PUBLISH_ARTIFACTS: all
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in publishing SDK
fields: repo,commit,author,action
@@ -602,22 +615,22 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- name: Setup Java
uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4.6.0
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
@@ -627,7 +640,7 @@ jobs:
with:
gradle-version: "7.6"
- name: Download java SDK
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: java-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
@@ -653,11 +666,11 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Download go SDK
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: go-sdk.tar.gz
path: ${{ github.workspace}}/sdk/

View File

@@ -21,29 +21,27 @@ env:
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
GOVERSION: 1.21.x
NODEVERSION: 20.x
PYTHONVERSION: "3.11"
DOTNETVERSION: |
6.0.x
3.1.301
GOVERSION: "1.21.x"
NODEVERSION: "20.x"
PYTHONVERSION: "3.11.8"
DOTNETVERSION: "8.0.x"
JAVAVERSION: "11"
AWS_REGION: us-west-2
PULUMI_API: https://api.pulumi-staging.io
ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
AWS_REGION: us-west-2
AZURE_LOCATION: westus
DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
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_PROJECT_NUMBER: "895284651812"
GOOGLE_REGION: us-central1
GOOGLE_ZONE: us-central1-a
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
PULUMI_API: https://api.pulumi-staging.io
jobs:
comment-on-pr:
runs-on: ubuntu-latest

View File

@@ -7,6 +7,13 @@ on:
- v*.*.*
- "!v*.*.*-**"
env:
AZURE_SIGNING_CLIENT_ID: ${{ secrets.AZURE_SIGNING_CLIENT_ID }}
AZURE_SIGNING_CLIENT_SECRET: ${{ secrets.AZURE_SIGNING_CLIENT_SECRET }}
AZURE_SIGNING_TENANT_ID: ${{ secrets.AZURE_SIGNING_TENANT_ID }}
AZURE_SIGNING_KEY_VAULT_URI: ${{ secrets.AZURE_SIGNING_KEY_VAULT_URI }}
SKIP_SIGNING: ${{ secrets.AZURE_SIGNING_CLIENT_ID == '' &&
secrets.AZURE_SIGNING_CLIENT_SECRET == '' && secrets.AZURE_SIGNING_TENANT_ID
== '' && secrets.AZURE_SIGNING_KEY_VAULT_URI == '' }}
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
PROVIDER: docker-build
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
@@ -24,29 +31,27 @@ env:
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
GOVERSION: 1.21.x
NODEVERSION: 20.x
PYTHONVERSION: "3.11"
DOTNETVERSION: |
6.0.x
3.1.301
GOVERSION: "1.21.x"
NODEVERSION: "20.x"
PYTHONVERSION: "3.11.8"
DOTNETVERSION: "8.0.x"
JAVAVERSION: "11"
AWS_REGION: us-west-2
PULUMI_API: https://api.pulumi-staging.io
ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
AWS_REGION: us-west-2
AZURE_LOCATION: westus
DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
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_PROJECT_NUMBER: "895284651812"
GOOGLE_REGION: us-central1
GOOGLE_ZONE: us-central1-a
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
PULUMI_API: https://api.pulumi-staging.io
jobs:
prerequisites:
runs-on: ubuntu-latest
@@ -58,23 +63,23 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- if: github.event_name == 'pull_request'
name: Install Schema Tools
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/schema-tools
- name: Build codegen binaries
@@ -166,19 +171,19 @@ jobs:
github.workspace}}/bin/ pulumi-resource-${{ env.PROVIDER }}
pulumi-gen-${{ env.PROVIDER}}
- name: Upload artifacts
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
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
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@1e68e06f1dbfde0e4cefc87efeba9e4643565303 # v5.1.2
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in building provider prerequisites
fields: repo,commit,author,action
@@ -203,35 +208,35 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@87b7050bc53ea08284295505d98d2aa94301e852 # v4.2.0
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Setup Java
uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4.6.0
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
@@ -240,8 +245,8 @@ jobs:
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
with:
gradle-version: "7.6"
- name: Download provider + tfgen binaries
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
- name: Download provider
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin
@@ -310,13 +315,13 @@ jobs:
- name: Tar SDK folder
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
- name: Upload artifacts
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
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@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure while building SDKs
fields: repo,commit,author,action
@@ -334,6 +339,7 @@ jobs:
- dotnet
- go
- java
- yaml
name: test
permissions:
contents: read
@@ -345,35 +351,35 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@87b7050bc53ea08284295505d98d2aa94301e852 # v4.2.0
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Setup Java
uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4.6.0
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
@@ -382,8 +388,8 @@ jobs:
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
with:
gradle-version: "7.6"
- name: Download provider + tfgen binaries
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
- name: Download provider
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin
@@ -394,11 +400,13 @@ jobs:
run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
-exec chmod +x {} \;
- name: Download SDK
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
if: ${{ matrix.language != 'yaml' }}
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.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
@@ -411,18 +419,23 @@ jobs:
pip3 install virtualenv==20.0.23
pip3 install pipenv
- name: Install dependencies
if: ${{ matrix.language != 'yaml' }}
run: make install_${{ matrix.language}}_sdk
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
- name: Generate Pulumi Access Token
id: generate_pulumi_token
uses: pulumi/auth-actions@1c89817aab0c66407723cdef72b05266e7376640 # v1.0.1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-region: ${{ env.AWS_REGION }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
role-duration-seconds: 3600
role-session-name: ${{ env.PROVIDER }}@githubActions
role-to-assume: ${{ secrets.AWS_CI_ROLE_ARN }}
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@6fc4af4b145ae7821d527454aa9bd537d1f2dc5f # v2.1.7
uses: google-github-actions/auth@ba79af03959ebeac9769e648f473a284504d9193 # v2.1.10
with:
workload_identity_provider: projects/${{ env.GOOGLE_PROJECT_NUMBER
}}/locations/global/workloadIdentityPools/${{
@@ -430,7 +443,7 @@ jobs:
env.GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER }}
service_account: ${{ env.GOOGLE_CI_SERVICE_ACCOUNT_EMAIL }}
- name: Setup gcloud auth
uses: google-github-actions/setup-gcloud@6189d56e4096ee891640bb02ac264be376592d6a # v2.1.2
uses: google-github-actions/setup-gcloud@77e7a554d41e2ee56fc945c52dfd3f33d12def9a # v2.1.4
with:
install_components: gke-gcloud-auth-plugin
- name: Install gotestfmt
@@ -445,7 +458,7 @@ jobs:
cd examples && go test -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 .
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in SDK tests
fields: repo,commit,author,action
@@ -461,11 +474,11 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
@@ -479,13 +492,13 @@ jobs:
swap-storage: true
large-packages: false
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-region: us-east-2
@@ -503,7 +516,7 @@ jobs:
version: latest
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in publishing binaries
fields: repo,commit,author,action
@@ -519,7 +532,7 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Checkout Scripts Repo
@@ -529,31 +542,31 @@ jobs:
repository: pulumi/scripts
- run: echo "ci-scripts" >> .git/info/exclude
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@87b7050bc53ea08284295505d98d2aa94301e852 # v4.2.0
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Download python SDK
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: python-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
@@ -561,7 +574,7 @@ jobs:
run: tar -zxf ${{github.workspace}}/sdk/python.tar.gz -C
${{github.workspace}}/sdk/python
- name: Download dotnet SDK
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: dotnet-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
@@ -569,7 +582,7 @@ jobs:
run: tar -zxf ${{github.workspace}}/sdk/dotnet.tar.gz -C
${{github.workspace}}/sdk/dotnet
- name: Download nodejs SDK
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: nodejs-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
@@ -585,7 +598,7 @@ jobs:
PYPI_PUBLISH_ARTIFACTS: all
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in publishing SDK
fields: repo,commit,author,action
@@ -602,22 +615,22 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- name: Setup Java
uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4.6.0
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
@@ -627,7 +640,7 @@ jobs:
with:
gradle-version: "7.6"
- name: Download java SDK
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: java-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
@@ -653,11 +666,11 @@ jobs:
lfs: true
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Download go SDK
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: go-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
@@ -679,7 +692,7 @@ jobs:
needs: publish_go_sdk
steps:
- name: Install pulumictl
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Dispatch Event

View File

@@ -6,8 +6,6 @@ on:
types:
- run-acceptance-tests-command
pull_request:
paths-ignore:
- CHANGELOG.md
workflow_dispatch: {}
env:
GITHUB_TOKEN: ${{ secrets.PULUMI_BOT_TOKEN }}
@@ -27,29 +25,27 @@ env:
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
GOVERSION: 1.21.x
NODEVERSION: 20.x
PYTHONVERSION: "3.11"
DOTNETVERSION: |
6.0.x
3.1.301
GOVERSION: "1.21.x"
NODEVERSION: "20.x"
PYTHONVERSION: "3.11.8"
DOTNETVERSION: "8.0.x"
JAVAVERSION: "11"
AWS_REGION: us-west-2
PULUMI_API: https://api.pulumi-staging.io
ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
AWS_REGION: us-west-2
AZURE_LOCATION: westus
DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
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_PROJECT_NUMBER: "895284651812"
GOOGLE_REGION: us-central1
GOOGLE_ZONE: us-central1-a
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
PULUMI_API: https://api.pulumi-staging.io
PR_COMMIT_SHA: ${{ github.event.client_payload.pull_request.head.sha }}
jobs:
comment-notification:
@@ -81,23 +77,23 @@ jobs:
ref: ${{ env.PR_COMMIT_SHA }}
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- if: github.event_name == 'pull_request'
name: Install Schema Tools
uses: jaxxstorm/action-install-gh-release@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/schema-tools
- name: Build codegen binaries
@@ -189,19 +185,19 @@ jobs:
github.workspace}}/bin/ pulumi-resource-${{ env.PROVIDER }}
pulumi-gen-${{ env.PROVIDER}}
- name: Upload artifacts
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
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
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@1e68e06f1dbfde0e4cefc87efeba9e4643565303 # v5.1.2
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in building provider prerequisites
fields: repo,commit,author,action
@@ -230,35 +226,35 @@ jobs:
ref: ${{ env.PR_COMMIT_SHA }}
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@87b7050bc53ea08284295505d98d2aa94301e852 # v4.2.0
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Setup Java
uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4.6.0
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
@@ -267,8 +263,8 @@ jobs:
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
with:
gradle-version: "7.6"
- name: Download provider + tfgen binaries
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
- name: Download provider
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin
@@ -337,14 +333,14 @@ jobs:
- name: Tar SDK folder
run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} .
- name: Upload artifacts
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
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@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure while building SDKs
fields: repo,commit,author,action
@@ -364,6 +360,7 @@ jobs:
- dotnet
- go
- java
- yaml
name: test
permissions:
contents: read
@@ -377,35 +374,35 @@ jobs:
ref: ${{ env.PR_COMMIT_SHA }}
- id: version
name: Set Provider Version
uses: pulumi/provider-version-action@0391d47b9b0d865d33dd0a295b1fcf9f7021dd4c # v1.5.3
uses: pulumi/provider-version-action@f96d032a2758fdda7939e5728eff6c0d980ae894 # v1.6.0
with:
set-env: PROVIDER_VERSION
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup DotNet
uses: actions/setup-dotnet@87b7050bc53ea08284295505d98d2aa94301e852 # v4.2.0
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Setup Java
uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4.6.0
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with:
java-version: ${{ env.JAVAVERSION }}
distribution: temurin
@@ -414,8 +411,8 @@ jobs:
uses: gradle/gradle-build-action@ac2d340dc04d9e1113182899e983b5400c17cda1 # v3.5.0
with:
gradle-version: "7.6"
- name: Download provider + tfgen binaries
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
- name: Download provider
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: pulumi-${{ env.PROVIDER }}-provider.tar.gz
path: ${{ github.workspace }}/bin
@@ -426,11 +423,13 @@ jobs:
run: find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print
-exec chmod +x {} \;
- name: Download SDK
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
if: ${{ matrix.language != 'yaml' }}
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.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
@@ -443,18 +442,23 @@ jobs:
pip3 install virtualenv==20.0.23
pip3 install pipenv
- name: Install dependencies
if: ${{ matrix.language != 'yaml' }}
run: make install_${{ matrix.language}}_sdk
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
- name: Generate Pulumi Access Token
id: generate_pulumi_token
uses: pulumi/auth-actions@1c89817aab0c66407723cdef72b05266e7376640 # v1.0.1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-region: ${{ env.AWS_REGION }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
role-duration-seconds: 3600
role-session-name: ${{ env.PROVIDER }}@githubActions
role-to-assume: ${{ secrets.AWS_CI_ROLE_ARN }}
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@6fc4af4b145ae7821d527454aa9bd537d1f2dc5f # v2.1.7
uses: google-github-actions/auth@ba79af03959ebeac9769e648f473a284504d9193 # v2.1.10
with:
workload_identity_provider: projects/${{ env.GOOGLE_PROJECT_NUMBER
}}/locations/global/workloadIdentityPools/${{
@@ -462,7 +466,7 @@ jobs:
env.GOOGLE_CI_WORKLOAD_IDENTITY_PROVIDER }}
service_account: ${{ env.GOOGLE_CI_SERVICE_ACCOUNT_EMAIL }}
- name: Setup gcloud auth
uses: google-github-actions/setup-gcloud@6189d56e4096ee891640bb02ac264be376592d6a # v2.1.2
uses: google-github-actions/setup-gcloud@77e7a554d41e2ee56fc945c52dfd3f33d12def9a # v2.1.4
with:
install_components: gke-gcloud-auth-plugin
- name: Install gotestfmt
@@ -477,7 +481,7 @@ jobs:
cd examples && go test -count=1 -cover -timeout 2h -tags=${{ matrix.language }} -parallel 4 .
- if: failure() && github.event_name == 'push'
name: Notify Slack
uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e # v3.18.0
with:
author_name: Failure in SDK tests
fields: repo,commit,author,action
@@ -514,7 +518,7 @@ jobs:
persist-credentials: false
ref: ${{ env.PR_COMMIT_SHA }}
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: ${{ env.GOVERSION }}
cache-dependency-path: "**/*.sum"
@@ -522,7 +526,7 @@ jobs:
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@971e284b6050e8a5849b72094c50ab08da042db8 # v6.1.1
uses: golangci/golangci-lint-action@55c2c1448f86e01eaae002a5a3a9624417608d84 # v6.5.2
with:
version: ${{ env.GOLANGCI_LINT_VERSION }}
args: -c ../.golangci.yml

View File

@@ -23,29 +23,27 @@ env:
SIGNING_KEY_ID: ${{ secrets.JAVA_SIGNING_KEY_ID }}
SIGNING_KEY: ${{ secrets.JAVA_SIGNING_KEY }}
SIGNING_PASSWORD: ${{ secrets.JAVA_SIGNING_PASSWORD }}
GOVERSION: 1.21.x
NODEVERSION: 20.x
PYTHONVERSION: "3.11"
DOTNETVERSION: |
6.0.x
3.1.301
GOVERSION: "1.21.x"
NODEVERSION: "20.x"
PYTHONVERSION: "3.11.8"
DOTNETVERSION: "8.0.x"
JAVAVERSION: "11"
AWS_REGION: us-west-2
PULUMI_API: https://api.pulumi-staging.io
ARM_CLIENT_ID: 30e520fa-12b4-4e21-b473-9426c5ac2e1e
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
ARM_SUBSCRIPTION_ID: 0282681f-7a9e-424b-80b2-96babd57a8a1
ARM_TENANT_ID: 706143bc-e1d4-4593-aee2-c9dc60ab9be7
ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }}
AWS_REGION: us-west-2
AZURE_LOCATION: westus
DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
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_PROJECT_NUMBER: "895284651812"
GOOGLE_REGION: us-central1
GOOGLE_ZONE: us-central1-a
DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }}
PULUMI_API: https://api.pulumi-staging.io
jobs:
weekly-pulumi-update:
runs-on: ubuntu-latest
@@ -55,27 +53,27 @@ jobs:
with:
lfs: true
- name: Install Go
uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
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@cd6b2b78ad38bdd294341cda064ec0692b06215b # v1.14.0
uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0
with:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/actions@c7fad9e2f0b79653172b36538b8b34b3c0291952 # v6.0.0
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6.3.0
- name: Setup DotNet
uses: actions/setup-dotnet@87b7050bc53ea08284295505d98d2aa94301e852 # v4.2.0
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Setup Node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Setup Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Update Pulumi/Pulumi
@@ -127,10 +125,14 @@ jobs:
- name: Create PR
id: create-pr
if: steps.gomod.outputs.changes != 0
run: |
run: >
ver=$(cat .pulumi.version)
msg="Automated upgrade: bump pulumi/pulumi to ${ver}"
gh pr create -t "$msg" -b "$msg" -B main
# 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: ${{ secrets.PULUMI_BOT_TOKEN }}
name: weekly-pulumi-update

View File

@@ -7,7 +7,7 @@ linters:
- depguard
- errcheck
- exhaustive
- exportloopref
- copyloopvar
- gci
- gocritic
- gofumpt

View File

@@ -2,26 +2,43 @@
project_name: pulumi-docker-build
builds:
- dir: provider
- id: build-provider
dir: provider
env:
- CGO_ENABLED=0
- GO111MODULE=on
goos:
- darwin
- windows
- linux
goarch:
- amd64
- arm64
ignore: []
ignore: &a1 []
main: ./cmd/pulumi-resource-docker-build/
ldflags:
- -s
- -w
- -X
github.com/pulumi/pulumi-docker-build/provider/pkg/version.Version={{.Tag}}
- -X github.com/pulumi/pulumi-docker-build/provider.Version={{.Tag}}
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

View File

@@ -2,26 +2,43 @@
project_name: pulumi-docker-build
builds:
- dir: provider
- id: build-provider
dir: provider
env:
- CGO_ENABLED=0
- GO111MODULE=on
goos:
- darwin
- windows
- linux
goarch:
- amd64
- arm64
ignore: []
ignore: &a1 []
main: ./cmd/pulumi-resource-docker-build/
ldflags:
- -s
- -w
- -X
github.com/pulumi/pulumi-docker-build/provider/pkg/version.Version={{.Tag}}
- -X github.com/pulumi/pulumi-docker-build/provider.Version={{.Tag}}
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

View File

@@ -1 +1 @@
3.144.1
3.169.0

View File

@@ -1,9 +1,51 @@
## Unreleased
## 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>)
version 0.13 of Buildkit or newer.
(https://github.com/pulumi/pulumi-docker-build/issues/21)
### Changed
@@ -11,9 +53,8 @@
### Fixed
- Custom `# syntax=` directives no longer cause validation errors. (<https://github.com/pulumi/pulumi-docker-build/issues/300>)
- Upgrading docker-build no longer causes resource replacements. (<https://github.com/pulumi/pulumi-docker-build/issues/404>)
- Fixed leaking the GitHub actions secret in diff logs. (<https://github.com/pulumi/pulumi-docker-build/issues/403>)
- Custom `# syntax=` directives no longer cause validation errors.
(https://github.com/pulumi/pulumi-docker-build/issues/300)
## 0.0.7 (2024-10-16)

View File

@@ -89,11 +89,11 @@ ${PULUMI}: go.sum
GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi/sdk/nodejs/cmd/pulumi-language-nodejs/v3
GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi/sdk/python/cmd/pulumi-language-python/v3
GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi-java/pkg/cmd/pulumi-language-java
GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet
GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet/v3
GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi-yaml/cmd/pulumi-converter-yaml
${GOGLANGCILINT}: go.sum
GOBIN=${WORKING_DIR}/bin go install github.com/golangci/golangci-lint/cmd/golangci-lint
GOBIN=${WORKING_DIR}/bin go install github.com/golangci/golangci-lint/cmd/golangci-lint@8b37f14
define pulumi_login
export PULUMI_CONFIG_PASSPHRASE=asdfqwerty1234; \
@@ -259,3 +259,58 @@ sdk/java: $(PULUMI) bin/${PROVIDER}
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

View File

@@ -2,7 +2,7 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>

View File

@@ -1,47 +1,48 @@
module provider-docker-build
go 1.22.0
go 1.23.1
toolchain go1.23.4
toolchain go1.24.2
require (
github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.8
github.com/pulumi/pulumi/sdk/v3 v3.144.1
github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.11
github.com/pulumi/pulumi/sdk/v3 v3.165.0
)
require (
dario.cat/mergo v1.0.1 // indirect
github.com/BurntSushi/toml v1.4.0 // indirect
github.com/Microsoft/go-winio v0.6.2 // indirect
github.com/ProtonMail/go-crypto v1.0.0 // indirect
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect
github.com/ProtonMail/go-crypto v1.1.6 // 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.20.0 // indirect
github.com/charmbracelet/bubbletea v1.1.0 // indirect
github.com/charmbracelet/lipgloss v0.13.0 // indirect
github.com/charmbracelet/x/ansi v0.2.3 // indirect
github.com/charmbracelet/x/term v0.2.0 // indirect
github.com/charmbracelet/bubbletea v1.3.4 // indirect
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // 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.4.0 // indirect
github.com/cyphar/filepath-securejoin v0.3.1 // indirect
github.com/cloudflare/circl v1.6.0 // 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.5.0 // indirect
github.com/go-git/go-git/v5 v5.12.0 // indirect
github.com/go-git/go-billy/v5 v5.6.2 // indirect
github.com/go-git/go-git/v5 v5.14.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/glog v1.2.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // 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.22.0 // 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
@@ -53,43 +54,44 @@ require (
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.15.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.0 // 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.10.0 // indirect
github.com/pulumi/esc v0.13.0 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/rogpeppe/go-internal v1.12.0 // 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.0 // indirect
github.com/skeema/knownhosts v1.3.1 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/spf13/cobra v1.8.1 // indirect
github.com/spf13/pflag v1.0.5 // 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/zclconf/go-cty v1.15.0 // indirect
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
github.com/zclconf/go-cty v1.16.2 // indirect
go.uber.org/atomic v1.11.0 // indirect
golang.org/x/crypto v0.31.0 // indirect
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect
golang.org/x/mod v0.21.0 // indirect
golang.org/x/net v0.33.0 // indirect
golang.org/x/sync v0.10.0 // indirect
golang.org/x/sys v0.28.0 // indirect
golang.org/x/term v0.27.0 // indirect
golang.org/x/text v0.21.0 // indirect
golang.org/x/tools v0.25.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
google.golang.org/grpc v1.67.1 // indirect
google.golang.org/protobuf v1.35.1 // indirect
golang.org/x/crypto v0.36.0 // indirect
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect
golang.org/x/mod v0.24.0 // indirect
golang.org/x/net v0.37.0 // indirect
golang.org/x/sync v0.12.0 // indirect
golang.org/x/sys v0.31.0 // indirect
golang.org/x/term v0.30.0 // indirect
golang.org/x/text v0.23.0 // indirect
golang.org/x/tools v0.31.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 // indirect
google.golang.org/grpc v1.71.0 // indirect
google.golang.org/protobuf v1.36.5 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
lukechampine.com/frand v1.4.2 // indirect
lukechampine.com/frand v1.5.1 // indirect
)

View File

@@ -7,10 +7,8 @@ github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXY
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.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78=
github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0=
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY=
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA=
github.com/ProtonMail/go-crypto v1.1.6 h1:ZcV+Ropw6Qn0AX9brlQLAUXfqLBc7Bl+f/DmNxpLfdw=
github.com/ProtonMail/go-crypto v1.1.6/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
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=
@@ -25,32 +23,35 @@ github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiE
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
github.com/charmbracelet/bubbles v0.20.0 h1:jSZu6qD8cRQ6k9OMfR1WlM+ruM8fkPWkHvQWD9LIutE=
github.com/charmbracelet/bubbles v0.20.0/go.mod h1:39slydyswPy+uVOHZ5x/GjwVAFkCsV8IIVy+4MhzwwU=
github.com/charmbracelet/bubbletea v1.1.0 h1:FjAl9eAL3HBCHenhz/ZPjkKdScmaS5SK69JAK2YJK9c=
github.com/charmbracelet/bubbletea v1.1.0/go.mod h1:9Ogk0HrdbHolIKHdjfFpyXJmiCzGwy+FesYkZr7hYU4=
github.com/charmbracelet/lipgloss v0.13.0 h1:4X3PPeoWEDCMvzDvGmTajSyYPcZM4+y8sCA/SsA3cjw=
github.com/charmbracelet/lipgloss v0.13.0/go.mod h1:nw4zy0SBX/F/eAO1cWdcvy6qnkDUxr8Lw7dvFrAIbbY=
github.com/charmbracelet/x/ansi v0.2.3 h1:VfFN0NUpcjBRd4DnKfRaIRo53KRgey/nhOoEqosGDEY=
github.com/charmbracelet/x/ansi v0.2.3/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw=
github.com/charmbracelet/x/term v0.2.0 h1:cNB9Ot9q8I711MyZ7myUR5HFWL/lc3OpU8jZ4hwm0x0=
github.com/charmbracelet/x/term v0.2.0/go.mod h1:GVxgxAbjUrmpvIINHIQnJJKpMlHiZ4cktEQCN6GWyF0=
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.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs=
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk=
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.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
github.com/cloudflare/circl v1.4.0 h1:BV7h5MgrktNzytKmWjpOtdYrf0lkkbF8YMlBGPhJQrY=
github.com/cloudflare/circl v1.4.0/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU=
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/cyphar/filepath-securejoin v0.3.1 h1:1V7cHiaW+C+39wEfpH6XlLBQo3j/PciWFrgfCLS8XrE=
github.com/cyphar/filepath-securejoin v0.3.1/go.mod h1:F7i41x/9cBF7lzCrVsYs9fuzwRZm4NQsGTBdpp6mETc=
github.com/cloudflare/circl v1.6.0 h1:cr5JKic4HI+LkINy2lg3W2jF8sHCVTBncJr5gIIq7qk=
github.com/cloudflare/circl v1.6.0/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 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
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 v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU=
github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM=
github.com/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=
@@ -60,25 +61,31 @@ 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.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE=
github.com/gliderlabs/ssh v0.3.7/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8=
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.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU=
github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow=
github.com/go-git/go-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.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys=
github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY=
github.com/go-git/go-git/v5 v5.14.0 h1:/MD3lCrGjCen5WfEAzKg00MJJffKhC8gzS80ycmCi60=
github.com/go-git/go-git/v5 v5.14.0/go.mod h1:Z5Xhoia5PcWA3NF8vRLURn9E5FRhSl7dGj9ItW3Wk5k=
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.2 h1:1+mZ9upx1Dh6FmUTFR1naJ77miKiXgALjWOZ3NVFPmY=
github.com/golang/glog v1.2.2/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
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=
@@ -88,8 +95,8 @@ github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY
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.22.0 h1:hkZ3nCtqeJsDhPRFz5EA9iwcG1hNWGePOTw6oyul12M=
github.com/hashicorp/hcl/v2 v2.22.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA=
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=
@@ -128,10 +135,10 @@ github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D
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.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo=
github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8=
github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk=
github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0=
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=
@@ -139,27 +146,28 @@ github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
github.com/pgavlin/fx v0.1.6 h1:r9jEg69DhNoCd3Xh0+5mIbdbS3PqWrVWujkY76MFRTU=
github.com/pgavlin/fx v0.1.6/go.mod h1:KWZJ6fqBBSh8GxHYqwYCf3rYE7Gp2p0N8tJp8xv9u9M=
github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4=
github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI=
github.com/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 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
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.10.0 h1:jzBKzkLVW0mePeanDRfqSQoCJ5yrkux0jIwAkUxpRKE=
github.com/pulumi/esc v0.10.0/go.mod h1:2Bfa+FWj/xl8CKqRTWbWgDX0SOD4opdQgvYSURTGK2c=
github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.8 h1:KOacOEorWqHIhDadPUPa0BPldstpMWnQEWLN9mjomXc=
github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.8/go.mod h1:vaaKuLQIa72p0GBE0sJ6SWXzVIeIfwk1JjqGjfEnyCU=
github.com/pulumi/pulumi/sdk/v3 v3.144.1 h1:QQtCDERihhlfvcmRzqHeBmOER1Fg1VkFj9933Lxqv00=
github.com/pulumi/pulumi/sdk/v3 v3.144.1/go.mod h1:/6gxU2XirnLlImBy5OoqV6I4HcjOf+IznNIZNZExZzo=
github.com/pulumi/esc v0.13.0 h1:O2MPR2koScaQ2fXwyer8Q3Dd7z+DCnaDfsgNl5mVNMk=
github.com/pulumi/esc v0.13.0/go.mod h1:IIQo6W6Uzajt6f1RW4QvNxIRDlbK3TNQysnrwBHNo3U=
github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.11 h1:16T7aYBGcMs7oMGcRHzRO9ETHit0xVYgPRBkaFu6T3M=
github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild v0.0.11/go.mod h1:Uxxd/MM83Wys2lfpbfqvY8KUmnbU9mePbxbwEda/+SM=
github.com/pulumi/pulumi/sdk/v3 v3.165.0 h1:cglplKZOJDpqH8wa/2J250G9az/sE9eKp9fS2bC+vi8=
github.com/pulumi/pulumi/sdk/v3 v3.165.0/go.mod h1:GAaHrdv3kWJHbzkFFFflGbTBQXUYu6SF1ZCo+O9jo44=
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.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
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=
@@ -168,14 +176,14 @@ github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPO
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.0 h1:AM+y0rI04VksttfwjkSTNQorvGqmwATnvnAHpSgc0LY=
github.com/skeema/knownhosts v1.3.0/go.mod h1:sPINvnADmT/qYH1kfv+ePMmOBTH6Tbl7b5LvTDjFK7M=
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.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/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=
@@ -184,8 +192,8 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/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=
@@ -194,56 +202,56 @@ github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVK
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/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/zclconf/go-cty v1.15.0 h1:tTCRWxsexYUmtt/wVxgDClUe+uQusuI443uL6e+5sXQ=
github.com/zclconf/go-cty v1.15.0/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
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.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE=
go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY=
go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg=
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.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
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-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk=
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY=
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw=
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU=
golang.org/x/mod v0.24.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-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c=
golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
golang.org/x/sync v0.12.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-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -253,52 +261,37 @@ golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7w
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-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y=
golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE=
golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg=
golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU=
golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ=
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-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ=
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E=
google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA=
google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 h1:iK2jbkWL86DXjEx0qiHcRE9dE4/Ahua5k6V8OWFb//c=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I=
google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg=
google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec=
google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
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=
@@ -311,7 +304,7 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
lukechampine.com/frand v1.4.2 h1:RzFIpOvkMXuPMBb9maa4ND4wjBn71E1Jpf8BzJHMaVw=
lukechampine.com/frand v1.4.2/go.mod h1:4S/TM2ZgrKejMcKMbeLjISpJMO+/eZ1zu3vYX9dtj3s=
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=

View File

@@ -5,6 +5,6 @@
},
"dependencies": {
"typescript": "^4.0.0",
"@pulumi/pulumi": "3.144.1"
"@pulumi/pulumi": "3.165.0"
}
}

View File

@@ -128,7 +128,6 @@ func TestCaching(t *testing.T) {
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
if tt.skip {
t.Skip("Missing environment variables")

View File

@@ -5,151 +5,151 @@ config = pulumi.Config()
docker_hub_password = config.require("dockerHubPassword")
multi_platform = docker_build.Image("multiPlatform",
push=False,
dockerfile=docker_build.DockerfileArgs(
location="./app/Dockerfile.multiPlatform",
),
context=docker_build.BuildContextArgs(
location="./app",
),
dockerfile={
"location": "./app/Dockerfile.multiPlatform",
},
context={
"location": "./app",
},
platforms=[
docker_build.Platform.PLAN9_AMD64,
docker_build.Platform.PLAN9_386,
])
registry_push = docker_build.Image("registryPush",
push=False,
context=docker_build.BuildContextArgs(
location="./app",
),
context={
"location": "./app",
},
tags=["docker.io/pulumibot/buildkit-e2e:example"],
exports=[docker_build.ExportArgs(
registry=docker_build.ExportRegistryArgs(
oci_media_types=True,
push=False,
),
)],
registries=[docker_build.RegistryArgs(
address="docker.io",
username="pulumibot",
password=docker_hub_password,
)])
exports=[{
"registry": {
"oci_media_types": True,
"push": False,
},
}],
registries=[{
"address": "docker.io",
"username": "pulumibot",
"password": docker_hub_password,
}])
cached = docker_build.Image("cached",
push=False,
context=docker_build.BuildContextArgs(
location="./app",
),
cache_to=[docker_build.CacheToArgs(
local=docker_build.CacheToLocalArgs(
dest="tmp/cache",
mode=docker_build.CacheMode.MAX,
),
)],
cache_from=[docker_build.CacheFromArgs(
local=docker_build.CacheFromLocalArgs(
src="tmp/cache",
),
)])
context={
"location": "./app",
},
cache_to=[{
"local": {
"dest": "tmp/cache",
"mode": docker_build.CacheMode.MAX,
},
}],
cache_from=[{
"local": {
"src": "tmp/cache",
},
}])
build_args = docker_build.Image("buildArgs",
push=False,
dockerfile=docker_build.DockerfileArgs(
location="./app/Dockerfile.buildArgs",
),
context=docker_build.BuildContextArgs(
location="./app",
),
dockerfile={
"location": "./app/Dockerfile.buildArgs",
},
context={
"location": "./app",
},
build_args={
"SET_ME_TO_TRUE": "true",
})
extra_hosts = docker_build.Image("extraHosts",
push=False,
dockerfile=docker_build.DockerfileArgs(
location="./app/Dockerfile.extraHosts",
),
context=docker_build.BuildContextArgs(
location="./app",
),
dockerfile={
"location": "./app/Dockerfile.extraHosts",
},
context={
"location": "./app",
},
add_hosts=["metadata.google.internal:169.254.169.254"])
ssh_mount = docker_build.Image("sshMount",
push=False,
dockerfile=docker_build.DockerfileArgs(
location="./app/Dockerfile.sshMount",
),
context=docker_build.BuildContextArgs(
location="./app",
),
ssh=[docker_build.SSHArgs(
id="default",
)])
dockerfile={
"location": "./app/Dockerfile.sshMount",
},
context={
"location": "./app",
},
ssh=[{
"id": "default",
}])
secrets = docker_build.Image("secrets",
push=False,
dockerfile=docker_build.DockerfileArgs(
location="./app/Dockerfile.secrets",
),
context=docker_build.BuildContextArgs(
location="./app",
),
dockerfile={
"location": "./app/Dockerfile.secrets",
},
context={
"location": "./app",
},
secrets={
"password": "hunter2",
})
labels = docker_build.Image("labels",
push=False,
context=docker_build.BuildContextArgs(
location="./app",
),
context={
"location": "./app",
},
labels={
"description": "This image will get a descriptive label 👍",
})
target = docker_build.Image("target",
push=False,
dockerfile=docker_build.DockerfileArgs(
location="./app/Dockerfile.target",
),
context=docker_build.BuildContextArgs(
location="./app",
),
dockerfile={
"location": "./app/Dockerfile.target",
},
context={
"location": "./app",
},
target="build-me")
named_contexts = docker_build.Image("namedContexts",
push=False,
dockerfile=docker_build.DockerfileArgs(
location="./app/Dockerfile.namedContexts",
),
context=docker_build.BuildContextArgs(
location="./app",
named={
"golang:latest": docker_build.ContextArgs(
location="docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984",
),
dockerfile={
"location": "./app/Dockerfile.namedContexts",
},
context={
"location": "./app",
"named": {
"golang:latest": {
"location": "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984",
},
},
))
})
remote_context = docker_build.Image("remoteContext",
push=False,
context=docker_build.BuildContextArgs(
location="https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
))
context={
"location": "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
})
remote_context_with_inline = docker_build.Image("remoteContextWithInline",
push=False,
dockerfile=docker_build.DockerfileArgs(
inline="""FROM busybox
dockerfile={
"inline": """FROM busybox
COPY hello.c ./
""",
),
context=docker_build.BuildContextArgs(
location="https://github.com/docker-library/hello-world.git",
))
},
context={
"location": "https://github.com/docker-library/hello-world.git",
})
inline = docker_build.Image("inline",
push=False,
dockerfile=docker_build.DockerfileArgs(
inline="""FROM alpine
dockerfile={
"inline": """FROM alpine
RUN echo "This uses an inline Dockerfile! 👍"
""",
))
})
docker_load = docker_build.Image("dockerLoad",
push=False,
context=docker_build.BuildContextArgs(
location="./app",
),
exports=[docker_build.ExportArgs(
docker=docker_build.ExportDockerArgs(
tar=True,
),
)])
context={
"location": "./app",
},
exports=[{
"docker": {
"tar": True,
},
}])
pulumi.export("platforms", multi_platform.platforms)

View File

@@ -0,0 +1,944 @@
{
"version": 3,
"deployment": {
"manifest": {
"time": "2024-06-18T15:10:50.439881-07:00",
"magic": "",
"version": ""
},
"secrets_providers": {
"type": "passphrase",
"state": {
"salt": "v1:uRYnzeN15MA=:v1:rpAZ+oxUTuiNyCpF:KQmWj5xMhsTrE2XhW35Gd1XoMW7RDg=="
}
},
"resources": [
{
"urn": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
"custom": false,
"type": "pulumi:pulumi:Stack",
"outputs": {
"platforms": [
"plan9/amd64",
"plan9/386"
]
},
"created": "2024-06-18T22:10:48.091797Z",
"modified": "2024-06-18T22:10:48.091797Z"
},
{
"urn": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default",
"custom": true,
"id": "b62bb809-b83b-42cb-889c-46d524de5fe7",
"type": "pulumi:providers:docker-build",
"inputs": {
"host": ""
},
"outputs": {
"host": ""
},
"created": "2024-06-18T22:10:48.187658Z",
"modified": "2024-06-18T22:10:48.187658Z"
},
{
"urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::secrets",
"custom": true,
"id": "secrets",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.secrets"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"secrets": {
"password": "hunter2"
},
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "5c1561571a60aa3b5a234a9c26f69e2ba5d9a18624f426109d36a1d729b23a21",
"digest": "",
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.secrets"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"secrets": {
"password": "hunter2"
},
"target": ""
},
"parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
"provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"dockerfile": [],
"push": [],
"secrets": []
},
"created": "2024-06-18T22:10:50.181453Z",
"modified": "2024-06-18T22:10:50.181453Z"
},
{
"urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::buildArgs",
"custom": true,
"id": "buildArgs",
"type": "docker-build:index:Image",
"inputs": {
"buildArgs": {
"SET_ME_TO_TRUE": "true"
},
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.buildArgs"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildArgs": {
"SET_ME_TO_TRUE": "true"
},
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "55695ddcfb4d08a0d78d1a74c7b0141dada73ed05bc4b056ba29a51e42c83381",
"digest": "",
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.buildArgs"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
"provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"buildArgs": [],
"context": [],
"dockerfile": [],
"push": []
},
"created": "2024-06-18T22:10:50.182348Z",
"modified": "2024-06-18T22:10:50.182348Z"
},
{
"urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::sshMount",
"custom": true,
"id": "sshMount",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.sshMount"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ssh": [
{
"id": "default"
}
],
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "71d21b382ab9ee0324ad820ce57a0a4318342a0a244931f51fc46b791f1b37e9",
"digest": "",
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.sshMount"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"ssh": [
{
"id": "default"
}
],
"target": ""
},
"parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
"provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"dockerfile": [],
"push": [],
"ssh": []
},
"created": "2024-06-18T22:10:50.182807Z",
"modified": "2024-06-18T22:10:50.182807Z"
},
{
"urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::remoteContext",
"custom": true,
"id": "remoteContext",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"
},
"dockerfile": {
"inline": "",
"location": ""
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"
},
"contextHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"digest": "",
"dockerfile": {
"inline": "",
"location": ""
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
"provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"push": []
},
"created": "2024-06-18T22:10:50.18341Z",
"modified": "2024-06-18T22:10:50.18341Z"
},
{
"urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::registryPush",
"custom": true,
"id": "sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "app/Dockerfile"
},
"exec": false,
"exports": [
{
"disabled": false,
"raw": "",
"registry": {
"compression": "gzip",
"compressionLevel": 0,
"danglingNamePrefix": "",
"forceCompression": false,
"ociMediaTypes": true,
"push": false,
"store": true
}
}
],
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"tags": [
"docker.io/pulumibot/buildkit-e2e:example"
],
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5",
"digest": "sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a",
"dockerfile": {
"inline": "",
"location": "app/Dockerfile"
},
"exec": false,
"exports": [
{
"disabled": false,
"raw": "",
"registry": {
"compression": "gzip",
"compressionLevel": 0,
"danglingNamePrefix": "",
"forceCompression": false,
"ociMediaTypes": true,
"push": false,
"store": true
}
}
],
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "docker.io/pulumibot/buildkit-e2e:example@sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a",
"tags": [
"docker.io/pulumibot/buildkit-e2e:example"
],
"target": ""
},
"parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
"provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"exports": [],
"push": [],
"tags": []
},
"created": "2024-06-18T22:10:50.183668Z",
"modified": "2024-06-18T22:10:50.183668Z"
},
{
"urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::dockerLoad",
"custom": true,
"id": "sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "app/Dockerfile"
},
"exec": false,
"exports": [
{
"disabled": false,
"docker": {
"compression": "gzip",
"compressionLevel": 0,
"dest": "",
"forceCompression": false,
"ociMediaTypes": false,
"tar": true
},
"raw": ""
}
],
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5",
"digest": "sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4",
"dockerfile": {
"inline": "",
"location": "app/Dockerfile"
},
"exec": false,
"exports": [
{
"disabled": false,
"docker": {
"compression": "gzip",
"compressionLevel": 0,
"dest": "",
"forceCompression": false,
"ociMediaTypes": false,
"tar": true
},
"raw": ""
}
],
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
"provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"exports": [],
"push": []
},
"created": "2024-06-18T22:10:50.183874Z",
"modified": "2024-06-18T22:10:50.183874Z"
},
{
"urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::labels",
"custom": true,
"id": "labels",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "app/Dockerfile"
},
"exec": false,
"labels": {
"description": "This image will get a descriptive label 👍"
},
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5",
"digest": "",
"dockerfile": {
"inline": "",
"location": "app/Dockerfile"
},
"exec": false,
"labels": {
"description": "This image will get a descriptive label 👍"
},
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
"provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"labels": [],
"push": []
},
"created": "2024-06-18T22:10:50.183996Z",
"modified": "2024-06-18T22:10:50.183996Z"
},
{
"urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::inline",
"custom": true,
"id": "inline",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n",
"location": ""
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "36c67969e6700e87bde75fcf604a7db1fa9593194718fc0ae1c498df43228aec",
"digest": "",
"dockerfile": {
"inline": "FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n",
"location": ""
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
"provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"dockerfile": [],
"push": []
},
"created": "2024-06-18T22:10:50.184088Z",
"modified": "2024-06-18T22:10:50.184088Z"
},
{
"urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::target",
"custom": true,
"id": "target",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.target"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": "build-me"
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "fefadf795b6b4b119e97a87067a25f52a16cc3375223acad7b3f642fdcd413fc",
"digest": "",
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.target"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": "build-me"
},
"parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
"provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"dockerfile": [],
"push": [],
"target": []
},
"created": "2024-06-18T22:10:50.18426Z",
"modified": "2024-06-18T22:10:50.18426Z"
},
{
"urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::cached",
"custom": true,
"id": "cached",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"cacheFrom": [
{
"disabled": false,
"local": {
"digest": "",
"src": "tmp/cache"
},
"raw": ""
}
],
"cacheTo": [
{
"disabled": false,
"local": {
"compression": "gzip",
"compressionLevel": 0,
"dest": "tmp/cache",
"forceCompression": false,
"ignoreError": false,
"mode": "max"
},
"raw": ""
}
],
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "app/Dockerfile"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildOnPreview": true,
"cacheFrom": [
{
"disabled": false,
"local": {
"digest": "",
"src": "tmp/cache"
},
"raw": ""
}
],
"cacheTo": [
{
"disabled": false,
"local": {
"compression": "gzip",
"compressionLevel": 0,
"dest": "tmp/cache",
"forceCompression": false,
"ignoreError": false,
"mode": "max"
},
"raw": ""
}
],
"context": {
"location": "./app"
},
"contextHash": "e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5",
"digest": "",
"dockerfile": {
"inline": "",
"location": "app/Dockerfile"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
"provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"cacheFrom": [],
"cacheTo": [],
"context": [],
"push": []
},
"created": "2024-06-18T22:10:50.206842Z",
"modified": "2024-06-18T22:10:50.206842Z"
},
{
"urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::multiPlatform",
"custom": true,
"id": "multiPlatform",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.multiPlatform"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"platforms": [
"plan9/amd64",
"plan9/386"
],
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "c7ecf546ed2402de04f2dfa56ca4adb6fd490eed4219d7f1b2e559cd475f1755",
"digest": "",
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.multiPlatform"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"platforms": [
"plan9/amd64",
"plan9/386"
],
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
"provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"dockerfile": [],
"platforms": [],
"push": []
},
"created": "2024-06-18T22:10:50.257528Z",
"modified": "2024-06-18T22:10:50.257528Z"
},
{
"urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::extraHosts",
"custom": true,
"id": "extraHosts",
"type": "docker-build:index:Image",
"inputs": {
"addHosts": [
"metadata.google.internal:169.254.169.254"
],
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.extraHosts"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"addHosts": [
"metadata.google.internal:169.254.169.254"
],
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "e5d510d9ce39d91260e3aa7f8c81d7517a76165eb35e7134cae2f3e4e9fcb712",
"digest": "",
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.extraHosts"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
"provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"addHosts": [],
"context": [],
"dockerfile": [],
"push": []
},
"created": "2024-06-18T22:10:50.274264Z",
"modified": "2024-06-18T22:10:50.274264Z"
},
{
"urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::remoteContextWithInline",
"custom": true,
"id": "remoteContextWithInline",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "https://github.com/docker-library/hello-world.git"
},
"dockerfile": {
"inline": "FROM busybox\nCOPY hello.c ./\n",
"location": ""
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "https://github.com/docker-library/hello-world.git"
},
"contextHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"digest": "",
"dockerfile": {
"inline": "FROM busybox\nCOPY hello.c ./\n",
"location": ""
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
"provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"dockerfile": [],
"push": []
},
"created": "2024-06-18T22:10:50.332506Z",
"modified": "2024-06-18T22:10:50.332506Z"
},
{
"urn": "urn:pulumi:test::provider-docker-build::docker-build:index:Image::namedContexts",
"custom": true,
"id": "namedContexts",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app",
"named": {
"golang:latest": {
"location": "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"
}
}
},
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.namedContexts"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app",
"named": {
"golang:latest": {
"location": "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"
}
}
},
"contextHash": "3adfaaf17fbb548f06310e76d2826bccb223b49463504d0cc4fe86b0eef5d47d",
"digest": "",
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.namedContexts"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:test::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-test",
"provider": "urn:pulumi:test::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"dockerfile": [],
"push": []
},
"created": "2024-06-18T22:10:50.422524Z",
"modified": "2024-06-18T22:10:50.422524Z"
}
]
}
}

View File

@@ -1,944 +0,0 @@
{
"version": 3,
"deployment": {
"manifest": {
"time": "2024-06-18T15:10:50.439881-07:00",
"magic": "",
"version": ""
},
"secrets_providers": {
"type": "passphrase",
"state": {
"salt": "v1:uRYnzeN15MA=:v1:rpAZ+oxUTuiNyCpF:KQmWj5xMhsTrE2XhW35Gd1XoMW7RDg=="
}
},
"resources": [
{
"urn": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721",
"custom": false,
"type": "pulumi:pulumi:Stack",
"outputs": {
"platforms": [
"plan9/amd64",
"plan9/386"
]
},
"created": "2024-06-18T22:10:48.091797Z",
"modified": "2024-06-18T22:10:48.091797Z"
},
{
"urn": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default",
"custom": true,
"id": "b62bb809-b83b-42cb-889c-46d524de5fe7",
"type": "pulumi:providers:docker-build",
"inputs": {
"host": ""
},
"outputs": {
"host": ""
},
"created": "2024-06-18T22:10:48.187658Z",
"modified": "2024-06-18T22:10:48.187658Z"
},
{
"urn": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::secrets",
"custom": true,
"id": "secrets",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.secrets"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"secrets": {
"password": "hunter2"
},
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "5c1561571a60aa3b5a234a9c26f69e2ba5d9a18624f426109d36a1d729b23a21",
"digest": "",
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.secrets"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"secrets": {
"password": "hunter2"
},
"target": ""
},
"parent": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721",
"provider": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"dockerfile": [],
"push": [],
"secrets": []
},
"created": "2024-06-18T22:10:50.181453Z",
"modified": "2024-06-18T22:10:50.181453Z"
},
{
"urn": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::buildArgs",
"custom": true,
"id": "buildArgs",
"type": "docker-build:index:Image",
"inputs": {
"buildArgs": {
"SET_ME_TO_TRUE": "true"
},
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.buildArgs"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildArgs": {
"SET_ME_TO_TRUE": "true"
},
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "55695ddcfb4d08a0d78d1a74c7b0141dada73ed05bc4b056ba29a51e42c83381",
"digest": "",
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.buildArgs"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721",
"provider": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"buildArgs": [],
"context": [],
"dockerfile": [],
"push": []
},
"created": "2024-06-18T22:10:50.182348Z",
"modified": "2024-06-18T22:10:50.182348Z"
},
{
"urn": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::sshMount",
"custom": true,
"id": "sshMount",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.sshMount"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ssh": [
{
"id": "default"
}
],
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "71d21b382ab9ee0324ad820ce57a0a4318342a0a244931f51fc46b791f1b37e9",
"digest": "",
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.sshMount"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"ssh": [
{
"id": "default"
}
],
"target": ""
},
"parent": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721",
"provider": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"dockerfile": [],
"push": [],
"ssh": []
},
"created": "2024-06-18T22:10:50.182807Z",
"modified": "2024-06-18T22:10:50.182807Z"
},
{
"urn": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContext",
"custom": true,
"id": "remoteContext",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"
},
"dockerfile": {
"inline": "",
"location": ""
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"
},
"contextHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"digest": "",
"dockerfile": {
"inline": "",
"location": ""
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721",
"provider": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"push": []
},
"created": "2024-06-18T22:10:50.18341Z",
"modified": "2024-06-18T22:10:50.18341Z"
},
{
"urn": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::registryPush",
"custom": true,
"id": "sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "app/Dockerfile"
},
"exec": false,
"exports": [
{
"disabled": false,
"raw": "",
"registry": {
"compression": "gzip",
"compressionLevel": 0,
"danglingNamePrefix": "",
"forceCompression": false,
"ociMediaTypes": true,
"push": false,
"store": true
}
}
],
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"tags": [
"docker.io/pulumibot/buildkit-e2e:example"
],
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5",
"digest": "sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a",
"dockerfile": {
"inline": "",
"location": "app/Dockerfile"
},
"exec": false,
"exports": [
{
"disabled": false,
"raw": "",
"registry": {
"compression": "gzip",
"compressionLevel": 0,
"danglingNamePrefix": "",
"forceCompression": false,
"ociMediaTypes": true,
"push": false,
"store": true
}
}
],
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "docker.io/pulumibot/buildkit-e2e:example@sha256:0d286c8339e2bc4e166585dcda28a501fb08c8f991c2293209faa78a13bfb79a",
"tags": [
"docker.io/pulumibot/buildkit-e2e:example"
],
"target": ""
},
"parent": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721",
"provider": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"exports": [],
"push": [],
"tags": []
},
"created": "2024-06-18T22:10:50.183668Z",
"modified": "2024-06-18T22:10:50.183668Z"
},
{
"urn": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::dockerLoad",
"custom": true,
"id": "sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "app/Dockerfile"
},
"exec": false,
"exports": [
{
"disabled": false,
"docker": {
"compression": "gzip",
"compressionLevel": 0,
"dest": "",
"forceCompression": false,
"ociMediaTypes": false,
"tar": true
},
"raw": ""
}
],
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5",
"digest": "sha256:ec5d5c149823f61d56f5666d494d19c4edca42cfe4b578e640f57bf2429716a4",
"dockerfile": {
"inline": "",
"location": "app/Dockerfile"
},
"exec": false,
"exports": [
{
"disabled": false,
"docker": {
"compression": "gzip",
"compressionLevel": 0,
"dest": "",
"forceCompression": false,
"ociMediaTypes": false,
"tar": true
},
"raw": ""
}
],
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721",
"provider": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"exports": [],
"push": []
},
"created": "2024-06-18T22:10:50.183874Z",
"modified": "2024-06-18T22:10:50.183874Z"
},
{
"urn": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::labels",
"custom": true,
"id": "labels",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "app/Dockerfile"
},
"exec": false,
"labels": {
"description": "This image will get a descriptive label 👍"
},
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5",
"digest": "",
"dockerfile": {
"inline": "",
"location": "app/Dockerfile"
},
"exec": false,
"labels": {
"description": "This image will get a descriptive label 👍"
},
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721",
"provider": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"labels": [],
"push": []
},
"created": "2024-06-18T22:10:50.183996Z",
"modified": "2024-06-18T22:10:50.183996Z"
},
{
"urn": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::inline",
"custom": true,
"id": "inline",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n",
"location": ""
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "36c67969e6700e87bde75fcf604a7db1fa9593194718fc0ae1c498df43228aec",
"digest": "",
"dockerfile": {
"inline": "FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n",
"location": ""
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721",
"provider": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"dockerfile": [],
"push": []
},
"created": "2024-06-18T22:10:50.184088Z",
"modified": "2024-06-18T22:10:50.184088Z"
},
{
"urn": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::target",
"custom": true,
"id": "target",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.target"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": "build-me"
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "fefadf795b6b4b119e97a87067a25f52a16cc3375223acad7b3f642fdcd413fc",
"digest": "",
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.target"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": "build-me"
},
"parent": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721",
"provider": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"dockerfile": [],
"push": [],
"target": []
},
"created": "2024-06-18T22:10:50.18426Z",
"modified": "2024-06-18T22:10:50.18426Z"
},
{
"urn": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::cached",
"custom": true,
"id": "cached",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"cacheFrom": [
{
"disabled": false,
"local": {
"digest": "",
"src": "tmp/cache"
},
"raw": ""
}
],
"cacheTo": [
{
"disabled": false,
"local": {
"compression": "gzip",
"compressionLevel": 0,
"dest": "tmp/cache",
"forceCompression": false,
"ignoreError": false,
"mode": "max"
},
"raw": ""
}
],
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "app/Dockerfile"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildOnPreview": true,
"cacheFrom": [
{
"disabled": false,
"local": {
"digest": "",
"src": "tmp/cache"
},
"raw": ""
}
],
"cacheTo": [
{
"disabled": false,
"local": {
"compression": "gzip",
"compressionLevel": 0,
"dest": "tmp/cache",
"forceCompression": false,
"ignoreError": false,
"mode": "max"
},
"raw": ""
}
],
"context": {
"location": "./app"
},
"contextHash": "e569495ad1cfde07d0e769ab9b5ed56b889508f299d2e7a90400caf9e12795d5",
"digest": "",
"dockerfile": {
"inline": "",
"location": "app/Dockerfile"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721",
"provider": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"cacheFrom": [],
"cacheTo": [],
"context": [],
"push": []
},
"created": "2024-06-18T22:10:50.206842Z",
"modified": "2024-06-18T22:10:50.206842Z"
},
{
"urn": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::multiPlatform",
"custom": true,
"id": "multiPlatform",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.multiPlatform"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"platforms": [
"plan9/amd64",
"plan9/386"
],
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "c7ecf546ed2402de04f2dfa56ca4adb6fd490eed4219d7f1b2e559cd475f1755",
"digest": "",
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.multiPlatform"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"platforms": [
"plan9/amd64",
"plan9/386"
],
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721",
"provider": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"dockerfile": [],
"platforms": [],
"push": []
},
"created": "2024-06-18T22:10:50.257528Z",
"modified": "2024-06-18T22:10:50.257528Z"
},
{
"urn": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::extraHosts",
"custom": true,
"id": "extraHosts",
"type": "docker-build:index:Image",
"inputs": {
"addHosts": [
"metadata.google.internal:169.254.169.254"
],
"buildOnPreview": true,
"context": {
"location": "./app"
},
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.extraHosts"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"addHosts": [
"metadata.google.internal:169.254.169.254"
],
"buildOnPreview": true,
"context": {
"location": "./app"
},
"contextHash": "e5d510d9ce39d91260e3aa7f8c81d7517a76165eb35e7134cae2f3e4e9fcb712",
"digest": "",
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.extraHosts"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721",
"provider": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"addHosts": [],
"context": [],
"dockerfile": [],
"push": []
},
"created": "2024-06-18T22:10:50.274264Z",
"modified": "2024-06-18T22:10:50.274264Z"
},
{
"urn": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::remoteContextWithInline",
"custom": true,
"id": "remoteContextWithInline",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "https://github.com/docker-library/hello-world.git"
},
"dockerfile": {
"inline": "FROM busybox\nCOPY hello.c ./\n",
"location": ""
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "https://github.com/docker-library/hello-world.git"
},
"contextHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"digest": "",
"dockerfile": {
"inline": "FROM busybox\nCOPY hello.c ./\n",
"location": ""
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721",
"provider": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"dockerfile": [],
"push": []
},
"created": "2024-06-18T22:10:50.332506Z",
"modified": "2024-06-18T22:10:50.332506Z"
},
{
"urn": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::docker-build:index:Image::namedContexts",
"custom": true,
"id": "namedContexts",
"type": "docker-build:index:Image",
"inputs": {
"buildOnPreview": true,
"context": {
"location": "./app",
"named": {
"golang:latest": {
"location": "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"
}
}
},
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.namedContexts"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"target": ""
},
"outputs": {
"buildOnPreview": true,
"context": {
"location": "./app",
"named": {
"golang:latest": {
"location": "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"
}
}
},
"contextHash": "3adfaaf17fbb548f06310e76d2826bccb223b49463504d0cc4fe86b0eef5d47d",
"digest": "",
"dockerfile": {
"inline": "",
"location": "./app/Dockerfile.namedContexts"
},
"exec": false,
"load": false,
"network": "default",
"noCache": false,
"pull": false,
"push": false,
"ref": "",
"target": ""
},
"parent": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:pulumi:Stack::provider-docker-build-p-it-bryces-wor-upgrade-7b788721",
"provider": "urn:pulumi:p-it-bryces-wor-upgrade-7b788721::provider-docker-build::pulumi:providers:docker-build::default::b62bb809-b83b-42cb-889c-46d524de5fe7",
"propertyDependencies": {
"context": [],
"dockerfile": [],
"push": []
},
"created": "2024-06-18T22:10:50.422524Z",
"modified": "2024-06-18T22:10:50.422524Z"
}
]
}
}

View File

@@ -4,6 +4,6 @@
"@types/node": "^20.0.0"
},
"dependencies": {
"@pulumi/pulumi": "3.128.0"
"@pulumi/pulumi": "3.165.0"
}
}

View File

@@ -204,107 +204,112 @@
proc-log "^4.0.0"
which "^4.0.0"
"@opentelemetry/api-logs@0.52.1":
version "0.52.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz#52906375da4d64c206b0c4cb8ffa209214654ecc"
integrity sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==
"@opentelemetry/api-logs@0.55.0":
version "0.55.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.55.0.tgz#5cd7461820d864600250deb3803c32367a6bb2d2"
integrity sha512-3cpa+qI45VHYcA5c0bHM6VHo9gicv3p5mlLHNG3rLyjQU8b7e0st1rWtrUn3JbZ3DwwCfhKop4eQ9UuYlC6Pkg==
dependencies:
"@opentelemetry/api" "^1.0.0"
"@opentelemetry/api" "^1.3.0"
"@opentelemetry/api@^1.0.0", "@opentelemetry/api@^1.9":
"@opentelemetry/api@^1.3.0", "@opentelemetry/api@^1.9":
version "1.9.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe"
integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==
"@opentelemetry/context-async-hooks@1.25.1":
version "1.25.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz#810bff2fcab84ec51f4684aff2d21f6c057d9e73"
integrity sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==
"@opentelemetry/context-async-hooks@1.30.1":
version "1.30.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz#4f76280691a742597fd0bf682982126857622948"
integrity sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==
"@opentelemetry/core@1.25.1":
version "1.25.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.25.1.tgz#ff667d939d128adfc7c793edae2f6bca177f829d"
integrity sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==
"@opentelemetry/core@1.30.1":
version "1.30.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.30.1.tgz#a0b468bb396358df801881709ea38299fc30ab27"
integrity sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==
dependencies:
"@opentelemetry/semantic-conventions" "1.25.1"
"@opentelemetry/semantic-conventions" "1.28.0"
"@opentelemetry/exporter-zipkin@^1.25":
version "1.25.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.1.tgz#81bb3b3aa16500676277c2fd6d50159eaf6c081a"
integrity sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==
"@opentelemetry/exporter-zipkin@^1.28":
version "1.30.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.30.1.tgz#d96213a38d201ef2d50c3ba29faeb6e579f70e77"
integrity sha512-6S2QIMJahIquvFaaxmcwpvQQRD/YFaMTNoIxrfPIPOeITN+a8lfEcPDxNxn8JDAaxkg+4EnXhz8upVDYenoQjA==
dependencies:
"@opentelemetry/core" "1.25.1"
"@opentelemetry/resources" "1.25.1"
"@opentelemetry/sdk-trace-base" "1.25.1"
"@opentelemetry/semantic-conventions" "1.25.1"
"@opentelemetry/core" "1.30.1"
"@opentelemetry/resources" "1.30.1"
"@opentelemetry/sdk-trace-base" "1.30.1"
"@opentelemetry/semantic-conventions" "1.28.0"
"@opentelemetry/instrumentation-grpc@^0.52":
version "0.52.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.52.1.tgz#906ce4756a0eb1b050cd89b6b97dc09efe3ae3e3"
integrity sha512-EdSDiDSAO+XRXk/ZN128qQpBo1I51+Uay/LUPcPQhSRGf7fBPIEUBeOLQiItguGsug5MGOYjql2w/1wCQF3fdQ==
"@opentelemetry/instrumentation-grpc@^0.55":
version "0.55.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.55.0.tgz#b5161359060999f7ccbef26d6550beef021572fa"
integrity sha512-n2ZH4pRwOy0Vhag/3eKqiyDBwcpUnGgJI9iiIRX7vivE0FMncaLazWphNFezRRaM/LuKwq1TD8pVUvieP68mow==
dependencies:
"@opentelemetry/instrumentation" "0.52.1"
"@opentelemetry/semantic-conventions" "1.25.1"
"@opentelemetry/instrumentation" "0.55.0"
"@opentelemetry/semantic-conventions" "1.27.0"
"@opentelemetry/instrumentation@0.52.1", "@opentelemetry/instrumentation@^0.52":
version "0.52.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz#2e7e46a38bd7afbf03cf688c862b0b43418b7f48"
integrity sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==
"@opentelemetry/instrumentation@0.55.0", "@opentelemetry/instrumentation@^0.55":
version "0.55.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.55.0.tgz#ecac8afd8706f6e99b3bb6951b9e07c4c81533f0"
integrity sha512-YDCMlaQRZkziLL3t6TONRgmmGxDx6MyQDXRD0dknkkgUZtOK5+8MWft1OXzmNu6XfBOdT12MKN5rz+jHUkafKQ==
dependencies:
"@opentelemetry/api-logs" "0.52.1"
"@types/shimmer" "^1.0.2"
"@opentelemetry/api-logs" "0.55.0"
"@types/shimmer" "^1.2.0"
import-in-the-middle "^1.8.1"
require-in-the-middle "^7.1.1"
semver "^7.5.2"
shimmer "^1.2.1"
"@opentelemetry/propagator-b3@1.25.1":
version "1.25.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-b3/-/propagator-b3-1.25.1.tgz#653ee5f3f0f223c000907c1559c89c0a208819f7"
integrity sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==
"@opentelemetry/propagator-b3@1.30.1":
version "1.30.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-b3/-/propagator-b3-1.30.1.tgz#b73321e5f30f062a9229887a4aa80c771107fdd2"
integrity sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ==
dependencies:
"@opentelemetry/core" "1.25.1"
"@opentelemetry/core" "1.30.1"
"@opentelemetry/propagator-jaeger@1.25.1":
version "1.25.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.25.1.tgz#7eae165921e65dce6f8d87339379880125dab765"
integrity sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==
"@opentelemetry/propagator-jaeger@1.30.1":
version "1.30.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.30.1.tgz#c06c9dacbe818b80cfb13c4dbf0b57df1ad26b71"
integrity sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg==
dependencies:
"@opentelemetry/core" "1.25.1"
"@opentelemetry/core" "1.30.1"
"@opentelemetry/resources@1.25.1", "@opentelemetry/resources@^1.25":
version "1.25.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.25.1.tgz#bb9a674af25a1a6c30840b755bc69da2796fefbb"
integrity sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==
"@opentelemetry/resources@1.30.1", "@opentelemetry/resources@^1.28":
version "1.30.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.30.1.tgz#a4eae17ebd96947fdc7a64f931ca4b71e18ce964"
integrity sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==
dependencies:
"@opentelemetry/core" "1.25.1"
"@opentelemetry/semantic-conventions" "1.25.1"
"@opentelemetry/core" "1.30.1"
"@opentelemetry/semantic-conventions" "1.28.0"
"@opentelemetry/sdk-trace-base@1.25.1", "@opentelemetry/sdk-trace-base@^1.25":
version "1.25.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz#cbc1e60af255655d2020aa14cde17b37bd13df37"
integrity sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==
"@opentelemetry/sdk-trace-base@1.30.1", "@opentelemetry/sdk-trace-base@^1.28":
version "1.30.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz#41a42234096dc98e8f454d24551fc80b816feb34"
integrity sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==
dependencies:
"@opentelemetry/core" "1.25.1"
"@opentelemetry/resources" "1.25.1"
"@opentelemetry/semantic-conventions" "1.25.1"
"@opentelemetry/core" "1.30.1"
"@opentelemetry/resources" "1.30.1"
"@opentelemetry/semantic-conventions" "1.28.0"
"@opentelemetry/sdk-trace-node@^1.25":
version "1.25.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.25.1.tgz#856063bef1167ae74139199338c24fb958838ff3"
integrity sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ==
"@opentelemetry/sdk-trace-node@^1.28":
version "1.30.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.30.1.tgz#bd7d68fcfb4d4ae76ea09810df9668b7dd09a2e5"
integrity sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ==
dependencies:
"@opentelemetry/context-async-hooks" "1.25.1"
"@opentelemetry/core" "1.25.1"
"@opentelemetry/propagator-b3" "1.25.1"
"@opentelemetry/propagator-jaeger" "1.25.1"
"@opentelemetry/sdk-trace-base" "1.25.1"
"@opentelemetry/context-async-hooks" "1.30.1"
"@opentelemetry/core" "1.30.1"
"@opentelemetry/propagator-b3" "1.30.1"
"@opentelemetry/propagator-jaeger" "1.30.1"
"@opentelemetry/sdk-trace-base" "1.30.1"
semver "^7.5.2"
"@opentelemetry/semantic-conventions@1.25.1", "@opentelemetry/semantic-conventions@^1.25":
version "1.25.1"
resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz#0deecb386197c5e9c2c28f2f89f51fb8ae9f145e"
integrity sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==
"@opentelemetry/semantic-conventions@1.27.0":
version "1.27.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz#1a857dcc95a5ab30122e04417148211e6f945e6c"
integrity sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==
"@opentelemetry/semantic-conventions@1.28.0":
version "1.28.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz#337fb2bca0453d0726696e745f50064411f646d6"
integrity sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==
"@pkgjs/parseargs@^0.11.0":
version "0.11.0"
@@ -364,23 +369,21 @@
resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==
"@pulumi/pulumi@3.128.0":
version "3.128.0"
resolved "https://registry.yarnpkg.com/@pulumi/pulumi/-/pulumi-3.128.0.tgz#cb44cb904e9be1e36c7697215c2f91d4e58c0031"
integrity sha512-Xqe5uYp1RpDihK3VbdBFR4q1h+ICg/2Xgg1d7aYWmPqBCIUG4jWddLS0REQO60EsgKBNarXhLeQSmaWXLgiq9w==
"@pulumi/pulumi@3.165.0":
version "3.165.0"
resolved "https://registry.yarnpkg.com/@pulumi/pulumi/-/pulumi-3.165.0.tgz#6063567f0e8d999d76930b7d06db3e701942bd95"
integrity sha512-9W7/vqOxzcUf00j3wblolkeLjC6+rbvb/hTqyVmrd86ByzLsZ0e6WZ2Bo/IPElqzw+r0SEDi+Sk451QEaO1ESg==
dependencies:
"@grpc/grpc-js" "^1.10.1"
"@logdna/tail-file" "^2.0.6"
"@npmcli/arborist" "^7.3.1"
"@opentelemetry/api" "^1.9"
"@opentelemetry/exporter-zipkin" "^1.25"
"@opentelemetry/instrumentation" "^0.52"
"@opentelemetry/instrumentation-grpc" "^0.52"
"@opentelemetry/resources" "^1.25"
"@opentelemetry/sdk-trace-base" "^1.25"
"@opentelemetry/sdk-trace-node" "^1.25"
"@opentelemetry/semantic-conventions" "^1.25"
"@pulumi/query" "^0.3.0"
"@opentelemetry/exporter-zipkin" "^1.28"
"@opentelemetry/instrumentation" "^0.55"
"@opentelemetry/instrumentation-grpc" "^0.55"
"@opentelemetry/resources" "^1.28"
"@opentelemetry/sdk-trace-base" "^1.28"
"@opentelemetry/sdk-trace-node" "^1.28"
"@types/google-protobuf" "^3.15.5"
"@types/semver" "^7.5.6"
"@types/tmp" "^0.2.6"
@@ -400,11 +403,6 @@
tmp "^0.2.1"
upath "^1.1.0"
"@pulumi/query@^0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@pulumi/query/-/query-0.3.0.tgz#f496608e86a18c3dd31b6c533408e2441c29071d"
integrity sha512-xfo+yLRM2zVjVEA4p23IjQWzyWl1ZhWOGobsBqRpIarzLvwNH/RAGaoehdxlhx4X92302DrpdIFgTICMN4P38w==
"@sigstore/bundle@^2.3.2":
version "2.3.2"
resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.3.2.tgz#ad4dbb95d665405fd4a7a02c8a073dbd01e4e95e"
@@ -529,7 +527,7 @@
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e"
integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==
"@types/shimmer@^1.0.2":
"@types/shimmer@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@types/shimmer/-/shimmer-1.2.0.tgz#9b706af96fa06416828842397a70dfbbf1c14ded"
integrity sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==

View File

@@ -4,6 +4,6 @@
"@types/node": "^20.0.0"
},
"dependencies": {
"@pulumi/pulumi": "3.144.1"
"@pulumi/pulumi": "3.165.0"
}
}

View File

@@ -5,6 +5,6 @@
},
"dependencies": {
"typescript": "^4.0.0",
"@pulumi/pulumi": "3.144.1"
"@pulumi/pulumi": "3.165.0"
}
}

View File

@@ -1,9 +1,5 @@
name: provider-docker-build
runtime: yaml
plugins:
providers:
- name: docker-build
path: ../../bin
resources:
# docker buildx build -f app/Dockerfile.multiPlatform --platform plan9/amd64,plan9/386 app

View File

@@ -1,17 +1,21 @@
//go:build java || all
// +build java all
//go:build yaml || all
// +build yaml all
package examples
import (
"os"
"path"
"path/filepath"
"testing"
"github.com/pulumi/providertest"
"github.com/pulumi/providertest/providers"
"github.com/pulumi/providertest/pulumitest"
"github.com/pulumi/providertest/pulumitest/assertpreview"
"github.com/pulumi/providertest/pulumitest/opttest"
"github.com/pulumi/pulumi-docker-build/provider"
"github.com/pulumi/pulumi/pkg/v3/testing/integration"
pulumirpc "github.com/pulumi/pulumi/sdk/v3/proto/go"
"github.com/stretchr/testify/require"
)
@@ -30,25 +34,15 @@ func TestYAMLExample(t *testing.T) {
}
func TestYAMLExampleUpgrade(t *testing.T) {
// t.Setenv("PULUMI_PROVIDER_TEST_MODE", "snapshot")
pt := pulumitest.NewPulumiTest(t, "upgrade",
opttest.AttachProviderServer("docker-build", providerServerFactory))
previewResult := providertest.PreviewProviderUpgrade(t, pt, "docker-build", "0.0.1")
cwd, err := os.Getwd()
require.NoError(t, err)
assertpreview.HasNoChanges(t, previewResult)
}
bin, err := filepath.Abs("../bin")
require.NoError(t, err)
t.Setenv("PATH", bin+":"+os.Getenv("PATH"))
p, err := provider.New(nil)
require.NoError(t, err)
test := providertest.NewProviderTest(path.Join(cwd, "upgrade"),
providertest.WithProviderName("docker-build"),
providertest.WithBaselineVersion("0.0.1"),
providertest.WithResourceProviderServer(p),
// providertest.WithConfig("dockerHubPassword", os.Getenv("DOCKER_HUB_PASSWORD")), // Doesn't support secrets yet.
)
test.Run(t)
func providerServerFactory(pt providers.PulumiTest) (pulumirpc.ResourceProviderServer, error) {
return provider.New(nil)
}
func TestECR(t *testing.T) {

307
go.mod
View File

@@ -1,86 +1,81 @@
module github.com/pulumi/pulumi-docker-build
go 1.22.0
toolchain go1.23.4
go 1.24.1
require (
github.com/aws/aws-sdk-go v1.55.5
github.com/blang/semver v3.5.1+incompatible
github.com/distribution/reference v0.6.0
github.com/docker/buildx v0.18.0
github.com/docker/cli v27.4.0-rc.2+incompatible
github.com/docker/docker v27.4.0-rc.2+incompatible
github.com/docker/buildx v0.22.0
github.com/docker/cli v28.0.4+incompatible
github.com/docker/docker v28.0.1+incompatible
github.com/golangci/golangci-lint v1.59.1
github.com/moby/buildkit v0.18.1
github.com/moby/buildkit v0.20.1
github.com/moby/patternmatcher v0.6.0
github.com/muesli/reflow v0.3.0
github.com/otiai10/copy v1.14.0
github.com/pulumi/providertest v0.1.3
github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet v0.0.0-20241219213128-b19d8c8da35b
github.com/pulumi/pulumi-go-provider v0.24.1
github.com/pulumi/pulumi-java/pkg v0.20.0
github.com/pulumi/pulumi-yaml v1.13.0
github.com/pulumi/pulumi/pkg/v3 v3.144.1
github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3 v3.0.0-20241224122059-455089c460a2
github.com/pulumi/pulumi/sdk/nodejs/cmd/pulumi-language-nodejs/v3 v3.0.0-20241224122059-455089c460a2
github.com/pulumi/pulumi/sdk/python/cmd/pulumi-language-python/v3 v3.0.0-20241224122059-455089c460a2
github.com/pulumi/pulumi/sdk/v3 v3.144.1
github.com/pulumi/providertest v0.3.1
github.com/pulumi/pulumi-dotnet/pulumi-language-dotnet/v3 v3.0.0-20250515194217-855e3e4c894c
github.com/pulumi/pulumi-go-provider v1.0.0-rc.2
github.com/pulumi/pulumi-java/pkg v1.11.0
github.com/pulumi/pulumi-yaml v1.17.0
github.com/pulumi/pulumi/pkg/v3 v3.169.0
github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3 v3.0.0-20250508095305-a4bdc94d01aa
github.com/pulumi/pulumi/sdk/nodejs/cmd/pulumi-language-nodejs/v3 v3.0.0-20250508095305-a4bdc94d01aa
github.com/pulumi/pulumi/sdk/python/cmd/pulumi-language-python/v3 v3.0.0-20250508095305-a4bdc94d01aa
github.com/pulumi/pulumi/sdk/v3 v3.169.0
github.com/regclient/regclient v0.7.1
github.com/sirupsen/logrus v1.9.3
github.com/spf13/afero v1.11.0
github.com/spf13/afero v1.14.0
github.com/stretchr/testify v1.10.0
github.com/theupdateframework/notary v0.7.0
github.com/tonistiigi/fsutil v0.0.0-20241121093142-31cf1f437184
go.opentelemetry.io/otel/metric v1.29.0
go.opentelemetry.io/otel/sdk v1.29.0
go.opentelemetry.io/otel/trace v1.29.0
go.uber.org/mock v0.5.0
golang.org/x/crypto v0.31.0
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0
google.golang.org/protobuf v1.35.1
github.com/tonistiigi/fsutil v0.0.0-20250113203817-b14e27f4135a
github.com/tonistiigi/go-csvvalue v0.0.0-20240710180619-ddb21b71c0b4
go.opentelemetry.io/otel/metric v1.35.0
go.opentelemetry.io/otel/sdk v1.35.0
go.opentelemetry.io/otel/trace v1.35.0
go.uber.org/mock v0.5.2
golang.org/x/crypto v0.38.0
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0
google.golang.org/protobuf v1.36.6
gopkg.in/yaml.v3 v3.0.1
)
require (
4d63.com/gocheckcompilerdirectives v1.2.1 // indirect
4d63.com/gochecknoglobals v0.2.1 // indirect
cloud.google.com/go v0.115.1 // indirect
cloud.google.com/go/auth v0.9.3 // indirect
cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect
cloud.google.com/go/compute/metadata v0.5.0 // indirect
cloud.google.com/go/iam v1.2.0 // indirect
cloud.google.com/go/kms v1.19.0 // indirect
cloud.google.com/go/logging v1.11.0 // indirect
cloud.google.com/go/longrunning v0.6.0 // indirect
cloud.google.com/go/storage v1.43.0 // indirect
cloud.google.com/go v0.112.1 // indirect
cloud.google.com/go/compute/metadata v0.6.0 // indirect
cloud.google.com/go/iam v1.1.6 // indirect
cloud.google.com/go/kms v1.15.7 // indirect
cloud.google.com/go/logging v1.9.0 // indirect
cloud.google.com/go/longrunning v0.5.5 // indirect
cloud.google.com/go/storage v1.39.1 // indirect
dario.cat/mergo v1.0.1 // indirect
github.com/4meepo/tagalign v1.3.4 // indirect
github.com/Abirdcfly/dupword v0.0.14 // indirect
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect
github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 // indirect
github.com/AlecAivazis/survey/v2 v2.3.7 // indirect
github.com/Antonboom/errname v0.1.13 // indirect
github.com/Antonboom/nilnil v0.1.9 // indirect
github.com/Antonboom/testifylint v1.3.1 // indirect
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.16.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 // indirect
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.2 // indirect
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0 // indirect
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
github.com/Azure/go-autorest v14.2.0+incompatible // indirect
github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect
github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect
github.com/BurntSushi/toml v1.4.0 // indirect
github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2 // indirect
github.com/BurntSushi/toml v1.5.0 // indirect
github.com/Crocmagnon/fatcontext v0.2.2 // indirect
github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 // indirect
github.com/GaijinEntertainment/go-exhaustruct/v3 v3.2.0 // indirect
github.com/Masterminds/semver/v3 v3.2.1 // indirect
github.com/Microsoft/go-winio v0.6.2 // indirect
github.com/OpenPeeDeeP/depguard/v2 v2.2.0 // indirect
github.com/ProtonMail/go-crypto v1.1.3 // indirect
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect
github.com/ProtonMail/go-crypto v1.2.0 // indirect
github.com/agext/levenshtein v1.2.3 // indirect
github.com/alecthomas/chroma v0.10.0 // indirect
github.com/alecthomas/chroma/v2 v2.13.0 // indirect
@@ -88,31 +83,31 @@ require (
github.com/alexkohler/nakedret/v2 v2.0.4 // indirect
github.com/alexkohler/prealloc v1.0.0 // indirect
github.com/alingse/asasalint v0.0.11 // indirect
github.com/apparentlymart/go-cidr v1.1.0 // indirect
github.com/apparentlymart/go-cidr v1.0.1 // indirect
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
github.com/ashanbrown/forbidigo v1.6.0 // indirect
github.com/ashanbrown/makezero v1.1.1 // indirect
github.com/atotto/clipboard v0.1.4 // indirect
github.com/aws/aws-sdk-go-v2 v1.30.5 // indirect
github.com/aws/aws-sdk-go-v2 v1.30.3 // indirect
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3 // indirect
github.com/aws/aws-sdk-go-v2/config v1.27.33 // indirect
github.com/aws/aws-sdk-go-v2/credentials v1.17.32 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.13 // indirect
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.10 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
github.com/aws/aws-sdk-go-v2/config v1.27.27 // indirect
github.com/aws/aws-sdk-go-v2/credentials v1.17.27 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 // indirect
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.8 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.15 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.17 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.19 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15 // indirect
github.com/aws/aws-sdk-go-v2/service/kms v1.35.7 // indirect
github.com/aws/aws-sdk-go-v2/service/s3 v1.58.3 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.22.7 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.7 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.30.7 // indirect
github.com/aws/smithy-go v1.20.4 // indirect
github.com/aws/aws-sdk-go-v2/service/kms v1.30.1 // indirect
github.com/aws/aws-sdk-go-v2/service/s3 v1.58.2 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 // indirect
github.com/aws/smithy-go v1.20.3 // indirect
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
github.com/aymerick/douceur v0.2.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
@@ -129,45 +124,47 @@ require (
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/charithe/durationcheck v0.0.10 // indirect
github.com/charmbracelet/bubbles v0.20.0 // indirect
github.com/charmbracelet/bubbletea v1.1.0 // 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/glamour v0.6.0 // indirect
github.com/charmbracelet/lipgloss v0.13.0 // indirect
github.com/charmbracelet/x/ansi v0.2.3 // indirect
github.com/charmbracelet/x/term v0.2.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/chavacava/garif v0.1.0 // indirect
github.com/cheggaaa/pb v1.0.29 // indirect
github.com/ckaznocha/intrange v0.1.2 // indirect
github.com/cloudflare/circl v1.4.0 // indirect
github.com/compose-spec/compose-go/v2 v2.4.1 // indirect
github.com/cloudflare/circl v1.6.1 // indirect
github.com/compose-spec/compose-go/v2 v2.4.8 // indirect
github.com/containerd/console v1.0.4 // indirect
github.com/containerd/containerd v1.7.24 // indirect
github.com/containerd/containerd/api v1.7.19 // indirect
github.com/containerd/containerd/api v1.8.0 // indirect
github.com/containerd/containerd/v2 v2.0.3 // indirect
github.com/containerd/continuity v0.4.5 // indirect
github.com/containerd/errdefs v0.3.0 // indirect
github.com/containerd/errdefs v1.0.0 // indirect
github.com/containerd/errdefs/pkg v0.3.0 // indirect
github.com/containerd/log v0.1.0 // indirect
github.com/containerd/platforms v0.2.1 // indirect
github.com/containerd/ttrpc v1.2.5 // indirect
github.com/containerd/platforms v1.0.0-rc.1 // indirect
github.com/containerd/ttrpc v1.2.7 // indirect
github.com/containerd/typeurl/v2 v2.2.3 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect
github.com/curioswitch/go-reassign v0.2.0 // indirect
github.com/cyphar/filepath-securejoin v0.3.6 // indirect
github.com/cyphar/filepath-securejoin v0.4.1 // indirect
github.com/daixiang0/gci v0.13.4 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/deckarep/golang-set/v2 v2.6.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/deckarep/golang-set/v2 v2.5.0 // indirect
github.com/denis-tingaikin/go-header v0.5.0 // indirect
github.com/djherbis/times v1.6.0 // indirect
github.com/dlclark/regexp2 v1.11.0 // indirect
github.com/docker/cli-docs-tool v0.8.0 // indirect
github.com/docker/cli-docs-tool v0.9.0 // indirect
github.com/docker/distribution v2.8.3+incompatible // indirect
github.com/docker/docker-credential-helpers v0.8.2 // indirect
github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c // indirect
github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-metrics v0.0.1 // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/edsrzf/mmap-go v1.1.0 // indirect
github.com/edsrzf/mmap-go v1.2.0 // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
github.com/emirpasic/gods v1.18.1 // indirect
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
@@ -177,21 +174,22 @@ require (
github.com/fatih/structtag v1.2.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/firefart/nonamedreturns v1.0.5 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/fvbommel/sortorder v1.1.0 // indirect
github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/fvbommel/sortorder v1.0.1 // indirect
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
github.com/fzipp/gocyclo v0.6.0 // indirect
github.com/ghostiam/protogetter v0.3.6 // indirect
github.com/go-critic/go-critic v0.11.4 // indirect
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
github.com/go-git/go-billy/v5 v5.6.1 // indirect
github.com/go-git/go-git/v5 v5.13.1 // indirect
github.com/go-jose/go-jose/v4 v4.0.4 // 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/go-jose/go-jose/v3 v3.0.4 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-openapi/jsonpointer v0.19.6 // indirect
github.com/go-openapi/jsonreference v0.20.2 // indirect
github.com/go-openapi/swag v0.22.3 // indirect
github.com/go-openapi/swag v0.22.4 // indirect
github.com/go-toolsmith/astcast v1.1.0 // indirect
github.com/go-toolsmith/astcopy v1.1.0 // indirect
github.com/go-toolsmith/astequal v1.2.0 // indirect
@@ -204,11 +202,11 @@ require (
github.com/gobwas/glob v0.2.3 // indirect
github.com/godbus/dbus/v5 v5.1.0 // indirect
github.com/gofrs/flock v0.12.1 // indirect
github.com/gofrs/uuid v4.4.0+incompatible // indirect
github.com/gofrs/uuid v4.2.0+incompatible // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang-jwt/jwt/v5 v5.2.1 // indirect
github.com/golang/glog v1.2.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang-jwt/jwt/v5 v5.2.2 // indirect
github.com/golang/glog v1.2.4 // indirect
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a // indirect
github.com/golangci/gofmt v0.0.0-20231018234816-f50ced29576e // indirect
@@ -218,16 +216,16 @@ require (
github.com/golangci/revgrep v0.5.3 // indirect
github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed // indirect
github.com/google/gnostic-models v0.6.8 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/go-cmp v0.7.0 // indirect
github.com/google/go-querystring v1.1.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 // indirect
github.com/google/s2a-go v0.1.8 // indirect
github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af // indirect
github.com/google/s2a-go v0.1.7 // indirect
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/google/wire v0.6.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect
github.com/googleapis/gax-go/v2 v2.13.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
github.com/googleapis/gax-go/v2 v2.12.2 // indirect
github.com/gordonklaus/ineffassign v0.1.0 // indirect
github.com/gorilla/css v1.0.0 // indirect
github.com/gorilla/mux v1.8.1 // indirect
@@ -236,11 +234,11 @@ require (
github.com/gostaticanalysis/comment v1.4.2 // indirect
github.com/gostaticanalysis/forcetypeassert v0.1.0 // indirect
github.com/gostaticanalysis/nilerr v0.1.1 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1 // indirect
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-cty-funcs v0.0.0-20230405223818-a090f58aa992 // indirect
github.com/hashicorp/go-cty-funcs v0.0.0-20241120183456-c51673e0b3dd // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
@@ -249,14 +247,15 @@ require (
github.com/hashicorp/go-sockaddr v1.0.6 // indirect
github.com/hashicorp/go-version v1.7.0 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/hashicorp/hcl/v2 v2.22.0 // indirect
github.com/hashicorp/vault/api v1.14.0 // indirect
github.com/hashicorp/hcl/v2 v2.23.0 // indirect
github.com/hashicorp/vault/api v1.12.0 // indirect
github.com/hexops/gotextdiff v1.0.3 // indirect
github.com/iancoleman/strcase v0.3.0 // indirect
github.com/ijc/Gotty v0.0.0-20170406111628-a8b993ba6abd // indirect
github.com/imdario/mergo v0.3.16 // indirect
github.com/in-toto/in-toto-golang v0.5.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/iwdgo/sigintwindows v0.2.2 // indirect
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
github.com/jgautheron/goconst v1.7.1 // indirect
github.com/jingyugao/rowserrcheck v1.1.1 // indirect
@@ -298,7 +297,6 @@ require (
github.com/mgechev/revive v1.3.7 // indirect
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
github.com/microcosm-cc/bluemonday v1.0.21 // indirect
github.com/miekg/pkcs11 v1.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/go-ps v1.0.0 // indirect
@@ -308,21 +306,21 @@ require (
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/moby/docker-image-spec v1.3.1 // indirect
github.com/moby/locker v1.0.1 // indirect
github.com/moby/moby v26.1.0+incompatible // indirect
github.com/moby/spdystream v0.2.0 // indirect
github.com/moby/moby v26.1.5+incompatible // indirect
github.com/moby/spdystream v0.4.0 // indirect
github.com/moby/sys/mountinfo v0.7.2 // indirect
github.com/moby/sys/sequential v0.6.0 // indirect
github.com/moby/sys/signal v0.7.1 // indirect
github.com/moby/sys/user v0.3.0 // indirect
github.com/moby/sys/userns v0.1.0 // indirect
github.com/moby/term v0.5.0 // indirect
github.com/moby/term v0.5.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/moricho/tparallel v0.3.1 // indirect
github.com/morikuni/aec v1.0.0 // indirect
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
github.com/muesli/cancelreader v0.2.2 // indirect
github.com/muesli/termenv v0.15.2 // indirect
github.com/muesli/termenv v0.16.0 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
github.com/nakabonne/nestif v0.3.1 // indirect
@@ -338,26 +336,26 @@ require (
github.com/opentracing/basictracer-go v1.1.0 // indirect
github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/pelletier/go-toml v1.9.5 // indirect
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
github.com/petar-dambovaliev/aho-corasick v0.0.0-20230725210150-fb29fc3c913e // indirect
github.com/pgavlin/diff v0.0.0-20230503175810-113847418e2e // indirect
github.com/pgavlin/fx v0.1.6 // indirect
github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386 // indirect
github.com/pgavlin/text v0.0.0-20240821195002-b51d0990e284 // indirect
github.com/pjbgf/sha1cd v0.3.0 // indirect
github.com/pjbgf/sha1cd v0.3.2 // indirect
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pkg/term v1.1.0 // indirect
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/polyfloyd/go-errorlint v1.5.2 // indirect
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
github.com/prometheus/client_golang v1.20.2 // indirect
github.com/prometheus/client_golang v1.20.5 // indirect
github.com/prometheus/client_model v0.6.1 // indirect
github.com/prometheus/common v0.55.0 // indirect
github.com/prometheus/procfs v0.15.1 // indirect
github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect
github.com/pulumi/esc v0.10.0 // indirect
github.com/pulumi/esc v0.13.0 // indirect
github.com/pulumi/inflector v0.2.1 // indirect
github.com/quasilyte/go-ruleguard v0.4.2 // indirect
github.com/quasilyte/go-ruleguard/dsl v0.3.22 // indirect
@@ -365,7 +363,7 @@ require (
github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 // indirect
github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/rogpeppe/go-internal v1.12.0 // indirect
github.com/rogpeppe/go-internal v1.14.1 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/ryancurrah/gomodguard v1.3.2 // indirect
github.com/ryanrolds/sqlclosecheck v0.5.1 // indirect
@@ -378,7 +376,7 @@ require (
github.com/secure-systems-lab/go-securesystemslib v0.4.0 // indirect
github.com/securego/gosec/v2 v2.20.1-0.20240525090044-5f0084eb01a9 // indirect
github.com/segmentio/asm v1.2.0 // indirect
github.com/segmentio/encoding v0.4.0 // indirect
github.com/segmentio/encoding v0.4.1 // indirect
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
github.com/serialx/hashring v0.0.0-20200727003509-22c0c7ab6b1b // indirect
github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c // indirect
@@ -389,14 +387,14 @@ require (
github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546 // indirect
github.com/sivchari/containedctx v1.0.3 // indirect
github.com/sivchari/tenv v1.7.1 // indirect
github.com/skeema/knownhosts v1.3.0 // indirect
github.com/skeema/knownhosts v1.3.1 // indirect
github.com/sonatard/noctx v0.0.2 // indirect
github.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 // indirect
github.com/sourcegraph/go-diff v0.7.0 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/spf13/cobra v1.8.1 // indirect
github.com/spf13/cobra v1.9.1 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/pflag v1.0.6 // indirect
github.com/spf13/viper v1.12.0 // indirect
github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect
github.com/stbenjam/no-sprintf-host-port v0.1.1 // indirect
@@ -413,7 +411,7 @@ require (
github.com/tomarrell/wrapcheck/v2 v2.8.3 // indirect
github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect
github.com/tonistiigi/dchapes-mode v0.0.0-20241001053921-ca0759fec205 // indirect
github.com/tonistiigi/go-csvvalue v0.0.0-20240710180619-ddb21b71c0b4 // indirect
github.com/tonistiigi/jaeger-ui-rest v0.0.0-20250211190051-7d4944a45bb6 // indirect
github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea // indirect
github.com/tonistiigi/vt100 v0.0.0-20240514184818-90bafcd6abab // indirect
github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
@@ -422,72 +420,75 @@ require (
github.com/ultraware/funlen v0.1.0 // indirect
github.com/ultraware/whitespace v0.1.1 // indirect
github.com/uudashr/gocognit v1.1.2 // indirect
github.com/x448/float16 v0.8.4 // indirect
github.com/xanzy/ssh-agent v0.3.3 // indirect
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
github.com/xen0n/gosmopolitan v1.2.2 // indirect
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
github.com/yagipy/maintidx v1.0.0 // indirect
github.com/yeya24/promlinter v0.3.0 // indirect
github.com/ykadowak/zerologlint v0.1.5 // indirect
github.com/yuin/goldmark v1.5.2 // indirect
github.com/yuin/goldmark-emoji v1.0.1 // indirect
github.com/yusufpapurcu/wmi v1.2.4 // indirect
github.com/zclconf/go-cty v1.15.0 // indirect
github.com/zclconf/go-cty v1.16.2 // indirect
gitlab.com/bosi/decorder v0.4.2 // indirect
go-simpler.org/musttag v0.12.2 // indirect
go-simpler.org/sloglint v0.7.1 // indirect
go.opencensus.io v0.24.0 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.54.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect
go.opentelemetry.io/otel v1.29.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.29.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.29.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0 // indirect
go.opentelemetry.io/otel/sdk/metric v1.29.0 // indirect
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.56.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 // indirect
go.opentelemetry.io/otel v1.35.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.31.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.31.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0 // indirect
go.opentelemetry.io/otel/sdk/metric v1.34.0 // indirect
go.opentelemetry.io/proto/otlp v1.5.0 // indirect
go.pennock.tech/tabular v1.1.3 // indirect
go.uber.org/atomic v1.11.0 // indirect
go.uber.org/automaxprocs v1.5.3 // indirect
go.uber.org/automaxprocs v1.6.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
gocloud.dev v0.39.0 // indirect
gocloud.dev/secrets/hashivault v0.39.0 // indirect
gocloud.dev v0.37.0 // indirect
gocloud.dev/secrets/hashivault v0.37.0 // indirect
golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f // indirect
golang.org/x/mod v0.21.0 // indirect
golang.org/x/net v0.33.0 // indirect
golang.org/x/oauth2 v0.23.0 // indirect
golang.org/x/sync v0.10.0 // indirect
golang.org/x/sys v0.28.0 // indirect
golang.org/x/term v0.27.0 // indirect
golang.org/x/text v0.21.0 // indirect
golang.org/x/mod v0.24.0 // indirect
golang.org/x/net v0.40.0 // indirect
golang.org/x/oauth2 v0.25.0 // indirect
golang.org/x/sync v0.14.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/term v0.32.0 // indirect
golang.org/x/text v0.25.0 // indirect
golang.org/x/time v0.6.0 // indirect
golang.org/x/tools v0.25.0 // indirect
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
google.golang.org/api v0.196.0 // indirect
google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
google.golang.org/grpc v1.67.1 // indirect
golang.org/x/tools v0.32.0 // indirect
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
google.golang.org/api v0.169.0 // indirect
google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250414145226-207652e42e2e // indirect
google.golang.org/grpc v1.71.1 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
honnef.co/go/tools v0.4.7 // indirect
k8s.io/api v0.29.2 // indirect
k8s.io/apimachinery v0.29.2 // indirect
k8s.io/client-go v0.29.2 // indirect
k8s.io/klog/v2 v2.110.1 // indirect
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
lukechampine.com/frand v1.4.2 // indirect
k8s.io/api v0.31.2 // indirect
k8s.io/apimachinery v0.31.2 // indirect
k8s.io/client-go v0.31.2 // indirect
k8s.io/klog/v2 v2.130.1 // indirect
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect
lukechampine.com/frand v1.5.1 // indirect
mvdan.cc/gofumpt v0.6.0 // indirect
mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
sigs.k8s.io/yaml v1.4.0 // indirect
)

758
go.sum

File diff suppressed because it is too large Load Diff

View File

@@ -159,12 +159,7 @@
"scope": {
"type": "string",
"description": "The scope to use for cache keys. Defaults to `buildkit`.\n\nThis should be set if building and caching multiple images in one\nworkflow, otherwise caches will overwrite each other.",
"default": "",
"defaultInfo": {
"environment": [
"buildkit"
]
}
"default": "buildkit"
},
"token": {
"type": "string",
@@ -389,12 +384,7 @@
"scope": {
"type": "string",
"description": "The scope to use for cache keys. Defaults to `buildkit`.\n\nThis should be set if building and caching multiple images in one\nworkflow, otherwise caches will overwrite each other.",
"default": "",
"defaultInfo": {
"environment": [
"buildkit"
]
}
"default": "buildkit"
},
"token": {
"type": "string",

View File

@@ -157,7 +157,7 @@ type CacheFromGitHubActions struct {
func (c *CacheFromGitHubActions) Annotate(a infer.Annotator) {
a.SetDefault(&c.URL, "", "ACTIONS_CACHE_URL")
a.SetDefault(&c.Token, "", "ACTIONS_RUNTIME_TOKEN")
a.SetDefault(&c.Scope, "", "buildkit")
a.SetDefault(&c.Scope, "buildkit")
a.Describe(&c.URL, dedent(`
The cache server URL to use for artifacts.
@@ -468,12 +468,27 @@ func (c CacheFrom) validate(preview bool) (*controllerapi.CacheOptionsEntry, err
return nil, err
}
if len(parsed) == 0 {
// This can happen for example if we have a GHA cache but no GitHub
// environment variables set.
// Shouldn't happen...
// This can happen for example if we have a GHA cache configuration but no GitHub
// environment variables set. Ignore the cacheFrom entry in this case.
return nil, nil
}
return parsed[0], nil
pb := parsed[0].ToPB()
if !isActive(pb) {
pb = nil
}
return pb, nil
}
// isActive checks if the GitHub token is set in the cache entry.
// If it is not a GHA cache entry, it will return true.
// This is to maintain backwards compatibility with the old buildx behaviour.
func isActive(ci *controllerapi.CacheOptionsEntry) bool {
if ci.Type != "gha" {
return true
}
return ci.Attrs["token"] != "" && (ci.Attrs["url"] != "" || ci.Attrs["url_v2"] != "")
}
// CacheToInline embeds cache information directly into an image.
@@ -677,12 +692,17 @@ func (c CacheTo) validate(preview bool) (*controllerapi.CacheOptionsEntry, error
return nil, err
}
if len(parsed) == 0 {
// This can happen for example if we have a GHA cache but no GitHub
// environment variables set.
// Shouldn't happen...
// This can happen for example if we have a GHA cache configuration but no GitHub
// environment variables set. Ignore the cacheTo entry in this case.
return nil, nil
}
return parsed[0], nil
pb := parsed[0].ToPB()
if !isActive(pb) {
pb = nil
}
return pb, nil
}
// CacheMode controls the complexity of exported cache manifests.

View File

@@ -122,7 +122,6 @@ func TestCacheString(t *testing.T) {
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()

View File

@@ -25,6 +25,7 @@ import (
"fmt"
"io"
"os"
"os/exec"
"path/filepath"
"strings"
@@ -56,11 +57,11 @@ type cli struct {
auths map[string]cfgtypes.AuthConfig
host *host
in string // stdin
r, w *os.File // stdout
err bytes.Buffer // stderr
dumplogs bool // if true then tail() will re-log status messages
done chan struct{} // signaled when all logs have been forwarded to the engine.
in string // stdin
r, w *os.File // stdout
err bytes.Buffer // stderr
dumplogs bool // if true then tail() will re-log status messages
builder Builder // for mocking build daemon responses
}
// Cli wraps the Docker interface for mock generation.
@@ -119,11 +120,12 @@ func wrap(host *host, registries ...Registry) (*cli, error) {
}
wrapped := &cli{
Cli: docker,
host: host,
auths: auths,
r: r,
w: w,
Cli: docker,
host: host,
auths: auths,
r: r,
w: w,
builder: defaultBuilder{},
}
return wrapped, nil
@@ -162,14 +164,6 @@ func (c *cli) rc() *regclient.RegClient {
// tail is meant to be called as a goroutine and will pipe output from the CLI
// back to the Pulumi engine. Requires a corresponding call to close.
func (c *cli) tail(ctx context.Context) {
c.done = make(chan struct{}, 1)
defer func() {
c.done <- struct{}{}
if err := recover(); err != nil {
fmt.Fprintf(os.Stderr, "recovered: %s\n", err)
}
}()
b := bytes.Buffer{}
s := bufio.NewScanner(c.r)
@@ -193,17 +187,13 @@ func (c *cli) tail(ctx context.Context) {
// close flushes any outstanding logs and cleans up resources.
func (c *cli) Close() error {
err := errors.Join(c.w.Close(), c.r.Close())
if c.done != nil {
<-c.done
}
return err
return errors.Join(c.w.Close(), c.r.Close())
}
// execBuild performs a build by os.Exec'ing the docker-buildx binary.
// Credentials are communicated to docker-buildx via a temporary directory.
// Secrets are communicated via dynamic environment variables.
func (c *cli) execBuild(b Build) (*client.SolveResponse, error) {
func (c *cli) execBuild(ctx context.Context, b Build) (*client.SolveResponse, error) {
// Setup a temporary directory for auth, and clean it up when we're done.
tmp, err := os.MkdirTemp("", "pulumi-docker-")
if err != nil {
@@ -213,7 +203,7 @@ func (c *cli) execBuild(b Build) (*client.SolveResponse, error) {
opts := b.BuildOptions()
builder, err := c.host.builderFor(b)
builder, err := c.host.builderFor(ctx, b)
if err != nil {
return nil, err
}
@@ -339,7 +329,7 @@ func (c *cli) execBuild(b Build) (*client.SolveResponse, error) {
}
// Invoke docker-buildx.
err = c.exec(args, env)
err = c.exec(ctx, args, env)
if err != nil {
return nil, err
}
@@ -378,7 +368,7 @@ func (c *cli) execBuild(b Build) (*client.SolveResponse, error) {
// exec invokes a Docker plugin binary. The first argument should be the name
// of the plugin's subcommand, e.g. "buildx".
func (c *cli) exec(args, extraEnv []string) error {
func (c *cli) exec(ctx context.Context, args, extraEnv []string) error {
if len(args) == 0 {
return errors.New("args must be non-empty")
}
@@ -395,16 +385,18 @@ func (c *cli) exec(args, extraEnv []string) error {
defer contract.IgnoreClose(c.w)
cmd, err := manager.PluginRunCommand(c, name, root)
runCmd, err := manager.PluginRunCommand(c, name, root)
if err != nil {
return err
}
cmd.Args = append([]string{cmd.Args[0]}, args...)
// Create a new command that inherits from ctx.
cmd := exec.CommandContext(ctx, //nolint:gosec // We take the first argument and binary from runCmd.
runCmd.Path, append([]string{runCmd.Args[1]}, args...)...,
)
cmd.Stderr = c.Err()
cmd.Stdout = c.Out()
cmd.Stdin = c.In()
cmd.Env = append(cmd.Env, extraEnv...)
cmd.Env = append(runCmd.Env, extraEnv...) //nolint:gocritic // We are intentionally assigning from runCmd to cmd
return cmd.Run()
}

View File

@@ -28,12 +28,12 @@ import (
func TestExec(t *testing.T) {
t.Parallel()
h, err := newHost(context.Background(), nil)
h, err := newHost(t.Context(), nil)
require.NoError(t, err)
cli, err := wrap(h)
require.NoError(t, err)
err = cli.exec([]string{"buildx", "version"}, nil)
err = cli.exec(t.Context(), []string{"buildx", "version"}, nil)
assert.NoError(t, err)
out, err := io.ReadAll(cli.r)

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
//go:generate go run go.uber.org/mock/mockgen -typed -package internal -source client.go -destination mockclient_test.go --self_package github.com/pulumi/pulumi-docker-build/provider/internal
//go:generate go run go.uber.org/mock/mockgen -typed -package internal -source client.go -destination mockclient_test.go --self_package github.com/pulumi/pulumi-docker-build/provider/internal -imports buildx=github.com/docker/buildx/build
package internal
@@ -26,6 +26,7 @@ import (
"github.com/distribution/reference"
buildx "github.com/docker/buildx/build"
"github.com/docker/buildx/builder"
"github.com/docker/buildx/commands"
controllerapi "github.com/docker/buildx/controller/pb"
"github.com/docker/buildx/util/confutil"
@@ -62,6 +63,36 @@ type Client interface {
SupportsMultipleExports() bool
}
// registryGetter is something that can return a list of [Registry].
type registryGetter interface {
GetRegistries() []Registry
}
// clientF builds a Docker client. The order of registryGetters is significant.
// We typically prefer credentials from args, then provider config, then the
// host. Provide them to this function in order of increasing priority: host,
// config, args.
//
// We ignore state because if its creds differ from those in args then they are
// likely volatile and also likely expired.
type clientF func(context.Context, *host, ...registryGetter) (Client, error)
// RealClientF builds a real Docker client with auth layered on top of the
// host's latent credentials.
func RealClientF(_ context.Context, host *host, getters ...registryGetter) (Client, error) {
auths := []Registry{}
for _, rg := range getters {
auths = append(auths, rg.GetRegistries()...)
}
return wrap(host, auths...)
}
func mockClientF(c Client) clientF {
return func(context.Context, *host, ...registryGetter) (Client, error) {
return c, nil
}
}
// Build encapsulates all of the user-provider build parameters and options.
type Build interface {
BuildOptions() controllerapi.BuildOptions
@@ -106,10 +137,10 @@ func (c *cli) Build(
defer contract.IgnoreClose(c)
if build.ShouldExec() {
return c.execBuild(build)
return c.execBuild(ctx, build)
}
b, err := c.host.builderFor(build)
b, err := c.host.builderFor(ctx, build)
if err != nil {
return nil, err
}
@@ -123,9 +154,15 @@ func (c *cli) Build(
if err != nil {
return nil, fmt.Errorf("creating printer: %w", err)
}
defer func() {
// Log any warnings when we're done.
_ = printer.Wait()
// Wait for logs to flush if the build finished, but not if we're
// exiting early.
if ctx.Err() == nil {
_ = printer.Wait()
}
// Log any warnings we got, separated by newlines.
for _, w := range printer.Warnings() {
b := &bytes.Buffer{}
_, _ = b.Write(w.Short)
@@ -218,27 +255,46 @@ func (c *cli) Build(
Session: []session.Attachable{
ssh,
authprovider.NewDockerAuthProvider(c.ConfigFile(), nil),
authprovider.NewDockerAuthProvider(authprovider.DockerAuthProviderConfig{ConfigFile: c.ConfigFile()}),
build.Secrets(),
},
},
}
// Perform the build.
results, err := buildx.Build(
ctx,
b.nodes,
payload,
dockerutil.NewClient(c),
confutil.NewConfig(c),
printer,
)
if err != nil {
resultC := make(chan map[string]*client.SolveResponse)
errC := make(chan error)
// buildx.Build doesn't handle context cancellation, so we monitor it in a
// goroutine. cli.Close cleans up our file descriptors, so if we do exit
// early the remote build should terminate as soon as it sees the pipe has
// broken.
go func() {
defer close(resultC)
defer close(errC)
results, err := c.builder.Build(
ctx,
b.nodes,
payload,
dockerutil.NewClient(c),
confutil.NewConfig(c),
printer,
)
if err != nil {
errC <- err
return
}
resultC <- results
}()
select {
case results := <-resultC:
return results[target], nil
case err := <-errC:
c.dumplogs = true
return nil, err
case <-ctx.Done():
return nil, ctx.Err()
}
return results[target], err
}
// BuildKitEnabled returns true if the client supports buildkit.
@@ -354,6 +410,31 @@ func (c *cli) Delete(ctx context.Context, r string) error {
return nil
}
// Builder allows injecting mock responses from the build daemon.
type Builder interface {
Build(
ctx context.Context,
nodes []builder.Node,
opts map[string]buildx.Options,
docker *dockerutil.Client,
cfg *confutil.Config,
w progress.Writer,
) (resp map[string]*client.SolveResponse, err error)
}
type defaultBuilder struct{}
func (defaultBuilder) Build(
ctx context.Context,
nodes []builder.Node,
opts map[string]buildx.Options,
docker *dockerutil.Client,
cfg *confutil.Config,
w progress.Writer,
) (resp map[string]*client.SolveResponse, err error) {
return buildx.Build(ctx, nodes, opts, docker, cfg, w)
}
func normalizeReference(ref string) (reference.Named, error) {
namedRef, err := reference.ParseNormalizedNamed(ref)
if err != nil {

View File

@@ -17,15 +17,23 @@ package internal
import (
"bytes"
"context"
"errors"
"io"
"log/slog"
"os"
"path/filepath"
"testing"
buildx "github.com/docker/buildx/build"
"github.com/docker/buildx/builder"
"github.com/docker/buildx/util/confutil"
"github.com/docker/buildx/util/dockerutil"
"github.com/docker/buildx/util/progress"
"github.com/docker/docker/api/types/registry"
"github.com/moby/buildkit/client"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.uber.org/mock/gomock"
)
func TestAuth(t *testing.T) {
@@ -263,7 +271,6 @@ func TestBuild(t *testing.T) {
// Add an exec: true version for all of our test cases.
for _, tt := range tests {
tt := tt
tt.name = "exec-" + tt.name
tt.args.Exec = true
tmpdir := filepath.Join(t.TempDir(), "exec")
@@ -281,7 +288,6 @@ func TestBuild(t *testing.T) {
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.skip {
@@ -341,7 +347,6 @@ func TestNormalizeReference(t *testing.T) {
}
for _, tt := range tests {
tt := tt
t.Run(tt.ref, func(t *testing.T) {
t.Parallel()
ref, err := normalizeReference(tt.ref)
@@ -435,6 +440,35 @@ func TestBuildExecError(t *testing.T) {
}
}
func TestBuildCancelation(t *testing.T) {
t.Parallel()
cli := testcli(t, true)
ctrl := gomock.NewController(t)
ctx, cancel := context.WithCancel(context.Background())
b := NewMockBuilder(ctrl)
b.EXPECT().Build(
gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(),
).DoAndReturn(func(
_ context.Context,
_ []builder.Node,
_ map[string]buildx.Options,
_ *dockerutil.Client,
_ *confutil.Config,
_ progress.Writer,
) (map[string]*client.SolveResponse, error) {
cancel()
return nil, errors.New("cancel wasn't respected")
})
cli.builder = b
resp, err := cli.Build(ctx, &build{})
assert.ErrorIs(t, err, context.Canceled)
assert.Nil(t, resp)
}
// testcli returns a new standalone CLI instance. Set ping to true if a live
// daemon is required -- the test will be skipped if the daemon is not available.
func testcli(t *testing.T, ping bool, auths ...Registry) *cli {

View File

@@ -99,7 +99,6 @@ func TestValidateContext(t *testing.T) {
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
@@ -407,7 +406,6 @@ func TestDockerIgnore(t *testing.T) {
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
fs := afero.NewMemMapFs()

View File

@@ -41,7 +41,6 @@ can be accessed like environment variables inside the ` + "`RUN`\n" + `instructi
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
actual := dedent(tt.given)

View File

@@ -128,8 +128,6 @@ func TestConfigEncoding(t *testing.T) {
t.Run("turnaround", func(t *testing.T) {
for i, tc := range turnaroundTestCases {
tc := tc
t.Run(strconv.Itoa(i), func(t *testing.T) {
t.Parallel()
checkUnmarshal(t, tc)
@@ -172,8 +170,6 @@ func TestConfigEncoding(t *testing.T) {
},
}
for _, tc := range cases {
tc := tc
t.Run(fmt.Sprintf("%v", tc.ty), func(t *testing.T) {
t.Parallel()
checkUnmarshal(t, tc)
@@ -185,8 +181,6 @@ func TestConfigEncoding(t *testing.T) {
unk := resource.MakeComputed(resource.NewStringProperty(""))
for i, tc := range turnaroundTestCases {
tc := tc
t.Run(strconv.Itoa(i), func(t *testing.T) {
t.Parallel()
// Unknown sentinel unmarshals to a Computed with a type-appropriate zero value.
@@ -219,8 +213,6 @@ func TestConfigEncoding(t *testing.T) {
}
for i, tc := range secretCases {
tc := tc
t.Run(strconv.Itoa(i), func(t *testing.T) {
t.Parallel()
checkUnmarshal(t, tc)
@@ -264,7 +256,6 @@ func TestConfigEncoding(t *testing.T) {
t.Run("regress-unmarshal", func(t *testing.T) {
for i, tc := range regressUnmarshalTestCases {
tc := tc
t.Run(strconv.Itoa(i), func(t *testing.T) {
t.Parallel()
checkUnmarshal(t, tc)

View File

@@ -105,7 +105,6 @@ COPY --parents ./package.json ./package-lock.json ./apps/*/package.json ./packag
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()

View File

@@ -22,7 +22,8 @@ import (
"strings"
controllerapi "github.com/docker/buildx/controller/pb"
"github.com/docker/buildx/util/buildflags"
"github.com/moby/buildkit/client"
"github.com/tonistiigi/go-csvvalue"
"github.com/pulumi/pulumi-go-provider/infer"
)
@@ -109,7 +110,7 @@ func (e Export) String() string {
// pushed returns true if the export would result in a registry push.
func (e Export) pushed() bool {
if e.Raw != "" {
exp, err := buildflags.ParseExports([]string{e.Raw.String()})
exp, err := parseExports([]string{e.Raw.String()})
if err != nil {
return false
}
@@ -124,14 +125,86 @@ func (e Export) pushed() bool {
return false
}
// parseExports is forked from docker/buildx@v0.18.0 from util/buildflags/export.go
// to maintain the old logic. This is to get a working version of the provider with
// the latest buildx while maintaining the old behaviour.
//
// TODO: Remove this fork and update existing logic/tests.
func parseExports(inp []string) ([]*controllerapi.ExportEntry, error) {
if len(inp) == 0 {
return nil, nil
}
outs := make([]*controllerapi.ExportEntry, 0, len(inp))
for _, s := range inp {
fields, err := csvvalue.Fields(s, nil)
if err != nil {
return nil, err
}
out := controllerapi.ExportEntry{
Attrs: map[string]string{},
}
if len(fields) == 1 && fields[0] == s && !strings.HasPrefix(s, "type=") {
if s != "-" {
outs = append(outs, &controllerapi.ExportEntry{
Type: client.ExporterLocal,
Destination: s,
})
continue
}
out = controllerapi.ExportEntry{
Type: client.ExporterTar,
Destination: s,
}
}
if out.Type == "" {
for _, field := range fields {
parts := strings.SplitN(field, "=", 2)
if len(parts) != 2 {
return nil, fmt.Errorf("invalid value %s", field)
}
key := strings.TrimSpace(strings.ToLower(parts[0]))
value := parts[1]
switch key {
case "type":
out.Type = value
default:
out.Attrs[key] = value
}
}
}
if out.Type == "" {
return nil, errors.New("type is required for output")
}
if out.Type == "registry" {
out.Type = client.ExporterImage
if _, ok := out.Attrs["push"]; !ok {
out.Attrs["push"] = "true"
}
}
if dest, ok := out.Attrs["dest"]; ok {
out.Destination = dest
delete(out.Attrs, "dest")
}
outs = append(outs, &out)
}
return outs, nil
}
func (e Export) validate(preview bool, tags []string) (*controllerapi.ExportEntry, error) {
if strings.Count(e.String(), "type=") > 1 {
return nil, errors.New("exports should only specify one export type")
}
ee, err := buildflags.ParseExports([]string{e.String()})
ee, err := parseExports([]string{e.String()})
if err != nil {
return nil, err
}
exp := ee[0]
if len(tags) == 0 && isRegistryPush(exp) && exp.Attrs["name"] == "" {
return nil, errors.New(

View File

@@ -74,7 +74,6 @@ func TestValidateExport(t *testing.T) {
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
e, err := tt.e.validate(tt.preview, tt.givenTags)
@@ -181,7 +180,6 @@ func TestExportString(t *testing.T) {
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
actual := tt.given.String()
@@ -236,7 +234,6 @@ func TestExportPushed(t *testing.T) {
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
actual := tt.e.pushed()

View File

@@ -68,7 +68,7 @@ func newHost(ctx context.Context, config *Config) (*host, error) {
//
// If the build doesn't specify a builder by name, we will iterate through all
// available builders until we find one that we can connect to.
func (h *host) builderFor(build Build) (*cachedBuilder, error) {
func (h *host) builderFor(ctx context.Context, build Build) (*cachedBuilder, error) {
h.mu.Lock()
defer h.mu.Unlock()
@@ -116,7 +116,7 @@ func (h *host) builderFor(build Build) (*cachedBuilder, error) {
if bb.Err() != nil {
continue
}
nodes, err := bb.LoadNodes(context.Background())
nodes, err := bb.LoadNodes(ctx)
if err != nil {
continue
}
@@ -125,7 +125,7 @@ func (h *host) builderFor(build Build) (*cachedBuilder, error) {
if n.Driver == nil {
continue nextbuilder
}
if _, err := n.Driver.Dial(context.Background()); err != nil {
if _, err := n.Driver.Dial(ctx); err != nil {
continue nextbuilder
}
// TODO: Confirm the builder supports the requested platforms.
@@ -139,7 +139,7 @@ func (h *host) builderFor(build Build) (*cachedBuilder, error) {
// If we STILL don't have a builder, create a docker-container instance.
b, err = builder.Create(
context.Background(),
ctx,
txn,
h.cli,
builder.CreateOpts{Driver: "docker-container"},
@@ -147,7 +147,7 @@ func (h *host) builderFor(build Build) (*cachedBuilder, error) {
if err != nil {
return nil, fmt.Errorf("creating builder: %w", err)
}
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
defer cancel()
if _, err := b.Boot(ctx); err != nil {
return nil, fmt.Errorf("booting builder: %w", err)
@@ -157,7 +157,7 @@ func (h *host) builderFor(build Build) (*cachedBuilder, error) {
// Attempt to load nodes in order to determine the builder's driver. Ignore
// errors for "exec" builds because it's possible to request builders with
// drivers that are unknown to us.
nodes, err := b.LoadNodes(context.Background(), builder.WithData())
nodes, err := b.LoadNodes(ctx, builder.WithData())
if err != nil && !build.ShouldExec() {
return nil, fmt.Errorf("loading nodes: %w", err)
}

View File

@@ -38,7 +38,7 @@ import (
provider "github.com/pulumi/pulumi-go-provider"
"github.com/pulumi/pulumi-go-provider/infer"
"github.com/pulumi/pulumi/sdk/v3/go/common/resource"
"github.com/pulumi/pulumi/sdk/v3/go/property"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
@@ -61,7 +61,10 @@ var _imageExamples string
var _migration string
// Image is a Docker image build using buildkit.
type Image struct{}
type Image struct {
clientF clientF
config *Config
}
// Annotate provides a description of the Image resource.
func (i *Image) Annotate(a infer.Annotator) {
@@ -281,6 +284,11 @@ func (ia *ImageArgs) Annotate(a infer.Annotator) {
a.SetDefault(&ia.Network, Default)
}
// GetRegistries returns the image's registries, if any.
func (ia ImageArgs) GetRegistries() []Registry {
return ia.Registries
}
// ImageState is serialized to the program's state file.
type ImageState struct {
ImageArgs
@@ -329,38 +337,25 @@ func (is *ImageState) Annotate(a infer.Annotator) {
// client produces a CLI client scoped to this resource and layered on top of
// any host-level credentials.
func (i *Image) client(ctx context.Context, state ImageState, args ImageArgs) (Client, error) {
cfg := infer.GetConfig[Config](ctx)
if cli, ok := ctx.Value(_mockClientKey).(Client); ok {
return cli, nil
}
// We prefer auth from args, the provider, and state in that order. We
// build a slice in reverse order because wrap() will overwrite earlier
// entries with later ones.
auths := []Registry{}
auths = append(auths, cfg.Registries...)
auths = append(auths, args.Registries...)
return wrap(cfg.host, auths...)
func (i *Image) client(ctx context.Context, args ImageArgs) (Client, error) {
return i.clientF(ctx, i.config.getHost(), i.config, args)
}
// Check validates ImageArgs, sets defaults, and ensures our client is
// authenticated.
func (i *Image) Check(
ctx context.Context,
_ string,
_ resource.PropertyMap,
news resource.PropertyMap,
) (ImageArgs, []provider.CheckFailure, error) {
args, failures, err := infer.DefaultCheck[ImageArgs](ctx, news)
req infer.CheckRequest,
) (infer.CheckResponse[ImageArgs], error) {
args, failures, err := infer.DefaultCheck[ImageArgs](ctx, req.NewInputs)
if err != nil || len(failures) != 0 {
return args, failures, err
return infer.CheckResponse[ImageArgs]{Failures: failures, Inputs: args}, err
}
// :(
preview := news.ContainsUnknowns()
// If the inputs aren't fully resolved we perform a weaker validation, for
// example we might not be able to check the Dockerfile for syntactic
// correctness.
preview := property.New(req.NewInputs).HasComputed()
cfg := infer.GetConfig[Config](ctx)
supportsMultipleExports := true
@@ -376,7 +371,7 @@ func (i *Image) Check(
}
}
return args, failures, err
return infer.CheckResponse[ImageArgs]{Failures: failures, Inputs: args}, err
}
type checkFailure struct {
@@ -576,7 +571,9 @@ func (ia *ImageArgs) validate(supportsMultipleExports, preview bool) (controller
multierr = errors.Join(multierr, newCheckFailure(err, "exports[%d]", idx))
continue
}
exports = append(exports, exp)
if exp != nil {
exports = append(exports, exp)
}
}
platforms := []string{}
@@ -586,7 +583,9 @@ func (ia *ImageArgs) validate(supportsMultipleExports, preview bool) (controller
multierr = errors.Join(multierr, newCheckFailure(err, "platforms[%d]", idx))
continue
}
platforms = append(platforms, platform)
if platform != "" {
platforms = append(platforms, platform)
}
}
cacheFrom := []*controllerapi.CacheOptionsEntry{}
@@ -599,7 +598,9 @@ func (ia *ImageArgs) validate(supportsMultipleExports, preview bool) (controller
multierr = errors.Join(multierr, newCheckFailure(err, "cacheFrom[%d]", idx))
continue
}
cacheFrom = append(cacheFrom, cache)
if cache != nil {
cacheFrom = append(cacheFrom, cache)
}
}
cacheTo := []*controllerapi.CacheOptionsEntry{}
@@ -612,7 +613,9 @@ func (ia *ImageArgs) validate(supportsMultipleExports, preview bool) (controller
multierr = errors.Join(multierr, newCheckFailure(err, "cacheTo[%d]", idx))
continue
}
cacheTo = append(cacheTo, cache)
if cache != nil {
cacheTo = append(cacheTo, cache)
}
}
ssh := []*controllerapi.SSH{}
@@ -622,7 +625,9 @@ func (ia *ImageArgs) validate(supportsMultipleExports, preview bool) (controller
multierr = errors.Join(multierr, newCheckFailure(err, "ssh[%d]", idx))
continue
}
ssh = append(ssh, ss)
if ss != nil {
ssh = append(ssh, ss)
}
}
for idx, t := range normalized.Tags {
@@ -673,12 +678,11 @@ func (ia *ImageArgs) validate(supportsMultipleExports, preview bool) (controller
// Create builds an image using buildkit.
func (i *Image) Create(
ctx context.Context,
name string,
input ImageArgs,
preview bool,
) (string, ImageState, error) {
req infer.CreateRequest[ImageArgs],
) (infer.CreateResponse[ImageState], error) {
input := req.Inputs
state := ImageState{ImageArgs: input}
id := name
id := req.Name
// Default our ref to one of our tags.
for _, tag := range state.Tags {
@@ -689,22 +693,31 @@ func (i *Image) Create(
break
}
cli, err := i.client(ctx, state, input)
cli, err := i.client(ctx, input)
if err != nil {
return id, state, err
return infer.CreateResponse[ImageState]{ID: id, Output: state}, err
}
ok, err := cli.BuildKitEnabled()
if err != nil {
return id, state, fmt.Errorf("checking buildkit compatibility: %w", err)
return infer.CreateResponse[ImageState]{
ID: id,
Output: state,
}, fmt.Errorf("checking buildkit compatibility: %w", err)
}
if !ok {
return id, state, errors.New("buildkit is not supported on this host")
return infer.CreateResponse[ImageState]{
ID: id,
Output: state,
}, errors.New("buildkit is not supported on this host")
}
build, err := input.toBuild(ctx, cli.SupportsMultipleExports(), preview)
build, err := input.toBuild(ctx, cli.SupportsMultipleExports(), req.DryRun)
if err != nil {
return id, state, fmt.Errorf("preparing: %w", err)
return infer.CreateResponse[ImageState]{
ID: id,
Output: state,
}, fmt.Errorf("preparing: %w", err)
}
hash, err := hashBuildContext(
@@ -713,21 +726,24 @@ func (i *Image) Create(
input.Context.Named.Map(),
)
if err != nil {
return id, state, fmt.Errorf("hashing build context: %w", err)
return infer.CreateResponse[ImageState]{
ID: id,
Output: state,
}, fmt.Errorf("hashing build context: %w", err)
}
state.ContextHash = hash
if preview && !input.shouldBuildOnPreview() {
return id, state, nil
if req.DryRun && !input.shouldBuildOnPreview() {
return infer.CreateResponse[ImageState]{ID: id, Output: state}, nil
}
if preview && !input.buildable() {
if req.DryRun && !input.buildable() {
provider.GetLogger(ctx).Warning("Skipping preview build because some inputs are unknown.")
return id, state, nil
return infer.CreateResponse[ImageState]{ID: id, Output: state}, nil
}
result, err := cli.Build(ctx, build)
if err != nil {
return id, state, err
return infer.CreateResponse[ImageState]{ID: id, Output: state}, err
}
if d, ok := result.ExporterResponse[exptypes.ExporterImageDigestKey]; ok {
@@ -737,7 +753,7 @@ func (i *Image) Create(
if state.Digest == "" {
// Can't construct a ref, nothing else to do.
return id, state, nil
return infer.CreateResponse[ImageState]{ID: id, Output: state}, nil
}
// Take the first registry tag we find and add a digest to it. That becomes
@@ -752,7 +768,7 @@ func (i *Image) Create(
break
}
return id, state, nil
return infer.CreateResponse[ImageState]{ID: id, Output: state}, nil
}
// Update builds a new image. Normally we create-replace resources, but for
@@ -760,36 +776,41 @@ func (i *Image) Create(
// updates and simply re-build the image without deleting anything.
func (i *Image) Update(
ctx context.Context,
name string,
_ ImageState,
input ImageArgs,
preview bool,
) (ImageState, error) {
_, state, err := i.Create(ctx, name, input, preview)
return state, err
req infer.UpdateRequest[ImageArgs, ImageState],
) (infer.UpdateResponse[ImageState], error) {
resp, err := i.Create(ctx,
infer.CreateRequest[ImageArgs]{Name: req.ID, Inputs: req.Inputs, DryRun: req.DryRun},
)
return infer.UpdateResponse[ImageState]{Output: resp.Output}, err
}
// Read attempts to read manifests from an image's exports. An image without
// exports will have no manifests.
func (i *Image) Read(
ctx context.Context,
name string,
input ImageArgs,
state ImageState,
req infer.ReadRequest[ImageArgs, ImageState],
) (
string, // id
ImageArgs, // normalized inputs
ImageState, // normalized state
infer.ReadResponse[ImageArgs, ImageState],
error,
) {
cli, err := i.client(ctx, state, input)
state, input := req.State, req.Inputs
cli, err := i.client(ctx, input)
if err != nil {
return name, input, state, err
return infer.ReadResponse[ImageArgs, ImageState]{
ID: req.ID,
Inputs: input,
State: state,
}, err
}
if !state.isExported() {
// Nothing was pushed -- all done.
return name, input, state, nil
return infer.ReadResponse[ImageArgs, ImageState]{
ID: req.ID,
Inputs: input,
State: state,
}, nil
}
tagsToKeep := []string{}
@@ -825,29 +846,29 @@ func (i *Image) Read(
// If we couldn't find the tags we expected then return an empty ID to
// delete the resource.
if len(input.Tags) > 0 && len(tagsToKeep) == 0 {
return "", input, state, nil
return infer.ReadResponse[ImageArgs, ImageState]{ID: "", Inputs: input, State: state}, nil
}
state.Tags = tagsToKeep
return name, input, state, nil
return infer.ReadResponse[ImageArgs, ImageState]{ID: req.ID, Inputs: input, State: state}, nil
}
// Delete deletes an Image. If the Image was already deleted out-of-band it is
// treated as a success.
func (i *Image) Delete(
ctx context.Context,
_ string,
state ImageState,
) error {
cli, err := i.client(ctx, state, state.ImageArgs)
req infer.DeleteRequest[ImageState],
) (infer.DeleteResponse, error) {
state := req.State
cli, err := i.client(ctx, state.ImageArgs)
if err != nil {
return err
return infer.DeleteResponse{}, err
}
if state.Digest == "" {
// Nothing was exported. Just try to delete the local image.
return cli.Delete(ctx, state.Ref)
return infer.DeleteResponse{}, cli.Delete(ctx, state.Ref)
}
digests := []string{}
@@ -875,17 +896,17 @@ func (i *Image) Delete(
multierr = errors.Join(multierr, err)
}
return multierr
return infer.DeleteResponse{}, multierr
}
// Diff re-implements most of the default diff behavior, with the exception of
// ignoring "password" changes on registry inputs.
func (*Image) Diff(
_ context.Context,
_ string,
olds ImageState,
news ImageArgs,
req infer.DiffRequest[ImageArgs, ImageState],
) (provider.DiffResponse, error) {
olds, news := req.State, req.Inputs
diff := map[string]provider.PropertyDiff{}
update := provider.PropertyDiff{Kind: provider.Update}

View File

@@ -25,6 +25,7 @@ import (
_ "github.com/docker/buildx/driver/docker-container"
"github.com/distribution/reference"
pb "github.com/docker/buildx/controller/pb"
"github.com/moby/buildkit/client"
"github.com/moby/buildkit/exporter/containerimage/exptypes"
"github.com/regclient/regclient/types/descriptor"
@@ -34,9 +35,11 @@ import (
"go.uber.org/mock/gomock"
provider "github.com/pulumi/pulumi-go-provider"
"github.com/pulumi/pulumi-go-provider/infer"
"github.com/pulumi/pulumi-go-provider/integration"
"github.com/pulumi/pulumi/sdk/v3/go/common/resource"
"github.com/pulumi/pulumi/sdk/v3/go/common/util/mapper"
"github.com/pulumi/pulumi/sdk/v3/go/property"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
@@ -83,46 +86,44 @@ func TestImageLifecycle(t *testing.T) {
},
op: func(t *testing.T) integration.Operation {
return integration.Operation{
Inputs: resource.PropertyMap{
"push": resource.NewBoolProperty(false),
"tags": resource.NewArrayProperty(
[]resource.PropertyValue{
resource.NewStringProperty("docker.io/pulumibot/buildkit-e2e"),
resource.NewStringProperty("docker.io/pulumibot/buildkit-e2e:main"),
Inputs: property.NewMap(map[string]property.Value{
"push": property.New(false),
"tags": property.New(
[]property.Value{
property.New("docker.io/pulumibot/buildkit-e2e"),
property.New("docker.io/pulumibot/buildkit-e2e:main"),
},
),
"platforms": resource.NewArrayProperty(
[]resource.PropertyValue{
resource.NewStringProperty("linux/arm64"),
resource.NewStringProperty("linux/amd64"),
"platforms": property.New(
[]property.Value{
property.New("linux/arm64"),
property.New("linux/amd64"),
},
),
"context": resource.NewObjectProperty(resource.PropertyMap{
"location": resource.NewStringProperty("testdata/noop"),
"context": property.New(map[string]property.Value{
"location": property.New("testdata/noop"),
}),
"dockerfile": resource.NewObjectProperty(resource.PropertyMap{
"location": resource.NewStringProperty("testdata/noop/Dockerfile"),
"dockerfile": property.New(map[string]property.Value{
"location": property.New("testdata/noop/Dockerfile"),
}),
"exports": resource.NewArrayProperty(
[]resource.PropertyValue{
resource.NewObjectProperty(resource.PropertyMap{
"raw": resource.NewStringProperty("type=registry"),
"exports": property.New(
[]property.Value{
property.New(map[string]property.Value{
"raw": property.New("type=registry"),
},
),
},
),
"registries": resource.NewArrayProperty(
[]resource.PropertyValue{
resource.NewObjectProperty(resource.PropertyMap{
"address": resource.NewStringProperty("fakeaddress"),
"username": resource.NewStringProperty("fakeuser"),
"password": resource.MakeSecret(
resource.NewStringProperty("password"),
),
"registries": property.New(
[]property.Value{
property.New(map[string]property.Value{
"address": property.New("fakeaddress"),
"username": property.New("fakeuser"),
"password": property.New("password").WithSecret(true),
}),
},
),
},
}),
}
},
},
@@ -131,20 +132,20 @@ func TestImageLifecycle(t *testing.T) {
client: noClient,
op: func(t *testing.T) integration.Operation {
return integration.Operation{
Inputs: resource.PropertyMap{
"push": resource.NewBoolProperty(false),
"tags": resource.NewArrayProperty([]resource.PropertyValue{}),
"context": resource.NewObjectProperty(resource.PropertyMap{
"location": resource.NewStringProperty("testdata/noop"),
Inputs: property.NewMap(map[string]property.Value{
"push": property.New(false),
"tags": property.New([]property.Value{}),
"context": property.New(map[string]property.Value{
"location": property.New("testdata/noop"),
}),
"exports": resource.NewArrayProperty(
[]resource.PropertyValue{
resource.NewObjectProperty(resource.PropertyMap{
"raw": resource.NewStringProperty("type=registry"),
"exports": property.New(
[]property.Value{
property.New(map[string]property.Value{
"raw": property.New("type=registry"),
}),
},
),
},
}),
ExpectFailure: true,
CheckFailures: []provider.CheckFailure{
{
@@ -160,19 +161,19 @@ func TestImageLifecycle(t *testing.T) {
client: noClient,
op: func(t *testing.T) integration.Operation {
return integration.Operation{
Inputs: resource.PropertyMap{
"push": resource.NewBoolProperty(false),
"tags": resource.NewArrayProperty(
[]resource.PropertyValue{resource.NewStringProperty("invalid-exports")},
Inputs: property.NewMap(map[string]property.Value{
"push": property.New(false),
"tags": property.New(
[]property.Value{property.New("invalid-exports")},
),
"exports": resource.NewArrayProperty(
[]resource.PropertyValue{
resource.NewObjectProperty(resource.PropertyMap{
"raw": resource.NewStringProperty("type="),
"exports": property.New(
[]property.Value{
property.New(map[string]property.Value{
"raw": property.New("type="),
}),
},
),
},
}),
ExpectFailure: true,
CheckFailures: []provider.CheckFailure{{
Property: "exports[0]",
@@ -193,15 +194,15 @@ func TestImageLifecycle(t *testing.T) {
},
op: func(t *testing.T) integration.Operation {
return integration.Operation{
Inputs: resource.PropertyMap{
"push": resource.NewBoolProperty(false),
"tags": resource.NewArrayProperty(
[]resource.PropertyValue{resource.NewStringProperty("foo")},
Inputs: property.NewMap(map[string]property.Value{
"push": property.New(false),
"tags": property.New(
[]property.Value{property.New("foo")},
),
"context": resource.NewObjectProperty(resource.PropertyMap{
"location": resource.NewStringProperty("testdata/noop"),
"context": property.New(map[string]property.Value{
"location": property.New("testdata/noop"),
}),
},
}),
ExpectFailure: true,
}
},
@@ -220,15 +221,15 @@ func TestImageLifecycle(t *testing.T) {
},
op: func(t *testing.T) integration.Operation {
return integration.Operation{
Inputs: resource.PropertyMap{
"push": resource.NewBoolProperty(false),
"tags": resource.NewArrayProperty(
[]resource.PropertyValue{resource.NewStringProperty("foo")},
Inputs: property.NewMap(map[string]property.Value{
"push": property.New(false),
"tags": property.New(
[]property.Value{property.New("foo")},
),
"context": resource.NewObjectProperty(resource.PropertyMap{
"location": resource.NewStringProperty("testdata/noop"),
"context": property.New(map[string]property.Value{
"location": property.New("testdata/noop"),
}),
},
}),
ExpectFailure: true,
}
},
@@ -253,24 +254,24 @@ func TestImageLifecycle(t *testing.T) {
},
op: func(t *testing.T) integration.Operation {
return integration.Operation{
Inputs: resource.PropertyMap{
"push": resource.NewBoolProperty(false),
"tags": resource.NewArrayProperty(
[]resource.PropertyValue{
resource.NewStringProperty("default-dockerfile"),
Inputs: property.NewMap(map[string]property.Value{
"push": property.New(false),
"tags": property.New(
[]property.Value{
property.New("default-dockerfile"),
},
),
"context": resource.NewObjectProperty(resource.PropertyMap{
"location": resource.NewStringProperty("testdata/noop"),
"context": property.New(map[string]property.Value{
"location": property.New("testdata/noop"),
}),
},
Hook: func(_, output resource.PropertyMap) {
dockerfile := output["dockerfile"]
}),
Hook: func(_, output property.Map) {
dockerfile := output.Get("dockerfile")
require.NotNil(t, dockerfile)
require.True(t, dockerfile.IsObject())
location := dockerfile.ObjectValue()["location"]
require.True(t, dockerfile.IsMap())
location := dockerfile.AsMap().Get("location")
require.True(t, location.IsString())
assert.Equal(t, "testdata/noop/Dockerfile", location.StringValue())
assert.Equal(t, "testdata/noop/Dockerfile", location.AsString())
},
}
},
@@ -295,25 +296,25 @@ func TestImageLifecycle(t *testing.T) {
},
op: func(t *testing.T) integration.Operation {
return integration.Operation{
Inputs: resource.PropertyMap{
"push": resource.NewBoolProperty(false),
"tags": resource.NewArrayProperty(
[]resource.PropertyValue{
resource.NewStringProperty("inline-dockerfile"),
Inputs: property.NewMap(map[string]property.Value{
"push": property.New(false),
"tags": property.New(
[]property.Value{
property.New("inline-dockerfile"),
},
),
"buildOnPreview": resource.NewBoolProperty(true),
"dockerfile": resource.NewObjectProperty(resource.PropertyMap{
"inline": resource.NewStringProperty("FROM alpine:latest"),
"buildOnPreview": property.New(true),
"dockerfile": property.New(map[string]property.Value{
"inline": property.New("FROM alpine:latest"),
}),
},
Hook: func(_, output resource.PropertyMap) {
context := output["context"]
}),
Hook: func(_, output property.Map) {
context := output.Get("context")
require.NotNil(t, context)
require.True(t, context.IsObject())
location := context.ObjectValue()["location"]
require.True(t, context.IsMap())
location := context.AsMap().Get("location")
require.True(t, location.IsString())
assert.Equal(t, ".", location.StringValue())
assert.Equal(t, ".", location.AsString())
},
}
},
@@ -321,14 +322,13 @@ func TestImageLifecycle(t *testing.T) {
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
lc := integration.LifeCycleTest{
Resource: "docker-build:index:Image",
Create: tt.op(t),
}
s := newServer(tt.client(t))
s := newServer(t.Context(), t, mockClientF(tt.client(t)))
err := s.Configure(provider.ConfigureRequest{})
require.NoError(t, err)
@@ -353,21 +353,16 @@ func TestDelete(t *testing.T) {
Delete(gomock.Any(), "docker.io/pulumi/test@sha256:foo").
Return(errNotFound{})
s := newServer(client)
err := s.Configure(provider.ConfigureRequest{})
require.NoError(t, err)
i := &Image{clientF: mockClientF(client)}
err = s.Delete(provider.DeleteRequest{
ID: "foo,bar",
Urn: _fakeURN,
Properties: resource.PropertyMap{
"tags": resource.NewArrayProperty([]resource.PropertyValue{
resource.NewStringProperty("docker.io/pulumi/test:foo"),
}),
"push": resource.NewBoolProperty(true),
"digest": resource.NewStringProperty("sha256:foo"),
"contextHash": resource.NewStringProperty(""),
"ref": resource.NewStringProperty(""),
_, err := i.Delete(t.Context(), infer.DeleteRequest[ImageState]{
ID: "foo,bar",
State: ImageState{
ImageArgs: ImageArgs{
Tags: []string{"docker.io/pulumi/test:foo"},
Push: true,
},
Digest: "sha256:foo",
},
})
assert.NoError(t, err)
@@ -391,27 +386,21 @@ func TestRead(t *testing.T) {
},
}, nil)
s := newServer(client)
err := s.Configure(provider.ConfigureRequest{})
require.NoError(t, err)
i := &Image{clientF: mockClientF(client)}
resp, err := s.Read(provider.ReadRequest{
ID: "my-image",
Urn: _fakeURN,
Properties: resource.PropertyMap{
"exports": resource.NewArrayProperty([]resource.PropertyValue{
resource.NewObjectProperty(resource.PropertyMap{
"raw": resource.NewStringProperty("type=registry"),
}),
}),
"tags": resource.NewArrayProperty([]resource.PropertyValue{
resource.NewStringProperty(tag),
}),
"digest": resource.NewStringProperty(digest),
resp, err := i.Read(t.Context(), infer.ReadRequest[ImageArgs, ImageState]{
ID: "my-image",
State: ImageState{
ImageArgs: ImageArgs{
Exports: []Export{{Raw: "type=registry"}},
Tags: []string{tag},
},
Digest: digest,
},
})
require.NoError(t, err)
assert.NotNil(t, resp.Properties["exports"].ArrayValue()[0].ObjectValue()["manifest"])
assert.Equal(t, []string{tag}, resp.State.Tags)
}
func TestImageDiff(t *testing.T) {
@@ -432,21 +421,21 @@ func TestImageDiff(t *testing.T) {
}
tests := []struct {
name string
olds func(*testing.T, ImageState) ImageState
news func(*testing.T, ImageArgs) ImageArgs
name string
state func(*testing.T, ImageState) ImageState
inputs func(*testing.T, ImageArgs) ImageArgs
wantChanges bool
}{
{
name: "no diff if build context is unchanged",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(*testing.T, ImageArgs) ImageArgs { return baseArgs },
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(*testing.T, ImageArgs) ImageArgs { return baseArgs },
wantChanges: false,
},
{
name: "no diff if registry password changes",
olds: func(_ *testing.T, s ImageState) ImageState {
state: func(_ *testing.T, s ImageState) ImageState {
s.Registries = []Registry{{
Address: "foo",
Username: "foo",
@@ -454,7 +443,7 @@ func TestImageDiff(t *testing.T) {
}}
return s
},
news: func(_ *testing.T, a ImageArgs) ImageArgs {
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.Registries = []Registry{{
Address: "foo",
Username: "foo",
@@ -466,11 +455,11 @@ func TestImageDiff(t *testing.T) {
},
{
name: "no diff if pull=true but no exports",
olds: func(_ *testing.T, is ImageState) ImageState {
state: func(_ *testing.T, is ImageState) ImageState {
is.Pull = true
return is
},
news: func(t *testing.T, ia ImageArgs) ImageArgs {
inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
ia.Pull = true
return ia
},
@@ -478,12 +467,12 @@ func TestImageDiff(t *testing.T) {
},
{
name: "diff if pull=true with exports",
olds: func(_ *testing.T, is ImageState) ImageState {
state: func(_ *testing.T, is ImageState) ImageState {
is.Pull = true
is.Load = true
return is
},
news: func(t *testing.T, ia ImageArgs) ImageArgs {
inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
ia.Pull = true
ia.Load = true
return ia
@@ -491,9 +480,9 @@ func TestImageDiff(t *testing.T) {
wantChanges: true,
},
{
name: "diff if build context changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(t *testing.T, a ImageArgs) ImageArgs {
name: "diff if build context changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(t *testing.T, a ImageArgs) ImageArgs {
tmp := filepath.Join(a.Context.Location, "tmp")
err := os.WriteFile(tmp, []byte{}, 0o600)
require.NoError(t, err)
@@ -503,9 +492,9 @@ func TestImageDiff(t *testing.T) {
wantChanges: true,
},
{
name: "diff if registry added",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if registry added",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.Registries = []Registry{{}}
return a
},
@@ -513,7 +502,7 @@ func TestImageDiff(t *testing.T) {
},
{
name: "diff if registry user changes",
olds: func(_ *testing.T, s ImageState) ImageState {
state: func(_ *testing.T, s ImageState) ImageState {
s.Registries = []Registry{{
Address: "foo",
Username: "foo",
@@ -521,7 +510,7 @@ func TestImageDiff(t *testing.T) {
}}
return s
},
news: func(_ *testing.T, a ImageArgs) ImageArgs {
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.Registries = []Registry{{
Address: "DIFFERENT USER",
Username: "foo",
@@ -532,9 +521,9 @@ func TestImageDiff(t *testing.T) {
wantChanges: true,
},
{
name: "diff if buildArgs changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if buildArgs changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.BuildArgs = map[string]string{
"foo": "bar",
}
@@ -543,36 +532,36 @@ func TestImageDiff(t *testing.T) {
wantChanges: true,
},
{
name: "diff if pull changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(t *testing.T, ia ImageArgs) ImageArgs {
name: "diff if pull changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
ia.Pull = true
return ia
},
wantChanges: true,
},
{
name: "diff if load changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(t *testing.T, ia ImageArgs) ImageArgs {
name: "diff if load changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
ia.Load = true
return ia
},
wantChanges: true,
},
{
name: "diff if push changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(t *testing.T, ia ImageArgs) ImageArgs {
name: "diff if push changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
ia.Push = true
return ia
},
wantChanges: true,
},
{
name: "diff if buildOnPreview doesn't change",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(t *testing.T, ia ImageArgs) ImageArgs {
name: "diff if buildOnPreview doesn't change",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
val := true
ia.BuildOnPreview = &val
return ia
@@ -580,9 +569,9 @@ func TestImageDiff(t *testing.T) {
wantChanges: true,
},
{
name: "diff if buildOnPreview changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(t *testing.T, ia ImageArgs) ImageArgs {
name: "diff if buildOnPreview changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
val := false
ia.BuildOnPreview = &val
return ia
@@ -590,171 +579,171 @@ func TestImageDiff(t *testing.T) {
wantChanges: true,
},
{
name: "diff if ssh changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(t *testing.T, ia ImageArgs) ImageArgs {
name: "diff if ssh changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
ia.SSH = []SSH{{ID: "default"}}
return ia
},
wantChanges: true,
},
{
name: "diff if hosts change",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(t *testing.T, ia ImageArgs) ImageArgs {
name: "diff if hosts change",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(t *testing.T, ia ImageArgs) ImageArgs {
ia.AddHosts = []string{"localhost"}
return ia
},
wantChanges: true,
},
{
name: "diff if cacheFrom changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if cacheFrom changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.CacheFrom = []CacheFrom{{Raw: "a"}}
return a
},
wantChanges: true,
},
{
name: "diff if cacheTo changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if cacheTo changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.CacheTo = []CacheTo{{Raw: "a"}}
return a
},
wantChanges: true,
},
{
name: "diff if context changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if context changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.Context = &BuildContext{Context: Context{Location: "testdata/ignores"}}
return a
},
wantChanges: true,
},
{
name: "diff if named context changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if named context changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.Context = &BuildContext{Named: NamedContexts{"foo": Context{Location: "bar"}}}
return a
},
wantChanges: true,
},
{
name: "diff if network changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if network changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.Network = &host
return a
},
wantChanges: true,
},
{
name: "diff if dockerfile location changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if dockerfile location changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.Dockerfile = &Dockerfile{Location: "testdata/ignores/basedir/Dockerfile"}
return a
},
wantChanges: true,
},
{
name: "diff if dockerfile inline changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if dockerfile inline changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.Dockerfile = &Dockerfile{Inline: "FROM scratch"}
return a
},
wantChanges: true,
},
{
name: "diff if platforms change",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if platforms change",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.Platforms = []Platform{"linux/amd64"}
return a
},
wantChanges: true,
},
{
name: "diff if pull changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if pull changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.Pull = true
return a
},
wantChanges: true,
},
{
name: "diff if builder changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if builder changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.Builder = &BuilderConfig{Name: "foo"}
return a
},
wantChanges: true,
},
{
name: "diff if tags change",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if tags change",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.Tags = []string{"foo"}
return a
},
wantChanges: true,
},
{
name: "diff if exports change",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if exports change",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.Exports = []Export{{Raw: "foo"}}
return a
},
wantChanges: true,
},
{
name: "diff if target changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if target changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.Target = "foo"
return a
},
wantChanges: true,
},
{
name: "diff if pulling",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if pulling",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.Pull = true
return a
},
wantChanges: true,
},
{
name: "diff if noCache changes",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if noCache changes",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.NoCache = true
return a
},
wantChanges: true,
},
{
name: "diff if labels change",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if labels change",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.Labels = map[string]string{"foo": "bar"}
return a
},
wantChanges: true,
},
{
name: "diff if secrets change",
olds: func(*testing.T, ImageState) ImageState { return baseState },
news: func(_ *testing.T, a ImageArgs) ImageArgs {
name: "diff if secrets change",
state: func(*testing.T, ImageState) ImageState { return baseState },
inputs: func(_ *testing.T, a ImageArgs) ImageArgs {
a.Secrets = map[string]string{"foo": "bar"}
return a
},
@@ -762,13 +751,13 @@ func TestImageDiff(t *testing.T) {
},
{
name: "diff if local export doesn't exist",
olds: func(t *testing.T, state ImageState) ImageState {
state: func(t *testing.T, state ImageState) ImageState {
state.Exports = []Export{
{Local: &ExportLocal{Dest: "not-real"}},
}
return state
},
news: func(_ *testing.T, args ImageArgs) ImageArgs {
inputs: func(_ *testing.T, args ImageArgs) ImageArgs {
args.Exports = []Export{
{Local: &ExportLocal{Dest: "not-real"}},
}
@@ -778,13 +767,13 @@ func TestImageDiff(t *testing.T) {
},
{
name: "diff if tar export doesn't exist",
olds: func(t *testing.T, state ImageState) ImageState {
state: func(t *testing.T, state ImageState) ImageState {
state.Exports = []Export{
{Tar: &ExportTar{ExportLocal: ExportLocal{Dest: "not-real"}}},
}
return state
},
news: func(_ *testing.T, args ImageArgs) ImageArgs {
inputs: func(_ *testing.T, args ImageArgs) ImageArgs {
args.Exports = []Export{
{Tar: &ExportTar{ExportLocal: ExportLocal{Dest: "not-real"}}},
}
@@ -794,24 +783,23 @@ func TestImageDiff(t *testing.T) {
},
}
s := newServer(nil)
s := newServer(t.Context(), t, nil)
encode := func(t *testing.T, x any) resource.PropertyMap {
encode := func(t *testing.T, x any) property.Map {
raw, err := mapper.New(&mapper.Opts{IgnoreMissing: true}).Encode(x)
require.NoError(t, err)
return resource.NewPropertyMapFromMap(raw)
return resource.FromResourcePropertyMap(resource.NewPropertyMapFromMap(raw))
}
for _, tt := range tests {
tt := tt
baseState := baseState
baseArgs := baseArgs
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
resp, err := s.Diff(provider.DiffRequest{
Urn: _fakeURN,
Olds: encode(t, tt.olds(t, baseState)),
News: encode(t, tt.news(t, baseArgs)),
Urn: _fakeURN,
State: encode(t, tt.state(t, baseState)),
Inputs: encode(t, tt.inputs(t, baseArgs)),
})
assert.NoError(t, err)
assert.Equal(t, tt.wantChanges, resp.HasChanges, resp.DetailedDiff)
@@ -820,7 +808,6 @@ func TestImageDiff(t *testing.T) {
}
func TestValidateImageArgs(t *testing.T) {
t.Parallel()
t.Run("invalid inputs", func(t *testing.T) {
t.Parallel()
args := ImageArgs{
@@ -919,6 +906,85 @@ func TestValidateImageArgs(t *testing.T) {
assert.Len(t, opts.Exports, 0)
})
t.Run("environment variables", func(t *testing.T) {
tests := []struct {
name string
envs map[string]string
args ImageArgs
wantCacheFrom *pb.CacheOptionsEntry
wantCacheTo *pb.CacheOptionsEntry
}{
{
name: "gha environment",
envs: map[string]string{
"ACTIONS_CACHE_URL": "test-cache-url",
"ACTIONS_RUNTIME_TOKEN": "test-runtime-token",
},
args: ImageArgs{
Context: &BuildContext{Context: Context{Location: "testdata/noop"}},
CacheFrom: []CacheFrom{{GHA: &CacheFromGitHubActions{}}},
CacheTo: []CacheTo{{GHA: &CacheToGitHubActions{
CacheFromGitHubActions: CacheFromGitHubActions{},
}}},
},
wantCacheFrom: &pb.CacheOptionsEntry{
Type: "gha",
Attrs: map[string]string{
"token": "test-runtime-token",
"url": "test-cache-url",
},
},
wantCacheTo: &pb.CacheOptionsEntry{
Type: "gha",
Attrs: map[string]string{
"token": "test-runtime-token",
"url": "test-cache-url",
},
},
},
{
name: "non-gha environment",
envs: map[string]string{
"ACTIONS_CACHE_URL": "",
"ACTIONS_RUNTIME_TOKEN": "",
},
args: ImageArgs{
Context: &BuildContext{Context: Context{Location: "testdata/noop"}},
CacheFrom: []CacheFrom{{GHA: &CacheFromGitHubActions{}}},
CacheTo: []CacheTo{{GHA: &CacheToGitHubActions{
CacheFromGitHubActions: CacheFromGitHubActions{},
}}},
},
wantCacheFrom: nil,
wantCacheTo: nil,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
for k, v := range tt.envs {
t.Setenv(k, v)
}
validate := func(preview bool) {
opts, err := tt.args.validate(true, preview)
require.NoError(t, err)
if tt.wantCacheFrom != nil {
assert.Equal(t, tt.wantCacheFrom, opts.CacheFrom[0])
} else {
assert.Len(t, opts.CacheFrom, 0)
}
if tt.wantCacheTo != nil {
assert.Equal(t, tt.wantCacheTo, opts.CacheTo[0])
} else {
assert.Len(t, opts.CacheTo, 0)
}
}
validate(true)
validate(false)
})
}
})
t.Run("multiple exports pre-0.13", func(t *testing.T) {
t.Parallel()
args := ImageArgs{
@@ -950,7 +1016,6 @@ func TestValidateImageArgs(t *testing.T) {
for _, d := range []Dockerfile{
{Location: path}, {Inline: string(data)},
} {
d := d
args := ImageArgs{Dockerfile: &d}
_, err := args.validate(true, false)
assert.ErrorContains(t, err, "unknown instruction: RUNN (did you mean RUN?)")
@@ -1027,7 +1092,6 @@ func TestBuildable(t *testing.T) {
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
actual := tt.args.buildable()

View File

@@ -28,7 +28,6 @@ import (
provider "github.com/pulumi/pulumi-go-provider"
"github.com/pulumi/pulumi-go-provider/infer"
"github.com/pulumi/pulumi/sdk/v3/go/common/resource"
)
var (
@@ -47,7 +46,10 @@ var (
var _indexExamples string
// Index is an OCI index or manifest list on a remote registry.
type Index struct{}
type Index struct {
clientF clientF
config *Config
}
// IndexArgs instantiate an Index.
type IndexArgs struct {
@@ -64,6 +66,14 @@ func (i IndexArgs) isPushed() bool {
return *i.Push
}
// GetRegistries returns the index's registry.
func (i IndexArgs) GetRegistries() []Registry {
if i.Registry == nil {
return nil
}
return []Registry{*i.Registry}
}
// IndexState captures the state of an Index.
type IndexState struct {
IndexArgs
@@ -132,66 +142,82 @@ func (i *IndexState) Annotate(a infer.Annotator) {
// Create is a passthrough to Update.
func (i *Index) Create(
ctx context.Context,
name string,
input IndexArgs,
preview bool,
) (string, IndexState, error) {
state, err := i.Update(ctx, name, IndexState{}, input, preview)
return name, state, err
req infer.CreateRequest[IndexArgs],
) (infer.CreateResponse[IndexState], error) {
resp, err := i.Update(ctx,
infer.UpdateRequest[IndexArgs, IndexState]{
ID: req.Name,
State: IndexState{},
Inputs: req.Inputs,
DryRun: req.DryRun,
},
)
return infer.CreateResponse[IndexState]{ID: req.Name, Output: resp.Output}, err
}
// Update performs `buildx imagetools create` to create a new OCI index /
// manifest list.
func (i *Index) Update(
ctx context.Context,
name string,
state IndexState,
input IndexArgs,
preview bool,
) (IndexState, error) {
req infer.UpdateRequest[IndexArgs, IndexState],
) (infer.UpdateResponse[IndexState], error) {
state, input := req.State, req.Inputs
state.IndexArgs = input
state.Ref = input.Tag
cli, err := i.client(ctx, state, input)
cli, err := i.client(ctx, input)
if err != nil {
return state, err
return infer.UpdateResponse[IndexState]{Output: state}, err
}
if preview {
return state, nil
if req.DryRun {
return infer.UpdateResponse[IndexState]{Output: state}, nil
}
provider.GetLogger(ctx).Debugf("creating index with tag %s and sources %s", input.Tag, input.Sources)
provider.GetLogger(ctx).
Debugf("creating index with tag %s and sources %s", input.Tag, input.Sources)
err = cli.ManifestCreate(ctx, input.isPushed(), input.Tag, input.Sources...)
if err != nil {
return state, fmt.Errorf("creating: %w", err)
return infer.UpdateResponse[IndexState]{Output: state}, fmt.Errorf("creating: %w", err)
}
_, _, state, err = i.Read(ctx, name, input, state)
// Read remote manifest information, if it exists.
live, err := i.Read(ctx,
infer.ReadRequest[IndexArgs, IndexState]{ID: req.ID, Inputs: input, State: state},
)
if err != nil {
return state, fmt.Errorf("reading: %w", err)
return infer.UpdateResponse[IndexState]{Output: state}, fmt.Errorf("reading: %w", err)
}
return state, nil
return infer.UpdateResponse[IndexState]{Output: live.State}, nil
}
func (i *Index) Read(
ctx context.Context,
name string,
input IndexArgs,
state IndexState,
) (string, IndexArgs, IndexState, error) {
req infer.ReadRequest[IndexArgs, IndexState],
) (infer.ReadResponse[IndexArgs, IndexState], error) {
state, input := req.State, req.Inputs
state.IndexArgs = input
state.Ref = input.Tag
if !input.isPushed() {
provider.GetLogger(ctx).Debug("skipping read because index was not pushed")
return name, input, state, nil // Nothing to read.
return infer.ReadResponse[IndexArgs, IndexState]{
ID: req.ID,
Inputs: input,
State: state,
}, nil // Nothing to read.
}
cli, err := i.client(ctx, state, input)
cli, err := i.client(ctx, input)
if err != nil {
return name, input, state, err
return infer.ReadResponse[IndexArgs, IndexState]{
ID: req.ID,
Inputs: input,
State: state,
}, err
}
provider.GetLogger(ctx).Debug("reading index with tag " + input.Tag)
@@ -199,21 +225,29 @@ func (i *Index) Read(
digest, err := cli.ManifestInspect(ctx, input.Tag)
if errors.Is(err, errs.ErrNotFound) {
// A remote tag was expected but isn't there -- delete the resource.
return "", input, state, nil
return infer.ReadResponse[IndexArgs, IndexState]{ID: "", Inputs: input, State: state}, nil
}
if errors.Is(err, errs.ErrHTTPUnauthorized) {
provider.GetLogger(ctx).Warning("invalid credentials, skipping")
return name, input, state, nil
return infer.ReadResponse[IndexArgs, IndexState]{
ID: req.ID,
Inputs: input,
State: state,
}, nil
}
if err != nil {
return name, input, state, err
return infer.ReadResponse[IndexArgs, IndexState]{
ID: req.ID,
Inputs: input,
State: state,
}, err
}
if ref, ok := addDigest(input.Tag, digest); ok {
state.Ref = ref
}
return name, input, state, nil
return infer.ReadResponse[IndexArgs, IndexState]{ID: req.ID, Inputs: input, State: state}, nil
}
// Check confirms the Index's tag and source refs are all valid. This doesn't
@@ -222,13 +256,11 @@ func (i *Index) Read(
// cases for now.
func (i *Index) Check(
ctx context.Context,
_ string,
_ resource.PropertyMap,
news resource.PropertyMap,
) (IndexArgs, []provider.CheckFailure, error) {
args, failures, err := infer.DefaultCheck[IndexArgs](ctx, news)
req infer.CheckRequest,
) (infer.CheckResponse[IndexArgs], error) {
args, failures, err := infer.DefaultCheck[IndexArgs](ctx, req.NewInputs)
if err != nil {
return args, failures, err
return infer.CheckResponse[IndexArgs]{Failures: failures, Inputs: args}, err
}
if _, err := normalizeReference(args.Tag); args.Tag != "" && err != nil {
@@ -253,27 +285,31 @@ func (i *Index) Check(
}
}
return args, failures, nil
return infer.CheckResponse[IndexArgs]{Failures: failures, Inputs: args}, nil
}
// Delete attempts to delete the remote manifest.
func (i *Index) Delete(ctx context.Context, _ string, state IndexState) error {
func (i *Index) Delete(
ctx context.Context,
req infer.DeleteRequest[IndexState],
) (infer.DeleteResponse, error) {
state := req.State
if !state.isPushed() {
return nil // Nothing to delete.
return infer.DeleteResponse{}, nil // Nothing to delete.
}
cli, err := i.client(ctx, state, state.IndexArgs)
cli, err := i.client(ctx, state.IndexArgs)
if err != nil {
return err
return infer.DeleteResponse{}, err
}
err = cli.ManifestDelete(ctx, state.Ref)
// TODO: Upstream buildx swallows the error types we'd like to test for
// here.
if err != nil && strings.Contains(err.Error(), "No such manifest:") {
return nil
return infer.DeleteResponse{}, nil
}
return err
return infer.DeleteResponse{}, err
}
// Diff returns a diff of proposed changes against current state. Ideally we
@@ -282,10 +318,10 @@ func (i *Index) Delete(ctx context.Context, _ string, state IndexState) error {
// change all the time due to short-lived AWS credentials).
func (i *Index) Diff(
_ context.Context,
_ string,
olds IndexState,
news IndexArgs,
req infer.DiffRequest[IndexArgs, IndexState],
) (provider.DiffResponse, error) {
olds, news := req.State, req.Inputs
diff := map[string]provider.PropertyDiff{}
update := provider.PropertyDiff{Kind: provider.Update}
replace := provider.PropertyDiff{Kind: provider.UpdateReplace}
@@ -323,23 +359,7 @@ func (i *Index) Diff(
// any host-level credentials.
func (i *Index) client(
ctx context.Context,
_ IndexState,
args IndexArgs,
) (Client, error) {
cfg := infer.GetConfig[Config](ctx)
if cli, ok := ctx.Value(_mockClientKey).(Client); ok {
return cli, nil
}
// We prefer auth from args, the provider, and state in that order. We
// build a slice in reverse order because wrap() will overwrite earlier
// entries with later ones.
auths := []Registry{}
auths = append(auths, cfg.Registries...)
if args.Registry != nil {
auths = append(auths, *args.Registry)
}
return wrap(cfg.host, auths...)
return i.clientF(ctx, i.config.getHost(), i.config, args)
}

View File

@@ -27,34 +27,35 @@ import (
"github.com/pulumi/pulumi-go-provider/integration"
"github.com/pulumi/pulumi/sdk/v3/go/common/resource"
"github.com/pulumi/pulumi/sdk/v3/go/common/util/mapper"
"github.com/pulumi/pulumi/sdk/v3/go/property"
)
func TestIndexLifecycle(t *testing.T) {
t.Parallel()
realClient := func(t *testing.T) Client { return nil }
realClient := func(t *testing.T) clientF { return RealClientF }
tests := []struct {
name string
skip bool
op func(t *testing.T) integration.Operation
client func(t *testing.T) Client
client func(t *testing.T) clientF
}{
{
name: "not pushed",
client: realClient,
op: func(t *testing.T) integration.Operation {
return integration.Operation{
Inputs: resource.PropertyMap{
"tag": resource.NewStringProperty(
Inputs: property.NewMap(map[string]property.Value{
"tag": property.New(
"docker.io/pulumibot/buildkit-e2e:manifest-unit",
),
"sources": resource.NewArrayProperty([]resource.PropertyValue{
resource.NewStringProperty("docker.io/pulumibot/buildkit-e2e:arm64"),
resource.NewStringProperty("docker.io/pulumibot/buildkit-e2e:amd64"),
"sources": property.New([]property.Value{
property.New("docker.io/pulumibot/buildkit-e2e:arm64"),
property.New("docker.io/pulumibot/buildkit-e2e:amd64"),
}),
"push": resource.NewBoolProperty(false),
},
"push": property.New(false),
}),
}
},
},
@@ -64,66 +65,57 @@ func TestIndexLifecycle(t *testing.T) {
client: realClient,
op: func(t *testing.T) integration.Operation {
return integration.Operation{
Inputs: resource.PropertyMap{
"tag": resource.NewStringProperty(
Inputs: property.NewMap(map[string]property.Value{
"tag": property.New(
"docker.io/pulumibot/buildkit-e2e:manifest",
),
"sources": resource.NewArrayProperty([]resource.PropertyValue{
resource.NewStringProperty("docker.io/pulumibot/buildkit-e2e:arm64"),
resource.NewStringProperty("docker.io/pulumibot/buildkit-e2e:amd64"),
"sources": property.New([]property.Value{
property.New("docker.io/pulumibot/buildkit-e2e:arm64"),
property.New("docker.io/pulumibot/buildkit-e2e:amd64"),
}),
"push": resource.NewBoolProperty(true),
"registry": resource.NewObjectProperty(resource.PropertyMap{
"address": resource.NewStringProperty("docker.io"),
"username": resource.NewStringProperty("pulumibot"),
"password": resource.NewSecretProperty(&resource.Secret{
Element: resource.NewStringProperty(
os.Getenv("DOCKER_HUB_PASSWORD"),
),
}),
"push": property.New(true),
"registry": property.New(map[string]property.Value{
"address": property.New("docker.io"),
"username": property.New("pulumibot"),
"password": property.New(os.Getenv("DOCKER_HUB_PASSWORD")).WithSecret(true),
}),
},
}),
}
},
},
{
name: "expired credentials",
client: func(t *testing.T) Client {
client: func(t *testing.T) clientF {
ctrl := gomock.NewController(t)
c := NewMockClient(ctrl)
c.EXPECT().ManifestCreate(gomock.Any(), true, gomock.Any(), gomock.Any())
c.EXPECT().ManifestInspect(gomock.Any(), gomock.Any()).Return("", errs.ErrHTTPUnauthorized)
c.EXPECT().ManifestDelete(gomock.Any(), gomock.Any()).Return(nil)
return c
return mockClientF(c)
},
op: func(t *testing.T) integration.Operation {
return integration.Operation{
Inputs: resource.PropertyMap{
"tag": resource.NewStringProperty(
Inputs: property.NewMap(map[string]property.Value{
"tag": property.New(
"docker.io/pulumibot/buildkit-e2e:manifest",
),
"sources": resource.NewArrayProperty([]resource.PropertyValue{
resource.NewStringProperty("docker.io/pulumibot/buildkit-e2e:arm64"),
resource.NewStringProperty("docker.io/pulumibot/buildkit-e2e:amd64"),
"sources": property.New([]property.Value{
property.New("docker.io/pulumibot/buildkit-e2e:arm64"),
property.New("docker.io/pulumibot/buildkit-e2e:amd64"),
}),
"push": resource.NewBoolProperty(true),
"registry": resource.NewObjectProperty(resource.PropertyMap{
"address": resource.NewStringProperty("docker.io"),
"username": resource.NewStringProperty("pulumibot"),
"password": resource.NewSecretProperty(&resource.Secret{
Element: resource.NewStringProperty(
os.Getenv("DOCKER_HUB_PASSWORD"),
),
}),
"push": property.New(true),
"registry": property.New(map[string]property.Value{
"address": property.New("docker.io"),
"username": property.New("pulumibot"),
"password": property.New(os.Getenv("DOCKER_HUB_PASSWORD")).WithSecret(true),
}),
},
}),
}
},
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.skip {
@@ -133,7 +125,7 @@ func TestIndexLifecycle(t *testing.T) {
Resource: "docker-build:index:Index",
Create: tt.op(t),
}
s := newServer(tt.client(t))
s := newServer(t.Context(), t, tt.client(t))
err := s.Configure(provider.ConfigureRequest{})
require.NoError(t, err)
@@ -150,22 +142,22 @@ func TestIndexDiff(t *testing.T) {
baseState := IndexState{IndexArgs: baseArgs}
tests := []struct {
name string
olds func(*testing.T, IndexState) IndexState
news func(*testing.T, IndexArgs) IndexArgs
name string
state func(*testing.T, IndexState) IndexState
inputs func(*testing.T, IndexArgs) IndexArgs
wantChanges bool
}{
{
name: "no diff if no changes",
olds: func(*testing.T, IndexState) IndexState { return baseState },
news: func(*testing.T, IndexArgs) IndexArgs { return baseArgs },
state: func(*testing.T, IndexState) IndexState { return baseState },
inputs: func(*testing.T, IndexArgs) IndexArgs { return baseArgs },
wantChanges: false,
},
{
name: "diff if tag changes",
olds: func(*testing.T, IndexState) IndexState { return baseState },
news: func(t *testing.T, a IndexArgs) IndexArgs {
name: "diff if tag changes",
state: func(*testing.T, IndexState) IndexState { return baseState },
inputs: func(t *testing.T, a IndexArgs) IndexArgs {
a.Tag = "new-tag"
return a
},
@@ -173,7 +165,7 @@ func TestIndexDiff(t *testing.T) {
},
{
name: "no diff if registry password changes",
olds: func(_ *testing.T, s IndexState) IndexState {
state: func(_ *testing.T, s IndexState) IndexState {
s.Registry = &Registry{
Address: "foo",
Username: "foo",
@@ -181,7 +173,7 @@ func TestIndexDiff(t *testing.T) {
}
return s
},
news: func(_ *testing.T, a IndexArgs) IndexArgs {
inputs: func(_ *testing.T, a IndexArgs) IndexArgs {
a.Registry = &Registry{
Address: "foo",
Username: "foo",
@@ -192,9 +184,9 @@ func TestIndexDiff(t *testing.T) {
wantChanges: false,
},
{
name: "diff if registry added",
olds: func(*testing.T, IndexState) IndexState { return baseState },
news: func(_ *testing.T, a IndexArgs) IndexArgs {
name: "diff if registry added",
state: func(*testing.T, IndexState) IndexState { return baseState },
inputs: func(_ *testing.T, a IndexArgs) IndexArgs {
a.Registry = &Registry{Address: "foo.com", Username: "foo", Password: "foo"}
return a
},
@@ -202,7 +194,7 @@ func TestIndexDiff(t *testing.T) {
},
{
name: "diff if registry user changes",
olds: func(_ *testing.T, s IndexState) IndexState {
state: func(_ *testing.T, s IndexState) IndexState {
s.Registry = &Registry{
Address: "foo",
Username: "foo",
@@ -210,7 +202,7 @@ func TestIndexDiff(t *testing.T) {
}
return s
},
news: func(_ *testing.T, a IndexArgs) IndexArgs {
inputs: func(_ *testing.T, a IndexArgs) IndexArgs {
a.Registry = &Registry{
Address: "DIFFERENT USER",
Username: "foo",
@@ -222,22 +214,21 @@ func TestIndexDiff(t *testing.T) {
},
}
s := newServer(nil)
s := newServer(t.Context(), t, nil)
encode := func(t *testing.T, x any) resource.PropertyMap {
encode := func(t *testing.T, x any) property.Map {
raw, err := mapper.New(&mapper.Opts{IgnoreMissing: true}).Encode(x)
require.NoError(t, err)
return resource.NewPropertyMapFromMap(raw)
return resource.FromResourcePropertyMap(resource.NewPropertyMapFromMap(raw))
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
resp, err := s.Diff(provider.DiffRequest{
Urn: urn,
Olds: encode(t, tt.olds(t, baseState)),
News: encode(t, tt.news(t, baseArgs)),
Urn: urn,
State: encode(t, tt.state(t, baseState)),
Inputs: encode(t, tt.inputs(t, baseArgs)),
})
assert.NoError(t, err)
assert.Equal(t, tt.wantChanges, resp.HasChanges, resp.DetailedDiff)

View File

@@ -16,12 +16,8 @@ import (
configfile "github.com/docker/cli/cli/config/configfile"
docker "github.com/docker/cli/cli/context/docker"
store "github.com/docker/cli/cli/context/store"
store0 "github.com/docker/cli/cli/manifest/store"
client "github.com/docker/cli/cli/registry/client"
streams "github.com/docker/cli/cli/streams"
trust "github.com/docker/cli/cli/trust"
client0 "github.com/docker/docker/client"
client1 "github.com/theupdateframework/notary/client"
client "github.com/docker/docker/client"
metric "go.opentelemetry.io/otel/metric"
resource "go.opentelemetry.io/otel/sdk/resource"
trace "go.opentelemetry.io/otel/trace"
@@ -134,10 +130,10 @@ func (c *MockCliBuildKitEnabledCall) DoAndReturn(f func() (bool, error)) *MockCl
}
// Client mocks base method.
func (m *MockCli) Client() client0.APIClient {
func (m *MockCli) Client() client.APIClient {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Client")
ret0, _ := ret[0].(client0.APIClient)
ret0, _ := ret[0].(client.APIClient)
return ret0
}
@@ -154,19 +150,19 @@ type MockCliClientCall struct {
}
// Return rewrite *gomock.Call.Return
func (c *MockCliClientCall) Return(arg0 client0.APIClient) *MockCliClientCall {
func (c *MockCliClientCall) Return(arg0 client.APIClient) *MockCliClientCall {
c.Call = c.Call.Return(arg0)
return c
}
// Do rewrite *gomock.Call.Do
func (c *MockCliClientCall) Do(f func() client0.APIClient) *MockCliClientCall {
func (c *MockCliClientCall) Do(f func() client.APIClient) *MockCliClientCall {
c.Call = c.Call.Do(f)
return c
}
// DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *MockCliClientCall) DoAndReturn(f func() client0.APIClient) *MockCliClientCall {
func (c *MockCliClientCall) DoAndReturn(f func() client.APIClient) *MockCliClientCall {
c.Call = c.Call.DoAndReturn(f)
return c
}
@@ -513,44 +509,6 @@ func (c *MockCliInCall) DoAndReturn(f func() *streams.In) *MockCliInCall {
return c
}
// ManifestStore mocks base method.
func (m *MockCli) ManifestStore() store0.Store {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "ManifestStore")
ret0, _ := ret[0].(store0.Store)
return ret0
}
// ManifestStore indicates an expected call of ManifestStore.
func (mr *MockCliMockRecorder) ManifestStore() *MockCliManifestStoreCall {
mr.mock.ctrl.T.Helper()
call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ManifestStore", reflect.TypeOf((*MockCli)(nil).ManifestStore))
return &MockCliManifestStoreCall{Call: call}
}
// MockCliManifestStoreCall wrap *gomock.Call
type MockCliManifestStoreCall struct {
*gomock.Call
}
// Return rewrite *gomock.Call.Return
func (c *MockCliManifestStoreCall) Return(arg0 store0.Store) *MockCliManifestStoreCall {
c.Call = c.Call.Return(arg0)
return c
}
// Do rewrite *gomock.Call.Do
func (c *MockCliManifestStoreCall) Do(f func() store0.Store) *MockCliManifestStoreCall {
c.Call = c.Call.Do(f)
return c
}
// DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *MockCliManifestStoreCall) DoAndReturn(f func() store0.Store) *MockCliManifestStoreCall {
c.Call = c.Call.DoAndReturn(f)
return c
}
// MeterProvider mocks base method.
func (m *MockCli) MeterProvider() metric.MeterProvider {
m.ctrl.T.Helper()
@@ -589,45 +547,6 @@ func (c *MockCliMeterProviderCall) DoAndReturn(f func() metric.MeterProvider) *M
return c
}
// NotaryClient mocks base method.
func (m *MockCli) NotaryClient(imgRefAndAuth trust.ImageRefAndAuth, actions []string) (client1.Repository, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "NotaryClient", imgRefAndAuth, actions)
ret0, _ := ret[0].(client1.Repository)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// NotaryClient indicates an expected call of NotaryClient.
func (mr *MockCliMockRecorder) NotaryClient(imgRefAndAuth, actions any) *MockCliNotaryClientCall {
mr.mock.ctrl.T.Helper()
call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NotaryClient", reflect.TypeOf((*MockCli)(nil).NotaryClient), imgRefAndAuth, actions)
return &MockCliNotaryClientCall{Call: call}
}
// MockCliNotaryClientCall wrap *gomock.Call
type MockCliNotaryClientCall struct {
*gomock.Call
}
// Return rewrite *gomock.Call.Return
func (c *MockCliNotaryClientCall) Return(arg0 client1.Repository, arg1 error) *MockCliNotaryClientCall {
c.Call = c.Call.Return(arg0, arg1)
return c
}
// Do rewrite *gomock.Call.Do
func (c *MockCliNotaryClientCall) Do(f func(trust.ImageRefAndAuth, []string) (client1.Repository, error)) *MockCliNotaryClientCall {
c.Call = c.Call.Do(f)
return c
}
// DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *MockCliNotaryClientCall) DoAndReturn(f func(trust.ImageRefAndAuth, []string) (client1.Repository, error)) *MockCliNotaryClientCall {
c.Call = c.Call.DoAndReturn(f)
return c
}
// Out mocks base method.
func (m *MockCli) Out() *streams.Out {
m.ctrl.T.Helper()
@@ -666,44 +585,6 @@ func (c *MockCliOutCall) DoAndReturn(f func() *streams.Out) *MockCliOutCall {
return c
}
// RegistryClient mocks base method.
func (m *MockCli) RegistryClient(arg0 bool) client.RegistryClient {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "RegistryClient", arg0)
ret0, _ := ret[0].(client.RegistryClient)
return ret0
}
// RegistryClient indicates an expected call of RegistryClient.
func (mr *MockCliMockRecorder) RegistryClient(arg0 any) *MockCliRegistryClientCall {
mr.mock.ctrl.T.Helper()
call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegistryClient", reflect.TypeOf((*MockCli)(nil).RegistryClient), arg0)
return &MockCliRegistryClientCall{Call: call}
}
// MockCliRegistryClientCall wrap *gomock.Call
type MockCliRegistryClientCall struct {
*gomock.Call
}
// Return rewrite *gomock.Call.Return
func (c *MockCliRegistryClientCall) Return(arg0 client.RegistryClient) *MockCliRegistryClientCall {
c.Call = c.Call.Return(arg0)
return c
}
// Do rewrite *gomock.Call.Do
func (c *MockCliRegistryClientCall) Do(f func(bool) client.RegistryClient) *MockCliRegistryClientCall {
c.Call = c.Call.Do(f)
return c
}
// DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *MockCliRegistryClientCall) DoAndReturn(f func(bool) client.RegistryClient) *MockCliRegistryClientCall {
c.Call = c.Call.DoAndReturn(f)
return c
}
// Resource mocks base method.
func (m *MockCli) Resource() *resource.Resource {
m.ctrl.T.Helper()

View File

@@ -3,7 +3,7 @@
//
// Generated by this command:
//
// mockgen -typed -package internal -source client.go -destination mockclient_test.go --self_package github.com/pulumi/pulumi-docker-build/provider/internal
// mockgen -typed -package internal -source client.go -destination mockclient_test.go --self_package github.com/pulumi/pulumi-docker-build/provider/internal -imports buildx=github.com/docker/buildx/build
//
// Package internal is a generated GoMock package.
@@ -13,7 +13,12 @@ import (
context "context"
reflect "reflect"
buildx "github.com/docker/buildx/build"
builder "github.com/docker/buildx/builder"
pb "github.com/docker/buildx/controller/pb"
confutil "github.com/docker/buildx/util/confutil"
dockerutil "github.com/docker/buildx/util/dockerutil"
progress "github.com/docker/buildx/util/progress"
client "github.com/moby/buildkit/client"
session "github.com/moby/buildkit/session"
descriptor "github.com/regclient/regclient/types/descriptor"
@@ -532,3 +537,66 @@ func (c *MockBuildShouldExecCall) DoAndReturn(f func() bool) *MockBuildShouldExe
c.Call = c.Call.DoAndReturn(f)
return c
}
// MockBuilder is a mock of Builder interface.
type MockBuilder struct {
ctrl *gomock.Controller
recorder *MockBuilderMockRecorder
isgomock struct{}
}
// MockBuilderMockRecorder is the mock recorder for MockBuilder.
type MockBuilderMockRecorder struct {
mock *MockBuilder
}
// NewMockBuilder creates a new mock instance.
func NewMockBuilder(ctrl *gomock.Controller) *MockBuilder {
mock := &MockBuilder{ctrl: ctrl}
mock.recorder = &MockBuilderMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockBuilder) EXPECT() *MockBuilderMockRecorder {
return m.recorder
}
// Build mocks base method.
func (m *MockBuilder) Build(ctx context.Context, nodes []builder.Node, opts map[string]buildx.Options, docker *dockerutil.Client, cfg *confutil.Config, w progress.Writer) (map[string]*client.SolveResponse, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Build", ctx, nodes, opts, docker, cfg, w)
ret0, _ := ret[0].(map[string]*client.SolveResponse)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// Build indicates an expected call of Build.
func (mr *MockBuilderMockRecorder) Build(ctx, nodes, opts, docker, cfg, w any) *MockBuilderBuildCall {
mr.mock.ctrl.T.Helper()
call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Build", reflect.TypeOf((*MockBuilder)(nil).Build), ctx, nodes, opts, docker, cfg, w)
return &MockBuilderBuildCall{Call: call}
}
// MockBuilderBuildCall wrap *gomock.Call
type MockBuilderBuildCall struct {
*gomock.Call
}
// Return rewrite *gomock.Call.Return
func (c *MockBuilderBuildCall) Return(resp map[string]*client.SolveResponse, err error) *MockBuilderBuildCall {
c.Call = c.Call.Return(resp, err)
return c
}
// Do rewrite *gomock.Call.Do
func (c *MockBuilderBuildCall) Do(f func(context.Context, []builder.Node, map[string]buildx.Options, *dockerutil.Client, *confutil.Config, progress.Writer) (map[string]*client.SolveResponse, error)) *MockBuilderBuildCall {
c.Call = c.Call.Do(f)
return c
}
// DoAndReturn rewrite *gomock.Call.DoAndReturn
func (c *MockBuilderBuildCall) DoAndReturn(f func(context.Context, []builder.Node, map[string]buildx.Options, *dockerutil.Client, *confutil.Config, progress.Writer) (map[string]*client.SolveResponse, error)) *MockBuilderBuildCall {
c.Call = c.Call.DoAndReturn(f)
return c
}

View File

@@ -45,9 +45,6 @@ type Config struct {
host *host
}
// _mockClientKey is used by tests to inject a mock Docker client.
var _mockClientKey any = "mock-client"
// Annotate provides user-facing descriptions and defaults for Config's fields.
func (c *Config) Annotate(a infer.Annotator) {
a.Describe(&c.Host, "The build daemon's address.")
@@ -64,8 +61,23 @@ func (c *Config) Configure(ctx context.Context) error {
return nil
}
// GetRegistries returns the config's registries, if any.
func (c Config) GetRegistries() []Registry {
return c.Registries
}
// getHost returns the config's host, or nil if the config is also nil.
func (c *Config) getHost() *host {
if c == nil {
return nil
}
return c.host
}
// NewBuildxProvider returns a new buildx provider.
func NewBuildxProvider() provider.Provider {
func NewBuildxProvider(clientF clientF) provider.Provider {
config := &Config{}
prov := infer.Provider(
infer.Options{
Metadata: pschema.Metadata{
@@ -113,41 +125,22 @@ func NewBuildxProvider() provider.Provider {
},
},
Resources: []infer.InferredResource{
infer.Resource[*Image](),
infer.Resource[*Index](),
infer.Resource(&Image{clientF: clientF, config: config}),
infer.Resource(&Index{clientF: clientF, config: config}),
},
ModuleMap: map[tokens.ModuleName]tokens.ModuleName{
"internal": "index",
},
Config: infer.Config[*Config](),
Config: infer.Config(config),
},
)
prov.DiffConfig = diffConfigIgnoreInternal(prov.DiffConfig)
return prov
}
// TODO(pulumi/pulumi-docker-build#404): Remove this function once the bug is fixed in either
// upstream pu/pu or pulumi-go-provider.
// diffConfigInternalIgnore is a custom DiffConfig implementation for the buildx provider. This is required to
// circumvent the bug identified in https://github.com/pulumi/pulumi-docker-build/issues/404.
// Since `__internal` is currently populated in new inputs, but stripped in old state, we need to
// ignore this field in the diff. There is no easy way to override DiffConfig to compare inputs only.
func diffConfigIgnoreInternal(
diffConfig func(ctx context.Context, req provider.DiffRequest) (provider.DiffResponse, error),
) func(ctx context.Context, req provider.DiffRequest) (provider.DiffResponse, error) {
return func(ctx context.Context, req provider.DiffRequest) (provider.DiffResponse, error) {
delete(req.News, "__internal")
return diffConfig(ctx, req)
}
}
// Schema returns our package specification.
func Schema(ctx context.Context, version string) schema.PackageSpec {
p := NewBuildxProvider()
p := NewBuildxProvider(nil)
spec, err := provider.GetSchema(ctx, "docker-build", version, p)
contract.AssertNoErrorf(err, "missing schema")
return spec

View File

@@ -20,18 +20,18 @@ import (
"github.com/blang/semver"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
provider "github.com/pulumi/pulumi-go-provider"
"github.com/pulumi/pulumi-go-provider/infer"
"github.com/pulumi/pulumi-go-provider/integration"
mwcontext "github.com/pulumi/pulumi-go-provider/middleware/context"
"github.com/pulumi/pulumi/sdk/v3/go/common/tokens"
)
func TestConfigure(t *testing.T) {
t.Parallel()
s := newServer(nil)
s := newServer(t.Context(), t, nil)
err := s.Configure(
provider.ConfigureRequest{},
@@ -60,7 +60,7 @@ func TestAnnotate(t *testing.T) {
func TestSchema(t *testing.T) {
t.Parallel()
s := newServer(nil)
s := newServer(t.Context(), t, nil)
_, err := s.GetSchema(provider.GetSchemaRequest{Version: 0})
assert.NoError(t, err)
@@ -68,21 +68,27 @@ func TestSchema(t *testing.T) {
type annotator struct{}
func (annotator) Deprecate(_ any, _ string) {}
func (annotator) Describe(_ any, _ string) {}
func (annotator) SetDefault(_, _ any, _ ...string) {}
func (annotator) SetToken(tokens.ModuleName, tokens.TypeName) {}
func (annotator) AddAlias(tokens.ModuleName, tokens.TypeName) {}
func (annotator) SetResourceDeprecationMessage(_ string) {}
func newServer(client Client) integration.Server {
p := NewBuildxProvider()
func newServer(ctx context.Context, t *testing.T, clientF clientF) integration.Server {
t.Helper()
// Inject a mock client if provided.
if client != nil {
p = mwcontext.Wrap(p, func(ctx context.Context) context.Context {
return context.WithValue(ctx, _mockClientKey, client)
})
if clientF == nil {
clientF = RealClientF
}
return integration.NewServer("docker-build", semver.Version{Major: 0}, p)
p := NewBuildxProvider(clientF)
s, err := integration.NewServer(
ctx,
"docker-build", semver.Version{Major: 0},
integration.WithProvider(p),
)
require.NoError(t, err)
return s
}

View File

@@ -36,7 +36,6 @@ func TestValidateSSH(t *testing.T) {
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()

View File

@@ -15,13 +15,8 @@
package provider
import (
"context"
"encoding/json"
"github.com/pulumi/pulumi-docker-build/provider/internal"
"github.com/pulumi/pulumi-docker-build/provider/internal/deprecated"
gp "github.com/pulumi/pulumi-go-provider"
"github.com/pulumi/pulumi/pkg/v3/codegen/schema"
"github.com/pulumi/pulumi/pkg/v3/resource/provider"
rpc "github.com/pulumi/pulumi/sdk/v3/proto/go"
)
@@ -39,37 +34,5 @@ func Serve() error {
// New creates a new provider.
func New(host *provider.HostClient) (rpc.ResourceProviderServer, error) {
return gp.RawServer(Name, Version, configurableProvider(internal.NewBuildxProvider()))(host)
}
// configurableProvider is a workaround for
// https://github.com/pulumi/pulumi-go-provider/issues/171 and
// In short, our SDKs send provider Configure requests as simple strings
// instead of rich objects. We don't want to preserve this behavior in
// pulumi-go-provider, but we also haven't updated SDKs yet to send rich types.
//
// If you find yourself in a position where you need to copy this -- STOP!
// https://github.com/pulumi/pulumi/pull/15032 should be merged with this fix.
func configurableProvider(p gp.Provider) gp.Provider {
configure := p.Configure
p.Configure = func(ctx context.Context, req gp.ConfigureRequest) error {
r, err := p.GetSchema(ctx, gp.GetSchemaRequest{Version: 0})
if err != nil {
return err
}
spec := schema.PackageSpec{}
err = json.Unmarshal([]byte(r.Schema), &spec)
if err != nil {
return err
}
ce := deprecated.New(spec.Config)
if props, err := ce.UnmarshalProperties(req.Args); err == nil {
req.Args = props
}
return configure(ctx, req)
}
return p
return gp.RawServer(Name, Version, internal.NewBuildxProvider(internal.RealClientF))(host)
}

View File

@@ -22,37 +22,8 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
emptypb "google.golang.org/protobuf/types/known/emptypb"
"google.golang.org/protobuf/types/known/structpb"
"github.com/pulumi/pulumi-docker-build/provider/internal"
provider "github.com/pulumi/pulumi-go-provider"
"github.com/pulumi/pulumi-go-provider/integration"
"github.com/pulumi/pulumi/sdk/v3/go/common/resource/plugin"
)
// TestConfigure checks backwards-compatibility with SDKs that still send
// provider config as JSON-encoded strings. This test can be removed once we
// upgrade to a version of pulumi that no longer generates SDKs with that
// behavior.
func TestConfigure(t *testing.T) {
t.Parallel()
p := configurableProvider(internal.NewBuildxProvider())
args, err := structpb.NewStruct(map[string]any{
"registries": `[{"address": "docker.io"}]`,
})
require.NoError(t, err)
argsMap, err := plugin.UnmarshalProperties(args, plugin.MarshalOptions{})
require.NoError(t, err)
s := integration.NewServer("docker-build", semver.Version{Major: 0}, p)
err = s.Configure(provider.ConfigureRequest{
Args: argsMap,
})
assert.NoError(t, err)
}
func TestVersion(t *testing.T) {
t.Parallel()

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

2
sdk/dotnet/Enums.cs generated
View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

2
sdk/dotnet/Image.cs generated
View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

2
sdk/dotnet/Index.cs generated
View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;
@@ -54,7 +54,7 @@ namespace Pulumi.DockerBuild.Inputs
public CacheFromGitHubActionsArgs()
{
Scope = Utilities.GetEnv("buildkit") ?? "";
Scope = "buildkit";
Token = Utilities.GetEnv("ACTIONS_RUNTIME_TOKEN") ?? "";
Url = Utilities.GetEnv("ACTIONS_CACHE_URL") ?? "";
}

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;
@@ -68,7 +68,7 @@ namespace Pulumi.DockerBuild.Inputs
{
IgnoreError = false;
Mode = Pulumi.DockerBuild.CacheMode.Min;
Scope = Utilities.GetEnv("buildkit") ?? "";
Scope = "buildkit";
Token = Utilities.GetEnv("ACTIONS_RUNTIME_TOKEN") ?? "";
Url = Utilities.GetEnv("ACTIONS_CACHE_URL") ?? "";
}

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

View File

@@ -1,4 +1,4 @@
// *** WARNING: this file was generated by pulumi. ***
// *** WARNING: this file was generated by pulumi-language-dotnet. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
using System;

Some files were not shown because too many files have changed in this diff Show More