From b355859124a35ba236d7ba7146004f6bfc52469c Mon Sep 17 00:00:00 2001 From: Claudio Matsuoka Date: Mon, 30 May 2022 17:48:36 -0300 Subject: [PATCH] parts: fix base package cutoff When stage packages are installed dependencies should be cut at a threshold given by the base defined in the project. Pass the effective build base to the parts processor so that base package cutoff is performed at the correct threshold. Signed-off-by: Claudio Matsuoka --- snapcraft/parts/lifecycle.py | 1 + snapcraft/parts/parts.py | 2 ++ .../package-cutoff/snap/snapcraft.yaml | 17 ++++++++++++++ tests/spread/core22/snap-creation/task.yaml | 22 +++++++++++++++++++ tests/unit/parts/test_parts.py | 9 ++++++++ 5 files changed, 51 insertions(+) create mode 100644 tests/spread/core22/snap-creation/package-cutoff/snap/snapcraft.yaml create mode 100644 tests/spread/core22/snap-creation/task.yaml diff --git a/snapcraft/parts/lifecycle.py b/snapcraft/parts/lifecycle.py index 1148d5e20f..02590087ca 100644 --- a/snapcraft/parts/lifecycle.py +++ b/snapcraft/parts/lifecycle.py @@ -201,6 +201,7 @@ def _run_command( project.parts, work_dir=work_dir, assets_dir=assets_dir, + base=project.get_effective_base(), package_repositories=project.package_repositories, parallel_build_count=parallel_build_count, part_names=part_names, diff --git a/snapcraft/parts/parts.py b/snapcraft/parts/parts.py index 059f18ea2c..934ec02064 100644 --- a/snapcraft/parts/parts.py +++ b/snapcraft/parts/parts.py @@ -55,6 +55,7 @@ def __init__( *, work_dir: pathlib.Path, assets_dir: pathlib.Path, + base: str, package_repositories: List[Dict[str, Any]], parallel_build_count: int, part_names: Optional[List[str]], @@ -87,6 +88,7 @@ def __init__( application_name="snapcraft", work_dir=work_dir, cache_dir=cache_dir, + base=base, ignore_local_sources=["*.snap"], extra_build_packages=extra_build_packages, extra_build_snaps=extra_build_snaps, diff --git a/tests/spread/core22/snap-creation/package-cutoff/snap/snapcraft.yaml b/tests/spread/core22/snap-creation/package-cutoff/snap/snapcraft.yaml new file mode 100644 index 0000000000..6068e88b11 --- /dev/null +++ b/tests/spread/core22/snap-creation/package-cutoff/snap/snapcraft.yaml @@ -0,0 +1,17 @@ +name: package-cutoff +base: core22 +version: '1.0' +summary: 'test' +description: test +grade: devel +confinement: devmode + +parts: + part-1: + source: . + plugin: nil + stage-packages: + - libpng16-16 + part-2: + source: . + plugin: python diff --git a/tests/spread/core22/snap-creation/task.yaml b/tests/spread/core22/snap-creation/task.yaml new file mode 100644 index 0000000000..8e426908a5 --- /dev/null +++ b/tests/spread/core22/snap-creation/task.yaml @@ -0,0 +1,22 @@ +summary: Test base package cutoff + +environment: + SNAP/package_cutoff: package-cutoff + +prepare: | + #shellcheck source=tests/spread/tools/snapcraft-yaml.sh + . "$TOOLS_DIR/snapcraft-yaml.sh" + # set_base "$SNAP/snap/snapcraft.yaml" + +restore: | + cd "$SNAP" + rm -f ./*.snap + rm -Rf work + + #shellcheck source=tests/spread/tools/snapcraft-yaml.sh + . "$TOOLS_DIR/snapcraft-yaml.sh" + restore_yaml "snap/snapcraft.yaml" + +execute: | + cd "$SNAP" + snapcraft --verbose diff --git a/tests/unit/parts/test_parts.py b/tests/unit/parts/test_parts.py index 46a2e4206a..605d09fef8 100644 --- a/tests/unit/parts/test_parts.py +++ b/tests/unit/parts/test_parts.py @@ -39,6 +39,7 @@ def test_parts_lifecycle_run(mocker, parts_data, step_name, new_dir, emitter): parts_data, work_dir=new_dir, assets_dir=new_dir, + base="core22", parallel_build_count=8, part_names=[], package_repositories=[], @@ -57,6 +58,7 @@ def test_parts_lifecycle_run(mocker, parts_data, step_name, new_dir, emitter): application_name="snapcraft", work_dir=ANY, cache_dir=ANY, + base="core22", ignore_local_sources=["*.snap"], extra_build_packages=[], extra_build_snaps=["core22"], @@ -74,6 +76,7 @@ def test_parts_lifecycle_run_bad_step(parts_data, new_dir): parts_data, work_dir=new_dir, assets_dir=new_dir, + base="core22", parallel_build_count=8, part_names=[], package_repositories=[], @@ -92,6 +95,7 @@ def test_parts_lifecycle_run_internal_error(parts_data, new_dir, mocker): parts_data, work_dir=new_dir, assets_dir=new_dir, + base="core22", parallel_build_count=8, part_names=[], package_repositories=[], @@ -111,6 +115,7 @@ def test_parts_lifecycle_run_parts_error(new_dir): {"p1": {"plugin": "dump", "source": "foo"}}, work_dir=new_dir, assets_dir=new_dir, + base="core22", parallel_build_count=8, part_names=[], package_repositories=[], @@ -131,6 +136,7 @@ def test_parts_lifecycle_clean(parts_data, new_dir, emitter): parts_data, work_dir=new_dir, assets_dir=new_dir, + base="core22", parallel_build_count=8, part_names=[], package_repositories=[], @@ -148,6 +154,7 @@ def test_parts_lifecycle_clean_parts(parts_data, new_dir, emitter): parts_data, work_dir=new_dir, assets_dir=new_dir, + base="core22", parallel_build_count=8, part_names=[], package_repositories=[], @@ -170,6 +177,7 @@ def test_parts_lifecycle_initialize_with_package_repositories( parts_data, work_dir=new_dir, assets_dir=new_dir, + base="core22", parallel_build_count=8, part_names=[], package_repositories=[ @@ -190,6 +198,7 @@ def test_parts_lifecycle_initialize_with_package_repositories( application_name="snapcraft", work_dir=ANY, cache_dir=ANY, + base="core22", ignore_local_sources=["*.snap"], extra_build_packages=["gnupg", "dirmngr"], extra_build_snaps=["core22"],