GitRoot
(gitroot.dev)- GitRoot é uma pequena forge Git que gerencia repositórios e permissões de acesso em um único binário, combinando issues, quadros, mesclagem de branches e interface web por meio de plugins independentes
- Além do código, todos os dados, incluindo issues, merge requests e quadros, são armazenados no Git como arquivos comuns, sem depender de banco de dados separado ou blobs ocultos
- As mudanças são controladas com
.gitroot/users.ymle permissões de escrita por branch, e só usuários autorizados podem fazer push para a branch padrão, que representa o estado atual do repositório - Atualmente está em versão alfa e oferece suporte a repositórios, usuários, plugins, comandos Git via SSH e consulta HTTP, mas não é adequado para uso em produção
- Até a versão 1.0, o projeto pretende implementar atualizações, permissões por arquivo, comandos Git via HTTP, grupos e subgrupos, além de estabilizar a API de plugins; hoje, para contribuir, é preciso entender Git e o fluxo do plugin
grafter
Uma pequena forge Git com apenas os recursos necessários
- GitRoot é uma pequena forge Git executada em um único binário, limitando as funções básicas à criação de repositórios e ao gerenciamento de permissões de acesso por repositório
- Os demais recursos ficam a cargo de plugins que podem ser instalados de forma independente entre si
- criação de issues, roadmaps, sprints e milestones
- exibição de itens em formato de quadro
- revisão e mesclagem de branches, chamadas de
graftno GitRoot - fornecimento de dados do repositório e vários recursos por meio de uma interface web
- Como os plugins são totalmente separados, é possível usar apenas o quadro sem interface web, e também criar plugins próprios com os recursos necessários para cada projeto
Um design para adaptar a forge a cada projeto
- Partindo da ideia de que cada projeto precisa de um modo de trabalho diferente, o sistema foi projetado para que cada projeto tenha a liberdade de modificar sua própria forge
- O ambiente desejado pelo desenvolvedor é o seguinte
- armazenar código, issues, pull/merge requests e quadros em um único repositório
- oferecer recursos necessários para divulgação e operação do projeto, como landing page, traduções, sistema de tickets e fórum
- migrar para outra forge em outro servidor sem scripts de migração nem perda de dados ou de atribuição de contribuidores
- Em contrapartida, busca evitar as seguintes complexidades
- a necessidade de abrir o navegador para gerenciar pull/merge requests ou issues
- uma configuração que mostra primeiro uma lista de arquivos e diretórios para quem está conhecendo o projeto
- uma forge que define o significado e o fluxo de trabalho de sprints, milestones, épicos e user stories
- uma estrutura em que é preciso passar por vários menus para configurar uma única permissão de usuário
Autonomia na instalação e operação
- O objetivo é uma distribuição sem dependências nem banco de dados, para que administradores possam instalar e manter com facilidade
- O administrador deve poder definir as ações permitidas para cada usuário, e os próprios usuários devem poder solicitar diretamente a criação e o acesso a projetos e recursos, sem depender de e-mail ou chat
- A meta é reduzir o peso das atualizações, ao mesmo tempo em que se evita entregar dados de projetos e usuários a terceiros ou depender de grandes empresas que podem mudar suas políticas de operação de repente
- O projeto ainda não está concluído e está recebendo contribuições externas
Permissões gerenciadas com arquivos comuns e branches
- Em vez de usar banco de dados ou blobs ocultos dentro da árvore Git, todos os dados são armazenados em arquivos comuns ao lado do código
- O
.gitroot/users.ymlde cada repositório define onde cada usuário pode escrever, e o controle de acesso funciona principalmente com restrições por branch- no início, apenas o proprietário pode acessar a branch padrão
- se um usuário sem permissão fizer push para a branch padrão, o GitRoot rejeita a mudança
- qualquer pessoa pode criar uma nova branch, e quem a criou recebe permissão de escrita nessa branch; outros usuários não podem modificá-la
- se
.gitroot/users.ymlfor alterado, ou se for mesclada uma branch em que um usuário adicionou a si mesmo, esse usuário também poderá fazer push para a branch padrão
- Qualquer pessoa pode ler os arquivos e modificá-los localmente ou em uma nova branch, mas para refletir mudanças na branch padrão, que representa o estado atual do repositório, é necessária a mesclagem feita pelo proprietário
- As configurações da própria forge também são gerenciadas no repositório raiz
- um repositório é criado ao adicionar uma mudança em
.gitroot/repositories.ymlda branch padrão do repositório raiz, ou ao mesclar essa mudança - mais detalhes sobre o funcionamento estão na documentação
- um repositório é criado ao adicionar uma mudança em
Recursos disponíveis na versão alfa
- Como esta é atualmente uma versão alfa, é possível testar, mas ela não deve ser usada em produção
- O suporte atual inclui
- criação e exclusão de repositórios
- processamento de comandos Git via SSH
- gerenciamento de locais de escrita por usuário no nível de repositório e branch
- instalação de plugins e ativação por repositório
- execução de plugins na árvore de trabalho durante a instalação
- execução de plugins sobre o diff a cada commit após a instalação
- consulta de repositórios via HTTP
Plano de desenvolvimento até a 1.0
- Antes da versão 1.0, o projeto pretende implementar os seguintes recursos
- atualização do GitRoot e dos plugins
- gerenciamento de permissões de usuário no nível de arquivo
- processamento de comandos Git via HTTP
- gerenciamento de repositórios com grupos e subgrupos
- estabilização da API de plugins
Self-hosting e processo de contribuição
- O site do GitRoot é uma instância do GitRoot que hospeda o próprio código do GitRoot, operando exclusivamente para o projeto GitRoot
- Para testar em outro projeto, é preciso seguir a documentação de instalação e uso
- Como o próprio GitRoot também é um repositório GitRoot, é possível contribuir da mesma forma, e o processo pode ser consultado no guia de contribuição
- A instância atual usa o plugin
grafterpara integrar parte do código à branch padrão, então é preciso entender como ele funciona antes de contribuir - Como todos os dados, incluindo código, issues e traduções, são armazenados no Git, hoje é necessário saber usar Git para contribuir
- No futuro, o objetivo é permitir que qualquer pessoa participe executando
git commitegit pushdiretamente no navegador
1 comentários
Opiniões no Lobste.rs
A causa de a largura da tag
<pre>ficar limitada a 720px parece ser odisplay:griddobody; se isso for desativado, ela se expande como esperado. Além disso, como a URL não contém informações de um commit específico, fica difícil para quem enviou e quem recebeu o link verem a mesma tela. Entendo que é um projeto para necessidade pessoal, mas quis trazer isso como algo que vale revisarPessoalmente não uso LLM para programar e sou contra, mas mesmo que alguém usasse, se o patch fosse pequeno o bastante, não tenho certeza se recusaria
Como o inglês não é minha língua nativa e por isso tenho dificuldade para explicar o GitRoot, há traços de LLM na comunicação externa. Antes também pedi ajuda em https://gts.gitroot.dev/@forge/statuses/01KFNWDKSZBEHTC16N5G02HJZ6 e https://gts.gitroot.dev/@forge/statuses/01KTP30NTY9FK91Q9B5Z9B4M52, mas ninguém apareceu
Dói ter de usar LLM, mas em vez de não fazer nada, decidi usar o mínimo possível. Se surgir uma comunidade no futuro, gostaria de excluir isso completamente, e antes disso talvez desapareça naturalmente por motivos econômicos. Tenho muitos textos pendentes na lista de tarefas para explicar filosofia, segurança e o futuro, mas acabo hesitando em escrevê-los ao pensar que no fim a LLM vai ajustar as frases, corrigir erros de digitação e traduzir