a420b85b07
In order to run more than one instance of E2E testing at a time, we need to ensure that all resources are unique to the run. Signed-off-by: Andrew Rynhard <andrew@andrewrynhard.com>
331 lines
8.7 KiB
Makefile
331 lines
8.7 KiB
Makefile
TOOLS ?= autonomy/tools:b473afb
|
|
|
|
# TODO(andrewrynhard): Move this logic to a shell script.
|
|
BUILDKIT_VERSION ?= v0.6.0
|
|
KUBECTL_VERSION ?= v1.14.1
|
|
GO_VERSION ?= 1.12
|
|
BUILDKIT_IMAGE ?= moby/buildkit:$(BUILDKIT_VERSION)
|
|
BUILDKIT_HOST ?= tcp://0.0.0.0:1234
|
|
BUILDKIT_CONTAINER_NAME ?= talos-buildkit
|
|
BUILDKIT_CONTAINER_STOPPED := $(shell docker ps --filter name=$(BUILDKIT_CONTAINER_NAME) --filter status=exited --format='{{.Names}}' 2>/dev/null)
|
|
BUILDKIT_CONTAINER_RUNNING := $(shell docker ps --filter name=$(BUILDKIT_CONTAINER_NAME) --filter status=running --format='{{.Names}}' 2>/dev/null)
|
|
|
|
UNAME_S := $(shell uname -s)
|
|
ifeq ($(UNAME_S),Linux)
|
|
BUILDCTL_ARCHIVE := https://github.com/moby/buildkit/releases/download/$(BUILDKIT_VERSION)/buildkit-$(BUILDKIT_VERSION).linux-amd64.tar.gz
|
|
BUILDKIT_CACHE ?= -v $(HOME)/.buildkit:/var/lib/buildkit
|
|
endif
|
|
ifeq ($(UNAME_S),Darwin)
|
|
BUILDCTL_ARCHIVE := https://github.com/moby/buildkit/releases/download/$(BUILDKIT_VERSION)/buildkit-$(BUILDKIT_VERSION).darwin-amd64.tar.gz
|
|
BUILDKIT_CACHE ?=
|
|
endif
|
|
|
|
ifeq ($(UNAME_S),Linux)
|
|
KUBECTL_ARCHIVE := https://storage.googleapis.com/kubernetes-release/release/$(KUBECTL_VERSION)/bin/linux/amd64/kubectl
|
|
endif
|
|
ifeq ($(UNAME_S),Darwin)
|
|
KUBECTL_ARCHIVE := https://storage.googleapis.com/kubernetes-release/release/$(KUBECTL_VERSION)/bin/darwin/amd64/kubectl
|
|
endif
|
|
|
|
ifeq ($(UNAME_S),Linux)
|
|
GITMETA := https://github.com/talos-systems/gitmeta/releases/download/v0.1.0-alpha.2/gitmeta-linux-amd64
|
|
endif
|
|
ifeq ($(UNAME_S),Darwin)
|
|
GITMETA := https://github.com/talos-systems/gitmeta/releases/download/v0.1.0-alpha.2/gitmeta-darwin-amd64
|
|
endif
|
|
|
|
BINDIR ?= ./bin
|
|
CONFORM_VERSION ?= 57c9dbd
|
|
|
|
SHA ?= $(shell $(BINDIR)/gitmeta git sha)
|
|
TAG ?= $(shell $(BINDIR)/gitmeta image tag)
|
|
|
|
COMMON_ARGS = --progress=plain
|
|
COMMON_ARGS += --frontend=dockerfile.v0
|
|
COMMON_ARGS += --allow security.insecure
|
|
COMMON_ARGS += --local context=.
|
|
COMMON_ARGS += --local dockerfile=.
|
|
COMMON_ARGS += --opt build-arg:TOOLS=$(TOOLS)
|
|
COMMON_ARGS += --opt build-arg:SHA=$(SHA)
|
|
COMMON_ARGS += --opt build-arg:TAG=$(TAG)
|
|
COMMON_ARGS += --opt build-arg:GO_VERSION=$(GO_VERSION)
|
|
|
|
DOCKER_ARGS ?=
|
|
|
|
TESTPKGS ?= ./...
|
|
|
|
all: ci rootfs initramfs kernel osctl-linux osctl-darwin installer container
|
|
|
|
.PHONY: ci
|
|
ci: builddeps buildkitd
|
|
|
|
.PHONY: builddeps
|
|
builddeps: gitmeta buildctl
|
|
|
|
gitmeta: $(BINDIR)/gitmeta
|
|
|
|
$(BINDIR)/gitmeta:
|
|
@mkdir -p $(BINDIR)
|
|
@curl -L $(GITMETA) -o $(BINDIR)/gitmeta
|
|
@chmod +x $(BINDIR)/gitmeta
|
|
|
|
buildctl: $(BINDIR)/buildctl
|
|
|
|
$(BINDIR)/buildctl:
|
|
@mkdir -p $(BINDIR)
|
|
@curl -L $(BUILDCTL_ARCHIVE) | tar -zxf - -C $(BINDIR) --strip-components 1 bin/buildctl
|
|
|
|
kubectl: $(BINDIR)/kubectl
|
|
|
|
$(BINDIR)/kubectl:
|
|
@mkdir -p $(BINDIR)
|
|
@curl -L -o $(BINDIR)/kubectl $(KUBECTL_ARCHIVE)
|
|
@chmod +x $(BINDIR)/kubectl
|
|
|
|
.PHONY: buildkitd
|
|
buildkitd:
|
|
ifeq (tcp://0.0.0.0:1234,$(findstring tcp://0.0.0.0:1234,$(BUILDKIT_HOST)))
|
|
ifeq ($(BUILDKIT_CONTAINER_STOPPED),$(BUILDKIT_CONTAINER_NAME))
|
|
@echo "Removing exited talos-buildkit container"
|
|
@docker rm $(BUILDKIT_CONTAINER_NAME)
|
|
endif
|
|
ifneq ($(BUILDKIT_CONTAINER_RUNNING),$(BUILDKIT_CONTAINER_NAME))
|
|
@echo "Starting talos-buildkit container"
|
|
@docker run \
|
|
--name $(BUILDKIT_CONTAINER_NAME) \
|
|
-d \
|
|
--privileged \
|
|
-p 1234:1234 \
|
|
$(BUILDKIT_CACHE) \
|
|
$(BUILDKIT_IMAGE) \
|
|
--addr $(BUILDKIT_HOST) \
|
|
--allow-insecure-entitlement security.insecure
|
|
@echo "Wait for buildkitd to become available"
|
|
@sleep 5
|
|
endif
|
|
endif
|
|
|
|
base: buildkitd
|
|
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
|
|
build \
|
|
--output type=docker,dest=build/$@.tar,name=docker.io/autonomy/$@:$(TAG) \
|
|
--opt target=$@ \
|
|
$(COMMON_ARGS)
|
|
|
|
.PHONY: generate
|
|
generate: buildkitd
|
|
$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
|
|
build \
|
|
--output type=local,dest=./ \
|
|
--opt target=$@ \
|
|
$(COMMON_ARGS)
|
|
|
|
.PHONY: kernel
|
|
kernel: buildkitd
|
|
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
|
|
build \
|
|
--output type=local,dest=build \
|
|
--opt target=$@ \
|
|
$(COMMON_ARGS)
|
|
@-rm -rf ./build/modules
|
|
|
|
.PHONY: initramfs
|
|
initramfs: buildkitd
|
|
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
|
|
build \
|
|
--output type=local,dest=build \
|
|
--opt target=$@ \
|
|
$(COMMON_ARGS)
|
|
|
|
.PHONY: rootfs
|
|
rootfs: buildkitd osd trustd proxyd ntpd
|
|
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
|
|
build \
|
|
--opt target=$@ \
|
|
$(COMMON_ARGS)
|
|
|
|
.PHONY: installer
|
|
installer: buildkitd
|
|
@mkdir -p build
|
|
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
|
|
build \
|
|
--output type=docker,dest=build/$@.tar,name=docker.io/autonomy/$@:$(TAG) \
|
|
--opt target=$@ \
|
|
$(COMMON_ARGS)
|
|
@docker load < build/$@.tar
|
|
|
|
.PHONY: image-aws
|
|
image-aws:
|
|
@docker run \
|
|
--rm \
|
|
-i \
|
|
-e AWS_ACCESS_KEY_ID=$(AWS_ACCESS_KEY_ID) \
|
|
-e AWS_SECRET_ACCESS_KEY=$(AWS_SECRET_ACCESS_KEY) \
|
|
-e AWS_DEFAULT_REGION=$(AWS_DEFAULT_REGION) \
|
|
autonomy/installer:$(TAG) ami -var regions=${AWS_PUBLISH_REGIONS} -var visibility=all
|
|
|
|
.PHONY: image-azure
|
|
image-azure:
|
|
@docker run --rm -v /dev:/dev -v $(PWD)/build:/out \
|
|
--privileged $(DOCKER_ARGS) \
|
|
autonomy/installer:$(TAG) \
|
|
install \
|
|
-n azure \
|
|
-r \
|
|
-p azure \
|
|
-u none \
|
|
-e rootdelay=300
|
|
@docker run --rm -v $(PWD)/build:/out $(DOCKER_ARGS) \
|
|
--entrypoint qemu-img \
|
|
autonomy/installer:$(TAG) \
|
|
convert \
|
|
-f raw \
|
|
-o subformat=fixed,force_size \
|
|
-O vpc /out/azure.raw /out/azure.vhd
|
|
@tar -C $(PWD)/build -czf $(PWD)/build/azure.tar.gz azure.vhd
|
|
@rm -rf $(PWD)/build/azure.raw $(PWD)/build/azure.vhd
|
|
|
|
.PHONY: push-image-azure
|
|
push-image-azure:
|
|
@TAG=$(TAG) ./hack/test/azure-setup.sh
|
|
|
|
.PHONY: image-gce
|
|
image-gce:
|
|
@docker run --rm -v /dev:/dev -v $(PWD)/build:/out --privileged $(DOCKER_ARGS) autonomy/installer:$(TAG) install -n disk -r -p googlecloud -u none
|
|
@tar -C $(PWD)/build -czf $(PWD)/build/gce.tar.gz disk.raw
|
|
@rm -rf $(PWD)/build/disk.raw
|
|
|
|
.PHONY: push-image-gce
|
|
push-image-gce:
|
|
@TAG=$(TAG) ./hack/test/gce-setup.sh
|
|
|
|
.PHONY: image-test
|
|
image-test:
|
|
@docker run --rm -v /dev:/dev -v /tmp:/out --privileged $(DOCKER_ARGS) autonomy/installer:$(TAG) install -n test -r -p test -u none
|
|
|
|
.PHONY: iso
|
|
iso:
|
|
@docker run --rm -i -v $(PWD)/build:/out autonomy/installer:$(TAG) iso
|
|
|
|
.PHONY: container
|
|
container: buildkitd
|
|
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
|
|
build \
|
|
--output type=docker,dest=build/$@.tar,name=docker.io/autonomy/talos:$(TAG) \
|
|
--opt target=$@ \
|
|
$(COMMON_ARGS)
|
|
@docker load < build/$@.tar
|
|
|
|
.PHONY: basic-integration
|
|
basic-integration:
|
|
@TAG=$(TAG) ./hack/test/$@.sh
|
|
|
|
.PHONY: capi
|
|
capi:
|
|
@TAG=$(TAG) ./hack/test/$@.sh
|
|
|
|
.PHONY: e2e-integration
|
|
e2e-integration:
|
|
@TAG=$(TAG) ./hack/test/$@.sh
|
|
|
|
.PHONY: unit-tests
|
|
unit-tests: buildkitd
|
|
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
|
|
build \
|
|
--opt target=$@ \
|
|
--output type=local,dest=./ \
|
|
--opt build-arg:TESTPKGS=$(TESTPKGS) \
|
|
$(COMMON_ARGS)
|
|
|
|
.PHONY: unit-tests-race
|
|
unit-tests-race: buildkitd
|
|
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
|
|
build \
|
|
--opt target=$@ \
|
|
--opt build-arg:TESTPKGS=$(TESTPKGS) \
|
|
$(COMMON_ARGS)
|
|
|
|
.PHONY: lint
|
|
lint: buildkitd
|
|
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
|
|
build \
|
|
--opt target=$@ \
|
|
$(COMMON_ARGS)
|
|
|
|
.PHONY: osctl-linux
|
|
osctl-linux: buildkitd
|
|
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
|
|
build \
|
|
--output type=local,dest=build \
|
|
--opt target=$@ \
|
|
$(COMMON_ARGS)
|
|
|
|
.PHONY: osctl-darwin
|
|
osctl-darwin: buildkitd
|
|
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
|
|
build \
|
|
--output type=local,dest=build \
|
|
--opt target=$@ \
|
|
$(COMMON_ARGS)
|
|
|
|
.PHONY: machined
|
|
machined: buildkitd images
|
|
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
|
|
build \
|
|
--opt target=$@ \
|
|
$(COMMON_ARGS)
|
|
|
|
.PHONY: osd
|
|
osd: buildkitd images
|
|
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
|
|
build \
|
|
--output type=docker,dest=images/$@.tar,name=docker.io/autonomy/$@:$(TAG) \
|
|
--opt target=$@ \
|
|
$(COMMON_ARGS)
|
|
|
|
.PHONY: trustd
|
|
trustd: buildkitd images
|
|
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
|
|
build \
|
|
--output type=docker,dest=images/$@.tar,name=docker.io/autonomy/$@:$(TAG) \
|
|
--opt target=$@ \
|
|
$(COMMON_ARGS)
|
|
|
|
.PHONY: proxyd
|
|
proxyd: buildkitd images
|
|
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
|
|
build \
|
|
--output type=docker,dest=images/$@.tar,name=docker.io/autonomy/$@:$(TAG) \
|
|
--opt target=$@ \
|
|
$(COMMON_ARGS)
|
|
|
|
.PHONY: ntpd
|
|
ntpd: buildkitd images
|
|
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
|
|
build \
|
|
--output type=docker,dest=images/$@.tar,name=docker.io/autonomy/$@:$(TAG) \
|
|
--opt target=$@ \
|
|
$(COMMON_ARGS)
|
|
|
|
images:
|
|
@mkdir -p images
|
|
|
|
.PHONY: login
|
|
login:
|
|
@docker login --username "$(DOCKER_USERNAME)" --password "$(DOCKER_PASSWORD)"
|
|
|
|
.PHONY: push
|
|
push: gitmeta login
|
|
@docker tag autonomy/installer:$(TAG) autonomy/installer:latest
|
|
@docker push autonomy/installer:$(TAG)
|
|
# TODO: only push :latest if merge to master?
|
|
@docker push autonomy/installer:latest
|
|
@docker tag autonomy/talos:$(TAG) autonomy/talos:latest
|
|
@docker push autonomy/talos:$(TAG)
|
|
# TODO: only push :latest if merge to master?
|
|
@docker push autonomy/talos:latest
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
@-rm -rf build images vendor
|