From b7a1711a30e43b0c7bd33cc582f49b5f99f24e0c Mon Sep 17 00:00:00 2001 From: Chandan Singh Date: Wed, 3 Oct 2018 17:27:08 -0400 Subject: Add contrib script to generate Docker images from bst checkout This script can be useful to generate a Docker image from `bst checkout` of an element as a single command. While this script does not eliminate the need for a proper Docker/OCI element plugin that would probably also support layering, it provides a cheap way to export the element into a Docker image. --- contrib/bst-docker-import | 102 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100755 contrib/bst-docker-import diff --git a/contrib/bst-docker-import b/contrib/bst-docker-import new file mode 100755 index 000000000..a451b8770 --- /dev/null +++ b/contrib/bst-docker-import @@ -0,0 +1,102 @@ +#!/bin/bash +# +# Copyright 2018 Bloomberg Finance LP +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . +# +# Authors: +# Chadnan Singh + +# This is a helper script to generate Docker images using checkouts of +# BuildStream elements. + +usage() { + cat <&2 + exit 1 +} + +bst_cmd=bst +docker_import_cmd=(docker import) +docker_image_tag= + +while getopts c:m:t:h arg +do + case $arg in + c) + bst_cmd="$OPTARG" + ;; + m) + docker_import_cmd+=('-m' "$OPTARG") + ;; + t) + docker_image_tag="$OPTARG" + ;; + h) + usage 0 + ;; + \?) + usage 1 + esac +done + +shift $((OPTIND-1)) +if [[ "$#" != 1 ]]; then + echo "$0: No element specified" >&2 + usage 1 +fi +element="$1" + +# Dump to a temporary file in the current directory. +# NOTE: We use current directory to try to ensure compatibility with scripts +# like bst-here, assuming that the current working directory is mounted +# inside the container. + +checkout_tar="bst-checkout-$(basename "$element")-$RANDOM.tar" + +echo "INFO: Checking out $element ..." >&2 +$bst_cmd checkout --tar "$element" "$checkout_tar" || die "Failed to checkout $element" +echo "INFO: Successfully checked out $element" >&2 + +echo "INFO: Importing Docker image ..." +"${docker_import_cmd[@]}" "$checkout_tar" "$docker_image_tag" || die "Failed to import Docker image from tarball" +echo "INFO: Successfully import Docker image $docker_image_tag" + +echo "INFO: Cleaning up ..." +rm "$checkout_tar" || die "Failed to remove $checkout_tar" +echo "INFO: Clean up finished" -- cgit v1.2.1