Примечание. В GitHub Enterprise Server в настоящее время не поддерживаются средства выполнения тестов, размещенные в GitHub. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.
Введение
В этом руководстве описано, как создать, протестировать и опубликовать пакет Go.
Размещенные в GitHub средства выполнения имеют кэш инструментов с предварительно установленным программным обеспечением, включающим в себя зависимости для Go. Полный список актуального программного обеспечения и предустановленных версий Go см. в разделе О средствах выполнения, размещенных в GitHub.
Предварительные требования
Вы уже должны быть знакомы с синтаксисом YAML и его использованием с GitHub Actions. Дополнительные сведения см. в разделе Синтаксис рабочего процесса для GitHub Actions.
Рекомендуется иметь базовое представление о пакете SDK для языка Go. Дополнительные сведения см. в разделе Приступая к работе с Go.
Использование начального рабочего процесса Go
GitHub предоставляет начальный рабочий процесс Go, который должен работать для большинства проектов Go. В этом руководстве приведены примеры, которые можно использовать для настройки начального рабочего процесса. Дополнительные сведения см. в статье Начальный рабочий процесс Go.
Чтобы быстро приступить к работе, добавьте начальный рабочий процесс в каталог .github/workflows
своего репозитория.
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
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:
- 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
установки зависимостей:
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
в корневом каталоге репозитория и использует хэш файла зависимостей в составе ключа кэша.
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: '1.16.x'
cache: true
Кроме того, можно использовать параметр cache-dependency-path
для случаев использования нескольких файлов зависимостей или их расположения в разных подкаталогах.
- uses: actions/setup-go@v3
with:
go-version: '1.17'
cache: true
cache-dependency-path: subdir/go.sum
Если у вас есть особые требования или вам нужно управлять кэшированием более детально, можно использовать действие cache
. Дополнительные сведения см. в разделе Кэширование зависимостей для ускорения рабочих процессов.
Создание и тестирование кода
Вы можете использовать те же команды, которые используются для создания и тестирования кода в локальной среде. В этом примере рабочего процесса показано, как использовать go build
и go test
в задании:
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
для отправки результатов теста.
Дополнительные сведения см. в разделе Хранение данных рабочего процесса в виде артефактов.
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