From c371a4f47800015e4d36f8f29766a472c864d9b2 Mon Sep 17 00:00:00 2001 From: svatantrya Date: Sun, 19 Jul 2026 19:53:41 -0400 Subject: [PATCH] fix: default features for cargo build/test, build each binary separately in release - Set default = ["server", "pusher"] so cargo build/test works without flags - Add required-features to each [[bin]] section - make_release.sh builds each binary with --no-default-features for optimal size --- Cargo.toml | 4 +- make_release.sh | 203 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 206 insertions(+), 1 deletion(-) create mode 100755 make_release.sh diff --git a/Cargo.toml b/Cargo.toml index b83e553..7772f8a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ edition = "2024" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [features] -default = ["server"] +default = ["server", "pusher"] server = ["dep:actix-web", "dep:actix-governor", "dep:actix-rt", "dep:chrono", "dep:hex-conservative"] pusher = ["dep:zmq", "dep:reqwest", "dep:byteorder", "dep:base64", "dep:ed25519-dalek"] @@ -50,7 +50,9 @@ panic = "abort" [[bin]] name = "bal-server" path = "src/bin/bal-server.rs" +required-features = ["server"] [[bin]] name = "bal-pusher" path = "src/bin/bal-pusher.rs" +required-features = ["pusher"] diff --git a/make_release.sh b/make_release.sh new file mode 100755 index 0000000..41a0d5c --- /dev/null +++ b/make_release.sh @@ -0,0 +1,203 @@ +#!/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 --no-default-features --features server --bin bal-server; then + echo_w "error building bal-server" + exit 1 + fi + if ! cargo build --release --no-default-features --features pusher --bin bal-pusher; then + echo_w "error building bal-pusher" + exit 1 + fi + ls -l target/release/bal-server target/release/bal-pusher + 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"