diff options
| author | Nick Brassel <[email protected]> | 2024-06-24 12:29:30 +1000 | 
|---|---|---|
| committer | GitHub <[email protected]> | 2024-06-24 12:29:30 +1000 | 
| commit | 03e688e91f28d73416ada41c6db209c04d18cba7 (patch) | |
| tree | 616d15901ba5e729d9c12d0c0f44e2ab29b4bf32 | |
| parent | d5e0562a7043bf372c3f349420dd765ee3a9653d (diff) | |
| download | qmk_firmware-03e688e91f28d73416ada41c6db209c04d18cba7.tar.gz qmk_firmware-03e688e91f28d73416ada41c6db209c04d18cba7.zip | |
Add support for userspace to docker build commands. (#23988)0.25.9
| -rw-r--r-- | lib/python/qmk/cli/__init__.py | 1 | ||||
| -rwxr-xr-x | lib/python/qmk/cli/userspace/path.py | 8 | ||||
| -rw-r--r-- | lib/python/qmk/tests/test_cli_commands.py | 2 | ||||
| -rwxr-xr-x | util/docker_build.sh | 84 | ||||
| -rwxr-xr-x | util/docker_cmd.sh | 30 | 
5 files changed, 35 insertions, 90 deletions
| diff --git a/lib/python/qmk/cli/__init__.py b/lib/python/qmk/cli/__init__.py index 6d05a5fc21..b504aa5f8c 100644 --- a/lib/python/qmk/cli/__init__.py +++ b/lib/python/qmk/cli/__init__.py @@ -86,6 +86,7 @@ subcommands = [      'qmk.cli.userspace.compile',      'qmk.cli.userspace.doctor',      'qmk.cli.userspace.list', +    'qmk.cli.userspace.path',      'qmk.cli.userspace.remove',      'qmk.cli.via2json',  ] diff --git a/lib/python/qmk/cli/userspace/path.py b/lib/python/qmk/cli/userspace/path.py new file mode 100755 index 0000000000..df4648e8c7 --- /dev/null +++ b/lib/python/qmk/cli/userspace/path.py @@ -0,0 +1,8 @@ +from milc import cli +from qmk.constants import QMK_USERSPACE + + [email protected]('Detected path to QMK Userspace.', hidden=True) +def userspace_path(cli): +    print(QMK_USERSPACE) +    return diff --git a/lib/python/qmk/tests/test_cli_commands.py b/lib/python/qmk/tests/test_cli_commands.py index 1725e3ea79..8b50d1c340 100644 --- a/lib/python/qmk/tests/test_cli_commands.py +++ b/lib/python/qmk/tests/test_cli_commands.py @@ -249,7 +249,7 @@ def test_c2json_nocpp_stdin():  def test_clean():      result = check_subcommand('clean', '-a')      check_returncode(result) -    assert result.stdout.count('done') == 2 +    assert (result.stdout.count('done') == 2 and 'userspace' not in result.stdout) or (result.stdout.count('done') == 3 and 'userspace' in result.stdout)  def test_generate_api(): diff --git a/util/docker_build.sh b/util/docker_build.sh index 828b5751af..2234fc96f6 100755 --- a/util/docker_build.sh +++ b/util/docker_build.sh @@ -1,85 +1,3 @@  #!/bin/sh -# NOTE: This script uses tabs for indentation -errcho() { -	echo "$@" >&2 -} - -USAGE="Usage: $0 [keyboard[:keymap[:target]]]" - -# Check preconditions -for arg; do -	if [ "$arg" = "--help" ]; then -		echo "$USAGE" -		exit 0 -	fi -done -if [ $# -gt 1 ]; then -	errcho "$USAGE" -	exit 1 -fi - -# Allow $RUNTIME to be overridden by the user as an environment variable -# Else check if either podman or docker exit and set them as runtime -# if none are found error out -if [ -z "$RUNTIME" ]; then -	if command -v podman >/dev/null 2>&1; then -		RUNTIME="podman" -	elif command -v docker >/dev/null 2>&1; then -		RUNTIME="docker" -	else -		errcho "Error: no compatible container runtime found." -		errcho "Either podman or docker are required." -		errcho "See https://podman.io/getting-started/installation" -		errcho "or https://docs.docker.com/install/#supported-platforms" -		errcho "for installation instructions." -		exit 2 -	fi -fi - - -# Determine arguments -if [ $# -eq 0 ]; then -	printf "keyboard=" && read -r keyboard -	[ -n "$keyboard" ] && printf "keymap=" && read -r keymap -	[ -n "$keymap"   ] && printf "target=" && read -r target -else -	IFS=':' read -r keyboard keymap target x <<-EOF -	$1 -	EOF -	if [ -n "$x" ]; then -		errcho "$USAGE" -		exit 1 -	fi -fi -if [ -z "$keyboard" ]; then -	keyboard=all -fi -if [ -n "$target" ]; then -	# IF we are using docker on non Linux and docker-machine isn't working print an error -	# ELSE set usb_args -	if [ ! "$(uname)" = "Linux" ] && [ "$RUNTIME" = "docker" ] && ! docker-machine active >/dev/null 2>&1; then -		errcho "Error: target requires docker-machine to work on your platform" -		errcho "See http://gw.tnode.com/docker/docker-machine-with-usb-support-on-windows-macos" -		errcho "Consider flashing with QMK Toolbox (https://github.com/qmk/qmk_toolbox) instead" -		exit 3 -	else -		usb_args="--privileged -v /dev:/dev" -	fi -fi -dir=$(pwd -W 2>/dev/null) || dir=$PWD  # Use Windows path if on Windows - -if [ "$RUNTIME" = "docker" ]; then -	uid_arg="--user $(id -u):$(id -g)" -fi - -# Run container and build firmware -"$RUNTIME" run --rm -it $usb_args \ -	$uid_arg \ -	-w /qmk_firmware \ -	-v "$dir":/qmk_firmware \ -	-e ALT_GET_KEYBOARDS=true \ -	-e SKIP_GIT="$SKIP_GIT" \ -	-e MAKEFLAGS="$MAKEFLAGS" \ -	ghcr.io/qmk/qmk_cli \ -	make "$keyboard${keymap:+:$keymap}${target:+:$target}" +./util/docker_cmd.sh make "$@" diff --git a/util/docker_cmd.sh b/util/docker_cmd.sh index 4a82890603..18725db068 100755 --- a/util/docker_cmd.sh +++ b/util/docker_cmd.sh @@ -1,4 +1,5 @@  #!/bin/sh +# vim: set ft=sh ts=4 sw=4 noexpandtab  # NOTE: This script uses tabs for indentation  errcho() { @@ -37,13 +38,26 @@ fi  # IF we are using docker on non Linux and docker-machine isn't working print an error  # ELSE set usb_args  if [ ! "$(uname)" = "Linux" ] && [ "$RUNTIME" = "docker" ] && ! docker-machine active >/dev/null 2>&1; then -    errcho "Error: target requires docker-machine to work on your platform" -    errcho "See http://gw.tnode.com/docker/docker-machine-with-usb-support-on-windows-macos" -    exit 3 +	errcho "Error: target requires docker-machine to work on your platform" +	errcho "See http://gw.tnode.com/docker/docker-machine-with-usb-support-on-windows-macos" +	exit 3  else -    usb_args="--privileged -v /dev:/dev" +	usb_args="--privileged -v /dev:/dev" +fi + +qmk_firmware_dir=$(pwd -W 2>/dev/null) || qmk_firmware_dir=$PWD  # Use Windows path if on Windows +qmk_userspace_dir="" +userspace_docker_args="" + +if [ -n "$QMK_USERSPACE" ] && [ -e "$QMK_USERSPACE/qmk.json" ]; then +	qmk_userspace_dir=$(cd "$QMK_USERSPACE" && pwd -W 2>/dev/null) || qmk_userspace_dir=$QMK_USERSPACE  # Use Windows path if on Windows +elif [ -n "$(which qmk 2>/dev/null)" ] && [ -n "$(qmk userspace-path)" ]; then +	qmk_userspace_dir=$(cd "$(qmk userspace-path)" && pwd -W 2>/dev/null) || qmk_userspace_dir=$(qmk userspace-path)  # Use Windows path if on Windows +fi + +if [ -n "$qmk_userspace_dir" ]; then +	userspace_docker_args="-v $qmk_userspace_dir:/qmk_userspace:z -e QMK_USERSPACE=/qmk_userspace"  fi -dir=$(pwd -W 2>/dev/null) || dir=$PWD  # Use Windows path if on Windows  if [ "$RUNTIME" = "docker" ]; then  	uid_arg="--user $(id -u):$(id -g)" @@ -54,6 +68,10 @@ fi  	$usb_args \  	$uid_arg \  	-w /qmk_firmware \ -	-v "$dir":/qmk_firmware \ +	-v "$qmk_firmware_dir":/qmk_firmware:z \ +	$userspace_docker_args \ +	-e SKIP_GIT="$SKIP_GIT" \ +	-e SKIP_VERSION="$SKIP_VERSION" \ +	-e MAKEFLAGS="$MAKEFLAGS" \  	ghcr.io/qmk/qmk_cli \  	"$@" | 
