go-run-programs

Go run programs in the background and check until they are ready.

Go API

The original purpose of this was to run programs in the background to test against,
specifically in a way that works the same in Windows and Unix for simple multi-platform CI.

import (
    "github.com/gulducat/go-run-programs/program"
)

func TestThatMyThingTalksToTheOtherThing(t *testing.T) {
    t.Log("starting the other-thing in the background")
    p := program.Program{
        Name:    "OtherThing",
        Command: "other-thing server run",
        Check:   "other-thing is-running",
    }
    stop, err := program.RunInBackground(p)
    t.Cleanup(stop) // stop it when tests are done.
    if err != nil {
        t.Fatal(err)
    }
    
    t.Log("ok ready to run tests now")
}

CLI

It can also be run as a CLI for cute little local dev environments or such.

go-run-programs hashicorp.hcl

# hashicorp.hcl

program "consul" {
  command = "consul agent -dev"
  check   = "consul members"
}
  
program "nomad" {
  command = "nomad agent -dev"
  check   = "nomad node status"
}
  
program "vault" {
  command = "vault server -dev"
  check   = "vault status"
  env = {
    # default client is https, but vault server -dev is http
    VAULT_ADDR = "http://localhost:8200"
  }
}

GitHub

View Github