123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #!/bin/bash
- ################## https://github.com/mkropat/sh-realpath #####################
- #
- # The MIT License (MIT)
- #
- # Copyright (c) 2014 Michael Kropat
- #
- # Permission is hereby granted, free of charge, to any person obtaining a copy
- # of this software and associated documentation files (the "Software"), to deal
- # in the Software without restriction, including without limitation the rights
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- # copies of the Software, and to permit persons to whom the Software is
- # furnished to do so, subject to the following conditions:
- #
- # The above copyright notice and this permission notice shall be included in
- # all copies or substantial portions of the Software.
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- # THE SOFTWARE.
- realpath() {
- canonicalize_path "$(resolve_symlinks "$1")"
- }
- resolve_symlinks() {
- _resolve_symlinks "$1"
- }
- _resolve_symlinks() {
- _assert_no_path_cycles "$@" || return
- local dir_context path
- path=$(readlink -- "$1")
- if [ $? = 0 ]; then
- dir_context=$(dirname -- "$1")
- _resolve_symlinks "$(_prepend_dir_context_if_necessary "$dir_context" "$path")" "$@"
- else
- printf '%s\n' "$1"
- fi
- }
- _prepend_dir_context_if_necessary() {
- if [ "$1" = . ]; then
- printf '%s\n' "$2"
- else
- _prepend_path_if_relative "$1" "$2"
- fi
- }
- _prepend_path_if_relative() {
- case "$2" in
- /* ) printf '%s\n' "$2" ;;
- * ) printf '%s\n' "$1/$2" ;;
- esac
- }
- _assert_no_path_cycles() {
- local target path
- target=$1
- shift
- for path in "$@"; do
- if [ "$path" = "$target" ]; then
- return 1
- fi
- done
- }
- canonicalize_path() {
- if [ -d "$1" ]; then
- _canonicalize_dir_path "$1"
- else
- _canonicalize_file_path "$1"
- fi
- }
- _canonicalize_dir_path() {
- (cd "$1" 2>/dev/null && pwd -P)
- }
- _canonicalize_file_path() {
- local dir file
- dir=$(dirname -- "$1")
- file=$(basename -- "$1")
- (cd "$dir" 2>/dev/null >/dev/null && printf '%s/%s\n' "$(pwd -P)" "$file")
- }
- ##############################################################################
- SCRIPT_PATH="$(realpath "$0")"
- SCRIPT_ROOT="$(dirname "$SCRIPT_PATH")"
- if ! docker network inspect tfb >/dev/null 2>&1; then
- docker network create tfb >/dev/null
- fi
- test -t 1 && USE_TTY="-t"
- docker build -t techempower/tfb --build-arg USER_ID=$(id -u) --build-arg GROUP_ID=$(id -g) - < ${SCRIPT_ROOT}/Dockerfile
- exec docker run -i ${USE_TTY} --rm --network tfb -e USER_ID=$(id -u) -v /var/run/docker.sock:/var/run/docker.sock -v ${SCRIPT_ROOT}:/FrameworkBenchmarks techempower/tfb "${@}"
|