mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-25 07:33:57 -06:00
Merge branch 'main' into CURA-10446_modify_gcode_path
This commit is contained in:
commit
e2584ad741
21 changed files with 608 additions and 46 deletions
2
.github/workflows/cura-installer.yml
vendored
2
.github/workflows/cura-installer.yml
vendored
|
@ -155,7 +155,7 @@ jobs:
|
||||||
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10
|
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10
|
||||||
|
|
||||||
- name: Create the default Conan profile
|
- name: Create the default Conan profile
|
||||||
run: conan profile new default --detect
|
run: conan profile new default --detect --force
|
||||||
|
|
||||||
- name: Configure GPG Key Linux (Bash)
|
- name: Configure GPG Key Linux (Bash)
|
||||||
if: ${{ runner.os == 'Linux' }}
|
if: ${{ runner.os == 'Linux' }}
|
||||||
|
|
77
.github/workflows/installers.yml
vendored
Normal file
77
.github/workflows/installers.yml
vendored
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
name: All installers
|
||||||
|
run-name: ${{ inputs.cura_conan_version }} by @${{ github.actor }}
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
cura_conan_version:
|
||||||
|
description: 'Cura Conan Version'
|
||||||
|
default: 'cura/latest@ultimaker/testing'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
conan_args:
|
||||||
|
description: 'Conan args: eq.: --require-override'
|
||||||
|
default: ''
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
enterprise:
|
||||||
|
description: 'Build Cura as an Enterprise edition'
|
||||||
|
default: false
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
staging:
|
||||||
|
description: 'Use staging API'
|
||||||
|
default: false
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
windows-installer:
|
||||||
|
uses: ./.github/workflows/windows.yml
|
||||||
|
with:
|
||||||
|
cura_conan_version: ${{ inputs.cura_conan_version }}
|
||||||
|
conan_args: ${{ inputs.conan_args }}
|
||||||
|
enterprise: ${{ inputs.enterprise }}
|
||||||
|
staging: ${{ inputs.staging }}
|
||||||
|
architecture: X64
|
||||||
|
operating_system: windows-2022
|
||||||
|
|
||||||
|
linux-modern-installer:
|
||||||
|
uses: ./.github/workflows/linux.yml
|
||||||
|
with:
|
||||||
|
cura_conan_version: ${{ inputs.cura_conan_version }}
|
||||||
|
conan_args: ${{ inputs.conan_args }}
|
||||||
|
enterprise: ${{ inputs.enterprise }}
|
||||||
|
staging: ${{ inputs.staging }}
|
||||||
|
architecture: X64
|
||||||
|
operating_system: ubuntu-22.04
|
||||||
|
|
||||||
|
linux-legacy-installer:
|
||||||
|
uses: ./.github/workflows/linux.yml
|
||||||
|
with:
|
||||||
|
cura_conan_version: ${{ inputs.cura_conan_version }}
|
||||||
|
conan_args: ${{ inputs.conan_args }}
|
||||||
|
enterprise: ${{ inputs.enterprise }}
|
||||||
|
staging: ${{ inputs.staging }}
|
||||||
|
architecture: X64
|
||||||
|
operating_system: ubuntu-20.04
|
||||||
|
|
||||||
|
macos-installer:
|
||||||
|
uses: ./.github/workflows/macos.yml
|
||||||
|
with:
|
||||||
|
cura_conan_version: ${{ inputs.cura_conan_version }}
|
||||||
|
conan_args: ${{ inputs.conan_args }}
|
||||||
|
enterprise: ${{ inputs.enterprise }}
|
||||||
|
staging: ${{ inputs.staging }}
|
||||||
|
architecture: X64
|
||||||
|
operating_system: macos-11.0
|
||||||
|
|
||||||
|
macos-arm-installer:
|
||||||
|
uses: ./.github/workflows/macos.yml
|
||||||
|
with:
|
||||||
|
cura_conan_version: ${{ inputs.cura_conan_version }}
|
||||||
|
conan_args: ${{ inputs.conan_args }}
|
||||||
|
enterprise: ${{ inputs.enterprise }}
|
||||||
|
staging: ${{ inputs.staging }}
|
||||||
|
architecture: ARM64
|
||||||
|
operating_system: self-hosted
|
89
.github/workflows/linux.yml
vendored
Normal file
89
.github/workflows/linux.yml
vendored
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
name: Linux Installer
|
||||||
|
run-name: ${{ inputs.cura_conan_version }} for Linux-${{ inputs.architecture }} by @${{ github.actor }}
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
cura_conan_version:
|
||||||
|
description: 'Cura Conan Version'
|
||||||
|
default: 'cura/latest@ultimaker/testing'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
conan_args:
|
||||||
|
description: 'Conan args: eq.: --require-override'
|
||||||
|
default: ''
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
enterprise:
|
||||||
|
description: 'Build Cura as an Enterprise edition'
|
||||||
|
default: false
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
staging:
|
||||||
|
description: 'Use staging API'
|
||||||
|
default: false
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
architecture:
|
||||||
|
description: 'Architecture'
|
||||||
|
required: true
|
||||||
|
default: 'X64'
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- X64
|
||||||
|
operating_system:
|
||||||
|
description: 'OS'
|
||||||
|
required: true
|
||||||
|
default: 'ubuntu-22.04'
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- ubuntu-22.04
|
||||||
|
- ubuntu-20.04
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
cura_conan_version:
|
||||||
|
description: 'Cura Conan Version'
|
||||||
|
default: 'cura/latest@ultimaker/testing'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
conan_args:
|
||||||
|
description: 'Conan args: eq.: --require-override'
|
||||||
|
default: ''
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
enterprise:
|
||||||
|
description: 'Build Cura as an Enterprise edition'
|
||||||
|
default: false
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
staging:
|
||||||
|
description: 'Use staging API'
|
||||||
|
default: false
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
architecture:
|
||||||
|
description: 'Architecture'
|
||||||
|
required: true
|
||||||
|
default: 'X64'
|
||||||
|
type: string
|
||||||
|
operating_system:
|
||||||
|
description: 'OS'
|
||||||
|
required: true
|
||||||
|
default: 'ubuntu-22.04'
|
||||||
|
type: string
|
||||||
|
|
||||||
|
env:
|
||||||
|
CONAN_LOGIN_USERNAME_CURA: ${{ secrets.CONAN_USER }}
|
||||||
|
CONAN_PASSWORD_CURA: ${{ secrets.CONAN_PASS }}
|
||||||
|
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
|
||||||
|
CURA_CONAN_VERSION: ${{ inputs.cura_conan_version }}
|
||||||
|
ENTERPRISE: ${{ inputs.enterprise }}
|
||||||
|
STAGING: ${{ inputs.staging }}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
cura-installer-create:
|
||||||
|
runs-on: ${{ inputs.operating_system }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
258
.github/workflows/macos.yml
vendored
Normal file
258
.github/workflows/macos.yml
vendored
Normal file
|
@ -0,0 +1,258 @@
|
||||||
|
name: Macos Installer
|
||||||
|
run-name: ${{ inputs.cura_conan_version }} for Macos-${{ inputs.architecture }} by @${{ github.actor }}
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
cura_conan_version:
|
||||||
|
description: 'Cura Conan Version'
|
||||||
|
default: 'cura/latest@ultimaker/testing'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
conan_args:
|
||||||
|
description: 'Conan args: eq.: --require-override'
|
||||||
|
default: ''
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
enterprise:
|
||||||
|
description: 'Build Cura as an Enterprise edition'
|
||||||
|
default: false
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
staging:
|
||||||
|
description: 'Use staging API'
|
||||||
|
default: false
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
architecture:
|
||||||
|
description: 'Architecture'
|
||||||
|
required: true
|
||||||
|
default: 'X64'
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- X64
|
||||||
|
- ARM64
|
||||||
|
operating_system:
|
||||||
|
description: 'OS'
|
||||||
|
required: true
|
||||||
|
default: 'macos-11'
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- self-hosted
|
||||||
|
- macos-11
|
||||||
|
- macos-12
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
cura_conan_version:
|
||||||
|
description: 'Cura Conan Version'
|
||||||
|
default: 'cura/latest@ultimaker/testing'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
conan_args:
|
||||||
|
description: 'Conan args: eq.: --require-override'
|
||||||
|
default: ''
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
enterprise:
|
||||||
|
description: 'Build Cura as an Enterprise edition'
|
||||||
|
default: false
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
staging:
|
||||||
|
description: 'Use staging API'
|
||||||
|
default: false
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
architecture:
|
||||||
|
description: 'Architecture'
|
||||||
|
required: true
|
||||||
|
default: 'X64'
|
||||||
|
type: string
|
||||||
|
operating_system:
|
||||||
|
description: 'OS'
|
||||||
|
required: true
|
||||||
|
default: 'macos-11'
|
||||||
|
type: string
|
||||||
|
|
||||||
|
env:
|
||||||
|
CONAN_LOGIN_USERNAME_CURA: ${{ secrets.CONAN_USER }}
|
||||||
|
CONAN_PASSWORD_CURA: ${{ secrets.CONAN_PASS }}
|
||||||
|
CODESIGN_IDENTITY: ${{ secrets.CODESIGN_IDENTITY }}
|
||||||
|
MAC_NOTARIZE_USER: ${{ secrets.MAC_NOTARIZE_USER }}
|
||||||
|
MAC_NOTARIZE_PASS: ${{ secrets.MAC_NOTARIZE_PASS }}
|
||||||
|
MACOS_CERT_P12: ${{ secrets.MACOS_CERT_P12 }}
|
||||||
|
MACOS_CERT_INSTALLER_P12: ${{ secrets.MACOS_CERT_INSTALLER_P12 }}
|
||||||
|
MACOS_CERT_USER: ${{ secrets.MACOS_CERT_USER }}
|
||||||
|
MACOS_CERT_PASSPHRASE: ${{ secrets.MACOS_CERT_PASSPHRASE }}
|
||||||
|
CURA_CONAN_VERSION: ${{ inputs.cura_conan_version }}
|
||||||
|
ENTERPRISE: ${{ inputs.enterprise }}
|
||||||
|
STAGING: ${{ inputs.staging }}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
cura-installer-create:
|
||||||
|
runs-on: ${{ inputs.operating_system }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup Python and pip
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: '3.10.x'
|
||||||
|
cache: 'pip'
|
||||||
|
cache-dependency-path: .github/workflows/requirements-conan-package.txt
|
||||||
|
|
||||||
|
- name: Install Python requirements for runner
|
||||||
|
run: pip install -r .github/workflows/requirements-conan-package.txt
|
||||||
|
|
||||||
|
- name: Install MacOS system requirements
|
||||||
|
run: brew install cmake autoconf automake ninja create-dmg
|
||||||
|
|
||||||
|
- name: Create the default Conan profile
|
||||||
|
run: conan profile new default --detect --force
|
||||||
|
|
||||||
|
- name: Remove Macos keychain (Bash)
|
||||||
|
run: security delete-keychain signing_temp.keychain || true
|
||||||
|
|
||||||
|
- name: Configure Macos keychain Developer Cert(Bash)
|
||||||
|
id: macos-keychain-developer-cert
|
||||||
|
uses: apple-actions/import-codesign-certs@v1
|
||||||
|
with:
|
||||||
|
keychain-password: ${{ secrets.MACOS_KEYCHAIN_PASSWORD }}
|
||||||
|
p12-file-base64: ${{ secrets.MACOS_CERT_P12 }}
|
||||||
|
p12-password: ${{ secrets.MACOS_CERT_PASSPHRASE }}
|
||||||
|
|
||||||
|
- name: Configure Macos keychain Installer Cert (Bash)
|
||||||
|
id: macos-keychain-installer-cert
|
||||||
|
uses: apple-actions/import-codesign-certs@v1
|
||||||
|
with:
|
||||||
|
keychain-password: ${{ secrets.MACOS_KEYCHAIN_PASSWORD }}
|
||||||
|
create-keychain: false # keychain is created in previous use of action.
|
||||||
|
p12-file-base64: ${{ secrets.MACOS_CERT_INSTALLER_P12 }}
|
||||||
|
p12-password: ${{ secrets.MACOS_CERT_PASSPHRASE }}
|
||||||
|
|
||||||
|
- name: Get Conan configuration
|
||||||
|
run: conan config install https://github.com/Ultimaker/conan-config.git
|
||||||
|
|
||||||
|
- name: Set architecture conan profile
|
||||||
|
if: ${{ inputs.architecture == 'X64' }}
|
||||||
|
run: conan profile update settings.arch=x86_64 default
|
||||||
|
|
||||||
|
- name: Set Environment variables for Cura (bash)
|
||||||
|
run: |
|
||||||
|
. ./cura_inst/bin/activate_github_actions_env.sh
|
||||||
|
. ./cura_inst/bin/activate_github_actions_version_env.sh
|
||||||
|
|
||||||
|
- name: Unlock Macos keychain (Bash)
|
||||||
|
run: security unlock -p $TEMP_KEYCHAIN_PASSWORD signing_temp.keychain
|
||||||
|
env:
|
||||||
|
TEMP_KEYCHAIN_PASSWORD: ${{ steps.macos-keychain-developer-cert.outputs.keychain-password }}
|
||||||
|
|
||||||
|
# FIXME: This is a workaround to ensure that we use and pack a shared library for OpenSSL 1.1.1l. We currently compile
|
||||||
|
# OpenSSL statically for CPython, but our Python Dependenies (such as PyQt6) require a shared library.
|
||||||
|
# Because Conan won't allow for building the same library with two different options (easily) we need to install it explicitly
|
||||||
|
# and do a manual copy to the VirtualEnv, such that Pyinstaller can find it.
|
||||||
|
- name: Install OpenSSL shared
|
||||||
|
run: conan install openssl/1.1.1l@_/_ --build=missing --update -o openssl:shared=True -g deploy
|
||||||
|
|
||||||
|
- name: Copy OpenSSL shared (Bash)
|
||||||
|
run: |
|
||||||
|
cp ./openssl/lib/*.so* ./cura_inst/bin/ || true
|
||||||
|
cp ./openssl/lib/*.dylib* ./cura_inst/bin/ || true
|
||||||
|
|
||||||
|
- name: Create the Cura dist
|
||||||
|
run: pyinstaller ./cura_inst/UltiMaker-Cura.spec
|
||||||
|
|
||||||
|
- name: Output the name file name and extension
|
||||||
|
id: filename
|
||||||
|
shell: python
|
||||||
|
run: |
|
||||||
|
import os
|
||||||
|
enterprise = "-Enterprise" if "${{ inputs.enterprise }}" == "true" else ""
|
||||||
|
installer_filename = f"UltiMaker-Cura-{os.getenv('CURA_VERSION_FULL')}{enterprise}-macos-${{ inputs.arch }}"
|
||||||
|
output_env = os.environ["GITHUB_OUTPUT"]
|
||||||
|
content = ""
|
||||||
|
if os.path.exists(output_env):
|
||||||
|
with open(output_env, "r") as f:
|
||||||
|
content = f.read()
|
||||||
|
with open(output_env, "w") as f:
|
||||||
|
f.write(content)
|
||||||
|
f.writelines(f"INSTALLER_FILENAME={installer_filename}\n")
|
||||||
|
|
||||||
|
- name: Summarize the used Conan dependencies
|
||||||
|
shell: python
|
||||||
|
run: |
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
conan_install_info_path = Path("cura_inst/conan_install_info.json")
|
||||||
|
conan_info = {"installed": []}
|
||||||
|
if os.path.exists(conan_install_info_path):
|
||||||
|
with open(conan_install_info_path, "r") as f:
|
||||||
|
conan_info = json.load(f)
|
||||||
|
sorted_deps = sorted([dep["recipe"]["id"].replace('#', r' rev: ') for dep in conan_info["installed"]])
|
||||||
|
|
||||||
|
summary_env = os.environ["GITHUB_STEP_SUMMARY"]
|
||||||
|
content = ""
|
||||||
|
if os.path.exists(summary_env):
|
||||||
|
with open(summary_env, "r") as f:
|
||||||
|
content = f.read()
|
||||||
|
|
||||||
|
with open(summary_env, "w") as f:
|
||||||
|
f.write(content)
|
||||||
|
f.writelines("# ${{ steps.filename.outputs.INSTALLER_FILENAME }}\n")
|
||||||
|
f.writelines("## Conan packages:\n")
|
||||||
|
for dep in sorted_deps:
|
||||||
|
f.writelines(f"`{dep}`\n")
|
||||||
|
|
||||||
|
- name: Summarize the used Python modules
|
||||||
|
shell: python
|
||||||
|
run: |
|
||||||
|
import os
|
||||||
|
import pkg_resources
|
||||||
|
summary_env = os.environ["GITHUB_STEP_SUMMARY"]
|
||||||
|
content = ""
|
||||||
|
if os.path.exists(summary_env):
|
||||||
|
with open(summary_env, "r") as f:
|
||||||
|
content = f.read()
|
||||||
|
|
||||||
|
with open(summary_env, "w") as f:
|
||||||
|
f.write(content)
|
||||||
|
f.writelines("## Python modules:\n")
|
||||||
|
for package in pkg_resources.working_set:
|
||||||
|
f.writelines(f"`{package.key}/{package.version}`\n")
|
||||||
|
|
||||||
|
- name: Create the Macos dmg and pkg (Bash)
|
||||||
|
run: python ../cura_inst/packaging/MacOS/build_macos.py --source_path ../cura_inst --dist_path . --cura_conan_version $CURA_CONAN_VERSION --filename "${{ steps.filename.outputs.INSTALLER_FILENAME }}" --build_pkg --build_dmg --app_name "$CURA_APP_NAME"
|
||||||
|
working-directory: dist
|
||||||
|
|
||||||
|
- name: Upload the pkg
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: ${{ steps.filename.outputs.INSTALLER_FILENAME }}-pkg
|
||||||
|
path: |
|
||||||
|
dist/${{ steps.filename.outputs.INSTALLER_FILENAME }}.pkg
|
||||||
|
retention-days: 5
|
||||||
|
|
||||||
|
- name: Upload the dmg
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: ${{ steps.filename.outputs.INSTALLER_FILENAME }}-dmg
|
||||||
|
path: |
|
||||||
|
dist/${{ steps.filename.outputs.INSTALLER_FILENAME }}.dmg
|
||||||
|
retention-days: 5
|
||||||
|
|
||||||
|
notify-export:
|
||||||
|
if: ${{ always() }}
|
||||||
|
needs: [ cura-installer-create ]
|
||||||
|
|
||||||
|
uses: ultimaker/cura/.github/workflows/notify.yml@main
|
||||||
|
with:
|
||||||
|
success: ${{ contains(join(needs.*.result, ','), 'success') }}
|
||||||
|
success_title: "Create the Cura distributions"
|
||||||
|
success_body: "Installers for ${{ inputs.cura_conan_version }}"
|
||||||
|
failure_title: "Failed to create the Cura distributions"
|
||||||
|
failure_body: "Failed to create at least 1 installer for ${{ inputs.cura_conan_version }}"
|
||||||
|
secrets: inherit
|
89
.github/workflows/windows.yml
vendored
Normal file
89
.github/workflows/windows.yml
vendored
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
name: Windows Installer
|
||||||
|
run-name: ${{ inputs.cura_conan_version }} for Windows-${{ inputs.architecture }} by @${{ github.actor }}
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
cura_conan_version:
|
||||||
|
description: 'Cura Conan Version'
|
||||||
|
default: 'cura/latest@ultimaker/testing'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
conan_args:
|
||||||
|
description: 'Conan args: eq.: --require-override'
|
||||||
|
default: ''
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
enterprise:
|
||||||
|
description: 'Build Cura as an Enterprise edition'
|
||||||
|
default: false
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
staging:
|
||||||
|
description: 'Use staging API'
|
||||||
|
default: false
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
architecture:
|
||||||
|
description: 'Architecture'
|
||||||
|
required: true
|
||||||
|
default: 'X64'
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- X64
|
||||||
|
operating_system:
|
||||||
|
description: 'OS'
|
||||||
|
required: true
|
||||||
|
default: 'windows-2022'
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- windows-2022
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
cura_conan_version:
|
||||||
|
description: 'Cura Conan Version'
|
||||||
|
default: 'cura/latest@ultimaker/testing'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
conan_args:
|
||||||
|
description: 'Conan args: eq.: --require-override'
|
||||||
|
default: ''
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
enterprise:
|
||||||
|
description: 'Build Cura as an Enterprise edition'
|
||||||
|
default: false
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
staging:
|
||||||
|
description: 'Use staging API'
|
||||||
|
default: false
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
architecture:
|
||||||
|
description: 'Architecture'
|
||||||
|
required: true
|
||||||
|
default: 'X64'
|
||||||
|
type: string
|
||||||
|
operating_system:
|
||||||
|
description: 'OS'
|
||||||
|
required: true
|
||||||
|
default: 'windows-2022'
|
||||||
|
type: string
|
||||||
|
|
||||||
|
env:
|
||||||
|
CONAN_LOGIN_USERNAME_CURA: ${{ secrets.CONAN_USER }}
|
||||||
|
CONAN_PASSWORD_CURA: ${{ secrets.CONAN_PASS }}
|
||||||
|
WIN_CERT_INSTALLER_CER: ${{ secrets.WIN_CERT_INSTALLER_CER }}
|
||||||
|
WIN_CERT_INSTALLER_CER_PASS: ${{ secrets.WIN_CERT_INSTALLER_CER_PASS }}
|
||||||
|
CURA_CONAN_VERSION: ${{ inputs.cura_conan_version }}
|
||||||
|
ENTERPRISE: ${{ inputs.enterprise }}
|
||||||
|
STAGING: ${{ inputs.staging }}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
cura-installer-create:
|
||||||
|
runs-on: ${{ inputs.operating_system }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
|
@ -18,8 +18,8 @@ url: "https://ultimaker.com/software/ultimaker-cura"
|
||||||
repository-code: "https://github.com/Ultimaker/Cura"
|
repository-code: "https://github.com/Ultimaker/Cura"
|
||||||
license: LGPL-3.0
|
license: LGPL-3.0
|
||||||
license-url: "https://github.com/Ultimaker/Cura/blob/main/LICENSE"
|
license-url: "https://github.com/Ultimaker/Cura/blob/main/LICENSE"
|
||||||
version: 5.2.1
|
version: 5.4.0
|
||||||
date-released: "2022-10-19"
|
date-released: "2023-07-04"
|
||||||
keywords:
|
keywords:
|
||||||
- Ultimaker
|
- Ultimaker
|
||||||
- Cura
|
- Cura
|
||||||
|
|
1
FUNDING.yml
Normal file
1
FUNDING.yml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
github: [ultimaker]
|
|
@ -497,6 +497,36 @@ class CuraApplication(QtApplication):
|
||||||
def startSplashWindowPhase(self) -> None:
|
def startSplashWindowPhase(self) -> None:
|
||||||
"""Runs preparations that needs to be done before the starting process."""
|
"""Runs preparations that needs to be done before the starting process."""
|
||||||
|
|
||||||
|
self.setRequiredPlugins([
|
||||||
|
# Misc.:
|
||||||
|
"ConsoleLogger", # You want to be able to read the log if something goes wrong.
|
||||||
|
"CuraEngineBackend", # Cura is useless without this one since you can't slice.
|
||||||
|
"FileLogger", # You want to be able to read the log if something goes wrong.
|
||||||
|
"XmlMaterialProfile", # Cura crashes without this one.
|
||||||
|
"Marketplace",
|
||||||
|
# This contains the interface to enable/disable plug-ins, so if you disable it you can't enable it back.
|
||||||
|
"PrepareStage", # Cura is useless without this one since you can't load models.
|
||||||
|
"PreviewStage", # This shows the list of the plugin views that are installed in Cura.
|
||||||
|
"MonitorStage", # Major part of Cura's functionality.
|
||||||
|
"LocalFileOutputDevice", # Major part of Cura's functionality.
|
||||||
|
"LocalContainerProvider", # Cura is useless without any profiles or setting definitions.
|
||||||
|
|
||||||
|
# Views:
|
||||||
|
"SimpleView", # Dependency of SolidView.
|
||||||
|
"SolidView", # Displays models. Cura is useless without it.
|
||||||
|
|
||||||
|
# Readers & Writers:
|
||||||
|
"GCodeWriter", # Cura is useless if it can't write its output.
|
||||||
|
"STLReader", # Most common model format, so disabling this makes Cura 90% useless.
|
||||||
|
"3MFWriter", # Required for writing project files.
|
||||||
|
|
||||||
|
# Tools:
|
||||||
|
"CameraTool", # Needed to see the scene. Cura is useless without it.
|
||||||
|
"SelectionTool", # Dependency of the rest of the tools.
|
||||||
|
"TranslateTool", # You'll need this for almost every print.
|
||||||
|
])
|
||||||
|
# Plugins need to be set here, since in the super the check is done if they are actually loaded.
|
||||||
|
|
||||||
super().startSplashWindowPhase()
|
super().startSplashWindowPhase()
|
||||||
|
|
||||||
if not self.getIsHeadLess():
|
if not self.getIsHeadLess():
|
||||||
|
@ -505,33 +535,7 @@ class CuraApplication(QtApplication):
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
Logger.log("w", "Unable to find the window icon.")
|
Logger.log("w", "Unable to find the window icon.")
|
||||||
|
|
||||||
self.setRequiredPlugins([
|
|
||||||
# Misc.:
|
|
||||||
"ConsoleLogger", #You want to be able to read the log if something goes wrong.
|
|
||||||
"CuraEngineBackend", #Cura is useless without this one since you can't slice.
|
|
||||||
"FileLogger", #You want to be able to read the log if something goes wrong.
|
|
||||||
"XmlMaterialProfile", #Cura crashes without this one.
|
|
||||||
"Marketplace", #This contains the interface to enable/disable plug-ins, so if you disable it you can't enable it back.
|
|
||||||
"PrepareStage", #Cura is useless without this one since you can't load models.
|
|
||||||
"PreviewStage", #This shows the list of the plugin views that are installed in Cura.
|
|
||||||
"MonitorStage", #Major part of Cura's functionality.
|
|
||||||
"LocalFileOutputDevice", #Major part of Cura's functionality.
|
|
||||||
"LocalContainerProvider", #Cura is useless without any profiles or setting definitions.
|
|
||||||
|
|
||||||
# Views:
|
|
||||||
"SimpleView", #Dependency of SolidView.
|
|
||||||
"SolidView", #Displays models. Cura is useless without it.
|
|
||||||
|
|
||||||
# Readers & Writers:
|
|
||||||
"GCodeWriter", #Cura is useless if it can't write its output.
|
|
||||||
"STLReader", #Most common model format, so disabling this makes Cura 90% useless.
|
|
||||||
"3MFWriter", #Required for writing project files.
|
|
||||||
|
|
||||||
# Tools:
|
|
||||||
"CameraTool", #Needed to see the scene. Cura is useless without it.
|
|
||||||
"SelectionTool", #Dependency of the rest of the tools.
|
|
||||||
"TranslateTool", #You'll need this for almost every print.
|
|
||||||
])
|
|
||||||
self._i18n_catalog = i18nCatalog("cura")
|
self._i18n_catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
self._update_platform_activity_timer = QTimer()
|
self._update_platform_activity_timer = QTimer()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# Copyright (c) 2018 Jaime van Kessel, Ultimaker B.V.
|
# Copyright (c) 2018 Jaime van Kessel, Ultimaker B.V.
|
||||||
# The PostProcessingPlugin is released under the terms of the AGPLv3 or higher.
|
# The PostProcessingPlugin is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
import configparser # The script lists are stored in metadata as serialised config files.
|
import configparser # The script lists are stored in metadata as serialised config files.
|
||||||
import importlib.util
|
import importlib.util
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2022 Jaime van Kessel, Ultimaker B.V.
|
// Copyright (c) 2022 Jaime van Kessel, Ultimaker B.V.
|
||||||
// The PostProcessingPlugin is released under the terms of the AGPLv3 or higher.
|
// The PostProcessingPlugin is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
import QtQuick 2.2
|
import QtQuick 2.2
|
||||||
import QtQuick.Controls 2.15
|
import QtQuick.Controls 2.15
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Copyright (c) 2015 Jaime van Kessel
|
# Copyright (c) 2015 Jaime van Kessel
|
||||||
# Copyright (c) 2018 Ultimaker B.V.
|
# Copyright (c) 2018 Ultimaker B.V.
|
||||||
# The PostProcessingPlugin is released under the terms of the AGPLv3 or higher.
|
# The PostProcessingPlugin is released under the terms of the LGPLv3 or higher.
|
||||||
from typing import Optional, Any, Dict, TYPE_CHECKING, List
|
from typing import Optional, Any, Dict, TYPE_CHECKING, List
|
||||||
|
|
||||||
from UM.Signal import Signal, signalemitter
|
from UM.Signal import Signal, signalemitter
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# ChangeAtZ script - Change printing parameters at a given height
|
# ChangeAtZ script - Change printing parameters at a given height
|
||||||
# This script is the successor of the TweakAtZ plugin for legacy Cura.
|
# This script is the successor of the TweakAtZ plugin for legacy Cura.
|
||||||
# It contains code from the TweakAtZ plugin V1.0-V4.x and from the ExampleScript by Jaime van Kessel, Ultimaker B.V.
|
# It contains code from the TweakAtZ plugin V1.0-V4.x and from the ExampleScript by Jaime van Kessel, Ultimaker B.V.
|
||||||
# It runs with the PostProcessingPlugin which is released under the terms of the AGPLv3 or higher.
|
# It runs with the PostProcessingPlugin which is released under the terms of the LGPLv3 or higher.
|
||||||
# This script is licensed under the Creative Commons - Attribution - Share Alike (CC BY-SA) terms
|
# This script is licensed under the Creative Commons - Attribution - Share Alike (CC BY-SA) terms
|
||||||
|
|
||||||
# Authors of the ChangeAtZ plugin / script:
|
# Authors of the ChangeAtZ plugin / script:
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# ColorMix script - 2-1 extruder color mix and blending
|
# ColorMix script - 2-1 extruder color mix and blending
|
||||||
# This script is specific for the Geeetech A10M dual extruder but should work with other Marlin printers.
|
# This script is specific for the Geeetech A10M dual extruder but should work with other Marlin printers.
|
||||||
# It runs with the PostProcessingPlugin which is released under the terms of the AGPLv3 or higher.
|
# It runs with the PostProcessingPlugin which is released under the terms of the LGPLv3 or higher.
|
||||||
# This script is licensed under the Creative Commons - Attribution - Share Alike (CC BY-SA) terms
|
# This script is licensed under the Creative Commons - Attribution - Share Alike (CC BY-SA) terms
|
||||||
|
|
||||||
#Authors of the 2-1 ColorMix plug-in / script:
|
#Authors of the 2-1 ColorMix plug-in / script:
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# Copyright (c) 2023 Ultimaker B.V.
|
# Copyright (c) 2023 Ultimaker B.V.
|
||||||
# The PostProcessingPlugin is released under the terms of the AGPLv3 or higher.
|
# The PostProcessingPlugin is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
# Modification 06.09.2020
|
# Modification 06.09.2020
|
||||||
# add checkbox, now you can choose and use configuration from the firmware itself.
|
# add checkbox, now you can choose and use configuration from the firmware itself.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# Copyright (c) 2023 UltiMaker B.V.
|
# Copyright (c) 2023 UltiMaker B.V.
|
||||||
# The PostProcessingPlugin is released under the terms of the AGPLv3 or higher.
|
# The PostProcessingPlugin is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
from ..Script import Script
|
from ..Script import Script
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# Copyright (c) 2017 Ghostkeeper
|
# Copyright (c) 2017 Ghostkeeper
|
||||||
# The PostProcessingPlugin is released under the terms of the AGPLv3 or higher.
|
# The PostProcessingPlugin is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
import re #To perform the search and replace.
|
import re #To perform the search and replace.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# This PostProcessingPlugin script is released under the terms of the AGPLv3 or higher.
|
# This PostProcessingPlugin script is released under the terms of the LGPLv3 or higher.
|
||||||
"""
|
"""
|
||||||
Copyright (c) 2017 Christophe Baribaud 2017
|
Copyright (c) 2017 Christophe Baribaud 2017
|
||||||
Python implementation of https://github.com/electrocbd/post_stretch
|
Python implementation of https://github.com/electrocbd/post_stretch
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
"machine_width": { "default_value": 280 },
|
"machine_width": { "default_value": 280 },
|
||||||
"material_diameter": { "default_value": 1.75 },
|
"material_diameter": { "default_value": 1.75 },
|
||||||
"material_initial_print_temperature": { "value": "material_print_temperature" },
|
"material_initial_print_temperature": { "value": "material_print_temperature" },
|
||||||
"prime_tower_min_volume": { "value": "((reveOrValue('layer_height'))/2" },
|
"prime_tower_min_volume": { "value": "((resolveOrValue('layer_height'))/2" },
|
||||||
"prime_tower_position_x": { "value": "240" },
|
"prime_tower_position_x": { "value": "240" },
|
||||||
"prime_tower_position_y": { "value": "190" },
|
"prime_tower_position_y": { "value": "190" },
|
||||||
"prime_tower_size": { "value": "30" },
|
"prime_tower_size": { "value": "30" },
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
"material_print_temperature_layer_0": { "value": "210 if material_print_temperature < 210 else material_print_temperature" },
|
"material_print_temperature_layer_0": { "value": "210 if material_print_temperature < 210 else material_print_temperature" },
|
||||||
"min_infill_area": { "value": "5" },
|
"min_infill_area": { "value": "5" },
|
||||||
"minimum_interface_area": { "default_value": 10 },
|
"minimum_interface_area": { "default_value": 10 },
|
||||||
"minimum_support_area": { "default_value": 3 },
|
"minimum_support_area": { "value": "3 if support_structure == 'normal' else 0" },
|
||||||
"optimize_wall_printing_order": { "default_value": true },
|
"optimize_wall_printing_order": { "default_value": true },
|
||||||
"prime_tower_brim_enable": { "default_value": true },
|
"prime_tower_brim_enable": { "default_value": true },
|
||||||
"prime_tower_min_volume": { "value": "(layer_height) * (prime_tower_size / 2)**2 * 3 * 0.5 " },
|
"prime_tower_min_volume": { "value": "(layer_height) * (prime_tower_size / 2)**2 * 3 * 0.5 " },
|
||||||
|
|
|
@ -1665,16 +1665,14 @@
|
||||||
{
|
{
|
||||||
"label": "Small Top/Bottom Width",
|
"label": "Small Top/Bottom Width",
|
||||||
"description": "Small top/bottom regions are filled with walls instead of the default top/bottom pattern. This helps to avoids jerky motions.",
|
"description": "Small top/bottom regions are filled with walls instead of the default top/bottom pattern. This helps to avoids jerky motions.",
|
||||||
"value": "0",
|
"value": "skin_line_width * 2",
|
||||||
"default_value": 0,
|
"default_value": 1,
|
||||||
"minimum_value": "0",
|
"minimum_value": "0",
|
||||||
"maximum_value_warning": "skin_line_width * 10",
|
|
||||||
"type": "float",
|
"type": "float",
|
||||||
"enabled": false,
|
"enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'",
|
||||||
"limit_to_extruder": "top_bottom_extruder_nr",
|
"limit_to_extruder": "top_bottom_extruder_nr",
|
||||||
"settable_per_mesh": true,
|
"settable_per_mesh": true,
|
||||||
"unit": "mm",
|
"unit": "mm"
|
||||||
"comment": "Disabled for 5.4.x, as we're worried about micro-segments in the infill. Also disabled in the engine, so forcing this > 0 will not do anything at the moment."
|
|
||||||
},
|
},
|
||||||
"skin_no_small_gaps_heuristic":
|
"skin_no_small_gaps_heuristic":
|
||||||
{
|
{
|
||||||
|
@ -6805,6 +6803,48 @@
|
||||||
"minimum_value_warning": "500",
|
"minimum_value_warning": "500",
|
||||||
"maximum_value_warning": "100000",
|
"maximum_value_warning": "100000",
|
||||||
"settable_per_mesh": true
|
"settable_per_mesh": true
|
||||||
|
},
|
||||||
|
"meshfix_fluid_motion_enabled":
|
||||||
|
{
|
||||||
|
"label": "Enable Fluid Motion",
|
||||||
|
"description": "When enabled tool paths are corrected for printers with smooth motion planners. Small movements that deviate from the general tool path direction are smoothed to improve fluid motions.",
|
||||||
|
"type": "bool",
|
||||||
|
"default_value": true
|
||||||
|
},
|
||||||
|
"meshfix_fluid_motion_shift_distance":
|
||||||
|
{
|
||||||
|
"label": "Fluid Motion Shift Distance",
|
||||||
|
"description": "Distance points are shifted to smooth the path",
|
||||||
|
"enabled": "meshfix_fluid_motion_enabled",
|
||||||
|
"type": "float",
|
||||||
|
"unit": "mm",
|
||||||
|
"default_value": 0.1,
|
||||||
|
"minimum_value": "0.01",
|
||||||
|
"maximum_value": "1"
|
||||||
|
},
|
||||||
|
"meshfix_fluid_motion_small_distance":
|
||||||
|
{
|
||||||
|
"label": "Fluid Motion Small Distance",
|
||||||
|
"description": "Distance points are shifted to smooth the path",
|
||||||
|
"enabled": "meshfix_fluid_motion_enabled",
|
||||||
|
"unit": "mm",
|
||||||
|
"type": "float",
|
||||||
|
"default_value": 0.01,
|
||||||
|
"minimum_value": "0.01",
|
||||||
|
"maximum_value": "0.1"
|
||||||
|
},
|
||||||
|
"meshfix_fluid_motion_angle":
|
||||||
|
{
|
||||||
|
"label": "Fluid Motion Angle",
|
||||||
|
"description": "If a toolpath-segment deviates more than this angle from the general motion it is smoothed.",
|
||||||
|
"enabled": "meshfix_fluid_motion_enabled",
|
||||||
|
"type": "float",
|
||||||
|
"unit": "\u00b0",
|
||||||
|
"default_value": 15,
|
||||||
|
"maximum_value": "90",
|
||||||
|
"minimum_value": "0",
|
||||||
|
"minimum_value_warning": "1",
|
||||||
|
"maximum_value_warning": "35"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -365,6 +365,10 @@ multiple_mesh_overlap
|
||||||
carve_multiple_volumes
|
carve_multiple_volumes
|
||||||
alternate_carve_order
|
alternate_carve_order
|
||||||
remove_empty_first_layers
|
remove_empty_first_layers
|
||||||
|
meshfix_fluid_motion_enabled
|
||||||
|
meshfix_fluid_motion_shift_distance
|
||||||
|
meshfix_fluid_motion_small_distance
|
||||||
|
meshfix_fluid_motion_angle
|
||||||
|
|
||||||
[blackmagic]
|
[blackmagic]
|
||||||
print_sequence
|
print_sequence
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue