791c163b2f
It is quite customary to use a single repository with multiple workdirs, one for each active branch, with either the aging 'git new-workdir' or the more recent 'git worktree'. However, in a workdir/worktree, most entries in .git/ are only symlinks to the actual files in the main repository. Currently, utils/docker-run only bind-mounts the current working copy. If that is a workdir/worktree, then it is going to be missing the actual git data, resulting in errors like: $ ./utils/docker-run make check-package fatal: not a git repository (or any parent up to mount point [....]/buildroot) Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). No files to check style make: *** [Makefile:1257: check-package] Error 1 So, we also bind-mount the actual git directory. If that is a subdir of the current working copy, then it is already mounted and thus the bind-mount is superfluous but harmless; for simplicity, we mount it unconditionally. Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr> Cc: Ricardo Martincoski <ricardo.martincoski@datacom.com.br>
24 lines
680 B
Bash
Executable File
24 lines
680 B
Bash
Executable File
#!/usr/bin/env bash
|
|
set -o errexit -o pipefail
|
|
DIR=$(dirname "${0}")
|
|
MAIN_DIR=$(readlink -f "${DIR}/..")
|
|
# GIT_DIR to support workdirs/worktrees
|
|
GIT_DIR="$(dirname "$(realpath "${MAIN_DIR}/.git/config")")"
|
|
# shellcheck disable=SC2016
|
|
IMAGE=$(grep ^image: "${MAIN_DIR}/.gitlab-ci.yml" | \
|
|
sed -e 's,^image: ,,g' | sed -e 's,\$CI_REGISTRY,registry.gitlab.com,g')
|
|
|
|
declare -a docker_opts=(
|
|
-i
|
|
--rm
|
|
--user "$(id -u):$(id -g)"
|
|
--mount "type=bind,src=${MAIN_DIR},dst=${MAIN_DIR}"
|
|
--mount "type=bind,src=${GIT_DIR},dst=${GIT_DIR}"
|
|
--workdir "${MAIN_DIR}"
|
|
)
|
|
if tty -s; then
|
|
docker_opts+=( -t )
|
|
fi
|
|
|
|
exec docker run "${docker_opts[@]}" "${IMAGE}" "${@}"
|