Skip to content

Commit

Permalink
improve utility script parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
kaarmu committed Oct 17, 2024
1 parent 3d71b8b commit 64949ac
Show file tree
Hide file tree
Showing 6 changed files with 145 additions and 79 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/update-ghcr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:

- name: Build the Docker image
env:
CONFIG: base
BUILD_CONFIG: ghcr
run: util/build

- name: Log out from GitHub Container Registry
Expand Down
2 changes: 1 addition & 1 deletion docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
ARG BUILD_TAG
ARG ROSDISTRO

FROM ghcr.io/kth-sml/svea:${BUILD_TAG:-latest}
FROM ${BUILD_TAG:-ghcr.io/kth-sml/svea:latest}

ARG ROSDISTRO
ARG DEBIAN_FRONTEND=noninteractive
Expand Down
2 changes: 1 addition & 1 deletion docker/Dockerfile.base
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ ARG WORKSPACE
## SVEA BASE IMAGE ##
#####################

FROM ros:${BUILD_TAG:-latest}
FROM ${BUILD_TAG:-ros:latest}

ARG ROSDISTRO
ARG WORKSPACE
Expand Down
34 changes: 21 additions & 13 deletions util/build
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,28 @@

. "$(dirname "$0")/config.sh"

# Set default arguments, create and set list content
append DEFAULT_ARGS "$(ifelse IMAGE_PUSH --push --load)"
append DEFAULT_ARGS --tag "$IMAGE_TAG" --file "$BUILD_FILE" "$BUILD_CONTEXT"
CMD="docker buildx build"
ARGS=""

if [ -z "$*" ]; then
set -- $DEFAULT_ARGS
fi

istrue DEBUG && fn="echo" || fn="exec"

"$fn" docker buildx build \
--network host \
append ARGS \
--network "host" \
--platform "$BUILD_PLATFORM" \
--build-arg "BUILD_TAG=$BUILD_TAG" \
--build-arg "ROSDISTRO=$ROSDISTRO" \
--build-arg "WORKSPACE=$WORKSPACE" \
"$@"
--build-arg "WORKSPACE=$WORKSPACE"


# Special case for TX2s that have old version of docker
if [ "$(jetson_release)" = "R32" ]; then
CMD="docker build"
else
append ARGS "$(ifelse IMAGE_PUSH --push --load)"
fi

# These args are replaced if util/build is called with arguments
if [ -z "$*" ]
then append ARGS --tag "$IMAGE_TAG" --file "$BUILD_FILE" "$BUILD_CONTEXT"
else append ARGS "$@"
fi

call $CMD $ARGS
163 changes: 109 additions & 54 deletions util/config.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,64 +11,91 @@

main() {

CONFIG="${CONFIG:-"deafult"}"
DEFAULT_ROSDISTRO="noetic"
DEFAULT_WORKSPACE="/svea_ws"
DEFAULT_BUILD_PLATFORM="linux/amd64"
DEFAULT_BUILD_FILE="docker/Dockerfile"
DEFAULT_BUILD_TAG="latest"
DEFAULT_IMAGE_PUSH="0"

if [ "$CONFIG" = "base" ]; then
DEFAULT_BUILD_PLATFORM="linux/amd64,linux/arm64/v8"
DEFAULT_BUILD_FILE="docker/Dockerfile.base"
DEFAULT_BUILD_TAG="$DEFAULT_ROSDISTRO"
IMAGE_PUSH="1"
IMAGE_TAG="ghcr.io/kth-sml/svea"
elif [ "$CONFIG" = "base-amd64" ]; then
DEFAULT_BUILD_PLATFORM="linux/amd64"
DEFAULT_BUILD_FILE="docker/Dockerfile.base"
DEFAULT_BUILD_TAG="$DEFAULT_ROSDISTRO"
IMAGE_TAG="ghcr.io/kth-sml/svea"
elif [ "$CONFIG" = "base-arm64" ]; then
DEFAULT_BUILD_PLATFORM="linux/arm64/v8"
DEFAULT_BUILD_FILE="docker/Dockerfile.base"
DEFAULT_BUILD_TAG="$DEFAULT_ROSDISTRO"
IMAGE_TAG="ghcr.io/kth-sml/svea"
withdefault DEBUG "0"

withdefault ROSDISTRO "noetic"
withdefault WORKSPACE "/svea_ws"
withdefault REPOSITORY_PATH "$(climb entrypoint)"
withdefault REPOSITORY_NAME "$(basename "$REPOSITORY_PATH")"

withdefault BUILD_CONFIG "default"
if [ "$BUILD_CONFIG" = "default" ]; then
# building for host platform
withdefault BUILD_PLATFORM "$(uname -m)"
withdefault BUILD_CONTEXT "$REPOSITORY_PATH"
withdefault BUILD_FILE "docker/Dockerfile"
withdefault BUILD_TAG "ghcr.io/kth-sml/svea:latest"
withdefault IMAGE_TAG "$REPOSITORY_NAME"
withdefault IMAGE_PUSH "0"
elif [ "$BUILD_CONFIG" = "base" ]; then
# building for host platform
withdefault BUILD_PLATFORM "$(uname -m)"
withdefault BUILD_CONTEXT "$REPOSITORY_PATH"
withdefault BUILD_FILE "docker/Dockerfile.base"
withdefault BUILD_TAG "ros:$ROSDISTRO"
withdefault IMAGE_TAG "ghcr.io/kth-sml/svea:latest"
withdefault IMAGE_PUSH "0"
elif [ "$BUILD_CONFIG" = "base-amd64" ]; then
# building for x86_64
withdefault BUILD_PLATFORM "linux/amd64"
withdefault BUILD_CONTEXT "$REPOSITORY_PATH"
withdefault BUILD_FILE "docker/Dockerfile.base"
withdefault BUILD_TAG "ros:$ROSDISTRO"
withdefault IMAGE_TAG "ghcr.io/kth-sml/svea:latest"
withdefault IMAGE_PUSH "0"
elif [ "$BUILD_CONFIG" = "base-arm64" ]; then
# building for arm64/aarch64/jetson
withdefault BUILD_PLATFORM "linux/arm64"
withdefault BUILD_CONTEXT "$REPOSITORY_PATH"
withdefault BUILD_FILE "docker/Dockerfile.base"
withdefault BUILD_TAG "ros:$ROSDISTRO"
withdefault IMAGE_TAG "ghcr.io/kth-sml/svea:latest"
withdefault IMAGE_PUSH "0"
elif [ "$BUILD_CONFIG" = "ghcr" ]; then
# building for both amd64 and arm64
withdefault BUILD_PLATFORM "linux/arm64,linux/amd64"
withdefault BUILD_CONTEXT "$REPOSITORY_PATH"
withdefault BUILD_FILE "docker/Dockerfile.base"
withdefault BUILD_TAG "ros:$ROSDISTRO"
withdefault IMAGE_TAG "ghcr.io/kth-sml/svea:latest"
withdefault IMAGE_PUSH "1"
fi

ROSDISTRO="${ROSDISTRO:-"$DEFAULT_ROSDISTRO"}"
WORKSPACE="${WORKSPACE:-"$DEFAULT_WORKSPACE"}"

REPOSITORY_PATH="$(climb entrypoint)"
REPOSITORY_NAME="$(basename "$REPOSITORY_PATH")"

BUILD_PLATFORM="${BUILD_PLATFORM:-"$DEFAULT_BUILD_PLATFORM"}"
BUILD_CONTEXT="${BUILD_CONTEXT:-"$REPOSITORY_PATH"}"
BUILD_FILE="$BUILD_CONTEXT/${BUILD_FILE:-"$DEFAULT_BUILD_FILE"}"
BUILD_TAG="${BUILD_TAG:-"$DEFAULT_BUILD_TAG"}"

IMAGE_PUSH="${IMAGE_PUSH:-"$DEFAULT_IMAGE_PUSH"}"
IMAGE_TAG="${IMAGE_TAG:-"$REPOSITORY_NAME"}"

CONTAINER_NAME="$REPOSITORY_NAME"
SHARED_VOLUME="$BUILD_CONTEXT/src:$WORKSPACE/src"

if [ -n "$DEBUG" ]; then
withdefault CONTAINER_NAME "$REPOSITORY_NAME"
withdefault SHARED_VOLUME "$BUILD_CONTEXT/src:$WORKSPACE/src"

if istrue DEBUG; then
echo ""
echo "ROSDISTRO=$ROSDISTRO"
echo "WORKSPACE=$WORKSPACE"
echo "REPOSITORY_PATH=$REPOSITORY_PATH"
echo "REPOSITORY_NAME=$REPOSITORY_NAME"
echo "BUILD_PLATFORM=$BUILD_PLATFORM"
echo "BUILD_CONTEXT=$BUILD_CONTEXT"
echo "BUILD_FILE=$BUILD_FILE"
echo "BUILD_TAG=$BUILD_TAG"
echo "IMAGE_PUSH=$IMAGE_PUSH"
echo "IMAGE_TAG=$IMAGE_TAG"
echo "CONTAINER_NAME=$CONTAINER_NAME"
echo "SHARED_VOLUME=$SHARED_VOLUME"
echovar BUILD_CONFIG
echo
echovar ROSDISTRO
echovar WORKSPACE
echovar REPOSITORY_PATH
echovar REPOSITORY_NAME
echovar BUILD_PLATFORM
echovar BUILD_CONTEXT
echovar BUILD_FILE
echovar BUILD_TAG
echovar IMAGE_TAG
echovar IMAGE_PUSH
echovar CONTAINER_NAME
echovar SHARED_VOLUME
echo
fi
}

