CI #653
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
name: CI | |
on: | |
schedule: | |
# Saturday 8:00, after cleanup | |
- cron: "0 8 * * 6" | |
push: | |
branches: | |
- main | |
- hotfix/** | |
- release/** | |
pull_request: | |
jobs: | |
# test job | |
test: | |
name: Test | |
timeout-minutes: 10 | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-20.04 | |
go-version: | |
- 1.17.x | |
- tip | |
images: | |
- { postgres: "postgres:9.5", mysql: "mysql:5.6", mssql: "mcr.microsoft.com/mssql/server:2017-latest" } | |
- { postgres: "postgres:9.6", mysql: "mysql:5.7", mssql: "mcr.microsoft.com/mssql/server:2019-latest" } | |
- { postgres: "postgres:10", mysql: "mysql:8.0" } | |
- { postgres: "postgres:11" } | |
- { postgres: "postgres:12" } | |
- { postgres: "postgres:13" } | |
runs-on: ${{ matrix.os }} | |
env: | |
# no `-mod=readonly` to test PRs made by @dependabot; | |
# `make ci-check-changes` step below still checks what we need | |
WORKDIR: "${{ github.workspace }}/gopath/src/gopkg.in/reform.v1" | |
GOPATH: "${{ github.workspace }}/gopath" | |
GOBIN: "${{ github.workspace }}/gopath/bin" | |
GO111MODULE: "on" | |
GOPROXY: "https://proxy.golang.org" | |
GORACE: "halt_on_error=1" | |
REFORM_POSTGRES_IMAGE: "${{ matrix.images.postgres }}" | |
REFORM_MYSQL_IMAGE: "${{ matrix.images.mysql }}" | |
REFORM_MSSQL_IMAGE: "${{ matrix.images.mssql }}" | |
steps: | |
# Cache Go modules, build cache, installed packages and GOPATH sources | |
# to significantly decreases total CI time. See also cleanup.yaml. | |
- name: Enable Go cache | |
uses: actions/cache@v2 | |
with: | |
path: | | |
~/.cache/go-build | |
${{ env.GOPATH }}/pkg | |
${{ env.GOPATH }}/src/github.com | |
${{ env.GOPATH }}/src/golang.org | |
key: ${{ matrix.os }}-${{ matrix.go-version }} | |
- name: Set up Go version ${{ matrix.go-version }} | |
if: matrix.go-version != 'tip' | |
uses: actions/setup-go@v2 | |
with: | |
go-version: ${{ matrix.go-version }} | |
- name: Set up Go tip | |
if: matrix.go-version == 'tip' | |
run: | | |
git clone --depth=1 https://go.googlesource.com/go $HOME/gotip | |
cd $HOME/gotip/src | |
./make.bash | |
echo "GOROOT=$HOME/gotip" >> $GITHUB_ENV | |
echo "$HOME/gotip/bin" >> $GITHUB_PATH | |
echo "$GOBIN" >> $GITHUB_PATH | |
- name: Set GO_VERSION | |
run: echo "GO_VERSION=$(go version)" >> $GITHUB_ENV | |
- name: Check out code into GOPATH | |
uses: actions/checkout@v2 | |
with: | |
path: ${{ env.WORKDIR }} | |
- name: Pull Docker images | |
working-directory: ${{ env.WORKDIR }} | |
run: docker-compose pull | |
- name: Stop Ubuntu services | |
run: sudo systemctl stop mysql | |
# FIXME Is there a more ergonomic way? | |
- name: Update Go language version in the module | |
working-directory: ${{ env.WORKDIR }} | |
run: go mod edit -go=$(go list -f '{{ $tag := 0 }}{{ range $tag = context.ReleaseTags }}{{ end }}{{ slice $tag 2 }}' runtime) | |
- name: Download Go modules | |
working-directory: ${{ env.WORKDIR }} | |
run: go mod download | |
- name: Check that it is still possible to install reform without modules | |
working-directory: ${{ env.WORKDIR }} | |
run: | | |
env GO111MODULE=off go get -v -x ./... | |
reform -version | |
reform-db -version | |
- name: Run init target | |
working-directory: ${{ env.WORKDIR }} | |
run: make init | |
- name: Start development environment | |
working-directory: ${{ env.WORKDIR }} | |
run: make env-up-detach | |
- name: Run test target | |
working-directory: ${{ env.WORKDIR }} | |
run: make test | |
# TODO test again with updated deps | |
- name: Clean Go test cache | |
if: ${{ always() }} | |
run: go clean -testcache | |
# to ensure that all generators still work the same way | |
- name: Check that there are no source code changes | |
working-directory: ${{ env.WORKDIR }} | |
run: make ci-check-changes | |
- name: Upload coverage information | |
working-directory: ${{ env.WORKDIR }} | |
run: bash <(curl -s https://codecov.io/bash) -f coverage.txt -X fix -e GO_VERSION,REFORM_POSTGRES_IMAGE,REFORM_MYSQL_IMAGE,REFORM_MSSQL_IMAGE | |
- name: Run debug commands on failure | |
if: ${{ failure() }} | |
run: | | |
sudo apt-get install -qy tree | |
env | |
go version | |
go env | |
pwd | |
tree -d | |
ls -al | |
docker --version | |
docker-compose --version | |
# lint job | |
lint: | |
name: Lint | |
timeout-minutes: 10 | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-20.04 | |
go-version: | |
- 1.17.x | |
runs-on: ${{ matrix.os }} | |
env: | |
# no `-mod=readonly` to test PRs made by @dependabot; | |
# `make ci-check-changes` step below still checks what we need | |
WORKDIR: "${{ github.workspace }}/gopath/src/gopkg.in/reform.v1" | |
GOPATH: "${{ github.workspace }}/gopath" | |
GOBIN: "${{ github.workspace }}/gopath/bin" | |
GO111MODULE: "on" | |
GOPROXY: "https://proxy.golang.org" | |
GORACE: "halt_on_error=1" | |
REFORM_POSTGRES_IMAGE: "${{ matrix.images.postgres }}" | |
REFORM_MYSQL_IMAGE: "${{ matrix.images.mysql }}" | |
REFORM_MSSQL_IMAGE: "${{ matrix.images.mssql }}" | |
steps: | |
# Cache Go modules, build cache, installed packages and GOPATH sources | |
# to significantly decreases total CI time. See also cleanup.yaml. | |
- name: Enable Go cache | |
uses: actions/cache@v2 | |
with: | |
path: | | |
~/.cache/go-build | |
${{ env.GOPATH }}/pkg | |
${{ env.GOPATH }}/src/github.com | |
${{ env.GOPATH }}/src/golang.org | |
key: ${{ matrix.os }}-${{ matrix.go-version }} | |
- name: Set up Go version ${{ matrix.go-version }} | |
if: matrix.go-version != 'tip' | |
uses: actions/setup-go@v2 | |
with: | |
go-version: ${{ matrix.go-version }} | |
- name: Set up Go tip | |
if: matrix.go-version == 'tip' | |
run: | | |
git clone --depth=1 https://go.googlesource.com/go $HOME/gotip | |
cd $HOME/gotip/src | |
./make.bash | |
echo "GOROOT=$HOME/gotip" >> $GITHUB_ENV | |
echo "$HOME/gotip/bin" >> $GITHUB_PATH | |
echo "$GOBIN" >> $GITHUB_PATH | |
- name: Set GO_VERSION | |
run: echo "GO_VERSION=$(go version)" >> $GITHUB_ENV | |
- name: Check out code into GOPATH | |
uses: actions/checkout@v2 | |
with: | |
path: ${{ env.WORKDIR }} | |
# FIXME Is there a more ergonomic way? | |
- name: Update Go language version in the module | |
working-directory: ${{ env.WORKDIR }} | |
run: go mod edit -go=$(go list -f '{{ $tag := 0 }}{{ range $tag = context.ReleaseTags }}{{ end }}{{ slice $tag 2 }}' runtime) | |
- name: Download Go modules | |
working-directory: ${{ env.WORKDIR }} | |
run: go mod download | |
- name: Run init target | |
working-directory: ${{ env.WORKDIR }} | |
run: make init | |
- name: Run checks/linters | |
working-directory: ${{ env.WORKDIR }} | |
run: | | |
# use GITHUB_TOKEN because only it has access to GitHub Checks API | |
bin/golangci-lint run --config=.golangci-required.yml --out-format=line-number | env REVIEWDOG_GITHUB_API_TOKEN=${{ secrets.GITHUB_TOKEN }} bin/reviewdog -f=golangci-lint -name='Required linters' -reporter=github-check | |
# use GO_REFORM_BOT_TOKEN for better reviewer's name | |
bin/golangci-lint run --out-format=line-number | env REVIEWDOG_GITHUB_API_TOKEN=${{ secrets.GO_REFORM_BOT_TOKEN }} bin/reviewdog -f=golangci-lint -name='Optional linters' -reporter=github-pr-review | |
bin/go-consistent -pedantic ./... | env REVIEWDOG_GITHUB_API_TOKEN=${{ secrets.GO_REFORM_BOT_TOKEN }} bin/reviewdog -f=go-consistent -name='go-consistent' -reporter=github-pr-review | |
# to ensure that all generators still work the same way | |
- name: Check that there are no source code changes | |
working-directory: ${{ env.WORKDIR }} | |
run: make ci-check-changes | |
- name: Run debug commands on failure | |
if: ${{ failure() }} | |
run: | | |
sudo apt-get install -qy tree | |
env | |
go version | |
go env | |
pwd | |
tree -d | |
ls -al | |
docker --version | |
docker-compose --version |