-
Notifications
You must be signed in to change notification settings - Fork 23
Open
Labels
kind/enhancementImprovements or new featuresImprovements or new features
Description
Problem
Friction in developing native providers is a blocker to growing beyond our 14 native providers in the registry today.
Affected area/feature
- Native Provider Development UX
Recommendation
Create a multi-arch containerized provider build environment to satisfy the many dependencies required to build multi language providers.
Future Opportunities
Adding a containerized build image simplifies future enhancements including:
- daily/weekly boilerplate repository ci testing
- simpler native provider developer docs
- improved provider build reliability
Additional Information
LOGS: Click To Expand
~/pulumi-provider-boilerplate ❯ docker build -t provider -f docker/Dockerfile .
[+] Building 1.1s (14/14) FINISHED
=> [internal] load .dockerignore 0.0s
=> => transferring context: 653B 0.0s
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 4.91kB 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:22.04 1.1s
=> [auth] library/ubuntu:pull token for registry-1.docker.io 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 742B 0.0s
=> [1/8] FROM docker.io/library/ubuntu:22.04@sha256:9b8dec3bf938bc80fbe758d856e96fdfab5f56c39d44b0cff351e847bb1b01ea 0.0s
=> CACHED [2/8] ADD docker/rootfs / 0.0s
=> CACHED [3/8] RUN set -ex && apt-get update && apt-get install git curl gnupg python3 python3-pip dotnet-sdk-7.0 ca-certificates build-essential dotnet-runtime-7.0 && update-alternatives --install /usr/bin/python python /usr/bin/python3 1 0.0s
=> CACHED [4/8] RUN set -ex && export arch=$(uname -m | awk '{print ($1 == "x86_64") ? "amd64" : ($1 == "aarch64" ? "arm64" : "unknown")}') && export goversion="$(curl -s https://go.dev/dl/?mode=json | awk -F'[":go]' '/ "version"/{print $8}' | head -n1)" 0.0s
=> CACHED [5/8] RUN set -ex && export NODE_MAJOR=20 && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.co 0.0s
=> CACHED [6/8] RUN set -ex && export arch=$(uname -m | awk '{print ($1 == "x86_64") ? "x64" : ($1 == "aarch64" ? "arm64" : "unknown")}') && export urlPulumiRelease="https://api.github.com/repos/pulumi/pulumi/releases/latest" && export urlPulumiVersion=$(curl -s ${ur 0.0s
=> CACHED [7/8] RUN set -ex && export arch=$(uname -m | awk '{print ($1 == "x86_64") ? "amd64" : ($1 == "aarch64" ? "arm64" : "unknown")}') && export urlPulumiRelease="https://api.github.com/repos/pulumi/pulumictl/releases/latest" && export urlPulumiVersion=$(curl -s 0.0s
=> CACHED [8/8] WORKDIR /provider 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:2375457dd3a19fbf32aa59226bfae190a621c4b15fa5c48fed8c659f14e6c7e9 0.0s
=> => naming to docker.io/library/provider:latest 0.0s
~/pulumi-provider-boilerplate ❯ docker run -it --rm -v $PWD:/provider provider
(cd provider && go build -o /provider/bin/pulumi-resource-xyz -ldflags "-X github.com/pulumi/pulumi-xyz/provider.Version=0.0.1-alpha.1697065379+97813b07.dirty" github.com/pulumi/pulumi-xyz/provider/cmd/pulumi-resource-xyz)
go: downloading github.com/pulumi/pulumi-go-provider v0.11.1
go: downloading github.com/pulumi/pulumi/sdk/v3 v3.79.0
go: downloading github.com/hashicorp/go-multierror v1.1.1
go: downloading github.com/pulumi/pulumi/pkg/v3 v3.79.0
go: downloading google.golang.org/grpc v1.57.0
go: downloading google.golang.org/protobuf v1.31.0
go: downloading github.com/hashicorp/errwrap v1.1.0
go: downloading github.com/golang/protobuf v1.5.3
go: downloading github.com/pkg/errors v0.9.1
go: downloading github.com/blang/semver v3.5.1+incompatible
go: downloading golang.org/x/net v0.14.0
go: downloading lukechampine.com/frand v1.4.2
go: downloading github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645
go: downloading github.com/hashicorp/hcl/v2 v2.18.0
go: downloading github.com/opentracing/opentracing-go v1.2.0
go: downloading github.com/rivo/uniseg v0.4.4
go: downloading github.com/spf13/cobra v1.7.0
go: downloading github.com/uber/jaeger-client-go v2.30.0+incompatible
go: downloading golang.org/x/term v0.11.0
go: downloading sourcegraph.com/sourcegraph/appdash v0.0.0-20211028080628-e2786a622600
go: downloading github.com/golang/glog v1.1.2
go: downloading github.com/pkg/term v1.1.0
go: downloading google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d
go: downloading github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da
go: downloading gopkg.in/yaml.v3 v3.0.1
go: downloading golang.org/x/crypto v0.12.0
go: downloading github.com/cheggaaa/pb v1.0.29
go: downloading github.com/djherbis/times v1.5.0
go: downloading github.com/go-git/go-git/v5 v5.8.1
go: downloading github.com/rogpeppe/go-internal v1.11.0
go: downloading github.com/santhosh-tekuri/jsonschema/v5 v5.3.1
go: downloading github.com/texttheater/golang-levenshtein v1.0.1
go: downloading github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7
go: downloading github.com/agext/levenshtein v1.2.3
go: downloading github.com/apparentlymart/go-textseg/v15 v15.0.0
go: downloading github.com/mitchellh/go-wordwrap v1.0.1
go: downloading github.com/zclconf/go-cty v1.14.0
go: downloading github.com/spf13/pflag v1.0.5
go: downloading golang.org/x/sys v0.11.0
go: downloading github.com/uber/jaeger-lib v2.4.1+incompatible
go: downloading go.uber.org/atomic v1.11.0
go: downloading github.com/gogo/protobuf v1.3.2
go: downloading github.com/opentracing/basictracer-go v1.1.0
go: downloading github.com/mattn/go-runewidth v0.0.15
go: downloading github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06
go: downloading github.com/kevinburke/ssh_config v1.2.0
go: downloading dario.cat/mergo v1.0.0
go: downloading github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371
go: downloading github.com/go-git/go-billy/v5 v5.4.1
go: downloading github.com/sergi/go-diff v1.3.1
go: downloading github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da
go: downloading github.com/skeema/knownhosts v1.2.0
go: downloading github.com/xanzy/ssh-agent v0.3.3
go: downloading github.com/pjbgf/sha1cd v0.3.0
go: downloading github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376
go: downloading github.com/emirpasic/gods v1.18.1
go: downloading github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99
go: downloading golang.org/x/text v0.12.0
go: downloading github.com/cloudflare/circl v1.3.3
go: downloading gopkg.in/warnings.v0 v0.1.2
go: downloading github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386
go: downloading github.com/natefinch/atomic v1.0.1
go: downloading github.com/edsrzf/mmap-go v1.1.0
go: downloading github.com/segmentio/encoding v0.3.6
go: downloading github.com/segmentio/asm v1.2.0
rm -rf sdk/dotnet
pulumi package gen-sdk /provider/bin/pulumi-resource-xyz --language dotnet
cd sdk/dotnet/&& \
echo "0.0.1-alpha.1697065379+97813b07.dirty" >version.txt && \
dotnet build /p:Version=0.0.1-alpha.1697065379+97813b07.dirty
Welcome to .NET 7.0!
---------------------
SDK Version: 7.0.112
----------------
Installed an ASP.NET Core HTTPS development certificate.
To trust the certificate run 'dotnet dev-certs https --trust' (Windows and macOS only).
Learn about HTTPS: https://aka.ms/dotnet-https
----------------
Write your first app: https://aka.ms/dotnet-hello-world
Find out what's new: https://aka.ms/dotnet-whats-new
Explore documentation: https://aka.ms/dotnet-docs
Report issues and find source on GitHub: https://github.com/dotnet/core
Use 'dotnet --help' to see available commands or visit: https://aka.ms/dotnet-cli
-----------------------------------------------------------------------------
MSBuild version 17.4.8+6918b863a for .NET
Determining projects to restore...
Restored /provider/sdk/dotnet/Pulumi.Xyz.csproj (in 3.81 sec).
Pulumi.Xyz -> /provider/sdk/dotnet/bin/Debug/net6.0/Pulumi.Xyz.dll
Successfully created package '/provider/sdk/dotnet/bin/Debug/Pulumi.Xyz.0.0.1-alpha.1697065379.nupkg'.
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:06.02
rm -rf sdk/go
pulumi package gen-sdk /provider/bin/pulumi-resource-xyz --language go
rm -rf sdk/nodejs
pulumi package gen-sdk /provider/bin/pulumi-resource-xyz --language nodejs
cd sdk/nodejs/ && \
yarn install && \
yarn run tsc && \
cp ../../README.md ../../LICENSE package.json yarn.lock bin/ && \
sed -i.bak 's/${VERSION}/v0.0.1-alpha.1697065379+97813b07.dirty/g' bin/package.json && \
rm ./bin/package.json.bak
yarn install v1.22.19
warning package.json: No license field
info No lockfile found.
warning @pulumi/xyz@${VERSION}: No license field
[1/4] Resolving packages...
warning @pulumi/pulumi > [email protected]: The functionality that this package provided is now in @npmcli/arborist
warning @pulumi/pulumi > @opentelemetry/instrumentation > @opentelemetry/[email protected]: Please use @opentelemetry/api >= 1.3.0
warning @pulumi/pulumi > @opentelemetry/instrumentation-grpc > @opentelemetry/[email protected]: Please use @opentelemetry/api >= 1.3.0
warning @pulumi/pulumi > read-package-tree > [email protected]: This functionality has been moved to @npmcli/fs
warning @pulumi/pulumi > read-package-tree > readdir-scoped-modules > [email protected]: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
Done in 10.55s.
yarn run v1.22.19
warning package.json: No license field
$ /provider/sdk/nodejs/node_modules/.bin/tsc
Done in 1.82s.
rm -rf sdk/python
pulumi package gen-sdk /provider/bin/pulumi-resource-xyz --language python
cp README.md sdk/python/
cd sdk/python/ && \
python3 setup.py clean --all 2>/dev/null && \
rm -rf ./bin/ ../python.bin/ && cp -R . ../python.bin && mv ../python.bin ./bin && \
sed -i.bak -e 's/^VERSION = .*/VERSION = "0.0.1a1697065379+dirty"/g' -e 's/^PLUGIN_VERSION = .*/PLUGIN_VERSION = "0.0.1-alpha.1697065379+97813b07.dirty"/g' ./bin/setup.py && \
rm ./bin/setup.py.bak && \
cd ./bin && python3 setup.py build sdist
running clean
running build
running build_py
creating build
creating build/lib
creating build/lib/pulumi_xyz
copying pulumi_xyz/provider.py -> build/lib/pulumi_xyz
copying pulumi_xyz/__init__.py -> build/lib/pulumi_xyz
copying pulumi_xyz/random.py -> build/lib/pulumi_xyz
copying pulumi_xyz/_utilities.py -> build/lib/pulumi_xyz
copying pulumi_xyz/py.typed -> build/lib/pulumi_xyz
copying pulumi_xyz/pulumi-plugin.json -> build/lib/pulumi_xyz
running sdist
running egg_info
creating pulumi_xyz.egg-info
writing pulumi_xyz.egg-info/PKG-INFO
writing dependency_links to pulumi_xyz.egg-info/dependency_links.txt
writing requirements to pulumi_xyz.egg-info/requires.txt
writing top-level names to pulumi_xyz.egg-info/top_level.txt
writing manifest file 'pulumi_xyz.egg-info/SOURCES.txt'
reading manifest file 'pulumi_xyz.egg-info/SOURCES.txt'
writing manifest file 'pulumi_xyz.egg-info/SOURCES.txt'
running check
warning: check: missing required meta-data: url
warning: check: missing meta-data: either (author and author_email) or (maintainer and maintainer_email) should be supplied
creating pulumi_xyz-0.0.1a1697065379+dirty
creating pulumi_xyz-0.0.1a1697065379+dirty/pulumi_xyz
creating pulumi_xyz-0.0.1a1697065379+dirty/pulumi_xyz.egg-info
copying files to pulumi_xyz-0.0.1a1697065379+dirty...
copying README.md -> pulumi_xyz-0.0.1a1697065379+dirty
copying setup.py -> pulumi_xyz-0.0.1a1697065379+dirty
copying pulumi_xyz/__init__.py -> pulumi_xyz-0.0.1a1697065379+dirty/pulumi_xyz
copying pulumi_xyz/_utilities.py -> pulumi_xyz-0.0.1a1697065379+dirty/pulumi_xyz
copying pulumi_xyz/provider.py -> pulumi_xyz-0.0.1a1697065379+dirty/pulumi_xyz
copying pulumi_xyz/pulumi-plugin.json -> pulumi_xyz-0.0.1a1697065379+dirty/pulumi_xyz
copying pulumi_xyz/py.typed -> pulumi_xyz-0.0.1a1697065379+dirty/pulumi_xyz
copying pulumi_xyz/random.py -> pulumi_xyz-0.0.1a1697065379+dirty/pulumi_xyz
copying pulumi_xyz.egg-info/PKG-INFO -> pulumi_xyz-0.0.1a1697065379+dirty/pulumi_xyz.egg-info
copying pulumi_xyz.egg-info/SOURCES.txt -> pulumi_xyz-0.0.1a1697065379+dirty/pulumi_xyz.egg-info
copying pulumi_xyz.egg-info/dependency_links.txt -> pulumi_xyz-0.0.1a1697065379+dirty/pulumi_xyz.egg-info
copying pulumi_xyz.egg-info/not-zip-safe -> pulumi_xyz-0.0.1a1697065379+dirty/pulumi_xyz.egg-info
copying pulumi_xyz.egg-info/requires.txt -> pulumi_xyz-0.0.1a1697065379+dirty/pulumi_xyz.egg-info
copying pulumi_xyz.egg-info/top_level.txt -> pulumi_xyz-0.0.1a1697065379+dirty/pulumi_xyz.egg-info
Writing pulumi_xyz-0.0.1a1697065379+dirty/setup.cfg
creating dist
Creating tar archive
removing 'pulumi_xyz-0.0.1a1697065379+dirty' (and everything under it)
Metadata
Metadata
Assignees
Labels
kind/enhancementImprovements or new featuresImprovements or new features