Compare commits
13 Commits
master
...
1692/setup
Author | SHA1 | Date | |
---|---|---|---|
|
f66aa27dd7 | ||
|
daa25abccf | ||
|
699875cedd | ||
|
2cc7d517b1 | ||
|
7beb13af45 | ||
|
1c85b88c9f | ||
|
fd5b64a99a | ||
|
9e83fa020d | ||
|
0ae2f632ff | ||
|
9b1afca0f5 | ||
|
3c3b20c470 | ||
|
3da96bbb90 | ||
|
a2266ca47d |
21
.github/workflows/release.yml
vendored
Normal file
21
.github/workflows/release.yml
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
name: Release
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- next
|
||||||
|
- beta
|
||||||
|
- "*.x" # maintenance releases branches
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
release:
|
||||||
|
name: release
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v1
|
||||||
|
- uses: bahmutov/npm-install@v1
|
||||||
|
- run: npx semantic-release
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
NPM_TOKEN: ${{ secrets.SEMANTIC_RELEASE_BOT_NPM_TOKEN }}
|
46
.github/workflows/test.yml
vendored
Normal file
46
.github/workflows/test.yml
vendored
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
name: Test
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- renovate/**
|
||||||
|
- 1692/setup-renovate-debug
|
||||||
|
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- synchronize
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test_matrix:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version:
|
||||||
|
# - 10
|
||||||
|
- 12
|
||||||
|
# - 14
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- run: git config --global user.name github-actions
|
||||||
|
- run: git config --global user.email github-actions@github.com
|
||||||
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
- uses: bahmutov/npm-install@v1
|
||||||
|
- run: npx ava test/integration.test.js
|
||||||
|
|
||||||
|
# separate job to set as required in branch protection,
|
||||||
|
# as the build names above change each time Node versions change
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: test_matrix
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v1
|
||||||
|
- uses: bahmutov/npm-install@v1
|
||||||
|
- run: npm run lint
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -125,10 +125,6 @@ $RECYCLE.BIN/
|
|||||||
# Windows shortcuts
|
# Windows shortcuts
|
||||||
*.lnk
|
*.lnk
|
||||||
|
|
||||||
# Lockfiles
|
|
||||||
package-lock.json
|
|
||||||
yarn.lock
|
|
||||||
|
|
||||||
# Gitbook
|
# Gitbook
|
||||||
_book
|
_book
|
||||||
|
|
||||||
|
11
.travis.yml
11
.travis.yml
@ -1,11 +0,0 @@
|
|||||||
version: ~> 1.0
|
|
||||||
|
|
||||||
services:
|
|
||||||
- docker
|
|
||||||
|
|
||||||
import:
|
|
||||||
- .travis/node.yml
|
|
||||||
- .travis/node-versions.yml
|
|
||||||
- .travis/semantic-release.yml
|
|
||||||
- .travis/greenkeeper.yml
|
|
||||||
- .travis/codecov.yml
|
|
@ -1,2 +0,0 @@
|
|||||||
after_success:
|
|
||||||
- npm run codecov
|
|
@ -1,3 +0,0 @@
|
|||||||
branches:
|
|
||||||
only:
|
|
||||||
- /^greenkeeper.*$/
|
|
@ -1,3 +0,0 @@
|
|||||||
node_js:
|
|
||||||
- 12
|
|
||||||
- 10.18
|
|
@ -1,11 +0,0 @@
|
|||||||
language: node_js
|
|
||||||
|
|
||||||
cache:
|
|
||||||
npm: false
|
|
||||||
|
|
||||||
# Retry install on fail to avoid failing a build on network/disk/external errors
|
|
||||||
install:
|
|
||||||
- travis_retry npm install
|
|
||||||
|
|
||||||
script:
|
|
||||||
- npm run test
|
|
@ -1,15 +0,0 @@
|
|||||||
branches:
|
|
||||||
only:
|
|
||||||
- master
|
|
||||||
- next
|
|
||||||
- beta
|
|
||||||
- /^\d+\.(\d+|x)(\.x)?$/
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
include:
|
|
||||||
- stage: release
|
|
||||||
node_js: lts/*
|
|
||||||
install:
|
|
||||||
- travis_retry npm install
|
|
||||||
script:
|
|
||||||
- npm run semantic-release
|
|
17
README.md
17
README.md
@ -4,14 +4,8 @@
|
|||||||
<a href="https://spectrum.chat/semantic-release">
|
<a href="https://spectrum.chat/semantic-release">
|
||||||
<img alt="Join the community on Spectrum" src="https://withspectrum.github.io/badge/badge.svg">
|
<img alt="Join the community on Spectrum" src="https://withspectrum.github.io/badge/badge.svg">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://travis-ci.org/semantic-release/semantic-release">
|
<a href="https://github.com/semantic-release/semantic-release/actions?query=workflow%3ATest+branch%3Amaster">
|
||||||
<img alt="Travis" src="https://img.shields.io/travis/semantic-release/semantic-release/master.svg">
|
<img alt="Build states" src="https://github.com/semantic-release/semantic-release/workflows/Test/badge.svg">
|
||||||
</a>
|
|
||||||
<a href="https://codecov.io/gh/semantic-release/semantic-release">
|
|
||||||
<img alt="Codecov" src="https://img.shields.io/codecov/c/github/semantic-release/semantic-release/master.svg">
|
|
||||||
</a>
|
|
||||||
<a href="https://greenkeeper.io">
|
|
||||||
<img alt="Greenkeeper" src="https://badges.greenkeeper.io/semantic-release/semantic-release.svg">
|
|
||||||
</a>
|
</a>
|
||||||
<a href="#badge">
|
<a href="#badge">
|
||||||
<img alt="semantic-release" src="https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg">
|
<img alt="semantic-release" src="https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg">
|
||||||
@ -61,7 +55,7 @@ Tools such as [commitizen](https://github.com/commitizen/cz-cli) or [commitlint]
|
|||||||
Here is an example of the release type that will be done based on a commit messages:
|
Here is an example of the release type that will be done based on a commit messages:
|
||||||
|
|
||||||
| Commit message | Release type |
|
| Commit message | Release type |
|
||||||
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------|
|
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------- |
|
||||||
| `fix(pencil): stop graphite breaking when too much pressure applied` | Patch Release |
|
| `fix(pencil): stop graphite breaking when too much pressure applied` | Patch Release |
|
||||||
| `feat(pencil): add 'graphiteWidth' option` | ~~Minor~~ Feature Release |
|
| `feat(pencil): add 'graphiteWidth' option` | ~~Minor~~ Feature Release |
|
||||||
| `perf(pencil): remove graphiteWidth option`<br><br>`BREAKING CHANGE: The graphiteWidth option has been removed.`<br>`The default graphite width of 10mm is always used for performance reasons.` | ~~Major~~ Breaking Release |
|
| `perf(pencil): remove graphiteWidth option`<br><br>`BREAKING CHANGE: The graphiteWidth option has been removed.`<br>`The default graphite width of 10mm is always used for performance reasons.` | ~~Major~~ Breaking Release |
|
||||||
@ -75,6 +69,7 @@ Here is an example of the release type that will be done based on a commit messa
|
|||||||
For each new commits added to one of the release branches (for example `master`, `next`, `beta`), with `git push` or by merging a pull request or merging from another branch, a CI build is triggered and runs the `semantic-release` command to make a release if there are codebase changes since the last release that affect the package functionalities.
|
For each new commits added to one of the release branches (for example `master`, `next`, `beta`), with `git push` or by merging a pull request or merging from another branch, a CI build is triggered and runs the `semantic-release` command to make a release if there are codebase changes since the last release that affect the package functionalities.
|
||||||
|
|
||||||
**semantic-release** offers various ways to control the timing, the content and the audience of published releases. See example workflows in the following recipes:
|
**semantic-release** offers various ways to control the timing, the content and the audience of published releases. See example workflows in the following recipes:
|
||||||
|
|
||||||
- [Using distribution channels](docs/recipes/distribution-channels.md#publishing-on-distribution-channels)
|
- [Using distribution channels](docs/recipes/distribution-channels.md#publishing-on-distribution-channels)
|
||||||
- [Maintenance releases](docs/recipes/maintenance-releases.md#publishing-maintenance-releases)
|
- [Maintenance releases](docs/recipes/maintenance-releases.md#publishing-maintenance-releases)
|
||||||
- [Pre-releases](docs/recipes/pre-releases.md#publishing-pre-releases)
|
- [Pre-releases](docs/recipes/pre-releases.md#publishing-pre-releases)
|
||||||
@ -84,7 +79,7 @@ For each new commits added to one of the release branches (for example `master`,
|
|||||||
After running the tests, the command `semantic-release` will execute the following steps:
|
After running the tests, the command `semantic-release` will execute the following steps:
|
||||||
|
|
||||||
| Step | Description |
|
| Step | Description |
|
||||||
|-------------------|---------------------------------------------------------------------------------------------------------------------------------|
|
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| Verify Conditions | Verify all the conditions to proceed with the release. |
|
| Verify Conditions | Verify all the conditions to proceed with the release. |
|
||||||
| Get last release | Obtain the commit corresponding to the last release by analyzing [Git tags](https://git-scm.com/book/en/v2/Git-Basics-Tagging). |
|
| Get last release | Obtain the commit corresponding to the last release by analyzing [Git tags](https://git-scm.com/book/en/v2/Git-Basics-Tagging). |
|
||||||
| Analyze commits | Determine the type of release based on the commits added since the last release. |
|
| Analyze commits | Determine the type of release based on the commits added since the last release. |
|
||||||
@ -98,6 +93,7 @@ After running the tests, the command `semantic-release` will execute the followi
|
|||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
In order to use **semantic-release** you need:
|
In order to use **semantic-release** you need:
|
||||||
|
|
||||||
- To host your code in a [Git repository](https://git-scm.com)
|
- To host your code in a [Git repository](https://git-scm.com)
|
||||||
- Use a Continuous Integration service that allows you to [securely set up credentials](docs/usage/ci-configuration.md#authentication)
|
- Use a Continuous Integration service that allows you to [securely set up credentials](docs/usage/ci-configuration.md#authentication)
|
||||||
- Git CLI version [2.7.1 or higher](docs/support/FAQ.md#why-does-semantic-release-require-git-version--271) installed in your Continuous Integration environment
|
- Git CLI version [2.7.1 or higher](docs/support/FAQ.md#why-does-semantic-release-require-git-version--271) installed in your Continuous Integration environment
|
||||||
@ -160,7 +156,6 @@ Let people know that your package is published using **semantic-release** by inc
|
|||||||
| ------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
|
| ------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
|
||||||
| [Stephan Bönnemann](https://github.com/boennemann) | [Rolf Erik Lekang](https://github.com/relekang) | [Johannes Jörg Schmidt](https://github.com/jo) | [Finn Pauls](https://github.com/finnp) | [Christoph Witzko](https://github.com/christophwitzko) |
|
| [Stephan Bönnemann](https://github.com/boennemann) | [Rolf Erik Lekang](https://github.com/relekang) | [Johannes Jörg Schmidt](https://github.com/jo) | [Finn Pauls](https://github.com/finnp) | [Christoph Witzko](https://github.com/christophwitzko) |
|
||||||
|
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img alt="Kill all humans" src="media/bender.png">
|
<img alt="Kill all humans" src="media/bender.png">
|
||||||
</p>
|
</p>
|
||||||
|
@ -21,6 +21,13 @@ See https://github.com/semantic-release/semantic-release/blob/master/docs/suppor
|
|||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log("DEBUG START ==========")
|
||||||
|
console.log('process.env')
|
||||||
|
console.log(process.env)
|
||||||
|
console.log('envCi({ env: process.env })')
|
||||||
|
console.log(require('env-ci')({ env: process.env }))
|
||||||
|
console.log("DEBUG END ==========")
|
||||||
|
|
||||||
execa('git', ['--version'])
|
execa('git', ['--version'])
|
||||||
.then(({stdout}) => {
|
.then(({stdout}) => {
|
||||||
var gitVersion = findVersions(stdout)[0];
|
var gitVersion = findVersions(stdout)[0];
|
||||||
|
13513
package-lock.json
generated
Normal file
13513
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -122,7 +122,8 @@
|
|||||||
"lint": "xo",
|
"lint": "xo",
|
||||||
"pretest": "npm run lint",
|
"pretest": "npm run lint",
|
||||||
"semantic-release": "./bin/semantic-release.js",
|
"semantic-release": "./bin/semantic-release.js",
|
||||||
"test": "nyc ava -v"
|
"test": "nyc ava -v",
|
||||||
|
"test:ci": "nyc ava -v"
|
||||||
},
|
},
|
||||||
"xo": {
|
"xo": {
|
||||||
"prettier": true,
|
"prettier": true,
|
||||||
@ -130,5 +131,10 @@
|
|||||||
"rules": {
|
"rules": {
|
||||||
"unicorn/string-content": "off"
|
"unicorn/string-content": "off"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"renovate": {
|
||||||
|
"extends": [
|
||||||
|
"github>semantic-release/.github"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
const path = require('path');
|
const path = require('path');
|
||||||
const test = require('ava');
|
const { serial: test } = require('ava');
|
||||||
const proxyquire = require('proxyquire');
|
const proxyquire = require('proxyquire');
|
||||||
const {escapeRegExp} = require('lodash');
|
const {escapeRegExp} = require('lodash');
|
||||||
const {writeJson, readJson} = require('fs-extra');
|
const {writeJson, readJson} = require('fs-extra');
|
||||||
@ -29,17 +29,24 @@ const npmRegistry = require('./helpers/npm-registry');
|
|||||||
const requireNoCache = proxyquire.noPreserveCache();
|
const requireNoCache = proxyquire.noPreserveCache();
|
||||||
|
|
||||||
// Environment variables used with semantic-release cli (similar to what a user would setup)
|
// Environment variables used with semantic-release cli (similar to what a user would setup)
|
||||||
|
const {
|
||||||
|
GITHUB_ACTION,
|
||||||
|
GITHUB_TOKEN,
|
||||||
|
...processEnvWithoutGitHubActionsVariables
|
||||||
|
} = process.env
|
||||||
const env = {
|
const env = {
|
||||||
|
...processEnvWithoutGitHubActionsVariables,
|
||||||
...npmRegistry.authEnv,
|
...npmRegistry.authEnv,
|
||||||
GH_TOKEN: gitbox.gitCredential,
|
|
||||||
GITHUB_URL: mockServer.url,
|
|
||||||
TRAVIS: 'true',
|
|
||||||
CI: 'true',
|
CI: 'true',
|
||||||
|
GH_TOKEN: gitbox.gitCredential,
|
||||||
|
TRAVIS: 'true',
|
||||||
TRAVIS_BRANCH: 'master',
|
TRAVIS_BRANCH: 'master',
|
||||||
TRAVIS_PULL_REQUEST: 'false',
|
TRAVIS_PULL_REQUEST: 'false',
|
||||||
|
GITHUB_API_URL: mockServer.url,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Environment variables used only for the local npm command used to do verification
|
// Environment variables used only for the local npm command used to do verification
|
||||||
const testEnv = {
|
const npmTestEnv = {
|
||||||
...process.env,
|
...process.env,
|
||||||
...npmRegistry.authEnv,
|
...npmRegistry.authEnv,
|
||||||
npm_config_registry: npmRegistry.url,
|
npm_config_registry: npmRegistry.url,
|
||||||
@ -74,7 +81,7 @@ test('Release patch, minor and major versions', async (t) => {
|
|||||||
release: {branches: ['master', 'next'], success: false, fail: false},
|
release: {branches: ['master', 'next'], success: false, fail: false},
|
||||||
});
|
});
|
||||||
// Create a npm-shrinkwrap.json file
|
// Create a npm-shrinkwrap.json file
|
||||||
await execa('npm', ['shrinkwrap'], {env: testEnv, cwd});
|
await execa('npm', ['shrinkwrap'], {env: npmTestEnv, cwd, extendEnv: false});
|
||||||
|
|
||||||
/* No release */
|
/* No release */
|
||||||
let verifyMock = await mockServer.mock(
|
let verifyMock = await mockServer.mock(
|
||||||
@ -85,7 +92,7 @@ test('Release patch, minor and major versions', async (t) => {
|
|||||||
t.log('Commit a chore');
|
t.log('Commit a chore');
|
||||||
await gitCommits(['chore: Init repository'], {cwd});
|
await gitCommits(['chore: Init repository'], {cwd});
|
||||||
t.log('$ semantic-release');
|
t.log('$ semantic-release');
|
||||||
let {stdout, exitCode} = await execa(cli, [], {env, cwd});
|
let {stdout, exitCode} = await execa(cli, [], {env, cwd, extendEnv: false});
|
||||||
t.regex(stdout, /There are no relevant changes, so no new version is released/);
|
t.regex(stdout, /There are no relevant changes, so no new version is released/);
|
||||||
t.is(exitCode, 0);
|
t.is(exitCode, 0);
|
||||||
|
|
||||||
@ -108,7 +115,7 @@ test('Release patch, minor and major versions', async (t) => {
|
|||||||
t.log('Commit a feature');
|
t.log('Commit a feature');
|
||||||
await gitCommits(['feat: Initial commit'], {cwd});
|
await gitCommits(['feat: Initial commit'], {cwd});
|
||||||
t.log('$ semantic-release');
|
t.log('$ semantic-release');
|
||||||
({stdout, exitCode} = await execa(cli, [], {env, cwd}));
|
({stdout, exitCode} = await execa(cli, [], {env, cwd, extendEnv: false}));
|
||||||
t.regex(stdout, new RegExp(`Published GitHub release: release-url/${version}`));
|
t.regex(stdout, new RegExp(`Published GitHub release: release-url/${version}`));
|
||||||
t.regex(stdout, new RegExp(`Publishing version ${version} to npm registry`));
|
t.regex(stdout, new RegExp(`Publishing version ${version} to npm registry`));
|
||||||
t.is(exitCode, 0);
|
t.is(exitCode, 0);
|
||||||
@ -120,7 +127,7 @@ test('Release patch, minor and major versions', async (t) => {
|
|||||||
// Retrieve the published package from the registry and check version and gitHead
|
// Retrieve the published package from the registry and check version and gitHead
|
||||||
let {
|
let {
|
||||||
'dist-tags': {latest: releasedVersion},
|
'dist-tags': {latest: releasedVersion},
|
||||||
} = await npmView(packageName, testEnv);
|
} = await npmView(packageName, npmTestEnv);
|
||||||
let head = await gitHead({cwd});
|
let head = await gitHead({cwd});
|
||||||
t.is(releasedVersion, version);
|
t.is(releasedVersion, version);
|
||||||
t.is(await gitTagHead(`v${version}`, {cwd}), head);
|
t.is(await gitTagHead(`v${version}`, {cwd}), head);
|
||||||
@ -149,7 +156,7 @@ test('Release patch, minor and major versions', async (t) => {
|
|||||||
t.log('Commit a fix');
|
t.log('Commit a fix');
|
||||||
await gitCommits(['fix: bar'], {cwd});
|
await gitCommits(['fix: bar'], {cwd});
|
||||||
t.log('$ semantic-release');
|
t.log('$ semantic-release');
|
||||||
({stdout, exitCode} = await execa(cli, [], {env, cwd}));
|
({stdout, exitCode} = await execa(cli, [], {env, cwd, extendEnv: false}));
|
||||||
t.regex(stdout, new RegExp(`Published GitHub release: release-url/${version}`));
|
t.regex(stdout, new RegExp(`Published GitHub release: release-url/${version}`));
|
||||||
t.regex(stdout, new RegExp(`Publishing version ${version} to npm registry`));
|
t.regex(stdout, new RegExp(`Publishing version ${version} to npm registry`));
|
||||||
t.is(exitCode, 0);
|
t.is(exitCode, 0);
|
||||||
@ -161,7 +168,7 @@ test('Release patch, minor and major versions', async (t) => {
|
|||||||
// Retrieve the published package from the registry and check version and gitHead
|
// Retrieve the published package from the registry and check version and gitHead
|
||||||
({
|
({
|
||||||
'dist-tags': {latest: releasedVersion},
|
'dist-tags': {latest: releasedVersion},
|
||||||
} = await npmView(packageName, testEnv));
|
} = await npmView(packageName, npmTestEnv));
|
||||||
head = await gitHead({cwd});
|
head = await gitHead({cwd});
|
||||||
t.is(releasedVersion, version);
|
t.is(releasedVersion, version);
|
||||||
t.is(await gitTagHead(`v${version}`, {cwd}), head);
|
t.is(await gitTagHead(`v${version}`, {cwd}), head);
|
||||||
@ -190,7 +197,7 @@ test('Release patch, minor and major versions', async (t) => {
|
|||||||
t.log('Commit a feature');
|
t.log('Commit a feature');
|
||||||
await gitCommits(['feat: baz'], {cwd});
|
await gitCommits(['feat: baz'], {cwd});
|
||||||
t.log('$ semantic-release');
|
t.log('$ semantic-release');
|
||||||
({stdout, exitCode} = await execa(cli, [], {env, cwd}));
|
({stdout, exitCode} = await execa(cli, [], {env, cwd, extendEnv: false}));
|
||||||
t.regex(stdout, new RegExp(`Published GitHub release: release-url/${version}`));
|
t.regex(stdout, new RegExp(`Published GitHub release: release-url/${version}`));
|
||||||
t.regex(stdout, new RegExp(`Publishing version ${version} to npm registry`));
|
t.regex(stdout, new RegExp(`Publishing version ${version} to npm registry`));
|
||||||
t.is(exitCode, 0);
|
t.is(exitCode, 0);
|
||||||
@ -202,7 +209,7 @@ test('Release patch, minor and major versions', async (t) => {
|
|||||||
// Retrieve the published package from the registry and check version and gitHead
|
// Retrieve the published package from the registry and check version and gitHead
|
||||||
({
|
({
|
||||||
'dist-tags': {latest: releasedVersion},
|
'dist-tags': {latest: releasedVersion},
|
||||||
} = await npmView(packageName, testEnv));
|
} = await npmView(packageName, npmTestEnv));
|
||||||
head = await gitHead({cwd});
|
head = await gitHead({cwd});
|
||||||
t.is(releasedVersion, version);
|
t.is(releasedVersion, version);
|
||||||
t.is(await gitTagHead(`v${version}`, {cwd}), head);
|
t.is(await gitTagHead(`v${version}`, {cwd}), head);
|
||||||
@ -233,7 +240,7 @@ test('Release patch, minor and major versions', async (t) => {
|
|||||||
await gitPush('origin', 'next', {cwd});
|
await gitPush('origin', 'next', {cwd});
|
||||||
await gitCommits(['feat: foo\n\n BREAKING CHANGE: bar'], {cwd});
|
await gitCommits(['feat: foo\n\n BREAKING CHANGE: bar'], {cwd});
|
||||||
t.log('$ semantic-release');
|
t.log('$ semantic-release');
|
||||||
({stdout, exitCode} = await execa(cli, [], {env: {...env, TRAVIS_BRANCH: 'next'}, cwd}));
|
({stdout, exitCode} = await execa(cli, [], {env: {...env, TRAVIS_BRANCH: 'next'}, cwd, extendEnv: false}));
|
||||||
t.regex(stdout, new RegExp(`Published GitHub release: release-url/${version}`));
|
t.regex(stdout, new RegExp(`Published GitHub release: release-url/${version}`));
|
||||||
t.regex(stdout, new RegExp(`Publishing version ${version} to npm registry`));
|
t.regex(stdout, new RegExp(`Publishing version ${version} to npm registry`));
|
||||||
t.is(exitCode, 0);
|
t.is(exitCode, 0);
|
||||||
@ -245,7 +252,7 @@ test('Release patch, minor and major versions', async (t) => {
|
|||||||
// Retrieve the published package from the registry and check version and gitHead
|
// Retrieve the published package from the registry and check version and gitHead
|
||||||
({
|
({
|
||||||
'dist-tags': {next: releasedVersion},
|
'dist-tags': {next: releasedVersion},
|
||||||
} = await npmView(packageName, testEnv));
|
} = await npmView(packageName, npmTestEnv));
|
||||||
head = await gitHead({cwd});
|
head = await gitHead({cwd});
|
||||||
t.is(releasedVersion, version);
|
t.is(releasedVersion, version);
|
||||||
t.is(await gitGetNote(`v${version}`, {cwd}), '{"channels":["next"]}');
|
t.is(await gitGetNote(`v${version}`, {cwd}), '{"channels":["next"]}');
|
||||||
@ -283,7 +290,7 @@ test('Release patch, minor and major versions', async (t) => {
|
|||||||
await merge('next', {cwd});
|
await merge('next', {cwd});
|
||||||
await gitPush('origin', 'master', {cwd});
|
await gitPush('origin', 'master', {cwd});
|
||||||
t.log('$ semantic-release');
|
t.log('$ semantic-release');
|
||||||
({stdout, exitCode} = await execa(cli, [], {env, cwd}));
|
({stdout, exitCode} = await execa(cli, [], {env, cwd, extendEnv: false}));
|
||||||
t.regex(stdout, new RegExp(`Updated GitHub release: release-url/${version}`));
|
t.regex(stdout, new RegExp(`Updated GitHub release: release-url/${version}`));
|
||||||
t.regex(stdout, new RegExp(`Adding version ${version} to npm registry on dist-tag latest`));
|
t.regex(stdout, new RegExp(`Adding version ${version} to npm registry on dist-tag latest`));
|
||||||
t.is(exitCode, 0);
|
t.is(exitCode, 0);
|
||||||
@ -293,7 +300,7 @@ test('Release patch, minor and major versions', async (t) => {
|
|||||||
// Retrieve the published package from the registry and check version and gitHead
|
// Retrieve the published package from the registry and check version and gitHead
|
||||||
({
|
({
|
||||||
'dist-tags': {latest: releasedVersion},
|
'dist-tags': {latest: releasedVersion},
|
||||||
} = await npmView(packageName, testEnv));
|
} = await npmView(packageName, npmTestEnv));
|
||||||
t.is(releasedVersion, version);
|
t.is(releasedVersion, version);
|
||||||
t.is(await gitGetNote(`v${version}`, {cwd}), '{"channels":["next",null]}');
|
t.is(await gitGetNote(`v${version}`, {cwd}), '{"channels":["next",null]}');
|
||||||
t.is(await gitTagHead(`v${version}`, {cwd}), await gitTagHead(`v${version}`, {cwd}));
|
t.is(await gitTagHead(`v${version}`, {cwd}), await gitTagHead(`v${version}`, {cwd}));
|
||||||
@ -318,7 +325,7 @@ test('Exit with 1 if a plugin is not found', async (t) => {
|
|||||||
release: {analyzeCommits: 'non-existing-path', success: false, fail: false},
|
release: {analyzeCommits: 'non-existing-path', success: false, fail: false},
|
||||||
});
|
});
|
||||||
|
|
||||||
const {exitCode, stderr} = await t.throwsAsync(execa(cli, [], {env, cwd}));
|
const {exitCode, stderr} = await t.throwsAsync(execa(cli, [], {env, cwd, extendEnv: false}));
|
||||||
t.is(exitCode, 1);
|
t.is(exitCode, 1);
|
||||||
t.regex(stderr, /Cannot find module/);
|
t.regex(stderr, /Cannot find module/);
|
||||||
});
|
});
|
||||||
@ -336,7 +343,7 @@ test('Exit with 1 if a shareable config is not found', async (t) => {
|
|||||||
release: {extends: 'non-existing-path', success: false, fail: false},
|
release: {extends: 'non-existing-path', success: false, fail: false},
|
||||||
});
|
});
|
||||||
|
|
||||||
const {exitCode, stderr} = await t.throwsAsync(execa(cli, [], {env, cwd}));
|
const {exitCode, stderr} = await t.throwsAsync(execa(cli, [], {env, cwd, extendEnv: false}));
|
||||||
t.is(exitCode, 1);
|
t.is(exitCode, 1);
|
||||||
t.regex(stderr, /Cannot find module/);
|
t.regex(stderr, /Cannot find module/);
|
||||||
});
|
});
|
||||||
@ -357,7 +364,7 @@ test('Exit with 1 if a shareable config reference a not found plugin', async (t)
|
|||||||
});
|
});
|
||||||
await writeJson(path.resolve(cwd, 'shareable.json'), shareable);
|
await writeJson(path.resolve(cwd, 'shareable.json'), shareable);
|
||||||
|
|
||||||
const {exitCode, stderr} = await t.throwsAsync(execa(cli, [], {env, cwd}));
|
const {exitCode, stderr} = await t.throwsAsync(execa(cli, [], {env, cwd, extendEnv: false}));
|
||||||
t.is(exitCode, 1);
|
t.is(exitCode, 1);
|
||||||
t.regex(stderr, /Cannot find module/);
|
t.regex(stderr, /Cannot find module/);
|
||||||
});
|
});
|
||||||
@ -387,7 +394,7 @@ test('Dry-run', async (t) => {
|
|||||||
t.log('Commit a feature');
|
t.log('Commit a feature');
|
||||||
await gitCommits(['feat: Initial commit'], {cwd});
|
await gitCommits(['feat: Initial commit'], {cwd});
|
||||||
t.log('$ semantic-release -d');
|
t.log('$ semantic-release -d');
|
||||||
const {stdout, exitCode} = await execa(cli, ['-d'], {env, cwd});
|
const {stdout, exitCode} = await execa(cli, ['-d'], {env, cwd, extendEnv: false});
|
||||||
t.regex(stdout, new RegExp(`There is no previous release, the next release version is ${version}`));
|
t.regex(stdout, new RegExp(`There is no previous release, the next release version is ${version}`));
|
||||||
t.regex(stdout, new RegExp(`Release note for version ${version}`));
|
t.regex(stdout, new RegExp(`Release note for version ${version}`));
|
||||||
t.regex(stdout, /Initial commit/);
|
t.regex(stdout, /Initial commit/);
|
||||||
@ -400,7 +407,6 @@ test('Dry-run', async (t) => {
|
|||||||
|
|
||||||
test('Allow local releases with "noCi" option', async (t) => {
|
test('Allow local releases with "noCi" option', async (t) => {
|
||||||
const envNoCi = {...env};
|
const envNoCi = {...env};
|
||||||
delete envNoCi.TRAVIS;
|
|
||||||
delete envNoCi.CI;
|
delete envNoCi.CI;
|
||||||
const packageName = 'test-no-ci';
|
const packageName = 'test-no-ci';
|
||||||
const owner = 'git';
|
const owner = 'git';
|
||||||
@ -435,7 +441,7 @@ test('Allow local releases with "noCi" option', async (t) => {
|
|||||||
t.log('Commit a feature');
|
t.log('Commit a feature');
|
||||||
await gitCommits(['feat: Initial commit'], {cwd});
|
await gitCommits(['feat: Initial commit'], {cwd});
|
||||||
t.log('$ semantic-release --no-ci');
|
t.log('$ semantic-release --no-ci');
|
||||||
const {stdout, exitCode} = await execa(cli, ['--no-ci'], {env: envNoCi, cwd});
|
const {stdout, exitCode} = await execa(cli, ['--no-ci'], {env: envNoCi, cwd, extendEnv: false});
|
||||||
t.regex(stdout, new RegExp(`Published GitHub release: release-url/${version}`));
|
t.regex(stdout, new RegExp(`Published GitHub release: release-url/${version}`));
|
||||||
t.regex(stdout, new RegExp(`Publishing version ${version} to npm registry`));
|
t.regex(stdout, new RegExp(`Publishing version ${version} to npm registry`));
|
||||||
t.is(exitCode, 0);
|
t.is(exitCode, 0);
|
||||||
@ -444,7 +450,7 @@ test('Allow local releases with "noCi" option', async (t) => {
|
|||||||
t.is((await readJson(path.resolve(cwd, 'package.json'))).version, version);
|
t.is((await readJson(path.resolve(cwd, 'package.json'))).version, version);
|
||||||
|
|
||||||
// Retrieve the published package from the registry and check version and gitHead
|
// Retrieve the published package from the registry and check version and gitHead
|
||||||
const {version: releasedVersion, gitHead: releasedGitHead} = await npmView(packageName, testEnv);
|
const {version: releasedVersion, gitHead: releasedGitHead} = await npmView(packageName, npmTestEnv);
|
||||||
|
|
||||||
const head = await gitHead({cwd});
|
const head = await gitHead({cwd});
|
||||||
t.is(releasedVersion, version);
|
t.is(releasedVersion, version);
|
||||||
@ -488,7 +494,7 @@ test('Pass options via CLI arguments', async (t) => {
|
|||||||
false,
|
false,
|
||||||
'--debug',
|
'--debug',
|
||||||
],
|
],
|
||||||
{env, cwd}
|
{env, cwd, extendEnv: false}
|
||||||
);
|
);
|
||||||
t.regex(stdout, new RegExp(`Publishing version ${version} to npm registry`));
|
t.regex(stdout, new RegExp(`Publishing version ${version} to npm registry`));
|
||||||
t.is(exitCode, 0);
|
t.is(exitCode, 0);
|
||||||
@ -497,7 +503,7 @@ test('Pass options via CLI arguments', async (t) => {
|
|||||||
t.is((await readJson(path.resolve(cwd, 'package.json'))).version, version);
|
t.is((await readJson(path.resolve(cwd, 'package.json'))).version, version);
|
||||||
|
|
||||||
// Retrieve the published package from the registry and check version and gitHead
|
// Retrieve the published package from the registry and check version and gitHead
|
||||||
const {version: releasedVersion, gitHead: releasedGitHead} = await npmView(packageName, testEnv);
|
const {version: releasedVersion, gitHead: releasedGitHead} = await npmView(packageName, npmTestEnv);
|
||||||
const head = await gitHead({cwd});
|
const head = await gitHead({cwd});
|
||||||
t.is(releasedVersion, version);
|
t.is(releasedVersion, version);
|
||||||
t.is(releasedGitHead, head);
|
t.is(releasedGitHead, head);
|
||||||
@ -553,7 +559,7 @@ test('Run via JS API', async (t) => {
|
|||||||
t.is((await readJson(path.resolve(cwd, 'package.json'))).version, version);
|
t.is((await readJson(path.resolve(cwd, 'package.json'))).version, version);
|
||||||
|
|
||||||
// Retrieve the published package from the registry and check version and gitHead
|
// Retrieve the published package from the registry and check version and gitHead
|
||||||
const {version: releasedVersion, gitHead: releasedGitHead} = await npmView(packageName, testEnv);
|
const {version: releasedVersion, gitHead: releasedGitHead} = await npmView(packageName, npmTestEnv);
|
||||||
const head = await gitHead({cwd});
|
const head = await gitHead({cwd});
|
||||||
t.is(releasedVersion, version);
|
t.is(releasedVersion, version);
|
||||||
t.is(releasedGitHead, head);
|
t.is(releasedGitHead, head);
|
||||||
@ -582,7 +588,7 @@ test('Log unexpected errors from plugins and exit with 1', async (t) => {
|
|||||||
t.log('Commit a feature');
|
t.log('Commit a feature');
|
||||||
await gitCommits(['feat: Initial commit'], {cwd});
|
await gitCommits(['feat: Initial commit'], {cwd});
|
||||||
t.log('$ semantic-release');
|
t.log('$ semantic-release');
|
||||||
const {stderr, exitCode} = await execa(cli, [], {env, cwd, reject: false});
|
const {stderr, exitCode} = await execa(cli, [], {env, cwd, reject: false, extendEnv: false});
|
||||||
// Verify the type and message are logged
|
// Verify the type and message are logged
|
||||||
t.regex(stderr, /Error: a/);
|
t.regex(stderr, /Error: a/);
|
||||||
// Verify the the stacktrace is logged
|
// Verify the the stacktrace is logged
|
||||||
@ -609,7 +615,7 @@ test('Log errors inheriting SemanticReleaseError and exit with 1', async (t) =>
|
|||||||
t.log('Commit a feature');
|
t.log('Commit a feature');
|
||||||
await gitCommits(['feat: Initial commit'], {cwd});
|
await gitCommits(['feat: Initial commit'], {cwd});
|
||||||
t.log('$ semantic-release');
|
t.log('$ semantic-release');
|
||||||
const {stderr, exitCode} = await execa(cli, [], {env, cwd, reject: false});
|
const {stderr, exitCode} = await execa(cli, [], {env, cwd, reject: false, extendEnv: false});
|
||||||
// Verify the type and message are logged
|
// Verify the type and message are logged
|
||||||
t.regex(stderr, /EINHERITED Inherited error/);
|
t.regex(stderr, /EINHERITED Inherited error/);
|
||||||
t.is(exitCode, 1);
|
t.is(exitCode, 1);
|
||||||
@ -630,7 +636,7 @@ test('Exit with 1 if missing permission to push to the remote repository', async
|
|||||||
const {stderr, exitCode} = await execa(
|
const {stderr, exitCode} = await execa(
|
||||||
cli,
|
cli,
|
||||||
['--repository-url', 'http://user:wrong_pass@localhost:2080/git/unauthorized.git'],
|
['--repository-url', 'http://user:wrong_pass@localhost:2080/git/unauthorized.git'],
|
||||||
{env: {...env, GH_TOKEN: 'user:wrong_pass'}, cwd, reject: false}
|
{env: {...env, GH_TOKEN: 'user:wrong_pass'}, cwd, reject: false, extendEnv: false}
|
||||||
);
|
);
|
||||||
// Verify the type and message are logged
|
// Verify the type and message are logged
|
||||||
t.regex(stderr, /EGITNOPERMISSION/);
|
t.regex(stderr, /EGITNOPERMISSION/);
|
||||||
@ -650,7 +656,7 @@ test('Hide sensitive environment variable values from the logs', async (t) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
t.log('$ semantic-release');
|
t.log('$ semantic-release');
|
||||||
const {stdout, stderr} = await execa(cli, [], {env: {...env, MY_TOKEN: 'secret token'}, cwd, reject: false});
|
const {stdout, stderr} = await execa(cli, [], {env: {...env, MY_TOKEN: 'secret token'}, cwd, reject: false, extendEnv: false});
|
||||||
|
|
||||||
t.regex(stdout, new RegExp(`Console: Exposing token ${escapeRegExp(SECRET_REPLACEMENT)}`));
|
t.regex(stdout, new RegExp(`Console: Exposing token ${escapeRegExp(SECRET_REPLACEMENT)}`));
|
||||||
t.regex(stdout, new RegExp(`Log: Exposing token ${escapeRegExp(SECRET_REPLACEMENT)}`));
|
t.regex(stdout, new RegExp(`Log: Exposing token ${escapeRegExp(SECRET_REPLACEMENT)}`));
|
||||||
@ -680,7 +686,7 @@ test('Use the valid git credentials when multiple are provided', async (t) => {
|
|||||||
|
|
||||||
test('Use the repository URL as is if none of the given git credentials are valid', async (t) => {
|
test('Use the repository URL as is if none of the given git credentials are valid', async (t) => {
|
||||||
const {cwd} = await gitbox.createRepo('test-invalid-auth');
|
const {cwd} = await gitbox.createRepo('test-invalid-auth');
|
||||||
const dummyUrl = 'http://toto@localhost:2080/git/test-auth.git';
|
const dummyUrl = 'http://toto@localhost:2080/git/test-invalid-auth.git';
|
||||||
|
|
||||||
t.is(
|
t.is(
|
||||||
await getAuthUrl({
|
await getAuthUrl({
|
||||||
|
Loading…
x
Reference in New Issue
Block a user