Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

202 lines
5.5 KiB
Nix
Raw Normal View History

2024-04-18 12:36:54 +01:00
{
fetchFromGitHub,
gitMinimal,
2024-04-18 12:36:54 +01:00
glibc,
lib,
makeWrapper,
nix-update-script,
python312Packages,
2024-04-18 12:36:54 +01:00
squashfsTools,
cacert,
2024-04-18 12:36:54 +01:00
stdenv,
writableTmpDirAsHomeHook,
2024-04-18 12:36:54 +01:00
}:
2024-07-24 07:51:43 -07:00
python312Packages.buildPythonApplication rec {
2024-04-18 12:36:54 +01:00
pname = "snapcraft";
2025-07-20 18:50:13 +00:00
version = "8.10.2";
2024-04-18 12:36:54 +01:00
pyproject = true;
src = fetchFromGitHub {
owner = "canonical";
repo = "snapcraft";
tag = version;
2025-07-20 18:50:13 +00:00
hash = "sha256-klG+cT2vXo9v9tIJhJNCeGTiuV5C+oed0Vi9310PnqQ=";
2024-04-18 12:36:54 +01:00
};
patches = [
# We're using a later version of `craft-cli` than expected, which
# adds an extra deprecation warning to the CLI output, meaning that
# an expected error message looks slightly different. This patch corrects
# that by checking for the updated error message and can be dropped in a
# later release of snapcraft.
./esm-test.patch
2024-04-18 12:36:54 +01:00
# Snapcraft is only officially distributed as a snap, as is LXD. The socket
# path for LXD must be adjusted so that it's at the correct location for LXD
# on NixOS. This patch will likely never be accepted upstream.
./lxd-socket-path.patch
# Snapcraft will try to inject itself as a snap *from the host system* into
# the build system. This patch short-circuits that logic and ensures that
# Snapcraft is installed on the build system from the snap store - because
# there is no snapd on NixOS hosts that can be used for the injection. This
# patch will likely never be accepted upstream.
./set-channel-for-nix.patch
# Certain paths (for extensions, schemas) are packaged in the snap by the
# upstream, so the paths are well-known, except here where Snapcraft is
# *not* in a snap, so this patch changes those paths to point to the correct
# place in the Nix store. This patch will likely never be accepted upstream.
./snapcraft-data-dirs.patch
];
postPatch = ''
2025-02-17 09:30:32 +00:00
substituteInPlace snapcraft/__init__.py --replace-fail "dev" "${version}"
2024-04-18 12:36:54 +01:00
substituteInPlace snapcraft_legacy/__init__.py \
--replace-fail '__version__ = _get_version()' '__version__ = "${version}"'
substituteInPlace snapcraft/elf/elf_utils.py \
--replace-fail 'arch_linker_path = Path(arch_config.dynamic_linker)' \
'return str(Path("${glibc}/lib/ld-linux-x86-64.so.2"))'
2024-07-09 13:46:08 +02:00
2025-02-17 09:30:32 +00:00
substituteInPlace pyproject.toml --replace-fail 'gnupg' 'python-gnupg'
2024-04-18 12:36:54 +01:00
'';
nativeBuildInputs = [ makeWrapper ];
2024-04-18 12:36:54 +01:00
dependencies = with python312Packages; [
2024-04-18 12:36:54 +01:00
attrs
catkin-pkg
click
craft-application
craft-archives
craft-cli
craft-grammar
craft-parts
2024-10-04 11:30:24 +01:00
craft-platforms
2024-04-18 12:36:54 +01:00
craft-providers
craft-store
python-debian
2024-04-18 12:36:54 +01:00
docutils
jsonschema
launchpadlib
lazr-restfulclient
lxml
macaroonbakery
mypy-extensions
overrides
packaging
2024-04-18 12:36:54 +01:00
progressbar
pyelftools
pygit2
pylxd
pymacaroons
2024-04-18 12:36:54 +01:00
python-apt
python-gnupg
pyxdg
pyyaml
2024-04-18 12:36:54 +01:00
raven
requests-toolbelt
requests-unixsocket2
2024-04-18 12:36:54 +01:00
simplejson
snap-helpers
tabulate
toml
2024-04-18 12:36:54 +01:00
tinydb
typing-extensions
urllib3
validators
2024-04-18 12:36:54 +01:00
];
build-system = with python312Packages; [ setuptools-scm ];
2024-04-18 12:36:54 +01:00
pythonRelaxDeps = [
"click"
2025-02-11 15:06:20 +00:00
"craft-parts"
2025-02-17 09:30:32 +00:00
"cryptography"
2024-04-18 12:36:54 +01:00
"docutils"
"jsonschema"
"pygit2"
2025-06-13 14:35:49 +01:00
"requests"
2024-04-18 12:36:54 +01:00
"urllib3"
"validators"
2024-04-18 12:36:54 +01:00
];
postInstall = ''
wrapProgram $out/bin/snapcraft --prefix PATH : ${squashfsTools}/bin
'';
preCheck = ''
# _pygit2.GitError: OpenSSL error: failed to load certificates: error:00000000:lib(0)::reason(0)
export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt
'';
2024-07-09 13:46:08 +02:00
nativeCheckInputs =
with python312Packages;
2024-07-09 13:46:08 +02:00
[
pytest-check
pytest-cov-stub
2024-07-09 13:46:08 +02:00
pytest-mock
pytest-subprocess
pytestCheckHook
responses
setuptools
writableTmpDirAsHomeHook
2024-07-09 13:46:08 +02:00
]
++ [
gitMinimal
2024-07-09 13:46:08 +02:00
squashfsTools
];
2024-04-18 12:36:54 +01:00
enabledTestPaths = [ "tests/unit" ];
2024-04-18 12:36:54 +01:00
disabledTests = [
"test_bin_echo"
"test_classic_linter_filter"
"test_classic_linter"
"test_complex_snap_yaml"
"test_core24_try_command"
2024-04-18 12:36:54 +01:00
"test_get_base_configuration_snap_channel"
"test_get_base_configuration_snap_instance_name_default"
"test_get_base_configuration_snap_instance_name_not_running_as_snap"
"test_get_build_commands"
2024-04-18 12:36:54 +01:00
"test_get_extensions_data_dir"
"test_get_os_platform_alternative_formats"
"test_get_os_platform_linux"
"test_get_os_platform_windows"
"test_lifecycle_pack_components_with_output"
"test_lifecycle_pack_components"
"test_lifecycle_write_component_metadata"
"test_parse_info_integrated"
"test_patch_elf"
"test_project_platform_unknown_name"
2024-04-18 12:36:54 +01:00
"test_remote_builder_init"
"test_setup_assets_remote_icon"
"test_snap_command_fallback"
"test_validate_architectures_supported"
"test_validate_architectures_unsupported"
2024-07-09 13:46:08 +02:00
]
++ lib.optionals stdenv.hostPlatform.isAarch64 [ "test_load_project" ];
2024-04-18 12:36:54 +01:00
disabledTestPaths = [
"tests/unit/commands/test_remote.py"
"tests/unit/elf"
"tests/unit/linters/test_classic_linter.py"
"tests/unit/linters/test_library_linter.py"
"tests/unit/parts/test_parts.py"
"tests/unit/services"
];
passthru.updateScript = nix-update-script { };
meta = {
mainProgram = "snapcraft";
description = "Build and publish Snap packages";
homepage = "https://github.com/canonical/snapcraft";
changelog = "https://github.com/canonical/snapcraft/releases/tag/${version}";
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [ jnsgruk ];
platforms = lib.platforms.linux;
};
}