Skip to content

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.

Notifications You must be signed in to change notification settings

TheMarini/issues-and-stack-overflow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitHub Issues e Stack Overflow Q&As

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.

📇 Sumário

  1. 🏷️ Versões
  2. 🗒️ Relatório Final
  3. 🧮 Dados
  4. ℹ️ Introdução
  5. 🔥 Instalação
  6. 👥 Autores

🏷️ Versões

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.

🗒️ Relatório Final

Link para o PDF com as análises e métricas.

🧮 Dados

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.

ℹ️ Introdução

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:

  {
    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
              }
            }
          }
        }
      }
    }
  }

⚠️ AVISO: devido há limitações da API do GitHub, só é possível ter uma boa taxa de sucesso na requisição da query acima se ela for feita de 4 em 4 resultados. Por isto, este é o número máximo de resultados por página configurado no código, necessitando então de 25 requisições no total para se chegar aos 100 desejados.

Repositórios sem issues

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.

Métricas do Stack Overflow

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

🔥 Instalação

  1. Instale as dependências:
    npm install
    
  2. (Recomendado) Crie a váriável de ambiente TOKEN a partir de um arquivo .env, na raiz do projeto, com o seguinte conteúdo:
    TOKEN=seu_token_do_GitHub_API
    
    ℹ️ Não se preocupe, caso não queira realizar o item acima, poderá informar seu token diretamente na linha de comando.
  3. Execute:
    npm start
    
  4. Pronto, agora é só esperar e os resultados estarão no diretório /data (a partir da raiz do projeto) com o nome repos.csv, open_issues.csv e closed_issues.csv ✔️

👥 Autores

About

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.

Resources

Stars

Watchers

Forks

Packages

No packages published