VERSION 0.8 # tfgen builds the tfgen binary and nodejs TypeScript SDK tfgen: FROM golang:1.25.4 WORKDIR /go/src/git.kalinow.ski/nimbus/pulumi-incus/provider ENV WORKING_DIR=/go/src/git.kalinow.ski/nimbus/pulumi-incus # ENV PULUMI_HOME=$(WORKING_DIR)/.pulumi # ENV PATH=$(WORKING_DIR)/.pulumi/bin:$(PATH) RUN mkdir -p ../.pulumi/examples-cache cmd/pulumi-resource-incus COPY --dir provider/go.mod provider/go.sum provider/shim . RUN go list -f "{{slice .Version 1}}" -m github.com/pulumi/pulumi/pkg/v3 > ../.pulumi/version ENV PULUMI_HOME=${WORKING_DIR}/.pulumi ENV PATH=${WORKING_DIR}/.pulumi/bin:$PATH RUN curl -fsSL https://get.pulumi.com | HOME=${WORKING_DIR} sh -s -- --version "$(cat .pulumi/version)" RUN pulumi plugin install converter terraform 1.2.4 RUN go mod download ENV PROVIDER_VERSION=1.0.0-beta.2 ENV LDFLAGS_PROJ_VERSION="-X git.kalinow.ski/nimbus/pulumi-incus/provider/pkg/version.Version=${PROVIDER_VERSION}" ENV PULUMI_CONVERT=1 ENV PULUMI_CONVERT_EXAMPLES_CACHE_DIR=/go/src/git.kalinow.ski/nimbus/pulumi-incus/provider/.pulumi/examples-cache ENV PULUMI_DISABLE_AUTOMATIC_PLUGIN_ACQUISITION=1 ENV PULUMI_MISSING_DOCS_ERROR=false COPY --dir provider/resources.go provider/pkg . COPY provider/cmd/pulumi-tfgen-incus cmd/pulumi-tfgen-incus RUN echo '{}' > cmd/pulumi-resource-incus/bridge-metadata.json RUN go build -o /bin/pulumi-tfgen-incus -ldflags "${LDFLAGS_PROJ_VERSION}" ./cmd/pulumi-tfgen-incus RUN /bin/pulumi-tfgen-incus schema --out cmd/pulumi-resource-incus RUN sed -i -e 's/souce/source/g' cmd/pulumi-resource-incus/schema.json WORKDIR /go/src/git.kalinow.ski/nimbus/pulumi-incus # Now that the schema.json is generated, we can generate sdks RUN /bin/pulumi-tfgen-incus nodejs --out sdk/nodejs/ SAVE ARTIFACT sdk/nodejs # nodejs builds the nodejs SDK using the generated tfgen file nodejs: FROM node:24-bookworm WORKDIR /root/sdk/nodejs RUN corepack enable pnpm COPY scripts/clean-package-json.js /bin COPY +tfgen/nodejs . RUN pnpm install && pnpm tsc && cp package.json pnpm-lock.yaml ./bin/ COPY README.md LICENSE bin SAVE ARTIFACT bin AS LOCAL sdk/nodejs/bin WORKDIR /root/sdk/nodejs/bin RUN node /bin/clean-package-json.js # push the nodejs SDK and delete the secret file RUN --push --secret TOKEN pnpm config set @kiterun:registry=https://git.kalinow.ski/api/packages/kiterun/npm/ && \ pnpm config set -g -- '//git.kalinow.ski/api/packages/kiterun/npm/:_authToken' "$TOKEN" && \ pnpm publish . && \ rm /root/.npmrc # provider builds and publishes the provider binaries provider: FROM +tfgen WORKDIR /go/src/git.kalinow.ski/nimbus/pulumi-incus/provider RUN mkdir -p /root/dist COPY provider/cmd/pulumi-resource-incus/main.go cmd/pulumi-resource-incus/main.go COPY README.md LICENSE .. DO +BINARY --GOOS=linux --GOARCH=amd64 DO +BINARY --GOOS=linux --GOARCH=arm64 DO +BINARY --GOOS=darwin --GOARCH=amd64 DO +BINARY --GOOS=darwin --GOARCH=arm64 SAVE ARTIFACT /root/dist AS LOCAL dist RUN --push --secret TOKEN \ sh -c 'for FILENAME in /root/dist/*; do \ curl --user kiterun:$TOKEN --upload-file "$FILENAME" \ https://git.kalinow.ski/api/packages/kiterun/generic/pulumi-incus/$PROVIDER_VERSION/$(basename "$FILENAME"); \ done' BINARY: FUNCTION ARG GOOS ARG GOARCH RUN cd $WORKING_DIR/provider && GOOS=$GOOS GOARCH=$GOARCH CGO_ENABLED=0 go build \ -o ../bin/$GOOS-$GOARCH/pulumi-resource-incus -ldflags "${LDFLAGS_PROJ_VERSION} -s -w" \ git.kalinow.ski/nimbus/pulumi-incus/provider/cmd/pulumi-resource-incus RUN cd $WORKING_DIR && tar --gzip -cf /root/dist/pulumi-resource-incus-v${PROVIDER_VERSION}-$GOOS-$GOARCH.tar.gz \ README.md LICENSE -C bin/$GOOS-$GOARCH .