Faça a gestão de módulos Go

Esta página explica como gerir módulos Go em pacote armazenados no Artifact Registry.

Antes de começar

  1. Se o repositório de destino não existir, crie um novo repositório. Escolha Go como formato do repositório.
  2. Verifique se tem as autorizações necessárias para o repositório.
  3. (Opcional) Configure as predefinições para os comandos gcloud.
  4. Instale o Go 1.15 ou posterior.
  5. Instale o suplemento da CLI gcloud package-go-module:

    gcloud components install package-go-module
  6. Configure o acesso para autenticar com o Artifact Registry.

Funções necessárias

Para receber as autorizações de que precisa para gerir módulos, peça ao seu administrador que lhe conceda as seguintes funções de IAM no repositório:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Carregue um módulo

Modos de repositório: padrão

Para criar um pacote e carregar um módulo para o seu repositório, execute o seguinte comando:

  gcloud artifacts go upload --project=PROJECT \
      --repository=REPOSITORY \
      --location=LOCATION \
      --module-path=MODULE_PATH \
      --version=VERSION \
      --source=SOURCE_LOCATION

Substitua o seguinte:

  • PROJECT com o seu Google Cloud ID do projeto.
  • REPOSITORY com o nome do repositório onde o pacote está armazenado.
  • LOCATION com a localização regional ou multirregional do repositório.
  • MODULE_PATH com o percurso do módulo. Por exemplo: example.com/foo Consulte a referência dos módulos Go para mais informações.
  • VERSION com a versão semântica do módulo no formato vX.Y.Z, em que X é a versão principal, Y é a versão secundária e Z é a versão de patch.
  • SOURCE_LOCATION com o caminho para o diretório raiz do seu módulo Go. Se omitir a flag --source, a predefinição é o diretório atual.

O módulo é carregado para o Artifact Registry.

Para mais informações sobre como criar módulos Go, consulte este tutorial.

Carregue uma nova versão do módulo

Modos de repositório: padrão

Para carregar uma nova versão do seu módulo para o projeto, o repositório e a localização predefinidos quando os valores predefinidos estão configurados, execute o seguinte comando com o novo número da versão:

  gcloud artifacts go upload \
      --module-path=MODULE_PATH \
      --version=VERSION \
      --source=SOURCE_LOCATION

Substitua VERSION pela versão do módulo atualizado. Por exemplo, para carregar a versão 0.1.1 de um módulo com o caminho example.com/foo, execute o seguinte comando:

  gcloud artifacts go upload \
      --module-path=example.com/foo \
      --version=v0.1.1 \
      --source=SOURCE_LOCATION

Para marcar um módulo como uma versão de pré-lançamento, adicione um traço após o elemento VERSION e acrescente os identificadores de pré-lançamento do módulo:

  gcloud artifacts go upload \
      --module-path=MODULE_PATH \
      --version=VERSION-PRE_RELEASE_IDENTIFIERS \
      --source=SOURCE_LOCATION

Substitua PRE_RELEASE_IDENTIFIERS por carateres alfanuméricos ASCII separados por pontos e travessões. Por exemplo, para carregar uma versão pré-lançamento de um módulo com o caminho example.com/foo, identificado por alpha.x.12m.5, execute o seguinte comando:

  gcloud artifacts go upload \
      --module-path=example.com/foo \
      --version=v1.0.0-alpha.x.12m.5 \
      --source=SOURCE_LOCATION

Carregue uma nova versão principal

Modos de repositório: padrão

As versões principais não são retrocompatíveis com as versões anteriores. Para impedir que os utilizadores importem uma alteração interruptiva, as versões principais após v1 têm de ter caminhos de módulos diferentes das versões anteriores. A partir de v2, a versão principal é adicionada ao final do caminho do módulo.

Por exemplo, o caminho do módulo para v2.0.0 de example.com/foo seria example.com/foo/v2.

A prática recomendada é desenvolver versões principais após v1 em diretórios separados com o nome do respetivo sufixo de versão principal.

Para carregar uma nova versão principal 2.0.0 de um módulo com o caminho example.com/foo para o projeto, o repositório e a localização predefinidos quando os valores predefinidos estão configurados:

  gcloud artifacts go upload --module-path=example.com/foo/v2 --version=v2.0.0

Listar módulos

Modos de repositório: padrão, remoto e virtual

Execute o seguinte comando para inspecionar um módulo Go carregado no projeto, repositório e localização predefinidos quando os valores predefinidos estão configurados:

  gcloud artifacts packages list

O resultado vai ser semelhante ao seguinte:

  Listing items under project my-project, location us-west1, repository my-repo.

  PACKAGE                   CREATE_TIME          UPDATE_TIME
  example.com/foo           2022-06-03T20:43:39  2022-06-20T20:37:40

Veja os detalhes da versão do módulo

Modos de repositório: padrão, remoto e virtual

Execute o seguinte comando para ver as versões de um módulo no projeto, repositório e localização predefinidos quando os valores predefinidos estão configurados:

  gcloud artifacts versions list --package=MODULE_PATH

