aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitlab-ci.yml127
-rw-r--r--Dockerfile.in2
-rw-r--r--README.md12
-rwxr-xr-xdabuild.in5
-rwxr-xr-xmake_images.sh78
5 files changed, 214 insertions, 10 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..a6099d3
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,127 @@
+image: alpinelinux/docker-cli
+
+stages:
+ - build
+ - push
+ - manifest
+ - cleanup
+
+# Build jobs
+
+.build:
+ stage: build
+ only:
+ changes:
+ - Dockerfile.in
+ - make_images.sh
+ - entrypoint.sh
+
+build-v3.8:
+ extends: .build
+ script:
+ - ./make_images.sh build v3.8
+
+build-v3.9:
+ extends: .build
+ script:
+ - ./make_images.sh build v3.9
+
+build-v3.10:
+ extends: .build
+ script:
+ - ./make_images.sh build v3.10
+
+build-v.3.11:
+ extends: .build
+ script:
+ - ./make_images.sh build v3.11
+
+build-edge:
+ extends: .build
+ script:
+ - ./make_images.sh build edge
+
+# Push jobs
+
+.push:
+ stage: push
+ only:
+ changes:
+ - Dockerfile.in
+ - make_images.sh
+ - entrypoint.sh
+
+push-v3.8:
+ extends: .push
+ script:
+ - ./make_images.sh push v3.8
+
+push-v3.9:
+ extends: .push
+ script:
+ - ./make_images.sh push v3.9
+
+push-v3.10:
+ extends: .push
+ script:
+ - ./make_images.sh push v3.10
+
+push-v.3.11:
+ extends: .push
+ script:
+ - ./make_images.sh push v3.11
+
+push-edge:
+ extends: .push
+ script:
+ - ./make_images.sh push edge
+
+# Manifest jobs
+
+.manifest:
+ stage: manifest
+ variables:
+ DOCKER_CLI_EXPERIMENTAL: enabled
+ only:
+ changes:
+ - Dockerfile.in
+ - make_images.sh
+ - entrypoint.sh
+
+manifest-v3.8:
+ extends: .manifest
+ script:
+ - ./make_images.sh manifest v3.8
+
+manifest-v3.9:
+ extends: .manifest
+ script:
+ - ./make_images.sh manifest v3.9
+
+manifest-v3.10:
+ extends: .manifest
+ script:
+ - ./make_images.sh manifest v3.10
+
+manifest-v3.11:
+ extends: .manifest
+ script:
+ - ./make_images.sh manifest v3.11
+
+manifest-edge:
+ extends: .manifest
+ script:
+ - ./make_images.sh manifest edge
+
+# cleanup images/layers
+
+cleanup:
+ stage: cleanup
+ script:
+ - docker system prune --force
+ only:
+ changes:
+ - Dockerfile.in
+ - make_images.sh
+ - entrypoint.sh
+
diff --git a/Dockerfile.in b/Dockerfile.in
index 4da02eb..1b0424f 100644
--- a/Dockerfile.in
+++ b/Dockerfile.in
@@ -1,4 +1,4 @@
-FROM alpine:%%ALPINE_TAG%%
+FROM %%ALPINE_IMG%%/alpine:%%ALPINE_TAG%%
MAINTAINER Richard Mortier <mort@cantab.net>
RUN rm /etc/apk/repositories && \
diff --git a/README.md b/README.md
index ee3d1a1..9765e57 100644
--- a/README.md
+++ b/README.md
@@ -20,15 +20,9 @@ When invoked, `dabuild` simply passes any flags through to `abuild` running in a
## Supported architectures
-Currently supported architectures are (as reported by `uname -m`):
-
- * `x86`
- * `x86_64`
- * `aarch64`
- * `armv6`
- * `armv7`
- * `armv7l`
- * `armv8`
+Currently supported architectures are:
+
+`aarch64`, `armhf`, `armv7`, `ppc64le`, `s390x`, `x86`, `x86_64`
## Configuration
diff --git a/dabuild.in b/dabuild.in
index 6eae27a..2fbcdc9 100755
--- a/dabuild.in
+++ b/dabuild.in
@@ -86,6 +86,11 @@ if [ -w "/var/cache/distfiles" ]; then
ABUILD_VOLUMES="$ABUILD_VOLUMES -v /var/cache/distfiles:/var/cache/distfiles"
fi
+# pass over gitconfig for abuild-keygen
+if [ -f "$HOME/.gitconfig" ]; then
+ ABUILD_VOLUMES="$ABUILD_VOLUMES -v $HOME/.gitconfig:/home/builder/.gitconfig"
+fi
+
if [ "$DABUILD_CACHE" = "true" ]; then
for v in %%ABUILD_VOLUMES%% ; do
vol=abuild-$ABUILD_VERSION-$DABUILD_ARCH-${v//\//_}
diff --git a/make_images.sh b/make_images.sh
new file mode 100755
index 0000000..4fe9212
--- /dev/null
+++ b/make_images.sh
@@ -0,0 +1,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
+