See the Releases page on GitHub for a complete list of commits that are included in each version.
- Parse LXD versions with "LTS" suffix
- Update base compatibility tag to
base-v7
- Use
buildd
daily for Ubuntu 24.04 (Noble) and Ubuntu devel images - Ensure apt installs non-interactively
- Do not update apt sources for Ubuntu devel images
- Update base compatibility tag to
base-v6
- Add Ubuntu 24.04 (Noble) support
- Remove Ubuntu 23.04 (Lunar) support
- Do not mount cache directories in LXD base instances.
- Update base compatibility tag from
base-v4
tobase-v8
- Parse LXD versions with "LTS" suffix
- Update base compatibility tag to
base-v4
- If an existing base instance is not setup, then it is auto-cleaned.
If the process that created the not setup base instance is inactive, then
craft-providers
will immediately auto-clean the instance.
- Snaps injected from the host will have their base snap injected into the instance.
- Update base compatibility tag to
base-v5
. - Do not mount cache directories in LXD base instances.
- Update base compatibility tag from
base-v2
tobase-v3
This fixes an issue where LXD instances created withcraft-providers==1.16.0
may fail to start withcraft-providers>=1.17.0
.
- Require a disk device in the default LXD profile
- Add Ubuntu 23.10 (Mantic) support
- Check if base instance status before copying
- Fail quickly when LXD errors do not involve instance creation
- Add
check
parameter toexecute_run
- Use a shared pip cache across instances
- Remove Ubuntu 22.10 (Kinetic) support
- Capture details for snap errors
- Improve LXD instance creation process to avoid race conditions. The base instance is now created first and copied to an instance. Retry, timeout, and locking mechanisms prevent multiple processes from creating the same base instance.
- Add LXD functions
check_instance_status()
,config_set()
,config_get()
, andrestart()
- Update base compatibility tag from
base-v1
tobase-v2
- Use
snap refresh --hold
inside instances - Re-level log messages
- Add more info-level log messages
- Update links from linuxcontainers.org to ubuntu.com
- Set timezone of LXD instances to match host's timezone
- Add name and install recommendations to Providers
- Prevent race when two processes try to create the same project at the same time
- Update Lunar image for Multipass to stable image
- Install common packages and clean up package cache on bases
- Push files to any location in Multipass instances
- CI, linting, and testing overhaul
- Add Diataxis front page for documentation
- Improve
push_file_io
for LXD instances - Improve
retry-until-timeout
logic - Refactor base classes
- Improve operability with Python 3.12
- Push files to any location in Multipass instances
- Refactor base setup and warmup
- Replace timeout for entire base setup with granular per-step timeouts
- Add option to not install default packages during base setup
- Install build-essentials and python3 in CentOS and AlmaLinux
- Update PATH for CentOS
- Add AlmaLinux 9 base
- Add stricter typing for base names
- Refactor CI workflow
- Refactor Multipass
push_file_io
- Pin dependency urllib3<2
- Move Snap pydantic model from
bases.buildd
toactions.snap_installer
- Rename
bases.buildd
module tobases.ubuntu
- Determine base alias from base configuration in
provider.launched_environment()
- Add new functions
get_base_alias()
andget_base_from_alias()
- Add CentOS 7 base
- Add default for
launched_environment()
parameterallow_unstable=False
- Trim suffixes from snap names when installing snaps.
- Set hostname when launching LXD instances
- Update Lunar image for Multipass to stable image
- Pin dependency urllib3<2
- Add support for kinetic, lunar, and devel images with Multipass
- Remove unused import suppressions in init files
- Update github actions
- Set cloud.cfg to not reset apt's source list for buildd bases
- Store LXD instance's full name in the config's description
- Add
allow_unstable
parameter toProvider.launched_environment()
- Add new base alias
BuilddBaseAlias.DEVEL
- Expire unstable base instances every 14 days
- Refactor tests such that all base aliases are tested by default
- Track if instances are properly setup when launching. If the instance did not fully complete setup and auto-clean is enabled, the instance will be cleaned and recreated.
- Add new field
setup
to instance configuration to track set up status - Update base compatibility tag from
base-v0
tobase-v1
- Add new BuilddBaseAliases for Lunar and Kinetic
- Add support for interim Ubuntu releases for LXD
- Add support for custom LXD image remotes. LXD remotes can now add any
remote server to retrieve images from using the
RemoteImage
class. - Add deprecation warning for LXD function
configure_buildd_image_remote()
. Usage of this function should be replaced with RemoteImage'sadd_remote()
. - Rename BuilddBase function
setup_instance_config()
toupdate_compatibility_tag()
- Update brew for macOS CI tests
- Update readthedocs link in readme
- Capture subproccess error details when snap removal fails
- Add default for
_run_lxc()
parametercheck=True
- Refactor lxd unit and integration tests
- Enable more pylint checks
- Use new
use_base_instance
parameter when launching LXD instances from LXDProvider
- Check LXD id map before starting an existing instance. If the id map does not match, the instance will be auto cleaned or an error will be raised.
- Add
lxc.config_get()
method to retrieve config values
- Set LXD id maps after launching or copying an instance
- Raise BaseConfigurationError for snap refresh failures
- LXD instances launch from a cached base instance rather than a base image. This reduces disk usage and launch time.
- For the LXD launch function
launched_environment
, the parameteruse_snapshots
has been replaced byuse_base_instance
.use_snapshots
still works but logs a deprecation notice. - Expire and recreate base instances older than 3 months (90 days)
- Add
lxc.copy()
method to copy instances - Check for network connectivity after network-related commands fail
- Add documentation for network connectivity issues inside instances
- Enable testing for Ubuntu 22.04 images
- Update
MultipassInstance.push_file_io()
to work regardless of the host's working directory
- Disable automatic snap refreshes inside instances.
- Store temporary files in the home directory
- Fix typos
- Add is_running method to base Executor class
- Add new classes Provider, LXDProvider, and MultipassProvider
- Note: The new Provider classes are used to encapsulate LXD and Multipass,
- from installing the provider to creating and managing instances. The code was leveraged from the craft applications (snapcraft, charmcraft, rockcraft, lpcraft), which implemented similar variations of these Provider classes. These classes are not stable and are likely to change. They will be stable and recommended for use in the release of craft-providers 2.0.
- When injecting a snap, assert the snap's publisher's account
- Avoid race condition when multiple processes add a LXD remote at the same time
- Add mount method to Executor base class
- LXDInstance's mount method signature has changed - The optional parameter
device_name
has been deprecated. It now matches MultipassInstance's signature ofmount(host_source, target)
- Signed snaps injected into a provider are asserted
- Existing .snap files are not removed before overwriting with a new .snap file
- Set snapd http-proxy and https-proxy
- Pass on snapd no-CDN configuration
- Fix bug in BuilddBase where hostnames longer than 64 characters may not having trailing hyphens removed.
- Allow overriding of compatibility tag in Bases
- Use LXD-compatible instance names
- Add optional list of snaps to install in bases
- Add optional list of system packages to install in bases
- Add new temporarily_pull_file function to Executor base class
- Add exists and delete function to Executor base class
- Declare more instance paths as PurePath
- Ensure BuilddBase hostname is valid
- Move .pylintrc to pyproject.toml
- Enforce line-too-long
- Fix for unit tests on non-linux platforms
- Note: The provided name for a LXD executor object is converted to comply with
LXD naming conventions for instances. This may cause a compatibility issue for applications that assume the LXD instance name will be identical to the Executor name.
If a provided name already complies with LXD naming conventions, it is not modified.
- Add stdin parameter for LXC commands (default: null)
- Refactor snap injection logic
- Always check multipass command execution results
- Update tests and documentation
- Refactor instance configuration
- Disable automatic apt actions in instance setup
- Warm-start existing instances instead of rerunning full setup
- Don't reinstall snaps already installed on target
- Fix LXD user permission verification
- Add buildd base alias for Jammy
- Fix uid mapping in lxd host mounts
- Export public API names
- Declare instance paths as PurePath
- Address linter issues
- Update documentation