Profissionalizando seus projetos no GitHub

Trabalha com desenvolvimento web há mais de 12 anos, atuando com projetos open source, palestrante, instrutor, e sócio fundador da Nasc, além de ser curador e idealizador da ​BrazilJS. Também um GDE.

O Git é A ferramenta mais usada entre desenvolvedores. O desenvolvedor pode usar Linux, Mac ou Windows, pode usar Apache, NGINX ou algum Static Server, pode usar PHP, Python, Ruby, Go ou JS (NodeJS), mas todos usam GIT.

Gráfico Git vs SVN Gráfico Git vs SVN

E o GitHub é, de longe, a plataforma mais utilizada pelas comunidades de todos os lados do mundo para projetos Open Source, ou até para projetos privados.

Vamos ver algumas dicas aqui para deixar o teu projeto no GitHub mais “profissa” 🙂

Notem que não há uma receita de bolo, não há uma forma certa ou errada ou A MELHOR forma, mas sim, algumas boas práticas.

README.md

Tenha um arquivo README.md na raiz do seu projeto. Isso fará com que usuários tenham um acesso rápido a um conteúdo relevante sobre como utilizar seu projeto.

Aproveite esse espaço também para acrescentar um TL;DR para aqueles que querem apenas ter uma visão rápida sobre o projeto.

Além disso, pode colocar também uma F.A.Q. e links para demos ou uma documentação mais extensa.

Licença

É fundamental ter uma licença em seu projeto. Muitos desenvolvedores que poderiam influenciar positivamente no teu projeto ou na divulgação do mesmo, ou empresas e outros desenvolvedores que poderiam passar a usá-lo, poderão perder um pouco do interesse ao perceber que você não adotou uma licença oficialmente. Saber escolher a licença também é importante, para isso existe o site choose a license, que vai te ajudar a decidir. Vale ressaltar que algumas licenças, como a GPL/LGPL, exigem que todos os que usarem seu projeto como parte de algo maior, e devem oferecer seu produto usando a mesma licença. Isso pode ser desencorajador para algumas empresas ou pessoas.

Ah…mais uma coisa. Ao usar uma licença, o próprio GitHub vai mostrar um pequeno ícone com ela no topo do projeto.

Licença Licença no GitHub

Como colocar uma licença no seu projeto

Crie um arquivo com o nome LICENSE na raiz do seu projeto e cole no seu conteúdo exatamente o conteúdo da licença. Exceto em casos em que a licença indica espaços a serem preenchidos com seus dados, não altere nada no conteúdo. Caso contrário, o GitHub não identificará seu projeto como licenciado. É o que acontece com vários projetos. Veja o gráfico abaixo com o número de projetos licenciados no GitHub. Parece que os novos projetos não estão dando tanta atenção às licenças.

Gráfico de projetos com licença no GitHub Gráfico de projetos com licença no GitHub

Também é legal dar uma olhada na lista das licenças mais usadas:

Tabela de licenças mais usadas no GitHub Tabela de licenças mais usadas no GitHub

GH-Pages

Use o gh-pages a seu favor. Trata-se de um servidor para páginas estáticas, disponível para seu projeto.

E a boa notícia é que agora está ainda mais fácil usar o gh-pages. Até pouco tempo, éramos obrigados a usar ferramentas de build ou tasks para gerenciarmos o conteúdo de nossas páginas na branch gh-pages.

Agora podemos simplesmente criar um diretório na própria branch master com todo o conteúdo de nossa página de documentação:

Criando um diretório para usar como documentação Criando um diretório para usar como documentação

E então apontar na página de configurações do projeto, qual o diretório correspondente à gh-pages.

Definindo o diretório para a gh-pages Definindo o diretório para a gh-pages

Uma abordagem interessante para a gh-pages é utilizá-la para centralizar alguns demos ou exemplos documentados. Mas sinta-se à vontade para acrescentar a documentação necessária.

Wiki

Ativar a opção de wiki pode ser uma boa opção para seu projeto, mas cuidado, utilizar ambas wiki e gh-pages para documentação pode ser um tiro no pé!

Aconselharia a apostar mais no gh-pages e, caso seu projeto tenha uma documentação realmente muito grande ou com uma API que precisa ser bem detalhada e organizada em um índice, então invista em montar uma wiki.

Selos

Uma coisa bem legal e que dá um ar mais sério ao projeto, é a utilização de selos ou badges.

Selos do projeto Selos do projeto

O projeto shields.io oferece uma coleção de selos parametrizáveis para você adicionar ao seu projeto.

Issues e labels

Crie e gerencie as labels do seu projeto e tenha o costume de usá-las para demarcar cada issue.

Labels nas issues Labels nas issues

Gerenciando Labels Gerenciando Labels

Issues marcadas com labels Issues marcadas com labels

Milestones

Qualquer projeto grande precisa ser bem organizado, e os milestones estão aí para te ajudar.

Milestones Milestones

Além de organizar tarefas, eles agrupam metas do projeto, informam sobre atrasos e podem ser utilizados para uma melhor visualização de quanto falta para uma determinada meta ser atingida.

Arquivos de configuração

Mais uma dica útil relacionada ao seu código. Arquivos de configuração como os .*rc, ajudam a manter a ordem e até a disciplina entre os desenvolvedores no projeto.

Os principais seriam os arquivos de lint (como .eslintrc ou .stylintrc), .editorconfig e é claro, o .gitignore.

