Skip to content

Commit 2c60c9a

Browse files
committed
Makefile: implement "fully source containers" HMS-3883
1 parent 63473c8 commit 2c60c9a

File tree

8 files changed

+194
-3
lines changed

8 files changed

+194
-3
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,7 @@ __pycache__
1111
/tools/appsre-ansible/inventory
1212

1313
/docs/osbuild-composer.7
14+
go.local.mod
15+
go.local.sum
16+
container_worker_built.info
17+
container_composer_built.info

Makefile

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,10 @@ install: build
156156
clean:
157157
rm -rf $(BUILDDIR)/bin/
158158
rm -rf $(CURDIR)/rpmbuild
159+
rm -rf $(BUILDDIR)/build/
160+
rm -f $(BUILDDIR)/go.local.*
161+
rm -f $(BUILDDIR)/container_worker_built.info
162+
rm -f $(BUILDDIR)/container_composer_built.info
159163

160164
.PHONY: push-check
161165
push-check: build unit-tests srpm man
@@ -275,3 +279,71 @@ scratch: $(RPM_SPECFILE) $(RPM_TARBALL)
275279
--nocheck \
276280
$(RPM_SPECFILE)
277281

282+
283+
# either "docker" or "sudo podman"
284+
# podman needs to build as root as it also needs to run as root afterwards
285+
CONTAINER_EXECUTABLE ?= sudo podman
286+
287+
DOCKER_IMAGE_WORKER := osbuild-worker_devel
288+
DOCKERFILE_WORKER := distribution/Dockerfile-worker_srcinstall
289+
290+
DOCKER_IMAGE_COMPOSER := osbuild-composer_devel
291+
DOCKERFILE_COMPOSER := distribution/Dockerfile-composer
292+
293+
GOPROXY ?= https://proxy.golang.org,direct
294+
295+
# source where the other repos are locally
296+
# has to end with a trailing slash
297+
SRC_DEPS_EXTERNAL_CHECKOUT_DIR ?= ../
298+
299+
# names of folder that have to be git-cloned additionally to be able
300+
# to build all code
301+
SRC_DEPS_EXTERNAL_NAMES := images pulp-client
302+
SRC_DEPS_EXTERNAL_DIRS := $(addprefix $(SRC_DEPS_EXTERNAL_CHECKOUT_DIR),$(SRC_DEPS_EXTERNAL_NAMES))
303+
304+
$(SRC_DEPS_EXTERNAL_DIRS):
305+
@for DIR in $@; do if ! [ -d $$DIR ]; then echo "Please checkout $$DIR so it is available at $$DIR"; exit 1; fi; done
306+
307+
308+
SRC_DEPS_DIRS := internal cmd pkg repositories
309+
310+
# All files to check for rebuild!
311+
SRC_DEPS := $(shell find $(SRC_DEPS_DIRS) -name *.go -or -name *.json)
312+
SRC_DEPS_EXTERNAL := $(shell find $(SRC_DEPS_EXTERNAL_DIRS) -name *.go)
313+
314+
# dependencies to rebuild worker
315+
WORKER_SRC_DEPS := $(SRC_DEPS)
316+
# dependencies to rebuild composer
317+
COMPOSER_SRC_DEPS := $(SRC_DEPS)
318+
319+
GOMODARGS ?= -modfile=go.local.mod
320+
321+
USE_BTRFS ?= yes
322+
323+
go.local.mod go.local.sum: $(SRC_DEPS_EXTERNAL_DIRS) go.mod $(SRC_DEPS_EXTERNAL) $(WORKER_SRC_DEPS) $(COMPOSER_SRC_DEPS) Makefile
324+
cp go.mod go.local.mod
325+
cp go.sum go.local.sum
326+
327+
go mod edit $(GOMODARGS) -replace github.com/osbuild/images=$(SRC_DEPS_EXTERNAL_CHECKOUT_DIR)images
328+
go mod edit $(GOMODARGS) -replace github.com/osbuild/pulp-client=$(SRC_DEPS_EXTERNAL_CHECKOUT_DIR)pulp-client
329+
go mod edit $(GOMODARGS) -replace github.com/osbuild/osbuild-composer/pkg/splunk_logger=./pkg/splunk_logger
330+
env GOPROXY=$(GOPROXY) go mod tidy $(GOMODARGS)
331+
env GOPROXY=$(GOPROXY) go mod vendor $(GOMODARGS)
332+
333+
container_worker_built.info: go.local.mod $(WORKER_SRC_DEPS) $(DOCKERFILE_WORKER)
334+
$(CONTAINER_EXECUTABLE) build -t $(DOCKER_IMAGE_WORKER) -f $(DOCKERFILE_WORKER) --build-arg GOMODARGS=$(GOMODARGS) --build-arg USE_BTRFS=$(USE_BTRFS) .
335+
echo "Worker last built on" > $@
336+
date >> $@
337+
338+
container_composer_built.info: go.local.mod $(COMPOSER_SRC_DEPS) $(DOCKERFILE_COMPOSER)
339+
$(CONTAINER_EXECUTABLE) build -t $(DOCKER_IMAGE_COMPOSER) -f $(DOCKERFILE_COMPOSER) --build-arg GOMODARGS=$(GOMODARGS) .
340+
echo "Composer last built on" > $@
341+
date >> $@
342+
343+
# build a container with a worker from full source
344+
.PHONY: container_worker
345+
container_worker: container_worker_built.info
346+
347+
# build a container with the composer from full source
348+
.PHONY: container_composer
349+
container_composer: container_composer_built.info

