[pitch] Fiz meu próprio gerenciador de pacotes

Bash Package Manager (BPM)

O BPM é um gerenciador de pacotes projetado especificamente para scripts em Bash, oferecendo uma forma prática de automatizar tarefas no Linux. Abaixo, você encontrará informações detalhadas sobre suas funcionalidades, pacotes existentes e como utilizá-lo.


Principais Funcionalidades

  • Instalação de pacotes remotos: Adicione pacotes de repositórios externos.
  • Gerenciamento de pacotes: Criação, remoção e restauração de pacotes.
  • Listagem de repositórios e pacotes: Verifique quais repositórios estão ativos e explore os pacotes disponíveis.
  • Indexação automática de pacotes: Garante que pacotes sejam acessíveis globalmente.
  • Exportação de pacotes como CLI: Permite rodar pacotes diretamente no terminal.
  • Sistema de importação próprio: Facilita o uso de pacotes como bibliotecas.
  • Bash completion automático: Completa comandos diretamente no terminal.
  • Comando de reparo automático: Corrige problemas na instalação ou execução.

Nota sobre a indexação automática: Sempre que você usa qualquer comando do BPM em um diretório de pacote, como install, clean ou help, os pacotes são automaticamente indexados para facilitar o acesso global.


Pacotes Disponíveis

  1. bpm-package: Pacote inicial de teste sem funcionalidades.
  2. colorful: Fornece códigos de cores para saída no terminal.
  3. metrics: Ferramenta CLI que calcula métricas de projetos, como número de linhas de código, commits, bytes, etc.
  4. edit-repo: CLI simples para manipular arquivos de repositórios do BPM.
  5. pack: Facilita a manipulação de pacotes e gerenciadores de pacotes. Inclui a função pack-man, que adapta scripts para diferentes gerenciadores do sistema.

Esses pacotes foram criados principalmente para testar o BPM, mas possuem utilidades práticas.


Workflow do BPM

Instalação

Clone o repositório e execute o script de instalação:

git clone https://github.com/Raffa064/bpm && bash ./install.sh

Após a instalação, reinicie o shell para ativar o BPM. Use o comando bpm e pressione Tab para visualizar os comandos disponíveis.


Gerenciamento de Pacotes

Instalar um pacote

Para instalar um pacote, como o metrics:

bpm install metrics

Isso também instalará as dependências (ex.: colorful).

Executar um pacote

Para rodar um pacote instalado:

bpm run metrics

Você pode exportar o pacote para executá-lo diretamente:

bpm export metrics
metrics -t sh

Criar um Pacote

Para criar um novo pacote:

bpm init my-bpm-package

O comando pedirá algumas informações, incluindo o main script, que é o caminho do arquivo principal do pacote (similar ao import em Java). Caso o pacote seja apenas uma biblioteca, deixe este campo vazio.

Após a criação, o diretório do pacote terá:

  • src/: Para os scripts.
  • package.sh: Arquivo de configuração (similar ao package.json do Node.js).

Adicionar dependências

Adicione dependências no arquivo package.sh:

pkg[dependencies]="colorful"

Importar dependências

Use o comando import nos scripts:

Exemplo: src/my-bpm-package.sh

import colorful

function my-bpm-package/main() {
  echoe "$fBTexto azul" # foreground blue
  echoe "$fgTexto verde" # foreground green
}

Nota: O comando echoe é um atalho do pacote colorful para echo -e, com reset automático de cores ao final.

Execute o pacote com:

bpm run my-bpm-package

Remover e Restaurar Pacotes

  • Remover: Adicione o pacote à lixeira com bpm remove.
  • Restaurar: Restaure o pacote com bpm restore.
  • Limpar: Esvazie a lixeira com bpm clean.

Documentação

A documentação completa dos comandos está disponível com:

bpm help

Ela está escrita em inglês e cobre todos os recursos do BPM.


Teste o BPM

Confira o repositório oficial e experimente o projeto:

GitHub - Raffa064/bpm

Bacana o projeto. O bash é muito simplista realmente, acho que nunca pensaram em criar um package manager para ele antes.

Legal. Pelo que eu me lembro, nunca tinha visto um gerenciador de pacotes para scripts em bash. É útil para centralizar e facilitar que as pessoas encontrem scripts para suprir as necessidades.

Parabéns.

Seria o mesmo que refazer a roda, mas, interessante para aprendizado.

Para bash, não me lembro de ter outro gerenciador de dependências, embora o bash seja muito interligado com executáveis do sistema, e por consequência, dos gerenciadores de pacotes das distros.