refactor build scripts

* add a functions.sh file containing functions used by all three
  container types, ImageBuilder, SDK and rootfs.
* allow SDK branch tags for other branches than `master`. This allows
  testing of release SDK versions
* Fix handling of special snapshot versions like `21.02-SNAPSHOT`

Future commits will move `docker-download.sh` and `docker-build.sh` do
`functions.sh`.

Signed-off-by: Paul Spooren <mail@aparcar.org>
pull/79/head
Paul Spooren 2021-02-23 19:30:57 -10:00
parent 8fd1339b33
commit baf01edb31
5 changed files with 62 additions and 102 deletions

View File

@ -2,37 +2,37 @@
set -ex
DOCKERFILE="${DOCKERFILE:-Dockerfile}"
# Copy Dockerfile inside build context to support older Docker versions
# See https://github.com/docker/cli/pull/886
cp "$DOCKERFILE" ./build/
TMP_IMAGE_NAME=$(tr -dc '[:lower:]' < /dev/urandom | fold -w 32 | head -n 1)
docker build -t "$TMP_IMAGE_NAME" -f "./build/$DOCKERFILE" ./build
cp "$DOCKERFILE" ./build/Dockerfile
TMP_IMAGE_NAME=$(tr -dc '[:lower:]' </dev/urandom | fold -w 32 | head -n 1)
docker build -t "$TMP_IMAGE_NAME" -f "./build/Dockerfile" ./build
for IMAGE in $DOCKER_IMAGE; do
docker tag "$TMP_IMAGE_NAME" "$IMAGE:$TARGET-$VERSION"
if [ -n "$ARCH" ]; then
docker tag "$IMAGE:$TARGET-$VERSION" "$IMAGE:$ARCH-$VERSION"
fi
docker tag "$TMP_IMAGE_NAME" "$IMAGE:$ARCH-$VERSION"
docker tag "$TMP_IMAGE_NAME" "$IMAGE:$ARCH-$BRANCH"
if [ "$VERSION" == "snapshot" ]; then
docker tag "$IMAGE:$TARGET-$VERSION" "$IMAGE:$TARGET-$BRANCH"
if [ -n "$ARCH" ]; then
docker tag "$IMAGE:$TARGET-$VERSION" "$IMAGE:$ARCH"
fi
docker tag "$IMAGE:$TARGET-$VERSION" "$IMAGE:$TARGET"
if [ "$TARGET" == "x86-64" ]; then
docker tag "$IMAGE:$TARGET-$VERSION" "$IMAGE:$BRANCH"
docker tag "$IMAGE:$TARGET-$VERSION" "$IMAGE:latest"
fi
if [ "$VERSION" == "snapshot" ]; then
docker tag "$IMAGE:$ARCH-$VERSION" "$IMAGE:$ARCH"
fi
fi
if [ "$TARGET" == "x86-64" ]; then
docker tag "$IMAGE:$TARGET-$VERSION" "$IMAGE:$VERSION"
docker tag "$TMP_IMAGE_NAME" "$IMAGE:$VERSION"
docker tag "$TMP_IMAGE_NAME" "$IMAGE:$BRANCH"
if [ "$VERSION" == "snapshot" ]; then
docker tag "$TMP_IMAGE_NAME" "$IMAGE:latest"
fi
fi
for TARGET_TAG in $TARGETS; do
TARGET_TAG=$(echo "$TARGET_TAG" | tr '/' '-')
docker tag "$TMP_IMAGE_NAME" "$IMAGE:$TARGET_TAG-$VERSION"
done
done
docker rmi "$TMP_IMAGE_NAME"

View File

@ -2,24 +2,12 @@
set -ex
TARGET=$(echo "$CI_JOB_NAME" | cut -d _ -f 2-)
export TARGET="${TARGET:-x86-64}"
export VERSION="${VERSION:-snapshot}"
. ./functions.sh
export DOCKER_IMAGE="${DOCKER_IMAGE:-openwrt-imagebuilder}"
export DOWNLOAD_FILE="openwrt-imagebuilder.*x86_64.tar.xz"
if [ "$VERSION" = "snapshot" ]; then
export BRANCH="master"
else
export BRANCH="openwrt-${VERSION%.*}"
fi
if [ "$VERSION" == "snapshot" ]; then
DOWNLOAD_PATH="snapshots/targets/$(echo "$TARGET" | tr '-' '/')"
else
DOWNLOAD_PATH="releases/$VERSION/targets/$(echo "$TARGET" | tr '-' '/')"
fi
export DOWNLOAD_PATH
export_variables
./docker-download.sh || exit 1
./docker-build.sh || exit 1

View File

