diff --git a/.changeset/swift-tigers-pay.md b/.changeset/swift-tigers-pay.md new file mode 100644 index 0000000..0cb6094 --- /dev/null +++ b/.changeset/swift-tigers-pay.md @@ -0,0 +1,5 @@ +--- +'intrepid-ibex': minor +--- + +added more granular build details to About thie Computer diff --git a/src/lib/components/AboutComputer.svelte b/src/lib/components/AboutComputer.svelte index 42a799b..efd6b91 100644 --- a/src/lib/components/AboutComputer.svelte +++ b/src/lib/components/AboutComputer.svelte @@ -1,5 +1,7 @@
@@ -26,25 +28,34 @@
Protocol
at://
+
+
Version
+
{buildVersion.version}
+
+
+
Commit
+
+ {buildVersion.commit} +
+
Account
{accountSetup.identity ? `@${accountSetup.identity.handle}` : 'No account configured'}
DID
-
{accountSetup.identity?.did ?? '—'}
+
{accountSetup.identity?.did ?? '—'}
PDS
-
{accountSetup.identity?.pds ?? '—'}
+
{accountSetup.identity?.pds ?? '—'}

View the project on - Tangled. Atmosphere logos - courtesy of + Tangled. Atmosphere logos courtesy of atmologos.

@@ -126,10 +137,16 @@ font-size: var(--text-1); } - dl div:nth-last-child(-n + 2) dd { + .mono { font-family: var(--font-mono); } + dd a { + color: var(--blue-700); + font-weight: 700; + text-decoration: underline; + } + .note { align-self: end; } diff --git a/src/lib/components/StickyNote.svelte b/src/lib/components/StickyNote.svelte index fe50e8e..46a8017 100644 --- a/src/lib/components/StickyNote.svelte +++ b/src/lib/components/StickyNote.svelte @@ -1,7 +1,7 @@ diff --git a/src/lib/components/WelcomeScreen.svelte b/src/lib/components/WelcomeScreen.svelte index e4c554a..277cb77 100644 --- a/src/lib/components/WelcomeScreen.svelte +++ b/src/lib/components/WelcomeScreen.svelte @@ -3,6 +3,7 @@ import { resolve } from '$app/paths'; import { accountSetup } from '$lib/atproto/setup.svelte'; import AboutComputer from '$lib/components/AboutComputer.svelte'; + import { REPO_URL } from '$lib/constants'; const quickLinks = [ { @@ -23,7 +24,7 @@ label: 'Project source', description: 'Visit the Tangled repo in a new tab.', icon: '/icons/humanity/apps/web-browser.svg', - href: 'https://tangled.org/desertthunder.dev/ibex', + href: REPO_URL, external: true } ] as const; diff --git a/src/lib/constants.ts b/src/lib/constants.ts new file mode 100644 index 0000000..9ce9ab6 --- /dev/null +++ b/src/lib/constants.ts @@ -0,0 +1 @@ +export const REPO_URL = 'https://tangled.org/desertthunder.dev/ibex'; diff --git a/src/lib/version.ts b/src/lib/version.ts new file mode 100644 index 0000000..1de933a --- /dev/null +++ b/src/lib/version.ts @@ -0,0 +1,32 @@ +import { version as VERSION } from '$app/environment'; +import { REPO_URL } from './constants'; + +export type BuildVersion = { display: string; commit: string; version: string }; + +const fallbackVersion: BuildVersion = { display: VERSION, commit: 'unknown', version: VERSION }; + +function isBuildVersion(value: unknown): value is BuildVersion { + if (!value || typeof value !== 'object') return false; + + const candidate = value as Record; + return ( + typeof candidate.display === 'string' && + typeof candidate.commit === 'string' && + typeof candidate.version === 'string' + ); +} + +function parseBuildVersion(value: string): BuildVersion { + try { + const parsed: unknown = JSON.parse(value); + if (isBuildVersion(parsed)) return parsed; + } catch (err) { + console.warn(err instanceof Error ? err.message : String(err)); + } + + return fallbackVersion; +} + +export const buildVersion = parseBuildVersion(VERSION); + +export const buildCommitUrl = `${REPO_URL}/commit/${buildVersion.commit}`; diff --git a/svelte.config.js b/svelte.config.js index b6b0c34..05f29c7 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -4,7 +4,7 @@ import * as fs from 'node:fs'; import { mdsvex } from 'mdsvex'; const packageJson = JSON.parse(fs.readFileSync(new URL('./package.json', import.meta.url), 'utf8')); -const buildVersion = buildVersionLabel(packageJson.version); +const buildVersion = buildVersionDetails(packageJson.version); function getVersion(v) { const verify = gitOutput(['rev-parse', '--verify', v]); @@ -12,17 +12,14 @@ function getVersion(v) { return gitOutput(['describe', '--tags', '--abbrev=0', '--match', 'v[0-9]*']); } -function buildVersionLabel(version) { +function buildVersionDetails(version) { const versionTag = `v${version}`; - const tag = getVersion(versionTag); + const tag = getVersion(versionTag) ?? versionTag; const count = gitOutput(tag ? ['rev-list', '--count', `${tag}..HEAD`] : ['rev-list', '--count', 'HEAD']) ?? '0'; - - if (count === '0') { - return `v${version}`; - } - - const commit = gitOutput(['rev-parse', '--short', 'HEAD']) ?? 'unknown'; - return `v${version}-${count}+g${commit}`; + const commit = gitOutput(['rev-parse', 'HEAD']) ?? 'unknown'; + const shortCommit = gitOutput(['rev-parse', '--short', 'HEAD']) ?? 'unknown'; + const display = count === '0' ? versionTag : `${versionTag}-${count}+g${shortCommit}`; + return { display, commit, version: tag }; } function gitOutput(args) { @@ -38,7 +35,7 @@ const config = { extensions: ['.svelte', '.svx', '.md'], preprocess: [mdsvex({ extensions: ['.svx', '.md'] })], compilerOptions: { runes: ({ filename }) => (filename.split(/[/\\]/).includes('node_modules') ? undefined : true) }, - kit: { adapter: adapter({ fallback: 'index.html' }), version: { name: buildVersion } } + kit: { adapter: adapter({ fallback: 'index.html' }), version: { name: JSON.stringify(buildVersion) } } }; export default config;