Comparing version 1.1.0 to 2.0.0-next.0
# auri | ||
## 1.1.0 | ||
## 2.0.0-next.0 | ||
### Minor changes | ||
## Major changes | ||
- Generate changeset ID with time info ([#89](https://github.com/pilcrowOnPaper/auri/pull/89)) | ||
## 1.0.2 | ||
### Patch changes | ||
- Add shebang line | ||
## 1.0.1 | ||
### Patch changes | ||
- Release legacy packages with custom tags | ||
## 1.0.0 | ||
- Fix various bugs | ||
- Breaking: Remove `auri patch next` | ||
- Breaking: Add `auri patch major` |
@@ -17,3 +17,3 @@ #!/usr/bin/env node | ||
} | ||
if (type !== "patch" && type !== "minor" && type !== "next") { | ||
if (type !== "patch" && type !== "minor" && type !== "major") { | ||
throw new Error("Invalid argument"); | ||
@@ -20,0 +20,0 @@ } |
import fs from "fs/promises"; | ||
import path from "path"; | ||
import { parseVersion } from "../utils/version.js"; | ||
import { execute } from "../utils/execute.js"; | ||
import { createPullRequest, getGitUser, getPullRequestFromBranches, getPullRequestFromFile, updatePullRequest } from "../utils/github.js"; | ||
import { dirExists, fileExists } from "../utils/fs.js"; | ||
import { dirExists } from "../utils/fs.js"; | ||
import { parsePackageJSON } from "../utils/package.js"; | ||
export async function prepareRelease(branch) { | ||
const packageMeta = await parsePackageJSON(); | ||
if (branch === "main" || branch === "master") { | ||
await prepareCurrentVersion(packageMeta); | ||
} | ||
if (branch.startsWith("v")) { | ||
const majorVersion = Number(branch.replace("v", "")); | ||
if (!isNaN(majorVersion) && Math.trunc(majorVersion) === majorVersion) { | ||
await prepareMajorVersion(majorVersion, packageMeta); | ||
} | ||
} | ||
} | ||
async function prepareCurrentVersion(packageMeta) { | ||
const changesets = await getChangesets(packageMeta.repository, "main"); | ||
@@ -25,49 +13,35 @@ if (changesets.length === 0) { | ||
} | ||
await initGit(); | ||
const currentVersion = parseVersion(packageMeta.version); | ||
if (currentVersion.next !== null) { | ||
// next => stable release | ||
const nextVersion = [currentVersion.major, 0, 0].join("."); | ||
let changelogBody = `## ${nextVersion}\n`; | ||
for (const changeset of changesets) { | ||
if (changeset.pullRequestNumber !== null) { | ||
changelogBody += `- ${changeset.content.trim()} ([#${changeset.pullRequestNumber}](https://github.com/${packageMeta.repository.owner}/${packageMeta.repository.name}/pull/${changeset.pullRequestNumber}))\n`; | ||
} | ||
else { | ||
changelogBody += `- ${changeset.content.trim()}\n`; | ||
} | ||
if (branch === "main" || branch === "master") { | ||
if (packageMeta.version.next === null) { | ||
await prepareMinorOrPatchRelease(changesets, packageMeta); | ||
} | ||
const changelogTitle = `# ${packageMeta.name}\n`; | ||
const changelog = changelogTitle + changelogBody; | ||
await fs.writeFile("CHANGELOG.md", changelog); | ||
const packageJSON = await fs.readFile("package.json"); | ||
const parsedPackageJSON = JSON.parse(packageJSON.toString()); | ||
Object.assign(parsedPackageJSON, { | ||
version: nextVersion | ||
}); | ||
await fs.writeFile("package.json", JSON.stringify(parsedPackageJSON)); | ||
await fs.rm(".changesets", { | ||
recursive: true, | ||
force: true | ||
}); | ||
commitChanges("main"); | ||
execute("git checkout main"); // reset branch | ||
let releaseRequestBody = ""; | ||
for (const changeset of changesets) { | ||
if (changeset.pullRequestNumber !== null) { | ||
releaseRequestBody += `- ${changeset.content.trim()} ([#${changeset.pullRequestNumber}](https://github.com/${packageMeta.repository.owner}/${packageMeta.repository.name}/pull/${changeset.pullRequestNumber}))\n`; | ||
} | ||
else { | ||
releaseRequestBody += `- ${changeset.content.trim()}\n`; | ||
} | ||
else { | ||
await preparePrereleaseToStableRelease(changesets, packageMeta); | ||
} | ||
await createReleaseRequest(packageMeta.repository, "main", nextVersion, releaseRequestBody); | ||
return; | ||
} | ||
// stable => stable release | ||
if (branch.startsWith("v")) { | ||
const branchMajorVersion = Number(branch.replace("v", "")); | ||
if (isNaN(branchMajorVersion) || Math.trunc(branchMajorVersion) !== branchMajorVersion) { | ||
return; | ||
} | ||
if (branchMajorVersion !== packageMeta.version.major) { | ||
await prepareNewPrerelease(branchMajorVersion, changesets, packageMeta); | ||
} | ||
else if (packageMeta.version.next === null) { | ||
await prepareMinorOrPatchRelease(changesets, packageMeta); | ||
} | ||
else { | ||
await prepareNextPrerelease(changesets, packageMeta); | ||
} | ||
return; | ||
} | ||
} | ||
async function prepareMinorOrPatchRelease(changesets, packageMeta) { | ||
await initializeGit(); | ||
const minorChangesets = []; | ||
const patchChangesets = []; | ||
for (const changeset of changesets) { | ||
if (changeset.type === "next") { | ||
throw new Error('Stable versions must not use "next" changesets'); | ||
if (changeset.type === "major") { | ||
throw new Error('Stable versions must not use "major" changesets'); | ||
} | ||
@@ -83,38 +57,19 @@ else if (changeset.type === "minor") { | ||
if (minorChangesets.length > 0) { | ||
nextVersion = [currentVersion.major, currentVersion.minor + 1, 0].join("."); | ||
nextVersion = [packageMeta.version.major, packageMeta.version.minor + 1, 0].join("."); | ||
} | ||
else { | ||
nextVersion = [currentVersion.major, currentVersion.minor, currentVersion.patch + 1].join("."); | ||
nextVersion = [ | ||
packageMeta.version.major, | ||
packageMeta.version.minor, | ||
packageMeta.version.patch + 1 | ||
].join("."); | ||
} | ||
const changelogExists = await fileExists("CHANGELOG.md"); | ||
const changelogTitle = `# ${packageMeta.name}\n`; | ||
if (!changelogExists) { | ||
await fs.writeFile("CHANGELOG.md", changelogTitle); | ||
} | ||
let changelog = await fs.readFile("CHANGELOG.md").then((d) => d.toString()); | ||
let changelogBody = `## ${nextVersion}\n`; | ||
if (minorChangesets.length > 0) { | ||
changelogBody += "### Minor changes\n"; | ||
for (const changeset of minorChangesets) { | ||
if (changeset.pullRequestNumber !== null) { | ||
changelogBody += `- ${changeset.content.trim()} ([#${changeset.pullRequestNumber}](https://github.com/${packageMeta.repository.owner}/${packageMeta.repository.name}/pull/${changeset.pullRequestNumber}))\n`; | ||
} | ||
else { | ||
changelogBody += `- ${changeset.content.trim()}\n`; | ||
} | ||
} | ||
} | ||
if (patchChangesets.length > 0) { | ||
changelogBody += "### Patch changes\n"; | ||
for (const changeset of patchChangesets) { | ||
if (changeset.pullRequestNumber !== null) { | ||
changelogBody += `- ${changeset.content.trim()} ([#${changeset.pullRequestNumber}](https://github.com/${packageMeta.repository.owner}/${packageMeta.repository.name}/pull/${changeset.pullRequestNumber}))\n`; | ||
} | ||
else { | ||
changelogBody += `- ${changeset.content.trim()}\n`; | ||
} | ||
} | ||
} | ||
changelog = changelogTitle + changelogBody + changelog.replace(changelogTitle, ""); | ||
await fs.writeFile("CHANGELOG.md", changelog); | ||
const changelogContentBuffer = await fs.readFile("CHANGELOG.md"); | ||
let changelogContent = changelogContentBuffer.toString(); | ||
const changelogBody = generateVersionChangelog([], minorChangesets, patchChangesets, packageMeta); | ||
const changelogBodyWithVersionTitle = `## ${nextVersion}\n` + changelogBody; | ||
changelogContent = | ||
changelogTitle + changelogBodyWithVersionTitle + changelogContent.replace(changelogTitle, ""); | ||
await fs.writeFile("CHANGELOG.md", changelogContent); | ||
const packageJSON = await fs.readFile("package.json"); | ||
@@ -130,52 +85,52 @@ const parsedPackageJSON = JSON.parse(packageJSON.toString()); | ||
}); | ||
commitChanges("main"); | ||
execute("npx prettier -w package.json CHANGELOG.md"); | ||
commitChanges("main.auri"); | ||
execute("git checkout main"); // reset branch | ||
let releaseRequestBody = ""; | ||
if (minorChangesets.length > 0) { | ||
releaseRequestBody += "## Minor changes\n"; | ||
for (const changeset of minorChangesets) { | ||
if (changeset.pullRequestNumber !== null) { | ||
releaseRequestBody += `- ${changeset.content.trim()} ([#${changeset.pullRequestNumber}](https://github.com/${packageMeta.repository.owner}/${packageMeta.repository.name}/pull/${changeset.pullRequestNumber}))\n`; | ||
} | ||
else { | ||
releaseRequestBody += `- ${changeset.content.trim()}\n`; | ||
} | ||
await createReleaseRequest(packageMeta.repository, "main", nextVersion, changelogBody); | ||
} | ||
async function preparePrereleaseToStableRelease(changesets, packageMeta) { | ||
await initializeGit(); | ||
const majorChangesets = []; | ||
const minorChangesets = []; | ||
const patchChangesets = []; | ||
for (const changeset of changesets) { | ||
if (changeset.type === "major") { | ||
majorChangesets.push(changeset); | ||
} | ||
} | ||
if (patchChangesets.length > 0) { | ||
releaseRequestBody += "## Patch changes\n"; | ||
for (const changeset of patchChangesets) { | ||
if (changeset.pullRequestNumber !== null) { | ||
releaseRequestBody += `- ${changeset.content.trim()} ([#${changeset.pullRequestNumber}](https://github.com/${packageMeta.repository.owner}/${packageMeta.repository.name}/pull/${changeset.pullRequestNumber}))\n`; | ||
} | ||
else { | ||
releaseRequestBody += `- ${changeset.content.trim()}\n`; | ||
} | ||
else if (changeset.type === "minor") { | ||
minorChangesets.push(changeset); | ||
} | ||
else if (changeset.type === "patch") { | ||
patchChangesets.push(changeset); | ||
} | ||
} | ||
await createReleaseRequest(packageMeta.repository, "main", nextVersion, releaseRequestBody); | ||
const nextVersion = [packageMeta.version.major, 0, 0].join("."); | ||
const changelogBody = generateVersionChangelog(majorChangesets, minorChangesets, patchChangesets, packageMeta); | ||
const changelogBodyWithVersionTitle = `## ${nextVersion}\n` + changelogBody; | ||
const changelogTitle = `# ${packageMeta.name}\n`; | ||
const changelogContent = changelogTitle + changelogBodyWithVersionTitle; | ||
await fs.writeFile("CHANGELOG.md", changelogContent); | ||
const packageJSON = await fs.readFile("package.json"); | ||
const parsedPackageJSON = JSON.parse(packageJSON.toString()); | ||
Object.assign(parsedPackageJSON, { | ||
version: nextVersion | ||
}); | ||
await fs.writeFile("package.json", JSON.stringify(parsedPackageJSON)); | ||
await fs.rm(".changesets", { | ||
recursive: true, | ||
force: true | ||
}); | ||
execute("npx prettier -w package.json CHANGELOG.md"); | ||
commitChanges("main.auri"); | ||
execute("git checkout main"); | ||
await createReleaseRequest(packageMeta.repository, "main", nextVersion, changelogBody); | ||
} | ||
async function prepareMajorVersion(majorVersion, packageMeta) { | ||
const currentVersion = parseVersion(packageMeta.version); | ||
if (majorVersion !== currentVersion.major || currentVersion.next !== null) { | ||
// stable/next => next release | ||
return await prepareNextMajorVersion(majorVersion, packageMeta); | ||
} | ||
// stable => stable release | ||
if (currentVersion.next !== null) { | ||
throw new Error('Main branch package version must not be "next"'); | ||
} | ||
if (majorVersion !== currentVersion.major) { | ||
throw new Error("Invalid branch version"); | ||
} | ||
const changesets = await getChangesets(packageMeta.repository, `v${majorVersion}`); | ||
if (changesets.length === 0) { | ||
return; | ||
} | ||
await initGit(); | ||
async function prepareNextPrerelease(changesets, packageMeta) { | ||
await initializeGit(); | ||
const majorChangesets = []; | ||
const minorChangesets = []; | ||
const patchChangesets = []; | ||
for (const changeset of changesets) { | ||
if (changeset.type === "next") { | ||
throw new Error('Stable versions must not use "next" changesets'); | ||
if (changeset.type === "major") { | ||
majorChangesets.push(changeset); | ||
} | ||
@@ -189,40 +144,15 @@ else if (changeset.type === "minor") { | ||
} | ||
let nextVersion; | ||
if (minorChangesets.length > 0) { | ||
nextVersion = [currentVersion.major, currentVersion.minor + 1, 0].join("."); | ||
const currentNextVersion = packageMeta.version.next; | ||
if (currentNextVersion === null) { | ||
throw new Error("Expected prerelease version"); | ||
} | ||
else { | ||
nextVersion = [currentVersion.major, currentVersion.minor, currentVersion.patch + 1].join("."); | ||
} | ||
const changelogExists = await fileExists("CHANGELOG.md"); | ||
const nextVersion = [packageMeta.version.major, 0, 0].join(".") + `-next.${currentNextVersion + 1}`; | ||
const changelogTitle = `# ${packageMeta.name}\n`; | ||
if (!changelogExists) { | ||
await fs.writeFile("CHANGELOG.md", changelogTitle); | ||
} | ||
let changelog = await fs.readFile("CHANGELOG.md").then((d) => d.toString()); | ||
let changelogBody = `## ${nextVersion}\n`; | ||
if (minorChangesets.length > 0) { | ||
changelogBody += "### Minor changes\n"; | ||
for (const changeset of minorChangesets) { | ||
if (changeset.pullRequestNumber !== null) { | ||
changelogBody += `- ${changeset.content.trim()} ([#${changeset.pullRequestNumber}](https://github.com/${packageMeta.repository.owner}/${packageMeta.repository.name}/pull/${changeset.pullRequestNumber}))\n`; | ||
} | ||
else { | ||
changelogBody += `- ${changeset.content.trim()}\n`; | ||
} | ||
} | ||
} | ||
if (patchChangesets.length > 0) { | ||
changelogBody += "### Patch changes\n"; | ||
for (const changeset of patchChangesets) { | ||
if (changeset.pullRequestNumber !== null) { | ||
changelogBody += `- ${changeset.content.trim()} ([#${changeset.pullRequestNumber}](https://github.com/${packageMeta.repository.owner}/${packageMeta.repository.name}/pull/${changeset.pullRequestNumber}))\n`; | ||
} | ||
else { | ||
changelogBody += `- ${changeset.content.trim()}\n`; | ||
} | ||
} | ||
} | ||
changelog = changelogTitle + changelogBody + changelog.replace(changelogTitle, ""); | ||
await fs.writeFile("CHANGELOG.md", changelog); | ||
const changelogContentBuffer = await fs.readFile("CHANGELOG.md"); | ||
let changelogContent = changelogContentBuffer.toString(); | ||
const changelogBody = generateVersionChangelog(majorChangesets, minorChangesets, patchChangesets, packageMeta); | ||
const changelogBodyWithVersionTitle = `## ${nextVersion}\n` + changelogBody; | ||
changelogContent = | ||
changelogTitle + changelogBodyWithVersionTitle + changelogContent.replace(changelogTitle, ""); | ||
await fs.writeFile("CHANGELOG.md", changelogContent); | ||
const packageJSON = await fs.readFile("package.json"); | ||
@@ -238,83 +168,29 @@ const parsedPackageJSON = JSON.parse(packageJSON.toString()); | ||
}); | ||
commitChanges(`v${majorVersion}`); | ||
execute(`git checkout v${majorVersion}`); // reset branch | ||
let releaseRequestBody = ""; | ||
if (minorChangesets.length > 0) { | ||
releaseRequestBody += "## Minor changes\n"; | ||
for (const changeset of minorChangesets) { | ||
if (changeset.pullRequestNumber !== null) { | ||
releaseRequestBody += `- ${changeset.content.trim()} ([#${changeset.pullRequestNumber}](https://github.com/${packageMeta.repository.owner}/${packageMeta.repository.name}/pull/${changeset.pullRequestNumber}))\n`; | ||
} | ||
else { | ||
releaseRequestBody += `- ${changeset.content.trim()}\n`; | ||
} | ||
} | ||
} | ||
if (patchChangesets.length > 0) { | ||
releaseRequestBody += "## Patch changes\n"; | ||
for (const changeset of patchChangesets) { | ||
if (changeset.pullRequestNumber !== null) { | ||
releaseRequestBody += `- ${changeset.content.trim()} ([#${changeset.pullRequestNumber}](https://github.com/${packageMeta.repository.owner}/${packageMeta.repository.name}/pull/${changeset.pullRequestNumber}))\n`; | ||
} | ||
else { | ||
releaseRequestBody += `- ${changeset.content.trim()}\n`; | ||
} | ||
} | ||
} | ||
await createReleaseRequest(packageMeta.repository, `v${majorVersion}`, nextVersion, releaseRequestBody); | ||
execute("npx prettier -w package.json CHANGELOG.md"); | ||
commitChanges(`v${packageMeta.version.major}.auri`); | ||
execute(`git checkout v${packageMeta.version.major}`); | ||
await createReleaseRequest(packageMeta.repository, `v${packageMeta.version.major}`, nextVersion, changelogBody); | ||
} | ||
async function prepareNextMajorVersion(majorVersion, packageMeta) { | ||
const currentVersion = parseVersion(packageMeta.version); | ||
const changesets = await getChangesets(packageMeta.repository, `v${majorVersion}`); | ||
if (changesets.length === 0) { | ||
return; | ||
} | ||
await initGit(); | ||
let nextVersion; | ||
if (currentVersion.major === majorVersion && currentVersion.next !== null) { | ||
nextVersion = [majorVersion, 0, 0].join(".") + `-next.${currentVersion.next + 1}`; | ||
} | ||
else { | ||
nextVersion = [majorVersion, 0, 0].join(".") + `-next.0`; | ||
} | ||
if (currentVersion.next === null) { | ||
let changelog = await fs.readFile("CHANGELOG.md").then((d) => d.toString()); | ||
let changelogBody = `## ${nextVersion}\n`; | ||
for (const changeset of changesets) { | ||
if (changeset.type !== "next") { | ||
throw new Error('Changeset type must be "next"'); | ||
} | ||
if (changeset.pullRequestNumber !== null) { | ||
changelogBody += `- ${changeset.content.trim()} ([#${changeset.pullRequestNumber}](https://github.com/${packageMeta.repository.owner}/${packageMeta.repository.name}/pull/${changeset.pullRequestNumber}))\n`; | ||
} | ||
else { | ||
changelogBody += `- ${changeset.content.trim()}\n`; | ||
} | ||
async function prepareNewPrerelease(majorVersion, changesets, packageMeta) { | ||
await initializeGit(); | ||
const majorChangesets = []; | ||
const minorChangesets = []; | ||
const patchChangesets = []; | ||
for (const changeset of changesets) { | ||
if (changeset.type === "major") { | ||
majorChangesets.push(changeset); | ||
} | ||
const changelogTitle = `# ${packageMeta.name}\n`; | ||
changelog = changelogTitle + changelogBody; | ||
await fs.writeFile("CHANGELOG.md", changelog); | ||
} | ||
else { | ||
const changelogExists = await fileExists("CHANGELOG.md"); | ||
const changelogTitle = `# ${packageMeta.name}\n`; | ||
if (!changelogExists) { | ||
await fs.writeFile("CHANGELOG.md", changelogTitle); | ||
else if (changeset.type === "minor") { | ||
minorChangesets.push(changeset); | ||
} | ||
let changelog = await fs.readFile("CHANGELOG.md").then((d) => d.toString()); | ||
let changelogBody = `## ${nextVersion}\n`; | ||
for (const changeset of changesets) { | ||
if (changeset.type !== "next") { | ||
throw new Error('Changeset type must be "next"'); | ||
} | ||
if (changeset.pullRequestNumber !== null) { | ||
changelogBody += `- ${changeset.content.trim()} ([#${changeset.pullRequestNumber}](https://github.com/${packageMeta.repository.owner}/${packageMeta.repository.name}/pull/${changeset.pullRequestNumber}))\n`; | ||
} | ||
else { | ||
changelogBody += `- ${changeset.content.trim()}\n`; | ||
} | ||
else if (changeset.type === "patch") { | ||
patchChangesets.push(changeset); | ||
} | ||
changelog = changelogTitle + changelogBody + changelog.replace(changelogTitle, ""); | ||
await fs.writeFile("CHANGELOG.md", changelog); | ||
} | ||
const nextVersion = [majorVersion, 0, 0].join(".") + "-next.0"; | ||
const changelogBody = generateVersionChangelog(majorChangesets, minorChangesets, patchChangesets, packageMeta); | ||
const changelogBodyWithVersionTitle = `## ${nextVersion}\n` + changelogBody; | ||
const changelogTitle = `# ${packageMeta.name}\n`; | ||
const changelogContent = changelogTitle + changelogBodyWithVersionTitle; | ||
await fs.writeFile("CHANGELOG.md", changelogContent); | ||
const packageJSON = await fs.readFile("package.json"); | ||
@@ -330,14 +206,6 @@ const parsedPackageJSON = JSON.parse(packageJSON.toString()); | ||
}); | ||
commitChanges(`v${majorVersion}`); | ||
execute(`git checkout v${majorVersion}`); // reset branch | ||
let releaseRequestBody = ""; | ||
for (const changeset of changesets) { | ||
if (changeset.pullRequestNumber !== null) { | ||
releaseRequestBody += `- ${changeset.content.trim()} ([#${changeset.pullRequestNumber}](https://github.com/${packageMeta.repository.owner}/${packageMeta.repository.name}/pull/${changeset.pullRequestNumber}))\n`; | ||
} | ||
else { | ||
releaseRequestBody += `- ${changeset.content.trim()}\n`; | ||
} | ||
} | ||
await createReleaseRequest(packageMeta.repository, `v${majorVersion}`, nextVersion, releaseRequestBody); | ||
execute("npx prettier -w package.json CHANGELOG.md"); | ||
commitChanges(`v${majorVersion}.auri`); | ||
execute(`git checkout v${majorVersion}`); | ||
await createReleaseRequest(packageMeta.repository, `v${majorVersion}`, nextVersion, changelogBody); | ||
} | ||
@@ -359,3 +227,3 @@ async function getChangesets(repository, branch) { | ||
const [id, type] = changesetFilename.replace(".md", "").split("."); | ||
if (type !== "patch" && type !== "minor" && type !== "next") { | ||
if (type !== "patch" && type !== "minor" && type !== "major") { | ||
throw new Error(`Invalid changeset file: ${changesetFilename}`); | ||
@@ -394,3 +262,3 @@ } | ||
} | ||
async function initGit() { | ||
async function initializeGit() { | ||
const user = await getGitUser(); | ||
@@ -400,5 +268,4 @@ execute(`git config --global user.name "${user.name}"`); | ||
} | ||
function commitChanges(branch) { | ||
execute("npx prettier -w CHANGELOG.md package.json"); | ||
execute(`git checkout -b ${branch}.auri`); | ||
function commitChanges(targetBranch) { | ||
execute(`git checkout -b ${targetBranch}`); | ||
execute("git add ."); | ||
@@ -408,1 +275,30 @@ execute('git commit -m "update release"'); | ||
} | ||
function generateVersionChangelog(majorChangesets, minorChangesets, patchChangesets, packageMeta) { | ||
let body = ""; | ||
if (majorChangesets.length > 0) { | ||
body += "## Major changes\n"; | ||
body += generateVersionTypeChangesetList(majorChangesets, packageMeta); | ||
} | ||
if (minorChangesets.length > 0) { | ||
body += "## Minor changes\n"; | ||
body += generateVersionTypeChangesetList(minorChangesets, packageMeta); | ||
} | ||
if (patchChangesets.length > 0) { | ||
body += "## Patch changes\n"; | ||
body += generateVersionTypeChangesetList(patchChangesets, packageMeta); | ||
} | ||
return body; | ||
} | ||
function generateVersionTypeChangesetList(changesets, packageMeta) { | ||
let list = ""; | ||
for (const changeset of changesets) { | ||
if (changeset.pullRequestNumber !== null) { | ||
const pullRequestLink = `https://github.com/${packageMeta.repository.owner}/${packageMeta.repository.name}/pull/${changeset.pullRequestNumber}`; | ||
list += `- ${changeset.content.trim()} ([#${changeset.pullRequestNumber}](${pullRequestLink}))\n`; | ||
} | ||
else { | ||
list += `- ${changeset.content.trim()}\n`; | ||
} | ||
} | ||
return list; | ||
} |
@@ -7,10 +7,10 @@ import fs from "fs/promises"; | ||
const packageMeta = await parsePackageJSON(); | ||
const published = await isPublished(packageMeta.name, packageMeta.version); | ||
const published = await isPublished(packageMeta.name, packageMeta.version.value); | ||
if (published) { | ||
return; | ||
} | ||
if (packageMeta.version.includes("-next.")) { | ||
if (packageMeta.version.next !== null) { | ||
execute("npm install && npm run build && npm publish --access public --tag next"); | ||
const body = await getLatestChangelogBody(); | ||
await createRelease(packageMeta.repository, branch, packageMeta.version, { | ||
await createRelease(packageMeta.repository, branch, packageMeta.version.value, { | ||
body, | ||
@@ -23,3 +23,3 @@ prerelease: true | ||
const body = await getLatestChangelogBody(); | ||
await createRelease(packageMeta.repository, branch, packageMeta.version, { | ||
await createRelease(packageMeta.repository, branch, packageMeta.version.value, { | ||
body | ||
@@ -33,3 +33,3 @@ }); | ||
const body = await getLatestChangelogBody(); | ||
await createRelease(packageMeta.repository, branch, packageMeta.version, { | ||
await createRelease(packageMeta.repository, branch, packageMeta.version.value, { | ||
body, | ||
@@ -36,0 +36,0 @@ latest: false |
@@ -11,10 +11,1 @@ import fs from "fs/promises"; | ||
} | ||
export async function fileExists(path) { | ||
try { | ||
const stat = await fs.stat(path); | ||
return stat.isFile(); | ||
} | ||
catch { | ||
return false; | ||
} | ||
} |
import fs from "fs/promises"; | ||
import { parseRepositoryURL } from "../utils/github.js"; | ||
import { parseVersion } from "./version.js"; | ||
export async function parsePackageJSON() { | ||
@@ -26,3 +27,3 @@ const packageJSON = await fs.readFile("package.json"); | ||
name: parsedPackageJSON.name, | ||
version: parsedPackageJSON.version, | ||
version: parseVersion(parsedPackageJSON.version), | ||
repository | ||
@@ -29,0 +30,0 @@ }; |
@@ -13,3 +13,4 @@ export function parseVersion(version) { | ||
patch, | ||
next | ||
next, | ||
value: version | ||
}; | ||
@@ -23,3 +24,4 @@ return meta; | ||
patch, | ||
next: null | ||
next: null, | ||
value: version | ||
}; | ||
@@ -26,0 +28,0 @@ return meta; |
{ | ||
"name": "auri", | ||
"version": "1.1.0", | ||
"version": "2.0.0-next.0", | ||
"description": "Organize package changes and releases", | ||
@@ -5,0 +5,0 @@ "type": "module", |
@@ -23,7 +23,5 @@ # Auri | ||
- Single monolith repository | ||
- Uses prettier | ||
- Package be built and published with: `npm run build && npm publish` | ||
- Single monolith repository (no monorepos) | ||
- The package can be built and published with: `npm run build && npm publish` | ||
- The package's `package.json` is in the repository root | ||
- No monorepos | ||
- No pre-releases for patch/minor versions | ||
@@ -46,2 +44,4 @@ | ||
It is crucial that you setup `actions/checkout@v3` with `github.ref`. Auri expects the current branch to be the target branch. | ||
```yaml | ||
@@ -101,3 +101,3 @@ # .github/workflows/publish.yaml | ||
This will create a new markdown file inside the `.changesets` directory. Write a concise summary of your changes. A single PR may include multiple (or zero) changesets. Each changeset might look something like this: | ||
This will create a new markdown file inside the `.changesets` directory. Write a concise summary of your changes. Each changeset should only include one change. A single PR may include multiple (or zero) changesets. Each changeset might look something like this: | ||
@@ -116,8 +116,8 @@ ``` | ||
Whenever you create a versioned branch for a major version once above the version in `main`, it will publish packages with a "next" tag. These versions are your betas/alphas/prereleases and looks like `3.0.0-beta.16`. When working with "next", all your changesets must use `next`: | ||
Whenever you create a versioned branch for a major version once above the version in `main`, it will publish packages with a "next" tag. These versions are your betas/alphas/prereleases and looks like `3.0.0-beta.16`. In addition to `patch` and `minor`, you can also define `major` changes. | ||
``` | ||
npx auri next | ||
npx auri major | ||
``` | ||
Once you merge the branch into `main`, Auri will automatically release a stable version. If you want to keep working on the previous version, make sure you create a versioned branch for it before merging. |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
32523
731
2