seristack

module
v0.2.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 29, 2026 License: Apache-2.0

README ΒΆ

seristack(v0.2.2)

**Run shell workflows via CLI or HTTP

Seristack is a lightweight automation engine designed to bridge the gap between local task execution and remote triggers. Define your stacks in YAML, manage dependencies, and expose your automation via a built-in HTTP server.

seristack

Features

πŸš€ Run multiple command stacks from a single config
πŸ” Repeat stacks with serial or concurrent execution
πŸ”— Define dependencies between stacks
🧩 Variable substitution using templates
πŸ“¦ Share output between stacks
🌐 Expose stacks as HTTP endpoints
🧠 Run as an MCP server for IDE integrations
πŸ›  Works with Bash, sh, and PowerShell

HIGH LEVEL USAGE DIAGRAML

Installation

Using Homebrew (Mac and Linux)
brew install TechXploreLabs/tap/seristack
Linux (using release archive)
  1. Go to Seristack Releases and download the latest seristack_VERSION_linux_ARCH.tar.gz (ARCH matches your system, e.g., amd64, arm64).
  2. Extract the archive:
    tar -xzf seristack_VERSION_linux_ARCH.tar.gz
    
  3. Move the seristack binary to a directory in your PATH:
    sudo mv seristack /usr/local/bin/
    
  4. Set execute permissions (just in case):
    sudo chmod +x /usr/local/bin/seristack
    
  5. Verify installation:
    seristack --help
    
Windows (using release archive)
  1. Go to Seristack Releases and download the latest seristack_VERSION_windows_ARCH.zip or .gz file (where ARCH matches your system, e.g., amd64).
  2. Extract the zip/gz file (Right click β†’ Extract all, or use a tool like 7-Zip).
  3. Move seristack.exe to a folder in your %PATH% (such as C:\Windows, or better, a custom tools folder included in PATH).
  4. Open PowerShell or Command Prompt and verify installation:
    seristack --help
    

Sample stack yaml file

# description about seristack
# config.yaml

stacks:
  - name: stack1                # name of the stack (REQUIRED)
    workDir: ./                 # working directory to execute the cmds. default is "./"
    description: Used for printing  
                  welcome message               # used for adding the stack as tool in mcp server, if descrption is empty then 
                                                # it won't be added
    method: GET                 # Http methods needs to be added for http server
    urlPath: /show              # Optional, If not provided stack name will be added as path, ex /stack1 
    continueOnError: false      # if cmds has error, true will not stop execution, false will stop. default is false
    count: 3                    # count = 0 will not run cmds, count = 3 runs entire cmds three times. default is 0
    executionMode: PARALLEL     # if count = 3 and executionMode is PARALLEL, then all three iterations of list 
                                # cmds execute parallellely . Valid options are, [PARALLEL/STAGE/PIPELINE/SEQUENTIAL]. 
                                # STAGE = execute all iterations conncurrently, list of cmds execeuted serially
                                # PIPELINE = execute all iterations serially, list of cmds executed concurrently
                                # SEQUENTIAL = execute all iterations and theirs cmds serially. default is PARALLEL
    
    vars:                       # vars take key=value pair of variables. default is empty
      samplekey: samplevalue
    shell: bash                 # shell takes sh as default for linux, darwin and powershell for windows
    shellArg: -c                # shellArg takes -c as default for linux, darwin and -Command for windows
    dependsOn: []               # dependsOn takes list of stacks to start after them. default is []
    cmds:                       # cmds takes list of shell commands (linux, powershell)
      - |
        export samplekey={{.Vars.samplekey}}    # to use vars for substitution
        echo $samplekey
        echo "count={{.Count.index}}"         # index of count iterations
        echo "Hey i'm seristack!"

  - name: stack2
    workDir: ./
    continueOnError: false
    count: 3
    executionMode: SEQUENTIAL
    vars:                       # vars take key=value pair of variables. default is empty
      env: Dev
    dependsOn: [stack1]          # runs after stack1 completes
    cmds:
      - |
        # Command 1: Produces metadata
        echo "{\"index\": {{.Count.index}}, \"step\": \"metadata\", \"status\": \"ok\"}"
      - |
        # Command 2: Produces metric data
        echo "{\"index\": {{.Count.index}}, \"step\": \"metrics\", \"value\": $((RANDOM % 100))}"  
    output: |  # for aggregating outputs from the cmds
      echo "--- Aggregation Summary ---"
      # We use 'grep' to find JSON lines and 'jq' to format them into an array
      echo '{{.Self.result}}' | grep "^{" | jq -s '{
        total_records: length,
        environment: "{{.Vars.env}}",
        results: .
      }'
  - name: stack3
    workDir: ./
    count: 1
    vars:
      invite: hello engineers
    cmds:
      - |
        echo "Current date and time:"
        echo `date`

Running the stacks

  1. Trigger entire stacks, default is config.yaml.
seristack trigger -c config.yaml

or

seristack trigger
  1. Run the particular stack.
seristack trigger -c config.yaml -s stack3
  1. Init the http server with endpoint. ctrl+c will stop the server process.
seristack run -c config.yaml
  1. Init the mcpserver. ctrl+c will stop the server process.
seristack mcp -t streamableHTTP

License

Apache License

Directories ΒΆ

Path Synopsis
cmd
seristack command
internal
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL