Skip to content
This repository has been archived by the owner on Jan 20, 2023. It is now read-only.

Commit

Permalink
feat: support semantic-release@14.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
pvdlg committed Feb 17, 2018
1 parent e55a05a commit 276103d
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 13 deletions.
2 changes: 1 addition & 1 deletion index.js
Expand Up @@ -22,7 +22,7 @@ module.exports = {
'@semantic-release/changelog',
{path: '@semantic-release/npm', npmPublish: false},
{path: '@semantic-release/git', message: `chore(release): \${nextRelease.version} [skip ci]`},
{path: '@semantic-release/exec', cmd: `apm publish --tag \${nextRelease.gitTag}`},
{path: '@semantic-release/exec', cmd: `apm publish --tag \${nextRelease.gitTag} 1>&2`},
'@semantic-release/github',
],
};
16 changes: 8 additions & 8 deletions package.json
Expand Up @@ -16,12 +16,12 @@
"Gregor Martynus (https://twitter.com/gr2m)"
],
"dependencies": {
"@semantic-release/changelog": "^1.0.0",
"@semantic-release/changelog": "^1.1.0",
"@semantic-release/error": "^2.1.0",
"@semantic-release/exec": "^2.0.0",
"@semantic-release/git": "^3.0.0",
"@semantic-release/github": "^4.0.2",
"@semantic-release/npm": "^3.0.0",
"@semantic-release/exec": "^2.1.0",
"@semantic-release/git": "^3.1.0",
"@semantic-release/github": "^4.1.2",
"@semantic-release/npm": "^3.1.0",
"execa": "^0.9.0"
},
"devDependencies": {
Expand All @@ -37,7 +37,7 @@
"mockserver-client": "^5.3.0",
"nyc": "^11.1.0",
"p-retry": "^1.0.0",
"semantic-release": "^13.0.1",
"semantic-release": "^14.0.0",
"sinon": "^4.1.2",
"strip-ansi": "^4.0.0",
"tempy": "^0.2.1",
Expand Down Expand Up @@ -75,7 +75,7 @@
"all": true
},
"peerDependencies": {
"semantic-release": "13.x.x"
"semantic-release": ">=13.0.0 <15.0.0"
},
"prettier": {
"printWidth": 120
Expand All @@ -92,7 +92,7 @@
"cm": "git-cz",
"codecov": "codecov -f coverage/coverage-final.json",
"lint": "xo",
"pretest": "npm run lint",

"semantic-release": "semantic-release",
"test": "nyc ava -v"
},
Expand Down
60 changes: 56 additions & 4 deletions test/integration.test.js
Expand Up @@ -32,6 +32,9 @@ test.beforeEach(t => {
t.context.stdout = stub(process.stdout, 'write').callsFake(val => {
t.context.logs += stripAnsi(val.toString());
});
t.context.sdterr = stub(process.stderr, 'write').callsFake(val => {
t.context.error += stripAnsi(val.toString());
});

process.env.TRAVIS = 'true';
process.env.CI = 'true';
Expand All @@ -45,6 +48,7 @@ test.afterEach.always(t => {
// Restore the current working directory
process.chdir(cwd);
t.context.stdout.restore();
t.context.sdterr.restore();
});

test.after.always(async () => {
Expand All @@ -58,6 +62,7 @@ test.serial('Initial and minor releases', async t => {
const packageName = 'test-release';
const owner = 'git';
const branch = 'master';
const failTitle = 'The automated release is failing 🚨';
// Create a remote repo, initialize it, create a local shallow clone and set the cwd to the clone
const {repositoryUrl} = await gitbox.createRepo(packageName, branch);
process.env.GH_TOKEN = gitbox.gitCredential;
Expand All @@ -70,6 +75,7 @@ test.serial('Initial and minor releases', async t => {
name: packageName,
version: '0.0.0-dev',
repository: {url: repositoryUrl},
release: {failTitle},
});

/* Initial release */
Expand All @@ -90,6 +96,23 @@ test.serial('Initial and minor releases', async t => {
{body: {tag_name: `v${version}`, target_commitish: 'master', name: `v${version}`}},
{body: {html_url: `release-url/${version}`}}
);
let searchPRsMock = await mockServer.mock(
'/search/issues',
{queryStringParameters: {q: `${escape(`repo:${owner}/${packageName}`)}+${escape('type:pr')}`}},
{body: {items: []}, method: 'GET'}
);
let searchIssuesMock = await mockServer.mock(
'/search/issues',
{
queryStringParameters: {
q: `${escape('in:title')}+${escape(`repo:${owner}/${packageName}`)}+${escape('type:issue')}+${escape(
'state:open'
)}+${escape(failTitle)}`,
},
},
{body: {items: []}, method: 'GET'}
);

t.log('Commit a feature');
await execa('git', ['commit', '-m', 'feat: new feature', '--allow-empty', '--no-gpg-sign']);

Expand All @@ -100,8 +123,9 @@ test.serial('Initial and minor releases', async t => {
await mockServer.verify(verifyApmMock);
await mockServer.verify(getApmVersionMock);
await mockServer.verify(createReleaseMock);
t.regex(t.context.logs, /Registering test-release/);
t.regex(t.context.logs, new RegExp(`Publishing test-release@v${version}`));
await mockServer.verify(searchIssuesMock);
t.regex(t.context.error, /Registering test-release/);
t.regex(t.context.error, new RegExp(`Publishing test-release@v${version}`));
t.regex(t.context.logs, new RegExp(`Published release: 1.0.0`));
t.is((await readJson('./package.json')).version, version);
t.deepEqual(await gitCommitedFiles(), ['CHANGELOG.md', 'package.json']);
Expand All @@ -127,6 +151,28 @@ test.serial('Initial and minor releases', async t => {
{body: {tag_name: `v${version}`, target_commitish: 'master', name: `v${version}`}},
{body: {html_url: `release-url/${version}`}}
);
searchPRsMock = await mockServer.mock(
'/search/issues',
{queryStringParameters: {q: `${escape(`repo:${owner}/${packageName}`)}+${escape('type:pr')}+${commit.hash}`}},
{body: {items: [{number: 1, pull_request: {}}]}, method: 'GET'}
);
const addCommentMock = await mockServer.mock(
`/repos/${owner}/${packageName}/issues/1/comments`,
{},
{body: {items: [{number: 1, pull_request: {}}]}}
);
searchIssuesMock = await mockServer.mock(
'/search/issues',
{
queryStringParameters: {
q: `${escape('in:title')}+${escape(`repo:${owner}/${packageName}`)}+${escape('type:issue')}+${escape(
'state:open'
)}+${escape(failTitle)}`,
},
},
{body: {items: []}, method: 'GET'}
);

t.log('Commit a feature');
await execa('git', ['commit', '-m', 'feat: other feature', '--allow-empty', '--no-gpg-sign']);

Expand All @@ -137,8 +183,12 @@ test.serial('Initial and minor releases', async t => {
await mockServer.verify(verifyApmMock);
await mockServer.verify(getApmVersionMock);
await mockServer.verify(createReleaseMock);
t.regex(t.context.logs, /Registering test-release/);
t.regex(t.context.logs, new RegExp(`Publishing test-release@v${version}`));
await mockServer.verify(searchPRsMock);
await mockServer.verify(addCommentMock);
await mockServer.verify(searchIssuesMock);

t.regex(t.context.error, /Registering test-release/);
t.regex(t.context.error, new RegExp(`Publishing test-release@v${version}`));
t.regex(t.context.logs, new RegExp(`Published release: 1.0.0`));
t.is((await readJson('./package.json')).version, version);
t.deepEqual(await gitCommitedFiles(), ['CHANGELOG.md', 'package.json']);
Expand All @@ -156,6 +206,7 @@ test.serial('Throw error if "ATOM_ACCESS_TOKEN" is not set', async t => {
process.env.ATOM_HOME = tempy.directory();
process.env.ATOM_API_URL = mockServer.url;
process.env.ATOM_RESOURCE_PATH = tempy.directory();
process.env.GIT_TERMINAL_PROMPT = 0;
delete process.env.ATOM_ACCESS_TOKEN;
await writeJson('./package.json', {
name: packageName,
Expand All @@ -177,6 +228,7 @@ test.serial('Throw error if "apm" is not installed', async t => {
process.env.ATOM_HOME = tempy.directory();
process.env.ATOM_API_URL = mockServer.url;
process.env.ATOM_RESOURCE_PATH = tempy.directory();
process.env.GIT_TERMINAL_PROMPT = 0;
// Fake PATH with only git available to make sure apm is not in the PATH
const PATH = tempy.directory();
await ensureSymlink(which.sync('git'), path.join(PATH, 'git'));
Expand Down

0 comments on commit 276103d

Please sign in to comment.