Skip to content
This repository has been archived by the owner on Jul 9, 2021. It is now read-only.

Commit

Permalink
Merge pull request #1482 from 0xProject/feature/monorepo/release-notes
Browse files Browse the repository at this point in the history
[monorepo-scripts] Automatically alert new release to Discord
  • Loading branch information
Steve Klebanoff authored Jan 10, 2019
2 parents 6487fae + 80f1fe1 commit 686f27a
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 2 deletions.
1 change: 1 addition & 0 deletions packages/monorepo-scripts/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
"typescript": "3.0.1"
},
"dependencies": {
"@0x/utils": "^2.0.8",
"@lerna/batch-packages": "^3.0.0-beta.18",
"@types/depcheck": "^0.6.0",
"async-child-process": "^1.1.1",
Expand Down
2 changes: 2 additions & 0 deletions packages/monorepo-scripts/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,7 @@ export const constants = {
stagingWebsite: 'http://staging-0xproject.s3-website-us-east-1.amazonaws.com',
lernaExecutable: path.join('node_modules', '@0x-lerna-fork', 'lerna', 'cli.js'),
githubPersonalAccessToken: process.env.GITHUB_PERSONAL_ACCESS_TOKEN_0X_JS,
discordAlertWebhookUrl: process.env.DISCORD_GITHUB_RELEASE_WEBHOOK_URL,
releasesUrl: 'https://github.com/0xProject/0x-monorepo/releases',
dependenciesUpdatedMessage: 'Dependencies updated',
};
7 changes: 7 additions & 0 deletions packages/monorepo-scripts/src/prepublish_checks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,13 @@ async function checkPublishRequiredSetupAsync(): Promise<void> {
);
}

// Check to see if discord URL is set up
if (_.isUndefined(constants.discordAlertWebhookUrl)) {
throw new Error(
'You must have a discord webhook URL set to an envVar named `DISCORD_GITHUB_RELEASE_WEBHOOK_URL`. Add it then try again.',
);
}

// Check Yarn version is 1.X
utils.log('Checking the yarn version...');
const result = await execAsync(`yarn --version`);
Expand Down
12 changes: 11 additions & 1 deletion packages/monorepo-scripts/src/publish.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { constants } from './constants';
import { Package, PackageToNextVersion, VersionChangelog } from './types';
import { changelogUtils } from './utils/changelog_utils';
import { configs } from './utils/configs';
import { alertDiscordAsync } from './utils/discord';
import { DocGenerateAndUploadUtils } from './utils/doc_generate_and_upload_utils';
import { publishReleaseNotesAsync } from './utils/github_release_utils';
import { utils } from './utils/utils';
Expand Down Expand Up @@ -84,7 +85,16 @@ async function confirmAsync(message: string): Promise<void> {
await generateAndUploadDocJsonsAsync(packagesWithDocs, isStaging, shouldUploadDocs);
}
const isDryRun = configs.IS_LOCAL_PUBLISH;
await publishReleaseNotesAsync(updatedPublicPackages, isDryRun);
const releaseNotes = await publishReleaseNotesAsync(updatedPublicPackages, isDryRun);
utils.log('Published release notes');

if (!isDryRun && releaseNotes) {
try {
await alertDiscordAsync(releaseNotes);
} catch (e) {
utils.log("Publish successful, but couldn't auto-alert discord (", e.message, '), Please alert manually.');
}
}
})().catch(err => {
utils.log(err);
process.exit(1);
Expand Down
26 changes: 26 additions & 0 deletions packages/monorepo-scripts/src/utils/discord.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { fetchAsync } from '@0x/utils';

import { constants } from '../constants';

import { utils } from './utils';

export const alertDiscordAsync = async (releaseNotes: string): Promise<void> => {
const webhookUrl = constants.discordAlertWebhookUrl;
if (webhookUrl === undefined) {
throw new Error("No discord webhook url, can't alert");
}

utils.log('Alerting discord...');
const payload = {
content: `New monorepo package released! View at ${constants.releasesUrl} \n\n ${releaseNotes}`,
};
await fetchAsync(webhookUrl, {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
});
return;
};
7 changes: 6 additions & 1 deletion packages/monorepo-scripts/src/utils/github_release_utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@ import { utils } from './utils';

const publishReleaseAsync = promisify(publishRelease);
// tslint:disable-next-line:completed-docs
export async function publishReleaseNotesAsync(packagesToPublish: Package[], isDryRun: boolean): Promise<void> {
export async function publishReleaseNotesAsync(
packagesToPublish: Package[],
isDryRun: boolean,
): Promise<string | undefined> {
// Git push a tag representing this publish (publish-{commit-hash}) (truncate hash)
const result = await execAsync('git log -n 1 --pretty=format:"%H"', { cwd: constants.monorepoRootPath });
const latestGitCommit = result.stdout;
Expand Down Expand Up @@ -75,6 +78,8 @@ export async function publishReleaseNotesAsync(packagesToPublish: Package[], isD

utils.log('Publishing release notes ', releaseName, '...');
await publishReleaseAsync(publishReleaseConfigs);

return aggregateNotes;
}

// Asset paths should described from the monorepo root. This method prefixes
Expand Down

0 comments on commit 686f27a

Please sign in to comment.