Metadata-Version: 2.1
Name: distman
Version: 0.8.3
Summary: Simple software distribution for complex pipelines
Author-email: Ryan Galloway <ryan@rsgalloway.com>
License: BSD-3-Clause
Project-URL: Homepage, https://distman.dev
Project-URL: Documentation, https://distman.dev
Project-URL: Repository, https://github.com/rsgalloway/distman
Project-URL: Issues, https://github.com/rsgalloway/distman/issues
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Libraries
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: GitPython<4.0,>=3.1
Requires-Dist: tqdm<5.0,>=4.67
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-mock; extra == "dev"
Requires-Dist: jsmin<4.0,>=3.0; extra == "dev"
Requires-Dist: flake8==7.1.1; extra == "dev"
Requires-Dist: mccabe==0.7.0; extra == "dev"
Requires-Dist: isort==5.13.2; extra == "dev"
Requires-Dist: black==24.8.0; extra == "dev"
Requires-Dist: htmlmin<1.0,>=0.1; python_version < "3.13" and extra == "dev"
Provides-Extra: minify
Requires-Dist: jsmin<4.0,>=3.0; extra == "minify"
Requires-Dist: htmlmin<1.0,>=0.1; python_version < "3.13" and extra == "minify"
Provides-Extra: test
Requires-Dist: pytest; extra == "test"
Requires-Dist: pytest-mock; extra == "test"
Requires-Dist: jsmin<4.0,>=3.0; extra == "test"
Requires-Dist: htmlmin<1.0,>=0.1; python_version < "3.13" and extra == "test"

# distman

[![PyPI](https://img.shields.io/pypi/v/distman.svg)](https://pypi.org/project/distman/)
[![Tests](https://github.com/rsgalloway/distman/actions/workflows/tests.yml/badge.svg)](https://github.com/rsgalloway/distman/actions/workflows/tests.yml)
[![License](https://img.shields.io/badge/license-BSD--3--Clause-blue.svg)](LICENSE)

Simple, configuration-driven software distribution for production pipelines.

distman performs safe, versioned rollouts of software, scripts, and
configuration files to predefined filesystem locations. It is useful when
deterministic deployments, environment-aware transforms, local caching, and
quick rollback matter more than conventional package installation.

Deployed objects are stored as numbered versions, while an atomic symlink
selects the active version:

```text
bin/
├── tool -> versions/tool.2.a1b2c3d
└── versions/
    ├── tool.1.91c8a77
    └── tool.2.a1b2c3d
```

distman works well with [envstack](https://envstack.dev) for
environment-specific deployment and runtime configuration.

## Installation

```bash
pip install -U distman
```

Install the optional JavaScript and HTML minifiers when a transform pipeline
needs them:

```bash
pip install -U "distman[minify]"
```

## Quickstart

Create a `dist.json` file at the root of a Git repository:

```json
{
  "author": "pipeline@example.com",
  "targets": {
    "tools": {
      "source": "tools",
      "destination": "{DEPLOY_ROOT}/tools"
    }
  }
}
```

Preview and then perform the deployment:

```bash
dist --dryrun
dist --yes
```

The namespaced `distman dist` command provides the same distribution
interface. Cache a shared deployment locally with:

```bash
distcache
```

## Documentation

Full documentation is available in the [docs](docs/) folder:

- [Getting Started](docs/getting-started.md)
- [Distribution Configuration](docs/distribution-config.md)
- [CLI Reference](docs/cli-reference.md)
- [Transform Pipelines](docs/transform-pipelines.md)
- [Local Caching](docs/caching.md)

The documentation is also published through the repository's GitHub Pages
workflow.

## License

distman is distributed under the [BSD 3-Clause License](LICENSE).
