diff --git a/.github/workflows/render-all.yml b/.github/workflows/render-all.yml
index e15e18d3..845ad26d 100644
--- a/.github/workflows/render-all.yml
+++ b/.github/workflows/render-all.yml
@@ -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 ################################
@@ -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"
\ No newline at end of file
diff --git a/config_automation.yml b/config_automation.yml
index 3bf069a8..06e4dda1 100644
--- a/config_automation.yml
+++ b/config_automation.yml
@@ -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
diff --git a/scripts/query_collection.R b/scripts/query_collection.R
index 1a3caabc..3a9fba2a 100644
--- a/scripts/query_collection.R
+++ b/scripts/query_collection.R
@@ -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)))
@@ -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 <-
diff --git a/scripts/render_collection.R b/scripts/render_collection.R
index 34271dd4..dc2b3ad5 100644
--- a/scripts/render_collection.R
+++ b/scripts/render_collection.R
@@ -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('', name, ''))
- #mutate(`Book Name` = paste0('', name, ' (github)'))
+ mutate(Name = paste0('', name, ''))
+ #mutate(Name = paste0('', name, ' (github)'))
#mutate(topics = str_replace_all(topics, pattern = ", ", replacement = "
"))
}
@@ -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 <-
@@ -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)
}