language: go

os:
  - linux
  - osx
  - windows

arch:
  - amd64
  - arm64
  - ppc64le
  - s390x

go:
  - 1.12.x
  - 1.13.x
  - 1.14.x
  - master

install:
 - go get ./...

script:
 - go vet ./...
 - go test -cpu=1,2 .
 - go test -tags=noasm -cpu=1,2 .
 - go build examples/simple-decoder.go
 - go build examples/simple-encoder.go
 - go build examples/stream-decoder.go
 - go build examples/stream-encoder.go

stages:
  - gofmt
  - test
  - deploy

jobs:
  allow_failures:
    - go: 'master'
    - arch: s390x
  fast_finish: true
  include:
    - stage: gofmt
      go: 1.14.x
      os: linux
      arch: amd64
      script:
        - diff <(gofmt -d .) <(printf "")
        - diff <(gofmt -d ./examples) <(printf "")
        - go install github.com/klauspost/asmfmt/cmd/asmfmt
        - diff <(asmfmt -d .) <(printf "")
    - stage: race
      go: 1.14.x
      os: linux
      arch: amd64
      script:
        - go test -cpu=1 -short -race .
        - go test -cpu=2 -short -race .
        - go test -tags=noasm -cpu=1 -short -race .
        - go test -tags=noasm -cpu=4 -short -race .
        - go test -no-avx512 -short -race .
        - go test -no-avx512 -no-avx2 -short -race .
        - go test -no-avx512 -no-avx2 -no-ssse3 -short -race .
    - stage: amd64-noasm
      go: 1.14.x
      os: linux
      arch: amd64
      script:
        - go test -no-avx512
        - go test -no-avx512 -no-avx2
        - go test -no-avx512 -no-avx2 -no-ssse3
    - stage: i386
      go: 1.14.x
      os: linux
      arch: amd64
      script:
        - GOOS=linux GOARCH=386 go test -short .
