Skip to content

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

Write readable and reusable blocks.

Your shell commands..

sh
#simple_example.sh
## List files
ls;
## Get working directory
pwd;
#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"]
    }
  ]
}
{
  name: "simple_example",
  steps: [
    {
      name: "list files",
      commands: ["ls"]
    },
    {
      name: "get directory",
      commands: ["pwd"]
    }
  ]
}

..boosted with syntaxic sugar

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

Code in your config file.

ts
import { makeDeployPipe } from "./template/deploy.ts";

const env = await load({ envPath: `./.env.production` });

const params = {
  remote: {
    domain: "myserver.com",
    path: "/remote/directory"
  },
  local: {
    path: "/my/build/directory"
  }
};

const deploy_pip = makeDeployPipe(params, env);

export default {
  pipelines: [deploy_pipe]
};
import { makeDeployPipe } from "./template/deploy.ts";

const env = await load({ envPath: `./.env.production` });

const params = {
  remote: {
    domain: "myserver.com",
    path: "/remote/directory"
  },
  local: {
    path: "/my/build/directory"
  }
};

const deploy_pip = makeDeployPipe(params, env);

export default {
  pipelines: [deploy_pipe]
};

Define complex operations with less code.

with the Pipelight Helpers

ts
pipeline("docker_deploy", () => [
  step("build images and run containers", () => [
    ...docker.images.create(),
    ...docker.containers.create()
  ])
]);
pipeline("docker_deploy", () => [
  step("build images and run containers", () => [
    ...docker.images.create(),
    ...docker.containers.create()
  ])
]);

Troubleshoot the pipe in a breeze.

Get aggressively verbose

Gather every process outputs.

Trigger pipelines automatically.

On file change

ts
// When saving/deleting/modifying a file
// on branch dev and feature/<something>
{
    actions: ["watch"],
    branches: ["dev", "feature/*"]
}
// When saving/deleting/modifying a file
// on branch dev and feature/<something>
{
    actions: ["watch"],
    branches: ["dev", "feature/*"]
}
sh
# Using vim (saves changes)
:w
# Using vim (saves changes)
:w

On git hooks

ts
// When on tag v<something> and pushing to remote
{
    actions: ["pre-push"],
    tags: ["v*"]
}
// 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
git tag -a v0.1
#or
git checkout v0.1
git push

Write small pipelines for atomic tasks.

Use minimal configuration formats

Old-school flavors

toml
[[pipelines]]
name =  "simple_example"

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

[[pipelines.steps]]
name = "get working directory"
commands = ["pwd"]
[[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
pipelines:
  - name: simple_example
    steps:
      - name: list directory
        commands:
          - ls
      - name: get working directory
        commands:
          - pwd

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.

♥️