diff options
author | Fabio Berger <me@fabioberger.com> | 2018-04-04 02:14:36 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-04 02:14:36 +0800 |
commit | 4a9752d7cda05f616d2709e34f4687da813d3090 (patch) | |
tree | b00a8e74aee2fe39f5999e081616144a9a8c265f /packages/monorepo-scripts/src | |
parent | 7db9a016395eb699e7f9c531dbec2616cd2b819b (diff) | |
parent | 185f70f2ddfb5521beecf62bb400aee54f90acf3 (diff) | |
download | dexon-0x-contracts-4a9752d7cda05f616d2709e34f4687da813d3090.tar.gz dexon-0x-contracts-4a9752d7cda05f616d2709e34f4687da813d3090.tar.zst dexon-0x-contracts-4a9752d7cda05f616d2709e34f4687da813d3090.zip |
Merge pull request #495 from 0xProject/fix/publishProcess
Improve Publish Flow
Diffstat (limited to 'packages/monorepo-scripts/src')
-rw-r--r-- | packages/monorepo-scripts/src/convert_changelogs.ts | 99 | ||||
-rw-r--r-- | packages/monorepo-scripts/src/postpublish_utils.ts | 44 | ||||
-rw-r--r-- | packages/monorepo-scripts/src/publish.ts | 7 | ||||
-rw-r--r-- | packages/monorepo-scripts/src/types.ts | 1 |
4 files changed, 19 insertions, 132 deletions
diff --git a/packages/monorepo-scripts/src/convert_changelogs.ts b/packages/monorepo-scripts/src/convert_changelogs.ts deleted file mode 100644 index b5be14ed8..000000000 --- a/packages/monorepo-scripts/src/convert_changelogs.ts +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env node -/** - * TEMPORARY SCRIPT - * This script exists to migrate the legacy CHANGELOG.md to the canonical CHANGELOG.md - * TODO: Remove after migration is successful and committed. - */ - -import * as fs from 'fs'; -import lernaGetPackages = require('lerna-get-packages'); -import * as _ from 'lodash'; -import * as moment from 'moment'; -import * as path from 'path'; -import { exec as execAsync } from 'promisify-child-process'; - -import { constants } from './constants'; -import { Changelog, Changes, UpdatedPackage } from './types'; -import { utils } from './utils'; - -const HEADER_PRAGMA = '##'; - -(async () => { - const allLernaPackages = lernaGetPackages(constants.monorepoRootPath); - const publicLernaPackages = _.filter(allLernaPackages, pkg => !pkg.package.private); - for (const lernaPackage of publicLernaPackages) { - const changelogMdIfExists = getChangelogMdIfExists(lernaPackage.package.name, lernaPackage.location); - if (_.isUndefined(changelogMdIfExists)) { - throw new Error(`${lernaPackage.package.name} should have CHANGELOG.md b/c it's public. Add one.`); - } - - const lines = changelogMdIfExists.split('\n'); - const changelogs: Changelog[] = []; - let changelog: Changelog = { - version: '', - changes: [], - }; - /** - * Example MD entry: - * ## v0.3.1 - _March 18, 2018_ - * - * * Add TS types for `yargs` (#400) - */ - for (const line of lines) { - if (_.startsWith(line, `${HEADER_PRAGMA} `)) { - let version = line.substr(4).split(' - ')[0]; - if (version === '0.x.x') { - version = utils.getNextPatchVersion(lernaPackage.package.version); - } - const dateStr = line.split('_')[1]; - let date; - if (!_.includes(dateStr, 'TBD')) { - date = moment(dateStr, 'MMMM D, YYYY'); - } - changelog = { - version, - changes: [], - }; - if (!_.isUndefined(date)) { - changelog.timestamp = date.unix(); - } - if (!_.includes(dateStr, 'TBD')) { - changelog.isPublished = true; - } - changelogs.push(changelog); - } else if (_.includes(line, '* ')) { - const note = line.split('* ')[1].split(' (#')[0]; - const prChunk = line.split(' (#')[1]; - let pr; - if (!_.isUndefined(prChunk)) { - pr = prChunk.split(')')[0]; - } - const changes: Changes = { - note, - }; - if (!_.isUndefined(pr)) { - changes.pr = _.parseInt(pr); - } - changelog.changes.push(changes); - } - } - const changelogJSON = JSON.stringify(changelogs, null, 4); - const changelogJSONPath = `${lernaPackage.location}/CHANGELOG.json`; - fs.writeFileSync(changelogJSONPath, changelogJSON); - await utils.prettifyAsync(changelogJSONPath, constants.monorepoRootPath); - } -})().catch(err => { - utils.log(err.stdout); - process.exit(1); -}); - -function getChangelogMdIfExists(packageName: string, location: string): string | undefined { - const changelogPath = path.join(location, 'CHANGELOG.md'); - let changelogMd: string; - try { - changelogMd = fs.readFileSync(changelogPath, 'utf-8'); - return changelogMd; - } catch (err) { - return undefined; - } -} diff --git a/packages/monorepo-scripts/src/postpublish_utils.ts b/packages/monorepo-scripts/src/postpublish_utils.ts index 236b54379..ca4c92f5d 100644 --- a/packages/monorepo-scripts/src/postpublish_utils.ts +++ b/packages/monorepo-scripts/src/postpublish_utils.ts @@ -91,7 +91,7 @@ export const postpublishUtils = { ); }, async publishReleaseNotesAsync(cwd: string, packageName: string, version: string, assets: string[]): Promise<void> { - const notes = this.getReleaseNotes(packageName); + const notes = this.getReleaseNotes(packageName, version); const releaseName = this.getReleaseName(packageName, version); const tag = this.getTag(packageName, version); const finalAssets = this.adjustAssetPaths(cwd, assets); @@ -109,9 +109,8 @@ export const postpublishUtils = { reuseDraftOnly: false, assets, }); - this.updateChangelogIsPublished(packageName); }, - getReleaseNotes(packageName: string) { + getReleaseNotes(packageName: string, version: string) { const packageNameWithNamespace = packageName.replace('@0xproject/', ''); const changelogJSONPath = path.join( constants.monorepoRootPath, @@ -122,33 +121,20 @@ export const postpublishUtils = { const changelogJSON = fs.readFileSync(changelogJSONPath, 'utf-8'); const changelogs = JSON.parse(changelogJSON); const latestLog = changelogs[0]; - if (_.isUndefined(latestLog.isPublished)) { - let notes = ''; - _.each(latestLog.changes, change => { - notes += `* ${change.note}`; - if (change.pr) { - notes += ` (${change.pr})`; - } - notes += `\n`; - }); - return notes; + // We sanity check that the version for the changelog notes we are about to publish to Github + // correspond to the new version of the package. + if (version !== latestLog.version) { + throw new Error('Expected CHANGELOG.json latest entry version to coincide with published version.'); } - return 'N/A'; - }, - updateChangelogIsPublished(packageName: string) { - const packageNameWithNamespace = packageName.replace('@0xproject/', ''); - const changelogJSONPath = path.join( - constants.monorepoRootPath, - 'packages', - packageNameWithNamespace, - 'CHANGELOG.json', - ); - const changelogJSON = fs.readFileSync(changelogJSONPath, 'utf-8'); - const changelogs = JSON.parse(changelogJSON); - const latestLog = changelogs[0]; - latestLog.isPublished = true; - changelogs[0] = latestLog; - fs.writeFileSync(changelogJSONPath, JSON.stringify(changelogs, null, '\t')); + let notes = ''; + _.each(latestLog.changes, change => { + notes += `* ${change.note}`; + if (change.pr) { + notes += ` (${change.pr})`; + } + notes += `\n`; + }); + return notes; }, getTag(packageName: string, version: string) { return `${packageName}@${version}`; diff --git a/packages/monorepo-scripts/src/publish.ts b/packages/monorepo-scripts/src/publish.ts index d749ec630..adc1de64a 100644 --- a/packages/monorepo-scripts/src/publish.ts +++ b/packages/monorepo-scripts/src/publish.ts @@ -48,7 +48,7 @@ const semverNameToIndex: { [semver: string]: number } = { } const currentVersion = lernaPackage.package.version; - const shouldAddNewEntry = shouldAddNewChangelogEntry(changelogs); + const shouldAddNewEntry = shouldAddNewChangelogEntry(currentVersion, changelogs); if (shouldAddNewEntry) { // Create a new entry for a patch version with generic changelog entry. const nextPatchVersion = utils.getNextPatchVersion(currentVersion); @@ -174,12 +174,13 @@ function getChangelogJSONOrCreateIfMissing(packageName: string, changelogPath: s } } -function shouldAddNewChangelogEntry(changelogs: Changelog[]): boolean { +function shouldAddNewChangelogEntry(currentVersion: string, changelogs: Changelog[]): boolean { if (_.isEmpty(changelogs)) { return true; } const lastEntry = changelogs[0]; - return !!lastEntry.isPublished; + const lastEntryCurrentVersion = lastEntry.version === currentVersion; + return lastEntryCurrentVersion; } function generateChangelogMd(changelogs: Changelog[]): string { diff --git a/packages/monorepo-scripts/src/types.ts b/packages/monorepo-scripts/src/types.ts index 7adec202f..9e6edd186 100644 --- a/packages/monorepo-scripts/src/types.ts +++ b/packages/monorepo-scripts/src/types.ts @@ -13,7 +13,6 @@ export interface Changelog { timestamp?: number; version: string; changes: Changes[]; - isPublished?: boolean; } export enum SemVerIndex { |