Este repositório contém scripts Python para montagem de um dataset de repositórios OSS utilizando para tanto a API do GitHub.
Foi feito utilizando as seguintes tecnologias:
Será necessário instalar alguns pacotes e realizar alguns procedimentos na sua máquina local para a configuração, como abordado a seguir.
Verifique se você tem o SQLite3 instalado utilizando o comando a seguir:
$ sqlite3 -version
>>> 3.31.1 2020-01-27 [...]
Note que para executar tal comando, o SQLite3 deve estar no PATH do sistema. Caso o comando não retorne uma resposta com a versão do SQLite3, siga o passo a passo para instalação aqui.
Verifique se você tem a versão 3.8 do Python instalada utilizando o comando a seguir:
$ python3 --version
>>> Python 3.8.10
Caso o comando não possua uma saída semelhante, é provavel que seja necessária a instalação do Python seguindo este tutorial.
Verifique se você tem o pip instalado executando o comando:
$ pip --version
>>> pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
Caso não tenha instalado, siga os passos descritos aqui.
Crie uma Virtualenv na pasta raiz do projeto executando o comando:
$ python3 -m venv env
Onde env
é o nome dado para a Virtualenv. Escolha o nome env
ou venv
.
Em seguida, ative a Virtualenv criada.
Execute
$ source env/bin/activate
ou
$ . env/bin/activate
Execute
> env\Scripts\activate
Lembre-se que env
é o nome escolhido anteriormente para sua Virtualenv.
Com a Virtualenv ativada, execute o seguinte comando:
$ pip install -r requirements.txt -r requirements_dev.txt
Logo todas as dependencias para o projeto serão instaladas
Para finalizar, copie o .env.sample
e cole com o nome .env
na pasta raiz do projeto e preencha a variável GITHUB_OAUTH_TOKEN
. Você pode colocar um ou mais tokens do GitHub separados por vírgula. Para obter este token, siga estes passos.
Com a Virtualenv ativada, primeiro altere ou adicione a dependência e a versão que deseja instalar/atualizar no arquivo requirments.in
. Após isso, rode o comando pip-compile --output-file=requirements.txt requirements.in
no diretório raiz.
Uma simples explicação de cada arquivo contido no diretório scripts
:
clone_repo.py
: Nele fazemos o clone dos repositórios com ajuda do Percevaldb.py
: Este arquivo contém funções úteis para comunicação com o banco de dadosenrich_repo.py
: Este arquivo envia para o ElasticSearch dados enriquecidosfiles.py
: Arquivo com funções para I/O com arquivos JSONgithub_api.py
: Script para comunicação com a API do Githubmodels.py
: Arquivo que contém as tabelas do banco de dadosprojects.py
: Gera o arquivoprojects.json
para o GrimoireLabquery_repo.py
: Script que inicia a busca dos repositórios
Utilizaremos o script query_repo.py
, que possui o objetivo de buscar e salvar repositórios dado uma query de busca. Para iniciar, execute o comando python scripts/query_repo.py
. Irá aparecer um prompt com um texto de apoio de como deve ser a query de busca.
Para mais informações sobre as querys de busca de repositórios, siga a documentação da API do GitHub.
Os dados obtidos pelo script são salvos em um banco de dados SQLite3, chamado db.sqlite3
.
Algumas ferramentas serão utilizadas para realizar o enriquecimento do dataset básico criado com o query_repo.py
. São elas:
- Elasticsearch
- Kibana
Os passos a serem executados para configuração fazem com que ambos requerimentos sejam instalados em um container Docker.
Instale o Docker Engine seguindo os passos descritos aqui. Em seguida, faça a instalação do Docker Compose seguindo estes passos (para Linux) ou estes passos (para Windows).
Com o Docker devidamente instalado, siga os seguintes passos:
- Crie uma pasta que irá conter os dados do Elasticsearch, com o nome
elasticsearch-data
; - Dê permissão a esta pasta usando executando o comando:
sudo chown -R 1000:1000 elasticsearch-data/
- Inicie o container Docker com o seguinte comando:
sudo docker-compose up -d
- Inicie o enriquecimento executando o script
enrich_repo.py
a partir da raiz do projeto, como a seguir:
python scripts/enrich_repo.py
e o processo deverá ser iniciado. Note que o enriquecimento será realizado com informações obtidas do repositório Git e do GitHub. Para enriquecer informações somente do repositório Git, execute:
python scripts/enrich_repo.py --skip-github
- Acompanhe os logs gerados em uma nova janela/aba do seu terminal executando
tail -f enrich_repos_2.log
⚠️ Atenção: todos os procedimentos especificados acima devem ser feitos com a virtualenv ativada.
Aguarde o enriquecimento ser completado. Essa operação pode levar muito tempo, dependendo do tamanho dos repositórios a serem analisados e da quantidade de repositórios no db.sqlite3
obtidos com o query-repo.py
.