fix typescript lint errors, refactoring
This commit is contained in:
parent
b280ad4952
commit
13bbdc024f
4 changed files with 37 additions and 32 deletions
|
@ -4,16 +4,16 @@ import { Icon } from 'astro-icon/components';
|
|||
import ReleaseStatus from '~/components/atoms/ReleaseStatus.astro';
|
||||
|
||||
import { getFormattedDate } from '~/utils/utils';
|
||||
import { getReleaseBlogPost, getReleaseNotesUrl } from '~/utils/releases';
|
||||
import { ReleaseVersion, getReleaseBlogPost, getReleaseNotesUrl } from '~/utils/releases';
|
||||
import { getPermalink } from '~/utils/permalinks';
|
||||
|
||||
const { release } = Astro.props;
|
||||
|
||||
const version = release.tag_name.replace(/^v/, '');
|
||||
const rv = new ReleaseVersion(release);
|
||||
|
||||
const releaseNotesUrl = await getReleaseNotesUrl(version);
|
||||
const releaseNotesUrl = await getReleaseNotesUrl(rv);
|
||||
|
||||
const releaseBlogPost = await getReleaseBlogPost(version);
|
||||
const releaseBlogPost = await getReleaseBlogPost(rv);
|
||||
const releasePostUrl = releaseBlogPost && getPermalink(releaseBlogPost.slug, 'post');
|
||||
---
|
||||
|
||||
|
@ -74,7 +74,7 @@ const releasePostUrl = releaseBlogPost && getPermalink(releaseBlogPost.slug, 'po
|
|||
<Icon name="octicon:container-24" class="w-4 h-4 mr-1 -mt-1 inline-block" />
|
||||
<a
|
||||
class="text-primary-700 hover:text-primary-500 dark:text-primary-400 dark:hover:text-primary-600 transition ease-in duration-200"
|
||||
href={`https://codeberg.org/forgejo/-/packages/container/forgejo/${version}`}
|
||||
href={`https://codeberg.org/forgejo/-/packages/container/forgejo/${rv.version}`}
|
||||
>
|
||||
Get container image →
|
||||
</a>
|
||||
|
|
|
@ -3,23 +3,23 @@ import type { CollectionEntry } from 'astro:content';
|
|||
import { getCollection } from 'astro:content';
|
||||
|
||||
import DocsLayout from '@layouts/DocsLayout.astro';
|
||||
import { getLatestRelease } from '~/utils/releases';
|
||||
import { getLatestReleaseVersion } from '~/utils/releases';
|
||||
|
||||
export type Props = CollectionEntry<'docs'>;
|
||||
|
||||
export async function getStaticPaths() {
|
||||
const latestRelease = await getLatestRelease();
|
||||
const [latestVersion] = /v\d+\.\d+/.exec(latestRelease.tag_name);
|
||||
const latestReleaseVersion = await getLatestReleaseVersion();
|
||||
const latestDocsTag = latestReleaseVersion.docsTag();
|
||||
|
||||
const docsPages = await getCollection('docs');
|
||||
|
||||
const latestPaths: object[] = [];
|
||||
|
||||
const paths = docsPages.map((page) => {
|
||||
const version = page.id.split('/')[0];
|
||||
const docsTag = page.id.split('/')[0];
|
||||
const [, ...slugParts] = page.slug.split('/');
|
||||
|
||||
if (version == latestVersion) {
|
||||
if (docsTag == latestDocsTag) {
|
||||
latestPaths.push({
|
||||
params: { slug: ['latest', ...slugParts].join('/') },
|
||||
props: page,
|
||||
|
@ -27,7 +27,7 @@ export async function getStaticPaths() {
|
|||
}
|
||||
|
||||
return {
|
||||
params: { slug: [version, ...slugParts].join('/') },
|
||||
params: { slug: [docsTag, ...slugParts].join('/') },
|
||||
props: page,
|
||||
};
|
||||
});
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
---
|
||||
import type { Attachment } from 'gitea-js';
|
||||
|
||||
import { getLatestRelease } from '~/utils/releases';
|
||||
import { getLatestReleaseVersion } from '~/utils/releases';
|
||||
import Layout from '~/layouts/PageLayout.astro';
|
||||
import { getRelativeLink } from '~/utils/permalinks';
|
||||
|
||||
const latest = await getLatestRelease();
|
||||
const latest_v = latest.tag_name?.replace(/^v/, '');
|
||||
const latest_dl = latest.html_url?.replace('/tag/', '/download/');
|
||||
const latestReleaseVersion = await getLatestReleaseVersion();
|
||||
const latest_v = latestReleaseVersion.version;
|
||||
const latest = latestReleaseVersion.release;
|
||||
const latest_dl = latest?.html_url?.replace('/tag/', '/download/');
|
||||
|
||||
const asset_bin = latest.assets?.find((asset: Attachment) => asset?.name === `forgejo-${latest_v}-linux-amd64`);
|
||||
const asset_sig = latest.assets?.find((asset: Attachment) => asset?.name === `forgejo-${latest_v}-linux-amd64.asc`);
|
||||
const asset_bin = latest?.assets?.find((asset: Attachment) => asset?.name === `forgejo-${latest_v}-linux-amd64`);
|
||||
const asset_sig = latest?.assets?.find((asset: Attachment) => asset?.name === `forgejo-${latest_v}-linux-amd64.asc`);
|
||||
|
||||
const asset_bin_lnk = [latest_dl, asset_bin?.name].join('/');
|
||||
const asset_sig_lnk = [latest_dl, asset_sig?.name].join('/');
|
||||
|
|
|
@ -8,7 +8,7 @@ const api = giteaApi('https://codeberg.org', {});
|
|||
let _releases: Release[];
|
||||
let _releaseBlogPosts: CollectionEntry<'blog'>[];
|
||||
|
||||
const semverRegex = /^v(\d+)\.(\d+)\.(\d+)/;
|
||||
const semverRegex = /^v((\d+)\.(\d+)\.(\d+))/;
|
||||
|
||||
enum Comparison {
|
||||
LeftIsGreater = -1,
|
||||
|
@ -26,16 +26,18 @@ function compare(a: number, b: number) {
|
|||
return Comparison.Equal;
|
||||
}
|
||||
|
||||
class ReleaseVersion {
|
||||
export class ReleaseVersion {
|
||||
readonly release?: Release;
|
||||
readonly version: string;
|
||||
readonly major: number;
|
||||
readonly minor: number;
|
||||
readonly patch: number;
|
||||
|
||||
constructor(release?: Release) {
|
||||
this.release = release;
|
||||
const [_, major, minor, patch] = semverRegex.exec(release?.tag_name || 'v0.0.0') || [];
|
||||
const [_, version, major, minor, patch] = semverRegex.exec(release?.tag_name || 'v0.0.0') || [];
|
||||
|
||||
this.version = version;
|
||||
this.major = parseInt(major);
|
||||
this.minor = parseInt(minor);
|
||||
this.patch = parseInt(patch);
|
||||
|
@ -53,6 +55,10 @@ class ReleaseVersion {
|
|||
}
|
||||
return compare(this.patch, other.patch);
|
||||
}
|
||||
|
||||
docsTag() {
|
||||
return `v${this.major}.${this.minor}`;
|
||||
}
|
||||
}
|
||||
|
||||
const _latestReleases = {
|
||||
|
@ -104,13 +110,13 @@ async function ensureReleasesCached() {
|
|||
}
|
||||
|
||||
/** Get the latest Forgejo release from Codeberg using the Forgejo API. */
|
||||
export const getLatestRelease = async () => {
|
||||
export const getLatestReleaseVersion = async () => {
|
||||
await ensureReleasesCached();
|
||||
const release = _latestReleases.stable.release;
|
||||
if (!release) {
|
||||
const releaseVersion = _latestReleases.stable;
|
||||
if (!releaseVersion?.release) {
|
||||
throw new Error('no stable release!');
|
||||
}
|
||||
return release;
|
||||
return releaseVersion;
|
||||
};
|
||||
|
||||
export const releaseLabel = async (release: Release) => {
|
||||
|
@ -124,21 +130,19 @@ export const releaseLabel = async (release: Release) => {
|
|||
return '';
|
||||
};
|
||||
|
||||
export const getReleaseNotesUrl = async (version: string) => {
|
||||
const [_, major, patch] = /^(\d+)\.\d+\.(\d+)/.exec(version);
|
||||
|
||||
if (major >= 9 || (major == 8 && patch > 0) || (major == 7 && patch > 6)) {
|
||||
return `https://codeberg.org/forgejo/forgejo/src/branch/forgejo/release-notes-published/${version}.md`;
|
||||
export const getReleaseNotesUrl = async (rv: ReleaseVersion) => {
|
||||
if (rv.major >= 9 || (rv.major == 8 && rv.patch > 0) || (rv.major == 7 && rv.patch > 6)) {
|
||||
return `https://codeberg.org/forgejo/forgejo/src/branch/forgejo/release-notes-published/${rv.version}.md`;
|
||||
} else {
|
||||
const versionSlug = version.replaceAll('.', '-');
|
||||
const versionSlug = rv.version.replaceAll('.', '-');
|
||||
return `https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#${versionSlug}`;
|
||||
}
|
||||
};
|
||||
|
||||
/** Get the blog post for a release, if there is one. */
|
||||
export const getReleaseBlogPost = async (version: string) => {
|
||||
export const getReleaseBlogPost = async (rv: ReleaseVersion) => {
|
||||
if (!_releaseBlogPosts) {
|
||||
_releaseBlogPosts = await getCollection('blog', ({ data }) => data.release);
|
||||
}
|
||||
return _releaseBlogPosts.find(({ data }) => data.release == version);
|
||||
return _releaseBlogPosts.find(({ data }) => data.release == rv.version);
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue