GitHub - lask-task-runner/lask: A task runner with a small typed language: tasks run in pinned containers and are checked before anything executes.

GitHub

3 min read Original article ↗

test release license docs

Lask (lambda + task) is a task runner with a small language behind it, giving automation what shell scripts and CI YAML never had: portability, reproducibility, and verification before anything runs.

Lask is for anyone who finds Makefiles and Taskfiles not quite enough, and Dagger too much. The first are screwdrivers from the kitchen drawer; the second, a factory floor of your own to operate — its own engine, its own SDK, a general-purpose language and its entire ecosystem. Lask is the garage in between: install Docker and Lask, and you have everything you need.

The recording above and the excerpt below come from example/01-projects/02-webapp-on-aws, which builds and deploys a full AWS stack from a machine with none of its tools installed.

An excerpt of the example's main.lask: Python and Node commands declared on pinned images from an imported tools module, a one-line unit-test task, and a typed end-to-end test task that runs Playwright in its own image

See the full main.lask →

Why Lask

  • Approachable: one .lask file is a project, in a syntax borrowed from languages you already write.
  • Verifiable: lask check resolves every name, argument and type before a single command runs, and your editor shows the same errors as you type.
  • Portable: every command runs in an environment you pin, such as command { "go" } on #golang:1.22, the same on your laptop and in CI.
  • Programmable: a task is a typed function, with error handling and concurrency in the language and tasks imported across projects.
  • Runnable: a task's signature is its command line, and its doc comment is its --help.
  • Secure: secrets are masked in the log and can come from Vault, and imports are pinned by content hash.

Lask is a task runner, not a build system or a CI platform: it replaces what your CI jobs run, not the CI itself. Why Lask covers all of this, with a comparison to make, Taskfile and Dagger.

Install

$ brew tap lask-task-runner/tap
$ brew trust lask-task-runner/tap
$ brew install lask

Lask also needs a container engine: Docker, Podman or nerdctl (containerd). Installation covers Linux, Windows, building from source, shell completion and the VS Code extension; then Getting started takes you to a first task in about five minutes.

Documentation

The documentation is at https://lask-task-runner.github.io/, with a copy for each release:

The language specification and the compatibility policy live in this repository, and the site shows them too. To work on Lask itself, see doc/development.md.

Status

Lask is pre-1.0: features are experimental until 1.0, and breaking changes are still possible. See doc/compatibility.md for what stable will mean once released. Until then, feedback shapes what becomes stable.

Feedback

Questions, ideas and feedback of any kind are welcome in GitHub Discussions. Found a bug? Please open an issue.