Skip to content

Set retry to 1 on generate AI job. To avoid wasting tokens (#3181) #1939

Set retry to 1 on generate AI job. To avoid wasting tokens (#3181)

Set retry to 1 on generate AI job. To avoid wasting tokens (#3181) #1939

Workflow file for this run

on:
pull_request:
paths:
- cli/**.go
- backend/**.go
- worker/**.go
- internal/**.go
- go.mod
- go.sum
- tools/go.mod
- tools/go.sum
push:
branches:
- main
paths:
- cli/**.go
- backend/**.go
- worker/**.go
- internal/**.go
- go.mod
- go.sum
name: Go
jobs:
golangci:
name: golang-lint
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache-dependency-path: go.sum
- name: golangci-lint
uses: golangci/golangci-lint-action@v6
with:
version: latest
args: --timeout=10m
vet:
name: vet
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache-dependency-path: go.sum
- name: Vet
run: go vet ./...
# Ensures that go generate runs and has no working directory changes afterwards
generate:
name: Go Generate
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache-dependency-path: go.sum
- name: Generate
run: go generate ./...
- name: Check for git changes
run: |
if [ -n "$(git status --porcelain .)" ]; then
echo "Error: git has changes after running 'go generate'"
echo "Please run 'go generate ./...' and commit the changes."
exit 1
fi
unit-test:
name: Unit Tests
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache-dependency-path: go.sum
- name: Test
run: |
go test -race -coverprofile=unit-coverage.out -covermode=atomic ./...
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
integration-tests:
name: Integration Tests
runs-on: ubuntu-latest
permissions:
id-token: write # required for requesting JWT for use with retrieving AWS creds
contents: read # required for actions/checkout
env:
AWS_REGION: "us-west-2"
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache-dependency-path: go.sum
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ${{ env.AWS_REGION }}
role-to-assume: ${{ vars.INTEGRATION_TEST_AWS_ROLE_ARN }}
role-session-name: NeosyncCiIntegrationTests
- name: Run Integration Tests
run: |
go test -race -timeout 1800s -coverprofile=integration-coverage.out -covermode=atomic -run TestIntegrationTestSuite ./...
env:
INTEGRATION_TESTS_ENABLED: 1
S3_INTEGRATION_TESTS_ENABLED: 1
TEST_S3_REGION: ${{ env.AWS_REGION }}
TEST_S3_BUCKET: ${{ vars.INTEGRATION_TEST_BUCKET_NAME }}
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
go-mod-tidy-check:
name: go-mod-tidy-check
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache-dependency-path: go.sum
- name: Run go mod tidy
run: go mod tidy
- name: Check for changes in go.mod and go.sum
run: |
if [ -n "$(git status --porcelain go.mod go.sum)" ]; then
echo "Error: go.mod and/or go.sum have changes after running 'go mod tidy'"
echo "Please run 'go mod tidy' and commit the changes."
exit 1
fi
tools-go-mod-tidy-check:
name: tools-go-mod-tidy-check
runs-on: ubuntu-latest
defaults:
run:
working-directory: tools
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: tools/go.mod
cache-dependency-path: tools/go.sum
- name: Run go mod tidy
run: go mod tidy
- name: Check for changes in go.mod and go.sum
run: |
if [ -n "$(git status --porcelain go.mod go.sum)" ]; then
echo "Error: go.mod and/or go.sum have changes after running 'go mod tidy'"
echo "Please run 'go mod tidy' in the tools directory and commit the changes."
exit 1
fi
benchmark:
name: benchmarks
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache-dependency-path: go.sum
- name: Install benchstat
run: go install golang.org/x/perf/cmd/benchstat@latest
- name: Restore benchmark cache
id: cache-restore
uses: actions/cache/restore@v4
with:
path: main-benchmark.txt
key: benchmarks-main
restore-keys: benchmarks-main
- name: Run benchmarks on main if cache miss
if: steps.cache-restore.outputs.cache-hit != 'true'
run: |
git fetch origin main
git checkout origin/main
go test -run=^$ -bench=. -benchmem -count=6 ./... | grep -E "Benchmark" | tee main-benchmark.txt
git checkout -
- name: Cache main branch benchmark results
if: steps.cache-restore.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: main-benchmark.txt
key: benchmarks-main
- name: Run branch benchmark
run: go test -run=^$ -bench=. -benchmem -count=6 ./... | grep -E "Benchmark" | tee branch-benchmark.txt
- name: Compare benchmarks
run: |
# Run benchstat and save output
benchstat main-benchmark.txt branch-benchmark.txt | tee benchstat-output.txt
echo "### Benchstat Geomean Results" > benchstat-results.txt
if grep -q "geomean" benchstat-output.txt; then
changes=( $(grep "geomean" benchstat-output.txt | awk '{
for(i=1; i<=NF; i++) {
if($i ~ /%/) {
gsub(/[+%]/, "", $i)
print $i
}
}
}') )
if [ ${#changes[@]} -ge 3 ]; then
result="${changes[0]}% sec/op, ${changes[1]}% B/op, ${changes[2]}% allocs/op"
echo -e "\n$result" >> benchstat-results.txt
else
echo -e "\nError: Not enough metrics found in benchstat output" >> benchstat-results.txt
fi
else
echo -e "\nNo geomean found in benchstat output" >> benchstat-results.txt
fi
echo -e "\n<details>\n<summary>Benchstat results</summary>\n\n\`\`\`\n$(cat benchstat-output.txt)\n\`\`\`\n</details>\n" >> benchstat-results.txt
- name: Comment Benchstat Results on PR
if: github.event_name == 'pull_request'
uses: thollander/actions-comment-pull-request@v3
with:
file-path: benchstat-results.txt
comment-tag: benchmark-results
github-token: ${{ secrets.GITHUB_TOKEN }}
# if this is main branch, cache the results
- name: Cache main branch benchmark results
if: github.ref == 'refs/heads/main'
uses: actions/cache/save@v4
with:
path: branch-benchmark.txt
key: benchmarks-main