diff --git a/.github/workflows/conan-package.yml b/.github/workflows/conan-package.yml index 212a49d5..43f36e80 100644 --- a/.github/workflows/conan-package.yml +++ b/.github/workflows/conan-package.yml @@ -8,10 +8,10 @@ on: - 'include/**' - 'cmake/**' - 'conanfile.py' + - 'conandata.yml' - 'CMakeLists.txt' - '.github/workflows/conan-package.yml' - '.github/workflows/requirements*' - - 'conandata.yml' - '.gitattributes' branches: - main @@ -21,39 +21,6 @@ on: - '[0-9].[0-9][0-9]*' jobs: - conan-recipe-version: - uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@main - with: - project_name: arcus - - conan-package-export: - needs: [ conan-recipe-version ] - uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-export.yml@main - with: - recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} - recipe_id_latest: ${{ needs.conan-recipe-version.outputs.recipe_id_latest }} - secrets: inherit - - conan-package-create-macos: - needs: [ conan-recipe-version, conan-package-export ] - if: ${{ (github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) }} - uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-macos.yml@main - with: - recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} - secrets: inherit - - conan-package-create-windows: - needs: [ conan-recipe-version, conan-package-export ] - if: ${{ (github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) }} - uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-windows.yml@main - with: - recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} - secrets: inherit - - conan-package-create-linux: - needs: [ conan-recipe-version, conan-package-export ] - if: ${{ (github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) }} - uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-linux.yml@main - with: - recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} - secrets: inherit + conan-package: + uses: ultimaker/cura-workflows/.github/workflows/conan-package.yml@main + secrets: inherit diff --git a/.github/workflows/process-pull-request.yml b/.github/workflows/process-pull-request.yml index 56fb015b..2aa5d6de 100644 --- a/.github/workflows/process-pull-request.yml +++ b/.github/workflows/process-pull-request.yml @@ -8,7 +8,7 @@ jobs: add_label: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: actions-ecosystem/action-add-labels@v1 if: ${{ github.event.pull_request.head.repo.full_name != github.repository }} with: diff --git a/.github/workflows/requirements-runner.txt b/.github/workflows/requirements-runner.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/conanfile.py b/conanfile.py index 09e9bfab..93defb1e 100644 --- a/conanfile.py +++ b/conanfile.py @@ -1,6 +1,5 @@ -from io import StringIO import os -from os import path +from shutil import which from conan import ConanFile from conan.errors import ConanInvalidConfiguration @@ -10,9 +9,9 @@ from conan.tools.files import copy, AutoPackager, update_conandata from conan.tools.microsoft import check_min_vs, is_msvc, is_msvc_static_runtime from conan.tools.scm import Version, Git -from conans.tools import which -required_conan_version = ">=1.55.0" + +required_conan_version = ">=2.7.0" class ArcusConan(ConanFile): @@ -24,22 +23,26 @@ class ArcusConan(ConanFile): topics = ("conan", "binding", "cura", "protobuf", "c++") settings = "os", "compiler", "build_type", "arch" exports = "LICENSE*" + package_type = "library" + python_requires = "sentrylibrary/1.0.0@ultimaker/stable" + python_requires_extend = "sentrylibrary.SentryLibrary" options = { "shared": [True, False], "fPIC": [True, False], - "enable_sentry": [True, False], } default_options = { "shared": True, "fPIC": True, - "enable_sentry": False, } + def init(self): + base = self.python_requires["sentrylibrary"].module.SentryLibrary + self.options.update(base.options, base.default_options) + def set_version(self): if not self.version: - build_meta = "" if self.develop else "+source" - self.version = self.conan_data["version"] + build_meta + self.version = self.conan_data["version"] def export(self): git = Git(self) @@ -61,16 +64,18 @@ def _compilers_minimum_version(self): def export_sources(self): copy(self, "CMakeLists.txt", self.recipe_folder, self.export_sources_folder) - copy(self, "*", path.join(self.recipe_folder, "src"), path.join(self.export_sources_folder, "src")) - copy(self, "*", path.join(self.recipe_folder, "include"), path.join(self.export_sources_folder, "include")) + copy(self, "*", os.path.join(self.recipe_folder, "src"), os.path.join(self.export_sources_folder, "src")) + copy(self, "*", os.path.join(self.recipe_folder, "include"), os.path.join(self.export_sources_folder, "include")) def config_options(self): + super().config_options() + if self.settings.os == "Windows": del self.options.fPIC - if self.conf.get("user.curaengine:sentry_url", "", check_type=str) == "": - del self.options.enable_sentry def configure(self): + super().configure() + if self.options.shared: self.options.rm_safe("fPIC") @@ -86,9 +91,13 @@ def layout(self): self.cpp.package.system_libs = ["ws2_32"] def requirements(self): - self.requires("protobuf/3.21.9", transitive_headers=True) + super().requirements() + + self.requires("protobuf/3.21.12", transitive_headers=True) def validate(self): + super().validate() + if self.settings.compiler.cppstd: check_min_cppstd(self, self._min_cppstd) check_min_vs(self, 192) # TODO: remove in Conan 2.0 @@ -99,15 +108,21 @@ def validate(self): f"{self.ref} requires C++{self._min_cppstd}, which your compiler does not support." ) + if self.options.enable_sentry: + for sentry_setting in ["organization", "token"]: + if self.conf.get(f"user.sentry:{sentry_setting}", "", check_type=str) == "": + raise ConanInvalidConfiguration(f"Unable to enable Sentry because no {sentry_setting} was configured") + def build_requirements(self): - self.test_requires("standardprojectsettings/[>=0.1.0]@ultimaker/stable") + self.test_requires("standardprojectsettings/[>=0.2.0]@ultimaker/stable") + self.tool_requires("protobuf/3.21.12") def generate(self): tc = CMakeToolchain(self) - tc.variables["ENABLE_SENTRY"] = self.options.get_safe("enable_sentry", False) if is_msvc(self): tc.variables["USE_MSVC_RUNTIME_LIBRARY_DLL"] = not is_msvc_static_runtime(self) tc.cache_variables["CMAKE_POLICY_DEFAULT_CMP0077"] = "NEW" + self.setup_cmake_toolchain_sentry(tc) tc.generate() tc = CMakeDeps(self) @@ -121,25 +136,7 @@ def build(self): cmake.configure() cmake.build() - sentry_project = self.conf.get("user.curaengine:sentry_project", "", check_type=str) - sentry_org = self.conf.get("user.curaengine:sentry_org", "", check_type=str) - if self.options.get_safe("enable_sentry", False) and os.environ.get('SENTRY_TOKEN', None) and sentry_project != "" and sentry_org != "": - if sentry_project == "" or sentry_org == "": - raise ConanInvalidConfiguration("sentry_project or sentry_org is not set") - - if which("sentry-cli") is None: - self.output.warn("sentry-cli is not installed, skipping uploading debug symbols") - else: - if self.settings.os == "Linux": - self.output.info("Stripping debug symbols from binary") - ext = ".so" if self.options.shared else ".a" - self.run(f"objcopy --only-keep-debug --compress-debug-sections=zlib libArcus{ext} libArcus.debug") - self.run(f"objcopy --strip-debug --strip-unneeded libArcus{ext}") - self.run(f"objcopy --add-gnu-debuglink=libArcus.debug libArcus{ext}") - - build_source_dir = self.build_path.parent.parent.as_posix() - self.output.info("Uploading debug symbols to sentry") - self.run(f"sentry-cli --auth-token {os.environ['SENTRY_TOKEN']} debug-files upload --include-sources -o {sentry_org} -p {sentry_project} {build_source_dir}") + self.send_sentry_debug_files(binary_basename = "libArcus") def package(self): copy(self, pattern="LICENSE*", dst="licenses", src=self.source_folder) diff --git a/test_package/conanfile.py b/test_package/conanfile.py index 17be25be..e9b23a0a 100644 --- a/test_package/conanfile.py +++ b/test_package/conanfile.py @@ -9,10 +9,12 @@ class ArcusTestConan(ConanFile): test_type = "explicit" def build_requirements(self): - self.test_requires("standardprojectsettings/[>=0.1.0]@ultimaker/stable") + self.test_requires("standardprojectsettings/[>=0.2.0]@ultimaker/stable") + self.tool_requires("protobuf/3.21.12") + def requirements(self): self.requires(self.tested_reference_str) - self.requires("protobuf/3.21.4") + self.requires("protobuf/3.21.12") def layout(self): cmake_layout(self)