Skip to content

[WIP] Fix fetch-lib error in charmcraft causing library not found#2503

Draft
Copilot wants to merge 3 commits intomainfrom
copilot/fix-charmcraft-fetch-lib-error
Draft

[WIP] Fix fetch-lib error in charmcraft causing library not found#2503
Copilot wants to merge 3 commits intomainfrom
copilot/fix-charmcraft-fetch-lib-error

Conversation

Copy link

Copilot AI commented Dec 3, 2025

Fix error message for fetch-lib command when library is None

  • Understand the issue: When charmcraft fetch-lib is run without arguments to update all libraries, and a library is not found in Charmhub, the error message incorrectly shows "Library None not found in Charmhub." instead of showing the actual library name
  • Identify the root cause: Two locations in store.py use parsed_args.library in error messages (lines 1539 and 1562), but when running without arguments, parsed_args.library is None
  • Fix line 1539: Removed the try-except block that was re-raising with parsed_args.library, allowing the more detailed error from get_libraries_metadata() to propagate
  • Fix line 1562: Use lib_data.full_name instead of parsed_args.library in the error message
  • Create/update tests to validate the fix
  • Run existing tests to ensure no regressions
  • Request code review
  • Run security checks
Original prompt

This section details on the original issue you should resolve

<issue_title>[3.4.3] Charmcraft fetch-lib fails with Library None not found in Charmhub.</issue_title>
<issue_description>### Bug Description

I am using charmcraft: installed: 3.4.3.post51+g6153055c (6228) 60MB classic
Installed from channel latest/edge

We have done some few changes in the OpenSearch libs and now the check_libs started failing with an error instead of simply a list of outdated libs.

Running it locally and I can also reproduce the same error.

This error message is not really helpful and the logs print the entire lib content, making it hard to read.

To Reproduce

$ git clone https://github.com/canonical/opensearch-operator -b 2/edge
$ cd opensearch-operator
$ charmcraft fetch-lib
Library None not found in Charmhub.

Environment

OS: 24.04
charmcraft: latest/edge, currently on 3.4.3

charmcraft.yaml

# Copyright 2022 Canonical Ltd.
# See LICENSE file for licensing details.

type: charm
platforms:
  ubuntu@22.04:amd64:
  ubuntu@24.04:amd64:
# Files implicitly created by charmcraft without a part:
# - dispatch (https://github.com/canonical/charmcraft/pull/1898)
# - manifest.yaml
#   (https://github.com/canonical/charmcraft/blob/9ff19c328e23b50cc06f04e8a5ad4835740badf4/charmcraft/services/package.py#L259)
# Files implicitly copied/"staged" by charmcraft without a part:
# - actions.yaml, config.yaml, metadata.yaml
#   (https://github.com/canonical/charmcraft/blob/9ff19c328e23b50cc06f04e8a5ad4835740badf4/charmcraft/services/package.py#L290-L293
#   https://github.com/canonical/charmcraft/blob/9ff19c328e23b50cc06f04e8a5ad4835740badf4/charmcraft/services/package.py#L156-L157)
parts:
  # "poetry-deps" part name is a magic constant
  # https://github.com/canonical/craft-parts/pull/901
  poetry-deps:
    plugin: nil
    build-packages:
      - curl
    override-build: |
      # Use environment variable instead of `--break-system-packages` to avoid failing on older
      # versions of pip that do not recognize `--break-system-packages`
      # `--user` needed (in addition to `--break-system-packages`) for Ubuntu >=24.04
      PIP_BREAK_SYSTEM_PACKAGES=true python3 -m pip install --user --upgrade pip==24.3.1  # renovate: charmcraft-pip-latest

      # Use uv to install poetry so that a newer version of Python can be installed if needed by poetry
      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
      # poetry 2.0.0 requires Python >=3.9
      if ! "$HOME/.local/bin/uv" python find '>=3.9'
      then
        # Use first Python version that is >=3.9 and available in an Ubuntu LTS
        # (to reduce the number of Python versions we use)
        "$HOME/.local/bin/uv" python install 3.10.12  # renovate: charmcraft-python-ubuntu-22.04
      fi
      "$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

      ln -sf "$HOME/.local/bin/poetry" /usr/local/bin/poetry
  # "charm-poetry" part name is arbitrary; use for consistency
  # Avoid using "charm" part name since that has special meaning to charmcraft
  charm-poetry:
    # By default, the `poetry` plugin creates/stages these directories:
    # - lib, src
    #   (https://github.com/canonical/charmcraft/blob/9ff19c328e23b50cc06f04e8a5ad4835740badf4/charmcraft/parts/plugins/_poetry.py#L76-L78)
    # - venv
    #   (https://github.com/canonical/charmcraft/blob/9ff19c328e23b50cc06f04e8a5ad4835740badf4/charmcraft/parts/plugins/_poetry.py#L95
    #   https://github.com/canonical/craft-parts/blob/afb0d652eb330b6aaad4f40fbd6e5357d358de47/craft_parts/plugins/base.py#L270)
    plugin: poetry
    source: .
    after:
      - poetry-deps
    poetry-export-extra-args: ['--only', 'main,charm-libs']
    build-packages:
      - libffi-dev  # Needed to build Python dependencies with Rust from source
      - libssl-dev  # Needed to build Python dependencies with Rust from source
      - pkg-config  # Needed to build Python dependencies with Rust from source
    override-build: |
      # Workaround for https://github.com/canonical/charmcraft/issues/2068
      # rustup used to install rustc and cargo, which are needed to build Python dependencies with Rust from source
      if [[ "$CRAFT_PLATFORM" == ubuntu@20.04:* || "$CRAFT_PLATFORM" == ubuntu@22.04:* ]]
      then
        snap install rustup --classic
      else
        apt-get install rustup -y
      fi

      # If Ubuntu version < 24.04, rustup was installed from snap instead of from the Ubuntu
      # archive—which means the rustup version could be updated at any time. Print rustup version
      # to build log to make changes to the snap's rustup version easier to track
      rustup --version

      # rpds-py (Python package) >=0.19.0 requires rustc >=1.76, which is not available in the...

</details>

- Fixes canonical/charmcraft#2204

<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more [Copilot coding agent tips](https://gh.io/copilot-coding-agent-tips) in the docs.

Copilot AI and others added 2 commits December 3, 2025 18:52
Co-authored-by: lengau <4305943+lengau@users.noreply.github.com>
Co-authored-by: lengau <4305943+lengau@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants