feat(admin): bake changelog into UI image at CI build time
Some checks failed
CI / Backend (push) Failing after 11s
Release / Test backend (push) Successful in 34s
CI / UI (push) Successful in 48s
Release / Check ui (push) Successful in 1m5s
Release / Docker / caddy (push) Successful in 52s
CI / Backend (pull_request) Successful in 42s
CI / UI (pull_request) Successful in 37s
Release / Docker / backend (push) Failing after 44s
Release / Docker / ui (push) Successful in 2m24s
Release / Docker / runner (push) Failing after 3m24s
Release / Gitea Release (push) Has been skipped
Some checks failed
CI / Backend (push) Failing after 11s
Release / Test backend (push) Successful in 34s
CI / UI (push) Successful in 48s
Release / Check ui (push) Successful in 1m5s
Release / Docker / caddy (push) Successful in 52s
CI / Backend (pull_request) Successful in 42s
CI / UI (pull_request) Successful in 37s
Release / Docker / backend (push) Failing after 44s
Release / Docker / ui (push) Successful in 2m24s
Release / Docker / runner (push) Failing after 3m24s
Release / Gitea Release (push) Has been skipped
Replace runtime Gitea API fetch with fs.readFileSync of releases.json, which CI writes to ui/static/ before the Docker build context is sent. Eliminates prod→homelab network dependency for the changelog page.
This commit is contained in:
@@ -190,6 +190,14 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Fetch releases from Gitea API
|
||||||
|
run: |
|
||||||
|
curl -sf \
|
||||||
|
-H "Accept: application/json" \
|
||||||
|
"http://gitea.kalekber.cc/api/v1/repos/kamil/libnovel/releases?limit=50&page=1" \
|
||||||
|
-o ui/static/releases.json
|
||||||
|
echo "Fetched $(jq length ui/static/releases.json) releases"
|
||||||
|
|
||||||
- uses: docker/setup-buildx-action@v3
|
- uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
- name: Log in to Docker Hub
|
- name: Log in to Docker Hub
|
||||||
|
|||||||
3
ui/.gitignore
vendored
3
ui/.gitignore
vendored
@@ -21,3 +21,6 @@ Thumbs.db
|
|||||||
# Vite
|
# Vite
|
||||||
vite.config.js.timestamp-*
|
vite.config.js.timestamp-*
|
||||||
vite.config.ts.timestamp-*
|
vite.config.ts.timestamp-*
|
||||||
|
|
||||||
|
# Generated by CI at build time — do not commit
|
||||||
|
/static/releases.json
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import { readFileSync } from 'fs';
|
||||||
|
import { join } from 'path';
|
||||||
import type { PageServerLoad } from './$types';
|
import type { PageServerLoad } from './$types';
|
||||||
|
|
||||||
export interface Release {
|
export interface Release {
|
||||||
@@ -10,17 +12,14 @@ export interface Release {
|
|||||||
draft: boolean;
|
draft: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const load: PageServerLoad = async ({ fetch }) => {
|
export const load: PageServerLoad = async () => {
|
||||||
try {
|
try {
|
||||||
const res = await fetch(
|
// releases.json is baked into the image at build time by CI.
|
||||||
'https://gitea.kalekber.cc/api/v1/repos/kamil/libnovel/releases?limit=50&page=1',
|
// SvelteKit Node adapter copies static/ → build/client/, so the file
|
||||||
{ headers: { Accept: 'application/json' } }
|
// lives at <cwd>/build/client/releases.json in production.
|
||||||
);
|
const raw = readFileSync(join(process.cwd(), 'build', 'client', 'releases.json'), 'utf-8');
|
||||||
if (!res.ok) throw new Error(`Gitea API returned ${res.status}`);
|
const releases: Release[] = JSON.parse(raw);
|
||||||
const releases: Release[] = await res.json();
|
return { releases: releases.filter((r) => !r.draft) };
|
||||||
return {
|
|
||||||
releases: releases.filter((r) => !r.draft)
|
|
||||||
};
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return { releases: [], error: String(e) };
|
return { releases: [], error: String(e) };
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user