on: workflow_call: inputs: cache-key: required: true type: string cache-path: required: true type: string os: required: true type: string arch: required: false type: string jobs: build_bambu: name: Build BambuStudio runs-on: ${{ inputs.os }} env: date: ver: ver_pure: steps: - name: Checkout uses: actions/checkout@v4 with: lfs: 'true' - name: load cached deps uses: actions/cache@v4 with: path: ${{ inputs.cache-path }} key: ${{ inputs.cache-key }} fail-on-cache-miss: true - name: Get the version and date on Ubuntu and macOS if: inputs.os != 'windows-latest' run: | ver_pure=$(grep 'set(SLIC3R_VERSION' version.inc | cut -d '"' -f2) if [[ "${{ github.event_name }}" == "pull_request" ]]; then ver="PR-${{ github.event.number }}" else ver=V$ver_pure fi echo "ver=$ver" >> $GITHUB_ENV echo "ver_pure=$ver_pure" >> $GITHUB_ENV echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV shell: bash - name: Get the version and date on Windows if: inputs.os == 'windows-latest' run: | $date = Get-Date -Format 'yyyyMMdd' $ref = "${{ github.ref }}" $eventName = "${{ github.event_name }}" $prNumber = "${{ github.event.number }}" if ($eventName -eq 'pull_request') { $ver = "PR" + $prNumber } else { $versionContent = Get-Content version.inc -Raw if ($versionContent -match 'set\(SLIC3R_VERSION "(.*?)"\)') { $ver = $matches[1] } $ver = "V$ver" } echo "ver=$ver" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 echo "date=$date" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 echo "date: ${{ env.date }} version: ${{ env.ver }}" shell: pwsh # Mac - name: Build slicer mac if: inputs.os == 'macos-13' working-directory: ${{ github.workspace }} run: | brew install cmake git gettext automake texinfo mkdir -p ${{ github.workspace }}/build_${{inputs.arch}} cd ${{ github.workspace }}/build_${{inputs.arch}} cmake .. -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="${{ github.workspace }}/deps/build_${{ inputs.arch }}/BambuStudio_dep_${{ inputs.arch }}/usr/local" -DCMAKE_INSTALL_PREFIX="../install_dir" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MACOSX_RPATH=ON -DCMAKE_INSTALL_RPATH="${{ github.workspace }}/deps/build_${{ inputs.arch }}/BambuStudio_dep_${{ inputs.arch }}/usr/local" -DCMAKE_MACOSX_BUNDLE=on cmake --build . --target install --config Release -j4 # Thanks to RaySajuuk, it's working now # - name: Sign app and notary # if: (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/')) && inputs.os == 'macos-13' # working-directory: ${{ github.workspace }} # env: # BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} # P12_PASSWORD: ${{ secrets.P12_PASSWORD }} # KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} # CERTIFICATE_ID: ${{ secrets.MACOS_CERTIFICATE_ID }} # run: | # CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 # KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db # echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output $CERTIFICATE_PATH # security create-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH # security set-keychain-settings -lut 21600 $KEYCHAIN_PATH # security unlock-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH # security import $CERTIFICATE_PATH -P $P12_PASSWORD -A -t cert -f pkcs12 -k $KEYCHAIN_PATH # security list-keychain -d user -s $KEYCHAIN_PATH # security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $P12_PASSWORD $KEYCHAIN_PATH # codesign --deep --force --verbose --options runtime --timestamp --entitlements ${{ github.workspace }}/scripts/disable_validation.entitlements --sign "$CERTIFICATE_ID" ${{ github.workspace }}/build_${{inputs.arch}}/OrcaSlicer/OrcaSlicer.app # ln -s /Applications ${{ github.workspace }}/build_${{inputs.arch}}/OrcaSlicer/Applications # hdiutil create -volname "OrcaSlicer" -srcfolder ${{ github.workspace }}/build_${{inputs.arch}}/OrcaSlicer -ov -format UDZO OrcaSlicer_Mac_${{inputs.arch}}_${{ env.ver }}.dmg # codesign --deep --force --verbose --options runtime --timestamp --entitlements ${{ github.workspace }}/scripts/disable_validation.entitlements --sign "$CERTIFICATE_ID" OrcaSlicer_Mac_${{inputs.arch}}_${{ env.ver }}.dmg # xcrun notarytool store-credentials "notarytool-profile" --apple-id "${{ secrets.APPLE_DEV_ACCOUNT }}" --team-id "${{ secrets.TEAM_ID }}" --password "${{ secrets.APP_PWD }}" # xcrun notarytool submit "OrcaSlicer_Mac_${{inputs.arch}}_${{ env.ver }}.dmg" --keychain-profile "notarytool-profile" --wait # xcrun stapler staple OrcaSlicer_Mac_${{inputs.arch}}_${{ env.ver }}.dmg # - name: Create DMG without notary # if: github.ref != 'refs/heads/main' && inputs.os == 'macos-13' # working-directory: ${{ github.workspace }} # run: | # ls ${{ github.workspace }}/install_dir # brew install create-dmg # create-dmg --volname "Bambu Studio" --window-pos 200 120 --window-size 600 400 --icon-size 100 --icon "BambuStudio.app" 200 150 --app-drop-link 400 150 BambuStudio_Mac_${{inputs.arch}}_${{ env.ver }}.dmg ${{ github.workspace }}/install_dir/ - name: pack mac app if: github.ref != 'refs/heads/main' && inputs.os == 'macos-13' working-directory: ${{ github.workspace }} run: zip -r BambuStudio_Mac_${{inputs.arch}}_${{ env.ver }}.zip ${{ github.workspace }}/install_dir - name: Upload artifacts mac if: inputs.os == 'macos-13' uses: actions/upload-artifact@v4 with: name: BambuStudio_Mac_${{inputs.arch}}_${{ env.ver }} path: ${{ github.workspace }}/BambuStudio_Mac_${{inputs.arch}}_${{ env.ver }}.zip # - name: Deploy Mac release # if: github.ref == 'refs/heads/main' && inputs.os == 'macos-13' # uses: WebFreak001/deploy-nightly@v3.1.0 # with: # upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} # release_id: 137995723 # asset_path: ${{ github.workspace }}/OrcaSlicer_Mac_${{inputs.arch}}_${{ env.ver }}.dmg # asset_name: OrcaSlicer_Mac_${{inputs.arch}}_${{ env.ver }}.dmg # 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 # Windows - name: setup MSVC if: inputs.os == 'windows-latest' uses: microsoft/setup-msbuild@v2 - name: Install nsis and pkgconfig if: inputs.os == 'windows-latest' run: | dir "C:/Program Files (x86)/Windows Kits/10/Include" choco install nsis - name: Build slicer Win if: inputs.os == 'windows-latest' working-directory: ${{ github.workspace }} run: | mkdir build cd build cmake .. -G "Visual Studio 17 2022" -A X64 -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="${{ github.workspace }}\deps\build\BambuStudio_dep\usr\local" -DCMAKE_INSTALL_PREFIX="../install-dir" -DCMAKE_BUILD_TYPE=Release -DWIN10SDK_PATH="C:/Program Files (x86)/Windows Kits/10/Include/10.0.22000.0" cmake --build . --target install --config Release -- -m # - name: Create installer Win # if: inputs.os == 'windows-latest' # working-directory: ${{ github.workspace }}/build # run: | # cpack -G NSIS - name: Pack app if: inputs.os == 'windows-latest' working-directory: ${{ github.workspace }} shell: cmd run: '"C:/Program Files/7-Zip/7z.exe" a -tzip BambuStudio_Windows_${{ env.ver }}_portable.zip ${{ github.workspace }}/install-dir' # - name: Pack PDB # if: inputs.os == 'windows-latest' # working-directory: ${{ github.workspace }}/build/src/Release # shell: cmd # run: '"C:/Program Files/7-Zip/7z.exe" a -m0=lzma2 -mx9 Debug_PDB_${{ env.ver }}_for_developers_only.7z *.pdb' - name: Upload artifacts Win zip if: inputs.os == 'windows-latest' uses: actions/upload-artifact@v4 with: name: BambuStudio_Windows_${{ env.ver }}_portable path: ${{ github.workspace }}/BambuStudio_Windows_${{ env.ver }}_portable.zip # - name: Upload artifacts Win installer # if: inputs.os == 'windows-latest' # uses: actions/upload-artifact@v4 # with: # name: BambuStudio_Windows_${{ env.ver }} # path: ${{ github.workspace }}/build/BambuStudio*.exe # - name: Upload artifacts Win PDB # if: inputs.os == 'windows-latest' # uses: actions/upload-artifact@v4 # with: # name: PDB # path: ${{ github.workspace }}/build/src/Release/Debug_PDB_${{ env.ver }}_for_developers_only.7z # - name: Deploy Windows release portable # if: github.ref == 'refs/heads/main' && inputs.os == 'windows-latest' # uses: WebFreak001/deploy-nightly@v3.1.0 # with: # upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} # release_id: 137995723 # asset_path: ${{ github.workspace }}/build/OrcaSlicer_Windows_${{ env.ver }}_portable.zip # asset_name: OrcaSlicer_Windows_${{ env.ver }}_portable.zip # asset_content_type: application/x-zip-compressed # max_releases: 1 # - name: Deploy Windows release installer # if: github.ref == 'refs/heads/main' && inputs.os == 'windows-latest' # uses: WebFreak001/deploy-nightly@v3.1.0 # with: # upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} # release_id: 137995723 # asset_path: ${{ github.workspace }}/build/OrcaSlicer_Windows_Installer_${{ env.ver }}.exe # asset_name: OrcaSlicer_Windows_Installer_${{ env.ver }}.exe # asset_content_type: application/x-msdownload # max_releases: 1 # Ubuntu - name: Install dependencies if: inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' run: | sudo apt-get update sudo apt-get install -y autoconf build-essential cmake curl wget file git \ libgl1-mesa-dev libgtk-3-dev libxkbcommon-dev libunwind-dev libfuse2 - name: Install dependencies from BuildLinux.sh if: inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' shell: bash run: sudo ./BuildLinux.sh -ur - name: Fix permissions if: inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' shell: bash run: sudo chown $USER -R ./ - name: Build slicer if: inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' shell: bash run: | ./BuildLinux.sh -isr mv -n ./build/BambuStudio_ubu64.AppImage ./build/Bambu_Studio_${{inputs.os}}_${{ env.ver }}.AppImage # - name: Build orca_custom_preset_tests # if: github.ref == 'refs/heads/main' && inputs.os == 'ubuntu-20.04' # working-directory: ${{ github.workspace }}/build/src # shell: bash # run: | # ./OrcaSlicer_profile_validator -p ${{ github.workspace }}/resources/profiles -g 1 # cd ${{ github.workspace }}/resources/profiles # zip -r orca_custom_preset_tests.zip user/ - name: Upload artifacts Ubuntu if: ${{ ! env.ACT && (inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04') }} uses: actions/upload-artifact@v4 with: name: BambuStudio_${{inputs.os}}_${{ env.ver }} path: './build/Bambu_Studio_${{inputs.os}}_${{ env.ver }}.AppImage' # - name: Deploy Ubuntu release # if: ${{ ! env.ACT && github.ref == 'refs/heads/main' && inputs.os == 'ubuntu-20.04' }} # uses: WebFreak001/deploy-nightly@v3.1.0 # with: # upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} # release_id: 137995723 # asset_path: ./build/OrcaSlicer_Linux_${{ env.ver }}.AppImage # asset_name: OrcaSlicer_Linux_${{ env.ver }}.AppImage # 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 # - name: Deploy orca_custom_preset_tests # if: ${{ ! env.ACT && github.ref == 'refs/heads/main' && inputs.os == 'ubuntu-20.04' }} # uses: WebFreak001/deploy-nightly@v3.1.0 # with: # upload_url: https://uploads.github.com/repos/SoftFever/OrcaSlicer/releases/137995723/assets{?name,label} # release_id: 137995723 # asset_path: ${{ github.workspace }}/resources/profiles/orca_custom_preset_tests.zip # asset_name: orca_custom_preset_tests.zip # asset_content_type: application/octet-stream # max_releases: 1