Skip to main content

Fast first-time builds for charmcraft

Project description

charmcraftcache

Reinventing the wheel

Fast first-time builds for charmcraft—on a local machine or CI

Installation

Install pipx: https://pipx.pypa.io/stable/installation/

pipx install charmcraftcache

Usage

ccc add
ccc pack

For best results, add charm-strict-dependencies: true to your charmcraft.yaml.

How it works

Why are charmcraft builds slow?

Instead of downloading wheels from PyPI (which pip does by default), charmcraft builds Python package wheels from source (i.e. with pip install --no-binary).

Caching mechanism

charmcraft builds each charm base in a separate LXC container[^1]. Within each container, pip has an internal cache for wheels built from source & for HTTP responses.

charmcraft 2.5 moved the pip internal cache to the LXC host machine, so that one pip cache is used for all LXC containers. (This increases the chance of a cache hit—a faster build.)

However, charmcraft builds are still slow the first time the wheel is built. This happens on CI runners, when you use a new machine/VM, or when you contribute to a new charm.

charmcraftcache solves the slow first build.

charmcraftcache-hub maintains a list of charms. For each charm, charmcraft pack is used to build Python dependencies from source and the pip wheel cache is uploaded to a GitHub release.

ccc pack downloads these pre-built wheels to charmcraft's pip cache (and then runs charmcraft pack).

Note: Within the GitHub release, each charm has an isolated cache. If the same charm (same GitHub repository and relative path to charmcraft.yaml) is added to the list of charms more than once (with different git refs), the wheels are combined into a single cache. If there are duplicate wheels, the wheel is selected from the ref that is earlier in the list.

Isn't this just a worse version of PyPI?

Pretty much. The only difference is charmcraftcache-hub wheels are built from source on our runners, instead of built by the package maintainer.

[^1]: Unless --destructive-mode is enabled

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

charmcraftcache-0.5.1.tar.gz (13.9 kB view details)

Uploaded Source

Built Distribution

charmcraftcache-0.5.1-py3-none-any.whl (14.3 kB view details)

Uploaded Python 3

File details

Details for the file charmcraftcache-0.5.1.tar.gz.

File metadata

  • Download URL: charmcraftcache-0.5.1.tar.gz
  • Upload date:
  • Size: 13.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for charmcraftcache-0.5.1.tar.gz
Algorithm Hash digest
SHA256 590361211386bcb7f436a07054551b99dbf2e2b3b203b73c83b680888b534ec2
MD5 576c42983cbfea4e79aa30804dc1b464
BLAKE2b-256 4bc7f44ab7cff367b7fdce5305e57eb8d7c5c90599bdadb8ad54e56e8d8ed326

See more details on using hashes here.

Provenance

The following attestation bundles were made for charmcraftcache-0.5.1.tar.gz:

Publisher: publish.yaml on canonical/charmcraftcache

Attestations:

File details

Details for the file charmcraftcache-0.5.1-py3-none-any.whl.

File metadata

File hashes

Hashes for charmcraftcache-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4b7c9c6fc2f0cac744463d3c778a5e0a679ced61d82b390060662d6c7e296d1a
MD5 9c36db56ac8f2ae98045b5f470de5f09
BLAKE2b-256 119f159a1500e2a190b834db4cd97d1e0f5ac583d6871ffaa97115aa97deb1ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for charmcraftcache-0.5.1-py3-none-any.whl:

Publisher: publish.yaml on canonical/charmcraftcache

Attestations:

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page