Claude-skill-registry just-automation-practices
Best practices for using just command runner and task automation in development workflows.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/just-automation-practices" ~/.claude/skills/majiayu000-claude-skill-registry-just-automation-practices && rm -rf "$T"
manifest:
skills/data/just-automation-practices/SKILL.mdsource content
Just automation practices
Purpose
Guide for using the just command runner for task automation, covering recipe design, variable handling, and cross-platform development.
When to use
This skill activates when:
- Creating Justfiles
- Writing build/test automation
- Defining development workflows
- Setting up task dependencies
- Cross-platform automation
Core concepts
Basic recipe
# Run tests test: uv run pytest # Run with arguments test-file file: uv run pytest {{file}} # Default recipe (runs when just called without arguments) default: lint test
Recipe with dependencies
# Dependencies run first build: lint test uv run python -m build # Clean before build clean-build: clean build
Variables
Setting variables
# Simple variables python := "uv run python" pytest := "uv run pytest" # Using variables test: {{pytest}} tests/ # Environment variables export PYTHONPATH := "src" test: {{pytest}} tests/
Built-in functions
# Current directory project_dir := justfile_directory() # Parent directory parent := parent_directory(justfile_directory()) # Environment with default python := env_var_or_default("PYTHON", "python3")
Arguments and parameters
Positional arguments
# Required argument test file: uv run pytest {{file}} # Optional with default test file="tests/": uv run pytest {{file}} # Variadic (all remaining args) test *args: uv run pytest {{args}}
Named parameters
# Named with defaults build target="release" output="dist": echo "Building {{target}} to {{output}}"
Conditionals
# Conditional execution test: #!/usr/bin/env bash if [[ -f "tests/integration" ]]; then uv run pytest tests/integration fi # Using just's if python := if os() == "windows" { "python" } else { "python3" }
Multi-line recipes
# With shebang setup: #!/usr/bin/env bash set -euo pipefail echo "Setting up environment..." uv sync echo "Done!" # Default shell recipes install: uv sync echo "Dependencies installed"
Common patterns
Development workflow
# Install dependencies install: uv sync # Format code format: uv run ruff format . # Lint code lint: uv run ruff check . uv run basedpyright # Run tests test *args: uv run pytest {{args}} # Full check before commit check: format lint test # Clean artifacts clean: rm -rf dist/ .pytest_cache/ .coverage htmlcov/
Parameterized builds
# Build with options build target="release": #!/usr/bin/env bash case "{{target}}" in release) uv run python -m build ;; dev) uv pip install -e . ;; *) echo "Unknown target: {{target}}" exit 1 ;; esac
Environment management
# Set environment for recipes set dotenv-load := true # Use .env file test: uv run pytest # Override environment test-ci: CI=true uv run pytest
Cross-platform
OS detection
# Different commands per OS open_browser := if os() == "macos" { "open" } else if os() == "windows" { "start" } else { "xdg-open" } docs: {{open_browser}} docs/_build/html/index.html
Path handling
# Cross-platform paths project_dir := justfile_directory() src_dir := project_dir / "src" tests_dir := project_dir / "tests"
Organization
List recipes
# Show available recipes just --list # Show recipe with description just --show test
Documentation
# Recipe descriptions appear in --list # Run all tests with coverage test: uv run pytest --cov # Format code using ruff format: uv run ruff format .
Grouping with aliases
# Main recipe test-all: uv run pytest # Aliases for convenience alias t := test-all alias tests := test-all
Checklist
- Default recipe defined
- Recipes have descriptions (comments)
- Variables used for repeated values
- Dependencies properly declared
- Cross-platform compatible (if needed)
- Error handling in complex recipes
Additional resources: