diff --git a/container-build/cerc-builder-js/build-npm-package-local-dependencies.sh b/container-build/cerc-builder-js/build-npm-package-local-dependencies.sh index 3981e238..cb2b52a4 100755 --- a/container-build/cerc-builder-js/build-npm-package-local-dependencies.sh +++ b/container-build/cerc-builder-js/build-npm-package-local-dependencies.sh @@ -26,7 +26,7 @@ echo "Fixing up dependencies" for package in "${dependencies_from_scope[@]}" do echo "Fixing up package ${package}" - yarn-local-registry-fixup.sh $package + yarn-local-registry-fixup.sh $package ${local_npm_registry_url} done echo "Running build" build-npm-package.sh ${local_npm_registry_url} ${package_publish_version} diff --git a/container-build/cerc-builder-js/yarn-local-registry-fixup.sh b/container-build/cerc-builder-js/yarn-local-registry-fixup.sh index 13264a23..e6d9b793 100755 --- a/container-build/cerc-builder-js/yarn-local-registry-fixup.sh +++ b/container-build/cerc-builder-js/yarn-local-registry-fixup.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Usage: yarn-local-registry-fixup.sh +# Usage: yarn-local-registry-fixup.sh # Assumes package.json and yarn.lock are in the cwd # The purpose of this script is to take a project cloned from git # and "fixup" its yarn.lock file such that specified dependency @@ -10,16 +10,24 @@ if [ -n "$CERC_SCRIPT_DEBUG" ]; then set -x fi -if [[ $# -ne 1 ]]; then +if [[ $# -ne 2 ]]; then echo "Illegal number of parameters" >&2 exit 1 fi target_package=$1 +local_npm_registry_url=$2 +# TODO: use jq rather than sed here: versioned_target_package=$(grep ${target_package} package.json | sed -e 's#[[:space:]]\{1,\}\"\('${target_package}'\)\":[[:space:]]\{1,\}\"\(.*\)\",#\1@\2#' ) # Use yarn info to get URL checksums etc from the new registry yarn_info_output=$(yarn info --json $versioned_target_package 2>/dev/null) # Code below parses out the values we need package_tarball=$(echo $yarn_info_output | jq -r .data.dist.tarball) +# When running inside a container, the registry can return a URL with the wrong host name due to proxying +# so we need to check if that has happened and fix the URL if so. +if ! [[ "${package_tarball}" =~ ^${local_npm_registry_url}.* ]]; then + # HACK: I've hard-wired the host names below. Replace with proper implementation + package_tarball=$( echo ${package_tarball} | sed -e 's/localhost/host.docker.internal/g' ) +fi package_integrity=$(echo $yarn_info_output | jq -r .data.dist.integrity) package_shasum=$(echo $yarn_info_output | jq -r .data.dist.shasum) package_resolved=${package_tarball}#${package_shasum} @@ -33,5 +41,6 @@ if [ -n "$CERC_SCRIPT_VERBOSE" ]; then echo "Resolved: ${package_resolved}" fi # Use magic sed regex to replace the values in yarn.lock +# Note: yarn.lock is not json so we can not use jq for this sed -i -e '/^\"'${escaped_target_package}'.*\":$/ , /^\".*$/ s/^\([[:space:]]\{1,\}resolved \).*$/\1'\"${escaped_package_resolved}\"'/' yarn.lock sed -i -e '/^\"'${escaped_target_package}'.*\":$/ , /^\".*$/ s/^\([[:space:]]\{1,\}integrity \).*$/\1'${package_integrity}'/' yarn.lock