diff --git a/.github/ISSUE_TEMPLATE/course-content-add.md b/.github/ISSUE_TEMPLATE/course-content-add.md index 71213d8..1a5f795 100644 --- a/.github/ISSUE_TEMPLATE/course-content-add.md +++ b/.github/ISSUE_TEMPLATE/course-content-add.md @@ -3,15 +3,15 @@ name: New content idea about: Suggest an idea for the course title: '' labels: '' -assignees: cansavvy +assignees: --- -**Describe the your scope of your content idea** -What will this cover and how does it relate to the current course material? +## Describe the your scope of your content idea + -**Describe the learning objectives for your content idea** -What will users learn from this new content? +## Describe the learning objectives for your content idea + -**Additional context or resources** -Add any other context or related resources we should know about? +## Additional context or resources + diff --git a/.github/ISSUE_TEMPLATE/course-problem-report.md b/.github/ISSUE_TEMPLATE/course-problem-report.md index 7d5b83f..26f6f36 100644 --- a/.github/ISSUE_TEMPLATE/course-problem-report.md +++ b/.github/ISSUE_TEMPLATE/course-problem-report.md @@ -1,27 +1,28 @@ --- name: Course Problem Report about: Create a report to help improve the course -title: problem +title: [Problem] labels: bug -assignees: cansavvy +assignees: --- -**Describe what is not working with the course** -A clear and concise description of what the bug is. +## Describe what is not working with the course + -**To Reproduce** -Steps to reproduce the behavior: +## Steps to Reproduce + -**Expected behavior** -A clear and concise description of what you expected to happen. +## Expected behavior + -**Screenshots** -If applicable, add screenshots to help explain your problem. +## Screenshots + -**Additional context** -Add any other context about the problem here. +## Additional context + 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 }}) 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 419d2f4..faa83cc 100644 --- a/.github/workflows/delete-preview.yml +++ b/.github/workflows/delete-preview.yml @@ -7,17 +7,21 @@ on: types: [closed] jobs: - build-all: + delete-preview: runs-on: ubuntu-latest steps: + # This is because if a PR is closed before a render finishes it won't find it. - name: Sleep for 5 minutes run: sleep 300s shell: bash - # Delete the branch! - - name: Delete branch - uses: dawidd6/action-delete-branch@v3 + # Check out current repository + - name: checkout + uses: actions/checkout@v4 with: - github_token: ${{ secrets.GH_PAT }} - branches: preview-${{ github.event.pull_request.number }} + fetch-depth: 0 + + # Delete the branch! + - name: Delete branch locally and remotely + run: git push origin --delete preview-${{ github.event.pull_request.number }} || echo "No branch to delete" diff --git a/.github/workflows/docker-build-test.yml b/.github/workflows/docker-build-test.yml deleted file mode 100644 index 84fc0a1..0000000 --- a/.github/workflows/docker-build-test.yml +++ /dev/null @@ -1,97 +0,0 @@ -# This code was originally written by Josh Shapiro -# for the Childhood Cancer Data Lab, an initiative of Alexs Lemonade Stand Foundation. -# https://github.com/AlexsLemonade/refinebio-examples/blob/33cdeff66d57f9fe8ee4fcb5156aea4ac2dce07f/.github/workflows/style-and-sp-check.yml#L1 - -# Adapted for this jhudsl repository by Candace Savonen Apr 2021 - -name: Test build of Dockerfile - -# Controls when the action will run. Triggers the workflow for a pull request for -# master -on: - release: - types: - - created - pull_request: - branches: - - 'main' - paths: [ docker/Dockerfile, docker/github_package_list.tsv ] - workflow_dispatch: - inputs: - dockerhubpush: - description: 'Push to Dockerhub?' - required: true - default: 'false' - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - - - name: Don't re-test if this is a sync branch - if: ${{ github.head_ref == 'repo-sync/DaSL_Course_Template_Bookdown/default' }} - run: | - echo This was tested on DaSL_Course_Template_Bookdown no need to re-run - exit 1 - - # 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 - 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/course_template - - # 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 push jhudsl/course_template - - - name: Get the version - id: get_version - run: | - echo ::set-output name=version::$(echo $GITHUB_REF | cut -d / -f 3) - - # Push the Docker image if it is a release - - name: Push Docker image if release - if: ${{ github.event_name == 'release' }} - run: | - docker tag jhudsl/course_template jhudsl/course_template:${{ steps.get_version.outputs.version }} - docker push jhudsl/course_template:1.0 diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml new file mode 100644 index 0000000..5cd835e --- /dev/null +++ b/.github/workflows/pull_request.yml @@ -0,0 +1,238 @@ +# Candace Savonen 2021 +# Updated May 2024 + +name: Pull Request + +on: + pull_request: + branches: [ main, staging ] + +jobs: + + yaml-check: + name: Load user automation choices + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.GH_PAT }} + + # 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. + + # Delete the branch if this has been run before + - name: Delete branch locally and remotely + run: git push origin --delete preview-${{ github.event.pull_request.number }} || 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' + + 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 || 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_render_preview: "${{ env.RENDER_PREVIEW }}" + rendering_docker_image: "${{ env.RENDERING_DOCKER_IMAGE }}" + +########################## Make the error reports ############################## + spell-check: + name: Check spelling + needs: yaml-check + if: ${{needs.yaml-check.outputs.toggle_spell_check == 'yes'}} + uses: jhudsl/ottr-reports/.github/workflows/report-maker.yml@main + with: + check_type: spelling + error_min: 3 + gh_pat: secrets.GH_PAT + branch_name: ${GITHUB_HEAD_REF} + + url-check: + name: Check URLs + needs: yaml-check + if: ${{needs.yaml-check.outputs.toggle_url_check == 'yes'}} + uses: jhudsl/ottr-reports/.github/workflows/report-maker.yml@main + with: + 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 + needs: yaml-check + runs-on: ubuntu-latest + container: + image: ${{needs.yaml-check.outputs.rendering_docker_image}} + if: ${{needs.yaml-check.outputs.toggle_render_preview == 'yes'}} + + steps: + - name: Checkout files + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # Set up git checkout + - name: Set up git checkout + 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' + + branch_name='preview-${{ github.event.pull_request.number }}' + git fetch --all + git checkout $branch_name + git merge -s recursive --strategy-option=theirs origin/${{ github.head_ref }} --allow-unrelated-histories + shell: bash + + # 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 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 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 + id: commit + run: | + branch_name='preview-${{ github.event.pull_request.number }}' + 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 --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@v2 + id: fc + with: + issue-number: ${{ github.event.pull_request.number }} + comment-author: 'github-actions[bot]' + body-includes: latest commit + + - name: Build components of the comment + id: build-components + 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") + 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@v2 + with: + comment-id: ${{ steps.fc.outputs.comment-id }} + issue-number: ${{ github.event.pull_request.number }} + body: | + 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: Comment if no changes + if: steps.commit.outputs.changes == 'false' + uses: peter-evans/create-or-update-comment@v2 + with: + comment-id: ${{ steps.fc.outputs.comment-id }} + issue-number: ${{ github.event.pull_request.number }} + body: | + The latest commit did not produce rendering changes. + + _Updated at ${{ steps.build-components.outputs.time }} with changes from ${{ steps.build-components.outputs.commit_id }}_ + edit-mode: replace diff --git a/.github/workflows/render-all.yml b/.github/workflows/render-all.yml new file mode 100644 index 0000000..b2e39b2 --- /dev/null +++ b/.github/workflows/render-all.yml @@ -0,0 +1,279 @@ +# Candace Savonen 2021 +# Updated May 2024 + +name: Render all output courses + +on: + workflow_dispatch: + push: + branches: [ main, staging ] + paths: + - '**md$' + - assets/* + - quizzes/* + +jobs: + + yaml-check: + name: Load user automation choices + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + # 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_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-course: + name: Render course preview + needs: yaml-check + runs-on: ubuntu-latest + container: + image: ${{needs.yaml-check.outputs.rendering_docker_image}} + + 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' + + # We want a fresh run of the renders each time + - name: Delete old 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 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 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 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 add --force docs/* + 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, render-course] + runs-on: ubuntu-latest + container: + image: ${{needs.yaml-check.outputs.rendering_docker_image}} + if: ${{needs.yaml-check.outputs.toggle_coursera == 'yes' || 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' + git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY} + git fetch origin + git pull --rebase --allow-unrelated-histories --strategy-option=ours + + # Rendered content for Leanpub and Coursera is very similar. + # This job creates a shared scaffold for both. + - name: Run TOC-less version of render -- Rmd version + if: ${{needs.yaml-check.outputs.toggle_website == 'rmd' }} + id: tocless_rmd + run: Rscript -e "ottrpal::render_without_toc()" + + - name: Run TOC-less version of render -- quarto version + id: tocless_quarto + if: ${{needs.yaml-check.outputs.toggle_website == 'quarto' }} + run: | + Rscript -e "quarto::quarto_render('.', metadata = list(sidebar = F, toc = F), + quarto_args = c('--output-dir', 'docs/no_toc/'))" + + # Commit the TOC-less version files + - name: Commit tocless bookdown files + env: + GH_PAT: ${{ secrets.GH_PAT }} + run: | + git add --force docs/no_toc* + git commit -m 'Render toc-less' || echo "No changes to commit" + git status docs/no_toc* + git push -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' + git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY} + git fetch origin + git pull --rebase --allow-unrelated-histories --strategy-option=ours + ls docs/no_toc + + # Create screenshots + - name: Run the screenshot creation + run: | + # Remove old folder + rm -rf resources/chapt_screen_images + + # Make new screenshots + 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 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'}} + 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 = 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'}} + 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 == 'yes'}}'))" + + # 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 status docs/* + git pull --rebase --allow-unrelated-histories --strategy-option=ours --autostash + git push --force --set-upstream origin main || echo "No changes to push" + + render-coursera: + name: Finish Coursera prep + needs: [yaml-check, render-tocless] + runs-on: ubuntu-latest + container: + image: ${{needs.yaml-check.outputs.rendering_docker_image}} + if: ${{needs.yaml-check.outputs.toggle_coursera == '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' + git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY} + git fetch origin + git pull --rebase --allow-unrelated-histories --strategy-option=ours + + # Run Coursera version + - name: Convert Leanpub quizzes to Coursera + if: needs.yaml-check.outputs.toggle_leanpub == '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: | + 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 status + git push -u origin main || echo "No changes to push" diff --git a/.github/workflows/render-bookdown.yml b/.github/workflows/render-bookdown.yml deleted file mode 100644 index 61dd531..0000000 --- a/.github/workflows/render-bookdown.yml +++ /dev/null @@ -1,97 +0,0 @@ - -# This code was originally written by Josh Shapiro and Candace Savonen -# for the Childhood Cancer Data Lab, an initiative of Alexs Lemonade Stand Foundation. -# https://github.com/AlexsLemonade/refinebio-examples/blob/33cdeff66d57f9fe8ee4fcb5156aea4ac2dce07f/.github/workflows/style-and-sp-check.yml#L1 - -# Adapted for this jhudsl repository by Candace Savonen Apr 2021 - -name: Render Bookdown and Coursera - -# Controls when the action will run. Triggers the workflow on push -# events only for the master branch -on: - workflow_dispatch: - push: - branches: [ main ] - paths: - - '**.Rmd' - - docker/Dockerfile - - assets/* -jobs: - # This workflow contains a single job called "build-all" - build-all: - # The type of runner that the job will run on - runs-on: ubuntu-latest - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - name: checkout - uses: actions/checkout@v2 - with: - # get the full repo - fetch-depth: 0 - # use github PAT - token: ${{ secrets.GH_PAT }} - -###### If you will be making changes to the Docker image to make specific to the -###### course, then highlight this chunk and uncomment it. ##################### -###### Recommend using short cut -- Command and / works for some editors.####### -###### START OF DOCKER UPDATE CHUNK - # # Login to Dockerhub - # - name: Login to DockerHub - # uses: docker/login-action@v1 - # with: - # username: ${{ secrets.DOCKERHUB_USERNAME }} - # password: ${{ secrets.DOCKERHUB_TOKEN }} - # - # # Set up Docker build - # - name: Set up Docker Build - # 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/course_template - # - # # Push the Docker image - # - name: Push Docker image - # run: docker push jhudsl/course_template - -###### END OF DOCKER UPDATE CHUNK ############################################## - - # Run bookdown rendering - - name: Run bookdown render - run: | - docker run \ - --mount type=bind,target=/home/rstudio,source=$PWD \ - jhudsl/course_template \ - Rscript -e "bookdown::render_book('index.Rmd')" - -##### If you do not wish to host your course on Coursera, you can delete this section ##### - # Run Coursera version - - name: Run Coursera version of render - run: | - docker run \ - --mount type=bind,target=/home/rstudio,source=$PWD \ - jhudsl/course_template \ - Rscript -e "leanbuild::render_coursera()" - -##### End of Coursera rendering section ######################################## - - # Commit the rendered bookdown files - - name: Commit rendered bookdown files - run: | - git config --local user.email "actions@github.com" - git config --local user.name "GitHub Actions" - git add -A - git add --force docs/* - git commit -m 'Render bookdown' || echo "No changes to commit" - git push origin main || echo "No changes to push" diff --git a/.github/workflows/render-preview.yml b/.github/workflows/render-preview.yml deleted file mode 100644 index bdd65fb..0000000 --- a/.github/workflows/render-preview.yml +++ /dev/null @@ -1,84 +0,0 @@ -# Candace Savonen Apr 2021 - -name: Render Preview - -# Controls when the action will run. Triggers the workflow on pull request to main branch -on: - pull_request: - branches: [ main ] - -jobs: - # This workflow contains a single job called "build-all" - build-all: - # The type of runner that the job will run on - runs-on: ubuntu-latest - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - name: checkout - uses: actions/checkout@v2 - with: - # get the full repo - fetch-depth: 0 - # use github PAT - token: ${{ secrets.GH_PAT }} - - # Run bookdown rendering - - name: Run bookdown render - run: | - docker run \ - --mount type=bind,target=/home/rstudio,source=$PWD \ - jhudsl/course_template \ - Rscript -e "bookdown::render_book('index.Rmd')" - -##### If you do not wish to host your course on Coursera, you can delete this section ##### - # Run Coursera version - - name: Run Coursera version of render - run: | - docker run \ - --mount type=bind,target=/home/rstudio,source=$PWD \ - jhudsl/course_template \ - Rscript -e "leanbuild::render_coursera()" - -##### End of Coursera rendering section ######################################## - - # Commit the rendered bookdown files - - name: Commit rendered bookdown files to development branch - run: | - git checkout -b "preview-${{ github.event.pull_request.number }}" - git config --local user.email "actions@github.com" - git config --local user.name "GitHub Actions" - git add -A - git commit -m 'Render bookdown preview' || echo "No changes to commit" - git push --force origin "preview-${{ github.event.pull_request.number }}" || echo "No changes to push" - - - name: Find Comment - uses: peter-evans/find-comment@v1 - id: fc - with: - issue-number: ${{ github.event.pull_request.number }} - comment-author: 'github-actions[bot]' - body-includes: Re-rendered - - - name: Build components of the comment - id: build-components - run: | - bookdown_link=$(echo "https://htmlpreview.github.io/?https://raw.githubusercontent.com/$GITHUB_REPOSITORY/preview-${{ github.event.pull_request.number }}/docs/index.html") - coursera_link=$(echo "https://htmlpreview.github.io/?https://raw.githubusercontent.com/$GITHUB_REPOSITORY/preview-${{ github.event.pull_request.number }}/docs/coursera/index.html") - echo ::set-output name=bookdown_link::$bookdown_link - echo ::set-output name=coursera_link::$coursera_link - echo ::set-output name=time::$(date +'%Y-%m-%d') - echo ::set-output name=commit_id::$GITHUB_SHA - - - name: Create or update comment - uses: peter-evans/create-or-update-comment@v1 - with: - comment-id: ${{ steps.fc.outputs.comment-id }} - 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 version here](${{ steps.build-components.outputs.coursera_link }}) - - _Updated at ${{ steps.build-components.outputs.time }} with changes from ${{ steps.build-components.outputs.commit_id }}_ - edit-mode: replace diff --git a/.github/workflows/style-and-sp-check.yml b/.github/workflows/style-and-sp-check.yml deleted file mode 100644 index 11ac002..0000000 --- a/.github/workflows/style-and-sp-check.yml +++ /dev/null @@ -1,62 +0,0 @@ - -# This code was originally written by Josh Shapiro and Candace Savonen -# for the Childhood Cancer Data Lab, an initiative of Alexs Lemonade Stand Foundation. -# https://github.com/AlexsLemonade/refinebio-examples/blob/33cdeff66d57f9fe8ee4fcb5156aea4ac2dce07f/.github/workflows/style-and-sp-check.yml#L1 - -# Adapted for this jhudsl repository by Candace Savonen Apr 2021 - -name: Style and spell check R markdowns - -# Controls when the action will run. Triggers the workflow on push or pull request -# events but only for the main branch -on: - workflow_dispatch: - pull_request: - branches: [ main ] - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "style and check" - style-n-check: - runs-on: ubuntu-latest - container: - image: rocker/tidyverse:4.0.2 - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - - uses: actions/checkout@v2 - # What branch to commit to: the one from the pull request - with: - ref: ${{ github.event.pull_request.head.ref }} - - - name: Install packages - run: Rscript -e "install.packages(c('styler', 'spelling'))" - - - name: Run spell check - id: spell_check_run - run: | - results=$(Rscript "scripts/spell-check.R") - echo "::set-output name=sp_chk_results::$results" - cat spell_check_results.tsv - - - name: Archive spelling errors - uses: actions/upload-artifact@v2 - with: - name: spell-check-results - path: spell_check_results.tsv - - # If there are too many spelling errors, this will stop the workflow - - name: Check spell check results - fail if too many errors - if: ${{ steps.spell_check_run.outputs.sp_chk_results > 3 }} - run: exit 1 - - - name: Run styler - run: Rscript -e "styler::style_file(list.files(pattern = 'Rmd$', recursive = TRUE, full.names = TRUE));warnings()" - - - name: Commit - run: | - git config --local user.email "actions@github.com" - git config --local user.name "GitHub Actions" - git add \*.Rmd - git commit -m 'Style Rmds' || echo "No changes to commit" - git push origin || echo "No changes to commit" diff --git a/.github/workflows/transfer-rendered-files.yml b/.github/workflows/transfer-rendered-files.yml index 6557a1c..dae4141 100644 --- a/.github/workflows/transfer-rendered-files.yml +++ b/.github/workflows/transfer-rendered-files.yml @@ -4,52 +4,72 @@ # Adapted for this jhudsl repository by Candace Savonen Apr 2021 -name: Bookdown to Leanpub repo copy over -# Copy rendered notebooks to Leanpub repo +name: Copy over from main template to _Quizzes repo -# This workflow will run when there are changes to docs/ files in THIS repo on: workflow_dispatch: - # Only run after the render finishes running workflow_run: - workflows: [ "Build, Render, and Push" ] - branches: [ main ] + workflows: [ "Render all output courses" ] + branches: [ main, staging ] types: - completed jobs: - file-bookdown-pr: - # The type of runner that the job will run on + + yaml-check: + name: Load user automation choices runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + # 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_coursera: "${{ env.RENDER_COURSERA }}" + toggle_leanpub: "${{ env.RENDER_LEANPUB }}" + + + file-quizzes-pr: + name: File _Quizzes Transfer PR + runs-on: ubuntu-latest + container: + image: jhudsl/ottrpal:main + needs: [yaml-check] + if: ${{needs.yaml-check.outputs.toggle_coursera == 'yes' || needs.yaml-check.outputs.toggle_leanpub == 'yes'}} - # Get repository name by dropping Bookdown if it exists but always append _Leanpub 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 - sudo Rscript -e "install.packages('optparse')" - - # What's the LEANPUB repository's name? - LEANPUB_REPO=$(echo ${GITHUB_REPOSITORY} | sed "s/_Bookdown/ /g" | awk '{print $1"_Leanpub"}') - echo $LEANPUB_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 + # 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 # 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 $LEANPUB_REPO exists: $results + echo $QUIZ_REPO exists: $results - echo "::set-output name=git_results::$results" - echo "::set-output name=leanpub_repo::$LEANPUB_REPO" + echo "git_results=$results" >> $GITHUB_OUTPUT + echo "leanpub_repo=$QUIZ_REPO" >> $GITHUB_OUTPUT - name: Checkout code from Leanpub repo if: ${{ steps.git_repo_check.outputs.git_results == 'TRUE' }} - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: + path: quizzes repository: ${{ steps.git_repo_check.outputs.leanpub_repo }} token: ${{ secrets.GH_PAT }} @@ -59,74 +79,32 @@ jobs: env: GH_PAT: ${{ secrets.GH_PAT }} run: | - sudo apt install r-base - sudo Rscript -e "install.packages('yaml')" - - if [ -d "docs/" ] - then - # remove old docs/ files and folder - rm -r docs/* - fi - # Copy over docs folder - svn export --force https://github.com/${GITHUB_REPOSITORY}.git/branches/${GITHUB_REF#refs/heads/}/docs - - if [ -d "docs/coursera" ] - then - rm -r docs/coursera/* - fi - - # Copy over book.bib file - svn export --force https://github.com/${GITHUB_REPOSITORY}.git/branches/${GITHUB_REF#refs/heads/}/book.bib - - # Get assets folder - svn export --force https://github.com/${GITHUB_REPOSITORY}.git/branches/${GITHUB_REF#refs/heads/}/assets - - # Copy over _bookdown.yml - svn export --force https://github.com/${GITHUB_REPOSITORY}.git/branches/${GITHUB_REF#refs/heads/}/_bookdown.yml - - # Copy over _output.ymls - svn export --force https://github.com/${GITHUB_REPOSITORY}.git/branches/${GITHUB_REF#refs/heads/}/_output.yml - - # Copy over images folder - svn export --force https://github.com/${GITHUB_REPOSITORY}.git/branches/${GITHUB_REF#refs/heads/}/resources/ resources/ - - # Get list of Rmds needing to copy - Rscript --vanilla scripts/get_rmd_filenames.R - - # the url from this repo where files will be downloaded from - base_url=https://${GH_PAT}@raw.githubusercontent.com/${GITHUB_REPOSITORY}/${GITHUB_REF#refs/heads/} - - # remove old Rmd files - rm $(find . -name '*.Rmd' | grep '.Rmd' ) + # 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 - input="resources/rmd_list.txt" - while IFS= read -r line - do - echo "$line" - curl --fail -s ${base_url}/${line} > ${line} - done < "$input" + # Copy over _bookdown.yml (from bookdown to quizzes repo) + cp bookdown/_bookdown.yml quizzes/_bookdown.yml - - name: Create PR with rendered docs files + - 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 branch: auto_copy_rendered_files delete-branch: true - title: 'GHA: Automated transfer of leanbuild-needed files from Bookdown repository' + title: 'GHA: Automated transfer of ottrpal-needed files from Bookdown repository' body: | ### Description: This PR was initiated by transfer-rendered.yml in the Bookdown repository. - It copies over the leanbuild-needed files from Bookdown repository: - - Rmds listed in the _bookdoown.yml + It copies over the ottrpal-needed folder (for the `bookdown_to_embed_leanpub(render = FALSE)` function + to run properly. + - resources/chapt_screen_images/* - _bookdown.yml - - docs/* - - book.bib - - resources/* - - _output.yml labels: | automated reviewers: $GITHUB_ACTOR diff --git a/.github/workflows/url-checker.yml b/.github/workflows/url-checker.yml deleted file mode 100644 index 2d03a40..0000000 --- a/.github/workflows/url-checker.yml +++ /dev/null @@ -1,36 +0,0 @@ -# Adapted from https://github.com/marketplace/actions/url-checker by Candace Savonen - -# This github actions tests URLs in the Rmd files, README, and CONTRIBUTING.md -name: Check URLs - -# This will be run upon PRs to main -on: - workflow_dispatch: - pull_request: - branches: [ main ] - -# Here's the main action of checking URLs -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: URLs-checker - uses: urlstechie/urlchecker-action@master - with: - # Delete the cloned repository after running URLchecked (default is false) - cleanup: true - - # A comma-separated list of file types to cover in the URL checks - file_types: .Rmd - - # Choose whether to include file with no URLs in the prints. - print_all: false - - # A comma separated links to exclude during URL checks - exclude_urls: https://jhudatascience.org/{Course_Name}} - - # choose if the force pass or not - force_pass : true diff --git a/assets/box_images/dictionary.png b/assets/box_images/dictionary.png new file mode 100644 index 0000000..75ddac7 Binary files /dev/null and b/assets/box_images/dictionary.png differ diff --git a/assets/box_images/github.png b/assets/box_images/github.png new file mode 100644 index 0000000..a93acd3 Binary files /dev/null and b/assets/box_images/github.png differ diff --git a/assets/box_images/note.png b/assets/box_images/note.png new file mode 100644 index 0000000..72de3ae Binary files /dev/null and b/assets/box_images/note.png differ diff --git a/assets/box_images/thinking_face.png b/assets/box_images/thinking_face.png new file mode 100644 index 0000000..c2c279a Binary files /dev/null and b/assets/box_images/thinking_face.png differ diff --git a/assets/box_images/under_construction.png b/assets/box_images/under_construction.png new file mode 100644 index 0000000..a67bd5c Binary files /dev/null and b/assets/box_images/under_construction.png differ diff --git a/assets/box_images/warning.png b/assets/box_images/warning.png new file mode 100644 index 0000000..405fb61 Binary files /dev/null and b/assets/box_images/warning.png differ diff --git a/config_automation.yml b/config_automation.yml new file mode 100644 index 0000000..460f418 --- /dev/null +++ b/config_automation.yml @@ -0,0 +1,30 @@ + +##### Checks run at pull request ##### +# Check quiz formatting +check-quizzes: no +# Check that urls in the content are not broken +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: yes +# Style any R code +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-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' 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 diff --git a/style-sets/data-trail/_output.yml b/style-sets/data-trail/_output.yml new file mode 100644 index 0000000..571771a --- /dev/null +++ b/style-sets/data-trail/_output.yml @@ -0,0 +1,18 @@ +bookdown::gitbook: + css: assets/style_DataTrail.css + includes: + before_body: assets/big-image-DataTrail.html + after_body: assets/footer.html + highlight: tango + config: + toc: + collapse: section + before: | + + after: | + + + + + +
diff --git a/style-sets/data-trail/copy-to-assets/DataTrail.jpg b/style-sets/data-trail/copy-to-assets/DataTrail.jpg new file mode 100644 index 0000000..f1902a3 Binary files /dev/null and b/style-sets/data-trail/copy-to-assets/DataTrail.jpg differ diff --git a/style-sets/data-trail/copy-to-assets/DataTrail_favicon.ico b/style-sets/data-trail/copy-to-assets/DataTrail_favicon.ico new file mode 100755 index 0000000..7c0378e Binary files /dev/null and b/style-sets/data-trail/copy-to-assets/DataTrail_favicon.ico differ diff --git a/style-sets/data-trail/copy-to-assets/DataTrail_logo.jpg b/style-sets/data-trail/copy-to-assets/DataTrail_logo.jpg new file mode 100644 index 0000000..1f075b6 Binary files /dev/null and b/style-sets/data-trail/copy-to-assets/DataTrail_logo.jpg differ diff --git a/style-sets/data-trail/copy-to-assets/big-image-DataTrail.html b/style-sets/data-trail/copy-to-assets/big-image-DataTrail.html new file mode 100644 index 0000000..db08b7e --- /dev/null +++ b/style-sets/data-trail/copy-to-assets/big-image-DataTrail.html @@ -0,0 +1,12 @@ + + + + + + + + + + would */
+}
+
+.sourceCode pre {
+ margin: 0 !important; /* makes space above and below symmetrical*/
+}
+
+/* Footer */
+
+.footer {
+ font-family: "Lora", serif;
+ font-size: .85em;
+ color: #193a5c;
+}
\ No newline at end of file
diff --git a/style-sets/data-trail/index.Rmd b/style-sets/data-trail/index.Rmd
new file mode 100644
index 0000000..34e0f3a
--- /dev/null
+++ b/style-sets/data-trail/index.Rmd
@@ -0,0 +1,38 @@
+---
+title: " Course Name "
+date: "`r format(Sys.time(), '%B, %Y')`"
+site: bookdown::bookdown_site
+documentclass: book
+bibliography: [book.bib, packages.bib]
+biblio-style: apalike
+link-citations: yes
+description: "Description about Course/Book."
+favicon: assets/DataTrail_favicon.ico
+---
+
+
+```{r include=FALSE}
+# automatically create a bib database for R packages
+knitr::write_bib(c(
+ .packages(), "bookdown", "knitr", "rmarkdown"
+), "packages.bib")
+```
+
+# About this Course {-}
+
+This course is part of a series of courses for [DataTrail](https://www.datatrail.org/). DataTrail is a no-cost, paid 14-week educational initiative for young-adult, high school and GED-graduates. DataTrail aims to equip members of underserved communities with the necessary skills and support required to work in the booming field of data science.
+
+DataTrail is a fresh take on workforce development that focuses on training both Black, Indigenous, and other people of color (BIPOC) interested in the data science industry and their potential employers.
+
+Offered by the Johns Hopkins Bloomberg School of Public Health, in partnership with local non-profits and Leanpub, DataTrail combines a mutually-intensive learning experience (MILE) with a whole-person ecosystem of support to allow aspiring data scientists and their employers to succeed.
+
+DataTrail uses mutually-intensive learning
+DataTrail joins aspiring data science scholars and expert-level data scientist mentors in a mutually-intensive learning experience (MILE).
+
+In the DataTrail MILE:
+
+Scholars engage in cutting-edge technical and soft skills training needed to enter the data science field.
+
+Mentors engage in anti-racism and mentorship training needed to be impactful mentors and informed colleagues on diverse data science teams.
+
+The social connections created along the way will fuel job opportunities for scholars and foster a more diverse, equitable, and inclusive climate at the mentors' institutions.
diff --git a/style-sets/fhdasl/_output.yml b/style-sets/fhdasl/_output.yml
new file mode 100644
index 0000000..0a86496
--- /dev/null
+++ b/style-sets/fhdasl/_output.yml
@@ -0,0 +1,18 @@
+bookdown::gitbook:
+ css: assets/style.css
+ includes:
+ before_body: assets/big-image_fhdasl.html
+ after_body: assets/footer.html
+ split_bib: false
+ highlight: tango
+ config:
+ toc:
+ collapse: section
+ before: |
+
+ after: |
+ This content was published with bookdown using