summaryrefslogtreecommitdiff
path: root/Makefile
blob: 029af88a464dc1a7b1a37e5985ba4e8bde795ce5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
DOCKER_USER:=lukeshu
DOCKER_ORGANIZATION=paradock
DOCKER_IMAGE:=base
DOCKER_TAG:=$(shell date -u +'%Y.%m.%d')

.DEFAULT_GOAL = docker-image

pacman.conf.%: /usr/share/pacman/defaults/pacman.conf.%
	sed -r "s|^.*Include\s*=\s*/etc/pacman.d/.*\.conf|#&|" < $< > $@

rootfs-$(DOCKER_TAG)-%.tar: pacman.conf.% packages exclude
	$(eval TMPDIR := $(shell mktemp -d))
	env -i pacstrap -C $(CURDIR)/pacman.conf.$* -c -d -G -M $(TMPDIR) --hookdir=$(TMPDIR)/etc/pacman.d/hooks $(shell cat packages)
	cp --recursive --preserve=timestamps --backup --suffix=.pacnew rootfs/* $(TMPDIR)/
	arch-chroot $(TMPDIR) locale-gen
	arch-chroot $(TMPDIR) pacman-key --init
	arch-chroot $(TMPDIR) pacman-key --populate archlinux
	tar --numeric-owner --xattrs --acls --exclude-from=exclude -C $(TMPDIR) -c . -f $@
	rm -rf $(TMPDIR)

Dockerfile: Dockerfile.in .var.DOCKER_TAG
	sed 's/@DOCKER_TAG@/$(DOCKER_TAG)/' < $< > $@

docker-image: rootfs-$(DOCKER_TAG)-x86_64.tar Dockerfile
	docker build -t $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) .
	docker tag $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE):$(DOCKER_TAG)

docker-image-test: docker-image
	# FIXME: /etc/mtab is hidden by docker so the stricter -Qkk fails
	docker run --rm $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) sh -c "/usr/bin/pacman -Sy && /usr/bin/pacman -Qqk"
	docker run --rm $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) sh -c "/usr/bin/pacman -Syu --noconfirm docker && docker -v"
	# Ensure that the image does not include a private key
	! docker run --rm $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) pacman-key --lsign-key pierre@archlinux.de
	docker run --rm $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) sh -c "/usr/bin/id -u http"
	docker run --rm $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) sh -c "/usr/bin/pacman -Syu --noconfirm grep && locale | grep -q UTF-8"

ci-test:
	docker run --rm --privileged --tmpfs=/tmp:exec --tmpfs=/run/shm -v /run/docker.sock:/run/docker.sock \
		-v $(PWD):/app -w /app $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) \
		sh -c 'pacman -Syu --noconfirm make devtools docker && make docker-image-test'

docker-push:
	docker login -u $(DOCKER_USER)
	docker push $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE)

.PHONY: docker-image docker-image-test ci-test docker-push

.PHONY: FORCE
.var.%: FORCE
	@echo '# $* = $($*)' > .tmp.$@.tmp
	@if cmp -s .tmp.$@.tmp $@; then rm -f .tmp.$@.tmp || true; else mv -f .tmp.$@.tmp $@; fi
-include $(wildcard .var.*)

.SECONDARY:
.DELETE_ON_ERROR: