Skip to content

Commit

Permalink
Add reusable workflow to check no important files changed (#157)
Browse files Browse the repository at this point in the history
  • Loading branch information
ErikSchierboom authored Feb 29, 2024
1 parent 18a2d36 commit 8aa5590
Showing 1 changed file with 65 additions and 0 deletions.
65 changes: 65 additions & 0 deletions .github/workflows/check-no-important-files-changed.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: No important files changed

on:
workflow_call:
inputs:
repository:
description: "The pull request owner's repository"
required: true
type: string
ref:
description: "The pull requests's reference"
required: true
type: string

permissions:
pull-requests: write

jobs:
no_important_files_changed:
name: No important files changed
runs-on: ubuntu-22.04
steps:
- name: Checkout code
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
with:
repository: ${{ inputs.repository }}
ref: ${{ inputs.ref }}

- name: Check if important files changed
id: check
run: |
set -exo pipefail
git remote set-branches origin main
git fetch --depth 1 origin main
git diff --diff-filter=M --name-only origin/main
for changed_file in $(git diff --diff-filter=M --name-only origin/main); do
slug="$(echo "${changed_file}" | sed --regexp-extended 's#exercises/[^/]+/([^/]+)/.*#\1#' )"
path_before_slug="$(echo "${changed_file}" | sed --regexp-extended "s#(.*)/${slug}/.*#\\1#" )"
path_after_slug="$( echo "${changed_file}" | sed --regexp-extended "s#.*/${slug}/(.*)#\\1#" )"
config_json_file="${path_before_slug}/${slug}/.meta/config.json"
if ! [ -f "${config_json_file}" ]; then
# cannot determine if important files changed without .meta/config.json
continue
fi
changed=$(jq --arg path "${path_after_slug}" '[.files.test, .files.invalidator, .files.editor] | flatten | index($path) != null' "${config_json_file}")
echo "important_files_changed=${changed}" >> "$GITHUB_OUTPUT"
done
- name: Suggest to add [no important files changed]
if: steps.check.outputs.important_files_changed == 'true'
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea
with:
script: |
const body = "This PR touches files which potentially affect the outcome of the tests of an exercise. This will cause all students' solutions to affected exercises to be re-tested.\n\nIf this PR does **not** affect the result of the test (or, for example, adds an edge case that is not worth rerunning all tests for), **please add the following to the merge-commit message** which will stops student's tests from re-running. Please copy-paste to avoid typos.\n```\n[no important files changed]\n```\n\n For more information, refer to the [documentation](https://exercism.org/docs/building/tracks#h-avoiding-triggering-unnecessary-test-runs). If you are unsure whether to add the message or not, please ping `@exercism/maintainers-admin` in a comment. Thank you!"
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: body
})

0 comments on commit 8aa5590

Please sign in to comment.