Set retry to 1 on generate AI job. To avoid wasting tokens (#3181) #1939
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |