Skip to content

Repeat Task: Executable tutorial #1947

Repeat Task: Executable tutorial

Repeat Task: Executable tutorial #1947

Workflow file for this run

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}}