# Generated by internal/ci/ci_tool.cue; do not edit

name: Test
on:
  push:
    branches:
    - '**'
    tags-ignore:
    - v*
jobs:
  start:
    runs-on: ubuntu-18.04
    defaults:
      run:
        shell: bash
    steps:
    - if: ${{ startsWith(github.ref, 'refs/heads/ci/') }}
      name: Write the gitcookies file
      run: echo "${{ secrets.gerritCookie }}" > ~/.gitcookies
    - if: ${{ startsWith(github.ref, 'refs/heads/ci/') }}
      name: Update Gerrit CL message with starting message
      run: 'curl -f -s -H "Content-Type: application/json" --request POST --data ''{"tag":"trybot","message":"Started
        the build... see progress at ${{ github.event.repository.html_url }}/actions/runs/${{
        github.run_id }}"}'' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/$(basename
        $(dirname $GITHUB_REF))/revisions/$(basename $GITHUB_REF)/review'
  test:
    needs: start
    strategy:
      fail-fast: false
      matrix:
        go-version:
        - 1.14.14
        - 1.15.8
        - "1.16"
        os:
        - ubuntu-18.04
        - macos-10.15
        - windows-2019
    runs-on: ${{ matrix.os }}
    defaults:
      run:
        shell: bash
    steps:
    - name: Write the gitcookies file
      run: echo "${{ secrets.gerritCookie }}" > ~/.gitcookies
    - name: Install Go
      uses: actions/setup-go@v2
      with:
        go-version: ${{ matrix.go-version }}
        stable: false
    - name: Checkout code
      uses: actions/checkout@v2
    - name: Cache Go modules
      uses: actions/cache@v1
      with:
        path: ~/go/pkg/mod
        key: ${{ runner.os }}-${{ matrix.go-version }}-go-${{ hashFiles('**/go.sum')
          }}
        restore-keys: ${{ runner.os }}-${{ matrix.go-version }}-go-
    - if: ${{ github.ref == 'refs/heads/master' }}
      name: Set go build tags
      run: go env -w GOFLAGS=-tags=long
    - if: matrix.go-version == '1.14.14' && matrix.os != 'windows-2019'
      name: Generate
      run: go generate ./...
    - name: Test
      run: go test ./...
    - if: ${{ github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/ci/')
        && matrix.go-version == '1.15.8' && matrix.os == 'ubuntu-18.04' }}
      name: Test with -race
      run: go test -race ./...
    - name: gorelease check
      run: go run golang.org/x/exp/cmd/gorelease
    - name: Check that git is clean post generate and tests
      run: test -z "$(git status --porcelain)" || (git status; git diff; false)
    - if: ${{ github.ref == 'refs/heads/master' }}
      name: Pull this commit through the proxy on master
      run: |-
        v=$(git rev-parse HEAD)
        cd $(mktemp -d)
        go mod init mod.com
        GOPROXY=https://proxy.golang.org go get -d cuelang.org/go/cmd/cue@$v
    - if: ${{ startsWith(github.ref, 'refs/heads/ci/') && failure() }}
      name: Post any failures for this matrix entry
      run: 'curl -f -s -H "Content-Type: application/json" --request POST --data ''{"tag":"trybot","message":"Build
        failed for ${{ runner.os }}-${{ matrix.go-version }}; see ${{ github.event.repository.html_url
        }}/actions/runs/${{ github.run_id }} for more details","labels":{"Code-Review":-1}}''
        -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/$(basename
        $(dirname $GITHUB_REF))/revisions/$(basename $GITHUB_REF)/review'
  mark_ci_success:
    runs-on: ubuntu-18.04
    if: ${{ startsWith(github.ref, 'refs/heads/ci/') }}
    needs: test
    defaults:
      run:
        shell: bash
    steps:
    - name: Write the gitcookies file
      run: echo "${{ secrets.gerritCookie }}" > ~/.gitcookies
    - name: Update Gerrit CL message with success message
      run: 'curl -f -s -H "Content-Type: application/json" --request POST --data ''{"tag":"trybot","message":"Build
        succeeded for ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id
        }}","labels":{"Code-Review":1}}'' -b ~/.gitcookies https://cue-review.googlesource.com/a/changes/$(basename
        $(dirname $GITHUB_REF))/revisions/$(basename $GITHUB_REF)/review'
  delete_build_branch:
    runs-on: ubuntu-18.04
    if: ${{ startsWith(github.ref, 'refs/heads/ci/') && always() }}
    needs: test
    defaults:
      run:
        shell: bash
    steps:
    - run: |-
        mkdir tmpgit
        cd tmpgit
        git init
        git config user.name cueckoo
        git config user.email cueckoo@gmail.com
        git config http.https://github.com/.extraheader "AUTHORIZATION: basic $(echo -n cueckoo:${{ secrets.CUECKOO_GITHUB_PAT }} | base64)"
        git push https://github.com/cuelang/cue :${GITHUB_REF#refs/heads/}
