diff --git a/docs/configs/settings.md b/docs/configs/settings.md index 5a32c139..93aa7f8f 100644 --- a/docs/configs/settings.md +++ b/docs/configs/settings.md @@ -447,7 +447,7 @@ quicklaunch: suggestionUrl: https://ac.ecosia.org/autocomplete?type=list&q= ``` -## Homepage Version +## Homepage Version & Update Checking By default the release version is displayed at the bottom of the page. To hide this, use the `hideVersion` setting, like so: @@ -455,6 +455,12 @@ By default the release version is displayed at the bottom of the page. To hide t hideVersion: true ``` +You can disable checking for new versions from GitHub (enabled by default) with: + +```yaml +disableUpdateCheck: true +``` + ## Log Path By default the homepage logfile is written to the a `logs` subdirectory of the `config` folder. In order to customize this path, you can set the `logpath` setting. A `logs` folder will be created in that location where the logfile will be written. diff --git a/src/components/version.jsx b/src/components/version.jsx index 9f0b5e83..b8ee1eb8 100644 --- a/src/components/version.jsx +++ b/src/components/version.jsx @@ -1,9 +1,12 @@ +import cache from "memory-cache"; import { useTranslation } from "next-i18next"; import useSWR from "swr"; import { compareVersions, validate } from "compare-versions"; import { MdNewReleases } from "react-icons/md"; -export default function Version() { +const LATEST_RELEASE_CACHE_KEY = "latestRelease"; + +export default function Version({ disableUpdateCheck = false }) { const { t, i18n } = useTranslation(); const buildTime = process.env.NEXT_PUBLIC_BUILDTIME?.length @@ -12,8 +15,6 @@ export default function Version() { const revision = process.env.NEXT_PUBLIC_REVISION?.length ? process.env.NEXT_PUBLIC_REVISION : "dev"; const version = process.env.NEXT_PUBLIC_VERSION?.length ? process.env.NEXT_PUBLIC_VERSION : "dev"; - const { data: releaseData } = useSWR("/api/releases"); - // use Intl.DateTimeFormat to format the date const formatDate = (date) => { const options = { @@ -24,7 +25,15 @@ export default function Version() { return new Intl.DateTimeFormat(i18n.language, options).format(new Date(date)); }; - const latestRelease = releaseData?.[0]; + let latestRelease = cache.get(LATEST_RELEASE_CACHE_KEY); + + const { data: releaseData } = useSWR(latestRelease || disableUpdateCheck ? null : "/api/releases"); + + if (releaseData) { + latestRelease = releaseData?.[0]; + // cache the latest release for 1h + cache.put(LATEST_RELEASE_CACHE_KEY, latestRelease, 3600000); + } return (
diff --git a/src/pages/api/releases.js b/src/pages/api/releases.js index 14d3051d..f15930c2 100644 --- a/src/pages/api/releases.js +++ b/src/pages/api/releases.js @@ -1,6 +1,14 @@ import cachedFetch from "utils/proxy/cached-fetch"; +import createLogger from "utils/logger"; + +const logger = createLogger("releases"); export default async function handler(req, res) { const releasesURL = "https://api.github.com/repos/gethomepage/homepage/releases"; - return res.send(await cachedFetch(releasesURL, 5)); + try { + return res.send(await cachedFetch(releasesURL, 5)); + } catch (e) { + logger.error(`Error checking GitHub releases: ${e}`); + return res.send([]); + } } diff --git a/src/pages/index.jsx b/src/pages/index.jsx index e72a65d3..5055a22b 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -480,7 +480,7 @@ function Home({ initialSettings }) {
- {!settings.hideVersion && } + {!settings.hideVersion && }