Add scheduled listening refresh and configurable fetch cache
This commit is contained in:
@@ -27,6 +27,9 @@ AUTHOR_TITLE=
|
||||
AUTHOR_PRONOUN=
|
||||
SITE_LOCALE=de
|
||||
|
||||
# --- Where page (OwnYourSwarm/Swarm checkins) ---
|
||||
OWNYOURSWARM_FEED_URL=
|
||||
OWNYOURSWARM_FEED_TOKEN=
|
||||
# --- Listening cache (EleventyFetch) ---
|
||||
# Shared cache duration for listening data fetches during build (examples: 2m, 5m, 15m)
|
||||
LISTENING_FETCH_CACHE_DURATION=5m
|
||||
# Optional per-source overrides
|
||||
FUNKWHALE_FETCH_CACHE_DURATION=
|
||||
LASTFM_FETCH_CACHE_DURATION=
|
||||
|
||||
12
.github/workflows/deploy.yml
vendored
12
.github/workflows/deploy.yml
vendored
@@ -3,6 +3,9 @@ name: Build & Deploy
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
schedule:
|
||||
- cron: "*/15 * * * *"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
@@ -42,6 +45,9 @@ jobs:
|
||||
SITE_LOCALE: ${{ secrets.SITE_LOCALE }}
|
||||
OWNYOURSWARM_FEED_URL: ${{ secrets.OWNYOURSWARM_FEED_URL }}
|
||||
OWNYOURSWARM_FEED_TOKEN: ${{ secrets.OWNYOURSWARM_FEED_TOKEN }}
|
||||
LISTENING_FETCH_CACHE_DURATION: ${{ secrets.LISTENING_FETCH_CACHE_DURATION }}
|
||||
FUNKWHALE_FETCH_CACHE_DURATION: ${{ secrets.FUNKWHALE_FETCH_CACHE_DURATION }}
|
||||
LASTFM_FETCH_CACHE_DURATION: ${{ secrets.LASTFM_FETCH_CACHE_DURATION }}
|
||||
run: |
|
||||
{
|
||||
printf 'SITE_URL=%s\n' "$SITE_URL"
|
||||
@@ -63,6 +69,9 @@ jobs:
|
||||
printf 'SITE_LOCALE=%s\n' "$SITE_LOCALE"
|
||||
printf 'OWNYOURSWARM_FEED_URL=%s\n' "$OWNYOURSWARM_FEED_URL"
|
||||
printf 'OWNYOURSWARM_FEED_TOKEN=%s\n' "$OWNYOURSWARM_FEED_TOKEN"
|
||||
printf 'LISTENING_FETCH_CACHE_DURATION=%s\n' "$LISTENING_FETCH_CACHE_DURATION"
|
||||
printf 'FUNKWHALE_FETCH_CACHE_DURATION=%s\n' "$FUNKWHALE_FETCH_CACHE_DURATION"
|
||||
printf 'LASTFM_FETCH_CACHE_DURATION=%s\n' "$LASTFM_FETCH_CACHE_DURATION"
|
||||
} > .env
|
||||
|
||||
- name: Build site
|
||||
@@ -82,6 +91,9 @@ jobs:
|
||||
MASTODON_USER: ${{ secrets.MASTODON_USER }}
|
||||
OWNYOURSWARM_FEED_URL: ${{ secrets.OWNYOURSWARM_FEED_URL }}
|
||||
OWNYOURSWARM_FEED_TOKEN: ${{ secrets.OWNYOURSWARM_FEED_TOKEN }}
|
||||
LISTENING_FETCH_CACHE_DURATION: ${{ secrets.LISTENING_FETCH_CACHE_DURATION }}
|
||||
FUNKWHALE_FETCH_CACHE_DURATION: ${{ secrets.FUNKWHALE_FETCH_CACHE_DURATION }}
|
||||
LASTFM_FETCH_CACHE_DURATION: ${{ secrets.LASTFM_FETCH_CACHE_DURATION }}
|
||||
|
||||
- name: Deploy via SCP
|
||||
uses: appleboy/scp-action@v0.1.7
|
||||
|
||||
@@ -8,6 +8,11 @@ import EleventyFetch from "@11ty/eleventy-fetch";
|
||||
const INDIEKIT_URL =
|
||||
process.env.INDIEKIT_URL || process.env.SITE_URL || "https://example.com";
|
||||
const FUNKWHALE_INSTANCE = process.env.FUNKWHALE_INSTANCE || "";
|
||||
const DEFAULT_FETCH_CACHE_DURATION = "5m";
|
||||
const LISTENING_FETCH_CACHE_DURATION =
|
||||
(process.env.LISTENING_FETCH_CACHE_DURATION || "").trim() || DEFAULT_FETCH_CACHE_DURATION;
|
||||
const FUNKWHALE_FETCH_CACHE_DURATION =
|
||||
(process.env.FUNKWHALE_FETCH_CACHE_DURATION || "").trim() || LISTENING_FETCH_CACHE_DURATION;
|
||||
|
||||
/**
|
||||
* Fetch from Indiekit's public Funkwhale API endpoint
|
||||
@@ -22,7 +27,7 @@ async function fetchFromIndiekit(endpoint) {
|
||||
try {
|
||||
console.log(`[funkwhaleActivity] Fetching from Indiekit: ${url}`);
|
||||
const data = await EleventyFetch(url, {
|
||||
duration: "15m",
|
||||
duration: FUNKWHALE_FETCH_CACHE_DURATION,
|
||||
type: "json",
|
||||
});
|
||||
console.log(`[funkwhaleActivity] Indiekit ${endpoint} success via ${url}`);
|
||||
@@ -61,6 +66,9 @@ function formatDuration(seconds) {
|
||||
export default async function () {
|
||||
try {
|
||||
console.log("[funkwhaleActivity] Fetching Funkwhale data...");
|
||||
console.log(
|
||||
`[funkwhaleActivity] EleventyFetch cache duration: ${FUNKWHALE_FETCH_CACHE_DURATION}`
|
||||
);
|
||||
|
||||
// Fetch all data from Indiekit API
|
||||
const [nowPlaying, listenings, favorites, stats] = await Promise.all([
|
||||
|
||||
@@ -8,6 +8,11 @@ import EleventyFetch from "@11ty/eleventy-fetch";
|
||||
const INDIEKIT_URL =
|
||||
process.env.INDIEKIT_URL || process.env.SITE_URL || "https://example.com";
|
||||
const LASTFM_USERNAME = process.env.LASTFM_USERNAME || "";
|
||||
const DEFAULT_FETCH_CACHE_DURATION = "5m";
|
||||
const LISTENING_FETCH_CACHE_DURATION =
|
||||
(process.env.LISTENING_FETCH_CACHE_DURATION || "").trim() || DEFAULT_FETCH_CACHE_DURATION;
|
||||
const LASTFM_FETCH_CACHE_DURATION =
|
||||
(process.env.LASTFM_FETCH_CACHE_DURATION || "").trim() || LISTENING_FETCH_CACHE_DURATION;
|
||||
|
||||
/**
|
||||
* Fetch from Indiekit's public Last.fm API endpoint
|
||||
@@ -22,7 +27,7 @@ async function fetchFromIndiekit(path) {
|
||||
try {
|
||||
console.log(`[lastfmActivity] Fetching from Indiekit: ${url}`);
|
||||
const data = await EleventyFetch(url, {
|
||||
duration: "15m",
|
||||
duration: LASTFM_FETCH_CACHE_DURATION,
|
||||
type: "json",
|
||||
});
|
||||
console.log(`[lastfmActivity] Indiekit ${path} success via ${url}`);
|
||||
@@ -40,6 +45,9 @@ async function fetchFromIndiekit(path) {
|
||||
export default async function () {
|
||||
try {
|
||||
console.log("[lastfmActivity] Fetching Last.fm data...");
|
||||
console.log(
|
||||
`[lastfmActivity] EleventyFetch cache duration: ${LASTFM_FETCH_CACHE_DURATION}`
|
||||
);
|
||||
|
||||
// Fetch all data from Indiekit API
|
||||
const [nowPlaying, scrobbles, loved, stats] = await Promise.all([
|
||||
|
||||
@@ -8,6 +8,11 @@ import EleventyFetch from "@11ty/eleventy-fetch";
|
||||
const INDIEKIT_URL =
|
||||
process.env.INDIEKIT_URL || process.env.SITE_URL || "https://example.com";
|
||||
const FUNKWHALE_INSTANCE = process.env.FUNKWHALE_INSTANCE || "";
|
||||
const DEFAULT_FETCH_CACHE_DURATION = "5m";
|
||||
const LISTENING_FETCH_CACHE_DURATION =
|
||||
(process.env.LISTENING_FETCH_CACHE_DURATION || "").trim() || DEFAULT_FETCH_CACHE_DURATION;
|
||||
const FUNKWHALE_FETCH_CACHE_DURATION =
|
||||
(process.env.FUNKWHALE_FETCH_CACHE_DURATION || "").trim() || LISTENING_FETCH_CACHE_DURATION;
|
||||
|
||||
/**
|
||||
* Fetch from Indiekit's public Funkwhale API endpoint
|
||||
@@ -22,7 +27,7 @@ async function fetchFromIndiekit(endpoint) {
|
||||
try {
|
||||
console.log(`[funkwhaleActivity] Fetching from Indiekit: ${url}`);
|
||||
const data = await EleventyFetch(url, {
|
||||
duration: "15m",
|
||||
duration: FUNKWHALE_FETCH_CACHE_DURATION,
|
||||
type: "json",
|
||||
});
|
||||
console.log(`[funkwhaleActivity] Indiekit ${endpoint} success via ${url}`);
|
||||
@@ -61,6 +66,9 @@ function formatDuration(seconds) {
|
||||
export default async function () {
|
||||
try {
|
||||
console.log("[funkwhaleActivity] Fetching Funkwhale data...");
|
||||
console.log(
|
||||
`[funkwhaleActivity] EleventyFetch cache duration: ${FUNKWHALE_FETCH_CACHE_DURATION}`
|
||||
);
|
||||
|
||||
// Fetch all data from Indiekit API
|
||||
const [nowPlaying, listenings, favorites, stats] = await Promise.all([
|
||||
|
||||
@@ -8,6 +8,11 @@ import EleventyFetch from "@11ty/eleventy-fetch";
|
||||
const INDIEKIT_URL =
|
||||
process.env.INDIEKIT_URL || process.env.SITE_URL || "https://example.com";
|
||||
const LASTFM_USERNAME = process.env.LASTFM_USERNAME || "";
|
||||
const DEFAULT_FETCH_CACHE_DURATION = "5m";
|
||||
const LISTENING_FETCH_CACHE_DURATION =
|
||||
(process.env.LISTENING_FETCH_CACHE_DURATION || "").trim() || DEFAULT_FETCH_CACHE_DURATION;
|
||||
const LASTFM_FETCH_CACHE_DURATION =
|
||||
(process.env.LASTFM_FETCH_CACHE_DURATION || "").trim() || LISTENING_FETCH_CACHE_DURATION;
|
||||
|
||||
/**
|
||||
* Fetch from Indiekit's public Last.fm API endpoint
|
||||
@@ -22,7 +27,7 @@ async function fetchFromIndiekit(path) {
|
||||
try {
|
||||
console.log(`[lastfmActivity] Fetching from Indiekit: ${url}`);
|
||||
const data = await EleventyFetch(url, {
|
||||
duration: "15m",
|
||||
duration: LASTFM_FETCH_CACHE_DURATION,
|
||||
type: "json",
|
||||
});
|
||||
console.log(`[lastfmActivity] Indiekit ${path} success via ${url}`);
|
||||
@@ -40,6 +45,9 @@ async function fetchFromIndiekit(path) {
|
||||
export default async function () {
|
||||
try {
|
||||
console.log("[lastfmActivity] Fetching Last.fm data...");
|
||||
console.log(
|
||||
`[lastfmActivity] EleventyFetch cache duration: ${LASTFM_FETCH_CACHE_DURATION}`
|
||||
);
|
||||
|
||||
// Fetch all data from Indiekit API
|
||||
const [nowPlaying, scrobbles, loved, stats] = await Promise.all([
|
||||
|
||||
Reference in New Issue
Block a user