2019-10-25 19:32:53 +03:00
TOOLS ?= autonomy/tools:8fdb32d
2019-04-19 05:31:43 +03:00
# TODO(andrewrynhard): Move this logic to a shell script.
2019-08-01 00:47:55 +03:00
BUILDKIT_VERSION ?= v0.6.0
2019-10-30 16:21:29 +03:00
KUBECTL_VERSION ?= v1.16.2
2019-10-16 07:50:06 +03:00
GO_VERSION ?= 1.13
2019-02-15 07:32:00 +03:00
BUILDKIT_IMAGE ?= moby/buildkit:$( BUILDKIT_VERSION)
BUILDKIT_HOST ?= tcp://0.0.0.0:1234
BUILDKIT_CONTAINER_NAME ?= talos-buildkit
2019-02-15 18:57:27 +03:00
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)
2019-04-29 21:51:39 +03:00
2019-02-15 07:32:00 +03:00
UNAME_S := $( shell uname -s)
i f e q ( $( UNAME_S ) , L i n u x )
BUILDCTL_ARCHIVE := https://github.com/moby/buildkit/releases/download/$( BUILDKIT_VERSION) /buildkit-$( BUILDKIT_VERSION) .linux-amd64.tar.gz
e n d i f
i f e q ( $( UNAME_S ) , D a r w i n )
BUILDCTL_ARCHIVE := https://github.com/moby/buildkit/releases/download/$( BUILDKIT_VERSION) /buildkit-$( BUILDKIT_VERSION) .darwin-amd64.tar.gz
e n d i f
2019-04-24 04:52:31 +03:00
2019-04-29 21:51:39 +03:00
i f e q ( $( UNAME_S ) , L i n u x )
KUBECTL_ARCHIVE := https://storage.googleapis.com/kubernetes-release/release/$( KUBECTL_VERSION) /bin/linux/amd64/kubectl
e n d i f
i f e q ( $( UNAME_S ) , D a r w i n )
KUBECTL_ARCHIVE := https://storage.googleapis.com/kubernetes-release/release/$( KUBECTL_VERSION) /bin/darwin/amd64/kubectl
e n d i f
2019-06-05 21:44:15 +03:00
i f e q ( $( UNAME_S ) , L i n u x )
2019-10-17 00:17:28 +03:00
GITMETA := https://github.com/talos-systems/gitmeta/releases/download/v0.1.0-alpha.3/gitmeta-linux-amd64
2019-06-05 21:44:15 +03:00
e n d i f
i f e q ( $( UNAME_S ) , D a r w i n )
2019-10-17 00:17:28 +03:00
GITMETA := https://github.com/talos-systems/gitmeta/releases/download/v0.1.0-alpha.3/gitmeta-darwin-amd64
2019-06-05 21:44:15 +03:00
e n d i f
2019-04-24 04:52:31 +03:00
BINDIR ?= ./bin
CONFORM_VERSION ?= 57c9dbd
2019-07-15 22:00:31 +03:00
SHA ?= $( shell $( BINDIR) /gitmeta git sha)
TAG ?= $( shell $( BINDIR) /gitmeta image tag)
2019-08-17 23:21:20 +03:00
BRANCH ?= $( shell $( BINDIR) /gitmeta git branch)
2019-06-05 21:44:15 +03:00
2019-04-24 04:52:31 +03:00
COMMON_ARGS = --progress= plain
COMMON_ARGS += --frontend= dockerfile.v0
2019-07-18 23:05:26 +03:00
COMMON_ARGS += --allow security.insecure
2019-04-24 04:52:31 +03:00
COMMON_ARGS += --local context = .
COMMON_ARGS += --local dockerfile = .
2019-07-13 03:24:51 +03:00
COMMON_ARGS += --opt build-arg:TOOLS= $( TOOLS)
2019-04-24 04:52:31 +03:00
COMMON_ARGS += --opt build-arg:SHA= $( SHA)
COMMON_ARGS += --opt build-arg:TAG= $( TAG)
2019-08-07 01:08:27 +03:00
COMMON_ARGS += --opt build-arg:GO_VERSION= $( GO_VERSION)
2019-04-24 04:52:31 +03:00
DOCKER_ARGS ?=
2018-12-20 09:22:05 +03:00
2019-07-23 17:17:16 +03:00
TESTPKGS ?= ./...
2019-08-11 00:29:25 +03:00
all : ci rootfs initramfs kernel osctl -linux osctl -darwin installer container
2019-04-29 19:25:04 +03:00
.PHONY : ci
ci : builddeps buildkitd
2019-02-15 07:32:00 +03:00
.PHONY : builddeps
builddeps : gitmeta buildctl
2019-06-05 21:44:15 +03:00
gitmeta : $( BINDIR ) /gitmeta
$(BINDIR)/gitmeta :
@mkdir -p $( BINDIR)
@curl -L $( GITMETA) -o $( BINDIR) /gitmeta
@chmod +x $( BINDIR) /gitmeta
2019-02-15 07:32:00 +03:00
2019-04-24 04:52:31 +03:00
buildctl : $( BINDIR ) /buildctl
$(BINDIR)/buildctl :
2019-04-29 19:25:04 +03:00
@mkdir -p $( BINDIR)
2019-04-29 21:51:39 +03:00
@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
2019-02-15 07:32:00 +03:00
.PHONY : buildkitd
buildkitd :
ifeq (tcp : //0.0.0.0:1234, $( findstring tcp ://0.0.0.0:1234,$ ( BUILDKIT_HOST ) ) )
i f e q ( $( BUILDKIT_CONTAINER_STOPPED ) , $( BUILDKIT_CONTAINER_NAME ) )
@echo "Removing exited talos-buildkit container"
@docker rm $( BUILDKIT_CONTAINER_NAME)
e n d i f
i f n e q ( $( BUILDKIT_CONTAINER_RUNNING ) , $( BUILDKIT_CONTAINER_NAME ) )
@echo "Starting talos-buildkit container"
@docker run \
--name $( BUILDKIT_CONTAINER_NAME) \
-d \
--privileged \
2019-04-12 19:52:16 +03:00
-p 1234:1234 \
2019-02-15 07:32:00 +03:00
$( BUILDKIT_IMAGE) \
2019-07-18 23:05:26 +03:00
--addr $( BUILDKIT_HOST) \
--allow-insecure-entitlement security.insecure
2019-02-15 18:57:27 +03:00
@echo "Wait for buildkitd to become available"
@sleep 5
2019-02-15 07:32:00 +03:00
e n d i f
e n d i f
2019-04-24 04:52:31 +03:00
base : buildkitd
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
build \
--output type = docker,dest= build/$@ .tar,name= docker.io/autonomy/$@ :$( TAG) \
--opt target = $@ \
$( COMMON_ARGS)
2019-08-09 06:45:13 +03:00
.PHONY : generate
generate : buildkitd
$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
build \
2019-08-17 07:26:08 +03:00
--output type = local,dest= ./ \
2019-08-09 06:45:13 +03:00
--opt target = $@ \
$( COMMON_ARGS)
2019-04-19 05:31:43 +03:00
.PHONY : kernel
2019-02-28 05:57:35 +03:00
kernel : buildkitd
2019-04-24 04:52:31 +03:00
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
2019-02-15 07:32:00 +03:00
build \
2019-08-17 07:26:08 +03:00
--output type = local,dest= build \
2019-04-24 04:52:31 +03:00
--opt target = $@ \
2019-01-19 12:58:26 +03:00
$( COMMON_ARGS)
2019-04-16 08:44:59 +03:00
@-rm -rf ./build/modules
2019-01-18 06:14:52 +03:00
2019-04-19 05:31:43 +03:00
.PHONY : initramfs
2019-02-28 05:57:35 +03:00
initramfs : buildkitd
2019-04-24 04:52:31 +03:00
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
2019-02-15 07:32:00 +03:00
build \
2019-08-17 07:26:08 +03:00
--output type = local,dest= build \
2019-04-24 04:52:31 +03:00
--opt target = $@ \
2019-01-19 12:58:26 +03:00
$( COMMON_ARGS)
2018-12-20 09:22:05 +03:00
2019-10-31 01:52:36 +03:00
.PHONY : squashfs
squashfs : buildkitd osd trustd ntpd networkd apid
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
build \
--output type = local,dest= build \
--opt target = $@ \
$( COMMON_ARGS)
2019-04-19 05:31:43 +03:00
.PHONY : rootfs
2019-10-24 05:31:18 +03:00
rootfs : buildkitd osd trustd ntpd networkd apid
2019-04-24 04:52:31 +03:00
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
2019-02-15 07:32:00 +03:00
build \
2019-04-24 04:52:31 +03:00
--opt target = $@ \
2019-01-19 12:58:26 +03:00
$( COMMON_ARGS)
2018-12-20 09:22:05 +03:00
2019-04-19 05:31:43 +03:00
.PHONY : installer
2019-02-28 05:57:35 +03:00
installer : buildkitd
@mkdir -p build
2019-04-24 04:52:31 +03:00
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
2019-02-15 07:32:00 +03:00
build \
2019-04-24 04:52:31 +03:00
--output type = docker,dest= build/$@ .tar,name= docker.io/autonomy/$@ :$( TAG) \
--opt target = $@ \
2019-01-19 12:58:26 +03:00
$( COMMON_ARGS)
@docker load < build/$@ .tar
2019-02-19 19:41:41 +03:00
2019-08-09 06:45:13 +03:00
.PHONY : image -aws
image-aws :
2019-09-10 01:21:58 +03:00
@docker run --rm -v /dev:/dev -v $( PWD) /build:/out \
--privileged $( DOCKER_ARGS) \
autonomy/installer:$( TAG) \
install \
-n aws \
-r \
-p aws \
2019-09-10 15:19:28 +03:00
-u none \
-e console = tty1 \
-e console = ttyS0
2019-09-10 01:21:58 +03:00
@tar -C $( PWD) /build -czf $( PWD) /build/aws.tar.gz aws.raw
@rm -rf $( PWD) /build/aws.raw
2019-04-30 20:21:51 +03:00
2019-08-09 06:45:13 +03:00
.PHONY : image -azure
image-azure :
2019-07-27 11:09:50 +03:00
@docker run --rm -v /dev:/dev -v $( PWD) /build:/out \
--privileged $( DOCKER_ARGS) \
autonomy/installer:$( TAG) \
install \
2019-08-09 06:45:13 +03:00
-n azure \
2019-07-27 11:09:50 +03:00
-r \
-p azure \
-u none \
2019-09-10 15:19:28 +03:00
-e console = ttyS0,115200n8 \
-e earlyprintk = ttyS0,115200 \
2019-07-27 11:09:50 +03:00
-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 \
2019-08-09 06:45:13 +03:00
-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
2019-10-28 18:43:59 +03:00
.PHONY : image -digital -ocean
image-digital-ocean :
@docker run --rm -v /dev:/dev -v $( PWD) /build:/out \
--privileged $( DOCKER_ARGS) \
autonomy/installer:$( TAG) \
install \
-n digital-ocean \
-r \
-p digital-ocean \
-u none \
-e console = ttyS0
2019-11-03 21:29:14 +03:00
@gzip -f $( PWD) /build/digital-ocean.raw
2019-10-28 18:43:59 +03:00
2019-08-12 00:38:24 +03:00
.PHONY : image -gcp
image-gcp :
2019-08-17 07:26:08 +03:00
@docker run --rm -v /dev:/dev -v $( PWD) /build:/out \
--privileged $( DOCKER_ARGS) \
autonomy/installer:$( TAG) \
install \
-n disk \
-r \
2019-08-12 00:38:24 +03:00
-p gcp \
2019-09-10 15:19:28 +03:00
-u none \
-e console = ttyS0
2019-08-12 00:38:24 +03:00
@tar -C $( PWD) /build -czf $( PWD) /build/gcp.tar.gz disk.raw
2019-08-28 04:58:29 +03:00
@rm -rf $( PWD) /build/disk.raw
2019-08-09 06:45:13 +03:00
2019-09-13 23:10:47 +03:00
.PHONY : image -vmware
image-vmware :
@docker run --rm -v /dev:/dev -v $( PWD) /build:/out \
--privileged $( DOCKER_ARGS) \
autonomy/installer:$( TAG) \
install \
-r \
-p vmware \
-u guestinfo \
-e console = tty0 \
-e earlyprintk = ttyS0,115200
@docker run --rm -v /dev:/dev -v $( PWD) /build:/out \
--privileged $( DOCKER_ARGS) \
autonomy/installer:$( TAG) \
ova
2019-11-01 01:24:28 +03:00
@rm -rf $( PWD) /build/talos.raw
2019-09-13 23:10:47 +03:00
2019-09-10 01:21:58 +03:00
.PHONY : push -image -aws
push-image-aws :
2019-11-07 18:56:11 +03:00
@TAG= $( TAG) SHA = $( SHA) ./hack/test/aws-setup.sh
2019-09-10 01:21:58 +03:00
.PHONY : push -image -azure
push-image-azure :
@TAG= $( TAG) ./hack/test/azure-setup.sh
2019-08-12 00:38:24 +03:00
.PHONY : push -image -gcp
push-image-gcp :
2019-10-29 23:23:05 +03:00
@TAG= $( TAG) SHA = $( SHA) ./hack/test/gcp-setup.sh
2019-08-09 06:45:13 +03:00
2019-08-11 20:29:45 +03:00
.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
2019-04-05 07:34:58 +03:00
2019-08-09 06:45:13 +03:00
.PHONY : iso
iso :
@docker run --rm -i -v $( PWD) /build:/out autonomy/installer:$( TAG) iso
.PHONY : container
container : buildkitd
2019-04-24 04:52:31 +03:00
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
2019-04-05 07:34:58 +03:00
build \
2019-08-09 06:45:13 +03:00
--output type = docker,dest= build/$@ .tar,name= docker.io/autonomy/talos:$( TAG) \
2019-04-24 04:52:31 +03:00
--opt target = $@ \
2019-04-05 07:34:58 +03:00
$( COMMON_ARGS)
@docker load < build/$@ .tar
2019-02-19 19:41:41 +03:00
2019-06-22 09:05:17 +03:00
.PHONY : basic -integration
2019-11-06 15:46:19 +03:00
basic-integration :
2019-07-29 23:11:09 +03:00
@TAG= $( TAG) ./hack/test/$@ .sh
2019-04-28 22:06:03 +03:00
2019-08-09 06:45:13 +03:00
.PHONY : capi
capi :
2019-08-02 18:05:34 +03:00
@TAG= $( TAG) ./hack/test/$@ .sh
2019-08-09 06:45:13 +03:00
.PHONY : e 2e -integration
2019-06-22 09:05:17 +03:00
e2e-integration :
2019-10-29 23:23:05 +03:00
@TAG= $( TAG) SHA = $( SHA) ./hack/test/$@ .sh
2019-06-17 19:36:48 +03:00
2019-08-09 06:45:13 +03:00
.PHONY : unit -tests
unit-tests : buildkitd
2019-07-04 18:43:34 +03:00
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
build \
2019-07-06 09:20:24 +03:00
--opt target = $@ \
2019-07-18 23:05:26 +03:00
--output type = local,dest= ./ \
2019-07-23 17:17:16 +03:00
--opt build-arg:TESTPKGS= $( TESTPKGS) \
2019-08-07 01:08:27 +03:00
$( COMMON_ARGS)
2019-08-09 06:45:13 +03:00
.PHONY : unit -tests -race
unit-tests-race : buildkitd
2019-08-07 01:08:27 +03:00
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
build \
--opt target = $@ \
--opt build-arg:TESTPKGS= $( TESTPKGS) \
2019-07-04 18:43:34 +03:00
$( COMMON_ARGS)
2019-04-16 00:41:11 +03:00
2019-10-25 22:57:52 +03:00
.PHONY : integration -test
integration-test : buildkitd
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
build \
--output type = local,dest= bin \
--opt target = $@ \
$( COMMON_ARGS)
2019-09-12 00:32:07 +03:00
.PHONY : fmt
fmt :
2019-09-12 17:32:42 +03:00
@docker run --rm -it -v $( PWD) :/src -w /src golang:$( GO_VERSION) bash -c "export GO111MODULE=on; export GOPROXY=https://proxy.golang.org; cd /tmp && go mod init tmp && go get mvdan.cc/gofumpt/gofumports && cd - && gofumports -w -local github.com/talos-systems/talos ."
2019-09-12 00:32:07 +03:00
2019-04-19 05:31:43 +03:00
.PHONY : lint
2019-02-28 05:57:35 +03:00
lint : buildkitd
2019-04-24 04:52:31 +03:00
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
2019-02-15 07:32:00 +03:00
build \
2019-04-24 04:52:31 +03:00
--opt target = $@ \
2019-01-19 12:58:26 +03:00
$( COMMON_ARGS)
2019-08-28 00:45:59 +03:00
.PHONY : protolint
protolint : buildkitd
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
build \
--opt target = $@ \
$( COMMON_ARGS)
2019-08-17 11:51:40 +03:00
.PHONY : markdownlint
markdownlint : buildkitd
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
build \
--opt target = $@ \
$( COMMON_ARGS)
2019-07-19 17:54:03 +03:00
.PHONY : osctl -linux
2019-07-13 03:24:51 +03:00
osctl-linux : buildkitd
2019-04-24 04:52:31 +03:00
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
2019-02-15 07:32:00 +03:00
build \
2019-08-17 07:26:08 +03:00
--output type = local,dest= build \
2019-04-24 04:52:31 +03:00
--opt target = $@ \
2019-01-19 12:58:26 +03:00
$( COMMON_ARGS)
2019-07-13 03:24:51 +03:00
.PHONY : osctl -darwin
osctl-darwin : buildkitd
2019-04-24 04:52:31 +03:00
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
2019-02-15 07:32:00 +03:00
build \
2019-08-17 07:26:08 +03:00
--output type = local,dest= build \
2019-04-24 04:52:31 +03:00
--opt target = $@ \
2019-01-19 12:58:26 +03:00
$( COMMON_ARGS)
2019-07-16 18:09:35 +03:00
.PHONY : machined
machined : buildkitd images
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
build \
--opt target = $@ \
$( COMMON_ARGS)
2019-04-19 05:31:43 +03:00
.PHONY : osd
2019-04-04 09:07:49 +03:00
osd : buildkitd images
2019-04-24 04:52:31 +03:00
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
2019-02-15 07:32:00 +03:00
build \
2019-04-24 04:52:31 +03:00
--output type = docker,dest= images/$@ .tar,name= docker.io/autonomy/$@ :$( TAG) \
--opt target = $@ \
2019-01-19 12:58:26 +03:00
$( COMMON_ARGS)
2019-10-24 05:31:18 +03:00
.PHONY : apid
apid : buildkitd images
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
build \
--output type = docker,dest= images/$@ .tar,name= docker.io/autonomy/$@ :$( TAG) \
--opt target = $@ \
$( COMMON_ARGS)
2019-04-19 05:31:43 +03:00
.PHONY : trustd
2019-04-04 09:07:49 +03:00
trustd : buildkitd images
2019-04-24 04:52:31 +03:00
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
2019-02-15 07:32:00 +03:00
build \
2019-04-24 04:52:31 +03:00
--output type = docker,dest= images/$@ .tar,name= docker.io/autonomy/$@ :$( TAG) \
--opt target = $@ \
2019-01-19 12:58:26 +03:00
$( COMMON_ARGS)
2019-04-19 05:31:43 +03:00
.PHONY : ntpd
2019-04-04 09:07:49 +03:00
ntpd : buildkitd images
2019-04-24 04:52:31 +03:00
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
2019-03-24 01:58:13 +03:00
build \
2019-04-24 04:52:31 +03:00
--output type = docker,dest= images/$@ .tar,name= docker.io/autonomy/$@ :$( TAG) \
--opt target = $@ \
2019-03-24 01:58:13 +03:00
$( COMMON_ARGS)
2019-08-03 00:08:24 +03:00
.PHONY : networkd
networkd : buildkitd images
@$( BINDIR) /buildctl --addr $( BUILDKIT_HOST) \
build \
--output type = docker,dest= images/$@ .tar,name= docker.io/autonomy/$@ :$( TAG) \
--opt target = $@ \
$( COMMON_ARGS)
2019-04-19 05:31:43 +03:00
images :
2019-08-11 00:29:25 +03:00
@mkdir -p images
2019-01-16 05:46:41 +03:00
2019-04-12 09:40:30 +03:00
.PHONY : login
login :
@docker login --username " $( DOCKER_USERNAME) " --password " $( DOCKER_PASSWORD) "
2019-04-19 05:31:43 +03:00
.PHONY : push
2019-08-09 06:45:13 +03:00
push : gitmeta login
2019-04-12 09:40:30 +03:00
@docker push autonomy/installer:$( TAG)
@docker push autonomy/talos:$( TAG)
2019-08-17 23:21:20 +03:00
i f e q ( $( BRANCH ) , m a s t e r )
@docker tag autonomy/installer:$( TAG) autonomy/installer:latest
@docker tag autonomy/talos:$( TAG) autonomy/talos:latest
@docker push autonomy/installer:latest
2019-04-12 09:40:30 +03:00
@docker push autonomy/talos:latest
2019-08-17 23:21:20 +03:00
e n d i f
2019-04-12 09:40:30 +03:00
2019-04-19 05:31:43 +03:00
.PHONY : clean
2018-12-20 09:22:05 +03:00
clean :
2019-04-05 07:34:58 +03:00
@-rm -rf build images vendor