-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdev
executable file
·158 lines (139 loc) · 3.9 KB
/
dev
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
#!/bin/sh
main() {
cd "$(dirname "$0")" || exit
setDefaults
[ $# -eq 0 ] && set -- help
case "$1" in
all-test)
shift
buildDocker
DOCKER_COMMAND="./gradlew --info --no-daemon clean integrationTest test"
runDocker "$@"
;;
docker)
shift
buildDocker "$@"
;;
help)
shift
help "$@"
;;
integration-test)
shift
buildDocker
DOCKER_COMMAND="./gradlew --info --no-daemon clean integrationTest"
runDocker "$@"
;;
lint)
shift
lint "$@"
;;
lint-commits)
shift
buildDocker
DOCKER_COMMAND="sh -c"
if [ -n "$1" ]; then
START_COMMIT=$1
shift
else
START_COMMIT="$(git merge-base main "$(git branch --show-current)")"
fi
warnIfIgnoredArguments "$@"
runDocker "npm ci && npx commitlint --from $START_COMMIT --to HEAD --verbose"
;;
sh)
shift
runShell "$@"
;;
test)
shift
buildDocker
DOCKER_COMMAND="./gradlew --info --no-daemon clean test"
runDocker "$@"
;;
*)
echo "Error: unknown command $1"
help
exit 1
esac
}
buildDocker() {
PUSH_IMAGE=
while [ $# -gt 0 ]; do
case "$1" in
--push)
shift
PUSH_IMAGE=true
;;
*)
echo "Error: unknown option for docker command: < $1 >"
help
exit 1
;;
esac
done
docker build --rm --tag "$IMAGE_NAME":latest \
--build-arg UID="$(id -u)" \
--build-arg GID="$(id -g)" \
--build-arg BUILD_DATE="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \
--build-arg IMAGE_NAME="$IMAGE_NAME" \
--build-arg VCS_BRANCH="$VCS_BRANCH" \
--build-arg VCS_SHA="$VCS_SHA" \
--build-arg VERSION="$VERSION" \
.
[ -n "$VERSION" ] && docker image tag "$IMAGE_NAME":latest "$IMAGE_NAME:$VERSION"
docker image prune --force --filter "label=org.opencontainers.image.title=$IMAGE_NAME"
if [ "$PUSH_IMAGE" = "true" ]; then
docker image push --all-tags "$IMAGE_NAME"
fi
}
help() {
warnIfIgnoredArguments "$@"
awk '$0 == "<!-- begin of help -->", $0 == "<!-- end of help -->"' README.md \
| grep -vF '<!--'
}
lint() {
warnIfIgnoredArguments "$@"
docker run --rm --env VALIDATE_ALL_CODEBASE=true \
--volume "$(pwd):/tmp/lint" \
oxsecurity/megalinter-python:v7
}
runDocker() {
# shellcheck disable=SC2086
docker run --rm $DOCKER_OPTIONS \
--volume "$PWD:/app" \
"$IMAGE_NAME" \
$DOCKER_COMMAND "$@"
if [ "$CI" != true ] && [ $# = 0 ]; then
echo "Tests execution reports:"
find build/reports/tests -name index.html -exec echo "file://$(pwd)/{}" \;
fi
}
runShell() {
warnIfIgnoredArguments "$@"
DOCKER_COMMAND="/bin/sh"
buildDocker
runDocker
}
setDefaults() {
IMAGE_NAME=turbobasic/jenkins-library
DOCKER_OPTIONS=
DOCKER_COMMAND="./gradlew --info --no-daemon clean integrationTest test"
VCS_BRANCH=$(git branch --show-current)
[ -z "$VCS_BRANCH" ] && VCS_BRANCH="main"
VCS_DIRTY=$(git diff --quiet || echo "-dirty")
VCS_SHA="$(git rev-parse HEAD)$VCS_DIRTY"
VERSION="$(git describe --tags --dirty 2>/dev/null || true)"
if [ "$CI" != true ]; then
DOCKER_OPTIONS="--interactive --tty"
fi
true
}
warnIfIgnoredArguments() {
[ $# -gt 0 ] && echo "Warning: command arguments < $* > are ignored"
true
}
# Start body of script
set -o errexit
[ "$CI" = "true" ] && set -o xtrace
main "$@"