1010 pyspelling :
1111 runs-on : ubuntu-20.04
1212 steps :
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
13+ - name : Check for skip label and get changed files
14+ id : check-files
1915 uses : actions/github-script@v6
2016 with :
2117 script : |
@@ -25,65 +21,123 @@ jobs:
2521 if (context.eventName === 'pull_request') {
2622 // Check for skip label
2723 const { data: labels } = await github.rest.issues.listLabelsOnIssue({
28- ...context.repo,
24+ owner: context.repo.owner,
25+ repo: context.repo.repo,
2926 issue_number: context.issue.number
3027 });
3128 skipCheck = labels.some(label => label.name === 'skip-spell-check');
3229
3330 if (!skipCheck) {
31+ // Get changed files in PR
3432 const { data: files } = await github.rest.pulls.listFiles({
35- ...context.repo,
33+ owner: context.repo.owner,
34+ repo: context.repo.repo,
3635 pull_number: context.issue.number
3736 });
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
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);
43+ // For push events, we'll still need to use git diff
44+ // We'll handle this after checkout
5045 }
5146
52- const shouldRun = !skipCheck && changedFiles.length > 0;
53-
54- core.setOutput('should-run', shouldRun);
47+ core.setOutput('skip', skipCheck.toString());
5548 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
5685
5786 - uses : actions/setup-python@v4
58- if : steps.changes.outputs.should-run == 'true'
87+ if : |
88+ steps.check-files.outputs.skip != 'true' &&
89+ steps.check.outputs.skip != 'true'
5990 with :
6091 python-version : ' 3.9'
6192 cache : ' pip'
6293
6394 - name : Install dependencies
64- if : steps.changes.outputs.should-run == 'true'
95+ if : |
96+ steps.check-files.outputs.skip != 'true' &&
97+ steps.check.outputs.skip != 'true'
6598 run : |
6699 pip install pyspelling
67100 sudo apt-get install aspell aspell-en
68101
69- - name : Run spell check
70- if : steps.changes.outputs.should-run == 'true'
102+ - name : Run spell check on each file
103+ if : |
104+ steps.check-files.outputs.skip != 'true' &&
105+ steps.check.outputs.skip != 'true'
71106 run : |
72- # Get the list of files
73- mapfile -t FILES <<< "${{ steps.changes.outputs.files }}"
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
74113
75- # Check each file
114+ # Check each file individually
115+ FINAL_EXIT_CODE=0
76116 for file in "${FILES[@]}"; do
77- echo "Checking spelling in $file"
78- python3 - <<EOF > temp_config.yml
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
79121 import yaml
122+
80123 with open('.pyspelling.yml', 'r') as f:
81124 config = yaml.safe_load(f)
125+
126+ # Modify only the sources in each matrix entry
82127 for matrix in config['matrix']:
83128 matrix['sources'] = ['$file']
129+
84130 with open('temp_config.yml', 'w') as f:
85- yaml.dump(config, f)
131+ yaml.dump(config, f, default_flow_style=False )
86132 EOF
87-
88- pyspelling -c temp_config.yml || exit 1
133+
134+ if ! pyspelling -c temp_config.yml; then
135+ FINAL_EXIT_CODE=1
136+ fi
137+ fi
89138 done
139+
140+ if [ $FINAL_EXIT_CODE -ne 0 ]; then
141+ echo "Spell check failed!"
142+ exit 1
143+ fi
0 commit comments