mirror of
https://github.com/changesets/action
synced 2026-10-26 16:39:56 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5f3b898718 |
@@ -1,40 +1,5 @@
|
|||||||
# @changesets/action
|
# @changesets/action
|
||||||
|
|
||||||
## 1.4.5
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- [#282](https://github.com/changesets/action/pull/282) [`eb19e25`](https://github.com/changesets/action/commit/eb19e25e7797cf33dc2de4caa071e85a8057a0f0) Thanks [@mark-omarov](https://github.com/mark-omarov)! - Updated a few dependencies to patch the security vulnerabilities that were reported for their older versions.
|
|
||||||
|
|
||||||
## 1.4.4
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- [#291](https://github.com/changesets/action/pull/291) [`db8a109`](https://github.com/changesets/action/commit/db8a1099bc0ba1dd6f46a5b9df4212e4f69e78c9) Thanks [@varl](https://github.com/varl)! - Wire up [`@octokit/plugin-throttling`](https://github.com/octokit/plugin-throttling.js) with all GitHub Octokit instances
|
|
||||||
|
|
||||||
## 1.4.3
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- [#289](https://github.com/changesets/action/pull/289) [`8b28186`](https://github.com/changesets/action/commit/8b2818674de86a7fc69aebb9ed6b486ee32eb96e) Thanks [@varl](https://github.com/varl)! - Use logging provided by `@actions/core`
|
|
||||||
|
|
||||||
## 1.4.2
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- [#286](https://github.com/changesets/action/pull/286) [`225a1e8`](https://github.com/changesets/action/commit/225a1e8cbcabb7b585174ba0ad806549db40d4cd) Thanks [@varl](https://github.com/varl)! - This patch implements the [`@octokit/plugin-throttling`](https://github.com/octokit/plugin-throttling.js) plugin and [wires
|
|
||||||
it up with the internal GitHub Octokit instance](https://github.com/actions/toolkit/tree/457303960f03375db6f033e214b9f90d79c3fe5c/packages/github#extending-the-octokit-instance).
|
|
||||||
|
|
||||||
This plugin is recommended by [the Octokit docs](://octokit.github.io/rest.js/v19#throttling) as it implements all the GitHub [best practices for integrators](https://docs.github.com/en/rest/guides/best-practices-for-integrators?apiVersion=2022-11-28).
|
|
||||||
|
|
||||||
This should help with `changesets/action` gitting spurious secondary rate limits and failing CI jobs, for which the only known workaround is to simply re-run the job.
|
|
||||||
|
|
||||||
## 1.4.1
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- [#123](https://github.com/changesets/action/pull/123) [`b78f480`](https://github.com/changesets/action/commit/b78f48099899f0a853c5d9cd3feb21a5440babbd) Thanks [@Andarist](https://github.com/Andarist)! - Updated `@actions/*` dependencies to avoid using deprecated features of the runner.
|
|
||||||
|
|
||||||
## 1.4.0
|
## 1.4.0
|
||||||
|
|
||||||
### Minor Changes
|
### Minor Changes
|
||||||
|
|||||||
@@ -41,12 +41,12 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repo
|
- name: Checkout Repo
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Setup Node.js 16
|
- name: Setup Node.js 12.x
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 12.x
|
||||||
|
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: yarn
|
run: yarn
|
||||||
@@ -77,12 +77,12 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repo
|
- name: Checkout Repo
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Setup Node.js 16.x
|
- name: Setup Node.js 12.x
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16.x
|
node-version: 12.x
|
||||||
|
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: yarn
|
run: yarn
|
||||||
@@ -142,12 +142,12 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repo
|
- name: Checkout Repo
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Setup Node.js 16.x
|
- name: Setup Node.js 12.x
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16.x
|
node-version: 12.x
|
||||||
|
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: yarn
|
run: yarn
|
||||||
@@ -186,12 +186,12 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repo
|
- name: Checkout Repo
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Setup Node.js 16.x
|
- name: Setup Node.js 12.x
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16.x
|
node-version: 12.x
|
||||||
|
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: yarn
|
run: yarn
|
||||||
|
|||||||
Vendored
+921
-63
File diff suppressed because one or more lines are too long
+18
-24
@@ -1,29 +1,19 @@
|
|||||||
{
|
{
|
||||||
"name": "@changesets/action",
|
"name": "@changesets/action",
|
||||||
"version": "1.4.5",
|
"version": "1.4.0",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@changesets/changelog-github": "^0.4.2",
|
"@changesets/changelog-github": "^0.4.2",
|
||||||
"@changesets/cli": "^2.20.0",
|
"@changesets/cli": "^2.20.0",
|
||||||
"@changesets/write": "^0.1.6",
|
"@changesets/write": "^0.1.6",
|
||||||
"@vercel/ncc": "^0.36.1",
|
|
||||||
"fixturez": "^1.1.0",
|
"fixturez": "^1.1.0",
|
||||||
|
"parcel": "^1.12.3",
|
||||||
"prettier": "^2.0.5",
|
"prettier": "^2.0.5",
|
||||||
"typescript": "^5.0.4",
|
"typescript": "^3.5.3"
|
||||||
"@babel/core": "^7.13.10",
|
|
||||||
"@babel/preset-env": "^7.13.10",
|
|
||||||
"@babel/preset-typescript": "^7.13.0",
|
|
||||||
"@types/fs-extra": "^8.0.0",
|
|
||||||
"@types/jest": "^29.5.1",
|
|
||||||
"@types/node": "^12.7.1",
|
|
||||||
"@types/semver": "^6.0.2",
|
|
||||||
"babel-jest": "^29.5.0",
|
|
||||||
"husky": "^3.0.3",
|
|
||||||
"jest": "^29.5.0"
|
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "ncc build src/index.ts -o dist --transpile-only --minify",
|
"build": "parcel build ./src/index.ts --no-source-maps --target=node --bundle-node-modules",
|
||||||
"test": "jest",
|
"test": "jest",
|
||||||
"test:watch": "yarn test --watch",
|
"test:watch": "yarn test --watch",
|
||||||
"changeset": "changeset",
|
"changeset": "changeset",
|
||||||
@@ -34,14 +24,23 @@
|
|||||||
"node": ">= 16"
|
"node": ">= 16"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.10.0",
|
"@actions/core": "^1.3.0",
|
||||||
"@actions/exec": "^1.1.1",
|
"@actions/exec": "^1.1.0",
|
||||||
"@actions/github": "^5.1.1",
|
"@actions/github": "^4.0.0",
|
||||||
|
"@babel/core": "^7.13.10",
|
||||||
|
"@babel/preset-env": "^7.13.10",
|
||||||
|
"@babel/preset-typescript": "^7.13.0",
|
||||||
"@changesets/pre": "^1.0.9",
|
"@changesets/pre": "^1.0.9",
|
||||||
"@changesets/read": "^0.5.3",
|
"@changesets/read": "^0.5.3",
|
||||||
"@manypkg/get-packages": "^1.1.3",
|
"@manypkg/get-packages": "^1.1.3",
|
||||||
"@octokit/plugin-throttling": "^5.2.1",
|
"@types/fs-extra": "^8.0.0",
|
||||||
|
"@types/jest": "^24.0.18",
|
||||||
|
"@types/node": "^12.7.1",
|
||||||
|
"@types/semver": "^6.0.2",
|
||||||
|
"babel-jest": "^24.9.0",
|
||||||
"fs-extra": "^8.1.0",
|
"fs-extra": "^8.1.0",
|
||||||
|
"husky": "^3.0.3",
|
||||||
|
"jest": "^24.9.0",
|
||||||
"mdast-util-to-string": "^1.0.6",
|
"mdast-util-to-string": "^1.0.6",
|
||||||
"remark-parse": "^7.0.1",
|
"remark-parse": "^7.0.1",
|
||||||
"remark-stringify": "^7.0.3",
|
"remark-stringify": "^7.0.3",
|
||||||
@@ -52,10 +51,5 @@
|
|||||||
"husky": {
|
"husky": {
|
||||||
"hooks": {}
|
"hooks": {}
|
||||||
},
|
},
|
||||||
"prettier": {},
|
"prettier": {}
|
||||||
"resolutions": {
|
|
||||||
"**/@octokit/core": "4.2.0",
|
|
||||||
"trim": "^0.0.3",
|
|
||||||
"y18n": "^4.0.1"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
exports[`version creates simple PR 1`] = `
|
exports[`version creates simple PR 1`] = `
|
||||||
[
|
Array [
|
||||||
{
|
Object {
|
||||||
"base": "some-branch",
|
"base": "some-branch",
|
||||||
"body": "This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or [setup this action to publish automatically](https://github.com/changesets/action#with-publishing). If you're not ready to do a release yet, that's fine, whenever you add more changesets to some-branch, this PR will be updated.
|
"body": "This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or [setup this action to publish automatically](https://github.com/changesets/action#with-publishing). If you're not ready to do a release yet, that's fine, whenever you add more changesets to some-branch, this PR will be updated.
|
||||||
|
|
||||||
@@ -34,8 +34,8 @@ exports[`version creates simple PR 1`] = `
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`version does not include any release information if a message with simplified release info exceeds size limit 1`] = `
|
exports[`version does not include any release information if a message with simplified release info exceeds size limit 1`] = `
|
||||||
[
|
Array [
|
||||||
{
|
Object {
|
||||||
"base": "some-branch",
|
"base": "some-branch",
|
||||||
"body": "This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or [setup this action to publish automatically](https://github.com/changesets/action#with-publishing). If you're not ready to do a release yet, that's fine, whenever you add more changesets to some-branch, this PR will be updated.
|
"body": "This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or [setup this action to publish automatically](https://github.com/changesets/action#with-publishing). If you're not ready to do a release yet, that's fine, whenever you add more changesets to some-branch, this PR will be updated.
|
||||||
|
|
||||||
@@ -52,8 +52,8 @@ exports[`version does not include any release information if a message with simp
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`version does not include changelog entries if full message exceeds size limit 1`] = `
|
exports[`version does not include changelog entries if full message exceeds size limit 1`] = `
|
||||||
[
|
Array [
|
||||||
{
|
Object {
|
||||||
"base": "some-branch",
|
"base": "some-branch",
|
||||||
"body": "This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or [setup this action to publish automatically](https://github.com/changesets/action#with-publishing). If you're not ready to do a release yet, that's fine, whenever you add more changesets to some-branch, this PR will be updated.
|
"body": "This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or [setup this action to publish automatically](https://github.com/changesets/action#with-publishing). If you're not ready to do a release yet, that's fine, whenever you add more changesets to some-branch, this PR will be updated.
|
||||||
|
|
||||||
@@ -74,8 +74,8 @@ exports[`version does not include changelog entries if full message exceeds size
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`version doesn't include ignored package that got a dependency update in the PR body 1`] = `
|
exports[`version doesn't include ignored package that got a dependency update in the PR body 1`] = `
|
||||||
[
|
Array [
|
||||||
{
|
Object {
|
||||||
"base": "some-branch",
|
"base": "some-branch",
|
||||||
"body": "This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or [setup this action to publish automatically](https://github.com/changesets/action#with-publishing). If you're not ready to do a release yet, that's fine, whenever you add more changesets to some-branch, this PR will be updated.
|
"body": "This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or [setup this action to publish automatically](https://github.com/changesets/action#with-publishing). If you're not ready to do a release yet, that's fine, whenever you add more changesets to some-branch, this PR will be updated.
|
||||||
|
|
||||||
@@ -96,8 +96,8 @@ exports[`version doesn't include ignored package that got a dependency update in
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`version only includes bumped packages in the PR body 1`] = `
|
exports[`version only includes bumped packages in the PR body 1`] = `
|
||||||
[
|
Array [
|
||||||
{
|
Object {
|
||||||
"base": "some-branch",
|
"base": "some-branch",
|
||||||
"body": "This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or [setup this action to publish automatically](https://github.com/changesets/action#with-publishing). If you're not ready to do a release yet, that's fine, whenever you add more changesets to some-branch, this PR will be updated.
|
"body": "This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or [setup this action to publish automatically](https://github.com/changesets/action#with-publishing). If you're not ready to do a release yet, that's fine, whenever you add more changesets to some-branch, this PR will be updated.
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
exports[`it sorts the things right 1`] = `
|
exports[`it sorts the things right 1`] = `
|
||||||
[
|
Array [
|
||||||
{
|
Object {
|
||||||
"highestLevel": 3,
|
"highestLevel": 3,
|
||||||
"name": "c",
|
"name": "c",
|
||||||
"private": false,
|
"private": false,
|
||||||
},
|
},
|
||||||
{
|
Object {
|
||||||
"highestLevel": 1,
|
"highestLevel": 1,
|
||||||
"name": "b",
|
"name": "b",
|
||||||
"private": false,
|
"private": false,
|
||||||
},
|
},
|
||||||
{
|
Object {
|
||||||
"highestLevel": 3,
|
"highestLevel": 3,
|
||||||
"name": "a",
|
"name": "a",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
|||||||
+4
-3
@@ -1,4 +1,5 @@
|
|||||||
import { exec, getExecOutput } from "@actions/exec";
|
import { exec } from "@actions/exec";
|
||||||
|
import { execWithOutput } from "./utils";
|
||||||
|
|
||||||
export const setupUser = async () => {
|
export const setupUser = async () => {
|
||||||
await exec("git", [
|
await exec("git", [
|
||||||
@@ -34,7 +35,7 @@ export const pushTags = async () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const switchToMaybeExistingBranch = async (branch: string) => {
|
export const switchToMaybeExistingBranch = async (branch: string) => {
|
||||||
let { stderr } = await getExecOutput("git", ["checkout", branch], {
|
let { stderr } = await execWithOutput("git", ["checkout", branch], {
|
||||||
ignoreReturnCode: true,
|
ignoreReturnCode: true,
|
||||||
});
|
});
|
||||||
let isCreatingBranch = !stderr
|
let isCreatingBranch = !stderr
|
||||||
@@ -58,6 +59,6 @@ export const commitAll = async (message: string) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const checkIfClean = async (): Promise<boolean> => {
|
export const checkIfClean = async (): Promise<boolean> => {
|
||||||
const { stdout } = await getExecOutput("git", ["status", "--porcelain"]);
|
const { stdout } = await execWithOutput("git", ["status", "--porcelain"]);
|
||||||
return !stdout.length;
|
return !stdout.length;
|
||||||
};
|
};
|
||||||
|
|||||||
+11
-11
@@ -16,18 +16,18 @@ const getOptionalInput = (name: string) => core.getInput(name) || undefined;
|
|||||||
|
|
||||||
const inputCwd = core.getInput("cwd");
|
const inputCwd = core.getInput("cwd");
|
||||||
if (inputCwd) {
|
if (inputCwd) {
|
||||||
core.info("changing directory to the one given as the input");
|
console.log("changing directory to the one given as the input");
|
||||||
process.chdir(inputCwd);
|
process.chdir(inputCwd);
|
||||||
}
|
}
|
||||||
|
|
||||||
let setupGitUser = core.getBooleanInput("setupGitUser");
|
let setupGitUser = core.getBooleanInput("setupGitUser");
|
||||||
|
|
||||||
if (setupGitUser) {
|
if (setupGitUser) {
|
||||||
core.info("setting git user");
|
console.log("setting git user");
|
||||||
await gitUtils.setupUser();
|
await gitUtils.setupUser();
|
||||||
}
|
}
|
||||||
|
|
||||||
core.info("setting GitHub credentials");
|
console.log("setting GitHub credentials");
|
||||||
await fs.writeFile(
|
await fs.writeFile(
|
||||||
`${process.env.HOME}/.netrc`,
|
`${process.env.HOME}/.netrc`,
|
||||||
`machine github.com\nlogin github-actions[bot]\npassword ${githubToken}`
|
`machine github.com\nlogin github-actions[bot]\npassword ${githubToken}`
|
||||||
@@ -48,27 +48,27 @@ const getOptionalInput = (name: string) => core.getInput(name) || undefined;
|
|||||||
|
|
||||||
switch (true) {
|
switch (true) {
|
||||||
case !hasChangesets && !hasPublishScript:
|
case !hasChangesets && !hasPublishScript:
|
||||||
core.info("No changesets found");
|
console.log("No changesets found");
|
||||||
return;
|
return;
|
||||||
case !hasChangesets && hasPublishScript: {
|
case !hasChangesets && hasPublishScript: {
|
||||||
core.info(
|
console.log(
|
||||||
"No changesets found, attempting to publish any unpublished packages to npm"
|
"No changesets found, attempting to publish any unpublished packages to npm"
|
||||||
);
|
);
|
||||||
|
|
||||||
let userNpmrcPath = `${process.env.HOME}/.npmrc`;
|
let userNpmrcPath = `${process.env.HOME}/.npmrc`;
|
||||||
if (fs.existsSync(userNpmrcPath)) {
|
if (fs.existsSync(userNpmrcPath)) {
|
||||||
core.info("Found existing user .npmrc file");
|
console.log("Found existing user .npmrc file");
|
||||||
const userNpmrcContent = await fs.readFile(userNpmrcPath, "utf8");
|
const userNpmrcContent = await fs.readFile(userNpmrcPath, "utf8");
|
||||||
const authLine = userNpmrcContent.split("\n").find((line) => {
|
const authLine = userNpmrcContent.split("\n").find((line) => {
|
||||||
// check based on https://github.com/npm/cli/blob/8f8f71e4dd5ee66b3b17888faad5a7bf6c657eed/test/lib/adduser.js#L103-L105
|
// check based on https://github.com/npm/cli/blob/8f8f71e4dd5ee66b3b17888faad5a7bf6c657eed/test/lib/adduser.js#L103-L105
|
||||||
return /^\s*\/\/registry\.npmjs\.org\/:[_-]authToken=/i.test(line);
|
return /^\s*\/\/registry\.npmjs\.org\/:[_-]authToken=/i.test(line);
|
||||||
});
|
});
|
||||||
if (authLine) {
|
if (authLine) {
|
||||||
core.info(
|
console.log(
|
||||||
"Found existing auth token for the npm registry in the user .npmrc file"
|
"Found existing auth token for the npm registry in the user .npmrc file"
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
core.info(
|
console.log(
|
||||||
"Didn't find existing auth token for the npm registry in the user .npmrc file, creating one"
|
"Didn't find existing auth token for the npm registry in the user .npmrc file, creating one"
|
||||||
);
|
);
|
||||||
fs.appendFileSync(
|
fs.appendFileSync(
|
||||||
@@ -77,7 +77,7 @@ const getOptionalInput = (name: string) => core.getInput(name) || undefined;
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
core.info("No user .npmrc file found, creating one");
|
console.log("No user .npmrc file found, creating one");
|
||||||
fs.writeFileSync(
|
fs.writeFileSync(
|
||||||
userNpmrcPath,
|
userNpmrcPath,
|
||||||
`//registry.npmjs.org/:_authToken=${process.env.NPM_TOKEN}\n`
|
`//registry.npmjs.org/:_authToken=${process.env.NPM_TOKEN}\n`
|
||||||
@@ -100,7 +100,7 @@ const getOptionalInput = (name: string) => core.getInput(name) || undefined;
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case hasChangesets && !hasNonEmptyChangesets:
|
case hasChangesets && !hasNonEmptyChangesets:
|
||||||
core.info("All changesets are empty; not creating PR");
|
console.log("All changesets are empty; not creating PR");
|
||||||
return;
|
return;
|
||||||
case hasChangesets:
|
case hasChangesets:
|
||||||
const { pullRequestNumber } = await runVersion({
|
const { pullRequestNumber } = await runVersion({
|
||||||
@@ -116,6 +116,6 @@ const getOptionalInput = (name: string) => core.getInput(name) || undefined;
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
})().catch((err) => {
|
})().catch((err) => {
|
||||||
core.error(err);
|
console.error(err);
|
||||||
core.setFailed(err.message);
|
core.setFailed(err.message);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -11,19 +11,17 @@ export default async function readChangesetState(
|
|||||||
cwd: string = process.cwd()
|
cwd: string = process.cwd()
|
||||||
): Promise<ChangesetState> {
|
): Promise<ChangesetState> {
|
||||||
let preState = await readPreState(cwd);
|
let preState = await readPreState(cwd);
|
||||||
|
let isInPreMode = preState !== undefined && preState.mode === "pre";
|
||||||
|
|
||||||
let changesets = await readChangesets(cwd);
|
let changesets = await readChangesets(cwd);
|
||||||
|
|
||||||
if (preState !== undefined && preState.mode === "pre") {
|
if (isInPreMode) {
|
||||||
let changesetsToFilter = new Set(preState.changesets);
|
let changesetsToFilter = new Set(preState.changesets);
|
||||||
|
changesets = changesets.filter((x) => !changesetsToFilter.has(x.id));
|
||||||
return {
|
|
||||||
preState,
|
|
||||||
changesets: changesets.filter((x) => !changesetsToFilter.has(x.id)),
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
preState: undefined,
|
preState: isInPreMode ? preState : undefined,
|
||||||
changesets,
|
changesets,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-14
@@ -1,6 +1,5 @@
|
|||||||
import fixturez from "fixturez";
|
import fixturez from "fixturez";
|
||||||
import * as github from "@actions/github";
|
import * as github from "@actions/github";
|
||||||
import * as githubUtils from "@actions/github/lib/utils";
|
|
||||||
import fs from "fs-extra";
|
import fs from "fs-extra";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import writeChangeset from "@changesets/write";
|
import writeChangeset from "@changesets/write";
|
||||||
@@ -16,19 +15,7 @@ jest.mock("@actions/github", () => ({
|
|||||||
ref: "refs/heads/some-branch",
|
ref: "refs/heads/some-branch",
|
||||||
sha: "xeac7",
|
sha: "xeac7",
|
||||||
},
|
},
|
||||||
}));
|
getOctokit: jest.fn(),
|
||||||
jest.mock("@actions/github/lib/utils", () => ({
|
|
||||||
GitHub: {
|
|
||||||
plugin: () => {
|
|
||||||
// function necessary to be used as constructor
|
|
||||||
return function() {
|
|
||||||
return {
|
|
||||||
rest: mockedGithubMethods,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
getOctokitOptions: jest.fn(),
|
|
||||||
}));
|
}));
|
||||||
jest.mock("./gitUtils");
|
jest.mock("./gitUtils");
|
||||||
|
|
||||||
@@ -43,6 +30,7 @@ let mockedGithubMethods = {
|
|||||||
createRelease: jest.fn(),
|
createRelease: jest.fn(),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
(github.getOctokit as any).mockImplementation(() => mockedGithubMethods);
|
||||||
|
|
||||||
let f = fixturez(__dirname);
|
let f = fixturez(__dirname);
|
||||||
|
|
||||||
|
|||||||
+17
-66
@@ -1,7 +1,5 @@
|
|||||||
import { exec, getExecOutput } from "@actions/exec";
|
import { exec } from "@actions/exec";
|
||||||
import { GitHub, getOctokitOptions } from "@actions/github/lib/utils";
|
|
||||||
import * as github from "@actions/github";
|
import * as github from "@actions/github";
|
||||||
import * as core from "@actions/core";
|
|
||||||
import fs from "fs-extra";
|
import fs from "fs-extra";
|
||||||
import { getPackages, Package } from "@manypkg/get-packages";
|
import { getPackages, Package } from "@manypkg/get-packages";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
@@ -9,6 +7,7 @@ import * as semver from "semver";
|
|||||||
import { PreState } from "@changesets/types";
|
import { PreState } from "@changesets/types";
|
||||||
import {
|
import {
|
||||||
getChangelogEntry,
|
getChangelogEntry,
|
||||||
|
execWithOutput,
|
||||||
getChangedPackages,
|
getChangedPackages,
|
||||||
sortTheThings,
|
sortTheThings,
|
||||||
getVersionsByDirectory,
|
getVersionsByDirectory,
|
||||||
@@ -16,7 +15,6 @@ import {
|
|||||||
import * as gitUtils from "./gitUtils";
|
import * as gitUtils from "./gitUtils";
|
||||||
import readChangesetState from "./readChangesetState";
|
import readChangesetState from "./readChangesetState";
|
||||||
import resolveFrom from "resolve-from";
|
import resolveFrom from "resolve-from";
|
||||||
import { throttling } from "@octokit/plugin-throttling";
|
|
||||||
|
|
||||||
// GitHub Issues/PRs messages have a max size limit on the
|
// GitHub Issues/PRs messages have a max size limit on the
|
||||||
// message body payload.
|
// message body payload.
|
||||||
@@ -24,42 +22,8 @@ import { throttling } from "@octokit/plugin-throttling";
|
|||||||
// To avoid that, we ensure to cap the message to 60k chars.
|
// To avoid that, we ensure to cap the message to 60k chars.
|
||||||
const MAX_CHARACTERS_PER_MESSAGE = 60000;
|
const MAX_CHARACTERS_PER_MESSAGE = 60000;
|
||||||
|
|
||||||
const setupOctokit = (githubToken: string) => {
|
|
||||||
return new (GitHub.plugin(throttling))(
|
|
||||||
getOctokitOptions(githubToken, {
|
|
||||||
throttle: {
|
|
||||||
onRateLimit: (retryAfter, options: any, octokit, retryCount) => {
|
|
||||||
core.warning(
|
|
||||||
`Request quota exhausted for request ${options.method} ${options.url}`
|
|
||||||
);
|
|
||||||
|
|
||||||
if (retryCount <= 2) {
|
|
||||||
core.info(`Retrying after ${retryAfter} seconds!`);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onSecondaryRateLimit: (
|
|
||||||
retryAfter,
|
|
||||||
options: any,
|
|
||||||
octokit,
|
|
||||||
retryCount
|
|
||||||
) => {
|
|
||||||
core.warning(
|
|
||||||
`SecondaryRateLimit detected for request ${options.method} ${options.url}`
|
|
||||||
);
|
|
||||||
|
|
||||||
if (retryCount <= 2) {
|
|
||||||
core.info(`Retrying after ${retryAfter} seconds!`);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const createRelease = async (
|
const createRelease = async (
|
||||||
octokit: ReturnType<typeof setupOctokit>,
|
octokit: ReturnType<typeof github.getOctokit>,
|
||||||
{ pkg, tagName }: { pkg: Package; tagName: string }
|
{ pkg, tagName }: { pkg: Package; tagName: string }
|
||||||
) => {
|
) => {
|
||||||
try {
|
try {
|
||||||
@@ -76,21 +40,16 @@ const createRelease = async (
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
await octokit.rest.repos.createRelease({
|
await octokit.repos.createRelease({
|
||||||
name: tagName,
|
name: tagName,
|
||||||
tag_name: tagName,
|
tag_name: tagName,
|
||||||
body: changelogEntry.content,
|
body: changelogEntry.content,
|
||||||
prerelease: pkg.packageJson.version.includes("-"),
|
prerelease: pkg.packageJson.version.includes("-"),
|
||||||
...github.context.repo,
|
...github.context.repo,
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err: any) {
|
||||||
// if we can't find a changelog, the user has probably disabled changelogs
|
// if we can't find a changelog, the user has probably disabled changelogs
|
||||||
if (
|
if (err.code !== "ENOENT") {
|
||||||
err &&
|
|
||||||
typeof err === "object" &&
|
|
||||||
"code" in err &&
|
|
||||||
err.code !== "ENOENT"
|
|
||||||
) {
|
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -120,11 +79,10 @@ export async function runPublish({
|
|||||||
createGithubReleases,
|
createGithubReleases,
|
||||||
cwd = process.cwd(),
|
cwd = process.cwd(),
|
||||||
}: PublishOptions): Promise<PublishResult> {
|
}: PublishOptions): Promise<PublishResult> {
|
||||||
const octokit = setupOctokit(githubToken);
|
let octokit = github.getOctokit(githubToken);
|
||||||
|
|
||||||
let [publishCommand, ...publishArgs] = script.split(/\s+/);
|
let [publishCommand, ...publishArgs] = script.split(/\s+/);
|
||||||
|
|
||||||
let changesetPublishOutput = await getExecOutput(
|
let changesetPublishOutput = await execWithOutput(
|
||||||
publishCommand,
|
publishCommand,
|
||||||
publishArgs,
|
publishArgs,
|
||||||
{ cwd }
|
{ cwd }
|
||||||
@@ -207,13 +165,8 @@ export async function runPublish({
|
|||||||
const requireChangesetsCliPkgJson = (cwd: string) => {
|
const requireChangesetsCliPkgJson = (cwd: string) => {
|
||||||
try {
|
try {
|
||||||
return require(resolveFrom(cwd, "@changesets/cli/package.json"));
|
return require(resolveFrom(cwd, "@changesets/cli/package.json"));
|
||||||
} catch (err) {
|
} catch (err: any) {
|
||||||
if (
|
if (err && err.code === "MODULE_NOT_FOUND") {
|
||||||
err &&
|
|
||||||
typeof err === "object" &&
|
|
||||||
"code" in err &&
|
|
||||||
err.code === "MODULE_NOT_FOUND"
|
|
||||||
) {
|
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Have you forgotten to install \`@changesets/cli\` in "${cwd}"?`
|
`Have you forgotten to install \`@changesets/cli\` in "${cwd}"?`
|
||||||
);
|
);
|
||||||
@@ -314,12 +267,10 @@ export async function runVersion({
|
|||||||
hasPublishScript = false,
|
hasPublishScript = false,
|
||||||
prBodyMaxCharacters = MAX_CHARACTERS_PER_MESSAGE,
|
prBodyMaxCharacters = MAX_CHARACTERS_PER_MESSAGE,
|
||||||
}: VersionOptions): Promise<RunVersionResult> {
|
}: VersionOptions): Promise<RunVersionResult> {
|
||||||
const octokit = setupOctokit(githubToken);
|
|
||||||
|
|
||||||
let repo = `${github.context.repo.owner}/${github.context.repo.repo}`;
|
let repo = `${github.context.repo.owner}/${github.context.repo.repo}`;
|
||||||
let branch = github.context.ref.replace("refs/heads/", "");
|
let branch = github.context.ref.replace("refs/heads/", "");
|
||||||
let versionBranch = `changeset-release/${branch}`;
|
let versionBranch = `changeset-release/${branch}`;
|
||||||
|
let octokit = github.getOctokit(githubToken);
|
||||||
let { preState } = await readChangesetState(cwd);
|
let { preState } = await readChangesetState(cwd);
|
||||||
|
|
||||||
await gitUtils.switchToMaybeExistingBranch(versionBranch);
|
await gitUtils.switchToMaybeExistingBranch(versionBranch);
|
||||||
@@ -341,7 +292,7 @@ export async function runVersion({
|
|||||||
}
|
}
|
||||||
|
|
||||||
let searchQuery = `repo:${repo}+state:open+head:${versionBranch}+base:${branch}+is:pull-request`;
|
let searchQuery = `repo:${repo}+state:open+head:${versionBranch}+base:${branch}+is:pull-request`;
|
||||||
let searchResultPromise = octokit.rest.search.issuesAndPullRequests({
|
let searchResultPromise = octokit.search.issuesAndPullRequests({
|
||||||
q: searchQuery,
|
q: searchQuery,
|
||||||
});
|
});
|
||||||
let changedPackages = await getChangedPackages(cwd, versionsByDirectory);
|
let changedPackages = await getChangedPackages(cwd, versionsByDirectory);
|
||||||
@@ -375,7 +326,7 @@ export async function runVersion({
|
|||||||
await gitUtils.push(versionBranch, { force: true });
|
await gitUtils.push(versionBranch, { force: true });
|
||||||
|
|
||||||
let searchResult = await searchResultPromise;
|
let searchResult = await searchResultPromise;
|
||||||
core.info(JSON.stringify(searchResult.data, null, 2));
|
console.log(JSON.stringify(searchResult.data, null, 2));
|
||||||
|
|
||||||
const changedPackagesInfo = (await changedPackagesInfoPromises)
|
const changedPackagesInfo = (await changedPackagesInfoPromises)
|
||||||
.filter((x) => x)
|
.filter((x) => x)
|
||||||
@@ -390,8 +341,8 @@ export async function runVersion({
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (searchResult.data.items.length === 0) {
|
if (searchResult.data.items.length === 0) {
|
||||||
core.info("creating pull request");
|
console.log("creating pull request");
|
||||||
const { data: newPullRequest } = await octokit.rest.pulls.create({
|
const { data: newPullRequest } = await octokit.pulls.create({
|
||||||
base: branch,
|
base: branch,
|
||||||
head: versionBranch,
|
head: versionBranch,
|
||||||
title: finalPrTitle,
|
title: finalPrTitle,
|
||||||
@@ -405,8 +356,8 @@ export async function runVersion({
|
|||||||
} else {
|
} else {
|
||||||
const [pullRequest] = searchResult.data.items;
|
const [pullRequest] = searchResult.data.items;
|
||||||
|
|
||||||
core.info(`updating found pull request #${pullRequest.number}`);
|
console.log(`updating found pull request #${pullRequest.number}`);
|
||||||
await octokit.rest.pulls.update({
|
await octokit.pulls.update({
|
||||||
pull_number: pullRequest.number,
|
pull_number: pullRequest.number,
|
||||||
title: finalPrTitle,
|
title: finalPrTitle,
|
||||||
body: prBody,
|
body: prBody,
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import remarkParse from "remark-parse";
|
|||||||
import remarkStringify from "remark-stringify";
|
import remarkStringify from "remark-stringify";
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import mdastToString from "mdast-util-to-string";
|
import mdastToString from "mdast-util-to-string";
|
||||||
|
import { exec } from "@actions/exec";
|
||||||
import { getPackages, Package } from "@manypkg/get-packages";
|
import { getPackages, Package } from "@manypkg/get-packages";
|
||||||
|
|
||||||
export const BumpLevels = {
|
export const BumpLevels = {
|
||||||
@@ -86,6 +87,32 @@ export function getChangelogEntry(changelog: string, version: string) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function execWithOutput(
|
||||||
|
command: string,
|
||||||
|
args?: string[],
|
||||||
|
options?: { ignoreReturnCode?: boolean; cwd?: string }
|
||||||
|
) {
|
||||||
|
let myOutput = "";
|
||||||
|
let myError = "";
|
||||||
|
|
||||||
|
return {
|
||||||
|
code: await exec(command, args, {
|
||||||
|
listeners: {
|
||||||
|
stdout: (data: Buffer) => {
|
||||||
|
myOutput += data.toString();
|
||||||
|
},
|
||||||
|
stderr: (data: Buffer) => {
|
||||||
|
myError += data.toString();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
...options,
|
||||||
|
}),
|
||||||
|
stdout: myOutput,
|
||||||
|
stderr: myError,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export function sortTheThings(
|
export function sortTheThings(
|
||||||
a: { private: boolean; highestLevel: number },
|
a: { private: boolean; highestLevel: number },
|
||||||
b: { private: boolean; highestLevel: number }
|
b: { private: boolean; highestLevel: number }
|
||||||
|
|||||||
Reference in New Issue
Block a user