#!/bin/bash #author: source lib.sh usage() { echo_w "./make_release " } if [ -n "$1" ]; then release=$1; else usage; exit; fi if [ -n "$2" ]; then message=$2; else # Create temporary file using mktemp TEMPFILE=$(mktemp) vi $TEMPFILE message=$(cat $TEMPFILE) rm $TEMPFILE fi echo_i $message # Load secrets from .env file (not committed to git) if [ -f .env ]; then export $(grep -v '^#' .env | xargs) fi TOKEN="${GITEA_API_TOKEN:-${TOKEN_GITEA}}" if [ -z "$TOKEN" ]; then echo_e "Error: GITEA_API_TOKEN (or TOKEN_GITEA) is not set in .env file." echo_e "Please create a .env file with: GITEA_API_TOKEN=your_token_here" exit 1 fi for cmd in gpg sha256sum jq; do if ! command -v "$cmd" >/dev/null 2>&1; then echo_e "Error: '$cmd' is required but not installed." exit 1 fi done OWNER="bitcoinafterlife" basename=$(basename $(pwd)) REPO=$basename TAG="v$release" binpath="target/release/$basename" release_name="$basename-$release" dest="releases/$release" arch=$(uname -m) platform="linux-gnu" destbin="$dest/$arch" destsrc="$dest/src" assetname="$release_name""_$arch""_$platform" asset_tar_gz="$assetname.tar.gz" ASSET_PATH="$destbin/$assetname.tar.gz" SIGNER_KEY="svatantrya@bitcoin-after.life" ASSET_SHA256="$ASSET_PATH.sha256" ASSET_SIG="$ASSET_PATH.sig" ASSET_ASC="$ASSET_PATH.asc" giteahost="https://bitcoin-after.life/gitea" url_releases="$giteahost/api/v1/repos/$OWNER/$REPO/releases" echo_i() { echo -e "\033[1m==> $1\033[0m" } echo_e() { echo -e "\033[31;1m$1\033[0m" } echo_s() { echo -e "\033[32;1m$1\033[0m" } echo_w() { echo -e "\033[33;1m$1\033[0m" } prepare_release(){ mkdir -p "$destbin/$assetname" if ! cargo build --release; then echo_w "error building release" exit 1 fi ls -l $binpath cp target/release/bal-server \ target/release/bal-pusher \ README.md \ "$destbin/$assetname" ( cd "$destbin" echo_w $ASSET_PATH echo "ls $(pwd)" ls echo "ls $(pwd)/$assetname" ls "$(pwd)/$assetname" ls $assetname tar -czf "$asset_tar_gz" "$assetname" sha256sum "$asset_tar_gz" > "$asset_tar_gz.sha256" if ! gpg --batch --yes --detach-sign --local-user "$SIGNER_KEY" "$asset_tar_gz"; then echo_e "error signing release tarball (binary)" exit 1 fi if ! gpg --batch --yes --detach-sign --armor --output "$asset_tar_gz.asc" --local-user "$SIGNER_KEY" "$asset_tar_gz"; then echo_e "error signing release tarball (ascii-armored)" exit 1 fi ) } push_tag() { git commit -am"release: $release_name" git push #git tag -a "$TAG" -m"release: $release_name" #git push origin --tags } # Configurazioni post_release() { if [ -z "$1" ]; then echo_e "no data to release" exit 1 else echo "data: $1" fi echo "token:$TOKEN" echo url_releases: $url_releases RELEASE="$(curl -s -X POST \ -H "accept: application/json" \ -H "Authorization: token $TOKEN" \ -H "Content-Type: application/json" \ -d "$1" \ $url_releases )" echo $RELEASE } add_asset_release() { if [ -z "$1" ]; then echo_e "error add_asset_release" exit 1 fi local assets=("$ASSET_PATH" "$ASSET_SHA256" "$ASSET_SIG" "$ASSET_ASC") for asset in "${assets[@]}"; do if [ ! -f "$asset" ]; then echo_e "missing asset: $asset" exit 1 fi echo "Uploading: $asset" ls -l "$asset" curl -X POST \ -H "accept: application/json" \ -H "Authorization: token $TOKEN" \ -H "Content-Type: multipart/form-data" \ -F "attachment=@$asset" \ "$url_releases/$1/assets" done } release_body=$(printf '%s' "Release: $release_name enjoy $message --- Verification Instructions: SHA256 Checksum: sha256sum -c $assetname.tar.gz.sha256 GPG Signature (binary): gpg --verify $assetname.tar.gz.sig $assetname.tar.gz GPG Signature (ASCII-armored): gpg --verify $assetname.tar.gz.asc $assetname.tar.gz Signed by Svātantrya (svatantrya@bitcoin-after.life)") release_data=$(jq -n -c \ --arg tag_name "$TAG" \ --arg name "$release_name" \ --arg body "$release_body" \ '{tag_name: $tag_name, name: $name, body: $body}') prepare_release echo_s "prepare release done" push_tag echo_s "push tag done" echo "$release_data" post_release "$release_data" echo_s "prepare release done" echo $RELEASE id_release= add_asset_release $(echo $RELEASE | jq .id) echo_s "done"