Thank you for your interest in contributing!
- Go 1.21+
- A Google Cloud service account (for integration testing against a real spreadsheet)
git clone https://github.com/get-skipper/skipper-go.git
cd skipper-go
go work syncmake testmake lintLinting must pass before a pull request can be merged.
All commits must follow the Conventional Commits specification:
type(scope): short description
[optional body]
[optional footer]
| Type | When to use |
|---|---|
feat |
A new feature or integration |
fix |
A bug fix |
docs |
Documentation changes only |
refactor |
Code change that neither fixes a bug nor adds a feature |
test |
Adding or updating tests |
chore |
Build process, dependency updates, tooling |
| Scope | Applies to |
|---|---|
core |
core/ module |
testing |
testing/ module |
testify |
testify/ module |
ginkgo |
ginkgo/ module |
feat(testing): add SkipIfDisabled helper for subtest support
fix(core): correct date parsing for ISO-8601 with timezone offset
docs(ginkgo): document SynchronizedBeforeSuite parallel mode
refactor(core): extract SheetsClient authentication into separate method
test(core): add edge cases for NormalizeTestID
chore: update google.golang.org/api to v0.190.0
All notable changes are recorded in CHANGELOG.md following the Keep a Changelog format.
- Entries live under
## [Unreleased]until a release is cut. - Every change belongs to one of:
Added,Changed,Deprecated,Removed,Fixed,Security. - When a new version is released, rename
## [Unreleased]to## [x.y.z] – YYYY-MM-DD, add a fresh empty## [Unreleased]section at the top, and append a comparison link at the bottom of the file.
-
Fork the repository and create a branch:
git checkout -b feat/my-feature
-
Make your changes. Ensure:
make testpassesmake lintpasses- New functionality has corresponding unit tests
-
Commit using Conventional Commits format (see above).
-
Open a pull request with a clear title and description.
core/ # Shared logic: SheetsClient, SkipperResolver, SheetsWriter, CacheManager, etc.
testing/ # Standard library testing integration
testify/ # testify/suite integration
ginkgo/ # Ginkgo v2 integration
Each framework integration should:
- Initialize the resolver (or rehydrate from cache) before tests run
- Skip disabled tests using the framework's native skip mechanism (
t.Skip(),ginkgo.Skip()) - Collect discovered test IDs for sync mode
- Call
SheetsWriter.Sync()after all tests finish (sync mode only)
See existing integrations for reference patterns.