diff --git a/package_tool b/package_tool index 358cbd3..2bdbb62 100755 --- a/package_tool +++ b/package_tool @@ -15,7 +15,7 @@ usage() exit_out() { - echo $1 + echo $1 > /dev/stderr exit $2 } @@ -63,10 +63,31 @@ parse_json() platform=$2 if ! command -v jq > /dev/null; then - install_system_pkgs jq + install_system_pkgs jq >&2 # Move stdout to stderr to avoid returning noisy package install fi - packages=$(jq -r ".dependencies.$platform | @csv" $json_file 2> /dev/null) + jq_args="-r --arg platform $platform" + is_empty=$(jq $jq_args '.dependencies | if has($platform) then "0" else 1 end' $json_file) + if [[ "$is_empty" -eq 1 ]]; then + return + fi + + dep_type=$(jq $jq_args '.dependencies[$platform] | if type=="array" then "unversioned" else "versioned" end' $json_file 2> /dev/null) + + if [[ "$dep_type" == "unversioned" ]]; then + packages=$(jq $jq_args ".dependencies.$platform | @csv" $json_file 2> /dev/null) + elif [[ "$dep_type" == "versioned" ]]; then + os_version=$($base_dir/detect_os --os-version) + os_major_version=$($base_dir/detect_os --os-version --major-version) + + for version in $os_version $os_major_version "default"; do + packages=$(jq $jq_args --arg version "$version" '.dependencies[$platform][$version] | @csv' $json_file 2> /dev/null) + + if [[ $? -eq 0 ]]; then + break + fi + done + fi if [[ $? -ne 0 ]]; then echo "WARN: Could not find dependency information for $platform in $json_file, this could be intended behavior" > /dev/stderr @@ -235,7 +256,13 @@ fi if [[ -n "$wrapper_config" ]]; then wrapper_pkgs=$(parse_json $wrapper_config $running_os) + if [[ $? -ne 0 ]]; then + exit_out "Error parsing .dependencies.$running_os in $wrapper_config" 1 + fi wrapper_pip=$(parse_json $wrapper_config pip) + if [[ $? -ne 0 ]]; then + exit_out "Error parsing .dependencies.pip in $wrapper_config" 1 + fi packages=$(append_packages $packages $wrapper_pkgs) pip_packages=$(append_packages $pip_packages $wrapper_pip)