Skip to content

Commit

Permalink
refac: Use an overlay directory to create Makefiles and Dockerfiles
Browse files Browse the repository at this point in the history
Allows for easier individual customization required for accepatnce
tests.

Signed-off-by: Alf-Rune Siqveland <alf.rune@northern.tech>
  • Loading branch information
alfrunes committed May 16, 2024
1 parent cb6161e commit 85e93e0
Show file tree
Hide file tree
Showing 31 changed files with 907 additions and 41 deletions.
45 changes: 4 additions & 41 deletions bootstrap.sh
Original file line number Diff line number Diff line change
Expand Up @@ -147,49 +147,12 @@ go mod tidy

cd "$(git rev-parse --show-toplevel)"

echo "Creating Makefiles and Dockerfiles"
while read repo; do
repo=${repo%%-enterprise}
cp Makefile.service backend/services/${repo}/Makefile
if test "${repo%%-worker}" != "${repo}"; then
# Adjust makefile to add dependency on workflows binary
sed -i '/^docker: build$/a \\t\$(MAKE) -C ../workflows build' \
backend/services/${repo}/Makefile
sed -i '/^docker-acceptance: build-test$/a \\t\$(MAKE) -C ../workflows build-test' \
backend/services/${repo}/Makefile
cat << EOF > backend/services/${repo}/Dockerfile
FROM scratch
ARG TARGETARCH
ARG TARGETOS
ARG USER=65534
ARG BIN_FILE=./dist/\${TARGETOS}/\${TARGETARCH}/${repo}
ARG BIN_WORKFLOWS=./dist/\${TARGETOS}/\${TARGETARCH}/workflows
USER \$USER
COPY --chown=\$USER backend/services/${repo}/config.yaml /etc/${repo}/config.yaml
COPY --chown=\$USER \${BIN_WORKFLOWS} /usr/bin/workflows
COPY --chown=\$USER \${BIN_FILE} /usr/bin/${repo}
ENTRYPOINT ["/usr/bin/workflows", "--config", "/etc/${repo}/config.yaml"]
CMD ["worker"]
EOF
else
cat << EOF > backend/services/${repo}/Dockerfile
FROM scratch
ARG USER=65534
ARG BIN_FILE=./dist/\${TARGETOS}/\${TARGETARCH}/${repo}
USER \$USER
COPY --chown=\$USER backend/services/${repo}/config.yaml /etc/${repo}/config.yaml
COPY --chown=\$USER \${BIN_FILE} /usr/bin/${repo}
ENTRYPOINT ["/usr/bin/${repo}", "--config", "/etc/${repo}/config.yaml"]
EOF
fi
# FIXME: services depending on mender-artifact needs special care
if test "${repo%%-enterprise}" = "deployments"; then
sed -i 's/^BUILDFLAGS ?=/\0 -tags nopkcs11/' backend/services/${repo%%-enterprise}/Makefile
fi

done < "$REPOSITORIES_PATH"
echo "Applying overlay for services"
find overlay -type f -exec sh -c \
'src="{}"; dst=${src#overlay/}; test -d $(dirname $dst) && cp -v $src $dst' \;

cp Makefile.backend ./backend/Makefile
rm -rf overlay

# Test build and docker make targets
make -C backend docker
File renamed without changes.
11 changes: 11 additions & 0 deletions overlay/backend/pkg/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
LDFLAGS ?= "-s -w"
BUILDFLAGS ?= -trimpath -ldflags $(LDFLAGS)
TESTFLAGS ?=

.PHONY: generate
generate:
go generate ./...