Testes Unitários

Testes unitários demonstram a seriedade do seu projeto e passam confiança para novas atualizações. Existem “n” opções de ferramentas para testes unitários. Não se esqueça de acrescentar em seu readme informações sobre como o desenvolvedor pode rodar os testes.

Ferramentas conectadas ao GitHub

O GitHub permite a utilização de diversas ferramentas que podem ser conectadas a ele por meio de suas APIs.

São exemplos o travisci, que rodará as tasks de build de sua aplicação e tentará passar seus testes unitários, linters, etc.

Outra ferramenta muito útil é o codacy, que validará a qualidade do código no seu projeto e inclusive oferecerá um selo com a nota final.

Codacy Codacy

Existem várias ferramentas que poderão oferecer uma cobertura de testes, avaliação de código, acessibilidade, performance, etc.

Branches

Não existe uma regra de qual o melhor formato, mas o que estou mais acostumado é o padrão em que a branch master é o equivalente ao projeto em produção, a branch development é a branch utilizada para desenvolver o projeto em si, trabalhar com atualizações e correções, e também merges, enquanto outras branches (geradas a partir da branch development) terão como nome, o nome da nova feature a ser desenvolvida, como por exemplo uma branch com o nome push-notification para desenvolver esta feature especificamente. Quando finalizo essa feature, costumo fazer o merge dela na branch development, para garantir compatibilidade com qualquer outra atualização em andamento nessa branch.

Uma boa prática é excluir sua branch assim que a feature nova for acrescentada à master. Dessa forma, evitamos “sujeira” com uma lista enorme de branches, e mantemos as branches development e master com seus objetivos.

Versões, releases e tags

É cada vez mais importante usar com inteligência o versionamento de nossos projetos.

Por padrão, os números de versão seguem o formato x.y.z, onde:

  • x: Major, uma alteração grande, uma virada de versão que não é 100% compatível com a versão x-1.
  • y: Minor, uma alteração importante com uma nova funcionalidade ou correção. Deve funcionar com a versão y-1, mas algo na API pode ter sido alterado ou acrescentado.
  • z: Patch, um update pontual para corrigir algum bug ou melhorar alguma performance. Normalmente, não oferece riscos à compatibilidade do projeto

Com isto em mente, lembre-se de gerar uma nova tag no GitHub para cada atualização (incluindo patches). Normalmente criamos tags com nomes relacionados à versão:

git tag -a v1.4.0 -m "my update"

O comando git tag -a v1.4.0 criará a tag “v1.4.0”, enquanto o parâmetro -m "my update" acrescentará uma mensagem a sua tag.

Já um release, no GitHub, está mais relacionado a alguma alteração maior, como uma atualização no minor ou no major.

Releases no GitHub Releases no GitHub

Templates

O GitHub também oferece suporte a templates para quem for abrir uma nova issue, ou fazer uma pull request. Para tal, crie um arquivo chamado ISSUE_TEMPLATE.md ou PULL_REQUEST_TEMPLATE.md respectivamente.

É interessante criar também um CONTRIBUTING.md instruindo aqueles que pretendem contribuir com seu projeto.

Caso a raiz do projeto esteja muito “bagunçada”, cheia de arquivos de configurações, você também pode criar um diretório .GitHub/ e colocar esses arquivos dentro dele.

Uma coisa útil é que o próprio GitHub indica estas configurações para os interessados.

Template para Contribuição Template para Contribuição

Template para Issues Template para Issues

Confira nestes artigos mais umas dicas de como utilizar templates no GitHub.

Projects

Agora, o GitHub oferece também suporte para criação de projects. É bom para melhorar a forma como sua organização funciona dentro do GitHub e permite trabalhar com um sistema muito parecido com Kanban, vinculando suas issues e milestones. Muito útil.

GitHub Projects kanban GitHub Projects kanban

Commits

Novamente, não há uma regra para isto, mas existem algumas boas práticas. Algumas delas podem ser encontradas neste post (em inglês).

Git commit messages

Uma das dicas é sempre ter uma linha inicial com até 50 caracteres, mesmo quando fazendo um commit no terminal. É bom deixar uma linha em branco entre essa primeira informação (resumo) e uma descrição mais completa.

git commit -am "Fix the important problem X > X is a very annoying problem that has been with us for a long time. And now it is fixed :)"

Outra dica legal é começarmos as frases com a primeira letra maiúscula. E para a primeira linha, não finalize com um “.” ou “…”.

A linguagem para a primeira linha da mensagem do commit (o que seria o resumo do mesmo) deve ser mais imperativa ou informativa, como dizendo o que acontece graças a este commit. Para não ter dúvidas, imagine que está completando a frase “Este commit irá…” (this commit will):

  • Fix the problem x
  • Add feature y

Outra coisa interessante é não ultrapassar 72 caracteres por linha na parte principal da mensagem (afinal, ela também poderá ser visualizada no terminal).

É muito útil vincular as atividades no github aos seus commits. Para tal, utilize #id. Por exemplo Fix issue #123. Dessa forma, seu commit fica vinculado a issue.


Uma última dica seria…conheça o Git antes de se aprofundar realmente no GitHub. Conheça a ferramenta que você usa. O livro Pro Git (free), pode ajudá-lo!

Então, o que achou? Alguma melhoria que gostaria de sugerir? Deixe nos comentários!


BrazilJS é uma iniciativa NASC