Pipelight

Automation pipelines but easier.

Elevate your bash scripts to generic, debuggable and auto-triggered pipelines.

pipelight_logo

Command-line Interface

Stay in the comfort of your terminal

pipeline: vitest_unit_test(6s219ms)

pipeline: my_pipe(6s319ms)

Troubleshoot the pipe in a breeze.

Get aggressively verbose

Gather every process outputs.

pipeline: deploy_to_host(6s619ms)

  • step: build_files(4s619ms)
    • pnpm install(919ms)
      • stdout: Lockfile is up to date, resolution step is skipped Already up to date Done in 924ms
      • stderr:
    • vite build(3s919ms)
      • stdout: vite v4.3.1 building for production... transforming... 🌼 daisyUI 3.0.20 ✓ 669 modules transformed. rendering chunks... computing gzip size... dist/index.html 0.45 kB │ gzip: 0.30 kB dist/assets/product-bbe8489e.css 0.36 kB │ gzip: 0.17 kB dist/assets/collection-c3ae63aa.css 0.36 kB │ gzip: 0.17 kB dist/assets/index-dc1b6ad3.js 58.72 kB │ gzip: 10.54 kB 161.97 kB │ gzip: 60.82 kB ✓ built in 3.24s
      • stderr:
  • parallel

    • step: build image itsdizygote.com/front:production(1s419ms)
      • docker build --tag itsdizygote.com/front:production --file .docker/Dockerfile.front .(1s419ms)
        • stdout:
        • stderr: #0 building with "default" instance using docker driver #1 [internal] load .dockerignore #1 transferring context: 2B done #1 DONE 0.0s #2 [internal] load build definition from Dockerfile.front #2 transferring dockerfile: 277B done #2 DONE 0.0s #3 [internal] load metadata for docker.io/library/archlinux:latest #3 DONE 1.2s #12 exporting layers done #12 writing image sha256:f0547343647bb06a2489c4d25cb44592d992dcada04a7e3566fee95190259fa4 done #12 naming to itsdizygote.com/front:production done #12 DONE 0.0s
  • parallel

    • step: send image itsdizygote.com/front:production to remote
      • docker save itsdizygote.com/front:production | ssh -o TCPKeepAlive=no -C linode "docker load"
        • stdout:
        • stderr:
  • parallel

    • step: clean containers production.front.itsdizygote.com
      • ssh -o TCPKeepAlive=no -C linode "docker container stop production.front.itsdizygote.com && docker container rm production.front.itsdizygote.com"
        • stdout:
        • stderr:
  • parallel

    • step: run containers production.front.itsdizygote.com
      • ssh -o TCPKeepAlive=no -C linode "docker run --detach --publish 127.0.0.1:9280:3000 --name production.front.itsdizygote.com itsdizygote.com/front:production"
        • stdout:
        • stderr:

Use well-known configuration languages..

toml

[[pipelines]]
name =  "simple_example"

[[pipelines.steps]]
name = "list directory"
commands = ["ls"]

[[pipelines.steps]]
name = "get working directory"
commands = ["pwd"]

yml

pipelines:
  - name: simple_example
    steps:
      - name: list directory
        commands:
          - ls
      - name: get working directory
        commands:
          - pwd

..or code in your config file

Your shell commands..

sh

#simple_example.sh
## List files
ls;
## Get working directory
pwd;

..wrapped into Typescript..

ts

{
  name: "simple_example",
  steps: [
    {
      name: "list files",
      commands: ["ls"]
    },
    {
      name: "get directory",
      commands: ["pwd"]
    }
  ]
}

..boosted with syntactic sugar

ts

pipeline("simple_example", () => [
  step("list files",() => ["ls"]),
  step("get directory", () => ["pwd"])
]);

Trigger pipelines automatically.

On file change

ts

// When saving/deleting/modifying a file
// on branch dev and feature/<something>
{
    actions: ["watch"],
    branches: ["dev", "feature/*"]
}

sh

# Using vim (saves changes)
:w

On git hooks

ts

// When on tag v<something> and pushing to remote
{
    actions: ["pre-push"],
    tags: ["v*"]
}

sh

git tag -a v0.1
#or
git checkout v0.1
git push

tl;dr

⚡ Light and Fast

Written in Rust to be as low level as possible and stick to bare script performances.

🫦 Pretty Logs

Easily troubleshoot your scripts with pretty and verbose logs right in your terminal.

🚦 Automatic Triggers

Your pipelines are executed in background on some events. You don't leave your editor.

🤌 Typescript { Bash }

Enjoy wrapping your Bash with Typescript delicious and simple syntax. Uses Deno for its quick Typechecking.

Rust based.

Made with passion

for conscientious programmers.

♥️