From: Jan Kiszka <[email protected]>

Will allow to add a kconfig menu.

Signed-off-by: Jan Kiszka <[email protected]>
---
 .gitlab-ci.yml |   2 +-
 kas-container  | 134 +++++++++++++++++++++++++++++++++++++++----------
 2 files changed, 109 insertions(+), 27 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1f4c80d..354fd1f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,4 @@
-image: ghcr.io/siemens/kas/kas-isar:2.4
+image: ghcr.io/siemens/kas/kas-isar:2.6.2

 variables:
   GIT_STRATEGY: clone
diff --git a/kas-container b/kas-container
index b149c1c..d0df47b 100755
--- a/kas-container
+++ b/kas-container
@@ -29,12 +29,18 @@ set -e

 usage()
 {
-       printf "%b" "Usage: $0 [OPTIONS] { build | shell } [KASOPTIONS] 
KASFILE\n"
+       printf "%b" "Usage: $0 [OPTIONS] { build | checkout | shell } 
[KASOPTIONS] [KASFILE]\n"
+       printf "%b" "       $0 [OPTIONS] for-all-repos [KASOPTIONS] [KASFILE] 
COMMAND\n"
        printf "%b" "       $0 [OPTIONS] clean\n"
+       printf "%b" "       $0 [OPTIONS] menu [KCONFIG]\n"
        printf "%b" "\nPositional arguments:\n"
        printf "%b" "build\t\t\tCheck out repositories and build target.\n"
+       printf "%b" "checkout\t\tCheck out repositories but do not build.\n"
        printf "%b" "shell\t\t\tRun a shell in the build environment.\n"
+       printf "%b" "for-all-repos\t\tRun specified command in each 
repository.\n"
        printf "%b" "clean\t\t\tClean build artifacts, keep downloads.\n"
+       printf "%b" "menu\t\t\tProvide configuration menu and trigger " \
+                   "configured build.\n"
        printf "%b" "\nOptional arguments:\n"
        printf "%b" "--isar\t\t\tUse kas-isar container to build Isar image.\n"
        printf "%b" "--with-loop-dev            Pass a loop device to the " \
@@ -46,12 +52,19 @@ usage()
        printf "%b" "--docker-args\t\tSame as --runtime-args (deprecated).\n"
        printf "%b" "-d\t\t\tPrint debug output.\n"
        printf "%b" "-v\t\t\tSame as -d (deprecated).\n"
+       printf "%b" "--version\t\tprint program version.\n"
        printf "%b" "--ssh-dir\t\tDirectory containing SSH configurations.\n"
        printf "%b" "\t\t\tAvoid \$HOME/.ssh unless you fully trust the " \
                    "container.\n"
        printf "%b" "--aws-dir\t\tDirectory containing AWScli configuration.\n"
+       printf "%b" "--git-credential-store\tFile path to the git credential " \
+                   "store\n"
        printf "%b" "--no-proxy-from-env\tDo not inherit proxy settings from " \
                    "environment.\n"
+       printf "%b" "--repo-ro\t\tMount current repository read-only\n" \
+                   "\t\t\t(default for build command)\n"
+       printf "%b" "--repo-rw\t\tMount current repository writeable\n" \
+                   "\t\t\t(default for shell command)\n"
        printf "%b" "\n"
        printf "%b" "You can force the use of podman over docker using " \
                    "KAS_CONTAINER_ENGINE=podman.\n"
@@ -75,7 +88,7 @@ enable_isar_mode() {
        fi
 }

-KAS_IMAGE_VERSION_DEFAULT="2.4"
+KAS_IMAGE_VERSION_DEFAULT="2.6.2"
 KAS_CONTAINER_IMAGE_PATH_DEFAULT="ghcr.io/siemens/kas"
 KAS_CONTAINER_IMAGE_NAME_DEFAULT="kas"

@@ -83,14 +96,12 @@ set_container_image_var() {
        KAS_IMAGE_VERSION="${KAS_IMAGE_VERSION:-${KAS_IMAGE_VERSION_DEFAULT}}"
        
KAS_CONTAINER_IMAGE_NAME="${KAS_CONTAINER_IMAGE_NAME:-${KAS_CONTAINER_IMAGE_NAME_DEFAULT}}"
        
KAS_CONTAINER_IMAGE_PATH="${KAS_CONTAINER_IMAGE_PATH:-${KAS_CONTAINER_IMAGE_PATH_DEFAULT}}"
-       
KAS_CONTAINER_IMAGE="${KAS_CONTAINER_IMAGE_PATH}/${KAS_CONTAINER_IMAGE_NAME}:${KAS_IMAGE_VERSION}"
+       
KAS_CONTAINER_IMAGE_DEFAULT="${KAS_CONTAINER_IMAGE_PATH}/${KAS_CONTAINER_IMAGE_NAME}:${KAS_IMAGE_VERSION}"
+       
KAS_CONTAINER_IMAGE="${KAS_CONTAINER_IMAGE:-${KAS_CONTAINER_IMAGE_DEFAULT}}"
 }

-if [ -n "${KAS_WORK_DIR}" ]; then
-       KAS_WORK_DIR=$(readlink -f "${KAS_WORK_DIR}")
-else
-       KAS_WORK_DIR="$(pwd)"
-fi
+KAS_WORK_DIR=$(readlink -f "${KAS_WORK_DIR:-$(pwd)}")
+KAS_BUILD_DIR=$(readlink -f "${KAS_BUILD_DIR:-${KAS_WORK_DIR}/build}")

 KAS_CONTAINER_ENGINE="${KAS_CONTAINER_ENGINE:-${KAS_DOCKER_ENGINE}}"
 if [ -z "${KAS_CONTAINER_ENGINE}" ]; then
@@ -164,35 +175,58 @@ while [ $# -gt 0 ]; do
                KAS_AWS_DIR="$2"
                shift 2
                ;;
+       --git-credential-store)
+               [ $# -gt 2 ] || usage
+               KAS_GIT_CREDENTIAL_STORE="$2"
+               shift 2
+               ;;
        --no-proxy-from-env)
                KAS_NO_PROXY_FROM_ENV=1
                shift 1
                ;;
+       --repo-ro)
+               KAS_REPO_MOUNT_OPT="ro"
+               shift 1
+               ;;
+       --repo-rw)
+               KAS_REPO_MOUNT_OPT="rw"
+               shift 1
+               ;;
        -v | -d)
                KAS_VERBOSE=1
                KAS_OPTIONS_DIRECT="${KAS_OPTIONS_DIRECT} -d"
                shift 1
                ;;
