restoredb/scripts/publish-gitea-package.sh
2026-06-23 11:42:16 -03:00

126 lines
2.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
GITEA_BASE_URL="${GITEA_BASE_URL:-https://gitea.solucaoti.net.br}"
GITEA_USER="${GITEA_USER:-rogeriolima}"
PACKAGE_OWNER="${PACKAGE_OWNER:-$GITEA_USER}"
PACKAGE_NAME="${PACKAGE_NAME:-restoredb}"
BINARY_NAME="${BINARY_NAME:-restoredb}"
BUILD=1
DRY_RUN=0
VERSION=""
usage() {
cat <<'EOF'
Publica o executavel release no Generic Package Registry do Gitea.
Uso:
GITEA_TOKEN=token scripts/publish-gitea-package.sh [opcoes]
Opcoes:
--version VERSION Versao do pacote. Padrao: versao do Cargo.toml.
--no-build Nao executa cargo build --release antes de empacotar.
--dry-run Mostra os comandos principais sem enviar o pacote.
-h, --help Mostra esta ajuda.
Variaveis:
GITEA_BASE_URL Padrao: https://gitea.solucaoti.net.br
GITEA_USER Padrao: rogeriolima
GITEA_TOKEN Token com permissao para publicar pacotes.
PACKAGE_OWNER Padrao: igual a GITEA_USER
PACKAGE_NAME Padrao: restoredb
BINARY_NAME Padrao: restoredb
EOF
}
while [[ $# -gt 0 ]]; do
case "$1" in
--version)
VERSION="${2:-}"
if [[ -z "$VERSION" ]]; then
echo "Erro: --version exige um valor." >&2
exit 2
fi
shift 2
;;
--no-build)
BUILD=0
shift
;;
--dry-run)
DRY_RUN=1
shift
;;
-h|--help)
usage
exit 0
;;
*)
echo "Erro: opcao desconhecida: $1" >&2
usage >&2
exit 2
;;
esac
done
require_cmd() {
if ! command -v "$1" >/dev/null 2>&1; then
echo "Erro: comando obrigatorio nao encontrado: $1" >&2
exit 1
fi
}
require_cmd cargo
require_cmd curl
require_cmd tar
require_cmd rustc
if [[ -z "$VERSION" ]]; then
VERSION="$(cargo metadata --no-deps --format-version 1 | sed -n 's/.*"version":"\([^"]*\)".*/\1/p' | head -n 1)"
fi
if [[ -z "$VERSION" ]]; then
echo "Erro: nao foi possivel descobrir a versao do Cargo.toml." >&2
exit 1
fi
if [[ "$DRY_RUN" -eq 0 && -z "${GITEA_TOKEN:-}" ]]; then
echo "Erro: defina GITEA_TOKEN com um token do Gitea para publicar." >&2
exit 1
fi
HOST_TRIPLE="$(rustc -vV | sed -n 's/^host: //p')"
DIST_DIR="dist"
PACKAGE_FILE="${BINARY_NAME}-${HOST_TRIPLE}.tar.gz"
PACKAGE_PATH="${DIST_DIR}/${PACKAGE_FILE}"
UPLOAD_URL="${GITEA_BASE_URL%/}/api/packages/${PACKAGE_OWNER}/generic/${PACKAGE_NAME}/${VERSION}/${PACKAGE_FILE}"
if [[ "$BUILD" -eq 1 ]]; then
echo "Compilando release..."
cargo build --release
fi
if [[ ! -x "target/release/${BINARY_NAME}" ]]; then
echo "Erro: binario nao encontrado ou nao executavel: target/release/${BINARY_NAME}" >&2
exit 1
fi
mkdir -p "$DIST_DIR"
tar -C target/release -czf "$PACKAGE_PATH" "$BINARY_NAME"
echo "Pacote: $PACKAGE_PATH"
echo "URL: $UPLOAD_URL"
if [[ "$DRY_RUN" -eq 1 ]]; then
echo "Dry-run: upload nao executado."
exit 0
fi
curl --fail --show-error \
-u "${GITEA_USER}:${GITEA_TOKEN}" \
--upload-file "$PACKAGE_PATH" \
"$UPLOAD_URL"
echo
echo "Publicado: $UPLOAD_URL"