Distributes files and directories to versioned destinations defined in
dist.json
files.
The easiest way to install:
$ pip install -U distman
Alternatively, use distman to dist to a deployment area using options defined
in the dist.json
and distman.env
environment stack files:
$ distman [-d]
Files and directories can be distributed from any folder or git repo containing
a dist.json
file.
distman
looks for a dist file called dist.json
at the root of a directory or
git repo. The dist file defines the file distrubution instructions.
The basic format of the dist.json
file is:
{
"author": "<email>",
"targets": {
"<target>": {
"source": "<source-path>",
"destination": "<target-path>"
},
}
}
where <source-path>
is the relative path to the source file or directory,
and <target-path>
is the target destination path, and <target>
is a named
target label to use when running distman
commands. You can define as many
targets as you need.
See the dist.json
file in this repo for an example.
Target paths can include environment variables, such as those defined in the
distman.env
envstack file, where variables are defined with curly brackets
only, e.g.:
"{DEPLOY_ROOT}/lib/python/distman"
When files are distributed (or disted), they are copied to a versions
folder
and a symlink is created to the version. When a new version is disted, the
version number is incremented and the link is updated.
To dist files defined in a dist.json
file (remove -d when ready):
$ distman -d
This will dist files to the ${DEPLOY_ROOT}
folder defined in the provided
distman.env
envstack file and might
look something like this when disted:
${DEPLOY_ROOT}
├── bin
│ ├── distman -> versions/distman.0.c73fe42
│ └── versions
│ └── distman.0.c73fe42
└── lib
└── python
├── distman -> versions/distman.0.c73fe42
└── versions
└── distman.0.c73fe42
├── cli.py
├── config.py
├── dist.py
├── __init__.py
├── logger.py
├── source.py
└── util.py
To override the deployment folder, update the distman.env
environment stack
file then re-dist:
$ distman [-d]
By default, distman
dists to a prod folder under ${DEPLOY_ROOT}
. This can be
changed at any time using ${ENV}
or updating or modifying the distman.env
envstack file:
$ ENV=dev distman [-d]
This will change prod
to dev
in the target deplyment path. This is useful
for deploying files or code to different development environments.
When disting files, distman
will create hidden dist info files that meta data
about the source files. For example, if the source file is called foobar.py
then the dist info file that will be created will be called .foobar.py.dist
.
The dist info files will be created at the deployment root.
Most configuration is done in the distman.env
envstack file.
Default config settings are in the config.py module. The following environment variables are supported:
Variable | Description |
---|---|
$DEPLOY_ROOT | file deployment root directory |
$ENV | target environment (e.g. prod or dev) |
$ROOT | dist root directory |