mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-12 05:36:40 +00:00
Image names now follow {owner}/{repository}/mirror/{registry}/{name}
instead of {owner}/mirror/{registry}/{name}.
- GHCRProvider: add `repository` param + `add_args()`/`from_args()` classmethods
as SPOT for CLI argument registration and provider construction
- sync, resolver: use GHCRProvider.add_args() / from_args() (no duplication)
- Workflows: resolve repository name via scripts/meta/resolve/repository/name.sh
and pass --ghcr-repository to sync and publish
- mirrors.sh: require and forward GHCR_REPOSITORY env var
- deploy/development/mirrors.py: derive repository from GITHUB_REPOSITORY
- Tests: update expected paths, argv and env fixtures
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
from __future__ import annotations
|
|
|
|
import unittest
|
|
|
|
from cli.mirror.model import ImageRef
|
|
from cli.mirror.providers import GHCRProvider
|
|
|
|
|
|
class TestGHCRProviderImageBase(unittest.TestCase):
|
|
def setUp(self) -> None:
|
|
self.image = ImageRef(
|
|
role="web-app-nextcloud",
|
|
service="app",
|
|
name="nextcloud",
|
|
version="31.0.0",
|
|
source="docker.io/library/nextcloud:31.0.0",
|
|
registry="docker.io",
|
|
)
|
|
|
|
def test_image_base_simple(self) -> None:
|
|
provider = GHCRProvider("acme", "myrepo")
|
|
self.assertEqual(
|
|
provider.image_base(self.image),
|
|
"ghcr.io/acme/myrepo/mirror/docker.io/nextcloud",
|
|
)
|
|
|
|
def test_image_base_with_slash_in_name(self) -> None:
|
|
image = ImageRef(
|
|
role="web-app-foo",
|
|
service="svc",
|
|
name="foo/bar",
|
|
version="1.0",
|
|
source="docker.io/foo/bar:1.0",
|
|
registry="docker.io",
|
|
)
|
|
provider = GHCRProvider("acme", "myrepo")
|
|
self.assertEqual(
|
|
provider.image_base(image),
|
|
"ghcr.io/acme/myrepo/mirror/docker.io/foo/bar",
|
|
)
|
|
|
|
def test_image_base_quay(self) -> None:
|
|
image = ImageRef(
|
|
role="web-app-keycloak",
|
|
service="app",
|
|
name="keycloak/keycloak",
|
|
version="latest",
|
|
source="quay.io/keycloak/keycloak:latest",
|
|
registry="quay.io",
|
|
)
|
|
provider = GHCRProvider("acme", "myrepo")
|
|
self.assertEqual(
|
|
provider.image_base(image),
|
|
"ghcr.io/acme/myrepo/mirror/quay.io/keycloak/keycloak",
|
|
)
|
|
|
|
def test_namespace_and_repository_are_lowercased(self) -> None:
|
|
provider = GHCRProvider("ACME", "MyRepo")
|
|
self.assertEqual(provider.namespace, "acme")
|
|
self.assertEqual(provider.repository, "myrepo")
|
|
|
|
|
|
if __name__ == "__main__": # pragma: no cover
|
|
unittest.main()
|