Repeat Task: Executable tutorial #1947
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Check task | |
# Controls when the workflow will run | |
on: | |
pull_request_target: | |
types: | |
- opened | |
- reopened # good to check canvas again to see if eligibility changed | |
- edited # we need to check the new description against the README | |
- synchronize | |
branches: | |
- 2024 | |
paths: | |
- contributions/** | |
# A workflow run is made up of one or more jobs that can run sequentially or in parallel | |
jobs: | |
check-affected-files: | |
name: Check affected files | |
runs-on: ubuntu-latest | |
outputs: | |
affected_file: ${{ steps.check-affected-files.outputs.affected_file }} | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
- name: Get changed files | |
id: changed-files | |
uses: tj-actions/changed-files@v45 | |
- name: Check affected files | |
id: check-affected-files | |
env: | |
# get all affected files (created, modified, deleted, etc.) | |
FILES: ${{ steps.changed-files.outputs.all_changed_and_modified_files }} | |
FILES_COUNT: ${{ steps.changed-files.outputs.all_changed_and_modified_files_count }} | |
run: | | |
for file in "$FILES"; do | |
echo "Info: $file was changed" | |
done | |
if [ "$FILES_COUNT" -ne 1 ]; then | |
echo "Error: More than one file affected ($FILES_COUNT)" | |
exit 1 | |
fi | |
if [[ "$FILES" =~ ^contributions\/(executable-tutorial|feedback|open-source)\/[^\/]+\/README\.md$ ]]; then | |
echo "Info: Matches async task" | |
elif [[ "$FILES" =~ ^contributions\/(demo|presentation|scientific-paper)\/week[2-7]\/[^\/]+\/README\.md$ ]]; then | |
echo "Info: Matches sync task" | |
else | |
echo "Error: File in wrong directory ($FILES)" | |
exit 1 | |
fi | |
echo "affected_file=$FILES" >> "$GITHUB_OUTPUT" | |
check-pr-description: | |
name: Check whether Pull Request description matches affected file | |
needs: check-affected-files | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
- name: Install wdiff | |
# we use wdiff (word-diff) instead of plain diff (line-based) to ensure | |
# that we only enforce *content* to be the same rather than specific | |
# file formatting that would otherwise be ignored when the markdown is | |
# rendered. e.g., wdiff allows the README to break lines at col 80 for | |
# readability while still having the PR description without mid-sentence | |
# breaks (since GitHub descriptions don't support them) | |
run: | | |
sudo apt update | |
sudo apt install -y wdiff | |
- name: Check PR description | |
env: | |
AFFECTED_FILE: ${{ needs.check-affected-files.outputs.affected_file }} | |
PR_BODY: ${{ github.event.pull_request.body }} | |
run: | | |
BODY_FILE="$(mktemp)" | |
echo "$PR_BODY" > $BODY_FILE | |
if wdiff "$AFFECTED_FILE" "$BODY_FILE"; then | |
echo "Info: PR description matches affected file" | |
else | |
echo "Error: PR description does not match affected file!" | |
exit 1 | |
fi | |
check-canvas: | |
name: Check proposal is compatible with previous student task registrations | |
# 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 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
- name: 'Get tools' | |
uses: actions/[email protected] | |
with: | |
repository: KTH/github-canvas-integration-devops | |
ref: main | |
path: canvas-code | |
# Setup Python | |
- name: Setup Python | |
uses: actions/[email protected] | |
with: | |
python-version: '3.x' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
if [ -f ./canvas-code/requirements.txt ]; then pip install -r ./canvas-code/requirements.txt; fi | |
# Runs a single command using the runners shell | |
- name: Update grading in canvas | |
env: | |
CANVAS_TOKEN: ${{ secrets.CANVAS_TOKEN }} | |
CANVAS_COURSE_ID: ${{ secrets.CANVAS_COURSE_ID }} | |
GH_TOKEN: ${{ secrets.GH_TOKEN }} | |
GH_REPO_FULLNAME: ${{ secrets.GH_REPO_FULLNAME }} | |
run: | | |
export PYTHONPATH="$PWD/canvas-code/utils" | |
python ./canvas-code/update_task.py --mode check --pr ${{github.event.number}} |