[GH-ISSUE #2704] Windows workflow execution fails, paths not resolved #1224

Open
opened 2026-03-01 21:49:47 +03:00 by kerem · 7 comments
Owner

Originally created by @CodeFHD on GitHub (Mar 22, 2025).
Original GitHub issue: https://github.com/nektos/act/issues/2704

Bug report info

act version:            0.2.74
GOOS:                   windows
GOARCH:                 amd64
NumCPU:                 6
Docker host:            DOCKER_HOST environment variable is not set
Sockets found:
        \\.\pipe\docker_engine(broken)
Config files:
        C:\Users\johannes\AppData\Local\act\actrc:
                -P ubuntu-latest=catthehacker/ubuntu:act-latest
                -P ubuntu-22.04=catthehacker/ubuntu:act-22.04
                -P ubuntu-20.04=catthehacker/ubuntu:act-20.04
                -P ubuntu-18.04=catthehacker/ubuntu:act-18.04
Build info:
        Go version:            go1.23.5
        Module path:           github.com/nektos/act
        Main version:          (devel)
        Main path:             github.com/nektos/act
        Main checksum:
        Build settings:
                -buildmode:           exe
                -compiler:            gc
                -ldflags:             -s -w -X main.version=0.2.74 -X main.commit=3f741df6bcf35bafe16247e6dcb3072c5a481977 -X main.date=2025-02-10T06:52:17Z -X main.builtBy=goreleaser
                CGO_ENABLED:          0
                GOARCH:               amd64
                GOOS:                 windows
                GOAMD64:              v1
                vcs:                  git
                vcs.revision:         3f741df6bcf35bafe16247e6dcb3072c5a481977
                vcs.time:             2025-02-10T04:34:35Z
                vcs.modified:         false
Docker Engine:
        Engine version:        28.0.1
        Engine runtime:        runc
        Cgroup version:        1
        Cgroup driver:         cgroupfs
        Storage driver:        overlayfs
        Registry URI:          https://index.docker.io/v1/
        OS:                    Docker Desktop
        OS type:               linux
        OS version:
        OS arch:               x86_64
        OS kernel:             5.15.167.4-microsoft-standard-WSL2
        OS CPU:                6
        OS memory:             15964 MB
        Security options:
                name=seccomp,profile=unconfined


level=info msg=️📣 A newer version of 'act' is available - consider ugrading to 0.2.75.

Command used with act

act -W .github\workflows\wheel-builder.yml --matrix os:windows-latest --matrix python-minor:11 --artifact-server-path C:\Users\johannes\SomePath -P windows-latest=-self-hosted

Describe issue

I am trying to locally run a workflow from the LuxCoreRender/LuxCore repository, see below.

It works on GitHub actions for all OS configurations, and I can run it locally on linux using act (on a seaprate PC, not inside WSL, just to be clear).

Running it on Windows, I am stuck at the following error:

[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] Run Main Configure git for long paths
| /bin/bash: C:/Users/johannes/.cache/act/d64a40e607bb907a/act/workflow/0.sh: No such file or directory

The file exists and contains the command that is supposed to be run for this step of the workflow.

I suspect the error is because the windows path C:/... is not resolved to /mnt/c/... as it would be accessible inside WSL.

I could not find any solution to this problem online so far, neither in the context of act or plain Docker.
I did attempt to reinstall WSL and Docker, but without change.

Any help to solve or further debug this would be appreciated.

https://github.com/LuxCoreRender/LuxCore/blob/for_v2.10/.github/workflows/wheel-builder.yml

Workflow content

# SPDX-FileCopyrightText: 2024 Howetuft
#
# SPDX-License-Identifier: Apache-2.0

# This action is the 1st part of a larger toolchain. You will find the other
# components in LuxCoreRender/LuxCoreWheels repository


name: LuxCore Python Wheels Builder

on:
  workflow_dispatch:
  workflow_call:
    inputs:
      repository:
        description: 'Repository to check out'
        required: false
        default: ''
        type: string
      ref:
        description: 'The branch, tag or SHA to checkout.'
        required: false
        default: ''
        type: string
      version:
        description: 'The version to build - must comply to semver, or blank for default'
        type: string
    outputs:
      commit:
        description: "The commit that has been checked out"
        value: ${{ jobs.build-wheels.outputs.commit }}
      branch:
        description: "The branch that has been checked out"
        value: ${{ jobs.build-wheels.outputs.branch }}
      attestation-url:
        description: "The url to the attestations"
        value: ${{ jobs.attest-wheels.outputs.attestation-url }}
      version:
        description: "The version actually built"
        value: ${{ jobs.build-wheels.outputs.version }}
  push:

jobs:
  build-wheels:
    name: Build wheel ${{ matrix.os }}-3.${{ matrix.python-minor }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        python-minor: [9, 10, 11, 12, 13]
        os: [ubuntu-latest, windows-latest, macos-13, macos-14]
        #python-minor: [ 9 ]
        #python-minor: [ 12]
        #os: [macos-14]
        #python-minor: [ 11]
        #os: [windows-latest]
        #python-minor: [ 11]
        #os: [macos-13]
    env:
      # Reminder: report all variables here to CIBW_ENVIRONMENT_PASS_LINUX
      BUILD_TYPE: Release
      CXX_VERSION: 20
      GCC_VERSION: 14
      GLIBC_VERSION: 2_28
      GH_TOKEN: ${{ github.token }}
      PYTHON_MINOR: ${{ matrix.python-minor }}
    outputs:
      commit: ${{ steps.current-commit.outputs.commit }}
      branch: ${{ steps.current-commit.outputs.branch }}
      version: ${{ steps.output-version.outputs.version }}

    steps:

      - name: Configure git for long paths
        shell: bash
        if: runner.os == 'Windows'
        run: git config --system core.longpaths true

      - name: Checkout main repository (standard context)
        if: ${{ !env.ACT }}
        uses: actions/checkout@v4
        with:
          repository: ${{ inputs.repository }}
          ref: ${{ inputs.ref }}

      - name: Checkout main repository (act context)
        if: env.ACT
        uses: actions/checkout@v4

      - name: Get current commit
        id: current-commit
        run: |
          echo "commit=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
          echo "branch=$(git symbolic-ref HEAD)" >> $GITHUB_OUTPUT
          echo "commit=$(git rev-parse HEAD)"
          echo "branch=$(git symbolic-ref HEAD)"

      - name: Find workspace
        shell: bash
        run: |
          case ${{ runner.os }} in
            Linux) _workspace="/project";;
            Windows) _workspace=$(cygpath -u $GITHUB_WORKSPACE);;
            macOS) _workspace="$GITHUB_WORKSPACE";;
            *) echo "Unhandled os ${{ runner.os }}";exit 64;;
          esac
          echo "WORKSPACE=${_workspace}" >> $GITHUB_ENV

      - name: Set Conan parameters
        shell: bash
        run: |
            _build_type=$(echo "${{ env.BUILD_TYPE }}" | tr '[:upper:]' '[:lower:]')
            _conan_home="${{ env.WORKSPACE }}/.conan2"
            echo "CONAN_PRESET=conan-${_build_type}" >> $GITHUB_ENV
            echo "CONAN_HOME=${_conan_home}" >> $GITHUB_ENV

      - name: Configure ccache
        uses: actions/github-script@v7
        with:
          script: |
            const workspace = String.raw`${{ github.workspace }}`;

            const envVariables = {
                'cache-variant': String.raw`ccache`,
                'CMAKE_CXX_COMPILER_LAUNCHER': String.raw`ccache`,
                'CMAKE_C_COMPILER_LAUNCHER': String.raw`ccache`,
                'CCACHE_CONFIGPATH': String.raw`${workspace}/ccache.conf`,
                'CCACHE_DIR': String.raw`${workspace}/.ccache`,
                'CCACHE_DEBUGDIR': String.raw`${workspace}/ccache-debug`,
                'CCACHE_LOGFILE': String.raw`${workspace}/ccache.log`
            };

            for (const [key, value] of Object.entries(envVariables)) {
                core.exportVariable(key, value);
            }

      # Update apt: needed to install ccache
      - name: Update apt (Linux)
        if: runner.os == 'Linux'
        shell: bash
        run: |
          sudo apt-get update -y

      - name: ccache
        uses: hendrikmuhs/ccache-action@v1.2
        with:
          create-symlink: false
          variant: ${{ env.cache-variant }}
          key: cpl-${{ matrix.os }}-${{ matrix.python-minor}}
          restore-keys: cpl-${{ matrix.os }}-${{ matrix.python-minor}}-
          max-size: 5G
          verbose: 1

      - name: Prepare msvc
        if: runner.os == 'Windows'
        uses: ilammy/msvc-dev-cmd@v1

      - name: Prepare Linux
        if: runner.os == 'Linux'
        shell: bash
        run: |
          _V=${{ env.GCC_VERSION }}
          _T=/opt/rh/gcc-toolset-${_V}/root

          echo "TOOLSET_ROOT=${_T}" >> $GITHUB_ENV
          echo "CXX=${_T}/usr/bin/g++" >> $GITHUB_ENV
          echo "CC=${_T}/usr/bin/gcc" >> $GITHUB_ENV
          echo "AR=${_T}/usr/bin/ar" >> $GITHUB_ENV
          echo "RANLIB=${_T}/usr/bin/ranlib" >> $GITHUB_ENV

      - name: Set MacOS deployment target
        if: runner.os == 'macOS'
        uses: actions/github-script@v7
        with:
          script: |
            if ('${{ runner.arch }}' == 'X64') {
              target = '10.15';
              arch='x86_64';
            }
            else if ('${{ env.PYTHON_MINOR }}' != '8') {
              target = '11.0';
              arch='armv8';
            }
            else {
              target = '12.0';
              arch='armv8';
            }
            core.exportVariable('MACOSX_DEPLOYMENT_TARGET', target);
            core.exportVariable('PKG_ARCH', arch);

      # TODO: The following block is an ugly hack but, at the moment (2025-02-25),
      # scikit-build-core lacks a preset parameter, so this is the only way
      # I found to pass a calculated environment var to CMake build step
      - name: Set M4 env var
        if: runner.os != 'Windows'
        uses: actions/github-script@v7
        with:
          script: |
            if ('${{ runner.arch }}' == 'X64') {
              arch = 'x86_64'
            } else {
              arch = 'armv8'
            }
            base = '${{ env.WORKSPACE }}/out/dependencies/full_deploy/host/m4/1.4.19/Release/'
            core.exportVariable('M4', base + arch + '/bin/m4')

      - name: Export version for scikit-build-core
        shell: python
        run: |
          import json
          if (input_version := "${{ inputs.release-version }}"):
            result = input_version
          else:
            with open("luxcore.json") as in_file:
              default_version = json.load(in_file)["DefaultVersion"]
            result = ".".join(default_version[i] for i in ("major", "minor", "patch"))
            if (prerelease := default_version["prerelease"]):
              result = f"{result}-{prerelease}"

          print(f"Version: {result}")

          with open("SKVERSION", "w+") as out_file:
            out_file.write(result)

      - name: Output version
        id: output-version
        shell: bash
        run: |
          _version=$(cat SKVERSION)
          echo "version=${_version}" >> "$GITHUB_OUTPUT"


      # Build wheel
      - name: Build wheels
        uses: pypa/cibuildwheel@v2.22.0
        env:
          CIBW_BUILD_FRONTEND: build
          CIBW_BUILD_VERBOSITY: 1
          CIBW_BUILD: cp3${{ matrix.python-minor }}-*
          CIBW_SKIP: "*musllinux*"
          CIBW_ARCHS: auto64
          CIBW_MANYLINUX_X86_64_IMAGE: quay.io/pypa/manylinux_${{ env.GLIBC_VERSION }}_x86_64
          CIBW_ENVIRONMENT: >
            SKBUILD_CMAKE_ARGS='--preset conan-default;--log-level=VERBOSE;-DLUXCORE_VERSION=${{ steps.output-version.outputs.version }};-G Ninja Multi-Config'
            SKBUILD_CMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }}
            #LUX_GENERATOR='Ninja'
          CIBW_ENVIRONMENT_PASS_LINUX: |
            CC
            CXX
            BUILD_TYPE
            GCC_VERSION
            SANITIZE
            ASAN_PATH
            RUNNER_OS
            RUNNER_ARCH
            WORKSPACE
            CMAKE_CXX_COMPILER_LAUNCHER
            CMAKE_C_COMPILER_LAUNCHER
            PYTHON_MINOR
            BOOST_INSTALL_LAYOUT
            SPDLOG_FMT_EXTERNAL
            CXX_VERSION
            CONAN_HOME
            CONAN_PRESET
            M4
          CIBW_BEFORE_ALL_LINUX: |
            # Install toolchain (gcc, ccache...)
            dnf install -y epel-release
            dnf install -y almalinux-release-devel
            dnf install -y ccache
            dnf install -y sudo  # for gtk3...
            dnf install -y perl-IPC-Cmd perl-Digest-SHA

            # Manylinux_2_34 compatibility
            if [[ ${{ env.GLIBC_VERSION }} != 2_28 ]]; then
              dnf install -y perl-FindBin perl-lib
            fi

            pip install conan && make deps

          CIBW_BEFORE_ALL_MACOS: |
            pip install conan && make deps

          CIBW_BEFORE_ALL_WINDOWS: |
            pip install conan && make deps


          CIBW_REPAIR_WHEEL_COMMAND_LINUX: |
            paths=$(find /project -type d -wholename "*/lib" -print0 | xargs -0 realpath | tr "\n" ":")
            LD_LIBRARY_PATH=$paths:$LD_LIBRARY_PATH
            echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}"
            export LD_LIBRARY_PATH

            ## Check build data
            unzip {wheel} -d /tmp/wheel

            auditwheel \
              --verbose repair -w {dest_dir} \
              --plat manylinux_${{ env.GLIBC_VERSION }}_x86_64 \
              --only-plat \
              ${{ env.BUILD_TYPE == 'Release' && '--strip' || '' }} \
              {wheel}

          CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: |
            bash.exe ${{ env.WORKSPACE }}/scripts/repair_wheel_windows.sh '{wheel}' '{dest_dir}' '%VCToolsRedistDir%%Platform%' '${{ env.WORKSPACE }}'
          CIBW_REPAIR_WHEEL_COMMAND_MACOS: |
            cp {wheel} ${{ env.WORKSPACE }}
            paths=$(find ${{ env.WORKSPACE }} -type d -wholename "*/lib" -print0 | xargs -0 realpath | tr "\n" ":")
            DYLD_LIBRARY_PATH=$paths:$DYLD_LIBRARY_PATH
            echo "DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}"
            export DYLD_LIBRARY_PATH
            delocate-listdeps -v {wheel}
            delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v {wheel}
          CIBW_TEST_COMMAND_LINUX: pyluxcoretest
          CIBW_TEST_COMMAND_WINDOWS: pyluxcoretest
          CIBW_TEST_COMMAND_MACOS: |
            if [[ ${{ matrix.os }} == 'macos-13' ]]; then
              # Only for Intel: ARM runner raises an OpenCL driver issue
              pyluxcoretest
            fi
          CIBW_CONTAINER_ENGINE: >
            docker;
            create_args:
              --mount type=bind,source=${{ env.CCACHE_DIR }},target=/root/.ccache

        with:
            package-dir: .
            output-dir: wheelhouse
            config-file: "{package}/pyproject.toml"


      - name: Save dependency cache
        if: always()
        id: cache-deps-save
        uses: actions/cache/save@v4
        with:
          path: conan-cache
          key: deps-${{ matrix.os }}-${{ matrix.python-minor}}-${{ hashFiles('**/conan-cache') }}

      #- name: Setup tmate session
        #uses: mxschmitt/action-tmate@v3

      #- name: Setup tmate session (debug)
        #if: ${{ failure() }}
        #uses: mxschmitt/action-tmate@v3

      # Upload artifacts
      - uses: actions/upload-artifact@v4
        id: upload
        with:
          name: cibw-wheels-${{ matrix.os }}-${{ matrix.python-minor }}
          path: ./wheelhouse/*.whl

  attest-wheels:
    needs: [build-wheels]
    runs-on: ubuntu-latest
    permissions:
      attestations: write
      id-token: write
    outputs:
      attestation-url: ${{ steps.attestation-step.outputs.attestation-url }}

    steps:
      - uses: actions/download-artifact@v4
        if: ${{ !env.ACT }}
        with:
          pattern: cibw-wheels-*
          path: ${{ github.workspace }}/dist
          merge-multiple: false

      - name: Generate artifact attestations
        id: attestation-step
        if: ${{ !env.ACT }}
        uses: actions/attest-build-provenance@v2
        with:
          subject-path: ${{ github.workspace }}/dist/*

Relevant log output

time="2025-03-22T13:23:41+01:00" level=info msg="Using docker host 'npipe:////./pipe/docker_engine', and daemon socket 'npipe:////./pipe/docker_engine'"
time="2025-03-22T13:23:41+01:00" level=info msg="Start server on http://192.168.178.20:34567"
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ⭐ Run Set up job
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11]   ✅  Success - Set up job
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11]   ☁  git clone 'https://github.com/actions/checkout' # ref=v4
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11]   ☁  git clone 'https://github.com/actions/github-script' # ref=v7
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11]   ☁  git clone 'https://github.com/hendrikmuhs/ccache-action' # ref=v1.2
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11]   ☁  git clone 'https://github.com/ilammy/msvc-dev-cmd' # ref=v1
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11]   ☁  git clone 'https://github.com/actions/github-script' # ref=v7
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11]   ☁  git clone 'https://github.com/actions/github-script' # ref=v7
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11]   ☁  git clone 'https://github.com/pypa/cibuildwheel' # ref=v2.22.0
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ⭐ Run Pre Build wheels
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11]   ☁  git clone 'https://github.com/actions/setup-python' # ref=v5
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11]   ✅  Success - Pre Build wheels
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11]   ☁  git clone 'https://github.com/actions/cache' # ref=v4
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11]   ☁  git clone 'https://github.com/actions/upload-artifact' # ref=v4
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] 🧪  Matrix: map[os:windows-latest python-minor:11]
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ⭐ Run Main Configure git for long paths
| /bin/bash: C:/Users/johannes/.cache/act/2836420ea4013eaf/act/workflow/0.sh: No such file or directory
                                                                                                       [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11]   ❌  Failure - Main Configure git for long paths
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] exit status 1
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ⭐ Run Main Save dependency cache
| Cannot find: node in PATH
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11]   ❌  Failure - Main Save dependency cache
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] Cannot find: node in PATH
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ⭐ Run Complete job
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11]   ✅  Success - Complete job
[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] 🏁  Job failed
Error: Job 'Build wheel ${{ matrix.os }}-3.${{ matrix.python-minor }}' failed

Additional information

No response

Originally created by @CodeFHD on GitHub (Mar 22, 2025). Original GitHub issue: https://github.com/nektos/act/issues/2704 ### Bug report info ```plain text act version: 0.2.74 GOOS: windows GOARCH: amd64 NumCPU: 6 Docker host: DOCKER_HOST environment variable is not set Sockets found: \\.\pipe\docker_engine(broken) Config files: C:\Users\johannes\AppData\Local\act\actrc: -P ubuntu-latest=catthehacker/ubuntu:act-latest -P ubuntu-22.04=catthehacker/ubuntu:act-22.04 -P ubuntu-20.04=catthehacker/ubuntu:act-20.04 -P ubuntu-18.04=catthehacker/ubuntu:act-18.04 Build info: Go version: go1.23.5 Module path: github.com/nektos/act Main version: (devel) Main path: github.com/nektos/act Main checksum: Build settings: -buildmode: exe -compiler: gc -ldflags: -s -w -X main.version=0.2.74 -X main.commit=3f741df6bcf35bafe16247e6dcb3072c5a481977 -X main.date=2025-02-10T06:52:17Z -X main.builtBy=goreleaser CGO_ENABLED: 0 GOARCH: amd64 GOOS: windows GOAMD64: v1 vcs: git vcs.revision: 3f741df6bcf35bafe16247e6dcb3072c5a481977 vcs.time: 2025-02-10T04:34:35Z vcs.modified: false Docker Engine: Engine version: 28.0.1 Engine runtime: runc Cgroup version: 1 Cgroup driver: cgroupfs Storage driver: overlayfs Registry URI: https://index.docker.io/v1/ OS: Docker Desktop OS type: linux OS version: OS arch: x86_64 OS kernel: 5.15.167.4-microsoft-standard-WSL2 OS CPU: 6 OS memory: 15964 MB Security options: name=seccomp,profile=unconfined level=info msg=️📣 A newer version of 'act' is available - consider ugrading to 0.2.75. ``` ### Command used with act ```sh act -W .github\workflows\wheel-builder.yml --matrix os:windows-latest --matrix python-minor:11 --artifact-server-path C:\Users\johannes\SomePath -P windows-latest=-self-hosted ``` ### Describe issue I am trying to locally run a workflow from the LuxCoreRender/LuxCore repository, see below. It works on GitHub actions for all OS configurations, and I can run it locally on linux using act (on a seaprate PC, not inside WSL, just to be clear). Running it on Windows, I am stuck at the following error: >[LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ⭐ Run Main Configure git for long paths >| /bin/bash: C:/Users/johannes/.cache/act/d64a40e607bb907a/act/workflow/0.sh: No such file or directory The file exists and contains the command that is supposed to be run for this step of the workflow. I suspect the error is because the windows path `C:/...` is not resolved to `/mnt/c/...` as it would be accessible inside WSL. I could not find any solution to this problem online so far, neither in the context of act or plain Docker. I did attempt to reinstall WSL and Docker, but without change. Any help to solve or further debug this would be appreciated. ### Link to GitHub repository https://github.com/LuxCoreRender/LuxCore/blob/for_v2.10/.github/workflows/wheel-builder.yml ### Workflow content ```yml # SPDX-FileCopyrightText: 2024 Howetuft # # SPDX-License-Identifier: Apache-2.0 # This action is the 1st part of a larger toolchain. You will find the other # components in LuxCoreRender/LuxCoreWheels repository name: LuxCore Python Wheels Builder on: workflow_dispatch: workflow_call: inputs: repository: description: 'Repository to check out' required: false default: '' type: string ref: description: 'The branch, tag or SHA to checkout.' required: false default: '' type: string version: description: 'The version to build - must comply to semver, or blank for default' type: string outputs: commit: description: "The commit that has been checked out" value: ${{ jobs.build-wheels.outputs.commit }} branch: description: "The branch that has been checked out" value: ${{ jobs.build-wheels.outputs.branch }} attestation-url: description: "The url to the attestations" value: ${{ jobs.attest-wheels.outputs.attestation-url }} version: description: "The version actually built" value: ${{ jobs.build-wheels.outputs.version }} push: jobs: build-wheels: name: Build wheel ${{ matrix.os }}-3.${{ matrix.python-minor }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: python-minor: [9, 10, 11, 12, 13] os: [ubuntu-latest, windows-latest, macos-13, macos-14] #python-minor: [ 9 ] #python-minor: [ 12] #os: [macos-14] #python-minor: [ 11] #os: [windows-latest] #python-minor: [ 11] #os: [macos-13] env: # Reminder: report all variables here to CIBW_ENVIRONMENT_PASS_LINUX BUILD_TYPE: Release CXX_VERSION: 20 GCC_VERSION: 14 GLIBC_VERSION: 2_28 GH_TOKEN: ${{ github.token }} PYTHON_MINOR: ${{ matrix.python-minor }} outputs: commit: ${{ steps.current-commit.outputs.commit }} branch: ${{ steps.current-commit.outputs.branch }} version: ${{ steps.output-version.outputs.version }} steps: - name: Configure git for long paths shell: bash if: runner.os == 'Windows' run: git config --system core.longpaths true - name: Checkout main repository (standard context) if: ${{ !env.ACT }} uses: actions/checkout@v4 with: repository: ${{ inputs.repository }} ref: ${{ inputs.ref }} - name: Checkout main repository (act context) if: env.ACT uses: actions/checkout@v4 - name: Get current commit id: current-commit run: | echo "commit=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT echo "branch=$(git symbolic-ref HEAD)" >> $GITHUB_OUTPUT echo "commit=$(git rev-parse HEAD)" echo "branch=$(git symbolic-ref HEAD)" - name: Find workspace shell: bash run: | case ${{ runner.os }} in Linux) _workspace="/project";; Windows) _workspace=$(cygpath -u $GITHUB_WORKSPACE);; macOS) _workspace="$GITHUB_WORKSPACE";; *) echo "Unhandled os ${{ runner.os }}";exit 64;; esac echo "WORKSPACE=${_workspace}" >> $GITHUB_ENV - name: Set Conan parameters shell: bash run: | _build_type=$(echo "${{ env.BUILD_TYPE }}" | tr '[:upper:]' '[:lower:]') _conan_home="${{ env.WORKSPACE }}/.conan2" echo "CONAN_PRESET=conan-${_build_type}" >> $GITHUB_ENV echo "CONAN_HOME=${_conan_home}" >> $GITHUB_ENV - name: Configure ccache uses: actions/github-script@v7 with: script: | const workspace = String.raw`${{ github.workspace }}`; const envVariables = { 'cache-variant': String.raw`ccache`, 'CMAKE_CXX_COMPILER_LAUNCHER': String.raw`ccache`, 'CMAKE_C_COMPILER_LAUNCHER': String.raw`ccache`, 'CCACHE_CONFIGPATH': String.raw`${workspace}/ccache.conf`, 'CCACHE_DIR': String.raw`${workspace}/.ccache`, 'CCACHE_DEBUGDIR': String.raw`${workspace}/ccache-debug`, 'CCACHE_LOGFILE': String.raw`${workspace}/ccache.log` }; for (const [key, value] of Object.entries(envVariables)) { core.exportVariable(key, value); } # Update apt: needed to install ccache - name: Update apt (Linux) if: runner.os == 'Linux' shell: bash run: | sudo apt-get update -y - name: ccache uses: hendrikmuhs/ccache-action@v1.2 with: create-symlink: false variant: ${{ env.cache-variant }} key: cpl-${{ matrix.os }}-${{ matrix.python-minor}} restore-keys: cpl-${{ matrix.os }}-${{ matrix.python-minor}}- max-size: 5G verbose: 1 - name: Prepare msvc if: runner.os == 'Windows' uses: ilammy/msvc-dev-cmd@v1 - name: Prepare Linux if: runner.os == 'Linux' shell: bash run: | _V=${{ env.GCC_VERSION }} _T=/opt/rh/gcc-toolset-${_V}/root echo "TOOLSET_ROOT=${_T}" >> $GITHUB_ENV echo "CXX=${_T}/usr/bin/g++" >> $GITHUB_ENV echo "CC=${_T}/usr/bin/gcc" >> $GITHUB_ENV echo "AR=${_T}/usr/bin/ar" >> $GITHUB_ENV echo "RANLIB=${_T}/usr/bin/ranlib" >> $GITHUB_ENV - name: Set MacOS deployment target if: runner.os == 'macOS' uses: actions/github-script@v7 with: script: | if ('${{ runner.arch }}' == 'X64') { target = '10.15'; arch='x86_64'; } else if ('${{ env.PYTHON_MINOR }}' != '8') { target = '11.0'; arch='armv8'; } else { target = '12.0'; arch='armv8'; } core.exportVariable('MACOSX_DEPLOYMENT_TARGET', target); core.exportVariable('PKG_ARCH', arch); # TODO: The following block is an ugly hack but, at the moment (2025-02-25), # scikit-build-core lacks a preset parameter, so this is the only way # I found to pass a calculated environment var to CMake build step - name: Set M4 env var if: runner.os != 'Windows' uses: actions/github-script@v7 with: script: | if ('${{ runner.arch }}' == 'X64') { arch = 'x86_64' } else { arch = 'armv8' } base = '${{ env.WORKSPACE }}/out/dependencies/full_deploy/host/m4/1.4.19/Release/' core.exportVariable('M4', base + arch + '/bin/m4') - name: Export version for scikit-build-core shell: python run: | import json if (input_version := "${{ inputs.release-version }}"): result = input_version else: with open("luxcore.json") as in_file: default_version = json.load(in_file)["DefaultVersion"] result = ".".join(default_version[i] for i in ("major", "minor", "patch")) if (prerelease := default_version["prerelease"]): result = f"{result}-{prerelease}" print(f"Version: {result}") with open("SKVERSION", "w+") as out_file: out_file.write(result) - name: Output version id: output-version shell: bash run: | _version=$(cat SKVERSION) echo "version=${_version}" >> "$GITHUB_OUTPUT" # Build wheel - name: Build wheels uses: pypa/cibuildwheel@v2.22.0 env: CIBW_BUILD_FRONTEND: build CIBW_BUILD_VERBOSITY: 1 CIBW_BUILD: cp3${{ matrix.python-minor }}-* CIBW_SKIP: "*musllinux*" CIBW_ARCHS: auto64 CIBW_MANYLINUX_X86_64_IMAGE: quay.io/pypa/manylinux_${{ env.GLIBC_VERSION }}_x86_64 CIBW_ENVIRONMENT: > SKBUILD_CMAKE_ARGS='--preset conan-default;--log-level=VERBOSE;-DLUXCORE_VERSION=${{ steps.output-version.outputs.version }};-G Ninja Multi-Config' SKBUILD_CMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} #LUX_GENERATOR='Ninja' CIBW_ENVIRONMENT_PASS_LINUX: | CC CXX BUILD_TYPE GCC_VERSION SANITIZE ASAN_PATH RUNNER_OS RUNNER_ARCH WORKSPACE CMAKE_CXX_COMPILER_LAUNCHER CMAKE_C_COMPILER_LAUNCHER PYTHON_MINOR BOOST_INSTALL_LAYOUT SPDLOG_FMT_EXTERNAL CXX_VERSION CONAN_HOME CONAN_PRESET M4 CIBW_BEFORE_ALL_LINUX: | # Install toolchain (gcc, ccache...) dnf install -y epel-release dnf install -y almalinux-release-devel dnf install -y ccache dnf install -y sudo # for gtk3... dnf install -y perl-IPC-Cmd perl-Digest-SHA # Manylinux_2_34 compatibility if [[ ${{ env.GLIBC_VERSION }} != 2_28 ]]; then dnf install -y perl-FindBin perl-lib fi pip install conan && make deps CIBW_BEFORE_ALL_MACOS: | pip install conan && make deps CIBW_BEFORE_ALL_WINDOWS: | pip install conan && make deps CIBW_REPAIR_WHEEL_COMMAND_LINUX: | paths=$(find /project -type d -wholename "*/lib" -print0 | xargs -0 realpath | tr "\n" ":") LD_LIBRARY_PATH=$paths:$LD_LIBRARY_PATH echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}" export LD_LIBRARY_PATH ## Check build data unzip {wheel} -d /tmp/wheel auditwheel \ --verbose repair -w {dest_dir} \ --plat manylinux_${{ env.GLIBC_VERSION }}_x86_64 \ --only-plat \ ${{ env.BUILD_TYPE == 'Release' && '--strip' || '' }} \ {wheel} CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: | bash.exe ${{ env.WORKSPACE }}/scripts/repair_wheel_windows.sh '{wheel}' '{dest_dir}' '%VCToolsRedistDir%%Platform%' '${{ env.WORKSPACE }}' CIBW_REPAIR_WHEEL_COMMAND_MACOS: | cp {wheel} ${{ env.WORKSPACE }} paths=$(find ${{ env.WORKSPACE }} -type d -wholename "*/lib" -print0 | xargs -0 realpath | tr "\n" ":") DYLD_LIBRARY_PATH=$paths:$DYLD_LIBRARY_PATH echo "DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}" export DYLD_LIBRARY_PATH delocate-listdeps -v {wheel} delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v {wheel} CIBW_TEST_COMMAND_LINUX: pyluxcoretest CIBW_TEST_COMMAND_WINDOWS: pyluxcoretest CIBW_TEST_COMMAND_MACOS: | if [[ ${{ matrix.os }} == 'macos-13' ]]; then # Only for Intel: ARM runner raises an OpenCL driver issue pyluxcoretest fi CIBW_CONTAINER_ENGINE: > docker; create_args: --mount type=bind,source=${{ env.CCACHE_DIR }},target=/root/.ccache with: package-dir: . output-dir: wheelhouse config-file: "{package}/pyproject.toml" - name: Save dependency cache if: always() id: cache-deps-save uses: actions/cache/save@v4 with: path: conan-cache key: deps-${{ matrix.os }}-${{ matrix.python-minor}}-${{ hashFiles('**/conan-cache') }} #- name: Setup tmate session #uses: mxschmitt/action-tmate@v3 #- name: Setup tmate session (debug) #if: ${{ failure() }} #uses: mxschmitt/action-tmate@v3 # Upload artifacts - uses: actions/upload-artifact@v4 id: upload with: name: cibw-wheels-${{ matrix.os }}-${{ matrix.python-minor }} path: ./wheelhouse/*.whl attest-wheels: needs: [build-wheels] runs-on: ubuntu-latest permissions: attestations: write id-token: write outputs: attestation-url: ${{ steps.attestation-step.outputs.attestation-url }} steps: - uses: actions/download-artifact@v4 if: ${{ !env.ACT }} with: pattern: cibw-wheels-* path: ${{ github.workspace }}/dist merge-multiple: false - name: Generate artifact attestations id: attestation-step if: ${{ !env.ACT }} uses: actions/attest-build-provenance@v2 with: subject-path: ${{ github.workspace }}/dist/* ``` ### Relevant log output ```sh time="2025-03-22T13:23:41+01:00" level=info msg="Using docker host 'npipe:////./pipe/docker_engine', and daemon socket 'npipe:////./pipe/docker_engine'" time="2025-03-22T13:23:41+01:00" level=info msg="Start server on http://192.168.178.20:34567" [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ⭐ Run Set up job [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ✅ Success - Set up job [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ☁ git clone 'https://github.com/actions/checkout' # ref=v4 [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ☁ git clone 'https://github.com/actions/github-script' # ref=v7 [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ☁ git clone 'https://github.com/hendrikmuhs/ccache-action' # ref=v1.2 [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ☁ git clone 'https://github.com/ilammy/msvc-dev-cmd' # ref=v1 [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ☁ git clone 'https://github.com/actions/github-script' # ref=v7 [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ☁ git clone 'https://github.com/actions/github-script' # ref=v7 [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ☁ git clone 'https://github.com/pypa/cibuildwheel' # ref=v2.22.0 [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ⭐ Run Pre Build wheels [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ☁ git clone 'https://github.com/actions/setup-python' # ref=v5 [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ✅ Success - Pre Build wheels [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ☁ git clone 'https://github.com/actions/cache' # ref=v4 [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ☁ git clone 'https://github.com/actions/upload-artifact' # ref=v4 [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] 🧪 Matrix: map[os:windows-latest python-minor:11] [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ⭐ Run Main Configure git for long paths | /bin/bash: C:/Users/johannes/.cache/act/2836420ea4013eaf/act/workflow/0.sh: No such file or directory [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ❌ Failure - Main Configure git for long paths [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] exit status 1 [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ⭐ Run Main Save dependency cache | Cannot find: node in PATH [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ❌ Failure - Main Save dependency cache [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] Cannot find: node in PATH [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ⭐ Run Complete job [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] ✅ Success - Complete job [LuxCore Python Wheels Builder/Build wheel windows-latest-3.11] 🏁 Job failed Error: Job 'Build wheel ${{ matrix.os }}-3.${{ matrix.python-minor }}' failed ``` ### Additional information _No response_
Author
Owner

