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 7d8cf01..faa83cc 100644 --- a/.github/workflows/delete-preview.yml +++ b/.github/workflows/delete-preview.yml @@ -1,3 +1,5 @@ +# Candace Savonen Apr 2021 + name: Delete Preview on: diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml new file mode 100644 index 0000000..51a8302 --- /dev/null +++ b/.github/workflows/docker-build.yml @@ -0,0 +1,79 @@ +# Candace Savonen Apr 2021 + +name: Build Docker + +on: + workflow_dispatch: + inputs: + dockerhubpush: + description: 'Push to Dockerhub?' + required: true + default: 'false' + tag: + description: 'What tag to use?' + required: true + default: 'none' +jobs: + build-docker: + name: Build Docker image + runs-on: ubuntu-latest + + steps: + - name: checkout repo + uses: actions/checkout@v4 + + - 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' + + - name: Don't re-test if this is a sync branch + run: | + echo This was tested on OTTR_Template no need to re-run + + # Set up Docker build + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + # Setup layer cache + - name: Cache Docker layers + uses: actions/cache@v2 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + + # Set up Docker build + - name: Set up Docker Build + if: ${{ github.head_ref != 'repo-sync/OTTR_Template/default' }} + uses: docker/setup-buildx-action@v1 + + - name: Get token + run: echo ${{ secrets.GH_PAT }} > docker/git_token.txt + + # Build docker image + - name: Build Docker image + uses: docker/build-push-action@v2 + with: + push: false + load: true + context: docker + file: docker/Dockerfile + tags: jhudsl/base_ottr + + # Login to Dockerhub + - name: Login to DockerHub + if: ${{ github.event.inputs.dockerhubpush != 'false' }} + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + # Push the Docker image if set to true from a manual trigger + - name: Push Docker image if manual trigger set to true + if: ${{ github.event.inputs.dockerhubpush != 'false' }} + run: | + docker tag jhudsl/base_ottr:latest jhudsl/base_ottr:$github.event.inputs.tag + docker push jhudsl/base_ottr:$github.event.inputs.tag diff --git a/.github/workflows/docker-test.yml b/.github/workflows/docker-test.yml new file mode 100644 index 0000000..5775f41 --- /dev/null +++ b/.github/workflows/docker-test.yml @@ -0,0 +1,91 @@ + +# Candace Savonen Apr 2022 + +name: Build Docker Image + +on: + workflow_dispatch: + inputs: + directory: + required: true + type: string + tag: + required: true + type: string + dockerhubpush: + description: 'Push to Dockerhub?' + required: false + default: 'false' + type: string + secrets: + GH_PAT: + required: true + DOCKERHUB_USERNAME: + required: false + DOCKERHUB_TOKEN: + required: false + +jobs: + + build-docker: + name: Build Docker image + runs-on: ubuntu-latest + + steps: + - name: checkout repo + uses: actions/checkout@v4 + + - name: Verify Dockerfiles changed? + uses: tj-actions/verify-changed-files@v17 + id: verify-changed-files + with: + files: | + ${{ inputs.directory }}/Dockerfile + ${{ inputs.directory }}/github_package_list.tsv + + - 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' + + # Set up Docker build + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + # Setup layer cache + - name: Cache Docker layers + uses: actions/cache@v2 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + + - name: Set up Docker Build + uses: docker/setup-buildx-action@v1 + + - name: Get token + run: echo ${{ secrets.GH_PAT }} > ${{ inputs.directory }}/git_token.txt + + - name: Build Docker image + uses: docker/build-push-action@v2 + with: + push: false + load: true + context: ${{ inputs.directory }} + file: ${{ inputs.directory }}/Dockerfile + tags: ${{ inputs.tag }} + + # Login to Dockerhub + - name: Login to DockerHub + if: ${{ inputs.dockerhubpush != 'false' }} + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + # Push the Docker image if set to true from a manual trigger + - name: Push Docker image if manual trigger set to true + if: ${{ inputs.dockerhubpush != 'false' }} + run: docker push ${{ inputs.tag }} diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 5b9ee7b..5cd835e 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -1,3 +1,6 @@ +# Candace Savonen 2021 +# Updated May 2024 + name: Pull Request on: @@ -5,6 +8,7 @@ on: branches: [ main, staging ] jobs: + yaml-check: name: Load user automation choices runs-on: ubuntu-latest @@ -13,6 +17,7 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 + token: ${{ secrets.GH_PAT }} # Use the yaml-env-action action. - name: Load environment from YAML @@ -34,13 +39,16 @@ jobs: 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: - public_repository: "${{ steps.public_repository.outputs.public }}" + 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_render_preview: "${{ env.RENDER_PREVIEW }}" rendering_docker_image: "${{ env.RENDERING_DOCKER_IMAGE }}" @@ -54,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 @@ -64,6 +73,45 @@ jobs: check_type: urls error_min: 0 gh_pat: secrets.GH_PAT + branch_name: ${GITHUB_HEAD_REF} + + quiz-check: + name: Check quiz formatting + if: ${{needs.yaml-check.outputs.toggle_quiz_check == 'yes'}} + needs: yaml-check + uses: jhudsl/ottr-reports/.github/workflows/report-maker.yml@main + with: + check_type: quiz_format + error_min: 0 + gh_pat: secrets.GH_PAT + branch_name: ${GITHUB_HEAD_REF} + +############################# Style the code ################################### + style-code: + name: Style code + needs: yaml-check + runs-on: ubuntu-latest + if: ${{needs.yaml-check.outputs.toggle_style_code == 'yes'}} + container: + image: jhudsl/base_ottr:main + + steps: + - name: Checkout files + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Run styler + 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 \*md + git commit -m 'Style *mds' || echo "No changes to commit" + git push origin || echo "No changes to commit" + +############################# Render Preview ################################### render-preview: name: Render preview @@ -92,37 +140,54 @@ jobs: git merge -s recursive --strategy-option=theirs origin/${{ github.head_ref }} --allow-unrelated-histories shell: bash - # Now we want to render all the html files from the qmd files - - name: Run render html - id: site - run: quarto render + # 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('.')" # 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.site.outcome != 'success' + - name: Check on Rmd render steps + if: ${{needs.yaml-check.outputs.toggle_website == 'rmd' }} run: | - echo site status ${{steps.site.outcome}} - exit 1 + echo Bookdown status ${{steps.bookdown.outcome}} + 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 website files - - name: Commit rendered website files to preview branch + # Commit the rendered bookdown files + - name: Commit rendered bookdown files to preview branch id: commit run: | branch_name='preview-${{ github.event.pull_request.number }}' - git diff origin/main -- '*.html' >/dev/null && changes=true || changes=false + git diff origin/main -- docs >/dev/null && changes=true || changes=false 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 - name: Find Comment - uses: peter-evans/find-comment@v1 + uses: peter-evans/find-comment@v2 id: fc with: issue-number: ${{ github.event.pull_request.number }} @@ -132,33 +197,37 @@ jobs: - name: Build components of the comment id: build-components run: | - course_name=$(head -n 1 _website.yml | cut -d'"' -f 2| tr " " "-") - website_link=$(echo "https://htmlpreview.github.io/?https://raw.githubusercontent.com/$GITHUB_REPOSITORY/preview-${{ github.event.pull_request.number }}/docs/index.html") - docs_link=$(echo "https://github.com/$GITHUB_REPOSITORY/raw/preview-${{ github.event.pull_request.number }}/website-preview.zip") - echo "docs_link=$docs_link" >> $GITHUB_OUTPUT - echo "website_link=$website_link" >> $GITHUB_OUTPUT + 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") + 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 "docx_link=$docx_link" >> $GITHUB_OUTPUT echo "time=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT echo "commit_id=$GITHUB_SHA" >> $GITHUB_OUTPUT echo ${{steps.commit.outputs.changes}} - name: Create or update comment if: steps.commit.outputs.changes == 'true' - uses: peter-evans/create-or-update-comment@v1 + uses: peter-evans/create-or-update-comment@v2 with: comment-id: ${{ steps.fc.outputs.comment-id }} issue-number: ${{ github.event.pull_request.number }} body: | - :eyes: [Quick Preview of Website](${{ steps.build-components.outputs.website_link }}) - Click for a preview of recent changes. - :file_folder: [Download Full Website](${{ steps.build-components.outputs.docs_link }}) - Download complete Zip file of the website. - - The Quick Preview may not display all HTML features accurately, but it provides a basic overview. + Re-rendered previews from the latest commit: + - :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 }}) + + \* 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: No comment if no changes + - name: Comment if no changes if: steps.commit.outputs.changes == 'false' - uses: peter-evans/create-or-update-comment@v1 + uses: peter-evans/create-or-update-comment@v2 with: comment-id: ${{ steps.fc.outputs.comment-id }} issue-number: ${{ github.event.pull_request.number }} diff --git a/.github/workflows/render-all.yml b/.github/workflows/render-all.yml index 137040e..c5e2bc5 100644 --- a/.github/workflows/render-all.yml +++ b/.github/workflows/render-all.yml @@ -1,15 +1,21 @@ -name: Render All Output +# Candace Savonen 2021 +# Updated May 2024 + +name: Render all output courses on: workflow_dispatch: push: - branches: [ main ] + branches: [ main, staging ] paths: - - '**/*.qmd' + - '**md$' + - assets/* + - quizzes/* jobs: + yaml-check: - name: Load User Automation Choices + name: Load user automation choices runs-on: ubuntu-latest steps: - name: Checkout @@ -21,35 +27,17 @@ jobs: with: 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 }}" - clean-docs: - name: Clean docs folder + render-course: + name: Render course preview needs: yaml-check runs-on: ubuntu-latest - steps: - - name: Checkout Repository - uses: actions/checkout@v4 - - - name: Delete all files inside docs - run: | - rm -rf docs/* - mkdir -p docs - - - name: Commit changes - run: | - git config --global user.name 'github-actions[bot]' - git config --global user.email 'github-actions[bot]@users.noreply.github.com' - git add docs/ - git commit -m "Clean docs directory" || echo "No changes to commit" - git push - - render-quarto-book: - name: Render Quarto Book - needs: [yaml-check, clean-docs] - runs-on: ubuntu-latest container: image: ${{needs.yaml-check.outputs.rendering_docker_image}} @@ -65,37 +53,57 @@ jobs: 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 ${{needs.yaml-check.outputs.rendering_docker_image}} - # Run quarto::quarto_render() - - name: Run quarto render - id: quarto-render + # We want a fresh run of the renders each time + - name: Delete old docs/* + run: rm -rf docs/* + + # Run Rmd rendering + - name: Run bookdown render + id: bookdown + if: ${{needs.yaml-check.outputs.toggle_website == 'rmd' }} run: | - Rscript -e "quarto::quarto_render()" + 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.quarto-render.outcome != 'success' + - name: Check on Rmd render steps + if: ${{needs.yaml-check.outputs.toggle_website == 'rmd' }} + run: | + echo Bookdown status ${{steps.bookdown.outcome}} + 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 Render status ${{steps.quarto-render.outcome}} - exit 1 + echo Quarto status ${{steps.quarto.outcome}} + if [${{steps.quarto.outcome}} != 'success']; then + exit 1 + fi - # Commit the rendered files inside docs/ - - name: Commit rendered 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 fetch origin git add --force docs/* - git commit -m 'Render Quarto Book' || echo "No changes to commit" - git pull --allow-unrelated-histories --strategy-option=ours + git commit -m 'Render course' || echo "No changes to commit" + git pull --rebase --allow-unrelated-histories --strategy-option=ours git push -u origin main || echo "No changes to push" render-tocless: - name: Render TOC-less Quarto Book - needs: [yaml-check, clean-docs, render-quarto-book] + name: Render TOC-less version for Leanpub or Coursera + needs: [yaml-check, render-course] runs-on: ubuntu-latest container: image: ${{needs.yaml-check.outputs.rendering_docker_image}} @@ -114,20 +122,150 @@ jobs: git config --global user.name 'github-actions[bot]' git config --global user.email 'github-actions[bot]@users.noreply.github.com' - # Rendered content for Leanpub and Coursera is similar. + # 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: toc_less_quarto - run: Rscript -e "quarto::quarto_render('.', quarto_args = c('--output-dir', 'docs/no_toc'), metadata = list(sidebar = F, toc = F))" + - 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 TOC-less Quarto 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 fetch origin - git add --force docs/no_toc/* - git commit -m 'Render TOC-less Quarto Book' || echo "No changes to commit" - git pull --allow-unrelated-histories --strategy-option=ours + git add --force docs/no_toc* + git commit -m 'Render toc-less' || echo "No changes to commit" + git pull --rebase --allow-unrelated-histories --strategy-option=ours + 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 + if: ${{needs.yaml-check.outputs.toggle_leanpub == 'yes'}} + + 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' + + # Create screenshots + - name: Run the screenshot creation + run: | + # Remove old folder + rm -rf resources/chapt_screen_images + + # Make new screenshots + 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 manuscript/ + env: + GH_PAT: ${{ secrets.GH_PAT }} + run: | + rm -rf manuscript/ + git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY} + git fetch origin + git add . + git commit -m 'Delete manuscript folder' || echo "No changes to commit" + git pull --rebase --allow-unrelated-histories --strategy-option=ours + 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' + run: | + Rscript -e "ottrpal::bookdown_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}}'), \ + quiz_dir = NULL)" + + - name: Run ottrpal::bookdown_to_embed_leanpub + 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 = as.logical('${{needs.yaml-check.outputs.make_book_txt}}'))" + + # Commit the rendered Leanpub files + - name: Commit rendered Leanpub files + env: + GH_PAT: ${{ secrets.GH_PAT }} + run: | + mkdir -p manuscript + git add --force manuscript/* + git add --force resources/* + git add --force docs/* + git commit -m 'Render Leanpub' || echo "No changes to commit" + git pull --rebase --allow-unrelated-histories --strategy-option=ours + 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 == 'yes'}} + + 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' + + # Run Coursera version + - name: Convert Leanpub quizzes to Coursera + if: needs.yaml-check.outputs.toggle_leanpub == 'yes' && needs.yaml-check.outputs.toggle_quiz_check == 'yes' + 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: | + git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY} + git fetch origin + 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 --rebase --allow-unrelated-histories --strategy-option=ours git push -u origin main || echo "No changes to push" diff --git a/config_automation.yml b/config_automation.yml index a5fb422..83fdbd6 100644 --- a/config_automation.yml +++ b/config_automation.yml @@ -15,10 +15,10 @@ docker-test: no ##### Renderings run upon merge to main branch ##### # Rendering each platform's content -render-bookdown: yes +render-website: quarto render-leanpub: yes render-coursera: no # What docker image should be used for rendering? # The default is jhudsl/base_ottr:latest -rendering-docker-image: 'jhudsl/ottr_quarto:latest' +rendering-docker-image: 'jhudsl/ottr_quarto:main' diff --git a/intro.qmd b/intro.qmd index f815c20..82db80e 100644 --- a/intro.qmd +++ b/intro.qmd @@ -1,7 +1,5 @@ # Introduction to the Course -Testing testing - We think understanding AI is essential for executives. It helps today’s leaders make strategic decisions, drive innovation, enhance efficiency, and foster a culture that embraces the transformative power of these technologies. Specifically, AI proficiency can help leaders in the following ways. diff --git a/resources/dictionary.txt b/resources/dictionary.txt index aeef22e..e336441 100644 --- a/resources/dictionary.txt +++ b/resources/dictionary.txt @@ -1,3 +1,248 @@ +acm +ACM +adipiscing +aenean +aenean +Aenean +aliqua +aliqua +aliquam +aliquet +amet +amet +Amet +arcu +auctor +augue +BAUjQigf +BeQ +Bibendum +blandit +bookdown +cheatsheet +cheatsheet +commodo +Computable +congue +consectetur +consectetur +consequat +Consequat +Convallis +coursera +cras +Cras +cursus +das +dev +DfFD +Dignissim +dir +dir +dir +dl +doi +dolore +donec +dui +Dw +dWF +edu +egestas +eget +eiusmod +eleifend +Eleifend +elementum +elit +enim +Entscheidungsproblem +erat +Erat +EShgZhvtb +et +Et +etiam +eu +euismod +euismod +Facilisi +facilisis +fames +faucibus +fbee +felis +fermentum +Fermentum +feugiat +fhdsl +fN +FNbr +fqpgAfWkr +fringilla +fringilla +Fringilla +gcc +gdQ +gfs +Ghemawat +github +Gobioff +gravida +habitant +hendrerit +Hendrerit +https +https +HTZrc +hySN +hySN +iaculis +iDX +ieee +ieeexplore +iframe +img +imperdiet +incididunt +interdum +ipsum +itcr +jhudsl +justo +knitr +labore +Lacus +leanpub +lectus +Lectus +leo +Leung +libero +lobortis +Lobortis +lorem +Lorem +maecenas +Maecenas +magna +magnis +magrittr +malesuada +massa +Massa +mattis +mauris +Mauris +Metus +MgR +MgR +MgR +molestie +Molestie +mollis +montes +morbi +morbi +nam +Natoque +nec +neque +netus +nibh +nisi +nulla +nulla +nullam +nunc +Nunc +odio +odio +orci +ottr +ottr +OTTR +ottrproject +oxfordjournals +pandoc +pandocs +parturient +pellentesque +penatibus +phasellus +Phasellus +placerat +png +porta +porttitor +posuere +praesent +pretium +proin +pulvinar +purus +px +quam +quis +Quis +quisque +rBb +rhoncus +Rhoncus +risus +rmarkdown +rstudio +rutrum +sagittis +sapien +Scelerisque +sed +sed +sem +sem +semper +Semper +senectus +sollicitudin +scelerisque +sosp +src +src +src +suspendisse +tellus +tempor +tempor +tempus +tincidunt +Tincidunt +tortor +Tortor +tristique +turpis +ultrices +ultricies +urna +ut +ut +varius +vehicula +vel +vestibulum +virginia +vivamus +viverra +Viverra +VOCYL +volutpat +vulputate +Vulputate +wip +wp +xh +yihui +YmwKdIy +youtube ai Ai AI