From 60d6bfa4b1e3bcb8951da2ebcaef5444c108a8cd Mon Sep 17 00:00:00 2001
From: cansavvy
Date: Tue, 17 Sep 2024 20:01:13 +0000
Subject: [PATCH 1/6] =?UTF-8?q?=F0=9F=94=84=20Synced=20local=20'.github/wo?=
=?UTF-8?q?rkflows/'=20with=20remote=20'.github/workflows/'?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
release-
---
.github/workflows/check-url.yml | 107 +++++++++++
.github/workflows/delete-preview.yml | 2 +-
.github/workflows/pull_request.yml | 81 +++++----
.github/workflows/render-all.yml | 166 ++++++++++++------
.github/workflows/transfer-rendered-files.yml | 27 +--
5 files changed, 284 insertions(+), 99 deletions(-)
create mode 100644 .github/workflows/check-url.yml
diff --git a/.github/workflows/check-url.yml b/.github/workflows/check-url.yml
new file mode 100644
index 0000000..a437049
--- /dev/null
+++ b/.github/workflows/check-url.yml
@@ -0,0 +1,107 @@
+name: Periodic URL Check
+
+on:
+ workflow_dispatch:
+ schedule:
+ - cron: '0 0 1 * *'
+
+jobs:
+ set-up:
+ name: Load user automation choices
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+
+ # Use the yaml-env-action action.
+ - name: Load environment from YAML
+ uses: doughepi/yaml-env-action@v1.0.0
+ with:
+ files: config_automation.yml # Pass a space-separated list of configuration files. Rightmost files take precedence.
+ outputs:
+ toggle_url_check_periodically: "${{ env.URL_CHECK_PERIODICALLY }}"
+
+ url-check:
+ name: Check URLs
+ needs: set-up
+ if: ${{needs.set-up.outputs.toggle_url_check_periodically == 'yes'}}
+ runs-on: ubuntu-latest
+ container:
+ image: jhudsl/base_ottr:main
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+
+ # Delete the branch if this has been run before
+ - name: Delete branch locally and remotely
+ run: git push origin --delete preview-spell-error || echo "No branch to delete"
+
+ # Make the branch fresh
+ - name: Make the branch fresh
+ 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'
+
+ echo branch doesnt exist
+ git checkout -b preview-spell-error || echo branch exists
+ git push --set-upstream origin preview-spell-error || echo echo branch exists remotely
+ shell: bash
+
+ - name: Run the check
+ uses: jhudsl/ottr-reports@main
+ id: check_results
+ continue-on-error: true
+ with:
+ check_type: urls
+ error_min: 1
+
+ - name: Declare file path and time
+ id: check-report
+ run: |
+ error_num=$(cat check_reports/url_checks.tsv | wc -l)
+ error_num="$((error_num-1))"
+ echo "error_num=$error_num" >> $GITHUB_OUTPUT
+ echo "error_url=https://github.com/${GITHUB_REPOSITORY}/blob/preview-spell-error/check_reports/url_checks.tsv" >> $GITHUB_OUTPUT
+ shell: bash
+
+ - name: Stop if failure
+ if: steps.check_results.outcome == 'failure'
+ run: exit 1
+
+ - name: Print out error variables
+ run: |
+ echo ${{ steps.check-report.outputs.error_url }}
+ echo ${{ steps.check-report.outputs.error_num }}
+
+ - name: Find issues
+ id: find-issue
+ env:
+ GH_PAT: ${{ secrets.GH_PAT }}
+ run: |
+ echo "$GITHUB_REPOSITORY"
+ curl -o find_issue.R https://raw.githubusercontent.com/jhudsl/ottr-reports/main/scripts/find_issue.R
+ issue_exists=$(Rscript --vanilla find_issue.R --repo $GITHUB_REPOSITORY --git_pat $GH_PAT)
+ echo URL issue exists: $issue_exists
+ echo "issue_existence=$issue_exists" >> $GITHUB_OUTPUT
+
+ - name: If too many URL errors, then make an issue
+ if: ${{ steps.check-report.outputs.error_num >= 1 && steps.find-issue.outputs.issue_existence == 0}}
+ uses: JasonEtco/create-an-issue@v2
+ with:
+ filename: .github/ISSUE_TEMPLATE/url-error.md
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ FILE_URL: ${{ steps.check-report.outputs.error_url }}
+ ERROR_NUM: ${{ steps.check-report.outputs.error_num }}
+
+ - name: If no URL errors than delete the branch we made
+ if: ${{ steps.check-report.outputs.error_num < 1 }}
+ run: |
+ git config --system --add safe.directory "$GITHUB_WORKSPACE"
+ git push origin --delete preview-spell-error || echo "No branch to delete"
diff --git a/.github/workflows/delete-preview.yml b/.github/workflows/delete-preview.yml
index afd658a..faa83cc 100644
--- a/.github/workflows/delete-preview.yml
+++ b/.github/workflows/delete-preview.yml
@@ -18,7 +18,7 @@ jobs:
# Check out current repository
- name: checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
fetch-depth: 0
diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml
index f5968ca..5cd835e 100644
--- a/.github/workflows/pull_request.yml
+++ b/.github/workflows/pull_request.yml
@@ -1,5 +1,5 @@
# Candace Savonen 2021
-# Updated Jan 2023
+# Updated May 2024
name: Pull Request
@@ -14,9 +14,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
fetch-depth: 0
+ token: ${{ secrets.GH_PAT }}
# Use the yaml-env-action action.
- name: Load environment from YAML
@@ -31,16 +32,19 @@ jobs:
# Make the branch fresh
- name: Make the branch fresh
run: |
- git config --local user.email "itcrtrainingnetwork@gmail.com"
- git config --local user.name "jhudsl-robot"
+ 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'
branch_name='preview-${{ github.event.pull_request.number }}'
echo branch doesnt exist
git checkout -b $branch_name || echo branch exists
- git push --set-upstream origin $branch_name
+ git push --set-upstream origin $branch_name || echo branch exists remotely
shell: bash
+
outputs:
+ toggle_website: "${{ env.RENDER_WEBSITE }}"
toggle_spell_check: "${{ env.SPELL_CHECK }}"
toggle_style_code: "${{ env.STYLE_CODE }}"
toggle_url_check: "${{ env.URL_CHECKER }}"
@@ -58,6 +62,7 @@ jobs:
check_type: spelling
error_min: 3
gh_pat: secrets.GH_PAT
+ branch_name: ${GITHUB_HEAD_REF}
url-check:
name: Check URLs
@@ -68,6 +73,7 @@ jobs:
check_type: urls
error_min: 0
gh_pat: secrets.GH_PAT
+ branch_name: ${GITHUB_HEAD_REF}
quiz-check:
name: Check quiz formatting
@@ -78,6 +84,7 @@ jobs:
check_type: quiz_format
error_min: 0
gh_pat: secrets.GH_PAT
+ branch_name: ${GITHUB_HEAD_REF}
############################# Style the code ###################################
style-code:
@@ -90,18 +97,18 @@ jobs:
steps:
- name: Checkout files
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Run styler
- run: Rscript -e "styler::style_file(list.files(pattern = 'Rmd$', recursive = TRUE, full.names = TRUE));warnings()"
+ run: Rscript -e "styler::style_file(list.files(pattern = '(R|q)md$', recursive = FALSE, full.names = TRUE));warnings()"
- name: Commit styled files
run: |
git config --system --add safe.directory "$GITHUB_WORKSPACE"
- git add \*.Rmd
- git commit -m 'Style Rmds' || echo "No changes to commit"
+ git add \*md
+ git commit -m 'Style *mds' || echo "No changes to commit"
git push origin || echo "No changes to commit"
############################# Render Preview ###################################
@@ -116,16 +123,16 @@ jobs:
steps:
- name: Checkout files
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
fetch-depth: 0
# Set up git checkout
- name: Set up git checkout
run: |
- git config --system --add safe.directory "$GITHUB_WORKSPACE"
- git config --local user.email "itcrtrainingnetwork@gmail.com"
- git config --local user.name "jhudsl-robot"
+ 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'
branch_name='preview-${{ github.event.pull_request.number }}'
git fetch --all
@@ -136,23 +143,35 @@ jobs:
# Run bookdown rendering
- name: Run bookdown render
id: bookdown
+ if: ${{needs.yaml-check.outputs.toggle_website == 'rmd' }}
run: Rscript -e "bookdown::render_book('index.Rmd', output_format = 'all')"
- # Run TOC-less version
- # Rendered content for Leanpub and Coursera is very similar.
- # This job creates a shared scaffold for both.
- - name: Run TOC-less version of render
- id: tocless
- run: Rscript -e "ottrpal::render_without_toc()"
+ # Run quarto rendering
+ - name: Render quarto version
+ id: quarto
+ if: ${{needs.yaml-check.outputs.toggle_website == 'quarto' }}
+ run: Rscript -e "quarto::quarto_render('.')"
# This checks on the steps before it and makes sure that they completed.
# If the renders didn't complete we don't want to commit the file changes
- - name: Check on render steps
- if: steps.bookdown.outcome != 'success' || steps.tocless.outcome != 'success'
+ - name: Check on Rmd render steps
+ if: ${{needs.yaml-check.outputs.toggle_website == 'rmd' }}
run: |
echo Bookdown status ${{steps.bookdown.outcome}}
- echo Toc-less status ${{steps.tocless.outcome}}
- exit 1
+ if [${{steps.bookdown.outcome}} != 'success']; then
+ exit 1
+ fi
+
+ - name: Check on quarto render steps
+ if: ${{needs.yaml-check.outputs.toggle_website == 'quarto' }}
+ run: |
+ echo Quarto status ${{steps.quarto.outcome}}
+ if [${{steps.quarto.outcome}} != 'success']; then
+ exit 1
+ fi
+
+ - name: Website preview for download
+ run: zip website-preview.zip docs/* -r
# Commit the rendered bookdown files
- name: Commit rendered bookdown files to preview branch
@@ -163,7 +182,7 @@ jobs:
echo "changes=$changes" >> $GITHUB_OUTPUT
git add . --force
git commit -m 'Render preview' || echo "No changes to commit"
- git pull --set-upstream origin $branch_name --allow-unrelated-histories --strategy-option=ours
+ git pull --rebase --set-upstream origin $branch_name --allow-unrelated-histories --strategy-option=ours
git push --force || echo "No changes to commit"
shell: bash
@@ -180,10 +199,10 @@ jobs:
run: |
course_name=$(head -n 1 _bookdown.yml | cut -d'"' -f 2| tr " " "-")
bookdown_link=$(echo "https://htmlpreview.github.io/?https://raw.githubusercontent.com/$GITHUB_REPOSITORY/preview-${{ github.event.pull_request.number }}/docs/index.html")
- tocless_link=$(echo "https://htmlpreview.github.io/?https://raw.githubusercontent.com/$GITHUB_REPOSITORY/preview-${{ github.event.pull_request.number }}/docs/no_toc/index.html")
docx_link=$(echo "https://github.com/$GITHUB_REPOSITORY/raw/preview-${{ github.event.pull_request.number }}/docs/$course_name.docx")
+ zip_link=$(echo "https://github.com/$GITHUB_REPOSITORY/raw/preview-${{ github.event.pull_request.number }}/website-preview.zip")
+ echo "zip_link=$zip_link" >> $GITHUB_OUTPUT
echo "bookdown_link=$bookdown_link" >> $GITHUB_OUTPUT
- echo "tocless_link=$tocless_link" >> $GITHUB_OUTPUT
echo "docx_link=$docx_link" >> $GITHUB_OUTPUT
echo "time=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
echo "commit_id=$GITHUB_SHA" >> $GITHUB_OUTPUT
@@ -197,11 +216,13 @@ jobs:
issue-number: ${{ github.event.pull_request.number }}
body: |
Re-rendered previews from the latest commit:
- - See [preview of Bookdown here](${{ steps.build-components.outputs.bookdown_link }})
- - See [preview of Coursera/Leanpub version here](${{ steps.build-components.outputs.tocless_link }})
- - Download the [preview of .docx file](${{ steps.build-components.outputs.docx_link }})
+ - :eyes: Quick [preview of course website here](${{ steps.build-components.outputs.bookdown_link }}) \*
+ - :microscope: Comprehensive [download of the course website here](${{ steps.build-components.outputs.zip_link }})
+ - Download the [.docx file](${{ steps.build-components.outputs.docx_link }})
- _Updated at ${{ steps.build-components.outputs.time }} with changes from ${{ steps.build-components.outputs.commit_id }}_
+ \* note not all html features will be properly displayed in the "quick preview" but it will give you a rough idea.
+
+ _Updated at ${{ steps.build-components.outputs.time }} with changes from the latest commit ${{ steps.build-components.outputs.commit_id }}_
edit-mode: replace
- name: Comment if no changes
diff --git a/.github/workflows/render-all.yml b/.github/workflows/render-all.yml
index 5662487..b2e39b2 100644
--- a/.github/workflows/render-all.yml
+++ b/.github/workflows/render-all.yml
@@ -1,5 +1,5 @@
-
-# Candace Savonen Apr 2021
+# Candace Savonen 2021
+# Updated May 2024
name: Render all output courses
@@ -8,8 +8,9 @@ on:
push:
branches: [ main, staging ]
paths:
- - '**.Rmd'
+ - '**md$'
- assets/*
+ - quizzes/*
jobs:
@@ -18,7 +19,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
# Use the yaml-env-action action.
- name: Load environment from YAML
@@ -26,66 +27,85 @@ jobs:
with:
files: config_automation.yml # Pass a space-separated list of configuration files. Rightmost files take precedence.
outputs:
- toggle_bookdown: "${{ env.RENDER_BOOKDOWN }}"
+ 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 }}"
- render-bookdown:
- name: Render bookdown
+ render-course:
+ name: Render course preview
needs: yaml-check
runs-on: ubuntu-latest
container:
image: ${{needs.yaml-check.outputs.rendering_docker_image}}
- if: ${{needs.yaml-check.outputs.toggle_bookdown == 'yes'}}
steps:
- name: checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GH_PAT }}
- - name: Login as jhudsl-robot
+ - name: Login as github actions bot
run: |
- git config --system --add safe.directory "$GITHUB_WORKSPACE"
- git config --local user.email "itcrtrainingnetwork@gmail.com"
- git config --local user.name "jhudsl-robot"
+ 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'
# We want a fresh run of the renders each time
- name: Delete old docs/*
- run: rm -rf docs/*
+ run: |
+ 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 bookdown rendering
+ # Run Rmd rendering
- name: Run bookdown render
id: bookdown
+ if: ${{needs.yaml-check.outputs.toggle_website == 'rmd' }}
run: |
+ rm -rf docs/*
Rscript -e "bookdown::render_book('index.Rmd', output_format = 'all');
file.copy(from = 'assets', to = 'docs/assets', overwrite = TRUE)"
+ - name: Render quarto version
+ id: quarto
+ if: ${{needs.yaml-check.outputs.toggle_website == 'quarto' }}
+ run: Rscript -e "quarto::quarto_render('.')"
+
# This checks on the steps before it and makes sure that they completed.
# If the renders didn't complete we don't want to commit the file changes
- - name: Check on render step
- if: steps.bookdown.outcome != 'success'
+ - name: Check on Rmd render steps
+ if: ${{needs.yaml-check.outputs.toggle_website == 'rmd' }}
run: |
echo Bookdown status ${{steps.bookdown.outcome}}
- exit 1
+ if [${{steps.bookdown.outcome}} != 'success']; then
+ exit 1
+ fi
- # Commit the rendered bookdown files
- - name: Commit rendered bookdown files
+ - name: Check on quarto render steps
+ if: ${{needs.yaml-check.outputs.toggle_website == 'quarto' }}
+ run: |
+ echo Quarto status ${{steps.quarto.outcome}}
+ if [${{steps.quarto.outcome}} != 'success']; then
+ exit 1
+ fi
+
+ # Commit the rendered course files
+ - name: Commit rendered course files
env:
GH_PAT: ${{ secrets.GH_PAT }}
run: |
- git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY}
git add --force docs/*
- git commit -m 'Render bookdown' || echo "No changes to commit"
- git pull --allow-unrelated-histories --strategy-option=ours
- git push origin main || echo "No changes to push"
+ git commit -m 'Render course' || echo "No changes to commit"
+ git status docs/*
+ git push -u origin main || echo "No changes to push"
render-tocless:
name: Render TOC-less version for Leanpub or Coursera
- needs: [yaml-check]
+ needs: [yaml-check, render-course]
runs-on: ubuntu-latest
container:
image: ${{needs.yaml-check.outputs.rendering_docker_image}}
@@ -93,52 +113,68 @@ jobs:
steps:
- name: checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GH_PAT }}
- - name: Login as jhudsl-robot
+ - name: Login as github-actions bot
run: |
- git config --local user.email "itcrtrainingnetwork@gmail.com"
- git config --local user.name "jhudsl-robot"
+ 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
- id: tocless
+ - 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 remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY}
git add --force docs/no_toc*
git commit -m 'Render toc-less' || echo "No changes to commit"
- git pull --allow-unrelated-histories --strategy-option=ours
- git push origin main || echo "No changes to push"
+ git status docs/no_toc*
+ git push -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/ottrpal:main
+ image: jhudsl/ottrpal
if: ${{needs.yaml-check.outputs.toggle_leanpub == 'yes'}}
steps:
- name: checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GH_PAT }}
- - name: Login as jhudsl-robot
+ - name: Login as github actions bot
run: |
- git config --local user.email "itcrtrainingnetwork@gmail.com"
- git config --local user.name "jhudsl-robot"
+ 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
@@ -147,31 +183,40 @@ jobs:
rm -rf resources/chapt_screen_images
# Make new screenshots
- chapt_urls=$(Rscript --vanilla scripts/make_screenshots.R \
+ curl -o make_screenshots.R https://raw.githubusercontent.com/jhudsl/ottr-reports/main/scripts/make_screenshots.R
+ chapt_urls=$(Rscript --vanilla make_screenshots.R \
--git_pat ${{ secrets.GH_PAT }} \
--repo $GITHUB_REPOSITORY \
--output_dir resources/chapt_screen_images)
# We want a fresh run of the renders each time
- - name: Delete old manuscript/
- run: rm -rf manuscript/
+ - 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
- if: needs.yaml-check.outputs.toggle_quiz_check == 'no'
+ if: ${{ needs.yaml-check.outputs.toggle_quiz_check == 'no'}}
run: |
+ echo needs.yaml-check.outputs.toggle_make_book_txt == 'yes'
+ echo needs.yaml-check.outputs.toggle_make_book_txt
Rscript -e "ottrpal::bookdown_to_embed_leanpub(
render = FALSE, \
chapt_img_key = 'resources/chapt_screen_images/chapter_urls.tsv', \
- make_book_txt = TRUE, \
+ make_book_txt = as.logical('${{needs.yaml-check.outputs.make_book_txt == 'yes'}}'), \
quiz_dir = NULL)"
- name: Run ottrpal::bookdown_to_embed_leanpub
- if: needs.yaml-check.outputs.toggle_quiz_check == 'yes'
+ if: ${{ needs.yaml-check.outputs.toggle_quiz_check == 'yes'}}
run: |
Rscript -e "ottrpal::bookdown_to_embed_leanpub(
render = FALSE, \
chapt_img_key = 'resources/chapt_screen_images/chapter_urls.tsv', \
- make_book_txt = TRUE)"
+ make_book_txt = as.logical('${{needs.yaml-check.outputs.make_book_txt == 'yes'}}'))"
# Commit the rendered Leanpub files
- name: Commit rendered Leanpub files
@@ -179,13 +224,13 @@ jobs:
GH_PAT: ${{ secrets.GH_PAT }}
run: |
mkdir -p manuscript
- git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY}
git add --force manuscript/*
git add --force resources/*
git add --force docs/*
git commit -m 'Render Leanpub' || echo "No changes to commit"
- git pull --allow-unrelated-histories --strategy-option=ours
- git push origin main || echo "No changes to push"
+ 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
@@ -197,15 +242,19 @@ jobs:
steps:
- name: checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GH_PAT }}
- - name: Login as jhudsl-robot
+ - name: Login as github action
run: |
- git config --local user.email "itcrtrainingnetwork@gmail.com"
- git config --local user.name "jhudsl-robot"
+ 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
@@ -213,15 +262,18 @@ jobs:
id: coursera
run: Rscript -e "ottrpal::convert_coursera_quizzes()"
- # Commit the rendered bookdown files
+ # 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: |
- git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY}
+ if [ -d 'coursera_quizzes' ]; then
+ git add --force coursera_quizzes/*
+ fi
git add --force manuscript/*
git add --force resources/*
git add --force docs/*
git commit -m 'Render Coursera quizzes' || echo "No changes to commit"
- git pull --allow-unrelated-histories --strategy-option=ours
- git push origin main || echo "No changes to push"
+ git status
+ git push -u origin main || echo "No changes to push"
diff --git a/.github/workflows/transfer-rendered-files.yml b/.github/workflows/transfer-rendered-files.yml
index 3c3577e..dae4141 100644
--- a/.github/workflows/transfer-rendered-files.yml
+++ b/.github/workflows/transfer-rendered-files.yml
@@ -21,7 +21,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
# Use the yaml-env-action action.
- name: Load environment from YAML
@@ -42,21 +42,23 @@ jobs:
if: ${{needs.yaml-check.outputs.toggle_coursera == 'yes' || needs.yaml-check.outputs.toggle_leanpub == 'yes'}}
steps:
+ - name: Checkout from Bookdown Repo
+ uses: actions/checkout@v4
+ with:
+ path: bookdown
+ token: ${{ secrets.GH_PAT }}
+
- name: Run git repo check
id: git_repo_check
env:
GH_PAT: ${{ secrets.GH_PAT }}
run: |
- sudo apt-get install subversion
-
# What's the Quizzes repository's name?
QUIZ_REPO=$(echo ${GITHUB_REPOSITORY} | sed "s/_Bookdown/ /g" | sed "s/_Template/ /g" | awk '{print $1"_Quizzes"}')
echo $QUIZ_REPO
- # Get repo check script
- svn export --force https://github.com/${GITHUB_REPOSITORY}.git/branches/${GITHUB_REF#refs/heads/}/scripts/git_repo_check.R git_repo_check.R
-
# Run repo check script
+ curl -o git_repo_check.R https://raw.githubusercontent.com/jhudsl/ottr-reports/main/scripts/git_repo_check.R
results=$(Rscript --vanilla git_repo_check.R --repo "$GITHUB_REPOSITORY" --git_pat "$GH_PAT")
echo $QUIZ_REPO exists: $results
@@ -65,8 +67,9 @@ jobs:
- name: Checkout code from Leanpub repo
if: ${{ steps.git_repo_check.outputs.git_results == 'TRUE' }}
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
+ path: quizzes
repository: ${{ steps.git_repo_check.outputs.leanpub_repo }}
token: ${{ secrets.GH_PAT }}
@@ -76,17 +79,19 @@ jobs:
env:
GH_PAT: ${{ secrets.GH_PAT }}
run: |
- # Copy over images folder
- svn export --force https://github.com/${GITHUB_REPOSITORY}.git/branches/${GITHUB_REF#refs/heads/}/resources/chapt_screen_images resources/chapt_screen_images
+ # Copy over images folder (from bookdown to quizzes repo)
+ mkdir -p quizzes/resources/chapt_screen_images
+ cp bookdown/resources/chapt_screen_images/* quizzes/resources/chapt_screen_images
- # Copy over _bookdown.yml
- svn export --force https://github.com/${GITHUB_REPOSITORY}.git/branches/${GITHUB_REF#refs/heads/}/_bookdown.yml _bookdown.yml
+ # Copy over _bookdown.yml (from bookdown to quizzes repo)
+ cp bookdown/_bookdown.yml quizzes/_bookdown.yml
- name: Create PR with resources files
if: ${{ steps.git_repo_check.outputs.git_results == 'TRUE' }}
uses: peter-evans/create-pull-request@v3
id: cpr
with:
+ path: quizzes # Must create the PR in the Quizzes Repo
token: ${{ secrets.GH_PAT }}
commit-message: Copy files from Bookdown repository
signoff: false
From ba70430cbfde49f96ba83a080235d1e777c790bc Mon Sep 17 00:00:00 2001
From: cansavvy
Date: Tue, 17 Sep 2024 20:01:13 +0000
Subject: [PATCH 2/6] =?UTF-8?q?=F0=9F=94=84=20Created=20local=20'.github/I?=
=?UTF-8?q?SSUE=5FTEMPLATE/url-error.md'=20from=20remote=20'.github/ISSUE?=
=?UTF-8?q?=5FTEMPLATE/url-error.md'?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
release-
---
.github/ISSUE_TEMPLATE/url-error.md | 8 ++++++++
1 file changed, 8 insertions(+)
create mode 100644 .github/ISSUE_TEMPLATE/url-error.md
diff --git a/.github/ISSUE_TEMPLATE/url-error.md b/.github/ISSUE_TEMPLATE/url-error.md
new file mode 100644
index 0000000..fe13196
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/url-error.md
@@ -0,0 +1,8 @@
+---
+title: Broken URLs found in the course!
+labels: url-error
+---
+URL's in this course were just checked and some broken URLs were found.
+
+**Number of errors:** {{ env.ERROR_NUM }}
+**File where errors are:** [url checks file here]({{ env.FILE_URL }})
From f9a043727840c8caf0ceac7f10b3106063f5d032 Mon Sep 17 00:00:00 2001
From: cansavvy
Date: Tue, 17 Sep 2024 20:01:13 +0000
Subject: [PATCH 3/6] =?UTF-8?q?=F0=9F=94=84=20Synced=20local=20'style-sets?=
=?UTF-8?q?'=20with=20remote=20'style-sets'?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
release-
---
style-sets/data-trail/_output.yml | 3 ++-
style-sets/fhdasl/_output.yml | 3 ++-
style-sets/itcr/_output.yml | 3 ++-
3 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/style-sets/data-trail/_output.yml b/style-sets/data-trail/_output.yml
index bf0596b..571771a 100644
--- a/style-sets/data-trail/_output.yml
+++ b/style-sets/data-trail/_output.yml
@@ -10,7 +10,8 @@ bookdown::gitbook:
before: |
after: |
- This content was published with bookdown by:
+ This content was published with bookdown using
+ The OTTR Template by:
The Johns Hopkins Data Science Lab
Style adapted from: rstudio4edu-book (CC-BY 2.0)
diff --git a/style-sets/fhdasl/_output.yml b/style-sets/fhdasl/_output.yml
index d00716f..0a86496 100644
--- a/style-sets/fhdasl/_output.yml
+++ b/style-sets/fhdasl/_output.yml
@@ -11,7 +11,8 @@ bookdown::gitbook:
before: |
after: |
- This content was published with bookdown by:
+ This content was published with bookdown using
+ The OTTR Template by:
The Fred Hutch Data Science Lab
Style adapted from: rstudio4edu-book (CC-BY 2.0)
diff --git a/style-sets/itcr/_output.yml b/style-sets/itcr/_output.yml
index 87b4a01..9c1d813 100644
--- a/style-sets/itcr/_output.yml
+++ b/style-sets/itcr/_output.yml
@@ -10,7 +10,8 @@ bookdown::gitbook:
before: |
after: |
- This content was published with bookdown by:
+ This content was published with bookdown using
+ The OTTR Template by:
The Johns Hopkins Data Science Lab
Style adapted from: rstudio4edu-book (CC-BY 2.0)
From 4aed4c699613e3129845889427e68c14593c2637 Mon Sep 17 00:00:00 2001
From: cansavvy
Date: Tue, 17 Sep 2024 20:01:13 +0000
Subject: [PATCH 4/6] =?UTF-8?q?=F0=9F=94=84=20Synced=20local=20'assets/box?=
=?UTF-8?q?=5Fimages/'=20with=20remote=20'assets/box=5Fimages/'?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
release-
---
assets/box_images/under_construction.png | Bin 0 -> 27647 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 assets/box_images/under_construction.png
diff --git a/assets/box_images/under_construction.png b/assets/box_images/under_construction.png
new file mode 100644
index 0000000000000000000000000000000000000000..a67bd5c1442387153aec259183a864b00d63b3de
GIT binary patch
literal 27647
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
Date: Tue, 17 Sep 2024 20:01:13 +0000
Subject: [PATCH 5/6] =?UTF-8?q?=F0=9F=94=84=20Created=20local=20'resources?=
=?UTF-8?q?/exclude=5Ffiles.txt'=20from=20remote=20'resources/exclude=5Ffi?=
=?UTF-8?q?les.txt'?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
release-
---
resources/exclude_files.txt | 8 ++++++++
1 file changed, 8 insertions(+)
create mode 100644 resources/exclude_files.txt
diff --git a/resources/exclude_files.txt b/resources/exclude_files.txt
new file mode 100644
index 0000000..5525a40
--- /dev/null
+++ b/resources/exclude_files.txt
@@ -0,0 +1,8 @@
+About.Rmd
+docs/*
+style-sets/*
+manuscript/*
+CONTRIBUTING.md
+LICENSE.md
+code_of_conduct.md
+README.md
From 379334d07fabf546ce6c9739784e06f54d9b8005 Mon Sep 17 00:00:00 2001
From: cansavvy
Date: Tue, 17 Sep 2024 20:01:13 +0000
Subject: [PATCH 6/6] =?UTF-8?q?=F0=9F=94=84=20Synced=20local=20'config=5Fa?=
=?UTF-8?q?utomation.yml'=20with=20remote=20'config=5Fautomation.yml'?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
release-
---
config_automation.yml | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/config_automation.yml b/config_automation.yml
index 424df08..460f418 100644
--- a/config_automation.yml
+++ b/config_automation.yml
@@ -12,13 +12,19 @@ spell-check: yes
style-code: yes
# Test build the docker image if any docker-relevant files have been changed
docker-test: no
+# Should URLs be tested periodically?
+url-check-periodically: yes
##### Renderings run upon merge to main branch #####
# Rendering each platform's content
-render-bookdown: yes
-render-leanpub: no
+render-website: rmd
+render-leanpub: yes
render-coursera: no
+## 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: yes
+
# What docker image should be used for rendering?
# The default is jhudsl/base_ottr:main
rendering-docker-image: 'jhudsl/base_ottr:main'