| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
|
|
| 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_COMPRESS: true |
| CCACHE_COMPRESSLEVEL: 5 |
| CCACHE_CONFIGPATH: ${{ github.workspace }}/ccache/config |
| CCACHE_DIR: ${{ github.workspace }}/ccache |
| CCACHE_MAXSIZE: 1G |
| CCACHE_NODIRECT: true |
| CCACHE_NOHASHDIR: true |
| CCACHE_NOINODECACHE: true |
| CCACHE_SLOPPINESS: "include_file_ctime,include_file_mtime,pch_defines,time_macros" |
| builddir: ${{ github.workspace }}/build/release/ |
| cacheKey: pixi-${{ matrix.os }} |
| config: release |
| 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: Harden the runner (Audit all outbound calls) |
| uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 |
| with: |
| egress-policy: audit |
|
|
| - 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@08c6903cd8c0fde910a37f88322edcfb5dd907a8 |
|
|
| - name: Add GCC Problem Matcher |
| if: runner.os == 'Linux' |
| run: | |
| echo "::add-matcher::${{ runner.workspace }}/FreeCAD/.github/problemMatcher/gcc.json" |
| |
| - name: Add Clang Problem Matcher |
| if: runner.os == 'macOS' |
| run: | |
| echo "::add-matcher::${{ runner.workspace }}/FreeCAD/.github/problemMatcher/clang.json" |
| |
| - name: Add MSVC++ Problem Matcher |
| if: runner.os == 'Windows' |
| run: | |
| echo "::add-matcher::${{ runner.workspace }}/FreeCAD/.github/problemMatcher/msvc.json" |
| |
| - 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@82d477f15f3a381dbcc8adc1206ce643fe110fb7 |
| with: |
| pixi-version: v0.59.0 |
| cache: false |
|
|
| - name: Restore Compiler Cache |
| id: cache-restore |
| if: always() |
| uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 |
| 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-${{ env.config }} |
| |
| - name: CMake Build |
| run: | |
| pixi run build-${{ env.config }} |
| |
| - name: Print ccache statistics after Build |
| if: always() |
| 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-${{ env.config }} |
| |
| - 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: 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 |
| id: cache-save |
| if: always() |
| uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 |
| with: |
| path: ${{ env.CCACHE_DIR }} |
| key: FC-${{ env.cacheKey }}-${{ github.ref }}-${{ github.run_id }} |
|
|
| - name: Upload logs |
| if: always() |
| uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 |
| with: |
| name: ${{ inputs.artifactBasename }}-${{ matrix.os }}-Logs |
| path: | |
| ${{ env.logdir }} |
| /var/crash/*FreeCAD* |
| |
| - name: Upload report |
| if: always() |
| uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 |
| with: |
| name: ${{ env.reportfilename }} |
| path: | |
| ${{env.reportdir}}${{ env.reportfilename }} |
| |