Appearance
Write a pipeline
Here after are the same pipelines written in different languages.
Start from a template
You may want to generate a template config file with the following commands.
sh
pipelight init
pipelight init
sh
pipelight init --template toml
pipelight init --template toml
Write in a programming languages
Writting pipelines in programming languages enable the usage of variables, loops and functions. A short file can then generate a base pipeline with its multiple declinations.
Javascript (discourage)
DANGER
Javascript is a weakly typed language, and so highly prone to errors. It is greatly recommended to use Typescript instead, to take full advantage of types linting.
Typescript only supercharges Javascript syntax with optional type definition.
If you are not at ease with Typescript, you can still write pipelines in Javascript in a .ts
file and use types later to strenghten your pipeline definition.
Typescript
Importing the types from the deno package will give you a pleasant linting support. Then create pipelines with steps and commands. Add automatic triggers and have fun.
ts
//pipelight.ts
import type { Config } from "https://deno.land/x/pipelight/mod.ts";
const config: Config = {
pipelines: [
{
name: "test",
steps: [
{
name: "build",
commands: ["pnpm install", "pnpm build"]
}
],
triggers: [
{
branches: ["master", "dev"],
actions: ["pre-push", "pre-commit"]
}
]
}
]
};
export default config;
//pipelight.ts
import type { Config } from "https://deno.land/x/pipelight/mod.ts";
const config: Config = {
pipelines: [
{
name: "test",
steps: [
{
name: "build",
commands: ["pnpm install", "pnpm build"]
}
],
triggers: [
{
branches: ["master", "dev"],
actions: ["pre-push", "pre-commit"]
}
]
}
]
};
export default config;
Pipelines in configuration languages
Configuration languages(marrkup languages) have proven to be great to define small pipelines in a blink. Those pipelines can replace the simplest bash scripts for atomic (small) and highly repetitive tasks.
Toml
toml
[[pipelines]]
name = "test"
[[pipelines.steps]]
name = "build"
commands = ["pnpm install", "pnpm build"]
[[pipelines.triggers]]
branches = ["master","dev"]
actions= ["pre-push", "pre-commit"]
[[pipelines]]
name = "test"
[[pipelines.steps]]
name = "build"
commands = ["pnpm install", "pnpm build"]
[[pipelines.triggers]]
branches = ["master","dev"]
actions= ["pre-push", "pre-commit"]
Hcl (Hashicorp)
hcl
# A pipeline
pipelines = [{
name = "test"
steps = [{
name = "build"
commands = ["pnpm install", "pnpm build"]
}]
triggers = [{
branches = ["master","dev"]
actions = ["pre-push", "pre-commit"]
}]
}]
# A pipeline
pipelines = [{
name = "test"
steps = [{
name = "build"
commands = ["pnpm install", "pnpm build"]
}]
triggers = [{
branches = ["master","dev"]
actions = ["pre-push", "pre-commit"]
}]
}]
Yaml
yml
pipelines:
- name: test
steps:
- name: build
commands:
- pnpm install
- pnpm build
- triggers:
- branches:
- master
- dev
actions:
- pre-push
- pre-commit
pipelines:
- name: test
steps:
- name: build
commands:
- pnpm install
- pnpm build
- triggers:
- branches:
- master
- dev
actions:
- pre-push
- pre-commit
Pipelines written in markup languages are less likely to become more complex than this because pipelight complexity does not resides in its inner types.
The ability to write complex pipelines lays in the languages that are used to writte those pipelines.
As the documentation tries to showcase more and more flexible workflows, Toml and Yaml are less documented in favor of programming languages.
Run your pipeline
Run it from the terminal.
sh
pipelight run test
pipelight run test
Read the logs.
sh
pipelight logs -vvv
pipelight logs -vvv