# frozen_string_literal: true

# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Auto-generated by gapic-generator-ruby. DO NOT EDIT!


module Google
  module Cloud
    module ArtifactRegistry
      module V1
        # Artifact policy configuration for the repository contents.
        # @!attribute [rw] id
        #   @return [::String]
        #     The user-provided ID of the upstream policy.
        # @!attribute [rw] repository
        #   @return [::String]
        #     A reference to the repository resource, for example:
        #     `projects/p1/locations/us-central1/repositories/repo1`.
        # @!attribute [rw] priority
        #   @return [::Integer]
        #     Entries with a greater priority value take precedence in the pull order.
        class UpstreamPolicy
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # CleanupPolicyCondition is a set of conditions attached to a CleanupPolicy.
        # If multiple entries are set, all must be satisfied for the condition to be
        # satisfied.
        # @!attribute [rw] tag_state
        #   @return [::Google::Cloud::ArtifactRegistry::V1::CleanupPolicyCondition::TagState]
        #     Match versions by tag status.
        # @!attribute [rw] tag_prefixes
        #   @return [::Array<::String>]
        #     Match versions by tag prefix. Applied on any prefix match.
        # @!attribute [rw] version_name_prefixes
        #   @return [::Array<::String>]
        #     Match versions by version name prefix. Applied on any prefix match.
        # @!attribute [rw] package_name_prefixes
        #   @return [::Array<::String>]
        #     Match versions by package prefix. Applied on any prefix match.
        # @!attribute [rw] older_than
        #   @return [::Google::Protobuf::Duration]
        #     Match versions older than a duration.
        # @!attribute [rw] newer_than
        #   @return [::Google::Protobuf::Duration]
        #     Match versions newer than a duration.
        class CleanupPolicyCondition
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # Statuses applying to versions.
          module TagState
            # Tag status not specified.
            TAG_STATE_UNSPECIFIED = 0

            # Applies to tagged versions only.
            TAGGED = 1

            # Applies to untagged versions only.
            UNTAGGED = 2

            # Applies to all versions.
            ANY = 3
          end
        end

        # CleanupPolicyMostRecentVersions is an alternate condition of a CleanupPolicy
        # for retaining a minimum number of versions.
        # @!attribute [rw] package_name_prefixes
        #   @return [::Array<::String>]
        #     List of package name prefixes that will apply this rule.
        # @!attribute [rw] keep_count
        #   @return [::Integer]
        #     Minimum number of versions to keep.
        class CleanupPolicyMostRecentVersions
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Artifact policy configuration for repository cleanup policies.
        # @!attribute [rw] condition
        #   @return [::Google::Cloud::ArtifactRegistry::V1::CleanupPolicyCondition]
        #     Policy condition for matching versions.
        #
        #     Note: The following fields are mutually exclusive: `condition`, `most_recent_versions`. If a field in that set is populated, all other fields in the set will automatically be cleared.
        # @!attribute [rw] most_recent_versions
        #   @return [::Google::Cloud::ArtifactRegistry::V1::CleanupPolicyMostRecentVersions]
        #     Policy condition for retaining a minimum number of versions. May only be
        #     specified with a Keep action.
        #
        #     Note: The following fields are mutually exclusive: `most_recent_versions`, `condition`. If a field in that set is populated, all other fields in the set will automatically be cleared.
        # @!attribute [rw] id
        #   @return [::String]
        #     The user-provided ID of the cleanup policy.
        # @!attribute [rw] action
        #   @return [::Google::Cloud::ArtifactRegistry::V1::CleanupPolicy::Action]
        #     Policy action.
        class CleanupPolicy
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # Action type for a cleanup policy.
          module Action
            # Action not specified.
            ACTION_UNSPECIFIED = 0

            # Delete action.
            DELETE = 1

            # Keep action.
            KEEP = 2
          end
        end

        # Virtual repository configuration.
        # @!attribute [rw] upstream_policies
        #   @return [::Array<::Google::Cloud::ArtifactRegistry::V1::UpstreamPolicy>]
        #     Policies that configure the upstream artifacts distributed by the Virtual
        #     Repository. Upstream policies cannot be set on a standard repository.
        class VirtualRepositoryConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Remote repository configuration.
        # @!attribute [rw] docker_repository
        #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::DockerRepository]
        #     Specific settings for a Docker remote repository.
        #
        #     Note: The following fields are mutually exclusive: `docker_repository`, `maven_repository`, `npm_repository`, `python_repository`, `apt_repository`, `yum_repository`, `common_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
        # @!attribute [rw] maven_repository
        #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::MavenRepository]
        #     Specific settings for a Maven remote repository.
        #
        #     Note: The following fields are mutually exclusive: `maven_repository`, `docker_repository`, `npm_repository`, `python_repository`, `apt_repository`, `yum_repository`, `common_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
        # @!attribute [rw] npm_repository
        #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::NpmRepository]
        #     Specific settings for an Npm remote repository.
        #
        #     Note: The following fields are mutually exclusive: `npm_repository`, `docker_repository`, `maven_repository`, `python_repository`, `apt_repository`, `yum_repository`, `common_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
        # @!attribute [rw] python_repository
        #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::PythonRepository]
        #     Specific settings for a Python remote repository.
        #
        #     Note: The following fields are mutually exclusive: `python_repository`, `docker_repository`, `maven_repository`, `npm_repository`, `apt_repository`, `yum_repository`, `common_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
        # @!attribute [rw] apt_repository
        #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::AptRepository]
        #     Specific settings for an Apt remote repository.
        #
        #     Note: The following fields are mutually exclusive: `apt_repository`, `docker_repository`, `maven_repository`, `npm_repository`, `python_repository`, `yum_repository`, `common_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
        # @!attribute [rw] yum_repository
        #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::YumRepository]
        #     Specific settings for a Yum remote repository.
        #
        #     Note: The following fields are mutually exclusive: `yum_repository`, `docker_repository`, `maven_repository`, `npm_repository`, `python_repository`, `apt_repository`, `common_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
        # @!attribute [rw] common_repository
        #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::CommonRemoteRepository]
        #     Common remote repository settings.
        #     Used as the remote repository upstream URL.
        #
        #     Note: The following fields are mutually exclusive: `common_repository`, `docker_repository`, `maven_repository`, `npm_repository`, `python_repository`, `apt_repository`, `yum_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
        # @!attribute [rw] description
        #   @return [::String]
        #     The description of the remote source.
        # @!attribute [rw] upstream_credentials
        #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::UpstreamCredentials]
        #     Optional. The credentials used to access the remote repository.
        # @!attribute [rw] disable_upstream_validation
        #   @return [::Boolean]
        #     Input only. A create/update remote repo option to avoid making a HEAD/GET
        #     request to validate a remote repo and any supplied upstream credentials.
        class RemoteRepositoryConfig
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # The credentials to access the remote repository.
          # @!attribute [rw] username_password_credentials
          #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::UpstreamCredentials::UsernamePasswordCredentials]
          #     Use username and password to access the remote repository.
          class UpstreamCredentials
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # Username and password credentials.
            # @!attribute [rw] username
            #   @return [::String]
            #     The username to access the remote repository.
            # @!attribute [rw] password_secret_version
            #   @return [::String]
            #     The Secret Manager key version that holds the password to access the
            #     remote repository. Must be in the format of
            #     `projects/{project}/secrets/{secret}/versions/{version}`.
            class UsernamePasswordCredentials
              include ::Google::Protobuf::MessageExts
              extend ::Google::Protobuf::MessageExts::ClassMethods
            end
          end

          # Configuration for a Docker remote repository.
          # @!attribute [rw] public_repository
          #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::DockerRepository::PublicRepository]
          #     One of the publicly available Docker repositories supported by Artifact
          #     Registry.
          #
          #     Note: The following fields are mutually exclusive: `public_repository`, `custom_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
          # @!attribute [rw] custom_repository
          #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::DockerRepository::CustomRepository]
          #     Customer-specified remote repository.
          #
          #     Note: The following fields are mutually exclusive: `custom_repository`, `public_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
          class DockerRepository
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # Customer-specified publicly available remote repository.
            # @!attribute [rw] uri
            #   @return [::String]
            #     An http/https uri reference to the custom remote repository, for ex:
            #     "https://registry-1.docker.io".
            class CustomRepository
              include ::Google::Protobuf::MessageExts
              extend ::Google::Protobuf::MessageExts::ClassMethods
            end

            # Predefined list of publicly available Docker repositories like Docker
            # Hub.
            module PublicRepository
              # Unspecified repository.
              PUBLIC_REPOSITORY_UNSPECIFIED = 0

              # Docker Hub.
              DOCKER_HUB = 1
            end
          end

          # Configuration for a Maven remote repository.
          # @!attribute [rw] public_repository
          #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::MavenRepository::PublicRepository]
          #     One of the publicly available Maven repositories supported by Artifact
          #     Registry.
          #
          #     Note: The following fields are mutually exclusive: `public_repository`, `custom_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
          # @!attribute [rw] custom_repository
          #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::MavenRepository::CustomRepository]
          #     Customer-specified remote repository.
          #
          #     Note: The following fields are mutually exclusive: `custom_repository`, `public_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
          class MavenRepository
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # Customer-specified publicly available remote repository.
            # @!attribute [rw] uri
            #   @return [::String]
            #     An http/https uri reference to the upstream remote repository, for ex:
            #     "https://my.maven.registry/".
            class CustomRepository
              include ::Google::Protobuf::MessageExts
              extend ::Google::Protobuf::MessageExts::ClassMethods
            end

            # Predefined list of publicly available Maven repositories like Maven
            # Central.
            module PublicRepository
              # Unspecified repository.
              PUBLIC_REPOSITORY_UNSPECIFIED = 0

              # Maven Central.
              MAVEN_CENTRAL = 1
            end
          end

          # Configuration for a Npm remote repository.
          # @!attribute [rw] public_repository
          #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::NpmRepository::PublicRepository]
          #     One of the publicly available Npm repositories supported by Artifact
          #     Registry.
          #
          #     Note: The following fields are mutually exclusive: `public_repository`, `custom_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
          # @!attribute [rw] custom_repository
          #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::NpmRepository::CustomRepository]
          #     Customer-specified remote repository.
          #
          #     Note: The following fields are mutually exclusive: `custom_repository`, `public_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
          class NpmRepository
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # Customer-specified publicly available remote repository.
            # @!attribute [rw] uri
            #   @return [::String]
            #     An http/https uri reference to the upstream remote repository, for ex:
            #     "https://my.npm.registry/".
            class CustomRepository
              include ::Google::Protobuf::MessageExts
              extend ::Google::Protobuf::MessageExts::ClassMethods
            end

            # Predefined list of publicly available NPM repositories like npmjs.
            module PublicRepository
              # Unspecified repository.
              PUBLIC_REPOSITORY_UNSPECIFIED = 0

              # npmjs.
              NPMJS = 1
            end
          end

          # Configuration for a Python remote repository.
          # @!attribute [rw] public_repository
          #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::PythonRepository::PublicRepository]
          #     One of the publicly available Python repositories supported by Artifact
          #     Registry.
          #
          #     Note: The following fields are mutually exclusive: `public_repository`, `custom_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
          # @!attribute [rw] custom_repository
          #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::PythonRepository::CustomRepository]
          #     Customer-specified remote repository.
          #
          #     Note: The following fields are mutually exclusive: `custom_repository`, `public_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
          class PythonRepository
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # Customer-specified publicly available remote repository.
            # @!attribute [rw] uri
            #   @return [::String]
            #     An http/https uri reference to the upstream remote repository, for ex:
            #     "https://my.python.registry/".
            class CustomRepository
              include ::Google::Protobuf::MessageExts
              extend ::Google::Protobuf::MessageExts::ClassMethods
            end

            # Predefined list of publicly available Python repositories like PyPI.org.
            module PublicRepository
              # Unspecified repository.
              PUBLIC_REPOSITORY_UNSPECIFIED = 0

              # PyPI.
              PYPI = 1
            end
          end

          # Configuration for an Apt remote repository.
          # @!attribute [rw] public_repository
          #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::AptRepository::PublicRepository]
          #     One of the publicly available Apt repositories supported by Artifact
          #     Registry.
          #
          #     Note: The following fields are mutually exclusive: `public_repository`, `custom_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
          # @!attribute [rw] custom_repository
          #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::AptRepository::CustomRepository]
          #     Customer-specified remote repository.
          #
          #     Note: The following fields are mutually exclusive: `custom_repository`, `public_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
          class AptRepository
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # Publicly available Apt repositories constructed from a common repository
            # base and a custom repository path.
            # @!attribute [rw] repository_base
            #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::AptRepository::PublicRepository::RepositoryBase]
            #     A common public repository base for Apt.
            # @!attribute [rw] repository_path
            #   @return [::String]
            #     A custom field to define a path to a specific repository from the base.
            class PublicRepository
              include ::Google::Protobuf::MessageExts
              extend ::Google::Protobuf::MessageExts::ClassMethods

              # Predefined list of publicly available repository bases for Apt.
              module RepositoryBase
                # Unspecified repository base.
                REPOSITORY_BASE_UNSPECIFIED = 0

                # Debian.
                DEBIAN = 1

                # Ubuntu LTS/Pro.
                UBUNTU = 2

                # Archived Debian.
                DEBIAN_SNAPSHOT = 3
              end
            end

            # Customer-specified publicly available remote repository.
            # @!attribute [rw] uri
            #   @return [::String]
            #     An http/https uri reference to the upstream remote repository, for ex:
            #     "https://my.apt.registry/".
            class CustomRepository
              include ::Google::Protobuf::MessageExts
              extend ::Google::Protobuf::MessageExts::ClassMethods
            end
          end

          # Configuration for a Yum remote repository.
          # @!attribute [rw] public_repository
          #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::YumRepository::PublicRepository]
          #     One of the publicly available Yum repositories supported by Artifact
          #     Registry.
          #
          #     Note: The following fields are mutually exclusive: `public_repository`, `custom_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
          # @!attribute [rw] custom_repository
          #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::YumRepository::CustomRepository]
          #     Customer-specified remote repository.
          #
          #     Note: The following fields are mutually exclusive: `custom_repository`, `public_repository`. If a field in that set is populated, all other fields in the set will automatically be cleared.
          class YumRepository
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # Publicly available Yum repositories constructed from a common repository
            # base and a custom repository path.
            # @!attribute [rw] repository_base
            #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig::YumRepository::PublicRepository::RepositoryBase]
            #     A common public repository base for Yum.
            # @!attribute [rw] repository_path
            #   @return [::String]
            #     A custom field to define a path to a specific repository from the base.
            class PublicRepository
              include ::Google::Protobuf::MessageExts
              extend ::Google::Protobuf::MessageExts::ClassMethods

              # Predefined list of publicly available repository bases for Yum.
              module RepositoryBase
                # Unspecified repository base.
                REPOSITORY_BASE_UNSPECIFIED = 0

                # CentOS.
                CENTOS = 1

                # CentOS Debug.
                CENTOS_DEBUG = 2

                # CentOS Vault.
                CENTOS_VAULT = 3

                # CentOS Stream.
                CENTOS_STREAM = 4

                # Rocky.
                ROCKY = 5

                # Fedora Extra Packages for Enterprise Linux (EPEL).
                EPEL = 6
              end
            end

            # Customer-specified publicly available remote repository.
            # @!attribute [rw] uri
            #   @return [::String]
            #     An http/https uri reference to the upstream remote repository, for ex:
            #     "https://my.yum.registry/".
            class CustomRepository
              include ::Google::Protobuf::MessageExts
              extend ::Google::Protobuf::MessageExts::ClassMethods
            end
          end

          # Common remote repository settings type.
          # @!attribute [rw] uri
          #   @return [::String]
          #     Required. A common public repository base for remote repository.
          class CommonRemoteRepository
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end
        end

        # A Repository for storing artifacts with a specific format.
        # @!attribute [rw] maven_config
        #   @return [::Google::Cloud::ArtifactRegistry::V1::Repository::MavenRepositoryConfig]
        #     Maven repository config contains repository level configuration
        #     for the repositories of maven type.
        #
        #     Note: The following fields are mutually exclusive: `maven_config`, `docker_config`. If a field in that set is populated, all other fields in the set will automatically be cleared.
        # @!attribute [rw] docker_config
        #   @return [::Google::Cloud::ArtifactRegistry::V1::Repository::DockerRepositoryConfig]
        #     Docker repository config contains repository level configuration
        #     for the repositories of docker type.
        #
        #     Note: The following fields are mutually exclusive: `docker_config`, `maven_config`. If a field in that set is populated, all other fields in the set will automatically be cleared.
        # @!attribute [rw] virtual_repository_config
        #   @return [::Google::Cloud::ArtifactRegistry::V1::VirtualRepositoryConfig]
        #     Configuration specific for a Virtual Repository.
        #
        #     Note: The following fields are mutually exclusive: `virtual_repository_config`, `remote_repository_config`. If a field in that set is populated, all other fields in the set will automatically be cleared.
        # @!attribute [rw] remote_repository_config
        #   @return [::Google::Cloud::ArtifactRegistry::V1::RemoteRepositoryConfig]
        #     Configuration specific for a Remote Repository.
        #
        #     Note: The following fields are mutually exclusive: `remote_repository_config`, `virtual_repository_config`. If a field in that set is populated, all other fields in the set will automatically be cleared.
        # @!attribute [rw] name
        #   @return [::String]
        #     The name of the repository, for example:
        #     `projects/p1/locations/us-central1/repositories/repo1`. For each location
        #     in a project, repository names must be unique.
        # @!attribute [rw] format
        #   @return [::Google::Cloud::ArtifactRegistry::V1::Repository::Format]
        #     Optional. The format of packages that are stored in the repository.
        # @!attribute [rw] description
        #   @return [::String]
        #     The user-provided description of the repository.
        # @!attribute [rw] labels
        #   @return [::Google::Protobuf::Map{::String => ::String}]
        #     Labels with user-defined metadata.
        #     This field may contain up to 64 entries. Label keys and values may be no
        #     longer than 63 characters. Label keys must begin with a lowercase letter
        #     and may only contain lowercase letters, numeric characters, underscores,
        #     and dashes.
        # @!attribute [r] create_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. The time when the repository was created.
        # @!attribute [r] update_time
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. The time when the repository was last updated.
        # @!attribute [rw] kms_key_name
        #   @return [::String]
        #     The Cloud KMS resource name of the customer managed encryption key that's
        #     used to encrypt the contents of the Repository. Has the form:
        #     `projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key`.
        #     This value may not be changed after the Repository has been created.
        # @!attribute [rw] mode
        #   @return [::Google::Cloud::ArtifactRegistry::V1::Repository::Mode]
        #     Optional. The mode of the repository.
        # @!attribute [rw] cleanup_policies
        #   @return [::Google::Protobuf::Map{::String => ::Google::Cloud::ArtifactRegistry::V1::CleanupPolicy}]
        #     Optional. Cleanup policies for this repository. Cleanup policies indicate
        #     when certain package versions can be automatically deleted. Map keys are
        #     policy IDs supplied by users during policy creation. They must unique
        #     within a repository and be under 128 characters in length.
        # @!attribute [r] size_bytes
        #   @return [::Integer]
        #     Output only. The size, in bytes, of all artifact storage in this
        #     repository. Repositories that are generally available or in public preview
        #      use this to calculate storage costs.
        # @!attribute [r] satisfies_pzs
        #   @return [::Boolean]
        #     Output only. If set, the repository satisfies physical zone separation.
        # @!attribute [rw] cleanup_policy_dry_run
        #   @return [::Boolean]
        #     Optional. If true, the cleanup pipeline is prevented from deleting versions
        #     in this repository.
        # @!attribute [rw] vulnerability_scanning_config
        #   @return [::Google::Cloud::ArtifactRegistry::V1::Repository::VulnerabilityScanningConfig]
        #     Optional. Config and state for vulnerability scanning of resources within
        #     this Repository.
        # @!attribute [rw] disallow_unspecified_mode
        #   @return [::Boolean]
        #     Optional. If this is true, an unspecified repo type will be treated as
        #     error rather than defaulting to standard.
        # @!attribute [r] satisfies_pzi
        #   @return [::Boolean]
        #     Output only. If set, the repository satisfies physical zone isolation.
        # @!attribute [r] registry_uri
        #   @return [::String]
        #     Output only. The repository endpoint, for example:
        #     `us-docker.pkg.dev/my-proj/my-repo`.
        class Repository
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # MavenRepositoryConfig is maven related repository details.
          # Provides additional configuration details for repositories of the maven
          # format type.
          # @!attribute [rw] allow_snapshot_overwrites
          #   @return [::Boolean]
          #     The repository with this flag will allow publishing
          #     the same snapshot versions.
          # @!attribute [rw] version_policy
          #   @return [::Google::Cloud::ArtifactRegistry::V1::Repository::MavenRepositoryConfig::VersionPolicy]
          #     Version policy defines the versions that the registry will accept.
          class MavenRepositoryConfig
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # VersionPolicy is the version policy for the repository.
            module VersionPolicy
              # VERSION_POLICY_UNSPECIFIED - the version policy is not defined.
              # When the version policy is not defined, no validation is performed
              # for the versions.
              VERSION_POLICY_UNSPECIFIED = 0

              # RELEASE - repository will accept only Release versions.
              RELEASE = 1

              # SNAPSHOT - repository will accept only Snapshot versions.
              SNAPSHOT = 2
            end
          end

          # DockerRepositoryConfig is docker related repository details.
          # Provides additional configuration details for repositories of the docker
          # format type.
          # @!attribute [rw] immutable_tags
          #   @return [::Boolean]
          #     The repository which enabled this flag prevents all tags from being
          #     modified, moved or deleted. This does not prevent tags from being
          #     created.
          class DockerRepositoryConfig
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # Config on whether to perform vulnerability scanning for resources in this
          # repository, as well as output fields describing current state.
          # @!attribute [rw] enablement_config
          #   @return [::Google::Cloud::ArtifactRegistry::V1::Repository::VulnerabilityScanningConfig::EnablementConfig]
          #     Optional. Config for whether this repository has vulnerability scanning
          #     disabled.
          # @!attribute [r] last_enable_time
          #   @return [::Google::Protobuf::Timestamp]
          #     Output only. The last time this repository config was enabled.
          # @!attribute [r] enablement_state
          #   @return [::Google::Cloud::ArtifactRegistry::V1::Repository::VulnerabilityScanningConfig::EnablementState]
          #     Output only. State of feature enablement, combining repository enablement
          #     config and API enablement state.
          # @!attribute [r] enablement_state_reason
          #   @return [::String]
          #     Output only. Reason for the repository state.
          class VulnerabilityScanningConfig
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods

            # Config for vulnerability scanning of resources in this repository.
            module EnablementConfig
              # Not set. This will be treated as INHERITED.
              ENABLEMENT_CONFIG_UNSPECIFIED = 0

              # Scanning is Enabled, but dependent on API enablement.
              INHERITED = 1

              # No automatic vulnerability scanning will be performed for this
              # repository.
              DISABLED = 2
            end

            # Describes the state of vulnerability scanning in this repository,
            # including both repository enablement and API enablement.
            module EnablementState
              # Enablement state is unclear.
              ENABLEMENT_STATE_UNSPECIFIED = 0

              # Repository does not support vulnerability scanning.
              SCANNING_UNSUPPORTED = 1

              # Vulnerability scanning is disabled for this repository.
              SCANNING_DISABLED = 2

              # Vulnerability scanning is active for this repository.
              SCANNING_ACTIVE = 3
            end
          end

          # @!attribute [rw] key
          #   @return [::String]
          # @!attribute [rw] value
          #   @return [::String]
          class LabelsEntry
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # @!attribute [rw] key
          #   @return [::String]
          # @!attribute [rw] value
          #   @return [::Google::Cloud::ArtifactRegistry::V1::CleanupPolicy]
          class CleanupPoliciesEntry
            include ::Google::Protobuf::MessageExts
            extend ::Google::Protobuf::MessageExts::ClassMethods
          end

          # A package format.
          module Format
            # Unspecified package format.
            FORMAT_UNSPECIFIED = 0

            # Docker package format.
            DOCKER = 1

            # Maven package format.
            MAVEN = 2

            # NPM package format.
            NPM = 3

            # APT package format.
            APT = 5

            # YUM package format.
            YUM = 6

            # Python package format.
            PYTHON = 8

            # Kubeflow Pipelines package format.
            KFP = 9

            # Go package format.
            GO = 10

            # Generic package format.
            GENERIC = 11
          end

          # The mode configures the repository to serve artifacts from different
          # sources.
          module Mode
            # Unspecified mode.
            MODE_UNSPECIFIED = 0

            # A standard repository storing artifacts.
            STANDARD_REPOSITORY = 1

            # A virtual repository to serve artifacts from one or more sources.
            VIRTUAL_REPOSITORY = 2

            # A remote repository to serve artifacts from a remote source.
            REMOTE_REPOSITORY = 3
          end
        end

        # The request to list repositories.
        # @!attribute [rw] parent
        #   @return [::String]
        #     Required. The name of the parent resource whose repositories will be
        #     listed.
        # @!attribute [rw] page_size
        #   @return [::Integer]
        #     The maximum number of repositories to return. Maximum page size is 1,000.
        # @!attribute [rw] page_token
        #   @return [::String]
        #     The next_page_token value returned from a previous list request, if any.
        # @!attribute [rw] filter
        #   @return [::String]
        #     Optional. An expression for filtering the results of the request. Filter
        #     rules are case insensitive. The fields eligible for filtering are:
        #
        #       * `name`
        #
        #      Examples of using a filter:
        #
        #     To filter the results of your request to repositories with the name
        #     `my-repo` in project `my-project` in the `us-central` region, append the
        #     following filter expression to your request:
        #
        #       * `name="projects/my-project/locations/us-central1/repositories/my-repo"`
        #
        #      You can also use wildcards to match any number of characters before or
        #      after the value:
        #
        #       * `name="projects/my-project/locations/us-central1/repositories/my-*"`
        #       * `name="projects/my-project/locations/us-central1/repositories/*repo"`
        #       * `name="projects/my-project/locations/us-central1/repositories/*repo*"`
        # @!attribute [rw] order_by
        #   @return [::String]
        #     Optional. The field to order the results by.
        class ListRepositoriesRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # The response from listing repositories.
        # @!attribute [rw] repositories
        #   @return [::Array<::Google::Cloud::ArtifactRegistry::V1::Repository>]
        #     The repositories returned.
        # @!attribute [rw] next_page_token
        #   @return [::String]
        #     The token to retrieve the next page of repositories, or empty if there are
        #     no more repositories to return.
        class ListRepositoriesResponse
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # The request to retrieve a repository.
        # @!attribute [rw] name
        #   @return [::String]
        #     Required. The name of the repository to retrieve.
        class GetRepositoryRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # The request to create a new repository.
        # @!attribute [rw] parent
        #   @return [::String]
        #     Required. The name of the parent resource where the repository will be
        #     created.
        # @!attribute [rw] repository_id
        #   @return [::String]
        #     Required. The repository id to use for this repository.
        # @!attribute [rw] repository
        #   @return [::Google::Cloud::ArtifactRegistry::V1::Repository]
        #     Required. The repository to be created.
        class CreateRepositoryRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # The request to update a repository.
        # @!attribute [rw] repository
        #   @return [::Google::Cloud::ArtifactRegistry::V1::Repository]
        #     The repository that replaces the resource on the server.
        # @!attribute [rw] update_mask
        #   @return [::Google::Protobuf::FieldMask]
        #     The update mask applies to the resource. For the `FieldMask` definition,
        #     see
        #     https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask
        class UpdateRepositoryRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # The request to delete a repository.
        # @!attribute [rw] name
        #   @return [::String]
        #     Required. The name of the repository to delete.
        class DeleteRepositoryRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end
      end
    end
  end
end