+       --version)
+               echo "$(basename "$0") $KAS_IMAGE_VERSION_DEFAULT"
+               exit 0
+               ;;
        --*)
                usage
                ;;
        clean)
                [ $# -eq 1 ] || usage
-               KAS_CLEAN_DIR=build/tmp
                if [ -n "${KAS_ISAR_ARGS}" ]; then
                        set_container_image_var
                        # SC2086: Double quote to prevent globbing and word 
splitting.
                        # shellcheck disable=2086
-                       trace ${KAS_CONTAINER_COMMAND} run -v 
"${KAS_WORK_DIR}":/work:rw \
-                                        --workdir=/work --rm ${KAS_ISAR_ARGS} \
+                       trace ${KAS_CONTAINER_COMMAND} run -v 
"${KAS_BUILD_DIR}":/build:rw \
+                                        --workdir=/build --rm ${KAS_ISAR_ARGS} 
\
                                         ${KAS_CONTAINER_IMAGE} \
-                                        sudo rm -rf ${KAS_CLEAN_DIR}
+                                        sudo rm -rf tmp
                else
-                       trace rm -rf "${KAS_WORK_DIR}/${KAS_CLEAN_DIR}"
+                       trace rm -rf "${KAS_BUILD_DIR}/tmp"
                fi
                exit 0
                ;;
-       build|shell)
+       shell)
+               KAS_REPO_MOUNT_OPT_DEFAULT="rw"
+               KAS_CMD=$1
+               shift 1
+               break
+               ;;
+       build|checkout|for-all-repos|menu)
+               KAS_REPO_MOUNT_OPT_DEFAULT="ro"
                KAS_CMD=$1
                shift 1
                break
