-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.sh
executable file
·144 lines (109 loc) · 4.65 KB
/
build.sh
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
#!/bin/bash
# OfflineIMAP
# A container running OfflineIMAP, a open-source IMAP synchronization tool.
#
# Copyright (c) 2023 SGS Serious Gaming & Simulations GmbH
#
# This work is licensed under the terms of the MIT license.
# For a copy, see LICENSE file or <https://opensource.org/licenses/MIT>.
#
# SPDX-License-Identifier: MIT
# License-Filename: LICENSE
set -eu -o pipefail
export LC_ALL=C.UTF-8
[ -v CI_TOOLS ] && [ "$CI_TOOLS" == "SGSGermany" ] \
|| { echo "Invalid build environment: Environment variable 'CI_TOOLS' not set or invalid" >&2; exit 1; }
[ -v CI_TOOLS_PATH ] && [ -d "$CI_TOOLS_PATH" ] \
|| { echo "Invalid build environment: Environment variable 'CI_TOOLS_PATH' not set or invalid" >&2; exit 1; }
source "$CI_TOOLS_PATH/helper/common.sh.inc"
source "$CI_TOOLS_PATH/helper/container.sh.inc"
source "$CI_TOOLS_PATH/helper/container-alpine.sh.inc"
source "$CI_TOOLS_PATH/helper/git.sh.inc"
BUILD_DIR="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
source "$BUILD_DIR/container.env"
readarray -t -d' ' TAGS < <(printf '%s' "$TAGS")
echo + "CONTAINER=\"\$(buildah from $(quote "$BASE_IMAGE"))\"" >&2
CONTAINER="$(buildah from "$BASE_IMAGE")"
echo + "MOUNT=\"\$(buildah mount $(quote "$CONTAINER"))\"" >&2
MOUNT="$(buildah mount "$CONTAINER")"
echo + "rsync -v -rl --exclude .gitignore ./src/ …/" >&2
rsync -v -rl --exclude '.gitignore' "$BUILD_DIR/src/" "$MOUNT/"
pkg_install "$CONTAINER" --virtual .run-deps \
python3
pkg_install "$CONTAINER" --virtual .fetch-deps@community \
py3-pip
pkg_install "$CONTAINER" --virtual .build-deps \
python3-dev \
musl-dev \
gcc \
krb5-dev \
make
git_clone "$GIT_REPO" "$GIT_REF" \
"$MOUNT/usr/src/offlineimap" "…/usr/src/offlineimap"
echo + "HASH=\"\$(git -C …/usr/src/offlineimap rev-parse HEAD)\"" >&2
HASH="$(git -C "$MOUNT/usr/src/offlineimap" rev-parse HEAD)"
echo + "[ \"\$GIT_COMMIT\" == \"\$HASH\" ]" >&2
if [ "$GIT_COMMIT" != "$HASH" ]; then
echo "Failed to verify source code integrity of OfflineIMAP $VERSION:" \
"Expecting Git commit '$GIT_COMMIT', got '$HASH'" >&2
exit 1
fi
git_ungit "$MOUNT/usr/src/offlineimap" "…/usr/src/offlineimap"
cmd buildah config \
--env PYTHONUSERBASE="/usr/local" \
"$CONTAINER"
cmd buildah run "$CONTAINER" -- \
pip config set global.root-user-action ignore
cmd buildah run "$CONTAINER" -- \
pip config set global.break-system-packages true
cmd buildah run "$CONTAINER" -- \
pip install --user -r "/usr/src/offlineimap/requirements.txt"
cmd buildah run "$CONTAINER" -- \
pip install --user "/usr/src/offlineimap/"
echo + "cp …/usr/src/offlineimap/requirements.txt …/usr/share/offlineimap/requirements.txt" >&2
cp "$MOUNT/usr/src/offlineimap/requirements.txt" "$MOUNT/usr/share/offlineimap/requirements.txt"
echo + "rm -rf …/usr/src/offlineimap" >&2
rm -rf "$MOUNT/usr/src/offlineimap"
user_add "$CONTAINER" offlineimap 65536 "/var/lib/offlineimap"
cmd buildah run "$CONTAINER" -- \
chown offlineimap:offlineimap \
"/var/lib/offlineimap" \
"/var/cache/offlineimap" \
"/var/vmail"
cmd buildah run "$CONTAINER" -- \
/bin/sh -c "printf '%s=%s\n' \"\$@\" > /usr/share/offlineimap/version_info" -- \
VERSION "$VERSION" \
HASH "$HASH"
pkg_remove "$CONTAINER" \
.build-deps
pkg_remove "$CONTAINER" \
.fetch-deps
echo + "rm -rf …/root/.cache/pip" >&2
rm -rf "$MOUNT/root/.cache/pip"
cleanup "$CONTAINER"
cmd buildah config \
--env OFFLINEIMAP_VERSION="$VERSION" \
--env OFFLINEIMAP_HASH="$HASH" \
"$CONTAINER"
cmd buildah config \
--volume "/etc/offlineimap" \
--volume "/var/cache/offlineimap" \
--volume "/var/vmail" \
"$CONTAINER"
cmd buildah config \
--workingdir "/var/vmail" \
--entrypoint '[ "/entrypoint.sh" ]' \
--cmd '[ "crond" ]' \
"$CONTAINER"
cmd buildah config \
--annotation org.opencontainers.image.title="OfflineIMAP" \
--annotation org.opencontainers.image.description="A container running OfflineIMAP, a open-source IMAP synchronization tool." \
--annotation org.opencontainers.image.version="$VERSION" \
--annotation org.opencontainers.image.url="https://github.com/SGSGermany/offlineimap" \
--annotation org.opencontainers.image.authors="SGS Serious Gaming & Simulations GmbH" \
--annotation org.opencontainers.image.vendor="SGS Serious Gaming & Simulations GmbH" \
--annotation org.opencontainers.image.licenses="MIT" \
--annotation org.opencontainers.image.base.name="$BASE_IMAGE" \
--annotation org.opencontainers.image.base.digest="$(podman image inspect --format '{{.Digest}}' "$BASE_IMAGE")" \
"$CONTAINER"
con_commit "$CONTAINER" "$IMAGE" "${TAGS[@]}"