blob: 4fe92124decb253a0f020f57ef6d938947516513 (
plain)
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
|
#!/bin/sh
set -eu
readonly NAMESPACE="${NAMESPACE:=alpinelinux}"
readonly PROJECT="${PROJECT:=docker-abuild}"
readonly ARCHES="${ARCHES:=x86 x86_64 armhf armv7 aarch64 ppc64le s390x}"
readonly TEMPLATE="Dockerfile.in"
readonly OPERATION="$1"
readonly RELEASE="$2"
die() {
echo "$1" >&2
exit 1
}
arch_to_image() {
case $1 in
armv7) echo arm32v7 ;;
aarch64) echo arm64v8 ;;
x86_64) echo amd64 ;;
armhf) echo arm32v6 ;;
x86) echo i386 ;;
ppc64le) echo ppc64le ;;
s390x) echo s390x ;;
*) die "Unknown arch detected: \"$1\""
esac
}
build() {
for arch in $ARCHES; do
[ "$RELEASE" = "v3.8" ] && [ "$arch" = "armv7" ] && continue
sed -e "s/%%ALPINE_IMG%%/$(arch_to_image $arch)/" \
-e "s/%%ALPINE_TAG%%/${RELEASE/v/}/" \
-e "s/%%ALPINE_REL%%/$RELEASE/" "$TEMPLATE" > Dockerfile
docker build --no-cache -t "$NAMESPACE/$PROJECT:${RELEASE/v/}-$arch" . || \
die "Failed to build docker-abuild:${RELEASE/v/}-$arch"
done
}
push() {
printf "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" \
--password-stdin || die "Failed to login to docker hub"
for arch in $ARCHES; do
[ "$RELEASE" = "v3.8" ] && [ "$arch" = "armv7" ] && continue
docker push "$NAMESPACE/$PROJECT:${RELEASE/v/}-$arch" || \
die "Failed to push docker-abuild:${RELEASE/v/}-$arch"
done
}
manifest() {
local images= arch=
printf "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" \
--password-stdin || die "Failed to login to docker hub"
for arch in $ARCHES; do
[ "$RELEASE" = "v3.8" ] && [ "$arch" = "armv7" ] && continue
images="$images $NAMESPACE/$PROJECT:${RELEASE/v/}-$arch"
done
docker manifest create --amend "$NAMESPACE/$PROJECT" $images || \
die "Failed to create manifest"
docker manifest push --purge "$NAMESPACE/$PROJECT" || \
die "Failed to push manifest"
}
[ "$RELEASE" ] || die "Second argument needs to be a alpine release"
case $OPERATION in
build) build ;;
push) push ;;
manifest) manifest ;;
*) die "First argument needs to be build|push|manifest" ;;
esac
|