Skip to content

Pull resource

Pull resource #708

Workflow file for this run

# Candace Savonen Dec 2021
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@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: docs/config_automation.yml # Pass a space-separated list of configuration files. Rightmost files take precedence.
- name: Make branch if it doesn't exist
run: |
git config --local user.email "itcrtrainingnetwork@gmail.com"
git config --local user.name "jhudsl-robot"
branch_name='preview-${{ github.event.pull_request.number }}'
exists=$(git ls-remote https://${{ secrets.GH_PAT }}@github.com/$GITHUB_REPOSITORY $branch_name | wc -l | xargs)
if [[ $exists == 0 ]];then
echo branch doesnt exist
git checkout -b $branch_name || echo branch exists
git push --set-upstream origin $branch_name
else
echo branch does exist
fi
shell: bash
- name: Check if this is a private repository
id: public_repository
run: |
public=$(curl -Is https://github.com/${GITHUB_REPOSITORY} | head -1 | tr -dc '0-9')
if [ $public -eq 2200 ];then
public='true'
echo 'public repository'
else
public='false'
echo 'private repository'
fi
echo "public=$public" >> $GITHUB_OUTPUT
shell: bash
outputs:
public_repository: "${{ steps.public_repository.outputs.public }}"
toggle_spell_check: "${{ env.SPELL_CHECK }}"
toggle_style_code: "${{ env.STYLE_CODE }}"
toggle_url_check: "${{ env.URL_CHECKER }}"
toggle_render_preview: "${{ env.RENDER_PREVIEW }}"
spell-check:
name: Check spelling
needs: yaml-check
runs-on: ubuntu-latest
if: ${{needs.yaml-check.outputs.toggle_spell_check == 'yes'}}
container:
image: jhudsl/course_template:main
steps:
- name: Checkout files
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Configure git
run: |
git config --local user.email "itcrtrainingnetwork@gmail.com"
git config --local user.name "jhudsl-robot"
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
- name: Run spell check
id: spell_check_run
run: |
results=$(Rscript "scripts/spell-check.R")
echo "sp_chk_results=$results" >> $GITHUB_OUTPUT
- name: Archive spelling errors
if: ${{ steps.spell_check_run.outputs.sp_chk_results > 0 }}
uses: actions/upload-artifact@v3.1.1
with:
name: spell-check-results
path: check_reports/spell_check_results.tsv
- name: Commit spell check errors
run: |
branch_name='preview-${{ github.event.pull_request.number }}'
git add --force check_reports/spell_check_results.tsv || echo "No changes to commit"
git commit -m 'Add spell check file' || echo "No changes to commit"
git fetch
git merge -s recursive --strategy-option=theirs origin/${{ github.head_ref }} --allow-unrelated-histories
git push --force origin $branch_name || echo "No changes to commit"
- name: Build components of the spell check comment
id: build-components
env:
GH_PAT: ${{ secrets.GH_PAT }}
run: |
branch_name='preview-${{ github.event.pull_request.number }}'
sp_error_url=https://raw.githubusercontent.com/${GITHUB_REPOSITORY}/$branch_name/check_reports/spell_check_results.tsv
echo "time=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
echo "commit_id=$GITHUB_SHA" >> $GITHUB_OUTPUT
echo "sp_error_url=$sp_error_url" >> $GITHUB_OUTPUT
# Handle the commenting
- name: Find Comment
uses: peter-evans/find-comment@v2.2.0
id: fc
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: 'github-actions[bot]'
body-includes: spelling errors
- name: Spelling errors!
if: ${{ steps.spell_check_run.outputs.sp_chk_results >= 3 }}
uses: peter-evans/create-or-update-comment@v2.1.0
with:
comment-id: ${{ steps.fc.outputs.comment-id }}
issue-number: ${{ github.event.pull_request.number }}
body: |
:warning: There are spelling errors that need to be addressed. [Read this guide for more info](https://github.com/jhudsl/OTTR_Template/wiki/Spell-check).
[Download the errors here.](${{ steps.build-components.outputs.sp_error_url }})
_Comment updated at ${{ steps.build-components.outputs.time }} with changes from ${{ steps.build-components.outputs.commit_id }}_
edit-mode: replace
- name: Check spell check results - fail if too many errors
if: ${{ steps.spell_check_run.outputs.sp_chk_results >= 3 }}
run: exit 1
- name: No spelling errors
if: ${{ steps.spell_check_run.outputs.sp_chk_results < 3 }}
uses: peter-evans/create-or-update-comment@v2.1.0
with:
comment-id: ${{ steps.fc.outputs.comment-id }}
issue-number: ${{ github.event.pull_request.number }}
body: |
No spelling errors! :tada:
_Comment updated at ${{ steps.build-components.outputs.time }} with changes from ${{ steps.build-components.outputs.commit_id }}_
edit-mode: replace
style-code:
name: Style code
needs: yaml-check
runs-on: ubuntu-latest
if: ${{needs.yaml-check.outputs.toggle_style_code == 'yes'}}
container:
image: jhudsl/course_template:main
steps:
- name: Checkout files
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Run styler
run: Rscript -e "styler::style_file(list.files(pattern = 'Rmd$', recursive = TRUE, full.names = TRUE));warnings()"
- name: Commit styled files
run: |
git add \*.Rmd
git commit -m 'Style Rmds' || echo "No changes to commit"
git push origin || echo "No changes to commit"
url-check:
name: Check URLs
needs: yaml-check
runs-on: ubuntu-latest
if: ${{needs.yaml-check.outputs.toggle_url_check == 'yes'}}
container:
image: jhudsl/course_template:main
steps:
- name: checkout repo
uses: actions/checkout@v3
- name: Configure git
run: |
git config --local user.email "itcrtrainingnetwork@gmail.com"
git config --local user.name "jhudsl-robot"
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
- name: URLs checker
id: url_errors
run: |
chk_results=$(Rscript scripts/url-check.R)
echo $chk_results
echo "url_results=$chk_results" >> $GITHUB_OUTPUT
- name: Commit URL check
run: |
branch_name='preview-${{ github.event.pull_request.number }}'
git add --force check_reports/url_checks.tsv || echo "No changes to commit"
git commit -m 'Add URL check file' || echo "No changes to commit"
git fetch
git push origin $branch_name || echo "No changes to commit"
- name: Build components of the spell check comment
id: build-components
env:
GH_PAT: ${{ secrets.GH_PAT }}
run: |
branch_name='preview-${{ github.event.pull_request.number }}'
url_errors=https://raw.githubusercontent.com/${GITHUB_REPOSITORY}/$branch_name/check_reports/url_checks.tsv
echo "time=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
echo "commit_id=$GITHUB_SHA" >> $GITHUB_OUTPUT
echo "url_errors=$url_errors" >> $GITHUB_OUTPUT
# Handle the commenting
- name: Find Comment
uses: peter-evans/find-comment@v2.2.0
id: fc
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: 'github-actions[bot]'
body-includes: broken URLs
- name: URL errors!
if: ${{ steps.url_errors.outputs.url_results > 0 }}
uses: peter-evans/create-or-update-comment@v2.1.0
with:
comment-id: ${{ steps.fc.outputs.comment-id }}
issue-number: ${{ github.event.pull_request.number }}
body: |
:warning: There are broken URLs that need to be addressed. [Read this guide for more info](https://github.com/jhudsl/OTTR_Template/wiki/How-to-set-up-and-customize-GitHub-actions-robots#check-for-broken-urls).
[Download the errors here.](${{ steps.build-components.outputs.url_errors }})
_Comment updated at ${{ steps.build-components.outputs.time }} with changes from ${{ steps.build-components.outputs.commit_id }}_
edit-mode: replace
- name: Check URL results - fail if too many errors
if: ${{ steps.url_errors.outputs.url_results > 0 }}
run: exit 1
- name: No URL errors
if: ${{ steps.url_errors.outputs.url_results == 0 }}
uses: peter-evans/create-or-update-comment@v2.1.0
with:
comment-id: ${{ steps.fc.outputs.comment-id }}
issue-number: ${{ github.event.pull_request.number }}
body: |
No broken URLs detected! :tada:
_Comment updated at ${{ steps.build-components.outputs.time }} with changes from ${{ steps.build-components.outputs.commit_id }}_
edit-mode: replace
render-preview:
name: Render preview
needs: yaml-check
runs-on: ubuntu-latest
container:
image: jhudsl/intro_to_r:1.1
if: ${{needs.yaml-check.outputs.toggle_render_preview == 'yes'}}
steps:
# Give permission to access the repo
- name: safelist repository
run: |
repo_name='${{ github.event.repository.name }}'
git config --global --add safe.directory /__w/$repo_name/$repo_name
# # Checks-out your repository with the token so your job can access it
- name: checkout
uses: actions/checkout@v3
with:
# get the full repo
fetch-depth: 0
# use github PAT
token: ${{ secrets.GH_PAT }}
# Set up git checkout
- name: Set up git checkout
run: |
git config --local user.email "itcrtrainingnetwork@gmail.com"
git config --local user.name "jhudsl-robot"
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
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v37
# NOTE: `since_last_remote_commit: true` is implied by default and falls back to the previous local commit.
- name: List all changed files
run: |
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
echo "$file was changed"
done
# We want a fresh run of the renders each time - so first delete old html files
- name: Delete old *.html
run: Rscript -e "rmarkdown::clean_site(preview = FALSE)"
# Now we want to render all the html files from the Rmd files
- name: Run render html for the main site
id: site
run: Rscript -e "rmarkdown::render_site()"
# Render module details for syllabus
- name: Render module details for syllabus
run: Rscript "scripts/render_module_details_for_syllabus.R"
# Render all module files
- name: Render html of modules
run: |
Rscript --vanilla "scripts/render_modules.R" --files "${{ steps.changed-files.outputs.all_changed_files }}"
# Render the cheatsheets
- name: Render Cheatsheet pdfs
run: |
Rscript --vanilla "scripts/render_cheatsheets.R" --files "${{ steps.changed-files.outputs.all_changed_files }}"
# Render resource pdfs
- name: Render Resource pdfs
run: |
Rscript --vanilla "scripts/render_resources.R" --files "${{ steps.changed-files.outputs.all_changed_files }}"
# Generate list of files that need pdfs
- name: Get list of html to pdfs
run: |
Rscript --vanilla "scripts/render_html_list.R"
echo "$(cat files.txt)"
- name: Read html and pdf files
id: getfiles
run: |
echo "files=$(cat files.txt)" >> $GITHUB_OUTPUT
rm files.txt
rm cheatsheet_files.csv
rm lab_files.csv
rm lecture_files.csv
# 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'
run: |
echo site status ${{steps.site.outcome}}
exit 1
# Commit the rendered website files
- name: Commit rendered website 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
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.2.0
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 _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 }}/index.html")
echo "website_link=$website_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.1.0
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 website here](${{ steps.build-components.outputs.website_link }})
_Updated at ${{ steps.build-components.outputs.time }} with changes from ${{ steps.build-components.outputs.commit_id }}_
edit-mode: replace
- name: No comment if no changes
if: steps.commit.outputs.changes == 'false'
uses: peter-evans/create-or-update-comment@v2.1.0
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
# Save files for conversion to pdf
outputs:
pdffiles: "${{ steps.getfiles.outputs.files }}"
render-pdf-lectures:
name: Render pdf lecture slides
needs: render-preview
runs-on: ubuntu-latest
container:
image: jhudsl/intro_to_r:1.1
if: ${{needs.yaml-check.outputs.toggle_render_preview == 'yes'}}
strategy:
matrix:
modulenames: ${{fromJson(needs.render-preview.outputs.pdffiles)}}
steps:
# Give permission to access the repo
- name: safelist repository
run: |
repo_name='${{ github.event.repository.name }}'
git config --global --add safe.directory /__w/$repo_name/$repo_name
- name: Checkout files
uses: actions/checkout@v3
with:
fetch-depth: 0
token: ${{ secrets.GH_PAT }}
# Set up git checkout
- name: Set up git checkout
run: |
git config --local user.email "itcrtrainingnetwork@gmail.com"
git config --local user.name "jhudsl-robot"
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
# Render pdfs of slides
- name: Convert HTML to PDF
uses: LukaszLapaj/html-to-pdf-action@master
with:
htmlFile: ./modules/${{ matrix.modulenames }}/${{ matrix.modulenames }}.html
outputFile: ./modules/${{ matrix.modulenames }}/${{ matrix.modulenames }}.pdf
# Commit the rendered website files
- name: Commit rendered website pdf files to preview branch
id: commit_pdfs
run: |
branch_name='preview-${{ github.event.pull_request.number }}'
git diff origin/main -- '*.pdf' >/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 push --force || echo "No changes to commit"
shell: bash