137 lines
4.6 KiB
Bash
Executable file
137 lines
4.6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# ==============================================================================
|
|
# Script Utilitário: Upload de Arquivos e Mídias da Wiki para o MinIO Paiol
|
|
# Envia arquivos (PDFs, imagens, vídeos, anexos) para o MinIO Paiol e gera
|
|
# links formatados para inclusão em documentos Markdown da Wiki.
|
|
#
|
|
# Padrão:
|
|
# curl -X PUT --upload-file ./manual.pdf https://paiol.idz.one/wiki/{modulo}/{slug}-{aleatorio}.pdf
|
|
# ==============================================================================
|
|
|
|
set -e
|
|
|
|
VERDE="\033[0;32m"
|
|
AMARELO="\033[1;33m"
|
|
VERMELHO="\033[0;31m"
|
|
AZUL="\033[0;34m"
|
|
NEGRITO="\033[1m"
|
|
RESET="\033[0m"
|
|
|
|
exibir_ajuda() {
|
|
echo -e "${AZUL}${NEGRITO}Uso:${RESET} $0 <caminho-do-arquivo> <slug-funcionalidade-ou-pagina> [modulo-override]"
|
|
echo ""
|
|
echo -e "${NEGRITO}Exemplos:${RESET}"
|
|
echo " $0 ./manual.pdf licenciamento/dispensa-licenca"
|
|
echo " $0 ./fluxograma.png denuncias/fluxo-fiscalizacao"
|
|
echo " $0 ./relatorio.pdf auditoria/relatorio-anual meu-modulo"
|
|
echo ""
|
|
echo -e "${NEGRITO}Parâmetros:${RESET}"
|
|
echo " <caminho-do-arquivo> Caminho do arquivo local a ser enviado"
|
|
echo " <slug-funcionalidade> Identificador semântico da funcionalidade ou página da Wiki"
|
|
echo " [modulo-override] (Opcional) Sobrescreve o modulo-id de memorias-ia/modulo.yml"
|
|
exit 1
|
|
}
|
|
|
|
if [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ -z "$1" ] || [ -z "$2" ]; then
|
|
exibir_ajuda
|
|
fi
|
|
|
|
ARQUIVO="$1"
|
|
SLUG_ORIGINAL="$2"
|
|
MODULO_OVERRIDE="$3"
|
|
|
|
if [ ! -f "$ARQUIVO" ]; then
|
|
echo -e "${VERMELHO}Erro:${RESET} Arquivo '$ARQUIVO' não encontrado ou não é um arquivo regular." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Identificar a raiz do projeto pai para ler memorias-ia/modulo.yml
|
|
if [ -f "memorias-ia/modulo.yml" ]; then
|
|
ROOT_DIR="."
|
|
elif [ -f "../memorias-ia/modulo.yml" ]; then
|
|
ROOT_DIR=".."
|
|
elif [ -f "../../memorias-ia/modulo.yml" ]; then
|
|
ROOT_DIR="../.."
|
|
else
|
|
ROOT_DIR="."
|
|
fi
|
|
|
|
# Resolver modulo-id
|
|
if [ -n "$MODULO_OVERRIDE" ]; then
|
|
MODULO_ID="$MODULO_OVERRIDE"
|
|
elif [ -f "$ROOT_DIR/memorias-ia/modulo.yml" ]; then
|
|
MODULO_ID=$(grep -E "^modulo-id:" "$ROOT_DIR/memorias-ia/modulo.yml" | awk '{print $2}' || true)
|
|
fi
|
|
|
|
if [ -z "$MODULO_ID" ]; then
|
|
echo -e "${AMARELO}Aviso:${RESET} 'modulo-id' não encontrado em memorias-ia/modulo.yml. Usando 'geral'." >&2
|
|
MODULO_ID="geral"
|
|
fi
|
|
|
|
# Obter extensão e nome base
|
|
NOME_COMPLETO=$(basename "$ARQUIVO")
|
|
EXT="${NOME_COMPLETO##*.}"
|
|
EXT=$(echo "$EXT" | tr '[:upper:]' '[:lower:]')
|
|
|
|
# Sanitizar slug (remover barras no início/fim e espaços)
|
|
SLUG=$(echo "$SLUG_ORIGINAL" | sed 's|^/||;s|/$||;s| \+|-|g')
|
|
|
|
# Gerar sufixo aleatório alfanumérico de 8 caracteres
|
|
if command -v openssl >/dev/null 2>&1; then
|
|
ALEATORIO=$(openssl rand -hex 4)
|
|
elif command -v md5sum >/dev/null 2>&1; then
|
|
ALEATORIO=$(head -c 16 /dev/urandom | md5sum | head -c 8)
|
|
else
|
|
ALEATORIO=$(head -c 8 /dev/urandom | tr -dc 'a-z0-9' | head -c 8)
|
|
fi
|
|
|
|
URL_DESTINO="https://paiol.idz.one/wiki/${MODULO_ID}/${SLUG}-${ALEATORIO}.${EXT}"
|
|
|
|
echo -e "${AZUL}${NEGRITO}Enviando arquivo para o MinIO Paiol...${RESET}"
|
|
echo -e " Arquivo: ${NEGRITO}$ARQUIVO${RESET}"
|
|
echo -e " Módulo: ${NEGRITO}$MODULO_ID${RESET}"
|
|
echo -e " Slug: ${NEGRITO}$SLUG${RESET}"
|
|
echo -e " Destino: ${NEGRITO}$URL_DESTINO${RESET}"
|
|
|
|
TEMP_RESPOSTA=$(mktemp)
|
|
|
|
HTTP_STATUS=$(curl -s -o "$TEMP_RESPOSTA" -w "%{http_code}" -X PUT --upload-file "$ARQUIVO" "$URL_DESTINO")
|
|
|
|
if [ "$HTTP_STATUS" -ge 200 ] && [ "$HTTP_STATUS" -lt 300 ]; then
|
|
rm -f "$TEMP_RESPOSTA"
|
|
echo -e "\n${VERDE}${NEGRITO}✓ Upload realizado com sucesso no MinIO Paiol!${RESET}"
|
|
echo -e " ${NEGRITO}URL:${RESET} $URL_DESTINO\n"
|
|
|
|
echo -e "${NEGRITO}--- Snippets prontos para a Wiki Markdown ---${RESET}"
|
|
|
|
NOME_FORMATADO=$(echo "$SLUG" | awk -F'/' '{print $NF}' | tr '-' ' ' | awk '{for(i=1;i<=NF;i++)sub(/./,toupper(substr($i,1,1)),$i)}1')
|
|
|
|
case "$EXT" in
|
|
png|jpg|jpeg|svg|gif|webp)
|
|
echo -e "${AZUL}Imagem:${RESET}"
|
|
echo ""
|
|
;;
|
|
pdf)
|
|
echo -e "${AZUL}Documento / Manual PDF:${RESET}"
|
|
echo "[Baixar $NOME_FORMATADO (PDF)]($URL_DESTINO)"
|
|
;;
|
|
mp4|webm)
|
|
echo -e "${AZUL}Vídeo:${RESET}"
|
|
echo "<video controls src=\"$URL_DESTINO\" width=\"100%\"></video>"
|
|
;;
|
|
*)
|
|
echo -e "${AZUL}Arquivo / Download:${RESET}"
|
|
echo "[Baixar $NOME_FORMATADO]($URL_DESTINO)"
|
|
;;
|
|
esac
|
|
echo ""
|
|
exit 0
|
|
else
|
|
CONTEUDO_ERRO=$(cat "$TEMP_RESPOSTA" 2>/dev/null || true)
|
|
rm -f "$TEMP_RESPOSTA"
|
|
echo -e "\n${VERMELHO}${NEGRITO}✗ Falha no upload para o Paiol (HTTP $HTTP_STATUS)${RESET}" >&2
|
|
if [ -n "$CONTEUDO_ERRO" ]; then
|
|
echo -e "Resposta do servidor: $CONTEUDO_ERRO" >&2
|
|
fi
|
|
exit 1
|
|
fi
|