mirror of
https://github.com/caddyserver/caddy.git
synced 2024-11-29 12:16:16 +08:00
4accf737a6
As of early August 2020 the VM has been down for several days due to lack of power due related to bad weather at the data center... sigh.
176 lines
6.1 KiB
YAML
176 lines
6.1 KiB
YAML
# Used as inspiration: https://github.com/mvdan/github-actions-golang
|
|
|
|
name: Tests
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
pull_request:
|
|
branches:
|
|
- master
|
|
|
|
jobs:
|
|
test:
|
|
strategy:
|
|
# Default is true, cancels jobs for other platforms in the matrix if one fails
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ ubuntu-latest, macos-latest, windows-latest ]
|
|
go-version: [ 1.14.x ]
|
|
|
|
# Set some variables per OS, usable via ${{ matrix.VAR }}
|
|
# CADDY_BIN_PATH: the path to the compiled Caddy binary, for artifact publishing
|
|
# SUCCESS: the typical value for $? per OS (Windows/pwsh returns 'True')
|
|
include:
|
|
- os: ubuntu-latest
|
|
CADDY_BIN_PATH: ./cmd/caddy/caddy
|
|
SUCCESS: 0
|
|
|
|
- os: macos-latest
|
|
CADDY_BIN_PATH: ./cmd/caddy/caddy
|
|
SUCCESS: 0
|
|
|
|
- os: windows-latest
|
|
CADDY_BIN_PATH: ./cmd/caddy/caddy.exe
|
|
SUCCESS: 'True'
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
steps:
|
|
- name: Install Go
|
|
uses: actions/setup-go@v1
|
|
with:
|
|
go-version: ${{ matrix.go-version }}
|
|
|
|
- name: Checkout code
|
|
uses: actions/checkout@v2
|
|
|
|
# These tools would be useful if we later decide to reinvestigate
|
|
# publishing test/coverage reports to some tool for easier consumption
|
|
# - name: Install test and coverage analysis tools
|
|
# run: |
|
|
# go get github.com/axw/gocov/gocov
|
|
# go get github.com/AlekSi/gocov-xml
|
|
# go get -u github.com/jstemmer/go-junit-report
|
|
# echo "::add-path::$(go env GOPATH)/bin"
|
|
|
|
- name: Print Go version and environment
|
|
id: vars
|
|
run: |
|
|
printf "Using go at: $(which go)\n"
|
|
printf "Go version: $(go version)\n"
|
|
printf "\n\nGo environment:\n\n"
|
|
go env
|
|
printf "\n\nSystem environment:\n\n"
|
|
env
|
|
# Calculate the short SHA1 hash of the git commit
|
|
echo "::set-output name=short_sha::$(git rev-parse --short HEAD)"
|
|
echo "::set-output name=go_cache::$(go env GOCACHE)"
|
|
|
|
- name: Cache the build cache
|
|
uses: actions/cache@v1
|
|
with:
|
|
path: ${{ steps.vars.outputs.go_cache }}
|
|
key: ${{ runner.os }}-go-ci-${{ hashFiles('**/go.sum') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-go-ci
|
|
|
|
- name: Get dependencies
|
|
run: |
|
|
go get -v -t -d ./...
|
|
# mkdir test-results
|
|
|
|
- name: Build Caddy
|
|
working-directory: ./cmd/caddy
|
|
env:
|
|
CGO_ENABLED: 0
|
|
run: |
|
|
go build -trimpath -ldflags="-w -s" -v
|
|
|
|
- name: Publish Build Artifact
|
|
uses: actions/upload-artifact@v1
|
|
with:
|
|
name: caddy_v2_${{ runner.os }}_${{ steps.vars.outputs.short_sha }}
|
|
path: ${{ matrix.CADDY_BIN_PATH }}
|
|
|
|
# Commented bits below were useful to allow the job to continue
|
|
# even if the tests fail, so we can publish the report separately
|
|
# For info about set-output, see https://stackoverflow.com/questions/57850553/github-actions-check-steps-status
|
|
- name: Run tests
|
|
# id: step_test
|
|
# continue-on-error: true
|
|
run: |
|
|
# (go test -v -coverprofile=cover-profile.out -race ./... 2>&1) > test-results/test-result.out
|
|
go test -v -coverprofile="cover-profile.out" -short -race ./...
|
|
# echo "::set-output name=status::$?"
|
|
|
|
# Relevant step if we reinvestigate publishing test/coverage reports
|
|
# - name: Prepare coverage reports
|
|
# run: |
|
|
# mkdir coverage
|
|
# gocov convert cover-profile.out > coverage/coverage.json
|
|
# # Because Windows doesn't work with input redirection like *nix, but output redirection works.
|
|
# (cat ./coverage/coverage.json | gocov-xml) > coverage/coverage.xml
|
|
|
|
# To return the correct result even though we set 'continue-on-error: true'
|
|
# - name: Coerce correct build result
|
|
# if: matrix.os != 'windows-latest' && steps.step_test.outputs.status != ${{ matrix.SUCCESS }}
|
|
# run: |
|
|
# echo "step_test ${{ steps.step_test.outputs.status }}\n"
|
|
# exit 1
|
|
|
|
s390x-test:
|
|
name: test (s390x on IBM Z)
|
|
runs-on: ubuntu-latest
|
|
if: github.event.pull_request.head.repo.full_name == github.repository
|
|
continue-on-error: true # August 2020: s390x VM is down due to weather and power issues
|
|
steps:
|
|
- name: Checkout code into the Go module directory
|
|
uses: actions/checkout@v2
|
|
- name: Run Tests
|
|
run: |
|
|
mkdir -p ~/.ssh && echo -e "${SSH_KEY//_/\\n}" > ~/.ssh/id_ecdsa && chmod og-rwx ~/.ssh/id_ecdsa
|
|
|
|
# short sha is enough?
|
|
short_sha=$(git rev-parse --short HEAD)
|
|
|
|
# The environment is fresh, so there's no point in keeping accepting and adding the key.
|
|
rsync -arz -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress --delete --exclude '.git' . caddy-ci@ci-s390x.caddyserver.com:/var/tmp/"$short_sha"
|
|
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -t caddy-ci@ci-s390x.caddyserver.com "cd /var/tmp/$short_sha; CGO_ENABLED=0 /usr/local/go/bin/go test -v ./..."
|
|
test_result=$?
|
|
|
|
# There's no need leaving the files around
|
|
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null caddy-ci@ci-s390x.caddyserver.com "rm -rf /var/tmp/'$short_sha'"
|
|
|
|
echo "Test exit code: $test_result"
|
|
exit $test_result
|
|
env:
|
|
SSH_KEY: ${{ secrets.S390X_SSH_KEY }}
|
|
|
|
# From https://github.com/reviewdog/action-golangci-lint
|
|
golangci-lint:
|
|
name: runner / golangci-lint
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout code into the Go module directory
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Run golangci-lint
|
|
uses: reviewdog/action-golangci-lint@v1
|
|
# uses: docker://reviewdog/action-golangci-lint:v1 # pre-build docker image
|
|
with:
|
|
github_token: ${{ secrets.github_token }}
|
|
|
|
goreleaser-check:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: checkout
|
|
uses: actions/checkout@v2
|
|
- uses: goreleaser/goreleaser-action@v1
|
|
with:
|
|
version: latest
|
|
args: check
|
|
env:
|
|
TAG: ${{ steps.vars.outputs.version_tag }}
|