Skip to content

Solve "Error: Workflow file too large" problem on Windows #105

Open
@traversaro

Description

@traversaro

Recently, on full rebuild the post-PR Windows builds started failing with:

Error
Workflow file too large

See for example https://github.com/traversaro/ros-humble/actions/runs/16347297455 .

Example workflows files:

Example of the first job on Linux (~20 lines):

  stage_0_job_0:
    name: mutex ament-package ament-cmake-core
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
    needs: []
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
    - name: Build ros2-distro-mutex ros-humble-ament-package ros-humble-ament-cmake-core
      env:
        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
        CURRENT_RECIPES: ros2-distro-mutex ros-humble-ament-package ros-humble-ament-cmake-core
        BUILD_TARGET: ''
      run: |
        export CI=azure
        export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
        export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
        .scripts/build_unix.sh --target $BUILD_TARGET

while on Windows (~94 lines)

  stage_0_job_0:
    name: mutex ament-package ament-cmake-core
    runs-on: windows-2022
    strategy:
      fail-fast: false
    needs: []
    env:
      CONDA_BLD_PATH: C:\\bld\\
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
    - name: Setup pixi
      uses: prefix-dev/[email protected]
      with:
        pixi-version: v0.40.3
        cache: 'true'
    - uses: egor-tensin/cleanup-path@v4
      with:
        dirs: C:\Program Files\Git\usr\bin;C:\Program Files\Git\bin;C:\Program Files\Git\cmd;C:\Program
          Files\Git\mingw64\bin
    - shell: cmd
      run: |
        set "CI=true"

        :: 4 cores available on GHA: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners
        :: CPU_COUNT is passed through conda build: https://github.com/conda/conda-build/pull/1149
        set CPU_COUNT=4

        set PYTHONUNBUFFERED=1

        call setup_x64

        :: Set the conda-build working directory to a smaller path
        if "%CONDA_BLD_PATH%" == "" (
            set "CONDA_BLD_PATH=C:\\bld\\"
        )

        :: On azure, there are libcrypto*.dll & libssl*.dll under
        :: C:\\Windows\\System32, which should not be there (no vendor dlls in windows folder).
        :: They would be found before the openssl libs of the conda environment, so we delete them.
        if defined CI (
            DEL C:\\Windows\\System32\\libcrypto-1_1-x64.dll || (Echo Ignoring failure to delete C:\\Windows\\System32\\libcrypto-1_1-x64.dll)
            DEL C:\\Windows\\System32\\libssl-1_1-x64.dll || (Echo Ignoring failure to delete C:\\Windows\\System32\\libssl-1_1-x64.dll)
        )

        :: Make paths like C:\\hostedtoolcache\\windows\\Ruby\\2.5.7\\x64\\bin garbage
        set "PATH=%PATH:ostedtoolcache=%"
      name: conda-forge build setup
    - shell: cmd
      run: |
        setlocal EnableExtensions EnableDelayedExpansion

        set CONDA_BLD_PATH=C:\bld
        echo "PATH is %PATH%"

        rmdir /Q/S C:\Strawberry\
        rmdir /Q/S "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\"

        set "FEEDSTOCK_ROOT=%cd%"

        mkdir %CONDA_BLD_PATH%

        :: Enable long path names on Windows
        reg add HKLM\SYSTEM\CurrentControlSet\Control\FileSystem /v LongPathsEnabled /t REG_DWORD /d 1 /f

        for %%X in (%CURRENT_RECIPES%) do (
            echo "BUILDING RECIPE %%X"
            cd %FEEDSTOCK_ROOT%\recipes\%%X\
            pixi run -v rattler-build build --recipe %FEEDSTOCK_ROOT%\recipes\%%X\ ^
                -m %FEEDSTOCK_ROOT%\conda_build_config.yaml ^
                -c conda-forge -c robostack-staging ^
                --output-dir %CONDA_BLD_PATH%

            if errorlevel 1 exit 1
            rem -m %FEEDSTOCK_ROOT%\.ci_support\conda_forge_pinnings.yaml
        )

        :: Check if .conda files exist in the win-64 directory
        dir /b "%CONDA_BLD_PATH%\win-64\*.conda" >nul 2>&1
        if errorlevel 1 (
            :: No files found, display warning
            echo Warning: No .conda files found in %CONDA_BLD_PATH%\win-64
            echo This might be due to all the packages being skipped
        ) else (
            :: Files found, run the upload command
            pixi run upload "%CONDA_BLD_PATH%\win-64\*.conda" --force
            if errorlevel 1 exit 1
        )
      env:
        ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }}
        CURRENT_RECIPES: ros2-distro-mutex ros-humble-ament-package ros-humble-ament-cmake-core
        PYTHONUNBUFFERED: 1
      name: Build ros2-distro-mutex ros-humble-ament-package ros-humble-ament-cmake-core

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions