require 'json' module Shipit class DeploySpec module LernaDiscovery LATEST_MAJOR_VERSION = Gem::Version.new('3.0.0') def discover_dependencies_steps discover_lerna_json || super end def discover_lerna_json lerna_install if lerna? end def lerna_install [js_command('install --no-progress'), 'node_modules/.bin/lerna bootstrap'] end def discover_review_checklist discover_lerna_checklist || super end def discover_lerna_checklist if lerna? command = if lerna_lerna >= LATEST_MAJOR_VERSION 'lerna version' else %( lerna publish --skip-npm && git add -A && git push --follow-tags ) end [%( Don't forget version and tag before publishing! You can do this with:
#{command}
)] end end def lerna? lerna_json.exist? end def lerna_json file('lerna.json') end def lerna_config @_lerna_config ||= JSON.parse(lerna_json.read) end def lerna_lerna Gem::Version.new(lerna_config['lerna']) end def lerna_version lerna_config['version'] end def discover_lerna_packages publish_lerna_packages if lerna? end def discover_deploy_steps discover_lerna_packages || super end def publish_lerna_packages return publish_independent_packages if lerna_version == 'independent' publish_fixed_version_packages end def publish_independent_packages [ 'assert-lerna-independent-version-tags', 'publish-lerna-independent-packages', ] end def publish_fixed_version_packages check_tags = 'assert-lerna-fixed-version-tag' version = lerna_version publish = if lerna_lerna >= LATEST_MAJOR_VERSION %W( node_modules/.bin/lerna publish from-git --yes --dist-tag #{dist_tag(version)} ).join(" ") else # `yarn publish` requires user input, so always use npm. %W( node_modules/.bin/lerna publish --yes --skip-git --repo-version #{version} --force-publish=* --npm-tag #{dist_tag(version)} --npm-client=npm --skip-npm=false ).join(" ") end [check_tags, publish] end end end end