Gh pull request
Create a GitHub pull request for SkyWalking BanyanDB. Use when the user asks to create a PR, submit changes, or open a pull request.From its SKILL.md
npx -y skills add apache/skywalking-banyandb --skill gh-pull-requestAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
3.8 KB, as published. Nobody here has run it
Creating a Pull Request for SkyWalking BanyanDB
Branch Rules
Always create a PR from a new branch. Never push directly to main. This is the same convention as the main Apache SkyWalking repo (https://github.com/apache/skywalking).
git checkout -b <descriptive-branch-name>
Local Checks Before Creating PR
Run these checks locally before pushing. They mirror the CI check job and PR-blocking tests in .github/workflows/ci.yml.
Required: Code Generation and Build
make generate
make build
Required: Linting and Formatting
make lint
make check
make check verifies formatting (gofumpt), go mod tidy, and ensures no uncommitted generated file diffs.
Why this order: build must succeed before lint so generated code exists. check validates consistency after linting.
After make lint passes: If lint introduced any fixes (e.g. auto-formatting, field alignment corrections), commit those changes before running make check. Do NOT update CHANGES.md for these fixup commits — just stage all modified tracked files and commit with a message like chore: fix lint issues. Then run make check on the clean tree.
Required: License Headers
make license-check
All source files must have Apache 2.0 license headers.
Required: Update CHANGES.md
Add a one-line entry under the current development version section in CHANGES.md (at the repo root). Place it under the appropriate subsection (### Features, ### Bug Fixes, etc.).
Unit Tests
Run these test packages. Each can run in parallel if the user's machine has enough cores, but it's fine to run them sequentially:
make test-ci PKG=./banyand/...
make test-ci PKG=./bydbctl/...
make test-ci PKG=./pkg/...
make test-ci PKG=./fodc/...
The CI uses these options: --vv --fail-fast --label-filter \!slow with coverage flags. For local runs, use a simplified form unless the user asks for full CI parity:
TEST_CI_OPTS="--vv --fail-fast --label-filter \!slow" make test-ci PKG=./banyand/...
Integration Tests
Run these after unit tests pass:
make test-ci PKG=./test/integration/standalone/...
make test-ci PKG=./test/integration/distributed/...
Checks NOT Practical Locally
These run in CI only — no need to run locally:
- e2e tests — require Docker + OAP stack (90 min timeout)
- fodc-e2e tests — require Kind Kubernetes cluster
- dependency-review — GitHub-specific action
- slow/flaky/property-repair tests — scheduled, not PR-blocking
Common issues
-
make lintfails with field alignment errors: The linter reports structs with suboptimal field ordering (e.g.fieldalignment: struct with X pointer bytes could be Y). Fix them automatically with:~/go/bin/fieldalignment -fix ./path/to/package/...Parse the lint output to find which packages have alignment issues, run
fieldalignment -fixon those packages, then re-runmake lintto confirm they're resolved. -
make lintfails with formatting errors: Runmake formatto auto-fix, then re-runmake lintto confirm. -
Test timeout: Integration tests can be slow; add
TEST_CI_OPTS="--timeout 60m"if they time out -
Missing tools:
make check-reqwill tell you what's missing -
make lintormake checkfails withbuf: not found: Installbufautomatically by runningmake -C api generate, then retry. -
make buildfails: Check if generated files are up to date withmake generate
Creating the PR
git push -u origin <branch-name>
gh pr create --title "<title>" --body "<body>"
Follow the standard PR format with a summary and test plan.