Skip to content

Commit

Permalink
fix: release
Browse files Browse the repository at this point in the history
  • Loading branch information
aryaminus committed May 6, 2023
1 parent 31789d5 commit d6b26a4
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 131 deletions.
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,14 @@
"next": "13.3.2",
"octokit": "^2.0.14",
"react": "18.2.0",
"react-dom": "18.2.0"
"react-dom": "18.2.0",
"semver": "^7.5.0"
},
"devDependencies": {
"@types/node": "18.16.3",
"@types/react": "18.2.0",
"@types/react-dom": "18.2.1",
"@types/semver": "^7.3.13",
"eslint": "8.39.0",
"eslint-config-next": "13.3.2",
"typescript": "5.0.4"
Expand Down
151 changes: 35 additions & 116 deletions pages/api/release/[target]/[arch]/[current_version].ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@
import axios from "axios";
import type { NextApiRequest, NextApiResponse } from "next";

import { octokit } from "../../../../../lib/git";
import semverGt from "semver/functions/gt";
import semverValid from "semver/functions/valid";

type Platform = {
url: string;
signature: string;
};
import { octokit } from "../../../../../lib/git";

export default async function handler(
req: NextApiRequest,
Expand All @@ -16,138 +14,59 @@ export default async function handler(
) {
try {
const params = req.query;
const target = params.target ?? "";
const arch = params.arch ?? "";
const currentVersion = params.current_version
? `${params.current_version}`
: "";

const isWindowPlatform = target === "windows";
const isMacOSPlatform = target === "darwin";
const isLinuxPlatform = target === "linux";
if (!isWindowPlatform && !isMacOSPlatform && !isLinuxPlatform) {
res.status(204).send("No Content");
return;
}

const { data } = await octokit.request(
"GET /repos/{owner}/{repo}/releases",
{
const { data: latestRelease } =
await octokit.rest.repos.getLatestRelease({
owner: "honey-player",
repo: "releases",
page: 1,
}
);

const latestRelease = data.find(
(release) =>
release.tag_name.includes("app") &&
release.prerelease === false &&
release.draft === false &&
release.assets.length > 2
);
});

if (!latestRelease) {
res.status(204).send("No Content");
return;
}

const latestVersion = latestRelease.tag_name ?? "";
const latestVersionNumber = latestVersion.match(/\d/g)?.join("");
const currentVersionNumber = currentVersion.match(/\d/g)?.join("");
if (
latestVersionNumber &&
currentVersionNumber &&
currentVersionNumber > latestVersionNumber
) {
const latestVersion = latestRelease.tag_name
.toLowerCase()
.split("v")
.pop();
if (!latestVersion || !semverValid(latestVersion)) {
res.status(204).send("No Content");
return;
}

const windowsPlatform: Platform = { signature: "", url: "" };
const macPlatform: Platform = { signature: "", url: "" };
const linuxPlatform: Platform = { signature: "", url: "" };

const assets = latestRelease.assets ?? [];
for (const item of assets) {
const { browser_download_url } = item;

if (/msi\.zip$/.test(browser_download_url) && isWindowPlatform) {
windowsPlatform.url = browser_download_url;
continue;
}
if (
/msi\.zip\.sig$/.test(browser_download_url) &&
isWindowPlatform
) {
const { data: signature } = await axios(browser_download_url);
windowsPlatform.signature = signature;
continue;
}

if (
/AppImage\.tar\.gz$/.test(browser_download_url) &&
isLinuxPlatform
) {
linuxPlatform.url = browser_download_url;
continue;
}
if (
/AppImage\.tar\.gz\.sig$/.test(browser_download_url) &&
isLinuxPlatform
) {
const { data: signature } = await axios(browser_download_url);
linuxPlatform.signature = signature;
continue;
}

if (/app\.tar\.gz$/.test(browser_download_url) && isMacOSPlatform) {
macPlatform.url = browser_download_url;
continue;
}

if (
/app\.tar\.gz\.sig$/.test(browser_download_url) &&
isMacOSPlatform
) {
const { data: signature } = await axios(browser_download_url);
macPlatform.signature = signature;
continue;
}
}
const currentVersion =
`${params.current_version}`.toLowerCase().split("v").pop() ?? "";

const updater = {
version: latestVersion.replace(/(.*)-/, ""),
notes: latestRelease.body ?? "",
pub_date: latestRelease.published_at ?? "",
};
const platformName = `${target}-${arch}`;

if (isWindowPlatform) {
res.status(200).json({
...updater,
platforms: { [platformName]: windowsPlatform },
});
const shouldUpdate = semverGt(latestVersion, currentVersion);
if (!shouldUpdate) {
res.status(204).send("No Content");
return;
}

if (isMacOSPlatform) {
res.status(200).json({
...updater,
platforms: { [platformName]: macPlatform },
});
const updater = latestRelease.assets.find((asset) =>
/.json$/.test(asset.browser_download_url)
);
if (!updater) {
res.status(204).send("No Content");
return;
}

if (isLinuxPlatform) {
res.status(200).json({
...updater,
platforms: { [platformName]: linuxPlatform },
});
return;
}
const { data: updaterJson } = await axios(updater.browser_download_url);

const target = params.target ?? "";
const arch = params.arch ?? "";
const platformName = `${target}-${arch}`;

res.status(204).send("No Content");
const filteredPlatforms = updaterJson.platforms[platformName]
? { [platformName]: updaterJson.platforms[platformName] }
: updaterJson.platforms;

res.status(200).json({
...updaterJson,
notes: latestRelease.body ?? "",
platforms: filteredPlatforms,
});
} catch (error) {
res.status(500).send(error);
}
Expand Down
18 changes: 4 additions & 14 deletions pages/api/release/latest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,10 @@ export default async function handler(
res: NextApiResponse<LatestVersion>
// res: NextApiResponse<any>
) {
const { data } = await octokit.request(
"GET /repos/{owner}/{repo}/releases",
{
owner: "honey-player",
repo: "releases",
}
);

const latestRelease = data.find(
(release) =>
release.prerelease === false &&
release.draft === false &&
release.assets.length > 2
);
const { data: latestRelease } = await octokit.rest.repos.getLatestRelease({
owner: "honey-player",
repo: "releases",
});

if (!latestRelease) {
res.status(204).json({
Expand Down
8 changes: 8 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit d6b26a4

Please sign in to comment.