From baa96300492d940c670129fac52fe6472af77b01 Mon Sep 17 00:00:00 2001 From: looooo Date: Fri, 27 Sep 2024 09:50:00 +0200 Subject: [PATCH] CI: add pixi github action --- .github/workflows/CI_master.yml | 36 +-- .../workflows/sub_buildMacOSCondaApple.yml | 171 -------------- .../workflows/sub_buildMacOSCondaIntel.yml | 171 -------------- .github/workflows/sub_buildPixi.yml | 203 +++++++++++++++++ .../workflows/sub_buildUbuntu2204Conda.yml | 200 ----------------- .../workflows/sub_buildUbuntu2204CondaQt6.yml | 211 ------------------ .github/workflows/sub_buildWindowsConda.yml | 133 ----------- 7 files changed, 207 insertions(+), 918 deletions(-) delete mode 100644 .github/workflows/sub_buildMacOSCondaApple.yml delete mode 100644 .github/workflows/sub_buildMacOSCondaIntel.yml create mode 100644 .github/workflows/sub_buildPixi.yml delete mode 100644 .github/workflows/sub_buildUbuntu2204Conda.yml delete mode 100644 .github/workflows/sub_buildUbuntu2204CondaQt6.yml delete mode 100644 .github/workflows/sub_buildWindowsConda.yml diff --git a/.github/workflows/CI_master.yml b/.github/workflows/CI_master.yml index 58c7b8873a..752b0707d7 100644 --- a/.github/workflows/CI_master.yml +++ b/.github/workflows/CI_master.yml @@ -39,17 +39,11 @@ jobs: with: artifactBasename: Prepare-${{ github.run_id }} - MacOS_13_Conda_Apple: + Pixi: needs: [Prepare] - uses: ./.github/workflows/sub_buildMacOSCondaApple.yml + uses: ./.github/workflows/sub_buildPixi.yml with: - artifactBasename: MacOS_13_Conda_Apple-${{ github.run_id }} - -# MacOS_13_Conda_Intel: -# needs: [Prepare] -# uses: ./.github/workflows/sub_buildMacOSCondaIntel.yml -# with: -# artifactBasename: MacOS_13_Conda_Intel-${{ github.run_id }} + artifactBasename: Pixi-${{ github.run_id }} Ubuntu_20-04: needs: [Prepare] @@ -57,31 +51,12 @@ jobs: with: artifactBasename: Ubuntu_20-04-${{ github.run_id }} - Ubuntu_22-04_Conda: - needs: [Prepare] - uses: ./.github/workflows/sub_buildUbuntu2204Conda.yml - with: - artifactBasename: Ubuntu_22-04_Conda-${{ github.run_id }} - - Ubuntu_22-04_Conda_Qt6: - needs: [Prepare] - uses: ./.github/workflows/sub_buildUbuntu2204CondaQt6.yml - with: - artifactBasename: Ubuntu_22-04_Conda-Qt6-${{ github.run_id }} - Windows: needs: [Prepare] uses: ./.github/workflows/sub_buildWindows.yml with: artifactBasename: Windows-${{ github.run_id }} - ## Disable until the following issue is resolved: https://github.com/mamba-org/mamba/issues/3292 - # Windows_Conda: - # needs: [Prepare] - # uses: ./.github/workflows/sub_buildWindowsConda.yml - # with: - # artifactBasename: Windows_Conda-${{ github.run_id }} - Lint: needs: [Prepare] uses: ./.github/workflows/sub_lint.yml @@ -94,12 +69,9 @@ jobs: WrapUp: needs: [ Prepare, - MacOS_13_Conda_Apple, - # MacOS_13_Conda_Intel, + Pixi, Ubuntu_20-04, - Ubuntu_22-04_Conda, Windows, - # Windows_Conda, Lint ] if: always() diff --git a/.github/workflows/sub_buildMacOSCondaApple.yml b/.github/workflows/sub_buildMacOSCondaApple.yml deleted file mode 100644 index 59fc1666f2..0000000000 --- a/.github/workflows/sub_buildMacOSCondaApple.yml +++ /dev/null @@ -1,171 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2023 0penBrain. * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** - -# This is a build and test workflow for CI of FreeCAD. -# This workflow aims at building and testing FreeCAD on a Conda environment on macOS. - -name: Build macOS 13 (Apple Silicon) -on: - workflow_call: - inputs: - artifactBasename: - type: string - required: true - testOnBuildDir: - default: false - type: boolean - required: false - allowedToFail: - default: false - type: boolean - required: false - outputs: - reportFile: - value: ${{ jobs.Build.outputs.reportFile }} - -jobs: - Build: - runs-on: macos-14 - continue-on-error: ${{ inputs.allowedToFail }} - env: - CCACHE_DIR: ${{ github.workspace }}/ccache - CCACHE_CONFIGPATH: ${{ github.workspace }}/ccache/config - CCACHE_MAXSIZE: 1G - CCACHE_COMPILERCHECK: "%compiler% -dumpfullversion -dumpversion" # default:mtime - CCACHE_COMPRESS: true - CCACHE_COMPRESSLEVEL: 1 - CC: arm64-apple-darwin20.0.0-clang - CXX: arm64-apple-darwin20.0.0-clang++ - builddir: ${{ github.workspace }}/build/release/ - logdir: /tmp/logs/ - reportdir: /tmp/report/ - reportfilename: ${{ inputs.artifactBasename }}-report.md - defaults: - run: - shell: bash -l {0} - outputs: - reportFile: ${{ steps.Init.outputs.reportFile }} - - steps: - - name: Checking out source code - uses: actions/checkout@v4 - with: - submodules: true - - name: Setup Miniconda - env: - CONDA_VERBOSITY: 2 - uses: conda-incubator/setup-miniconda@v3 - with: - activate-environment: .conda/freecad - environment-file: conda/conda-env.yaml - channels: conda-forge - channel-priority: true - miniforge-version: latest - - name: Install FreeCAD dependencies - env: - CONDA_VERBOSITY: 2 - run: | - ./conda/setup-environment.sh - - name: Set Environment Variables - run: | - echo "CC=$CC" >> "$GITHUB_ENV" - echo "CXX=$CXX" >> "$GITHUB_ENV" - - name: Make needed directories, files and initializations - id: Init - run: | - mkdir -p ${{ env.CCACHE_DIR }} - mkdir -p ${{ env.CCACHE_CONFIGPATH }} - mkdir -p ${{ env.builddir }} - mkdir -p ${{ env.logdir }} - mkdir -p ${{ env.reportdir }} - echo "reportFile=${{ env.reportfilename }}" >> $GITHUB_OUTPUT - - name: Generate cache key - id: genCacheKey - uses: ./.github/workflows/actions/macos/generateCacheKey - with: - compiler: ${{ env.CXX }} - - name: Restore Compiler Cache - uses: actions/cache@v4 - with: - save-always: true - path: ${{ env.CCACHE_DIR }} - key: FC-${{ steps.genCacheKey.outputs.cacheKey }}-${{ github.ref }}-${{ github.run_id }} - restore-keys: | - FC-${{ steps.genCacheKey.outputs.cacheKey }}-${{ github.ref }}- - FC-${{ steps.genCacheKey.outputs.cacheKey }}- - - name: Print CCache statistics before build, reset stats and print config - run: | - ccache -s - ccache -z - ccache -p - - name: CMake Configure - run: | - mamba run --live-stream -p .conda/freecad cmake --preset conda-macos-release -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/.conda/freecad/opt/freecad - - name: CMake Build - run: | - mamba run --live-stream -p .conda/freecad cmake --build build/release - - name: Print ccache statistics after Build - run: | - ccache -s - - name: FreeCAD CLI tests on build dir - if: inputs.testOnBuildDir - timeout-minutes: 10 - uses: ./.github/workflows/actions/runPythonTests - with: - testDescription: "CLI tests on build dir" - testCommand: ${{ env.builddir }}/bin/FreeCADCmd -t 0 - logFile: ${{ env.logdir }}TestCLIBuild.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: C++ tests - timeout-minutes: 1 - uses: ./.github/workflows/actions/runCPPTests/runAllTests - with: - reportdir: ${{ env.reportdir }} - builddir: ${{ env.builddir }} - reportFile: ${{ env.reportdir }}${{ env.reportfilename }} - - name: CMake Install - run: | - mamba run --live-stream -p .conda/freecad cmake --install build/release - - name: FreeCAD CLI tests on install - timeout-minutes: 10 - uses: ./.github/workflows/actions/runPythonTests - with: - testDescription: "CLI tests on install" - testCommand: ${{ github.workspace }}/.conda/freecad/opt/freecad/bin/FreeCADCmd -t 0 - logFile: ${{ env.logdir }}TestCLIInstall.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: Upload logs - if: always() - uses: actions/upload-artifact@v4 - with: - name: ${{ inputs.artifactBasename }}-Logs - path: | - ${{ env.logdir }} - /var/crash/*FreeCAD* - - name: Upload report - if: always() - uses: actions/upload-artifact@v4 - with: - name: ${{ env.reportfilename }} - path: | - ${{env.reportdir}}${{ env.reportfilename }} diff --git a/.github/workflows/sub_buildMacOSCondaIntel.yml b/.github/workflows/sub_buildMacOSCondaIntel.yml deleted file mode 100644 index b4d4e80b32..0000000000 --- a/.github/workflows/sub_buildMacOSCondaIntel.yml +++ /dev/null @@ -1,171 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2023 0penBrain. * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** - -# This is a build and test workflow for CI of FreeCAD. -# This workflow aims at building and testing FreeCAD on a Conda environment on macOS. - -name: Build macOS 13 (Intel) -on: - workflow_call: - inputs: - artifactBasename: - type: string - required: true - testOnBuildDir: - default: false - type: boolean - required: false - allowedToFail: - default: false - type: boolean - required: false - outputs: - reportFile: - value: ${{ jobs.Build.outputs.reportFile }} - -jobs: - Build: - runs-on: macos-13 - continue-on-error: ${{ inputs.allowedToFail }} - env: - CCACHE_DIR: ${{ github.workspace }}/ccache - CCACHE_CONFIGPATH: ${{ github.workspace }}/ccache/config - CCACHE_MAXSIZE: 1G - CCACHE_COMPILERCHECK: "%compiler% -dumpfullversion -dumpversion" # default:mtime - CCACHE_COMPRESS: true - CCACHE_COMPRESSLEVEL: 1 - CC: x86_64-apple-darwin13.4.0-clang - CXX: x86_64-apple-darwin13.4.0-clang++ - builddir: ${{ github.workspace }}/build/release/ - logdir: /tmp/logs/ - reportdir: /tmp/report/ - reportfilename: ${{ inputs.artifactBasename }}-report.md - defaults: - run: - shell: bash -l {0} - outputs: - reportFile: ${{ steps.Init.outputs.reportFile }} - - steps: - - name: Checking out source code - uses: actions/checkout@v4 - with: - submodules: true - - name: Setup Miniconda - env: - CONDA_VERBOSITY: 2 - uses: conda-incubator/setup-miniconda@v3 - with: - activate-environment: .conda/freecad - environment-file: conda/conda-env.yaml - channels: conda-forge - channel-priority: true - miniforge-version: latest - - name: Install FreeCAD dependencies - env: - CONDA_VERBOSITY: 2 - run: | - ./conda/setup-environment.sh - - name: Set Environment Variables - run: | - echo "CC=$CC" >> "$GITHUB_ENV" - echo "CXX=$CXX" >> "$GITHUB_ENV" - - name: Make needed directories, files and initializations - id: Init - run: | - mkdir -p ${{ env.CCACHE_DIR }} - mkdir -p ${{ env.CCACHE_CONFIGPATH }} - mkdir -p ${{ env.builddir }} - mkdir -p ${{ env.logdir }} - mkdir -p ${{ env.reportdir }} - echo "reportFile=${{ env.reportfilename }}" >> $GITHUB_OUTPUT - - name: Generate cache key - id: genCacheKey - uses: ./.github/workflows/actions/macos/generateCacheKey - with: - compiler: ${{ env.CXX }} - - name: Restore Compiler Cache - uses: actions/cache@v4 - with: - save-always: true - path: ${{ env.CCACHE_DIR }} - key: FC-${{ steps.genCacheKey.outputs.cacheKey }}-${{ github.ref }}-${{ github.run_id }} - restore-keys: | - FC-${{ steps.genCacheKey.outputs.cacheKey }}-${{ github.ref }}- - FC-${{ steps.genCacheKey.outputs.cacheKey }}- - - name: Print CCache statistics before build, reset stats and print config - run: | - ccache -s - ccache -z - ccache -p - - name: CMake Configure - run: | - mamba run --live-stream -p .conda/freecad cmake --preset conda-macos-release -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/.conda/freecad/opt/freecad - - name: CMake Build - run: | - mamba run --live-stream -p .conda/freecad cmake --build build/release - - name: Print ccache statistics after Build - run: | - ccache -s - - name: FreeCAD CLI tests on build dir - if: inputs.testOnBuildDir - timeout-minutes: 10 - uses: ./.github/workflows/actions/runPythonTests - with: - testDescription: "CLI tests on build dir" - testCommand: ${{ env.builddir }}/bin/FreeCADCmd -t 0 - logFile: ${{ env.logdir }}TestCLIBuild.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: C++ tests - timeout-minutes: 1 - uses: ./.github/workflows/actions/runCPPTests/runAllTests - with: - reportdir: ${{ env.reportdir }} - builddir: ${{ env.builddir }} - reportFile: ${{ env.reportdir }}${{ env.reportfilename }} - - name: CMake Install - run: | - mamba run --live-stream -p .conda/freecad cmake --install build/release - - name: FreeCAD CLI tests on install - timeout-minutes: 10 - uses: ./.github/workflows/actions/runPythonTests - with: - testDescription: "CLI tests on install" - testCommand: ${{ github.workspace }}/.conda/freecad/opt/freecad/bin/FreeCADCmd -t 0 - logFile: ${{ env.logdir }}TestCLIInstall.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: Upload logs - if: always() - uses: actions/upload-artifact@v4 - with: - name: ${{ inputs.artifactBasename }}-Logs - path: | - ${{ env.logdir }} - /var/crash/*FreeCAD* - - name: Upload report - if: always() - uses: actions/upload-artifact@v4 - with: - name: ${{ env.reportfilename }} - path: | - ${{env.reportdir}}${{ env.reportfilename }} diff --git a/.github/workflows/sub_buildPixi.yml b/.github/workflows/sub_buildPixi.yml new file mode 100644 index 0000000000..0889c24216 --- /dev/null +++ b/.github/workflows/sub_buildPixi.yml @@ -0,0 +1,203 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2024 0penBrain, Lorenz Lechner and Jacob Oursland. * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** + +# This is a build and test workflow for CI of FreeCAD. +# This workflow aims at building and testing FreeCAD on a Conda environment on macOS. + +name: Pixi Builds + +on: + workflow_call: + inputs: + artifactBasename: + type: string + required: true + testOnBuildDir: + default: false + type: boolean + required: false + allowedToFail: + default: false + type: boolean + required: false + outputs: + reportFile: + value: ${{ jobs.Build.outputs.reportFile }} + +jobs: + build_with_pixi: + runs-on: ${{ matrix.os }} + continue-on-error: ${{ inputs.allowedToFail }} + env: + CCACHE_DIR: ${{ github.workspace }}/ccache + CCACHE_CONFIGPATH: ${{ github.workspace }}/ccache/config + CCACHE_MAXSIZE: 1G + CCACHE_COMPRESS: true + CCACHE_COMPRESSLEVEL: 5 + builddir: ${{ github.workspace }}/build/ + cacheKey: pixi-${{ matrix.os }} + logdir: ${{ github.workspace }}/logs/ + reportdir: ${{ github.workspace }}/report/ + reportfilename: ${{ inputs.artifactBasename }}-${{ matrix.os }}-report.md + outputs: + reportFile: ${{ steps.Init.outputs.reportFile }} + + strategy: + max-parallel: 6 + fail-fast: false + matrix: + os: [windows-latest, ubuntu-latest, macos-latest] + + steps: + - name: Set Platform Environment Variables + shell: bash -l {0} + env: + OPERATING_SYSTEM: ${{ runner.os }} + run: | + if [[ $OPERATING_SYSTEM == 'Windows' ]]; then + echo 'CCACHE_COMPILERCHECK=%compiler%' >> "$GITHUB_ENV" + else + echo 'CCACHE_COMPILERCHECK=%compiler% -dumpfullversion -dumpversion' >> "$GITHUB_ENV" + fi + + - name: Checkout + uses: actions/checkout@v2 + + - name: Make needed directories, files and initializations + id: Init + run: | + mkdir -p ${{ env.builddir }} + mkdir -p ${{ env.logdir }} + mkdir -p ${{ env.reportdir }} + echo "reportFile=${{ env.reportfilename }}" >> $GITHUB_OUTPUT + + - uses: prefix-dev/setup-pixi@v0.8.1 + with: + pixi-version: v0.34.0 + cache: false + + - name: Restore Compiler Cache + uses: actions/cache/restore@v4 + with: + path: ${{ env.CCACHE_DIR }} + key: FC-${{ env.cacheKey }}-${{ github.ref }}-${{ github.run_id }} + restore-keys: | + FC-${{ env.cacheKey }}-${{ github.ref }}- + FC-${{ env.cacheKey }}- + + - name: Print CCache statistics before build, reset stats and print config + run: | + pixi run ccache -s + pixi run ccache -z + pixi run ccache -p + + - name: CMake Configure + run: | + pixi run configure-release + + - name: CMake Build + run: | + pixi run build + + - name: Print ccache statistics after Build + run: | + pixi run ccache -s + + - name: FreeCAD CLI tests on build dir + if: inputs.testOnBuildDir + timeout-minutes: 10 + uses: ./.github/workflows/actions/runPythonTests + with: + testDescription: "CLI tests on build dir" + testCommand: pixi run ${{ env.builddir }}/bin/FreeCADCmd -t 0 + logFile: ${{ env.logdir }}TestCLIBuild.log + reportFile: ${{env.reportdir}}${{ env.reportfilename }} + + - name: FreeCAD GUI tests on build dir + if: runner.os == 'Linux' && inputs.testOnBuildDir + timeout-minutes: 15 + uses: ./.github/workflows/actions/runPythonTests + with: + testDescription: "GUI tests on build dir" + testCommand: pixi run xvfb-run ${{ env.builddir }}/bin/FreeCAD -t 0 + logFile: ${{ env.logdir }}TestGUIBuild.log + reportFile: ${{env.reportdir}}${{ env.reportfilename }} + + - name: C++ tests + timeout-minutes: 10 + if: runner.os != 'Windows' + uses: ./.github/workflows/actions/runCPPTests/runAllTests + with: + reportdir: ${{ env.reportdir }} + builddir: ${{ env.builddir }} + reportFile: ${{ env.reportdir }}${{ env.reportfilename }} + + - name: CMake Install + run: | + pixi run install + + - name: FreeCAD CLI tests on install + if: runner.os != 'Windows' + timeout-minutes: 10 + uses: ./.github/workflows/actions/runPythonTests + with: + testDescription: "CLI tests on install" + testCommand: pixi run FreeCADCmd -t 0 + logFile: ${{ env.logdir }}TestCLIInstall.log + reportFile: ${{env.reportdir}}${{ env.reportfilename }} + + - name: FreeCAD GUI tests on install + # if: runner.os == 'Linux' + # currently broken on Qt6 builds + if: false + timeout-minutes: 15 + uses: ./.github/workflows/actions/runPythonTests + with: + testDescription: "GUI tests on install" + testCommand: pixi run xvfb-run FreeCAD -t 0 + logFile: ${{ env.logdir }}TestGUIInstall.log + reportFile: ${{env.reportdir}}${{ env.reportfilename }} + + - name: Save Compiler Cache + if: always() + uses: actions/cache/save@v4 + with: + path: ${{ env.CCACHE_DIR }} + key: FC-${{ env.cacheKey }}-${{ github.ref }}-${{ github.run_id }} + + - name: Upload logs + if: always() + uses: actions/upload-artifact@v4 + with: + name: ${{ inputs.artifactBasename }}-${{ matrix.os }}-Logs + path: | + ${{ env.logdir }} + /var/crash/*FreeCAD* + + - name: Upload report + if: always() + uses: actions/upload-artifact@v4 + with: + name: ${{ env.reportfilename }} + path: | + ${{env.reportdir}}${{ env.reportfilename }} diff --git a/.github/workflows/sub_buildUbuntu2204Conda.yml b/.github/workflows/sub_buildUbuntu2204Conda.yml deleted file mode 100644 index 43d31ec714..0000000000 --- a/.github/workflows/sub_buildUbuntu2204Conda.yml +++ /dev/null @@ -1,200 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2023 0penBrain. * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** - -# This is a build and test workflow for CI of FreeCAD. -# This workflow aims at building and testing FreeCAD on a Conda environment on Linux. - -name: Build Ubuntu 22.04 (Conda) -on: - workflow_call: - inputs: - artifactBasename: - type: string - required: true - testOnBuildDir: - default: false - type: boolean - required: false - allowedToFail: - default: false - type: boolean - required: false - outputs: - reportFile: - value: ${{ jobs.Build.outputs.reportFile }} - -jobs: - Build: - runs-on: ubuntu-22.04 - continue-on-error: ${{ inputs.allowedToFail }} - env: - CCACHE_DIR: ${{ github.workspace }}/ccache - CCACHE_CONFIGPATH: ${{ github.workspace }}/ccache/config - CCACHE_MAXSIZE: 1G - CCACHE_COMPILERCHECK: "%compiler% -dumpfullversion -dumpversion" # default:mtime - CCACHE_COMPRESS: true - CCACHE_COMPRESSLEVEL: 1 - builddir: ${{ github.workspace }}/build/release/ - logdir: /tmp/logs/ - reportdir: /tmp/report/ - reportfilename: ${{ inputs.artifactBasename }}-report.md - defaults: - run: - shell: bash -l {0} - outputs: - reportFile: ${{ steps.Init.outputs.reportFile }} - - steps: - - name: Checking out source code - uses: actions/checkout@v4 - with: - submodules: true - - name: Setup Miniconda - env: - CONDA_VERBOSITY: 2 - uses: conda-incubator/setup-miniconda@v3 - with: - activate-environment: .conda/freecad - environment-file: conda/conda-env.yaml - channels: conda-forge - channel-priority: true - miniforge-version: latest - - name: Install FreeCAD dependencies - env: - CONDA_VERBOSITY: 2 - run: | - ./conda/setup-environment.sh - - name: Set Environment Variables - run: | - echo "CC=$CC" >> "$GITHUB_ENV" - echo "CXX=$CXX" >> "$GITHUB_ENV" - - name: Make needed directories, files and initializations - id: Init - run: | - mkdir -p ${{ env.CCACHE_DIR }} - mkdir -p ${{ env.CCACHE_CONFIGPATH }} - mkdir -p ${{ env.builddir }} - mkdir -p ${{ env.logdir }} - mkdir -p ${{ env.reportdir }} - echo "reportFile=${{ env.reportfilename }}" >> $GITHUB_OUTPUT - - name: Generate cache key - id: genCacheKey - uses: ./.github/workflows/actions/linux/generateCacheKey - with: - compiler: ${{ env.CXX }} - qt_major_version: 5 - - name: Restore Compiler Cache - uses: actions/cache@v4 - with: - save-always: true - path: ${{ env.CCACHE_DIR }} - key: FC-${{ steps.genCacheKey.outputs.cacheKey }}-${{ github.ref }}-${{ github.run_id }} - restore-keys: | - FC-${{ steps.genCacheKey.outputs.cacheKey }}-${{ github.ref }}- - FC-${{ steps.genCacheKey.outputs.cacheKey }}- - - name: Print CCache statistics before build, reset stats and print config - run: | - ccache -s - ccache -z - ccache -p - - name: CMake Configure - uses: ./.github/workflows/actions/linux/configure - with: - extraParameters: --preset conda-linux-release -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/.conda/freecad/opt/freecad - builddir: ${{ env.builddir }} - logFile: ${{ env.logdir }}Cmake.log - errorFile: ${{ env.logdir }}CmakeErrors.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: CMake Build - uses: ./.github/workflows/actions/linux/build - with: - builddir: ${{ env.builddir }} - logFile: ${{ env.logdir }}Build.log - errorFile: ${{ env.logdir }}BuildErrors.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: Print ccache statistics after Build - run: | - ccache -s - - name: FreeCAD CLI tests on build dir - if: inputs.testOnBuildDir - timeout-minutes: 10 - uses: ./.github/workflows/actions/runPythonTests - with: - testDescription: "CLI tests on build dir" - testCommand: ${{ env.builddir }}/bin/FreeCADCmd -t 0 - logFile: ${{ env.logdir }}TestCLIBuild.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: FreeCAD GUI tests on build dir - if: inputs.testOnBuildDir - timeout-minutes: 15 - uses: ./.github/workflows/actions/runPythonTests - with: - testDescription: "GUI tests on build dir" - testCommand: xvfb-run ${{ env.builddir }}/bin/FreeCAD -t 0 - logFile: ${{ env.logdir }}TestGUIBuild.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: C++ tests - timeout-minutes: 1 - uses: ./.github/workflows/actions/runCPPTests/runAllTests - with: - reportdir: ${{ env.reportdir }} - builddir: ${{ env.builddir }} - reportFile: ${{ env.reportdir }}${{ env.reportfilename }} - - name: CMake Install - uses: ./.github/workflows/actions/linux/install - with: - builddir: ${{ env.builddir }} - logFile: ${{ env.logdir }}Install.log - errorFile: ${{ env.logdir }}InstallErrors.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: FreeCAD CLI tests on install - timeout-minutes: 10 - uses: ./.github/workflows/actions/runPythonTests - with: - testDescription: "CLI tests on install" - testCommand: ${{ github.workspace }}/.conda/freecad/opt/freecad/bin/FreeCADCmd -t 0 - logFile: ${{ env.logdir }}TestCLIInstall.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: FreeCAD GUI tests on install - timeout-minutes: 15 - uses: ./.github/workflows/actions/runPythonTests - with: - testDescription: "GUI tests on install" - testCommand: xvfb-run ${{ github.workspace }}/.conda/freecad/opt/freecad/bin/FreeCAD -t 0 - logFile: ${{ env.logdir }}TestGUIInstall.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: Upload logs - if: always() - uses: actions/upload-artifact@v4 - with: - name: ${{ inputs.artifactBasename }}-Logs - path: | - ${{ env.logdir }} - /var/crash/*FreeCAD* - - name: Upload report - if: always() - uses: actions/upload-artifact@v4 - with: - name: ${{ env.reportfilename }} - path: | - ${{env.reportdir}}${{ env.reportfilename }} diff --git a/.github/workflows/sub_buildUbuntu2204CondaQt6.yml b/.github/workflows/sub_buildUbuntu2204CondaQt6.yml deleted file mode 100644 index 59fca06b8d..0000000000 --- a/.github/workflows/sub_buildUbuntu2204CondaQt6.yml +++ /dev/null @@ -1,211 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later -# *************************************************************************** -# * * -# * Copyright (c) 2023 0penBrain. * -# * * -# * This file is part of FreeCAD. * -# * * -# * FreeCAD is free software: you can redistribute it and/or modify it * -# * under the terms of the GNU Lesser General Public License as * -# * published by the Free Software Foundation, either version 2.1 of the * -# * License, or (at your option) any later version. * -# * * -# * FreeCAD is distributed in the hope that it will be useful, but * -# * WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with FreeCAD. If not, see * -# * . * -# * * -# *************************************************************************** - -# This is a build and test workflow for CI of FreeCAD. -# This workflow aims at building and testing FreeCAD on a Conda environment on Linux. - -name: Build Ubuntu 22.04 (Conda) -on: - workflow_call: - inputs: - artifactBasename: - type: string - required: true - testOnBuildDir: - default: false - type: boolean - required: false - allowedToFail: - default: false - type: boolean - required: false - outputs: - reportFile: - value: ${{ jobs.Build.outputs.reportFile }} - -jobs: - Build: - runs-on: ubuntu-22.04 - continue-on-error: ${{ inputs.allowedToFail }} - env: - CCACHE_DIR: ${{ github.workspace }}/ccache - CCACHE_CONFIGPATH: ${{ github.workspace }}/ccache/config - CCACHE_MAXSIZE: 1G - CCACHE_COMPILERCHECK: "%compiler% -dumpfullversion -dumpversion" # default:mtime - CCACHE_COMPRESS: true - CCACHE_COMPRESSLEVEL: 1 - builddir: ${{ github.workspace }}/build/release/ - logdir: /tmp/logs/ - reportdir: /tmp/report/ - reportfilename: ${{ inputs.artifactBasename }}-report.md - defaults: - run: - shell: bash -l {0} - outputs: - reportFile: ${{ steps.Init.outputs.reportFile }} - - steps: - - name: Checking out source code - uses: actions/checkout@v4 - with: - submodules: true - - name: Setup Miniconda - env: - CONDA_VERBOSITY: 2 - uses: conda-incubator/setup-miniconda@v3 - with: - activate-environment: .conda/freecad - environment-file: conda/conda-env-qt6.yaml - channels: conda-forge - channel-priority: true - miniforge-version: latest - - name: Install FreeCAD dependencies - env: - CONDA_VERBOSITY: 2 - run: | - sudo apt-get update -qq - sudo apt-get install -y --no-install-recommends \ - libegl1 \ - libgl1 \ - libglx0 \ - libopengl0 - ./conda/setup-environment-qt6.sh - - name: Set Environment Variables - run: | - echo "CC=$CC" >> "$GITHUB_ENV" - echo "CXX=$CXX" >> "$GITHUB_ENV" - - name: Make needed directories, files and initializations - id: Init - run: | - mkdir -p ${{ env.CCACHE_DIR }} - mkdir -p ${{ env.CCACHE_CONFIGPATH }} - mkdir -p ${{ env.builddir }} - mkdir -p ${{ env.logdir }} - mkdir -p ${{ env.reportdir }} - echo "reportFile=${{ env.reportfilename }}" >> $GITHUB_OUTPUT - - name: Generate cache key - id: genCacheKey - uses: ./.github/workflows/actions/linux/generateCacheKey - with: - compiler: ${{ env.CXX }} - qt_major_version: 6 - - name: Restore Compiler Cache - uses: actions/cache@v4 - with: - save-always: true - path: ${{ env.CCACHE_DIR }} - key: FC-${{ steps.genCacheKey.outputs.cacheKey }}-${{ github.ref }}-${{ github.run_id }} - restore-keys: | - FC-${{ steps.genCacheKey.outputs.cacheKey }}-${{ github.ref }}- - FC-${{ steps.genCacheKey.outputs.cacheKey }}- - - name: Print CCache statistics before build, reset stats and print config - run: | - ccache -s - ccache -z - ccache -p - - name: CMake Configure - uses: ./.github/workflows/actions/linux/configure - with: - extraParameters: > - --preset conda-linux-release - -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/.conda/freecad/opt/freecad - -DQT_HOST_PATH=${{ github.workspace }}/.conda/freecad/ - -DFREECAD_QT_VERSION=6 - -DBUILD_REVERSEENGINEERING=OFF - builddir: ${{ env.builddir }} - logFile: ${{ env.logdir }}Cmake.log - errorFile: ${{ env.logdir }}CmakeErrors.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: CMake Build - uses: ./.github/workflows/actions/linux/build - with: - builddir: ${{ env.builddir }} - logFile: ${{ env.logdir }}Build.log - errorFile: ${{ env.logdir }}BuildErrors.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: Print ccache statistics after Build - run: | - ccache -s - - name: FreeCAD CLI tests on build dir - if: inputs.testOnBuildDir - timeout-minutes: 10 - uses: ./.github/workflows/actions/runPythonTests - with: - testDescription: "CLI tests on build dir" - testCommand: ${{ env.builddir }}/bin/FreeCADCmd -t 0 - logFile: ${{ env.logdir }}TestCLIBuild.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: FreeCAD GUI tests on build dir - if: inputs.testOnBuildDir - timeout-minutes: 15 - uses: ./.github/workflows/actions/runPythonTests - with: - testDescription: "GUI tests on build dir" - testCommand: xvfb-run ${{ env.builddir }}/bin/FreeCAD -t 0 - logFile: ${{ env.logdir }}TestGUIBuild.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: C++ tests - timeout-minutes: 1 - uses: ./.github/workflows/actions/runCPPTests/runAllTests - with: - reportdir: ${{ env.reportdir }} - builddir: ${{ env.builddir }} - reportFile: ${{ env.reportdir }}${{ env.reportfilename }} - - name: CMake Install - uses: ./.github/workflows/actions/linux/install - with: - builddir: ${{ env.builddir }} - logFile: ${{ env.logdir }}Install.log - errorFile: ${{ env.logdir }}InstallErrors.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: FreeCAD CLI tests on install - timeout-minutes: 10 - uses: ./.github/workflows/actions/runPythonTests - with: - testDescription: "CLI tests on install" - testCommand: ${{ github.workspace }}/.conda/freecad/opt/freecad/bin/FreeCADCmd -t 0 - logFile: ${{ env.logdir }}TestCLIInstall.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: FreeCAD GUI tests on install - timeout-minutes: 15 - uses: ./.github/workflows/actions/runPythonTests - with: - testDescription: "GUI tests on install" - testCommand: xvfb-run ${{ github.workspace }}/.conda/freecad/opt/freecad/bin/FreeCAD -t 0 - logFile: ${{ env.logdir }}TestGUIInstall.log - reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: Upload logs - if: always() - uses: actions/upload-artifact@v4 - with: - name: ${{ inputs.artifactBasename }}-Logs - path: | - ${{ env.logdir }} - /var/crash/*FreeCAD* - - name: Upload report - if: always() - uses: actions/upload-artifact@v4 - with: - name: ${{ env.reportfilename }} - path: | - ${{env.reportdir}}${{ env.reportfilename }} diff --git a/.github/workflows/sub_buildWindowsConda.yml b/.github/workflows/sub_buildWindowsConda.yml deleted file mode 100644 index e51d5cc35a..0000000000 --- a/.github/workflows/sub_buildWindowsConda.yml +++ /dev/null @@ -1,133 +0,0 @@ -# *************************************************************************** -# * Copyright (c) 2023 0penBrain * -# * * -# * This program is free software; you can redistribute it and/or modify * -# * it under the terms of the GNU Lesser General Public License (LGPL) * -# * as published by the Free Software Foundation; either version 2 of * -# * the License, or (at your option) any later version. * -# * for detail see the LICENCE text file. * -# * * -# * This program is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -# * GNU Library General Public License for more details. * -# * * -# * You should have received a copy of the GNU Library General Public * -# * License along with this program; if not, write to the Free Software * -# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -# * USA * -# * * -# *************************************************************************** - -# This is a build and test workflow for CI of FreeCAD. -# This workflow aims at building and testing FreeCAD using a Conda environment on Windows with MSVC. - -name: Build Windows (Conda) -on: - workflow_call: - inputs: - artifactBasename: - type: string - required: true - allowedToFail: - default: false - type: boolean - required: false - outputs: - reportFile: - value: ${{ jobs.Build.outputs.reportFile }} - -jobs: - Build: - runs-on: windows-latest - continue-on-error: ${{ inputs.allowedToFail }} - env: - CCACHE_DIR: C:/FC/cache/ - CCACHE_COMPILERCHECK: "%compiler%" # default:mtime - CCACHE_MAXSIZE: 1G - CCACHE_COMPRESS: true - CCACHE_COMPRESSLEVEL: 1 - CCACHE_NOHASHDIR: true - CCACHE_DIRECT: true - #CCACHE_SLOPPINESS: "pch_defines,time_macros" # Can't get PCH to work on Windows - CCACHE_LOGFILE: C:/logs/ccache.log - ## Have to use C:\ because not enough space on workspace drive - builddir: C:/FC/build/ - logdir: C:/logs/ - reportdir: C:/report/ - reportfilename: ${{ inputs.artifactBasename }}-report.md - outputs: - reportFile: ${{ steps.Init.outputs.reportFile }} - - steps: - - name: Checking out source code - uses: actions/checkout@v4 - with: - submodules: true - - name: Setup Miniconda - env: - CONDA_VERBOSITY: 2 - uses: conda-incubator/setup-miniconda@v3 - with: - activate-environment: .conda/freecad - environment-file: conda/conda-env.yaml - channels: conda-forge - channel-priority: true - miniforge-version: latest - - name: Install FreeCAD dependencies - env: - CONDA_VERBOSITY: 2 - run: | - conda config --add envs_dirs $PWD/.conda - mamba-devenv --no-prune -f conda/environment.devenv.yml - - name: Make needed directories, files and initializations - id: Init - run: | - mkdir ${{ env.CCACHE_DIR }} - mkdir ${{ env.builddir }} - mkdir ${{ env.logdir }} - mkdir ${{ env.reportdir }} - echo "reportFile=${{ env.reportfilename }}" >> $GITHUB_OUTPUT - - name: Restore compiler cache - uses: actions/cache@v4 - with: - save-always: true - path: ${{ env.CCACHE_DIR }} - key: FC-Windows-Conda-${{ github.ref }}-${{ github.run_id }} - restore-keys: | - FC-Windows-Conda-${{ github.ref }}- - FC-Windows-Conda- - - name: Print Ccache statistics before build, reset stats and print config - run: | - ccache -s - ccache -z - ccache -p - - name: Configuring CMake - shell: cmd /C CALL {0} - run: > - conda\cmake.cmd --preset conda-windows-release -DFREECAD_USE_PCH:BOOL=OFF -DFREECAD_RELEASE_PDB:BOOL=OFF -DFREECAD_USE_CCACHE:BOOL=ON - - name: Compiling sources - shell: cmd /C CALL {0} - run: > - conda\cmake.cmd --build build\release - - name: Print Ccache statistics after build - run: | - ccache -s - - name: CMake Install - shell: cmd /C CALL {0} - run: | - conda\cmake.cmd --install build\release - - name: C++ unit tests - timeout-minutes: 1 - run: | - . build\release\tests\Tests_run --gtest_output=json:${{ env.reportdir }}gtest_results.json # 2>&1 | tee -filepath ${{ env.logdir }}/unitTests.log - - name: FreeCAD CLI tests - run: | - . build\release\bin\FreeCADCmd -t 0 # 2>&1 | tee -filepath ${{ env.logdir }}/integrationTests.log - - name: Upload logs - if: always() - uses: actions/upload-artifact@v4 - with: - name: ${{ inputs.artifactBasename }}-Logs - path: | - ${{ env.logdir }}