@ChristopherHX commented on GitHub (Mar 22, 2025):

FYI you need bash.exe of mingw, msys, cygwin, or the one of git for windows in your PATH before system32.
Removing wsl2 removes before system32 requirement

wsl bash can work if you use a custom shell and do some magic, but this is not act specific at all.

<!-- gh-comment-id:2745250904 --> @ChristopherHX commented on GitHub (Mar 22, 2025): FYI you need `bash.exe` of mingw, msys, cygwin, or the one of git for windows in your `PATH` **before system32**. Removing wsl2 removes `before system32` requirement wsl bash can work if you use a custom `shell` and do some magic, but this is not act specific at all.
Author
Owner

@CodeFHD commented on GitHub (Mar 22, 2025):

Thanks! That seems to have helped.

I had a fresh installation of cygwin, but it was not on path. bash.exe was only found in system32. (neither from mingw or git for windows.)
After appending C:\cygwin64\bin to the beginning of path, the error disappeared.

I still get another error causing the workflow to fail. I will investigate further. If that seems unrelated to the path issue, I will close this.

<!-- gh-comment-id:2745256964 --> @CodeFHD commented on GitHub (Mar 22, 2025): Thanks! That seems to have helped. I had a fresh installation of cygwin, but it was not on path. bash.exe was only found in system32. (neither from mingw or git for windows.) After appending `C:\cygwin64\bin` to the beginning of path, the error disappeared. I still get another error causing the workflow to fail. I will investigate further. If that seems unrelated to the path issue, I will close this.
Author
Owner

@CodeFHD commented on GitHub (Mar 22, 2025):

Update: I do get a similar error in a later step when another github action is called. (pypa/cibuildwheel)

| C:/Users/johannes/.cache/act/b20426c31cd08834/act/workflow/15-composite-cibw.sh: line 3: C:\Users\johannes\.cache\act\tool_cache\Python\3.12.9\x64\python.exe: command not found

It appears the output ${{ steps.python.outputs.python-path }} in this line github.com/pypa/cibuildwheel@462c99589a/action.yml (L37C10-L37C49) hasn't been converted. This is generated by actions/setup-python@v5

[EDIT 23.03.: Edited the path because due to markdown it was not dispalyed correctly - backslash before .cache was not displayed.]

<!-- gh-comment-id:2745287438 --> @CodeFHD commented on GitHub (Mar 22, 2025): Update: I do get a similar error in a later step when another github action is called. (pypa/cibuildwheel) > | C:/Users/johannes/.cache/act/b20426c31cd08834/act/workflow/15-composite-cibw.sh: line 3: C:\Users\johannes\\.cache\act\tool_cache\Python\3.12.9\x64\python.exe: command not found It appears the output `${{ steps.python.outputs.python-path }}` in this line https://github.com/pypa/cibuildwheel/blob/462c99589a225e8c44a682e210bdd74b90be512c/action.yml#L37C10-L37C49 hasn't been converted. This is generated by actions/setup-python@v5 [EDIT 23.03.: Edited the path because due to markdown it was not dispalyed correctly - backslash before `.cache` was not displayed.]
Author
Owner

