

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Trabalhando com pacotes em CodeArtifact
<a name="packages"></a>

Os tópicos a seguir mostram como realizar ações em pacotes usando a CodeArtifact CLI e a API.

**Topics**
+ [Visão geral dos pacotes](packages-overview.md)
+ [Listar nomes de pacotes](list-packages.md)
+ [Listar versões de pacotes](list-packages-versions.md)
+ [Listar ativos da versão do pacote](list-assets.md)
+ [Baixe ativos da versão do pacote](download-assets.md)
+ [Copiar pacotes entre repositórios](copy-package.md)
+ [Excluir um pacote ou uma versão do pacote](delete-package.md)
+ [Exiba e atualize os detalhes e dependências da versão do pacote](describe-package-version.md)
+ [Atualizar o status da versão do pacote](update-package-version-status.md)
+ [Editar controles de origem do pacote](package-origin-controls.md)

# Visão geral dos pacotes
<a name="packages-overview"></a>

Um *pacote* é formado pelo pacote de software e os metadados necessários para resolver dependências e instalar o software. Em CodeArtifact, um pacote consiste em um nome de pacote, um [namespace](codeartifact-concepts.md#welcome-concepts-package-namespace) opcional, como `@types` in`@types/node`, um conjunto de versões de pacote e metadados em nível de pacote, como tags npm.

**Contents**
+ [Formatos de pacote com suporte](#supported-package-formats)
+ [Publicação de pacotes](#package-publishing)
  + [Permissões de publicação](#package-publishing-permissions)
  + [Substituindo ativos do pacote](#package-publishing-overwrite-assets)
  + [Pacotes privados e repositórios públicos](#package-publishing-upstreams-direct)
  + [Publicação de versões de pacotes corrigidos](#package-publishing-patched-versions)
  + [Limites de tamanho de ativos para publicação](#package-publishing-asset-size-limits)
  + [Latência de publicação](#package-publishing-latency)
+ [Satus da versão do pacote](#package-version-status)
+ [Normalização do nome e da versão do pacote e do nome do ativo](#package-name-normalization)

## Formatos de pacote com suporte
<a name="supported-package-formats"></a>

AWS CodeArtifact [[suporta os [formatos de pacote Cargo](using-cargo.md), [genérico](using-generic.md), [Maven](using-maven.md), [npm](using-npm.md), [NuGet](using-nuget.md)[PyPI, Ruby, Swift](using-python.md).](using-swift.md)](using-ruby.md)

## Publicação de pacotes
<a name="package-publishing"></a>

 Você pode publicar novas versões de qualquer [formato de pacote compatível](#supported-package-formats) em um CodeArtifact repositório usando ferramentas como `npm``twine`,`Maven`,`Gradle`,`nuget`, e. `dotnet`

### Permissões de publicação
<a name="package-publishing-permissions"></a>

Seu usuário ou função AWS Identity and Access Management (IAM) deve ter permissões para publicar no repositório de destino. As seguintes permissões são necessárias para publicar pacotes:
+ **Cargo:** `codeartifact:PublishPackageVersion`
+ **generic:** `codeartifact:PublishPackageVersion`
+ **Maven:** `codeartifact:PublishPackageVersion` e `codeartifact:PutPackageMetadata`
+ **npm:** `codeartifact:PublishPackageVersion`
+ **NuGet:** `codeartifact:PublishPackageVersion` e `codeartifact:ReadFromRepository`
+ **Python:** `codeartifact:PublishPackageVersion`
+ **Rubi:** `codeartifact:PublishPackageVersion`
+ **Rápido:** `codeartifact:PublishPackageVersion`

Na lista de permissões anterior, a política do IAM deve especificar o recurso `package` para as permissões `codeartifact:PublishPackageVersion` e `codeartifact:PutPackageMetadata`. Ela também deve especificar o recurso `repository` para a permissão `codeartifact:ReadFromRepository`.

Para obter mais informações sobre permissões em CodeArtifact, consulte[AWS CodeArtifact referência de permissões](auth-and-access-control-permissions-reference.md).

### Substituindo ativos do pacote
<a name="package-publishing-overwrite-assets"></a>

 Você não pode republicar um ativo de pacote que já existe com conteúdo diferente. Por exemplo, suponha que você já tenha publicado um pacote Maven com um ativo `mypackage-1.0.jar` JAR. Você só poderá publicar esse ativo outra vez se a soma de verificação dos ativos antigos e novos for idêntica. Para republicar o mesmo ativo com novo conteúdo, primeiro exclua a versão do pacote usando o comando **delete-package-versions**. Tentar republicar o mesmo nome de ativo com conteúdo diferente resultará em um erro de conflito HTTP 409. 

 Para formatos de pacote compatíveis com vários ativos (genérico, PyPI e Maven), você pode adicionar novos ativos com nomes diferentes a uma versão de pacote existente, supondo que você tenha as permissões necessárias. Para pacotes genéricos, você pode adicionar novos ativos, desde que a versão do pacote esteja no estado `Unfinished`. Como o npm é compatível apenas com um único ativo por versão de pacote, para modificar uma versão de pacote publicada de qualquer forma, você deve primeiro excluí-la usando **delete-package-versions**. 

 Se você tentar republicar um ativo que já existe (por exemplo, `mypackage-1.0.jar`) e o conteúdo do ativo publicado e o do novo ativo forem idênticos, a operação será bem-sucedida porque é idempotente. 

### Pacotes privados e repositórios públicos
<a name="package-publishing-upstreams-direct"></a>

 CodeArtifact não publica pacotes armazenados em CodeArtifact repositórios em repositórios públicos, como npmjs.com ou Maven Central. CodeArtifact importa pacotes de repositórios públicos para um CodeArtifact repositório, mas nunca move pacotes na outra direção. Os pacotes que você publica CodeArtifact nos repositórios permanecem privados e só estão disponíveis para as AWS contas, funções e usuários aos quais você concedeu acesso.

### Publicação de versões de pacotes corrigidos
<a name="package-publishing-patched-versions"></a>

 Às vezes, talvez você queira publicar uma versão modificada do pacote, potencialmente aquela disponível em um repositório público. Por exemplo, você pode ter encontrado um bug em uma dependência crítica do aplicativo chamada `mydep 1.1` e precisa corrigi-lo antes que o fornecedor do pacote possa revisar e aceitar a alteração. Conforme descrito anteriormente, CodeArtifact impede que você publique `mydep 1.1` no seu CodeArtifact repositório se o repositório público puder ser acessado a partir do seu repositório por meio de CodeArtifact repositórios upstream e uma conexão externa.

Para contornar isso, publique a versão do pacote em um CodeArtifact repositório diferente onde o repositório público não esteja acessível. Em seguida, use a `copy-package-versions` API para copiar a versão corrigida do `mydep 1.1` para o CodeArtifact repositório de onde você a consumirá. 

### Limites de tamanho de ativos para publicação
<a name="package-publishing-asset-size-limits"></a>

O tamanho máximo de um ativo de pacote que pode ser publicado é limitado pela cota **Máxima do tamanho do arquivo do ativo** mostrada em [Cotas em AWS CodeArtifact](service-limits.md). Por exemplo, você não pode publicar uma roda Maven JAR ou Python maior que a cota máxima atual do tamanho do arquivo do ativo. Se você precisar armazenar ativos maiores CodeArtifact, solicite um aumento de cota.

Além da cota máxima do tamanho do arquivo do ativo, o tamanho máximo de uma solicitação de publicação para pacotes npm é de 2 GB. Esse limite é independente da cota máxima do tamanho do arquivo do ativo e não pode ser aumentado com um aumento de cota. Em uma solicitação de publicação npm (HTTP PUT), os metadados do pacote e o conteúdo do arquivo tar do pacote npm são agrupados. Por esse motivo, o tamanho máximo real de um pacote npm que pode ser publicado varia e depende do tamanho dos metadados incluídos.

**nota**  
Os pacotes npm publicados são limitados a um tamanho máximo inferior a 2 GB.

### Latência de publicação
<a name="package-publishing-latency"></a>

As versões de pacotes publicadas em um CodeArtifact repositório geralmente estão disponíveis para download em menos de um segundo. Por exemplo, se você publicar uma versão do pacote npm em CodeArtifact with`npm publish`, essa versão deverá estar disponível para um `npm install` comando em menos de um segundo. No entanto, a publicação pode ser inconsistente e, às vezes, demorar mais. Se você precisar usar uma versão do pacote imediatamente após a publicação, use novas tentativas para garantir que o download seja confiável. Por exemplo, depois de publicar a versão do pacote, repita o download até três vezes se a versão do pacote recém-publicada não estiver disponível inicialmente na primeira tentativa de download.

**nota**  
A importação de uma versão do pacote de um repositório público normalmente leva mais tempo do que a publicação. Para obter mais informações, consulte [Latência da conexão externa](external-connection-requesting-packages.md#external-connection-latency).

## Satus da versão do pacote
<a name="package-version-status"></a>

Cada versão do pacote CodeArtifact tem um status que descreve o estado atual e a disponibilidade da versão do pacote. Você pode alterar o status da versão do pacote no AWS CLI e no SDK. Para obter mais informações, consulte [Atualizar o status da versão do pacote](update-package-version-status.md). 

Os seguintes valores de status da versão do pacote são possíveis:
+  **Publicado** — A versão do pacote foi publicada com sucesso e pode ser solicitada usando um gerenciador de pacotes. A versão do pacote será incluída nas listas de versões de pacotes retornadas aos gerenciadores de pacotes, por exemplo, na saída de `npm view <package-name> versions`. Todos os ativos da versão do pacote estão disponíveis no repositório. 
+  **Não concluído** — O cliente carregou um ou mais ativos para uma versão do pacote, mas não a finalizou ao movê-la para o estado `Published`. No momento, apenas as versões genéricas e do pacote Maven podem ter o status de `Unfinished`. Para pacotes Maven, isso pode ocorrer quando o cliente carrega um ou mais ativos para uma versão do pacote, mas não publica um arquivo `maven-metadata.xml` para o pacote que inclui essa versão. Quando uma versão do pacote Maven estiver **Não concluída**, ela não será incluída nas listas de versões retornadas aos clientes, como `mvn` ou `gradle`. Portanto, ela não poderá ser usada como parte de uma compilação. Pacotes genéricos podem ser mantidos deliberadamente no `Unfinished` estado fornecendo o `unfinished` sinalizador ao chamar a [PublishPackageVersion](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PublishPackageVersion.html)API. Um pacote genérico pode ser alterado para o `Published` estado omitindo a `unfinished` sinalização ou chamando a [UpdatePackageVersionsStatus](https://docs.aws.amazon.com//codeartifact/latest/APIReference/API_UpdatePackageVersionsStatus.html)API. 
+  **Não listado** — Os ativos da versão do pacote estão disponíveis para download no repositório, mas a versão do pacote não está incluída na lista de versões retornadas aos gerenciadores de pacotes. Por exemplo, para um pacote npm, a saída de `npm view <package-name> versions` não incluirá a versão do pacote. Isso significa que a lógica de resolução de dependências do npm não selecionará a versão do pacote porque a versão não aparece na lista de versões disponíveis. No entanto, se a versão do pacote **Não listado** já estiver referenciada em um arquivo `npm package-lock.json`, ela ainda poderá ser baixada e instalada, por exemplo, durante a execução de `npm ci`. 
+  **Arquivado** — Os ativos da versão do pacote não podem mais ser baixados. A versão do pacote não será incluída na lista de versões retornada aos gerenciadores de pacotes. Como os ativos não estão disponíveis, o consumo da versão do pacote pelos clientes é bloqueado. Se a compilação do seu aplicativo depender de uma versão atualizada para **Arquivado**, a compilação será interrompida, supondo que a versão do pacote não tenha sido armazenada em cache localmente. [Você não pode usar um gerenciador de pacotes ou uma ferramenta de compilação para republicar uma versão de pacote **arquivado** porque ela ainda está presente no repositório, mas você pode alterar o status da versão do pacote de volta para **Não listada** ou **Publicada** com a API. UpdatePackageVersionsStatus ](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_UpdatePackageVersionsStatus.html) 
+  **Descartada** — A versão do pacote não aparece nas listagens e os ativos não podem ser baixados do repositório. A principal diferença entre **descartado** e **arquivado** é que, com o status de **descartado**, os ativos da versão do pacote serão excluídos permanentemente por. CodeArtifact Por esse motivo, você não pode mover uma versão de pacote de **Descartada** para **Arquivada**, **Não Listada** ou **Publicada**. A versão do pacote não pode mais ser usada porque os ativos foram excluídos. Depois que uma versão do pacote for marcada como **Descartada**, você não será mais cobrado pelo armazenamento dos ativos do pacote. 

As versões do pacote de todos os status serão retornadas por padrão ao chamar list-package-versions sem nenhum `--status` parâmetro.

 Além dos estados listados anteriormente, uma versão do pacote também pode ser excluída com a [DeletePackageVersionsAPI](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DeletePackageVersions.html). Depois de ser excluída, uma versão do pacote não está mais no repositório e você pode republicá-la livremente usando um gerenciador de pacotes ou uma ferramenta de compilação. Depois que uma versão do pacote for excluída, você não será mais cobrado pelo armazenamento dos ativos dessa versão. 

## Normalização do nome e da versão do pacote e do nome do ativo
<a name="package-name-normalization"></a>

CodeArtifact normaliza nomes de pacotes, versões de pacotes e nomes de ativos antes de armazená-los, o que significa que os nomes ou versões CodeArtifact podem ser diferentes do nome ou versão fornecidos quando o pacote foi publicado. Para obter mais informações sobre como os nomes e as versões são normalizados CodeArtifact para cada tipo de pacote, consulte a documentação a seguir:
+ [Normalização do nome do pacote Python](python-name-normalization.md)
+ [Normalização do nome, versão e nome do ativo do pacote NuGet](nuget-name-normalization.md)

CodeArtifact não executa a normalização em outros formatos de pacote.

# Listar nomes de pacotes
<a name="list-packages"></a>

Use o `list-packages` comando in CodeArtifact para obter uma lista de todos os nomes de pacotes em um repositório. Esse comando retorna apenas os nomes dos pacotes, não as versões.

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo
```

Exemplo de saída:

```
{
    "nextToken": "eyJidWNrZXRJZCI6I...",
    "packages": [
        {
            "package": "acorn",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        },
        {
            "package": "acorn-dynamic-import",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        },
        {
            "package": "ajv",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        },
        {
            "package": "ajv-keywords",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        },
        {
            "package": "anymatch",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        },
        {
            "package": "ast",
            "namespace": "webassemblyjs",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        }
    ]
}
```

## Listar nomes de pacotes npm
<a name="list-packages-npm"></a>

Para listar apenas os nomes dos pacotes npm, defina o valor da opção `--format` como `npm`.

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo  \
    --format npm
```

Para listar pacotes npm em um namespace (*escopo* npm), use as opções `--namespace` e `--format`.

**Importante**  
O valor da opção `--namespace` não deve incluir o `@` inicial. Para pesquisar o namespace`@types`, defina o valor como. *types*

**nota**  
A opção `--namespace` filtra por prefixo de namespace. Qualquer pacote npm com um escopo que comece com o valor passado para a opção `--namespace` será retornado na resposta `list-packages`.

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo  \
    --format npm --namespace types
```

Exemplo de saída:

```
{
    "nextToken": "eyJidWNrZXRJZ...",
    "packages": [
        {
            "package": "3d-bin-packing",
            "namespace": "types",
            "format": "npm"

        },
        {
            "package": "a-big-triangle",
            "namespace": "types",
            "format": "npm"

        },
        {
            "package": "a11y-dialog",
            "namespace": "types",
            "format": "npm"

        }
    ]
}
```

## Listar nomes de pacotes Maven
<a name="list-packages-maven"></a>

Para listar apenas os nomes dos pacotes Maven, defina o valor da opção `--format` como `maven`. Você também deve especificar o ID do grupo Maven na opção `--namespace`.

**nota**  
A opção `--namespace` filtra por prefixo de namespace. Qualquer pacote npm com um escopo que comece com o valor passado para a opção `--namespace` será retornado na resposta `list-packages`.

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo  \
    --format maven --namespace org.apache.commons
```

Exemplo de saída:

```
{
    "nextToken": "eyJidWNrZXRJZ...",
    "packages": [
        {
            "package": "commons-lang3",
            "namespace": "org.apache.commons",
            "format": "maven"

        },
        {
            "package": "commons-collections4",
            "namespace": "org.apache.commons",
            "format": "maven"

        },
        {
            "package": "commons-compress",
            "namespace": "org.apache.commons",
            "format": "maven"

        }
    ]
}
```

## Listar nomes de pacotes Python
<a name="list-packages-python"></a>

Para listar apenas os nomes dos pacotes Python, defina o valor da opção `--format` como `pypi`.

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo  \
    --format pypi
```

## Filtrar por prefixo do nome do pacote
<a name="list-packages-package-prefix"></a>

 Para retornar pacotes que começam com uma string especificada, você pode usar a opção `--package-prefix`. 

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo  \
    --format npm --package-prefix pat
```

Exemplo de saída:

```
{
    "nextToken": "eyJidWNrZXRJZ...",
    "packages": [
        {
            "package": "path",
            "format": "npm"

        },
        {
            "package": "pat-test",
            "format": "npm"

        },
        {
            "package": "patch-math3",
            "format": "npm"

        }
    ]
}
```

## Combinações de opções de pesquisa compatíveis
<a name="list-packages-option-combinations"></a>

Você pode usar as opções `--format`, `--namespace` e `--package-prefix` em qualquer combinação, exceto que `--namespace` não pode ser usada sozinha. Pesquisar todos os pacotes npm com um escopo que começa com `@types` exige que a opção `--format` seja especificada. Usar `--namespace` por si só resulta em um erro. 

 Não usar nenhuma das três opções também é compatível com `list-packages` e retornará todos os pacotes de todos os formatos presentes no repositório. 

## Formatar resultado
<a name="list-packages-format-output"></a>

 Você pode usar parâmetros que estão disponíveis para todos os AWS CLI comandos para tornar a `list-packages` resposta compacta e mais legível. Use o parâmetro `--query` para especificar o formato de cada versão de pacote retornada. Use o parâmetro `--output` para formatar a resposta como texto sem formatação. 

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo \
  --output text --query 'packages[*].[package]'
```

Exemplo de saída:

```
accepts
array-flatten
body-parser
bytes
content-disposition
content-type
cookie
cookie-signature
```

 Para obter mais informações, consulte [Controlar a saída do comando de AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output.html) no *Guia do usuário do AWS Command Line Interface *. 

## Padrões e outras opções
<a name="list-packages-defaults-options"></a>

 Por padrão, o número máximo de resultados retornados por `list-packages` é 100. Você pode alterar esse limite de resultados usando a opção `--max-results`.

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo --max-results 20
```

O valor máximo permitido de `--max-results` é 1.000. Para permitir a listagem de pacotes em repositórios com mais de 1.000 pacotes, `list-packages` é compatível com a paginação usando o campo `nextToken` na resposta. Se o número de pacotes no repositório for maior que o valor de `--max-results`, você poderá passar o valor de `nextToken` para outra invocação de `list-packages` para obter a próxima página de resultados.

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo \
  --next-token rO0ABXNyAEdjb...
```

# Listar versões de pacotes
<a name="list-packages-versions"></a>

Use o `list-package-versions` comando in AWS CodeArtifact para obter uma lista de todas as versões de um nome de pacote em um repositório.

```
aws codeartifact list-package-versions --package kind-of \ 
--domain my_domain --domain-owner 111122223333 \
--repository my_repository --format npm
```

Exemplo de saída:

```
{
  "defaultDisplayVersion": "1.0.1",
  "format": "npm",
  "package": "kind-of",
  "versions": [
      {
          "version": "1.0.1",
          "revision": "REVISION-SAMPLE-1-C7F4S5E9B772FC",
          "status": "Published",
          "origin": {
                "domainEntryPoint": {
                    "externalConnectionName": "public:npmjs"
                },
                "originType": "EXTERNAL"
            }
      },
      {
          "version": "1.0.0",
          "revision": "REVISION-SAMPLE-2-C752BEEF6D2CFC",
          "status": "Published",
          "origin": {
                "domainEntryPoint": {
                    "externalConnectionName": "public:npmjs"
                },
                "originType": "EXTERNAL"
            }
      },
      {
          "version": "0.1.2",
          "revision": "REVISION-SAMPLE-3-654S65A5C5E1FC",
          "status": "Published",
          "origin": {
                "domainEntryPoint": {
                    "externalConnectionName": "public:npmjs"
                },
                "originType": "EXTERNAL"
            }
      },
      {
          "version": "0.1.1",
          "revision": "REVISION-SAMPLE-1-C7F4S5E9B772FC"",
          "status": "Published",
          "origin": {
                "domainEntryPoint": {
                    "externalConnectionName": "public:npmjs"
                },
                "originType": "EXTERNAL"
            }
      },
      {
          "version": "0.1.0",
          "revision": "REVISION-SAMPLE-4-AF669139B772FC",
          "status": "Published",
          "origin": {
                "domainEntryPoint": {
                    "externalConnectionName": "public:npmjs"
                },
                "originType": "EXTERNAL"
            }
      }        
  ]
}
```

Você pode adicionar o parâmetro `--status` à chamada `list-package-versions` para filtrar os resultados com base no status da versão do pacote. Para obter mais informações sobre o status da versão do pacote, consulte [Satus da versão do pacote](packages-overview.md#package-version-status). 

 Você pode paginar a resposta de `list-package-versions` usando os parâmetros `--max-results` e `--next-token`. Para `--max-results`, especifique um número inteiro de 1 a 1000 para especificar o número de resultados retornados em uma única página. Ele assume 50 como padrão. Para retornar as páginas subsequentes, execute `list-package-versions` outra vez e passe o valor `nextToken` recebido na saída do comando anterior para `--next-token`. Quando a opção `--next-token` não é usada, a primeira página de resultados sempre é retornada. 

 O comando `list-package-versions` não lista versões do pacote em repositórios upstream. No entanto, as referências às versões do pacote em um repositório upstream que foram copiadas para o seu repositório durante uma solicitação de versão do pacote são listadas. Para obter mais informações, consulte [Trabalhando com repositórios upstream em CodeArtifact](repos-upstream.md). 

## Listar versões do pacote npm
<a name="list-packages-versions-npm"></a>

Para listar todas as versões de um pacote npm, defina o valor da opção `--format` como `npm`.

```
aws codeartifact list-package-versions --package my_package --domain my_domain \ 
 --domain-owner 111122223333 --repository my_repo --format npm
```

Para listar versões do pacote npm em um namespace específico (*escopo* npm), use a opção `--namespace`. O valor da opção `--namespace` não deve incluir o `@` inicial. Para pesquisar o namespace`@types`, defina o valor como. *types*

```
aws codeartifact list-package-versions --package my_package --domain my_domain \
 --domain-owner 111122223333 --repository my_repo --format npm \
 --namespace types
```

## Listar as versões do pacote Maven
<a name="list-packages-versions-maven"></a>

Para listar todas as versões de um pacote Maven, defina o valor da opção `--format` como `maven`. Você também deve especificar o ID do grupo Maven na opção `--namespace`.

```
aws codeartifact list-package-versions --package my_package --domain my_domain \
 --domain-owner 111122223333 --repository my_repo --format maven \
 --namespace org.apache.commons
```

## Classificar versões
<a name="list-package-versions-sorting"></a>

 O `list-package-versions` pode gerar versões classificadas em ordem decrescente com base no horário de publicação (as versões publicadas mais recentemente são listadas primeiro). Use o parâmetro `--sort-by` com um valor de `PUBLISHED_TIME`, como segue.

```
aws codeartifact list-package-versions --domain my_domain --domain-owner 111122223333 --repository my_repository  \
--format npm --package webpack --max-results 5 --sort-by PUBLISHED_TIME
```

 Exemplo de saída: 

```
{

  "defaultDisplayVersion": "4.41.2",
  "format": "npm",
  "package": "webpack",
  "versions": [
      { 
        "version": "5.0.0-beta.7", 
        "revision": "REVISION-SAMPLE-1-C7F4S5E9B772FC",
        "status": "Published"
      },
      { 
        "version": "5.0.0-beta.6", 
        "revision": "REVISION-SAMPLE-2-C752BEEF6D2CFC",
        "status": "Published" 
      },
      { 
        "version": "5.0.0-beta.5", 
        "revision": "REVISION-SAMPLE-3-654S65A5C5E1FC",
        "status": "Published"
      },
      { 
        "version": "5.0.0-beta.4", 
        "revision": "REVISION-SAMPLE-4-AF669139B772FC",
        "status": "Published"
      },
      { 
        "version": "5.0.0-beta.3", 
        "revision": "REVISION-SAMPLE-5-C752BEE9B772FC",
        "status": "Published"
      }
  ],
  "nextToken": "eyJsaXN0UGF...."
}
```

## Versão de exibição padrão
<a name="list-package-versions-default-version"></a>

 O valor de retorno para `defaultDisplayVersion` depende do formato do pacote: 
+  Para pacotes genéricos, Maven e PyPI, é a versão mais recente do pacote publicada. 
+  Para pacotes npm, é a versão referenciada pela tag `latest`. Se a tag `latest` não estiver definida, é a versão mais recente do pacote publicada. 

## Formatar resultado
<a name="list-package-versions-format-output"></a>

 Você pode usar parâmetros que estão disponíveis para todos os AWS CLI comandos para tornar a `list-package-versions` resposta compacta e mais legível. Use o parâmetro `--query` para especificar o formato de cada versão de pacote retornada. Use o parâmetro `--output` para formatar a resposta como texto sem formatação. 

```
aws codeartifact list-package-versions --package my-package-name --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format npm --output text --query 'versions[*].[version]'
```

Exemplo de saída:

```
0.1.1
0.1.2
0.1.0
3.0.0
```

 Para obter mais informações, consulte [Controlar a saída do comando de AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output.html) no *Guia do usuário do AWS Command Line Interface *. 

# Listar ativos da versão do pacote
<a name="list-assets"></a>

Um *ativo* é um arquivo individual (por exemplo, um arquivo npm ou `.tgz` arquivo Maven POM ou JAR) armazenado e associado CodeArtifact a uma versão do pacote. Você pode usar o comando `list-package-version-assets` para listar os ativos em cada versão do pacote.

Execute o `list-package-version-assets` comando para retornar as seguintes informações sobre cada ativo em sua AWS conta e sua AWS região atual:
+  Nome. 
+  Tamanho, em bytes. 
+  Um conjunto de valores de hash usados para validação da soma de verificação. 

Por exemplo, use o comando a seguir para listar os ativos do pacote Python `flatten-json`, versão `0.1.7`.

```
aws codeartifact list-package-version-assets --domain my_domain --domain-owner 111122223333 \
 --repository my_repo --format pypi --package flatten-json \
 --package-version 0.1.7
```

A seguir, é mostrada a saída.

```
{
    "format": "pypi",
    "package": "flatten-json",
    "version": "0.1.7",
    "versionRevision": "REVISION-SAMPLE-1-C7F4S5E9B772FC",
    "assets": [
        {
            "name": "flatten_json-0.1.7-py3-none-any.whl",
            "size": 31520,
            "hashes": {
                "MD5": "41bba98d5b9219c43089eEXAMPLE-MD5",
                "SHA-1": "69b215c25dd4cda1d997a786ec6EXAMPLE-SHA-1",
                "SHA-256": "43f24850b7b7b7d79c5fa652418518fbdf427e602b1edabe6EXAMPLE-SHA-256",
                "SHA-512": "3947382ac2c180ee3f2aba4f8788241527c8db9dfe9f4b039abe9fc560aaf5a1fced7bd1e80a0dca9ce320d95f0864e0dec3ac4f2f7b2b2cbEXAMPLE-SHA-512"
            }
        },
        {
            "name": "flatten_json-0.1.7.tar.gz",
            "size": 2865,
            "hashes": {
                "MD5": "41bba98d5b9219c43089eEXAMPLE-MD5",
                "SHA-1": "69b215c25dd4cda1d997a786ec6EXAMPLE-SHA-1",
                "SHA-256": "43f24850b7b7b7d79c5fa652418518fbdf427e602b1edabe6EXAMPLE-SHA-256",
                "SHA-512": "3947382ac2c180ee3f2aba4f8788241527c8db9dfe9f4b039abe9fc560aaf5a1fced7bd1e80a0dca9ce320d95f0864e0dec3ac4f2f7b2b2cbEXAMPLE-SHA-512"
            }
        }
    ]
}
```

## Listar ativos de um pacote npm
<a name="list-assets-npm"></a>

Um pacote npm sempre tem um único ativo com o nome de `package.tgz`. Para listar os ativos de um pacote npm com escopo definido, inclua o escopo na opção `--namespace`.

```
aws codeartifact list-package-version-assets --domain my_domain --domain-owner 111122223333 \
 --repository my_repo --format npm --package webpack \
 --namespace types --package-version 4.9.2
```

## Listar ativos de um pacote Maven
<a name="list-assets-maven"></a>

Para listar os ativos de um pacote Maven, inclua o namespace do pacote na opção `--namespace`. Para listar os ativos do pacote `commons-cli:commons-cli` do Maven:

```
aws codeartifact list-package-version-assets --domain my_domain --domain-owner 111122223333 \
 --repository my_repo --format maven --package commons-cli \
 --namespace commons-cli --package-version 1.0
```

# Baixe ativos da versão do pacote
<a name="download-assets"></a>

Um *ativo* é um arquivo individual (por exemplo, um arquivo npm ou `.tgz` arquivo Maven POM ou JAR) armazenado e associado CodeArtifact a uma versão do pacote. Você pode baixar os ativos do pacote usando o `get-package-version-assets command`. Isso permite que você recupere ativos sem usar um cliente gerenciador de pacotes, como `npm` ou `pip`. Para baixar um ativo, você deve fornecer o nome do ativo, que pode ser obtido usando o comando `list-package-version-assets`. Para obter mais informações, consulte [Listar ativos da versão do pacote](list-assets.md). O ativo será baixado para o armazenamento local com um nome de arquivo especificado por você.

O exemplo a seguir baixa o *guava-27.1-jre.jar* ativo do pacote Maven *com.google.guava:guava* com a versão*27.1-jre*.

```
aws codeartifact get-package-version-asset --domain my_domain --domain-owner 111122223333 --repository my_repo \
    --format maven --namespace com.google.guava --package guava --package-version 27.1-jre \
    --asset guava-27.1-jre.jar \
    guava-27.1-jre.jar
```

 Neste exemplo, o nome do arquivo foi especificado *guava-27.1-jre.jar* pelo último argumento no comando anterior, então o ativo baixado será nomeado*guava-27.1-jre.jar*. 

A saída do comando será:

```
{
    "assetName": "guava-27.1-jre.jar",
    "packageVersion": "27.1-jre",
    "packageVersionRevision": "YGp9ck2tmy03PGSxioclfYzQ0BfTLR9zzhQJtERv62I="
}
```

**nota**  
Para baixar ativos de um pacote npm com escopo definido, inclua o escopo na opção `--namespace`. O símbolo `@` deve ser omitido ao usar `--namespace`. Por exemplo, se o escopo for `@types`, use `--namespace types`.

 O download de ativos usando `get-package-version-asset` requer a permissão `codeartifact:GetPackageVersionAsset` no recurso do pacote. Para obter mais informações sobre políticas de permissão baseadas em recursos, consulte [Políticas baseadas em recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based) no *Guia do usuário do AWS Identity and Access Management *. 

# Copiar pacotes entre repositórios
<a name="copy-package"></a>

Você pode copiar versões de pacotes de um repositório para outro no CodeArtifact. Isso pode ser útil para cenários como fluxos de trabalho de promoção de pacotes ou compartilhamento de versões de pacotes entre equipes ou projetos. Os repositórios de origem e de destino devem ter o mesmo domínio para copiar versões de pacotes.

## Permissões obrigatórias do IAM para copiar pacotes
<a name="copypackageversions-iam-actions"></a>

Para copiar as versões do pacote CodeArtifact, o usuário chamador deve ter as permissões necessárias do IAM e a política baseada em recursos anexada aos repositórios de origem e destino deve ter as permissões necessárias. Para obter mais informações sobre políticas e CodeArtifact repositórios de permissões com base em recursos, consulte. [Políticas de repositório](repo-policies.md)

O usuário que está chamando `copy-package-versions` deve ter a permissão `ReadFromRepository` no repositório de origem e a permissão `CopyPackageVersions` no repositório de destino.

O repositório de origem deve ter a permissão `ReadFromRepository` e o repositório de destino deve ter a permissão `CopyPackageVersions` atribuída à conta do IAM ou ao usuário que copia pacotes. As políticas a seguir são exemplos de políticas de repositório a serem adicionadas ao repositório de origem ou ao repositório de destino com o comando `put-repository-permissions-policy`. *111122223333*Substitua pelo ID da conta que está ligando`copy-package-versions`.

**nota**  
Chamar `put-repository-permissions-policy` substituirá a política atual do repositório, se houver. Você pode usar o comando `get-repository-permissions-policy` para ver se existe uma política. Para obter mais informações, consulte [Ler uma política](repo-policies.md#reading-a-policy). Se existir uma política, talvez você queira adicionar essas permissões a ela em vez de substituí-la.

**Exemplo de política de permissões do repositório de origem**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "codeartifact:ReadFromRepository"
            ],
            "Effect": "Allow",
            "Principal": {
                 "AWS": "arn:aws:iam::111122223333:root"
            },
            "Resource": "*"
        }
    ]
}
```

------

**Exemplo de política de permissões do repositório de destino**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "codeartifact:CopyPackageVersions"
            ],
            "Effect": "Allow",
            "Principal": {
                 "AWS": "arn:aws:iam::111122223333:root"
            },
            "Resource": "*"
        }
    ]
}
```

------

## Copiar versões do pacote
<a name="copy-package-versions"></a>

Use o `copy-package-versions` comando in CodeArtifact para copiar uma ou mais versões do pacote de um repositório de origem para um repositório de destino no mesmo domínio. O exemplo a seguir copiará as versões 6.0.2 e 4.0.0 de um pacote npm chamado `my-package` do repositório `my_repo` para o repositório `repo-2`.

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository my_repo \
 --destination-repository repo-2 --package my-package --format npm \
 --versions 6.0.2 4.0.0
```

Copie várias versões do mesmo nome de pacote em uma única operação. Para copiar versões de nomes de pacotes diferentes, você deve chamar `copy-package-versions` para cada um deles.

O comando anterior produzirá a seguinte saída, supondo que ambas as versões possam ser copiadas com sucesso.

```
{
   "successfulVersions": {
        "6.0.2": {
            "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        },
        "4.0.0": {
            "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        }
    },
    "failedVersions": {}
}
```

## Copiar um pacote dos repositórios upstream
<a name="copy-package-upstream"></a>

Normalmente, `copy-package-versions` só procura no repositório especificado pela opção `--source-repository` as versões a serem copiadas. No entanto, você pode copiar versões do repositório de origem e dos repositórios upstream usando a opção `--include-from-upstream`. Se você usa o CodeArtifact SDK, chame a `CopyPackageVersions` API com o `includeFromUpstream` parâmetro definido como true. Para obter mais informações, consulte [Trabalhando com repositórios upstream em CodeArtifact](repos-upstream.md).

## Copiar um pacote npm com escopo definido
<a name="copying-a-scoped-npm-package"></a>

 Para copiar uma versão do pacote npm em um escopo, use a opção `--namespace` para especificar o escopo. Por exemplo, para copiar o pacote `@types/react`, use `--namespace types`. O símbolo `@` deve ser omitido ao usar `--namespace`.

```
aws codeartifact copy-package-versions  --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \
 --destination-repository repo-2 --format npm --namespace types \
 --package react --versions 0.12.2
```

## Copiar versões do pacote Maven
<a name="copying-a-maven-package"></a>

Para copiar versões do pacote Maven entre repositórios, especifique o pacote a ser copiado passando o ID do grupo Maven com a opção `--namespace` e o artifactID Maven com a opção `--name`. Por exemplo, para copiar uma única versão de `com.google.guava:guava`:

```
 aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333  \
 --source-repository my_repo --destination-repository repo-2 --format maven --namespace com.google.guava \
 --package guava --versions 27.1-jre
```

Se a versão do pacote for copiada com sucesso, o resultado será semelhante ao seguinte.

```
{
    "successfulVersions": {
        "27.1-jre": {
            "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        }
    },
    "failedVersions": {}
}
```

## Versões que não existem no repositório de origem
<a name="versions-that-do-not-exist-in-the-source-repository"></a>

Se você especificar uma versão que não existe no repositório de origem, a cópia falhará. Se existirem algumas versões no repositório de origem e outras não existirem, nenhuma versão será copiada. No exemplo a seguir, a versão 0.2.0 do pacote npm do `array-unique` está presente no repositório de origem, mas a versão 5.6.7 não está:

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \
         --source-repository my_repo --destination-repository repo-2 --format npm \
         --package array-unique --versions 0.2.0 5.6.7
```

A saída neste cenário será semelhante ao seguinte:

```
{
    "successfulVersions": {},
    "failedVersions": {
        "0.2.0": {
            "errorCode": "SKIPPED",
            "errorMessage": "Version 0.2.0 was skipped"
        },
        "5.6.7": {
            "errorCode": "NOT_FOUND",
            "errorMessage": "Could not find version 5.6.7"
        }
    }
}
```

O código de erro `SKIPPED` é usado para indicar que a versão não foi copiada para o repositório de destino porque outra versão não pôde ser copiada. 

## Versões que já existem no repositório de destino
<a name="versions-that-already-exist-in-the-destination-repository"></a>

 Quando uma versão do pacote é copiada para um repositório onde ela já existe, CodeArtifact compara os ativos do pacote e os metadados do nível da versão do pacote nos dois repositórios.

 Se os ativos e metadados da versão do pacote forem idênticos nos repositórios de origem e de destino, uma cópia não será executada, mas a operação será considerada bem-sucedida. Isso significa que `copy-package-versions` é idempotente. Quando isso ocorrer, a versão que já estava presente nos repositórios de origem e de destino não será listada na saída do`copy-package-versions`.

No exemplo a seguir, duas versões do pacote npm `array-unique` estão presentes no repositório de origem `repo-1`. A versão 0.2.1 também está presente no repositório de destino `dest-repo` e a versão 0.2.0 não está.

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \
         --source-repository my_repo --destination-repository repo-2 --format npm --package array-unique \
         --versions 0.2.1 0.2.0
```

A saída neste cenário será semelhante ao seguinte:

```
{
    "successfulVersions": {
        "0.2.0": {
            "revision": "Yad+B1QcBq2kdEVrx1E1vSfHJVh8Pr61hBUkoWPGWX0=",
            "status": "Published"
        }
    },
    "failedVersions": {}
}
```

A versão 0.2.0 está listada no `successfulVersions` porque foi copiada com sucesso do repositório de origem para o de destino. A versão 0.2.1 não é mostrada na saída, pois já estava presente no repositório de destino.

 Se os ativos ou metadados da versão do pacote forem diferentes nos repositórios de origem e de destino, a operação de cópia falhará. Você pode usar o parâmetro `--allow-overwrite` para forçar uma substituição. 

Se existirem algumas versões no repositório de destino e outras não existirem, nenhuma versão será copiada. No exemplo a seguir, a versão 0.3.2 do pacote npm `array-unique` está presente nos repositórios de origem e de destino, mas o conteúdo da versão do pacote é diferente. A versão 0.2.1 está presente no repositório de origem, mas não no de destino.

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \
         --source-repository my_repo --destination-repository repo-2 --format npm --package array-unique \
         --versions 0.3.2 0.2.1
```

A saída neste cenário será semelhante ao seguinte:

```
{
    "successfulVersions": {},
    "failedVersions": {
        "0.2.1": {
            "errorCode": "SKIPPED",
            "errorMessage": "Version 0.2.1 was skipped"
        },
        "0.3.2": {
            "errorCode": "ALREADY_EXISTS",
            "errorMessage": "Version 0.3.2 already exists"
        }
    }
}
```

A versão 0.2.1 está marcada como `SKIPPED` porque não foi copiada para o repositório de destino. Ela não foi copiada porque a cópia da versão 0.3.2 falhou porque ela já estava presente no repositório de destino, mas não era idêntica nos repositórios de origem e de destino.

## Especificar uma revisão da versão do pacote
<a name="specify-package-version-revision"></a>

 A revisão da versão do pacote é uma string que especifica um determinado conjunto de ativos e metadados da versão de um pacote. Você pode especificar uma revisão da versão do pacote para copiar as versões do pacote que estão em um estado definido. Para especificar uma revisão da versão do pacote, use o parâmetro `--version-revisions` para passar uma ou mais versões do pacote separadas por vírgula e os pares de revisão da versão do pacote para o comando `copy-package-versions`. 

**nota**  
É necessário especificar o parâmetro `--versions` ou `--version-revisions` com `copy-package-versions`. Não é possível especificar ambos. 

O exemplo a seguir só copiará a versão 0.3.2 do pacote `my-package` se ela estiver presente no repositório de origem com a revisão da versão do pacote `REVISION-1-SAMPLE-6C81EFF7DA55CC`.

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \
 --destination-repository repo-2 --format npm --namespace my-namespace \
 --package my-package --version-revisions 0.3.2=REVISION-1-SAMPLE-6C81EFF7DA55CC
```

O exemplo a seguir copia duas versões do pacote `my-package`, 0.3.2 e 0.3.13. A cópia só será bem-sucedida se, no repositório de origem, a versão 0.3.2 do `my-package` tiver revisão `REVISION-1-SAMPLE-6C81EFF7DA55CC` e a versão 0.3.13 tiver revisão `REVISION-2-SAMPLE-55C752BEE772FC`.

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \
 --destination-repository repo-2 --format npm --namespace my-namespace \
 --package my-package --version-revisions 0.3.2=REVISION-1-SAMPLE-6C81EFF7DA55CC,0.3.13=REVISION-2-SAMPLE-55C752BEE772FC
```

 Para localizar as revisões de uma versão do pacote, use o comando `describe-package-version` ou `list-package-versions`. 

 Para obter mais informações, consulte [Revisão da versão do pacote](codeartifact-concepts.md#welcome-concepts-package-version-revision) e [CopyPackageVersion](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_CopyPackageVersions.html) na *Referência da API do CodeArtifact *. 

## Copiar pacotes npm
<a name="copying-npm-packages"></a>

 Para obter mais informações sobre o `copy-package-versions` comportamento com pacotes npm, consulte as [tags npm e a CopyPackageVersions API](npm-tags.md#tags-and-cpv). 

# Excluir um pacote ou uma versão do pacote
<a name="delete-package"></a>

É possível excluir uma ou mais versões de pacotes de cada vez usando o comando `delete-package-versions`. Para remover completamente um pacote de um repositório, incluindo todas as versões e configurações associadas, use o comando `delete-package`. Pode existir um pacote em um repositório sem nenhuma versão do pacote. Isso pode acontecer quando todas as versões são excluídas usando o comando `delete-package-versions` ou se o pacote foi criado sem nenhuma versão usando a operação de API `put-package-origin-configuration` (consulte [Editar controles de origem do pacote](package-origin-controls.md)).

**Topics**
+ [Excluir um pacote (AWS CLI)](#delete-package-CLI)
+ [Excluir um pacote (console)](#delete-package-console)
+ [Excluir uma versão de pacote (AWS CLI)](#delete-package-version-CLI)
+ [Excluir uma versão de pacote (console)](#delete-package-version-console)
+ [Excluir um pacote npm ou uma versão do pacote](#delete-package-npm)
+ [Excluir um pacote Maven ou uma versão do pacote](#delete-package-maven)
+ [Práticas recomendadas para excluir pacotes ou versões de pacotes](#delete-package-bp)

## Excluir um pacote (AWS CLI)
<a name="delete-package-CLI"></a>

Você pode excluir um pacote, incluindo todas as versões e configurações do pacote, usando o comando `delete-package`. O exemplo a seguir exclui o pacote PyPI chamado `my-package` no repositório `my_repo` no domínio `my_domain`:

```
aws codeartifact delete-package --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format pypi \
--package my-package
```

Exemplo de saída:

```
{
   "deletedPackage": { 
      "format": "pypi",
      "originConfiguration": { 
         "restrictions": { 
            "publish": "ALLOW",
            "upstream": "BLOCK"
         }
      },
      "package": "my-package"
   }
}
```

Você pode confirmar que o pacote foi excluído executando `describe-package` para o mesmo nome de pacote:

```
aws codeartifact describe-package --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format pypi --package my-package
```

## Excluir um pacote (console)
<a name="delete-package-console"></a>

1. Abra o AWS CodeArtifact console em [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home).

1. No painel de navegação, escolha **Repositories (Repositórios)**.

1. Escolha o **Repositório** do qual você deseja excluir um pacote.

1. Escolha o **Pacote** que você deseja excluir.

1. Escolha **Excluir pacote**.

## Excluir uma versão de pacote (AWS CLI)
<a name="delete-package-version-CLI"></a>

É possível excluir uma ou mais versões de pacotes de cada vez usando o comando `delete-package-versions`. O exemplo a seguir exclui as versões `4.0.0`, `4.0.1` e `5.0.0` do pacote PyPI chamado `my-package` no `my_repo` no domínio `my_domain`:

```
aws codeartifact delete-package-versions --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format pypi \
--package my-package --versions 4.0.0 4.0.1 5.0.0
```

Exemplo de saída:

```
{
   "successfulVersions": {
      "4.0.0": {
         "revision": "oxwwYC9dDeuBoCt6+PDSwL6OMZ7rXeiXy44BM32Iawo=",
            "status": "Deleted"
      },
      "4.0.1": {
         "revision": "byaaQR748wrsdBaT+PDSwL6OMZ7rXeiBKM0551aqWmo=",
            "status": "Deleted"
      },
      "5.0.0": {
         "revision": "yubm34QWeST345ts+ASeioPI354rXeiSWr734PotwRw=",
            "status": "Deleted"
      }
   },
   "failedVersions": {}
}
```

Você pode confirmar se as versões foram excluídas executando `list-package-versions` para o mesmo nome de pacote:

```
aws codeartifact list-package-versions --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format pypi --package my-package
```

## Excluir uma versão de pacote (console)
<a name="delete-package-version-console"></a>

1. Abra o AWS CodeArtifact console em [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home).

1. No painel de navegação, escolha **Repositories (Repositórios)**.

1. Escolha o **Repositório** do qual você deseja excluir versões de pacotes.

1. Escolha o **Pacote** do qual você deseja excluir versões.

1. Selecione a **Versão do pacote** que você deseja excluir.

1. Escolha **Excluir**.
**nota**  
No console, é possível excluir apenas uma versão de pacote de cada vez. Para excluir mais de um por vez, use a CLI.

## Excluir um pacote npm ou uma versão do pacote
<a name="delete-package-npm"></a>

Para excluir um pacote npm ou versões de pacotes individuais, defina a opção `--format` como `npm`. Para excluir uma versão de pacote npm com um escopo, use a opção `--namespace` para especificar o escopo. Por exemplo, para excluir o pacote `@types/react`, use `--namespace types`. Omita o símbolo `@` ao usar `--namespace`. 

```
aws codeartifact delete-package-versions --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format npm --namespace types \
--package react --versions 0.12.2
```

Para excluir o pacote `@types/react`, incluindo todas as versões:

```
aws codeartifact delete-package --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format npm --namespace types \
--package react
```

## Excluir um pacote Maven ou uma versão do pacote
<a name="delete-package-maven"></a>

Para excluir um pacote Maven ou versões de pacotes individuais, defina a opção `--format` como `maven` e especifique o pacote a ser excluído passando o ID do grupo Maven com a opção `--namespace` e o artifactID Maven com a opção `--name`. O exemplo a seguir mostra como excluir uma única versão de `com.google.guava:guava`:

```
 aws codeartifact delete-package-versions --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format maven --namespace com.google.guava \
--package guava --versions 27.1-jre
```

O exemplo a seguir mostra como excluir o pacote `com.google.guava:guava`, incluindo todas as versões:

```
 aws codeartifact delete-package --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format maven --namespace com.google.guava \
--package guava
```

## Práticas recomendadas para excluir pacotes ou versões de pacotes
<a name="delete-package-bp"></a>

Se você precisar excluir uma versão do pacote, como prática recomendada, convém criar um repositório para armazenar uma cópia de backup da versão do pacote que você deseja excluir. Você pode fazer isso primeiro chamando `copy-package-versions` para o repositório de backup: 

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository my_repo \
 --destination-repository repo-2 --package my-package --format npm \
 --versions 6.0.2 4.0.0
```

Após copiar a versão do pacote, será possível chamar `delete-package-versions` no pacote ou na versão do pacote que deseja excluir.

```
aws codeartifact delete-package-versions --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format pypi \
--package my-package --versions 4.0.0 4.0.1 5.0.0
```

# Exiba e atualize os detalhes e dependências da versão do pacote
<a name="describe-package-version"></a>

Você pode visualizar informações sobre a versão de um pacote, incluindo dependências, em CodeArtifact. Você também pode atualizar o status de uma versão de pacote. Para obter mais informações sobre o status da versão do pacote, consulte [Satus da versão do pacote](packages-overview.md#package-version-status). 

## Exibir detalhes da versão de pacote
<a name="view-package-details"></a>

 Use o comando `describe-package-version` para exibir os detalhes sobre as versões de pacote. Os detalhes da versão do pacote são extraídos de um pacote quando ele é publicado no. CodeArtifact Os detalhes em diferentes pacotes variam e dependem de seus formatos e da quantidade de informações que seus autores adicionaram a eles. 

 A maioria das informações na saída do comando `describe-package-version` depende do formato do pacote. Por exemplo, `describe-package-version` extrai as informações de um pacote npm do arquivo `package.json`. A revisão é criada por CodeArtifact. Para obter mais informações, consulte [Especificar uma revisão da versão do pacote](copy-package.md#specify-package-version-revision). 

 Duas versões de pacote com o mesmo nome podem estar no mesmo repositório se cada uma estiver em namespaces diferentes. Use o parâmetro `--namespace` opcional para especificar um namespace. Para obter mais informações, consulte [Exibir detalhes da versão de pacote npm](#describe-package-version-npm) ou [Exibir detalhes da versão de pacote Maven](#describe-package-version-maven).

 O exemplo a seguir retorna detalhes sobre a versão `1.9.0` de um pacote Python chamado `pyhamcrest` que está no repositório `my_repo`. 

```
aws codeartifact describe-package-version --domain my_domain --domain-owner 111122223333 --repository my_repo \
--format pypi --package pyhamcrest --package-version 1.9.0
```

 A saída deverá ser semelhante a:

```
{
  "format": "pypi",
  "package": "PyHamcrest",
  "displayName": "PyHamcrest",
  "version": "1.9.0",
  "summary": "Hamcrest framework for matcher objects",
  "homePage": "https://github.com/hamcrest/PyHamcrest",
  "publishedTime": 1566002944.273,
  "licenses": [
    {
      "id": "license-id",
      "name": "license-name"
    }
  ],
  "revision": "REVISION-SAMPLE-55C752BEE9B772FC"
}
```

**nota**  
CodeArtifact busca detalhes da versão do pacote, como a página inicial do pacote ou as informações da licença do pacote, a partir dos metadados fornecidos pelo autor do pacote. Se alguma dessas informações exceder 400 KB, que é o limite de tamanho do item do DynamoDB CodeArtifact , não será possível processar esses dados e talvez você não veja essas informações no console ou na resposta do. `describe-package-version` Por exemplo, um pacote python como [https://pypi. org/project/rapyd-sdk/](https://pypi.org/project/rapyd-sdk/) tem um campo de licença muito grande, então essas informações não seriam processadas pelo. CodeArtifact

## Exibir detalhes da versão de pacote npm
<a name="describe-package-version-npm"></a>

Para exibir detalhes sobre uma versão de pacote npm, defina o valor da opção `--format` como **npm**. Como opção, inclua o namespace da versão do pacote (*escopo* npm) na opção `--namespace`. O valor da opção `--namespace` não deve incluir o `@` inicial. Para pesquisar o namespace`@types`, defina o valor como. *types*

O exemplo a seguir retorna detalhes sobre a versão `4.41.5` de um pacote npm chamado `webpack` no escopo `@types`. 

```
aws codeartifact describe-package-version --domain my_domain --domain-owner 111122223333 --repository my_repo \
--format npm --package webpack --namespace types --package-version 4.41.5
```

 A saída deverá ser semelhante a: 

```
{
  "format": "npm",
  "namespace": "types",
  "package": "webpack",
  "displayName": "webpack",
  "version": "4.41.5",
  "summary": "Packs CommonJs/AMD modules for the browser. Allows ... further output omitted for brevity",
  "homePage": "https://github.com/webpack/webpack",
  "sourceCodeRepository": "https://github.com/webpack/webpack.git",
  "publishedTime": 1577481261.09,
  "licenses": [
    {
      "id": "license-id",
      "name": "license-name"
    }
  ],
  "revision": "REVISION-SAMPLE-55C752BEE9B772FC",
  "status": "Published",
  "origin": {
            "domainEntryPoint": {
                "externalConnectionName": "public:npmjs"
            },
            "originType": "EXTERNAL"
  }
}
```

## Exibir detalhes da versão de pacote Maven
<a name="describe-package-version-maven"></a>

Para exibir detalhes sobre uma versão de pacote Maven, defina o valor da opção `--format` como `maven` e inclua o namespace da versão do pacote na opção `--namespace`.

 O exemplo a seguir retorna detalhes sobre a versão `1.2` de um pacote Maven chamado `commons-rng-client-api` que está no namespace `org.apache.commons` e no repositório `my_repo`. 

```
aws codeartifact describe-package-version --domain my_domain --domain-owner 111122223333 --repository my_repo \
--format maven --namespace org.apache.commons --package commons-rng-client-api --package-version 1.2
```

 A saída deverá ser semelhante a:

```
{
  "format": "maven",
  "namespace": "org.apache.commons",
  "package": "commons-rng-client-api",
  "displayName": "Apache Commons RNG Client API",
  "version": "1.2",
  "summary": "API for client code that uses random numbers generators.",
  "publishedTime": 1567920624.849,
  "licenses": [],
  "revision": "REVISION-SAMPLE-55C752BEE9B772FC"
}
```

**nota**  
CodeArtifact não extrai informações detalhadas da versão do pacote dos arquivos POM principais. Os metadados de uma determinada versão do pacote incluirão apenas informações no POM para essa versão exata do pacote, não para o POM principal ou qualquer outro POM referenciado transitivamente usando a tag `parent` do POM. Isso significa que a saída de `describe-package-version` omitirá metadados (como informações de licença) para versões do pacote Maven que dependem de uma referência `parent` para conter esses metadados.

## Exibir dependências de versão de pacote
<a name="view-package-dependencies"></a>

 Use o comando `list-package-version-dependencies` para obter uma lista das dependências de uma versão do pacote. O comando a seguir lista as dependências de um pacote npm chamado `my-package`, versão `4.41.5`, no repositório `my_repo`, no domínio `my_domain`. 

```
aws codeartifact list-package-version-dependencies --domain my_domain --domain-owner 111122223333 --repository my_repo \
--format npm --package my-package --package-version 4.41.5
```

 A saída deverá ser semelhante a: 

```
{
  "dependencies": [
    {
      "namespace": "webassemblyjs",
      "package": "ast",
      "dependencyType": "regular",
      "versionRequirement": "1.8.5"
    },
    {
      "namespace": "webassemblyjs",
      "package": "helper-module-context",
      "dependencyType": "regular",
      "versionRequirement": "1.8.5"
    },
    {
      "namespace": "webassemblyjs",
      "package": "wasm-edit",
      "dependencyType": "regular",
      "versionRequirement": "1.8.5"
    }
  ],
  "versionRevision": "REVISION-SAMPLE-55C752BEE9B772FC"
}
```

*Para ver o intervalo de valores compatíveis com o campo dependencyType, consulte o tipo de [PackageDependency](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageDependency.html)dados na CodeArtifact API.*

## Exibir arquivo readme da versão do pacote
<a name="view-package-readme"></a>

 Alguns formatos de pacote, como npm, incluem um arquivo `README`. Use `get-package-version-readme` para obter o arquivo `README` de uma versão do pacote. O comando a seguir retorna o arquivo `README` de um pacote npm chamado `my-package`, versão `4.41.5`, no repositório `my_repo`, no domínio `my_domain`. 

**nota**  
CodeArtifact não suporta a exibição de arquivos readme de pacotes genéricos ou Maven.

```
aws codeartifact get-package-version-readme --domain my_domain --domain-owner 111122223333 --repository my_repo \
--format npm --package my-package --package-version 4.41.5
```

 A saída deverá ser semelhante a:

```
{  
  "format": "npm",
  "package": "my-package",
  "version": "4.41.5"
  "readme": "<div align=\"center\">\n   <a href=\https://github.com/webpack/webpack\"> ... more content ... \n",
  "versionRevision": "REVISION-SAMPLE-55C752BEE9B772FC"
}
```

# Atualizar o status da versão do pacote
<a name="update-package-version-status"></a>

Cada versão do pacote CodeArtifact tem um status que descreve o estado atual e a disponibilidade da versão do pacote. Você pode alterar o status da versão do pacote usando o console AWS CLI e o console.

**nota**  
Para obter mais informações sobre o status da versão do pacote, incluindo uma lista dos status disponíveis, consulte [Satus da versão do pacote](packages-overview.md#package-version-status). 

## Atualizar o status da versão do pacote
<a name="updating-pv-status"></a>

Definir o status de uma versão de pacote permite controlar como uma versão de pacote pode ser usada sem excluí-la completamente do repositório. Por exemplo, quando uma versão de pacote tem o status de `Unlisted`, ela ainda pode ser baixada normalmente, mas não aparecerá nas listas de versões de pacotes retornadas para comandos como `npm view`. A [UpdatePackageVersionsStatus API](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_UpdatePackageVersionsStatus.html) permite definir o status da versão do pacote de várias versões do mesmo pacote em uma única chamada de API. Para obter uma descrição dos diferentes status, consulte [Visão geral dos pacotes](packages-overview.md).

Use o comando `update-package-versions-status` para alterar o status de uma versão do pacote para `Published`, `Unlisted` ou `Archived`. Para conferir as permissões necessárias do IAM para usar o comando, consulte [Permissões obrigatórias do IAM para atualizar o status da versão do pacote](#update-package-version-status-iam). O exemplo a seguir define o status da versão 4.1.0 do pacote npm `chalk` como `Archived`.

```
aws codeartifact update-package-versions-status --domain my_domain
 --domain-owner 111122223333 --repository my_repo --format npm --package chalk 
--versions 4.1.0 --target-status Archived
```

Exemplo de saída:

```
{
    "successfulVersions": {
        "4.1.0": {
            "revision": "+Oz8skWbwY3k8M6SrNIqNj6bVH/ax+CxvkJx+No5j8I=",
            "status": "Archived"
        }
    },
    "failedVersions": {}
}
```

Este exemplo usa um pacote npm, mas o comando funciona de forma idêntica para outros formatos. Várias versões podem ser movidas para o mesmo status de destino usando um único comando, confira o exemplo a seguir.

```
aws codeartifact update-package-versions-status --domain my_domain
 --domain-owner 111122223333 --repository my_repo --format npm --package chalk 
--versions 4.1.0 4.1.1 --target-status Archived
```

Exemplo de saída:

```
{
    "successfulVersions": {
        "4.1.0": {
            "revision": "25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ4=",
            "status": "Archived"
        },
        "4.1.1": {
            "revision": "+Oz8skWbwY3k8M6SrNIqNj6bVH/ax+CxvkJx+No5j8I=",
            "status": "Archived"
        }
    },
    "failedVersions": {}
}
```

Observe que, uma vez publicada, uma versão do pacote não pode ser movida de volta ao estado `Unfinished`, portanto, esse status não é permitido como um valor para o parâmetro `--target-status`. Para mover a versão do pacote para o estado `Disposed`, use o comando `dispose-package-versions` no lugar, conforme descrito abaixo.

## Permissões obrigatórias do IAM para atualizar o status da versão do pacote
<a name="update-package-version-status-iam"></a>

Para chamar `update-package-versions-status` para um pacote, você deve ter a permissão `codeartifact:UpdatePackageVersionsStatus` no recurso do pacote. Isso significa que você pode conceder permissão para chamar `update-package-versions-status` por pacote. Por exemplo, uma política do IAM que concedesse permissão para chamar `update-package-versions-status` o pacote npm *chalk* incluiria uma declaração como a seguinte.

```
{
  "Action": [
    "codeartifact:UpdatePackageVersionsStatus"
  ],
  "Effect": "Allow",
  "Resource": "arn:aws:codeartifact:us-east-1:111122223333:package/my_domain/my_repo/npm//chalk"
}
```

## Atualizar o status de um pacote npm com escopo definido
<a name="update-package-version-status-scoped-npm"></a>

Para atualizar o status da versão do pacote de uma versão do pacote npm com um escopo, use o parâmetro `--namespace`. Por exemplo, para remover da lista a versão 8.0.0 do `@nestjs/core`, use o comando a seguir.

```
aws codeartifact update-package-versions-status --domain my_domain
 --domain-owner 111122223333 --repository my_repo --format npm --namespace nestjs 
--package core --versions 8.0.0 --target-status Unlisted
```

## Atualizar o status de um pacote Maven
<a name="update-package-version-status-maven"></a>

Os pacotes Maven sempre têm um ID de grupo, chamado de namespace em. CodeArtifact Use o parâmetro `--namespace` para especificar o ID do grupo Maven ao chamar `update-package-versions-status`. Por exemplo, para arquivar a versão 2.13.1 do pacote Maven `org.apache.logging.log4j:log4j`, use o comando a seguir.

```
aws codeartifact update-package-versions-status --domain my_domain
 --domain-owner 111122223333 --repository my_repo --format maven 
--namespace org.apache.logging.log4j --package log4j 
--versions 2.13.1 --target-status Archived
```

## Especificar uma revisão da versão do pacote
<a name="update-status-specify-package-version-revision"></a>

A revisão da versão do pacote é uma string que especifica um determinado conjunto de ativos e metadados da versão de um pacote. Você pode especificar uma revisão da versão do pacote para atualizar o status das versões do pacote que estão em um estado definido. Para especificar uma revisão da versão do pacote, use o parâmetro `--version-revisions` para passar uma ou mais versões do pacote separadas por vírgula e os pares de revisão da versão do pacote. O status de uma versão do pacote só será atualizado se a revisão atual da versão do pacote corresponder ao valor especificado.

**nota**  
O parâmetro `—-versions` também deve ser definido ao usar o parâmetro `--version-revisions`.

```
aws codeartifact update-package-versions-status --domain my_domain 
   --domain-owner 111122223333 --repository my_repo --format npm --package chalk 
   --version-revisions "4.1.0=25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8bzVMJ4=" 
   --versions 4.1.0 --target-status Archived
```

Para atualizar várias versões com um único comando, passe uma lista separada por vírgulas de pares de versão e de revisão de versão para as opções `--version-revisions`. O comando de exemplo a seguir define dois pares diferentes de versão do pacote e de revisão da versão do pacote.

```
aws codeartifact update-package-versions-status --domain my_domain 
 --domain-owner 111122223333 --repository my_repo --format npm 
 --package chalk
 --version-revisions "4.1.0=25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ4=,4.0.0=E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc="  
 --versions 4.1.0 4.0.0 --target-status Published
```

Exemplo de saída:

```
{
    "successfulVersions": {
        "4.0.0": {
            "revision": "E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc=",
            "status": "Published"
        },
        "4.1.0": {
            "revision": "25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ4=",
            "status": "Published"
        }
    },
    "failedVersions": {}
}
```

Ao atualizar várias versões do pacote, as versões passadas para `--version-revisions` devem ser iguais às versões passadas para `--versions`. Se uma revisão for especificada de forma incorreta, o status dessa versão não será atualizado.

## Usar o parâmetro de status esperado
<a name="using-expected-status"></a>

O comando `update-package-versions-status` apresenta o parâmetro `--expected-status` compatível com a especificação do status atual esperado de uma versão do pacote. Se o status atual não corresponder ao valor passado para `--expected-status`, o status dessa versão do pacote não será atualizado.

Por exemplo, em*my\$1repo*, as versões 4.0.0 e 4.1.0 do pacote npm `chalk` atualmente têm o status de. `Published` Uma chamada para `update-package-versions-status` que especifica um status esperado de `Unlisted` falhará na atualização de ambas as versões do pacote devido à incompatibilidade de status.

```
aws codeartifact update-package-versions-status --domain my_domain
--domain-owner 111122223333 --repository my_repo --format npm --package chalk 
--versions 4.1.0 4.0.0 --target-status Archived --expected-status Unlisted
```

Exemplo de saída:

```
{
    "successfulVersions": {},
    "failedVersions": {
        "4.0.0": {
            "errorCode": "MISMATCHED_STATUS",
            "errorMessage": "current status: Published, expected status: Unlisted"
        },
        "4.1.0": {
            "errorCode": "MISMATCHED_STATUS",
            "errorMessage": "current status: Published, expected status: Unlisted"
        }
    }
}
```

## Erros com versões de pacotes individuais
<a name="update-package-version-status-errors"></a>

Há vários motivos pelos quais o status de uma versão do pacote não será atualizado durante a chamada de `update-package-versions-status`. Por exemplo, a revisão da versão do pacote pode ter sido especificada de maneira incorreta ou o status esperado não corresponde ao status atual. Nesses casos, a versão será incluída no mapa `failedVersions` na resposta da API. Se uma versão falhar, outras versões especificadas na mesma chamada para `update-package-versions-status` poderão ser ignoradas e não ter seu status atualizado. Essas versões também serão incluídas no mapa `failedVersions` com um `errorCode` de`SKIPPED`.

Na implementação atual do `update-package-versions-status`, se uma ou mais versões não puderem ter seu status alterado, todas as outras versões serão ignoradas. Ou seja, todas as versões são atualizadas com sucesso ou nenhuma versão é atualizada. Esse comportamento não é garantido no contrato da API; no futuro, algumas versões podem ser bem-sucedidas, enquanto outras falham em uma única chamada para `update-package-versions-status`.

O exemplo de comando a seguir inclui uma falha na atualização do status da versão causada por uma incompatibilidade na revisão da versão do pacote. Essa falha na atualização faz com que outra chamada de atualização de status da versão seja ignorada.

```
aws codeartifact update-package-versions-status --domain my_domain
  --domain-owner 111122223333 --repository my_repo 
  --format npm --package chalk 
  --version-revisions "4.1.0=25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ=,4.0.0=E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc=" 
  --versions 4.1.0 4.0.0 --target-status Archived
```

Exemplo de saída:

```
{
    "successfulVersions": {},
    "failedVersions": {
        "4.0.0": {
            "errorCode": "SKIPPED",
            "errorMessage": "version 4.0.0 is skipped"
        },
        "4.1.0": {
            "errorCode": "MISMATCHED_REVISION",
            "errorMessage": "current revision: 25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ4=, expected revision: 25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ="
        }
    }
}
```

## Descartar as versões do pacote
<a name="dispose-package-versions"></a>

O status do `Disposed` pacote tem um comportamento semelhante ao`Archived`, exceto que os ativos do pacote serão excluídos permanentemente CodeArtifact para que a conta do proprietário do domínio não seja mais cobrada pelo armazenamento de ativos. Consulte mais informações sobre o status da versão do pacote em [Satus da versão do pacote](packages-overview.md#package-version-status). Para alterar o status de uma versão do pacote para `Disposed`, use o comando `dispose-package-versions`. Esse recurso é separado de `update-package-versions-status` porque o descarte de uma versão do pacote não é reversível. Como os ativos do pacote serão excluídos, o status da versão não pode ser alterado de volta para `Archived`, `Unlisted` ou `Published`. A única ação que pode ser executada em uma versão de pacote que foi descartada é excluí-la usando o comando `delete-package-versions`.

Para chamar `dispose-package-versions` com sucesso, a entidade principal do IAM que está chamando deve ter a permissão `codeartifact:DisposePackageVersions` no recurso do pacote.

O comportamento do comando `dispose-package-versions` é semelhante a `update-package-versions-status`, incluindo o comportamento das opções `--version-revisions ` e `--expected-status` descritas nas seções de [revisão da versão](#update-status-specify-package-version-revision) e [status esperado](#using-expected-status). Por exemplo, o comando a seguir tenta descartar uma versão do pacote, mas falha devido a um status esperado incompatível.

```
aws codeartifact dispose-package-versions —domain my_domain --domain-owner 111122223333 
--repository my_repo --format npm --package chalk --versions 4.0.0 
--expected-status Unlisted
```

Exemplo de saída:

```
{
    "successfulVersions": {},
    "failedVersions": {
        "4.0.0": {
            "errorCode": "MISMATCHED_STATUS",
            "errorMessage": "current status: Published, expected status: Unlisted"
        }
    }
}
```

Se o mesmo comando for executado outra vez com um `--expected-status` de `Published`, o descarte será bem-sucedido.

```
aws codeartifact dispose-package-versions —domain my_domain --domain-owner 111122223333 
--repository my_repo --format npm --package chalk --versions 4.0.0 
--expected-status Published
```

Exemplo de saída:

```
{
    "successfulVersions": {
        "4.0.0": {
            "revision": "E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc=",
            "status": "Disposed"
        }
    },
    "failedVersions": {}
}
```

# Editar controles de origem do pacote
<a name="package-origin-controls"></a>

Em AWS CodeArtifact, as versões do pacote podem ser adicionadas a um repositório publicando-as diretamente, retirando-as de um repositório upstream ou ingerindo-as de um repositório público externo. Permitir que versões de um pacote sejam adicionadas por publicação direta e ingestão de repositórios públicos torna você vulnerável a um ataque de substituição de dependências. Para obter mais informações, consulte [Ataques de substituição de dependências](dependency-substitution-attacks.md). Para se proteger contra um ataque de substituição de dependência, você pode configurar os controles de origem do pacote em um pacote em um repositório para limitar como as versões desse pacote podem ser adicionadas ao repositório.

A configuração dos controles de origem do pacote deve ser considerada por qualquer equipe que queira permitir que novas versões de pacotes diferentes venham tanto de fontes internas, como publicação direta, quanto de fontes externas, como repositórios públicos. Por padrão, os controles de origem do pacote serão configurados com base em como a primeira versão de um pacote é adicionada ao repositório. Para obter informações sobre as configurações de controle de origem do pacote e seus valores padrão, consulte [Configurações de controle de origem do pacote](#package-origin-control-settings).

Para remover o registro do pacote depois de usar a operação da API `put-package-origin-configuration`, use `delete-package` (consulte [Excluir um pacote ou uma versão do pacote](delete-package.md)).

## Cenários comuns de controle de acesso a pacotes
<a name="package-origin-control-scenarios"></a>

Esta seção inclui alguns cenários comuns quando uma versão de pacote é adicionada a um CodeArtifact repositório. As configurações de controle de origem do pacote serão definidas para novos pacotes, dependendo de como a primeira versão do pacote for adicionada.

Nos cenários a seguir, um *pacote interno* é um pacote publicado diretamente de um gerenciador de pacotes no seu repositório, como um pacote que você ou sua equipe cria e mantém. Um *pacote externo* é um pacote que existe em um repositório público que pode ser ingerido em seu repositório com uma conexão externa.

**Uma versão de pacote externo é publicada para um pacote interno existente**

Nesse cenário, considere um pacote interno, *packageA*. Sua equipe publica a primeira versão do pacote do *PackageA em um repositório*. CodeArtifact Como essa é a primeira versão desse pacote, as configurações de controle de origem do pacote são automaticamente definidas como **Publicar: Permitir** e **Upstream: Bloquear**. Depois que o pacote existe no seu repositório, um pacote com o mesmo nome é publicado em um repositório público conectado ao seu CodeArtifact repositório. Isso pode ser uma tentativa de ataque de substituição de dependência contra o pacote interno ou pode ser apenas uma coincidência. Independentemente disso, os controles de origem do pacote são configurados para bloquear a ingestão da nova versão externa para se protegerem contra um possível ataque.

Na imagem a seguir, o *RepoA* é seu CodeArtifact repositório com uma conexão externa com um repositório público. Seu repositório contém as versões 1.1 e 2.1 de *packageA*, mas a versão 3.0 é publicada no repositório público. Normalmente, *repoA* poderia ingerir a versão 3.0 depois que o pacote fosse solicitado por um gerenciador de pacotes. Como a ingestão de pacotes está definida como **Bloquear**, a versão 3.0 não é ingerida em seu CodeArtifact repositório e não está disponível para gerenciadores de pacotes conectados a ele.

![\[Gráfico simples mostrando uma nova versão de pacote externo sendo bloqueada de um repositório público.\]](http://docs.aws.amazon.com/pt_br/codeartifact/latest/ug/images/package-origin-controls-one.png)


**Uma versão de pacote interno é publicada para um pacote externo existente**

Nesse cenário, um pacote, *packageB*, existe externamente em um repositório público que você conectou ao seu repositório. Quando um gerenciador de pacotes conectado ao seu repositório solicita *packageB*, a versão do pacote é ingerida no seu repositório a partir do repositório público. Como esta é a primeira versão do pacote de *packageB* adicionada ao seu repositório, as configurações de origem do pacote são definidas como **Publicação: BLOQUEAR** e **Upstream: PERMITIR**. Mais tarde, você tenta publicar uma versão com o mesmo nome de pacote no repositório. Ou você não conhece o pacote público e está tentando publicar um pacote não relacionado com o mesmo nome, ou está tentando publicar uma versão corrigida ou está tentando publicar diretamente a versão exata do pacote que já existe externamente. CodeArtifact rejeitará a versão que você está tentando publicar, mas permitirá que você anule explicitamente a rejeição e publique a versão, se necessário.

Na imagem a seguir, o *RepoA* é seu CodeArtifact repositório com uma conexão externa com um repositório público. Seu repositório contém a versão 3.0 que foi ingerida do repositório público. Você deseja publicar a versão 1.1 no seu repositório. Normalmente, você poderia publicar a versão 1.2 em *repoA*, mas como a publicação está definida como **Bloquear**, a versão 1.2 não pode ser publicada.

![\[Gráfico simples mostrando uma nova versão de pacote externo sendo bloqueada de um repositório público.\]](http://docs.aws.amazon.com/pt_br/codeartifact/latest/ug/images/package-origin-controls-two.png)


**Publicar uma versão corrigida de um pacote externo existente**

Nesse cenário, um pacote, *packageB*, existe externamente em um repositório público que você conectou ao seu repositório. Quando um gerenciador de pacotes conectado ao seu repositório solicita *packageB*, a versão do pacote é ingerida no seu repositório a partir do repositório público. Como esta é a primeira versão do pacote de *packageB* adicionada ao seu repositório, as configurações de origem do pacote são definidas como **Publicação: BLOQUEAR** e **Upstream: PERMITIR**. Sua equipe decide que precisa publicar versões corrigidas desse pacote no repositório. Para poder publicar versões de pacotes diretamente, sua equipe altera as configurações de controle de origem do pacote para **Publicação: PERMITIR** e **Upstream: BLOQUEAR**. Agora, as versões desse pacote podem ser publicadas diretamente no seu repositório e ingeridas de repositórios públicos. Depois que sua equipe publica as versões corrigidas do pacote, ela reverte as configurações de origem do pacote para **Publicação: BLOQUEAR** e **Upstream: PERMITIR**.

## Configurações de controle de origem do pacote
<a name="package-origin-control-settings"></a>

Com os controles de origem do pacote, você pode configurar como as versões do pacote podem ser adicionadas a um repositório. As listas a seguir incluem as configurações e os valores disponíveis do controle de origem do pacote.

**nota**  
As configurações e valores disponíveis são diferentes ao configurar os controles de origem em grupos de pacotes. Para obter mais informações, consulte [Controles de origem do grupo de pacotes](package-group-origin-controls.md).

**Publicar**

Essa configuração define se as versões do pacote podem ser publicadas diretamente no repositório usando gerenciadores de pacotes ou ferramentas similares.
+ **PERMITIR**: as versões do pacote podem ser publicadas diretamente.
+ **BLOCK**: as versões do pacote não podem ser publicadas diretamente.

**Upstream**

Essa configuração define se as versões do pacote podem ser ingeridas de repositórios externos públicos ou retidas de repositórios upstream quando solicitadas por um gerenciador de pacotes.
+ **PERMITIR**: Qualquer versão do pacote pode ser retida de outros CodeArtifact repositórios configurados como repositórios upstream ou ingerida de uma fonte pública com uma conexão externa.
+ **BLOCO**: As versões do pacote não podem ser retidas de outros CodeArtifact repositórios configurados como repositórios upstream ou ingeridas de uma fonte pública com uma conexão externa.

## Configurações de controle de origem do pacote padrão
<a name="default-package-origin-control-settings"></a>

As configurações de controle de origem do pacote padrão são definidas com base nas configurações de controle de origem do grupo de pacotes associado ao pacote. Para obter mais informações sobre grupos de pacotes e controles de origem de grupos de pacotes, consulte [Trabalhar com grupos de pacotes no CodeArtifact](package-groups.md) e [Controles de origem do grupo de pacotes](package-group-origin-controls.md).

Se um pacote estiver associado a um grupo de pacotes com configurações de restrição de `ALLOW` para cada tipo de restrição, os controles de origem de pacote padrão serão baseados em como a primeira versão desse pacote é adicionada ao repositório.
+ Se a primeira versão do pacote for publicada diretamente por um gerenciador de pacotes, as configurações serão **Publicação: PERMITIR** e **Upstream: BLOQUEAR**.
+ Se a primeira versão do pacote for ingerida de uma fonte pública, as configurações serão **Publicação: BLOQUEAR** e **Upstream: PERMITIR**.

**nota**  
Pacotes que existiam em CodeArtifact repositórios antes de maio de 2022 terão os controles de origem de pacote padrão de **Publish: ALLOW e Upstream****:** ALLOW. Os controles de origem do pacote devem ser definidos manualmente para esses pacotes. Os valores padrão atuais foram definidos em novos pacotes desde aquela época e começaram a ser aplicados quando o atributo foi lançado em 14 de julho de 2022. Para obter mais informações sobre a configuração de controles de origem de pacotes, consulte [Editar controles de origem do pacote](#edit-package-origin-controls).

Caso contrário, se um pacote estiver associado a um grupo de pacotes que tenha pelo menos uma configuração de restrição de `BLOCK` ou `ALLOW_SPECIFIC_REPOSITORIES`, as configurações de controle de origem padrão desse pacote serão definidas como **Publish: ALLOW** e **Upstream: ALLOW**.

## Como os controles de origem do pacote interagem com os controles de origem do grupo de pacotes
<a name="package-origin-controls-interaction-package-groups"></a>

Como tanto os pacotes quanto os grupos de pacotes associados têm configurações de controle de origem, é importante entender como essas duas configurações diferentes interagem entre si.

A interação entre as duas configurações é que uma configuração de `BLOCK` sempre prevalece sobre uma configuração de `ALLOW`. A tabela a seguir lista alguns exemplos de configurações e suas configurações de controle de origem eficazes.


| Configuração de controle de origem do pacote | Configuração de controle de origem do grupo de pacotes | Configuração de controle de origem eficaz | 
| --- | --- | --- | 
| PUBLISH: ALLOWUPSTREAM: ALLOW | PUBLISH: ALLOWUPSTREAM: ALLOW | PUBLISH: ALLOWUPSTREAM: ALLOW | 
| PUBLISH: BLOCKUPSTREAM: ALLOW | PUBLISH: ALLOWUPSTREAM: ALLOW | PUBLISH: BLOCKUPSTREAM: ALLOW | 
| PUBLISH: ALLOWUPSTREAM: ALLOW | PUBLISH: ALLOWUPSTREAM: BLOCK | PUBLISH: ALLOWUPSTREAM: BLOCK | 

Isso significa que um pacote com configurações de origem de **Publish: ALLOW** e **Upstream: ALLOW** está efetivamente adotando as configurações de controle de origem do grupo de pacotes associado.

## Editar controles de origem do pacote
<a name="edit-package-origin-controls"></a>

Os controles de origem do pacote são configurados automaticamente com base em como a primeira versão de um pacote é adicionada ao repositório. Para obter mais informações, consulte [Configurações de controle de origem do pacote padrão](#default-package-origin-control-settings). Para adicionar ou editar controles de origem de pacote para um pacote em um CodeArtifact repositório, execute as etapas no procedimento a seguir.

**Para adicionar ou editar controles de origem do pacote (console)**

1. Abra o AWS CodeArtifact console em [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home).

1. No painel de navegação, escolha **Repositórios** e escolha o repositório que contém o pacote que você deseja editar. 

1. Na tabela **Pacotes**, pesquise e selecione o pacote que você deseja editar.

1. Na página de resumo do pacote, em **Controles de origem**, escolha **Editar**.

1. Em **Editar controles de origem**, escolha os controles de origem do pacote que deseja definir para esse pacote. As duas configurações de controle de origem do pacote, Publicação e Upstream, devem ser definidas ao mesmo tempo.
   + Para permitir a publicação direta de versões do pacote, em **Publicação**, escolha **Permitir**. Para bloquear a publicação de versões do pacote, escolha **Bloquear**.
   + Para permitir a ingestão de pacotes de repositórios externos e a extração de pacotes de repositórios upstream, em **Fontes upstream**, escolha **Permitir**. Para bloquear toda a ingestão e extração de versões de pacotes de repositórios externos e upstream, escolha **Bloquear**.

**Para adicionar ou editar controles de origem do pacote (AWS CLI)**

1. Caso contrário, configure o AWS CLI seguindo as etapas em[Configurando com AWS CodeArtifact](get-set-up-for-codeartifact.md).

1. Use o comando `put-package-origin-configuration` para adicionar ou editar controles de origem do pacote. Substitua os campos a seguir:
   + *my\$1domain*Substitua pelo CodeArtifact domínio que contém o pacote que você deseja atualizar.
   + *my\$1repo*Substitua pelo CodeArtifact repositório que contém o pacote que você deseja atualizar.
   + *npm*Substitua pelo formato do pacote que você deseja atualizar.
   + *my\$1package*Substitua pelo nome do pacote que você deseja atualizar.
   + Substitua *ALLOW* e *BLOCK* com as configurações de controle de origem do pacote desejadas.

   ```
   aws codeartifact put-package-origin-configuration --domain my_domain \
   --repository my_repo --format npm --package my_package \ 
   --restrictions publish=ALLOW,upstream=BLOCK
   ```

## Repositórios de publicação e upstream
<a name="package-publishing-upstreams"></a>

CodeArtifact não permite a publicação de versões de pacotes que estejam presentes em repositórios upstream acessíveis ou em repositórios públicos. Por exemplo, suponha que você queira publicar um pacote Maven `com.mycompany.mypackage:1.0` em um repositório `myrepo` e `myrepo` tenha um repositório upstream com uma conexão externa com Maven Central. Considere os seguintes cenários:

1. As configurações de controle de origem do pacote em `com.mycompany.mypackage` são **Publicação: PERMITIR** e **Upstream: PERMITIR**. Se `com.mycompany.mypackage:1.0` estiver presente no repositório upstream ou no Maven Central, CodeArtifact rejeita qualquer tentativa de publicar nele `myrepo` com um erro de conflito 409. Você ainda pode publicar uma versão diferente, como `com.mycompany.mypackage:1.1`.

1. As configurações de controle de origem do pacote em `com.mycompany.mypackage` são **Publicação: PERMITIR** e **Upstream: BLOQUEAR**. Você pode publicar qualquer versão do `com.mycompany.mypackage` no seu repositório que ainda não exista porque as versões do pacote não estão acessíveis.

1. As configurações de controle de origem do pacote em `com.mycompany.mypackage` são **Publicação: BLOQUEAR** e **Upstream: PERMITIR**. Você não pode publicar nenhuma versão do pacote diretamente no seu repositório.