From e47698c9ec312c666a14290bdd3440e1dda76e36 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Wed, 10 Jan 2024 06:49:27 +0100 Subject: [PATCH 01/12] Use engine version from branch CURA-11482 Contributes to CURA-11482 --- conandata.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conandata.yml b/conandata.yml index a0a5a204ca..dcf883c630 100644 --- a/conandata.yml +++ b/conandata.yml @@ -1,7 +1,7 @@ version: "5.7.0-alpha.0" requirements: - "uranium/(latest)@ultimaker/testing" - - "curaengine/(latest)@ultimaker/testing" + - "curaengine/(latest)@ultimaker/cura_11482" - "cura_binary_data/(latest)@ultimaker/testing" - "fdm_materials/(latest)@ultimaker/testing" - "curaengine_plugin_gradual_flow/(latest)@ultimaker/stable" From 90472bb6477fb7f1027ecdcba38a33ff1e3e55a6 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Fri, 12 Jan 2024 10:57:24 +0100 Subject: [PATCH 02/12] Use Arcus with published Sentry debug-files Contributes to CURA-11482 --- conandata.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conandata.yml b/conandata.yml index dcf883c630..a3456c44b1 100644 --- a/conandata.yml +++ b/conandata.yml @@ -6,7 +6,7 @@ requirements: - "fdm_materials/(latest)@ultimaker/testing" - "curaengine_plugin_gradual_flow/(latest)@ultimaker/stable" - "dulcificum/latest@ultimaker/testing" - - "pyarcus/5.3.0" + - "arcus/(latest)@ultimaker/cura_11482" - "pysavitar/5.3.0" - "pynest2d/5.3.0" - "curaengine_grpc_definitions/(latest)@ultimaker/testing" From ec1c82535263761ba8c72a6cbd74a32a96ee5797 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Fri, 12 Jan 2024 11:00:18 +0100 Subject: [PATCH 03/12] Don't package pdb Contributes to CURA-11482 --- conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conanfile.py b/conanfile.py index ea1ac2e1f9..7ce196c90d 100644 --- a/conanfile.py +++ b/conanfile.py @@ -242,7 +242,7 @@ class CuraConan(ConanFile): self.output.warning(f"Source path for binary {binary['binary']} does not exist") continue - for bin in Path(src_path).glob(binary["binary"] + "*[.exe|.dll|.so|.dylib|.so.|.pdb]*"): + for bin in Path(src_path).glob(binary["binary"] + "*[.exe|.dll|.so|.dylib|.so.]*"): binaries.append((str(bin), binary["dst"])) for bin in Path(src_path).glob(binary["binary"]): binaries.append((str(bin), binary["dst"])) From 0661fe5dcb0b6b3796fd57e04f07fab5c51cd0f7 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Fri, 12 Jan 2024 11:04:31 +0100 Subject: [PATCH 04/12] Enable Sentry for Arcus Contributes to CURA-11482 --- conanfile.py | 1 + 1 file changed, 1 insertion(+) diff --git a/conanfile.py b/conanfile.py index 7ce196c90d..9eac9218b1 100644 --- a/conanfile.py +++ b/conanfile.py @@ -320,6 +320,7 @@ class CuraConan(ConanFile): self.options["openssl"].shared = True if self.conf.get("user.curaengine:sentry_url", "", check_type=str) != "": self.options["curaengine"].enable_sentry = True + self.options["arcus"].enable_sentry = True def validate(self): version = self.conf.get("user.cura:version", default = self.version, check_type = str) From 34e7ea81850e85f6e3f4a4a22acf016dabd2b28b Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Fri, 12 Jan 2024 14:28:01 +0100 Subject: [PATCH 05/12] Use clipper with Sentry support Contributes to CURA-11482 --- conanfile.py | 1 + 1 file changed, 1 insertion(+) diff --git a/conanfile.py b/conanfile.py index 9eac9218b1..3402e4dc54 100644 --- a/conanfile.py +++ b/conanfile.py @@ -336,6 +336,7 @@ class CuraConan(ConanFile): for req in self.conan_data["requirements_internal"]: self.requires(req) self.requires("cpython/3.10.4@ultimaker/stable") + self.requires("clipper/6.4.2@ultimaker/cura_11482") # TODO: change channel to `testing` once merged self.requires("openssl/3.2.0") self.requires("boost/1.82.0") self.requires("spdlog/1.12.0") From 2bcdacef7239779db21cef3a069e174ff4a4831d Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Sat, 13 Jan 2024 11:12:46 +0100 Subject: [PATCH 06/12] Allow for opt-in of DF User name for Sentry crash reports This will help us with triage of bugs for our customers. Contributes to CURA-11482 --- .../CuraEngineBackend/CuraEngineBackend.py | 10 +++- resources/qml/Preferences/GeneralPage.qml | 47 ++++++++++++++++++- 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 818766d766..f67d14aafe 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -164,6 +164,7 @@ class CuraEngineBackend(QObject, Backend): application.getPreferences().addPreference("general/auto_slice", False) application.getPreferences().addPreference("info/send_engine_crash", True) + application.getPreferences().addPreference("info/anonymous_engine_crash_report", True) self._use_timer: bool = False @@ -198,6 +199,7 @@ class CuraEngineBackend(QObject, Backend): # Ensure that the initial value for send_engine_crash is handled correctly. application.callLater(self._onPreferencesChanged, "info/send_engine_crash") + application.callLater(self._onPreferencesChanged, "info/anonymous_engine_crash_report") def startPlugins(self) -> None: """ @@ -1094,14 +1096,18 @@ class CuraEngineBackend(QObject, Backend): self._change_timer.timeout.disconnect(self.slice) def _onPreferencesChanged(self, preference: str) -> None: - if preference != "general/auto_slice" and preference != "info/send_engine_crash": + if preference != "general/auto_slice" and preference != "info/send_engine_crash" and preference != "info/anonymous_engine_crash_report": return if preference == "general/auto_slice": auto_slice = self.determineAutoSlicing() if auto_slice: self._change_timer.start() elif preference == "info/send_engine_crash": - os.environ["use_sentry"] = "1" if CuraApplication.getInstance().getPreferences().getValue("info/send_engine_crash") else "0" + os.environ["USE_SENTRY"] = "1" if CuraApplication.getInstance().getPreferences().getValue("info/send_engine_crash") else "0" + elif preference == "info/anonymous_engine_crash_report": + account = CuraApplication.getInstance().getCuraAPI().account + if account and account.isLoggedIn and not CuraApplication.getInstance().getPreferences().getValue("info/anonymous_engine_crash_report"): + os.environ["CURAENGINE_SENTRY_USER"] = account.userName def tickle(self) -> None: """Tickle the backend so in case of auto slicing, it starts the timer.""" diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index 587084444c..708cc4a441 100644 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -124,6 +124,9 @@ UM.PreferencesPage UM.Preferences.resetPreference("info/send_engine_crash") sendEngineCrashCheckbox.checked = boolCheck(UM.Preferences.getValue("info/send_engine_crash")) + UM.Preferences.resetPreference("info/anonymous_engine_crash_report") + sendEngineCrashCheckboxAnonymous.checked = boolCheck(UM.Preferences.getValue("info/anonymous_engine_crash_report")) + UM.Preferences.resetPreference("info/automatic_update_check") checkUpdatesCheckbox.checked = boolCheck(UM.Preferences.getValue("info/automatic_update_check")) @@ -859,11 +862,12 @@ UM.PreferencesPage font: UM.Theme.getFont("medium_bold") text: catalog.i18nc("@label", "Privacy") } + UM.TooltipArea { width: childrenRect.width height: visible ? childrenRect.height : 0 - text: catalog.i18nc("@info:tooltip", "Should slicing crashes be automatically reported to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored.") + text: catalog.i18nc("@info:tooltip", "Should slicing crashes be automatically reported to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored, unless you give explicit permission.") UM.CheckBox { @@ -874,6 +878,47 @@ UM.PreferencesPage } } + ButtonGroup + { + id: curaCrashGroup + buttons: [sendEngineCrashCheckboxAnonymous, sendEngineCrashCheckboxUser] + } + + UM.TooltipArea + { + width: childrenRect.width + height: visible ? childrenRect.height : 0 + visible: Cura.API.account.isLoggedIn + text: catalog.i18nc("@info:tooltip", "Send crash reports without any personally identifiable information or models data to UltiMaker.") + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + Cura.RadioButton + { + id: sendEngineCrashCheckboxAnonymous + text: catalog.i18nc("@option:radio", "Anonymous crash reports") + enabled: sendEngineCrashCheckbox.checked + checked: boolCheck(UM.Preferences.getValue("info/anonymous_engine_crash_report")) + onClicked: UM.Preferences.setValue("info/anonymous_engine_crash_report", true) + } + } + UM.TooltipArea + { + width: childrenRect.width + height: visible ? childrenRect.height : 0 + visible: Cura.API.account.isLoggedIn + text: catalog.i18nc("@info:tooltip", "Send crash reports with your registered UltiMaker account email adress to UltiMaker. No model data is being send.") + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + Cura.RadioButton + { + id: sendEngineCrashCheckboxUser + text: catalog.i18nc("@option:radio", "Crash reports with email adress") + enabled: sendEngineCrashCheckbox.checked + checked: !boolCheck(UM.Preferences.getValue("info/anonymous_engine_crash_report")) && Cura.API.account.isLoggedIn + onClicked: UM.Preferences.setValue("info/anonymous_engine_crash_report", false) + } + } + UM.TooltipArea { width: childrenRect.width From e91322d0707a44e4687848ce793a619d272c328d Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Mon, 15 Jan 2024 08:06:16 +0100 Subject: [PATCH 07/12] ALso enable Sentry for Clipper Contributes to CURA-11482 --- conanfile.py | 1 + 1 file changed, 1 insertion(+) diff --git a/conanfile.py b/conanfile.py index 3402e4dc54..4aa0b07bbf 100644 --- a/conanfile.py +++ b/conanfile.py @@ -321,6 +321,7 @@ class CuraConan(ConanFile): if self.conf.get("user.curaengine:sentry_url", "", check_type=str) != "": self.options["curaengine"].enable_sentry = True self.options["arcus"].enable_sentry = True + self.options["clipper"].enable_sentry = True def validate(self): version = self.conf.get("user.cura:version", default = self.version, check_type = str) From 773805963169eee52b6c4b0abb4d8d789a22f8ba Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Mon, 15 Jan 2024 10:44:43 +0100 Subject: [PATCH 08/12] Add optional (opt-in) project_name to Sentry Needed for automatic Issue handling in the future Contributes to CURA-11482 --- plugins/CuraEngineBackend/Cura.proto | 1 + plugins/CuraEngineBackend/StartSliceJob.py | 5 +++++ resources/qml/Preferences/GeneralPage.qml | 4 ++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/plugins/CuraEngineBackend/Cura.proto b/plugins/CuraEngineBackend/Cura.proto index 9593b83528..b03298f695 100644 --- a/plugins/CuraEngineBackend/Cura.proto +++ b/plugins/CuraEngineBackend/Cura.proto @@ -35,6 +35,7 @@ message Slice repeated EnginePlugin engine_plugins = 5; string sentry_id = 6; // The anonymized Sentry user id that requested the slice string cura_version = 7; // The version of Cura that requested the slice + optional string project_name = 8; // The name of the project that requested the slice } message Extruder diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 935eb81afa..8826d2e1f6 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -340,6 +340,11 @@ class StartSliceJob(Job): self._slice_message.sentry_id = f"{user_id}" self._slice_message.cura_version = CuraVersion + # Add the project name to the message if the user allows for non-anonymous crash data collection. + account = CuraApplication.getInstance().getCuraAPI().account + if account and account.isLoggedIn and not CuraApplication.getInstance().getPreferences().getValue("info/anonymous_engine_crash_report"): + self._slice_message.project_name = CuraApplication.getInstance().getPrintInformation().baseName + # Build messages for extruder stacks for extruder_stack in global_stack.extruderList: self._buildExtruderMessage(extruder_stack) diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index 708cc4a441..e540fc1b1f 100644 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -906,13 +906,13 @@ UM.PreferencesPage width: childrenRect.width height: visible ? childrenRect.height : 0 visible: Cura.API.account.isLoggedIn - text: catalog.i18nc("@info:tooltip", "Send crash reports with your registered UltiMaker account email adress to UltiMaker. No model data is being send.") + text: catalog.i18nc("@info:tooltip", "Send crash reports with your registered UltiMaker account name and the project name to UltiMaker Sentry. No actual model data is being send.") anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_margin").width Cura.RadioButton { id: sendEngineCrashCheckboxUser - text: catalog.i18nc("@option:radio", "Crash reports with email adress") + text: catalog.i18nc("@option:radio", "Send crash reports with UltiMaker account name") enabled: sendEngineCrashCheckbox.checked checked: !boolCheck(UM.Preferences.getValue("info/anonymous_engine_crash_report")) && Cura.API.account.isLoggedIn onClicked: UM.Preferences.setValue("info/anonymous_engine_crash_report", false) From 68152e6f3111a17d8d5c17d4e353db01b1a8d65d Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Mon, 15 Jan 2024 12:04:55 +0100 Subject: [PATCH 09/12] Code readability CURA-11482 --- plugins/CuraEngineBackend/CuraEngineBackend.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index f67d14aafe..a22d6b5306 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -1105,9 +1105,10 @@ class CuraEngineBackend(QObject, Backend): elif preference == "info/send_engine_crash": os.environ["USE_SENTRY"] = "1" if CuraApplication.getInstance().getPreferences().getValue("info/send_engine_crash") else "0" elif preference == "info/anonymous_engine_crash_report": - account = CuraApplication.getInstance().getCuraAPI().account - if account and account.isLoggedIn and not CuraApplication.getInstance().getPreferences().getValue("info/anonymous_engine_crash_report"): - os.environ["CURAENGINE_SENTRY_USER"] = account.userName + if not CuraApplication.getInstance().getPreferences().getValue("info/anonymous_engine_crash_report"): + account = CuraApplication.getInstance().getCuraAPI().account + if account and account.isLoggedIn: + os.environ["CURAENGINE_SENTRY_USER"] = account.userName def tickle(self) -> None: """Tickle the backend so in case of auto slicing, it starts the timer.""" From 557a95568c9f220ae4a23be44fd61e386698ebc7 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Mon, 15 Jan 2024 13:42:24 +0100 Subject: [PATCH 10/12] More explicit crash report configuration CURA-11482 --- resources/qml/Preferences/GeneralPage.qml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index e540fc1b1f..8871944523 100644 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -872,7 +872,7 @@ UM.PreferencesPage UM.CheckBox { id: sendEngineCrashCheckbox - text: catalog.i18nc("@option:check","Send (anonymous) engine crash reports") + text: catalog.i18nc("@option:check","Send engine crash reports") checked: boolCheck(UM.Preferences.getValue("info/send_engine_crash")) onCheckedChanged: UM.Preferences.setValue("info/send_engine_crash", checked) } @@ -888,7 +888,6 @@ UM.PreferencesPage { width: childrenRect.width height: visible ? childrenRect.height : 0 - visible: Cura.API.account.isLoggedIn text: catalog.i18nc("@info:tooltip", "Send crash reports without any personally identifiable information or models data to UltiMaker.") anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_margin").width @@ -896,7 +895,7 @@ UM.PreferencesPage { id: sendEngineCrashCheckboxAnonymous text: catalog.i18nc("@option:radio", "Anonymous crash reports") - enabled: sendEngineCrashCheckbox.checked + enabled: sendEngineCrashCheckbox.checked && Cura.API.account.isLoggedIn checked: boolCheck(UM.Preferences.getValue("info/anonymous_engine_crash_report")) onClicked: UM.Preferences.setValue("info/anonymous_engine_crash_report", true) } @@ -905,15 +904,16 @@ UM.PreferencesPage { width: childrenRect.width height: visible ? childrenRect.height : 0 - visible: Cura.API.account.isLoggedIn - text: catalog.i18nc("@info:tooltip", "Send crash reports with your registered UltiMaker account name and the project name to UltiMaker Sentry. No actual model data is being send.") + text: Cura.API.account.isLoggedIn ? + catalog.i18nc("@info:tooltip", "Send crash reports with your registered UltiMaker account name and the project name to UltiMaker Sentry. No actual model data is being send.") : + catalog.i18nc("@info:tooltip", "Please sign in to your UltiMaker account to allow sending non-anonymous data.") anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_margin").width Cura.RadioButton { id: sendEngineCrashCheckboxUser - text: catalog.i18nc("@option:radio", "Send crash reports with UltiMaker account name") - enabled: sendEngineCrashCheckbox.checked + text: catalog.i18nc("@option:radio", "Include UltiMaker account name") + enabled: sendEngineCrashCheckbox.checked && Cura.API.account.isLoggedIn checked: !boolCheck(UM.Preferences.getValue("info/anonymous_engine_crash_report")) && Cura.API.account.isLoggedIn onClicked: UM.Preferences.setValue("info/anonymous_engine_crash_report", false) } From ab322ae703024026e80dd4d9857dd95705184a80 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Mon, 15 Jan 2024 15:22:25 +0100 Subject: [PATCH 11/12] Always send user name for Sentry if available CURA-11482 --- plugins/CuraEngineBackend/Cura.proto | 1 + plugins/CuraEngineBackend/CuraEngineBackend.py | 6 ------ plugins/CuraEngineBackend/StartSliceJob.py | 1 + 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/plugins/CuraEngineBackend/Cura.proto b/plugins/CuraEngineBackend/Cura.proto index b03298f695..238829ba64 100644 --- a/plugins/CuraEngineBackend/Cura.proto +++ b/plugins/CuraEngineBackend/Cura.proto @@ -36,6 +36,7 @@ message Slice string sentry_id = 6; // The anonymized Sentry user id that requested the slice string cura_version = 7; // The version of Cura that requested the slice optional string project_name = 8; // The name of the project that requested the slice + optional string user_name = 9; // The Digital Factory account name of the user that requested the slice } message Extruder diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index a22d6b5306..0c4003fadc 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -199,7 +199,6 @@ class CuraEngineBackend(QObject, Backend): # Ensure that the initial value for send_engine_crash is handled correctly. application.callLater(self._onPreferencesChanged, "info/send_engine_crash") - application.callLater(self._onPreferencesChanged, "info/anonymous_engine_crash_report") def startPlugins(self) -> None: """ @@ -1104,11 +1103,6 @@ class CuraEngineBackend(QObject, Backend): self._change_timer.start() elif preference == "info/send_engine_crash": os.environ["USE_SENTRY"] = "1" if CuraApplication.getInstance().getPreferences().getValue("info/send_engine_crash") else "0" - elif preference == "info/anonymous_engine_crash_report": - if not CuraApplication.getInstance().getPreferences().getValue("info/anonymous_engine_crash_report"): - account = CuraApplication.getInstance().getCuraAPI().account - if account and account.isLoggedIn: - os.environ["CURAENGINE_SENTRY_USER"] = account.userName def tickle(self) -> None: """Tickle the backend so in case of auto slicing, it starts the timer.""" diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 8826d2e1f6..633352d616 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -344,6 +344,7 @@ class StartSliceJob(Job): account = CuraApplication.getInstance().getCuraAPI().account if account and account.isLoggedIn and not CuraApplication.getInstance().getPreferences().getValue("info/anonymous_engine_crash_report"): self._slice_message.project_name = CuraApplication.getInstance().getPrintInformation().baseName + self._slice_message.user_name = account.userName # Build messages for extruder stacks for extruder_stack in global_stack.extruderList: From 1514d755b0c9ccf474c374080557d81c81d3ef0d Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 17 Jan 2024 11:03:32 +0100 Subject: [PATCH 12/12] Set proper dependancies versions --- conandata.yml | 3 +-- conanfile.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/conandata.yml b/conandata.yml index a3456c44b1..9b0e2e337b 100644 --- a/conandata.yml +++ b/conandata.yml @@ -1,12 +1,11 @@ version: "5.7.0-alpha.0" requirements: - "uranium/(latest)@ultimaker/testing" - - "curaengine/(latest)@ultimaker/cura_11482" + - "curaengine/(latest)@ultimaker/testing" - "cura_binary_data/(latest)@ultimaker/testing" - "fdm_materials/(latest)@ultimaker/testing" - "curaengine_plugin_gradual_flow/(latest)@ultimaker/stable" - "dulcificum/latest@ultimaker/testing" - - "arcus/(latest)@ultimaker/cura_11482" - "pysavitar/5.3.0" - "pynest2d/5.3.0" - "curaengine_grpc_definitions/(latest)@ultimaker/testing" diff --git a/conanfile.py b/conanfile.py index 4aa0b07bbf..ca8427ad70 100644 --- a/conanfile.py +++ b/conanfile.py @@ -337,7 +337,7 @@ class CuraConan(ConanFile): for req in self.conan_data["requirements_internal"]: self.requires(req) self.requires("cpython/3.10.4@ultimaker/stable") - self.requires("clipper/6.4.2@ultimaker/cura_11482") # TODO: change channel to `testing` once merged + self.requires("clipper/6.4.2@ultimaker/stable") self.requires("openssl/3.2.0") self.requires("boost/1.82.0") self.requires("spdlog/1.12.0")