@ChristopherHX commented on GitHub (Mar 23, 2025):

It appears the output ${{ steps.python.outputs.python-path }} in this line github.com/pypa/cibuildwheel@462c99589a/action.yml (L37C10-L37C49) hasn't been converted

  • For me is looking C:\Users\johannes.cache\act\tool_cache\Python\3.12.9\x64\python.exe perfectly correct on windows
  • Is python.exe not in this filepath? This is the correct tool_cache folder.
  • Is the bash used by windows-latest different and accept this syntax?

Act does not aim to alter outputs generated by actions, the shell path used forward slashes / just because someone opened an issue here and this increases compatibility a bit for some bash for windows.

<!-- gh-comment-id:2746146741 --> @ChristopherHX commented on GitHub (Mar 23, 2025): > It appears the output ${{ steps.python.outputs.python-path }} in this line https://github.com/pypa/cibuildwheel/blob/462c99589a225e8c44a682e210bdd74b90be512c/action.yml#L37C10-L37C49 hasn't been converted - For me is looking C:\Users\johannes.cache\act\tool_cache\Python\3.12.9\x64\python.exe perfectly correct on windows - Is python.exe not in this filepath? This is the correct tool_cache folder. - Is the bash used by windows-latest different and accept this syntax? Act does not aim to alter outputs generated by actions, the shell path used forward slashes `/` just because someone opened an issue here and this increases compatibility a bit for some bash for windows.
Author
Owner