.PHONY: test
test:
go test $(BUILDFLAGS) $(TESTFLAGS) ./...
7 changes: 7 additions & 0 deletions overlay/backend/services/auditlogs/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
FROM scratch
ARG USER=65534
ARG BIN_FILE=./dist/${TARGETOS}/${TARGETARCH}/auditlogs
USER $USER
COPY --chown=$USER backend/services/auditlogs/config.yaml /etc/auditlogs/config.yaml
COPY --chown=$USER ${BIN_FILE} /usr/bin/auditlogs
ENTRYPOINT ["/usr/bin/auditlogs", "--config", "/etc/auditlogs/config.yaml"]
File renamed without changes.
12 changes: 12 additions & 0 deletions overlay/backend/services/create-artifact-worker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
FROM scratch
ARG TARGETARCH
ARG TARGETOS
ARG USER=65534
ARG BIN_FILE=./dist/${TARGETOS}/${TARGETARCH}/create-artifact-worker
ARG BIN_WORKFLOWS=./dist/${TARGETOS}/${TARGETARCH}/workflows
USER $USER
COPY --chown=$USER backend/services/create-artifact-worker/config.yaml /etc/create-artifact-worker/config.yaml
COPY --chown=$USER ${BIN_WORKFLOWS} /usr/bin/workflows
COPY --chown=$USER ${BIN_FILE} /usr/bin/create-artifact-worker
ENTRYPOINT ["/usr/bin/workflows", "--config", "/etc/create-artifact-worker/config.yaml"]
CMD ["worker"]
62 changes: 62 additions & 0 deletions overlay/backend/services/create-artifact-worker/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
COMPONENT := $(notdir $(shell go list))
GIT_ROOT := $(shell git rev-parse --show-toplevel)
VERSION := $(shell git describe --tag --dirty 2>/dev/null)

distdir ?= $(GIT_ROOT)/dist
bindir ?= $(distdir)/$(GOOS)/$(GOARCH)
binfile ?= $(bindir)/$(COMPONENT)

CGO_ENABLED ?= 0
GOARCH := $(shell go env GOARCH)
GOOS := $(shell go env GOOS)
GOMODDIR := $(shell go list -m -f '{{.Dir}}')

LDFLAGS ?= "-s -w"
BUILDFLAGS ?= -trimpath -ldflags $(LDFLAGS)
TESTFLAGS ?=

DOCKER_TAG ?= $(COMPONENT):latest
DOCKER_BIN ?= $(subst $(GIT_ROOT),,$(binfile)) # Repo-local file to binary

.PHONY: build
build:
# TODO: Add -ldflags "-X ...Version"
env CGO_ENABLED=$(CGO_ENABLED) \
GOOS=$(GOOS) \
GOARCH=$(GOARCH) \
go build -o $(binfile) $(BUILDFLAGS)

.PHONY: build-test
build-test: BUILDFLAGS += -cover -installsuffix .test
build-test: binfile = $(bindir)/$(COMPONENT).test
build-test: build

.PHONY: generate
generate:
go generate ./...

.PHONY: test
test:
go test $(BUILDFLAGS) $(TESTFLAGS) ./...

.PHONY: docker
docker: build
$(MAKE) -C ../workflows build
docker build $(DOCKER_ARGS) \
--build-arg BIN_FILE=$(DOCKER_BIN) \
--platform $(GOOS)/$(GOARCH) \
-f Dockerfile \
-t $(DOCKER_TAG) \
$(GIT_ROOT)

.PHONY: docker-acceptance
docker-acceptance: export DOCKER_TAG = $(COMPONENT):test
docker-acceptance: export DOCKER_BIN = $(subst $(GIT_ROOT),,$(binfile)).test
docker-acceptance: build-test
$(MAKE) -C ../workflows build-test
docker build $(DOCKER_ARGS) \
--build-arg BIN_FILE=$(DOCKER_BIN) \
--platform $(GOOS)/$(GOARCH) \
-f Dockerfile \
-t $(DOCKER_TAG) \
$(GIT_ROOT)
7 changes: 7 additions & 0 deletions overlay/backend/services/deployments/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
FROM scratch
ARG USER=65534
ARG BIN_FILE=./dist/${TARGETOS}/${TARGETARCH}/deployments
USER $USER
COPY --chown=$USER backend/services/deployments/config.yaml /etc/deployments/config.yaml
COPY --chown=$USER ${BIN_FILE} /usr/bin/deployments
ENTRYPOINT ["/usr/bin/deployments", "--config", "/etc/deployments/config.yaml"]
60 changes: 60 additions & 0 deletions overlay/backend/services/deployments/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
COMPONENT := $(notdir $(shell go list))
GIT_ROOT := $(shell git rev-parse --show-toplevel)
VERSION := $(shell git describe --tag --dirty 2>/dev/null)

distdir ?= $(GIT_ROOT)/dist
bindir ?= $(distdir)/$(GOOS)/$(GOARCH)
binfile ?= $(bindir)/$(COMPONENT)

CGO_ENABLED ?= 0
GOARCH := $(shell go env GOARCH)
GOOS := $(shell go env GOOS)
GOMODDIR := $(shell go list -m -f '{{.Dir}}')

LDFLAGS ?= "-s -w"
BUILDFLAGS ?= -tags nopkcs11 -trimpath -ldflags $(LDFLAGS)
TESTFLAGS ?=

DOCKER_TAG ?= $(COMPONENT):latest
DOCKER_BIN ?= $(subst $(GIT_ROOT),,$(binfile)) # Repo-local file to binary

.PHONY: build
build:
# TODO: Add -ldflags "-X ...Version"
env CGO_ENABLED=$(CGO_ENABLED) \
GOOS=$(GOOS) \
GOARCH=$(GOARCH) \
go build -o $(binfile) $(BUILDFLAGS)

.PHONY: build-test
build-test: BUILDFLAGS += -cover -installsuffix .test
build-test: binfile = $(bindir)/$(COMPONENT).test
build-test: build

.PHONY: generate
generate:
go generate ./...

.PHONY: test
test:
go test $(BUILDFLAGS) $(TESTFLAGS) ./...

.PHONY: docker
docker: build
docker build $(DOCKER_ARGS) \
--build-arg BIN_FILE=$(DOCKER_BIN) \
--platform $(GOOS)/$(GOARCH) \
-f Dockerfile \
-t $(DOCKER_TAG) \
$(GIT_ROOT)

.PHONY: docker-acceptance
docker-acceptance: export DOCKER_TAG = $(COMPONENT):test
docker-acceptance: export DOCKER_BIN = $(subst $(GIT_ROOT),,$(binfile)).test
docker-acceptance: build-test
docker build $(DOCKER_ARGS) \
--build-arg BIN_FILE=$(DOCKER_BIN) \
--platform $(GOOS)/$(GOARCH) \
-f Dockerfile \
-t $(DOCKER_TAG) \
$(GIT_ROOT)
7 changes: 7 additions & 0 deletions overlay/backend/services/deviceauth/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
FROM scratch
ARG USER=65534
ARG BIN_FILE=./dist/${TARGETOS}/${TARGETARCH}/deviceauth
USER $USER
COPY --chown=$USER backend/services/deviceauth/config.yaml /etc/deviceauth/config.yaml
COPY --chown=$USER ${BIN_FILE} /usr/bin/deviceauth
ENTRYPOINT ["/usr/bin/deviceauth", "--config", "/etc/deviceauth/config.yaml"]
60 changes: 60 additions & 0 deletions overlay/backend/services/deviceauth/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
COMPONENT := $(notdir $(shell go list))
GIT_ROOT := $(shell git rev-parse --show-toplevel)
VERSION := $(shell git describe --tag --dirty 2>/dev/null)

distdir ?= $(GIT_ROOT)/dist
bindir ?= $(distdir)/$(GOOS)/$(GOARCH)
binfile ?= $(bindir)/$(COMPONENT)

CGO_ENABLED ?= 0
GOARCH := $(shell go env GOARCH)
GOOS := $(shell go env GOOS)
GOMODDIR := $(shell go list -m -f '{{.Dir}}')

LDFLAGS ?= "-s -w"
BUILDFLAGS ?= -trimpath -ldflags $(LDFLAGS)
TESTFLAGS ?=

DOCKER_TAG ?= $(COMPONENT):latest
DOCKER_BIN ?= $(subst $(GIT_ROOT),,$(binfile)) # Repo-local file to binary

.PHONY: build
build:
# TODO: Add -ldflags "-X ...Version"
env CGO_ENABLED=$(CGO_ENABLED) \
GOOS=$(GOOS) \
GOARCH=$(GOARCH) \
go build -o $(binfile) $(BUILDFLAGS)

.PHONY: build-test
build-test: BUILDFLAGS += -cover -installsuffix .test
build-test: binfile = $(bindir)/$(COMPONENT).test
build-test: build

.PHONY: generate
generate:
go generate ./...

.PHONY: test
test:
go test $(BUILDFLAGS) $(TESTFLAGS) ./...

