Skip to content

[TOY] Scientific paper proposal: CI check test, week 2 #2573

[TOY] Scientific paper proposal: CI check test, week 2

[TOY] Scientific paper proposal: CI check test, week 2 #2573

Workflow file for this run

name: Check task
# Controls when the workflow will run
on:
pull_request:
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:
- 2026
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|project)\/[^\/]+\/README\.md$ ]]; then
echo "Info: Matches async task"
elif [[ "$FILES" =~ ^contributions\/(demo|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