|
1 |
| -# Copyright 2021 Canonical Ltd. |
| 1 | +# Copyright 2022 Canonical Ltd. |
2 | 2 | # See LICENSE file for licensing details.
|
3 | 3 |
|
4 | 4 | type: charm
|
5 |
| -bases: |
6 |
| - - name: ubuntu |
7 |
| - channel: "22.04" |
8 |
| - architectures: [amd64] |
9 |
| - - name: ubuntu |
10 |
| - channel: "22.04" |
11 |
| - architectures: [arm64] |
| 5 | +platforms: |
| 6 | + |
| 7 | + |
| 8 | +# Files implicitly created by charmcraft without a part: |
| 9 | +# - dispatch (https://github.com/canonical/charmcraft/pull/1898) |
| 10 | +# - manifest.yaml |
| 11 | +# (https://github.com/canonical/charmcraft/blob/9ff19c328e23b50cc06f04e8a5ad4835740badf4/charmcraft/services/package.py#L259) |
| 12 | +# Files implicitly copied/"primed" by charmcraft without a part: |
| 13 | +# - actions.yaml, config.yaml, metadata.yaml |
| 14 | +# (https://github.com/canonical/charmcraft/blob/9ff19c328e23b50cc06f04e8a5ad4835740badf4/charmcraft/services/package.py#L290-L293 |
| 15 | +# https://github.com/canonical/charmcraft/blob/9ff19c328e23b50cc06f04e8a5ad4835740badf4/charmcraft/services/package.py#L156-L157) |
12 | 16 | parts:
|
13 |
| - files: |
14 |
| - plugin: dump |
| 17 | + # "poetry-deps" part name is a magic constant |
| 18 | + # https://github.com/canonical/craft-parts/pull/901 |
| 19 | + poetry-deps: |
| 20 | + plugin: nil |
| 21 | + build-packages: |
| 22 | + - curl |
| 23 | + override-build: | |
| 24 | + # Use environment variable instead of `--break-system-packages` to avoid failing on older |
| 25 | + # versions of pip that do not recognize `--break-system-packages` |
| 26 | + # `--user` needed (in addition to `--break-system-packages`) for Ubuntu >=24.04 |
| 27 | + PIP_BREAK_SYSTEM_PACKAGES=true python3 -m pip install --user --upgrade pip==24.3.1 # renovate: charmcraft-pip-latest |
| 28 | +
|
| 29 | + # Use uv to install poetry so that a newer version of Python can be installed if needed by poetry |
| 30 | + curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.5.15/uv-installer.sh | sh # renovate: charmcraft-uv-latest |
| 31 | + # poetry 2.0.0 requires Python >=3.9 |
| 32 | + if ! "$HOME/.local/bin/uv" python find '>=3.9' |
| 33 | + then |
| 34 | + # Use first Python version that is >=3.9 and available in an Ubuntu LTS |
| 35 | + # (to reduce the number of Python versions we use) |
| 36 | + "$HOME/.local/bin/uv" python install 3.10.12 # renovate: charmcraft-python-ubuntu-22.04 |
| 37 | + fi |
| 38 | + "$HOME/.local/bin/uv" tool install --no-python-downloads --python '>=3.9' poetry==2.0.0 --with poetry-plugin-export==1.8.0 # renovate: charmcraft-poetry-latest |
| 39 | +
|
| 40 | + ln -sf "$HOME/.local/bin/poetry" /usr/local/bin/poetry |
| 41 | + # "charm-poetry" part name is arbitrary; use for consistency |
| 42 | + # Avoid using "charm" part name since that has special meaning to charmcraft |
| 43 | + charm-poetry: |
| 44 | + # By default, the `poetry` plugin creates/primes these directories: |
| 45 | + # - lib, src |
| 46 | + # (https://github.com/canonical/charmcraft/blob/9ff19c328e23b50cc06f04e8a5ad4835740badf4/charmcraft/parts/plugins/_poetry.py#L76-L78) |
| 47 | + # - venv |
| 48 | + # (https://github.com/canonical/charmcraft/blob/9ff19c328e23b50cc06f04e8a5ad4835740badf4/charmcraft/parts/plugins/_poetry.py#L95 |
| 49 | + # https://github.com/canonical/craft-parts/blob/afb0d652eb330b6aaad4f40fbd6e5357d358de47/craft_parts/plugins/base.py#L270) |
| 50 | + plugin: poetry |
15 | 51 | source: .
|
16 |
| - stage: |
17 |
| - # Exclude requirements.txt file during staging |
18 |
| - # Workaround for https://github.com/canonical/charmcraft/issues/1389 on charmcraft 2 |
19 |
| - - -requirements.txt |
20 |
| - prime: |
21 |
| - - scripts |
22 |
| - charm: |
23 |
| - build-snaps: |
24 |
| - - rustup |
| 52 | + after: |
| 53 | + - poetry-deps |
| 54 | + poetry-export-extra-args: ['--only', 'main,charm-libs'] |
25 | 55 | build-packages:
|
26 |
| - - libffi-dev |
27 |
| - - libssl-dev |
28 |
| - - pkg-config |
| 56 | + - libffi-dev # Needed to build Python dependencies with Rust from source |
| 57 | + - libssl-dev # Needed to build Python dependencies with Rust from source |
| 58 | + - pkg-config # Needed to build Python dependencies with Rust from source |
29 | 59 | override-build: |
|
30 |
| - rustup default stable |
| 60 | + # Workaround for https://github.com/canonical/charmcraft/issues/2068 |
| 61 | + # rustup used to install rustc and cargo, which are needed to build Python dependencies with Rust from source |
| 62 | + if [[ "$CRAFT_PLATFORM" == [email protected]:* || "$CRAFT_PLATFORM" == [email protected]:* ]] |
| 63 | + then |
| 64 | + snap install rustup --classic |
| 65 | + else |
| 66 | + apt-get install rustup -y |
| 67 | + fi |
| 68 | +
|
| 69 | + # If Ubuntu version < 24.04, rustup was installed from snap instead of from the Ubuntu |
| 70 | + # archive—which means the rustup version could be updated at any time. Print rustup version |
| 71 | + # to build log to make changes to the snap's rustup version easier to track |
| 72 | + rustup --version |
31 | 73 |
|
32 |
| - # Convert subset of poetry.lock to requirements.txt |
33 |
| - curl -sSL https://install.python-poetry.org | python3 - |
34 |
| - /root/.local/bin/poetry self add poetry-plugin-export |
35 |
| - /root/.local/bin/poetry export --only main,charm-libs --output requirements.txt |
| 74 | + # rpds-py (Python package) >=0.19.0 requires rustc >=1.76, which is not available in the |
| 75 | + # Ubuntu 22.04 archive. Install rustc and cargo using rustup instead of the Ubuntu archive |
| 76 | + rustup set profile minimal |
| 77 | + rustup default 1.83.0 # renovate: charmcraft-rust-latest |
36 | 78 |
|
37 | 79 | craftctl default
|
38 |
| - charm-strict-dependencies: true |
39 |
| - charm-requirements: [requirements.txt] |
| 80 | + # Include requirements.txt in *.charm artifact for easier debugging |
| 81 | + cp requirements.txt "$CRAFT_PART_INSTALL/requirements.txt" |
| 82 | + # "files" part name is arbitrary; use for consistency |
| 83 | + files: |
| 84 | + plugin: dump |
| 85 | + source: . |
| 86 | + prime: |
| 87 | + - LICENSE |
| 88 | + - scripts |
| 89 | + - templates |
0 commit comments