Compare commits
55 Commits
update-git
...
v0.0.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2499eeb27b | ||
|
|
5135d9c759 | ||
|
|
f5e57ab70c | ||
|
|
2987a65183 | ||
|
|
fbc4ddec66 | ||
|
|
40a3223b23 | ||
|
|
72bd40b97c | ||
|
|
a6247a78b1 | ||
|
|
7597ca32ca | ||
|
|
0f23201468 | ||
|
|
d72c895b59 | ||
|
|
da63cd4cf4 | ||
|
|
561b185221 | ||
|
|
50b9b5ce3e | ||
|
|
bcf1c48554 | ||
|
|
40f5fdf15e | ||
|
|
b9a801e8ae | ||
|
|
43979f6d93 | ||
|
|
f4fa6ea93a | ||
|
|
dd2fb57edc | ||
|
|
717c819a77 | ||
|
|
c8a3d26d9e | ||
|
|
12788aca32 | ||
|
|
16ce5eca59 | ||
|
|
2c8abc1bdb | ||
|
|
7c40920db7 | ||
|
|
8313c4d8b9 | ||
|
|
ca01f67657 | ||
|
|
0edf5d6057 | ||
|
|
c7b41bc7e2 | ||
|
|
8028d11c58 | ||
|
|
23b00ae76a | ||
|
|
f5d8e81f24 | ||
|
|
7c9632e428 | ||
|
|
eca03ce6db | ||
|
|
59fd3c84e5 | ||
|
|
968ea6d57c | ||
|
|
02014becfd | ||
|
|
ebcf732c89 | ||
|
|
db520f164b | ||
|
|
12bf5dd689 | ||
|
|
4cd6d49ba9 | ||
|
|
3a9c246ffb | ||
|
|
fe4de036f1 | ||
|
|
5cb5ccbf53 | ||
|
|
da2fecf013 | ||
|
|
6efd4b045b | ||
|
|
b6c5d4d511 | ||
|
|
b455d9037f | ||
|
|
f9b5ed8f67 | ||
|
|
16196bb547 | ||
|
|
5bec2f3e1c | ||
|
|
91c652a702 | ||
|
|
cbf957533e | ||
|
|
d50d156bd8 |
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1 +1,2 @@
|
|||||||
sdk/**/* linguist-generated=true
|
sdk/**/* linguist-generated=true
|
||||||
|
provider/internal/mock*.go linguist-generated=true
|
||||||
|
|||||||
2
.github/dependabot.yml
vendored
2
.github/dependabot.yml
vendored
@@ -8,8 +8,6 @@ updates:
|
|||||||
pulumi:
|
pulumi:
|
||||||
patterns:
|
patterns:
|
||||||
- "github.com/pulumi/*"
|
- "github.com/pulumi/*"
|
||||||
exclude-patterns:
|
|
||||||
- "k8s.io/utils"
|
|
||||||
labels:
|
labels:
|
||||||
- dependencies
|
- dependencies
|
||||||
- impact/no-changelog-required
|
- impact/no-changelog-required
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -5,6 +5,7 @@
|
|||||||
**/.vs
|
**/.vs
|
||||||
**/.idea
|
**/.idea
|
||||||
**/.ionide
|
**/.ionide
|
||||||
|
**/.vscode
|
||||||
*.swp
|
*.swp
|
||||||
Pulumi.*.yaml
|
Pulumi.*.yaml
|
||||||
yarn.lock
|
yarn.lock
|
||||||
|
|||||||
@@ -4,36 +4,64 @@ run:
|
|||||||
linters:
|
linters:
|
||||||
enable-all: false
|
enable-all: false
|
||||||
enable:
|
enable:
|
||||||
|
- depguard
|
||||||
- errcheck
|
- errcheck
|
||||||
- exhaustive
|
- exhaustive
|
||||||
- prealloc
|
- exportloopref
|
||||||
- gofumpt
|
|
||||||
- revive
|
|
||||||
- gci
|
- gci
|
||||||
|
- gocritic
|
||||||
|
- gofumpt
|
||||||
|
- goheader
|
||||||
- gosec
|
- gosec
|
||||||
- govet
|
- govet
|
||||||
|
- importas
|
||||||
- ineffassign
|
- ineffassign
|
||||||
- lll
|
- lll
|
||||||
- misspell
|
- misspell
|
||||||
- nolintlint
|
|
||||||
- nakedret
|
- nakedret
|
||||||
- unconvert
|
- nolintlint
|
||||||
- unused
|
|
||||||
- paralleltest
|
- paralleltest
|
||||||
- perfsprint
|
- perfsprint
|
||||||
- depguard
|
- prealloc
|
||||||
- importas
|
- revive
|
||||||
|
- unconvert
|
||||||
|
- unused
|
||||||
|
|
||||||
linters-settings:
|
linters-settings:
|
||||||
nakedret:
|
depguard:
|
||||||
# Make an issue if func has more lines of code than this setting, and it has naked returns.
|
rules:
|
||||||
# Default: 30
|
protobuf:
|
||||||
max-func-lines: 60
|
deny:
|
||||||
nolintlint:
|
- pkg: "github.com/golang/protobuf"
|
||||||
# Some linter exclusions are added to generated or templated files
|
desc: Use google.golang.org/protobuf instead
|
||||||
# pre-emptively.
|
gci:
|
||||||
# Don't complain about these.
|
sections:
|
||||||
allow-unused: true
|
- standard # Standard section: captures all standard library packages.
|
||||||
|
- blank # Blank section: contains all blank imports.
|
||||||
|
- default # Default section: contains all imports that could not be matched to another section type.
|
||||||
|
- prefix(github.com/pulumi/) # Custom section: groups all imports with the github.com/pulumi/ prefix.
|
||||||
|
- prefix(github.com/pulumi/pulumi-dockerbuild/) # Custom section: local imports
|
||||||
|
custom-order: true
|
||||||
|
gocritic:
|
||||||
|
enable-all: true
|
||||||
|
disabled-checks:
|
||||||
|
- hugeParam
|
||||||
|
- importShadow
|
||||||
|
goheader:
|
||||||
|
template: |-
|
||||||
|
Copyright 2024, Pulumi Corporation.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
govet:
|
govet:
|
||||||
enable:
|
enable:
|
||||||
- nilness
|
- nilness
|
||||||
@@ -43,22 +71,18 @@ linters-settings:
|
|||||||
- sortslice
|
- sortslice
|
||||||
# Detect write to struct/arrays by-value that aren't read again.
|
# Detect write to struct/arrays by-value that aren't read again.
|
||||||
- unusedwrite
|
- unusedwrite
|
||||||
gci:
|
nakedret:
|
||||||
sections:
|
# Make an issue if func has more lines of code than this setting, and it has naked returns.
|
||||||
- standard # Standard section: captures all standard library packages.
|
# Default: 30
|
||||||
- blank # Blank section: contains all blank imports.
|
max-func-lines: 60
|
||||||
- default # Default section: contains all imports that could not be matched to another section type.
|
nolintlint:
|
||||||
- prefix(github.com/pulumi/) # Custom section: groups all imports with the github.com/pulumi/ prefix.
|
# Some linter exclusions are added to generated or templated files
|
||||||
- prefix(github.com/pulumi/pulumi-dockerbuild) # Custom section: local imports
|
# pre-emptively.
|
||||||
custom-order: true
|
# Don't complain about these.
|
||||||
depguard:
|
allow-unused: true
|
||||||
rules:
|
|
||||||
protobuf:
|
|
||||||
deny:
|
|
||||||
- pkg: "github.com/golang/protobuf"
|
|
||||||
desc: Use google.golang.org/protobuf instead
|
|
||||||
|
|
||||||
issues:
|
issues:
|
||||||
|
exclude-use-default: false
|
||||||
exclude-rules:
|
exclude-rules:
|
||||||
# Don't warn on unused parameters.
|
# Don't warn on unused parameters.
|
||||||
# Parameter names are useful; replacing them with '_' is undesirable.
|
# Parameter names are useful; replacing them with '_' is undesirable.
|
||||||
|
|||||||
50
Makefile
50
Makefile
@@ -1,10 +1,10 @@
|
|||||||
PROJECT_NAME := Pulumi Docker Build Resource Provider
|
PROJECT_NAME := Pulumi Docker Build Resource Provider
|
||||||
|
|
||||||
PACK := dockerbuild
|
PACK := docker-build
|
||||||
PACKDIR := sdk
|
PACKDIR := sdk
|
||||||
PROJECT := github.com/pulumi/pulumi-dockerbuild
|
PROJECT := github.com/pulumi/pulumi-docker-build
|
||||||
NODE_MODULE_NAME := @pulumi/dockerbuild
|
NODE_MODULE_NAME := @pulumi/docker-build
|
||||||
NUGET_PKG_NAME := Pulumi.Dockerbuild
|
NUGET_PKG_NAME := Pulumi.DockerBuild
|
||||||
|
|
||||||
PROVIDER := pulumi-resource-${PACK}
|
PROVIDER := pulumi-resource-${PACK}
|
||||||
VERSION ?= $(shell pulumictl get version)
|
VERSION ?= $(shell pulumictl get version)
|
||||||
@@ -19,12 +19,14 @@ EXAMPLES_DIR := ${WORKING_DIR}/examples/yaml
|
|||||||
TESTPARALLELISM := 4
|
TESTPARALLELISM := 4
|
||||||
|
|
||||||
PULUMI := bin/pulumi
|
PULUMI := bin/pulumi
|
||||||
|
GOGLANGCILINT := bin/golangci-lint
|
||||||
|
|
||||||
.PHONY: ensure
|
.PHONY: ensure
|
||||||
ensure:: tidy lint test_provider examples
|
ensure:: tidy lint test_provider examples
|
||||||
|
|
||||||
.PHONY: tidy
|
.PHONY: tidy
|
||||||
tidy: go.sum
|
tidy:
|
||||||
|
go mod tidy
|
||||||
|
|
||||||
.PHONY: provider
|
.PHONY: provider
|
||||||
provider: bin/${PROVIDER} bin/pulumi-gen-${PACK} # Required by CI
|
provider: bin/${PROVIDER} bin/pulumi-gen-${PACK} # Required by CI
|
||||||
@@ -44,7 +46,11 @@ test_all:: test_provider test_examples
|
|||||||
gen_examples:
|
gen_examples:
|
||||||
|
|
||||||
examples: $(shell mkdir -p examples)
|
examples: $(shell mkdir -p examples)
|
||||||
examples: sdk examples/go examples/nodejs examples/python examples/dotnet examples/java
|
examples: sdk examples/yaml examples/go examples/nodejs examples/python examples/dotnet examples/java
|
||||||
|
|
||||||
|
examples/yaml:
|
||||||
|
rm -rf ${WORKING_DIR}/examples/yaml/app
|
||||||
|
cp -r ${WORKING_DIR}/examples/app ${WORKING_DIR}/examples/yaml/app
|
||||||
|
|
||||||
examples/go: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
|
examples/go: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
|
||||||
$(call example,go)
|
$(call example,go)
|
||||||
@@ -60,7 +66,7 @@ examples/python: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.y
|
|||||||
|
|
||||||
examples/dotnet: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
|
examples/dotnet: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
|
||||||
$(call example,dotnet)
|
$(call example,dotnet)
|
||||||
@git checkout examples/dotnet/provider-dockerbuild.csproj
|
@git checkout examples/dotnet/provider-docker-build.csproj
|
||||||
|
|
||||||
examples/java: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
|
examples/java: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yaml
|
||||||
$(call example,java)
|
$(call example,java)
|
||||||
@@ -68,6 +74,10 @@ examples/java: ${PULUMI} bin/${PROVIDER} ${WORKING_DIR}/examples/yaml/Pulumi.yam
|
|||||||
|
|
||||||
${PULUMI}: go.sum
|
${PULUMI}: go.sum
|
||||||
GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi/pkg/v3/cmd/pulumi
|
GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi/pkg/v3/cmd/pulumi
|
||||||
|
GOBIN=${WORKING_DIR}/bin go install github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3
|
||||||
|
|
||||||
|
${GOGLANGCILINT}: go.sum
|
||||||
|
GOBIN=${WORKING_DIR}/bin go install github.com/golangci/golangci-lint/cmd/golangci-lint
|
||||||
|
|
||||||
define pulumi_login
|
define pulumi_login
|
||||||
export PULUMI_CONFIG_PASSPHRASE=asdfqwerty1234; \
|
export PULUMI_CONFIG_PASSPHRASE=asdfqwerty1234; \
|
||||||
@@ -75,7 +85,6 @@ define pulumi_login
|
|||||||
endef
|
endef
|
||||||
|
|
||||||
define example
|
define example
|
||||||
echo "GOT $(1)"
|
|
||||||
rm -rf ${WORKING_DIR}/examples/$(1)
|
rm -rf ${WORKING_DIR}/examples/$(1)
|
||||||
$(PULUMI) convert \
|
$(PULUMI) convert \
|
||||||
--cwd ${WORKING_DIR}/examples/yaml \
|
--cwd ${WORKING_DIR}/examples/yaml \
|
||||||
@@ -84,6 +93,7 @@ define example
|
|||||||
--non-interactive \
|
--non-interactive \
|
||||||
--language $(1) \
|
--language $(1) \
|
||||||
--out ${WORKING_DIR}/examples/$(1)
|
--out ${WORKING_DIR}/examples/$(1)
|
||||||
|
cp -r ${WORKING_DIR}/examples/app ${WORKING_DIR}/examples/$(1)/app
|
||||||
endef
|
endef
|
||||||
|
|
||||||
up::
|
up::
|
||||||
@@ -113,14 +123,12 @@ build:: provider dotnet_sdk go_sdk nodejs_sdk python_sdk
|
|||||||
only_build:: build
|
only_build:: build
|
||||||
|
|
||||||
.PHONY: lint
|
.PHONY: lint
|
||||||
lint:
|
lint: ${GOGLANGCILINT}
|
||||||
golangci-lint run --fix -c .golangci.yml
|
${GOGLANGCILINT} run --fix -c .golangci.yml
|
||||||
|
|
||||||
install:: install_nodejs_sdk install_dotnet_sdk
|
install:: install_nodejs_sdk install_dotnet_sdk
|
||||||
cp $(WORKING_DIR)/bin/${PROVIDER} ${GOPATH}/bin
|
cp $(WORKING_DIR)/bin/${PROVIDER} ${GOPATH}/bin
|
||||||
|
|
||||||
GO_TEST := go test -v -count=1 -cover -timeout 2h -parallel ${TESTPARALLELISM}
|
|
||||||
|
|
||||||
|
|
||||||
install_dotnet_sdk:: # Required by CI
|
install_dotnet_sdk:: # Required by CI
|
||||||
rm -rf $(WORKING_DIR)/nuget/$(NUGET_PKG_NAME).*.nupkg
|
rm -rf $(WORKING_DIR)/nuget/$(NUGET_PKG_NAME).*.nupkg
|
||||||
@@ -170,11 +178,8 @@ bin/${PROVIDER}: $(shell find ./provider -name '*.go') go.mod
|
|||||||
bin/pulumi-gen-${PACK}: # Required by CI
|
bin/pulumi-gen-${PACK}: # Required by CI
|
||||||
touch bin/pulumi-gen-${PACK}
|
touch bin/pulumi-gen-${PACK}
|
||||||
|
|
||||||
$(shell find . -name '*.go'):
|
|
||||||
|
|
||||||
go.mod: $(shell find . -name '*.go')
|
go.mod: $(shell find . -name '*.go')
|
||||||
go.sum: go.mod
|
go.sum: go.mod
|
||||||
go mod tidy
|
|
||||||
|
|
||||||
sdk: $(shell mkdir -p sdk)
|
sdk: $(shell mkdir -p sdk)
|
||||||
sdk: sdk/python sdk/nodejs sdk/java sdk/python sdk/go sdk/dotnet
|
sdk: sdk/python sdk/nodejs sdk/java sdk/python sdk/go sdk/dotnet
|
||||||
@@ -210,14 +215,15 @@ sdk/nodejs: $(PULUMI) bin/${PROVIDER}
|
|||||||
mv -f ${TMPDIR}/nodejs ${WORKING_DIR}/sdk/.
|
mv -f ${TMPDIR}/nodejs ${WORKING_DIR}/sdk/.
|
||||||
|
|
||||||
sdk/go: TMPDIR := $(shell mktemp -d)
|
sdk/go: TMPDIR := $(shell mktemp -d)
|
||||||
|
sdk/go: PATH := "$(WORKING_DIR)/bin:$(PATH)"
|
||||||
sdk/go: $(PULUMI) bin/${PROVIDER}
|
sdk/go: $(PULUMI) bin/${PROVIDER}
|
||||||
rm -rf sdk/go
|
rm -rf sdk/go
|
||||||
$(PULUMI) package gen-sdk bin/$(PROVIDER) --language go -o ${TMPDIR}
|
PATH=$(PATH) $(PULUMI) package gen-sdk bin/$(PROVIDER) --language go -o ${TMPDIR}
|
||||||
cp go.mod ${TMPDIR}/go/${PACK}/go.mod
|
cp go.mod ${TMPDIR}/go/dockerbuild/go.mod
|
||||||
cd ${TMPDIR}/go/${PACK} && \
|
cd ${TMPDIR}/go/dockerbuild && \
|
||||||
go mod edit -module=github.com/pulumi/pulumi-${PACK}/${PACKDIR}/go/${PACK} && \
|
go mod edit -module=github.com/pulumi/pulumi-${PACK}/${PACKDIR}/go/dockerbuild && \
|
||||||
go mod tidy
|
go mod tidy
|
||||||
mv -f ${TMPDIR}/go ${WORKING_DIR}/sdk/.
|
mv -f ${TMPDIR}/go ${WORKING_DIR}/sdk/go
|
||||||
|
|
||||||
sdk/dotnet: DOTNET_VERSION := $(shell pulumictl get version --language dotnet)
|
sdk/dotnet: DOTNET_VERSION := $(shell pulumictl get version --language dotnet)
|
||||||
sdk/dotnet: TMPDIR := $(shell mktemp -d)
|
sdk/dotnet: TMPDIR := $(shell mktemp -d)
|
||||||
@@ -236,3 +242,7 @@ sdk/java: $(PULUMI) bin/${PROVIDER}
|
|||||||
$(PULUMI) package gen-sdk --language java bin/${PROVIDER} -o ${TMPDIR}
|
$(PULUMI) package gen-sdk --language java bin/${PROVIDER} -o ${TMPDIR}
|
||||||
cd ${TMPDIR}/java/ && gradle --console=plain build
|
cd ${TMPDIR}/java/ && gradle --console=plain build
|
||||||
mv -f ${TMPDIR}/java ${WORKING_DIR}/sdk/.
|
mv -f ${TMPDIR}/java ${WORKING_DIR}/sdk/.
|
||||||
|
|
||||||
|
docs: $(shell find docs/yaml -type f) $(shell find ./provider/internal/embed -name '*.md') ${SCHEMA_PATH}
|
||||||
|
go generate docs/generate.go
|
||||||
|
@touch docs
|
||||||
|
|||||||
117
README.md
117
README.md
@@ -1,106 +1,23 @@
|
|||||||
# Pulumi Native Provider Boilerplate
|
[](https://slack.pulumi.com)
|
||||||
|
[](https://www.npmjs.com/package/@pulumi/docker-build)
|
||||||
|
[](https://pypi.org/project/pulumi-docker-build)
|
||||||
|
[](https://badge.fury.io/nu/pulumi.dockerbuild)
|
||||||
|
[](https://pkg.go.dev/github.com/pulumi/pulumi-docker-build/sdk/go)
|
||||||
|
[](https://github.com/pulumi/pulumi-docker-build/blob/main/LICENSE)
|
||||||
|
|
||||||
This repository is a boilerplate showing how to create and locally test a native Pulumi provider.
|
# Docker-Build Resource Provider
|
||||||
|
|
||||||
## Authoring a Pulumi Native Provider
|
A [Pulumi](http://pulumi.com) provider for building modern Docker images with [buildx](https://docs.docker.com/build/architecture/) and [BuildKit](https://docs.docker.com/build/buildkit/).
|
||||||
|
|
||||||
This boilerplate creates a working Pulumi-owned provider named `xyz`.
|
Not to be confused with the earlier
|
||||||
It implements a random number generator that you can [build and test out for yourself](#test-against-the-example) and then replace the Random code with code specific to your provider.
|
[Docker](http://github.com/pulumi/pulumi-docker) provider, which is still
|
||||||
|
appropriate for managing resources unrelated to building images.
|
||||||
|
|
||||||
|
| Provider | Use cases |
|
||||||
|
| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| `@pulumi/docker-build` | Anything related to building images with `docker build`. |
|
||||||
|
| `@pulumi/docker` | Everything else -- including running containers and creating networks. |
|
||||||
|
|
||||||
### Prerequisites
|
## Reference
|
||||||
|
|
||||||
Prerequisites for this repository are already satisfied by the [Pulumi Devcontainer](https://github.com/pulumi/devcontainer) if you are using Github Codespaces, or VSCode.
|
For more information, including examples and migration guidance, please see the Docker-Build provider's detailed [API documentation](https://www.pulumi.com/registry/packages/docker-build/).
|
||||||
|
|
||||||
If you are not using VSCode, you will need to ensure the following tools are installed and present in your `$PATH`:
|
|
||||||
|
|
||||||
* [`pulumictl`](https://github.com/pulumi/pulumictl#installation)
|
|
||||||
* [Go 1.21](https://golang.org/dl/) or 1.latest
|
|
||||||
* [NodeJS](https://nodejs.org/en/) 14.x. We recommend using [nvm](https://github.com/nvm-sh/nvm) to manage NodeJS installations.
|
|
||||||
* [Yarn](https://yarnpkg.com/)
|
|
||||||
* [TypeScript](https://www.typescriptlang.org/)
|
|
||||||
* [Python](https://www.python.org/downloads/) (called as `python3`). For recent versions of MacOS, the system-installed version is fine.
|
|
||||||
* [.NET](https://dotnet.microsoft.com/download)
|
|
||||||
|
|
||||||
|
|
||||||
### Build & test the boilerplate XYZ provider
|
|
||||||
|
|
||||||
1. Create a new Github CodeSpaces environment using this repository.
|
|
||||||
1. Open a terminal in the CodeSpaces environment.
|
|
||||||
1. Run `make build install` to build and install the provider.
|
|
||||||
1. Run `make gen_examples` to generate the example programs in `examples/` off of the source `examples/yaml` example program.
|
|
||||||
1. Run `make up` to run the example program in `examples/yaml`.
|
|
||||||
1. Run `make down` to tear down the example program.
|
|
||||||
|
|
||||||
### Creating a new provider repository
|
|
||||||
|
|
||||||
Pulumi offers this repository as a [GitHub template repository](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-repository-from-a-template) for convenience. From this repository:
|
|
||||||
|
|
||||||
1. Click "Use this template".
|
|
||||||
1. Set the following options:
|
|
||||||
* Owner: pulumi
|
|
||||||
* Repository name: pulumi-xyz-native (replace "xyz" with the name of your provider)
|
|
||||||
* Description: Pulumi provider for xyz
|
|
||||||
* Repository type: Public
|
|
||||||
1. Clone the generated repository.
|
|
||||||
|
|
||||||
From the templated repository:
|
|
||||||
|
|
||||||
1. Search-replace `xyz` with the name of your desired provider.
|
|
||||||
|
|
||||||
#### Build the provider and install the plugin
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ make build install
|
|
||||||
```
|
|
||||||
|
|
||||||
This will:
|
|
||||||
|
|
||||||
1. Create the SDK codegen binary and place it in a `./bin` folder (gitignored)
|
|
||||||
2. Create the provider binary and place it in the `./bin` folder (gitignored)
|
|
||||||
3. Generate the dotnet, Go, Node, and Python SDKs and place them in the `./sdk` folder
|
|
||||||
4. Install the provider on your machine.
|
|
||||||
|
|
||||||
#### Test against the example
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ cd examples/simple
|
|
||||||
$ yarn link @pulumi/xyz
|
|
||||||
$ yarn install
|
|
||||||
$ pulumi stack init test
|
|
||||||
$ pulumi up
|
|
||||||
```
|
|
||||||
|
|
||||||
Now that you have completed all of the above steps, you have a working provider that generates a random string for you.
|
|
||||||
|
|
||||||
#### A brief repository overview
|
|
||||||
|
|
||||||
You now have:
|
|
||||||
|
|
||||||
1. A `provider/` folder containing the building and implementation logic
|
|
||||||
1. `cmd/pulumi-resource-xyz/main.go` - holds the provider's sample implementation logic.
|
|
||||||
2. `deployment-templates` - a set of files to help you around deployment and publication
|
|
||||||
3. `sdk` - holds the generated code libraries created by `pulumi-gen-xyz/main.go`
|
|
||||||
4. `examples` a folder of Pulumi programs to try locally and/or use in CI.
|
|
||||||
5. A `Makefile` and this `README`.
|
|
||||||
|
|
||||||
#### Additional Details
|
|
||||||
|
|
||||||
This repository depends on the pulumi-go-provider library. For more details on building providers, please check
|
|
||||||
the [Pulumi Go Provider docs](https://github.com/pulumi/pulumi-go-provider).
|
|
||||||
|
|
||||||
### Build Examples
|
|
||||||
|
|
||||||
Create an example program using the resources defined in your provider, and place it in the `examples/` folder.
|
|
||||||
|
|
||||||
You can now repeat the steps for [build, install, and test](#test-against-the-example).
|
|
||||||
|
|
||||||
## Configuring CI and releases
|
|
||||||
|
|
||||||
1. Follow the instructions laid out in the [deployment templates](./deployment-templates/README-DEPLOYMENT.md).
|
|
||||||
|
|
||||||
## References
|
|
||||||
|
|
||||||
Other resources/examples for implementing providers:
|
|
||||||
* [Pulumi Command provider](https://github.com/pulumi/pulumi-command/blob/master/provider/pkg/provider/provider.go)
|
|
||||||
* [Pulumi Go Provider repository](https://github.com/pulumi/pulumi-go-provider)
|
|
||||||
|
|||||||
216
docs/generate.go
Normal file
216
docs/generate.go
Normal file
@@ -0,0 +1,216 @@
|
|||||||
|
// Copyright 2024, Pulumi Corporation.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
//go:generate go run generate.go yaml ../provider/internal/embed
|
||||||
|
|
||||||
|
// Package main ingests a multi-document YAML file and converts it into
|
||||||
|
// Markdown examples.
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"gopkg.in/yaml.v3"
|
||||||
|
|
||||||
|
"github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
if len(os.Args) < 3 {
|
||||||
|
fmt.Fprintf(os.Stdout, "Usage: %s <yaml source dir path> <markdown destination path>\n", os.Args[0])
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
yamlPath := os.Args[1]
|
||||||
|
mdPath := os.Args[2]
|
||||||
|
|
||||||
|
if !filepath.IsAbs(yamlPath) {
|
||||||
|
cwd, err := os.Getwd()
|
||||||
|
contract.AssertNoErrorf(err, "getting working directory")
|
||||||
|
yamlPath = filepath.Join(cwd, yamlPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := os.MkdirAll(mdPath, 0o750); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
fileInfo, err := os.Lstat(mdPath)
|
||||||
|
if err != nil || !fileInfo.IsDir() {
|
||||||
|
fmt.Fprintf(os.Stderr, "Expect markdown destination %q to be a directory\n", mdPath)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
yamlFiles, err := os.ReadDir(yamlPath)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
for _, yamlFile := range yamlFiles {
|
||||||
|
if err := processYaml(filepath.Join(yamlPath, yamlFile.Name()), mdPath); err != nil {
|
||||||
|
log.Fatal(fmt.Errorf("processing %q: %w", yamlFile.Name(), err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func markdownExamples(examples []string) string {
|
||||||
|
s := "{{% examples %}}\n## Example Usage\n"
|
||||||
|
for _, example := range examples {
|
||||||
|
s += example
|
||||||
|
}
|
||||||
|
s += "{{% /examples %}}"
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
func markdownExample(description string,
|
||||||
|
typescript string,
|
||||||
|
python string,
|
||||||
|
csharp string,
|
||||||
|
golang string,
|
||||||
|
yaml string,
|
||||||
|
java string,
|
||||||
|
) string {
|
||||||
|
return fmt.Sprintf("{{%% example %%}}\n### %s\n\n"+
|
||||||
|
"```typescript\n%s```\n"+
|
||||||
|
"```python\n%s```\n"+
|
||||||
|
"```csharp\n%s```\n"+
|
||||||
|
"```go\n%s```\n"+
|
||||||
|
"```yaml\n%s```\n"+
|
||||||
|
"```java\n%s```\n"+
|
||||||
|
"{{%% /example %%}}\n",
|
||||||
|
description, typescript, python, csharp, golang, yaml, java)
|
||||||
|
}
|
||||||
|
|
||||||
|
func convert(language, tempDir, programFile string) (string, error) {
|
||||||
|
exampleDir := filepath.Join(tempDir, "example"+language)
|
||||||
|
//nolint:gosec // No user-provided input.
|
||||||
|
cmd := exec.Command(
|
||||||
|
"pulumi",
|
||||||
|
"convert",
|
||||||
|
"--language",
|
||||||
|
language,
|
||||||
|
"--out",
|
||||||
|
filepath.Clean(filepath.Join(tempDir, exampleDir)),
|
||||||
|
"--generate-only",
|
||||||
|
)
|
||||||
|
|
||||||
|
cmd.Stderr = os.Stderr
|
||||||
|
cmd.Stdout = os.Stdout
|
||||||
|
cmd.Dir = tempDir
|
||||||
|
if err := cmd.Run(); err != nil {
|
||||||
|
return "", fmt.Errorf("converting: %w", err)
|
||||||
|
}
|
||||||
|
content, err := os.ReadFile(filepath.Clean(filepath.Join(tempDir, exampleDir, programFile)))
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("reading: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(content), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func processYaml(path, mdDir string) error {
|
||||||
|
yamlFile, err := os.Open(filepath.Clean(path))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
base := filepath.Base(path)
|
||||||
|
md := strings.NewReplacer(".yaml", ".md", ".yml", ".md").Replace(base)
|
||||||
|
|
||||||
|
defer contract.IgnoreClose(yamlFile)
|
||||||
|
decoder := yaml.NewDecoder(yamlFile)
|
||||||
|
exampleStrings := []string{}
|
||||||
|
for {
|
||||||
|
keepGoing, err := func() (bool, error) {
|
||||||
|
example := map[string]interface{}{}
|
||||||
|
err := decoder.Decode(&example)
|
||||||
|
if err == io.EOF {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
description, ok := example["description"].(string)
|
||||||
|
if !ok {
|
||||||
|
description = ""
|
||||||
|
}
|
||||||
|
dir, err := os.MkdirTemp("", "")
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
contract.IgnoreError(os.RemoveAll(dir))
|
||||||
|
}()
|
||||||
|
|
||||||
|
src, err := os.OpenFile(filepath.Clean(filepath.Join(dir, "Pulumi.yaml")), os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o600)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Converting:", example)
|
||||||
|
|
||||||
|
if err := yaml.NewEncoder(src).Encode(example); err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
contract.AssertNoErrorf(src.Close(), "closing")
|
||||||
|
|
||||||
|
typescript, err := convert("typescript", dir, "index.ts")
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
python, err := convert("python", dir, "__main__.py")
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
csharp, err := convert("csharp", dir, "Program.cs")
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
golang, err := convert("go", dir, "main.go")
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
java, err := convert("java", dir, "src/main/java/generated_program/App.java")
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
yamlContent, err := os.ReadFile(filepath.Clean(filepath.Join(dir, "Pulumi.yaml")))
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
yaml := string(yamlContent)
|
||||||
|
|
||||||
|
exampleStrings = append(exampleStrings, markdownExample(description, typescript, python, csharp, golang, yaml, java))
|
||||||
|
|
||||||
|
return true, nil
|
||||||
|
}()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if !keepGoing {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Fprintf(os.Stdout, "Writing %s\n", filepath.Join(mdDir, md))
|
||||||
|
f, err := os.OpenFile(filepath.Clean(filepath.Join(mdDir, md)), os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o600)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer contract.IgnoreClose(f)
|
||||||
|
_, err = f.WriteString(markdownExamples(exampleStrings))
|
||||||
|
contract.AssertNoErrorf(err, "writing examples")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
180
docs/yaml/image-examples.yaml
Normal file
180
docs/yaml/image-examples.yaml
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
name: ecr
|
||||||
|
description: Push to AWS ECR with caching
|
||||||
|
outputs:
|
||||||
|
ref: ${my-image.ref}
|
||||||
|
resources:
|
||||||
|
ecr-repository:
|
||||||
|
type: aws:ecr:Repository
|
||||||
|
my-image:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
tags:
|
||||||
|
- ${ecr-repository.repositoryUrl}:latest
|
||||||
|
push: true
|
||||||
|
context:
|
||||||
|
location: ./app
|
||||||
|
cacheFrom:
|
||||||
|
- registry:
|
||||||
|
ref: ${ecr-repository.repositoryUrl}:cache
|
||||||
|
cacheTo:
|
||||||
|
- registry:
|
||||||
|
ref: ${ecr-repository.repositoryUrl}:cache
|
||||||
|
imageManifest: true
|
||||||
|
ociMediaTypes: true
|
||||||
|
registries:
|
||||||
|
- username: ${auth-token.userName}
|
||||||
|
password: ${auth-token.password}
|
||||||
|
address: ${ecr-repository.repositoryUrl}
|
||||||
|
runtime: yaml
|
||||||
|
variables:
|
||||||
|
auth-token:
|
||||||
|
fn::aws:ecr:getAuthorizationToken:
|
||||||
|
registryId: ${ecr-repository.registryId}
|
||||||
|
---
|
||||||
|
name: multi-platform
|
||||||
|
runtime: yaml
|
||||||
|
description: Multi-platform image
|
||||||
|
resources:
|
||||||
|
image:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
context:
|
||||||
|
location: "app"
|
||||||
|
platforms:
|
||||||
|
- plan9/amd64
|
||||||
|
- plan9/386
|
||||||
|
---
|
||||||
|
name: registry
|
||||||
|
runtime: yaml
|
||||||
|
description: Registry export
|
||||||
|
resources:
|
||||||
|
image:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
tags:
|
||||||
|
- "docker.io/pulumi/pulumi:3.107.0"
|
||||||
|
context:
|
||||||
|
location: "app"
|
||||||
|
push: true
|
||||||
|
registries:
|
||||||
|
- address: docker.io
|
||||||
|
username: pulumibot
|
||||||
|
password: ${dockerHubPassword}
|
||||||
|
outputs:
|
||||||
|
ref: ${my-image.ref}
|
||||||
|
---
|
||||||
|
name: caching
|
||||||
|
runtime: yaml
|
||||||
|
description: Caching
|
||||||
|
resources:
|
||||||
|
image:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
context:
|
||||||
|
location: "app"
|
||||||
|
cacheTo:
|
||||||
|
- local:
|
||||||
|
dest: tmp/cache
|
||||||
|
mode: max
|
||||||
|
cacheFrom:
|
||||||
|
- local:
|
||||||
|
src: tmp/cache
|
||||||
|
---
|
||||||
|
name: dbc
|
||||||
|
runtime: yaml
|
||||||
|
description: Docker Build Cloud
|
||||||
|
resources:
|
||||||
|
image:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
context:
|
||||||
|
location: "app"
|
||||||
|
exec: true
|
||||||
|
builder:
|
||||||
|
name: cloud-builder-name
|
||||||
|
---
|
||||||
|
name: build-args
|
||||||
|
runtime: yaml
|
||||||
|
description: Build arguments
|
||||||
|
resources:
|
||||||
|
image:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
context:
|
||||||
|
location: "app"
|
||||||
|
buildArgs:
|
||||||
|
SET_ME_TO_TRUE: "true"
|
||||||
|
---
|
||||||
|
name: build-target
|
||||||
|
runtime: yaml
|
||||||
|
description: Build target
|
||||||
|
resources:
|
||||||
|
image:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
context:
|
||||||
|
location: "app"
|
||||||
|
target: "build-me"
|
||||||
|
---
|
||||||
|
name: named-contexts
|
||||||
|
runtime: yaml
|
||||||
|
description: Named contexts
|
||||||
|
resources:
|
||||||
|
image:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
context:
|
||||||
|
location: app
|
||||||
|
named:
|
||||||
|
"golang:latest":
|
||||||
|
location: "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"
|
||||||
|
---
|
||||||
|
name: remote-context
|
||||||
|
runtime: yaml
|
||||||
|
description: Remote context
|
||||||
|
resources:
|
||||||
|
image:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
context:
|
||||||
|
location: "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"
|
||||||
|
|
||||||
|
---
|
||||||
|
name: inline
|
||||||
|
runtime: yaml
|
||||||
|
description: Inline Dockerfile
|
||||||
|
resources:
|
||||||
|
image:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
dockerfile:
|
||||||
|
inline: |
|
||||||
|
FROM busybox
|
||||||
|
COPY hello.c ./
|
||||||
|
context:
|
||||||
|
location: "app"
|
||||||
|
---
|
||||||
|
name: remote-context
|
||||||
|
runtime: yaml
|
||||||
|
description: Remote context
|
||||||
|
resources:
|
||||||
|
image:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
dockerfile:
|
||||||
|
location: app/Dockerfile
|
||||||
|
context:
|
||||||
|
location: "https://github.com/docker-library/hello-world.git"
|
||||||
|
---
|
||||||
|
name: docker-load
|
||||||
|
runtime: yaml
|
||||||
|
description: Local export
|
||||||
|
resources:
|
||||||
|
image:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
context:
|
||||||
|
location: "app"
|
||||||
|
exports:
|
||||||
|
- docker:
|
||||||
|
tar: true
|
||||||
48
docs/yaml/index-examples.yaml
Normal file
48
docs/yaml/index-examples.yaml
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
name: registry-caching
|
||||||
|
description: Multi-platform registry caching
|
||||||
|
runtime: yaml
|
||||||
|
resources:
|
||||||
|
arm64:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
context:
|
||||||
|
location: "app"
|
||||||
|
platforms:
|
||||||
|
- linux/arm64
|
||||||
|
tags:
|
||||||
|
- "docker.io/pulumi/pulumi:3.107.0-arm64"
|
||||||
|
cacheTo:
|
||||||
|
- registry:
|
||||||
|
ref: "docker.io/pulumi/pulumi:cache-arm64"
|
||||||
|
mode: max
|
||||||
|
cacheFrom:
|
||||||
|
- registry:
|
||||||
|
ref: "docker.io/pulumi/pulumi:cache-arm64"
|
||||||
|
|
||||||
|
amd64:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
context:
|
||||||
|
location: "app"
|
||||||
|
platforms:
|
||||||
|
- linux/amd64
|
||||||
|
tags:
|
||||||
|
- "docker.io/pulumi/pulumi:3.107.0-amd64"
|
||||||
|
cacheTo:
|
||||||
|
- registry:
|
||||||
|
ref: "docker.io/pulumi/pulumi:cache-amd64"
|
||||||
|
mode: max
|
||||||
|
cacheFrom:
|
||||||
|
- registry:
|
||||||
|
ref: "docker.io/pulumi/pulumi:cache-amd64"
|
||||||
|
|
||||||
|
index:
|
||||||
|
type: docker-build:Index
|
||||||
|
properties:
|
||||||
|
tag: "docker.io/pulumi/pulumi:3.107.0"
|
||||||
|
sources:
|
||||||
|
- ${amd64.ref}
|
||||||
|
- ${arm64.ref}
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
ref: ${index.ref}
|
||||||
2
examples/app/Dockerfile
Normal file
2
examples/app/Dockerfile
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
FROM alpine
|
||||||
|
RUN echo 👍
|
||||||
5
examples/app/Dockerfile.buildArgs
Normal file
5
examples/app/Dockerfile.buildArgs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
ARG SET_ME_TO_TRUE
|
||||||
|
RUN [ "$SET_ME_TO_TRUE" = "true" ]
|
||||||
|
RUN echo "That's the correct build arg, thanks! 👍"
|
||||||
2
examples/app/Dockerfile.emptyContext
Normal file
2
examples/app/Dockerfile.emptyContext
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
FROM alpine
|
||||||
|
RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
|
||||||
3
examples/app/Dockerfile.extraHosts
Normal file
3
examples/app/Dockerfile.extraHosts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
FROM bash AS base
|
||||||
|
|
||||||
|
RUN getent hosts metadata.google.internal
|
||||||
7
examples/app/Dockerfile.multiPlatform
Normal file
7
examples/app/Dockerfile.multiPlatform
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
FROM --platform=$BUILDPLATFORM alpine as build
|
||||||
|
RUN echo ${BUILDPLATFORM} > buildplatform
|
||||||
|
RUN echo ${TARGETPLATFORM} > targetplatform
|
||||||
|
|
||||||
|
FROM build
|
||||||
|
RUN cat buildplatform
|
||||||
|
RUN cat targetplatform
|
||||||
5
examples/app/Dockerfile.namedContexts
Normal file
5
examples/app/Dockerfile.namedContexts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# syntax=docker/dockerfile:1.4
|
||||||
|
FROM golang:latest
|
||||||
|
|
||||||
|
RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
|
||||||
|
RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
|
||||||
4
examples/app/Dockerfile.secrets
Normal file
4
examples/app/Dockerfile.secrets
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
|
||||||
|
|
||||||
5
examples/app/Dockerfile.sshMount
Normal file
5
examples/app/Dockerfile.sshMount
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
RUN apk add openssh-client
|
||||||
|
|
||||||
|
RUN --mount=type=ssh ssh-add -l
|
||||||
8
examples/app/Dockerfile.target
Normal file
8
examples/app/Dockerfile.target
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
FROM alpine as build-me
|
||||||
|
RUN echo 👍
|
||||||
|
|
||||||
|
FROM build-me as also-build-me
|
||||||
|
RUN echo 🤙
|
||||||
|
|
||||||
|
FROM build-me as dont-build-me
|
||||||
|
RUN [ "true" = "false" ]
|
||||||
@@ -1,18 +1,258 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Pulumi;
|
using Pulumi;
|
||||||
using Dockerbuild = Pulumi.Dockerbuild;
|
using DockerBuild = Pulumi.DockerBuild;
|
||||||
|
|
||||||
return await Deployment.RunAsync(() =>
|
return await Deployment.RunAsync(() =>
|
||||||
{
|
{
|
||||||
var myRandomResource = new Dockerbuild.Random("myRandomResource", new()
|
var config = new Config();
|
||||||
|
var dockerHubPassword = config.Require("dockerHubPassword");
|
||||||
|
var multiPlatform = new DockerBuild.Image("multiPlatform", new()
|
||||||
{
|
{
|
||||||
Length = 24,
|
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||||
|
{
|
||||||
|
Location = "./app/Dockerfile.multiPlatform",
|
||||||
|
},
|
||||||
|
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||||
|
{
|
||||||
|
Location = "./app",
|
||||||
|
},
|
||||||
|
Platforms = new[]
|
||||||
|
{
|
||||||
|
DockerBuild.Platform.Plan9_amd64,
|
||||||
|
DockerBuild.Platform.Plan9_386,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
var registryPush = new DockerBuild.Image("registryPush", new()
|
||||||
|
{
|
||||||
|
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||||
|
{
|
||||||
|
Location = "./app",
|
||||||
|
},
|
||||||
|
Tags = new[]
|
||||||
|
{
|
||||||
|
"docker.io/pulumibot/buildkit-e2e:example",
|
||||||
|
},
|
||||||
|
Exports = new[]
|
||||||
|
{
|
||||||
|
new DockerBuild.Inputs.ExportArgs
|
||||||
|
{
|
||||||
|
Registry = new DockerBuild.Inputs.ExportRegistryArgs
|
||||||
|
{
|
||||||
|
OciMediaTypes = true,
|
||||||
|
Push = false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Registries = new[]
|
||||||
|
{
|
||||||
|
new DockerBuild.Inputs.RegistryArgs
|
||||||
|
{
|
||||||
|
Address = "docker.io",
|
||||||
|
Username = "pulumibot",
|
||||||
|
Password = dockerHubPassword,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
var cached = new DockerBuild.Image("cached", new()
|
||||||
|
{
|
||||||
|
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||||
|
{
|
||||||
|
Location = "./app",
|
||||||
|
},
|
||||||
|
CacheTo = new[]
|
||||||
|
{
|
||||||
|
new DockerBuild.Inputs.CacheToArgs
|
||||||
|
{
|
||||||
|
Local = new DockerBuild.Inputs.CacheToLocalArgs
|
||||||
|
{
|
||||||
|
Dest = "tmp/cache",
|
||||||
|
Mode = DockerBuild.CacheMode.Max,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CacheFrom = new[]
|
||||||
|
{
|
||||||
|
new DockerBuild.Inputs.CacheFromArgs
|
||||||
|
{
|
||||||
|
Local = new DockerBuild.Inputs.CacheFromLocalArgs
|
||||||
|
{
|
||||||
|
Src = "tmp/cache",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
var buildArgs = new DockerBuild.Image("buildArgs", new()
|
||||||
|
{
|
||||||
|
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||||
|
{
|
||||||
|
Location = "./app/Dockerfile.buildArgs",
|
||||||
|
},
|
||||||
|
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||||
|
{
|
||||||
|
Location = "./app",
|
||||||
|
},
|
||||||
|
BuildArgs =
|
||||||
|
{
|
||||||
|
{ "SET_ME_TO_TRUE", "true" },
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
var extraHosts = new DockerBuild.Image("extraHosts", new()
|
||||||
|
{
|
||||||
|
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||||
|
{
|
||||||
|
Location = "./app/Dockerfile.extraHosts",
|
||||||
|
},
|
||||||
|
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||||
|
{
|
||||||
|
Location = "./app",
|
||||||
|
},
|
||||||
|
AddHosts = new[]
|
||||||
|
{
|
||||||
|
"metadata.google.internal:169.254.169.254",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
var sshMount = new DockerBuild.Image("sshMount", new()
|
||||||
|
{
|
||||||
|
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||||
|
{
|
||||||
|
Location = "./app/Dockerfile.sshMount",
|
||||||
|
},
|
||||||
|
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||||
|
{
|
||||||
|
Location = "./app",
|
||||||
|
},
|
||||||
|
Ssh = new[]
|
||||||
|
{
|
||||||
|
new DockerBuild.Inputs.SSHArgs
|
||||||
|
{
|
||||||
|
Id = "default",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
var secrets = new DockerBuild.Image("secrets", new()
|
||||||
|
{
|
||||||
|
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||||
|
{
|
||||||
|
Location = "./app/Dockerfile.secrets",
|
||||||
|
},
|
||||||
|
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||||
|
{
|
||||||
|
Location = "./app",
|
||||||
|
},
|
||||||
|
Secrets =
|
||||||
|
{
|
||||||
|
{ "password", "hunter2" },
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
var labels = new DockerBuild.Image("labels", new()
|
||||||
|
{
|
||||||
|
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||||
|
{
|
||||||
|
Location = "./app",
|
||||||
|
},
|
||||||
|
Labels =
|
||||||
|
{
|
||||||
|
{ "description", "This image will get a descriptive label 👍" },
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
var target = new DockerBuild.Image("target", new()
|
||||||
|
{
|
||||||
|
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||||
|
{
|
||||||
|
Location = "./app/Dockerfile.target",
|
||||||
|
},
|
||||||
|
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||||
|
{
|
||||||
|
Location = "./app",
|
||||||
|
},
|
||||||
|
Target = "build-me",
|
||||||
|
});
|
||||||
|
|
||||||
|
var namedContexts = new DockerBuild.Image("namedContexts", new()
|
||||||
|
{
|
||||||
|
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||||
|
{
|
||||||
|
Location = "./app/Dockerfile.namedContexts",
|
||||||
|
},
|
||||||
|
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||||
|
{
|
||||||
|
Location = "./app",
|
||||||
|
Named =
|
||||||
|
{
|
||||||
|
{ "golang:latest", new DockerBuild.Inputs.ContextArgs
|
||||||
|
{
|
||||||
|
Location = "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984",
|
||||||
|
} },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
var remoteContext = new DockerBuild.Image("remoteContext", new()
|
||||||
|
{
|
||||||
|
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||||
|
{
|
||||||
|
Location = "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
var remoteContextWithInline = new DockerBuild.Image("remoteContextWithInline", new()
|
||||||
|
{
|
||||||
|
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||||
|
{
|
||||||
|
Inline = @"FROM busybox
|
||||||
|
COPY hello.c ./
|
||||||
|
",
|
||||||
|
},
|
||||||
|
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||||
|
{
|
||||||
|
Location = "https://github.com/docker-library/hello-world.git",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
var inline = new DockerBuild.Image("inline", new()
|
||||||
|
{
|
||||||
|
Dockerfile = new DockerBuild.Inputs.DockerfileArgs
|
||||||
|
{
|
||||||
|
Inline = @"FROM alpine
|
||||||
|
RUN echo ""This uses an inline Dockerfile! 👍""
|
||||||
|
",
|
||||||
|
},
|
||||||
|
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||||
|
{
|
||||||
|
Location = "./app",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
var dockerLoad = new DockerBuild.Image("dockerLoad", new()
|
||||||
|
{
|
||||||
|
Context = new DockerBuild.Inputs.BuildContextArgs
|
||||||
|
{
|
||||||
|
Location = "./app",
|
||||||
|
},
|
||||||
|
Exports = new[]
|
||||||
|
{
|
||||||
|
new DockerBuild.Inputs.ExportArgs
|
||||||
|
{
|
||||||
|
Docker = new DockerBuild.Inputs.ExportDockerArgs
|
||||||
|
{
|
||||||
|
Tar = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
return new Dictionary<string, object?>
|
return new Dictionary<string, object?>
|
||||||
{
|
{
|
||||||
["value"] = myRandomResource.Result,
|
["platforms"] = multiPlatform.Platforms,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
name: provider-dockerbuild
|
name: provider-docker-build
|
||||||
runtime: dotnet
|
runtime: dotnet
|
||||||
|
config:
|
||||||
|
dockerHubPassword:
|
||||||
|
type: string
|
||||||
|
secret: true
|
||||||
plugins:
|
plugins:
|
||||||
providers:
|
providers:
|
||||||
- name: dockerbuild
|
- name: docker-build
|
||||||
path: ../../bin
|
path: ../../bin
|
||||||
|
|||||||
2
examples/dotnet/app/Dockerfile
Normal file
2
examples/dotnet/app/Dockerfile
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
FROM alpine
|
||||||
|
RUN echo 👍
|
||||||
5
examples/dotnet/app/Dockerfile.buildArgs
Normal file
5
examples/dotnet/app/Dockerfile.buildArgs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
ARG SET_ME_TO_TRUE
|
||||||
|
RUN [ "$SET_ME_TO_TRUE" = "true" ]
|
||||||
|
RUN echo "That's the correct build arg, thanks! 👍"
|
||||||
2
examples/dotnet/app/Dockerfile.emptyContext
Normal file
2
examples/dotnet/app/Dockerfile.emptyContext
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
FROM alpine
|
||||||
|
RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
|
||||||
3
examples/dotnet/app/Dockerfile.extraHosts
Normal file
3
examples/dotnet/app/Dockerfile.extraHosts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
FROM bash AS base
|
||||||
|
|
||||||
|
RUN getent hosts metadata.google.internal
|
||||||
7
examples/dotnet/app/Dockerfile.multiPlatform
Normal file
7
examples/dotnet/app/Dockerfile.multiPlatform
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
FROM --platform=$BUILDPLATFORM alpine as build
|
||||||
|
RUN echo ${BUILDPLATFORM} > buildplatform
|
||||||
|
RUN echo ${TARGETPLATFORM} > targetplatform
|
||||||
|
|
||||||
|
FROM build
|
||||||
|
RUN cat buildplatform
|
||||||
|
RUN cat targetplatform
|
||||||
5
examples/dotnet/app/Dockerfile.namedContexts
Normal file
5
examples/dotnet/app/Dockerfile.namedContexts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# syntax=docker/dockerfile:1.4
|
||||||
|
FROM golang:latest
|
||||||
|
|
||||||
|
RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
|
||||||
|
RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
|
||||||
4
examples/dotnet/app/Dockerfile.secrets
Normal file
4
examples/dotnet/app/Dockerfile.secrets
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
|
||||||
|
|
||||||
5
examples/dotnet/app/Dockerfile.sshMount
Normal file
5
examples/dotnet/app/Dockerfile.sshMount
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
RUN apk add openssh-client
|
||||||
|
|
||||||
|
RUN --mount=type=ssh ssh-add -l
|
||||||
8
examples/dotnet/app/Dockerfile.target
Normal file
8
examples/dotnet/app/Dockerfile.target
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
FROM alpine as build-me
|
||||||
|
RUN echo 👍
|
||||||
|
|
||||||
|
FROM build-me as also-build-me
|
||||||
|
RUN echo 🤙
|
||||||
|
|
||||||
|
FROM build-me as dont-build-me
|
||||||
|
RUN [ "true" = "false" ]
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Pulumi" Version="3.*" />
|
<PackageReference Include="Pulumi" Version="3.*" />
|
||||||
<PackageReference Include="Pulumi.Dockerbuild" Version="*" />
|
<PackageReference Include="Pulumi.DockerBuild" Version="0.0.2-alpha.1712594380+4cd6d49b.dirty" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
@@ -27,7 +27,7 @@ func TestDotNetExample(t *testing.T) {
|
|||||||
test := integration.ProgramTestOptions{
|
test := integration.ProgramTestOptions{
|
||||||
Dir: path.Join(cwd, "dotnet"),
|
Dir: path.Join(cwd, "dotnet"),
|
||||||
Dependencies: []string{
|
Dependencies: []string{
|
||||||
"Pulumi.Dockerbuild",
|
"Pulumi.DockerBuild",
|
||||||
},
|
},
|
||||||
Secrets: map[string]string{
|
Secrets: map[string]string{
|
||||||
"dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
|
"dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
name: provider-dockerbuild
|
name: provider-docker-build
|
||||||
runtime: go
|
runtime: go
|
||||||
|
config:
|
||||||
|
dockerHubPassword:
|
||||||
|
type: string
|
||||||
|
secret: true
|
||||||
plugins:
|
plugins:
|
||||||
providers:
|
providers:
|
||||||
- name: dockerbuild
|
- name: docker-build
|
||||||
path: ../../bin
|
path: ../../bin
|
||||||
|
|||||||
2
examples/go/app/Dockerfile
Normal file
2
examples/go/app/Dockerfile
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
FROM alpine
|
||||||
|
RUN echo 👍
|
||||||
5
examples/go/app/Dockerfile.buildArgs
Normal file
5
examples/go/app/Dockerfile.buildArgs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
ARG SET_ME_TO_TRUE
|
||||||
|
RUN [ "$SET_ME_TO_TRUE" = "true" ]
|
||||||
|
RUN echo "That's the correct build arg, thanks! 👍"
|
||||||
2
examples/go/app/Dockerfile.emptyContext
Normal file
2
examples/go/app/Dockerfile.emptyContext
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
FROM alpine
|
||||||
|
RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
|
||||||
3
examples/go/app/Dockerfile.extraHosts
Normal file
3
examples/go/app/Dockerfile.extraHosts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
FROM bash AS base
|
||||||
|
|
||||||
|
RUN getent hosts metadata.google.internal
|
||||||
7
examples/go/app/Dockerfile.multiPlatform
Normal file
7
examples/go/app/Dockerfile.multiPlatform
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
FROM --platform=$BUILDPLATFORM alpine as build
|
||||||
|
RUN echo ${BUILDPLATFORM} > buildplatform
|
||||||
|
RUN echo ${TARGETPLATFORM} > targetplatform
|
||||||
|
|
||||||
|
FROM build
|
||||||
|
RUN cat buildplatform
|
||||||
|
RUN cat targetplatform
|
||||||
5
examples/go/app/Dockerfile.namedContexts
Normal file
5
examples/go/app/Dockerfile.namedContexts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# syntax=docker/dockerfile:1.4
|
||||||
|
FROM golang:latest
|
||||||
|
|
||||||
|
RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
|
||||||
|
RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
|
||||||
4
examples/go/app/Dockerfile.secrets
Normal file
4
examples/go/app/Dockerfile.secrets
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
|
||||||
|
|
||||||
5
examples/go/app/Dockerfile.sshMount
Normal file
5
examples/go/app/Dockerfile.sshMount
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
RUN apk add openssh-client
|
||||||
|
|
||||||
|
RUN --mount=type=ssh ssh-add -l
|
||||||
8
examples/go/app/Dockerfile.target
Normal file
8
examples/go/app/Dockerfile.target
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
FROM alpine as build-me
|
||||||
|
RUN echo 👍
|
||||||
|
|
||||||
|
FROM build-me as also-build-me
|
||||||
|
RUN echo 🤙
|
||||||
|
|
||||||
|
FROM build-me as dont-build-me
|
||||||
|
RUN [ "true" = "false" ]
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
module provider-dockerbuild
|
module provider-docker-build
|
||||||
|
|
||||||
go 1.20
|
go 1.20
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,222 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild"
|
"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild"
|
||||||
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
|
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
|
||||||
|
"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
pulumi.Run(func(ctx *pulumi.Context) error {
|
pulumi.Run(func(ctx *pulumi.Context) error {
|
||||||
myRandomResource, err := dockerbuild.NewRandom(ctx, "myRandomResource", &dockerbuild.RandomArgs{
|
cfg := config.New(ctx, "")
|
||||||
Length: pulumi.Int(24),
|
dockerHubPassword := cfg.Require("dockerHubPassword")
|
||||||
|
multiPlatform, err := dockerbuild.NewImage(ctx, "multiPlatform", &dockerbuild.ImageArgs{
|
||||||
|
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||||
|
Location: pulumi.String("./app/Dockerfile.multiPlatform"),
|
||||||
|
},
|
||||||
|
Context: &dockerbuild.BuildContextArgs{
|
||||||
|
Location: pulumi.String("./app"),
|
||||||
|
},
|
||||||
|
Platforms: dockerbuild.PlatformArray{
|
||||||
|
dockerbuild.Platform_Plan9_amd64,
|
||||||
|
dockerbuild.Platform_Plan9_386,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
ctx.Export("value", myRandomResource.Result)
|
_, err = dockerbuild.NewImage(ctx, "registryPush", &dockerbuild.ImageArgs{
|
||||||
|
Context: &dockerbuild.BuildContextArgs{
|
||||||
|
Location: pulumi.String("./app"),
|
||||||
|
},
|
||||||
|
Tags: pulumi.StringArray{
|
||||||
|
pulumi.String("docker.io/pulumibot/buildkit-e2e:example"),
|
||||||
|
},
|
||||||
|
Exports: dockerbuild.ExportArray{
|
||||||
|
&dockerbuild.ExportArgs{
|
||||||
|
Registry: &dockerbuild.ExportRegistryArgs{
|
||||||
|
OciMediaTypes: pulumi.Bool(true),
|
||||||
|
Push: pulumi.Bool(false),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Registries: dockerbuild.RegistryArray{
|
||||||
|
&dockerbuild.RegistryArgs{
|
||||||
|
Address: pulumi.String("docker.io"),
|
||||||
|
Username: pulumi.String("pulumibot"),
|
||||||
|
Password: pulumi.String(dockerHubPassword),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = dockerbuild.NewImage(ctx, "cached", &dockerbuild.ImageArgs{
|
||||||
|
Context: &dockerbuild.BuildContextArgs{
|
||||||
|
Location: pulumi.String("./app"),
|
||||||
|
},
|
||||||
|
CacheTo: dockerbuild.CacheToArray{
|
||||||
|
&dockerbuild.CacheToArgs{
|
||||||
|
Local: &dockerbuild.CacheToLocalArgs{
|
||||||
|
Dest: pulumi.String("tmp/cache"),
|
||||||
|
Mode: dockerbuild.CacheModeMax,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CacheFrom: dockerbuild.CacheFromArray{
|
||||||
|
&dockerbuild.CacheFromArgs{
|
||||||
|
Local: &dockerbuild.CacheFromLocalArgs{
|
||||||
|
Src: pulumi.String("tmp/cache"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = dockerbuild.NewImage(ctx, "buildArgs", &dockerbuild.ImageArgs{
|
||||||
|
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||||
|
Location: pulumi.String("./app/Dockerfile.buildArgs"),
|
||||||
|
},
|
||||||
|
Context: &dockerbuild.BuildContextArgs{
|
||||||
|
Location: pulumi.String("./app"),
|
||||||
|
},
|
||||||
|
BuildArgs: pulumi.StringMap{
|
||||||
|
"SET_ME_TO_TRUE": pulumi.String("true"),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = dockerbuild.NewImage(ctx, "extraHosts", &dockerbuild.ImageArgs{
|
||||||
|
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||||
|
Location: pulumi.String("./app/Dockerfile.extraHosts"),
|
||||||
|
},
|
||||||
|
Context: &dockerbuild.BuildContextArgs{
|
||||||
|
Location: pulumi.String("./app"),
|
||||||
|
},
|
||||||
|
AddHosts: pulumi.StringArray{
|
||||||
|
pulumi.String("metadata.google.internal:169.254.169.254"),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = dockerbuild.NewImage(ctx, "sshMount", &dockerbuild.ImageArgs{
|
||||||
|
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||||
|
Location: pulumi.String("./app/Dockerfile.sshMount"),
|
||||||
|
},
|
||||||
|
Context: &dockerbuild.BuildContextArgs{
|
||||||
|
Location: pulumi.String("./app"),
|
||||||
|
},
|
||||||
|
Ssh: dockerbuild.SSHArray{
|
||||||
|
&dockerbuild.SSHArgs{
|
||||||
|
Id: pulumi.String("default"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = dockerbuild.NewImage(ctx, "secrets", &dockerbuild.ImageArgs{
|
||||||
|
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||||
|
Location: pulumi.String("./app/Dockerfile.secrets"),
|
||||||
|
},
|
||||||
|
Context: &dockerbuild.BuildContextArgs{
|
||||||
|
Location: pulumi.String("./app"),
|
||||||
|
},
|
||||||
|
Secrets: pulumi.StringMap{
|
||||||
|
"password": pulumi.String("hunter2"),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = dockerbuild.NewImage(ctx, "labels", &dockerbuild.ImageArgs{
|
||||||
|
Context: &dockerbuild.BuildContextArgs{
|
||||||
|
Location: pulumi.String("./app"),
|
||||||
|
},
|
||||||
|
Labels: pulumi.StringMap{
|
||||||
|
"description": pulumi.String("This image will get a descriptive label 👍"),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = dockerbuild.NewImage(ctx, "target", &dockerbuild.ImageArgs{
|
||||||
|
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||||
|
Location: pulumi.String("./app/Dockerfile.target"),
|
||||||
|
},
|
||||||
|
Context: &dockerbuild.BuildContextArgs{
|
||||||
|
Location: pulumi.String("./app"),
|
||||||
|
},
|
||||||
|
Target: pulumi.String("build-me"),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = dockerbuild.NewImage(ctx, "namedContexts", &dockerbuild.ImageArgs{
|
||||||
|
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||||
|
Location: pulumi.String("./app/Dockerfile.namedContexts"),
|
||||||
|
},
|
||||||
|
Context: &dockerbuild.BuildContextArgs{
|
||||||
|
Location: pulumi.String("./app"),
|
||||||
|
Named: dockerbuild.ContextMap{
|
||||||
|
"golang:latest": &dockerbuild.ContextArgs{
|
||||||
|
Location: pulumi.String("docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = dockerbuild.NewImage(ctx, "remoteContext", &dockerbuild.ImageArgs{
|
||||||
|
Context: &dockerbuild.BuildContextArgs{
|
||||||
|
Location: pulumi.String("https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = dockerbuild.NewImage(ctx, "remoteContextWithInline", &dockerbuild.ImageArgs{
|
||||||
|
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||||
|
Inline: pulumi.String("FROM busybox\nCOPY hello.c ./\n"),
|
||||||
|
},
|
||||||
|
Context: &dockerbuild.BuildContextArgs{
|
||||||
|
Location: pulumi.String("https://github.com/docker-library/hello-world.git"),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = dockerbuild.NewImage(ctx, "inline", &dockerbuild.ImageArgs{
|
||||||
|
Dockerfile: &dockerbuild.DockerfileArgs{
|
||||||
|
Inline: pulumi.String("FROM alpine\nRUN echo \"This uses an inline Dockerfile! 👍\"\n"),
|
||||||
|
},
|
||||||
|
Context: &dockerbuild.BuildContextArgs{
|
||||||
|
Location: pulumi.String("./app"),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = dockerbuild.NewImage(ctx, "dockerLoad", &dockerbuild.ImageArgs{
|
||||||
|
Context: &dockerbuild.BuildContextArgs{
|
||||||
|
Location: pulumi.String("./app"),
|
||||||
|
},
|
||||||
|
Exports: dockerbuild.ExportArray{
|
||||||
|
&dockerbuild.ExportArgs{
|
||||||
|
Docker: &dockerbuild.ExportDockerArgs{
|
||||||
|
Tar: pulumi.Bool(true),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
ctx.Export("platforms", multiPlatform.Platforms)
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ func TestGoExample(t *testing.T) {
|
|||||||
test := integration.ProgramTestOptions{
|
test := integration.ProgramTestOptions{
|
||||||
Dir: path.Join(cwd, "go"),
|
Dir: path.Join(cwd, "go"),
|
||||||
Dependencies: []string{
|
Dependencies: []string{
|
||||||
"github.com/pulumi/pulumi-dockerbuild/sdk/go/dockerbuild=../sdk/go/dockerbuild",
|
"github.com/pulumi/pulumi-docker-build/sdk/go/dockerbuild=../sdk/go/dockerbuild",
|
||||||
},
|
},
|
||||||
Secrets: map[string]string{
|
Secrets: map[string]string{
|
||||||
"dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
|
"dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
name: provider-dockerbuild
|
name: provider-docker-build
|
||||||
runtime: java
|
runtime: java
|
||||||
|
config:
|
||||||
|
dockerHubPassword:
|
||||||
|
type: string
|
||||||
|
secret: true
|
||||||
plugins:
|
plugins:
|
||||||
providers:
|
providers:
|
||||||
- name: dockerbuild
|
- name: docker-build
|
||||||
path: ../../bin
|
path: ../../bin
|
||||||
|
|||||||
2
examples/java/app/Dockerfile
Normal file
2
examples/java/app/Dockerfile
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
FROM alpine
|
||||||
|
RUN echo 👍
|
||||||
5
examples/java/app/Dockerfile.buildArgs
Normal file
5
examples/java/app/Dockerfile.buildArgs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
ARG SET_ME_TO_TRUE
|
||||||
|
RUN [ "$SET_ME_TO_TRUE" = "true" ]
|
||||||
|
RUN echo "That's the correct build arg, thanks! 👍"
|
||||||
2
examples/java/app/Dockerfile.emptyContext
Normal file
2
examples/java/app/Dockerfile.emptyContext
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
FROM alpine
|
||||||
|
RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
|
||||||
3
examples/java/app/Dockerfile.extraHosts
Normal file
3
examples/java/app/Dockerfile.extraHosts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
FROM bash AS base
|
||||||
|
|
||||||
|
RUN getent hosts metadata.google.internal
|
||||||
7
examples/java/app/Dockerfile.multiPlatform
Normal file
7
examples/java/app/Dockerfile.multiPlatform
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
FROM --platform=$BUILDPLATFORM alpine as build
|
||||||
|
RUN echo ${BUILDPLATFORM} > buildplatform
|
||||||
|
RUN echo ${TARGETPLATFORM} > targetplatform
|
||||||
|
|
||||||
|
FROM build
|
||||||
|
RUN cat buildplatform
|
||||||
|
RUN cat targetplatform
|
||||||
5
examples/java/app/Dockerfile.namedContexts
Normal file
5
examples/java/app/Dockerfile.namedContexts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# syntax=docker/dockerfile:1.4
|
||||||
|
FROM golang:latest
|
||||||
|
|
||||||
|
RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
|
||||||
|
RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
|
||||||
4
examples/java/app/Dockerfile.secrets
Normal file
4
examples/java/app/Dockerfile.secrets
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
|
||||||
|
|
||||||
5
examples/java/app/Dockerfile.sshMount
Normal file
5
examples/java/app/Dockerfile.sshMount
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
RUN apk add openssh-client
|
||||||
|
|
||||||
|
RUN --mount=type=ssh ssh-add -l
|
||||||
8
examples/java/app/Dockerfile.target
Normal file
8
examples/java/app/Dockerfile.target
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
FROM alpine as build-me
|
||||||
|
RUN echo 👍
|
||||||
|
|
||||||
|
FROM build-me as also-build-me
|
||||||
|
RUN echo 🤙
|
||||||
|
|
||||||
|
FROM build-me as dont-build-me
|
||||||
|
RUN [ "true" = "false" ]
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<groupId>com.pulumi</groupId>
|
<groupId>com.pulumi</groupId>
|
||||||
<artifactId>provider-dockerbuild</artifactId>
|
<artifactId>provider-docker-build</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.pulumi</groupId>
|
<groupId>com.pulumi</groupId>
|
||||||
<artifactId>dockerbuild</artifactId>
|
<artifactId>docker-build</artifactId>
|
||||||
<version>[0.0.0,)</version>
|
<version>[0.0.0,)</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
@@ -3,8 +3,19 @@ package generated_program;
|
|||||||
import com.pulumi.Context;
|
import com.pulumi.Context;
|
||||||
import com.pulumi.Pulumi;
|
import com.pulumi.Pulumi;
|
||||||
import com.pulumi.core.Output;
|
import com.pulumi.core.Output;
|
||||||
import com.pulumi.dockerbuild.Random;
|
import com.pulumi.dockerbuild.Image;
|
||||||
import com.pulumi.dockerbuild.RandomArgs;
|
import com.pulumi.dockerbuild.ImageArgs;
|
||||||
|
import com.pulumi.dockerbuild.inputs.DockerfileArgs;
|
||||||
|
import com.pulumi.dockerbuild.inputs.BuildContextArgs;
|
||||||
|
import com.pulumi.dockerbuild.inputs.ExportArgs;
|
||||||
|
import com.pulumi.dockerbuild.inputs.ExportRegistryArgs;
|
||||||
|
import com.pulumi.dockerbuild.inputs.RegistryArgs;
|
||||||
|
import com.pulumi.dockerbuild.inputs.CacheToArgs;
|
||||||
|
import com.pulumi.dockerbuild.inputs.CacheToLocalArgs;
|
||||||
|
import com.pulumi.dockerbuild.inputs.CacheFromArgs;
|
||||||
|
import com.pulumi.dockerbuild.inputs.CacheFromLocalArgs;
|
||||||
|
import com.pulumi.dockerbuild.inputs.SSHArgs;
|
||||||
|
import com.pulumi.dockerbuild.inputs.ExportDockerArgs;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -18,10 +29,165 @@ public class App {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void stack(Context ctx) {
|
public static void stack(Context ctx) {
|
||||||
var myRandomResource = new Random("myRandomResource", RandomArgs.builder()
|
final var config = ctx.config();
|
||||||
.length(24)
|
final var dockerHubPassword = config.get("dockerHubPassword");
|
||||||
|
var multiPlatform = new Image("multiPlatform", ImageArgs.builder()
|
||||||
|
.dockerfile(DockerfileArgs.builder()
|
||||||
|
.location("./app/Dockerfile.multiPlatform")
|
||||||
|
.build())
|
||||||
|
.context(BuildContextArgs.builder()
|
||||||
|
.location("./app")
|
||||||
|
.build())
|
||||||
|
.platforms(
|
||||||
|
"plan9/amd64",
|
||||||
|
"plan9/386")
|
||||||
.build());
|
.build());
|
||||||
|
|
||||||
ctx.export("value", myRandomResource.result());
|
var registryPush = new Image("registryPush", ImageArgs.builder()
|
||||||
|
.context(BuildContextArgs.builder()
|
||||||
|
.location("./app")
|
||||||
|
.build())
|
||||||
|
.tags("docker.io/pulumibot/buildkit-e2e:example")
|
||||||
|
.exports(ExportArgs.builder()
|
||||||
|
.registry(ExportRegistryArgs.builder()
|
||||||
|
.ociMediaTypes(true)
|
||||||
|
.push(false)
|
||||||
|
.build())
|
||||||
|
.build())
|
||||||
|
.registries(RegistryArgs.builder()
|
||||||
|
.address("docker.io")
|
||||||
|
.username("pulumibot")
|
||||||
|
.password(dockerHubPassword)
|
||||||
|
.build())
|
||||||
|
.build());
|
||||||
|
|
||||||
|
var cached = new Image("cached", ImageArgs.builder()
|
||||||
|
.context(BuildContextArgs.builder()
|
||||||
|
.location("./app")
|
||||||
|
.build())
|
||||||
|
.cacheTo(CacheToArgs.builder()
|
||||||
|
.local(CacheToLocalArgs.builder()
|
||||||
|
.dest("tmp/cache")
|
||||||
|
.mode("max")
|
||||||
|
.build())
|
||||||
|
.build())
|
||||||
|
.cacheFrom(CacheFromArgs.builder()
|
||||||
|
.local(CacheFromLocalArgs.builder()
|
||||||
|
.src("tmp/cache")
|
||||||
|
.build())
|
||||||
|
.build())
|
||||||
|
.build());
|
||||||
|
|
||||||
|
var buildArgs = new Image("buildArgs", ImageArgs.builder()
|
||||||
|
.dockerfile(DockerfileArgs.builder()
|
||||||
|
.location("./app/Dockerfile.buildArgs")
|
||||||
|
.build())
|
||||||
|
.context(BuildContextArgs.builder()
|
||||||
|
.location("./app")
|
||||||
|
.build())
|
||||||
|
.buildArgs(Map.of("SET_ME_TO_TRUE", "true"))
|
||||||
|
.build());
|
||||||
|
|
||||||
|
var extraHosts = new Image("extraHosts", ImageArgs.builder()
|
||||||
|
.dockerfile(DockerfileArgs.builder()
|
||||||
|
.location("./app/Dockerfile.extraHosts")
|
||||||
|
.build())
|
||||||
|
.context(BuildContextArgs.builder()
|
||||||
|
.location("./app")
|
||||||
|
.build())
|
||||||
|
.addHosts("metadata.google.internal:169.254.169.254")
|
||||||
|
.build());
|
||||||
|
|
||||||
|
var sshMount = new Image("sshMount", ImageArgs.builder()
|
||||||
|
.dockerfile(DockerfileArgs.builder()
|
||||||
|
.location("./app/Dockerfile.sshMount")
|
||||||
|
.build())
|
||||||
|
.context(BuildContextArgs.builder()
|
||||||
|
.location("./app")
|
||||||
|
.build())
|
||||||
|
.ssh(SSHArgs.builder()
|
||||||
|
.id("default")
|
||||||
|
.build())
|
||||||
|
.build());
|
||||||
|
|
||||||
|
var secrets = new Image("secrets", ImageArgs.builder()
|
||||||
|
.dockerfile(DockerfileArgs.builder()
|
||||||
|
.location("./app/Dockerfile.secrets")
|
||||||
|
.build())
|
||||||
|
.context(BuildContextArgs.builder()
|
||||||
|
.location("./app")
|
||||||
|
.build())
|
||||||
|
.secrets(Map.of("password", "hunter2"))
|
||||||
|
.build());
|
||||||
|
|
||||||
|
var labels = new Image("labels", ImageArgs.builder()
|
||||||
|
.context(BuildContextArgs.builder()
|
||||||
|
.location("./app")
|
||||||
|
.build())
|
||||||
|
.labels(Map.of("description", "This image will get a descriptive label 👍"))
|
||||||
|
.build());
|
||||||
|
|
||||||
|
var target = new Image("target", ImageArgs.builder()
|
||||||
|
.dockerfile(DockerfileArgs.builder()
|
||||||
|
.location("./app/Dockerfile.target")
|
||||||
|
.build())
|
||||||
|
.context(BuildContextArgs.builder()
|
||||||
|
.location("./app")
|
||||||
|
.build())
|
||||||
|
.target("build-me")
|
||||||
|
.build());
|
||||||
|
|
||||||
|
var namedContexts = new Image("namedContexts", ImageArgs.builder()
|
||||||
|
.dockerfile(DockerfileArgs.builder()
|
||||||
|
.location("./app/Dockerfile.namedContexts")
|
||||||
|
.build())
|
||||||
|
.context(BuildContextArgs.builder()
|
||||||
|
.location("./app")
|
||||||
|
.named(Map.of("golang:latest", Map.of("location", "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984")))
|
||||||
|
.build())
|
||||||
|
.build());
|
||||||
|
|
||||||
|
var remoteContext = new Image("remoteContext", ImageArgs.builder()
|
||||||
|
.context(BuildContextArgs.builder()
|
||||||
|
.location("https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile")
|
||||||
|
.build())
|
||||||
|
.build());
|
||||||
|
|
||||||
|
var remoteContextWithInline = new Image("remoteContextWithInline", ImageArgs.builder()
|
||||||
|
.dockerfile(DockerfileArgs.builder()
|
||||||
|
.inline("""
|
||||||
|
FROM busybox
|
||||||
|
COPY hello.c ./
|
||||||
|
""")
|
||||||
|
.build())
|
||||||
|
.context(BuildContextArgs.builder()
|
||||||
|
.location("https://github.com/docker-library/hello-world.git")
|
||||||
|
.build())
|
||||||
|
.build());
|
||||||
|
|
||||||
|
var inline = new Image("inline", ImageArgs.builder()
|
||||||
|
.dockerfile(DockerfileArgs.builder()
|
||||||
|
.inline("""
|
||||||
|
FROM alpine
|
||||||
|
RUN echo "This uses an inline Dockerfile! 👍"
|
||||||
|
""")
|
||||||
|
.build())
|
||||||
|
.context(BuildContextArgs.builder()
|
||||||
|
.location("./app")
|
||||||
|
.build())
|
||||||
|
.build());
|
||||||
|
|
||||||
|
var dockerLoad = new Image("dockerLoad", ImageArgs.builder()
|
||||||
|
.context(BuildContextArgs.builder()
|
||||||
|
.location("./app")
|
||||||
|
.build())
|
||||||
|
.exports(ExportArgs.builder()
|
||||||
|
.docker(ExportDockerArgs.builder()
|
||||||
|
.tar(true)
|
||||||
|
.build())
|
||||||
|
.build())
|
||||||
|
.build());
|
||||||
|
|
||||||
|
ctx.export("platforms", multiPlatform.platforms());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
61
examples/main_test.go
Normal file
61
examples/main_test.go
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
package examples
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/rsa"
|
||||||
|
"errors"
|
||||||
|
"io"
|
||||||
|
"math/rand"
|
||||||
|
"net"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"golang.org/x/crypto/ssh/agent"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMain(m *testing.M) {
|
||||||
|
sock := sshagent()
|
||||||
|
os.Setenv("SSH_AUTH_SOCK", sock)
|
||||||
|
|
||||||
|
os.Exit(m.Run())
|
||||||
|
}
|
||||||
|
|
||||||
|
// sshagent crates an in-memory SSH agent with one identity.
|
||||||
|
func sshagent() string {
|
||||||
|
dir, err := os.MkdirTemp(os.TempDir(), "docker-test-*")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sock := filepath.Join(dir, "test.sock")
|
||||||
|
|
||||||
|
l, err := net.Listen("unix", sock)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
a := agent.NewKeyring()
|
||||||
|
//nolint:gosec
|
||||||
|
key, err := rsa.GenerateKey(rand.New(rand.NewSource(42)), 2048)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
err = a.Add(agent.AddedKey{PrivateKey: key})
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
conn, err := l.Accept()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
if err := agent.ServeAgent(a, conn); err != nil && !errors.Is(err, io.EOF) {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
return sock
|
||||||
|
}
|
||||||
@@ -1,6 +1,10 @@
|
|||||||
name: provider-dockerbuild
|
name: provider-docker-build
|
||||||
runtime: nodejs
|
runtime: nodejs
|
||||||
|
config:
|
||||||
|
dockerHubPassword:
|
||||||
|
type: string
|
||||||
|
secret: true
|
||||||
plugins:
|
plugins:
|
||||||
providers:
|
providers:
|
||||||
- name: dockerbuild
|
- name: docker-build
|
||||||
path: ../../bin
|
path: ../../bin
|
||||||
|
|||||||
2
examples/nodejs/app/Dockerfile
Normal file
2
examples/nodejs/app/Dockerfile
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
FROM alpine
|
||||||
|
RUN echo 👍
|
||||||
5
examples/nodejs/app/Dockerfile.buildArgs
Normal file
5
examples/nodejs/app/Dockerfile.buildArgs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
ARG SET_ME_TO_TRUE
|
||||||
|
RUN [ "$SET_ME_TO_TRUE" = "true" ]
|
||||||
|
RUN echo "That's the correct build arg, thanks! 👍"
|
||||||
2
examples/nodejs/app/Dockerfile.emptyContext
Normal file
2
examples/nodejs/app/Dockerfile.emptyContext
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
FROM alpine
|
||||||
|
RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
|
||||||
3
examples/nodejs/app/Dockerfile.extraHosts
Normal file
3
examples/nodejs/app/Dockerfile.extraHosts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
FROM bash AS base
|
||||||
|
|
||||||
|
RUN getent hosts metadata.google.internal
|
||||||
7
examples/nodejs/app/Dockerfile.multiPlatform
Normal file
7
examples/nodejs/app/Dockerfile.multiPlatform
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
FROM --platform=$BUILDPLATFORM alpine as build
|
||||||
|
RUN echo ${BUILDPLATFORM} > buildplatform
|
||||||
|
RUN echo ${TARGETPLATFORM} > targetplatform
|
||||||
|
|
||||||
|
FROM build
|
||||||
|
RUN cat buildplatform
|
||||||
|
RUN cat targetplatform
|
||||||
5
examples/nodejs/app/Dockerfile.namedContexts
Normal file
5
examples/nodejs/app/Dockerfile.namedContexts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# syntax=docker/dockerfile:1.4
|
||||||
|
FROM golang:latest
|
||||||
|
|
||||||
|
RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
|
||||||
|
RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
|
||||||
4
examples/nodejs/app/Dockerfile.secrets
Normal file
4
examples/nodejs/app/Dockerfile.secrets
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
|
||||||
|
|
||||||
5
examples/nodejs/app/Dockerfile.sshMount
Normal file
5
examples/nodejs/app/Dockerfile.sshMount
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
RUN apk add openssh-client
|
||||||
|
|
||||||
|
RUN --mount=type=ssh ssh-add -l
|
||||||
8
examples/nodejs/app/Dockerfile.target
Normal file
8
examples/nodejs/app/Dockerfile.target
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
FROM alpine as build-me
|
||||||
|
RUN echo 👍
|
||||||
|
|
||||||
|
FROM build-me as also-build-me
|
||||||
|
RUN echo 🤙
|
||||||
|
|
||||||
|
FROM build-me as dont-build-me
|
||||||
|
RUN [ "true" = "false" ]
|
||||||
@@ -1,5 +1,156 @@
|
|||||||
import * as pulumi from "@pulumi/pulumi";
|
import * as pulumi from "@pulumi/pulumi";
|
||||||
import * as dockerbuild from "@pulumi/dockerbuild";
|
import * as docker_build from "@pulumi/docker-build";
|
||||||
|
|
||||||
const myRandomResource = new dockerbuild.Random("myRandomResource", {length: 24});
|
const config = new pulumi.Config();
|
||||||
export const value = myRandomResource.result;
|
const dockerHubPassword = config.require("dockerHubPassword");
|
||||||
|
const multiPlatform = new docker_build.Image("multiPlatform", {
|
||||||
|
dockerfile: {
|
||||||
|
location: "./app/Dockerfile.multiPlatform",
|
||||||
|
},
|
||||||
|
context: {
|
||||||
|
location: "./app",
|
||||||
|
},
|
||||||
|
platforms: [
|
||||||
|
docker_build.Platform.Plan9_amd64,
|
||||||
|
docker_build.Platform.Plan9_386,
|
||||||
|
],
|
||||||
|
});
|
||||||
|
const registryPush = new docker_build.Image("registryPush", {
|
||||||
|
context: {
|
||||||
|
location: "./app",
|
||||||
|
},
|
||||||
|
tags: ["docker.io/pulumibot/buildkit-e2e:example"],
|
||||||
|
exports: [{
|
||||||
|
registry: {
|
||||||
|
ociMediaTypes: true,
|
||||||
|
push: false,
|
||||||
|
},
|
||||||
|
}],
|
||||||
|
registries: [{
|
||||||
|
address: "docker.io",
|
||||||
|
username: "pulumibot",
|
||||||
|
password: dockerHubPassword,
|
||||||
|
}],
|
||||||
|
});
|
||||||
|
const cached = new docker_build.Image("cached", {
|
||||||
|
context: {
|
||||||
|
location: "./app",
|
||||||
|
},
|
||||||
|
cacheTo: [{
|
||||||
|
local: {
|
||||||
|
dest: "tmp/cache",
|
||||||
|
mode: docker_build.CacheMode.Max,
|
||||||
|
},
|
||||||
|
}],
|
||||||
|
cacheFrom: [{
|
||||||
|
local: {
|
||||||
|
src: "tmp/cache",
|
||||||
|
},
|
||||||
|
}],
|
||||||
|
});
|
||||||
|
const buildArgs = new docker_build.Image("buildArgs", {
|
||||||
|
dockerfile: {
|
||||||
|
location: "./app/Dockerfile.buildArgs",
|
||||||
|
},
|
||||||
|
context: {
|
||||||
|
location: "./app",
|
||||||
|
},
|
||||||
|
buildArgs: {
|
||||||
|
SET_ME_TO_TRUE: "true",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const extraHosts = new docker_build.Image("extraHosts", {
|
||||||
|
dockerfile: {
|
||||||
|
location: "./app/Dockerfile.extraHosts",
|
||||||
|
},
|
||||||
|
context: {
|
||||||
|
location: "./app",
|
||||||
|
},
|
||||||
|
addHosts: ["metadata.google.internal:169.254.169.254"],
|
||||||
|
});
|
||||||
|
const sshMount = new docker_build.Image("sshMount", {
|
||||||
|
dockerfile: {
|
||||||
|
location: "./app/Dockerfile.sshMount",
|
||||||
|
},
|
||||||
|
context: {
|
||||||
|
location: "./app",
|
||||||
|
},
|
||||||
|
ssh: [{
|
||||||
|
id: "default",
|
||||||
|
}],
|
||||||
|
});
|
||||||
|
const secrets = new docker_build.Image("secrets", {
|
||||||
|
dockerfile: {
|
||||||
|
location: "./app/Dockerfile.secrets",
|
||||||
|
},
|
||||||
|
context: {
|
||||||
|
location: "./app",
|
||||||
|
},
|
||||||
|
secrets: {
|
||||||
|
password: "hunter2",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const labels = new docker_build.Image("labels", {
|
||||||
|
context: {
|
||||||
|
location: "./app",
|
||||||
|
},
|
||||||
|
labels: {
|
||||||
|
description: "This image will get a descriptive label 👍",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const target = new docker_build.Image("target", {
|
||||||
|
dockerfile: {
|
||||||
|
location: "./app/Dockerfile.target",
|
||||||
|
},
|
||||||
|
context: {
|
||||||
|
location: "./app",
|
||||||
|
},
|
||||||
|
target: "build-me",
|
||||||
|
});
|
||||||
|
const namedContexts = new docker_build.Image("namedContexts", {
|
||||||
|
dockerfile: {
|
||||||
|
location: "./app/Dockerfile.namedContexts",
|
||||||
|
},
|
||||||
|
context: {
|
||||||
|
location: "./app",
|
||||||
|
named: {
|
||||||
|
"golang:latest": {
|
||||||
|
location: "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const remoteContext = new docker_build.Image("remoteContext", {context: {
|
||||||
|
location: "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
|
||||||
|
}});
|
||||||
|
const remoteContextWithInline = new docker_build.Image("remoteContextWithInline", {
|
||||||
|
dockerfile: {
|
||||||
|
inline: `FROM busybox
|
||||||
|
COPY hello.c ./
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
context: {
|
||||||
|
location: "https://github.com/docker-library/hello-world.git",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const inline = new docker_build.Image("inline", {
|
||||||
|
dockerfile: {
|
||||||
|
inline: `FROM alpine
|
||||||
|
RUN echo "This uses an inline Dockerfile! 👍"
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
context: {
|
||||||
|
location: "./app",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const dockerLoad = new docker_build.Image("dockerLoad", {
|
||||||
|
context: {
|
||||||
|
location: "./app",
|
||||||
|
},
|
||||||
|
exports: [{
|
||||||
|
docker: {
|
||||||
|
tar: true,
|
||||||
|
},
|
||||||
|
}],
|
||||||
|
});
|
||||||
|
export const platforms = multiPlatform.platforms;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "provider-dockerbuild",
|
"name": "provider-docker-build",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^18"
|
"@types/node": "^18"
|
||||||
},
|
},
|
||||||
@@ -8,4 +8,3 @@
|
|||||||
"@pulumi/pulumi": "^3.0.0"
|
"@pulumi/pulumi": "^3.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ func TestNodeExample(t *testing.T) {
|
|||||||
|
|
||||||
test := integration.ProgramTestOptions{
|
test := integration.ProgramTestOptions{
|
||||||
Dir: path.Join(cwd, "nodejs"),
|
Dir: path.Join(cwd, "nodejs"),
|
||||||
Dependencies: []string{"@pulumi/dockerbuild"},
|
Dependencies: []string{"@pulumi/docker-build"},
|
||||||
Secrets: map[string]string{
|
Secrets: map[string]string{
|
||||||
"dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
|
"dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
name: provider-dockerbuild
|
name: provider-docker-build
|
||||||
runtime: python
|
runtime: python
|
||||||
|
config:
|
||||||
|
dockerHubPassword:
|
||||||
|
type: string
|
||||||
|
secret: true
|
||||||
plugins:
|
plugins:
|
||||||
providers:
|
providers:
|
||||||
- name: dockerbuild
|
- name: docker-build
|
||||||
path: ../../bin
|
path: ../../bin
|
||||||
|
|||||||
@@ -1,5 +1,143 @@
|
|||||||
import pulumi
|
import pulumi
|
||||||
import pulumi_dockerbuild as dockerbuild
|
import pulumi_docker_build as docker_build
|
||||||
|
|
||||||
my_random_resource = dockerbuild.Random("myRandomResource", length=24)
|
config = pulumi.Config()
|
||||||
pulumi.export("value", my_random_resource.result)
|
docker_hub_password = config.require("dockerHubPassword")
|
||||||
|
multi_platform = docker_build.Image("multiPlatform",
|
||||||
|
dockerfile=docker_build.DockerfileArgs(
|
||||||
|
location="./app/Dockerfile.multiPlatform",
|
||||||
|
),
|
||||||
|
context=docker_build.BuildContextArgs(
|
||||||
|
location="./app",
|
||||||
|
),
|
||||||
|
platforms=[
|
||||||
|
docker_build.Platform.PLAN9_AMD64,
|
||||||
|
docker_build.Platform.PLAN9_386,
|
||||||
|
])
|
||||||
|
registry_push = docker_build.Image("registryPush",
|
||||||
|
context=docker_build.BuildContextArgs(
|
||||||
|
location="./app",
|
||||||
|
),
|
||||||
|
tags=["docker.io/pulumibot/buildkit-e2e:example"],
|
||||||
|
exports=[docker_build.ExportArgs(
|
||||||
|
registry=docker_build.ExportRegistryArgs(
|
||||||
|
oci_media_types=True,
|
||||||
|
push=False,
|
||||||
|
),
|
||||||
|
)],
|
||||||
|
registries=[docker_build.RegistryArgs(
|
||||||
|
address="docker.io",
|
||||||
|
username="pulumibot",
|
||||||
|
password=docker_hub_password,
|
||||||
|
)])
|
||||||
|
cached = docker_build.Image("cached",
|
||||||
|
context=docker_build.BuildContextArgs(
|
||||||
|
location="./app",
|
||||||
|
),
|
||||||
|
cache_to=[docker_build.CacheToArgs(
|
||||||
|
local=docker_build.CacheToLocalArgs(
|
||||||
|
dest="tmp/cache",
|
||||||
|
mode=docker_build.CacheMode.MAX,
|
||||||
|
),
|
||||||
|
)],
|
||||||
|
cache_from=[docker_build.CacheFromArgs(
|
||||||
|
local=docker_build.CacheFromLocalArgs(
|
||||||
|
src="tmp/cache",
|
||||||
|
),
|
||||||
|
)])
|
||||||
|
build_args = docker_build.Image("buildArgs",
|
||||||
|
dockerfile=docker_build.DockerfileArgs(
|
||||||
|
location="./app/Dockerfile.buildArgs",
|
||||||
|
),
|
||||||
|
context=docker_build.BuildContextArgs(
|
||||||
|
location="./app",
|
||||||
|
),
|
||||||
|
build_args={
|
||||||
|
"SET_ME_TO_TRUE": "true",
|
||||||
|
})
|
||||||
|
extra_hosts = docker_build.Image("extraHosts",
|
||||||
|
dockerfile=docker_build.DockerfileArgs(
|
||||||
|
location="./app/Dockerfile.extraHosts",
|
||||||
|
),
|
||||||
|
context=docker_build.BuildContextArgs(
|
||||||
|
location="./app",
|
||||||
|
),
|
||||||
|
add_hosts=["metadata.google.internal:169.254.169.254"])
|
||||||
|
ssh_mount = docker_build.Image("sshMount",
|
||||||
|
dockerfile=docker_build.DockerfileArgs(
|
||||||
|
location="./app/Dockerfile.sshMount",
|
||||||
|
),
|
||||||
|
context=docker_build.BuildContextArgs(
|
||||||
|
location="./app",
|
||||||
|
),
|
||||||
|
ssh=[docker_build.SSHArgs(
|
||||||
|
id="default",
|
||||||
|
)])
|
||||||
|
secrets = docker_build.Image("secrets",
|
||||||
|
dockerfile=docker_build.DockerfileArgs(
|
||||||
|
location="./app/Dockerfile.secrets",
|
||||||
|
),
|
||||||
|
context=docker_build.BuildContextArgs(
|
||||||
|
location="./app",
|
||||||
|
),
|
||||||
|
secrets={
|
||||||
|
"password": "hunter2",
|
||||||
|
})
|
||||||
|
labels = docker_build.Image("labels",
|
||||||
|
context=docker_build.BuildContextArgs(
|
||||||
|
location="./app",
|
||||||
|
),
|
||||||
|
labels={
|
||||||
|
"description": "This image will get a descriptive label 👍",
|
||||||
|
})
|
||||||
|
target = docker_build.Image("target",
|
||||||
|
dockerfile=docker_build.DockerfileArgs(
|
||||||
|
location="./app/Dockerfile.target",
|
||||||
|
),
|
||||||
|
context=docker_build.BuildContextArgs(
|
||||||
|
location="./app",
|
||||||
|
),
|
||||||
|
target="build-me")
|
||||||
|
named_contexts = docker_build.Image("namedContexts",
|
||||||
|
dockerfile=docker_build.DockerfileArgs(
|
||||||
|
location="./app/Dockerfile.namedContexts",
|
||||||
|
),
|
||||||
|
context=docker_build.BuildContextArgs(
|
||||||
|
location="./app",
|
||||||
|
named={
|
||||||
|
"golang:latest": docker_build.ContextArgs(
|
||||||
|
location="docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
))
|
||||||
|
remote_context = docker_build.Image("remoteContext", context=docker_build.BuildContextArgs(
|
||||||
|
location="https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile",
|
||||||
|
))
|
||||||
|
remote_context_with_inline = docker_build.Image("remoteContextWithInline",
|
||||||
|
dockerfile=docker_build.DockerfileArgs(
|
||||||
|
inline="""FROM busybox
|
||||||
|
COPY hello.c ./
|
||||||
|
""",
|
||||||
|
),
|
||||||
|
context=docker_build.BuildContextArgs(
|
||||||
|
location="https://github.com/docker-library/hello-world.git",
|
||||||
|
))
|
||||||
|
inline = docker_build.Image("inline",
|
||||||
|
dockerfile=docker_build.DockerfileArgs(
|
||||||
|
inline="""FROM alpine
|
||||||
|
RUN echo "This uses an inline Dockerfile! 👍"
|
||||||
|
""",
|
||||||
|
),
|
||||||
|
context=docker_build.BuildContextArgs(
|
||||||
|
location="./app",
|
||||||
|
))
|
||||||
|
docker_load = docker_build.Image("dockerLoad",
|
||||||
|
context=docker_build.BuildContextArgs(
|
||||||
|
location="./app",
|
||||||
|
),
|
||||||
|
exports=[docker_build.ExportArgs(
|
||||||
|
docker=docker_build.ExportDockerArgs(
|
||||||
|
tar=True,
|
||||||
|
),
|
||||||
|
)])
|
||||||
|
pulumi.export("platforms", multi_platform.platforms)
|
||||||
|
|||||||
2
examples/python/app/Dockerfile
Normal file
2
examples/python/app/Dockerfile
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
FROM alpine
|
||||||
|
RUN echo 👍
|
||||||
5
examples/python/app/Dockerfile.buildArgs
Normal file
5
examples/python/app/Dockerfile.buildArgs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
ARG SET_ME_TO_TRUE
|
||||||
|
RUN [ "$SET_ME_TO_TRUE" = "true" ]
|
||||||
|
RUN echo "That's the correct build arg, thanks! 👍"
|
||||||
2
examples/python/app/Dockerfile.emptyContext
Normal file
2
examples/python/app/Dockerfile.emptyContext
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
FROM alpine
|
||||||
|
RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
|
||||||
3
examples/python/app/Dockerfile.extraHosts
Normal file
3
examples/python/app/Dockerfile.extraHosts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
FROM bash AS base
|
||||||
|
|
||||||
|
RUN getent hosts metadata.google.internal
|
||||||
7
examples/python/app/Dockerfile.multiPlatform
Normal file
7
examples/python/app/Dockerfile.multiPlatform
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
FROM --platform=$BUILDPLATFORM alpine as build
|
||||||
|
RUN echo ${BUILDPLATFORM} > buildplatform
|
||||||
|
RUN echo ${TARGETPLATFORM} > targetplatform
|
||||||
|
|
||||||
|
FROM build
|
||||||
|
RUN cat buildplatform
|
||||||
|
RUN cat targetplatform
|
||||||
5
examples/python/app/Dockerfile.namedContexts
Normal file
5
examples/python/app/Dockerfile.namedContexts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# syntax=docker/dockerfile:1.4
|
||||||
|
FROM golang:latest
|
||||||
|
|
||||||
|
RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
|
||||||
|
RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
|
||||||
4
examples/python/app/Dockerfile.secrets
Normal file
4
examples/python/app/Dockerfile.secrets
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
|
||||||
|
|
||||||
5
examples/python/app/Dockerfile.sshMount
Normal file
5
examples/python/app/Dockerfile.sshMount
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
RUN apk add openssh-client
|
||||||
|
|
||||||
|
RUN --mount=type=ssh ssh-add -l
|
||||||
8
examples/python/app/Dockerfile.target
Normal file
8
examples/python/app/Dockerfile.target
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
FROM alpine as build-me
|
||||||
|
RUN echo 👍
|
||||||
|
|
||||||
|
FROM build-me as also-build-me
|
||||||
|
RUN echo 🤙
|
||||||
|
|
||||||
|
FROM build-me as dont-build-me
|
||||||
|
RUN [ "true" = "false" ]
|
||||||
@@ -17,7 +17,8 @@ func TestPythonExample(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
test := integration.ProgramTestOptions{
|
test := integration.ProgramTestOptions{
|
||||||
Dir: path.Join(cwd, "python"),
|
Dir: path.Join(cwd, "python"),
|
||||||
|
RelativeWorkDir: ".",
|
||||||
Dependencies: []string{
|
Dependencies: []string{
|
||||||
path.Join("..", "sdk", "python", "bin"),
|
path.Join("..", "sdk", "python", "bin"),
|
||||||
},
|
},
|
||||||
|
|||||||
1
examples/tests/dockerhub/.dockerignore
Normal file
1
examples/tests/dockerhub/.dockerignore
Normal file
@@ -0,0 +1 @@
|
|||||||
|
*
|
||||||
34
examples/tests/dockerhub/Pulumi.yaml
Normal file
34
examples/tests/dockerhub/Pulumi.yaml
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
name: dockerhub
|
||||||
|
description: Push to DockerHub with caching
|
||||||
|
runtime: yaml
|
||||||
|
plugins:
|
||||||
|
providers:
|
||||||
|
- name: docker-build
|
||||||
|
path: ../../../bin
|
||||||
|
outputs:
|
||||||
|
ref: ${my-image.ref}
|
||||||
|
resources:
|
||||||
|
my-image:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
tags:
|
||||||
|
- docker.io/pulumibot/buildkit-e2e
|
||||||
|
push: true
|
||||||
|
context:
|
||||||
|
location: .
|
||||||
|
dockerfile:
|
||||||
|
inline: FROM alpine
|
||||||
|
cacheFrom:
|
||||||
|
- registry:
|
||||||
|
ref: docker.io/pulumibot/buildkit-e2e:cache
|
||||||
|
cacheTo:
|
||||||
|
- registry:
|
||||||
|
ref: docker.io/pulumibot/buildkit-e2e:cache
|
||||||
|
registries:
|
||||||
|
- username: pulumibot
|
||||||
|
address: docker.io
|
||||||
|
password: ${dockerHubPassword}
|
||||||
|
config:
|
||||||
|
dockerHubPassword:
|
||||||
|
type: string
|
||||||
|
secret: true
|
||||||
1
examples/tests/ecr/.dockerignore
Normal file
1
examples/tests/ecr/.dockerignore
Normal file
@@ -0,0 +1 @@
|
|||||||
|
*
|
||||||
40
examples/tests/ecr/Pulumi.yaml
Normal file
40
examples/tests/ecr/Pulumi.yaml
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
name: ecr
|
||||||
|
description: Push to AWS ECR with caching
|
||||||
|
runtime: yaml
|
||||||
|
plugins:
|
||||||
|
providers:
|
||||||
|
- name: docker-build
|
||||||
|
path: ../../../bin
|
||||||
|
outputs:
|
||||||
|
ref: ${my-image.ref}
|
||||||
|
resources:
|
||||||
|
ecr-repository:
|
||||||
|
type: aws:ecr:Repository
|
||||||
|
properties:
|
||||||
|
forceDelete: true
|
||||||
|
my-image:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
tags:
|
||||||
|
- ${ecr-repository.repositoryUrl}:latest
|
||||||
|
push: true
|
||||||
|
context:
|
||||||
|
location: .
|
||||||
|
dockerfile:
|
||||||
|
inline: FROM alpine
|
||||||
|
cacheFrom:
|
||||||
|
- registry:
|
||||||
|
ref: ${ecr-repository.repositoryUrl}:cache
|
||||||
|
cacheTo:
|
||||||
|
- registry:
|
||||||
|
ref: ${ecr-repository.repositoryUrl}:cache
|
||||||
|
imageManifest: true
|
||||||
|
ociMediaTypes: true
|
||||||
|
registries:
|
||||||
|
- username: ${auth-token.userName}
|
||||||
|
password: ${auth-token.password}
|
||||||
|
address: ${ecr-repository.repositoryUrl}
|
||||||
|
variables:
|
||||||
|
auth-token:
|
||||||
|
fn::aws:ecr:getAuthorizationToken:
|
||||||
|
registryId: ${ecr-repository.registryId}
|
||||||
1
examples/tests/unauthenticated/.dockerignore
Normal file
1
examples/tests/unauthenticated/.dockerignore
Normal file
@@ -0,0 +1 @@
|
|||||||
|
*
|
||||||
18
examples/tests/unauthenticated/Pulumi.yaml
Normal file
18
examples/tests/unauthenticated/Pulumi.yaml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
name: dockerhub-unauthenticated
|
||||||
|
description: Pull an image from Dockerhub without credentials
|
||||||
|
runtime: yaml
|
||||||
|
plugins:
|
||||||
|
providers:
|
||||||
|
- name: docker-build
|
||||||
|
path: ../../../bin
|
||||||
|
resources:
|
||||||
|
my-image:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
tags:
|
||||||
|
- alpine-local
|
||||||
|
load: true
|
||||||
|
context:
|
||||||
|
location: .
|
||||||
|
dockerfile:
|
||||||
|
inline: FROM alpine
|
||||||
@@ -1,15 +1,181 @@
|
|||||||
name: provider-dockerbuild
|
name: provider-docker-build
|
||||||
runtime: yaml
|
runtime: yaml
|
||||||
plugins:
|
plugins:
|
||||||
providers:
|
providers:
|
||||||
- name: dockerbuild
|
- name: docker-build
|
||||||
path: ../../bin
|
path: ../../bin
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
myRandomResource:
|
# docker buildx build -f app/Dockerfile.multiPlatform --platform plan9/amd64,plan9/386 app
|
||||||
type: dockerbuild:Random
|
multiPlatform:
|
||||||
|
type: docker-build:Image
|
||||||
properties:
|
properties:
|
||||||
length: 24
|
dockerfile:
|
||||||
|
location: "./app/Dockerfile.multiPlatform"
|
||||||
|
context:
|
||||||
|
location: "./app"
|
||||||
|
platforms:
|
||||||
|
- plan9/amd64
|
||||||
|
- plan9/386
|
||||||
|
|
||||||
|
# docker buildx build --output=type=registry app
|
||||||
|
registryPush:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
context:
|
||||||
|
location: "./app"
|
||||||
|
tags: ["docker.io/pulumibot/buildkit-e2e:example"]
|
||||||
|
exports:
|
||||||
|
- registry:
|
||||||
|
ociMediaTypes: true
|
||||||
|
push: false # Omit this to actually push images.
|
||||||
|
registries:
|
||||||
|
- address: docker.io
|
||||||
|
username: pulumibot
|
||||||
|
password: ${dockerHubPassword}
|
||||||
|
|
||||||
|
# docker buildx build --cache-to=type=local,dest=tmp/cache,mode=max --cache-from=type=local,src=tmp/cache app
|
||||||
|
cached:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
context:
|
||||||
|
location: "./app"
|
||||||
|
cacheTo:
|
||||||
|
- local:
|
||||||
|
dest: tmp/cache
|
||||||
|
mode: max
|
||||||
|
cacheFrom:
|
||||||
|
- local:
|
||||||
|
src: tmp/cache
|
||||||
|
|
||||||
|
# docker buildx build -f app/Dockerfile.buildArgs --build-arg SET_ME_TO_TRUE=true app
|
||||||
|
buildArgs:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
dockerfile:
|
||||||
|
location: "./app/Dockerfile.buildArgs"
|
||||||
|
context:
|
||||||
|
location: "./app"
|
||||||
|
buildArgs:
|
||||||
|
SET_ME_TO_TRUE: "true"
|
||||||
|
|
||||||
|
# docker buildx build -f app/Dockerfile.extraHosts --add-host metadata.google.internal:169.254.169.254 app
|
||||||
|
extraHosts:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
dockerfile:
|
||||||
|
location: "./app/Dockerfile.extraHosts"
|
||||||
|
context:
|
||||||
|
location: "./app"
|
||||||
|
addHosts:
|
||||||
|
- "metadata.google.internal:169.254.169.254"
|
||||||
|
|
||||||
|
# docker buildx build -f app/Dockerfile.sshMount --ssh default app
|
||||||
|
sshMount:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
dockerfile:
|
||||||
|
location: "./app/Dockerfile.sshMount"
|
||||||
|
context:
|
||||||
|
location: "./app"
|
||||||
|
ssh:
|
||||||
|
- id: default
|
||||||
|
|
||||||
|
# PASSWORD=hunter2 docker buildx build -f app/Dockerfile.secrets --secret id=password,env=PASSWORD app
|
||||||
|
secrets:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
dockerfile:
|
||||||
|
location: "./app/Dockerfile.secrets"
|
||||||
|
context:
|
||||||
|
location: "./app"
|
||||||
|
secrets:
|
||||||
|
password: hunter2
|
||||||
|
|
||||||
|
# docker buildx build --label "description=This image will get a descriptive label 👍" app
|
||||||
|
labels:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
context:
|
||||||
|
location: "./app"
|
||||||
|
labels:
|
||||||
|
description: "This image will get a descriptive label 👍"
|
||||||
|
|
||||||
|
# docker buildx build -f app/Dockerfile.target --target build-me app
|
||||||
|
target:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
dockerfile:
|
||||||
|
location: "./app/Dockerfile.target"
|
||||||
|
context:
|
||||||
|
location: "./app"
|
||||||
|
target: "build-me"
|
||||||
|
|
||||||
|
# docker buildx build -f app/Dockerfile.namedContexts \
|
||||||
|
# --build-context golang:latest=docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984 app
|
||||||
|
namedContexts:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
dockerfile:
|
||||||
|
location: "./app/Dockerfile.namedContexts"
|
||||||
|
context:
|
||||||
|
location: "./app"
|
||||||
|
named:
|
||||||
|
"golang:latest":
|
||||||
|
location: "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984"
|
||||||
|
|
||||||
|
# docker buildx build https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile
|
||||||
|
remoteContext:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
context:
|
||||||
|
location: "https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile"
|
||||||
|
|
||||||
|
# docker buildx build -f - https://github.com/docker-library/hello-world.git <<EOF
|
||||||
|
# FROM busybox
|
||||||
|
# COPY hello.c ./
|
||||||
|
# EOF
|
||||||
|
remoteContextWithInline:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
dockerfile:
|
||||||
|
inline: |
|
||||||
|
FROM busybox
|
||||||
|
COPY hello.c ./
|
||||||
|
context:
|
||||||
|
location: "https://github.com/docker-library/hello-world.git"
|
||||||
|
|
||||||
|
# echo "FROM alpine" | docker buildx build -f - .
|
||||||
|
inline:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
dockerfile:
|
||||||
|
inline: |
|
||||||
|
FROM alpine
|
||||||
|
RUN echo "This uses an inline Dockerfile! 👍"
|
||||||
|
context:
|
||||||
|
location: "./app"
|
||||||
|
|
||||||
|
# docker buildx build --load .
|
||||||
|
dockerLoad:
|
||||||
|
type: docker-build:Image
|
||||||
|
properties:
|
||||||
|
context:
|
||||||
|
location: "./app"
|
||||||
|
exports:
|
||||||
|
- docker:
|
||||||
|
tar: true
|
||||||
|
|
||||||
|
# docker buildx build - < app/Dockerfile.emptyContext
|
||||||
|
#emptyContext:
|
||||||
|
# type: docker-build:Image
|
||||||
|
# properties:
|
||||||
|
# file: "app/Dockerfile.emptyContext"
|
||||||
|
# context: "-"
|
||||||
|
config:
|
||||||
|
dockerHubPassword:
|
||||||
|
type: string
|
||||||
|
secret: true
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
value: ${myRandomResource.result}
|
platforms: ${multiPlatform.platforms}
|
||||||
|
|||||||
2
examples/yaml/app/Dockerfile
Normal file
2
examples/yaml/app/Dockerfile
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
FROM alpine
|
||||||
|
RUN echo 👍
|
||||||
5
examples/yaml/app/Dockerfile.buildArgs
Normal file
5
examples/yaml/app/Dockerfile.buildArgs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
ARG SET_ME_TO_TRUE
|
||||||
|
RUN [ "$SET_ME_TO_TRUE" = "true" ]
|
||||||
|
RUN echo "That's the correct build arg, thanks! 👍"
|
||||||
2
examples/yaml/app/Dockerfile.emptyContext
Normal file
2
examples/yaml/app/Dockerfile.emptyContext
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
FROM alpine
|
||||||
|
RUN echo "This image doesn't use any local files, so it doesn't need a context parameter 👍"
|
||||||
3
examples/yaml/app/Dockerfile.extraHosts
Normal file
3
examples/yaml/app/Dockerfile.extraHosts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
FROM bash AS base
|
||||||
|
|
||||||
|
RUN getent hosts metadata.google.internal
|
||||||
7
examples/yaml/app/Dockerfile.multiPlatform
Normal file
7
examples/yaml/app/Dockerfile.multiPlatform
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
FROM --platform=$BUILDPLATFORM alpine as build
|
||||||
|
RUN echo ${BUILDPLATFORM} > buildplatform
|
||||||
|
RUN echo ${TARGETPLATFORM} > targetplatform
|
||||||
|
|
||||||
|
FROM build
|
||||||
|
RUN cat buildplatform
|
||||||
|
RUN cat targetplatform
|
||||||
5
examples/yaml/app/Dockerfile.namedContexts
Normal file
5
examples/yaml/app/Dockerfile.namedContexts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# syntax=docker/dockerfile:1.4
|
||||||
|
FROM golang:latest
|
||||||
|
|
||||||
|
RUN version="$(go version)" && echo $version && [ "$version" = "go version go1.21.7 linux/amd64" ]
|
||||||
|
RUN echo "This image uses named contexts to pin golang:latest to a specific SHA 👍"
|
||||||
4
examples/yaml/app/Dockerfile.secrets
Normal file
4
examples/yaml/app/Dockerfile.secrets
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
RUN --mount=type=secret,id=password [ "$(cat /run/secrets/password)" = "hunter2" ]
|
||||||
|
|
||||||
5
examples/yaml/app/Dockerfile.sshMount
Normal file
5
examples/yaml/app/Dockerfile.sshMount
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
FROM alpine
|
||||||
|
|
||||||
|
RUN apk add openssh-client
|
||||||
|
|
||||||
|
RUN --mount=type=ssh ssh-add -l
|
||||||
8
examples/yaml/app/Dockerfile.target
Normal file
8
examples/yaml/app/Dockerfile.target
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
FROM alpine as build-me
|
||||||
|
RUN echo 👍
|
||||||
|
|
||||||
|
FROM build-me as also-build-me
|
||||||
|
RUN echo 🤙
|
||||||
|
|
||||||
|
FROM build-me as dont-build-me
|
||||||
|
RUN [ "true" = "false" ]
|
||||||
@@ -25,3 +25,47 @@ func TestYAMLExample(t *testing.T) {
|
|||||||
|
|
||||||
integration.ProgramTest(t, &test)
|
integration.ProgramTest(t, &test)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestECR(t *testing.T) {
|
||||||
|
if os.Getenv("AWS_SESSION_TOKEN") == "" {
|
||||||
|
t.Skip("Missing AWS credentials")
|
||||||
|
}
|
||||||
|
|
||||||
|
cwd, err := os.Getwd()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
test := integration.ProgramTestOptions{
|
||||||
|
Dir: path.Join(cwd, "tests/ecr"),
|
||||||
|
}
|
||||||
|
|
||||||
|
integration.ProgramTest(t, &test)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDockerHub(t *testing.T) {
|
||||||
|
if os.Getenv("DOCKER_HUB_PASSWORD") == "" {
|
||||||
|
t.Skip("Missing DockerHub credentials")
|
||||||
|
}
|
||||||
|
|
||||||
|
cwd, err := os.Getwd()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
test := integration.ProgramTestOptions{
|
||||||
|
Dir: path.Join(cwd, "tests/dockerhub"),
|
||||||
|
Secrets: map[string]string{
|
||||||
|
"dockerHubPassword": os.Getenv("DOCKER_HUB_PASSWORD"),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
integration.ProgramTest(t, &test)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDockerHubUnauthenticated(t *testing.T) {
|
||||||
|
cwd, err := os.Getwd()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
test := integration.ProgramTestOptions{
|
||||||
|
Dir: path.Join(cwd, "tests/unauthenticated"),
|
||||||
|
}
|
||||||
|
|
||||||
|
integration.ProgramTest(t, &test)
|
||||||
|
}
|
||||||
|
|||||||
440
go.mod
440
go.mod
@@ -1,157 +1,296 @@
|
|||||||
module github.com/pulumi/pulumi-dockerbuild
|
module github.com/pulumi/pulumi-docker-build
|
||||||
|
|
||||||
go 1.21.7
|
go 1.21.7
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/blang/semver v3.5.1+incompatible
|
github.com/blang/semver v3.5.1+incompatible
|
||||||
github.com/pulumi/pulumi-go-provider v0.14.1-0.20240301190400-aeddefa8dc54
|
github.com/distribution/reference v0.5.0
|
||||||
github.com/pulumi/pulumi-go-provider/integration v0.10.0
|
github.com/docker/buildx v0.13.1
|
||||||
github.com/pulumi/pulumi-java/pkg v0.9.9
|
github.com/docker/cli v26.0.0-rc1+incompatible
|
||||||
github.com/pulumi/pulumi/pkg/v3 v3.111.1
|
github.com/docker/distribution v2.8.2+incompatible
|
||||||
github.com/pulumi/pulumi/sdk/v3 v3.111.1
|
github.com/docker/docker v26.0.0-rc1+incompatible
|
||||||
github.com/stretchr/testify v1.8.4
|
github.com/golangci/golangci-lint v1.57.1
|
||||||
|
github.com/moby/buildkit v0.13.0
|
||||||
|
github.com/moby/patternmatcher v0.6.0
|
||||||
|
github.com/muesli/reflow v0.3.0
|
||||||
|
github.com/otiai10/copy v1.14.0
|
||||||
|
github.com/pulumi/pulumi-go-provider v0.16.0
|
||||||
|
github.com/pulumi/pulumi-go-provider/integration v0.10.1-0.20240314105842-9fbffb634faf
|
||||||
|
github.com/pulumi/pulumi-java/pkg v0.10.0
|
||||||
|
github.com/pulumi/pulumi/pkg/v3 v3.113.0
|
||||||
|
github.com/pulumi/pulumi/sdk/go/pulumi-language-go/v3 v3.0.0-20240415162817-44c8de53d5d2
|
||||||
|
github.com/pulumi/pulumi/sdk/v3 v3.113.0
|
||||||
|
github.com/regclient/regclient v0.0.0-20240308005156-a7434cff9c6b
|
||||||
|
github.com/sirupsen/logrus v1.9.3
|
||||||
|
github.com/spf13/afero v1.11.0
|
||||||
|
github.com/stretchr/testify v1.9.0
|
||||||
|
github.com/theupdateframework/notary v0.7.0
|
||||||
|
github.com/tonistiigi/fsutil v0.0.0-20240301111122-7525a1af2bb5
|
||||||
|
go.uber.org/mock v0.3.0
|
||||||
|
golang.org/x/crypto v0.21.0
|
||||||
|
google.golang.org/protobuf v1.33.0
|
||||||
|
gopkg.in/yaml.v3 v3.0.1
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
cloud.google.com/go v0.110.10 // indirect
|
4d63.com/gocheckcompilerdirectives v1.2.1 // indirect
|
||||||
cloud.google.com/go/compute v1.23.3 // indirect
|
4d63.com/gochecknoglobals v0.2.1 // indirect
|
||||||
|
cloud.google.com/go v0.112.1 // indirect
|
||||||
|
cloud.google.com/go/compute v1.25.0 // indirect
|
||||||
cloud.google.com/go/compute/metadata v0.2.3 // indirect
|
cloud.google.com/go/compute/metadata v0.2.3 // indirect
|
||||||
cloud.google.com/go/iam v1.1.5 // indirect
|
cloud.google.com/go/iam v1.1.6 // indirect
|
||||||
cloud.google.com/go/kms v1.15.5 // indirect
|
cloud.google.com/go/kms v1.15.7 // indirect
|
||||||
cloud.google.com/go/logging v1.8.1 // indirect
|
cloud.google.com/go/logging v1.9.0 // indirect
|
||||||
cloud.google.com/go/longrunning v0.5.4 // indirect
|
cloud.google.com/go/longrunning v0.5.5 // indirect
|
||||||
cloud.google.com/go/storage v1.35.1 // indirect
|
cloud.google.com/go/storage v1.39.1 // indirect
|
||||||
dario.cat/mergo v1.0.0 // indirect
|
dario.cat/mergo v1.0.0 // indirect
|
||||||
|
github.com/4meepo/tagalign v1.3.3 // indirect
|
||||||
|
github.com/Abirdcfly/dupword v0.0.14 // indirect
|
||||||
|
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect
|
||||||
github.com/AlecAivazis/survey/v2 v2.3.7 // indirect
|
github.com/AlecAivazis/survey/v2 v2.3.7 // indirect
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 // indirect
|
github.com/Antonboom/errname v0.1.12 // indirect
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 // indirect
|
github.com/Antonboom/nilnil v0.1.7 // indirect
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 // indirect
|
github.com/Antonboom/testifylint v1.2.0 // indirect
|
||||||
|
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 // indirect
|
||||||
|
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 // indirect
|
||||||
|
github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 // indirect
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.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/keyvault/internal v0.7.1 // indirect
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 // indirect
|
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.1 // indirect
|
||||||
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
|
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
|
||||||
github.com/Azure/go-autorest v14.2.0+incompatible // indirect
|
github.com/Azure/go-autorest v14.2.0+incompatible // indirect
|
||||||
github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect
|
github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect
|
||||||
github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0 // indirect
|
github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect
|
||||||
github.com/BurntSushi/toml v1.2.1 // indirect
|
github.com/BurntSushi/toml v1.3.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 v1.5.0 // indirect
|
||||||
github.com/Microsoft/go-winio v0.6.1 // indirect
|
github.com/Microsoft/go-winio v0.6.1 // indirect
|
||||||
|
github.com/Microsoft/hcsshim v0.11.4 // indirect
|
||||||
|
github.com/OpenPeeDeeP/depguard/v2 v2.2.0 // indirect
|
||||||
github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect
|
github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect
|
||||||
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect
|
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect
|
||||||
github.com/agext/levenshtein v1.2.3 // indirect
|
github.com/agext/levenshtein v1.2.3 // indirect
|
||||||
github.com/alecthomas/chroma v0.10.0 // indirect
|
github.com/alecthomas/chroma v0.10.0 // indirect
|
||||||
|
github.com/alecthomas/go-check-sumtype v0.1.4 // indirect
|
||||||
|
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-textseg/v15 v15.0.0 // indirect
|
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
|
||||||
github.com/armon/go-metrics v0.4.0 // indirect
|
github.com/armon/go-metrics v0.4.1 // indirect
|
||||||
github.com/armon/go-radix v1.0.0 // indirect
|
github.com/armon/go-radix v1.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/atotto/clipboard v0.1.4 // indirect
|
||||||
github.com/aws/aws-sdk-go v1.49.0 // indirect
|
github.com/aws/aws-sdk-go v1.50.36 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2 v1.24.0 // indirect
|
github.com/aws/aws-sdk-go-v2 v1.26.1 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4 // indirect
|
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.26.1 // indirect
|
github.com/aws/aws-sdk-go-v2/config v1.27.11 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.16.12 // indirect
|
github.com/aws/aws-sdk-go-v2/credentials v1.17.11 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.10 // indirect
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.15.7 // indirect
|
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.15 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.9 // indirect
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.9 // indirect
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2 // indirect
|
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.9 // indirect
|
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 // indirect
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.9 // indirect
|
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.9 // indirect
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.9 // indirect
|
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/kms v1.27.5 // indirect
|
github.com/aws/aws-sdk-go-v2/service/kms v1.30.1 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.47.5 // indirect
|
github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.18.5 // indirect
|
github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.5 // indirect
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.26.5 // indirect
|
github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 // indirect
|
||||||
github.com/aws/smithy-go v1.19.0 // indirect
|
github.com/aws/smithy-go v1.20.2 // indirect
|
||||||
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
|
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
|
||||||
github.com/aymerick/douceur v0.2.0 // indirect
|
github.com/aymerick/douceur v0.2.0 // indirect
|
||||||
github.com/ccojocar/zxcvbn-go v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
|
github.com/bkielbasa/cyclop v1.2.1 // indirect
|
||||||
|
github.com/blizzy78/varnamelen v0.8.0 // indirect
|
||||||
|
github.com/bombsimon/wsl/v4 v4.2.1 // indirect
|
||||||
|
github.com/breml/bidichk v0.2.7 // indirect
|
||||||
|
github.com/breml/errchkjson v0.3.6 // indirect
|
||||||
|
github.com/butuzov/ireturn v0.3.0 // indirect
|
||||||
|
github.com/butuzov/mirror v1.1.0 // indirect
|
||||||
|
github.com/catenacyber/perfsprint v0.7.1 // indirect
|
||||||
|
github.com/ccojocar/zxcvbn-go v1.0.2 // indirect
|
||||||
github.com/cenkalti/backoff/v3 v3.2.2 // indirect
|
github.com/cenkalti/backoff/v3 v3.2.2 // indirect
|
||||||
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
|
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
|
||||||
|
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||||
|
github.com/charithe/durationcheck v0.0.10 // indirect
|
||||||
github.com/charmbracelet/bubbles v0.16.1 // indirect
|
github.com/charmbracelet/bubbles v0.16.1 // indirect
|
||||||
github.com/charmbracelet/bubbletea v0.24.2 // indirect
|
github.com/charmbracelet/bubbletea v0.24.2 // indirect
|
||||||
github.com/charmbracelet/glamour v0.6.0 // indirect
|
github.com/charmbracelet/glamour v0.6.0 // indirect
|
||||||
github.com/charmbracelet/lipgloss v0.7.1 // indirect
|
github.com/charmbracelet/lipgloss v0.7.1 // indirect
|
||||||
|
github.com/chavacava/garif v0.1.0 // indirect
|
||||||
github.com/cheggaaa/pb v1.0.29 // indirect
|
github.com/cheggaaa/pb v1.0.29 // indirect
|
||||||
|
github.com/ckaznocha/intrange v0.1.0 // indirect
|
||||||
github.com/cloudflare/circl v1.3.7 // indirect
|
github.com/cloudflare/circl v1.3.7 // indirect
|
||||||
github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect
|
github.com/compose-spec/compose-go/v2 v2.0.0-rc.8 // indirect
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
|
github.com/containerd/console v1.0.4 // indirect
|
||||||
|
github.com/containerd/containerd v1.7.13 // indirect
|
||||||
|
github.com/containerd/continuity v0.4.3 // indirect
|
||||||
|
github.com/containerd/log v0.1.0 // indirect
|
||||||
|
github.com/containerd/ttrpc v1.2.2 // indirect
|
||||||
|
github.com/containerd/typeurl/v2 v2.1.1 // indirect
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect
|
||||||
|
github.com/curioswitch/go-reassign v0.2.0 // indirect
|
||||||
github.com/cyphar/filepath-securejoin v0.2.4 // indirect
|
github.com/cyphar/filepath-securejoin v0.2.4 // indirect
|
||||||
|
github.com/daixiang0/gci v0.12.3 // indirect
|
||||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
github.com/deckarep/golang-set/v2 v2.5.0 // 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.5.0 // indirect
|
github.com/djherbis/times v1.5.0 // indirect
|
||||||
github.com/dlclark/regexp2 v1.4.0 // indirect
|
github.com/dlclark/regexp2 v1.4.0 // indirect
|
||||||
|
github.com/docker/cli-docs-tool v0.7.0 // indirect
|
||||||
|
github.com/docker/docker-credential-helpers v0.8.0 // 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/dustin/go-humanize v1.0.1 // indirect
|
||||||
github.com/edsrzf/mmap-go v1.1.0 // indirect
|
github.com/edsrzf/mmap-go v1.1.0 // indirect
|
||||||
|
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
|
||||||
github.com/emirpasic/gods v1.18.1 // indirect
|
github.com/emirpasic/gods v1.18.1 // indirect
|
||||||
github.com/erikgeiser/promptkit v0.9.0 // indirect
|
github.com/erikgeiser/promptkit v0.9.0 // indirect
|
||||||
github.com/ettle/strcase v0.1.1 // indirect
|
github.com/ettle/strcase v0.2.0 // indirect
|
||||||
github.com/fatih/color v1.13.0 // indirect
|
github.com/fatih/color v1.16.0 // indirect
|
||||||
|
github.com/fatih/structtag v1.2.0 // indirect
|
||||||
|
github.com/felixge/httpsnoop v1.0.4 // indirect
|
||||||
|
github.com/firefart/nonamedreturns v1.0.4 // indirect
|
||||||
|
github.com/fsnotify/fsnotify v1.7.0 // indirect
|
||||||
|
github.com/fvbommel/sortorder v1.1.0 // indirect
|
||||||
|
github.com/fzipp/gocyclo v0.6.0 // indirect
|
||||||
github.com/gedex/inflector v0.0.0-20170307190818-16278e9db813 // indirect
|
github.com/gedex/inflector v0.0.0-20170307190818-16278e9db813 // indirect
|
||||||
|
github.com/ghostiam/protogetter v0.3.5 // indirect
|
||||||
|
github.com/go-critic/go-critic v0.11.2 // indirect
|
||||||
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // 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-billy/v5 v5.5.0 // indirect
|
||||||
github.com/go-git/go-git/v5 v5.11.0 // indirect
|
github.com/go-git/go-git/v5 v5.11.0 // indirect
|
||||||
github.com/go-logr/logr v1.2.4 // indirect
|
github.com/go-logr/logr v1.4.1 // indirect
|
||||||
github.com/go-logr/stdr v1.2.2 // indirect
|
github.com/go-logr/stdr v1.2.2 // indirect
|
||||||
github.com/go-ole/go-ole v1.2.6 // indirect
|
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||||
github.com/gofrs/uuid v4.3.1+incompatible // 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-toolsmith/astcast v1.1.0 // indirect
|
||||||
|
github.com/go-toolsmith/astcopy v1.1.0 // indirect
|
||||||
|
github.com/go-toolsmith/astequal v1.2.0 // indirect
|
||||||
|
github.com/go-toolsmith/astfmt v1.1.0 // indirect
|
||||||
|
github.com/go-toolsmith/astp v1.1.0 // indirect
|
||||||
|
github.com/go-toolsmith/strparse v1.1.0 // indirect
|
||||||
|
github.com/go-toolsmith/typep v1.1.0 // indirect
|
||||||
|
github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
|
||||||
|
github.com/go-xmlfmt/xmlfmt v1.1.2 // indirect
|
||||||
|
github.com/gobwas/glob v0.2.3 // indirect
|
||||||
|
github.com/gofrs/flock v0.8.1 // indirect
|
||||||
|
github.com/gofrs/uuid v4.2.0+incompatible // indirect
|
||||||
|
github.com/gogo/googleapis v1.4.1 // indirect
|
||||||
github.com/gogo/protobuf v1.3.2 // indirect
|
github.com/gogo/protobuf v1.3.2 // indirect
|
||||||
github.com/golang-jwt/jwt/v5 v5.1.0 // indirect
|
github.com/golang-jwt/jwt/v5 v5.2.1 // indirect
|
||||||
github.com/golang/glog v1.1.2 // indirect
|
github.com/golang/glog v1.2.0 // indirect
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||||
github.com/golang/protobuf v1.5.3 // indirect
|
github.com/golang/protobuf v1.5.4 // indirect
|
||||||
github.com/golang/snappy v0.0.4 // indirect
|
github.com/golang/snappy v0.0.4 // indirect
|
||||||
|
github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a // indirect
|
||||||
|
github.com/golangci/gofmt v0.0.0-20231018234816-f50ced29576e // indirect
|
||||||
|
github.com/golangci/misspell v0.4.1 // indirect
|
||||||
|
github.com/golangci/plugin-module-register v0.1.1 // indirect
|
||||||
|
github.com/golangci/revgrep v0.5.2 // 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-querystring v1.1.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-20230406165453-00490a63f317 // indirect
|
github.com/google/pprof v0.0.0-20230406165453-00490a63f317 // indirect
|
||||||
github.com/google/s2a-go v0.1.7 // indirect
|
github.com/google/s2a-go v0.1.7 // indirect
|
||||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
|
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
|
||||||
github.com/google/uuid v1.4.0 // indirect
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
github.com/google/wire v0.5.0 // indirect
|
github.com/google/wire v0.6.0 // indirect
|
||||||
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
|
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
|
||||||
github.com/googleapis/gax-go/v2 v2.12.0 // 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/css v1.0.0 // indirect
|
||||||
github.com/gorilla/mux v1.8.0 // indirect
|
github.com/gorilla/mux v1.8.0 // indirect
|
||||||
|
github.com/gorilla/websocket v1.5.0 // indirect
|
||||||
|
github.com/gostaticanalysis/analysisutil v0.7.1 // indirect
|
||||||
|
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/go-grpc-middleware v1.3.0 // indirect
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect
|
||||||
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
|
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
|
||||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
||||||
github.com/hashicorp/go-hclog v1.2.2 // indirect
|
github.com/hashicorp/go-cty-funcs v0.0.0-20230405223818-a090f58aa992 // indirect
|
||||||
|
github.com/hashicorp/go-hclog v1.5.0 // indirect
|
||||||
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
||||||
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
||||||
github.com/hashicorp/go-plugin v1.4.6 // indirect
|
github.com/hashicorp/go-plugin v1.6.0 // indirect
|
||||||
github.com/hashicorp/go-retryablehttp v0.7.1 // indirect
|
github.com/hashicorp/go-retryablehttp v0.7.5 // indirect
|
||||||
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
|
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
|
||||||
github.com/hashicorp/go-secure-stdlib/mlock v0.1.2 // indirect
|
github.com/hashicorp/go-secure-stdlib/mlock v0.1.2 // indirect
|
||||||
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.6 // indirect
|
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.7 // indirect
|
||||||
github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect
|
github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect
|
||||||
github.com/hashicorp/go-sockaddr v1.0.2 // indirect
|
github.com/hashicorp/go-sockaddr v1.0.2 // indirect
|
||||||
github.com/hashicorp/go-uuid v1.0.3 // indirect
|
github.com/hashicorp/go-uuid v1.0.3 // indirect
|
||||||
github.com/hashicorp/go-version v1.6.0 // indirect
|
github.com/hashicorp/go-version v1.6.0 // indirect
|
||||||
github.com/hashicorp/golang-lru v0.5.4 // indirect
|
github.com/hashicorp/golang-lru v0.5.4 // indirect
|
||||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||||
github.com/hashicorp/hcl/v2 v2.18.0 // indirect
|
github.com/hashicorp/hcl/v2 v2.19.1 // indirect
|
||||||
github.com/hashicorp/vault/api v1.8.2 // indirect
|
github.com/hashicorp/vault/api v1.8.2 // indirect
|
||||||
github.com/hashicorp/vault/sdk v0.6.1 // indirect
|
github.com/hashicorp/vault/sdk v0.6.1 // indirect
|
||||||
github.com/hashicorp/yamux v0.1.1 // indirect
|
github.com/hashicorp/yamux v0.1.1 // indirect
|
||||||
github.com/hexops/gotextdiff v1.0.3 // indirect
|
github.com/hexops/gotextdiff v1.0.3 // indirect
|
||||||
github.com/iancoleman/strcase v0.2.0 // indirect
|
github.com/iancoleman/strcase v0.2.0 // indirect
|
||||||
github.com/ijc/Gotty v0.0.0-20170406111628-a8b993ba6abd // 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/inconshreveable/mousetrap v1.1.0 // indirect
|
||||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
|
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
|
||||||
|
github.com/jgautheron/goconst v1.7.0 // indirect
|
||||||
|
github.com/jingyugao/rowserrcheck v1.1.1 // indirect
|
||||||
|
github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af // indirect
|
||||||
|
github.com/jjti/go-spancheck v0.5.3 // indirect
|
||||||
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
||||||
|
github.com/josharian/intern v1.0.0 // indirect
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
|
github.com/julz/importas v0.1.0 // indirect
|
||||||
|
github.com/karamaru-alpha/copyloopvar v1.0.8 // indirect
|
||||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
|
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
|
||||||
github.com/kevinburke/ssh_config v1.2.0 // indirect
|
github.com/kevinburke/ssh_config v1.2.0 // indirect
|
||||||
|
github.com/kisielk/errcheck v1.7.0 // indirect
|
||||||
|
github.com/kkHAIKE/contextcheck v1.1.4 // indirect
|
||||||
|
github.com/klauspost/compress v1.17.4 // indirect
|
||||||
|
github.com/kulti/thelper v0.6.3 // indirect
|
||||||
|
github.com/kunwardeep/paralleltest v1.0.10 // indirect
|
||||||
github.com/kylelemons/godebug v1.1.0 // indirect
|
github.com/kylelemons/godebug v1.1.0 // indirect
|
||||||
|
github.com/kyoh86/exportloopref v0.1.11 // indirect
|
||||||
|
github.com/ldez/gomoddirectives v0.2.3 // indirect
|
||||||
|
github.com/ldez/tagliatelle v0.5.0 // indirect
|
||||||
|
github.com/leonklingele/grouper v1.1.1 // indirect
|
||||||
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
|
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
|
||||||
|
github.com/lufeee/execinquery v1.2.1 // indirect
|
||||||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
|
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.12 // indirect
|
github.com/macabu/inamedparam v0.1.3 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.19 // indirect
|
github.com/magiconair/properties v1.8.6 // indirect
|
||||||
|
github.com/mailru/easyjson v0.7.7 // indirect
|
||||||
|
github.com/maratori/testableexamples v1.0.0 // indirect
|
||||||
|
github.com/maratori/testpackage v1.1.1 // indirect
|
||||||
|
github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26 // indirect
|
||||||
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
github.com/mattn/go-localereader v0.0.1 // indirect
|
github.com/mattn/go-localereader v0.0.1 // indirect
|
||||||
github.com/mattn/go-runewidth v0.0.15 // indirect
|
github.com/mattn/go-runewidth v0.0.15 // indirect
|
||||||
|
github.com/mattn/go-shellwords v1.0.12 // indirect
|
||||||
|
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
|
||||||
|
github.com/mgechev/revive v1.3.7 // indirect
|
||||||
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
|
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
|
||||||
github.com/microcosm-cc/bluemonday v1.0.21 // 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/copystructure v1.2.0 // indirect
|
||||||
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||||
github.com/mitchellh/go-ps v1.0.0 // indirect
|
github.com/mitchellh/go-ps v1.0.0 // indirect
|
||||||
@@ -159,20 +298,38 @@ require (
|
|||||||
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
|
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
|
||||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||||
github.com/mitchellh/reflectwalk v1.0.2 // indirect
|
github.com/mitchellh/reflectwalk v1.0.2 // indirect
|
||||||
github.com/moby/moby v23.0.3+incompatible // indirect
|
github.com/moby/docker-image-spec v1.3.1 // indirect
|
||||||
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect
|
github.com/moby/locker v1.0.1 // indirect
|
||||||
|
github.com/moby/moby v25.0.4+incompatible // indirect
|
||||||
|
github.com/moby/spdystream v0.2.0 // indirect
|
||||||
|
github.com/moby/sys/mountinfo v0.7.1 // indirect
|
||||||
|
github.com/moby/sys/sequential v0.5.0 // indirect
|
||||||
|
github.com/moby/sys/signal v0.7.0 // indirect
|
||||||
|
github.com/moby/sys/user v0.1.0 // indirect
|
||||||
|
github.com/moby/term v0.5.0 // indirect
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
github.com/modern-go/reflect2 v1.0.2 // 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/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
|
||||||
github.com/muesli/cancelreader v0.2.2 // indirect
|
github.com/muesli/cancelreader v0.2.2 // indirect
|
||||||
github.com/muesli/reflow v0.3.0 // indirect
|
|
||||||
github.com/muesli/termenv v0.15.2 // indirect
|
github.com/muesli/termenv v0.15.2 // 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
|
||||||
github.com/natefinch/atomic v1.0.1 // indirect
|
github.com/natefinch/atomic v1.0.1 // indirect
|
||||||
github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d // indirect
|
github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d // indirect
|
||||||
|
github.com/nishanths/exhaustive v0.12.0 // indirect
|
||||||
|
github.com/nishanths/predeclared v0.2.2 // indirect
|
||||||
|
github.com/nunnatsa/ginkgolinter v0.16.1 // indirect
|
||||||
github.com/oklog/run v1.1.0 // indirect
|
github.com/oklog/run v1.1.0 // indirect
|
||||||
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
||||||
|
github.com/opencontainers/go-digest v1.0.0 // indirect
|
||||||
|
github.com/opencontainers/image-spec v1.1.0-rc5 // indirect
|
||||||
github.com/opentracing/basictracer-go v1.1.0 // indirect
|
github.com/opentracing/basictracer-go v1.1.0 // indirect
|
||||||
github.com/opentracing/opentracing-go v1.2.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.0 // indirect
|
||||||
github.com/petar-dambovaliev/aho-corasick v0.0.0-20230725210150-fb29fc3c913e // 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/diff v0.0.0-20230503175810-113847418e2e // indirect
|
||||||
github.com/pgavlin/fx v0.1.6 // indirect
|
github.com/pgavlin/fx v0.1.6 // indirect
|
||||||
@@ -180,79 +337,154 @@ require (
|
|||||||
github.com/pgavlin/text v0.0.0-20230428184845-84c285f11d2f // indirect
|
github.com/pgavlin/text v0.0.0-20230428184845-84c285f11d2f // indirect
|
||||||
github.com/pierrec/lz4 v2.6.1+incompatible // indirect
|
github.com/pierrec/lz4 v2.6.1+incompatible // indirect
|
||||||
github.com/pjbgf/sha1cd v0.3.0 // indirect
|
github.com/pjbgf/sha1cd v0.3.0 // indirect
|
||||||
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect
|
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
|
||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/pkg/term v1.1.0 // indirect
|
github.com/pkg/term v1.1.0 // indirect
|
||||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
|
github.com/polyfloyd/go-errorlint v1.4.8 // indirect
|
||||||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
|
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
|
||||||
|
github.com/prometheus/client_golang v1.17.0 // indirect
|
||||||
|
github.com/prometheus/client_model v0.5.0 // indirect
|
||||||
|
github.com/prometheus/common v0.44.0 // indirect
|
||||||
|
github.com/prometheus/procfs v0.12.0 // indirect
|
||||||
github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect
|
github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect
|
||||||
github.com/pulumi/esc v0.6.2 // indirect
|
github.com/pulumi/esc v0.6.2 // indirect
|
||||||
github.com/pulumi/pulumi-yaml v1.6.0 // indirect
|
github.com/pulumi/pulumi-yaml v1.6.0 // indirect
|
||||||
|
github.com/quasilyte/go-ruleguard v0.4.2 // indirect
|
||||||
|
github.com/quasilyte/gogrep v0.5.0 // indirect
|
||||||
|
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.4 // indirect
|
github.com/rivo/uniseg v0.4.4 // indirect
|
||||||
github.com/rogpeppe/go-internal v1.11.0 // indirect
|
github.com/rogpeppe/go-internal v1.12.0 // indirect
|
||||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||||
|
github.com/ryancurrah/gomodguard v1.3.1 // indirect
|
||||||
|
github.com/ryanrolds/sqlclosecheck v0.5.1 // indirect
|
||||||
github.com/ryanuber/go-glob v1.0.0 // indirect
|
github.com/ryanuber/go-glob v1.0.0 // indirect
|
||||||
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect
|
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect
|
||||||
|
github.com/sanposhiho/wastedassign/v2 v2.0.7 // indirect
|
||||||
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect
|
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect
|
||||||
github.com/segmentio/asm v1.2.0 // indirect
|
github.com/sashamelentyev/interfacebloat v1.1.0 // indirect
|
||||||
github.com/segmentio/encoding v0.3.6 // indirect
|
github.com/sashamelentyev/usestdlibvars v1.25.0 // indirect
|
||||||
|
github.com/secure-systems-lab/go-securesystemslib v0.4.0 // indirect
|
||||||
|
github.com/securego/gosec/v2 v2.19.0 // indirect
|
||||||
|
github.com/segmentio/asm v1.1.3 // indirect
|
||||||
|
github.com/segmentio/encoding v0.3.5 // indirect
|
||||||
github.com/sergi/go-diff v1.3.1 // indirect
|
github.com/sergi/go-diff v1.3.1 // indirect
|
||||||
github.com/shirou/gopsutil/v3 v3.22.3 // indirect
|
github.com/serialx/hashring v0.0.0-20200727003509-22c0c7ab6b1b // indirect
|
||||||
|
github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c // indirect
|
||||||
|
github.com/shibumi/go-pathspec v1.3.0 // indirect
|
||||||
|
github.com/shirou/gopsutil/v3 v3.24.2 // indirect
|
||||||
|
github.com/shoenig/go-m1cpu v0.1.6 // indirect
|
||||||
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 // indirect
|
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 // indirect
|
||||||
github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546 // indirect
|
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.2.1 // indirect
|
github.com/skeema/knownhosts v1.2.1 // indirect
|
||||||
|
github.com/sonatard/noctx v0.0.2 // indirect
|
||||||
github.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 // indirect
|
github.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 // indirect
|
||||||
github.com/spf13/afero v1.9.5 // indirect
|
github.com/sourcegraph/go-diff v0.7.0 // indirect
|
||||||
github.com/spf13/cast v1.4.1 // indirect
|
github.com/spf13/cast v1.5.0 // indirect
|
||||||
github.com/spf13/cobra v1.7.0 // indirect
|
github.com/spf13/cobra v1.8.0 // indirect
|
||||||
|
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
||||||
github.com/spf13/pflag v1.0.5 // indirect
|
github.com/spf13/pflag v1.0.5 // 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
|
||||||
|
github.com/stretchr/objx v0.5.2 // indirect
|
||||||
|
github.com/subosito/gotenv v1.4.1 // indirect
|
||||||
|
github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c // indirect
|
||||||
|
github.com/tdakkota/asciicheck v0.2.0 // indirect
|
||||||
|
github.com/tetafro/godot v1.4.16 // indirect
|
||||||
github.com/texttheater/golang-levenshtein v1.0.1 // indirect
|
github.com/texttheater/golang-levenshtein v1.0.1 // indirect
|
||||||
github.com/tklauser/go-sysconf v0.3.10 // indirect
|
github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966 // indirect
|
||||||
github.com/tklauser/numcpus v0.4.0 // indirect
|
github.com/timonwong/loggercheck v0.9.4 // indirect
|
||||||
|
github.com/tklauser/go-sysconf v0.3.12 // indirect
|
||||||
|
github.com/tklauser/numcpus v0.6.1 // indirect
|
||||||
|
github.com/tomarrell/wrapcheck/v2 v2.8.3 // indirect
|
||||||
|
github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect
|
||||||
|
github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea // indirect
|
||||||
|
github.com/tonistiigi/vt100 v0.0.0-20230623042737-f9a4f7ef6531 // indirect
|
||||||
github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 // indirect
|
github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 // indirect
|
||||||
github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
|
github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
|
||||||
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
|
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
|
||||||
|
github.com/ulikunitz/xz v0.5.11 // indirect
|
||||||
|
github.com/ultraware/funlen v0.1.0 // indirect
|
||||||
|
github.com/ultraware/whitespace v0.1.0 // indirect
|
||||||
|
github.com/uudashr/gocognit v1.1.2 // indirect
|
||||||
github.com/xanzy/ssh-agent v0.3.3 // indirect
|
github.com/xanzy/ssh-agent v0.3.3 // indirect
|
||||||
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect
|
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
|
||||||
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
|
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
|
||||||
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
|
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
|
||||||
|
github.com/xen0n/gosmopolitan v1.2.2 // indirect
|
||||||
|
github.com/yagipy/maintidx v1.0.0 // indirect
|
||||||
|
github.com/yeya24/promlinter v0.2.0 // indirect
|
||||||
|
github.com/ykadowak/zerologlint v0.1.5 // indirect
|
||||||
github.com/yuin/goldmark v1.5.2 // indirect
|
github.com/yuin/goldmark v1.5.2 // indirect
|
||||||
github.com/yuin/goldmark-emoji v1.0.1 // indirect
|
github.com/yuin/goldmark-emoji v1.0.1 // indirect
|
||||||
github.com/yusufpapurcu/wmi v1.2.2 // indirect
|
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
||||||
github.com/zclconf/go-cty v1.14.0 // indirect
|
github.com/zclconf/go-cty v1.14.1 // indirect
|
||||||
|
gitlab.com/bosi/decorder v0.4.1 // indirect
|
||||||
|
go-simpler.org/musttag v0.9.0 // indirect
|
||||||
|
go-simpler.org/sloglint v0.5.0 // indirect
|
||||||
go.opencensus.io v0.24.0 // indirect
|
go.opencensus.io v0.24.0 // indirect
|
||||||
go.opentelemetry.io/otel v1.19.0 // indirect
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 // indirect
|
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.46.1 // indirect
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0 // indirect
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
|
||||||
go.opentelemetry.io/otel/metric v1.19.0 // indirect
|
go.opentelemetry.io/otel v1.24.0 // indirect
|
||||||
go.opentelemetry.io/otel/sdk v1.19.0 // indirect
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.42.0 // indirect
|
||||||
go.opentelemetry.io/otel/trace v1.19.0 // indirect
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.42.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.42.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.21.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/exporters/prometheus v0.42.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/metric v1.24.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/sdk v1.22.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/sdk/metric v1.21.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/trace v1.24.0 // indirect
|
||||||
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
|
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
|
||||||
go.pennock.tech/tabular v1.1.3 // indirect
|
go.pennock.tech/tabular v1.1.3 // indirect
|
||||||
go.uber.org/atomic v1.11.0 // indirect
|
go.uber.org/atomic v1.10.0 // indirect
|
||||||
gocloud.dev v0.36.0 // indirect
|
go.uber.org/automaxprocs v1.5.3 // indirect
|
||||||
gocloud.dev/secrets/hashivault v0.27.0 // indirect
|
go.uber.org/multierr v1.11.0 // indirect
|
||||||
golang.org/x/crypto v0.17.0 // indirect
|
go.uber.org/zap v1.27.0 // indirect
|
||||||
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect
|
gocloud.dev v0.37.0 // indirect
|
||||||
golang.org/x/mod v0.14.0 // indirect
|
gocloud.dev/secrets/hashivault v0.28.0 // indirect
|
||||||
golang.org/x/net v0.19.0 // indirect
|
golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 // indirect
|
||||||
golang.org/x/oauth2 v0.14.0 // indirect
|
golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f // indirect
|
||||||
golang.org/x/sync v0.5.0 // indirect
|
golang.org/x/mod v0.16.0 // indirect
|
||||||
golang.org/x/sys v0.15.0 // indirect
|
golang.org/x/net v0.22.0 // indirect
|
||||||
golang.org/x/term v0.15.0 // indirect
|
golang.org/x/oauth2 v0.18.0 // indirect
|
||||||
|
golang.org/x/sync v0.6.0 // indirect
|
||||||
|
golang.org/x/sys v0.18.0 // indirect
|
||||||
|
golang.org/x/term v0.18.0 // indirect
|
||||||
golang.org/x/text v0.14.0 // indirect
|
golang.org/x/text v0.14.0 // indirect
|
||||||
golang.org/x/time v0.4.0 // indirect
|
golang.org/x/time v0.5.0 // indirect
|
||||||
golang.org/x/tools v0.15.0 // indirect
|
golang.org/x/tools v0.19.0 // indirect
|
||||||
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
|
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
|
||||||
google.golang.org/api v0.151.0 // indirect
|
google.golang.org/api v0.169.0 // indirect
|
||||||
google.golang.org/appengine v1.6.8 // indirect
|
google.golang.org/appengine v1.6.8 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f // indirect
|
google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7 // indirect
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240311173647-c811ad7063a7 // indirect
|
||||||
google.golang.org/grpc v1.59.0 // indirect
|
google.golang.org/grpc v1.62.1 // indirect
|
||||||
google.golang.org/protobuf v1.31.0 // indirect
|
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||||
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
gopkg.in/square/go-jose.v2 v2.6.0 // indirect
|
gopkg.in/square/go-jose.v2 v2.6.0 // indirect
|
||||||
gopkg.in/warnings.v0 v0.1.2 // indirect
|
gopkg.in/warnings.v0 v0.1.2 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // 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/apiserver 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
|
lukechampine.com/frand v1.4.2 // indirect
|
||||||
|
mvdan.cc/gofumpt v0.6.0 // indirect
|
||||||
|
mvdan.cc/unparam v0.0.0-20240104100049-c549a3470d14 // 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
|
||||||
)
|
)
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user