@ -2,25 +2,13 @@
set -ex
TARGET=$(echo "$CI_JOB_NAME" | cut -d _ -f 2-)
export TARGET="${TARGET:-x86-64}"
export VERSION="${VERSION:-snapshot}"
. ./functions.sh
export DOCKER_IMAGE="${DOCKER_IMAGE:-openwrt-rootfs}"
export DOWNLOAD_FILE="openwrt-.*-rootfs.tar.gz"
export DOCKERFILE="Dockerfile.rootfs"
if [ "$VERSION" = "snapshot" ]; then
export BRANCH="master"
else
export BRANCH="openwrt-${VERSION%.*}"
fi
if [ "$VERSION" = "snapshot" ]; then
DOWNLOAD_PATH="snapshots/targets/$(echo "$TARGET" | tr '-' '/')"
else
DOWNLOAD_PATH="releases/$VERSION/targets/$(echo "$TARGET" | tr '-' '/')"
fi
export DOWNLOAD_PATH
export_variables
./docker-download.sh || exit 1

View File

@ -2,64 +2,18 @@
set -ex
ARCH=$(echo "$CI_JOB_NAME" | cut -d _ -f 2-)
# take the first supported target from TARGETS list
# shellcheck disable=SC2153
TARGET=$(echo "$TARGETS" | cut -d ' ' -f 1)
export TARGET="${TARGET:-x86-64}"
export ARCH="${ARCH:-x86_64}"
export VERSION="${VERSION:-snapshot}"
. ./functions.sh
export DOCKER_IMAGE="${DOCKER_IMAGE:-openwrt-sdk}"
export DOWNLOAD_FILE="openwrt-sdk-.*.Linux-x86_64.tar.xz"
# take the first supported target from TARGETS list
# shellcheck disable=SC2153,SC2034
TARGET=$(echo "$TARGETS" | cut -d ' ' -f 1)
if [ "$VERSION" = "snapshot" ]; then
export BRANCH="master"
else
export BRANCH="openwrt-${VERSION%.*}"
fi
if [ "$VERSION" == "snapshot" ]; then
DOWNLOAD_PATH="snapshots/targets/$(echo "$TARGET" | tr '-' '/')"
else
DOWNLOAD_PATH="releases/$VERSION/targets/$(echo "$TARGET" | tr '-' '/')"
fi
export DOWNLOAD_PATH
export_variables
./docker-download.sh || exit 1
echo "Using SDK from revision $(sed -ne 's/REVISION:=//p' ./build/include/version.mk)"
DOCKERFILE="${DOCKERFILE:-Dockerfile}"
# Copy Dockerfile inside build context to support older Docker versions
# See https://github.com/docker/cli/pull/886
cp "$DOCKERFILE" ./build/
TMP_IMAGE_NAME=$(tr -dc '[:lower:]' < /dev/urandom | fold -w 32 | head -n 1)
docker build -t "$TMP_IMAGE_NAME" -f "./build/$DOCKERFILE" ./build
for IMAGE in $DOCKER_IMAGE; do
docker tag "$TMP_IMAGE_NAME" "$IMAGE:$ARCH-$VERSION"
if [ "$VERSION" == "snapshot" ]; then
docker tag "$IMAGE:$ARCH-$VERSION" "$IMAGE:$ARCH-$BRANCH"
docker tag "$IMAGE:$ARCH-$VERSION" "$IMAGE:$ARCH"
if [ "$ARCH" == "x86_64" ]; then
docker tag "$IMAGE:$ARCH-$VERSION" "$IMAGE:$BRANCH"
docker tag "$IMAGE:$ARCH-$VERSION" "$IMAGE:latest"
fi
fi
if [ "$ARCH" == "x86_64" ]; then
docker tag "$IMAGE:$ARCH-$VERSION" "$IMAGE:$VERSION"
fi
for TARGET_TAG in $TARGETS; do
TARGET_TAG=$(echo "$TARGET_TAG" | tr '/' '-')
docker tag "$IMAGE:$ARCH-$VERSION" "$IMAGE:$TARGET_TAG-$VERSION"
done
done
docker rmi "$TMP_IMAGE_NAME"
rm -rf ./build
./docker-build.sh || exit 1

30
functions.sh 100644
View File

@ -0,0 +1,30 @@
#!/bin/sh
set -ex
export_variables() {
ARCH=$(echo "$CI_JOB_NAME" | cut -d _ -f 2-)
export TARGET="${TARGET:-x86-64}"
export ARCH="${ARCH:-x86_64}"
export VERSION="${VERSION:-snapshot}"
export DOCKERFILE="${DOCKERFILE:-Dockerfile}"
case "$VERSION" in
snapshot)
export BRANCH="master"
;;
*-SNAPSHOT)
export BRANCH="openwrt-${VERSION%-*}"
;;
*)
export BRANCH="openwrt-${VERSION%.*}"
;;
esac
if [ "$VERSION" = "snapshot" ]; then
DOWNLOAD_PATH="snapshots/targets/$(echo "$TARGET" | tr '-' '/')"
else
DOWNLOAD_PATH="releases/$VERSION/targets/$(echo "$TARGET" | tr '-' '/')"
fi
export DOWNLOAD_PATH
}