Merge pull request #230 from Sage-Bionetworks/fds-1412-htan-demo-prep #195
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Workflow derived from https://github.com/r-lib/actions/tree/master/examples | |
# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help | |
name: shiny-deploy | |
on: | |
# on push to branches labeled main and dev* or commits tagged as VYY.MM.n deploy | |
push: | |
branches: | |
- main | |
- dev* | |
tags: | |
- v[0-9]+.[0-9]+.[0-9]+ | |
paths-ignore: | |
- '.github/ISSUE_TEMPLATE/**' | |
- '**/*.md' | |
- '**/.gitignore' | |
jobs: | |
shiny-deploy: | |
runs-on: ubuntu-latest | |
container: rocker/rstudio:4.1.2 | |
env: | |
SCHEMATIC_URL_DEV: https://schematic-dev.api.sagebionetworks.org | |
SCHEMATIC_URL_STAGING: https://schematic-staging.api.sagebionetworks.org | |
SCHEMATIC_URL_PROD: https://schematic.api.sagebionetworks.org | |
# This should not be necessary for installing from public repo's however remotes::install_github() fails without it. | |
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} | |
steps: | |
- name: Install System Dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y pip libcurl4-openssl-dev libpng-dev libfontconfig1-dev libharfbuzz-dev libfribidi-dev libtiff-dev libxml2-dev | |
# this action checks out the $GITHUB_WORKSPACE repository so that the workflow can access it | |
- uses: actions/checkout@v3 | |
# this action sets up pandoc | |
- uses: r-lib/actions/setup-pandoc@v2 | |
- uses: r-lib/actions/setup-r@v2 | |
with: | |
use-public-rspm: true | |
r-version: 'renv' | |
# install packages | |
- name: Install rsconnect | |
run: | | |
install.packages("renv") | |
renv::upgrade(version = "0.17.3") | |
renv::install("rsconnect@0.8.29") | |
shell: Rscript {0} | |
# this action activates renv | |
- uses: r-lib/actions/setup-renv@v2 | |
# deploy app using rsconnect | |
- name: Authorize and deploy app | |
run: | | |
renv::restore(packages = "renv") | |
refName <- Sys.getenv("GITHUB_REF_NAME") | |
repo <- Sys.getenv("GITHUB_REPOSITORY") | |
appName <- strsplit(repo, "/")[[1]][2] | |
# if tag is v*.*.*, deploy to prod | |
# if main to staging | |
# otherwise to test | |
if (grepl("v[0-9]+.[0-9]+.[0-9]+", refName)) { | |
message("Deploying release version of app using schematic API production instance") | |
renviron <- "DFA_SCHEMATIC_API_URL = '${{ env.SCHEMATIC_URL_PROD }}'" | |
} else if (refName == "main") { | |
appName <- paste(appName, "staging", sep = "-") | |
renviron <- "DFA_SCHEMATIC_API_URL = '${{ env.SCHEMATIC_URL_STAGING }}'" | |
message("Deploying staging version of app using schematic API staging instance") | |
} else { | |
appName <- paste(appName, "testing", sep = "-") | |
renviron <- "DFA_SCHEMATIC_API_URL = '${{ env.SCHEMATIC_URL_DEV }}'" | |
message("Deploying testing version of app using schematic API dev instance") | |
} | |
# write .Renviron | |
writeLines(renviron, ".Renviron") | |
# deploy | |
message(sprintf("Deploying to %s instance.", appName)) | |
# assign secrets to variables | |
rsConnectUser <-"${{ secrets.RSCONNECT_USER }}" | |
rsConnectToken <- "${{ secrets.RSCONNECT_TOKEN }}" | |
rsConnectSecret <- "${{ secrets.RSCONNECT_SECRET }}" | |
# create config file | |
config <- "client_id: ${{ secrets.OAUTH_CLIENT_ID }}" | |
config <- c(config, "client_secret: ${{ secrets.OAUTH_CLIENT_SECRET }}") | |
appUrl<- sprintf("https://%s.shinyapps.io/%s", rsConnectUser, appName) | |
config <- c(config, sprintf("app_url: %s", appUrl)) | |
# write config file | |
configFileConn<-file("oauth_config.yml") | |
tryCatch( | |
writeLines(config, configFileConn), | |
finally=close(configFileConn) | |
) | |
# set account info | |
rsconnect::setAccountInfo(rsConnectUser, rsConnectToken, rsConnectSecret) | |
# get app names. If app exists, configure then deploy. Otherwise | |
# deploy then configure. | |
apps <- rsconnect::applications()$name | |
if (appName %in% apps) { | |
rsconnect::configureApp(appName = appName, size = "xxxlarge", logLevel = "verbose") | |
rsconnect::deployApp(appName = appName) | |
} else { | |
rsconnect::deployApp(appName = appName) | |
rsconnect::configureApp(appName = appName, size = "xxxlarge", logLevel = "verbose") | |
} | |
shell: Rscript {0} |