@CodeFHD commented on GitHub (Mar 23, 2025):

That's exactly the point (again): The path is valid, and python.exe is there.

I have tested the Cygwin-bash, which is now the first on PATH. While it generally accepts Windows-Style paths, it seems to require either single-forward- or double-back-slash everywhere except after the drive letter:

  • C:/Users/johannes is valid
  • C:\\Users\\johannes is valid
  • C:\Users\\johannes is valid
  • C:\Users\johannes is NOT valid

You had suggested shells provided by mingw, git, or msys as further alternatives. I could try to supply those and see if they respond differently.

If that doesn't work, I suppose I should follow-up with and issue at actions/setup-python, based on your last comment?

P.S.: There was a small markdown error in the path (johannes.cache should have been johannes\.cache). Just to not spark confusion, I will edit it above.

<!-- gh-comment-id:2746164292 --> @CodeFHD commented on GitHub (Mar 23, 2025): That's exactly the point (again): The path is valid, and python.exe is there. I have tested the Cygwin-bash, which is now the first on PATH. While it generally accepts Windows-Style paths, it seems to require either single-forward- or double-back-slash everywhere except after the drive letter: - `C:/Users/johannes` is valid - `C:\\Users\\johannes` is valid - `C:\Users\\johannes` is valid - `C:\Users\johannes` is NOT valid You had suggested shells provided by mingw, git, or msys as further alternatives. I could try to supply those and see if they respond differently. If that doesn't work, I suppose I should follow-up with and issue at actions/setup-python, based on your last comment? P.S.: There was a small markdown error in the path (`johannes.cache` should have been `johannes\.cache`). Just to not spark confusion, I will edit it above.
Author
Owner

