aboutsummaryrefslogtreecommitdiff
path: root/Makefile
blob: d84d9e268ee492866826bdd9ce376e440003a155 (plain) (blame)
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
LANGUAGETOOL_VERSION := 6.0
TRIVY_VERSION := 0.24.2

BUILDARG_VERSION := --build-arg VERSION=$(LANGUAGETOOL_VERSION)
IMAGENAME := ghcr.io/someone-stole-my-name/docker-languagetool
BUILDARG_PLATFORM := --platform linux/amd64,linux/arm64/v8
DOCKER_EXTRA_ARGS := 

ci-deps:
	apt-get -qq -y install \
		binfmt-support \
		ca-certificates \
		curl \
		git \
		gnupg \
		lsb-release \
		qemu-user-static \
		wget \
		jq

ci-deps-docker:
	curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && \
	echo "deb [arch=$(shell dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(shell lsb_release -cs) stable" |\
	tee /etc/apt/sources.list.d/docker.list > /dev/null && \
	cat /etc/apt/sources.list.d/docker.list && \
	apt-get update && \
	apt-get -qq -y install \
		docker-ce \
		docker-ce-cli \
		containerd.io

ci-deps-trivy:
	wget https://github.com/aquasecurity/trivy/releases/download/v$(TRIVY_VERSION)/trivy_$(TRIVY_VERSION)_Linux-64bit.deb && \
	dpkg -i trivy_$(TRIVY_VERSION)_Linux-64bit.deb

ci-setup-buildx:
	docker run --privileged --rm tonistiigi/binfmt --install all
	docker buildx create --name mybuilder
	docker buildx use mybuilder

ci-prepare: ci-deps ci-deps-docker ci-deps-trivy ci-setup-buildx

build: ci-prepare
	docker buildx build $(BUILDARG_VERSION) $(BUILDARG_PLATFORM) -t $(IMAGENAME):latest .
	docker buildx build $(BUILDARG_VERSION) --load -t $(IMAGENAME):latest .

push: ci-prepare
	docker buildx build $(BUILDARG_VERSION) $(BUILDARG_PLATFORM) -t $(IMAGENAME):latest . --push
	docker buildx build $(BUILDARG_VERSION) $(BUILDARG_PLATFORM) -t $(IMAGENAME):$(shell git describe --tags --abbrev=0) . --push

trivy:
	trivy i \
		--ignore-unfixed \
		--exit-code 1 \
		$(IMAGENAME):latest

test: build test-int

test-int-start:
	docker kill languagetool || true
	docker rm languagetool || true
	docker run --rm -d --name languagetool -p 8010:8010 $(IMAGENAME):latest

test-int-run: IP=$(subst ",,$(shell docker inspect languagetool | jq '.[0].NetworkSettings.IPAddress'))
test-int-run:
	timeout 60 sh -c 'until (curl -i $(IP):8010/v2/info | grep "200 OK") do sleep 1; done'
	curl \
		-X GET \
		--header 'Accept: application/json' \
		--fail \
		'http://$(IP):8010/v2/languages'
	curl \
		-X POST \
		--header 'Content-Type: application/x-www-form-urlencoded' \
		--header 'Accept: application/json' \
		--fail \
		-d 'text=hello%20woorld&language=en-US&motherTongue=de-DE&enabledOnly=false' \
		'http://$(IP):8010/v2/check'


test-int: test-int-start test-int-run

docker-%:
	docker run \
		--rm \
		--privileged \
		-v /var/run/docker.sock:/var/run/docker.sock \
		-v $(shell pwd):/data \
		-w /data $(DOCKER_EXTRA_ARGS) \
		debian:stable sh -c "apt-get update && apt-get install make && make $*"