From d35d72a10d371c52c2efa476790525215ba2e8d7 Mon Sep 17 00:00:00 2001 From: "Ian H. Pittwood" Date: Tue, 11 Aug 2026 09:45:37 -0600 Subject: [PATCH 1/2] feat: carry --metadata-file through the bake build strategy python-on-whales 0.81.0 added metadata_file support to docker.buildx.bake(), matching the existing docker.build() support. Wire bakery build --metadata-file through the --strategy bake path: - BakePlan.build() now accepts metadata_file and forwards it to `docker buildx bake --metadata-file`. - BakeryConfig.build_targets()'s BAKE branch passes metadata_file through to BakePlan.build() and, on success, loads the resulting file back into each target's build_metadata (buildx bake writes one entry per target keyed by the same UID used in the bake plan, so no merge step is needed, unlike the BUILD strategy). - Bump python-on-whales lower bound to >=0.81.0. Refs #728 --- posit-bakery/posit_bakery/config/config.py | 3 ++ posit-bakery/posit_bakery/image/bake/bake.py | 9 +++- posit-bakery/pyproject.toml | 2 +- posit-bakery/test/config/test_config.py | 45 ++++++++++++++++++++ posit-bakery/test/image/bake/test_bake.py | 22 ++++++++++ posit-bakery/uv.lock | 2 +- 6 files changed, 80 insertions(+), 3 deletions(-) diff --git a/posit-bakery/posit_bakery/config/config.py b/posit-bakery/posit_bakery/config/config.py index 49d8445e1..8c105b182 100644 --- a/posit-bakery/posit_bakery/config/config.py +++ b/posit-bakery/posit_bakery/config/config.py @@ -1197,10 +1197,13 @@ def build_targets( clean_bakefile=self.settings.clean_temporary, platforms=platforms, set_opts=set_opts, + metadata_file=metadata_file, ), retry=retry, label="bake plan", ) + if metadata_file is not None: + self.load_build_metadata_from_file(metadata_file) elif strategy == ImageBuildStrategy.BUILD: sink = PrefixedLogSink() # Mirrors ImageTarget.build()'s own quiet check: streaming is pointless (and diff --git a/posit-bakery/posit_bakery/image/bake/bake.py b/posit-bakery/posit_bakery/image/bake/bake.py index 18c464e63..ef308d1b4 100644 --- a/posit-bakery/posit_bakery/image/bake/bake.py +++ b/posit-bakery/posit_bakery/image/bake/bake.py @@ -264,8 +264,14 @@ def build( platforms: list[str] | None = None, set_opts: dict[str, Any] | None = None, clean_bakefile: bool = True, + metadata_file: Path | None = None, ): - """Run the bake plan to build all targets.""" + """Run the bake plan to build all targets. + + :param metadata_file: Optional path to write JSON build metadata to. Passed through to + `docker buildx bake --metadata-file`, which writes one entry per bake target, keyed + by the same target name used in the bake plan (i.e. the image target UID). + """ original_cwd = os.getcwd() os.chdir(self.context) @@ -289,6 +295,7 @@ def build( pull=pull, cache=cache, set=_set, + metadata_file=metadata_file, progress=False if SETTINGS.log_level >= logging.ERROR else "auto", ) if clean_bakefile: diff --git a/posit-bakery/pyproject.toml b/posit-bakery/pyproject.toml index f2cc4083a..515a6d9a4 100644 --- a/posit-bakery/pyproject.toml +++ b/posit-bakery/pyproject.toml @@ -36,7 +36,7 @@ dependencies = [ "rich>=14.1,<15.1", "gitpython~=3.1.50", "pydantic[email]>=2.0,<3.0", - "python-on-whales>=0.79.0,<0.82.0", + "python-on-whales>=0.81.0,<0.82.0", "ruamel-yaml>=0.18.14,<0.20.0", "requests>=2.32.5,<3.0.0", "requests-cache>=1.2.1,<2.0.0", diff --git a/posit-bakery/test/config/test_config.py b/posit-bakery/test/config/test_config.py index 1c0adb148..424eee59b 100644 --- a/posit-bakery/test/config/test_config.py +++ b/posit-bakery/test/config/test_config.py @@ -2547,6 +2547,51 @@ def fake_build(self, **kwargs): mock_time_sleep.assert_not_called() +class TestBuildTargetsBakeStrategy: + """Tests for BakeryConfig.build_targets() with ImageBuildStrategy.BAKE.""" + + def test_metadata_file_forwarded_to_bake_plan(self, get_config_obj, mocker): + """metadata_file must be forwarded to BakePlan.build() so it reaches + `docker buildx bake --metadata-file`.""" + config = get_config_obj("basic") + metadata_path = Path("/tmp/does-not-matter.json") + mock_build = mocker.patch("posit_bakery.image.bake.BakePlan.build") + mocker.patch.object(BakeryConfig, "load_build_metadata_from_file") + + config.build_targets(strategy=ImageBuildStrategy.BAKE, metadata_file=metadata_path) + + mock_build.assert_called_once() + assert mock_build.call_args.kwargs["metadata_file"] == metadata_path + + def test_no_metadata_file_by_default(self, get_config_obj, mocker): + """When metadata_file is not given, None must be forwarded and no metadata load attempted.""" + config = get_config_obj("basic") + mock_build = mocker.patch("posit_bakery.image.bake.BakePlan.build") + mock_load = mocker.patch.object(BakeryConfig, "load_build_metadata_from_file") + + config.build_targets(strategy=ImageBuildStrategy.BAKE) + + assert mock_build.call_args.kwargs["metadata_file"] is None + mock_load.assert_not_called() + + def test_metadata_loaded_back_into_targets(self, get_config_obj, mocker, tmp_path): + """After a successful bake with a metadata_file, the resulting file (written by + `docker buildx bake --metadata-file`, keyed by bake target/UID) must be loaded back + into each target's build_metadata, mirroring the BUILD strategy's behavior.""" + config = get_config_obj("basic") + metadata_path = tmp_path / "metadata.json" + + expected_metadata_path = CONFIG_TESTDATA_DIR / "build_metadata" / "expected.json" + shutil.copyfile(expected_metadata_path, metadata_path) + + mocker.patch("posit_bakery.image.bake.BakePlan.build") + + config.build_targets(strategy=ImageBuildStrategy.BAKE, metadata_file=metadata_path) + + for target in config.targets: + assert len(target.build_metadata) == 1 + + class TestApplyDevSpecReleaseBranch: """release_branch is set from YYYY.MM when version is set, or directly from spec.""" diff --git a/posit-bakery/test/image/bake/test_bake.py b/posit-bakery/test/image/bake/test_bake.py index 351d57beb..a4d2115a1 100644 --- a/posit-bakery/test/image/bake/test_bake.py +++ b/posit-bakery/test/image/bake/test_bake.py @@ -329,6 +329,7 @@ def test_build_args( "pull": False, "cache": True, "set": {}, + "metadata_file": None, "progress": "auto", } @@ -336,6 +337,27 @@ def test_build_args( plan.build() mock_bake.assert_called_once_with(**expected_build_args) + @pytest.mark.parametrize("suite", SUCCESS_SUITES) + def test_build_args_metadata_file( + self, + patch_os_getcwd, + patch_os_chdir, + patch_bakeplan_write, + patch_bakeplan_remove, + suite, + get_config_obj, + tmp_path, + ): + """Test that a given metadata_file is forwarded to `docker buildx bake --metadata-file`.""" + config_obj = get_config_obj(suite) + + plan = BakePlan.from_image_targets(config_obj.base_path, config_obj.targets) + metadata_file = tmp_path / "metadata.json" + + with patch("python_on_whales.docker.buildx.bake") as mock_bake: + plan.build(metadata_file=metadata_file) + assert mock_bake.call_args.kwargs["metadata_file"] == metadata_file + patch_os_getcwd.assert_called_once() patch_os_chdir.assert_has_calls([call(plan.context), call("/cwd")]) patch_bakeplan_write.assert_called_once() diff --git a/posit-bakery/uv.lock b/posit-bakery/uv.lock index 0a6eea56e..238968c2d 100644 --- a/posit-bakery/uv.lock +++ b/posit-bakery/uv.lock @@ -1927,7 +1927,7 @@ requires-dist = [ { name = "packaging", specifier = ">=25.0,<27.0" }, { name = "pydantic", extras = ["email"], specifier = ">=2.0,<3.0" }, { name = "pygithub", specifier = ">=2.8.1,<3.0.0" }, - { name = "python-on-whales", specifier = ">=0.79.0,<0.82.0" }, + { name = "python-on-whales", specifier = ">=0.81.0,<0.82.0" }, { name = "requests", specifier = ">=2.32.5,<3.0.0" }, { name = "requests-cache", specifier = ">=1.2.1,<2.0.0" }, { name = "rich", specifier = ">=14.1,<15.1" }, From 98572d44af36736d1087862c97553676946733d6 Mon Sep 17 00:00:00 2001 From: "Ian H. Pittwood" Date: Tue, 11 Aug 2026 11:23:32 -0600 Subject: [PATCH 2/2] test: pin the bake/build metadata file contract with real fixtures The `bake` and `build` strategies produce metadata files from entirely separate code paths -- raw `docker buildx bake --metadata-file` passthrough vs. `BakeryConfig._merge_sequential_build_metadata_files()` -- yet `bakery dgoss run --metadata-file` and `bakery ci publish` consume both through the same loader. Nothing pinned that equivalence, so a divergence would surface as a broken publish in CI rather than a test failure. Adds the two real metadata files captured while comparing the strategies (package-manager 2026.06.0, 6 targets, linux/amd64, --push with a temp registry) as fixtures, and a parametrized test class asserting the contract consumers depend on: UID-keyed top level, resolvable `@sha256:...` image refs, `platform == linux/amd64`, `created_at` resolving from the descriptor annotation rather than the `datetime.now()` fallback, and matching UID/tag sets across the two producers. Also documents the multi-platform degradation: one invocation building several platforms yields an index descriptor with no platform, so `platform` is None and dgoss/merge lose per-platform selection. Closes #740 --- .../test/image/test_image_metadata.py | 118 +++++ .../testdata/strategy-bake-metadata.json | 452 ++++++++++++++++++ .../testdata/strategy-build-metadata.json | 440 +++++++++++++++++ 3 files changed, 1010 insertions(+) create mode 100644 posit-bakery/test/image/testdata/strategy-bake-metadata.json create mode 100644 posit-bakery/test/image/testdata/strategy-build-metadata.json diff --git a/posit-bakery/test/image/test_image_metadata.py b/posit-bakery/test/image/test_image_metadata.py index 46b697a2f..38e70b67d 100644 --- a/posit-bakery/test/image/test_image_metadata.py +++ b/posit-bakery/test/image/test_image_metadata.py @@ -1,5 +1,6 @@ import datetime import json +import re import pytest @@ -194,3 +195,120 @@ def test_repr(self, image_testdata_path): repr_str = repr(metadata_file) assert "MetadataFile" in repr_str assert str(metadata_filepath.absolute()) in repr_str + + +STRATEGY_METADATA_FIXTURES = ("strategy-bake-metadata.json", "strategy-build-metadata.json") +"""Real metadata files captured from both `bakery build` strategies for the same targets. + +Both files were produced from the same `images-package-manager` checkout (commit +`adec3d9184f76c6e7725da5f28bdb9410010833c`) for `package-manager` 2026.06.0 --- 6 targets, +Standard/Minimal x Ubuntu 22.04/24.04/26.04 --- with: + + bakery build --strategy bake --image-name '^package-manager$' --image-platform linux/amd64 \\ + --temp-registry ghcr.io/posit-dev --push --metadata-file ./bake-amd64-metadata.json + bakery build --strategy build --image-name '^package-manager$' --image-platform linux/amd64 \\ + --temp-registry ghcr.io/posit-dev --push --metadata-file ./build-amd64-metadata.json + +They are committed verbatim (only renamed) so the two producers can be compared as-shipped: +`--strategy bake` output is raw `docker buildx bake --metadata-file` passthrough, while +`--strategy build` output is synthesized by +`BakeryConfig._merge_sequential_build_metadata_files()`. Regenerate with the commands above +if the metadata contract intentionally changes. +""" + + +class TestStrategyMetadataCompatibility: + """Pin the metadata contract shared by `--strategy bake` and `--strategy build`. + + `bakery dgoss run --metadata-file` and `bakery ci publish` consume metadata files through + `MetadataFile.load()` -> `get_target_metadata_by_uid()` -> `image_ref`/`platform`/ + `created_at`, and must keep working regardless of which strategy produced the file. The two + shapes come from entirely separate code paths, so without these assertions they can drift + silently and only fail in CI at publish time. + """ + + @pytest.mark.parametrize("fixture_name", STRATEGY_METADATA_FIXTURES) + def test_fixture_loads(self, image_testdata_path, fixture_name): + """Both real fixtures validate through the same loader consumers use.""" + metadata_file = MetadataFile.load(image_testdata_path / fixture_name) + assert len(metadata_file.metadata_map.root) == 6 + + @pytest.mark.parametrize("fixture_name", STRATEGY_METADATA_FIXTURES) + def test_uid_keys_are_target_uids(self, image_testdata_path, fixture_name): + """Top-level keys are image target UIDs, which is how consumers look entries up.""" + metadata_file = MetadataFile.load(image_testdata_path / fixture_name) + assert sorted(metadata_file.metadata_map.root) == [ + "package-manager-2026-06-0-minimal-ubuntu-22-04", + "package-manager-2026-06-0-minimal-ubuntu-24-04", + "package-manager-2026-06-0-minimal-ubuntu-26-04", + "package-manager-2026-06-0-standard-ubuntu-22-04", + "package-manager-2026-06-0-standard-ubuntu-24-04", + "package-manager-2026-06-0-standard-ubuntu-26-04", + ] + + @pytest.mark.parametrize("fixture_name", STRATEGY_METADATA_FIXTURES) + def test_every_entry_has_resolvable_image_ref(self, image_testdata_path, fixture_name): + """`ImageTarget.get_merge_sources()` emits nothing for entries without an image ref.""" + metadata_file = MetadataFile.load(image_testdata_path / fixture_name) + for uid, metadata in metadata_file.metadata_map.root.items(): + assert metadata.image_ref is not None, uid + assert re.fullmatch(r"[^@]+@sha256:[0-9a-f]{64}", metadata.image_ref), uid + assert metadata.image_ref.endswith(f"@{metadata.container_image_digest}"), uid + + @pytest.mark.parametrize("fixture_name", STRATEGY_METADATA_FIXTURES) + def test_every_entry_reports_platform(self, image_testdata_path, fixture_name): + """Platform drives dgoss reference selection and per-platform merge sources.""" + metadata_file = MetadataFile.load(image_testdata_path / fixture_name) + for uid, metadata in metadata_file.metadata_map.root.items(): + assert metadata.platform == "linux/amd64", uid + + @pytest.mark.parametrize("fixture_name", STRATEGY_METADATA_FIXTURES) + def test_created_at_resolves_from_descriptor_annotation(self, image_testdata_path, fixture_name): + """`created_at` must come from the descriptor, not the `datetime.now()` fallback. + + The fallback silently makes every entry look freshly built, which breaks the + most-recent-wins ordering in `image_reference()` and `get_merge_sources()`. + """ + metadata_file = MetadataFile.load(image_testdata_path / fixture_name) + for uid, metadata in metadata_file.metadata_map.root.items(): + annotations = metadata.container_image_descriptor.annotations + expected = datetime.datetime.fromisoformat(annotations["org.opencontainers.image.created"]) + assert metadata.created_at == expected, uid + + def test_strategies_agree_on_uids_and_primary_tags(self, image_testdata_path): + """The two strategies are interchangeable for the fields consumers actually read.""" + bake, build = (MetadataFile.load(image_testdata_path / name) for name in STRATEGY_METADATA_FIXTURES) + + assert bake.metadata_map.root.keys() == build.metadata_map.root.keys() + for uid, bake_metadata in bake.metadata_map.root.items(): + build_metadata = build.get_target_metadata_by_uid(uid) + assert build_metadata is not None, uid + # Digests differ (different builds); the tag set and primary tag must not. + assert bake_metadata.image_tags == build_metadata.image_tags, uid + assert bake_metadata.image_tags[0] == build_metadata.image_tags[0], uid + assert bake_metadata.platform == build_metadata.platform, uid + + def test_multiplatform_entry_has_no_platform(self): + """Document the degradation when one invocation builds several platforms. + + A multi-platform build emits a single index descriptor with no `platform`, for both + strategies. `platform` is then None, so `ImageTarget.image_reference(platform=...)` + falls back to a tag reference and `get_merge_sources()` collapses to one source. This + is why CI must keep one platform per `bakery build` invocation. + """ + metadata = BuildMetadata.model_validate( + { + "image.name": "ghcr.io/posit-dev/package-manager/tmp", + "containerimage.digest": "sha256:" + "ab" * 32, + "containerimage.descriptor": { + "mediaType": "application/vnd.oci.image.index.v1+json", + "digest": "sha256:" + "ab" * 32, + "size": 1234, + "annotations": {"org.opencontainers.image.created": "2026-08-11T15:50:15Z"}, + # No platform: an index covers several platforms. + }, + } + ) + + assert metadata.platform is None + assert metadata.image_ref == "ghcr.io/posit-dev/package-manager/tmp@sha256:" + "ab" * 32 diff --git a/posit-bakery/test/image/testdata/strategy-bake-metadata.json b/posit-bakery/test/image/testdata/strategy-bake-metadata.json new file mode 100644 index 000000000..185be07d4 --- /dev/null +++ b/posit-bakery/test/image/testdata/strategy-bake-metadata.json @@ -0,0 +1,452 @@ +{ + "package-manager-2026-06-0-minimal-ubuntu-22-04": { + "buildx.build.provenance": { + "builder": { + "id": "" + }, + "buildType": "https://mobyproject.org/buildkit@v1", + "materials": [ + { + "uri": "pkg:docker/ubuntu@22.04?platform=linux%2Famd64", + "digest": { + "sha256": "3b06811b2afd352be909dd088a004166d665dc76d38b13eada33522a9d915c6f" + } + } + ], + "invocation": { + "configSource": { + "entryPoint": "Containerfile.ubuntu2204.min" + }, + "parameters": { + "frontend": "dockerfile.v0", + "args": { + "label:co.posit.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:co.posit.image.documentation": "https://docs.posit.co/rspm/", + "label:co.posit.image.maintainer": "Posit Docker Team \u003cdocker@posit.co\u003e", + "label:co.posit.image.name": "Posit Package Manager", + "label:co.posit.image.os": "Ubuntu 22.04", + "label:co.posit.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:co.posit.image.variant": "Minimal", + "label:co.posit.image.version": "2026.06.0", + "label:org.opencontainers.image.authors": "Ben Schwedler \u003cben@posit.co\u003e, Ian H. Pittwood \u003cian.pittwood@posit.co\u003e", + "label:org.opencontainers.image.created": "2026-08-11T09:50:14.734995", + "label:org.opencontainers.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:org.opencontainers.image.documentation": "https://docs.posit.co/rspm/", + "label:org.opencontainers.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:org.opencontainers.image.source": "https://github.com/posit-dev/images-package-manager", + "label:org.opencontainers.image.title": "Posit Package Manager", + "label:org.opencontainers.image.vendor": "Posit Software, PBC", + "label:org.opencontainers.image.version": "2026.06.0", + "local-sessionid:context": "903o5aehurpm6f343ej8u2y6n", + "local-sessionid:dockerfile": "903o5aehurpm6f343ej8u2y6n" + }, + "locals": [ + { + "name": "context" + }, + { + "name": "dockerfile" + } + ] + }, + "environment": { + "platform": "linux/amd64" + } + } + }, + "buildx.build.ref": "posit-builder/posit-builder0/bq6nnvbsdghqiogcyp3jpqh3k", + "containerimage.descriptor": { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:2bad1f63ff8314ecf942795f10f82baf8679b2830c61497d200dcbf6efa8547d", + "size": 1999, + "annotations": { + "org.opencontainers.image.created": "2026-08-11T15:50:54Z" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + "containerimage.digest": "sha256:2bad1f63ff8314ecf942795f10f82baf8679b2830c61497d200dcbf6efa8547d", + "image.name": "docker.io/posit/package-manager:2026.06.0-ubuntu-22.04-min,docker.io/posit/package-manager:ubuntu-22.04-min,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-22.04-min,ghcr.io/posit-dev/package-manager:ubuntu-22.04-min" + }, + "package-manager-2026-06-0-minimal-ubuntu-24-04": { + "buildx.build.provenance": { + "builder": { + "id": "" + }, + "buildType": "https://mobyproject.org/buildkit@v1", + "materials": [ + { + "uri": "pkg:docker/ubuntu@24.04?platform=linux%2Famd64", + "digest": { + "sha256": "561618e2c15bf2397621dd04f96926663a3b5616c189cf7e38db7e82f5c538ea" + } + } + ], + "invocation": { + "configSource": { + "entryPoint": "Containerfile.ubuntu2404.min" + }, + "parameters": { + "frontend": "dockerfile.v0", + "args": { + "label:co.posit.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:co.posit.image.documentation": "https://docs.posit.co/rspm/", + "label:co.posit.image.maintainer": "Posit Docker Team \u003cdocker@posit.co\u003e", + "label:co.posit.image.name": "Posit Package Manager", + "label:co.posit.image.os": "Ubuntu 24.04", + "label:co.posit.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:co.posit.image.variant": "Minimal", + "label:co.posit.image.version": "2026.06.0", + "label:org.opencontainers.image.authors": "Ben Schwedler \u003cben@posit.co\u003e, Ian H. Pittwood \u003cian.pittwood@posit.co\u003e", + "label:org.opencontainers.image.created": "2026-08-11T09:50:14.746569", + "label:org.opencontainers.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:org.opencontainers.image.documentation": "https://docs.posit.co/rspm/", + "label:org.opencontainers.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:org.opencontainers.image.source": "https://github.com/posit-dev/images-package-manager", + "label:org.opencontainers.image.title": "Posit Package Manager", + "label:org.opencontainers.image.vendor": "Posit Software, PBC", + "label:org.opencontainers.image.version": "2026.06.0", + "local-sessionid:context": "903o5aehurpm6f343ej8u2y6n", + "local-sessionid:dockerfile": "903o5aehurpm6f343ej8u2y6n" + }, + "locals": [ + { + "name": "context" + }, + { + "name": "dockerfile" + } + ] + }, + "environment": { + "platform": "linux/amd64" + } + } + }, + "buildx.build.ref": "posit-builder/posit-builder0/37sroy3mvn84qiuh37m3asepz", + "containerimage.descriptor": { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:796252c4f045f13fc99f235a3e38216518fcbf54def130ab41689749a9cf3bfd", + "size": 1999, + "annotations": { + "org.opencontainers.image.created": "2026-08-11T15:50:30Z" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + "containerimage.digest": "sha256:796252c4f045f13fc99f235a3e38216518fcbf54def130ab41689749a9cf3bfd", + "image.name": "docker.io/posit/package-manager:2026.06.0-min,docker.io/posit/package-manager:2026.06.0-ubuntu-24.04-min,docker.io/posit/package-manager:min,docker.io/posit/package-manager:ubuntu-24.04-min,ghcr.io/posit-dev/package-manager:2026.06.0-min,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-24.04-min,ghcr.io/posit-dev/package-manager:min,ghcr.io/posit-dev/package-manager:ubuntu-24.04-min" + }, + "package-manager-2026-06-0-minimal-ubuntu-26-04": { + "buildx.build.provenance": { + "builder": { + "id": "" + }, + "buildType": "https://mobyproject.org/buildkit@v1", + "materials": [ + { + "uri": "pkg:docker/ubuntu@26.04?platform=linux%2Famd64", + "digest": { + "sha256": "678c6550cc43645e08669028bc177f50be4e7c5b8cca677067b1914d4afc7a03" + } + } + ], + "invocation": { + "configSource": { + "entryPoint": "Containerfile.ubuntu2604.min" + }, + "parameters": { + "frontend": "dockerfile.v0", + "args": { + "label:co.posit.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:co.posit.image.documentation": "https://docs.posit.co/rspm/", + "label:co.posit.image.maintainer": "Posit Docker Team \u003cdocker@posit.co\u003e", + "label:co.posit.image.name": "Posit Package Manager", + "label:co.posit.image.os": "Ubuntu 26.04", + "label:co.posit.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:co.posit.image.variant": "Minimal", + "label:co.posit.image.version": "2026.06.0", + "label:org.opencontainers.image.authors": "Ben Schwedler \u003cben@posit.co\u003e, Ian H. Pittwood \u003cian.pittwood@posit.co\u003e", + "label:org.opencontainers.image.created": "2026-08-11T09:50:14.748163", + "label:org.opencontainers.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:org.opencontainers.image.documentation": "https://docs.posit.co/rspm/", + "label:org.opencontainers.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:org.opencontainers.image.source": "https://github.com/posit-dev/images-package-manager", + "label:org.opencontainers.image.title": "Posit Package Manager", + "label:org.opencontainers.image.vendor": "Posit Software, PBC", + "label:org.opencontainers.image.version": "2026.06.0", + "local-sessionid:context": "903o5aehurpm6f343ej8u2y6n", + "local-sessionid:dockerfile": "903o5aehurpm6f343ej8u2y6n" + }, + "locals": [ + { + "name": "context" + }, + { + "name": "dockerfile" + } + ] + }, + "environment": { + "platform": "linux/amd64" + } + } + }, + "buildx.build.ref": "posit-builder/posit-builder0/q8iekrb2nau3o0ln4a5agc2oi", + "containerimage.descriptor": { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:643b4b1c3192acbe810ac31401c67536445d55731100c6e0e36c73ccec04d05c", + "size": 2189, + "annotations": { + "org.opencontainers.image.created": "2026-08-11T15:50:33Z" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + "containerimage.digest": "sha256:643b4b1c3192acbe810ac31401c67536445d55731100c6e0e36c73ccec04d05c", + "image.name": "docker.io/posit/package-manager:2026.06.0-ubuntu-26.04-min,docker.io/posit/package-manager:ubuntu-26.04-min,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-26.04-min,ghcr.io/posit-dev/package-manager:ubuntu-26.04-min" + }, + "package-manager-2026-06-0-standard-ubuntu-22-04": { + "buildx.build.provenance": { + "builder": { + "id": "" + }, + "buildType": "https://mobyproject.org/buildkit@v1", + "materials": [ + { + "uri": "pkg:docker/ubuntu@22.04?platform=linux%2Famd64", + "digest": { + "sha256": "3b06811b2afd352be909dd088a004166d665dc76d38b13eada33522a9d915c6f" + } + }, + { + "uri": "pkg:docker/ghcr.io/astral-sh/uv@debian-slim?platform=linux%2Famd64", + "digest": { + "sha256": "c50603599cfe995c7c736211b163305d9ee4b4947f4fdcb53f0834a391e79da1" + } + } + ], + "invocation": { + "configSource": { + "entryPoint": "Containerfile.ubuntu2204.std" + }, + "parameters": { + "frontend": "dockerfile.v0", + "args": { + "label:co.posit.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:co.posit.image.documentation": "https://docs.posit.co/rspm/", + "label:co.posit.image.maintainer": "Posit Docker Team \u003cdocker@posit.co\u003e", + "label:co.posit.image.name": "Posit Package Manager", + "label:co.posit.image.os": "Ubuntu 22.04", + "label:co.posit.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:co.posit.image.tools.R": "4.6.1", + "label:co.posit.image.tools.python": "3.14.6", + "label:co.posit.image.variant": "Standard", + "label:co.posit.image.version": "2026.06.0", + "label:org.opencontainers.image.authors": "Ben Schwedler \u003cben@posit.co\u003e, Ian H. Pittwood \u003cian.pittwood@posit.co\u003e", + "label:org.opencontainers.image.created": "2026-08-11T09:50:14.751025", + "label:org.opencontainers.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:org.opencontainers.image.documentation": "https://docs.posit.co/rspm/", + "label:org.opencontainers.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:org.opencontainers.image.source": "https://github.com/posit-dev/images-package-manager", + "label:org.opencontainers.image.title": "Posit Package Manager", + "label:org.opencontainers.image.vendor": "Posit Software, PBC", + "label:org.opencontainers.image.version": "2026.06.0", + "local-sessionid:context": "903o5aehurpm6f343ej8u2y6n", + "local-sessionid:dockerfile": "903o5aehurpm6f343ej8u2y6n" + }, + "locals": [ + { + "name": "context" + }, + { + "name": "dockerfile" + } + ] + }, + "environment": { + "platform": "linux/amd64" + } + } + }, + "buildx.build.ref": "posit-builder/posit-builder0/46jdsck1tswxbyodw6507q90u", + "containerimage.descriptor": { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:6f0e9ab5cc14b360e8ed5656425b6f8b01a22671cf2a0ca40aec134cb4aad3b8", + "size": 2766, + "annotations": { + "org.opencontainers.image.created": "2026-08-11T15:51:21Z" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + "containerimage.digest": "sha256:6f0e9ab5cc14b360e8ed5656425b6f8b01a22671cf2a0ca40aec134cb4aad3b8", + "image.name": "docker.io/posit/package-manager:2026.06.0-ubuntu-22.04,docker.io/posit/package-manager:2026.06.0-ubuntu-22.04-std,docker.io/posit/package-manager:ubuntu-22.04,docker.io/posit/package-manager:ubuntu-22.04-std,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-22.04,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-22.04-std,ghcr.io/posit-dev/package-manager:ubuntu-22.04,ghcr.io/posit-dev/package-manager:ubuntu-22.04-std" + }, + "package-manager-2026-06-0-standard-ubuntu-24-04": { + "buildx.build.provenance": { + "builder": { + "id": "" + }, + "buildType": "https://mobyproject.org/buildkit@v1", + "materials": [ + { + "uri": "pkg:docker/ubuntu@24.04?platform=linux%2Famd64", + "digest": { + "sha256": "561618e2c15bf2397621dd04f96926663a3b5616c189cf7e38db7e82f5c538ea" + } + }, + { + "uri": "pkg:docker/ghcr.io/astral-sh/uv@debian-slim?platform=linux%2Famd64", + "digest": { + "sha256": "c50603599cfe995c7c736211b163305d9ee4b4947f4fdcb53f0834a391e79da1" + } + } + ], + "invocation": { + "configSource": { + "entryPoint": "Containerfile.ubuntu2404.std" + }, + "parameters": { + "frontend": "dockerfile.v0", + "args": { + "label:co.posit.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:co.posit.image.documentation": "https://docs.posit.co/rspm/", + "label:co.posit.image.maintainer": "Posit Docker Team \u003cdocker@posit.co\u003e", + "label:co.posit.image.name": "Posit Package Manager", + "label:co.posit.image.os": "Ubuntu 24.04", + "label:co.posit.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:co.posit.image.tools.R": "4.6.1", + "label:co.posit.image.tools.python": "3.14.6", + "label:co.posit.image.variant": "Standard", + "label:co.posit.image.version": "2026.06.0", + "label:org.opencontainers.image.authors": "Ben Schwedler \u003cben@posit.co\u003e, Ian H. Pittwood \u003cian.pittwood@posit.co\u003e", + "label:org.opencontainers.image.created": "2026-08-11T09:50:14.756056", + "label:org.opencontainers.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:org.opencontainers.image.documentation": "https://docs.posit.co/rspm/", + "label:org.opencontainers.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:org.opencontainers.image.source": "https://github.com/posit-dev/images-package-manager", + "label:org.opencontainers.image.title": "Posit Package Manager", + "label:org.opencontainers.image.vendor": "Posit Software, PBC", + "label:org.opencontainers.image.version": "2026.06.0", + "local-sessionid:context": "903o5aehurpm6f343ej8u2y6n", + "local-sessionid:dockerfile": "903o5aehurpm6f343ej8u2y6n" + }, + "locals": [ + { + "name": "context" + }, + { + "name": "dockerfile" + } + ] + }, + "environment": { + "platform": "linux/amd64" + } + } + }, + "buildx.build.ref": "posit-builder/posit-builder0/tchcfw3y5z0yu3uumeaqqicfr", + "containerimage.descriptor": { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:4f4c79eddd2daffa415525cd3bbaaca876c55112be408b8f5c8cec93ea6b6314", + "size": 2766, + "annotations": { + "org.opencontainers.image.created": "2026-08-11T15:50:15Z" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + "containerimage.digest": "sha256:4f4c79eddd2daffa415525cd3bbaaca876c55112be408b8f5c8cec93ea6b6314", + "image.name": "docker.io/posit/package-manager:2026.06.0,docker.io/posit/package-manager:2026.06.0-std,docker.io/posit/package-manager:2026.06.0-ubuntu-24.04,docker.io/posit/package-manager:2026.06.0-ubuntu-24.04-std,docker.io/posit/package-manager:latest,docker.io/posit/package-manager:std,docker.io/posit/package-manager:ubuntu-24.04,docker.io/posit/package-manager:ubuntu-24.04-std,ghcr.io/posit-dev/package-manager:2026.06.0,ghcr.io/posit-dev/package-manager:2026.06.0-std,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-24.04,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-24.04-std,ghcr.io/posit-dev/package-manager:latest,ghcr.io/posit-dev/package-manager:std,ghcr.io/posit-dev/package-manager:ubuntu-24.04,ghcr.io/posit-dev/package-manager:ubuntu-24.04-std" + }, + "package-manager-2026-06-0-standard-ubuntu-26-04": { + "buildx.build.provenance": { + "builder": { + "id": "" + }, + "buildType": "https://mobyproject.org/buildkit@v1", + "materials": [ + { + "uri": "pkg:docker/ubuntu@26.04?platform=linux%2Famd64", + "digest": { + "sha256": "678c6550cc43645e08669028bc177f50be4e7c5b8cca677067b1914d4afc7a03" + } + }, + { + "uri": "pkg:docker/ghcr.io/astral-sh/uv@debian-slim?platform=linux%2Famd64", + "digest": { + "sha256": "c50603599cfe995c7c736211b163305d9ee4b4947f4fdcb53f0834a391e79da1" + } + } + ], + "invocation": { + "configSource": { + "entryPoint": "Containerfile.ubuntu2604.std" + }, + "parameters": { + "frontend": "dockerfile.v0", + "args": { + "label:co.posit.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:co.posit.image.documentation": "https://docs.posit.co/rspm/", + "label:co.posit.image.maintainer": "Posit Docker Team \u003cdocker@posit.co\u003e", + "label:co.posit.image.name": "Posit Package Manager", + "label:co.posit.image.os": "Ubuntu 26.04", + "label:co.posit.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:co.posit.image.tools.R": "4.6.1", + "label:co.posit.image.tools.python": "3.14.6", + "label:co.posit.image.variant": "Standard", + "label:co.posit.image.version": "2026.06.0", + "label:org.opencontainers.image.authors": "Ben Schwedler \u003cben@posit.co\u003e, Ian H. Pittwood \u003cian.pittwood@posit.co\u003e", + "label:org.opencontainers.image.created": "2026-08-11T09:50:14.758825", + "label:org.opencontainers.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:org.opencontainers.image.documentation": "https://docs.posit.co/rspm/", + "label:org.opencontainers.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:org.opencontainers.image.source": "https://github.com/posit-dev/images-package-manager", + "label:org.opencontainers.image.title": "Posit Package Manager", + "label:org.opencontainers.image.vendor": "Posit Software, PBC", + "label:org.opencontainers.image.version": "2026.06.0", + "local-sessionid:context": "903o5aehurpm6f343ej8u2y6n", + "local-sessionid:dockerfile": "903o5aehurpm6f343ej8u2y6n" + }, + "locals": [ + { + "name": "context" + }, + { + "name": "dockerfile" + } + ] + }, + "environment": { + "platform": "linux/amd64" + } + } + }, + "buildx.build.ref": "posit-builder/posit-builder0/wr41oe82z9t2r83ntypwj78qg", + "containerimage.descriptor": { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:9706af41ea062b31eb29b8f718d4368481e5edc9cd6cbbc7925a1e78bc0b2250", + "size": 2956, + "annotations": { + "org.opencontainers.image.created": "2026-08-11T15:50:15Z" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + "containerimage.digest": "sha256:9706af41ea062b31eb29b8f718d4368481e5edc9cd6cbbc7925a1e78bc0b2250", + "image.name": "docker.io/posit/package-manager:2026.06.0-ubuntu-26.04,docker.io/posit/package-manager:2026.06.0-ubuntu-26.04-std,docker.io/posit/package-manager:ubuntu-26.04,docker.io/posit/package-manager:ubuntu-26.04-std,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-26.04,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-26.04-std,ghcr.io/posit-dev/package-manager:ubuntu-26.04,ghcr.io/posit-dev/package-manager:ubuntu-26.04-std" + } +} diff --git a/posit-bakery/test/image/testdata/strategy-build-metadata.json b/posit-bakery/test/image/testdata/strategy-build-metadata.json new file mode 100644 index 000000000..4128859cb --- /dev/null +++ b/posit-bakery/test/image/testdata/strategy-build-metadata.json @@ -0,0 +1,440 @@ +{ + "package-manager-2026-06-0-minimal-ubuntu-22-04": { + "image.name": "docker.io/posit/package-manager:2026.06.0-ubuntu-22.04-min,docker.io/posit/package-manager:ubuntu-22.04-min,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-22.04-min,ghcr.io/posit-dev/package-manager:ubuntu-22.04-min", + "containerimage.digest": "sha256:2bee1a128ef6ecf0187f1a70fb319987648004a3e4d0fe6f399298b676d95cd4", + "containerimage.descriptor": { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:2bee1a128ef6ecf0187f1a70fb319987648004a3e4d0fe6f399298b676d95cd4", + "size": 1999, + "annotations": { + "org.opencontainers.image.created": "2026-08-11T15:52:59Z" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + "buildx.build.provenance": { + "builder": { + "id": "" + }, + "buildType": "https://mobyproject.org/buildkit@v1", + "materials": [ + { + "uri": "pkg:docker/ubuntu@22.04?platform=linux%2Famd64", + "digest": { + "sha256": "3b06811b2afd352be909dd088a004166d665dc76d38b13eada33522a9d915c6f" + } + } + ], + "invocation": { + "configSource": { + "entryPoint": "Containerfile.ubuntu2204.min" + }, + "parameters": { + "frontend": "dockerfile.v0", + "args": { + "label:co.posit.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:co.posit.image.documentation": "https://docs.posit.co/rspm/", + "label:co.posit.image.maintainer": "Posit Docker Team ", + "label:co.posit.image.name": "Posit Package Manager", + "label:co.posit.image.os": "Ubuntu 22.04", + "label:co.posit.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:co.posit.image.variant": "Minimal", + "label:co.posit.image.version": "2026.06.0", + "label:org.opencontainers.image.authors": "Ben Schwedler , Ian H. Pittwood ", + "label:org.opencontainers.image.created": "2026-08-11T09:52:59.368458", + "label:org.opencontainers.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:org.opencontainers.image.documentation": "https://docs.posit.co/rspm/", + "label:org.opencontainers.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:org.opencontainers.image.source": "https://github.com/posit-dev/images-package-manager", + "label:org.opencontainers.image.title": "Posit Package Manager", + "label:org.opencontainers.image.vendor": "Posit Software, PBC", + "label:org.opencontainers.image.version": "2026.06.0" + }, + "locals": [ + { + "name": "context" + }, + { + "name": "dockerfile" + } + ] + }, + "environment": { + "platform": "linux/amd64" + } + } + }, + "buildx.build.ref": "posit-builder/posit-builder0/l0xmfcxvus5p4uwqkchio6sr8" + }, + "package-manager-2026-06-0-minimal-ubuntu-24-04": { + "image.name": "docker.io/posit/package-manager:2026.06.0-min,docker.io/posit/package-manager:2026.06.0-ubuntu-24.04-min,docker.io/posit/package-manager:min,docker.io/posit/package-manager:ubuntu-24.04-min,ghcr.io/posit-dev/package-manager:2026.06.0-min,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-24.04-min,ghcr.io/posit-dev/package-manager:min,ghcr.io/posit-dev/package-manager:ubuntu-24.04-min", + "containerimage.digest": "sha256:a6b0f593c54acf37ebad26677306910ebd4326559976c8204a968828db5a297a", + "containerimage.descriptor": { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:a6b0f593c54acf37ebad26677306910ebd4326559976c8204a968828db5a297a", + "size": 1999, + "annotations": { + "org.opencontainers.image.created": "2026-08-11T15:52:59Z" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + "buildx.build.provenance": { + "builder": { + "id": "" + }, + "buildType": "https://mobyproject.org/buildkit@v1", + "materials": [ + { + "uri": "pkg:docker/ubuntu@24.04?platform=linux%2Famd64", + "digest": { + "sha256": "561618e2c15bf2397621dd04f96926663a3b5616c189cf7e38db7e82f5c538ea" + } + } + ], + "invocation": { + "configSource": { + "entryPoint": "Containerfile.ubuntu2404.min" + }, + "parameters": { + "frontend": "dockerfile.v0", + "args": { + "label:co.posit.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:co.posit.image.documentation": "https://docs.posit.co/rspm/", + "label:co.posit.image.maintainer": "Posit Docker Team ", + "label:co.posit.image.name": "Posit Package Manager", + "label:co.posit.image.os": "Ubuntu 24.04", + "label:co.posit.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:co.posit.image.variant": "Minimal", + "label:co.posit.image.version": "2026.06.0", + "label:org.opencontainers.image.authors": "Ben Schwedler , Ian H. Pittwood ", + "label:org.opencontainers.image.created": "2026-08-11T09:52:59.375598", + "label:org.opencontainers.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:org.opencontainers.image.documentation": "https://docs.posit.co/rspm/", + "label:org.opencontainers.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:org.opencontainers.image.source": "https://github.com/posit-dev/images-package-manager", + "label:org.opencontainers.image.title": "Posit Package Manager", + "label:org.opencontainers.image.vendor": "Posit Software, PBC", + "label:org.opencontainers.image.version": "2026.06.0" + }, + "locals": [ + { + "name": "context" + }, + { + "name": "dockerfile" + } + ] + }, + "environment": { + "platform": "linux/amd64" + } + } + }, + "buildx.build.ref": "posit-builder/posit-builder0/mk9zrlkn5uy2hh1f8emje0so3" + }, + "package-manager-2026-06-0-minimal-ubuntu-26-04": { + "image.name": "docker.io/posit/package-manager:2026.06.0-ubuntu-26.04-min,docker.io/posit/package-manager:ubuntu-26.04-min,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-26.04-min,ghcr.io/posit-dev/package-manager:ubuntu-26.04-min", + "containerimage.digest": "sha256:182c88a79accc9029fb463d9d21458fb2e3d08fbd377af433a1c63e82073c49e", + "containerimage.descriptor": { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:182c88a79accc9029fb463d9d21458fb2e3d08fbd377af433a1c63e82073c49e", + "size": 2189, + "annotations": { + "org.opencontainers.image.created": "2026-08-11T15:52:59Z" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + "buildx.build.provenance": { + "builder": { + "id": "" + }, + "buildType": "https://mobyproject.org/buildkit@v1", + "materials": [ + { + "uri": "pkg:docker/ubuntu@26.04?platform=linux%2Famd64", + "digest": { + "sha256": "678c6550cc43645e08669028bc177f50be4e7c5b8cca677067b1914d4afc7a03" + } + } + ], + "invocation": { + "configSource": { + "entryPoint": "Containerfile.ubuntu2604.min" + }, + "parameters": { + "frontend": "dockerfile.v0", + "args": { + "label:co.posit.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:co.posit.image.documentation": "https://docs.posit.co/rspm/", + "label:co.posit.image.maintainer": "Posit Docker Team ", + "label:co.posit.image.name": "Posit Package Manager", + "label:co.posit.image.os": "Ubuntu 26.04", + "label:co.posit.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:co.posit.image.variant": "Minimal", + "label:co.posit.image.version": "2026.06.0", + "label:org.opencontainers.image.authors": "Ben Schwedler , Ian H. Pittwood ", + "label:org.opencontainers.image.created": "2026-08-11T09:52:59.376711", + "label:org.opencontainers.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:org.opencontainers.image.documentation": "https://docs.posit.co/rspm/", + "label:org.opencontainers.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:org.opencontainers.image.source": "https://github.com/posit-dev/images-package-manager", + "label:org.opencontainers.image.title": "Posit Package Manager", + "label:org.opencontainers.image.vendor": "Posit Software, PBC", + "label:org.opencontainers.image.version": "2026.06.0" + }, + "locals": [ + { + "name": "context" + }, + { + "name": "dockerfile" + } + ] + }, + "environment": { + "platform": "linux/amd64" + } + } + }, + "buildx.build.ref": "posit-builder/posit-builder0/l6czams9cvexw8e3mvv9y58k0" + }, + "package-manager-2026-06-0-standard-ubuntu-22-04": { + "image.name": "docker.io/posit/package-manager:2026.06.0-ubuntu-22.04,docker.io/posit/package-manager:2026.06.0-ubuntu-22.04-std,docker.io/posit/package-manager:ubuntu-22.04,docker.io/posit/package-manager:ubuntu-22.04-std,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-22.04,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-22.04-std,ghcr.io/posit-dev/package-manager:ubuntu-22.04,ghcr.io/posit-dev/package-manager:ubuntu-22.04-std", + "containerimage.digest": "sha256:b9a627a53282d1ecacafca5d61fd9ff2113c808879bc39ea4a6a3a85f72c442f", + "containerimage.descriptor": { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:b9a627a53282d1ecacafca5d61fd9ff2113c808879bc39ea4a6a3a85f72c442f", + "size": 2766, + "annotations": { + "org.opencontainers.image.created": "2026-08-11T15:53:00Z" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + "buildx.build.provenance": { + "builder": { + "id": "" + }, + "buildType": "https://mobyproject.org/buildkit@v1", + "materials": [ + { + "uri": "pkg:docker/ubuntu@22.04?platform=linux%2Famd64", + "digest": { + "sha256": "3b06811b2afd352be909dd088a004166d665dc76d38b13eada33522a9d915c6f" + } + }, + { + "uri": "pkg:docker/ghcr.io/astral-sh/uv@debian-slim?platform=linux%2Famd64", + "digest": { + "sha256": "c50603599cfe995c7c736211b163305d9ee4b4947f4fdcb53f0834a391e79da1" + } + } + ], + "invocation": { + "configSource": { + "entryPoint": "Containerfile.ubuntu2204.std" + }, + "parameters": { + "frontend": "dockerfile.v0", + "args": { + "label:co.posit.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:co.posit.image.documentation": "https://docs.posit.co/rspm/", + "label:co.posit.image.maintainer": "Posit Docker Team ", + "label:co.posit.image.name": "Posit Package Manager", + "label:co.posit.image.os": "Ubuntu 22.04", + "label:co.posit.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:co.posit.image.tools.R": "4.6.1", + "label:co.posit.image.tools.python": "3.14.6", + "label:co.posit.image.variant": "Standard", + "label:co.posit.image.version": "2026.06.0", + "label:org.opencontainers.image.authors": "Ben Schwedler , Ian H. Pittwood ", + "label:org.opencontainers.image.created": "2026-08-11T09:52:59.381627", + "label:org.opencontainers.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:org.opencontainers.image.documentation": "https://docs.posit.co/rspm/", + "label:org.opencontainers.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:org.opencontainers.image.source": "https://github.com/posit-dev/images-package-manager", + "label:org.opencontainers.image.title": "Posit Package Manager", + "label:org.opencontainers.image.vendor": "Posit Software, PBC", + "label:org.opencontainers.image.version": "2026.06.0" + }, + "locals": [ + { + "name": "context" + }, + { + "name": "dockerfile" + } + ] + }, + "environment": { + "platform": "linux/amd64" + } + } + }, + "buildx.build.ref": "posit-builder/posit-builder0/ynbfjo15900zq7h8gpjnix4wh" + }, + "package-manager-2026-06-0-standard-ubuntu-24-04": { + "image.name": "docker.io/posit/package-manager:2026.06.0,docker.io/posit/package-manager:2026.06.0-std,docker.io/posit/package-manager:2026.06.0-ubuntu-24.04,docker.io/posit/package-manager:2026.06.0-ubuntu-24.04-std,docker.io/posit/package-manager:latest,docker.io/posit/package-manager:std,docker.io/posit/package-manager:ubuntu-24.04,docker.io/posit/package-manager:ubuntu-24.04-std,ghcr.io/posit-dev/package-manager:2026.06.0,ghcr.io/posit-dev/package-manager:2026.06.0-std,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-24.04,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-24.04-std,ghcr.io/posit-dev/package-manager:latest,ghcr.io/posit-dev/package-manager:std,ghcr.io/posit-dev/package-manager:ubuntu-24.04,ghcr.io/posit-dev/package-manager:ubuntu-24.04-std", + "containerimage.digest": "sha256:29ce30ee41f1cbf594dd48a7bf2d61433664fa511c2ab262cb0d7c790f8d4899", + "containerimage.descriptor": { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:29ce30ee41f1cbf594dd48a7bf2d61433664fa511c2ab262cb0d7c790f8d4899", + "size": 2766, + "annotations": { + "org.opencontainers.image.created": "2026-08-11T15:53:01Z" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + "buildx.build.provenance": { + "builder": { + "id": "" + }, + "buildType": "https://mobyproject.org/buildkit@v1", + "materials": [ + { + "uri": "pkg:docker/ubuntu@24.04?platform=linux%2Famd64", + "digest": { + "sha256": "561618e2c15bf2397621dd04f96926663a3b5616c189cf7e38db7e82f5c538ea" + } + }, + { + "uri": "pkg:docker/ghcr.io/astral-sh/uv@debian-slim?platform=linux%2Famd64", + "digest": { + "sha256": "c50603599cfe995c7c736211b163305d9ee4b4947f4fdcb53f0834a391e79da1" + } + } + ], + "invocation": { + "configSource": { + "entryPoint": "Containerfile.ubuntu2404.std" + }, + "parameters": { + "frontend": "dockerfile.v0", + "args": { + "label:co.posit.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:co.posit.image.documentation": "https://docs.posit.co/rspm/", + "label:co.posit.image.maintainer": "Posit Docker Team ", + "label:co.posit.image.name": "Posit Package Manager", + "label:co.posit.image.os": "Ubuntu 24.04", + "label:co.posit.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:co.posit.image.tools.R": "4.6.1", + "label:co.posit.image.tools.python": "3.14.6", + "label:co.posit.image.variant": "Standard", + "label:co.posit.image.version": "2026.06.0", + "label:org.opencontainers.image.authors": "Ben Schwedler , Ian H. Pittwood ", + "label:org.opencontainers.image.created": "2026-08-11T09:53:01.320236", + "label:org.opencontainers.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:org.opencontainers.image.documentation": "https://docs.posit.co/rspm/", + "label:org.opencontainers.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:org.opencontainers.image.source": "https://github.com/posit-dev/images-package-manager", + "label:org.opencontainers.image.title": "Posit Package Manager", + "label:org.opencontainers.image.vendor": "Posit Software, PBC", + "label:org.opencontainers.image.version": "2026.06.0" + }, + "locals": [ + { + "name": "context" + }, + { + "name": "dockerfile" + } + ] + }, + "environment": { + "platform": "linux/amd64" + } + } + }, + "buildx.build.ref": "posit-builder/posit-builder0/rupgth6bk839bva4nw738p0j2" + }, + "package-manager-2026-06-0-standard-ubuntu-26-04": { + "image.name": "docker.io/posit/package-manager:2026.06.0-ubuntu-26.04,docker.io/posit/package-manager:2026.06.0-ubuntu-26.04-std,docker.io/posit/package-manager:ubuntu-26.04,docker.io/posit/package-manager:ubuntu-26.04-std,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-26.04,ghcr.io/posit-dev/package-manager:2026.06.0-ubuntu-26.04-std,ghcr.io/posit-dev/package-manager:ubuntu-26.04,ghcr.io/posit-dev/package-manager:ubuntu-26.04-std", + "containerimage.digest": "sha256:85b4d72db800e8bf62304bdcb6803b99bab7a2464a5e454a5eacaacc013b4852", + "containerimage.descriptor": { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:85b4d72db800e8bf62304bdcb6803b99bab7a2464a5e454a5eacaacc013b4852", + "size": 2956, + "annotations": { + "org.opencontainers.image.created": "2026-08-11T15:53:01Z" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + "buildx.build.provenance": { + "builder": { + "id": "" + }, + "buildType": "https://mobyproject.org/buildkit@v1", + "materials": [ + { + "uri": "pkg:docker/ubuntu@26.04?platform=linux%2Famd64", + "digest": { + "sha256": "678c6550cc43645e08669028bc177f50be4e7c5b8cca677067b1914d4afc7a03" + } + }, + { + "uri": "pkg:docker/ghcr.io/astral-sh/uv@debian-slim?platform=linux%2Famd64", + "digest": { + "sha256": "c50603599cfe995c7c736211b163305d9ee4b4947f4fdcb53f0834a391e79da1" + } + } + ], + "invocation": { + "configSource": { + "entryPoint": "Containerfile.ubuntu2604.std" + }, + "parameters": { + "frontend": "dockerfile.v0", + "args": { + "label:co.posit.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:co.posit.image.documentation": "https://docs.posit.co/rspm/", + "label:co.posit.image.maintainer": "Posit Docker Team ", + "label:co.posit.image.name": "Posit Package Manager", + "label:co.posit.image.os": "Ubuntu 26.04", + "label:co.posit.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:co.posit.image.tools.R": "4.6.1", + "label:co.posit.image.tools.python": "3.14.6", + "label:co.posit.image.variant": "Standard", + "label:co.posit.image.version": "2026.06.0", + "label:org.opencontainers.image.authors": "Ben Schwedler , Ian H. Pittwood ", + "label:org.opencontainers.image.created": "2026-08-11T09:53:01.393437", + "label:org.opencontainers.image.description": "A containerized image of Posit Package Manager (PPM), which organizes and centralizes data science packages across your team, department, or the entire organization.", + "label:org.opencontainers.image.documentation": "https://docs.posit.co/rspm/", + "label:org.opencontainers.image.revision": "adec3d9184f76c6e7725da5f28bdb9410010833c", + "label:org.opencontainers.image.source": "https://github.com/posit-dev/images-package-manager", + "label:org.opencontainers.image.title": "Posit Package Manager", + "label:org.opencontainers.image.vendor": "Posit Software, PBC", + "label:org.opencontainers.image.version": "2026.06.0" + }, + "locals": [ + { + "name": "context" + }, + { + "name": "dockerfile" + } + ] + }, + "environment": { + "platform": "linux/amd64" + } + } + }, + "buildx.build.ref": "posit-builder/posit-builder0/pg7wwa7w13ud9dwbeek2k2a03" + } +}