Build all #161
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build all | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - release/* | |
| paths: | |
| - 'deps/**' | |
| - 'src/**' | |
| - '**/CMakeLists.txt' | |
| - 'version.inc' | |
| - 'localization/**' | |
| - 'resources/**' | |
| - ".github/workflows/build_*.yml" | |
| - 'scripts/flatpak/**' | |
| pull_request: | |
| branches: | |
| - main | |
| - release/* | |
| paths: | |
| - 'deps/**' | |
| - 'src/**' | |
| - '**/CMakeLists.txt' | |
| - 'version.inc' | |
| - ".github/workflows/build_*.yml" | |
| - 'build_linux.sh' | |
| - 'build_release_vs2022.bat' | |
| - 'build_release_macos.sh' | |
| - 'scripts/flatpak/**' | |
| schedule: | |
| - cron: '0 17 * * *' # run once a day at 1 AM Singapore time (UTC+8) | |
| workflow_dispatch: # allows for manual dispatch | |
| inputs: | |
| build-deps-only: | |
| description: 'Only build dependencies (bypasses caching)' | |
| type: boolean | |
| default: false | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| build_linux: | |
| name: Build Linux | |
| strategy: | |
| fail-fast: false | |
| # Don't run scheduled builds on forks: | |
| if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }} | |
| uses: ./.github/workflows/build_check_cache.yml | |
| with: | |
| os: ubuntu-24.04 | |
| build-deps-only: ${{ inputs.build-deps-only || false }} | |
| secrets: inherit | |
| build_all: | |
| name: Build Non-Linux | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: windows-latest | |
| - os: macos-14 | |
| arch: arm64 | |
| # Don't run scheduled builds on forks: | |
| if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }} | |
| uses: ./.github/workflows/build_check_cache.yml | |
| with: | |
| os: ${{ matrix.os }} | |
| arch: ${{ matrix.arch }} | |
| build-deps-only: ${{ inputs.build-deps-only || false }} | |
| force-build: ${{ github.event_name == 'schedule' }} | |
| secrets: inherit | |
| unit_tests: | |
| name: Unit Tests | |
| runs-on: ubuntu-24.04 | |
| needs: build_linux | |
| if: ${{ !cancelled() && success() }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| with: | |
| sparse-checkout: | | |
| .github | |
| scripts | |
| - name: Apt-Install Dependencies | |
| uses: ./.github/actions/apt-install-deps | |
| - name: Restore Test Artifact | |
| uses: actions/download-artifact@v6 | |
| with: | |
| name: ${{ github.sha }}-tests | |
| - uses: lukka/get-cmake@latest | |
| with: | |
| cmakeVersion: "~3.28.0" # use most recent 3.28.x version | |
| - name: Unpackage and Run Unit Tests | |
| timeout-minutes: 20 | |
| run: | | |
| tar -xvf build_tests.tar | |
| scripts/run_unit_tests.sh | |
| - name: Upload Test Logs | |
| uses: actions/upload-artifact@v5 | |
| if: ${{ failure() }} | |
| with: | |
| name: unit-test-logs | |
| path: build/tests/**/*.log | |
| - name: Publish Test Results | |
| if: always() | |
| uses: EnricoMi/publish-unit-test-result-action@v2 | |
| with: | |
| files: "ctest_results.xml" | |
| flatpak: | |
| name: "Flatpak" | |
| container: | |
| image: ghcr.io/flathub-infra/flatpak-github-actions:gnome-47 | |
| options: --privileged | |
| volumes: | |
| - /usr/local/lib/android:/usr/local/lib/android | |
| - /usr/share/dotnet:/usr/share/dotnet | |
| - /opt/ghc:/opt/ghc1 | |
| - /usr/local/share/boost:/usr/local/share/boost1 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| variant: | |
| - arch: x86_64 | |
| runner: ubuntu-24.04 | |
| - arch: aarch64 | |
| runner: ubuntu-24.04-arm | |
| # Don't run scheduled builds on forks: | |
| if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }} | |
| runs-on: ${{ matrix.variant.runner }} | |
| env: | |
| date: | |
| ver: | |
| ver_pure: | |
| steps: | |
| - name: "Remove unneeded stuff to free disk space" | |
| run: | |
| rm -rf /usr/local/lib/android/* /usr/share/dotnet/* /opt/ghc1/* "/usr/local/share/boost1/*" | |
| - uses: actions/checkout@v5 | |
| - name: Get the version and date | |
| run: | | |
| ver_pure=$(grep 'set(SoftFever_VERSION' version.inc | cut -d '"' -f2) | |
| if [[ "${{ github.event_name }}" == "pull_request" ]]; then | |
| ver="PR-${{ github.event.number }}" | |
| git_commit_hash="${{ github.event.pull_request.head.sha }}" | |
| else | |
| ver=V$ver_pure | |
| git_commit_hash="" | |
| fi | |
| echo "ver=$ver" >> $GITHUB_ENV | |
| echo "ver_pure=$ver_pure" >> $GITHUB_ENV | |
| echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV | |
| echo "git_commit_hash=$git_commit_hash" >> $GITHUB_ENV | |
| shell: bash | |
| - uses: flathub-infra/flatpak-github-actions/flatpak-builder@master | |
| with: | |
| bundle: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak | |
| manifest-path: scripts/flatpak/io.github.softfever.OrcaSlicer.yml | |
| cache: true | |
| arch: ${{ matrix.variant.arch }} | |
| upload-artifact: false | |
| - name: Upload artifacts Flatpak | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak | |
| path: '/__w/OrcaSlicer/OrcaSlicer/OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak' | |
| - name: Deploy Flatpak to nightly release | |
| if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' | |
| uses: WebFreak001/[email protected] | |
| with: | |
| upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} | |
| release_id: 137995723 | |
| asset_path: /__w/OrcaSlicer/OrcaSlicer/OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak | |
| asset_name: OrcaSlicer-Linux-flatpak_nightly_${{ matrix.variant.arch }}.flatpak | |
| asset_content_type: application/octet-stream | |
| max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted |