Skip to content

Commit f704202

Browse files
committed
Simplify the script
1 parent 13cb423 commit f704202

File tree

1 file changed

+38
-91
lines changed

1 file changed

+38
-91
lines changed

.github/workflows/spelling.yml

Lines changed: 38 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -8,136 +8,83 @@ on:
88

99
jobs:
1010
pyspelling:
11-
runs-on: ubuntu-20.04
11+
runs-on: ubuntu-latest
1212
steps:
13-
- name: Check for skip label and get changed files
14-
id: check-files
13+
- name: Get changed files and check skip label
14+
id: files
1515
uses: actions/github-script@v6
1616
with:
1717
script: |
18-
let skipCheck = false;
19-
let changedFiles = [];
20-
2118
if (context.eventName === 'pull_request') {
2219
// Check for skip label
2320
const { data: labels } = await github.rest.issues.listLabelsOnIssue({
24-
owner: context.repo.owner,
25-
repo: context.repo.repo,
21+
...context.repo,
2622
issue_number: context.issue.number
2723
});
28-
skipCheck = labels.some(label => label.name === 'skip-spell-check');
29-
30-
if (!skipCheck) {
31-
// Get changed files in PR
32-
const { data: files } = await github.rest.pulls.listFiles({
33-
owner: context.repo.owner,
34-
repo: context.repo.repo,
35-
pull_number: context.issue.number
36-
});
37-
38-
changedFiles = files
39-
.filter(file => file.filename.match(/\.(py|rst|md)$/))
40-
.map(file => file.filename);
24+
if (labels.some(label => label.name === 'skip-spell-check')) {
25+
core.setOutput('skip', 'true');
26+
return;
4127
}
42-
} else {
43-
// For push events, we'll still need to use git diff
44-
// We'll handle this after checkout
4528
}
4629
47-
core.setOutput('skip', skipCheck.toString());
48-
core.setOutput('files', changedFiles.join('\n'));
49-
core.setOutput('is-pr', (context.eventName === 'pull_request').toString());
30+
core.setOutput('skip', 'false');
5031
5132
- uses: actions/checkout@v4
52-
if: steps.check-files.outputs.skip != 'true'
33+
if: steps.files.outputs.skip != 'true'
5334
with:
5435
fetch-depth: 0
5536

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'
37+
- name: Get files to check
38+
if: steps.files.outputs.skip != 'true'
6939
id: check
7040
run: |
71-
if [ "${{ steps.check-files.outputs.is-pr }}" == "true" ]; then
72-
FILES="${{ steps.check-files.outputs.files }}"
41+
if [[ ${{ github.event_name }} == 'pull_request' ]]; then
42+
FILES=$(gh pr view ${{ github.event.pull_request.number }} --json files --jq '.files[].path' | grep -E '\.(py|rst|md)$' || true)
7343
else
74-
FILES="${{ steps.push-files.outputs.files }}"
44+
FILES=$(git diff --name-only HEAD^..HEAD | grep -E '\.(py|rst|md)$' || true)
7545
fi
7646
7747
if [ -z "$FILES" ]; then
7848
echo "skip=true" >> $GITHUB_OUTPUT
79-
echo "No relevant files changed (*.py, *.rst, *.md), skipping spell check"
49+
echo "No relevant files changed"
8050
else
51+
echo "files<<EOF" >> $GITHUB_OUTPUT
52+
echo "$FILES" >> $GITHUB_OUTPUT
53+
echo "EOF" >> $GITHUB_OUTPUT
8154
echo "skip=false" >> $GITHUB_OUTPUT
82-
echo "Found changed files to check:"
55+
echo "Files to check:"
8356
echo "$FILES"
8457
fi
58+
env:
59+
GH_TOKEN: ${{ github.token }}
8560

8661
- uses: actions/setup-python@v4
87-
if: |
88-
steps.check-files.outputs.skip != 'true' &&
89-
steps.check.outputs.skip != 'true'
62+
if: steps.files.outputs.skip != 'true' && steps.check.outputs.skip != 'true'
9063
with:
9164
python-version: '3.9'
9265
cache: 'pip'
9366

9467
- name: Install dependencies
95-
if: |
96-
steps.check-files.outputs.skip != 'true' &&
97-
steps.check.outputs.skip != 'true'
68+
if: steps.files.outputs.skip != 'true' && steps.check.outputs.skip != 'true'
9869
run: |
9970
pip install pyspelling
10071
sudo apt-get install aspell aspell-en
10172
102-
- name: Run spell check on each file
103-
if: |
104-
steps.check-files.outputs.skip != 'true' &&
105-
steps.check.outputs.skip != 'true'
73+
- name: Run spell check
74+
if: steps.files.outputs.skip != 'true' && steps.check.outputs.skip != 'true'
10675
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
113-
114-
# Check each file individually
115-
FINAL_EXIT_CODE=0
116-
for file in "${FILES[@]}"; do
76+
while IFS= read -r file; do
11777
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
121-
import yaml
122-
123-
with open('.pyspelling.yml', 'r') as f:
124-
config = yaml.safe_load(f)
125-
126-
# Modify only the sources in each matrix entry
127-
for matrix in config['matrix']:
128-
matrix['sources'] = ['$file']
129-
130-
with open('temp_config.yml', 'w') as f:
131-
yaml.dump(config, f, default_flow_style=False)
132-
EOF
133-
134-
if ! pyspelling -c temp_config.yml; then
135-
FINAL_EXIT_CODE=1
136-
fi
78+
echo "Checking $file"
79+
python -c "
80+
import yaml
81+
with open('.pyspelling.yml') as config_file:
82+
config = yaml.safe_load(config_file)
83+
for matrix_entry in config['matrix']:
84+
matrix_entry['sources'] = ['$file']
85+
with open('temp_config.yml', 'w') as output_file:
86+
yaml.dump(config, output_file)
87+
"
88+
pyspelling -c temp_config.yml || exit 1
13789
fi
138-
done
139-
140-
if [ $FINAL_EXIT_CODE -ne 0 ]; then
141-
echo "Spell check failed!"
142-
exit 1
143-
fi
90+
done <<< "${{ steps.check.outputs.files }}"

0 commit comments

Comments
 (0)