Adding parts processing to an application

A simple example

To add parts processing to an application, instantiate the LifecycleManager class passing the parts dictionary. Plan actions for the PRIME target step, and execute them:

import yaml
from craft_parts import LifecycleManager, Step

parts_yaml = """
parts:
  hello:
    plugin: autotools
    source: https://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
    prime:
      - usr/local/bin/hello
      - usr/local/share/man/*
"""

parts = yaml.safe_load(parts_yaml)

lcm = LifecycleManager(parts, application_name="example", cache_dir=".")
actions = lcm.plan(Step.PRIME)
with lcm.action_executor() as aex:
    aex.execute(actions)

When executed, the lifecycle manager will download the tarball we specified, unpack it, run its configuration script, compile the source code, install the resulting artifacts, and extract only the files we want to deploy. The final result is a subtree containing the files we wanted to prime:

prime
prime/usr
prime/usr/local
prime/usr/local/bin
prime/usr/local/bin/hello
prime/usr/local/share
prime/usr/local/share/man
prime/usr/local/share/man/man1
prime/usr/local/share/man/man1/hello.1

Learning more

  • The LifecycleManager class offers many options to configure parts processing.

  • The CLI tool source code is a good reference for a real world usage of the lifecycle manager.

  • Parts are similar to those used in Snapcraft, including some of its V2 plugins. See the Snapcraft parts documentation for details.