Skip to main content
Apache-2.023 stars · 3 forks

Contribute

The most valuable contribution is not code — it is a scenario or an incident nobody has written yet, drawn from a failure you have actually had to fix.

Where to start

Four ways in

  • No Go required

    Author content

    Scenarios, incidents, learning paths and challenges are YAML plus shell scripts. Go orchestrates, records and grades — it never encodes the content. No Go knowledge required.

    Your first scenario
  • Go 1.24+

    Fix code

    The engine is a self-contained Go module under src/, with cobra commands as thin adapters, a durable run engine and SQLite persistence. Layering is documented in ADR-0005.

    Read the architecture
  • Any level

    Strengthen the tests

    Four test layers are mandatory for every change: Go unit, shell (bats with kubectl stubbed), UI component (vitest) and end-to-end (Playwright). Coverage is gated in CI.

    Testing guide
  • Any level

    Report what broke

    It is an early release with rapid iteration and the odd rough edge. A precise report with your labctl doctor output and the failing command is genuinely valuable.

    Open an issue
Set up

From clone to running tests

Contributors need Go 1.24+ and Node 22+ — end users following the quickstart do not, because the released binary already has the UI embedded.

Build it

shell
git clone https://github.com/sagar2395/snowopslabs.git
cd snowopslabs
cp config/.env.example .env

make cli-build      # bin/labctl, UI embedded
make cli-install    # …or onto your PATH

Prove it still works

shell
make test        # Go unit + shell, race, coverage gate
make test-ui     # vitest component tests
make test-e2e    # playwright journeys
make lint        # every static-analysis gate
make validate    # all content is well-formed

All four test layers are mandatory for every change — see the testing guide. Commits are signed off under the DCO; the contributing guide has the full PR bar.

Non-negotiable

The golden rules

Three principles that decide most review conversations before they start.

  • Everything is verifiable

    Checks are the core primitive. A scenario without checks is a blog post.

  • Declarative content, orchestrating code

    If it can be YAML, it is YAML. Go never encodes the content itself.

  • Every layer, every change

    Unit, shell, component and end-to-end. Plus a runbook a human can follow.

The catalog has 6 faults. Production has thousands.

If you have debugged a failure that is not in the library — a certificate that expired at the worst moment, a DNS change that took out half a namespace, a CNI upgrade that went sideways — that is the contribution the project most wants. Faults must be realistic and reversible; everything else is detail.