| #!/usr/bin/env bash |
| |
| # |
| # Copyright (c) 2020 Project CHIP Authors |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| |
| # run.sh - utility for running a Docker image |
| # |
| # This script expects to live in a directory named after the image |
| # with a version file next to it. So: use symlinks |
| # |
| here=$(cd "$(dirname "$0")" && pwd) |
| me=$(basename "$0") |
| |
| die() { |
| echo "$me: *** ERROR: $*" |
| exit 1 |
| } |
| |
| ORG=${DOCKER_RUN_ORG:-project-chip} |
| |
| GHCR_ORG="ghcr.io" |
| |
| # directory name is |
| IMAGE=${DOCKER_RUN_IMAGE:-$(basename "$here")} |
| |
| # version |
| VERSION=${DOCKER_RUN_VERSION:-$(sed 's/ .*//' "$here/version")} || |
| die "please run me from an image directory or set environment variables: |
| DOCKER_RUN_ORG |
| DOCKER_RUN_IMAGE |
| DOCKER_RUN_VERSION" |
| |
| # full image name |
| FULL_IMAGE_NAME="$GHCR_ORG/$ORG/$IMAGE${VERSION:+:${VERSION}}" |
| |
| # where |
| RUN_DIR=${DOCKER_RUN_DIR:-$(pwd)} |
| |
| help() { |
| set +x |
| echo "Usage: $me [RUN_OPTIONS -- ] command |
| |
| Run a command in a docker image described by $here |
| |
| Options: |
| --help get this message |
| |
| Any number of 'docker run' options can be passed |
| through to the invocation. Terminate this list of |
| options with '--' to begin command and arguments. |
| |
| Examples: |
| To run bash interactively: |
| $ $me -i -- bash |
| note the terminating '--' for run options |
| |
| To just tell me about the image |
| $ $me uname -a |
| |
| Add /tmp as an additional volume and run make |
| $ $me --volume /tmp:/tmp -- make -C src |
| |
| " |
| |
| } |
| |
| runargs=() |
| |
| # extract run options |
| for arg in "$@"; do |
| case "$arg" in |
| --help) |
| help |
| exit |
| ;; |
| |
| --) |
| shift |
| break |
| ;; |
| |
| -*) |
| runargs+=("$arg") |
| shift |
| ;; |
| |
| *) |
| ((!${#runargs[*]})) && break |
| runargs+=("$arg") |
| shift |
| ;; |
| |
| esac |
| done |
| |
| docker pull "$FULL_IMAGE_NAME" || "$here"/build.sh |
| |
| docker run "${runargs[@]}" --rm --mount "source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind" -w "$RUN_DIR" -v "$RUN_DIR:$RUN_DIR" "$FULL_IMAGE_NAME" "$@" |