name: Build
on:
  push:
jobs:
  run-tests:
    runs-on: ubuntu-latest
    env:
      TEST_RESULTS: "/tmp/test-results"
    steps:
      - name: Setup go
        uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0
        with:
          go-version: 1.18
      - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
      - run: mkdir -p "$TEST_RESULTS"/go-retryablyhttp
      - name: restore_cache
        uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 # v3.2.6
        with:
          key: go-mod-v1-{{ checksum "go.sum" }}
          restore-keys: go-mod-v1-{{ checksum "go.sum" }}
          path: "/go/pkg/mod"
      - run: go mod download
      - run: go mod tidy
      - name: Run go format
        run: |-
          files=$(go fmt ./...)
          if [ -n "$files" ]; then
            echo "The following file(s) do not conform to go fmt:"
            echo "$files"
            exit 1
          fi
      - name: Install gotestsum
        run: go install gotest.tools/gotestsum@latest
      - name: Run unit tests
        run: |-
          PACKAGE_NAMES=$(go list ./...)
          # shellcheck disable=SC2086 # can't quote package list
          gotestsum --junitfile "${TEST_RESULTS}"/go-retryablyhttp/gotestsum-report.xml -- $PACKAGE_NAMES
      - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
        with:
          path: "/tmp/test-results"
      - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
        with:
          path: "/tmp/test-results"
permissions:
  contents: read
