97 lines
3.0 KiB
Bash
Executable File
97 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ARCH=$(uname -m)
|
|
IMAGES="openwebrx-rtlsdr openwebrx-sdrplay openwebrx-hackrf openwebrx-airspy openwebrx-rtlsdr-soapy openwebrx-plutosdr openwebrx-limesdr openwebrx-soapyremote openwebrx-perseus openwebrx-fcdpp openwebrx-radioberry openwebrx-uhd openwebrx-redpitaya openwebrx-rtltcp openwebrx-runds openwebrx-hpsdr openwebrx-full openwebrx"
|
|
ALL_ARCHS="x86_64 armv7l aarch64"
|
|
TAG=${TAG:-"latest"}
|
|
ARCHTAG="$TAG-$ARCH"
|
|
|
|
usage () {
|
|
echo "Usage: ${0} [command]"
|
|
echo "Available commands:"
|
|
echo " help Show this usage information"
|
|
echo " build Build all docker images"
|
|
echo " push Push built docker images to the docker hub"
|
|
echo " manifest Compile the docker hub manifest (combines arm and x86 tags into one)"
|
|
echo " tag Tag a release"
|
|
}
|
|
|
|
build () {
|
|
# build the base images
|
|
docker build --pull -t openwebrx-base:${ARCHTAG} -f docker/Dockerfiles/Dockerfile-base .
|
|
docker build --build-arg ARCHTAG=${ARCHTAG} -t openwebrx-soapysdr-base:${ARCHTAG} -f docker/Dockerfiles/Dockerfile-soapysdr .
|
|
|
|
for image in ${IMAGES}; do
|
|
i=${image:10}
|
|
# "openwebrx" is a special image that gets tag-aliased later on
|
|
if [[ ! -z "${i}" ]] ; then
|
|
docker build --build-arg ARCHTAG=$ARCHTAG -t jketterl/${image}:${ARCHTAG} -f docker/Dockerfiles/Dockerfile-${i} .
|
|
fi
|
|
done
|
|
|
|
# tag openwebrx alias image
|
|
docker tag jketterl/openwebrx-full:${ARCHTAG} jketterl/openwebrx:${ARCHTAG}
|
|
}
|
|
|
|
push () {
|
|
for image in ${IMAGES}; do
|
|
docker push jketterl/$image:$ARCHTAG
|
|
done
|
|
}
|
|
|
|
manifest () {
|
|
for image in ${IMAGES}; do
|
|
# there's no docker manifest rm command, and the create --amend does not work, so we have to clean up manually
|
|
rm -rf "${HOME}/.docker/manifests/docker.io_jketterl_${image}-${TAG}"
|
|
IMAGE_LIST=""
|
|
for a in $ALL_ARCHS; do
|
|
IMAGE_LIST="$IMAGE_LIST jketterl/$image:$TAG-$a"
|
|
done
|
|
docker manifest create jketterl/$image:$TAG $IMAGE_LIST
|
|
docker manifest push --purge jketterl/$image:$TAG
|
|
done
|
|
}
|
|
|
|
tag () {
|
|
if [[ -x ${1:-} || -z ${2:-} ]] ; then
|
|
echo "Usage: ${0} tag [SRC_TAG] [TARGET_TAG]"
|
|
return
|
|
fi
|
|
|
|
local SRC_TAG=${1}
|
|
local TARGET_TAG=${2}
|
|
|
|
for image in ${IMAGES}; do
|
|
# there's no docker manifest rm command, and the create --amend does not work, so we have to clean up manually
|
|
rm -rf "${HOME}/.docker/manifests/docker.io_jketterl_${image}-${TARGET_TAG}"
|
|
IMAGE_LIST=""
|
|
for a in ${ALL_ARCHS}; do
|
|
docker pull jketterl/${image}:${SRC_TAG}-${a}
|
|
docker tag jketterl/${image}:${SRC_TAG}-${a} jketterl/${image}:${TARGET_TAG}-${a}
|
|
docker push jketterl/${image}:${TARGET_TAG}-${a}
|
|
IMAGE_LIST="${IMAGE_LIST} jketterl/${image}:${TARGET_TAG}-${a}"
|
|
done
|
|
docker manifest create jketterl/${image}:${TARGET_TAG} ${IMAGE_LIST}
|
|
docker manifest push --purge jketterl/${image}:${TARGET_TAG}
|
|
docker pull jketterl/${image}:${TARGET_TAG}
|
|
done
|
|
}
|
|
|
|
case ${1:-} in
|
|
build)
|
|
build
|
|
;;
|
|
push)
|
|
push
|
|
;;
|
|
manifest)
|
|
manifest
|
|
;;
|
|
tag)
|
|
tag ${@:2}
|
|
;;
|
|
*)
|
|
usage
|
|
;;
|
|
esac |