name: ci on: # Runs on PRs (opened / synchronize / reopened, which are the defaults) and # manual dispatch only. We deliberately don't run on direct pushes to master: # master is PR-merge-only, and PR validation already covers the merge # commit via the `synchronize` event on the PR branch. pull_request: workflow_dispatch: concurrency: group: ci-${{ github.ref }} cancel-in-progress: true jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version-file: go.mod cache: true - name: Set up JDK 17 uses: actions/setup-java@v4 with: distribution: temurin java-version: "17" - name: Set up Android SDK uses: android-actions/setup-android@v3 - name: Set up Node 22 uses: actions/setup-node@v4 with: node-version: "22" cache: npm cache-dependency-path: pkg/spec-api/package-lock.json - name: Set up bun uses: oven-sh/setup-bun@v2 with: bun-version: "1.3.13" - name: Cache bun store uses: actions/cache@v4 with: path: ~/.bun/install/cache key: bun-${{ runner.os }}-${{ hashFiles('web/bun.lock') }} restore-keys: | bun-${{ runner.os }}- - name: Install buf uses: bufbuild/buf-setup-action@v1 - name: Install protoc plugins run: | go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest echo "$(go env GOPATH)/bin" >> "$GITHUB_PATH" - name: Cache Gradle uses: actions/cache@v4 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | gradle-${{ runner.os }}- - name: Bootstrap run: make bootstrap - name: Lint proto run: buf lint - name: Go vet run: go vet ./... - name: Run tests run: make test