Skip to main content
Мы публикуем частые обновления нашей документации, и перевод этой страницы, возможно, еще выполняется. Актуальные сведения см. в документации на английском языке.

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

Вы можете создать рабочий процесс непрерывной интеграции для сборки и тестирования проекта Go.

Введение

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

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

Предварительные требования

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

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

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

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

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

YAML
name: Go package

on: [push]

jobs:
  build:

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

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

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

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

Указание версии 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.14', '1.15', '1.16.x' ]

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

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

Вы можете настроить задание для использования конкретной версии Go, например 1.16.2. Кроме того, можно использовать синтаксис семантической версии, чтобы получить последний дополнительный выпуск. В этом примере используется последнее исправление Go 1.16:

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

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

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

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

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

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

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

YAML
      - name: Setup Go
        uses: actions/setup-go@v3
        with:
          go-version: '1.16.x'
          cache: true

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

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

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

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

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

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