#!/bin/bash set -euo pipefail # Publishes bb64 to the Gitea Releases page for the repository. SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" ARCH=$(uname -m) PROJECT="bb64" OUTPUT="${SCRIPT_DIR}/output" ARCH_ALIAS="amd64" if [ "$ARCH" = "aarch64" ]; then ARCH_ALIAS="arm64" fi # Increment version VERSION_FILE="${SCRIPT_DIR}/src/version.hpp" if [ ! -f "${VERSION_FILE}" ]; then echo "${VERSION_FILE} not found!" >&2 exit 1 else v=$(cat "${VERSION_FILE}" | grep -o 'static const char \*VERSION = "[0-9.]*";' | cut -d'"' -f2) oldv=$v v=$((v+1)) echo "Incrementing version from $oldv to $v" >&2 echo "static const char *VERSION = \"$v\";" > "${VERSION_FILE}" fi TAG="v$v" # build release version export CMAKE_BUILD_TYPE="Release" docker build \ -t "${PROJECT}-build" \ -f "${SCRIPT_DIR}/Dockerfile.dropshell-build" \ --build-arg PROJECT="${PROJECT}" \ --build-arg CMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" \ --output "${OUTPUT}" \ "${SCRIPT_DIR}" [ -f "${OUTPUT}/${PROJECT}" ] || die "Build failed." cp "${OUTPUT}/${PROJECT}" "${OUTPUT}/${PROJECT}.${ARCH_ALIAS}" cp "${OUTPUT}/${PROJECT}" "${OUTPUT}/${PROJECT}.${ARCH}" # Find repo info from .git/config REPO_URL=$(git config --get remote.origin.url) if [[ ! $REPO_URL =~ gitea ]]; then echo "Remote origin is not a Gitea repository: $REPO_URL" >&2 exit 1 fi # Extract base URL, owner, and repo # Example: https://gitea.example.com/username/reponame.git BASE_URL=$(echo "$REPO_URL" | sed -E 's#(https?://[^/]+)/.*#\1#') OWNER=$(echo "$REPO_URL" | sed -E 's#.*/([^/]+)/[^/]+(\.git)?$#\1#') REPO=$(echo "$REPO_URL" | sed -E 's#.*/([^/]+)(\.git)?$#\1#') API_URL="$BASE_URL/api/v1/repos/$OWNER/$REPO" # Check for GITEA_TOKEN_DEPLOY or GITEA_TOKEN if [ -n "$GITEA_TOKEN_DEPLOY" ]; then TOKEN="$GITEA_TOKEN_DEPLOY" elif [ -n "$GITEA_TOKEN" ]; then TOKEN="$GITEA_TOKEN" else echo "GITEA_TOKEN_DEPLOY or GITEA_TOKEN environment variable not set!" >&2 exit 1 fi # Create release RELEASE_DATA=$(cat <&2 exit 1 fi # Upload binaries and install.sh for FILE in ${PROJECT}.${ARCH_ALIAS} ${PROJECT}.${ARCH} install.sh; do if [ -f "output/$FILE" ]; then filetoupload="output/$FILE" elif [ -f "$FILE" ]; then filetoupload="$FILE" else continue fi # Auto-detect content type ctype=$(file --mime-type -b "$filetoupload") curl -s -X POST "$API_URL/releases/$RELEASE_ID/assets?name=$FILE" \ -H "Content-Type: $ctype" \ -H "Authorization: token $TOKEN" \ --data-binary @"$filetoupload" echo "Uploaded $FILE to release $TAG as $ctype." done echo "Published bb64 version $v to $REPO_URL (tag $TAG) with binaries for $ARCH_ALIAS / $ARCH."