Skip to main content

Création et test de code Go

Découvrez comment créer un flux de travail d’intégration continue (CI) pour générer et tester votre projet Go.

Introduction

Ce guide explique comment générer, tester et publier un package Go.

GitHubLes exécuteurs hébergés disposent d’un cache d’outils contenant des logiciels préinstallés, y compris les dépendances de Go. Pour obtenir la liste complète des logiciels à jour et des versions préinstallées de Go, consultez « Exécuteurs hébergés par GitHub ».

Prérequis

Vous devez déjà être familiarisé avec la syntaxe YAML et la façon dont il est utilisé avec GitHub Actions. Pour plus d’informations, consultez « Syntaxe de flux de travail pour GitHub Actions ».

Il est recommandé de connaître les bases du langage Go. Pour plus d’informations, consultez Bien démarrer avec Go.

Utilisation d’un modèle de workflow Go

Pour démarrer rapidement, ajoutez un modèle de workflow au répertoire .github/workflows de votre référentiel.

GitHub fournit un modèle de flux de travail Go qui doit fonctionner pour la plupart des projets Go. Les sections suivantes de ce guide donnent des exemples de la manière dont vous pouvez personnaliser ce modèle de workflow.

  1. Sur GitHub, accédez à la page principale du référentiel.

  2. Sous le nom de votre référentiel, cliquez sur Actions.

    Capture d’écran des onglets du référentiel « github/docs ». L’onglet « Actions » est mis en surbrillance avec un encadré orange.

  3. Si vous disposez déjà d’un workflow dans votre dépôt, cliquez sur Nouveau workflow.

  4. La page « Choisir un workflow » présente une sélection de modèles de workflow recommandés. Recherchez « go ».

  5. Filtrez la sélection de workflows en cliquant sur Intégration continue.

  6. Dans le flux de travail « Go - by GitHub Actions», cliquez sur Configurer.

    Capture d’écran de la page « Choisir un workflow ». Le bouton « Configurer » dans le workflow « Go » est mis en évidence à l’aide d’un rectangle orange.

  7. Modifiez le workflow en fonction des besoins. Par exemple, modifiez la version de Go.

  8. Cliquez sur Commiter les changements.

    Le go.yml fichier de flux de travail est ajouté au .github/workflows répertoire de votre référentiel.

Spécification d’une version de Go

Le moyen le plus simple de spécifier une version Go consiste à utiliser l’action setup-go fournie par GitHub. Pour plus d’informations, consultez l’action setup-go.

Pour utiliser une version préinstallée de Go sur un runner hébergé par GitHub, indiquez la version appropriée dans la propriété go-version de l’action setup-go. Cette action recherche une version spécifique de Go à partir du cache d’outils de chaque exécuteur, et ajoute les fichiers binaires nécessaires à PATH. Ces modifications seront conservées pendant toute la durée du travail.

L’action setup-go est la méthode recommandée d’utilisation de Go avec GitHub Actions, car elle permet de garantir un comportement cohérent entre différents exécuteurs et différentes versions de Go. Si vous utilisez un exécuteur auto-hébergé, vous devez installer Go et l’ajouter à PATH.

Utilisation de plusieurs versions de Go

YAML
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@v6
      - name: Setup Go ${{ matrix.go-version }}
        uses: actions/setup-go@v5
        with:
          go-version: ${{ matrix.go-version }}
      # You can test your matrix by printing the current Go version
      - name: Display Go version
        run: go version

Utilisation d’une version spécifique de Go

Vous pouvez configurer votre travail pour qu’il utilise une version spécifique de Go, comme 1.20.8. Vous pouvez également utiliser la syntaxe de versioning sémantique pour obtenir la dernière version mineure. Cet exemple utilise la dernière version corrective de Go 1.21 :

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

Installer les dépendances

Vous pouvez utiliser go get pour installer des dépendances :

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

Mise en cache des dépendances

Vous pouvez mettre en cache et restaurer des dépendances à l’aide de l’action setup-go. Par défaut, la mise en cache est activée lors de l'utilisation de l'action setup-go.

L’action setup-go recherche le fichier de dépendance, go.sum, à la racine du référentiel et utilise le hachage du fichier de dépendance comme élément de la clé de cache.

Vous pouvez utiliser le paramètre cache-dependency-path pour les cas où plusieurs fichiers de dépendance sont utilisés ou lorsqu’ils se trouvent dans des sous-répertoires différents.

YAML
      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.17'
          cache-dependency-path: subdir/go.sum

Si vous avez une exigence particulière ou si vous avez besoin d’un contrôle plus précis pour la mise en cache, vous pouvez utiliser l’action cache. Pour plus d’informations, consultez « Référence sur la mise en cache des dépendances ».

Génération et test de votre code

Vous pouvez utiliser les mêmes commandes que celles que vous utilisez localement pour générer et tester votre code. Cet exemple de workflow montre comment utiliser go build et go test dans un travail :

YAML
name: Go
on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

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

Empaquetage des données de workflow en tant qu’artefacts

Une fois le workflow terminé, vous pouvez charger les artefacts résultants à des fins d’analyse. Par exemple, vous devrez peut-être enregistrer des fichiers journaux, des vidages principaux, des résultats de test ou des captures d’écran. L’exemple suivant montre comment utiliser l’action upload-artifact pour charger les résultats de test.

Pour plus d’informations, consultez « Stocker et partager des données avec les artefacts de workflow ».

YAML
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@v6
      - name: Setup Go
        uses: actions/setup-go@v5
        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@v4
        with:
          name: Go-results-${{ matrix.go-version }}
          path: TestResults-${{ matrix.go-version }}.json