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.

