The release lifecycle#
A Release is a Module version plus one boolean: whether it is deprecated. The whole
lifecycle of a deployed Module — appearing, being updated, retired, restored, and finally
deleted — is expressed by adding or removing a Release in configuration and toggling its
deprecated flag. This page explains these transitions and the guard rails around them.
Configuration is declarative#
You never tell deploy-tools to “deprecate” or “remove” something directly. You describe
the set of Releases you want, and the tool compares that against the
snapshot of the last sync to derive the actions needed. Each
Release falls into one of these cases:
Transition |
Detected when… |
Effect on the deployment area |
|---|---|---|
Add |
the name or version is not in the last snapshot |
build the Module, create a live modulefile link |
Update |
the version exists but its Module config changed |
rebuild in place (only if |
Deprecate |
the version was live in the last snapshot, now |
move the modulefile link into |
Restore |
was deprecated in the last snapshot, now |
move the link back into |
Remove |
present in the last snapshot, absent from configuration |
delete the modulefile link and the built files |
Deprecate and restore only move a symlink; the built files stay in the Modules Area (see
the deployment area). If your MODULEPATH includes
deprecated/modulefiles, a deprecated Module still loads as before — deprecation indicates
“you should stop using this”, not “this is gone”.
The guard rails#
Some transitions are blocked by default so mistakes aren’t applied silently:
A new version may not be born deprecated. Adding a Release with
deprecated: trueis rejected.An existing version may not change without a new version. If its configuration differs from the last snapshot, validation fails unless the Module sets
allow_updates: true.A live version may not be deleted directly. Deprecate it in one
sync, then remove it in a later one — unless the Module setsallow_updates: true.
--allow-all lifts the first and third guards, so you can force those transitions.
--from-scratch implies --allow-all. Neither relaxes the integrity checks — the area
must still be healthy.