UNCLASSIFIED - NO CUI

Adds k3d-dev.sh BATS test suite and lefthook git hooks

Package Merge Request

Package Changes

Adds 18 BATS unit tests for k3d-dev.sh and a lefthook.yaml for opt-in local git hooks. No changes to k3d-dev.sh itself. This is Step 2 of the plan in big-bang/pipeline-templates/pipeline-templates#912 (closed).

3 files, 266 lines total:

  • tests/bats/k3d-dev/k3d-dev.bats - 18 tests covering argument parsing, domain config, kubeconfig path derivation, and the batch-file error guard. No mocks, no AWS calls, no SSH - each test sources the script, calls a function, and checks a variable.
  • lefthook.yaml - runs bats on pre-commit (when k3d-dev.sh or *.bats staged) and pre-push (when any *.sh/*.bats changed). Opt-in via lefthook install - does nothing if you don't have it.
  • .gitattributes - tells GitLab to syntax-highlight .bats files as Bash in diffs.
# How to run
brew install bats-core  # one-time
bats tests/bats/k3d-dev/k3d-dev.bats

Test log

bats test run - direct

❯ bats --recursive ./tests/bats
k3d-dev/k3d-dev.bats
 ✓ k3dsshcmd builds correct SSH command
 ✓ set_kubeconfig uses PublicIP when not provisioning
 ✓ set_kubeconfig uses AWSUSERNAME when provisioning
 ✓ process_arguments -b sets BIG_INSTANCE=true
 ✓ process_arguments -M sets METAL_LB=false
 ✓ process_arguments -p sets PRIVATE_IP=true
 ✓ process_arguments -d sets action=destroy_instances
 ✓ process_arguments -t sets PROJECTTAG
 ✓ process_arguments -K sets RESET_K3D=true
 ✓ process_arguments -H sets PublicIP and disables cloud provisioning
 ✓ process_arguments -H without -P sets PrivateIP=PublicIP
 ✓ process_arguments -D and --domain set BASE_DOMAIN
 ✓ process_arguments handles multiple flags
 ✓ process_arguments reports unknown option
 ✓ set_domains builds PUBLIC_DOMAINS and PASSTHROUGH_DOMAINS
 ✓ set_domains uses default BASE_DOMAIN
 ✓ set_domains clears stale values before rebuilding
 ✓ run_batch_add fails if no batch started

18 tests, 0 failures

lefthook precommit checks

Same thing but more automated:

❯ lefthook run pre-commit --all-files
╭──────────────────────────────────────╮
│ 🥊 lefthook v2.1.0  hook: pre-commit │
╰──────────────────────────────────────╯
┃  bats-k3d-dev ❯

k3d-dev/k3d-dev.bats
 ✓ k3dsshcmd builds correct SSH command
 ✓ set_kubeconfig uses PublicIP when not provisioning
 ✓ set_kubeconfig uses AWSUSERNAME when provisioning
 ✓ process_arguments -b sets BIG_INSTANCE=true
 ✓ process_arguments -M sets METAL_LB=false
 ✓ process_arguments -p sets PRIVATE_IP=true
 ✓ process_arguments -d sets action=destroy_instances
 ✓ process_arguments -t sets PROJECTTAG
 ✓ process_arguments -K sets RESET_K3D=true
 ✓ process_arguments -H sets PublicIP and disables cloud provisioning
 ✓ process_arguments -H without -P sets PrivateIP=PublicIP
 ✓ process_arguments -D and --domain set BASE_DOMAIN
 ✓ process_arguments handles multiple flags
 ✓ process_arguments reports unknown option
 ✓ set_domains builds PUBLIC_DOMAINS and PASSTHROUGH_DOMAINS
 ✓ set_domains uses default BASE_DOMAIN
 ✓ set_domains clears stale values before rebuilding
 ✓ run_batch_add fails if no batch started

18 tests, 0 failures

Package MR

N/A. This is a test-only addition to the umbrella repo.

For Issue

Supports big-bang/pipeline-templates/pipeline-templates#912 (closed)

Closes #3139 (closed).

Upgrade Notices

No changes necessary for Big Bang chart consumers, but this MR adds currently-optional local dev dependencies for lefthook and bats:

  • bats-core 1.13.0
  • lefthook 2.1.0

To bootstrap on a brew-capable machine:

brew install bats-core lefthook
lefthook install
lefthook run pre-commit --all-files
Edited by Daniel Pritchett

Merge request reports

Loading