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.
