diff --git a/.github/workflows/conan-recipe-version.yml b/.github/workflows/conan-recipe-version.yml index 3d5da55d6a..75408b0d16 100644 --- a/.github/workflows/conan-recipe-version.yml +++ b/.github/workflows/conan-recipe-version.yml @@ -170,9 +170,21 @@ jobs: bump_up_release_tag = int(latest_branch_version.prerelease.split('.')[1]) + 1 actual_version = f"{latest_branch_version.major}.{latest_branch_version.minor}.{latest_branch_version.patch}-{latest_branch_version.prerelease.split('.')[0]}.{bump_up_release_tag}+{buildmetadata}{channel_metadata}" else: - bump_up_minor = int(latest_branch_version.minor) + 1 - reset_patch = 0 - actual_version = f"{latest_branch_version.major}.{bump_up_minor}.{reset_patch}-alpha+{buildmetadata}{channel_metadata}" + max_branches_version = tools.Version("0.0.0") + branches_no_commits = no_commits + for branch in repo.references: + try: + if "remotes/origin" in branch.abspath: + b_version = tools.Version(branch.name.split("/")[-1]) + if b_version < tools.Version("10.0.0") and b_version > max_branches_version: + max_branches_version = b_version + branches_no_commits = repo.commit().count() - branch.commit.count() + except: + pass + if max_branches_version > latest_branch_version: + actual_version = f"{max_branches_version.major}.{int(max_branches_version.minor) + 1}.0-alpha+{buildmetadata}{channel}_{branches_no_commits}" + else: + actual_version = f"{latest_branch_version.major}.{int(latest_branch_version.minor) + 1}.0-alpha+{buildmetadata}{channel_metadata}" # %% Set the environment output output_env = os.environ["GITHUB_OUTPUT"] diff --git a/conandata.yml b/conandata.yml index b615341776..8b7d9b7b5d 100644 --- a/conandata.yml +++ b/conandata.yml @@ -10,443 +10,333 @@ # requirements (use the /(latest)@ultimaker/testing) # # Subject to change in the future! -"5.3.0-beta": - requirements: - - "pyarcus/5.2.2" - - "curaengine/(latest)@ultimaker/stable" - - "pysavitar/5.2.2" - - "pynest2d/5.2.2" - - "uranium/(latest)@ultimaker/stable" - - "fdm_materials/(latest)@ultimaker/stable" - - "cura_binary_data/(latest)@ultimaker/stable" - - "cpython/3.10.4" - internal_requirements: - - "fdm_materials_private/(latest)@ultimaker/testing" - - "cura_private_data/(latest)@ultimaker/testing" - runinfo: - entrypoint: "cura_app.py" - pyinstaller: - datas: - cura_plugins: - package: "cura" - src: "plugins" - dst: "share/cura/plugins" - cura_resources: - package: "cura" - src: "resources" - dst: "share/cura/resources" - cura_private_data: - package: "cura_private_data" - src: "resources" - dst: "share/cura/resources" - internal: true - cura_private_data_plugins: - package: "cura_private_data" - src: "plugins" - dst: "share/cura/plugins" - internal: true - uranium_plugins: - package: "uranium" - src: "plugins" - dst: "share/uranium/plugins" - uranium_resources: - package: "uranium" - src: "resources" - dst: "share/uranium/resources" - uranium_um_qt_qml_um: - package: "uranium" - src: "site-packages/UM/Qt/qml/UM" - dst: "PyQt6/Qt6/qml/UM" - cura_binary_data: - package: "cura_binary_data" - src: "resources/cura/resources" - dst: "share/cura/resources" - uranium_binary_data: - package: "cura_binary_data" - src: "resources/uranium/resources" - dst: "share/uranium/resources" - windows_binary_data: - package: "cura_binary_data" - src: "windows" - dst: "share/windows" - fdm_materials: - package: "fdm_materials" - src: "materials" - dst: "share/cura/resources/materials" - fdm_materials_private: - package: "fdm_materials_private" - src: "resources/materials" - dst: "share/cura/resources/materials" - internal: true - tcl: - package: "tcl" - src: "lib/tcl8.6" - dst: "tcl" - tk: - package: "tk" - src: "lib/tk8.6" - dst: "tk" - binaries: - curaengine: - package: "curaengine" - src: "bin" - dst: "." - binary: "CuraEngine" - hiddenimports: - - "pySavitar" - - "pyArcus" - - "pynest2d" - - "PyQt6" - - "PyQt6.QtNetwork" - - "PyQt6.sip" - - "logging.handlers" - - "zeroconf" - - "fcntl" - - "stl" - - "serial" - collect_all: - - "cura" - - "UM" - - "serial" - - "Charon" - - "sqlite3" - - "trimesh" - - "win32ctypes" - - "PyQt6" - - "PyQt6.QtNetwork" - - "PyQt6.sip" - - "stl" - icon: - Windows: "./icons/Cura.ico" - Macos: "./icons/cura.icns" - Linux: "./icons/cura-128.png" +"5.4.0-alpha": + requirements: + - "pyarcus/5.2.2" + - "curaengine/(latest)@ultimaker/testing" + - "pysavitar/5.2.2" + - "pynest2d/5.2.2" + - "uranium/(latest)@ultimaker/testing" + - "fdm_materials/(latest)@ultimaker/testing" + - "cura_binary_data/(latest)@ultimaker/testing" + - "cpython/3.10.4" + internal_requirements: + - "fdm_materials_private/(latest)@ultimaker/testing" + - "cura_private_data/(latest)@ultimaker/testing" + runinfo: + entrypoint: "cura_app.py" + pyinstaller: + datas: + cura_plugins: + package: "cura" + src: "plugins" + dst: "share/cura/plugins" + cura_resources: + package: "cura" + src: "resources" + dst: "share/cura/resources" + cura_private_data: + package: "cura_private_data" + src: "resources" + dst: "share/cura/resources" + internal: true + cura_private_data_plugins: + package: "cura_private_data" + src: "plugins" + dst: "share/cura/plugins" + internal: true + uranium_plugins: + package: "uranium" + src: "plugins" + dst: "share/uranium/plugins" + uranium_resources: + package: "uranium" + src: "resources" + dst: "share/uranium/resources" + uranium_um_qt_qml_um: + package: "uranium" + src: "site-packages/UM/Qt/qml/UM" + dst: "PyQt6/Qt6/qml/UM" + cura_binary_data: + package: "cura_binary_data" + src: "resources/cura/resources" + dst: "share/cura/resources" + uranium_binary_data: + package: "cura_binary_data" + src: "resources/uranium/resources" + dst: "share/uranium/resources" + windows_binary_data: + package: "cura_binary_data" + src: "windows" + dst: "share/windows" + fdm_materials: + package: "fdm_materials" + src: "materials" + dst: "share/cura/resources/materials" + fdm_materials_private: + package: "fdm_materials_private" + src: "resources/materials" + dst: "share/cura/resources/materials" + internal: true + tcl: + package: "tcl" + src: "lib/tcl8.6" + dst: "tcl" + tk: + package: "tk" + src: "lib/tk8.6" + dst: "tk" + binaries: + curaengine: + package: "curaengine" + src: "bin" + dst: "." + binary: "CuraEngine" + hiddenimports: + - "pySavitar" + - "pyArcus" + - "pynest2d" + - "PyQt6" + - "PyQt6.QtNetwork" + - "PyQt6.sip" + - "logging.handlers" + - "zeroconf" + - "fcntl" + - "stl" + - "serial" + collect_all: + - "cura" + - "UM" + - "serial" + - "Charon" + - "sqlite3" + - "trimesh" + - "win32ctypes" + - "PyQt6" + - "PyQt6.QtNetwork" + - "PyQt6.sip" + - "stl" + icon: + Windows: "./icons/Cura.ico" + Macos: "./icons/cura.icns" + Linux: "./icons/cura-128.png" "5.3.0": - requirements: - - "pyarcus/5.2.2" - - "curaengine/5.3.0" - - "pysavitar/5.2.2" - - "pynest2d/5.2.2" - - "uranium/5.3.0" - - "fdm_materials/5.3.0" - - "cura_binary_data/5.3.0" - - "cpython/3.10.4" - internal_requirements: - - "fdm_materials_private/(latest)@ultimaker/testing" - - "cura_private_data/(latest)@ultimaker/testing" - runinfo: - entrypoint: "cura_app.py" - pyinstaller: - datas: - cura_plugins: - package: "cura" - src: "plugins" - dst: "share/cura/plugins" - cura_resources: - package: "cura" - src: "resources" - dst: "share/cura/resources" - cura_private_data: - package: "cura_private_data" - src: "resources" - dst: "share/cura/resources" - internal: true - cura_private_data_plugins: - package: "cura_private_data" - src: "plugins" - dst: "share/cura/plugins" - internal: true - uranium_plugins: - package: "uranium" - src: "plugins" - dst: "share/uranium/plugins" - uranium_resources: - package: "uranium" - src: "resources" - dst: "share/uranium/resources" - uranium_um_qt_qml_um: - package: "uranium" - src: "site-packages/UM/Qt/qml/UM" - dst: "PyQt6/Qt6/qml/UM" - cura_binary_data: - package: "cura_binary_data" - src: "resources/cura/resources" - dst: "share/cura/resources" - uranium_binary_data: - package: "cura_binary_data" - src: "resources/uranium/resources" - dst: "share/uranium/resources" - windows_binary_data: - package: "cura_binary_data" - src: "windows" - dst: "share/windows" - fdm_materials: - package: "fdm_materials" - src: "materials" - dst: "share/cura/resources/materials" - fdm_materials_private: - package: "fdm_materials_private" - src: "resources/materials" - dst: "share/cura/resources/materials" - internal: true - tcl: - package: "tcl" - src: "lib/tcl8.6" - dst: "tcl" - tk: - package: "tk" - src: "lib/tk8.6" - dst: "tk" - binaries: - curaengine: - package: "curaengine" - src: "bin" - dst: "." - binary: "CuraEngine" - hiddenimports: - - "pySavitar" - - "pyArcus" - - "pynest2d" - - "PyQt6" - - "PyQt6.QtNetwork" - - "PyQt6.sip" - - "logging.handlers" - - "zeroconf" - - "fcntl" - - "stl" - - "serial" - collect_all: - - "cura" - - "UM" - - "serial" - - "Charon" - - "sqlite3" - - "trimesh" - - "win32ctypes" - - "PyQt6" - - "PyQt6.QtNetwork" - - "PyQt6.sip" - - "stl" - icon: - Windows: "./icons/Cura.ico" - Macos: "./icons/cura.icns" - Linux: "./icons/cura-128.png" -"5.3.0-alpha": - requirements: - - "pyarcus/5.2.2" - - "curaengine/(latest)@ultimaker/testing" - - "pysavitar/5.2.2" - - "pynest2d/5.2.2" - - "uranium/(latest)@ultimaker/testing" - - "fdm_materials/(latest)@ultimaker/testing" - - "cura_binary_data/(latest)@ultimaker/testing" - - "cpython/3.10.4" - internal_requirements: - - "fdm_materials_private/(latest)@ultimaker/testing" - - "cura_private_data/(latest)@ultimaker/testing" - runinfo: - entrypoint: "cura_app.py" - pyinstaller: - datas: - cura_plugins: - package: "cura" - src: "plugins" - dst: "share/cura/plugins" - cura_resources: - package: "cura" - src: "resources" - dst: "share/cura/resources" - cura_private_data: - package: "cura_private_data" - src: "resources" - dst: "share/cura/resources" - internal: true - cura_private_data_plugins: - package: "cura_private_data" - src: "plugins" - dst: "share/cura/plugins" - internal: true - uranium_plugins: - package: "uranium" - src: "plugins" - dst: "share/uranium/plugins" - uranium_resources: - package: "uranium" - src: "resources" - dst: "share/uranium/resources" - uranium_um_qt_qml_um: - package: "uranium" - src: "site-packages/UM/Qt/qml/UM" - dst: "PyQt6/Qt6/qml/UM" - cura_binary_data: - package: "cura_binary_data" - src: "resources/cura/resources" - dst: "share/cura/resources" - uranium_binary_data: - package: "cura_binary_data" - src: "resources/uranium/resources" - dst: "share/uranium/resources" - windows_binary_data: - package: "cura_binary_data" - src: "windows" - dst: "share/windows" - fdm_materials: - package: "fdm_materials" - src: "materials" - dst: "share/cura/resources/materials" - fdm_materials_private: - package: "fdm_materials_private" - src: "resources/materials" - dst: "share/cura/resources/materials" - internal: true - tcl: - package: "tcl" - src: "lib/tcl8.6" - dst: "tcl" - tk: - package: "tk" - src: "lib/tk8.6" - dst: "tk" - binaries: - curaengine: - package: "curaengine" - src: "bin" - dst: "." - binary: "CuraEngine" - hiddenimports: - - "pySavitar" - - "pyArcus" - - "pynest2d" - - "PyQt6" - - "PyQt6.QtNetwork" - - "PyQt6.sip" - - "logging.handlers" - - "zeroconf" - - "fcntl" - - "stl" - - "serial" - collect_all: - - "cura" - - "UM" - - "serial" - - "Charon" - - "sqlite3" - - "trimesh" - - "win32ctypes" - - "PyQt6" - - "PyQt6.QtNetwork" - - "PyQt6.sip" - - "stl" - icon: - Windows: "./icons/Cura.ico" - Macos: "./icons/cura.icns" - Linux: "./icons/cura-128.png" + requirements: + - "pyarcus/5.2.2" + - "curaengine/5.3.0" + - "pysavitar/5.2.2" + - "pynest2d/5.2.2" + - "uranium/5.3.0" + - "fdm_materials/5.3.0" + - "cura_binary_data/5.3.0" + - "cpython/3.10.4" + internal_requirements: + - "fdm_materials_private/(latest)@ultimaker/testing" + - "cura_private_data/(latest)@ultimaker/testing" + runinfo: + entrypoint: "cura_app.py" + pyinstaller: + datas: + cura_plugins: + package: "cura" + src: "plugins" + dst: "share/cura/plugins" + cura_resources: + package: "cura" + src: "resources" + dst: "share/cura/resources" + cura_private_data: + package: "cura_private_data" + src: "resources" + dst: "share/cura/resources" + internal: true + cura_private_data_plugins: + package: "cura_private_data" + src: "plugins" + dst: "share/cura/plugins" + internal: true + uranium_plugins: + package: "uranium" + src: "plugins" + dst: "share/uranium/plugins" + uranium_resources: + package: "uranium" + src: "resources" + dst: "share/uranium/resources" + uranium_um_qt_qml_um: + package: "uranium" + src: "site-packages/UM/Qt/qml/UM" + dst: "PyQt6/Qt6/qml/UM" + cura_binary_data: + package: "cura_binary_data" + src: "resources/cura/resources" + dst: "share/cura/resources" + uranium_binary_data: + package: "cura_binary_data" + src: "resources/uranium/resources" + dst: "share/uranium/resources" + windows_binary_data: + package: "cura_binary_data" + src: "windows" + dst: "share/windows" + fdm_materials: + package: "fdm_materials" + src: "materials" + dst: "share/cura/resources/materials" + fdm_materials_private: + package: "fdm_materials_private" + src: "resources/materials" + dst: "share/cura/resources/materials" + internal: true + tcl: + package: "tcl" + src: "lib/tcl8.6" + dst: "tcl" + tk: + package: "tk" + src: "lib/tk8.6" + dst: "tk" + binaries: + curaengine: + package: "curaengine" + src: "bin" + dst: "." + binary: "CuraEngine" + hiddenimports: + - "pySavitar" + - "pyArcus" + - "pynest2d" + - "PyQt6" + - "PyQt6.QtNetwork" + - "PyQt6.sip" + - "logging.handlers" + - "zeroconf" + - "fcntl" + - "stl" + - "serial" + collect_all: + - "cura" + - "UM" + - "serial" + - "Charon" + - "sqlite3" + - "trimesh" + - "win32ctypes" + - "PyQt6" + - "PyQt6.QtNetwork" + - "PyQt6.sip" + - "stl" + icon: + Windows: "./icons/Cura.ico" + Macos: "./icons/cura.icns" + Linux: "./icons/cura-128.png" pycharm_targets: - - jinja_path: .run_templates/pycharm_cura_run.run.xml.jinja - module_name: Cura - name: cura - script_name: cura_app.py - - jinja_path: .run_templates/pycharm_cura_run.run.xml.jinja - module_name: Cura - name: cura_external_engine - parameters: --external-backend - script_name: cura_app.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in tests - script_name: tests/ - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestBuildVolume.py - script_name: tests/TestBuildVolume.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestConvexHullDecorator.py - script_name: tests/TestConvexHullDecorator.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestCuraSceneNode.py - script_name: tests/TestCuraSceneNode.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestCuraSceneNode.py - script_name: tests/TestExtruderManager.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestGCodeListDecorator.py - script_name: tests/TestGCodeListDecorator.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestIntentManager.py - script_name: tests/TestIntentManager.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestLayer.py - script_name: tests/TestLayer.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestMachineAction.py - script_name: tests/TestMachineAction.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestMachineManager.py - script_name: tests/TestMachineManager.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestOAuth2.py - script_name: tests/TestOAuth2.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestObjectsModel.py - script_name: tests/TestObjectsModel.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestPrintInformation.py - script_name: tests/TestPrintInformation.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestProfileRequirements.py - script_name: tests/TestProfileRequirements.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestThemes.py - script_name: tests/TestThemes.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestContainerManager.py - script_name: tests/Settings/TestContainerManager.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestCuraContainerRegistry.py - script_name: tests/Settings/TestCuraContainerRegistry.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestCuraStackBuilder.py - script_name: tests/Settings/TestCuraStackBuilder.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestDefinitionContainer.py - script_name: tests/Settings/TestDefinitionContainer.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestExtruderStack.py - script_name: tests/Settings/TestExtruderStack.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestGlobalStack.py - script_name: tests/Settings/TestGlobalStack.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestProfiles.py - script_name: tests/Settings/TestProfiles.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestSettingInheritanceManager.py - script_name: tests/Settings/TestSettingInheritanceManager.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestSettingOverrideDecorator.py - script_name: tests/Settings/TestSettingOverrideDecorator.py - - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja - module_name: Cura - name: pytest in TestSettingVisibilityPresets.py - script_name: tests/Settings/TestSettingVisibilityPresets.py + - jinja_path: .run_templates/pycharm_cura_run.run.xml.jinja + module_name: Cura + name: cura + script_name: cura_app.py + - jinja_path: .run_templates/pycharm_cura_run.run.xml.jinja + module_name: Cura + name: cura_external_engine + parameters: --external-backend + script_name: cura_app.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in tests + script_name: tests/ + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestBuildVolume.py + script_name: tests/TestBuildVolume.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestConvexHullDecorator.py + script_name: tests/TestConvexHullDecorator.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestCuraSceneNode.py + script_name: tests/TestCuraSceneNode.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestCuraSceneNode.py + script_name: tests/TestExtruderManager.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestGCodeListDecorator.py + script_name: tests/TestGCodeListDecorator.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestIntentManager.py + script_name: tests/TestIntentManager.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestLayer.py + script_name: tests/TestLayer.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestMachineAction.py + script_name: tests/TestMachineAction.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestMachineManager.py + script_name: tests/TestMachineManager.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestOAuth2.py + script_name: tests/TestOAuth2.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestObjectsModel.py + script_name: tests/TestObjectsModel.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestPrintInformation.py + script_name: tests/TestPrintInformation.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestProfileRequirements.py + script_name: tests/TestProfileRequirements.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestThemes.py + script_name: tests/TestThemes.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestContainerManager.py + script_name: tests/Settings/TestContainerManager.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestCuraContainerRegistry.py + script_name: tests/Settings/TestCuraContainerRegistry.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestCuraStackBuilder.py + script_name: tests/Settings/TestCuraStackBuilder.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestDefinitionContainer.py + script_name: tests/Settings/TestDefinitionContainer.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestExtruderStack.py + script_name: tests/Settings/TestExtruderStack.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestGlobalStack.py + script_name: tests/Settings/TestGlobalStack.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestProfiles.py + script_name: tests/Settings/TestProfiles.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestSettingInheritanceManager.py + script_name: tests/Settings/TestSettingInheritanceManager.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestSettingOverrideDecorator.py + script_name: tests/Settings/TestSettingOverrideDecorator.py + - jinja_path: .run_templates/pycharm_cura_test.run.xml.jinja + module_name: Cura + name: pytest in TestSettingVisibilityPresets.py + script_name: tests/Settings/TestSettingVisibilityPresets.py diff --git a/conanfile.py b/conanfile.py index eec875efe6..19bbcbba2c 100644 --- a/conanfile.py +++ b/conanfile.py @@ -27,7 +27,7 @@ class CuraConan(ConanFile): # FIXME: Remove specific branch once merged to main # Extending the conanfile with the UMBaseConanfile https://github.com/Ultimaker/conan-ultimaker-index/tree/CURA-9177_Fix_CI_CD/recipes/umbase - python_requires = "umbase/[>=0.1.7]@ultimaker/stable" + python_requires = "umbase/[>=0.1.7]@ultimaker/stable", "translationextractor/[>=1.0.0]@ultimaker/stable" python_requires_extend = "umbase.UMBaseConanfile" options = { @@ -179,7 +179,7 @@ class CuraConan(ConanFile): cura_latest_url = self._cura_latest_url)) def _generate_pyinstaller_spec(self, location, entrypoint_location, icon_path, entitlements_file): - pyinstaller_metadata = self.conan_data[self.version]["pyinstaller"] + pyinstaller_metadata = self._um_data()["pyinstaller"] datas = [(str(self._base_dir.joinpath("conan_install_info.json")), ".")] for data in pyinstaller_metadata["datas"].values(): if not self.options.internal and data.get("internal", False): @@ -275,10 +275,10 @@ class CuraConan(ConanFile): raise ConanInvalidConfiguration("Only versions 5+ are support") def requirements(self): - for req in self.conan_data[self.version]["requirements"]: + for req in self._um_data()["requirements"]: self.requires(req) if self.options.internal: - for req in self.conan_data[self.version]["internal_requirements"]: + for req in self._um_data()["internal_requirements"]: self.requires(req) def build_requirements(self): @@ -319,19 +319,16 @@ class CuraConan(ConanFile): if self.options.devtools: entitlements_file = "'{}'".format(Path(self.source_folder, "packaging", "MacOS", "cura.entitlements")) self._generate_pyinstaller_spec(location = self.generators_folder, - entrypoint_location = "'{}'".format(Path(self.source_folder, self.conan_data[self.version]["runinfo"]["entrypoint"])).replace("\\", "\\\\"), - icon_path = "'{}'".format(Path(self.source_folder, "packaging", self.conan_data[self.version]["pyinstaller"]["icon"][str(self.settings.os)])).replace("\\", "\\\\"), + entrypoint_location = "'{}'".format(Path(self.source_folder, self._um_data()["runinfo"]["entrypoint"])).replace("\\", "\\\\"), + icon_path = "'{}'".format(Path(self.source_folder, "packaging", self._um_data()["pyinstaller"]["icon"][str(self.settings.os)])).replace("\\", "\\\\"), entitlements_file = entitlements_file if self.settings.os == "Macos" else "None") # Update the po files if self.settings.os != "Windows" or self.conf.get("tools.microsoft.bash:path", check_type = str): # FIXME: once m4, autoconf, automake are Conan V2 ready use self.win_bash and add gettext as base tool_requirement - cpp_info = self.dependencies["gettext"].cpp_info - for po_file in self.source_path.joinpath("resources", "i18n").glob("**/*.po"): - pot_file = self.source_path.joinpath("resources", "i18n", po_file.with_suffix('.pot').name) - mkdir(self, str(unix_path(self, pot_file.parent))) - self.run(f"{cpp_info.bindirs[0]}/msgmerge --no-wrap --no-fuzzy-matching -width=140 -o {po_file} {po_file} {pot_file}", - env = "conanbuild", ignore_errors = True) + # Extract all the new strings and update the existing po files + extractTool = self.python_requires["translationextractor"].module.ExtractTranslations(self, self.source_path.joinpath("resources", "i18n"), "cura.pot") + extractTool.generate() def imports(self): self.copy("CuraEngine.exe", root_package = "curaengine", src = "@bindirs", dst = "", keep_path = False) @@ -447,8 +444,8 @@ echo "CURA_APP_NAME={{ cura_app_name }}" >> ${{ env_prefix }}GITHUB_ENV entitlements_file = "'{}'".format(Path(self.cpp_info.res_paths[2], "MacOS", "cura.entitlements")) self._generate_pyinstaller_spec(location = self._base_dir, - entrypoint_location = "'{}'".format(Path(self.cpp_info.bin_paths[0], self.conan_data[self.version]["runinfo"]["entrypoint"])).replace("\\", "\\\\"), - icon_path = "'{}'".format(Path(self.cpp_info.res_paths[2], self.conan_data[self.version]["pyinstaller"]["icon"][str(self.settings.os)])).replace("\\", "\\\\"), + entrypoint_location = "'{}'".format(Path(self.cpp_info.bin_paths[0], self._um_data()["runinfo"]["entrypoint"])).replace("\\", "\\\\"), + icon_path = "'{}'".format(Path(self.cpp_info.res_paths[2], self._um_data()["pyinstaller"]["icon"][str(self.settings.os)])).replace("\\", "\\\\"), entitlements_file = entitlements_file if self.settings.os == "Macos" else "None") def package(self): diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 881f0dc04c..536ce27e06 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -6870,7 +6870,7 @@ "enabled": "extruders_enabled_count > 1 and resolveOrValue('interlocking_enable')", "default_value": 0.8, "value": "2 * wall_line_width_0", - "minimum_value": "0.001", + "minimum_value": "min_odd_wall_line_width", "maximum_value": "min(0.5 * machine_width, 0.5 * machine_depth)", "maximum_value_warning": "max(extruderValues('wall_line_width_0')) * 6", "settable_per_mesh": true, @@ -6884,6 +6884,8 @@ "type": "float", "enabled": "extruders_enabled_count > 1 and resolveOrValue('interlocking_enable')", "default_value": 22.5, + "minimum_value": "0", + "maximum_value": "360", "resolve": "min(extruderValues('interlocking_orientation'))", "settable_per_mesh": false, "settable_per_extruder": false @@ -6896,6 +6898,7 @@ "enabled": "extruders_enabled_count > 1 and resolveOrValue('interlocking_enable')", "default_value": 2, "minimum_value": "1", + "maximum_value_warning": "50", "resolve": "max(extruderValues('interlocking_beam_layer_count'))", "settable_per_mesh": false, "settable_per_extruder": false @@ -6908,6 +6911,8 @@ "enabled": "extruders_enabled_count > 1 and resolveOrValue('interlocking_enable')", "default_value": 2, "minimum_value": "1", + "maximum_value": "10", + "maximum_value_warning": "5", "resolve": "max(extruderValues('interlocking_depth'))", "settable_per_mesh": false, "settable_per_extruder": false @@ -6918,10 +6923,12 @@ "description": "The distance close to the boundary of the print where not to generate an interlocking structure as measued in number of cells times 2. If set to a value lower than the Inerlocking Depth then the interlocking structure can become visible on the outside of the print near the interfaces where two models meet.", "type": "int", "enabled": "extruders_enabled_count > 1 and resolveOrValue('interlocking_enable')", - "default_value": 3, + "default_value": 2, "minimum_value": "0", - "resolve": "max(extruderValues('interlocking_boundary_avoidance'))", "minimum_value_warning": "resolveOrValue('interlocking_depth')", + "maximum_value": "10", + "maximum_value_warning": "5", + "resolve": "max(extruderValues('interlocking_boundary_avoidance'))", "settable_per_mesh": false, "settable_per_extruder": false }, diff --git a/resources/definitions/gutenberg_base.def.json b/resources/definitions/gutenberg_base.def.json new file mode 100644 index 0000000000..f0329bef6d --- /dev/null +++ b/resources/definitions/gutenberg_base.def.json @@ -0,0 +1,115 @@ +{ + "version": 2, + "name": "Gutenberg Base", + "inherits": "fdmprinter", + "metadata": + { + "visible": false, + "author": "Gutenberg Dev", + "manufacturer": "Gutenberg", + "file_formats": "text/x-gcode", + "first_start_actions": [ "MachineSettingsAction" ], + "has_machine_quality": true, + "machine_extruder_trains": { "0": "gutenberg_extruder_0" }, + "preferred_material": "generic_abs", + "preferred_quality_type": "normal" + }, + "overrides": + { + "acceleration_enabled": { "default_value": true }, + "acceleration_layer_0": { "value": 10000 }, + "acceleration_print": { "default_value": 15000 }, + "acceleration_roofing": { "value": 10000 }, + "acceleration_travel_layer_0": { "value": 10000 }, + "acceleration_wall_0": { "value": 7500 }, + "adhesion_type": { "default_value": "skirt" }, + "alternate_extra_perimeter": { "default_value": true }, + "bridge_fan_speed_2": { "resolve": "max(cool_fan_speed, 50)" }, + "bridge_fan_speed_3": { "resolve": "max(cool_fan_speed, 20)" }, + "bridge_settings_enabled": { "default_value": true }, + "bridge_wall_coast": { "default_value": 10 }, + "cool_fan_full_at_height": { "value": "resolveOrValue('layer_height_0') + resolveOrValue('layer_height') * max(1, cool_fan_full_layer - 1)" }, + "cool_fan_full_layer": { "value": 4 }, + "cool_min_layer_time": { "default_value": 15 }, + "cool_min_layer_time_fan_speed_max": { "default_value": 20 }, + "gantry_height": { "value": 30 }, + "infill_before_walls": { "default_value": false }, + "infill_enable_travel_optimization": { "default_value": true }, + "jerk_roofing": { "value": 10 }, + "jerk_wall_0": { "value": 10 }, + "layer_height_0": { "resolve": "max(0.2, min(extruderValues('layer_height')))" }, + "line_width": { "value": "machine_nozzle_size * 1.125" }, + "machine_acceleration": { "default_value": 1500 }, + "machine_depth": { "default_value": 165 }, + "machine_end_gcode": { "default_value": "END_PRINT" }, + "machine_endstop_positive_direction_x": { "default_value": true }, + "machine_endstop_positive_direction_y": { "default_value": true }, + "machine_endstop_positive_direction_z": { "default_value": false }, + "machine_feeder_wheel_diameter": { "default_value": 7.5 }, + "machine_head_with_fans_polygon": + { + "default_value": [ + [-35, 65], + [-35, -50], + [35, -50], + [35, 65] + ] + }, + "machine_heated_bed": { "default_value": true }, + "machine_height": { "default_value": 165 }, + "machine_max_acceleration_x": { "default_value": 15000 }, + "machine_max_acceleration_y": { "default_value": 15000 }, + "machine_max_acceleration_z": { "default_value": 250 }, + "machine_max_feedrate_e": { "default_value": 120 }, + "machine_max_feedrate_z": { "default_value": 40 }, + "machine_max_jerk_e": { "default_value": 60 }, + "machine_name": { "default_value": "GUTENBERG 3DP" }, + "machine_start_gcode": { "default_value": ";Simple\nSTART_PRINT EXTRUDER_TEMP={material_print_temperature_layer_0} BED_TEMP={material_bed_temperature_layer_0}\n;Or with custom bed mesh area\n;START_PRINT EXTRUDER_TEMP={material_print_temperature_layer_0} BED_TEMP={material_bed_temperature_layer_0} AREA_START=%MINX%,%MINY% AREA_END=%MAXX%,%MAXY% FILAMENT_TYPE={material_type}" }, + "machine_steps_per_mm_x": { "default_value": 160 }, + "machine_steps_per_mm_y": { "default_value": 160 }, + "machine_steps_per_mm_z": { "default_value": 800 }, + "machine_use_extruder_offset_to_offset_coords": { "value": false }, + "machine_width": { "default_value": 165 }, + "material_diameter": { "default_value": 1.75 }, + "meshfix_maximum_resolution": { "default_value": 0.01 }, + "min_infill_area": { "default_value": 5.0 }, + "minimum_polygon_circumference": { "default_value": 0.2 }, + "optimize_wall_printing_order": { "default_value": true }, + "retraction_amount": { "default_value": 0.8 }, + "retraction_combing": { "value": "'noskin'" }, + "retraction_combing_max_distance": { "default_value": 10 }, + "retraction_hop": { "default_value": 0.2 }, + "retraction_hop_enabled": { "default_value": true }, + "retraction_prime_speed": + { + "maximum_value_warning": 130, + "value": "math.ceil(retraction_speed * 0.4)" + }, + "retraction_retract_speed": { "maximum_value_warning": 130 }, + "retraction_speed": + { + "default_value": 35, + "maximum_value_warning": 130 + }, + "roofing_layer_count": { "value": 1 }, + "skirt_brim_minimal_length": { "default_value": 550 }, + "speed_layer_0": { "value": "math.ceil(speed_print * 0.25)" }, + "speed_roofing": { "value": "math.ceil(speed_print * 0.33)" }, + "speed_slowdown_layers": { "default_value": 4 }, + "speed_topbottom": { "value": "math.ceil(speed_print * 0.33)" }, + "speed_travel": + { + "maximum_value_warning": 501, + "value": 300 + }, + "speed_travel_layer_0": { "value": "math.ceil(speed_travel * 0.4)" }, + "speed_wall": { "value": "math.ceil(speed_print * 0.33)" }, + "speed_wall_0": { "value": "math.ceil(speed_print * 0.33)" }, + "speed_wall_x": { "value": "math.ceil(speed_print * 0.66)" }, + "travel_avoid_other_parts": { "default_value": false }, + "wall_line_width": { "value": "machine_nozzle_size" }, + "wall_overhang_angle": { "default_value": 75 }, + "wall_overhang_speed_factor": { "default_value": 50 }, + "zig_zaggify_infill": { "value": true } + } +} \ No newline at end of file diff --git a/resources/definitions/gutenberg_gzero.def.json b/resources/definitions/gutenberg_gzero.def.json new file mode 100644 index 0000000000..f9f317c3f4 --- /dev/null +++ b/resources/definitions/gutenberg_gzero.def.json @@ -0,0 +1,17 @@ +{ + "version": 2, + "name": "G-ZERO", + "inherits": "gutenberg_base", + "metadata": + { + "visible": true, + "quality_definition": "gutenberg_base" + }, + "overrides": + { + "machine_depth": { "default_value": 200 }, + "machine_height": { "default_value": 201 }, + "machine_name": { "default_value": "G-ZERO" }, + "machine_width": { "default_value": 250 } + } +} \ No newline at end of file diff --git a/resources/extruders/gutenberg_extruder_0.def.json b/resources/extruders/gutenberg_extruder_0.def.json new file mode 100644 index 0000000000..aafe35e92b --- /dev/null +++ b/resources/extruders/gutenberg_extruder_0.def.json @@ -0,0 +1,19 @@ +{ + "version": 2, + "name": "Toolhead", + "inherits": "fdmextruder", + "metadata": + { + "machine": "gutenberg_base", + "position": "0" + }, + "overrides": + { + "extruder_nr": + { + "default_value": 0, + "maximum_value": 1 + }, + "material_diameter": { "default_value": 1.75 } + } +} \ No newline at end of file diff --git a/resources/quality/gutenberg/gutenberg_global_fast_quality.inst.cfg b/resources/quality/gutenberg/gutenberg_global_fast_quality.inst.cfg new file mode 100644 index 0000000000..cfe2a2fc52 --- /dev/null +++ b/resources/quality/gutenberg/gutenberg_global_fast_quality.inst.cfg @@ -0,0 +1,57 @@ +[general] +definition = gutenberg_base +name = Fast +version = 4 + +[metadata] +global_quality = True +quality_type = fast +setting_version = 20 +type = quality + +[values] +acceleration_enabled = True +acceleration_print = 15000 +acceleration_roofing = 10000 +acceleration_topbottom = 10000 +acceleration_travel = 15000 +acceleration_wall = 15000 +acceleration_wall_0 = 10000 +adhesion_type = skirt +alternate_extra_perimeter = False +infill_line_width = 0.5 +infill_pattern = lines +infill_sparse_density = 10 +layer_height = 0.2 +layer_height_0 = 0.2 +optimize_wall_printing_order = True +retraction_amount = 0.8 +retraction_combing = noskin +retraction_hop = 0.2 +retraction_hop_enabled = True +retraction_hop_only_when_collides = True +retraction_speed = 35 +roofing_layer_count = 0 +skin_monotonic = True +skirt_brim_speed = 45 +speed_infill = 200 +speed_layer_0 = 45 +speed_print = 300 +speed_print_layer_0 = 45 +speed_roofing = 100 +speed_support = 200 +speed_topbottom = 150 +speed_travel = 300 +speed_travel_layer_0 = 150 +speed_wall = 100 +speed_wall_0 = 100 +speed_wall_x = 150 +support_angle = 46 +support_enable = False +top_bottom_thickness = 0.6 +travel_avoid_supports = True +wall_line_width = 0.45 +wall_line_width_0 = 0.4 +wall_thickness = 1.25 +zig_zaggify_infill = True + diff --git a/resources/quality/gutenberg/gutenberg_global_fine_quality.inst.cfg b/resources/quality/gutenberg/gutenberg_global_fine_quality.inst.cfg new file mode 100644 index 0000000000..17793b591a --- /dev/null +++ b/resources/quality/gutenberg/gutenberg_global_fine_quality.inst.cfg @@ -0,0 +1,57 @@ +[general] +definition = gutenberg_base +name = Fine +version = 4 + +[metadata] +global_quality = True +quality_type = fine +setting_version = 20 +type = quality + +[values] +acceleration_enabled = True +acceleration_print = 15000 +acceleration_roofing = 10000 +acceleration_topbottom = 10000 +acceleration_travel = 15000 +acceleration_wall = 7500 +acceleration_wall_0 = 7500 +adhesion_type = skirt +alternate_extra_perimeter = False +cool_min_layer_time = 10 +infill_line_width = 0.5 +infill_pattern = gyroid +infill_sparse_density = 15 +inset_direction = outside_in +layer_height = 0.2 +layer_height_0 = 0.2 +optimize_wall_printing_order = True +retraction_amount = 0.8 +retraction_combing = noskin +retraction_hop = 0.2 +retraction_hop_enabled = True +retraction_hop_only_when_collides = True +retraction_speed = 35 +roofing_layer_count = 1 +skin_monotonic = True +skirt_brim_speed = 45 +speed_infill = 150 +speed_layer_0 = 45 +speed_print = 100 +speed_roofing = 100 +speed_topbottom = 100 +speed_travel = 300 +speed_travel_layer_0 = 60 +speed_wall = 100 +speed_wall_0 = 75 +speed_wall_x = 100 +support_angle = 46 +support_enable = False +top_bottom_thickness = 0.8 +travel_avoid_supports = True +wall_line_width = 0.45 +wall_line_width_0 = 0.4 +wall_thickness = 1.65 +zig_zaggify_infill = True + diff --git a/resources/quality/gutenberg/gutenberg_global_normal_quality.inst.cfg b/resources/quality/gutenberg/gutenberg_global_normal_quality.inst.cfg new file mode 100644 index 0000000000..1c59caaf9c --- /dev/null +++ b/resources/quality/gutenberg/gutenberg_global_normal_quality.inst.cfg @@ -0,0 +1,57 @@ +[general] +definition = gutenberg_base +name = Normal +version = 4 + +[metadata] +global_quality = True +quality_type = normal +setting_version = 20 +type = quality + +[values] +acceleration_enabled = True +acceleration_print = 15000 +acceleration_roofing = 10000 +acceleration_topbottom = 10000 +acceleration_travel = 15000 +acceleration_wall = 10000 +acceleration_wall_0 = 7500 +adhesion_type = skirt +alternate_extra_perimeter = True +bottom_layers = 3 +infill_line_width = 0.5 +infill_pattern = gyroid +infill_sparse_density = 15 +layer_height = 0.2 +layer_height_0 = 0.2 +optimize_wall_printing_order = True +retraction_amount = 0.8 +retraction_combing = noskin +retraction_hop = 0.2 +retraction_hop_enabled = True +retraction_hop_only_when_collides = True +retraction_speed = 35 +roofing_layer_count = 1 +skin_monotonic = True +skirt_brim_speed = 45 +speed_infill = 150 +speed_layer_0 = 45 +speed_print = 150 +speed_roofing = 100 +speed_topbottom = 100 +speed_travel = 300 +speed_travel_layer_0 = 100 +speed_wall = 100 +speed_wall_0 = 100 +speed_wall_x = 150 +support_angle = 46 +support_enable = False +top_bottom_thickness = 0.6 +top_layers = 3 +travel_avoid_supports = True +wall_line_width = 0.45 +wall_line_width_0 = 0.4 +wall_thickness = 1.25 +zig_zaggify_infill = True + diff --git a/resources/quality/gutenberg/gutenberg_global_strong_quality.inst.cfg b/resources/quality/gutenberg/gutenberg_global_strong_quality.inst.cfg new file mode 100644 index 0000000000..75b12e22ff --- /dev/null +++ b/resources/quality/gutenberg/gutenberg_global_strong_quality.inst.cfg @@ -0,0 +1,56 @@ +[general] +definition = gutenberg_base +name = Strong +version = 4 + +[metadata] +global_quality = True +quality_type = strong +setting_version = 20 +type = quality + +[values] +acceleration_enabled = True +acceleration_print = 15000 +acceleration_roofing = 10000 +acceleration_topbottom = 10000 +acceleration_travel = 15000 +acceleration_wall = 10000 +acceleration_wall_0 = 7500 +adhesion_type = skirt +alternate_extra_perimeter = True +infill_line_width = 0.5 +infill_pattern = gyroid +infill_sparse_density = 30 +layer_height = 0.2 +layer_height_0 = 0.2 +optimize_wall_printing_order = True +retraction_amount = 0.8 +retraction_combing = noskin +retraction_hop = 0.2 +retraction_hop_enabled = True +retraction_hop_only_when_collides = True +retraction_speed = 35 +roofing_layer_count = 1 +skin_monotonic = True +skirt_brim_speed = 45 +speed_infill = 150 +speed_layer_0 = 45 +speed_print = 100 +speed_print_layer_0 = 60 +speed_roofing = 100 +speed_topbottom = 100 +speed_travel = 300 +speed_travel_layer_0 = 100 +speed_wall = 100 +speed_wall_0 = 75 +speed_wall_x = 100 +support_angle = 46 +support_enable = False +top_bottom_thickness = 1 +travel_avoid_supports = True +wall_line_width = 0.45 +wall_line_width_0 = 0.4 +wall_thickness = 2.05 +zig_zaggify_infill = True +