Add releases to PRs

This commit is contained in:
mitchellhamilton
2019-09-07 12:51:30 +10:00
parent 4fd1d272b4
commit fbef614dc1
3 changed files with 54 additions and 8 deletions
+2 -2
View File
@@ -35,7 +35,7 @@ jobs:
- name: Install Dependencies - name: Install Dependencies
run: yarn run: yarn
- name: Create Pull Request or Publish to npm - name: Create Release Pull Request
uses: changesets/action@master uses: changesets/action@master
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -72,7 +72,7 @@ jobs:
- name: Install Dependencies - name: Install Dependencies
run: yarn run: yarn
- name: "Create Pull Request or Publish to npm" - name: Create Release Pull Request or Publish to npm
uses: changesets/action@master uses: changesets/action@master
with: with:
# The --otp=1 is to get around a bug in changesets # The --otp=1 is to get around a bug in changesets
+1 -1
View File
File diff suppressed because one or more lines are too long
+51 -5
View File
@@ -213,14 +213,54 @@ async function execWithOutput(
} }
if (shouldBump) { if (shouldBump) {
await exec("git", ["reset", "--hard", github.context.sha]); await exec("git", ["reset", "--hard", github.context.sha]);
await exec("yarn", ["changeset", "bump"]); let output = await execWithOutput("yarn", ["changeset", "bump"]);
let searchQuery = `repo:${repo}+state:open+head:changeset-release+base:${defaultBranch}`;
let searchResultPromise = octokit.search.issuesAndPullRequests({
q: searchQuery
});
let prBodyPromise = (async () => {
let updateChangelogRegex = /Updated file (.+)/;
let changelogFilenames = [];
for (let line of output.stdout.split("\n")) {
let match = line.match(updateChangelogRegex);
if (match === null) {
continue;
}
changelogFilenames.push(match[1]);
}
return (
`Hey!! 🦋
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and ${
publishScript
? `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)`
}. 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.
# Releases
` +
(await Promise.all(
changelogFilenames.map(async filename => {
let [pkgJsonContent, changelogContents] = await Promise.all([
fs.readJson(path.join(path.dirname(filename), "package.json")),
fs.readFile(filename, "utf8")
]);
let entry = getChangelogEntry(
changelogContents,
pkgJsonContent.version
);
return (
`## ${pkgJsonContent.name}@${pkgJsonContent.version}\n\n` + entry
);
})
)).join("\n ")
);
})();
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", "changeset-release", "--force"]);
let searchQuery = `repo:${repo}+state:open+head:changeset-release+base:${defaultBranch}`; let searchResult = await searchResultPromise;
let searchResult = await octokit.search.issuesAndPullRequests({
q: searchQuery
});
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");
@@ -228,9 +268,15 @@ async function execWithOutput(
base: defaultBranch, base: defaultBranch,
head: "changeset-release", head: "changeset-release",
title: "Version Packages", title: "Version Packages",
body: await prBodyPromise,
...github.context.repo ...github.context.repo
}); });
} else { } else {
octokit.pulls.update({
pull_number: searchResult.data.items[0].number,
body: await prBodyPromise,
...github.context.repo
});
console.log("pull request found"); console.log("pull request found");
} }
} else { } else {