call() {
if istrue DEBUG; then
echo "$@"
else
exec "$@"
fi
}

jetson_release() {
file="/etc/nv_tegra_release"
if [ -f "$file" ]; then
echo "$(index 2 $(cat "$file"))"
fi
}

Expand Down Expand Up @@ -124,6 +151,18 @@ climb() {
return $?
}

# Echo shell variable
# > echovar NAME
echovar() {
eval "echo \"$1=\$$1\""
}

# Set shell variable with default
# > withdefault NAME DEFAULT
withdefault() {
eval "$1=\"\${$1:-\"$2\"}\""
}

# Echo TRUTHY if `istrue NAME` else FALSY
# > ifelse NAME TRUTHY FALSY
ifelse() {
Expand All @@ -133,6 +172,22 @@ ifelse() {
fi
}

# If VALUE equals COND then echo RET, otherwise shift
# and continue with following arguments
# > switch VALUE [[COND RET]...]
switch() {
VALUE="$1"
shift
if [ "$VALUE" = "$1" ]; then
echo "$2"
elif [ "$#" -ge 2 ]; then
shift 2
switch "$VALUE" "$@"
else
echo "$@" # echo nothing or remaining arg
fi
}

# Append ARGS to shell variable with name NAME
# > append LIST_NAME [ARGS...]
append() {
Expand Down
21 changes: 12 additions & 9 deletions util/run
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,22 @@

. "$(dirname "$0")/config.sh"

# Setting default arguments
if [ -z "$*" ]; then
set -- --name "$CONTAINER_NAME" "$IMAGE_TAG"
fi

istrue DEBUG && fn="echo" || fn="exec"
CMD="docker run"
ARGS=""

"$fn" docker run \
append ARGS \
-it \
-e "TERM=xterm-256color" \
-v "/dev:/dev" \
-v "$SHARED_VOLUME" \
--rm \
--network host \
--privileged \
"$@"
--privileged

# These args are replaced if util/build is called with arguments
if [ -z "$*" ]
then append ARGS --name "$CONTAINER_NAME" "$IMAGE_TAG"
else append ARGS "$@"
fi

call $CMD $ARGS

0 comments on commit 64949ac

Please sign in to comment.