From 59e11088f520170befc44c60a908f237204f5fe3 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Thu, 28 Nov 2024 14:15:56 -0800 Subject: [PATCH 1/7] Explore using sccache instead of ccache in CI. --- .github/workflows/build.yml | 16 ++++++++++------ .github/workflows/reusable-ubuntu.yml | 18 ++++++++++-------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1f8c468475470c..8bf860d1f323d0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -92,6 +92,8 @@ jobs: timeout-minutes: 60 needs: check_source if: needs.check_source.outputs.run_tests == 'true' + env: + SCCACHE_GHA_ENABLED: "true" steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 @@ -99,6 +101,14 @@ jobs: python-version: '3.x' - name: Runner image version run: echo "IMAGE_VERSION=${ImageVersion}" >> "$GITHUB_ENV" + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@v0.0.6 + with: + version: "v0.8.2" + - name: Configure CC and CXX environment variables + run: | + echo "CC=sccache gcc" >> "$GITHUB_ENV" + echo "CXX=sccache gcc" >> "$GITHUB_ENV" - name: Restore config.cache uses: actions/cache@v4 with: @@ -107,12 +117,6 @@ jobs: key: ${{ github.job }}-${{ runner.os }}-${{ env.IMAGE_VERSION }}-${{ needs.check_source.outputs.config_hash }}-${{ env.pythonLocation }} - name: Install Dependencies run: sudo ./.github/workflows/posix-deps-apt.sh - - name: Add ccache to PATH - run: echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV" - - name: Configure ccache action - uses: hendrikmuhs/ccache-action@v1.2 - with: - save: false - name: Configure CPython run: | # Build Python with the libpython dynamic library diff --git a/.github/workflows/reusable-ubuntu.yml b/.github/workflows/reusable-ubuntu.yml index 642354f8b4f61b..b409204cb0ecfa 100644 --- a/.github/workflows/reusable-ubuntu.yml +++ b/.github/workflows/reusable-ubuntu.yml @@ -26,10 +26,20 @@ jobs: OPENSSL_VER: 3.0.15 PYTHONSTRICTEXTENSIONBUILD: 1 TERM: linux + SCCACHE_GHA_ENABLED: "true" steps: - uses: actions/checkout@v4 - name: Register gcc problem matcher run: echo "::add-matcher::.github/problem-matchers/gcc.json" + - name: Run sccache-cache on push + if: github.event_name == 'push' + uses: mozilla-actions/sccache-action@v0.0.6 + with: + version: "v0.8.2" + - name: Configure CC and CXX environment variables + run: | + echo "CC=sccache gcc" >> "$GITHUB_ENV" + echo "CXX=sccache gcc" >> "$GITHUB_ENV" - name: Install dependencies run: sudo ./.github/workflows/posix-deps-apt.sh - name: Configure OpenSSL env vars @@ -46,14 +56,6 @@ jobs: - name: Install OpenSSL if: steps.cache-openssl.outputs.cache-hit != 'true' run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --openssl "$OPENSSL_VER" --system Linux - - name: Add ccache to PATH - run: | - echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV" - - name: Configure ccache action - uses: hendrikmuhs/ccache-action@v1.2 - with: - save: ${{ github.event_name == 'push' }} - max-size: "200M" - name: Setup directory envs for out-of-tree builds run: | echo "CPYTHON_RO_SRCDIR=$(realpath -m "${GITHUB_WORKSPACE}"/../cpython-ro-srcdir)" >> "$GITHUB_ENV" From 10849290648080abede96fcaa667dd3682039f43 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Thu, 28 Nov 2024 14:22:28 -0800 Subject: [PATCH 2/7] oops (exploratory conditional) --- .github/workflows/reusable-ubuntu.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/reusable-ubuntu.yml b/.github/workflows/reusable-ubuntu.yml index b409204cb0ecfa..43b58e6fac6534 100644 --- a/.github/workflows/reusable-ubuntu.yml +++ b/.github/workflows/reusable-ubuntu.yml @@ -31,8 +31,7 @@ jobs: - uses: actions/checkout@v4 - name: Register gcc problem matcher run: echo "::add-matcher::.github/problem-matchers/gcc.json" - - name: Run sccache-cache on push - if: github.event_name == 'push' + - name: Run sccache-cache uses: mozilla-actions/sccache-action@v0.0.6 with: version: "v0.8.2" From dff0249003c4abf094e910e5189b20126fac9161 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Thu, 28 Nov 2024 14:38:38 -0800 Subject: [PATCH 3/7] Try it on macOS, unpin version (trust Mozilla). --- .github/workflows/build.yml | 14 ++++++-------- .github/workflows/reusable-macos.yml | 7 +++++++ .github/workflows/reusable-ubuntu.yml | 10 ++++------ 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8bf860d1f323d0..5ceecf9a545019 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -101,14 +101,6 @@ jobs: python-version: '3.x' - name: Runner image version run: echo "IMAGE_VERSION=${ImageVersion}" >> "$GITHUB_ENV" - - name: Run sccache-cache - uses: mozilla-actions/sccache-action@v0.0.6 - with: - version: "v0.8.2" - - name: Configure CC and CXX environment variables - run: | - echo "CC=sccache gcc" >> "$GITHUB_ENV" - echo "CXX=sccache gcc" >> "$GITHUB_ENV" - name: Restore config.cache uses: actions/cache@v4 with: @@ -117,6 +109,12 @@ jobs: key: ${{ github.job }}-${{ runner.os }}-${{ env.IMAGE_VERSION }}-${{ needs.check_source.outputs.config_hash }}-${{ env.pythonLocation }} - name: Install Dependencies run: sudo ./.github/workflows/posix-deps-apt.sh + - name: Start sccache-cache + uses: mozilla-actions/sccache-action@v0.0.6 + - name: Configure CC and CXX environment variables + run: | + echo "CC=sccache gcc" >> "$GITHUB_ENV" + echo "CXX=sccache gcc" >> "$GITHUB_ENV" - name: Configure CPython run: | # Build Python with the libpython dynamic library diff --git a/.github/workflows/reusable-macos.yml b/.github/workflows/reusable-macos.yml index 4c3dd10194f8cb..e2ae7d333af5e4 100644 --- a/.github/workflows/reusable-macos.yml +++ b/.github/workflows/reusable-macos.yml @@ -25,6 +25,7 @@ jobs: HOMEBREW_NO_INSTALL_CLEANUP: 1 HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 PYTHONSTRICTEXTENSIONBUILD: 1 + SCCACHE_GHA_ENABLED: "true" TERM: linux runs-on: ${{ inputs.os }} steps: @@ -41,6 +42,12 @@ jobs: brew install pkg-config openssl@3.0 xz gdbm tcl-tk@8 make # Because alternate versions are not symlinked into place by default: brew link tcl-tk@8 + - name: Start sccache-cache + uses: mozilla-actions/sccache-action@v0.0.6 + - name: Configure CC and CXX environment variables + run: | + echo "CC=sccache clang" >> "$GITHUB_ENV" + echo "CXX=sccache clang" >> "$GITHUB_ENV" - name: Configure CPython run: | GDBM_CFLAGS="-I$(brew --prefix gdbm)/include" \ diff --git a/.github/workflows/reusable-ubuntu.yml b/.github/workflows/reusable-ubuntu.yml index 43b58e6fac6534..b9bcd7c285ec93 100644 --- a/.github/workflows/reusable-ubuntu.yml +++ b/.github/workflows/reusable-ubuntu.yml @@ -25,22 +25,20 @@ jobs: FORCE_COLOR: 1 OPENSSL_VER: 3.0.15 PYTHONSTRICTEXTENSIONBUILD: 1 - TERM: linux SCCACHE_GHA_ENABLED: "true" + TERM: linux steps: - uses: actions/checkout@v4 - name: Register gcc problem matcher run: echo "::add-matcher::.github/problem-matchers/gcc.json" - - name: Run sccache-cache + - name: Install dependencies + run: sudo ./.github/workflows/posix-deps-apt.sh + - name: Start sccache-cache uses: mozilla-actions/sccache-action@v0.0.6 - with: - version: "v0.8.2" - name: Configure CC and CXX environment variables run: | echo "CC=sccache gcc" >> "$GITHUB_ENV" echo "CXX=sccache gcc" >> "$GITHUB_ENV" - - name: Install dependencies - run: sudo ./.github/workflows/posix-deps-apt.sh - name: Configure OpenSSL env vars run: | echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> "$GITHUB_ENV" From 5a9c2e4ee94cd7dd28fa5c9c86e1ca77d2370458 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Thu, 28 Nov 2024 14:54:44 -0800 Subject: [PATCH 4/7] more consistency (more could be templated?) --- .github/workflows/build.yml | 42 +++++++++++++-------------- .github/workflows/reusable-macos.yml | 4 +-- .github/workflows/reusable-tsan.yml | 15 ++++------ .github/workflows/reusable-ubuntu.yml | 4 +-- 4 files changed, 29 insertions(+), 36 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5ceecf9a545019..ecea4d398cf4e8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -92,8 +92,6 @@ jobs: timeout-minutes: 60 needs: check_source if: needs.check_source.outputs.run_tests == 'true' - env: - SCCACHE_GHA_ENABLED: "true" steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 @@ -111,10 +109,11 @@ jobs: run: sudo ./.github/workflows/posix-deps-apt.sh - name: Start sccache-cache uses: mozilla-actions/sccache-action@v0.0.6 - - name: Configure CC and CXX environment variables + - name: Configure CC and CXX env vars run: | echo "CC=sccache gcc" >> "$GITHUB_ENV" echo "CXX=sccache gcc" >> "$GITHUB_ENV" + echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV" - name: Configure CPython run: | # Build Python with the libpython dynamic library @@ -286,13 +285,13 @@ jobs: - name: Install OpenSSL if: steps.cache-openssl.outputs.cache-hit != 'true' run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --openssl "$OPENSSL_VER" --system Linux - - name: Add ccache to PATH + - name: Start sccache-cache + uses: mozilla-actions/sccache-action@v0.0.6 + - name: Configure CC and CXX env vars run: | - echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV" - - name: Configure ccache action - uses: hendrikmuhs/ccache-action@v1.2 - with: - save: false + echo "CC=sccache gcc" >> "$GITHUB_ENV" + echo "CXX=sccache gcc" >> "$GITHUB_ENV" + echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV" - name: Configure CPython run: ./configure CFLAGS="-fdiagnostics-format=json" --config-cache --enable-slower-safety --with-pydebug --with-openssl="$OPENSSL_DIR" - name: Build CPython @@ -339,13 +338,13 @@ jobs: - name: Install OpenSSL if: steps.cache-openssl.outputs.cache-hit != 'true' run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --openssl "$OPENSSL_VER" --system Linux - - name: Add ccache to PATH + - name: Start sccache-cache + uses: mozilla-actions/sccache-action@v0.0.6 + - name: Configure CC and CXX env vars run: | - echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV" - - name: Configure ccache action - uses: hendrikmuhs/ccache-action@v1.2 - with: - save: false + echo "CC=sccache gcc" >> "$GITHUB_ENV" + echo "CXX=sccache gcc" >> "$GITHUB_ENV" + echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV" - name: Setup directory envs for out-of-tree builds run: | echo "CPYTHON_RO_SRCDIR=$(realpath -m "${GITHUB_WORKSPACE}"/../cpython-ro-srcdir)" >> "$GITHUB_ENV" @@ -468,14 +467,13 @@ jobs: - name: Install OpenSSL if: steps.cache-openssl.outputs.cache-hit != 'true' run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --openssl "$OPENSSL_VER" --system Linux - - name: Add ccache to PATH + - name: Start sccache-cache + uses: mozilla-actions/sccache-action@v0.0.6 + - name: Configure CC and CXX env vars run: | - echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV" - - name: Configure ccache action - uses: hendrikmuhs/ccache-action@v1.2 - with: - save: ${{ github.event_name == 'push' }} - max-size: "200M" + echo "CC=sccache gcc" >> "$GITHUB_ENV" + echo "CXX=sccache gcc" >> "$GITHUB_ENV" + echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV" - name: Configure CPython run: ./configure --config-cache --with-address-sanitizer --without-pymalloc - name: Build CPython diff --git a/.github/workflows/reusable-macos.yml b/.github/workflows/reusable-macos.yml index e2ae7d333af5e4..e3b1a24b1bb085 100644 --- a/.github/workflows/reusable-macos.yml +++ b/.github/workflows/reusable-macos.yml @@ -25,7 +25,6 @@ jobs: HOMEBREW_NO_INSTALL_CLEANUP: 1 HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 PYTHONSTRICTEXTENSIONBUILD: 1 - SCCACHE_GHA_ENABLED: "true" TERM: linux runs-on: ${{ inputs.os }} steps: @@ -44,10 +43,11 @@ jobs: brew link tcl-tk@8 - name: Start sccache-cache uses: mozilla-actions/sccache-action@v0.0.6 - - name: Configure CC and CXX environment variables + - name: Configure CC and CXX env vars run: | echo "CC=sccache clang" >> "$GITHUB_ENV" echo "CXX=sccache clang" >> "$GITHUB_ENV" + echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV" - name: Configure CPython run: | GDBM_CFLAGS="-I$(brew --prefix gdbm)/include" \ diff --git a/.github/workflows/reusable-tsan.yml b/.github/workflows/reusable-tsan.yml index 7a4d81f0bdcad1..cfb6cbb8866120 100644 --- a/.github/workflows/reusable-tsan.yml +++ b/.github/workflows/reusable-tsan.yml @@ -45,19 +45,14 @@ jobs: sudo update-alternatives --set clang++ /usr/bin/clang++-17 # Reduce ASLR to avoid TSAN crashing sudo sysctl -w vm.mmap_rnd_bits=28 + - name: Start sccache-cache + uses: mozilla-actions/sccache-action@v0.0.6 - name: TSAN Option Setup run: | echo "TSAN_OPTIONS=log_path=${GITHUB_WORKSPACE}/tsan_log suppressions=${GITHUB_WORKSPACE}/${{ inputs.suppressions_path }} handle_segv=0" >> "$GITHUB_ENV" - echo "CC=clang" >> "$GITHUB_ENV" - echo "CXX=clang++" >> "$GITHUB_ENV" - - name: Add ccache to PATH - run: | - echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV" - - name: Configure ccache action - uses: hendrikmuhs/ccache-action@v1.2 - with: - save: ${{ github.event_name == 'push' }} - max-size: "200M" + echo "CC=sccache clang" >> "$GITHUB_ENV" + echo "CXX=sccache clang++" >> "$GITHUB_ENV" + echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV" - name: Configure CPython run: ${{ inputs.options }} - name: Build CPython diff --git a/.github/workflows/reusable-ubuntu.yml b/.github/workflows/reusable-ubuntu.yml index b9bcd7c285ec93..f1e2b780111bb8 100644 --- a/.github/workflows/reusable-ubuntu.yml +++ b/.github/workflows/reusable-ubuntu.yml @@ -25,7 +25,6 @@ jobs: FORCE_COLOR: 1 OPENSSL_VER: 3.0.15 PYTHONSTRICTEXTENSIONBUILD: 1 - SCCACHE_GHA_ENABLED: "true" TERM: linux steps: - uses: actions/checkout@v4 @@ -35,10 +34,11 @@ jobs: run: sudo ./.github/workflows/posix-deps-apt.sh - name: Start sccache-cache uses: mozilla-actions/sccache-action@v0.0.6 - - name: Configure CC and CXX environment variables + - name: Configure CC and CXX env vars run: | echo "CC=sccache gcc" >> "$GITHUB_ENV" echo "CXX=sccache gcc" >> "$GITHUB_ENV" + echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV" - name: Configure OpenSSL env vars run: | echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> "$GITHUB_ENV" From 21af49bbc79121cf09b36495fb96047c035a966e Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Thu, 28 Nov 2024 15:12:54 -0800 Subject: [PATCH 5/7] I can haz sccache for WASI CI? --- .github/workflows/reusable-wasi.yml | 10 +++------- Tools/wasm/wasi.py | 13 ++++++++++++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/.github/workflows/reusable-wasi.yml b/.github/workflows/reusable-wasi.yml index 3f96c888e2dd30..4d6dd21742c981 100644 --- a/.github/workflows/reusable-wasi.yml +++ b/.github/workflows/reusable-wasi.yml @@ -18,6 +18,7 @@ jobs: WASI_SDK_PATH: /opt/wasi-sdk CROSS_BUILD_PYTHON: cross-build/build CROSS_BUILD_WASI: cross-build/wasm32-wasip1 + SCCACHE_GHA_ENABLED: "true" steps: - uses: actions/checkout@v4 # No problem resolver registered as one doesn't currently exist for Clang. @@ -37,13 +38,8 @@ jobs: mkdir ${{ env.WASI_SDK_PATH }} && \ curl -s -S --location https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${{ env.WASI_SDK_VERSION }}/wasi-sdk-${{ env.WASI_SDK_VERSION }}.0-x86_64-linux.tar.gz | \ tar --strip-components 1 --directory ${{ env.WASI_SDK_PATH }} --extract --gunzip - - name: "Configure ccache action" - uses: hendrikmuhs/ccache-action@v1.2 - with: - save: ${{ github.event_name == 'push' }} - max-size: "200M" - - name: "Add ccache to PATH" - run: echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV" + - name: Start sccache-cache + uses: mozilla-actions/sccache-action@v0.0.6 - name: "Install Python" uses: actions/setup-python@v5 with: diff --git a/Tools/wasm/wasi.py b/Tools/wasm/wasi.py index ac36d55587a38f..647b1a3c0daa29 100644 --- a/Tools/wasm/wasi.py +++ b/Tools/wasm/wasi.py @@ -173,12 +173,23 @@ def wasi_sdk_env(context): env = {"CC": "clang", "CPP": "clang-cpp", "CXX": "clang++", "AR": "llvm-ar", "RANLIB": "ranlib"} + # sccache available? wire it up! + # used in GHA CI via .github/workflows/reusable-wasi.yaml + if subprocess.call(["sccache", "--version"], stderr=subprocess.DEVNULL) == 0: + env["CC"] = f'sccache {env["CC"]}' + env["CPP"] = f'sccache {env["CPP"]}' + env["CXX"] = f'sccache {env["CXX"]}' + for env_var, binary_name in list(env.items()): env[env_var] = os.fsdecode(wasi_sdk_path / "bin" / binary_name) + compiler_env_names = ("CC", "CPP", "CXX") if wasi_sdk_path != pathlib.Path("/opt/wasi-sdk"): - for compiler in ["CC", "CPP", "CXX"]: + for compiler in compiler_env_names: env[compiler] += f" --sysroot={sysroot}" + if subprocess.call(("sccache", "--version"), stderr=subprocess.DEVNULL) == 0: + for compiler in compiler_env_names: + env[compiler] = 'sccache ' + env[compiler] env["PKG_CONFIG_PATH"] = "" env["PKG_CONFIG_LIBDIR"] = os.pathsep.join( From 5d5dba137beb2504f8dea0eb8992de5ce9cc2f07 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Thu, 28 Nov 2024 15:19:38 -0800 Subject: [PATCH 6/7] wasi wires itself? undo my wiring. --- Tools/wasm/wasi.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Tools/wasm/wasi.py b/Tools/wasm/wasi.py index 647b1a3c0daa29..5d2b2763952ea9 100644 --- a/Tools/wasm/wasi.py +++ b/Tools/wasm/wasi.py @@ -173,13 +173,6 @@ def wasi_sdk_env(context): env = {"CC": "clang", "CPP": "clang-cpp", "CXX": "clang++", "AR": "llvm-ar", "RANLIB": "ranlib"} - # sccache available? wire it up! - # used in GHA CI via .github/workflows/reusable-wasi.yaml - if subprocess.call(["sccache", "--version"], stderr=subprocess.DEVNULL) == 0: - env["CC"] = f'sccache {env["CC"]}' - env["CPP"] = f'sccache {env["CPP"]}' - env["CXX"] = f'sccache {env["CXX"]}' - for env_var, binary_name in list(env.items()): env[env_var] = os.fsdecode(wasi_sdk_path / "bin" / binary_name) From 4d6c2ecca8126522291db15a2a8eba3b3f736a4c Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Thu, 28 Nov 2024 15:27:11 -0800 Subject: [PATCH 7/7] Add a comment pointing to the use. --- Tools/wasm/wasi.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Tools/wasm/wasi.py b/Tools/wasm/wasi.py index 5d2b2763952ea9..5b39b4037ff17e 100644 --- a/Tools/wasm/wasi.py +++ b/Tools/wasm/wasi.py @@ -180,6 +180,8 @@ def wasi_sdk_env(context): if wasi_sdk_path != pathlib.Path("/opt/wasi-sdk"): for compiler in compiler_env_names: env[compiler] += f" --sysroot={sysroot}" + + # sccache used in CI via .github/workflows/reusable-wasi.yaml if subprocess.call(("sccache", "--version"), stderr=subprocess.DEVNULL) == 0: for compiler in compiler_env_names: env[compiler] = 'sccache ' + env[compiler]