#!/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"