distribution/Dockerfile-composer

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
FROM fedora:39 AS builder
2+
ENV GOBIN=/opt/app-root/src/go/bin
3+
4+
RUN dnf install -y gpgme-devel libassuan-devel device-mapper-devel golang
5+
6+
WORKDIR /osbuild-composer
7+
COPY . /osbuild-composer
8+
ENV GOFLAGS="-mod=vendor -tags=exclude_graphdriver_btrfs"
9+
10+
ARG GOPROXY=https://proxy.golang.org,direct
11+
RUN go env -w GOPROXY=$GOPROXY
12+
13+
ARG GOMODARGS=""
14+
15+
RUN go install $GOMODARGS ./cmd/osbuild-composer/
16+
17+
FROM registry.access.redhat.com/ubi9/go-toolset:latest AS builder2
18+
RUN go install github.com/jackc/tern@latest
19+
20+
FROM fedora:39
21+
22+
RUN dnf install -y python3 python3-dnf gpgme libassuan device-mapper-libs
23+
RUN mkdir -p "/usr/libexec/osbuild-composer"
24+
RUN mkdir -p "/etc/osbuild-composer/"
25+
RUN mkdir -p "/run/osbuild-composer/"
26+
RUN mkdir -p "/var/cache/osbuild-composer/"
27+
RUN mkdir -p "/var/lib/osbuild-composer/"
28+
RUN mkdir -p "/usr/share/osbuild-composer/"
29+
RUN mkdir -p "/opt/migrate/"
30+
COPY --from=builder /opt/app-root/src/go/bin/osbuild-composer /usr/libexec/osbuild-composer/
31+
COPY ./containers/osbuild-composer/entrypoint.py /opt/entrypoint.py
32+
33+
COPY ./pkg/jobqueue/dbjobqueue/schemas /opt/migrate/schemas
34+
COPY --from=builder2 /opt/app-root/src/go/bin/tern /opt/migrate/
35+
36+
EXPOSE 8008 8080 8700
37+
ENTRYPOINT ["python3", "/opt/entrypoint.py", "--remote-worker-api", "--composer-api", "--prometheus", "--shutdown-wait-period", "15"]

distribution/Dockerfile-fauxauth

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ FROM registry.access.redhat.com/ubi9/go-toolset:latest AS builder
44
# a repository owned by a different user.
55
COPY --chown=1001 . .
66
ENV GOFLAGS=-mod=vendor
7+
8+
ARG GOPROXY=https://proxy.golang.org,direct
9+
RUN go env -w GOPROXY=$GOPROXY
10+
711
RUN go install ./cmd/osbuild-mock-openid-provider/
812

913
FROM registry.access.redhat.com/ubi9/ubi-minimal:latest
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
FROM fedora:39 AS builder
2+
ENV GOBIN=/opt/app-root/src/go/bin
3+
4+
RUN dnf install -y gpgme-devel libassuan-devel device-mapper-devel golang
5+
6+
COPY . .
7+
ENV GOFLAGS=-mod=vendor
8+
9+
ARG GOPROXY=https://proxy.golang.org,direct
10+
RUN go env -w GOPROXY=$GOPROXY
11+
12+
ARG GOMODARGS=""
13+
14+
RUN go install $GOMODARGS ./cmd/osbuild-mock-openid-provider/
15+
16+
FROM registry.access.redhat.com/ubi9/ubi-minimal:latest
17+
RUN microdnf install -y python3
18+
RUN mkdir -p "/usr/libexec/osbuild-composer"
19+
RUN mkdir -p "/etc/osbuild-composer/"
20+
21+
COPY --from=builder /opt/app-root/src/go/bin/osbuild-mock-openid-provider /usr/libexec/osbuild-composer/
22+
COPY ./containers/fauxauth/fauxauth.py /opt/fauxauth.py
23+
24+
EXPOSE 8080 8080
25+
ENTRYPOINT "/opt/fauxauth.py"

