Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
178 changes: 178 additions & 0 deletions .github/workflows/render-all.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,11 @@ jobs:
files: config_automation.yml # Pass a space-separated list of configuration files. Rightmost files take precedence.
outputs:
toggle_website: "${{ env.RENDER_WEBSITE }}"
toggle_coursera: "${{ env.RENDER_COURSERA }}"
toggle_leanpub: "${{ env.RENDER_LEANPUB }}"
make_book_txt: "${{ env.MAKE_BOOK_TXT }}"
rendering_docker_image: "${{ env.RENDERING_DOCKER_IMAGE }}"
toggle_quiz_check: "${{ env.CHECK_QUIZZES }}"


########################## Make the Collection ################################
Expand Down Expand Up @@ -79,3 +83,177 @@ jobs:
preview: false
token: ${{ secrets.GH_PAT }}
docker_image: ${{needs.yaml-check.outputs.rendering_docker_image}}

########################## Make TOC-less #######################################

render-tocless:
name: Render TOC-less version for Leanpub or Coursera
needs: [yaml-check, render-website]
runs-on: ubuntu-latest
container:
image: ${{needs.yaml-check.outputs.rendering_docker_image}}
if: ${{needs.yaml-check.outputs.toggle_coursera == 'true' || needs.yaml-check.outputs.toggle_leanpub == 'true'}}

steps:
- name: checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GH_PAT }}

- name: Login as github-actions bot
run: |
git config --global --add safe.directory $GITHUB_WORKSPACE
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY}
git fetch origin
git pull --rebase --allow-unrelated-histories --strategy-option=ours

# Rendered content for Leanpub and Coursera is very similar.
# This job creates a shared scaffold for both.
- name: Run TOC-less version of render -- Rmd version
if: ${{needs.yaml-check.outputs.toggle_website == 'rmd' }}
id: tocless_rmd
run: Rscript -e "ottrpal::render_without_toc()"

- name: Run TOC-less version of render -- quarto version
id: tocless_quarto
if: ${{needs.yaml-check.outputs.toggle_website == 'quarto' }}
run: |
Rscript -e "quarto::quarto_render('.', metadata = list(sidebar = F, toc = F),
quarto_args = c('--output-dir', 'docs/no_toc/'))"

# Commit the TOC-less version files
- name: Commit tocless bookdown files
env:
GH_PAT: ${{ secrets.GH_PAT }}
run: |
git add --force docs/no_toc*
git commit -m 'Render toc-less' || echo "No changes to commit"
git status docs/no_toc*
git push --force -u origin main || echo "No changes to push"

render-leanpub:
name: Finish Leanpub prep
needs: [yaml-check, render-tocless]
runs-on: ubuntu-latest
container:
image: jhudsl/base_ottr:dev
if: ${{needs.yaml-check.outputs.toggle_leanpub == 'true'}}

steps:
- name: checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GH_PAT }}

- name: Login as github actions bot
run: |
git config --global --add safe.directory $GITHUB_WORKSPACE
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY}
git fetch origin
git pull --rebase --allow-unrelated-histories --strategy-option=ours
ls docs/no_toc

# Create screenshots
- name: Run the screenshot creation
run: |
# Remove old folder
rm -rf resources/chapt_screen_images

# Make new screenshots
chapt_urls=$(Rscript -e " \
Sys.setenv(CHROMOTE_CHROME = '/usr/bin/vivaldi'); \
ottrpal::make_screenshots( \
token = '${{ secrets.GH_PAT }}', \
repo = '$GITHUB_REPOSITORY' )" \
)

# We want a fresh run of the renders each time
- name: Delete manuscript/
env:
GH_PAT: ${{ secrets.GH_PAT }}
run: |
rm -rf manuscript/
git add .
git commit -m 'Delete manuscript folder' || echo "No changes to commit"
git push -u origin main || echo "No changes to push"

- name: Run ottrpal::bookdown_to_embed_leanpub -- No Quiz
if: ${{ needs.yaml-check.outputs.toggle_quiz_check != 'true'}}
run: |
Rscript -e "ottrpal::website_to_embed_leanpub(
render = FALSE, \
chapt_img_key = 'resources/chapt_screen_images/chapter_urls.tsv', \
make_book_txt = as.logical('${{needs.yaml-check.outputs.make_book_txt == 'true'}}'), \
quiz_dir = NULL)"

- name: Run ottrpal::bookdown_to_embed_leanpub -- with Quiz
if: ${{ needs.yaml-check.outputs.toggle_quiz_check == 'true'}}
run: |
Rscript -e "ottrpal::website_to_embed_leanpub(
render = FALSE, \
chapt_img_key = 'resources/chapt_screen_images/chapter_urls.tsv', \
make_book_txt = as.logical('${{needs.yaml-check.outputs.make_book_txt == 'true'}}'))"