O resultado vai ser semelhante ao seguinte:

  Listing items under project my-project, location us-west1, repository my-repo, package example.com/foo.

  VERSION  DESCRIPTION  CREATE_TIME          UPDATE_TIME
  v0.1.0                2022-06-03T20:43:39  2022-06-03T20:43:39
  v0.1.1                2022-06-20T20:37:40  2022-06-20T20:37:40

Use um módulo como dependência

Modos de repositório: padrão, remoto e virtual

Para importar módulos armazenados no Artifact Registry, tem de indicar ao Go que procure dependências no Artifact Registry e ignore a base de dados de somas de verificação. Siga as instruções para configurar a autenticação e o ambiente Go em Configure a autenticação para o Go.

  1. Se estiver a usar credenciais de curta duração para autenticar no Artifact Registry, tem de atualizar o seu token OAuth executando o seguinte comando:

      GOPROXY=proxy.golang.org \
      go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@latest refresh
    
  2. Se o seu módulo ainda não tiver um ficheiro go.mod, altere os diretórios para a pasta do módulo e execute go mod init para criar um ficheiro go.mod para o seu pacote.

      go mod init MODULE_PATH
    

    Substitua MODULE_PATH pelo caminho do módulo para o módulo armazenado no Artifact Registry. Consulte a Referência de módulos Go para mais informações.

  3. Para exigir a versão do seu módulo armazenada no Artifact Registry, edite o ficheiro go.mod de forma a ficar semelhante ao seguinte:

    
    module example.com/bar
    
    go 1.19
    
    require example.com/foo v0.1.0
    

    Substitua o seguinte:

    • example.com/foo é o caminho do módulo do módulo necessário
    • v0.1.0 é a versão armazenada no Artifact Registry
  4. Inclua o caminho do módulo normalmente na secção import do ficheiro main.go.

    Por exemplo, para importar um módulo com o caminho example.com/foo armazenado no Artifact Registry, a sua secção de importação pode ser semelhante à seguinte:

      
      package main
    
      import (
        foo "example.com/foo"
      )
    
      func main() {
    
        ...
    
      }
    
      
    
  5. Execute go mod tidy para transferir dependências:

      go mod tidy
    
  6. Execute o módulo normalmente:

      go run .
    

    O módulo armazenado no Artifact Registry é transferido e usado como uma dependência.

Elimine módulos Go incluídos em pacotes

Modos de repositório: padrão, remoto

Pode eliminar um pacote e todas as respetivas versões ou eliminar uma versão específica.

  • Depois de eliminar um pacote, não pode anular a ação.

Antes de eliminar um pacote ou uma versão do pacote, verifique se comunicou ou resolveu quaisquer dependências importantes do mesmo.

Para eliminar um pacote:

Consola

  1. Abra a página Repositórios na Google Cloud consola.

    Abra a página Repositórios

  2. Na lista de repositórios, clique no repositório adequado.

    A página Pacotes apresenta os pacotes no repositório.

  3. Selecione o pacote que quer eliminar.

  4. Clique em ELIMINAR.

  5. Clique em ELIMINAR na caixa de diálogo de confirmação.

gcloud

Execute o seguinte comando:

gcloud artifacts packages delete PACKAGE \
    [--repository=REPOSITORY] [--location=LOCATION] [--async]

Substitua o seguinte:

  • PACKAGE é o nome do pacote no repositório.
  • REPOSITORY é o nome do repositório. Se configurou um repositório predefinido, pode omitir esta flag para usar o predefinido.
  • LOCATION é a localização regional ou multirregional do repositório. Use esta flag para ver repositórios numa localização específica. Se tiver configurado uma localização predefinida, pode omitir esta flag para usar a predefinição.

A flag --async faz com que o comando seja devolvido imediatamente, sem aguardar a conclusão da operação em curso.

Para eliminar versões de um pacote:

Consola

  1. Abra a página Repositórios na Google Cloud consola.

    Abra a página Repositórios

  2. Na lista de repositórios, clique no repositório adequado.

    A página Pacotes apresenta os pacotes no repositório.

  3. Clique num pacote para ver as versões desse pacote.

  4. Selecione as versões que quer eliminar.

  5. Clique em ELIMINAR.

  6. Clique em ELIMINAR na caixa de diálogo de confirmação.

gcloud

Execute o seguinte comando:

gcloud artifacts versions delete VERSION \
    --package=PACKAGE \
    [--repository=REPOSITORY] [--location=LOCATION] \
    [--async]

Substitua o seguinte:

  • VERSION é o nome da versão a eliminar.
  • PACKAGE é o nome do pacote no repositório.
  • REPOSITORY é o nome do repositório. Se configurou um repositório predefinido, pode omitir esta flag para usar o predefinido.
  • LOCATION é a localização regional ou multirregional do repositório. Use esta flag para ver repositórios numa localização específica. Se tiver configurado uma localização predefinida, pode omitir esta flag para usar a predefinição.

A flag --async faz com que o comando seja devolvido imediatamente, sem aguardar a conclusão da operação em curso.

O que se segue?