Skip to main content

Ultra-fast Git change detection powered by Rust

Project description

Le Change

Fast Git change detection with deploy matrix generation.

Rust core library with a CLI binary, GitHub Action, and Python bindings.

Features

  • Diff two commits and list changed files by type (added, modified, deleted, renamed)
  • Glob pattern filtering and exclusion
  • Dynamic group discovery via files_group_by templates (e.g. stacks/{group}/**)
  • Deploy matrix JSON output for GitHub Actions strategy.matrix
  • Workflow failure tracking with per-run or per-job granularity
  • Concurrent workflow detection with deadlock-safe priority ordering
  • Ancestor directory file association for monorepo layouts
  • Static musl binaries for Linux (zero runtime dependencies)

GitHub Action

jobs:
  detect:
    runs-on: ubuntu-latest
    outputs:
      matrix: ${{ steps.changes.outputs.matrix }}
      has_changes: ${{ steps.changes.outputs.has_changes }}
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: lituus-io/le-change@v1
        id: changes
        with:
          files: 'stacks/**/*.yaml'
          files_group_by: 'stacks/{group}/**'

  deploy:
    needs: detect
    if: needs.detect.outputs.has_changes == 'true'
    strategy:
      matrix: ${{ fromJson(needs.detect.outputs.matrix) }}
    runs-on: ubuntu-latest
    steps:
      - run: echo "Deploying ${{ matrix.stack }}"

Action Inputs

Input Default Description
files Glob patterns to include (comma-separated)
files_ignore Glob patterns to exclude
files_group_by Group discovery template (e.g. stacks/{group}/**)
files_group_by_key name Group key mode: name, path, or hash
files_ancestor_lookup_depth 0 Ancestor directory lookup depth (max 3)
track_workflow_failures false Enable workflow failure tracking
failure_tracking_level run Tracking granularity: run or job
wait_for_active_workflows false Wait for concurrent overlapping workflows
workflow_max_wait_seconds 300 Max wait time in seconds
workflow_name_filter Glob pattern to filter workflow names
deploy_matrix_include_reason false Add action/reason to matrix entries
deploy_matrix_include_concurrency false Add concurrency info to matrix entries
token github.token GitHub token for API access
base_sha Override base commit SHA
sha Override head commit SHA

Action Outputs

Output Description
matrix Deploy matrix JSON for fromJson()
has_changes true if any deployable changes detected
any_changed true if any files changed
changed_files Space-separated changed file paths
changed_files_count Number of changed files
added_files Space-separated added file paths
modified_files Space-separated modified file paths
deleted_files Space-separated deleted file paths
deploy_decisions JSON array of per-group deploy decisions
files_to_rebuild Files needing rebuild
files_to_skip Files safe to skip
diagnostics JSON array of diagnostic messages

CLI

lechange detect \
  --files 'stacks/**/*.yaml' \
  --files-group-by 'stacks/{group}/**' \
  --base-sha abc123 \
  --sha def456 \
  --output-format json

All options accept environment variables with LECHANGE_ prefix (e.g. LECHANGE_FILES).

Exit codes: 0 = changes detected, 1 = error, 2 = no changes.

Python

pip install lechange
from lechange import ChangeDetector, Config

detector = ChangeDetector(".")
config = Config(
    files=["src/**/*.py"],
    files_group_by="src/{group}/**",
    base_sha="abc123",
    sha="def456",
)
result = detector.get_changed_files(config)

print(result.all_changed_files)
print(result.deploy_matrix)
print(result.has_deployable_groups)

Development

cargo test -p lechange-core    # Core library tests
cargo test -p lechange-cli     # CLI tests
cargo build --release -p lechange-cli  # Release binary

License

Copyright (c) 2024-2026 Lituus-io. All rights reserved.

AGPL-3.0-or-later. Commercial license available — contact spicyzhug@gmail.com.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

lechange-0.1.0-cp38-abi3-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.8+Windows x86-64

lechange-0.1.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

lechange-0.1.0-cp38-abi3-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

File details

Details for the file lechange-0.1.0-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: lechange-0.1.0-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.8+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for lechange-0.1.0-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 08c57515a80893703283d10c6241a520899bb0a21e895f4e618a084f8652e026
MD5 015d447d7822d00fb5bab2c24dfb0bea
BLAKE2b-256 e3ce36e78639a3d43e80cb4061ff5d352b158c81a7994cd2f767a6e24fa18907

See more details on using hashes here.

File details

Details for the file lechange-0.1.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lechange-0.1.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eaf36df8bb277068c078a386d8b2478a0f0c962c92100e97e4d76226b375c327
MD5 f63a77ae872579d86d0181889e04cfe8
BLAKE2b-256 1a5e75e3da516a3a702f906f4d823b81e97bd737cf1414302ecdb179697dfd5e

See more details on using hashes here.

File details

Details for the file lechange-0.1.0-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for lechange-0.1.0-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 81a450dd4670a58e4c04fbbc395d9c53afe693b8197fe8db979606c9bc75dfed
MD5 00808d6f3ed1d81371ee9e49f45dee73
BLAKE2b-256 133d6ba0f23c7d0f814d3db4058b3527a0f6a042768d0af4bcab31105ddd20e0

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