Uma análise se a discussão de issues nos repositórios mais populares do GitHub se refletem em perguntas e respostas relacionadas no Stack Overflow.
Obs.: essa lista pode estar desatualizada conforme o lançamento de novas releases. A versão atualizada sempre estará no último lançamento feito, o qual se encontra na branch main.
Link para o PDF com as análises e métricas.
As métricas - e as análises sobre elas - foram baseadas conforme os dados diponíveis em repos.csv
, open_issues.csv
e closed_issues.csv
presentes neste repositório, obtidos em 16/11/2020 às 21h25 através do código e método descrito a seguir.
Foi desenvolvido um script em Node.js que, a partir de um token da API do GitHub, realiza uma busca paginada da query GraphQL a seguir enquanto, paralelamente, os resultados são salvos nos respectivos arquivos CSV:
repos.csv
: métricas dos repositórios;open_issues.csv
: métricas das issues abertas de cada repositório;closed_issues.csv
: métricas das issues fechadas de cada repositório;
{
search(type: REPOSITORY, query: "stars:>100 sort:stars", first: 100) {
repositoryCount
pageInfo {
endCursor
}
nodes {
... on Repository {
nameWithOwner
stargazerCount
primaryLanguage {
name
}
totalIssues: issues {
totalCount
}
openIssues: issues(states: [OPEN], orderBy: {field: COMMENTS, direction: DESC}, first: 5) {
totalCount
nodes {
id
number
title
createdAt
updatedAt
closedAt
comments {
totalCount
}
}
}
closedIssues: issues(states: [CLOSED], orderBy: {field: COMMENTS, direction: DESC}, first: 5) {
totalCount
nodes {
id
number
title
createdAt
updatedAt
closedAt
comments {
totalCount
}
}
}
}
}
}
}
Ao longo da busca, os repositórios que não possuirem issues são descartados, contabilizados e informados ao usuário para que seja possível identificar o défict faltante até o nº de resultados almejado. Por exemplo, em uma execução realizada no dia 28/10/2020 às 23h00, 7 dos 100 repositórios retornados foram descartados, por isto a quantidade de páginas a serem retornadas foi aumentada de 25 para 30, de acordo com as seguintes variáveis em index.js
:
// Quantity of pages as objective
const pages = 30;
// Quantity of results by page
const pageLength = 4;
Desta forma é possível obter um número superior ao desejado com o objetivo de previnir a ocorrência de repositórios sem issues.
Conforme os resultados das páginas são retornados, para cada issue é realizado uma busca para a API do Stack Overflow na rota /search/advanced
com o termo <usuário>/<repositório> <número da issue>
. Além disso, o filtro !4(EH5lWNG)R3L7Drl
é ultilizado para que só seja retornado as métricas necessárias.
Exemplo de busca realizada: https://api.stackexchange.com/docs/advanced-search#page=1&order=desc&sort=votes&q=vue%2Fvuejs%202873&filter=!4(EH5lWNG)R3L7Drl&site=stackoverflow&run=true
- Instale as dependências:
npm install
- (Recomendado) Crie a váriável de ambiente
TOKEN
a partir de um arquivo.env
, na raiz do projeto, com o seguinte conteúdo:ℹ️ Não se preocupe, caso não queira realizar o item acima, poderá informar seu token diretamente na linha de comando.TOKEN=seu_token_do_GitHub_API
- Execute:
npm start
- Pronto, agora é só esperar e os resultados estarão no diretório
/data
(a partir da raiz do projeto) com o nomerepos.csv
,open_issues.csv
eclosed_issues.csv
✔️