Skip to main content

Compilación y prueba de Go

Puedes crear un flujo de trabajo de integración continua (CI) para compilar y probar tu proyecto.

Introducción

Esta guía te muestra cómo compilar, probar y publicar un paquete de Go.

Los ejecutores alojados en GitHub tienen una memoria caché de herramientas con software preinstalado, que incluye las dependencias para Go. Para obtener una lista completa de software actualizado y las versiones preinstaladas de Go, consulta "Using GitHub-hosted runners".

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.

Uso del flujo de trabajo inicial de Go

GitHub proporciona un flujo de trabajo inicial de Go que debería funcionar para la mayoría de los proyectos de Go. Esta guía incluye ejemplos que puedes utilizar para personalizar los flujos de trabajo iniciales. Para más información, vea el flujo de trabajo de inicio de Go.

Para comenzar rápidamente, agregue el flujo de trabajo de inicio al directorio .github/workflows del repositorio.

YAML
name: Go package

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Set up Go
        uses: actions/setup-go@v4
        with:
          go-version: '1.15'

      - name: Build
        run: go build -v ./...

      - name: Test
        run: go test -v ./...

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

YAML
name: Go

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [ '1.14', '1.15', '1.16.x' ]

    steps:
      - uses: actions/checkout@v4
      - name: Setup Go ${{ matrix.go-version }}
        uses: actions/setup-go@v4
        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.16.2. Como alternativa, puedes utilizar una sintaxis de versión semántica para obtener el último lanzamiento menor. En este ejemplo se usa la versión de revisión más reciente de Go 1.16:

YAML
      - name: Setup Go 1.16.x
        uses: actions/setup-go@v4
        with:
          # Semantic version range syntax or exact version of Go
          go-version: '1.16.x'

Instalación de dependencias

Puedes usar go get para instalar dependencias:

YAML
    steps:
      - uses: actions/checkout@v4
      - name: Setup Go
        uses: actions/setup-go@v4
        with:
          go-version: '1.16.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á habilitado al usar la acción setup-go.

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é.

Puede susar 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.

YAML
      - name: Setup Go
      - uses: actions/setup-go@v4
        with:
          go-version: '1.17'
          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:

YAML
name: Go
on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Setup Go
        uses: actions/setup-go@v4
        with:
          go-version: '1.16.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».

YAML
name: Upload Go test results

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [ '1.14', '1.15', '1.16.x' ]

    steps:
      - uses: actions/checkout@v4
      - name: Setup Go
        uses: actions/setup-go@v4
        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