diff --git a/.github/workflows/check-url.yml b/.github/workflows/check-url.yml new file mode 100644 index 00000000..090f12f6 --- /dev/null +++ b/.github/workflows/check-url.yml @@ -0,0 +1,117 @@ +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 }} + + # Commit file + - name: Commit tocless bookdown files + if: ${{ steps.check-report.outputs.error_num >= 1 }} + env: + GH_PAT: ${{ secrets.GH_PAT }} + run: | + git add --force check_reports/url_checks.tsv + git commit -m 'Add spell check file' || echo "No changes to commit" + git push --set-upstream origin preview-spell-error || echo echo branch exists remotely + + - 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 afd658af..faa83ccd 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 b9bb17ac..a137bc48 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,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 @@ -31,23 +31,29 @@ 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 }}" toggle_quiz_check: "${{ env.CHECK_QUIZZES }}" + toggle_feedback_link: "${{ env.FEEDBACK_LINK }}" + toggle_md_linter: "${{ env.MARKDOWN_LINTER }}" + toggle_readability: "${{ env.READABILITY_REPORT }}" toggle_render_preview: "${{ env.RENDER_PREVIEW }}" + toggle_student_guide: "${{ env.RENDER_STUDENT_GUIDE }}" rendering_docker_image: "${{ env.RENDERING_DOCKER_IMAGE }}" - render_student_guide: "${{ env.RENDER_STUDENT_GUIDE }}" ########################## Make the error reports ############################## spell-check: @@ -58,7 +64,9 @@ jobs: with: check_type: spelling error_min: 3 - gh_pat: secrets.GH_PAT + branch_name: ${GITHUB_HEAD_REF} + secrets: + gh_pat: ${{ secrets.GH_PAT }} url-check: name: Check URLs @@ -68,7 +76,9 @@ jobs: with: check_type: urls error_min: 0 - gh_pat: secrets.GH_PAT + branch_name: ${GITHUB_HEAD_REF} + secrets: + gh_pat: ${{ secrets.GH_PAT }} quiz-check: name: Check quiz formatting @@ -78,7 +88,9 @@ jobs: with: check_type: quiz_format error_min: 0 - gh_pat: secrets.GH_PAT + branch_name: ${GITHUB_HEAD_REF} + secrets: + gh_pat: ${{ secrets.GH_PAT }} ############################# Style the code ################################### style-code: @@ -91,20 +103,40 @@ 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" +############################# Readability Report ################################### + + readability-report: + name: Readability report + needs: yaml-check + runs-on: ubuntu-latest + if: ${{needs.yaml-check.outputs.toggle_readability == 'yes'}} + + steps: + - name: Checkout repo + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Readability report + uses: Rebilly/lexi@v2 + with: + github-token: ${{ secrets.GH_PAT }} + glob: '**/*.md' + ############################# Render Preview ################################### render-preview: @@ -117,16 +149,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 @@ -134,16 +166,32 @@ jobs: git merge -s recursive --strategy-option=theirs origin/${{ github.head_ref }} --allow-unrelated-histories shell: bash + # Make sure the link for AnVIL feedback is prepopulated for the specific course + - name: Set up feedback link + id: feedback + if: ${{needs.yaml-check.outputs.toggle_feedback_link == 'yes'}} + run: | + bash scripts/AnVIL_Feedback_Script.sh + git add _output.yml + git commit -m 'Set up feedback link' || echo "No changes to commit" + # 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 quarto rendering + - name: Render quarto version + id: quarto + if: ${{needs.yaml-check.outputs.toggle_website == 'quarto' }} + run: Rscript -e "quarto::quarto_render('.')" + # Render a student guide if specified. This is a bit clunky because # Bookdown does not work well if the files aren't named as such in the # root directory - name: Run student guide render - if: ${{needs.yaml-check.outputs.render_student_guide == 'yes'}} + if: ${{needs.yaml-check.outputs.toggle_student_guide == 'yes'}} id: student_guide run: | mkdir tmp1 @@ -153,22 +201,29 @@ jobs: mv _bookdown.yml _output.yml student-guide mv tmp1/_bookdown.yml tmp1/_output.yml . rm -r tmp1 - - # 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()" + git add student-guide/* + git commit -m 'Create student guide' || echo "No changes to commit" # 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 @@ -179,7 +234,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 @@ -196,11 +251,11 @@ jobs: run: | course_name=$(head -n 1 student-guide/_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") - student_docx_link=$(echo "https://github.com/$GITHUB_REPOSITORY/raw/preview-${{ github.event.pull_request.number }}/student-guide/$course_name.docx") + student_guide=$(echo "https://github.com/$GITHUB_REPOSITORY/raw/preview-${{ github.event.pull_request.number }}/student-guide/Student_Guide.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 "student_docx_link=$student_docx_link" >> $GITHUB_OUTPUT + echo "student_guide=$student_guide" >> $GITHUB_OUTPUT echo "time=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT echo "commit_id=$GITHUB_SHA" >> $GITHUB_OUTPUT echo ${{steps.commit.outputs.changes}} @@ -213,11 +268,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 the Student Guide .docx file](${{ steps.build-components.outputs.student_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 Student Guide [.docx file](${{ steps.build-components.outputs.student_guide }}) - _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 4ebcbdc7..36a4cae0 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,10 @@ on: push: branches: [ main, staging ] paths: - - '**.Rmd' + - '*.qmd' + - '*.Rmd' - assets/* + - quizzes/* jobs: @@ -18,7 +20,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,49 +28,68 @@ 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 }}" + toggle_feedback_link: "${{ env.FEEDBACK_LINK }}" + toggle_student_guide: "${{ env.RENDER_STUDENT_GUIDE }}" 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 + + # Make sure the link for AnVIL feedback is prepopulated for the specific course + - name: Set up feedback link + if: ${{needs.yaml-check.outputs.toggle_feedback_link == 'yes'}} + run: | + bash scripts/AnVIL_Feedback_Script.sh + git add _output.yml + git commit -m 'Set up feedback link' || echo "No changes to commit" - # 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('.')" # Render a student guide if specified. This is a bit clunky because # Bookdown does not work well if the files aren't named as such in the # root directory - name: Run student guide render - if: ${{needs.yaml-check.outputs.render_student_guide == 'yes'}} + if: ${{needs.yaml-check.outputs.toggle_student_guide == 'yes'}} id: student_guide run: | mkdir tmp1 @@ -78,29 +99,40 @@ jobs: mv _bookdown.yml _output.yml student-guide mv tmp1/_bookdown.yml tmp1/_output.yml . rm -r tmp1 + git add student-guide/* + git commit -m 'Create student guide' || echo "No changes to commit" # 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 + + - 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 bookdown files - - name: Commit rendered bookdown files + # 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 --force -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}} @@ -108,54 +140,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 --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' + 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 --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/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 --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' + 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 @@ -164,31 +210,41 @@ 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) + rm make_screenshots.R # 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 @@ -196,13 +252,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 @@ -214,16 +270,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 --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' + 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 @@ -231,15 +290,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 --force -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 3c3577ee..dae41411 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 diff --git a/01_Intro.Rmd b/01_Intro.Rmd index 71e1b066..857b4f4f 100644 --- a/01_Intro.Rmd +++ b/01_Intro.Rmd @@ -49,7 +49,7 @@ This book is targeted towards people who are teaching a course or workshop on An - **Instructor Setup** -- Step-by-step instructions to create your first accounts on AnVIL - **Content Preparation** -- Instructions on using premade content, along with additional tools to help you customize or create your own class Workspace - **Running the Class** -- Step-by-step instructions to help you add students into a class on AnVIL, along with best practices for shutting down your course cleanly and minimizing costs -- **Cost Management** -- Explanations of the types of costs you and your students may incure, along with advice on how to minimize them. +- **Cost Management** -- Explanations of the types of costs you and your students may incur, along with advice on how to minimize them. - **Student Instructions** -- Step-by-step instructions for students using AnVIL in your class, to guide them through common tasks. ## Goals for This Guide diff --git a/02_Instructor_Setup.Rmd b/02_Instructor_Setup.Rmd index d87ee843..42415013 100644 --- a/02_Instructor_Setup.Rmd +++ b/02_Instructor_Setup.Rmd @@ -234,7 +234,7 @@ You can add individual users to a Billing Project, or you can add a Terra Group, ### Find Group email {#group-email} -If you want to add a Terra Group (such as your "instructor" Group) to your Billing Project, you can find the Group email address on the Group Managment page: +If you want to add a Terra Group (such as your "instructor" Group) to your Billing Project, you can find the Group email address on the Group Management page: ```{r, echo = FALSE, results='asis'} cow::borrow_chapter( @@ -250,7 +250,7 @@ Now that you have the Group email address, you can add the group to your Billing :::{.notice} Users can be added to a Billing Project as either **Owners** or **Users**. Owners can add and remove users from the Billing Project (including other Owners!). This means Billing Project Owners have a great deal of power over how money can be spent. -It’s often a good idea to have at least one other Owner of a Billing Project in order to avoid getting locked out, in case the original Owner leaves or loses access to their account. But you should exercise caution when selecing Billing Project Owners. +It’s often a good idea to have at least one other Owner of a Billing Project in order to avoid getting locked out, in case the original Owner leaves or loses access to their account. But you should exercise caution when selecting Billing Project Owners. When teaching with a team, it may make sense to add only those most comfortable with Terra and/or most involved in Terra administration as Owners, and to add everyone else as Users. This can be done by adding the Owners individually as Owners, and then adding the Instructor Group as User. ::: diff --git a/04_Running_The_Class.Rmd b/04_Running_The_Class.Rmd index 23d86ec6..41992561 100644 --- a/04_Running_The_Class.Rmd +++ b/04_Running_The_Class.Rmd @@ -192,7 +192,7 @@ Now that you have added students to the Group, you can easily share Terra resour First, you will need to give your Student Group access to any Workspaces that they will need. -If you are **using a Public Workspace** (most pre-made content uses Public Workspaces), **you can skip this step** - Public Workspaces are automatically available to everyone on AnVIL. +If you are **using a Public Workspace** (some content uses Public Workspaces), **you can skip this step** - Public Workspaces are automatically available to everyone on AnVIL. If you have **Workspaces of your own** that your students will need to access, you should **add the Student Group to your Workspace(s) as a *Reader***. @@ -279,9 +279,9 @@ If your students will continue using the Workspace in a subsequent class or for If you are using one of the premade courses, we would appreciate feedback! If you are willing to ask your students to provide feedback, please direct them to this form: -https://forms.gle/AK12iVXTjsB7yCUUA +https://forms.gle/6X77RKnbKPVG5qMn6 -Responses are anonymous, unless the responder chooses to provide contact information for follow up. +Responses are anonymous. We would also greatly appreciate feedback from you as the instructor! Comments can be submitted through the same form, or if you are comfortable on GitHub you can open an issue in the corresponding repository. diff --git a/99-student_guide.Rmd b/99-student_guide.Rmd new file mode 100644 index 00000000..d6fff4a9 --- /dev/null +++ b/99-student_guide.Rmd @@ -0,0 +1,10 @@ + +# Student Guide + +## Activity One + +You might want to create a student guide that contains a different subset of Rmd files from your book, or renders to a different output format (e.g. word document). You can specify the output and Rmd files that will be used for the student guide using the `_output.yml` and `_bookdown.yml` files in the student-guide directory. + +## Activity Two + +Steps of the guide could go here. \ No newline at end of file diff --git a/_output.yml b/_output.yml index 2f4fe5a6..a3a71459 100644 --- a/_output.yml +++ b/_output.yml @@ -2,7 +2,6 @@ bookdown::gitbook: # When using multiple css files, the default file path will be the first one # css: [assets/style.css, assets/AnVIL_style/anvil.css] includes: - in_header: GA_Script.html before_body: assets/AnVIL_style/big-image_anvil.html after_body: assets/AnVIL_style/footer.html highlight: tango @@ -16,5 +15,6 @@ bookdown::gitbook:
The Johns Hopkins Data Science Lab
Style adapted from: rstudio4edu-book (CC-BY 2.0)
- - + + +# Note: Do not edit the feedback link in this file. This is automatically edited through the render-preview and render-bookdown workflows. \ No newline at end of file diff --git a/assets/AnVIL_style/logo-anvil-img.png b/assets/AnVIL_style/logo-anvil-img.png new file mode 100644 index 00000000..b5e3c394 Binary files /dev/null and b/assets/AnVIL_style/logo-anvil-img.png differ diff --git a/assets/box_images/under_construction.png b/assets/box_images/under_construction.png new file mode 100644 index 00000000..a67bd5c1 Binary files /dev/null and b/assets/box_images/under_construction.png differ diff --git a/assets/style.css b/assets/style.css index 21ed0c65..748acad3 100755 --- a/assets/style.css +++ b/assets/style.css @@ -250,7 +250,7 @@ li.appendix span, li.part span { /* for TOC part names */ /* Sidebar formating --------------------------------------------*/ /* from r-pkgs.org*/ -div.notice, div.warning, div.github, div.dictionary, div.reflection { +div.notice, div.warning, div.github, div.dictionary, div.reflection, div.wip { padding: 1em; margin: 1em 0; padding-left: 100px; @@ -304,6 +304,14 @@ div.reflection{ background-image: url("../assets/box_images/thinking_face.png"); } +div.wip{ + border: 4px #000000; + border-style: solid; + background-size: 70px; + background-position: 15px center; + background-color: #f4d03f; + background-image: url("../assets/box_images/under_construction.png"); +} /* .book .book-body .page-wrapper .page-inner section.normal is needed to override the styles produced by gitbook, which are ridiculously diff --git a/config_automation.yml b/config_automation.yml index 37b29f23..5819e564 100644 --- a/config_automation.yml +++ b/config_automation.yml @@ -7,18 +7,30 @@ url-checker: yes # Render preview of content with changes (Rmd's and md's are checked) render-preview: yes # Spell check Rmds and quizzes -spell-check: no +spell-check: yes # Style any R code style-code: yes +# Would you like your markdown files to be checked for formatting +markdown-linter: yes +# Would you like a readability report on your markdowns? +readability-report: 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-website: rmd render-leanpub: no render-coursera: no +##### Rendering of student guide (if applicable) +render-student-guide: yes + +##### Auto-generate a feedback link for the AnVIL Feedback Form: https://docs.google.com/forms/d/e/1FAIpQLScrDVb_utm55pmb_SHx-RgELTEbCCWdLea0T3IzS0Oj00GE4w/viewform +feedback-link: yes + # What docker image should be used for rendering? -# The default is jhudsl/course_template:main +# The default is jhudsl/base_ottr:main rendering-docker-image: 'jhudsl/base_ottr:main' diff --git a/index.Rmd b/index.Rmd index 5c086224..dfe1b1c2 100644 --- a/index.Rmd +++ b/index.Rmd @@ -24,7 +24,7 @@ This book is part of a series of books for the Genomic Data Science Analysis, Vi ### Skills Level {-} -Please choose the closest matching persona from the lefthand menu. +Please choose the closest matching persona from the left-hand menu. ::: {.notice} _Genetics_ diff --git a/resources/dictionary.txt b/resources/dictionary.txt index e8a74449..66b775a7 100644 --- a/resources/dictionary.txt +++ b/resources/dictionary.txt @@ -1,29 +1,62 @@ -AnVIL -AnVILPublish -AnVILPublishSkeleton -bioinformatics -bmr -dropdown -Gmail -GSuite -https -ITCR -itcrtraining -ITN -jhu -Jupyter -ottrpal -Markua -NCI -NHGRI -NHGRI's -premade -preprint -programmatically +AnVIL +AnVILPublish +AnVILPublishSkeleton +BiocManager +bioinformatics +BIPOC +Bloomberg +bmr +callout +Callout +colData +CoV +customizations +dex +dexamethasone +dropdown +GDSCN +github +Glimma +glimmaMDS +Gmail +GSuite +https +impactful +Inclusivity +ITCR +itcrtraining +ITN +jhu +Jupyter +limma +Markua +MDS +mentorship +NCI +NHGRI +NHGRI's +Onboarding +OTTR +ottrpal +ottrpal +plotMDS +precompiled +premade +preprint +programmatically +px +reproducibility +Rmd RStudio -terra -UE5 -walkthrough -Workspace -Workspaces -www +TAs +terra +timeframe +UE5 +underserved +walkthrough +Workspace +Workspace's +Workspaces +www +fyi +GCP diff --git a/resources/exclude_files.txt b/resources/exclude_files.txt new file mode 100644 index 00000000..5525a403 --- /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 diff --git a/scripts/AnVIL_Feedback_Script.sh b/scripts/AnVIL_Feedback_Script.sh new file mode 100644 index 00000000..5269b761 --- /dev/null +++ b/scripts/AnVIL_Feedback_Script.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# Extract the title from the YAML front matter of index.Rmd +title=$(awk '/^title:/{gsub(/^title: /,""); print}' "index.Rmd" | grep -v '^$') + +# Remove the outside quotation marks +title=$(sed -e 's/^"//' -e 's/"$//' <<< "$title") + +# Replace spaces with '+' +title=${title// /+} + +# Base url for the AnVIL Google Form +url_base="https://docs.google.com/forms/d/e/1FAIpQLScrDVb_utm55pmb_SHx-RgELTEbCCWdLea0T3IzS0Oj00GE4w/viewform?usp=pp_url&entry.1565230805=" + +# Replace the url inside _output.yml +perl -i -pe 's|https://docs.google.com/forms/d/e/1FAIpQLScrDVb_utm55pmb_SHx-RgELTEbCCWdLea0T3IzS0Oj00GE4w/viewform\?usp=pp_url&entry\.1565230805=.*"> Click|'${url_base}${title}'"> Click|g' _output.yml + +# Print for Github actions +echo "The feedback link is: ${url_base}${title}" \ No newline at end of file diff --git a/student-guide/_bookdown.yml b/student-guide/_bookdown.yml new file mode 100644 index 00000000..96a751df --- /dev/null +++ b/student-guide/_bookdown.yml @@ -0,0 +1,12 @@ +book_filename: "Student_Guide" +chapter_name: "Chapter " +repo: https://github.com/jhudsl/AnVIL_Book_Instructor_Guide/ +rmd_files: ["index.Rmd", + "99-student_guide.Rmd"] +new_session: yes +bibliography: [book.bib] +delete_merged_file: true +language: + ui: + chapter_name: "Chapter" +output_dir: "student-guide" diff --git a/student-guide/_output.yml b/student-guide/_output.yml new file mode 100644 index 00000000..03bf219d --- /dev/null +++ b/student-guide/_output.yml @@ -0,0 +1,2 @@ +bookdown::word_document2: + toc: true \ No newline at end of file diff --git a/style-sets/AnVIL/_output.yml b/style-sets/AnVIL/_output.yml index 9b76c2c1..f1d6e6a1 100644 --- a/style-sets/AnVIL/_output.yml +++ b/style-sets/AnVIL/_output.yml @@ -2,6 +2,7 @@ bookdown::gitbook: # When using multiple css files, the default file path will be the first one # css: [assets/style.css, assets/AnVIL_style/anvil.css] includes: + in_header: GA_Script.html before_body: assets/AnVIL_style/big-image_anvil.html after_body: assets/AnVIL_style/footer.html highlight: tango @@ -15,4 +16,6 @@ bookdown::gitbook:The Fred Hutch Data Science Lab
Style adapted from: rstudio4edu-book (CC-BY 2.0)
- + + +# Note: Do not edit the feedback link in this file. This is automatically edited through the render-preview and render-bookdown workflows. You can deactivate this behavior in config_automation.yml. \ No newline at end of file diff --git a/style-sets/AnVIL_FH/_output.yml b/style-sets/AnVIL_FH/_output.yml index 9b76c2c1..7cba311e 100644 --- a/style-sets/AnVIL_FH/_output.yml +++ b/style-sets/AnVIL_FH/_output.yml @@ -15,4 +15,6 @@ bookdown::gitbook:The Fred Hutch Data Science Lab
Style adapted from: rstudio4edu-book (CC-BY 2.0)
- + + +# Note: Do not edit the feedback link in this file. This is automatically edited through the render-preview and render-bookdown workflows. \ No newline at end of file diff --git a/style-sets/AnVIL_JHU/_output.yml b/style-sets/AnVIL_JHU/_output.yml index ba187ea7..a3a71459 100644 --- a/style-sets/AnVIL_JHU/_output.yml +++ b/style-sets/AnVIL_JHU/_output.yml @@ -15,5 +15,6 @@ bookdown::gitbook:The Johns Hopkins Data Science Lab
Style adapted from: rstudio4edu-book (CC-BY 2.0)
- - \ No newline at end of file + + +# Note: Do not edit the feedback link in this file. This is automatically edited through the render-preview and render-bookdown workflows. \ No newline at end of file diff --git a/style-sets/GDSCN/_output.yml b/style-sets/GDSCN/_output.yml index 338cd835..4156fd74 100644 --- a/style-sets/GDSCN/_output.yml +++ b/style-sets/GDSCN/_output.yml @@ -15,5 +15,6 @@ bookdown::gitbook:The Fred Hutch Data Science Lab
Style adapted from: rstudio4edu-book (CC-BY 2.0)
- - \ No newline at end of file + + +# Note: Do not edit the feedback link in this file. This is automatically edited through the render-preview and render-bookdown workflows. \ No newline at end of file diff --git a/style-sets/GDSCN_JHU/_output.yml b/style-sets/GDSCN_JHU/_output.yml index cb0d27f8..2bbb202b 100644 --- a/style-sets/GDSCN_JHU/_output.yml +++ b/style-sets/GDSCN_JHU/_output.yml @@ -15,5 +15,6 @@ bookdown::gitbook:The Johns Hopkins Data Science Lab
Style adapted from: rstudio4edu-book (CC-BY 2.0)
- - \ No newline at end of file + + +# Note: Do not edit the feedback link in this file. This is automatically edited through the render-preview and render-bookdown workflows. \ No newline at end of file diff --git a/style-sets/fhdasl/_output.yml b/style-sets/fhdasl/_output.yml index d00716f9..0a864962 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
+