]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Use CSV-separated outputs @ get-changed-files @ CI (#105151)
authorSviatoslav Sydorenko <wk.cvs.github@sydorenko.org.ua>
Wed, 21 Jun 2023 10:42:59 +0000 (12:42 +0200)
committerGitHub <noreply@github.com>
Wed, 21 Jun 2023 10:42:59 +0000 (13:42 +0300)
Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
.github/workflows/build.yml
.github/workflows/reusable-docs.yml
Doc/tools/touch-clean-files.py

index 4760c07a6d9cbb3b65a4f0097e6e9517b04dfd3a..34fcce445d0cd490f8f2e34260c7fdc3aff0760d 100644 (file)
@@ -87,21 +87,9 @@ jobs:
         with:
           filter: |
             Doc/**
-            # Temporarily skip paths with spaces
-            # (i.e. "C API", "Core and Builtins")
-            # to avoid "Error: One of your files includes a space".
-            # Pending https://github.com/python/core-workflow/issues/186
-            # Misc/**
-            Misc/NEWS.d/next/Build/**
-            Misc/NEWS.d/next/Documentation/**
-            Misc/NEWS.d/next/IDLE/**
-            Misc/NEWS.d/next/Library/**
-            Misc/NEWS.d/next/Security/**
-            Misc/NEWS.d/next/Tests/**
-            Misc/NEWS.d/next/Tools-Demos/**
-            Misc/NEWS.d/next/Windows/**
-            Misc/NEWS.d/next/macOS/**
+            Misc/**
             .github/workflows/reusable-docs.yml
+          format: csv  # works for paths with spaces
       - name: Check for docs changes
         if: >-
           github.event_name == 'pull_request'
index c5a15a10866e2740178fbf0ce99e29b4dd99b4bc..b39d8cea6421ea699a39206ef6367e76ae99322e 100644 (file)
@@ -38,12 +38,14 @@ jobs:
       uses: Ana06/get-changed-files@v2.2.0
       with:
         filter: "Doc/**"
+        format: csv  # works for paths with spaces
     - name: 'Build changed files in nit-picky mode'
       if: github.event_name == 'pull_request'
       continue-on-error: true
       run: |
+        set -Eeuo pipefail
         # Mark files the pull request modified
-        touch ${{ steps.changed_files.outputs.added_modified }}
+        python Doc/tools/touch-clean-files.py --clean '${{ steps.changed_files.outputs.added_modified }}'
         # Build docs with the '-n' (nit-picky) option; convert warnings to annotations
         make -C Doc/ PYTHON=../python SPHINXOPTS="-q -n --keep-going" html 2>&1 |
             python Doc/tools/warnings-to-gh-actions.py
index 19bc1be31deb265039d7a6f089d33b7cc69a1db8..2b045bd68a0cf0dd3eb5b7f334edaa0172f293fa 100644 (file)
@@ -3,7 +3,9 @@
 Touch files that must pass Sphinx nit-picky mode
 so they are rebuilt and we can catch regressions.
 """
-
+import argparse
+import csv
+import sys
 from pathlib import Path
 
 wrong_directory_msg = "Must run this script from the repo root"
@@ -28,14 +30,33 @@ ALL_RST = {
     rst for rst in Path("Doc/").rglob("*.rst") if rst.parts[1] not in EXCLUDE_SUBDIRS
 }
 
-with Path("Doc/tools/.nitignore").open() as clean_files:
-    DIRTY = {
+
+parser = argparse.ArgumentParser(
+    description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter
+)
+parser.add_argument("-c", "--clean", help="Comma-separated list of clean files")
+args = parser.parse_args()
+
+if args.clean:
+    clean_files = next(csv.reader([args.clean]))
+    CLEAN = {
         Path(filename.strip())
         for filename in clean_files
-        if filename.strip() and not filename.startswith("#")
+        if Path(filename.strip()).is_file()
     }
-
-CLEAN = ALL_RST - DIRTY - EXCLUDE_FILES
+elif args.clean is not None:
+    print(
+        "Not touching any files: an empty string `--clean` arg value passed.",
+    )
+    sys.exit(0)
+else:
+    with Path("Doc/tools/.nitignore").open() as ignored_files:
+        IGNORED = {
+            Path(filename.strip())
+            for filename in ignored_files
+            if filename.strip() and not filename.startswith("#")
+        }
+    CLEAN = ALL_RST - IGNORED - EXCLUDE_FILES
 
 print("Touching:")
 for filename in sorted(CLEAN):