# Commit the rendered Leanpub files
- name: Commit rendered Leanpub files
env:
GH_PAT: ${{ secrets.GH_PAT }}
run: |
git add --force manuscript/* || "No files to add"
git add --force resources/* || "No files to add"
git add --force docs/* || "No files to add"
git commit -m 'Render Leanpub' || echo "No changes to commit"
git status docs/*
git pull --rebase --allow-unrelated-histories --strategy-option=ours --autostash
git push --force --set-upstream origin main || echo "No changes to push"

render-coursera:
name: Finish Coursera prep
needs: [yaml-check, render-tocless]
runs-on: ubuntu-latest
container:
image: ${{needs.yaml-check.outputs.rendering_docker_image}}
if: ${{needs.yaml-check.outputs.toggle_coursera == 'true'}}

steps:
- name: checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GH_PAT }}

- name: Login as github action
run: |
git config --global --add safe.directory $GITHUB_WORKSPACE
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY}
git fetch origin
git pull --rebase --allow-unrelated-histories --strategy-option=ours

# Run Coursera version
- name: Convert Leanpub quizzes to Coursera
if: needs.yaml-check.outputs.toggle_leanpub == 'true' && needs.yaml-check.outputs.toggle_quiz_check == 'true'
id: coursera
run: Rscript -e "ottrpal::convert_coursera_quizzes()"

# Commit the rendered files
# Only commit coursera quizzes if the directory is present
- name: Commit rendered Coursera files
env:
GH_PAT: ${{ secrets.GH_PAT }}
run: |
if [ -d 'coursera_quizzes' ]; then
git add --force coursera_quizzes/*
fi
git add --force resources/*
git add --force docs/*
git commit -m 'Render Coursera quizzes' || echo "No changes to commit"
git status
git push --force -u origin main || echo "No changes to push"
6 changes: 6 additions & 0 deletions config_automation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ url-check-periodically: true
##### Renderings run upon merge to main branch #####
# Rendering each platform's content
render-website: rmd_web
render-leanpub: true
render-coursera: false

## Automate the creation of Book.txt file? yes/no
## This is only relevant if render-leanpub is yes, otherwise it will be ignored
make-book-txt: true

# What docker image should be used for rendering?
# The default is jhudsl/base_ottr:main
Expand Down
4 changes: 2 additions & 2 deletions scripts/query_collection.R
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ message(paste("Querying Github API..."))

# Request search results specific to jhudsl + fhdsl + DataTrail organizations
# Also allows us to pull in repos forked into these organizations
url <- "https://api.github.com/search/repositories?q=user:jhudsl+user:fhdsl+user:datatrail-jhu+fork:true&per_page=50"
url <- "https://api.github.com/search/repositories?q=user:jhudsl+user:fhdsl+user:ottrproject+user:datatrail-jhu+fork:true&per_page=50"

# Provide the appropriate GH token & Make the request
req <- GET(url = url, config = add_headers(Authorization = paste("token", git_pat)))
Expand All @@ -49,7 +49,7 @@ last <- str_extract(req$headers$link, pattern = '.(?=>; rel=\"last\")')
full_repo_df <- tibble()
for (page in 1:last){

url <- paste0("https://api.github.com/search/repositories?q=user:jhudsl+user:fhdsl+user:datatrail-jhu+fork:true&per_page=50&page=", page)
url <- paste0("https://api.github.com/search/repositories?q=user:jhudsl+user:fhdsl+user:ottrproject+user:datatrail-jhu+fork:true&per_page=50&page=", page)
message(paste("Gathering results from:", url))
req <- GET(url = url, config = add_headers(Authorization = paste("token", git_pat)))
repo_dat <-
Expand Down
26 changes: 20 additions & 6 deletions scripts/render_collection.R
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ make_collection_table <- function(exclude = NULL, include = NULL, kable = FALSE)
if(kable){
df <-
df %>%
mutate(`Book Name` = paste0("[", name, "](", homepage, ") ([github](", html_url, "))"))
mutate(Name = paste0("[", name, "](", homepage, ") ([github](", html_url, "))"))
} else {
df <-
df %>%
mutate(`Book Name` = paste0('<a href="', homepage, '">', name, '</a>'))
#mutate(`Book Name` = paste0('<a href="', homepage, '">', name, '</a> (<a href="', html_url, '">github</a>)'))
mutate(Name = paste0('<a href="', homepage, '">', name, '</a>'))
#mutate(Name = paste0('<a href="', homepage, '">', name, '</a> (<a href="', html_url, '">github</a>)'))
#mutate(topics = str_replace_all(topics, pattern = ", ", replacement = "<br>"))
}

Expand Down Expand Up @@ -75,11 +75,24 @@ make_collection_table <- function(exclude = NULL, include = NULL, kable = FALSE)
df <-
df %>%
rename(Description = description, Topics = topics, Funding = funding) %>%
select(`Book Name`, Funding, Description, Topics)
select(Name, Funding, Description, Topics)

# Remove duplicates if necessary
df <- distinct(df)

# Create a "category" column
df <-
df %>%
mutate(
Category =
case_when(
stringr::str_detect(Topics, "course") &
!stringr::str_detect(Topics, "hutch-course") ~ "Course",
stringr::str_detect(Topics, "hutch-course") ~ "Hutch Course",
stringr::str_detect(Topics, "edtech-software") ~ "Software",
)
)

# Filter if desired
if(!is.null(include)){
df <-
Expand All @@ -95,10 +108,11 @@ make_collection_table <- function(exclude = NULL, include = NULL, kable = FALSE)
# Will error out if file doesn't exist - provides a blank tibble instead
error = function(e) {
df <-
tibble(`Book Name` = "none",
tibble(Name = "none",
Funding = "none",
Description = "none",
Topics = "none")
Topics = "none",
Category = "none")

return(df)
}
Expand Down
Loading