#!/bin/bash # Commit-only — commita e envia (push) o branch atual do repositório. # Não mexe em produção. # # Usage: # ./commit.sh # mensagem genérica # ./commit.sh "sua mensagem" # mensagem customizada set -euo pipefail DIR="$(cd "$(dirname "$0")" && pwd)" source "$DIR/lib/common.sh" require_project_dir cd "$PROJECT_DIR" BRANCH="$(git rev-parse --abbrev-ref HEAD)" info "Verificando alterações locais em $PROJECT_DIR (branch: $BRANCH)..." if [ -z "$(git status --porcelain)" ]; then ok "Nada para commitar." exit 0 fi # Mensagem do commit: prioridade # 1) argumento explícito do script # 2) conteúdo de code/commit-desc.txt (a IA mantém o resumo do que foi feito) # 3) mensagem genérica COMMIT_MSG="${1:-}" USED_DESC_FILE=false if [ -z "$COMMIT_MSG" ] && [ -s "$PROJECT_DIR/commit-desc.txt" ]; then COMMIT_MSG="$(cat "$PROJECT_DIR/commit-desc.txt")" USED_DESC_FILE=true fi COMMIT_MSG="${COMMIT_MSG:-chore: update}" info "Commitando alterações..." git add -A # Se a mensagem tiver múltiplas linhas, usa a primeira como título e o resto # como corpo (git commit -m -m). SUBJECT="$(printf '%s\n' "$COMMIT_MSG" | awk 'NF{print; exit}')" BODY="$(printf '%s\n' "$COMMIT_MSG" | sed '1d' | awk 'NF' | tr '\n' ' ' | sed 's/ *$//')" if [ -n "$BODY" ]; then git commit -m "$SUBJECT" -m "$BODY" else git commit -m "$SUBJECT" fi # Esvazia commit-desc.txt depois que a mensagem já está presa no commit, pra # não reaparecer numa próxima chamada e virar a mensagem de um commit # seguinte que não tem nada a ver com ela. if [ "$USED_DESC_FILE" = true ]; then : > "$PROJECT_DIR/commit-desc.txt" fi info "Enviando para o Gitea (origin/$BRANCH)..." git push origin "$BRANCH" ok "Commit concluído em '$BRANCH'."