#!/bin/bash set -euo pipefail SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" echo "Publishing simple-object-server to gitea.jde.nz/public/simple-object-server:latest" PROJECT="simple-object-server" [[ -n $SOS_WRITE_TOKEN ]] || die "SOS_WRITE_TOKEN not specified" # FUNCTIONS function title() { echo "----------------------------------------" # Center the text local text="$1" local line_length=40 local text_length=${#text} local padding=$(( (line_length - text_length) / 2 )) printf "%*s%s%*s\n" $padding "" "$text" $padding "" echo "----------------------------------------" } function die() { title "error: $1" exit 1 } # Create buildx builder if it doesn't exist if ! docker buildx ls | grep -q "${PROJECT}-multiarch"; then docker buildx create --name ${PROJECT}-multiarch --use \ --driver-opt env.BUILDKIT_MAX_PARALLELISM=4 else docker buildx use ${PROJECT}-multiarch fi function build() { local PLATFORM="$1" # convert linux/amd64 to linux-amd64, windows/amd64 to windows-amd64, etc. local OSARCH="${PLATFORM//\//-}" title "Building ${PROJECT} for ${PLATFORM}" docker buildx build \ -t "gitea.jde.nz/public/${PROJECT}-build:latest" \ -f "${SCRIPT_DIR}/Dockerfile.dropshell-build" \ --build-arg PROJECT="${PROJECT}" \ --build-arg CMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" \ --output "${SCRIPT_DIR}/output/${OSARCH}" \ --platform "${PLATFORM}" \ --cache-from type=local,src=/tmp/.buildx-cache \ --cache-to type=local,dest=/tmp/.buildx-cache,mode=max \ "${SCRIPT_DIR}" mv "${SCRIPT_DIR}/output/${OSARCH}/${PROJECT}" "${SCRIPT_DIR}/output/${PROJECT}-${OSARCH}" rm -rf "${SCRIPT_DIR}/output/${OSARCH}" } CMAKE_BUILD_TYPE="Release" rm -rf "${SCRIPT_DIR}/output" mkdir -p "${SCRIPT_DIR}/output" mkdir -p /tmp/.buildx-cache build "linux/amd64" build "linux/arm64" [ -f "${SCRIPT_DIR}/output/${PROJECT}-linux-amd64" ] || die "${PROJECT}-linux-amd64 not found" [ -f "${SCRIPT_DIR}/output/${PROJECT}-linux-arm64" ] || die "${PROJECT}-linux-arm64 not found" # uplaod to getbin.xyz # # download the sos binary SOS="${SCRIPT_DIR}/temp/sos" mkdir -p "${SCRIPT_DIR}/temp" trap 'rm -rf "${SCRIPT_DIR}/temp"' EXIT curl -L -o "${SOS}" "https://getbin.xyz/sos" chmod +x "${SOS}" "${SOS}" upload "getbin.xyz" "${SCRIPT_DIR}/output/${PROJECT}-linux-amd64" "${PROJECT}:amd64" "${SOS}" upload "getbin.xyz" "${SCRIPT_DIR}/output/${PROJECT}-linux-arm64" "${PROJECT}:arm64" "${SOS}" upload "getbin.xyz" "${SCRIPT_DIR}/install.sh" "simple-object-server-install:latest"