Source code for mafw.devtools.cli.registry_options

#  Copyright 2026 European Union
#  Author: Bulgheroni Antonio (antonio.bulgheroni@ec.europa.eu)
#  SPDX-License-Identifier: EUPL-1.2
"""Shared Click options and configuration for GitLab registry command groups.

:author: Bulgheroni Antonio (antonio.bulgheroni@ec.europa.eu)
"""

from __future__ import annotations

from collections.abc import Callable
from typing import Any

import click

from mafw.devtools.gitlab.api import GitlabAPIConfiguration, build_gitlab_api_configuration


[docs] def gitlab_registry_options(function: Callable[..., Any]) -> Callable[..., Any]: """Add the standard GitLab API URL, project ID, and token options.""" function = click.option('--gitlab-token', default=None, envvar='CI_JOB_TOKEN', help='GitLab API token.')(function) function = click.option( '--gitlab-project-id', default=None, type=int, envvar='CI_PROJECT_ID', help='GitLab project numeric id (env: CI_PROJECT_ID).', )(function) function = click.option( '--gitlab-api-url', default=None, envvar='CI_API_V4_URL', help='GitLab API v4 base URL (env: CI_API_V4_URL).', )(function) return function
[docs] def configure_gitlab_registry_context( ctx: click.Context, api_url: str | None, project_id: int | None, token: str | None ) -> None: """Store shared registry options in the current Click context.""" ctx.ensure_object(dict) ctx.obj['gitlab_api_url'] = api_url ctx.obj['gitlab_project_id'] = project_id ctx.obj['gitlab_token'] = token
[docs] def build_gitlab_registry_configuration(ctx: click.Context) -> GitlabAPIConfiguration: """Build the registry configuration and expose validation errors as Click errors.""" options = ctx.ensure_object(dict) try: return build_gitlab_api_configuration( options.get('gitlab_api_url'), options.get('gitlab_project_id'), options.get('gitlab_token') ) except ValueError as exc: raise click.ClickException(str(exc)) from exc