diff --git a/scripts/release/create_closure_releases.ts b/scripts/release/create_closure_releases.ts index c27d1622be..d2d616b82c 100644 --- a/scripts/release/create_closure_releases.ts +++ b/scripts/release/create_closure_releases.ts @@ -22,6 +22,8 @@ * is simply invoked immediately. */ +import * as semver from 'semver'; + import {Change, GitClient} from './git_client'; import {DraftReleaseOptions, GitHubClient} from './github_client'; @@ -247,6 +249,7 @@ export async function createClosureReleases(gitHubApiToken: string) { // Get the tag of the latest GitHub release. const from = await github.getLatestReleaseTag(); const versionAtLastRelease = await getMajorVersionAtCommit(git, from); + const lastReleaseSemver = semver.coerce(versionAtLastRelease); // Get the list of commits since `from`. const commits = await git.listCommits({from, to: 'HEAD'}); @@ -260,6 +263,13 @@ export async function createClosureReleases(gitHubApiToken: string) { for (const commit of commits) { const version = await getMajorVersionAtCommit(git, commit.hash); seenCommits.push(commit); + if (lastReleaseSemver) { + const semverV = semver.coerce(version); + if (semverV && semver.lt(semverV, lastReleaseSemver)) { + // Skip versions that are older than the last version we released. + continue; + } + } if (!pJsonVersions.some((entry) => entry.version === version)) { pJsonVersions.push({ version, diff --git a/scripts/release/package-lock.json b/scripts/release/package-lock.json index e9f05b2c5c..928986ef2d 100644 --- a/scripts/release/package-lock.json +++ b/scripts/release/package-lock.json @@ -9,11 +9,13 @@ "version": "1.0.0", "dependencies": { "@octokit/rest": "^18.0.6", + "semver": "^7.5.4", "simple-git": "^3.16.0" }, "devDependencies": { "@types/jasmine": "^3.6.0", "@types/node": "^14.11.2", + "@types/semver": "^7.5.3", "jasmine": "^3.6.2", "ts-node": "^10.9.1", "typescript": "^4.7.4" @@ -314,6 +316,12 @@ "integrity": "sha512-qzaYbXVzin6EPjghf/hTdIbnVW1ErMx8rPzwRNJhlbyJhu2SyqlvjGOY/tbUt6VFyzg56lROcOeSQRInpt63Yw==", "dev": true }, + "node_modules/@types/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", + "dev": true + }, "node_modules/acorn": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", @@ -473,6 +481,17 @@ "integrity": "sha512-Hu1dmuoGcZ7AfyynN3LsfruwMbxMALMka+YtZeGoLuDEySVmVAPaonkNoBRIw/ectu8b9tVQCJNgp4a4knp+tg==", "dev": true }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -532,6 +551,20 @@ "node": ">=0.10.0" } }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/simple-git": { "version": "3.16.0", "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.16.0.tgz", @@ -637,6 +670,11 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -913,6 +951,12 @@ "integrity": "sha512-qzaYbXVzin6EPjghf/hTdIbnVW1ErMx8rPzwRNJhlbyJhu2SyqlvjGOY/tbUt6VFyzg56lROcOeSQRInpt63Yw==", "dev": true }, + "@types/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", + "dev": true + }, "acorn": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", @@ -1040,6 +1084,14 @@ "integrity": "sha512-Hu1dmuoGcZ7AfyynN3LsfruwMbxMALMka+YtZeGoLuDEySVmVAPaonkNoBRIw/ectu8b9tVQCJNgp4a4knp+tg==", "dev": true }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -1082,6 +1134,14 @@ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, "simple-git": { "version": "3.16.0", "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.16.0.tgz", @@ -1154,6 +1214,11 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/scripts/release/package.json b/scripts/release/package.json index 5b326d85f7..692c059f72 100644 --- a/scripts/release/package.json +++ b/scripts/release/package.json @@ -4,15 +4,18 @@ "version": "1.0.0", "scripts": { "start": "ts-node create_closure_releases", + "debug": "node --inspect --inspect-brk -r ts-node/register create_closure_releases.ts", "test": "ts-node $(npm bin)/jasmine *_test.ts" }, "dependencies": { "@octokit/rest": "^18.0.6", + "semver": "^7.5.4", "simple-git": "^3.16.0" }, "devDependencies": { "@types/jasmine": "^3.6.0", "@types/node": "^14.11.2", + "@types/semver": "^7.5.3", "jasmine": "^3.6.2", "ts-node": "^10.9.1", "typescript": "^4.7.4"