Skip to main content

A simple, powerful task runner inspired by justfile

Project description

RunLy

PyPI version Python Support License: MIT Tests Coverage

A simple, powerful task runner inspired by justfile

RunLy is a modern Python task runner that brings the simplicity and power of justfile to Python projects. Define your project tasks in a simple configuration file and run them with a single command.

✨ Features

  • 🎯 Simple: Easy-to-understand configuration syntax
  • 🔗 Dependencies: Commands can depend on other commands
  • 🔧 Variables: Support for variables and environment variables
  • 📁 Flexible: Supports both justfile and YAML formats
  • 🚀 Fast: Minimal overhead, maximum performance
  • 🌐 Cross-platform: Works on Windows, macOS, and Linux
  • 🎨 Modern CLI: Beautiful command-line interface with rich output
  • 🧪 Well-tested: Comprehensive test suite with high coverage

🚀 Quick Start

Installation

pip install runly

Basic Usage

Create a justfile in your project root:

# Variables
project := "my-app"
version := "1.0.0"

# Default command  
test:
    echo "Running tests for {{project}}"
    pytest tests/

# Build the project
build target="debug":
    echo "Building {{project}} v{{version}} in {{target}} mode"
    python -m build

# Deploy (depends on build)
deploy env:
    just build release
    echo "Deploying to {{env}}"

Run your tasks:

# Run the default command
runly

# Run specific commands
runly test
runly build release
runly deploy production

# List available commands
runly --list

YAML Configuration

Alternatively, use YAML format (runly.yml):

variables:
  project: my-app
  version: 1.0.0

default: test

commands:
  test:
    script:
      - echo "Running tests for {{project}}"
      - pytest tests/
    description: Run all tests

  build:
    script: python -m build --{{target}}
    args:
      - target=debug
    description: Build the project
    dependencies:
      - test

  deploy:
    script:
      - just build release
      - echo "Deploying to {{env}}"
    args:
      - env
    description: Deploy to environment
    dependencies:
      - build

📖 Documentation

🎯 Why RunLy?

Before RunLy

# Scattered scripts and commands
python -m pytest tests/
python -m build --wheel
docker build -t myapp:latest .
kubectl apply -f deployment.yaml
python scripts/cleanup.py

After RunLy

# One unified interface
runly test
runly build
runly deploy production
runly cleanup

🔧 Advanced Features

Command Dependencies

deploy: build test
    echo "Deploying application"
    
build:
    echo "Building application"
    
test:
    echo "Running tests"

Variable Expansion

name := "myapp"
version := env_var("VERSION", "dev")

build:
    docker build -t {{name}}:{{version}} .
    
deploy env:
    docker run {{name}}:{{version}} --env={{env}}

Environment Variables

backup:
    aws s3 sync ./data s3://{{env("BACKUP_BUCKET")}}/{{datetime()}}

🤝 Contributing

We welcome contributions! Please see our Contributing Guide for details.

Development Setup

# Clone the repository
git clone https://github.com/kedjar/runly.git
cd runly

# Create virtual environment
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# Install in development mode
pip install -e ".[dev,test,docs]"

# Run tests
pytest

# Run linting
black . && isort . && flake8

# Build documentation
cd docs && make html

📋 Requirements

  • Python 3.8+
  • PyYAML 6.0+
  • Click 8.0+ (for enhanced CLI)
  • Rich 12.0+ (for beautiful output)

📜 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgments

  • Inspired by Casey Rodarmor's just
  • Built with modern Python practices and tools
  • Thanks to all contributors and users

📊 Project Status

RunLy is actively maintained and used in production. We follow Semantic Versioning and maintain backward compatibility.


Star ⭐ this repo if you find RunLy useful!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

runly-0.1.1.tar.gz (26.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

runly-0.1.1-py3-none-any.whl (15.0 kB view details)

Uploaded Python 3

File details

Details for the file runly-0.1.1.tar.gz.

File metadata

  • Download URL: runly-0.1.1.tar.gz
  • Upload date:
  • Size: 26.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.10

File hashes

Hashes for runly-0.1.1.tar.gz
Algorithm Hash digest
SHA256 946bf041dc9674b688ac229e12253ea89fa6e3d37b5a0b2dfcdf9167a863722e
MD5 9fc5a191de15ea57a0aa58bb996169f0
BLAKE2b-256 0c67ff07036f66a77819c77f5c194f40d6e89ce8084b8495bc8ed7897110bf51

See more details on using hashes here.

File details

Details for the file runly-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: runly-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 15.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.10

File hashes

Hashes for runly-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3b28f8c2ec97745b04f7ac51d910998f102b1cdf01eda49cfcd522f4fb290b21
MD5 accaeeae77f1ba4238e7d65711fda482
BLAKE2b-256 97a9eac2aff3cd7e551d460a18a290bdda4ab7409e95d90dbf603985e2e3d35c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page