Skip to content

High-level roadmap for containers #74

@daler

Description

@daler

Context: to get ARM containers working uniformly, we wanted to have all images built in the same repo (rather than split across multiple) to get everything pushing via manifests to quay.io. That meant moving the build-env (bioconda-utils-build-env-cos7) creation over here from bioconda-utils.

This is largely working, but we need to think about how versions are handled.

We have the build-env container, which has bioconda-utils and conda-build in it. This is what was moved here from bioconda-utils.

We have the create-env container, which only has conda in it (so as to avoid having dependencies undeclared by a recipe which helps avoid broken packages). But the version of conda used is the exact one that comes in from the build-env container -- at build time, pulls the conda version directly from running conda list in the build-env container.

This means that both containers are very tightly-coupled to bioconda-utils. One one hand it makes a lot of sense to keep them over there, because they can be built at release time, using the version number of the release and using the bioconda-utils github actions. On the other hand, it makes sense to keep them here so that all containers are built uniformly and can be maintained uniformly.

In fact, only after moving it over here was I finally able to make sense of everything. While I hope not everyone is as slow as me, anything that simplifies infrastructure or makes it more obvious or easier to understand has a lot of value. So I am leaning towards keeping all containers here.

However, doing so creates a problem. The build-env and create-env in this repo must be triggered upon release in another repo (bioconda-utils). We cannot do this just by inspecting bioconda-common/common.sh, since bioconda-recipes also looks at that. Which means that after bumping common.sh, bioconda-recipes PRs would be broken until we build the new version of the build and create containers over here. Managing that time lag (and managing the restarts of broken PRs and replying to issues asking about why its temporarily broken) seems brittle.

So I believe the workflow needs to be:

  • new bioconda-utils release (from merging the releaseplease PR)
  • triggers a build of the build-env in this repo
  • when that completes, then build the create-env image here (it depends on the build-env since it needs to extract conda version)
  • both are uploaded to quay.io with a tag for the bioconda-utils version

(Note that the base images can continue to use manual major.minor versioning. Those are easier to handle.)

Then, common.sh is manually updated. Ideally, it should be updated via PR, and the PR tests check whether the containers for the bumped bioconda-utils version exist yet in quay.io.

After that, bioconda-recipes will pick up the new version specified in common.sh.

Furthermore, we should ensure that recipes is always using the right container for building (ensure we specify the tag and provide that to bioconda-utils and mulled).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions