Socket
Socket
Sign inDemoInstall

auri

Package Overview
Dependencies
5
Maintainers
1
Versions
44
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.1.0 to 2.0.0-next.0

23

CHANGELOG.md
# 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`

2

dist/index.js

@@ -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.
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc