---
name: vendor-update
description: >
  Upgrade Go/Node.js vendor dependencies and sync tool versions. Use whenever the
  user says "upgrade dependencies", "update vendors", "vendor update", "run vendor-upgrade",
  "bump dependencies", "update packages", or asks to run the `vendor-update` Make target.
  This skill also checks `scripts/build/version.mk` after upgrading to see if any
  tracked tool versions need updating too, and removes stale binaries from `bin/`
  when versions change.
compatibility: go, make
---

## Upgrade vendor dependencies

Run the vendor-update Make target across all projects:

```bash
make vendor-update
```

This runs `go get -u ./...` and `go mod tidy -compat=1.25` in each project directory (ui, banyand, bydbctl, mcp, fodc/agent, fodc/proxy, pkg, test).

## Update license dependencies

After the vendor upgrade completes, run `make license-dep` to update any license-related files that may have changed due to new or updated dependencies:

```bash
make license-dep
```

This ensures license headers and dependency license files stay in sync with the upgraded vendors.

## Check for tool version drift

After upgrading, compare `go.mod` dependency versions against `scripts/build/version.mk` to find any tools whose library version was bumped and may need their tool version updated.

### Version mapping

Read `scripts/build/version.mk` and `go.mod` in parallel. For each tool version variable, check if the corresponding library in go.mod was upgraded:

| version.mk variable | Binary | go.mod package |
|---|---|---|
| `BUF_VERSION` | `bin/buf` | `github.com/bufbuild/buf` (if present) |
| `PROTOC_GEN_GO_VERSION` | `bin/protoc-gen-go` | `google.golang.org/protobuf` |
| `PROTOC_GEN_GO_GRPC_VERSION` | `bin/protoc-gen-go-grpc` | `google.golang.org/grpc` |
| `PROTOC_GEN_DOC_VERSION` | `bin/protoc-gen-doc` | `github.com/pseudomuto/protoc-gen-doc` (if present) |
| `GRPC_GATEWAY_VERSION` | `bin/protoc-gen-grpc-gateway` | `github.com/grpc-ecosystem/grpc-gateway/v2` |
| `PROTOC_GEN_VALIDATE_VERSION` | `bin/protoc-gen-validate` | `github.com/envoyproxy/protoc-gen-validate` |
| `GOLANGCI_LINT_VERSION` | `bin/golangci-lint` | (no go.mod entry — only in version.mk) |
| `REVIVE_VERSION` | `bin/revive` | (no go.mod entry — only in version.mk) |
| `LICENSE_EYE_VERSION` | `bin/license-eye` | (no go.mod entry — only in version.mk) |
| `MOCKGEN_VERSION` | `bin/mockgen` | `go.uber.org/mock` |
| `GINKGO_VERSION` | `bin/ginkgo` | `github.com/onsi/ginkgo/v2` |
| `GOVULNCHECK_VERSION` | `bin/govulncheck` | `golang.org/x/vuln` |
| `BPF2GO_VERSION` | (used in bpf2go.mk) | `github.com/cilium/ebpf` |

**Only update version.mk if the library version in go.mod has changed and the tool version should follow.** Many tools (golangci-lint, revive, license-eye) are not in go.mod — their versions only change when explicitly updated in version.mk, not from `make vendor-update`.

## Update version.mk if needed

If a tool version should be bumped (library changed and tool version needs to match), update `scripts/build/version.mk` using the Edit tool. Keep the format exactly — e.g., `PROTOC_GEN_GO_VERSION := v1.36.11`.

## Remove stale binaries

When version.mk is updated, remove the corresponding old binary from `bin/`:

```bash
rm bin/<binary-name>
```

This ensures the next build/install of that tool fetches the correct new version.
