Specify registry url only if local publish attempted

This commit is contained in:
Leonid Logvinov
2018-07-24 21:39:31 +02:00
parent dbc798596b
commit c40b3dea6c
6 changed files with 42 additions and 36 deletions

View File

@@ -4,11 +4,9 @@
"version": "independent", "version": "independent",
"command": { "command": {
"publish": { "publish": {
"registry": "http://localhost:4873/",
"ignoreChanges": ["test/**/*", "*.md", "scripts", "lib", "tslint.json", "tsconfig.json"] "ignoreChanges": ["test/**/*", "*.md", "scripts", "lib", "tslint.json", "tsconfig.json"]
} }
}, },
"npmClient": "yarn", "npmClient": "yarn",
"useWorkspaces": true, "useWorkspaces": true
"registry": "http://localhost:4873"
} }

View File

@@ -14,10 +14,9 @@
"report_coverage": "lcov-result-merger 'packages/*/coverage/lcov.info' | coveralls", "report_coverage": "lcov-result-merger 'packages/*/coverage/lcov.info' | coveralls",
"test:installation": "node ./packages/monorepo-scripts/lib/test_installation.js", "test:installation": "node ./packages/monorepo-scripts/lib/test_installation.js",
"run:publish": "run-s install:all build:monorepo_scripts script:prepublish_checks script:publish", "run:publish": "run-s install:all build:monorepo_scripts script:prepublish_checks script:publish",
"run:publish:local": "run-s install:all build:monorepo_scripts script:prepublish_checks script:publish:local", "run:publish:local": "IS_LOCAL_PUBLISH=true yarn run:publish",
"script:prepublish_checks": "node ./packages/monorepo-scripts/lib/prepublish_checks.js", "script:prepublish_checks": "node ./packages/monorepo-scripts/lib/prepublish_checks.js",
"script:publish": "node ./packages/monorepo-scripts/lib/publish.js", "script:publish": "node ./packages/monorepo-scripts/lib/publish.js",
"script:publish:local": "IS_LOCAL_PUBLISH=true yarn script:publish",
"install:all": "yarn install", "install:all": "yarn install",
"wsrun": "wsrun", "wsrun": "wsrun",
"lerna:run": "lerna run", "lerna:run": "lerna run",

View File

@@ -6,6 +6,7 @@ import * as path from 'path';
import * as publishRelease from 'publish-release'; import * as publishRelease from 'publish-release';
import { constants } from './constants'; import { constants } from './constants';
import { configs } from './utils/configs';
import { utils } from './utils/utils'; import { utils } from './utils/utils';
const publishReleaseAsync = promisify(publishRelease); const publishReleaseAsync = promisify(publishRelease);
@@ -25,8 +26,6 @@ export interface DocPublishConfigs {
s3StagingBucketPath: string; s3StagingBucketPath: string;
} }
const IS_LOCAL_PUBLISH = process.env.IS_LOCAL_PUBLISH === 'true';
export const postpublishUtils = { export const postpublishUtils = {
generateConfig(packageJSON: any, tsConfigJSON: any, cwd: string): PostpublishConfigs { generateConfig(packageJSON: any, tsConfigJSON: any, cwd: string): PostpublishConfigs {
if (_.isUndefined(packageJSON.name)) { if (_.isUndefined(packageJSON.name)) {
@@ -36,7 +35,7 @@ export const postpublishUtils = {
throw new Error('version field required in package.json. Cannot publish release notes to Github.'); throw new Error('version field required in package.json. Cannot publish release notes to Github.');
} }
const postpublishConfig = _.get(packageJSON, 'config.postpublish', {}); const postpublishConfig = _.get(packageJSON, 'config.postpublish', {});
const configs: PostpublishConfigs = { const postpublishConfigs: PostpublishConfigs = {
cwd, cwd,
packageName: packageJSON.name, packageName: packageJSON.name,
version: packageJSON.version, version: packageJSON.version,
@@ -50,47 +49,47 @@ export const postpublishUtils = {
s3StagingBucketPath: _.get(postpublishConfig, 'docPublishConfigs.s3StagingBucketPath'), s3StagingBucketPath: _.get(postpublishConfig, 'docPublishConfigs.s3StagingBucketPath'),
}, },
}; };
return configs; return postpublishConfigs;
}, },
async runAsync(packageJSON: any, tsConfigJSON: any, cwd: string): Promise<void> { async runAsync(packageJSON: any, tsConfigJSON: any, cwd: string): Promise<void> {
if (IS_LOCAL_PUBLISH) { if (configs.IS_LOCAL_PUBLISH) {
return; return;
} }
const configs = postpublishUtils.generateConfig(packageJSON, tsConfigJSON, cwd); const postpublishConfigs = postpublishUtils.generateConfig(packageJSON, tsConfigJSON, cwd);
await postpublishUtils.publishReleaseNotesAsync( await postpublishUtils.publishReleaseNotesAsync(
configs.cwd, postpublishConfigs.cwd,
configs.packageName, postpublishConfigs.packageName,
configs.version, postpublishConfigs.version,
configs.assets, postpublishConfigs.assets,
); );
if ( if (
!_.isUndefined(configs.docPublishConfigs.s3BucketPath) || !_.isUndefined(postpublishConfigs.docPublishConfigs.s3BucketPath) ||
!_.isUndefined(configs.docPublishConfigs.s3StagingBucketPath) !_.isUndefined(postpublishConfigs.docPublishConfigs.s3StagingBucketPath)
) { ) {
utils.log('POSTPUBLISH: Release successful, generating docs...'); utils.log('POSTPUBLISH: Release successful, generating docs...');
await postpublishUtils.generateAndUploadDocsAsync( await postpublishUtils.generateAndUploadDocsAsync(
configs.cwd, postpublishConfigs.cwd,
configs.docPublishConfigs.fileIncludes, postpublishConfigs.docPublishConfigs.fileIncludes,
configs.version, postpublishConfigs.version,
configs.docPublishConfigs.s3BucketPath, postpublishConfigs.docPublishConfigs.s3BucketPath,
); );
} else { } else {
utils.log(`POSTPUBLISH: No S3Bucket config found for ${packageJSON.name}. Skipping doc JSON generation.`); utils.log(`POSTPUBLISH: No S3Bucket config found for ${packageJSON.name}. Skipping doc JSON generation.`);
} }
}, },
async publishDocsToStagingAsync(packageJSON: any, tsConfigJSON: any, cwd: string): Promise<void> { async publishDocsToStagingAsync(packageJSON: any, tsConfigJSON: any, cwd: string): Promise<void> {
const configs = postpublishUtils.generateConfig(packageJSON, tsConfigJSON, cwd); const postpublishConfigs = postpublishUtils.generateConfig(packageJSON, tsConfigJSON, cwd);
if (_.isUndefined(configs.docPublishConfigs.s3StagingBucketPath)) { if (_.isUndefined(postpublishConfigs.docPublishConfigs.s3StagingBucketPath)) {
utils.log('config.postpublish.docPublishConfigs.s3StagingBucketPath entry in package.json not found!'); utils.log('config.postpublish.docPublishConfigs.s3StagingBucketPath entry in package.json not found!');
return; return;
} }
utils.log('POSTPUBLISH: Generating docs...'); utils.log('POSTPUBLISH: Generating docs...');
await postpublishUtils.generateAndUploadDocsAsync( await postpublishUtils.generateAndUploadDocsAsync(
configs.cwd, postpublishConfigs.cwd,
configs.docPublishConfigs.fileIncludes, postpublishConfigs.docPublishConfigs.fileIncludes,
configs.version, postpublishConfigs.version,
configs.docPublishConfigs.s3StagingBucketPath, postpublishConfigs.docPublishConfigs.s3StagingBucketPath,
); );
}, },
async publishReleaseNotesAsync(cwd: string, packageName: string, version: string, assets: string[]): Promise<void> { async publishReleaseNotesAsync(cwd: string, packageName: string, version: string, assets: string[]): Promise<void> {

View File

@@ -12,11 +12,11 @@ import semverSort = require('semver-sort');
import { constants } from './constants'; import { constants } from './constants';
import { Package, PackageToNextVersion, VersionChangelog } from './types'; import { Package, PackageToNextVersion, VersionChangelog } from './types';
import { changelogUtils } from './utils/changelog_utils'; import { changelogUtils } from './utils/changelog_utils';
import { configs } from './utils/configs';
import { utils } from './utils/utils'; import { utils } from './utils/utils';
const DOC_GEN_COMMAND = 'docs:json'; const DOC_GEN_COMMAND = 'docs:json';
const NPM_NAMESPACE = '@0xproject/'; const NPM_NAMESPACE = '@0xproject/';
const IS_LOCAL_PUBLISH = process.env.IS_LOCAL_PUBLISH === 'true';
const TODAYS_TIMESTAMP = moment().unix(); const TODAYS_TIMESTAMP = moment().unix();
const packageNameToWebsitePath: { [name: string]: string } = { const packageNameToWebsitePath: { [name: string]: string } = {
'0x.js': '0xjs', '0x.js': '0xjs',
@@ -36,7 +36,7 @@ const packageNameToWebsitePath: { [name: string]: string } = {
const shouldIncludePrivate = true; const shouldIncludePrivate = true;
const allUpdatedPackages = await utils.getUpdatedPackagesAsync(shouldIncludePrivate); const allUpdatedPackages = await utils.getUpdatedPackagesAsync(shouldIncludePrivate);
if (!IS_LOCAL_PUBLISH) { if (!configs.IS_LOCAL_PUBLISH) {
await confirmDocPagesRenderAsync(allUpdatedPackages); await confirmDocPagesRenderAsync(allUpdatedPackages);
} }
@@ -59,7 +59,7 @@ const packageNameToWebsitePath: { [name: string]: string } = {
}); });
// Push changelog changes to Github // Push changelog changes to Github
if (!IS_LOCAL_PUBLISH) { if (!configs.IS_LOCAL_PUBLISH) {
await pushChangelogsToGithubAsync(); await pushChangelogsToGithubAsync();
} }
@@ -182,9 +182,11 @@ async function lernaPublishAsync(packageToNextVersion: { [name: string]: string
const packageVersionString = _.map(packageToNextVersion, (nextVersion: string, packageName: string) => { const packageVersionString = _.map(packageToNextVersion, (nextVersion: string, packageName: string) => {
return `${packageName}@${nextVersion}`; return `${packageName}@${nextVersion}`;
}).join(','); }).join(',');
let lernaPublishCmd = `node ${constants.lernaExecutable} publish --cdVersions=${packageVersionString}`; let lernaPublishCmd = `node ${constants.lernaExecutable} publish --cdVersions=${packageVersionString} --registry=${
if (IS_LOCAL_PUBLISH) { configs.NPM_REGISTRY_URL
lernaPublishCmd += ' --skip-git --yes --force-publish *'; }`;
if (configs.IS_LOCAL_PUBLISH) {
lernaPublishCmd += ` --skip-git --yes --force-publish *`;
} }
utils.log('Lerna is publishing...'); utils.log('Lerna is publishing...');
await execAsync(lernaPublishCmd, { cwd: constants.monorepoRootPath }); await execAsync(lernaPublishCmd, { cwd: constants.monorepoRootPath });

View File

@@ -0,0 +1,8 @@
const IS_LOCAL_PUBLISH = process.env.IS_LOCAL_PUBLISH === 'true';
const LOCAL_NPM_REGISTRY_URL = 'http://localhost:4873';
const REMOTE_NPM_REGISTRY_URL = 'https://registry.npmjs.org';
export const configs = {
IS_LOCAL_PUBLISH,
NPM_REGISTRY_URL: IS_LOCAL_PUBLISH ? LOCAL_NPM_REGISTRY_URL : REMOTE_NPM_REGISTRY_URL,
};

View File

@@ -4,14 +4,14 @@ import * as _ from 'lodash';
import { PackageRegistryJson } from '../types'; import { PackageRegistryJson } from '../types';
const lernaJson = JSON.parse(fs.readFileSync('lerna.json').toString()); import { configs } from './configs';
const NPM_REGISTRY_BASE_URL = lernaJson.registry;
const SUCCESS_STATUS = 200; const SUCCESS_STATUS = 200;
const NOT_FOUND_STATUS = 404; const NOT_FOUND_STATUS = 404;
export const npmUtils = { export const npmUtils = {
async getPackageRegistryJsonIfExistsAsync(packageName: string): Promise<PackageRegistryJson | undefined> { async getPackageRegistryJsonIfExistsAsync(packageName: string): Promise<PackageRegistryJson | undefined> {
const url = `${NPM_REGISTRY_BASE_URL}/${packageName}`; const url = `${configs.NPM_REGISTRY_URL}/${packageName}`;
const response = await fetch(url); const response = await fetch(url);
if (response.status === NOT_FOUND_STATUS) { if (response.status === NOT_FOUND_STATUS) {