-
-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathMakefile
More file actions
136 lines (115 loc) · 4.69 KB
/
Copy pathMakefile
File metadata and controls
136 lines (115 loc) · 4.69 KB
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
HARDWARE = $(shell uname -m)
SYSTEM_NAME = $(shell uname -s | tr '[:upper:]' '[:lower:]')
ARCH = $(shell dpkg --print-architecture)
SHFMT_VERSION = 3.0.2
XUNIT_TO_GITHUB_VERSION = 0.3.0
XUNIT_READER_VERSION = 0.1.0
PLUGIN_COMMAND_PREFIX = meilisearch
DOKKU_DATASTORE_VERSION = $(shell sed -n 's/^export DOKKU_DATASTORE_VERSION=.*:-\(.*\)}"$$/\1/p' config)
ifeq ($(HARDWARE),aarch64)
DOKKU_DATASTORE_ARCH = arm64
else ifeq ($(HARDWARE),arm64)
DOKKU_DATASTORE_ARCH = arm64
else
DOKKU_DATASTORE_ARCH = amd64
endif
# the readme is generated by the same binary the plugin runs, which is already
# installed on a host running dokku and is fetched into tmp everywhere else
INSTALLED_DOKKU_DATASTORE = $(wildcard /var/lib/dokku/data/$(PLUGIN_COMMAND_PREFIX)/dokku-datastore)
ifeq ($(INSTALLED_DOKKU_DATASTORE),)
DOKKU_DATASTORE = tmp/dokku-datastore
else
DOKKU_DATASTORE = $(INSTALLED_DOKKU_DATASTORE)
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
shellcheck:
ifneq ($(shell shellcheck --version >/dev/null 2>&1 ; echo $$?),0)
ifeq ($(SYSTEM_NAME),darwin)
brew install shellcheck
else
ifeq ($(ARCH),arm64)
sudo add-apt-repository 'deb http://ports.ubuntu.com/ubuntu-ports jammy-backports main restricted universe multiverse'
else
sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu jammy-backports main restricted universe multiverse'
endif
sudo rm -rf /var/lib/apt/lists/* && sudo apt-get clean
sudo apt-get update -qq && sudo apt-get install -qq -y shellcheck
endif
endif
shfmt:
ifneq ($(shell shfmt --version >/dev/null 2>&1 ; echo $$?),0)
ifeq ($(shfmt),Darwin)
brew install shfmt
else
wget -qO /tmp/shfmt https://github.com/mvdan/sh/releases/download/v$(SHFMT_VERSION)/shfmt_v$(SHFMT_VERSION)_linux_amd64
chmod +x /tmp/shfmt
sudo mv /tmp/shfmt /usr/local/bin/shfmt
endif
endif
readlink:
ifeq ($(shell uname),Darwin)
ifeq ($(shell greadlink > /dev/null 2>&1 ; echo $$?),127)
brew install coreutils
endif
ln -nfs `which greadlink` tests/bin/readlink
endif
ci-dependencies: shellcheck bats readlink
lint-setup:
@mkdir -p tmp/test-results/shellcheck tmp/shellcheck
@find . -not -path '*/\.*' -type f | xargs file | grep text | awk -F ':' '{ print $$1 }' | xargs head -n1 | egrep -B1 "bash" | grep "==>" | awk '{ print $$2 }' > tmp/shellcheck/test-files
@cat tests/shellcheck-exclude | sed -n -e '/^# SC/p' | cut -d' ' -f2 | paste -d, -s - > tmp/shellcheck/exclude
lint: lint-setup
# these are disabled due to their expansive existence in the codebase. we should clean it up though
@cat tests/shellcheck-exclude | sed -n -e '/^# SC/p'
@echo linting...
@cat tmp/shellcheck/test-files | xargs shellcheck -e $(shell cat tmp/shellcheck/exclude) | tests/shellcheck-to-junit --output tmp/test-results/shellcheck/results.xml --files tmp/shellcheck/test-files --exclude $(shell cat tmp/shellcheck/exclude)
unit-tests:
@echo running unit tests...
@mkdir -p tmp/test-results/bats
@cd tests && echo "executing tests: $(shell cd tests ; ls *.bats | xargs)"
cd tests && bats --report-formatter junit --timing -o ../tmp/test-results/bats *.bats
tmp/dokku-datastore:
mkdir -p tmp
curl -o tmp/dokku-datastore -sL --fail https://github.com/dokku/dokku-datastore/releases/download/$(DOKKU_DATASTORE_VERSION)/dokku-datastore-$(SYSTEM_NAME)-$(DOKKU_DATASTORE_ARCH)
chmod +x tmp/dokku-datastore
tmp/xunit-reader:
mkdir -p tmp
curl -o tmp/xunit-reader.tgz -sL https://github.com/josegonzalez/go-xunit-reader/releases/download/v$(XUNIT_READER_VERSION)/xunit-reader_$(XUNIT_READER_VERSION)_$(SYSTEM_NAME)_$(HARDWARE).tgz
tar xf tmp/xunit-reader.tgz -C tmp
chmod +x tmp/xunit-reader
setup:
bash tests/setup.sh
$(MAKE) ci-dependencies
test: lint unit-tests
report: tmp/xunit-reader
tmp/xunit-reader -p 'tmp/test-results/bats/*.xml'
tmp/xunit-reader -p 'tmp/test-results/shellcheck/*.xml'
.PHONY: clean
clean:
rm -f README.md
rm -rf datastore
.PHONY: generate
generate: clean datastore README.md
# the definitions this plugin ships, written from the binary that runs them. They
# are generated output like the readme, so CI fails if what is committed differs.
.PHONY: datastore
datastore: $(DOKKU_DATASTORE)
$(DOKKU_DATASTORE) generate --plugin-dir . $(PLUGIN_COMMAND_PREFIX)
# the version pinned in config, for anything that needs to read it back. Reading
# it here rather than repeating the expression keeps one definition of where the
# pin lives.
.PHONY: datastore-version
datastore-version:
@echo $(DOKKU_DATASTORE_VERSION)
.PHONY: README.md
README.md: $(DOKKU_DATASTORE)
$(DOKKU_DATASTORE) readme $(PLUGIN_COMMAND_PREFIX) > README.md