Skip to content

Commit

Permalink
docs: version switcher (#10091)
Browse files Browse the repository at this point in the history
* docs: version switcher

* chore: pump script

* chore: fix linting on bash script

* chore: remove 1.106.0 from archived versions

* chore: change version archive script to take next server version not current version

---------

Co-authored-by: Zack Pollard <[email protected]>
  • Loading branch information
jrasm91 and zackpollard authored Jun 11, 2024
1 parent 05874bd commit 321c3cc
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 0 deletions.
4 changes: 4 additions & 0 deletions docs/docusaurus.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
59 changes: 59 additions & 0 deletions docs/src/components/version-switcher.tsx
Original file line number Diff line number Diff line change
@@ -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 && (
<DropdownNavbarItem
className="navbar__item"
label={label}
mobile={windowSize === 'mobile'}
items={versions.map(({ label, url }) => ({
label,
to: url,
target: '_self',
}))}
/>
)
);
}
7 changes: 7 additions & 0 deletions docs/src/theme/NavbarItem/ComponentTypes.js
Original file line number Diff line number Diff line change
@@ -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,
};
6 changes: 6 additions & 0 deletions docs/static/archived-versions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[
{
"label": "v1.105.1",
"url": "https://v1.105.1.archive.immich.app/"
}
]
17 changes: 17 additions & 0 deletions misc/release/archive-version.js
Original file line number Diff line number Diff line change
@@ -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 <version>');
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');
2 changes: 2 additions & 0 deletions misc/release/pump-version.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"

0 comments on commit 321c3cc

Please sign in to comment.