
Code Formatting
โ 527by openshift ยท part of openshift/hypershift
MANDATORY: When writing Go tests, you MUST use 'When...it should...' format for ALL test names. When writing any Go code, you MUST remind user to run 'make lint-fix' and 'make verify'. These are non-negotiable HyperShift requirements.
This is the playbook your agent receives when the skill activates โ you don't need to read it to use the skill, but it's here to audit before installing.
Code Quality, Formatting and Conventions
Code Formatting and Linting
- Use
make lint-fixafter writing Go code to automatically fix most linting issues - Run
make verifyto verify both linting and tests pass before committing - For markdown files, use
make verify-codespellto catch spelling errors
Test Conventions - MANDATORY
Test naming
NON-NEGOTIABLE RULE: Every Go test name MUST follow this exact format:
name: "When <condition>, it should <expected behavior>"Examples:
name: "When NodePool has valid image ID, it should create Azure machine template"
name: "When subnet ID is invalid, it should return error"
name: "When encryption is enabled, it should configure disk encryption set"NEVER use generic names like:
- โ "nominal case without managed identity"
- โ "basic Azure machine template with ImageID"
- โ "error case - invalid subnet ID"
ALWAYS use "When...it should..." format:
- โ "When NodePool has no managed identity, it should create template without identity"
- โ "When NodePool has ImageID, it should create basic Azure machine template"
- โ "When subnet ID is invalid, it should return error with subnet parse message"
Unit test function naming
Unit test functions MUST be named after the function they test, using the standard Go Test<FunctionName> convention:
// Testing function ReconcileNodePool
func TestReconcileNodePool(t *testing.T) { ... }
// Testing function buildAzureMachineTemplate
func TestBuildAzureMachineTemplate(t *testing.T) { ... }NEVER use generic or disconnected test function names like:
- โ
TestNodePoolFeatures - โ
TestAzureIntegration - โ
TestVariousCases
Each test function should map 1:1 to the function under test. If a function is complex enough to warrant many test cases, use table-driven tests within a single Test<FunctionName> function with the "When...it should..." naming for each case.
Unit test placement
- Always include unit tests when creating new functions or modifying existing ones
- Place unit tests next to the code they test โ in the same package directory, in a
_test.gofile - Do NOT place new tests in
test/integration/โ this is a legacy directory. New unit tests go alongside the code under test. New integration-style tests that require a cluster should usetest/e2e/ortest/envtest/
Quick Checklist
Before committing:
- Ran
make lint-fixon Go code - Ran
make verify(passes) - Tests use "When...it should..." naming format
- New functions have unit tests
- Markdown checked with
make verify-codespell
npx skills add https://github.com/openshift/hypershift --skill Code FormattingRun this in your project โ your agent picks the skill up automatically.
No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.
Licensed under Apache-2.0โ you can use, modify, and redistribute it under that license's terms.
View the full license file on GitHub โ