-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Makefile
177 lines (150 loc) · 5.91 KB
/
Makefile
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
.PHONY: ci-dependencies shellcheck bats install lint unit-tests test
NAME = dokku-update
EMAIL = [email protected]
MAINTAINER = dokku
MAINTAINER_NAME = Jose Diaz-Gonzalez
REPOSITORY = dokku-update
HARDWARE = $(shell uname -m)
SYSTEM_NAME = $(shell uname -s | tr '[:upper:]' '[:lower:]')
BASE_VERSION ?= 0.8.0
IMAGE_NAME ?= $(MAINTAINER)/$(REPOSITORY)
PACKAGECLOUD_REPOSITORY ?= dokku/dokku-betafish
ifeq ($(CI_BRANCH),release)
VERSION ?= $(BASE_VERSION)
DOCKER_IMAGE_VERSION = $(VERSION)
else
VERSION = $(shell echo "${BASE_VERSION}")build+$(shell git rev-parse --short HEAD)
DOCKER_IMAGE_VERSION = $(shell echo "${BASE_VERSION}")build-$(shell git rev-parse --short HEAD)
endif
version:
@sed -i.bak 's/DOKKU_UPDATE_VERSION=""/DOKKU_UPDATE_VERSION="$(VERSION)"/' dokku-update && rm dokku-update.bak
@echo "$(CI_BRANCH)"
@echo "$(VERSION)"
@./dokku-update version
define PACKAGE_DESCRIPTION
Updates Dokku & its dependencies, all enabled plugins and
rebuilds all Dokku apps. Optionally installs all other system
updates.
endef
export PACKAGE_DESCRIPTION
LIST = build release release-packagecloud validate
targets = $(addsuffix -in-docker, $(LIST))
.env.docker:
@rm -f .env.docker
@touch .env.docker
@echo "CI_BRANCH=$(CI_BRANCH)" >> .env.docker
@echo "GITHUB_ACCESS_TOKEN=$(GITHUB_ACCESS_TOKEN)" >> .env.docker
@echo "IMAGE_NAME=$(IMAGE_NAME)" >> .env.docker
@echo "PACKAGECLOUD_REPOSITORY=$(PACKAGECLOUD_REPOSITORY)" >> .env.docker
@echo "PACKAGECLOUD_TOKEN=$(PACKAGECLOUD_TOKEN)" >> .env.docker
@echo "VERSION=$(VERSION)" >> .env.docker
build: pre-build
@$(MAKE) build/linux/$(NAME)
@$(MAKE) build/deb/$(NAME)_$(VERSION)_all.deb
build-docker-image:
docker build --rm -q -t $(IMAGE_NAME):build .
$(targets): %-in-docker: .env.docker
docker run \
--env-file .env.docker \
--rm \
--volume /var/lib/docker:/var/lib/docker \
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
--volume ${PWD}:/src/github.com/$(MAINTAINER)/$(REPOSITORY) \
--workdir /src/github.com/$(MAINTAINER)/$(REPOSITORY) \
$(IMAGE_NAME):build make -e $(@:-in-docker=)
build/linux/$(NAME):
chmod +x dokku-update
mkdir -p build/linux
cp -f dokku-update build/linux/dokku-update
build/deb/$(NAME)_$(VERSION)_all.deb: build/linux/$(NAME)
chmod 644 LICENSE
export SOURCE_DATE_EPOCH=$(shell git log -1 --format=%ct) \
&& mkdir -p build/deb \
&& fpm \
--architecture all \
--category admin \
--description "$$PACKAGE_DESCRIPTION" \
--input-type dir \
--license 'MIT License' \
--maintainer "$(MAINTAINER_NAME) <$(EMAIL)>" \
--name $(NAME) \
--output-type deb \
--package build/deb/$(NAME)_$(VERSION)_all.deb \
--url "https://github.com/$(MAINTAINER)/$(REPOSITORY)" \
--vendor "" \
--version $(VERSION) \
--verbose \
build/linux/$(NAME)=/usr/bin/$(NAME) \
LICENSE=/usr/share/doc/$(NAME)/copyright
clean:
rm -rf build release validation
ci-setup:
docker version
rm -f ~/.gitconfig
bin/gh-release:
mkdir -p bin
curl -o bin/gh-release.tgz -sL https://github.com/progrium/gh-release/releases/download/v2.3.0/gh-release_2.3.0_$(SYSTEM_NAME)_$(HARDWARE).tgz
tar xf bin/gh-release.tgz -C bin
chmod +x bin/gh-release
bin/gh-release-body:
mkdir -p bin
curl -o bin/gh-release-body "https://raw.githubusercontent.com/dokku/gh-release-body/master/gh-release-body"
chmod +x bin/gh-release-body
release: bin/gh-release bin/gh-release-body
rm -rf release && mkdir release
tar -zcf release/$(NAME)_$(VERSION)_linux_$(HARDWARE).tgz -C build/linux $(NAME)
cp build/deb/$(NAME)_$(VERSION)_all.deb release/$(NAME)_$(VERSION)_all.deb
bin/gh-release create $(MAINTAINER)/$(REPOSITORY) $(VERSION) $(shell git rev-parse --abbrev-ref HEAD)
bin/gh-release-body $(MAINTAINER)/$(REPOSITORY) v$(VERSION)
release-packagecloud:
@$(MAKE) release-packagecloud-deb
release-packagecloud-deb: build/deb/$(NAME)_$(VERSION)_all.deb
package_cloud push $(PACKAGECLOUD_REPOSITORY)/ubuntu/focal build/deb/$(NAME)_$(VERSION)_all.deb
package_cloud push $(PACKAGECLOUD_REPOSITORY)/ubuntu/jammy build/deb/$(NAME)_$(VERSION)_all.deb
package_cloud push $(PACKAGECLOUD_REPOSITORY)/ubuntu/noble build/deb/$(NAME)_$(VERSION)_all.deb
package_cloud push $(PACKAGECLOUD_REPOSITORY)/debian/bullseye build/deb/$(NAME)_$(VERSION)_all.deb
package_cloud push $(PACKAGECLOUD_REPOSITORY)/debian/bookworm build/deb/$(NAME)_$(VERSION)_all.deb
package_cloud push $(PACKAGECLOUD_REPOSITORY)/raspbian/bullseye build/deb/$(NAME)_$(VERSION)_all.deb
validate: test
mkdir -p validation
lintian build/deb/$(NAME)_$(VERSION)_all.deb || true
dpkg-deb --info build/deb/$(NAME)_$(VERSION)_all.deb
dpkg -c build/deb/$(NAME)_$(VERSION)_all.deb
cd validation && ar -x ../build/deb/$(NAME)_$(VERSION)_all.deb
ls -lah build/deb validation
sha1sum build/deb/$(NAME)_$(VERSION)_all.deb
test: lint unit-tests
lint: shellcheck bats
@echo linting...
# SC2034: VAR appears unused - https://github.com/koalaman/shellcheck/wiki/SC2034
# desc is used to declare the description of the function
@$(QUIET) find . -not -path '*/\.*' | xargs file | egrep "shell|bash" | awk '{ print $$1 }' | sed 's/://g' | xargs shellcheck -e SC2034
unit-tests: /usr/local/bin/dokku-update
@echo running unit tests...
@mkdir -p test-results/bats
@$(QUIET) TERM=linux bats --report-formatter junit --timing -o test-results/bats tests/unit
pre-build:
git config --global --add safe.directory $(shell pwd)
git status
/usr/local/bin/dokku-update:
@echo installing dokku-update
cp ./dokku-update /usr/local/bin/dokku-update
chmod +x /usr/local/bin/dokku-update
shellcheck:
ifneq ($(shell shellcheck --version >/dev/null 2>&1 ; echo $$?),0)
ifeq ($(SYSTEM_NAME),darwin)
brew install shellcheck
else
sudo apt-get update -qq && sudo apt-get install -qq -y shellcheck
endif
endif
bats:
ifeq ($(SYSTEM_NAME),darwin)
ifneq ($(shell bats --version >/dev/null 2>&1 ; echo $$?),0)
brew install bats-core
endif
else
git clone https://github.com/bats-core/bats-core.git /tmp/bats
cd /tmp/bats && sudo ./install.sh /usr/local
rm -rf /tmp/bats
endif