Skip to content

Commit 59f3094

Browse files
authored
feat(manifest): add option to skip creating github release (googleapis#1048)
1 parent ef146b2 commit 59f3094

4 files changed

Lines changed: 70 additions & 1 deletion

File tree

docs/manifest-releaser.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ documented in comments)
122122
// absence defaults to [] (i.e. no plugins)
123123
"plugins": ["node-workspace", "cargo-workspace"],
124124

125-
// optional top-level defaults that can be overriden per package:
125+
// optional top-level defaults that can be overridden per package:
126126

127127
// set default package release-type to "python"
128128
// absence defaults to "node"
@@ -153,6 +153,10 @@ documented in comments)
153153
// absence defaults to false and Releases are created as already Published.
154154
"draft": true
155155

156+
// Skip creating GitHub Releases
157+
// absence defaults to false and Releases will be created
158+
"skip-github-release": true,
159+
156160
// when using the `node-workspace` plugin, package discovery forces all
157161
// local dependencies to be linked, even if the SemVer ranges don't match.
158162
// this allows breaking version bumps to update during a release.

src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ interface GitHubOptions {
3535
export interface GitHubReleaseOptions {
3636
releaseLabel?: string;
3737
draft?: boolean;
38+
skipGithubRelease?: boolean;
3839
}
3940

4041
// Used by ReleasePR: Factory and Constructor
@@ -103,6 +104,7 @@ export type ManifestPackage = Pick<
103104
| 'releaseAs'
104105
| 'changelogSections'
105106
| 'changelogPath'
107+
| 'skipGithubRelease'
106108
> & {
107109
// these items are not optional in the manifest context.
108110
path: string;

src/manifest.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ interface ReleaserConfigJson {
5050
'bump-patch-for-minor-pre-major'?: boolean;
5151
'changelog-sections'?: ChangelogSection[];
5252
'release-as'?: string;
53+
'skip-github-release'?: boolean;
5354
draft?: boolean;
5455
}
5556

@@ -244,6 +245,10 @@ export class Manifest {
244245
config['release-as']
245246
),
246247
draft: pkgCfg['draft'] ?? config['draft'],
248+
skipGithubRelease:
249+
pkgCfg['skip-github-release'] ??
250+
config['skip-github-release'] ??
251+
false,
247252
};
248253
packages.push(pkg);
249254
}
@@ -714,6 +719,14 @@ export class Manifest {
714719
releases[pkg.config.path] = undefined;
715720
continue;
716721
}
722+
if (pkg.config.skipGithubRelease) {
723+
this.gh.commentOnIssue(
724+
`:robot: ${pkgName} not configured for release :no_entry_sign:`,
725+
lastMergedPR.number
726+
);
727+
releases[pkg.config.path] = undefined;
728+
continue;
729+
}
717730
this.checkpoint(
718731
'Creating release for ' + `${pkgLogDisp}@${pkg.lastVersion}`,
719732
CheckpointType.Success

test/manifest.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2056,6 +2056,56 @@ describe('Manifest', () => {
20562056
},
20572057
});
20582058
});
2059+
2060+
it('"skip-github-release" option works', async () => {
2061+
const manifest = JSON.stringify({
2062+
'node/pkg1': '3.2.1',
2063+
});
2064+
const config = JSON.stringify({
2065+
packages: {
2066+
'node/pkg1': {
2067+
'skip-github-release': true,
2068+
},
2069+
},
2070+
});
2071+
const github = new GitHub({
2072+
owner: 'fake',
2073+
repo: 'repo',
2074+
defaultBranch,
2075+
});
2076+
const mock = mockGithub(github);
2077+
expectManifest(mock, {manifest, lastReleaseSha});
2078+
expectPR(mock, {
2079+
lastReleaseSha,
2080+
mergedPRFiles: [
2081+
// lack of any "node/pkg2/ files indicates that package did not
2082+
// change in the last merged PR.
2083+
'node/pkg1/package.json',
2084+
'node/pkg1/CHANGELOG.md',
2085+
'.release-please-manifest.json',
2086+
],
2087+
});
2088+
expectGetFiles(mock, {
2089+
fixtureFiles: ['node/pkg1/package.json'],
2090+
inlineFiles: [
2091+
['release-please-config.json', config],
2092+
['.release-please-manifest.json', manifest],
2093+
],
2094+
});
2095+
expectLabelAndComment(mock, {
2096+
addLabel: 'autorelease: tagged',
2097+
removeLabel: 'autorelease: pending',
2098+
prComments: [
2099+
':robot: @node/pkg1 not configured for release :no_entry_sign:',
2100+
],
2101+
});
2102+
2103+
const releases = await new Manifest({github}).githubRelease();
2104+
mock.verify();
2105+
expect(releases).to.eql({
2106+
'node/pkg1': undefined,
2107+
});
2108+
});
20592109
});
20602110

20612111
describe('validate', () => {

0 commit comments

Comments
 (0)