Nota: Actualmente los ejecutores hospedados en GitHub no se admiten en GitHub Enterprise Server. Puede ver más información sobre la compatibilidad futura planeada en GitHub public roadmap.
Introducción
Esta guía te muestra cómo compilar, probar y publicar un paquete de Go.
Los ejecutores hospedados en GitHub tienen un caché de herramientas con software pre-instalado, que incluye las dependencias para Go. Para obtener una lista completa de software actualizado y las versiones preinstaladas de Go, consulta "Utilizar los ejecutores hospedados en GitHub".
Requisitos previos
Ya debes estar familiarizado con la sintaxis de YAML y con cómo se utiliza con GitHub Actions. Para obtener más información, vea «Sintaxis del flujo de trabajo para Acciones de GitHub».
Te recomendamos que tengas un entendimiento básico del lenguaje Go. Para más información, ve Introducción a Go.
Utilizar un flujo de trabajo inicial Go
Para comenzar rápidamente, agrega un flujo de trabajo de inicio al directorio .github/workflows
del repositorio.
GitHub proporciona un flujo de trabajo inicial de Go que debería funcionar para la mayoría de los proyectos de Go. En las secciones siguientes de esta guía se proporcionan ejemplos de cómo puedes personalizar este flujo de trabajo de inicio.
-
En tu instancia de GitHub Enterprise Server, navega a la página principal del repositorio.
-
En el nombre del repositorio, haz clic en Acciones.
-
Si ya tiene un flujo de trabajo en su repositorio, haga clic en New workflow (Nuevo flujo de trabajo).
-
La página "Elegir un flujo de trabajo" muestra una selección de flujos de trabajo de inicio recomendados. Busca «Go».
-
Filtra la selección de flujos de trabajo con un clic en Integración continua.
-
En el flujo de trabajo «Go, por GitHub Actions», haz clic en Configurar.
Si no encuentras el flujo de trabajo de inicio «Go - por GitHub Actions», copia el siguiente código de flujo de trabajo en un nuevo archivo llamado
go.yml
en el directorio.github/workflows
de tu repositorio.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 ./...
-
Edita el flujo de trabajo según sea necesario. Por ejemplo, cambia la versión de Go.
-
Haga clic en Commit changes (Confirmar cambios).
Especificación de una versión de Go
La forma más fácil de especificar una versión de Go consiste en usar la acción setup-go
proporcionada por GitHub. Para obtener más información, consulta la acciónsetup-go
.
Para usar una versión preinstalada de Go en un ejecutor hospedado por GitHub, pasa la versión pertinente a la propiedad go-version
de la acción setup-go
. Esta acción busca una versión específica de Go en la caché de herramientas en cada ejecutor y agrega los binarios necesarios a PATH
. Estos cambios persistirán para el recordatorio del job.
La acción setup-go
es la forma recomendada de usar Go con GitHub Actions, ya que ayuda a garantizar el comportamiento coherente entre los distintos ejecutores y versiones de Go. Si vas a usar un ejecutor auto hospedado, tienes que instalar Go y agregarlo a PATH
.
Uso de varias versiones de 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
Uso de una versión específica de Go
Puedes configurar el trabajo para que use una versión específica de Go, como 1.20.8
. Como alternativa, puedes utilizar una sintaxis de versión semántica para obtener el último lanzamiento menor. Este ejemplo usa la versión de revisión más reciente de 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'
Instalación de dependencias
Puedes usar go get
para instalar dependencias:
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
Almacenar dependencias en caché
Puedes almacenar en caché las dependencias y restaurarlas mediante la acción setup-go
. De forma predeterminada, el almacenamiento en caché está deshabilitado, pero puedes establecer el parámetro cache
en true
para habilitarlo.
Cuando se habilita el almacenamiento en caché, la acción setup-go
busca el archivo de dependencia, go.sum
, en la raíz del repositorio y usa el hash del archivo de dependencia como parte de la clave de caché.
- 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, puede usar el parámetro cache-dependency-path
para los casos en los que se usan varios archivos de dependencia o cuando se encuentran en distintos subdirectorios.
- 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
Si tiene una necesidad específica o necesita controles más precisos para el almacenamiento en caché, puede usar la acción cache
. Para obtener más información, vea «Almacenar en caché las dependencias para agilizar los flujos de trabajo».
Construir y probar tu código
Puedes usar los mismos comandos que usas de forma local para construir y probar tu código. En este flujo de trabajo de ejemplo se muestra cómo usar go build
y go test
en un trabajo:
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
Empaquetar datos de flujo de trabajo como artefactos
Después de que se completa un flujo de trabajo, puedes cargar los artefactos que se den como resultado para su análisis. Por ejemplo, es posible que debas guardar los archivos de registro, los vaciados de memoria, los resultados de las pruebas o las capturas de pantalla. En el ejemplo siguiente se muestra cómo puede usar la acción upload-artifact
para cargar los resultados de la prueba.
Para obtener más información, vea «Almacenar los datos de los flujos de trabajo como artefactos».
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