Na última semana, ensinamos como é possível realizar o deploy de um dashboard do nível de atividade econômica brasileira, construído através do Shiny, em uma webpage através do Shiny apps. Através deste método, é necessário que haja um trabalho manual para realizar a atualizações de dados do dashboard, e de forma que possamos melhorar este processo, ensinaremos neste post como automatizar a atualizações de dados de um painel, utilizando como exemplo o Dashboard de Inflação construído através do nosso Curso de Análise de Conjuntura com o R.
O processo de automatização de scripts no Github envolve alguns passos e conhecimentos necessários, sendo alguns tópicos de certa forma avançados, exigindo algum tempo de estudo. Porém, aqui iremos simplificar o processo para que todos consigam utilizá-lo. O processo aqui envolve utilizar um Dashboard criado no R utilizando o Flexdashboard e Shiny, sendo portanto um dashboard dinâmico. Essa informação é importante, devido ao fato de que caso haja a utilização de outro tipo de dashboard é necessário que ocorra ajustes nos procedimentos.
Dashboard de Inflação
Aqui na Análise Macro ensinamos a criar dashboard para análise de conjuntura brasileira de forma totalmente reprodutível e automática. Você pode checar o resultado através deste link https://analisemacro.shinyapps.io/dashboard_inflacao/.
Dito isto, podemos prosseguir com os passos necessários para a automatização do dashboard.
Pré-requisitos
- Ter instalado o R e RStudio
- Ter instalado o Git
- Criar uma conta no GitHub
- Criar uma conta no Shiny App
- Ter em mãos o dashboard construído através do Curso de Análise de Conjuntura
Após todos estes procedimentos, podemos então seguir no envio dos arquivos do dashboard para o Github, de forma que seja criado um repositório no site e que possa realizar o deploy no Shiny App através do Github, e que ele possa realizar a automatização com o Github Actions.
1° passo
Abra o projeto do dashboard (dashboard_inflation.Rproj) em conjunto com o arquivo .Rmd. Primeiro precisamos gerenciar as dependências do dashboard (isto é, o pacotes utilizados no script), de forma que o Github reconheça quais devem ser baixados pelo Github Actions.
Com os arquivos do dashboard aberto, utilize o seguinte código no console.
renv::init() renv::snapshot()
2° passo
Configurado as dependências, podemos então exportar os arquivos para o repositório do Github. Para criar o repositório, devemos seguir os seguintes passos:
- Estar logado no GitHub
- Clicar no botão New
- Definir um nome do repositório
- Clicar em Create repository
Ao criar o repositório, aparecerá alguns comandos em Git, que podemos utilizar para integrar o projeto do nosso dashboard com o repositório. Copiamos o código que aparece na sugestão "…or create a new repository on the command line" e colamos no Terminal do Rstudio. No nosso exemplo utilizamos o seguinte código:
echo "# dashboard_inflacao" >> README.md git init git add README.md git commit -m "first commit" git branch -M main git remote add origin https://github.com/analisemacro/dashboard_inflacao.git git push -u origin main git add . git commit -m "add dashboard" git push
3° passo
- acesse shinyapps.io
- entre em sua conta (caso não tenha, crie uma)
- clique na imagem do perfil e vá em tokens
- na página, utilize o token que deseja para realizar o deploy do dashboard, caso não tenha um token, clique em new token
- com o secrets em mãos, deveremos colocá-los no Github. No repositório, acesse Settings > secrets > actions > New repository secret. Em cada novo secret, utilize os nomes utilizados na imagem, e que correspondem para os nomes dos secrets relacionados aos tokens do Shiny App.
Temos o suficiente agora para conseguir utilizar o Github Actions.
4° passo
on: push: branches: - main - master schedule: - cron: "0 0 * * *" name: Dashboard update jobs: Dashboard-update: runs-on: windows-latest env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} RSCONNECT_USER: ${{ secrets.RSCONNECT_USER }} RSCONNECT_TOKEN: ${{ secrets.RSCONNECT_TOKEN }} RSCONNECT_SECRET: ${{ secrets.RSCONNECT_SECRET }} steps: - uses: actions/checkout@v2 - uses: r-lib/actions/setup-r@v1 with: r-version: '4.1.2' # The R version to download - name: Cache packages uses: actions/cache@v2 with: path: ~\AppData\Local\renv key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }} restore-keys: | ${{ runner.os }}-renv- - name: Restore packages run: | if (!requireNamespace("renv", quietly = TRUE)) install.packages("renv") renv::restore() shell: Rscript {0} - name: Install workflow dependencies run: | install.packages(c("rcmdcheck", "sessioninfo", "devtools")) shell: Rscript {0} - name: Install pandoc run: | choco install pandoc - name: Authorize and deploy app run: | rsconnect::setAccountInfo(name='${{ secrets.RSCONNECT_USER }}', token='${{ secrets.RSCONNECT_TOKEN }}', secret='${{ secrets.RSCONNECT_SECRET }}') rsconnect::deployApp(account = 'analisemacro', forceUpdate = TRUE) shell: Rscript {0} - name: Commit results run: | git config --local user.name "GitHub Actions" git config --local user.email "actions@github.com" git add . git commit -m "Update data and deploy shiny app" || echo "No changes to commit" git push origin || echo "No changes to commit"
Importante dizer que é necessário que o código deva conter uma indentação específica, para obter um exemplo de como pode realizar através do códigos, veja aqui.
Esta parte é um pouco complexa de se entender, portanto, não iremos nos aprofundar no papel de cada código.
Com isso, finalizamos todos os passos de construção do nosso workflow. Agora, será feito o deploy do nosso dashboard na página do Shiny App, bem como será feito esse procedimento todos os dias automaticamente.