@@ -207,7 +241,7 @@ done

 KAS_EXTRA_BITBAKE_ARGS=0

-# parse kas sub-command (build or shell) options
+# parse kas sub-command options
 while [ $# -gt 0 ] && [ $KAS_EXTRA_BITBAKE_ARGS -eq 0 ]; do
        case "$1" in
        -h|--help)
@@ -249,28 +283,53 @@ while [ $# -gt 0 ] && [ $KAS_EXTRA_BITBAKE_ARGS -eq 0 ]; 
do
                        fi
                done
                shift 1
+               if [ "$KAS_CMD" = "for-all-repos" ]; then
+                       KAS_REPO_CMD="$1"
+                       shift 1
+               fi
                ;;
        esac
 done

-[ -n "${KAS_FIRST_FILE}" ] || usage
+if [ -n "${KAS_FIRST_FILE}" ]; then
+       KAS_FILE_DIR="$(dirname "${KAS_FIRST_FILE}")"
+       KAS_REPO_DIR=$(git -C "${KAS_FILE_DIR}" rev-parse --show-toplevel 
2>/dev/null) \
+               || KAS_REPO_DIR=$(hg --cwd "${KAS_FILE_DIR}" root 2>/dev/null) \
+               || KAS_REPO_DIR=${KAS_FILE_DIR}
+else
+       KAS_REPO_DIR=$(pwd)
+fi
+
+if [ "${KAS_CMD}" = "menu" ]; then
+       if [ -z "${KAS_FIRST_FILE}" ]; then
+               KAS_FIRST_FILE="Kconfig"
+       fi
+
+       BUILD_SYSTEM=$(tr '\n' '\f' 2>/dev/null < ${KAS_FIRST_FILE} | \
+               sed -e 's/\(.*\fconfig KAS_BUILD_SYSTEM\f\(.*\)\|.*\)/\2/' \
+                   -e 's/\f\([[:alpha:]].*\|$\)//' \
+                   -e 's/.*default \"\(.*\)\".*/\1/')
+else
+       if [ -z "${KAS_FIRST_FILE}" ]; then
+               KAS_FIRST_FILE="${KAS_WORK_DIR}/.config.yaml"
+       fi
+
+       BUILD_SYSTEM=$(grep -e "^build_system: " "${KAS_FIRST_FILE}" 
2>/dev/null | \
+               sed 's/build_system:[ ]\+//')
+fi

-BUILD_SYSTEM=$(grep -e "^build_system: " "${KAS_FIRST_FILE}" 2>/dev/null | sed 
's/build_system:[ ]\+//')
 if [ "${BUILD_SYSTEM}" = "isar" ]; then
        enable_isar_mode
 fi

 set_container_image_var

-KAS_FILE_DIR="$(dirname "${KAS_FIRST_FILE}")"
+KAS_REPO_MOUNT_OPT="${KAS_REPO_MOUNT_OPT:-${KAS_REPO_MOUNT_OPT_DEFAULT}}"

-KAS_REPO_DIR=$(git -C "${KAS_FILE_DIR}" rev-parse --show-toplevel 2>/dev/null) 
\
-       || KAS_REPO_DIR=$(hg --cwd "${KAS_FILE_DIR}" root 2>/dev/null) \
-       || KAS_REPO_DIR=${KAS_FILE_DIR}
-
-KAS_FILES=/repo/"$(echo "${KAS_FILES}" | sed 
's|'"${KAS_REPO_DIR}"'/||g;s|:|:/repo/|g')"
+KAS_FILES="$(echo "${KAS_FILES}" | sed 's|'"${KAS_REPO_DIR}"'/|/repo/|g')"

 trace mkdir -p "${KAS_WORK_DIR}"
+trace mkdir -p "${KAS_BUILD_DIR}"

 if [ "$(id -u)" -eq 0 ] && [ "${KAS_ALLOW_ROOT}" != "yes" ] ; then
        echo "Error: Running as root - may break certain recipes."
@@ -279,8 +338,11 @@ if [ "$(id -u)" -eq 0 ] && [ "${KAS_ALLOW_ROOT}" != "yes" 
] ; then
        exit 1
 fi

-set -- "$@" -v "${KAS_REPO_DIR}":/repo:ro \
-       -v "${KAS_WORK_DIR}":/work:rw --workdir=/work \
+set -- "$@" -v "${KAS_REPO_DIR}":/repo:${KAS_REPO_MOUNT_OPT} \
+       -v "${KAS_WORK_DIR}":/work:rw -e KAS_WORK_DIR=/work \
+       -v "${KAS_BUILD_DIR}":/build:rw \
+       --workdir=/repo \
+       -e KAS_BUILD_DIR=/build \
        -e USER_ID="$(id -u)" -e GROUP_ID="$(id -g)" --rm

 if [ -n "${KAS_SSH_DIR}" ] ; then
@@ -301,6 +363,23 @@ if [ -n "${KAS_AWS_DIR}" ] ; then
                -e 
AWS_SHARED_CREDENTIALS_FILE="${AWS_SHARED_CREDENTIALS_FILE:-/etc/skel/.aws/credentials}"
 fi

+KAS_GIT_CREDENTIAL_HELPER_DEFAULT=""
+
+if [ -n "${KAS_GIT_CREDENTIAL_STORE}" ] ; then
+       if [ ! -f "${KAS_GIT_CREDENTIAL_STORE}" ]; then
+               echo "Passed KAS_GIT_CREDENTIAL_STORE '${KAS_AWS_DIR}' is not a 
file"
+               exit 1
+       fi
+       KAS_GIT_CREDENTIAL_HELPER_DEFAULT="store 
--file=/etc/skel/.git-credentials"
+       set -- "$@" -v "$(readlink -f 
"${KAS_GIT_CREDENTIAL_STORE}")":/etc/skel/.git-credentials:ro
+fi
+
+GIT_CREDENTIAL_HELPER="${GIT_CREDENTIAL_HELPER:-${KAS_GIT_CREDENTIAL_HELPER_DEFAULT}}"
+
+if [ -n "${GIT_CREDENTIAL_HELPER}" ] ; then
+       set -- "$@" -e GIT_CREDENTIAL_HELPER="${GIT_CREDENTIAL_HELPER}"
+fi
+
 if [ -t 1 ]; then
        set -- "$@" -t -i
 fi
@@ -322,7 +401,7 @@ fi
 if [ -n "${KAS_REPO_REF_DIR}" ]; then
        set -- "$@" \
                -v "$(readlink -f "${KAS_REPO_REF_DIR}")":/repo-ref:ro \
-               -e KAS_REPO_REF_DIR="${KAS_REPO_REF_DIR}"
+               -e KAS_REPO_REF_DIR=/repo-ref
 fi

 for var in TERM KAS_DISTRO KAS_MACHINE KAS_TARGET KAS_TASK \
@@ -360,6 +439,9 @@ fi
 # SC2086: Double quote to prevent globbing and word splitting.
 # shellcheck disable=2086
 set -- "$@" ${KAS_FILES}
+if [ "$KAS_CMD" = "for-all-repos" ]; then
+       set -- "$@" "${KAS_REPO_CMD}"
+fi

 # rotate any extra bitbake args from the front to the end of the argument list
 while [ $KAS_EXTRA_BITBAKE_ARGS -gt 0 ]; do
--
2.31.1

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jailhouse-dev/28b675f4baa945175db90bf35aa065de54a2f4aa.1637430993.git.jan.kiszka%40web.de.

Reply via email to