Files
bal-server/make_release.sh

190 lines
4.0 KiB
Bash
Executable File

#!/bin/bash
#author: <your-name>
source lib.sh
usage() {
echo_w "./make_release <version> <message>"
}
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
SIGNER_KEY="svatantrya@bitcoin-after.life"
ASSET_SHA256="$ASSET_PATH.sha256"
ASSET_SIG="$ASSET_PATH.sig"
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"
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"
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")
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:
gpg --verify $assetname.tar.gz.sig $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"