.PHONY: docker
docker: build
docker build $(DOCKER_ARGS) \
--build-arg BIN_FILE=$(DOCKER_BIN) \
--platform $(GOOS)/$(GOARCH) \
-f Dockerfile \
-t $(DOCKER_TAG) \
$(GIT_ROOT)

.PHONY: docker-acceptance
docker-acceptance: export DOCKER_TAG = $(COMPONENT):test
docker-acceptance: export DOCKER_BIN = $(subst $(GIT_ROOT),,$(binfile)).test
docker-acceptance: build-test
docker build $(DOCKER_ARGS) \
--build-arg BIN_FILE=$(DOCKER_BIN) \
--platform $(GOOS)/$(GOARCH) \
-f Dockerfile \
-t $(DOCKER_TAG) \
$(GIT_ROOT)
7 changes: 7 additions & 0 deletions overlay/backend/services/deviceconfig/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
FROM scratch
ARG USER=65534
ARG BIN_FILE=./dist/${TARGETOS}/${TARGETARCH}/deviceconfig
USER $USER
COPY --chown=$USER backend/services/deviceconfig/config.yaml /etc/deviceconfig/config.yaml
COPY --chown=$USER ${BIN_FILE} /usr/bin/deviceconfig
ENTRYPOINT ["/usr/bin/deviceconfig", "--config", "/etc/deviceconfig/config.yaml"]
60 changes: 60 additions & 0 deletions overlay/backend/services/deviceconfig/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
COMPONENT := $(notdir $(shell go list))
GIT_ROOT := $(shell git rev-parse --show-toplevel)
VERSION := $(shell git describe --tag --dirty 2>/dev/null)

distdir ?= $(GIT_ROOT)/dist
bindir ?= $(distdir)/$(GOOS)/$(GOARCH)
binfile ?= $(bindir)/$(COMPONENT)

CGO_ENABLED ?= 0
GOARCH := $(shell go env GOARCH)
GOOS := $(shell go env GOOS)
GOMODDIR := $(shell go list -m -f '{{.Dir}}')

LDFLAGS ?= "-s -w"
BUILDFLAGS ?= -trimpath -ldflags $(LDFLAGS)
TESTFLAGS ?=

DOCKER_TAG ?= $(COMPONENT):latest
DOCKER_BIN ?= $(subst $(GIT_ROOT),,$(binfile)) # Repo-local file to binary

.PHONY: build
build:
# TODO: Add -ldflags "-X ...Version"
env CGO_ENABLED=$(CGO_ENABLED) \
GOOS=$(GOOS) \
GOARCH=$(GOARCH) \
go build -o $(binfile) $(BUILDFLAGS)

.PHONY: build-test
build-test: BUILDFLAGS += -cover -installsuffix .test
build-test: binfile = $(bindir)/$(COMPONENT).test
build-test: build

.PHONY: generate
generate:
go generate ./...

.PHONY: test
test:
go test $(BUILDFLAGS) $(TESTFLAGS) ./...

.PHONY: docker
docker: build
docker build $(DOCKER_ARGS) \
--build-arg BIN_FILE=$(DOCKER_BIN) \
--platform $(GOOS)/$(GOARCH) \
-f Dockerfile \
-t $(DOCKER_TAG) \
$(GIT_ROOT)

.PHONY: docker-acceptance
docker-acceptance: export DOCKER_TAG = $(COMPONENT):test
docker-acceptance: export DOCKER_BIN = $(subst $(GIT_ROOT),,$(binfile)).test
docker-acceptance: build-test
docker build $(DOCKER_ARGS) \
--build-arg BIN_FILE=$(DOCKER_BIN) \
--platform $(GOOS)/$(GOARCH) \
-f Dockerfile \
-t $(DOCKER_TAG) \
$(GIT_ROOT)
7 changes: 7 additions & 0 deletions overlay/backend/services/deviceconnect/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
FROM scratch
ARG USER=65534
ARG BIN_FILE=./dist/${TARGETOS}/${TARGETARCH}/deviceconnect
USER $USER
COPY --chown=$USER backend/services/deviceconnect/config.yaml /etc/deviceconnect/config.yaml
COPY --chown=$USER ${BIN_FILE} /usr/bin/deviceconnect
ENTRYPOINT ["/usr/bin/deviceconnect", "--config", "/etc/deviceconnect/config.yaml"]
Loading

0 comments on commit 85e93e0

Please sign in to comment.