Compare commits
43
Commits
windows-git
...
v20.1.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fbede54388 | ||
|
|
6d286cd5d6 | ||
|
|
bc6d8b4411 | ||
|
|
9986f6fe20 | ||
|
|
6bd6afd8f7 | ||
|
|
00714c0fc8 | ||
|
|
c71d5d94ce | ||
|
|
c04e827757 | ||
|
|
6ead75bf73 | ||
|
|
ab3dfe4aba | ||
|
|
df6dbf0295 | ||
|
|
ea8ed80e71 | ||
|
|
e47ea08255 | ||
|
|
4e5b181ffb | ||
|
|
5acdaabaaf | ||
|
|
724dc823fa | ||
|
|
31d9bfe00a | ||
|
|
7bbaaf9a48 | ||
|
|
42b67ce994 | ||
|
|
f991a599f5 | ||
|
|
1775ed80b9 | ||
|
|
1beeb84c90 | ||
|
|
d170f73e0b | ||
|
|
5df624c6e5 | ||
|
|
914b0a2642 | ||
|
|
140e36d60f | ||
|
|
e9efbc7a52 | ||
|
|
3f3b286fb8 | ||
|
|
4db048423d | ||
|
|
be2e1965ae | ||
|
|
e607e234f3 | ||
|
|
c7b8e10bd1 | ||
|
|
ac1371470d | ||
|
|
7e6d9226fa | ||
|
|
63073d64c0 | ||
|
|
cb45d27726 | ||
|
|
f914c1ed86 | ||
|
|
c4da008e29 | ||
|
|
b707475b85 | ||
|
|
b9579349ca | ||
|
|
4b74f005c4 | ||
|
|
bbb5e5ade6 | ||
|
|
a1e0467f04 |
@@ -6,8 +6,14 @@ name: Release
|
||||
- next
|
||||
- beta
|
||||
- "*.x"
|
||||
permissions:
|
||||
contents: read # for checkout
|
||||
jobs:
|
||||
release:
|
||||
permissions:
|
||||
contents: write # to be able to publish a GitHub release
|
||||
issues: write # to be able to comment on released issues
|
||||
pull-requests: write # to be able to comment on released pull requests
|
||||
name: release
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
@@ -15,7 +21,7 @@ jobs:
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
cache: npm
|
||||
node-version: 16
|
||||
node-version: lts/*
|
||||
- run: npm ci
|
||||
- run: npx semantic-release
|
||||
env:
|
||||
|
||||
@@ -12,6 +12,9 @@ on:
|
||||
- opened
|
||||
- synchronize
|
||||
|
||||
permissions:
|
||||
contents: read # to fetch code (actions/checkout)
|
||||
|
||||
jobs:
|
||||
test_matrix:
|
||||
strategy:
|
||||
@@ -21,6 +24,7 @@ jobs:
|
||||
- 19
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 10
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
+2
-2
@@ -4,8 +4,8 @@
|
||||
|
||||
- [Getting started](docs/usage/getting-started.md#getting-started)
|
||||
- [Installation](docs/usage/installation.md#installation)
|
||||
- [CI Configuration](docs/usage/ci-configuration.md#ci-configuration)
|
||||
- [Configuration](docs/usage/configuration.md#configuration)
|
||||
- [CI Configuration](docs/usage/ci-configuration.md)
|
||||
- [Configuration](docs/usage/configuration.md)
|
||||
- [Plugins](docs/usage/plugins.md)
|
||||
- [Workflow configuration](docs/usage/workflow-configuration.md)
|
||||
- [Shareable configurations](docs/usage/shareable-configurations.md)
|
||||
|
||||
@@ -25,7 +25,7 @@ See https://github.com/semantic-release/semantic-release/blob/master/docs/suppor
|
||||
|
||||
execa("git", ["--version"])
|
||||
.then(({ stdout }) => {
|
||||
const gitVersion = findVersions(stdout)[0];
|
||||
const gitVersion = findVersions(stdout, { loose: true })[0];
|
||||
if (lt(gitVersion, MIN_GIT_VERSION)) {
|
||||
console.error(`[semantic-release]: Git version ${MIN_GIT_VERSION} is required. Found ${gitVersion}.`);
|
||||
process.exit(1);
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
const semanticRelease = require("semantic-release");
|
||||
const { WritableStreamBuffer } = require("stream-buffers");
|
||||
|
||||
const stdoutBuffer = WritableStreamBuffer();
|
||||
const stderrBuffer = WritableStreamBuffer();
|
||||
const stdoutBuffer = new WritableStreamBuffer();
|
||||
const stderrBuffer = new WritableStreamBuffer();
|
||||
|
||||
try {
|
||||
const result = await semanticRelease(
|
||||
|
||||
@@ -171,3 +171,6 @@
|
||||
- `verifyConditions` Validate configuration, `Cargo.toml`, and local cargo executable. Also, logs in into `crates.io`.
|
||||
- `prepare` Write the new version number into `Cargo.toml` file and perform `cargo check` if configured.
|
||||
- `publish` Publish the Rust crate to `crates.io`
|
||||
- [semantic-release-coralogix](https://github.com/adobe/semantic-release-coralogix)
|
||||
- `verifyConditions` Verified that required credentials are provided and API is accessible
|
||||
- `publish` add a release tag to Coralogix
|
||||
|
||||
@@ -29,11 +29,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v2
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: "lts/*"
|
||||
- name: Install dependencies
|
||||
|
||||
@@ -62,7 +62,7 @@ The Git history of the repository is now:
|
||||
|
||||
We now decide to work on another future major release, in parallel of the beta one, which will also be composed of multiple features, some of them being breaking changes.
|
||||
|
||||
To implement that workflow we can create the branch `alpha` from the branch `beta` and commit our first feature there. When pushing that commit, **semantic-release** will publish the pre-release version `3.0.0-alpha.1` on the dist-tag `@alpha`. That allow us to run integration tests by installing our module with `npm install example-module@alpha`. Other users installing with `npm install example-module` will still receive the version `1.0.0`.
|
||||
To implement that workflow we can create the branch `alpha` from the branch `beta` and commit our first feature there. When pushing that commit, **semantic-release** will publish the pre-release version `3.0.0-alpha.1` on the dist-tag `@alpha`. That allow us to run integration tests by installing our module with `npm install example-module@alpha`. Other users installing with `npm install example-module` will still receive the version `1.0.1`.
|
||||
|
||||
The Git history of the repository is now:
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ See our [Node Support Policy](node-support-policy.md) for our long-term promise
|
||||
The recommended approach is to run the `semantic-release` command from a CI job running on the latest available LTS version of node.
|
||||
This can either be a job used by your project to test on the latest Node LTS version or a dedicated job for the release steps.
|
||||
|
||||
See [CI configuration](../usage/ci-configuration.md) and [CI configuration recipes](../recipes/release-workflow/README.md#ci-configurations) for more details.
|
||||
See [CI configuration](../usage/ci-configuration.md) and [CI configuration recipes](../recipes/ci-configurations/README.md#ci-configurations) for more details.
|
||||
|
||||
## Alternative solutions
|
||||
|
||||
@@ -24,7 +24,7 @@ See [CI configuration](../usage/ci-configuration.md) and [CI configuration recip
|
||||
Use it to execute the `semantic-release` command.
|
||||
|
||||
```bash
|
||||
$ npx -p node@lts -c "npx semantic-release"
|
||||
$ npx -p node@v18-lts -c "npx semantic-release"
|
||||
```
|
||||
|
||||
**Note**: See [What is npx](./FAQ.md#what-is-npx) for more details.
|
||||
|
||||
@@ -14,7 +14,7 @@ Here are a few examples of the CI services that can be used to achieve this:
|
||||
- [Wercker Workflows](http://devcenter.wercker.com/docs/workflows)
|
||||
- [GoCD Pipelines](https://docs.gocd.org/current/introduction/concepts_in_go.html#pipeline).
|
||||
|
||||
See [CI configuration recipes](../recipes/ci-configurations#ci-configurations) for more details.
|
||||
See [CI configuration recipes](../recipes/ci-configurations/README.md) for more details.
|
||||
|
||||
## Authentication
|
||||
|
||||
@@ -45,6 +45,6 @@ See each plugin's documentation for the environment variables required.
|
||||
|
||||
The authentication token/credentials have to be made available in the CI service via environment variables.
|
||||
|
||||
See [CI configuration recipes](../recipes/ci-configurations#ci-configurations) for more details on how to configure environment variables in your CI service.
|
||||
See [CI configuration recipes](../recipes/ci-configurations/README.md) for more details on how to configure environment variables in your CI service.
|
||||
|
||||
**Note**: The environment variables `GH_TOKEN`, `GITHUB_TOKEN`, `GL_TOKEN` and `GITLAB_TOKEN` can be used for both the Git authentication and the API authentication required by [@semantic-release/github](https://github.com/semantic-release/github) and [@semantic-release/gitlab](https://github.com/semantic-release/gitlab).
|
||||
|
||||
@@ -12,7 +12,7 @@ See [Release workflow recipes](../recipes/release-workflow/README.md#release-wor
|
||||
The release workflow is configured via the [branches option](./configuration.md#branches) which accepts a single or an array of branch definitions.
|
||||
Each branch can be defined either as a string, a [glob](https://github.com/micromatch/micromatch#matching-features) or an object. For string and glob definitions each [property](#branches-properties) will be defaulted.
|
||||
|
||||
A branch can defined as one of three types:
|
||||
A branch can be defined as one of three types:
|
||||
|
||||
- [release](#release-branches): to make releases on top of the last version released
|
||||
- [maintenance](#maintenance-branches): to make releases on top of an old release
|
||||
|
||||
+12
-3
@@ -52,9 +52,18 @@ export async function loadPlugin({cwd}, name, pluginsPath) {
|
||||
? dirname(resolveFrom.silent(__dirname, pluginsPath[name]) || resolveFrom(cwd, pluginsPath[name]))
|
||||
: __dirname;
|
||||
|
||||
// See https://github.com/mysticatea/eslint-plugin-node/issues/250
|
||||
// eslint-disable-next-line node/no-unsupported-features/es-syntax
|
||||
return isFunction(name) ? name : (await import(resolveFrom.silent(basePath, name) || resolveFrom(cwd, name))).default;
|
||||
if (isFunction(name)) {
|
||||
return name;
|
||||
}
|
||||
|
||||
const file = resolveFrom.silent(basePath, name) || resolveFrom(cwd, name);
|
||||
const { default: cjsExport, ...esmNamedExports } = await import(`file://${file}`);
|
||||
|
||||
if (cjsExport) {
|
||||
return cjsExport;
|
||||
}
|
||||
|
||||
return esmNamedExports;
|
||||
}
|
||||
|
||||
export function parseConfig(plugin) {
|
||||
|
||||
Generated
+3952
-3672
File diff suppressed because it is too large
Load Diff
+11
-11
@@ -32,16 +32,16 @@
|
||||
"@semantic-release/npm": "^9.0.0",
|
||||
"@semantic-release/release-notes-generator": "^10.0.0",
|
||||
"aggregate-error": "^4.0.1",
|
||||
"cosmiconfig": "^7.0.0",
|
||||
"cosmiconfig": "^8.0.0",
|
||||
"debug": "^4.0.0",
|
||||
"env-ci": "^8.0.0",
|
||||
"execa": "^6.1.0",
|
||||
"execa": "^7.0.0",
|
||||
"figures": "^5.0.0",
|
||||
"find-versions": "^5.1.0",
|
||||
"get-stream": "^6.0.0",
|
||||
"git-log-parser": "^1.2.0",
|
||||
"hook-std": "^3.0.0",
|
||||
"hosted-git-info": "^5.1.0",
|
||||
"hosted-git-info": "^6.0.0",
|
||||
"lodash-es": "^4.17.21",
|
||||
"marked": "^4.1.0",
|
||||
"marked-terminal": "^5.1.1",
|
||||
@@ -51,29 +51,29 @@
|
||||
"read-pkg-up": "^9.1.0",
|
||||
"resolve-from": "^5.0.0",
|
||||
"semver": "^7.3.2",
|
||||
"semver-diff": "^3.1.1",
|
||||
"semver-diff": "^4.0.0",
|
||||
"signale": "^1.2.1",
|
||||
"yargs": "^17.5.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"ava": "4.3.3",
|
||||
"c8": "7.12.0",
|
||||
"ava": "5.2.0",
|
||||
"c8": "7.13.0",
|
||||
"clear-module": "4.1.2",
|
||||
"codecov": "3.8.3",
|
||||
"delay": "5.0.0",
|
||||
"dockerode": "3.3.4",
|
||||
"file-url": "^4.0.0",
|
||||
"fs-extra": "^10.1.0",
|
||||
"fs-extra": "^11.0.0",
|
||||
"got": "^12.5.0",
|
||||
"js-yaml": "4.1.0",
|
||||
"mockserver-client": "5.14.0",
|
||||
"nock": "13.2.9",
|
||||
"mockserver-client": "5.15.0",
|
||||
"nock": "13.3.0",
|
||||
"p-retry": "^5.1.1",
|
||||
"prettier": "^2.7.1",
|
||||
"sinon": "14.0.0",
|
||||
"sinon": "15.0.2",
|
||||
"stream-buffers": "3.0.2",
|
||||
"tempy": "^3.0.0",
|
||||
"testdouble": "3.16.6"
|
||||
"testdouble": "3.17.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
export async function verifyConditions(pluginConfig, context) {
|
||||
context.logger.log("verifyConditions called");
|
||||
}
|
||||
@@ -23,7 +23,10 @@ export async function start() {
|
||||
container = await docker.createContainer({
|
||||
Tty: true,
|
||||
Image: IMAGE,
|
||||
PortBindings: {[`${SERVER_PORT}/tcp`]: [{HostPort: `${HOST_PORT}`}]},
|
||||
HostConfig: {
|
||||
PortBindings: {[`${SERVER_PORT}/tcp`]: [{HostPort: `${HOST_PORT}`}]}
|
||||
},
|
||||
ExposedPorts: {[`${SERVER_PORT}/tcp`]: {}}
|
||||
});
|
||||
await container.start();
|
||||
|
||||
|
||||
@@ -19,7 +19,10 @@ export async function start() {
|
||||
container = await docker.createContainer({
|
||||
Tty: true,
|
||||
Image: IMAGE,
|
||||
PortBindings: {[`${MOCK_SERVER_PORT}/tcp`]: [{HostPort: `${MOCK_SERVER_PORT}`}]},
|
||||
HostConfig: {
|
||||
PortBindings: {[`${MOCK_SERVER_PORT}/tcp`]: [{HostPort: `${MOCK_SERVER_PORT}`}]}
|
||||
},
|
||||
ExposedPorts: {[`${MOCK_SERVER_PORT}/tcp`]: {}}
|
||||
});
|
||||
await container.start();
|
||||
|
||||
|
||||
@@ -25,8 +25,11 @@ export async function start() {
|
||||
container = await docker.createContainer({
|
||||
Tty: true,
|
||||
Image: IMAGE,
|
||||
PortBindings: {[`${REGISTRY_PORT}/tcp`]: [{HostPort: `${REGISTRY_PORT}`}]},
|
||||
Binds: [`${path.join(__dirname, 'config.yaml')}:/verdaccio/conf/config.yaml`],
|
||||
HostConfig: {
|
||||
PortBindings: {[`${REGISTRY_PORT}/tcp`]: [{HostPort: `${REGISTRY_PORT}`}]},
|
||||
Binds: [`${path.join(__dirname, 'config.yaml')}:/verdaccio/conf/config.yaml`],
|
||||
},
|
||||
ExposedPorts: {[`${REGISTRY_PORT}/tcp`]: {}}
|
||||
});
|
||||
|
||||
await container.start();
|
||||
|
||||
+5
-1
@@ -39,7 +39,11 @@ test.beforeEach((t) => {
|
||||
};
|
||||
});
|
||||
|
||||
test("Plugins are called with expected values", async (t) => {
|
||||
test.afterEach.always((t) => {
|
||||
td.reset();
|
||||
});
|
||||
|
||||
test.serial("Plugins are called with expected values", async (t) => {
|
||||
// Create a git repository, set the current working directory at the root of the repo
|
||||
const { cwd, repositoryUrl } = await gitRepo(true);
|
||||
// Add commits to the master branch
|
||||
|
||||
@@ -44,6 +44,7 @@ const cli = path.resolve("./bin/semantic-release.js");
|
||||
const pluginError = path.resolve("./test/fixtures/plugin-error");
|
||||
const pluginInheritedError = path.resolve("./test/fixtures/plugin-error-inherited");
|
||||
const pluginLogEnv = path.resolve("./test/fixtures/plugin-log-env");
|
||||
const pluginEsmNamedExports = path.resolve("./test/fixtures/plugin-esm-named-exports");
|
||||
|
||||
test.before(async () => {
|
||||
await Promise.all([gitbox.start(), npmRegistry.start(), mockServer.start()]);
|
||||
@@ -597,7 +598,7 @@ test("Log unexpected errors from plugins and exit with 1", async (t) => {
|
||||
// Verify the type and message are logged
|
||||
t.regex(stderr, /Error: a/);
|
||||
// Verify the the stacktrace is logged
|
||||
t.regex(stderr, new RegExp(pluginError));
|
||||
t.regex(stderr, new RegExp(process.platform === "win32" ? pluginError.replace(/\\/g, "\\\\") : pluginError));
|
||||
// Verify the Error properties are logged
|
||||
t.regex(stderr, /errorProperty: 'errorProperty'/);
|
||||
t.is(exitCode, 1);
|
||||
@@ -686,6 +687,7 @@ test("Use the valid git credentials when multiple are provided", async (t) => {
|
||||
BB_TOKEN_BASIC_AUTH: gitbox.gitCredential,
|
||||
GIT_ASKPASS: "echo",
|
||||
GIT_TERMINAL_PROMPT: 0,
|
||||
GIT_CONFIG_PARAMETERS: "'credential.helper='",
|
||||
},
|
||||
branch: { name: "master" },
|
||||
options: { repositoryUrl: "http://toto@localhost:2080/git/test-auth.git" },
|
||||
@@ -706,6 +708,7 @@ test("Use the repository URL as is if none of the given git credentials are vali
|
||||
GITLAB_TOKEN: "trash",
|
||||
GIT_ASKPASS: "echo",
|
||||
GIT_TERMINAL_PROMPT: 0,
|
||||
GIT_CONFIG_PARAMETERS: "'credential.helper='",
|
||||
},
|
||||
branch: { name: "master" },
|
||||
options: { repositoryUrl: dummyUrl },
|
||||
@@ -713,3 +716,26 @@ test("Use the repository URL as is if none of the given git credentials are vali
|
||||
dummyUrl
|
||||
);
|
||||
});
|
||||
|
||||
test("ESM Plugin with named exports", async (t) => {
|
||||
const packageName = "plugin-exports";
|
||||
// Create a git repository, set the current working directory at the root of the repo
|
||||
t.log("Create git repository");
|
||||
const { cwd, repositoryUrl } = await gitbox.createRepo(packageName);
|
||||
await writeJson(path.resolve(cwd, "package.json"), {
|
||||
name: packageName,
|
||||
version: "0.0.0-dev",
|
||||
repository: { url: repositoryUrl },
|
||||
release: { plugins: [pluginEsmNamedExports] },
|
||||
});
|
||||
|
||||
t.log("$ semantic-release");
|
||||
const { stdout, stderr } = await execa(cli, [], {
|
||||
env: { ...env, MY_TOKEN: "secret token" },
|
||||
cwd,
|
||||
reject: false,
|
||||
extendEnv: false,
|
||||
});
|
||||
|
||||
t.regex(stdout, new RegExp(`verifyConditions called`));
|
||||
});
|
||||
|
||||
@@ -199,7 +199,18 @@ test('loadPlugin', async (t) => {
|
||||
await loadPlugin({cwd}, './plugin-noop.cjs', {'./plugin-noop.cjs': './test/fixtures'}),
|
||||
'From a shareable config context'
|
||||
);
|
||||
t.is(func, await loadPlugin({cwd}, func, {}), 'Defined as a function');
|
||||
t.is(
|
||||
(await import("../fixtures/plugin-noop.cjs")).default,
|
||||
await loadPlugin({ cwd }, "./plugin-noop.cjs", { "./plugin-noop.cjs": "./test/fixtures" }),
|
||||
"From a shareable config context"
|
||||
);
|
||||
const { ...namedExports } = await import("../fixtures/plugin-esm-named-exports.js");
|
||||
const plugin = await loadPlugin({ cwd }, "./plugin-esm-named-exports.js", {
|
||||
"./plugin-esm-named-exports.js": "./test/fixtures",
|
||||
});
|
||||
|
||||
t.deepEqual(namedExports, plugin, "ESM with named exports");
|
||||
t.is(func, await loadPlugin({ cwd }, func, {}), "Defined as a function");
|
||||
});
|
||||
|
||||
test('parseConfig', (t) => {
|
||||
|
||||
Reference in New Issue
Block a user