diff --git a/source/developer/dockerfile-inventory.rst b/source/developer/dockerfile-inventory.rst new file mode 100644 index 0000000..1629e20 --- /dev/null +++ b/source/developer/dockerfile-inventory.rst @@ -0,0 +1,167 @@ +Dockerfile inventory +==================== + +Docker containers are used in multiple ways by bioconda-utils. Broadly, we can +divide them into containers used for *building* packages and containers used +for the bot. + +Overview of containers used in building +--------------------------------------- + +Bioconda builds not only conda packages but also Docker containers with the +package installed. Here's how it works. + + +.. figure:: ../images/bioconda-containers.png + + Sketch of how containers and packages interact with :command:`bioconda-utils + build --docker --mulled-test`. See below for details. [:download:`excalidraw + <../images/bioconda-containers.excalidraw>`] [:download:`SVG + <../images/bioconda-containers.svg>`] + +If we run :command:`bioconda-utils build` without the :command:`--docker` +argument, it will build a conda package using the conda-build in the local +environment and the built package will appear in the host's :file:`conda-bld` +directory, ready for uploading to the channel. + +However, the host may have libraries or packages installed that are not defined +in the recipe. If a package uses any of these, then even if tests pass on this +host they may fail on another machine that is missing those undeclared +dependencies, resulting in a broken package. Since we use multiple CI providers +(CircleCI, GitHub Actions, Azure DevOps), and since any one of these providers +may install or update libraries on their hosts at any time, there is a risk of +creating packages that work when building but are broken on other systems. + +To guard against this, we run :command:`bioconda-utils build` with the +:command:`--docker` argument. This runs conda-build inside a Docker container, +isolating it from the host and preventing any host libraries from being used. +As before, the resulting package is found in the host's :file:`conda-bld` +directory. + +When we additionally use the :command:`--mulled-test` argument, +:program:`bioconda-utils` will run :program:`mulled-build` from the `galaxy-lib +`_ package. +:program:`mulled-build` is a tool to convert conda packages into Docker images. +It uses `involucro `_ to make a final, +minimal image with a dramatically reduced file size. + +This process uses two images: an image containing conda, and a minimal base +image. First, a container with conda installed is used to :command:`conda +install` the package built in the previous step into the container. This +installs the package's dependencies as well. The test commands are extracted +from the package, and run to test this newly-installed package. Next, *just the +conda environment directory* is extracted from the conda container and layered +onto the base image using :program:`involucro`. + +The base image has very little else, not even conda. So the end result is +a minimal Docker image with nothing but the installed package and its +dependencies (and therefore a small size), ready to be uploaded to +a repository. + + +Details of containers using in building +--------------------------------------- + +The **build image** is used for *building* a package, isolated from the host. +The built package appears back on the host's local channel. + +The **conda image** is used by mulled-build for *installing* the conda package +in such a way that the resulting conda env can be easily copied out by +involucro + +The **base image** is used by involucro as a starting image into which it will +copy the conda env created by mulled-build in the conda image + +The **extended base image** is used in rare cases where very minimal base image +is *too* minimal. In this case, recipe authors can specify +``container:extended-base:true`` in the meta.yaml file, and the extended image +will be used as the base instead. + +Here are the images, their respective Dockerfiles, and where they are built. + +.. list-table:: + :header-rows: 1 + :class: inventory + + * - description + - image + - maintained in + - dockerfile + - built by + + * - build image + - ``quay.io/bioconda/bioconda-utils-build-env-cos7`` + - bioconda-utils + - `Dockerfile `_ + - `GitHub Action workflow `_ + + * - conda image + - ``quay.io/bioconda/create-env:latest`` + - bioconda-containers + - `Dockerfile `_ + - `GitHub Action workflow `_ + + * - base image + - ``quay.io/bioconda/base-glibc-busybox-bash:3.0`` + - bioconda-containers + - `Dockerfile `_ + - `GitHub Action workflow `_ + + * - extended base image + - ``quay.io/bioconda/base-glibc-debian-bash:3.0`` + - bioconda-containers + - `Dockerfile `_ + - `GitHub Action workflow `_ + +As of Nov 2023, each of these is configured to be built on both amd64 and arm64 +(a.k.a x86_64 and aarch64) architectures. + +In the actual :program:`bioconda-utils` code, the containers are specified in +several ways. Note that the links to code below point to specific commits in +order to highlight a line, so these may not be the most up-to-date code. But it +can give you a starting point for where to look. + +- The build image is configured in `bioconda_utils/cli `_. + +- mulled-build pays attention to `env vars + `_ + that define what images to use. + +- `bioconda_utils.pkg_test.test_package() + `_ + sets DEST_BASE_IMAGE to the `base_image` arg, which in turn is set in + `bioconda_utils.build.build() + `_. + This can take one of two hard-coded values, depending on if the recipe needed + an extended image or not. + +- mulled-build also needs a conda image to use. This is set by bioconda-utils + in `pkg_test.py + `_ + which is then passed to `build.build + `_. + + +The bot +------- + +The BiocondaBot responds to comments on PRs an interacts with some artifacts +created by package builds. In order to have rapid response times, the bot is +implemented as a set of tagged Docker containers. + +The bot actions largely consist of relatively simple HTTP requests. The code +for these actions if maintained in the `src/bioconda_bot +`_ +Python package, within the bioconda-containers repo. There are different tagged +images for the different behaviors of the bot, which are built and pushed in +the `bot.yaml +`_ +GitHub Action workflow in the bioconda-containers repo. For example, the +comment behavior on bioconda-recipes is defined `here +`_, +which uses the ``quay.io/bioconda/bot:comment`` container, sets some env +variables that GitHub Actions has access to, and runs :command:`bioconda-bot +comment` in the container. This container was created `here +`_, +when the `matrix.tag was set to "comment" +`_. diff --git a/source/developer/index.rst b/source/developer/index.rst index ea76ebf..37f721a 100644 --- a/source/developer/index.rst +++ b/source/developer/index.rst @@ -9,5 +9,6 @@ Developer Docs bulk repodata_patching ci-inventory + dockerfile-inventory repo-inventory aarch64 diff --git a/source/images/bioconda-containers.excalidraw b/source/images/bioconda-containers.excalidraw new file mode 100644 index 0000000..a311012 --- /dev/null +++ b/source/images/bioconda-containers.excalidraw @@ -0,0 +1,1318 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "Ry0HXcfp2TtDCwDgRSN05", + "type": "rectangle", + "x": 315.244140625, + "y": 439.88203125, + "width": 641.97265625, + "height": 29.2, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffd43b", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 591301005, + "version": 427, + "versionNonce": 861916067, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "92AKwAgt4H6S0AAjrQu_3" + } + ], + "updated": 1700758646509, + "link": null, + "locked": false + }, + { + "id": "92AKwAgt4H6S0AAjrQu_3", + "type": "text", + "x": 570.60546875, + "y": 444.88203125, + "width": 131.25, + "height": 19.2, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1410176237, + "version": 491, + "versionNonce": 1498177347, + "isDeleted": false, + "boundElements": null, + "updated": 1700758646509, + "link": null, + "locked": false, + "text": "bioconda-utils", + "fontSize": 16, + "fontFamily": 3, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 15, + "containerId": "Ry0HXcfp2TtDCwDgRSN05", + "originalText": "bioconda-utils", + "lineHeight": 1.2 + }, + { + "type": "rectangle", + "version": 493, + "versionNonce": 424045965, + "isDeleted": false, + "id": "DMfgmgWEVMH6fhFuNgxVr", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 504.8535156250001, + "y": 479.989453125, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "width": 446.31640624999983, + "height": 29.2, + "seed": 129562083, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "ebIoI_c0AL2Mect1VXg5P" + } + ], + "updated": 1700758642591, + "link": null, + "locked": false + }, + { + "id": "ebIoI_c0AL2Mect1VXg5P", + "type": "text", + "x": 671.76171875, + "y": 484.989453125, + "width": 112.5, + "height": 19.2, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1102745517, + "version": 453, + "versionNonce": 1587229677, + "isDeleted": false, + "boundElements": null, + "updated": 1700758642592, + "link": null, + "locked": false, + "text": "mulled-build", + "fontSize": 16, + "fontFamily": 3, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 15, + "containerId": "DMfgmgWEVMH6fhFuNgxVr", + "originalText": "mulled-build", + "lineHeight": 1.2 + }, + { + "type": "rectangle", + "version": 663, + "versionNonce": 429563373, + "isDeleted": false, + "id": "abSQmI8Tl4VEY2QBVppey", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 733.376953125, + "y": 517.59375, + "strokeColor": "#1e1e1e", + "backgroundColor": "#fff9db", + "width": 216.76171874999997, + "height": 29.2, + "seed": 1468203427, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "QDHZi5ciBJh_S7srIu1IG" + } + ], + "updated": 1700758628960, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 652, + "versionNonce": 969562189, + "isDeleted": false, + "id": "QDHZi5ciBJh_S7srIu1IG", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 799.5703125, + "y": 522.59375, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 84.375, + "height": 19.2, + "seed": 1066980675, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700758628961, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 3, + "text": "involucro", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "abSQmI8Tl4VEY2QBVppey", + "originalText": "involucro", + "lineHeight": 1.2, + "baseline": 15 + }, + { + "id": "cCiUDhdHKsMRPLATOl74B", + "type": "line", + "x": 152.51953125, + "y": 686.49609375, + "width": 766.21484375, + "height": 0, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 2081779939, + "version": 218, + "versionNonce": 1974850285, + "isDeleted": false, + "boundElements": null, + "updated": 1700758620397, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 766.21484375, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "lzBDka8XJXnQKztZ11Dxh", + "type": "text", + "x": 278.33984375, + "y": 748.20078125, + "width": 150, + "height": 19.2, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 507070019, + "version": 215, + "versionNonce": 1198972515, + "isDeleted": false, + "boundElements": [ + { + "id": "YBQpyBT_TcIo47RBV5WZP", + "type": "arrow" + } + ], + "updated": 1700758620397, + "link": null, + "locked": false, + "text": "recipes/pkgname/", + "fontSize": 16, + "fontFamily": 3, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 15, + "containerId": null, + "originalText": "recipes/pkgname/", + "lineHeight": 1.2 + }, + { + "id": "uD7PB-jAZk41aqxRuaISt", + "type": "text", + "x": 469.8046875, + "y": 748.18125, + "width": 234.375, + "height": 19.2, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 797833347, + "version": 179, + "versionNonce": 1718819331, + "isDeleted": false, + "boundElements": [ + { + "id": "Wv4FKPgKrMaF6iDzDn0Lx", + "type": "arrow" + }, + { + "id": "z2WjdCLrgR50gxx-9Mp6i", + "type": "arrow" + } + ], + "updated": 1700758620397, + "link": null, + "locked": false, + "text": "conda-bld/pkgname.tar.bz2", + "fontSize": 16, + "fontFamily": 3, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 15, + "containerId": null, + "originalText": "conda-bld/pkgname.tar.bz2", + "lineHeight": 1.2 + }, + { + "id": "YBQpyBT_TcIo47RBV5WZP", + "type": "arrow", + "x": 323.4322857790941, + "y": 736.7515625, + "width": 21.145419762216193, + "height": 55.58479406392064, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 2043726947, + "version": 1315, + "versionNonce": 626341837, + "isDeleted": false, + "boundElements": null, + "updated": 1700758665077, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 21.145419762216193, + -55.58479406392064 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "lzBDka8XJXnQKztZ11Dxh", + "gap": 11.44921875, + "focus": -0.4822151595925682 + }, + "endBinding": { + "elementId": "ZSPG8ACP4jq3ssZMYNzQW", + "gap": 13.940205936079337, + "focus": 0.20174636147394562 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "Wv4FKPgKrMaF6iDzDn0Lx", + "type": "arrow", + "x": 503.05232956876023, + "y": 676.0541109444912, + "width": 34.33759363829097, + "height": 63.46698280550879, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 1479936387, + "version": 1349, + "versionNonce": 461362957, + "isDeleted": false, + "boundElements": null, + "updated": 1700758665076, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 34.33759363829097, + 63.46698280550879 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "ZSPG8ACP4jq3ssZMYNzQW", + "gap": 9.063868781165752, + "focus": -0.32741834502722905 + }, + "endBinding": { + "elementId": "uD7PB-jAZk41aqxRuaISt", + "gap": 8.66015625, + "focus": -0.32458329747209613 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "z2WjdCLrgR50gxx-9Mp6i", + "type": "arrow", + "x": 578.3213788819246, + "y": 739.74765625, + "width": 33.700690869569144, + "height": 83.9816591883033, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 2070448685, + "version": 915, + "versionNonce": 1083999011, + "isDeleted": false, + "boundElements": null, + "updated": 1700759043553, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 33.700690869569144, + -83.9816591883033 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "uD7PB-jAZk41aqxRuaISt", + "focus": -0.13192007287625357, + "gap": 8.43359375 + }, + "endBinding": { + "elementId": "Mp4CB3RLFFYLjwBEjjBCf", + "focus": 0.4992174931088646, + "gap": 1.4331845616966348 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "type": "rectangle", + "version": 704, + "versionNonce": 221470413, + "isDeleted": false, + "id": "YagLhsW7rU9oRtGDs3MVQ", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 815.67578125, + "y": 567.35546875, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 140.07812499999994, + "height": 93.99609375, + "seed": 471524227, + "groupIds": [ + "qxo2_x0gTN9YPhOX7abNO" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "UOwu-SVo7CcdghHvhRNoO" + } + ], + "updated": 1700758620397, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 734, + "versionNonce": 424706179, + "isDeleted": false, + "id": "UOwu-SVo7CcdghHvhRNoO", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 844.5771484375, + "y": 572.35546875, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 82.275390625, + "height": 46, + "seed": 1318681379, + "groupIds": [ + "qxo2_x0gTN9YPhOX7abNO" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700758620397, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 2, + "text": "base \ncontainer", + "textAlign": "center", + "verticalAlign": "top", + "containerId": "YagLhsW7rU9oRtGDs3MVQ", + "originalText": "base container", + "lineHeight": 1.15, + "baseline": 41 + }, + { + "type": "rectangle", + "version": 775, + "versionNonce": 1113062701, + "isDeleted": false, + "id": "90jJda8XDVExXoLSysirR", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 823.23828125, + "y": 623.15234375, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 129.57031250000003, + "height": 29.2, + "seed": 1352933059, + "groupIds": [ + "qxo2_x0gTN9YPhOX7abNO" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "HBYY_8kDzFZ8A95N1D3Xr" + }, + { + "id": "NixZifivTH-xD1rNFKj8g", + "type": "arrow" + } + ], + "updated": 1700758620397, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 866, + "versionNonce": 756250659, + "isDeleted": false, + "id": "HBYY_8kDzFZ8A95N1D3Xr", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 841.1484375, + "y": 628.15234375, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 93.75, + "height": 19.2, + "seed": 1826180707, + "groupIds": [ + "qxo2_x0gTN9YPhOX7abNO" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700758620397, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 3, + "text": "/usr/local", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "90jJda8XDVExXoLSysirR", + "originalText": "/usr/local", + "lineHeight": 1.2, + "baseline": 15 + }, + { + "id": "NixZifivTH-xD1rNFKj8g", + "type": "arrow", + "x": 729.40234375, + "y": 642.2313583849638, + "width": 85.6875, + "height": 1.5641890104180902, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 359479811, + "version": 537, + "versionNonce": 1874482787, + "isDeleted": false, + "boundElements": null, + "updated": 1700759043553, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 85.6875, + 1.5641890104180902 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "Mp4CB3RLFFYLjwBEjjBCf", + "focus": 0.07085274746293091, + "gap": 10.89453125 + }, + "endBinding": { + "elementId": "90jJda8XDVExXoLSysirR", + "focus": -0.46725910481659183, + "gap": 8.1484375 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "type": "rectangle", + "version": 527, + "versionNonce": 685145027, + "isDeleted": false, + "id": "y8aZgYOatYLM0Fa3dOUuj", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 586.07421875, + "y": 525, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 140.07812499999994, + "height": 136.27343750000003, + "seed": 2095935789, + "groupIds": [ + "EBigXOisoe8W1KUQ3lS5K" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "Gr5IokqxpJqxRSfCPzEZl" + } + ], + "updated": 1700758620397, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 543, + "versionNonce": 1387419117, + "isDeleted": false, + "id": "Gr5IokqxpJqxRSfCPzEZl", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 614.9755859375, + "y": 530, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 82.275390625, + "height": 46, + "seed": 702595981, + "groupIds": [ + "EBigXOisoe8W1KUQ3lS5K" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700758620397, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 2, + "text": "conda \ncontainer", + "textAlign": "center", + "verticalAlign": "top", + "containerId": "y8aZgYOatYLM0Fa3dOUuj", + "originalText": "conda container", + "lineHeight": 1.15, + "baseline": 41 + }, + { + "type": "rectangle", + "version": 610, + "versionNonce": 1541267523, + "isDeleted": false, + "id": "Mp4CB3RLFFYLjwBEjjBCf", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 588.9375, + "y": 625.1328125, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 129.57031250000003, + "height": 29.2, + "seed": 1275482339, + "groupIds": [ + "EBigXOisoe8W1KUQ3lS5K" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "-3ke31NdzuocXVw_hkILy" + }, + { + "id": "z2WjdCLrgR50gxx-9Mp6i", + "type": "arrow" + }, + { + "id": "NixZifivTH-xD1rNFKj8g", + "type": "arrow" + } + ], + "updated": 1700759043553, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 693, + "versionNonce": 1580266435, + "isDeleted": false, + "id": "-3ke31NdzuocXVw_hkILy", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 634.97265625, + "y": 630.1328125, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 37.5, + "height": 19.2, + "seed": 1030765699, + "groupIds": [ + "EBigXOisoe8W1KUQ3lS5K" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700759051498, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 3, + "text": "env/", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "Mp4CB3RLFFYLjwBEjjBCf", + "originalText": "env/", + "lineHeight": 1.2, + "baseline": 15 + }, + { + "type": "rectangle", + "version": 613, + "versionNonce": 1090955011, + "isDeleted": false, + "id": "HZ-rnkXnVkb89LtWcmhUZ", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 590.48046875, + "y": 590.4585937500001, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 129.57031250000003, + "height": 29.2, + "seed": 180706349, + "groupIds": [ + "EBigXOisoe8W1KUQ3lS5K" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "x4SHbu6J53EOkI86YBWpP" + } + ], + "updated": 1700758620397, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 698, + "versionNonce": 895319725, + "isDeleted": false, + "id": "x4SHbu6J53EOkI86YBWpP", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 631.828125, + "y": 595.4585937500001, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 46.875, + "height": 19.2, + "seed": 730025613, + "groupIds": [ + "EBigXOisoe8W1KUQ3lS5K" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700758620397, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 3, + "text": "conda", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "HZ-rnkXnVkb89LtWcmhUZ", + "originalText": "conda", + "lineHeight": 1.2, + "baseline": 15 + }, + { + "id": "T80XglCa2EMVp9kTzyUad", + "type": "text", + "x": 176.8662109375, + "y": 592.29921875, + "width": 88.689453125, + "height": 32.199999999999996, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1326686243, + "version": 176, + "versionNonce": 2017513123, + "isDeleted": false, + "boundElements": null, + "updated": 1700758620397, + "link": null, + "locked": false, + "text": "Docker", + "fontSize": 28, + "fontFamily": 2, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 26, + "containerId": null, + "originalText": "Docker", + "lineHeight": 1.15 + }, + { + "type": "text", + "version": 214, + "versionNonce": 1140007181, + "isDeleted": false, + "id": "8U-iTgt9HlDYzlNCGtoI9", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 176.8662109375, + "y": 717.353125, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "width": 57.572265625, + "height": 32.199999999999996, + "seed": 1374987693, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700758620397, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 2, + "text": "Host", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Host", + "lineHeight": 1.15, + "baseline": 26 + }, + { + "id": "ZSPG8ACP4jq3ssZMYNzQW", + "type": "rectangle", + "x": 313.4609375, + "y": 499.1015625, + "width": 187.53515625, + "height": 168.12499999999997, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "VKry84j3vgFdUIVvIcZot" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 2141807747, + "version": 559, + "versionNonce": 1041120301, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "RSmIGjVVf1qi-P26cGPBy" + }, + { + "id": "Wv4FKPgKrMaF6iDzDn0Lx", + "type": "arrow" + }, + { + "id": "YBQpyBT_TcIo47RBV5WZP", + "type": "arrow" + } + ], + "updated": 1700758679592, + "link": null, + "locked": false + }, + { + "id": "RSmIGjVVf1qi-P26cGPBy", + "type": "text", + "x": 342.1845703125, + "y": 504.1015625, + "width": 130.087890625, + "height": 23, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [ + "VKry84j3vgFdUIVvIcZot" + ], + "frameId": null, + "roundness": null, + "seed": 1033868227, + "version": 618, + "versionNonce": 505719075, + "isDeleted": false, + "boundElements": null, + "updated": 1700758679592, + "link": null, + "locked": false, + "text": "build container", + "fontSize": 20, + "fontFamily": 2, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 18, + "containerId": "ZSPG8ACP4jq3ssZMYNzQW", + "originalText": "build container", + "lineHeight": 1.15 + }, + { + "type": "rectangle", + "version": 772, + "versionNonce": 1118842509, + "isDeleted": false, + "id": "COs0yi5IlmMD9jBPtDSYv", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 327.6875, + "y": 620.153125, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 159.08203125000003, + "height": 29.2, + "seed": 1481006691, + "groupIds": [ + "VKry84j3vgFdUIVvIcZot" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "9lNvtWk4-OHSmBA-xig0m" + } + ], + "updated": 1700758679592, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1064, + "versionNonce": 580488387, + "isDeleted": false, + "id": "9lNvtWk4-OHSmBA-xig0m", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 341.603515625, + "y": 625.153125, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 131.25, + "height": 19.2, + "seed": 827496963, + "groupIds": [ + "VKry84j3vgFdUIVvIcZot" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700758679592, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 3, + "text": "bioconda-utils", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "COs0yi5IlmMD9jBPtDSYv", + "originalText": "bioconda-utils", + "lineHeight": 1.2, + "baseline": 15 + }, + { + "type": "rectangle", + "version": 644, + "versionNonce": 388289773, + "isDeleted": false, + "id": "wBcYIwBjFolSi4vZE0mDW", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 342.443359375, + "y": 549.6968750000001, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 129.57031250000003, + "height": 29.2, + "seed": 741604525, + "groupIds": [ + "VKry84j3vgFdUIVvIcZot" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "Xiop5TihDc0Y2uoKalufe" + } + ], + "updated": 1700758679592, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 729, + "versionNonce": 2045836387, + "isDeleted": false, + "id": "Xiop5TihDc0Y2uoKalufe", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 383.791015625, + "y": 554.6968750000001, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 46.875, + "height": 19.2, + "seed": 1464459021, + "groupIds": [ + "VKry84j3vgFdUIVvIcZot" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1700758679592, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 3, + "text": "conda", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "wBcYIwBjFolSi4vZE0mDW", + "originalText": "conda", + "lineHeight": 1.2, + "baseline": 15 + }, + { + "type": "rectangle", + "version": 665, + "versionNonce": 385199949, + "isDeleted": false, + "id": "uL7UDVECJInJJUMUqODvN", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 342.443359375, + "y": 584.2242187500001, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 129.57031250000003, + "height": 29.2, + "seed": 686579213, + "groupIds": [ + "VKry84j3vgFdUIVvIcZot" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "Q1r1idMiMOx9hFfsS5wvt" + } + ], + "updated": 1700758679592, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 776, + "versionNonce": 1073313795, + "isDeleted": false, + "id": "Q1r1idMiMOx9hFfsS5wvt", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 355.666015625, + "y": 589.2242187500001, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 103.125, + "height": 19.2, + "seed": 1897534787, + "groupIds": [ + "VKry84j3vgFdUIVvIcZot" + ], + "frameId": null, + "roundness": null, + "boundElements": null, + "updated": 1700758679592, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 3, + "text": "conda-build", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "uL7UDVECJInJJUMUqODvN", + "originalText": "conda-build", + "lineHeight": 1.2, + "baseline": 15 + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/source/images/bioconda-containers.png b/source/images/bioconda-containers.png new file mode 100644 index 0000000..ff3e569 Binary files /dev/null and b/source/images/bioconda-containers.png differ diff --git a/source/images/bioconda-containers.svg b/source/images/bioconda-containers.svg new file mode 100644 index 0000000..66108b6 --- /dev/null +++ b/source/images/bioconda-containers.svg @@ -0,0 +1,21 @@ + + + + + + + + bioconda-utilsmulled-buildinvolucrorecipes/pkgname/conda-bld/pkgname.tar.bz2base container/usr/localconda containerenv/condaDockerHostbuild containerbioconda-utilscondaconda-build \ No newline at end of file