free-programming-books/.github/workflows/rtl-ltr-linter.yml
dependabot[bot] e9d78f2755
chore(deps): bump actions/setup-python from 5 to 6 (#11944)
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-11 08:46:50 -04:00

101 lines
No EOL
4 KiB
YAML

name: RTL/LTR Markdown Linter
on: [pull_request]
permissions:
contents: read # Required to checkout the repository content
jobs:
lint:
runs-on: ubuntu-latest
steps:
# Checkout the repository code
- name: Checkout code
uses: actions/checkout@v5
# Fetch the full history of 'main' for accurate git diff in PRs
- name: Fetch all history for main
run: git fetch --no-tags --prune --depth=50 origin main
# Set up the required Python version for the linter
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.11' # Use a recent Python version for compatibility
# Install only the Python dependencies needed for the linter script
- name: Install Python dependencies
run: |
pip install python-bidi PyYAML
# (Optional) List files for debugging purposes
- name: List files in scripts directory and current path
run: |
echo "Current working directory:"
pwd
echo "Listing contents of scripts directory (if it exists at root):"
ls -la scripts/ || echo "scripts/ directory not found at root or ls failed"
# Identify all changed Markdown files in the PR using tj-actions/changed-files
- name: Get changed Markdown files
id: changed_md_files
uses: tj-actions/changed-files@v46
with:
files: |
**/*.md
# Check if the PR has the "RTL" label
- name: Check for RTL label
id: rtl_label
run: |
gh pr view ${{ github.event.pull_request.number }} --json labels --jq '.labels[].name' | grep -q '^RTL$' && echo "has_labels=true" >> $GITHUB_OUTPUT || echo "has_labels=false" >> $GITHUB_OUTPUT
env:
GH_TOKEN: ${{ github.token }}
# Check if any changed file is in ar, he, fa, ur
- name: Check for RTL language file changes
id: rtl_lang_files
run: |
RTL_CHANGED=false
for f in ${{ steps.changed_md_files.outputs.all_changed_files }}; do
if [[ "$f" =~ (ar|he|fa|ur) ]]; then
RTL_CHANGED=true
break
fi
done
echo "rtl_changed=$RTL_CHANGED" >> $GITHUB_OUTPUT
# Run the RTL/LTR Markdown linter:
# - Scans all Markdown files for issues and writes a full log
# - Prints GitHub Actions annotations only for issues on changed lines in changed files
# - Fails the job if any error or warning is found on changed lines
- name: Run RTL/LTR Markdown linter
id: run_linter
if: steps.rtl_label.outputs.has_labels == 'true' || steps.rtl_lang_files.outputs.rtl_changed == 'true'
continue-on-error: true
run: |
echo "Scanning all specified paths for full log..."
echo "Changed Markdown files for PR annotations: ${{ steps.changed_md_files.outputs.all_changed_files }}"
CHANGED_FILES_ARGS=""
if [ "${{ steps.changed_md_files.outputs.all_changed_files_count }}" -gt 0 ]; then
# Pass changed files to the script for PR annotation generation
CHANGED_FILES_ARGS="--changed-files ${{ steps.changed_md_files.outputs.all_changed_files }}"
fi
# Execute the linter.
# Annotations for changed files will be printed to stdout by the script.
# The script will also write a full log to 'rtl-linter-output.log'.
# If the script exits with a non-zero code (error found), this step will fail.
python3 scripts/rtl_ltr_linter.py books casts courses more ${CHANGED_FILES_ARGS} --log-file rtl-linter-output.log
# Upload the linter output log as a workflow artifact
# Only if the linter step was executed (success or failure)
- name: Upload linter output artifact
if: steps.run_linter.conclusion == 'success' || steps.run_linter.conclusion == 'failure'
uses: actions/upload-artifact@v4
with:
name: rtl-linter-output # Name of the artifact
path: rtl-linter-output.log # Path to the output file
if-no-files-found: ignore # Ignore if no files are found