Skip to content

Commit

Permalink
create pull request
Browse files Browse the repository at this point in the history
  • Loading branch information
pilcrowonpaper committed Jan 31, 2024
1 parent 55192e3 commit 0843b53
Show file tree
Hide file tree
Showing 5 changed files with 242 additions and 120 deletions.
1 change: 0 additions & 1 deletion .changesets/mp1b877h.next.md

This file was deleted.

104 changes: 97 additions & 7 deletions src/scripts/prepare.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@ import fs from "fs/promises";
import path from "path";
import { parseVersion } from "../utils/version.js";
import { execute } from "../utils/execute.js";
import {
createPullRequest,
getPullRequestFromBranches,
parseRepositoryURL,
updatePullRequest
} from "../utils/github.js";

import type { Repository } from "../utils/github.js";

export async function prepareRelease(branch: string): Promise<void> {
const packageJSON = await fs.readFile("package.json");
Expand All @@ -28,11 +36,15 @@ export async function prepareRelease(branch: string): Promise<void> {
) {
throw new Error('package.json missing field "repository.url"');
}
const repository = parseRepositoryURL(parsedPackageJSON.repository.url);
if (!repository) {
throw new Error('Invalid "repository.url" field in package.json');
}

const packageMeta: PackageMeta = {
name: parsedPackageJSON.name,
version: parsedPackageJSON.version,
repository: parsedPackageJSON.repository.url
repository
};

if (branch === "main" || branch === "master") {
Expand All @@ -55,6 +67,7 @@ async function prepareCurrentVersion(packageMeta: PackageMeta): Promise<void> {
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) {
Expand All @@ -73,14 +86,21 @@ async function prepareCurrentVersion(packageMeta: PackageMeta): Promise<void> {

// execute(`git config --global user.name "${user.username}"`);
// execute(`git config --global user.email "${user.email}"`);
execute("git checkout -b main.auri");
execute(`git checkout -b main.auri`);
execute("git add .");
execute('git commit -m "update release"');
execute("git push -f -u origin HEAD");
execute("pnpm prettier -w CHANGELOG.md package.json")
execute("npm exec prettier -w CHANGELOG.md package.json");

let releaseRequestBody = "";
for (const changeset of changesets) {
releaseRequestBody += `- ${changeset.content}\n`;
}
await createReleaseRequest(packageMeta.repository, "main", nextVersion, releaseRequestBody);
return;
}

// stable => stable release
const minorChangesets: Changeset[] = [];
const patchChangesets: Changeset[] = [];
for (const changeset of changesets) {
Expand Down Expand Up @@ -135,15 +155,32 @@ async function prepareCurrentVersion(packageMeta: PackageMeta): Promise<void> {
execute("git add .");
execute('git commit -m "update release"');
execute("git push -f -u origin HEAD");
execute("pnpm prettier -w CHANGELOG.md package.json")
execute("npm exec prettier -w CHANGELOG.md package.json");

let releaseRequestBody = "";
if (minorChangesets.length > 0) {
releaseRequestBody += "## Minor changes\n";
for (const changeset of minorChangesets) {
releaseRequestBody += `- ${changeset.content}\n`;
}
}
if (patchChangesets.length > 0) {
releaseRequestBody += "## Patch changes\n";
for (const changeset of patchChangesets) {
releaseRequestBody += `- ${changeset.content}\n`;
}
}
await createReleaseRequest(packageMeta.repository, "main", nextVersion, releaseRequestBody);
}

async function prepareMajorVersion(majorVersion: number, packageMeta: PackageMeta): Promise<void> {
const currentVersion = parseVersion(packageMeta.version);
if (majorVersion !== currentVersion.major || currentVersion.next !== null) {
// stable => 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"');
}
Expand Down Expand Up @@ -209,7 +246,27 @@ async function prepareMajorVersion(majorVersion: number, packageMeta: PackageMet
execute("git add .");
execute('git commit -m "update release"');
execute("git push -f -u origin HEAD");
execute("pnpm prettier -w CHANGELOG.md package.json")
execute("npm exec prettier -w CHANGELOG.md package.json");

let releaseRequestBody = "";
if (minorChangesets.length > 0) {
releaseRequestBody += "## Minor changes\n";
for (const changeset of minorChangesets) {
releaseRequestBody += `- ${changeset.content}\n`;
}
}
if (patchChangesets.length > 0) {
releaseRequestBody += "## Patch changes\n";
for (const changeset of patchChangesets) {
releaseRequestBody += `- ${changeset.content}\n`;
}
}
await createReleaseRequest(
packageMeta.repository,
`v${majorVersion}`,
nextVersion,
releaseRequestBody
);
}

async function prepareNextMajorVersion(
Expand Down Expand Up @@ -272,13 +329,24 @@ async function prepareNextMajorVersion(
execute("git add .");
execute('git commit -m "update release"');
execute("git push -f -u origin HEAD");
execute("pnpm prettier -w CHANGELOG.md package.json")
execute("npm exec prettier -w CHANGELOG.md package.json");

let releaseRequestBody = "";
for (const changeset of changesets) {
releaseRequestBody += `- ${changeset.content}\n`;
}
await createReleaseRequest(
packageMeta.repository,
`v${majorVersion}`,
nextVersion,
releaseRequestBody
);
}

interface PackageMeta {
name: string;
version: string;
repository: string;
repository: Repository;
}

async function getChangesets(): Promise<Changeset[]> {
Expand Down Expand Up @@ -330,3 +398,25 @@ async function fileExists(path: string): Promise<boolean> {
.then((stat) => stat.isFile())
.catch(() => false);
}

async function createReleaseRequest(
repository: Repository,
branch: string,
nextVersion: string,
body: string
) {
const head = `${repository.owner}:${branch}.auri`;
const base = branch;
const existingPullRequest = await getPullRequestFromBranches(repository, head, base);
const title = `Auri: Release request (v${nextVersion})`;
if (existingPullRequest) {
await updatePullRequest(repository, existingPullRequest.number, {
title,
body
});
} else {
await createPullRequest(repository, title, head, base, {
body
});
}
}
20 changes: 10 additions & 10 deletions src/utils/env.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
// import dotenv from "dotenv";
import dotenv from "dotenv";

// import { error } from "../shared/error.js";
dotenv.config();

// dotenv.config();
type EnvVar = "AURI_GITHUB_TOKEN";

// type EnvVar = "AURI_GITHUB_TOKEN";

// export const env = (key: EnvVar) => {
// const value = process.env[key];
// if (!value) error(`Environment variable "${key}" is undefined`);
// return value;
// };
export const env = (key: EnvVar) => {
const value = process.env[key];
if (!value) {
throw new Error(`Environment variable "${key}" is undefined`);
}
return value;
};
Loading

0 comments on commit 0843b53

Please sign in to comment.