All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.3.0 - 2024-10-16
- Add
Compose::validate_networks()
.- Ensures that all networks used in each service is defined in the top-level
networks
field of theCompose
file.
- Ensures that all networks used in each service is defined in the top-level
- Add
Compose::validate_volumes()
.- Ensures that named volumes used across multiple services are defined in the top-level
volumes
field of theCompose
file.
- Ensures that named volumes used across multiple services are defined in the top-level
- Add
Compose::validate_configs()
.- Ensures that all configs used in each service is defined in the top-level
configs
field of theCompose
file.
- Ensures that all configs used in each service is defined in the top-level
- Add
Compose::validate_secrets()
.- Ensures that all secrets used in each service is defined in the top-level
secrets
field of theCompose
file.
- Ensures that all secrets used in each service is defined in the top-level
- Add
Compose::validate_all()
. - Add
Compose::options()
for setting deserialization options. - Add
Options::apply_merge()
. (#2)- Merges
<<
keys into the surrounding mapping.
- Merges
- BREAKING (service) Add
services[].networks[].driver_opts
attribute. (#29)- Added the
driver_opts
field tocompose_spec::service::network_config::Network
.
- Added the
- (service) Add
Limit
string conversions.- Added
Display
andFromStr
implementations tocompose_spec::service::Limit
. - Changed the string deserialization logic of
Limit
to deserialize "-1" asLimit::Unlimited
.
- Added
- BREAKING (service) Support
network_mode: container:{name}
.- Added the
compose_spec::service::network_config::NetworkMode::Container
enum variant.
- Added the
- (service) Image registry with port is valid. (#22)
- Image names with a registry that have a port are now valid.
- Changed
compose_spec::service::image::Name::new()
to allow for usingcompose_spec::service::Image::set_registry()
with a registry with a port. The first part of a name is now treated as a registry if it has a dot (.) regardless of whether the name has multiple parts. - Added
compose_spec::service::image::InvalidNamePart::RegistryPort
error variant for when a registry's port is not a valid port number. - Refactored image tests to not use
unwrap()
.
- (service) Support host IP in brackets for
ports
short syntax. (#24) - BREAKING (service)
user
may have an optional group. (#23)- Before this fix values for
services[].user
that included a GID or group name were rejected. The Compose Specification is unfortunately vague foruser
(see compose-spec/compose-spec#39). However, bothdocker run --user
andpodman run --user
accept the{user}[:{group}]
syntax. - Renamed
compose_spec::service::UserOrGroup
toIdOrName
. - Renamed
compose_spec::service::user_or_group
module touser
. - Added
compose_spec::service::User
. - Changed the type of the
user
field incompose_spec::Service
toOption<User>
.
- Before this fix values for
- BREAKING (service) Support unlimited ulimits. (#31)
- Changed
soft
andhard
fields ofcompose_spec::service::Ulimit
tocompose_spec::service::Limit<u64>
. - Changed
compose_spec::service::Ulimits
type alias (used forulimits
field ofcompose_spec::Service
andcompose_spec::service::Build
) toIndexMap<Resource, ShortOrLong<Limit<u64>, Ulimit>>
. - Changed
<Ulimit as AsShort>::Short
toLimit<u64>
. - Added
impl From<Limit<u64>> for Ulimit
. - Added
impl From<u64> for Limit<u64>
. - Added
impl<T, L> From<Limit<T>> for ShortOrLong<Limit<T>, L>
andimpl<L> From<u64> for ShortOrLong<Limit<u64>, L>
.
- Changed
- Add fragment documentation.
- (macros) Add symlink to
LICENSE
file. (#21)- This ensures that the
LICENSE
file is included when thecompose_spec_macros
package is published to crates.io viacargo publish
.
- This ensures that the
- (changelog) Update git-cliff config for v2.6.0.
- (lints) Allow bare URL in
compose_spec::service::build::Context::Url
docs. - (lints) Decrease priority of lint groups.
- (deps) Update lock file.
- (ci) Bump
typos
to v1.26.0.
0.2.0 - 2024-04-24
- (volume) Add
Volume::is_empty()
. - (network) Add
Network::is_empty()
.- Add
is_empty()
methods tonetwork::{Network, Ipam, IpamConfig}
.
- Add
- (service) Add
service::Logging::is_empty()
. - (service) Add
service::healthcheck::Command::is_empty()
. - (service) Add
service::Build::is_empty()
. - (service) Add
service::BlkioConfig::is_empty()
. - (service) Add
is_empty()
methods toservice::volumes::mount
types.- Add
is_empty()
methods toservice::volumes::mount::{VolumeOptions, BindOptions, TmpfsOptions}
.
- Add
- (service) Implement
Default
forservice::deploy::resources::Device
. - (service) Add
service::deploy::Resources::is_empty()
.- Add
is_empty()
methods toservice::deploy::resources::{Resources, Limits, Reservations, Device, GenericResource, DiscreteResourceSpec}
.
- Add
- (service) Add
service::Deploy::is_empty()
.- Add
is_empty()
methods toservice::deploy::{Deploy, Placement, Preference, RestartPolicy, UpdateRollbackConfig}
.
- Add
- (service) Implement
Default
forservice::Healthcheck
. - (service) Add
into_short()
methods toservice::volumes::mount::{Volume, Bind}
. - (service) Implement
Display
forservice::blkio_config::Weight
. - (service) Implement
From<service::UserOrGroup>
forString
. - Implement
PartialEq<str>
andPartialEq<&str>
for key types.compose_spec::{Identifier, MapKey, ExtensionKey, service::{build::CacheOption, user_or_group::Name, Hostname, Resource}}
- (service) Add
service::volumes::mount::Tmpfs::from_target()
.- Also implemented
From<service::volumes::AbsolutePath>
forservice::volumes::mount::Tmpfs
using the new function.
- Also implemented
- BREAKING (service) Add
entitlements
field toservice::Build
(#15).
- BREAKING (service) Allow for unlimited
pids_limit
.- Generalize
service::MemswapLimit
intoservice::Limit<T>
. Service.memswap_limit
is now anOption<Limit<ByteValue>>
.Service.pids_limit
is now anOption<Limit<u32>>
.service::deploy::resources::Limits.pids
is now anOption<Limit<u32>>
.
- Generalize
- BREAKING
service::Device
no longer implementsDefault
(this was a mistake). - BREAKING (service) Container paths must be absolute.
Service.tmpfs
is now anOption<ItemOrList<AbsolutePath>>
.Service.working_dir
is now anOption<AbsolutePath>
.service::blkio_config::BpsLimit.path
is now anAbsolutePath
.service::blkio_config::IopsLimit.path
is now anAbsolutePath
.service::blkio_config::WeightDevice.path
is now anAbsolutePath
.service::develop::WatchRule.target
is now anOption<AbsolutePath>
.service::Device.container_path
is now anAbsolutePath
.- Add
service::device::ParseDeviceError::ContainerPathAbsolute
variant.
- (service)
ShortVolume::into_long()
setcreate_host_path: true
.- When converting a
service::volumes::ShortVolume
into aservice::volumes::mount::Bind
, thecreate_host_path
field inservice::volumes::mount::BindOptions
should be set totrue
.
- When converting a
- Fix
ListOrMap::into_list()
docs.- Last line was a normal comment instead of a doc comment.
- (changelog) Add git-cliff configuration
- (service) Fix
service::ports::ShortRanges
generation.- The
offset
range could become0..0
which causedproptest
to panic.
- The
- (ci) Add semver-checks job.
- Use cargo-semver-checks to make sure the package version is increased correctly when making changes.
- (deps) Update dependencies.
- (ci) Bump
typos
to v1.20.9.
0.1.0 - 2024-04-05
The initial release of compose_spec
!
- (De)serialize from/to the structure of the Compose specification.
- Values are fully validated and parsed.
- Completely documented.
- Conversion between short and long syntax forms of values.
- Conversion between
std::time::Duration
and the duration string format from the compose-spec.