Merge pull request #1482 from 0xProject/feature/monorepo/release-notes
[monorepo-scripts] Automatically alert new release to Discord
This commit is contained in:
commit
686f27a96f
@ -47,6 +47,7 @@
|
|||||||
"typescript": "3.0.1"
|
"typescript": "3.0.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@0x/utils": "^2.0.8",
|
||||||
"@lerna/batch-packages": "^3.0.0-beta.18",
|
"@lerna/batch-packages": "^3.0.0-beta.18",
|
||||||
"@types/depcheck": "^0.6.0",
|
"@types/depcheck": "^0.6.0",
|
||||||
"async-child-process": "^1.1.1",
|
"async-child-process": "^1.1.1",
|
||||||
|
@ -5,5 +5,7 @@ export const constants = {
|
|||||||
stagingWebsite: 'http://staging-0xproject.s3-website-us-east-1.amazonaws.com',
|
stagingWebsite: 'http://staging-0xproject.s3-website-us-east-1.amazonaws.com',
|
||||||
lernaExecutable: path.join('node_modules', '@0x-lerna-fork', 'lerna', 'cli.js'),
|
lernaExecutable: path.join('node_modules', '@0x-lerna-fork', 'lerna', 'cli.js'),
|
||||||
githubPersonalAccessToken: process.env.GITHUB_PERSONAL_ACCESS_TOKEN_0X_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',
|
dependenciesUpdatedMessage: 'Dependencies updated',
|
||||||
};
|
};
|
||||||
|
@ -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
|
// Check Yarn version is 1.X
|
||||||
utils.log('Checking the yarn version...');
|
utils.log('Checking the yarn version...');
|
||||||
const result = await execAsync(`yarn --version`);
|
const result = await execAsync(`yarn --version`);
|
||||||
|
@ -14,6 +14,7 @@ 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 { configs } from './utils/configs';
|
||||||
|
import { alertDiscordAsync } from './utils/discord';
|
||||||
import { DocGenerateAndUploadUtils } from './utils/doc_generate_and_upload_utils';
|
import { DocGenerateAndUploadUtils } from './utils/doc_generate_and_upload_utils';
|
||||||
import { publishReleaseNotesAsync } from './utils/github_release_utils';
|
import { publishReleaseNotesAsync } from './utils/github_release_utils';
|
||||||
import { utils } from './utils/utils';
|
import { utils } from './utils/utils';
|
||||||
@ -84,7 +85,16 @@ async function confirmAsync(message: string): Promise<void> {
|
|||||||
await generateAndUploadDocJsonsAsync(packagesWithDocs, isStaging, shouldUploadDocs);
|
await generateAndUploadDocJsonsAsync(packagesWithDocs, isStaging, shouldUploadDocs);
|
||||||
}
|
}
|
||||||
const isDryRun = configs.IS_LOCAL_PUBLISH;
|
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 => {
|
})().catch(err => {
|
||||||
utils.log(err);
|
utils.log(err);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
|
26
packages/monorepo-scripts/src/utils/discord.ts
Normal file
26
packages/monorepo-scripts/src/utils/discord.ts
Normal file
@ -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;
|
||||||
|
};
|
@ -12,7 +12,10 @@ import { utils } from './utils';
|
|||||||
|
|
||||||
const publishReleaseAsync = promisify(publishRelease);
|
const publishReleaseAsync = promisify(publishRelease);
|
||||||
// tslint:disable-next-line:completed-docs
|
// 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)
|
// 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 result = await execAsync('git log -n 1 --pretty=format:"%H"', { cwd: constants.monorepoRootPath });
|
||||||
const latestGitCommit = result.stdout;
|
const latestGitCommit = result.stdout;
|
||||||
@ -75,6 +78,8 @@ export async function publishReleaseNotesAsync(packagesToPublish: Package[], isD
|
|||||||
|
|
||||||
utils.log('Publishing release notes ', releaseName, '...');
|
utils.log('Publishing release notes ', releaseName, '...');
|
||||||
await publishReleaseAsync(publishReleaseConfigs);
|
await publishReleaseAsync(publishReleaseConfigs);
|
||||||
|
|
||||||
|
return aggregateNotes;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Asset paths should described from the monorepo root. This method prefixes
|
// Asset paths should described from the monorepo root. This method prefixes
|
||||||
|
Loading…
x
Reference in New Issue
Block a user