https://github.com/simonwhitaker/runny
🍯 Runny: a tool for running things
https://github.com/simonwhitaker/runny
cli command-line command-line-tool go golang makefile
Last synced: 4 months ago
JSON representation
🍯 Runny: a tool for running things
- Host: GitHub
- URL: https://github.com/simonwhitaker/runny
- Owner: simonwhitaker
- Created: 2024-07-19T05:02:46.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-12-14T08:20:25.000Z (6 months ago)
- Last Synced: 2025-12-16T11:58:39.338Z (6 months ago)
- Topics: cli, command-line, command-line-tool, go, golang, makefile
- Language: Go
- Homepage:
- Size: 1.79 MB
- Stars: 17
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 🍯 Runny: for running things
Makefiles are for boomers. The future is Runny.
## Features
* ❤️ Simple YAML syntax (inspired by Github Actions)
* 🪄 Full schema validaton == autocomplete in your favourite code editor
* 🧱 Build workflows through composition with `needs` and `then`
* 🏃♂️ Run steps conditionally with `if`
## Installation
```command
brew install simonwhitaker/tap/runny
```
## Usage
Create a `.runny.yaml` file:
```yaml
shell: /bin/bash
commands:
install-uv:
if: "! command -v uv"
run: pip install uv
pip-sync:
needs:
- install-uv
run: uv pip sync requirements.txt
pip-compile-and-sync:
needs:
- install-uv
run: |
uv pip compile requirements.in -o requirements.txt
uv pip sync requirements.txt
pip-install:
argnames:
- packagespec
run: echo $packagespec >> requirements.in
then:
- pip-compile-and-sync
```
Then run commands with runny:
```command
runny pip-install ruff
```
## Examples
### Go
```yaml
commands:
clean:
run: |
go clean ./...
rm -rf dist
install-goreleaser:
if: "! command -v goreleaser"
run: brew install goreleaser/tap/goreleaser
release:
needs:
- clean
- install-goreleaser
run: |
export GITHUB_TOKEN=$(gh auth token)
goreleaser
generate:
run: go generate ./...
test:
run: go test ./...
test-coverage:
run: go test -coverprofile=c.out ./... && go tool cover -func="c.out"
test-coverage-html:
run: go test -coverprofile=c.out ./... && go tool cover -html="c.out"
```
### Python
```yaml
commands:
update-requirements:
run: pip freeze > requirements.txt
pip-install:
argnames:
- packagespec
run: pip install $packagespec
then:
- update-requirements
```
### Docker Compose
Docker Compose has good command-line completion already. But using runny, you can add entries for just the commands you use regularly, then get an uncluttered list of options when you tab-complete.
```yaml
commands:
up:
run: docker compose up -d
down:
run: docker compose down
build-and-up:
run: docker compose up --build -d
logs:
argnames:
- service
run: docker compose logs $service
shell:
argnames:
- service
run: docker compose exec $service sh
```