-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbuild.sh
executable file
·159 lines (136 loc) · 4.4 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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#!/bin/bash
# RELEASES LIST
RELEASES=(
"3.10.6"
"3.10.7"
"3.10.8"
"3.10.9"
"3.11.7"
"3.11.8"
"3.11.9"
"3.11.10"
"3.11.11"
"3.12.4"
"3.12.5"
"3.12.6"
"3.12.7"
"3.14.0"
"edge"
)
LATEST_STABLE="$(curl -sL https://alpinelinux.org/downloads/ | sed -n 's:.*<strong>\(.*\)</strong>.*:\1:p' )"
EDGE_LATEST="3.14.0"
# ARCHITECTURE LIST
ARCH=(
"linux/386"
"linux/amd64"
"linux/arm/v6"
"linux/arm/v7"
"linux/arm64"
"linux/ppc64le"
)
# REMOVE UNSUPPORTED ARCH FOR RELEASE
# ie: <release name>=<architecture 1>,<architecture 2>,...<architecture n>
UNSUPPORTED=(
"3.5=linux/arm64,linux/ppc64le"
"3.6=linux/arm64"
"3.7=linux/arm64"
"3.8=linux/arm64"
)
checkSupport() {
# local var
local REL=$1
local _ARCH=("${ARCH[@]}")
# Search elements in unsupported list
for ((i = 0; i < ${#UNSUPPORTED[@]}; i++)); do
# Check if element is equal release
if [ "$REL" = "${UNSUPPORTED[$i]%%"="*}" ]; then
UNSUPPORT="${UNSUPPORTED[$i]#*"="}"
ARCH_REMOVE=(${UNSUPPORT/,/ })
# Remove from ARCH list
for item in "${ARCH_REMOVE[@]}"; do
_ARCH=("${_ARCH[@]/$item/}")
done
fi
done
echo "${_ARCH[@]}"
}
# S6-OVERLAY
S6_LATEST_VERSION="$(curl -s https://github.com/just-containers/s6-overlay/releases/latest | cut -d '/' -f 8 | cut -d '"' -f 1 | cut -d 'v' -f 2)"
S6_INSTALL_VERSION="${S6_VERSION:-$S6_LATEST_VERSION}"
echo -e "S6-OVERLAY VERSION: ${S6_INSTALL_VERSION} \n"
# DOCKER LOGIN
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USER" --password-stdin &> /dev/null
# Search release for build
for RELEASE in "${RELEASES[@]}"; do
_RELEASE=""
if [ "$RELEASE" != "edge" ]; then
_RELEASE=${RELEASE%.*}
else
_RELEASE=${RELEASE}
fi
# Check ARCH support
PLATFORM=($(checkSupport ${_RELEASE}))
echo "$_RELEASE supported architectures: ${PLATFORM[@]}"
# Init download of files for ARCH
for _PLATFORM in "${PLATFORM[@]}"; do
echo -e "\nDownload files from $_RELEASE FOR $_PLATFORM\n"
_ARCH=""
case "$_PLATFORM" in
linux/386) _ARCH="x86" ;;
linux/amd64) _ARCH="x86_64" ;;
linux/arm/v6) _ARCH="armhf" ;;
linux/arm/v7) _ARCH="armhf" ;;
linux/arm64) _ARCH="armv7" ;;
linux/ppc64le) _ARCH="ppc64le" ;;
esac
# SET ROOTFS DOWNLOAD URL
ROOTFS_URL="http://dl-cdn.alpinelinux.org/alpine/v${_RELEASE}/releases/${_ARCH}/alpine-minirootfs-${RELEASE}-${_ARCH}.tar.gz"
if [ "$RELEASE" = "edge" ]; then
ROOTFS_URL="http://dl-cdn.alpinelinux.org/alpine/${_RELEASE}/releases/${_ARCH}/alpine-minirootfs-${EDGE_LATEST}-${_ARCH}.tar.gz"
fi
# SET S6-OVERLAY DOWNLOAD URL
if [ "${_ARCH}" = "x86_64" ]; then
_ARCH="amd64"
fi
if [ "${_ARCH}" = "armv7" ]; then
_ARCH="arm"
fi
S6_URL="https://github.com/just-containers/s6-overlay/releases/download/v${S6_INSTALL_VERSION}/s6-overlay-${_ARCH}.tar.gz"
# Create dir for platform
mkdir -p "$_PLATFORM"
# DOWNLOAD ROOTFS AND S6-OVERLAY
wget -nv "${ROOTFS_URL}" -O "${_PLATFORM}/rootfs.tar.gz" # rootfs
wget -nv "${S6_URL}" -O "${_PLATFORM}/s6-overlay.tar.gz" # s6-overlay
done
# BUILD AND PUSH TO DOCKER
# IMAGE CONFIG AND ARGS
_NAME="${IMAGE_NAME:-$(git config --get remote.origin.url | sed 's/.*\/\([^ ]*\/[^.]*\).*/\1/')}"
_VERSION="$RELEASE"
_BUILD_DATE="$(date -u +'%Y-%m-%dT%H:%M:%SZ')"
_VCS_REF="$(git rev-parse --short HEAD)"
_PLATFORMS="$( echo ${PLATFORM[@]} | sed 's/ /,/g' )"
if [ "$RELEASE" = "$LATEST_STABLE" ]; then
docker buildx build \
--push \
--build-arg VERSION="${_VERSION}" \
--build-arg VCS_REF="${_VCS_REF}" \
--build-arg BUILD_DATE="${_BUILD_DATE}" \
--platform "${_PLATFORMS}" \
-t "${_NAME}:${RELEASE}" \
-t "${_NAME}:latest" \
.
else
docker buildx build \
--push \
--build-arg VERSION="${_VERSION}" \
--build-arg VCS_REF="${_VCS_REF}" \
--build-arg BUILD_DATE="${_BUILD_DATE}" \
--platform "${_PLATFORMS}" \
-t "${_NAME}:${RELEASE}" \
.
fi
# Remove Files
rm -rf linux
done
# Build Finish
echo -e "Finish!\n"