@CodeFHD commented on GitHub (Mar 26, 2025):

I had no further success with other shells.

Reported this upstream to actions/setup-python:
https://github.com/actions/setup-python/issues/1066

<!-- gh-comment-id:2755877642 --> @CodeFHD commented on GitHub (Mar 26, 2025): I had no further success with other shells. Reported this upstream to actions/setup-python: https://github.com/actions/setup-python/issues/1066
Author
Owner

@mfncooper commented on GitHub (Nov 16, 2025):

Similarly, built-in variables are not being converted on Windows when the shell is bash. For example:

name: Local Test

on: push

jobs:
  local-test-job:
    runs-on: windows-latest
    steps:
      - name: Check workspace path
        shell: bash
        run: echo Build path is ${{github.workspace}}/build

results in:

[Local Test/local-test-job] [DEBUG] Wrote command

echo Build path is C:\Users\myuser\.cache\act\ee2cc98012d5f281\hostexecutor/build

 to 'workflow/1.sh'
| Build path is C:Usersmyuser.cacheactee2cc98012d5f281hostexecutor/build

The resultant path made available to bash, as shown on the last line above, is unusable, so subsequent steps, such as running cmake in the ${{github.workspace}}/build directory fail miserably. When the shell is set to bash, path variables need to be converted first.

Command line used for the above was:

$ act -W ./.github/workflows/local-test.yml -P windows-latest=-self-hosted -v
<!-- gh-comment-id:3539391450 --> @mfncooper commented on GitHub (Nov 16, 2025): Similarly, built-in variables are not being converted on Windows when the shell is bash. For example: ```yml name: Local Test on: push jobs: local-test-job: runs-on: windows-latest steps: - name: Check workspace path shell: bash run: echo Build path is ${{github.workspace}}/build ``` results in: ```console [Local Test/local-test-job] [DEBUG] Wrote command echo Build path is C:\Users\myuser\.cache\act\ee2cc98012d5f281\hostexecutor/build to 'workflow/1.sh' | Build path is C:Usersmyuser.cacheactee2cc98012d5f281hostexecutor/build ``` The resultant path made available to bash, as shown on the last line above, is unusable, so subsequent steps, such as running `cmake` in the `${{github.workspace}}/build` directory fail miserably. When the shell is set to `bash`, path variables need to be converted first. Command line used for the above was: ```console $ act -W ./.github/workflows/local-test.yml -P windows-latest=-self-hosted -v ```
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/act#1224
No description provided.