- Remove the `getLastRelease` plugin type - Retrieve the last release based on Git tags - Create the next release Git tag before calling the `publish` plugins BREAKING CHANGE: Remove the `getLastRelease` plugin type The `getLastRelease` plugins will not be called anymore. BREAKING CHANGE: Git repository authentication is now mandatory The Git authentication is now mandatory and must be set via `GH_TOKEN`, `GITHUB_TOKEN`, `GL_TOKEN`, `GITLAB_TOKEN` or `GIT_CREDENTIALS` as described in [CI configuration](https://github.com/semantic-release/semantic-release/blob/caribou/docs/usage/ci-configuration.md#authentication).
92 lines
3.4 KiB
JavaScript
92 lines
3.4 KiB
JavaScript
import test from 'ava';
|
|
import {stub} from 'sinon';
|
|
import getCommits from '../lib/get-commits';
|
|
import {gitRepo, gitCommits, gitDetachedHead} from './helpers/git-utils';
|
|
|
|
// Save the current working diretory
|
|
const cwd = process.cwd();
|
|
|
|
test.beforeEach(t => {
|
|
// Stub the logger functions
|
|
t.context.log = stub();
|
|
t.context.error = stub();
|
|
t.context.logger = {log: t.context.log, error: t.context.error};
|
|
});
|
|
|
|
test.afterEach.always(() => {
|
|
// Restore the current working directory
|
|
process.chdir(cwd);
|
|
});
|
|
|
|
test.serial('Get all commits when there is no last release', async t => {
|
|
// Create a git repository, set the current working directory at the root of the repo
|
|
await gitRepo();
|
|
// Add commits to the master branch
|
|
const commits = await gitCommits(['First', 'Second']);
|
|
|
|
// Retrieve the commits with the commits module
|
|
const result = await getCommits(undefined, 'master', t.context.logger);
|
|
|
|
// Verify the commits created and retrieved by the module are identical
|
|
t.is(result.length, 2);
|
|
t.deepEqual(result, commits);
|
|
});
|
|
|
|
test.serial('Get all commits since gitHead (from lastRelease)', async t => {
|
|
// Create a git repository, set the current working directory at the root of the repo
|
|
await gitRepo();
|
|
// Add commits to the master branch
|
|
const commits = await gitCommits(['First', 'Second', 'Third']);
|
|
|
|
// Retrieve the commits with the commits module, since commit 'First'
|
|
const result = await getCommits(commits[commits.length - 1].hash, 'master', t.context.logger);
|
|
|
|
// Verify the commits created and retrieved by the module are identical
|
|
t.is(result.length, 2);
|
|
t.deepEqual(result, commits.slice(0, 2));
|
|
});
|
|
|
|
test.serial('Get all commits since gitHead (from lastRelease) on a detached head repo', async t => {
|
|
// Create a git repository, set the current working directory at the root of the repo
|
|
const repo = await gitRepo();
|
|
// Add commits to the master branch
|
|
const commits = await gitCommits(['First', 'Second', 'Third']);
|
|
// Create a detached head repo at commit 'feat: Second'
|
|
await gitDetachedHead(repo, commits[1].hash);
|
|
|
|
// Retrieve the commits with the commits module, since commit 'First'
|
|
const result = await getCommits(commits[commits.length - 1].hash, 'master', t.context.logger);
|
|
|
|
// Verify the module retrieved only the commit 'feat: Second' (included in the detached and after 'fix: First')
|
|
t.is(result.length, 1);
|
|
t.is(result[0].hash, commits[1].hash);
|
|
t.is(result[0].message, commits[1].message);
|
|
t.truthy(result[0].committerDate);
|
|
t.truthy(result[0].author.name);
|
|
t.truthy(result[0].committer.name);
|
|
});
|
|
|
|
test.serial('Return empty array if lastRelease.gitHead is the last commit', async t => {
|
|
// Create a git repository, set the current working directory at the root of the repo
|
|
await gitRepo();
|
|
// Add commits to the master branch
|
|
const commits = await gitCommits(['First', 'Second']);
|
|
|
|
// Retrieve the commits with the commits module, since commit 'Second' (therefore none)
|
|
const result = await getCommits(commits[0].hash, 'master', t.context.logger);
|
|
|
|
// Verify no commit is retrieved
|
|
t.deepEqual(result, []);
|
|
});
|
|
|
|
test.serial('Return empty array if there is no commits', async t => {
|
|
// Create a git repository, set the current working directory at the root of the repo
|
|
await gitRepo();
|
|
|
|
// Retrieve the commits with the commits module
|
|
const result = await getCommits(undefined, 'master', t.context.logger);
|
|
|
|
// Verify no commit is retrieved
|
|
t.deepEqual(result, []);
|
|
});
|