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 == 'SoftFever/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 == 'SoftFever/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 == 'SoftFever/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 == 'SoftFever/OrcaSlicer' && github.ref == 'refs/heads/main' uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/SoftFever/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