From d96305245d04636cac285f11da8f9e4e9dfe57e7 Mon Sep 17 00:00:00 2001 From: Jon Seager Date: Thu, 19 Jan 2023 11:58:10 +0000 Subject: [PATCH] init: create basic flake --- .gitignore | 1 + LICENSE | 202 ++++++++++++++++++ README | 15 ++ flake.lock | 43 ++++ flake.nix | 33 +++ modules/charmcraft/default.nix | 91 ++++++++ modules/charmcraft/deps/craft-cli.nix | 33 +++ modules/charmcraft/deps/craft-parts.nix | 41 ++++ .../deps/craft-providers/default.nix | 39 ++++ .../craft-providers/ignore-host-snap.patch | 23 ++ .../craft-providers/lxd-socket-path.patch | 13 ++ .../charmcraft/deps/craft-store/default.nix | 41 ++++ .../deps/craft-store/macaroon-bakery.nix | 31 +++ modules/charmcraft/deps/overrides.nix | 23 ++ modules/charmcraft/deps/pydantic-yaml.nix | 44 ++++ modules/charmcraft/deps/snap-helpers.nix | 28 +++ .../remove-cryptography-charmcraft.patch | 12 ++ 17 files changed, 713 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 modules/charmcraft/default.nix create mode 100644 modules/charmcraft/deps/craft-cli.nix create mode 100644 modules/charmcraft/deps/craft-parts.nix create mode 100644 modules/charmcraft/deps/craft-providers/default.nix create mode 100644 modules/charmcraft/deps/craft-providers/ignore-host-snap.patch create mode 100644 modules/charmcraft/deps/craft-providers/lxd-socket-path.patch create mode 100644 modules/charmcraft/deps/craft-store/default.nix create mode 100644 modules/charmcraft/deps/craft-store/macaroon-bakery.nix create mode 100644 modules/charmcraft/deps/overrides.nix create mode 100644 modules/charmcraft/deps/pydantic-yaml.nix create mode 100644 modules/charmcraft/deps/snap-helpers.nix create mode 100644 modules/charmcraft/remove-cryptography-charmcraft.patch diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b2be92b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +result diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..38d2ef1 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright jnsgruk + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/README b/README new file mode 100644 index 0000000..2c00b2c --- /dev/null +++ b/README @@ -0,0 +1,15 @@ +# crafts-flake + +> This is very much a work-in-progress! + +An experimental nix flake for the Canonical ⭐craft suote of tools. + +## Quick start + +The default package is charmcraft, which you can build/test with: + +```bash +$ git clone https://github.com/jnsgruk/crafts-flake +$ cd crafts-flake +$ nix run +``` diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..a854a3a --- /dev/null +++ b/flake.lock @@ -0,0 +1,43 @@ +{ + "nodes": { + "flake-utils": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1673796341, + "narHash": "sha256-1kZi9OkukpNmOaPY7S5/+SlCDOuYnP3HkXHvNDyLQcc=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "6dccdc458512abce8d19f74195bb20fdb067df50", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..ecf0985 --- /dev/null +++ b/flake.nix @@ -0,0 +1,33 @@ +{ + description = "⭐craft flake for ⭐craft applications and libraries."; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { + self, + nixpkgs, + flake-utils, + ... + }: let + pythonVersion = "python39"; + in + flake-utils.lib.eachDefaultSystem ( + system: let + pkgs = nixpkgs.legacyPackages.${system}; + charmcraft = pkgs.callPackage ./modules/charmcraft {}; + in rec { + packages = { + pythonPkg = charmcraft; + default = packages.pythonPkg; + }; + + apps.default = { + type = "app"; + program = "${packages.pythonPkg}/bin/charmcraft"; + }; + } + ); +} diff --git a/modules/charmcraft/default.nix b/modules/charmcraft/default.nix new file mode 100644 index 0000000..682317b --- /dev/null +++ b/modules/charmcraft/default.nix @@ -0,0 +1,91 @@ +{ + pkgs, + lib, + ... +}: let + pname = "charmcraft"; + version = "2.2.0"; + + overlay = pkgs.python3.override { + packageOverrides = self: super: { + pydantic = super.pydantic.overridePythonAttrs (old: rec { + pname = "pydantic"; + version = "1.9.0"; + src = pkgs.fetchFromGitHub { + owner = "samuelcolvin"; + repo = pname; + rev = "refs/tags/v${version}"; + sha256 = "sha256-C4WP8tiMRFmkDkQRrvP3yOSM2zN8pHJmX9cdANIckpM="; + }; + }); + }; + }; + + snap-helpers = pkgs.callPackage ./deps/snap-helpers.nix {}; + overrides = pkgs.callPackage ./deps/overrides.nix {}; + pydantic-yaml = pkgs.callPackage ./deps/pydantic-yaml.nix {pydantic = overlay.pkgs.pydantic;}; + + craft-cli = pkgs.callPackage ./deps/craft-cli.nix {pydantic = overlay.pkgs.pydantic;}; + craft-providers = pkgs.callPackage ./deps/craft-providers {pydantic = overlay.pkgs.pydantic;}; + + craft-parts = pkgs.callPackage ./deps/craft-parts.nix { + overrides = overrides; + pydantic = overlay.pkgs.pydantic; + pydantic-yaml = pydantic-yaml; + }; + + craft-store = pkgs.callPackage ./deps/craft-store { + pydantic = overlay.pkgs.pydantic; + overrides = overrides; + }; +in + pkgs.python3Packages.buildPythonApplication { + pname = pname; + version = version; + + src = pkgs.fetchFromGitHub { + owner = "canonical"; + repo = "charmcraft"; + rev = version; + sha256 = "sha256-D5G0CLLmrlVvqfA2sjuRtHX3BcfRj8w5boOlXz95ZGg="; + }; + + patches = [./remove-cryptography-charmcraft.patch]; + + propagatedBuildInputs = + [ + craft-cli + craft-parts + craft-providers + craft-store + overlay.pkgs.pydantic + snap-helpers + ] + ++ (with pkgs.python3Packages; [ + humanize + jinja2 + jsonschema + python-dateutil + pyyaml + requests + requests-toolbelt + requests-unixsocket + setuptools-rust + tabulate + ]); + + # TODO: Try to make the tests pass and remove this. + doCheck = false; + # checkInputs = with pkgs.python3Packages; [ + # pytest + # pytest-runner + # responses + # ]; + + meta = with lib; { + description = "Build and publish Charmed Operators"; + homepage = "https://github.com/canonical/charmcraft"; + license = licenses.lgpl3; + maintainers = with maintainers; [jnsgruk]; + }; + } diff --git a/modules/charmcraft/deps/craft-cli.nix b/modules/charmcraft/deps/craft-cli.nix new file mode 100644 index 0000000..9176792 --- /dev/null +++ b/modules/charmcraft/deps/craft-cli.nix @@ -0,0 +1,33 @@ +{ + pkgs, + lib, + pydantic, + ... +}: +pkgs.python3Packages.buildPythonPackage rec { + pname = "craft-cli"; + version = "1.2.0"; + + src = pkgs.fetchFromGitHub { + owner = "canonical"; + repo = "craft-cli"; + rev = version; + sha256 = "sha256-kNaAvuZarAq/qo7g9htd0Y65SQ/zjrbKmDSAfAj+ydw="; + }; + + propagatedBuildInputs = with pkgs.python3Packages; + [ + platformdirs + pyyaml + ] + ++ [pydantic]; + + doCheck = false; + + meta = with lib; { + description = "A Command Line Client builder that follows the Canonical's Guidelines for a Command Line Interface."; + homepage = "https://github.com/canonical/craft-cli"; + license = licenses.lgpl3; + maintainers = with maintainers; [jnsgruk]; + }; +} diff --git a/modules/charmcraft/deps/craft-parts.nix b/modules/charmcraft/deps/craft-parts.nix new file mode 100644 index 0000000..32ac500 --- /dev/null +++ b/modules/charmcraft/deps/craft-parts.nix @@ -0,0 +1,41 @@ +{ + pkgs, + lib, + pydantic, + pydantic-yaml, + overrides, + ... +}: +pkgs.python3Packages.buildPythonPackage rec { + pname = "craft-parts"; + version = "1.17.1"; + + src = pkgs.fetchFromGitHub { + owner = "canonical"; + repo = "craft-parts"; + rev = "v${version}"; + sha256 = "sha256-Lo26q0HjytJaF7lcM/ltYqa5Yd1GDO+YqydOgS1sROU="; + }; + + propagatedBuildInputs = with pkgs.python3Packages; + [ + pyxdg + pyyaml + requests + requests-unixsocket + ] + ++ [ + overrides + pydantic + pydantic-yaml + ]; + + doCheck = false; + + meta = with lib; { + description = "Software artifact parts builder from Canonical."; + homepage = "https://github.com/canonical/craft-parts"; + license = licenses.lgpl3; + maintainers = with maintainers; [jnsgruk]; + }; +} diff --git a/modules/charmcraft/deps/craft-providers/default.nix b/modules/charmcraft/deps/craft-providers/default.nix new file mode 100644 index 0000000..8cc197c --- /dev/null +++ b/modules/charmcraft/deps/craft-providers/default.nix @@ -0,0 +1,39 @@ +{ + pkgs, + lib, + pydantic, + ... +}: +pkgs.python3Packages.buildPythonPackage rec { + pname = "craft-providers"; + version = "1.7.0"; + + src = pkgs.fetchFromGitHub { + owner = "canonical"; + repo = "craft-providers"; + rev = "v${version}"; + sha256 = "sha256-V9y6GFML/4vN5e3fJlWk4yZoXbjtNTimpYQBHbg5muA="; + }; + + patches = [ + ./lxd-socket-path.patch + ./ignore-host-snap.patch + ]; + + propagatedBuildInputs = with pkgs.python3Packages; + [ + pyyaml + requests + requests-unixsocket + ] + ++ [pydantic]; + + doCheck = false; + + meta = with lib; { + description = "Python interfaces for instantiating and executing builds for a variety of target environments.."; + homepage = "https://github.com/canonical/craft-providers"; + license = licenses.lgpl3; + maintainers = with maintainers; [jnsgruk]; + }; +} diff --git a/modules/charmcraft/deps/craft-providers/ignore-host-snap.patch b/modules/charmcraft/deps/craft-providers/ignore-host-snap.patch new file mode 100644 index 0000000..c76d4d7 --- /dev/null +++ b/modules/charmcraft/deps/craft-providers/ignore-host-snap.patch @@ -0,0 +1,23 @@ +diff --git a/craft_providers/bases/buildd.py b/craft_providers/bases/buildd.py +index f959629..14f7af9 100644 +--- a/craft_providers/bases/buildd.py ++++ b/craft_providers/bases/buildd.py +@@ -579,15 +579,16 @@ class BuilddBase(Base): + ) from error + else: + try: +- snap_installer.inject_from_host( ++ snap_installer.install_from_store( + executor=executor, + snap_name=snap.name, + classic=snap.classic, ++ channel="2.2/stable" + ) + except snap_installer.SnapInstallationError as error: + raise BaseConfigurationError( + brief=( +- f"failed to inject host's snap {snap.name!r} " ++ f"failed to install charmcraft snap {snap.name!r} " + "into target environment." + ) + ) from error diff --git a/modules/charmcraft/deps/craft-providers/lxd-socket-path.patch b/modules/charmcraft/deps/craft-providers/lxd-socket-path.patch new file mode 100644 index 0000000..27271f4 --- /dev/null +++ b/modules/charmcraft/deps/craft-providers/lxd-socket-path.patch @@ -0,0 +1,13 @@ +diff --git a/craft_providers/lxd/installer.py b/craft_providers/lxd/installer.py +index 53750ae..a391741 100644 +--- a/craft_providers/lxd/installer.py ++++ b/craft_providers/lxd/installer.py +@@ -101,7 +101,7 @@ def is_user_permitted() -> bool: + + :returns: True if user has correct permissions. + """ +- return os.access("/var/snap/lxd/common/lxd/unix.socket", os.O_RDWR) ++ return os.access("/var/lib/lxd/unix.socket", os.O_RDWR) + + + def ensure_lxd_is_ready( diff --git a/modules/charmcraft/deps/craft-store/default.nix b/modules/charmcraft/deps/craft-store/default.nix new file mode 100644 index 0000000..4c872d4 --- /dev/null +++ b/modules/charmcraft/deps/craft-store/default.nix @@ -0,0 +1,41 @@ +{ + pkgs, + lib, + overrides, + pydantic, + ... +}: let + macaroonbakery = pkgs.callPackage ./macaroon-bakery.nix {}; +in + pkgs.python3Packages.buildPythonPackage rec { + pname = "craft-store"; + version = "2.3.0"; + + src = pkgs.fetchFromGitHub { + owner = "canonical"; + repo = "craft-store"; + rev = version; + sha256 = "sha256-XPPZKhWQwedOo7rpY8WL/UfnNbaH4afL+BJub30owTg="; + }; + + propagatedBuildInputs = + [ + macaroonbakery + overrides + pydantic + ] + ++ (with pkgs.python3Packages; [ + keyring + requests + requests-toolbelt + ]); + + doCheck = false; + + meta = with lib; { + description = "Python interfaces for communicating with Canonical Stores, such as Charmhub and the Snap Store."; + homepage = "https://github.com/canonical/craft-store"; + license = licenses.lgpl3; + maintainers = with maintainers; [jnsgruk]; + }; + } diff --git a/modules/charmcraft/deps/craft-store/macaroon-bakery.nix b/modules/charmcraft/deps/craft-store/macaroon-bakery.nix new file mode 100644 index 0000000..ad6bc5c --- /dev/null +++ b/modules/charmcraft/deps/craft-store/macaroon-bakery.nix @@ -0,0 +1,31 @@ +{ + pkgs, + lib, + ... +}: +pkgs.python3Packages.buildPythonPackage rec { + pname = "macaroonbakery"; + version = "1.3.1"; + + src = pkgs.python3Packages.fetchPypi { + inherit pname version; + sha256 = "sha256-I/OEFTQaHQShVbTaxnMNOtXzm4bOB7G7E0vdpStIsFM="; + }; + + propagatedBuildInputs = with pkgs.python3Packages; [ + protobuf3 + pymacaroons + pynacl + pyRFC3339 + requests + ]; + + doCheck = false; + + meta = with lib; { + description = "A Python library for working with macaroons."; + homepage = "https://github.com/go-macaroon-bakery/py-macaroon-bakery"; + license = licenses.lgpl3; + maintainers = with maintainers; [jnsgruk]; + }; +} diff --git a/modules/charmcraft/deps/overrides.nix b/modules/charmcraft/deps/overrides.nix new file mode 100644 index 0000000..6463c9e --- /dev/null +++ b/modules/charmcraft/deps/overrides.nix @@ -0,0 +1,23 @@ +{ + pkgs, + lib, + ... +}: +pkgs.python3Packages.buildPythonPackage rec { + pname = "overrides"; + version = "7.3.1"; + + src = pkgs.python3Packages.fetchPypi { + inherit pname version; + sha256 = "sha256-i5fGweFoG3jLyUJLE42IDwgDwiVMXrqr3eV7tsYgk/I="; + }; + + doCheck = false; + + meta = with lib; { + description = "A decorator @override that verifies that a method that should override an inherited method actually does it."; + homepage = "https://github.com/mkorpela/overrides"; + license = licenses.asl20; + maintainers = with maintainers; [jnsgruk]; + }; +} diff --git a/modules/charmcraft/deps/pydantic-yaml.nix b/modules/charmcraft/deps/pydantic-yaml.nix new file mode 100644 index 0000000..3d05885 --- /dev/null +++ b/modules/charmcraft/deps/pydantic-yaml.nix @@ -0,0 +1,44 @@ +{ + pkgs, + lib, + pydantic, + ... +}: let + types-deprecated = pkgs.python3Packages.buildPythonPackage rec { + pname = "types-Deprecated"; + version = "1.2.9"; + + src = pkgs.python3Packages.fetchPypi { + inherit pname version; + sha256 = "sha256-4EzliSlQmGU1npHcw4cgEjJitM1o+iqKkDEtUDkLtvo="; + }; + }; +in + pkgs.python3Packages.buildPythonPackage rec { + pname = "pydantic_yaml"; + version = "0.9.0"; + + src = pkgs.python3Packages.fetchPypi { + inherit pname version; + sha256 = "sha256-Jtldg9Z2j8f4CyJjUNujql3J9SwTBhaVFx6Nnny0z0o="; + }; + + propagatedBuildInputs = with pkgs.python3Packages; + [ + deprecated + semver + ] + ++ [ + pydantic + types-deprecated + ]; + + doCheck = false; + + meta = with lib; { + description = "A small helper library that adds some YAML capabilities to pydantic."; + homepage = "https://github.com/NowanIlfideme/pydantic-yaml"; + license = licenses.mit; + maintainers = with maintainers; [jnsgruk]; + }; + } diff --git a/modules/charmcraft/deps/snap-helpers.nix b/modules/charmcraft/deps/snap-helpers.nix new file mode 100644 index 0000000..90ebfa1 --- /dev/null +++ b/modules/charmcraft/deps/snap-helpers.nix @@ -0,0 +1,28 @@ +{ + pkgs, + lib, + ... +}: +pkgs.python3Packages.buildPythonPackage rec { + pname = "snap-helpers"; + version = "0.3.2"; + + src = pkgs.python3Packages.fetchPypi { + inherit pname version; + sha256 = "sha256-Qd5qOAh71KPkbb1bvdBMWwiLnE3BuDWxVxWu1QOwhfk="; + }; + + propagatedBuildInputs = with pkgs.python3Packages; [ + packaging + pyyaml + ]; + + doCheck = false; + + meta = with lib; { + description = "Interact with snap configuration and properties from inside a snap."; + homepage = "https://github.com/albertodonato/snap-helpers"; + license = licenses.lgpl3; + maintainers = with maintainers; [jnsgruk]; + }; +} diff --git a/modules/charmcraft/remove-cryptography-charmcraft.patch b/modules/charmcraft/remove-cryptography-charmcraft.patch new file mode 100644 index 0000000..dec4f5d --- /dev/null +++ b/modules/charmcraft/remove-cryptography-charmcraft.patch @@ -0,0 +1,12 @@ +diff --git a/setup.py b/setup.py +index ad989e9..163c070 100755 +--- a/setup.py ++++ b/setup.py +@@ -33,7 +33,6 @@ install_requires = [ + "craft-parts", + "craft-providers", + "craft-store", +- "cryptography==3.4", # *1 + "humanize>=2.6.0", + "jsonschema", + "jinja2",