name: Go Tests on: workflow_dispatch: pull_request: schedule: - cron: '0 0 * * *' push: branches: [ master ] jobs: test: runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macos-latest, macos-14] test_shard: ["0", "1", "2", "3", "4"] fail-fast: false steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v4 with: go-version: 1.21 - name: Linux Setup if: ${{ matrix.os == 'ubuntu-latest'}} run: | # Install our dependencies sudo apt-get update sudo apt-get install -y zsh tmux fish # Work around a weird bug where zsh on ubuntu actions gives that directory 0777 which makes zsh refuse to start sudo chmod 0755 -R /usr/share/zsh/ # Set a consistent hostname so we can run tests that depend on it sudo hostname ghaction-runner-hostname - name: MacOS Setup if: ${{ matrix.os == 'macos-latest' || matrix.os == 'macos-14' }} run: | # Install our dependencies brew install fish tmux bash # Set a consistent hostname so we can run tests that depend on it sudo scutil --set HostName ghaction-runner-hostname - name: MacOS Docker Setup if: ${{ matrix.os == 'macos-latest' || matrix.os == 'macos-14 '}} continue-on-error: true # Since colima is flaky, and a failure here only impacts our metrics run: | # Install docker so it can be used for datadog brew install docker colima start sudo ln -sf $HOME/.colima/default/docker.sock /var/run/docker.sock - name: Set up Datadog if: ${{ github.ref == 'refs/heads/master' && matrix.os != 'macos-14' }} uses: datadog/agent-github-action@v1.3 with: api_key: ${{ secrets.DD_API_KEY }} - name: Extra Delay if: ${{ startsWith(github.event.head_commit.message, 'Release') }} run: | # If this is a release, then sleep for before starting the tests so that the newest version is released # and pushed to the updated server before we run the tests sleep 1200 # 20 minutes - name: Go test env: DD_API_KEY: ${{ secrets.DD_API_KEY }} OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} run: | go install gotest.tools/gotestsum@bc98120 NUM_TEST_SHARDS=5 CURRENT_SHARD_NUM=${{ matrix.test_shard }} make test - name: Extra Delay run: | # Add an extra short delay to allow datadog to flush metrics sleep 90 - name: Upload test results json uses: actions/upload-artifact@v3 if: success() || failure() with: name: test-results-${{ matrix.os }}-${{ matrix.test_shard }}.json path: /tmp/testrun.json - name: Upload failed test goldens uses: actions/upload-artifact@v3 if: success() || failure() with: name: test-goldens-${{ matrix.os }}-${{ matrix.test_shard }}.zip path: /tmp/test-goldens/ - name: Upload test log uses: actions/upload-artifact@v3 if: success() || failure() with: name: testlog-${{ matrix.os }}-${{ matrix.test_shard }}.txt path: /tmp/test.log - name: Upload used goldens uses: actions/upload-artifact@v4 if: success() || failure() with: name: goldens-used-${{ matrix.os }}-${{ matrix.test_shard }} path: /tmp/goldens-used.txt # - name: Setup tmate session # if: ${{ failure() }} # uses: mxschmitt/action-tmate@v3 # with: # limit-access-to-actor: true check-goldens: runs-on: ubuntu-latest needs: test steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v4 with: go-version: 1.21 - name: Download artifact uses: actions/download-artifact@v4 - name: Check all goldens were used run: | go run client/posttest/main.go check-goldens