forked from bitcoinafterlife/bal-server
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
This commit is contained in:
@@ -5,7 +5,7 @@ edition = "2024"
|
|||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
[features]
|
[features]
|
||||||
default = ["server"]
|
default = ["server", "pusher"]
|
||||||
server = ["dep:actix-web", "dep:actix-governor", "dep:actix-rt", "dep:chrono", "dep:hex-conservative"]
|
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"]
|
pusher = ["dep:zmq", "dep:reqwest", "dep:byteorder", "dep:base64", "dep:ed25519-dalek"]
|
||||||
|
|
||||||
@@ -50,7 +50,9 @@ panic = "abort"
|
|||||||
[[bin]]
|
[[bin]]
|
||||||
name = "bal-server"
|
name = "bal-server"
|
||||||
path = "src/bin/bal-server.rs"
|
path = "src/bin/bal-server.rs"
|
||||||
|
required-features = ["server"]
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "bal-pusher"
|
name = "bal-pusher"
|
||||||
path = "src/bin/bal-pusher.rs"
|
path = "src/bin/bal-pusher.rs"
|
||||||
|
required-features = ["pusher"]
|
||||||
|
|||||||
203
make_release.sh
Executable file
203
make_release.sh
Executable file
@@ -0,0 +1,203 @@
|
|||||||
|
#!/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
|
||||||
|
|
||||||
|
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"
|
||||||
Reference in New Issue
Block a user