Fix missing force-build, use non-docker publish action, be nice to cache (#11688)
Some checks failed
Build all / Build Linux (push) Waiting to run
Build all / Build Non-Linux (push) Waiting to run
Build all / Unit Tests (push) Blocked by required conditions
Build all / Flatpak (push) Waiting to run
Shellcheck / Shellcheck (push) Has been cancelled

* Fix missing force-build and use non-docker publish action

Fixes #11687
Fixes #10404

* Initial deletion of build_check_cache

Start to fold functionality into build_deps, but definitely broken.

* Tests can be built separately

Missed this before

* Create artifact for all platforms, fix cache usage

Cache is only created on `main` branch.
Artifact is used to move files between jobs.
The Linux artifact was broken, now it's not.
The Mac artifact didn't exist, now it does.
The Windows artifact gets a new name and now isn't a
zip-within-a-zip. Perhaps this will cause a permissions problem; we
will see shortly.

* Apparently cannot update env used for `if` mid-stream

* Force-build causes a clean deps build

* Either build or pull from cache

Cache only has final output, not intermediate files. So we either
build or use the cache.

* Keep dep uploads for 10 days instead

It's just the final object outputs, not intermediates, so it's not as
large and we can keep it slightly longer.
This commit is contained in:
coryrc 2025-12-27 05:14:55 -08:00 committed by GitHub
parent 1ca20469d7
commit 8989e2102d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 51 additions and 128 deletions

View file

@ -48,16 +48,17 @@ concurrency:
jobs:
build_linux:
build_linux: # Separate so unit tests can wait on just Linux builds to complete.
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
uses: ./.github/workflows/build_deps.yml
with:
os: ubuntu-24.04
build-deps-only: ${{ inputs.build-deps-only || false }}
force-build: ${{ github.event_name == 'schedule' }}
secrets: inherit
build_all:
name: Build Non-Linux
@ -70,7 +71,7 @@ jobs:
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
uses: ./.github/workflows/build_deps.yml
with:
os: ${{ matrix.os }}
arch: ${{ matrix.arch }}
@ -112,7 +113,7 @@ jobs:
path: build/tests/**/*.log
- name: Publish Test Results
if: always()
uses: EnricoMi/publish-unit-test-result-action@v2
uses: EnricoMi/publish-unit-test-result-action/linux@v2
with:
files: "ctest_results.xml"
flatpak:

View file

@ -1,62 +0,0 @@
name: Check Cache
on:
workflow_call:
inputs:
os:
required: true
type: string
arch:
required: false
type: string
build-deps-only:
required: false
type: boolean
force-build:
required: false
type: boolean
jobs:
check_cache: # determines if there is a cache and outputs variables used in caching process
name: Check Cache
runs-on: ${{ inputs.os }}
outputs:
cache-key: ${{ steps.set_outputs.outputs.cache-key }}
cache-path: ${{ steps.set_outputs.outputs.cache-path }}
valid-cache: ${{ steps.cache_deps.outputs.cache-hit }}
steps:
- name: Checkout
uses: actions/checkout@v6
with:
lfs: 'true'
- name: set outputs
id: set_outputs
env:
dep-folder-name: ${{ inputs.os != 'macos-14' && '/OrcaSlicer_dep' || '' }}
output-cmd: ${{ inputs.os == 'windows-latest' && '$env:GITHUB_OUTPUT' || '"$GITHUB_OUTPUT"'}}
run: |
echo cache-key=${{ inputs.os }}-cache-orcaslicer_deps-build-${{ hashFiles('deps/**') }} >> ${{ env.output-cmd }}
echo cache-path=${{ github.workspace }}/deps/build${{ env.dep-folder-name }} >> ${{ env.output-cmd }}
- name: load cache
id: cache_deps
uses: actions/cache@v4
with:
path: ${{ steps.set_outputs.outputs.cache-path }}
key: ${{ steps.set_outputs.outputs.cache-key }}
lookup-only: true
build_deps: # call next step
name: Build Deps
needs: [check_cache]
uses: ./.github/workflows/build_deps.yml
with:
cache-key: ${{ needs.check_cache.outputs.cache-key }}
cache-path: ${{ needs.check_cache.outputs.cache-path }}
valid-cache: ${{ needs.check_cache.outputs.valid-cache == 'true' }}
os: ${{ inputs.os }}
arch: ${{ inputs.arch }}
build-deps-only: ${{ inputs.build-deps-only }}
force-build: ${{ inputs.force-build }}
secrets: inherit

View file

@ -1,15 +1,6 @@
on:
workflow_call:
inputs:
cache-key:
required: true
type: string
cache-path:
required: true
type: string
valid-cache:
required: true
type: boolean
os:
required: true
type: string
@ -26,55 +17,62 @@ on:
jobs:
build_deps:
name: Build Deps
if: ${{ !cancelled() && (inputs.build-deps-only || inputs.force-build || inputs.valid-cache != true) }}
runs-on: ${{ inputs.os }}
outputs:
artifact-name: ${{ env.ARTIFACT_NAME }}
artifact-path: ${{ env.DEPS_PATH }}
env:
date:
DO_BUILD: ${{ inputs.build-deps-only || inputs.force-build }}
DEPS_PATH: ${{ github.workspace }}/deps/build${{ inputs.os != 'macos-14' && '/OrcaSlicer_dep' || '' }}
ARTIFACT_NAME: OrcaSlicer_dep_${{ inputs.os }}_${{ inputs.arch }}
steps:
# Setup the environment
- name: Checkout
uses: actions/checkout@v6
with:
lfs: 'true'
# Cached deps are just the final outputs, no intermediate files.
# So building XOR cache loading.
# We use `lookup-only` to skip pulling cache.
- name: load cached deps
uses: actions/cache@v4
uses: actions/cache/restore@v4
id: cache-load
with:
path: ${{ inputs.cache-path }}
key: ${{ inputs.cache-key }}
path: ${{ env.DEPS_PATH }}
key: ${{ inputs.os }}-${{ inputs.arch }}-cache-orcaslicer_deps-build-${{ hashFiles('deps/**') }}
lookup-only: ${{ env.DO_BUILD == 'true' }} # Doing this instead of `if` preserves the outputs of this step
- uses: lukka/get-cmake@latest
if: ${{ !cancelled() && (env.DO_BUILD == 'true' || steps.cache-load.outputs.cache-hit != 'true') }}
with:
cmakeVersion: "~3.28.0" # use most recent 3.28.x version
- name: setup dev on Windows
if: inputs.os == 'windows-latest'
if: ${{ !cancelled() && (env.DO_BUILD == 'true' || steps.cache-load.outputs.cache-hit != 'true') && inputs.os == 'windows-latest' }}
uses: microsoft/setup-msbuild@v2
- name: Get the date on Ubuntu and macOS
if: inputs.os != 'windows-latest'
if: ${{ !cancelled() && (env.DO_BUILD == 'true' || steps.cache-load.outputs.cache-hit != 'true') && inputs.os != 'windows-latest' }}
run: echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV
shell: bash
- name: Get the date on Windows
if: inputs.os == 'windows-latest'
if: ${{ !cancelled() && (env.DO_BUILD == 'true' || steps.cache-load.outputs.cache-hit != 'true') && inputs.os == 'windows-latest' }}
run: echo "date=$(Get-Date -Format 'yyyyMMdd')" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8
shell: pwsh
# Build Dependencies
- name: Build on Windows
if: inputs.os == 'windows-latest'
if: ${{ !cancelled() && (env.DO_BUILD == 'true' || steps.cache-load.outputs.cache-hit != 'true') && inputs.os == 'windows-latest' }}
working-directory: ${{ github.workspace }}
run: |
choco install strawberryperl
.\build_release_vs.bat deps
.\build_release_vs.bat pack
cd ${{ github.workspace }}/deps/build
# Windows and Linux don't need to delete any directories, because they only package up deps/build/OrcaSlicer_dep.
# But Mac has multiple and we're preserving their directory structure relationship.
# So the garbage siblings of OrcaSlicer_dep can be deleted to save artifact and cache space.
- name: Build on Mac ${{ inputs.arch }}
if: inputs.os == 'macos-14'
if: ${{ !cancelled() && (env.DO_BUILD == 'true' || steps.cache-load.outputs.cache-hit != 'true') && inputs.os == 'macos-14' }}
working-directory: ${{ github.workspace }}
run: |
brew install automake texinfo libtool
@ -87,53 +85,40 @@ jobs:
done
brew install zstd
- name: Apt-Install Dependencies
if: inputs.os == 'ubuntu-24.04'
if: ${{ !cancelled() && (env.DO_BUILD == 'true' || steps.cache-load.outputs.cache-hit != 'true') && inputs.os == 'ubuntu-24.04' }}
uses: ./.github/actions/apt-install-deps
- name: Build on Ubuntu
if: inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04'
if: ${{ !cancelled() && (env.DO_BUILD == 'true' || steps.cache-load.outputs.cache-hit != 'true') && (inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04') }}
working-directory: ${{ github.workspace }}
run: |
mkdir -p ${{ github.workspace }}/deps/build/destdir
./build_linux.sh -dr
cd deps/build
tar -czvf OrcaSlicer_dep_ubuntu_$(date +"%Y%m%d").tar.gz destdir
# Upload Artifacts
# - name: Upload Mac ${{ inputs.arch }} artifacts
# if: inputs.os == 'macos-14'
# uses: actions/upload-artifact@v5
# with:
# name: OrcaSlicer_dep_mac_${{ env.date }}
# path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep*.tar.gz
- name: Upload Windows artifacts
if: inputs.os == 'windows-latest'
- name: Upload OrcaSlicer_dep director(ies) for use later
if: ${{ !cancelled() && ! env.ACT}}
uses: actions/upload-artifact@v5
with:
name: OrcaSlicer_dep_win64_${{ env.date }}
path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep*.zip
name: ${{ env.ARTIFACT_NAME }}
path: ${{ env.DEPS_PATH }}
retention-days: 10 # It's not too big, but we don't need it for a very long time.
if-no-files-found: error
- name: Upload Ubuntu artifacts
if: ${{ ! env.ACT && inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' }}
env:
ubuntu-ver: ${{ (inputs.os == 'ubuntu-20.04' && '2004') || (inputs.os == 'ubuntu-24.04' && '2404') || '' }}
uses: actions/upload-artifact@v5
- name: Save cache from main branch
if: ${{ !cancelled() && github.ref == 'refs/heads/main' && steps.cache-load.outputs.cache-hit != 'true' }}
uses: actions/cache/save@v4
with:
name: OrcaSlicer_dep_ubuntu_${{ env.ubuntu-ver }}_${{ env.date }}
path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep_ubuntu_*.tar.gz
path: ${{ env.DEPS_PATH }}
key: ${{ steps.cache-load.outputs.cache-primary-key }}
build_orca:
name: Build OrcaSlicer
needs: [build_deps]
if: ${{ !cancelled() && !inputs.build-deps-only && (inputs.force-build || (inputs.valid-cache == true && needs.build_deps.result == 'skipped') || (inputs.valid-cache != true && success())) }}
if: ${{ !cancelled() && (!inputs.build-deps-only || inputs.force-build) }}
uses: ./.github/workflows/build_orca.yml
with:
cache-key: ${{ inputs.cache-key }}
cache-path: ${{ inputs.cache-path }}
artifact-name: ${{ needs.build_deps.outputs.artifact-name }}
artifact-path: ${{ needs.build_deps.outputs.artifact-path }}
os: ${{ inputs.os }}
arch: ${{ inputs.arch }}
secrets: inherit

View file

@ -1,10 +1,10 @@
on:
workflow_call:
inputs:
cache-key:
artifact-name:
required: true
type: string
cache-path:
artifact-path:
required: true
type: string
os:
@ -30,12 +30,11 @@ jobs:
with:
lfs: 'true'
- name: load cached deps
uses: actions/cache@v4
- name: Download deps artifacts
uses: actions/download-artifact@v4
with:
path: ${{ inputs.cache-path }}
key: ${{ inputs.cache-key }}
fail-on-cache-miss: true
name: ${{ inputs.artifact-name }}
path: ${{ inputs.artifact-path }}
- uses: lukka/get-cmake@latest
with:

View file

@ -21,7 +21,7 @@ function usage() {
echo " -p: boost ccache hit rate by disabling precompiled headers (default: ON)"
echo " -r: skip RAM and disk checks (low RAM compiling)"
echo " -s: build the Orca Slicer (optional)"
echo " -t: build tests (optional), requires -s flag"
echo " -t: build tests (optional)"
echo " -u: install system dependencies (asks for sudo password; build prerequisite)"
echo " -l: use Clang instead of GCC (default: GCC)"
echo " -L: use ld.lld as linker (if available)"