diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 5962407dcc156..902d7e900ec6d 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -94,6 +94,10 @@ const config = { srcDark: 'img/immich-logo-inline-dark.png', }, items: [ + { + type: 'custom-versionSwitcher', + position: 'right', + }, { to: '/docs/overview/introduction', position: 'right', diff --git a/docs/src/components/version-switcher.tsx b/docs/src/components/version-switcher.tsx new file mode 100644 index 0000000000000..dae822f4f7303 --- /dev/null +++ b/docs/src/components/version-switcher.tsx @@ -0,0 +1,59 @@ +import '@docusaurus/theme-classic/lib/theme/Unlisted/index'; +import { useWindowSize } from '@docusaurus/theme-common'; +import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem'; +import React, { useEffect, useState } from 'react'; + +export default function VersionSwitcher(): JSX.Element { + const [versions, setVersions] = useState([]); + const [label, setLabel] = useState('Versions'); + + const windowSize = useWindowSize(); + + useEffect(() => { + async function getVersions() { + try { + let baseUrl = 'https://immich.app'; + if (window.location.origin === 'http://localhost:3005') { + baseUrl = window.location.origin; + } + + const response = await fetch(`${baseUrl}/archived-versions.json`); + + const archiveVersions = await response.json(); + + const allVersions = [ + { label: 'Next', url: 'https://main.preview.immich.app' }, + { label: 'Latest', url: 'https://immich.app' }, + ...archiveVersions, + ]; + setVersions(allVersions); + + const activeVersion = allVersions.find((version) => new URL(version.url).origin === window.location.origin); + if (activeVersion) { + setLabel(activeVersion.label); + } + } catch (error) { + console.error('Failed to fetch versions', error); + } + } + + if (versions.length === 0) { + getVersions(); + } + }, []); + + return ( + versions.length > 0 && ( + ({ + label, + to: url, + target: '_self', + }))} + /> + ) + ); +} diff --git a/docs/src/theme/NavbarItem/ComponentTypes.js b/docs/src/theme/NavbarItem/ComponentTypes.js new file mode 100644 index 0000000000000..eb4d4e2aa54ee --- /dev/null +++ b/docs/src/theme/NavbarItem/ComponentTypes.js @@ -0,0 +1,7 @@ +import ComponentTypes from '@theme-original/NavbarItem/ComponentTypes'; +import VersionSwitcher from '@site/src/components/version-switcher'; + +export default { + ...ComponentTypes, + 'custom-versionSwitcher': VersionSwitcher, +}; diff --git a/docs/static/archived-versions.json b/docs/static/archived-versions.json new file mode 100644 index 0000000000000..e005df9c27ae5 --- /dev/null +++ b/docs/static/archived-versions.json @@ -0,0 +1,6 @@ +[ + { + "label": "v1.105.1", + "url": "https://v1.105.1.archive.immich.app/" + } +] diff --git a/misc/release/archive-version.js b/misc/release/archive-version.js new file mode 100755 index 0000000000000..449fe19eb2853 --- /dev/null +++ b/misc/release/archive-version.js @@ -0,0 +1,17 @@ +#! /usr/bin/env node +const { readFileSync, writeFileSync } = require('node:fs'); + +const lastVersion = process.argv[2]; +if (!lastVersion) { + console.log('Usage: archive-version.js '); + process.exit(1); +} + +const filename = './docs/static/archived-versions.json'; +const oldVersions = JSON.parse(readFileSync(filename)); +const newVersions = [ + { label: lastVersion, url: `https://${lastVersion}.archive.immich.app` }, + ...oldVersions, +]; + +writeFileSync(filename, JSON.stringify(newVersions, null, 2) + '\n'); diff --git a/misc/release/pump-version.sh b/misc/release/pump-version.sh index 0d0ae4b9e2366..81c9cbabb3585 100755 --- a/misc/release/pump-version.sh +++ b/misc/release/pump-version.sh @@ -83,4 +83,6 @@ sed -i "s/version_number: \"$CURRENT_SERVER\"$/version_number: \"$NEXT_SERVER\"/ sed -i "s/\"android\.injected\.version\.code\" => $CURRENT_MOBILE,/\"android\.injected\.version\.code\" => $NEXT_MOBILE,/" mobile/android/fastlane/Fastfile sed -i "s/^version: $CURRENT_SERVER+$CURRENT_MOBILE$/version: $NEXT_SERVER+$NEXT_MOBILE/" mobile/pubspec.yaml +./misc/release/archive-version.js "$NEXT_SERVER" + echo "IMMICH_VERSION=v$NEXT_SERVER" >>"$GITHUB_ENV"