Pre support (#6)

* First implementation of pre

* Remove an unused thing

* Fix a thing

* Another fix

* Fix some stuff

* Actually fix it

* Update things
This commit is contained in:
Mitchell Hamilton
2019-11-08 09:47:05 +10:00
committed by GitHub
parent 47388214b1
commit 76f43bb56a
4 changed files with 425 additions and 41 deletions
+269 -3
View File
File diff suppressed because one or more lines are too long
+35 -37
View File
@@ -11,6 +11,8 @@ import {
sortTheThings sortTheThings
} from "./utils"; } from "./utils";
import * as semver from "semver"; import * as semver from "semver";
import { readPreState } from "@changesets/pre";
import readChangesets from "@changesets/read";
(async () => { (async () => {
let githubToken = process.env.GITHUB_TOKEN; let githubToken = process.env.GITHUB_TOKEN;
@@ -20,13 +22,13 @@ import * as semver from "semver";
return; return;
} }
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 preState = await readPreState(process.cwd());
let isInPreMode = preState !== undefined && preState.mode === "pre";
const octokit = new github.GitHub(githubToken); const octokit = new github.GitHub(githubToken);
let defaultBranchPromise = octokit.repos
.get(github.context.repo)
.then(x => x.data.default_branch);
console.log("setting git user"); console.log("setting git user");
await exec("git", [ await exec("git", [
"config", "config",
@@ -47,28 +49,14 @@ import * as semver from "semver";
`machine github.com\nlogin github-actions[bot]\npassword ${githubToken}` `machine github.com\nlogin github-actions[bot]\npassword ${githubToken}`
); );
let defaultBranch = await defaultBranchPromise; let changesets = await readChangesets(process.cwd());
if (github.context.ref.replace("refs/heads/", "") !== defaultBranch) {
core.setFailed( if (isInPreMode) {
`The changesets action should only run on ${defaultBranch} but it's running on ${github.context.ref.replace( let changesetsToFilter = new Set(preState.changesets);
"refs/heads/", changesets = changesets.filter(x => !changesetsToFilter.has(x.id));
""
)}, please change your GitHub actions config to only run the Changesets action on ${defaultBranch}`
);
return;
} }
let hasChangesets = fs let hasChangesets = changesets.length !== 0;
.readdirSync(`${process.cwd()}/.changeset`)
.some(
x =>
x !== "README.md" &&
x !== "config.js" &&
x !== "config.json" &&
!x.endsWith(".js")
);
console.log(fs.readdirSync(`${process.cwd()}/.changeset`));
let publishScript = core.getInput("publish"); let publishScript = core.getInput("publish");
@@ -99,8 +87,9 @@ import * as semver from "semver";
publishCommand, publishCommand,
publishArgs publishArgs
); );
await exec("git", ["pull", "origin", branch]);
await exec("git", ["push", "origin", `HEAD:${defaultBranch}`, "--tags"]); await exec("git", ["push", "origin", `HEAD:${branch}`, "--tags"]);
let newTagRegex = /New tag:\s+(@[^/]+\/[^@]+|[^/]+)@([^\s]+)/; let newTagRegex = /New tag:\s+(@[^/]+\/[^@]+|[^/]+)@([^\s]+)/;
@@ -161,16 +150,15 @@ import * as semver from "semver";
} }
if (hasChangesets) { if (hasChangesets) {
let { stderr } = await execWithOutput( let versionBranch = `changeset-release/${branch}`;
"git", let { stderr } = await execWithOutput("git", ["checkout", versionBranch], {
["checkout", "changeset-release"], ignoreReturnCode: true
{ ignoreReturnCode: true } });
);
let isCreatingChangesetReleaseBranch = !stderr let isCreatingChangesetReleaseBranch = !stderr
.toString() .toString()
.includes("Switched to a new branch 'changeset-release'"); .includes(`Switched to a new branch '${versionBranch}'`);
if (isCreatingChangesetReleaseBranch) { if (isCreatingChangesetReleaseBranch) {
await exec("git", ["checkout", "-b", "changeset-release"]); await exec("git", ["checkout", "-b", versionBranch]);
} }
await exec("git", ["reset", "--hard", github.context.sha]); await exec("git", ["reset", "--hard", github.context.sha]);
@@ -184,7 +172,7 @@ import * as semver from "semver";
"./node_modules/.bin/changeset", "./node_modules/.bin/changeset",
cmd cmd
]); ]);
let searchQuery = `repo:${repo}+state:open+head:changeset-release+base:${defaultBranch}`; let searchQuery = `repo:${repo}+state:open+head:${versionBranch}+base:${branch}`;
let searchResultPromise = octokit.search.issuesAndPullRequests({ let searchResultPromise = octokit.search.issuesAndPullRequests({
q: searchQuery q: searchQuery
}); });
@@ -196,8 +184,18 @@ import * as semver from "semver";
publishScript publishScript
? `the packages will be published to npm automatically` ? `the packages will be published to npm automatically`
: `publish to npm yourself or [setup this action to publish automatically](https://github.com/changesets/action#with-publishing)` : `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 ${defaultBranch}, this PR will be updated. }. If you're not ready to do a release yet, that's fine, whenever you add more changesets to ${branch}, this PR will be updated.
${
isInPreMode
? `
⚠️⚠️⚠️⚠️⚠️⚠️
\`${branch}\` is currently in **pre mode** so this branch has prereleases rather than normal releases. If you want to exit prereleases, run \`changeset pre exit\` on \`${branch}\`.
⚠️⚠️⚠️⚠️⚠️⚠️
`
: ""
}
# Releases # Releases
` + ` +
(await Promise.all( (await Promise.all(
@@ -228,14 +226,14 @@ import * as semver from "semver";
})(); })();
await exec("git", ["add", "."]); await exec("git", ["add", "."]);
await exec("git", ["commit", "-m", "Version Packages"]); await exec("git", ["commit", "-m", "Version Packages"]);
await exec("git", ["push", "origin", "changeset-release", "--force"]); await exec("git", ["push", "origin", versionBranch, "--force"]);
let searchResult = await searchResultPromise; let searchResult = await searchResultPromise;
console.log(JSON.stringify(searchResult.data, null, 2)); console.log(JSON.stringify(searchResult.data, null, 2));
if (searchResult.data.items.length === 0) { if (searchResult.data.items.length === 0) {
console.log("creating pull request"); console.log("creating pull request");
await octokit.pulls.create({ await octokit.pulls.create({
base: defaultBranch, base: branch,
head: "changeset-release", head: versionBranch,
title: "Version Packages", title: "Version Packages",
body: await prBodyPromise, body: await prBodyPromise,
...github.context.repo ...github.context.repo
+2
View File
@@ -19,6 +19,8 @@
"@babel/core": "^7.6.0", "@babel/core": "^7.6.0",
"@babel/preset-env": "^7.6.0", "@babel/preset-env": "^7.6.0",
"@babel/preset-typescript": "^7.6.0", "@babel/preset-typescript": "^7.6.0",
"@changesets/pre": "^0.1.0",
"@changesets/read": "^0.4.0",
"@types/fs-extra": "^8.0.0", "@types/fs-extra": "^8.0.0",
"@types/jest": "^24.0.18", "@types/jest": "^24.0.18",
"@types/node": "^12.7.1", "@types/node": "^12.7.1",
+119 -1
View File
@@ -880,6 +880,13 @@
dependencies: dependencies:
regenerator-runtime "^0.12.0" regenerator-runtime "^0.12.0"
"@babel/runtime@^7.4.4":
version "7.6.3"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.3.tgz#935122c74c73d2240cafd32ddb5fc2a6cd35cf1f"
integrity sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==
dependencies:
regenerator-runtime "^0.13.2"
"@babel/template@^7.0.0 <7.4.0": "@babel/template@^7.0.0 <7.4.0":
version "7.2.2" version "7.2.2"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907"
@@ -979,6 +986,69 @@
lodash "^4.17.13" lodash "^4.17.13"
to-fast-properties "^2.0.0" to-fast-properties "^2.0.0"
"@changesets/errors@^0.1.2":
version "0.1.2"
resolved "https://registry.yarnpkg.com/@changesets/errors/-/errors-0.1.2.tgz#5c13c7b4ce69c7ded8c52d6c6b5d622d8ecca7d8"
integrity sha512-9pfp6Kq+h/CXWpgEM4Y2XtxeNCopUDov6NpDIFISHI5Ipg2Jz7cweULleASWVKVi9FwjCqQwIhmREdhgSOozcQ==
dependencies:
extendable-error "^0.1.5"
"@changesets/git@^0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@changesets/git/-/git-0.3.0.tgz#96d8835315b629f8235c450a65ac089b753b1a35"
integrity sha512-ckhPre9oxm4yB9lhFIV8TW57WBkJLVsy7k4dA9Z0VvhOMyxbYABl5/wwCqBiBLBei7io8346W8QOHKAF/0iZww==
dependencies:
"@babel/runtime" "^7.4.4"
"@changesets/errors" "^0.1.2"
"@changesets/types" "^0.4.0"
get-workspaces "^0.5.2"
spawndamnit "^2.0.0"
"@changesets/logger@^0.0.3":
version "0.0.3"
resolved "https://registry.yarnpkg.com/@changesets/logger/-/logger-0.0.3.tgz#c39c337210076e7019377c332b9026c8450924ac"
integrity sha512-qJKqHwyyckHRTsfH0MjSCcI/ZFylaUotGgl0zkJ9xdnzXNXqQrrmL2/d1zDUYuzYFCN0ldK1ybYmIaxpyCGEdg==
dependencies:
chalk "^2.1.0"
"@changesets/parse@^0.3.1":
version "0.3.1"
resolved "https://registry.yarnpkg.com/@changesets/parse/-/parse-0.3.1.tgz#0079b2d1ff30b37437aa487d0e1e0d2da3c7f35a"
integrity sha512-ro45JCMk+yPEbZaQOlMuVcBDAeNzoIk0BYKEcV3tIQQo4T0BFgHdsua1TII+aB24RWEuSsL8W+bwqJC5InJajw==
dependencies:
"@changesets/types" "^0.4.0"
js-yaml "^3.13.1"
"@changesets/pre@^0.1.0":
version "0.1.0"
resolved "https://registry.yarnpkg.com/@changesets/pre/-/pre-0.1.0.tgz#31ece175097d5bf7d6337689f6a21a8026afd583"
integrity sha512-sNnGhjw1wcyMJl4uQMmsEN3D+7+WQalaOWme6LIdxwq90GOwGHe6A9tr6VyApn7xkhzD3BQRQOr8Eh7ctmCjhg==
dependencies:
"@babel/runtime" "^7.4.4"
"@changesets/errors" "^0.1.2"
"@changesets/types" "^0.4.0"
fs-extra "^7.0.1"
get-workspaces "^0.5.2"
"@changesets/read@^0.4.0":
version "0.4.0"
resolved "https://registry.yarnpkg.com/@changesets/read/-/read-0.4.0.tgz#713a8e860259acdc37d35856b37f6036c3b3a825"
integrity sha512-Iibsi+snUbj95NOx4EMZ6yDAanNKueernDeRrEA1i4EVqnDN82DZ1Uj4HaqvTDedV+zKVlLx3j/Em9VS3HILgw==
dependencies:
"@babel/runtime" "^7.4.4"
"@changesets/git" "^0.3.0"
"@changesets/logger" "^0.0.3"
"@changesets/parse" "^0.3.1"
"@changesets/types" "^0.4.0"
chalk "^2.1.0"
fs-extra "^7.0.1"
p-filter "^2.1.0"
"@changesets/types@^0.4.0":
version "0.4.0"
resolved "https://registry.yarnpkg.com/@changesets/types/-/types-0.4.0.tgz#3413badb2c3904357a36268cb9f8c7e0afc3a804"
integrity sha512-TclHHKDVYQ8rJGZgVeWiF7c91yWzTTWdPagltgutelGu/Psup5PQlUq6svx7S8suj+jXcaE34yEEsfIvzXXB2Q==
"@cnakazawa/watch@^1.0.3": "@cnakazawa/watch@^1.0.3":
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef"
@@ -2322,6 +2392,15 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
safe-buffer "^5.0.1" safe-buffer "^5.0.1"
sha.js "^2.4.8" sha.js "^2.4.8"
cross-spawn@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
dependencies:
lru-cache "^4.0.1"
shebang-command "^1.2.0"
which "^1.2.9"
cross-spawn@^6.0.0, cross-spawn@^6.0.4: cross-spawn@^6.0.0, cross-spawn@^6.0.4:
version "6.0.5" version "6.0.5"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
@@ -3017,6 +3096,11 @@ extend@^3.0.0, extend@~3.0.2:
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
extendable-error@^0.1.5:
version "0.1.5"
resolved "https://registry.yarnpkg.com/extendable-error/-/extendable-error-0.1.5.tgz#122308a7097bc89a263b2c4fbf089c78140e3b6d"
integrity sha1-EiMIpwl7yJomOyxPvwiceBQOO20=
extglob@^2.0.4: extglob@^2.0.4:
version "2.0.4" version "2.0.4"
resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
@@ -3248,6 +3332,15 @@ get-workspaces@^0.4.0:
fs-extra "^7.0.1" fs-extra "^7.0.1"
globby "^9.2.0" globby "^9.2.0"
get-workspaces@^0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/get-workspaces/-/get-workspaces-0.5.2.tgz#4fb2031ec1bdd32d3c1f3de2589ce8af5c2e24ee"
integrity sha512-99x72taQ9OUHhCmBS0B2WI/zwOtBOBPoyVNGs9+B0ag2GGhCjl/EaU9VQ8Zorx64TyVj1Am7bO+0J1KwDqo7OA==
dependencies:
"@changesets/types" "^0.4.0"
fs-extra "^7.0.1"
globby "^9.2.0"
getpass@^0.1.1: getpass@^0.1.1:
version "0.1.7" version "0.1.7"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
@@ -4649,7 +4742,7 @@ loose-envify@^1.0.0:
dependencies: dependencies:
js-tokens "^3.0.0 || ^4.0.0" js-tokens "^3.0.0 || ^4.0.0"
lru-cache@^4.1.5: lru-cache@^4.0.1, lru-cache@^4.1.5:
version "4.1.5" version "4.1.5"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
@@ -5287,6 +5380,13 @@ p-each-series@^1.0.0:
dependencies: dependencies:
p-reduce "^1.0.0" p-reduce "^1.0.0"
p-filter@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c"
integrity sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==
dependencies:
p-map "^2.0.0"
p-finally@^1.0.0: p-finally@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
@@ -5320,6 +5420,11 @@ p-locate@^4.1.0:
dependencies: dependencies:
p-limit "^2.2.0" p-limit "^2.2.0"
p-map@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
p-reduce@^1.0.0: p-reduce@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
@@ -6174,6 +6279,11 @@ regenerator-runtime@^0.12.0:
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de"
integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==
regenerator-runtime@^0.13.2:
version "0.13.3"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==
regenerator-transform@^0.14.0: regenerator-transform@^0.14.0:
version "0.14.1" version "0.14.1"
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb"
@@ -6700,6 +6810,14 @@ source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
spawndamnit@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/spawndamnit/-/spawndamnit-2.0.0.tgz#9f762ac5c3476abb994b42ad592b5ad22bb4b0ad"
integrity sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==
dependencies:
cross-spawn "^5.1.0"
signal-exit "^3.0.2"
spdx-correct@^3.0.0: spdx-correct@^3.0.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"