171 lines
5.6 KiB
Bash
Executable File
171 lines
5.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
export DH_PROJECT="openwebrxplus"
|
|
export DH_USERNAME="slechev"
|
|
|
|
export NIGHTLY_BUILD=$(date +%F)
|
|
|
|
ARCH=$(uname -m)
|
|
|
|
#IMAGES="${DH_PROJECT}-rtlsdr ${DH_PROJECT}-sdrplay ${DH_PROJECT}-hackrf ${DH_PROJECT}-airspy ${DH_PROJECT}-rtlsdr-soapy ${DH_PROJECT}-plutosdr ${DH_PROJECT}-limesdr ${DH_PROJECT}-soapyremote ${DH_PROJECT}-perseus ${DH_PROJECT}-fcdpp ${DH_PROJECT}-radioberry ${DH_PROJECT}-uhd ${DH_PROJECT}-rtltcp ${DH_PROJECT}-runds ${DH_PROJECT}-hpsdr ${DH_PROJECT}-bladerf ${DH_PROJECT}-full ${DH_PROJECT}"
|
|
IMAGES="${DH_PROJECT}-full ${DH_PROJECT}"
|
|
|
|
ALL_ARCHS="x86_64 armv7l aarch64"
|
|
TAG=${TAG:-"latest"}
|
|
ARCHTAG="${TAG}-${ARCH}"
|
|
MAKEFLAGS="${MAKEFLAGS:-"-j4"}"
|
|
|
|
usage () {
|
|
echo "Usage: ${0} [command]"
|
|
echo "Available commands:"
|
|
echo " help Show this usage information"
|
|
echo " buildn Build full docker nightly image"
|
|
echo " buildr Build full docker release image"
|
|
echo " pushn Push built docker nightly image to the docker hub"
|
|
echo " pushr Push built docker release image to the docker hub"
|
|
echo " manifest Compile the docker hub manifest (combines arm and x86 tags into one)"
|
|
echo " tag Tag a release"
|
|
}
|
|
|
|
buildn () {
|
|
# build the base images
|
|
echo -ne "\n\nBuilding the base image.\n\n"
|
|
time docker build --pull --build-arg MAKEFLAGS="$MAKEFLAGS" -t ${DH_PROJECT}-base:${ARCHTAG} -f docker/Dockerfiles/Dockerfile-base .
|
|
|
|
# AF: uncomment next 2 lines if you're building all images
|
|
#echo -ne "\n\nBuilding soapysdr image.\n\n"
|
|
#docker build --build-arg ARCHTAG=${ARCHTAG} --build-arg PROJECT=${DH_PROJECT} --build-arg MAKEFLAGS="$MAKEFLAGS" -t ${DH_PROJECT}-soapysdr-base:${ARCHTAG} -f docker/Dockerfiles/Dockerfile-soapysdr .
|
|
|
|
GIT_HASH=$(git rev-parse --short master)
|
|
for image in ${IMAGES}; do
|
|
i=$(echo ${image} | rev | cut -d- -f1 | rev)
|
|
# "openwebrx" is a special image that gets tag-aliased later on
|
|
if [[ ! -z "${i}" && "${i}" != "${DH_PROJECT}" ]] ; then
|
|
echo -ne "\n\nBuilding ${i} image.\n\n"
|
|
docker build --build-arg GIT_HASH=${GIT_HASH} --build-arg ARCHTAG=$ARCHTAG --build-arg PROJECT=${DH_PROJECT} --build-arg MAKEFLAGS="$MAKEFLAGS" -t ${DH_USERNAME}/${image}:${ARCHTAG} -f docker/Dockerfiles/Dockerfile-${i} .
|
|
fi
|
|
done
|
|
|
|
# tag openwebrx alias image
|
|
docker tag ${DH_USERNAME}/${DH_PROJECT}-full:${ARCHTAG} ${DH_USERNAME}/${DH_PROJECT}:${ARCHTAG}
|
|
docker tag ${DH_USERNAME}/${DH_PROJECT}-full:${ARCHTAG} ${DH_USERNAME}/${DH_PROJECT}-full
|
|
docker tag ${DH_USERNAME}/${DH_PROJECT}-full ${DH_USERNAME}/${DH_PROJECT}-nightly:${NIGHTLY_BUILD}
|
|
docker tag ${DH_USERNAME}/${DH_PROJECT}-full ${DH_USERNAME}/${DH_PROJECT}-nightly
|
|
}
|
|
|
|
pushn () {
|
|
#for image in ${IMAGES}; do
|
|
# docker push ${DH_USERNAME}/${image}:${ARCHTAG}
|
|
#done
|
|
docker push ${DH_USERNAME}/${DH_PROJECT}-nightly:${NIGHTLY_BUILD}
|
|
docker push ${DH_USERNAME}/${DH_PROJECT}-nightly
|
|
}
|
|
|
|
buildr () {
|
|
if [[ -z ${1:-} ]] ; then
|
|
echo "Usage: ${0} buildr [version]"
|
|
echo "NOTE: The version will be used for tagging."
|
|
echo "The image will be build from the current packages in the apt-repo."
|
|
echo; echo;
|
|
return
|
|
fi
|
|
|
|
echo -ne "\n\nBuilding release image: $1.\n\n"
|
|
docker build --pull --build-arg VERSION=$1 --build-arg MAKEFLAGS="$MAKEFLAGS" -t ${DH_USERNAME}/${DH_PROJECT}:${1} -f docker/deb_based/Dockerfile .
|
|
|
|
docker tag ${DH_USERNAME}/${DH_PROJECT}:${1} ${DH_USERNAME}/${DH_PROJECT}
|
|
}
|
|
|
|
pushr () {
|
|
if [[ -z ${1:-} ]] ; then
|
|
echo "Usage: ${0} pushr [version]"
|
|
echo; echo;
|
|
return
|
|
fi
|
|
docker push ${DH_USERNAME}/${DH_PROJECT}:${1}
|
|
docker push ${DH_USERNAME}/${DH_PROJECT}
|
|
}
|
|
|
|
|
|
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_${DH_USERNAME}_${image}-${TAG}"
|
|
IMAGE_LIST=""
|
|
for a in ${ALL_ARCHS}; do
|
|
IMAGE_LIST="${IMAGE_LIST} ${DH_USERNAME}/${image}:${TAG}-${a}"
|
|
done
|
|
docker manifest create ${DH_USERNAME}/${image}:${TAG} ${IMAGE_LIST}
|
|
docker manifest push --purge ${DH_USERNAME}/${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_${DH_USERNAME}_${image}-${TARGET_TAG}"
|
|
IMAGE_LIST=""
|
|
for a in ${ALL_ARCHS}; do
|
|
docker pull ${DH_USERNAME}/${image}:${SRC_TAG}-${a}
|
|
docker tag ${DH_USERNAME}/${image}:${SRC_TAG}-${a} ${DH_USERNAME}/${image}:${TARGET_TAG}-${a}
|
|
docker push ${DH_USERNAME}/${image}:${TARGET_TAG}-${a}
|
|
IMAGE_LIST="${IMAGE_LIST} ${DH_USERNAME}/${image}:${TARGET_TAG}-${a}"
|
|
done
|
|
docker manifest create ${DH_USERNAME}/${image}:${TARGET_TAG} ${IMAGE_LIST}
|
|
docker manifest push --purge ${DH_USERNAME}/${image}:${TARGET_TAG}
|
|
docker pull ${DH_USERNAME}/${image}:${TARGET_TAG}
|
|
done
|
|
}
|
|
|
|
dev () {
|
|
if [[ -z ${1:-} ]] ; then
|
|
echo "Usage: ${0} dev [ImageId]"; echo; echo;
|
|
docker image ls
|
|
return
|
|
fi
|
|
docker run --rm -it --entrypoint /bin/bash -p 8073:8073 --device /dev/bus/usb ${1}
|
|
}
|
|
|
|
run () {
|
|
docker run --rm -it -p 8073:8073 --device /dev/bus/usb openwebrxplus-full:latest-x86_64
|
|
}
|
|
|
|
case ${1:-} in
|
|
buildn)
|
|
buildn
|
|
;;
|
|
pushn)
|
|
pushn
|
|
;;
|
|
buildr)
|
|
buildr ${@:2}
|
|
;;
|
|
pushr)
|
|
pushr ${@:2}
|
|
;;
|
|
manifest)
|
|
manifest
|
|
;;
|
|
tag)
|
|
tag ${@:2}
|
|
;;
|
|
dev)
|
|
dev ${@:2}
|
|
;;
|
|
run)
|
|
run
|
|
;;
|
|
*)
|
|
usage
|
|
;;
|
|
esac
|