Published:


Gerando animação com gource para todos repositórios de uma organização do github Permalink

O gource é um software que nos permite, dentre outras coisas, gerar uma animação gráfica e bonita da linha do tempo dos commits de um projeto no git. Vou mostrar como usá-lo em um cenário no qual queremos gerar uma animação para todos repositórios de uma dada organização no github.

Primeiramente, instale o gource:

sudo apt install gource

Se preferir compilar, para usar opções mais recentes, instale as dependências:

sudo apt install libsdl2-dev libsdl2-image-dev \
libfreetype6-dev libglew-dev libglm-dev libpcre3-dev \
libboost-filesystem-dev libpng-dev libtinyxml-dev

E depois compile:

git clone https://github.com/acaudwell/Gource.git
cd Gource
./autogen.sh
./configure
make
sudo make install

Para listar todos repositórios de sua organização, gere um token no github e coloque numa variável do bash. Também crie uma variável com o nome da sua organização do github:

token='blabla'
org='uspdev'

Faça uma requisição GET para trazer um arquivo json com informações dos projetos na organização:

repos=$(curl -s -H "Authorization: token $token" "https://api.github.com/orgs/$org/repos?per_page=100")

Vamos filtrar somente os nomes dos repositórios:

repos=$(echo $repos | grep full_name | cut -f2 -d:)
repos=$(echo $repos | sed -r 's/"| |,//g')
repos=$(echo $repos | tr '\n' ' ')
echo $repos

Agora com a variável $repos conseguimos clonar todos repositórios:

mkdir $org
cd $org
for repo in ${(z)repos}; do git clone git@github.com:$repo.git; done

Com o gource vamos gerar um arquivo com histórico dos commits de todos repositórios:

for i in $(ls); do gource --output-custom-log $i.txt $i ; done
cat *.txt | sort -n > uspdev.txt

Neste ponto já é possível vizualizar uma animação básica:

gource uspdev.txt

Entretanto, vou fazer algumas modificações para deixar o vídeo mais agradável. Primeiramente, com o comando abaixo, olhe a lista de autores(as) dos commits, perceba que a mesma pessoa as vezes usa nomes diferentes em cada commit.

cat uspdev.txt| cut -d'|' -f2| sort| uniq

Com o sed é possível fazer as correções. Eu vou substituir os nomes das pessoas pelos nomes dos respectivos locais de trabalho, exemplos de algumas substituições:

sed -i "s/Thiago Gomes Verissimo/FFLCH/g" uspdev.txt
sed -i "s/Marcelo Modesto Costa/IME/g" uspdev.txt
sed -i "s/Sybele Groff/IF/g" uspdev.txt
sed -i "s/Tadeu Mesquita/FDRP/g" uspdev.txt
sed -i "s/Priscila C. Alves/EE/g" uspdev.txt
sed -i "s/milton brasileiro/IB/g" uspdev.txt
sed -i "s/Alessandro Costa de Oliveira/ECA/g" uspdev.txt
sed -i "s/Masaki Kawabata Neto/EESC/g" uspdev.txt
sed -i "s/André Girol/DF-FFCLRP/g" uspdev.txt
sed -i "s/Erickson Zanon/IGC/g" uspdev.txt
sed -i "s/Fabiana M. Munhoz Rodrigues/ICB/g" uspdev.txt
sed -i "s/Lucas Flóro/FEARP/g" uspdev.txt
sed -i "s/Igor Vitorio Custodio/ICMC/g" uspdev.txt
sed -i "s/Pascoal Roberto Peduto/FSP/g" uspdev.txt
sed -i "s/Lucas Flóro/FEARP/g" uspdev.txt
sed -i "s/João Paulo Polles/EXTERNO/g" uspdev.txt

Vou deletar alguns commits que não consegui identificar exatamente o(a) autor(a):

sed -i '/root/d' uspdev.txt
sed -i '/joazinho/d' uspdev.txt

Se quiser, é possível verificar a quantidade de commits por local:

cat uspdev.txt| cut -d'|' -f2| sort| uniq -c | sort -nr

Crie um diretório ~/logos com as imagens de cada local com extensão .jpg.

Agora podemos gerar a animação, com algumas opções extras deixando-a mais agradável:

gource --title "Contribuições USPdev 2018-2019" \
    --fullscreen                                 \
    --date-format "%d/%m/%Y %H:%M:%S"            \
    --start-date '2018-01-01'                    \ 
    --user-image-dir ~/logos                     \
    --logo ~/logos/USPDEV.png                    \
    --seconds-per-day 0.3                        \
    --max-user-speed 30                          \
    --font-colour 098735                         \
    --max-files 200                              \
    --user-scale 1.7                             \
    --font-scale 1.1                             \
    --font-size 30                               \
    --user-font-size 45                          \
    --highlight-users                            \
    --highlight-colour 026AA7 uspdev.txt

Para exportar o arquivo como mp4, instale o ffmpeg:

sudo apt install ffmpeg

E no comando acima do gource acrescente no final:

-1280x720 -o - | ffmpeg -y -r 60 -f image2pipe -vcodec ppm -i - -vcodec libx264 -preset ultrafast -pix_fmt yuv420p -crf 1 -threads 0 -bf 0 gource.mp4

Resultado: