Initial provider implementation (#18)
This brings over the initial buildx prototype from pulumi/pulumi-docker and fixes various build and release issues.
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
name: provider-dockerbuild
|
||||
name: provider-docker-build
|
||||
runtime: java
|
||||
config:
|
||||
dockerHubPassword:
|
||||
type: string
|
||||
secret: true
|
||||
plugins:
|
||||
providers:
|
||||
- name: dockerbuild
|
||||
- name: docker-build
|
||||
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>
|
||||
|
||||
<groupId>com.pulumi</groupId>
|
||||
<artifactId>provider-dockerbuild</artifactId>
|
||||
<artifactId>provider-docker-build</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
|
||||
<properties>
|
||||
@@ -25,7 +25,7 @@
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.pulumi</groupId>
|
||||
<artifactId>dockerbuild</artifactId>
|
||||
<artifactId>docker-build</artifactId>
|
||||
<version>[0.0.0,)</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
@@ -3,8 +3,19 @@ package generated_program;
|
||||
import com.pulumi.Context;
|
||||
import com.pulumi.Pulumi;
|
||||
import com.pulumi.core.Output;
|
||||
import com.pulumi.dockerbuild.Random;
|
||||
import com.pulumi.dockerbuild.RandomArgs;
|
||||
import com.pulumi.dockerbuild.Image;
|
||||
import com.pulumi.dockerbuild.ImageArgs;
|
||||
import com.pulumi.dockerbuild.inputs.DockerfileArgs;
|
||||
import com.pulumi.dockerbuild.inputs.BuildContextArgs;
|
||||
import com.pulumi.dockerbuild.inputs.ExportArgs;
|
||||
import com.pulumi.dockerbuild.inputs.ExportRegistryArgs;
|
||||
import com.pulumi.dockerbuild.inputs.RegistryArgs;
|
||||
import com.pulumi.dockerbuild.inputs.CacheToArgs;
|
||||
import com.pulumi.dockerbuild.inputs.CacheToLocalArgs;
|
||||
import com.pulumi.dockerbuild.inputs.CacheFromArgs;
|
||||
import com.pulumi.dockerbuild.inputs.CacheFromLocalArgs;
|
||||
import com.pulumi.dockerbuild.inputs.SSHArgs;
|
||||
import com.pulumi.dockerbuild.inputs.ExportDockerArgs;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
@@ -18,10 +29,179 @@ public class App {
|
||||
}
|
||||
|
||||
public static void stack(Context ctx) {
|
||||
var myRandomResource = new Random("myRandomResource", RandomArgs.builder()
|
||||
.length(24)
|
||||
final var config = ctx.config();
|
||||
final var dockerHubPassword = config.get("dockerHubPassword");
|
||||
var multiPlatform = new Image("multiPlatform", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.location("./app/Dockerfile.multiPlatform")
|
||||
.build())
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.platforms(
|
||||
"plan9/amd64",
|
||||
"plan9/386")
|
||||
.build());
|
||||
|
||||
ctx.export("value", myRandomResource.result());
|
||||
var registryPush = new Image("registryPush", ImageArgs.builder()
|
||||
.push(false)
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.tags("docker.io/pulumibot/buildkit-e2e:example")
|
||||
.exports(ExportArgs.builder()
|
||||
.registry(ExportRegistryArgs.builder()
|
||||
.ociMediaTypes(true)
|
||||
.push(false)
|
||||
.build())
|
||||
.build())
|
||||
.registries(RegistryArgs.builder()
|
||||
.address("docker.io")
|
||||
.username("pulumibot")
|
||||
.password(dockerHubPassword)
|
||||
.build())
|
||||
.build());
|
||||
|
||||
var cached = new Image("cached", ImageArgs.builder()
|
||||
.push(false)
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.cacheTo(CacheToArgs.builder()
|
||||
.local(CacheToLocalArgs.builder()
|
||||
.dest("tmp/cache")
|
||||
.mode("max")
|
||||
.build())
|
||||
.build())
|
||||
.cacheFrom(CacheFromArgs.builder()
|
||||
.local(CacheFromLocalArgs.builder()
|
||||
.src("tmp/cache")
|
||||
.build())
|
||||
.build())
|
||||
.build());
|
||||
|
||||
var buildArgs = new Image("buildArgs", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.location("./app/Dockerfile.buildArgs")
|
||||
.build())
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.buildArgs(Map.of("SET_ME_TO_TRUE", "true"))
|
||||
.build());
|
||||
|
||||
var extraHosts = new Image("extraHosts", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.location("./app/Dockerfile.extraHosts")
|
||||
.build())
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.addHosts("metadata.google.internal:169.254.169.254")
|
||||
.build());
|
||||
|
||||
var sshMount = new Image("sshMount", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.location("./app/Dockerfile.sshMount")
|
||||
.build())
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.ssh(SSHArgs.builder()
|
||||
.id("default")
|
||||
.build())
|
||||
.build());
|
||||
|
||||
var secrets = new Image("secrets", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.location("./app/Dockerfile.secrets")
|
||||
.build())
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.secrets(Map.of("password", "hunter2"))
|
||||
.build());
|
||||
|
||||
var labels = new Image("labels", ImageArgs.builder()
|
||||
.push(false)
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.labels(Map.of("description", "This image will get a descriptive label 👍"))
|
||||
.build());
|
||||
|
||||
var target = new Image("target", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.location("./app/Dockerfile.target")
|
||||
.build())
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.target("build-me")
|
||||
.build());
|
||||
|
||||
var namedContexts = new Image("namedContexts", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.location("./app/Dockerfile.namedContexts")
|
||||
.build())
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.named(Map.of("golang:latest", Map.of("location", "docker-image://golang@sha256:b8e62cf593cdaff36efd90aa3a37de268e6781a2e68c6610940c48f7cdf36984")))
|
||||
.build())
|
||||
.build());
|
||||
|
||||
var remoteContext = new Image("remoteContext", ImageArgs.builder()
|
||||
.push(false)
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("https://raw.githubusercontent.com/pulumi/pulumi-docker/api-types/provider/testdata/Dockerfile")
|
||||
.build())
|
||||
.build());
|
||||
|
||||
var remoteContextWithInline = new Image("remoteContextWithInline", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.inline("""
|
||||
FROM busybox
|
||||
COPY hello.c ./
|
||||
""")
|
||||
.build())
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("https://github.com/docker-library/hello-world.git")
|
||||
.build())
|
||||
.build());
|
||||
|
||||
var inline = new Image("inline", ImageArgs.builder()
|
||||
.push(false)
|
||||
.dockerfile(DockerfileArgs.builder()
|
||||
.inline("""
|
||||
FROM alpine
|
||||
RUN echo "This uses an inline Dockerfile! 👍"
|
||||
""")
|
||||
.build())
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.build());
|
||||
|
||||
var dockerLoad = new Image("dockerLoad", ImageArgs.builder()
|
||||
.push(false)
|
||||
.context(BuildContextArgs.builder()
|
||||
.location("./app")
|
||||
.build())
|
||||
.exports(ExportArgs.builder()
|
||||
.docker(ExportDockerArgs.builder()
|
||||
.tar(true)
|
||||
.build())
|
||||
.build())
|
||||
.build());
|
||||
|
||||
ctx.export("platforms", multiPlatform.platforms());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user