Packages

Verified OCI/Docker registry client library for Elixir

Current section

Files

Jump to
regc lib regc tag.ex
Raw

lib/regc/tag.ex

defmodule Regc.Tag do
@moduledoc """
Repository tag operations.
"""
alias Regc.Client
@spec list(Client.t(), String.t() | Regc.Oci.Reference.t(), keyword()) ::
{:ok, [String.t()] | Regc.Page.t()} | {:error, Regc.Error.t()}
def list(%Client{} = client, repository, opts \\ []) do
with {:ok, backend} <- Client.backend(client, scheme(repository)) do
backend.tag_list(client, repository, opts)
end
end
@doc """
Deletes one tag without deleting other tags that reference the same
manifest. Regc first tries direct tag deletion and can use the compatibility
replacement-manifest fallback when the registry does not support it.
"""
@spec delete(Client.t(), String.t() | Regc.Oci.Reference.t(), keyword()) ::
:ok | {:error, Regc.Error.t()}
def delete(%Client{} = client, reference, opts \\ []) do
with {:ok, backend} <- Client.backend(client, scheme(reference)) do
backend.tag_delete(client, reference, opts)
end
end
defp scheme(%Regc.Oci.Reference{scheme: scheme}), do: scheme
defp scheme(repository) when is_binary(repository) do
case URI.parse(repository) do
%URI{scheme: scheme} when is_binary(scheme) and scheme != "" -> scheme
_uri -> "reg"
end
end
end