github.sh¶
Biblioteca para gerenciamento de releases do GitHub com suporte a download, verificação de integridade e instalação automática.
Visão Geral¶
A biblioteca github.sh fornece funções reutilizáveis para:
- Obter informações de releases do GitHub
- Baixar releases com retry automático
- Verificar integridade com checksums (SHA256, SHA512, MD5)
- Detectar sistema operacional e arquitetura
- Extrair e instalar binários automaticamente
Importação¶
Funções¶
github_get_latest_version¶
Obtém a tag da última release de um repositório GitHub.
Parâmetros:
repo- Repositório no formatoowner/repo
Retorna:
- Tag da última release (ex:
v1.2.3) - Código 1 em caso de erro
Exemplo:
Variáveis de Ambiente:
GITHUB_API_MAX_TIME- Timeout máximo em segundos (padrão: 10)GITHUB_API_CONNECT_TIMEOUT- Timeout de conexão (padrão: 5)
github_detect_os_arch¶
Detecta o sistema operacional e arquitetura atual.
Parâmetros:
- formato - Formato do nome do OS (opcional):
- standard (padrão): Linux=linux, macOS=macos
- darwin-macos: Linux=linux, macOS=darwin
- linux-gnu: Linux=linux-gnu, macOS=macos
Retorna:
- String no formato os_name:arch (ex: linux:x64)
- Código 1 se sistema não suportado
Arquiteturas Suportadas:
- x64 (x86_64)
- arm64 (aarch64, arm64)
- armv7 (armv7l)
- x86 (i686)
Exemplo:
os_arch=$(github_detect_os_arch)
os_name="${os_arch%:*}"
arch="${os_arch#*:}"
echo "OS: $os_name, Arquitetura: $arch"
github_build_download_url¶
Constrói URL de download para um release específico.
Parâmetros:
- repo - Repositório no formato owner/repo
- version - Tag da versão (com ou sem prefixo v)
- os_name - Nome do sistema operacional
- arch - Arquitetura
- file_pattern - Padrão do nome do arquivo com placeholders:
- {version} - Versão sem prefixo v
- {os} - Sistema operacional
- {arch} - Arquitetura
Retorna: - URL completa do download
Exemplo:
url=$(github_build_download_url \
"jdx/mise" \
"v2024.1.0" \
"linux" \
"x64" \
"mise-{version}-{os}-{arch}.tar.gz")
echo "$url"
# https://github.com/jdx/mise/releases/download/v2024.1.0/mise-2024.1.0-linux-x64.tar.gz
github_download_release¶
Baixa um arquivo de release do GitHub.
Parâmetros:
- url - URL completa do arquivo
- output_file - Caminho onde salvar o arquivo
- description - Descrição para logs (opcional, padrão: "arquivo")
Retorna: - Código 0 em sucesso - Código 1 em erro
Características: - Barra de progresso visual - Timeout de 300 segundos - 3 tentativas com delay de 2 segundos - Cria diretórios automaticamente
Exemplo:
if github_download_release \
"https://github.com/jdx/mise/releases/download/v2024.1.0/mise.tar.gz" \
"/tmp/mise.tar.gz" \
"Mise"; then
echo "Download concluído!"
fi
github_verify_checksum¶
Verifica a integridade de um arquivo usando checksum.
Parâmetros:
- file - Caminho do arquivo a verificar
- checksum_source - Hash esperado ou caminho do arquivo de checksum
- algorithm - Algoritmo (opcional, padrão: sha256)
- sha256
- sha512
- md5
Retorna: - Código 0 se checksum válido - Código 1 se inválido
Comportamento:
- Se o comando de hash não estiver disponível, retorna 0 com warning
- Se checksum_source for um arquivo, procura o hash correspondente
- Comparação case-insensitive
Exemplo:
# Com hash direto
github_verify_checksum \
"/tmp/file.tar.gz" \
"abc123def456..." \
"sha256"
# Com arquivo de checksum
github_verify_checksum \
"/tmp/file.tar.gz" \
"/tmp/checksums.txt" \
"sha256"
github_download_and_verify¶
Baixa um arquivo e verifica seu checksum.
Parâmetros:
- download_url - URL do arquivo principal
- checksum_url - URL do arquivo de checksum (ou "none" para pular)
- output_file - Caminho de destino
- algorithm - Algoritmo de hash (opcional, padrão: sha256)
- description - Descrição para logs (opcional)
Retorna: - Código 0 em sucesso - Código 1 em erro ou checksum inválido
Comportamento:
- Se checksum_url for vazio ou "none", pula verificação
- Se download do checksum falhar, continua sem verificação
- Remove arquivos em caso de falha na verificação
Exemplo:
github_download_and_verify \
"https://github.com/owner/repo/releases/download/v1.0/file.tar.gz" \
"https://github.com/owner/repo/releases/download/v1.0/file.tar.gz.sha256" \
"/tmp/file.tar.gz" \
"sha256" \
"My Tool"
github_extract_tarball¶
Extrai um arquivo tar.gz.
Parâmetros:
- tar_file - Caminho do arquivo .tar.gz
- extract_dir - Diretório de destino (opcional, padrão: /tmp/github-extract-$$)
Retorna: - Caminho do diretório de extração - Código 1 em erro
Exemplo:
extracted=$(github_extract_tarball "/tmp/tool.tar.gz" "/tmp/tool-extract")
echo "Extraído em: $extracted"
github_install_binary¶
Instala um binário de um diretório extraído.
Parâmetros:
- extracted_dir - Diretório com arquivos extraídos
- binary_name - Nome do binário a procurar
- install_dir - Diretório de instalação
Retorna: - Caminho completo do binário instalado - Código 1 em erro
Comportamento: - Procura o binário recursivamente - Move para diretório de instalação - Define permissões de execução - Remove arquivos temporários
Exemplo:
binary_path=$(github_install_binary \
"/tmp/extracted" \
"mise" \
"$HOME/.local/bin")
echo "Instalado em: $binary_path"
github_install_release¶
Função completa: baixa, verifica e instala um release do GitHub.
github_install_release "owner/repo" "version" "binary_name" "install_dir" "file_pattern" [checksum_pattern] [algorithm]
Parâmetros:
- repo - Repositório no formato owner/repo
- version - Tag da versão
- binary_name - Nome do binário a instalar
- install_dir - Diretório de instalação
- file_pattern - Padrão do arquivo (com placeholders)
- checksum_pattern - Padrão do arquivo de checksum (opcional)
- algorithm - Algoritmo de hash (opcional, padrão: sha256)
Retorna: - Caminho do binário instalado - Código 1 em erro
Processo: 1. Detecta sistema operacional e arquitetura 2. Constrói URLs de download 3. Baixa e verifica checksum (se disponível) 4. Extrai arquivo 5. Instala binário 6. Remove arquivos temporários
Exemplo:
# Instalação completa com verificação
github_install_release \
"jdx/mise" \
"v2024.1.0" \
"mise" \
"$HOME/.local/bin" \
"mise-{version}-{os}-{arch}.tar.gz" \
"mise-{version}-{os}-{arch}.tar.gz.sha256" \
"sha256"
# Instalação sem verificação
github_install_release \
"owner/tool" \
"v1.0.0" \
"tool" \
"$HOME/.local/bin" \
"tool-{version}-{os}-{arch}.tar.gz"
Dependências¶
curl- Download de arquivostar- Extração de arquivossha256sumoushasum- Verificação de checksums (opcional)logger.sh- Logs estruturados
Exemplos de Uso¶
Consulte os exemplos de código acima para casos práticos detalhados.
Tratamento de Erros¶
Todas as funções:
- Retornam código 0 em sucesso, 1 em erro
- Geram logs informativos usando log_* functions
- Limpam arquivos temporários em caso de erro
Veja Também¶
- Guia de Adicionar Comandos
- logger.sh - Sistema de logs
- os.sh - Detecção de sistema operacional