distribution/Dockerfile-ubi

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,18 @@ ARG COMMIT
1313
ENV LDFLAGS="${COMMIT:+-X \'github.com/osbuild/osbuild-composer/internal/common.GitRev=${COMMIT}\'}"
1414
ENV LDFLAGS="${LDFLAGS:+-ldflags=\"${LDFLAGS}\"}"
1515
ENV GOFLAGS="-mod=vendor -tags=exclude_graphdriver_btrfs"
16+
17+
ARG GOPROXY=https://proxy.golang.org,direct
18+
RUN go env -w GOPROXY=$GOPROXY
19+
20+
ARG GOMODARGS=""
21+
ENV GOMODARGS=$GOMODARGS
22+
1623
# if run without "sh -c", podman for some reason executes the command in a way,
1724
# which results in the following error:
1825
# [1/3] STEP 12/12: RUN go install ${LDFLAGS} ./cmd/osbuild-composer/
1926
# invalid value "\"-X" for flag -ldflags: missing =<value> in <pattern>=<value>
20-
RUN /usr/bin/sh -c "go install ${LDFLAGS} ./cmd/osbuild-composer/"
27+
RUN /usr/bin/sh -c "go install ${LDFLAGS} ${GOMODARGS} ./cmd/osbuild-composer/"
2128

2229
FROM registry.access.redhat.com/ubi9/go-toolset:latest AS builder2
2330
RUN go install github.com/jackc/tern@latest

distribution/Dockerfile-worker

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
1-
FROM fedora:37 AS builder
1+
FROM fedora:39 AS builder
22
ENV GOBIN=/opt/app-root/src/go/bin
33
# extra packages are needed
44
# to compile osbuild
55
RUN dnf install -y golang \
66
krb5-devel \
77
gpgme-devel \
88
libassuan-devel
9+
10+
ARG USE_BTRFS=no
11+
RUN if [[ "$USE_BTRFS" == "yes" ]]; then dnf install -y btrfs-progs-devel device-mapper-devel; fi
12+
913
WORKDIR /osbuild-composer
1014
COPY . /osbuild-composer
1115
ENV GOFLAGS=-mod=vendor
16+
17+
ARG GOPROXY=https://proxy.golang.org,direct
18+
RUN go env -w GOPROXY=$GOPROXY
19+
1220
RUN go install ./cmd/osbuild-worker
1321

1422
FROM fedora
1523
RUN dnf update -y && dnf upgrade -y
16-
RUN dnf install -y libxcrypt-compat qemu-img osbuild osbuild-ostree
24+
RUN dnf install -y libxcrypt-compat qemu-img osbuild osbuild-ostree osbuild-depsolve-dnf
1725
RUN mkdir -p "/usr/libexec/osbuild-composer"
1826
RUN mkdir -p "/etc/osbuild-composer/"
1927
RUN mkdir -p "/run/osbuild-composer/"
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
FROM fedora:39 AS builder
2+
ENV GOBIN=/opt/app-root/src/go/bin
3+
# extra packages are needed
4+
# to compile osbuild
5+
RUN dnf install -y golang \
6+
krb5-devel \
7+
gpgme-devel \
8+
libassuan-devel
9+
10+
ARG USE_BTRFS=no
11+
RUN if [[ "$USE_BTRFS" == "yes" ]]; then dnf install -y btrfs-progs-devel device-mapper-devel; fi
12+
13+
WORKDIR /osbuild-composer
14+
COPY . /osbuild-composer
15+
ENV GOFLAGS=-mod=vendor
16+
17+
ARG GOPROXY=https://proxy.golang.org,direct
18+
RUN go env -w GOPROXY=$GOPROXY
19+
20+
ARG GOMODARGS=""
21+
22+
RUN go install $GOMODARGS ./cmd/osbuild-worker
23+
24+
FROM osbuild_devel
25+
26+
RUN mkdir -p "/usr/libexec/osbuild-composer"
27+
RUN mkdir -p "/etc/osbuild-composer/"
28+
RUN mkdir -p "/run/osbuild-composer/"
29+
RUN mkdir -p "/var/cache/osbuild-worker/"
30+
RUN mkdir -p "/var/lib/osbuild-composer/"
31+
RUN mkdir -p "/var/cache/osbuild-composer/output"
32+
COPY --from=builder /opt/app-root/src/go/bin/osbuild-worker /usr/libexec/osbuild-composer/
33+
34+
ENTRYPOINT ["/usr/libexec/osbuild-composer/osbuild-worker"]

0 commit comments

Comments
 (0)