Skip to main content

Создание и тестирование для Go

Узнайте, как создать рабочий процесс непрерывной интеграции (CI) для создания и тестирования проекта Go.

Введение

В этом руководстве описано, как создать, протестировать и опубликовать пакет Go.

GitHub, размещенных в runner, имеют кэш средств с предварительно установленным программным обеспечением, которое включает зависимости для Go. Полный список актуального программного обеспечения и предварительно установленных версий Go см. в разделе Средства выполнения тестов, размещенные в GitHub.

Необходимые компоненты

Вы уже должны быть знакомы с синтаксисом YAML и его использованием с GitHub Actions. Дополнительные сведения см. в разделе Синтаксис рабочего процесса для GitHub Actions.

Рекомендуется иметь базовое представление о пакете SDK для языка Go. Дополнительные сведения см. в разделе Приступая к работе с Go.

Использование шаблона рабочего процесса Go

Чтобы быстро приступить к работе, добавьте шаблон рабочего процесса в .github/workflows каталог репозитория.

GitHub предоставляет шаблон рабочего процесса Go, который должен работать для большинства проектов Go. В последующих разделах этого руководства приведены примеры настройки этого шаблона рабочего процесса.

  1. На GitHubперейдите на главную страницу репозитория. данных repositories.repositories.actions-tab %} 1. Если в вашем репозитории уже используется рабочий процесс, нажмите кнопку Создать рабочий процесс.

  2. На странице "Выбор рабочего процесса" показан выбор рекомендуемых шаблонов рабочих процессов. Найдите "go".

  3. Отфильтруйте выбор рабочих процессов, щелкнув "Непрерывная интеграция".

  4. В рабочем процессе "Перейти — по GitHub Actions" нажмите кнопку "Настроить".

    Снимок экрана: страница "Выбор рабочего процесса". Кнопка "Настроить" в рабочем процессе Go выделена оранжевым контуром.

  5. Измените рабочий процесс по мере необходимости. Например, измените версию Go.

  6. Щелкните Зафиксировать изменения.

Файл go.yml рабочего процесса добавляется в .github/workflows каталог репозитория.

Указание версии Go

Самый простой способ указать версию Go заключается в использовании действия setup-go, предоставляемого GitHub. Дополнительные сведения см. в описании действия setup-go.

Чтобы использовать предустановленную версию Go для средства выполнения, размещенного в GitHub, передайте соответствующую версию свойству go-version действия setup-go. Это действие находит определенную версию Go из кэша инструментов в средстве выполнения и добавляет необходимые двоичные файлы в переменную PATH. Эти изменения будут сохранены для остальной части задания.

Действие setup-go представляет собой рекомендуемый способ использования Go с GitHub Actions, так как помогает обеспечить согласованное поведение в разных средствах выполнения и различных версиях Go. При использовании локального средства выполнения необходимо установить Go и добавить его в PATH.

Использование нескольких версий 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@v5
      - 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

Использование определенной версии Go

Вы можете настроить задание для использования конкретной версии Go, например 1.20.8. Кроме того, можно использовать синтаксис семантической версии, чтобы получить последний дополнительный выпуск. В этом примере используется последний выпуск исправлений 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'

Установка зависимостей

Можно использовать для go get установки зависимостей:

YAML
    steps:
      - uses: actions/checkout@v5
      - 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/[email protected]

Кэширование зависимостей

Можно кэшировать и восстанавливать зависимости с помощью setup-go действия. По умолчанию кэширование включено при использовании setup-go действия.

Действие setup-go выполняет поиск файла зависимостей в go.sumкорневом каталоге репозитория и использует хэш файла зависимостей в составе ключа кэша.

Параметр можно использовать cache-dependency-path для случаев, когда используются несколько файлов зависимостей или когда они находятся в разных подкаталогах.

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

Если у вас есть особые требования или вам нужно управлять кэшированием более детально, можно использовать действие cache. Дополнительные сведения см. в разделе Справочник по кэшированию зависимостей.

Создание и тестирование кода

Вы можете использовать те же команды, которые используются для создания и тестирования кода в локальной среде. В этом примере рабочего процесса показано, как использовать go build и go test в задании:

YAML
name: Go
on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v5
      - 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

Упаковка данных рабочего процесса в виде артефактов

После завершения рабочего процесса можно отправить полученные артефакты для анализа. Например, может потребоваться сохранить файлы журналов, основные дампы, результаты теста или снимки экрана. В следующем примере показано, как использовать действие upload-artifact для отправки результатов теста.

Дополнительные сведения см. в разделе Хранение и предоставление общего доступа к данным с артефактами рабочего процесса.

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@v5
      - 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