Observação: no momento, não há suporte para os executores hospedados no GitHub no GitHub Enterprise Server. Você pode ver mais informações sobre o suporte futuro planejado no GitHub public roadmap.
Introdução
Este guia mostra como criar, testar e publicar um pacote Go.
Executores hospedados em GitHub têm um cache de ferramentas com software pré-instalado que inclui dependências do Go. Para ver a lista completa de programas de software atualizados e as versões pré-instaladas do Go, confira "Usar executores hospedados no GitHub".
Pré-requisitos
Você já deve estar familiarizado com a sintaxe YAML e como é usado com GitHub Actions. Para obter mais informações, confira "Sintaxe de fluxo de trabalho para o GitHub Actions".
Recomendamos que você tenha um entendimento básico da linguagem Go. Para obter mais informações, confira Introdução ao Go.
Usando um fluxo de trabalho inicial em Go
Para experimentar uma introdução rápida, adicione um fluxo de trabalho inicial ao diretório .github/workflows
do repositório.
O GitHub oferece um fluxo de trabalho inicial do Go que deve funcionar na maioria dos projetos Go. As seções subsequentes deste guia fornecem exemplos de como você pode personalizar esse fluxo de trabalho inicial.
-
No sua instância do GitHub Enterprise Server, navegue até a página principal do repositório.
-
No nome do repositório, clique em Ações.
-
Se você já tiver um fluxo de trabalho no repositório, clique em Novo fluxo de trabalho.
-
A página "Escolher um fluxo de trabalho" mostra uma seleção de fluxos de trabalho iniciais recomendados. Pesquise por "go".
-
Filtre a seleção de fluxos de trabalho clicando em Integração contínua.
-
No fluxo de trabalho "Go - by GitHub Actions", clique em Configurar.
Se você não encontrar o fluxo de trabalho inicial "Go - by GitHub Actions", copie o código de fluxo de trabalho a seguir para um novo arquivo chamado
go.yml
no diretório.github/workflows
do seu repositório.YAML name: Go on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: self-hosted steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v3 with: go-version: '1.20' - name: Build run: go build -v ./... - name: Test run: go test -v ./...
name: Go on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: self-hosted steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v3 with: go-version: '1.20' - name: Build run: go build -v ./... - name: Test run: go test -v ./...
-
Edite o fluxo de trabalho conforme necessário. Por exemplo, altere a versão do Go.
-
Clique em Confirmar alterações.
Como especificar uma versão do Go
A maneira mais fácil de especificar uma versão do Go é usando a ação setup-go
fornecida pelo GitHub. Para obter mais informações, confira a ação setup-go
.
Para usar uma versão pré-instalada do Go em um executor hospedado no GitHub, passe a versão relevante para a propriedade go-version
da ação setup-go
. Essa ação localiza uma versão específica do Go no cache de ferramentas em cada executor e adiciona os binários necessários a PATH
. Estas alterações persistirão para o resto do trabalho.
A ação setup-go
é a maneira recomendada de usar o Go com o GitHub Actions, pois garante um comportamento consistente entre diferentes executores e diferentes versões do Go. Se você estiver usando um executor auto-hospedado, precisará instalar o Go e adicioná-lo a PATH
.
Como usar várias versões do Go
name: Go on: [push] jobs: build: runs-on: ubuntu-latest strategy: matrix: go-version: [ '1.19', '1.20', '1.21.x' ] steps: - uses: actions/checkout@v4 - name: Setup Go ${{ matrix.go-version }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} # You can test your matrix by printing the current Go version - name: Display Go version run: go version
name: Go
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [ '1.19', '1.20', '1.21.x' ]
steps:
- uses: actions/checkout@v4
- name: Setup Go ${{ matrix.go-version }}
uses: actions/setup-go@v3
with:
go-version: ${{ matrix.go-version }}
# You can test your matrix by printing the current Go version
- name: Display Go version
run: go version
Como usar uma versão específica do Go
Você pode configurar o trabalho para usar uma versão específica do Go, como 1.20.8
. Como alternativa, você pode usar a sintaxe da versão semântica para obter a última versão secundária. Este exemplo usa a versão mais recente do patch do Go 1.21:
- name: Setup Go 1.21.x uses: actions/setup-go@v3 with: # Semantic version range syntax or exact version of Go go-version: '1.21.x'
- name: Setup Go 1.21.x
uses: actions/setup-go@v3
with:
# Semantic version range syntax or exact version of Go
go-version: '1.21.x'
Instalar dependências
Você pode usar go get
para instalar dependências:
steps: - uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v3 with: go-version: '1.21.x' - name: Install dependencies run: | go get . go get example.com/octo-examplemodule go get example.com/octo-examplemodule@v1.3.4
steps:
- uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: '1.21.x'
- name: Install dependencies
run: |
go get .
go get example.com/octo-examplemodule
go get example.com/octo-examplemodule@v1.3.4
Memorizar dependências
Você pode armazenar em cache e restaurar as dependências usando a ação setup-go
. Por padrão, o cache é desabilitado, mas você pode definir o parâmetro cache
como true
para habilitá-lo.
Quando o cache está habilitado, a ação setup-go
procura o arquivo de dependência, go.sum
, na raiz do repositório e usa o hash do arquivo de dependência como parte da chave de cache.
- name: Setup Go uses: actions/setup-go@v3 with: go-version: '1.21.x' cache: true
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: '1.21.x'
cache: true
Como alternativa, você pode usar o parâmetro cache-dependency-path
para casos em que vários arquivos de dependência são usados ou quando eles estão localizados em diferentes subdiretórios.
- uses: actions/setup-go@v3 with: go-version: '1.17' cache: true cache-dependency-path: subdir/go.sum
- uses: actions/setup-go@v3
with:
go-version: '1.17'
cache: true
cache-dependency-path: subdir/go.sum
Se você tiver um requisito personalizado ou precisar ter controles mais refinados para o cache, use a ação cache
. Para obter mais informações, confira "Memorizar dependências para acelerar os fluxos de trabalho".
Criar e testar seu código
Você pode usar os mesmos comandos usados localmente para criar e testar seu código. Este fluxo de trabalho de exemplo demonstra como usar go build
e go test
em um trabalho:
name: Go on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v3 with: go-version: '1.21.x' - name: Install dependencies run: go get . - name: Build run: go build -v ./... - name: Test with the Go CLI run: go test
name: Go
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: '1.21.x'
- name: Install dependencies
run: go get .
- name: Build
run: go build -v ./...
- name: Test with the Go CLI
run: go test
Empacotar dados do fluxo de trabalho como artefatos
Após a conclusão de um fluxo de trabalho, você poderá fazer o upload dos artefatos resultantes para análise. Por exemplo, é possível que você precise salvar os arquivos de registro, os despejos de núcleo, os resultados de teste ou capturas de tela. O exemplo a seguir demonstra como você pode usar a ação upload-artifact
para carregar os resultados do teste.
Para obter mais informações, confira "Armazenar dados do fluxo de trabalho como artefatos".
name: Upload Go test results on: [push] jobs: build: runs-on: ubuntu-latest strategy: matrix: go-version: [ '1.19', '1.20', '1.21.x' ] steps: - uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} - name: Install dependencies run: go get . - name: Test with Go run: go test -json > TestResults-${{ matrix.go-version }}.json - name: Upload Go test results uses: actions/upload-artifact@v3 with: name: Go-results-${{ matrix.go-version }} path: TestResults-${{ matrix.go-version }}.json
name: Upload Go test results
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [ '1.19', '1.20', '1.21.x' ]
steps:
- uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: ${{ matrix.go-version }}
- name: Install dependencies
run: go get .
- name: Test with Go
run: go test -json > TestResults-${{ matrix.go-version }}.json
- name: Upload Go test results
uses: actions/upload-artifact@v3
with:
name: Go-results-${{ matrix.go-version }}
path: TestResults-${{ matrix.go-version }}.json