Cache intermediate build artefacts¶
Because Charmcraft builds Python packages from source rather than using pre-built wheels, the initial builds of charms can take a while. The intermediate artefacts get cached, which significantly speeds up subsequent builds.
When installed as a snap, Charmcraft automatically caches these wheels in the
~/snap/charmcraft/common/cache
directory. However, in some cases, it may be
beneficial to change this directory.
This can be especially useful in CI, where you may wish to specify a directory that gets cached between CI runs.
Local usage¶
When packing locally, you can change where Charmcraft caches build artefacts by setting
the CRAFT_SHARED_CACHE
environment variable to the path of an existing directory to
use instead:
mkdir -p /tmp/charmcraft
CRAFT_SHARED_CACHE=/tmp/charmcraft charmcraft pack
On GitHub¶
While it’s recommended that you use the charmcraft/pack
action from
craft-actions where possible, the following workflow will manually pack a charm,
caching the intermediate files:
name: Pack charm
on:
pull_request:
jobs:
pack:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: canonical/craft-actions/charmcraft/setup
- uses: actions/cache@v4
with:
path: ${{ runner.temp }}
key: charmcraft-cache-${{ hashfiles('requirements.txt') }}
restore-keys: |
charmcraft-cache-
- env:
CRAFT_SHARED_CACHE: ${{ runner.temp }
run: |
charmcraft pack
On GitLab¶
The following example gitlab-ci.yml
will install and run Charmcraft to pack your
charm, caching the intermediate artefacts:
pack-charm:
cache:
- key:
files:
- requirements.txt
paths:
- .charmcraft_cache/
variables:
CRAFT_SHARED_CACHE: .charmcraft_cache/
script:
- mkdir -p .charmcraft_cache
- snap install charmcraft
- charmcraft pack