1010 pyspelling :
1111 runs-on : ubuntu-20.04
1212 steps :
13- - name : Check for skip label and get changed files
14- id : check-files
13+ - uses : actions/checkout@v4
14+ with :
15+ fetch-depth : 0
16+
17+ - name : Get changed files and check for skip label
18+ id : changes
1519 uses : actions/github-script@v6
1620 with :
1721 script : |
@@ -21,123 +25,65 @@ jobs:
2125 if (context.eventName === 'pull_request') {
2226 // Check for skip label
2327 const { data: labels } = await github.rest.issues.listLabelsOnIssue({
24- owner: context.repo.owner,
25- repo: context.repo.repo,
28+ ...context.repo,
2629 issue_number: context.issue.number
2730 });
2831 skipCheck = labels.some(label => label.name === 'skip-spell-check');
2932
3033 if (!skipCheck) {
31- // Get changed files in PR
3234 const { data: files } = await github.rest.pulls.listFiles({
33- owner: context.repo.owner,
34- repo: context.repo.repo,
35+ ...context.repo,
3536 pull_number: context.issue.number
3637 });
37-
3838 changedFiles = files
3939 .filter(file => file.filename.match(/\.(py|rst|md)$/))
4040 .map(file => file.filename);
4141 }
4242 } else {
43- // For push events, we'll still need to use git diff
44- // We'll handle this after checkout
43+ // For push events
44+ const exec = require('child_process').execSync;
45+ changedFiles = exec('git diff --name-only HEAD^..HEAD -- "*.py" "*.rst" "*.md"')
46+ .toString()
47+ .trim()
48+ .split('\n')
49+ .filter(Boolean);
4550 }
4651
47- core.setOutput('skip', skipCheck.toString());
52+ const shouldRun = !skipCheck && changedFiles.length > 0;
53+
54+ core.setOutput('should-run', shouldRun);
4855 core.setOutput('files', changedFiles.join('\n'));
49- core.setOutput('is-pr', (context.eventName === 'pull_request').toString());
50-
51- - uses : actions/checkout@v4
52- if : steps.check-files.outputs.skip != 'true'
53- with :
54- fetch-depth : 0
55-
56- - name : Get changed files for push event
57- if : |
58- steps.check-files.outputs.skip != 'true' &&
59- steps.check-files.outputs.is-pr != 'true'
60- id : push-files
61- run : |
62- CHANGED_FILES=$(git diff --name-only HEAD^..HEAD -- '*.py' '*.rst' '*.md')
63- echo "files<<EOF" >> $GITHUB_OUTPUT
64- echo "$CHANGED_FILES" >> $GITHUB_OUTPUT
65- echo "EOF" >> $GITHUB_OUTPUT
66-
67- - name : Check if relevant files changed
68- if : steps.check-files.outputs.skip != 'true'
69- id : check
70- run : |
71- if [ "${{ steps.check-files.outputs.is-pr }}" == "true" ]; then
72- FILES="${{ steps.check-files.outputs.files }}"
73- else
74- FILES="${{ steps.push-files.outputs.files }}"
75- fi
76-
77- if [ -z "$FILES" ]; then
78- echo "skip=true" >> $GITHUB_OUTPUT
79- echo "No relevant files changed (*.py, *.rst, *.md), skipping spell check"
80- else
81- echo "skip=false" >> $GITHUB_OUTPUT
82- echo "Found changed files to check:"
83- echo "$FILES"
84- fi
8556
8657 - uses : actions/setup-python@v4
87- if : |
88- steps.check-files.outputs.skip != 'true' &&
89- steps.check.outputs.skip != 'true'
58+ if : steps.changes.outputs.should-run == 'true'
9059 with :
9160 python-version : ' 3.9'
9261 cache : ' pip'
9362
9463 - name : Install dependencies
95- if : |
96- steps.check-files.outputs.skip != 'true' &&
97- steps.check.outputs.skip != 'true'
64+ if : steps.changes.outputs.should-run == 'true'
9865 run : |
9966 pip install pyspelling
10067 sudo apt-get install aspell aspell-en
10168
102- - name : Run spell check on each file
103- if : |
104- steps.check-files.outputs.skip != 'true' &&
105- steps.check.outputs.skip != 'true'
69+ - name : Run spell check
70+ if : steps.changes.outputs.should-run == 'true'
10671 run : |
107- # Get the list of files into an array
108- if [ "${{ steps.check-files.outputs.is-pr }}" == "true" ]; then
109- mapfile -t FILES <<< "${{ steps.check-files.outputs.files }}"
110- else
111- mapfile -t FILES <<< "${{ steps.push-files.outputs.files }}"
112- fi
72+ # Get the list of files
73+ mapfile -t FILES <<< "${{ steps.changes.outputs.files }}"
11374
114- # Check each file individually
115- FINAL_EXIT_CODE=0
75+ # Check each file
11676 for file in "${FILES[@]}"; do
117- if [ -n "$file" ]; then
118- echo "Checking spelling in $file"
119- # Create a temporary config file based on the existing one
120- python3 - <<EOF > temp_config.yml
77+ echo "Checking spelling in $file"
78+ python3 - <<EOF > temp_config.yml
12179 import yaml
122-
12380 with open('.pyspelling.yml', 'r') as f:
12481 config = yaml.safe_load(f)
125-
126- # Modify only the sources in each matrix entry
12782 for matrix in config['matrix']:
12883 matrix['sources'] = ['$file']
129-
13084 with open('temp_config.yml', 'w') as f:
131- yaml.dump(config, f, default_flow_style=False )
85+ yaml.dump(config, f)
13286 EOF
133-
134- if ! pyspelling -c temp_config.yml; then
135- FINAL_EXIT_CODE=1
136- fi
137- fi
87+
88+ pyspelling -c temp_config.yml || exit 1
13889 done
139-
140- if [ $FINAL_EXIT_CODE -ne 0 ]; then
141- echo "Spell check failed!"
142- exit 1
143- fi
0 commit comments