Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Harmont examples

Minimal idiomatic starter projects, each wired up to a Harmont CI pipeline. Every example lives in its own subdirectory with a .hm/pipeline.py you can read, copy, and run via hm run <slug>.

Example Toolchain Pipeline
react npm + Vite + Vitest + ESLint hm.js.project(...)
nextjs npm + Jest + ESLint hm.js.project(...)
typescript tsc + Vitest + ESLint hm.js.project(...)
bun Bun + tsc + bun:test + ESLint hm.js.project(runtime="bun")
rust cargo + clippy + rustfmt hm.rust(...)
python-uv uv + pytest + ruff + mypy hm.python(...)
go go build/test/vet/fmt hm.go(...)
c CMake + CTest + clang-format hm.cmake(lang="c")
cpp CMake + CTest + clang-format hm.cmake(lang="cpp")
zig zig build/test/fmt hm.zig(version="0.13.0")

How to run an example locally

  1. Install the Harmont CLI (cli/ in this repo, or cargo install harmont-cli once published).
  2. cd examples/<lang> and run hm run ci. The CLI uses the project's .hm/pipeline.py and executes each step in a local Docker container (the default backend), sharing caches across runs. Use --backend cloud to submit the run to Harmont Cloud instead.

Every pipeline runs on the default ubuntu:24.04 base (set a per-step image= to override) and the apt-base / language-install steps are cached forever — only the action leaves (test, lint, etc.) re-run after a code change.

What to copy

The shape every pipeline shares: a single @hm.target() builds the toolchain object once; the @hm.pipeline("ci") body returns a tuple of leaves (build, test, lint). Each leaf forks off the shared install step, so adding a fifth check costs you the action — never the install.