Consume the build output of part 1 in part 2

I have been trying to build a snap, using snapcraft on Ubuntu 16.04 GNOME.

My source, is from a branch on a github repository. Hence, I thus far have managed

parts:
  snappy-repo:
    plugin: nil
    source-type: git
    source: https://github.com/retrocausal/repo
    source-branch: locallts
    build-packages: [git,libsecret-1-0,libsecret-common,libsecret-1-dev,fakeroot, libx11-dev, libxkbfile-dev,gcc-5,g++-5]
    prepare: |
        sh run.sh

within prepare , and in run.sh , I am installing all the npm packages my build would need.

This build process, would create a .deb archive, inside

parts |
    |snappy-repo
        |build
            |debian
                | repo.deb

How do I now, add another part to my snapcraft.yaml part structure,

that can have the source pointing to the output of snappy-repo?

For snaps that use npm you may want to use the nodejs plugin

You need have the contents you want to consume staged but not necessarily primed if they are only useful for the building of the dependent part, to be either staged or primed they need to end up in the part’s install directory, given there is no similar make install rule run here (plugin: nil) you will need to do a few extra manual steps, here is an illustrative example

parts:
    snappy-repo:
        source: https://github.com/retrocasual/repo
        ...
        plugin: nil
        build-packages: [...]
        prepare: |
            sh run.sh
        install:
            install debian/repo.deb $SNAPCRAFT_PART_INSTALL/repo.deb
        prime:
            - -repo.deb
    repo-user:
        prepare: |
            dpkg-deb -x $SNAPCRAFT_STAGE/repo.deb
        after: [snappy-repo]

So,

  • install under snappy-repo just makes sure that repo.deb ends up in the top level stage dir in the project
  • repo-user is configured to run after snappy-repo
  • the prepare entry in repo-user unpacks repo.deb from the stage director
  • the prime entry in snappy-repo makes sure the deb does not make it to the snap (in case that is your intention) as it avoids priming it.
3 Likes

This just works excellently! thanks @sergiusens!

Yeah I do not want the debian package to go into the snap.

I with the above , have managed to

  • pull the latest changes from a git repository,
  • build a debian package with node
  • unpack the debain archive from part 1 in part2

just what I needed.

Now I gotta read about what to do with the dumped unpacked .deb package

1 Like