diff --git a/app/build_npms.py b/app/build_npms.py index 877916be..f3883c68 100644 --- a/app/build_npms.py +++ b/app/build_npms.py @@ -33,8 +33,10 @@ builder_js_image_name = "cerc/builder-js:local" @click.command() @click.option('--include', help="only build these packages") @click.option('--exclude', help="don\'t build these packages") +@click.option("--force-rebuild", is_flag=True, default=False, help="Override existing target package version check -- force rebuild") +@click.option("--extra-build-args", help="Supply extra arguments to build") @click.pass_context -def command(ctx, include, exclude): +def command(ctx, include, exclude, force_rebuild, extra_build_args): '''build the set of npm packages required for a complete stack''' quiet = ctx.obj.quiet @@ -121,6 +123,8 @@ def command(ctx, include, exclude): # but that isn't available in Python 3.8 (default in Ubuntu 20) so for now we use dict.update: envs = {"CERC_NPM_AUTH_TOKEN": npm_registry_url_token} envs.update({"CERC_SCRIPT_DEBUG": "true"} if debug else {}) + envs.update({"CERC_FORCE_REBUILD": "true"} if force_rebuild else {}) + envs.update({"CERC_CONTAINER_EXTRA_BUILD_ARGS": extra_build_args} if extra_build_args else {}) try: docker.run(builder_js_image_name, remove=True, diff --git a/app/data/container-build/cerc-builder-js/build-npm-package.sh b/app/data/container-build/cerc-builder-js/build-npm-package.sh index c8c1e810..207a41f3 100755 --- a/app/data/container-build/cerc-builder-js/build-npm-package.sh +++ b/app/data/container-build/cerc-builder-js/build-npm-package.sh @@ -24,12 +24,21 @@ package_name=$( cat package.json | jq -r .name ) local_npm_registry_url=$1 npm config set @cerc-io:registry ${local_npm_registry_url} npm config set @lirewine:registry ${local_npm_registry_url} -npm config set -- ${local_npm_registry_url}:_authToken ${CERC_NPM_AUTH_TOKEN} +# Workaround bug in npm unpublish where it needs the url to be of the form // and not http:// +local_npm_registry_url_fixed=$( echo ${local_npm_registry_url} | sed -e 's/^http[s]\{0,1\}://') +npm config set -- ${local_npm_registry_url_fixed}:_authToken ${CERC_NPM_AUTH_TOKEN} # First check if the version of this package we're trying to build already exists in the registry package_exists=$( yarn info --json ${package_name}@${package_publish_version} 2>/dev/null | jq -r .data.dist.tarball ) if [[ ! -z "$package_exists" && "$package_exists" != "null" ]]; then - echo "${package_publish_version} of ${package_name} already exists in the registry, skipping build" - exit 0 + echo "${package_publish_version} of ${package_name} already exists in the registry + if [[ ${CERC_FORCE_REBUILD} == "true" ]]; then + # Attempt to unpublish the existing package + echo "unpublishing existing package version since force rebuild is enabled" + npm unpublish ${package_name}@${package_publish_version} + else + echo "skipping build since target version already exists" + exit 0 + fi fi echo "Build and publish ${package_name} version ${package_publish_version}" yarn install