chore: repasse en SSG pour réduire les appels API Contentful
- Supprime `prerender = false` des pages (index, evenements, [slug]) - Remet `getStaticPaths()` pour la génération statique des événements - Simplifie astro.config.mjs (suppression mode hybrid + adapter node) - Supprime le webhook devenu inutile (rebuild via API CleverCloud) - Corrige le typage de ContentfulAsset Le webhook Contentful appelle maintenant directement l'API CleverCloud pour déclencher un rebuild lors des publications.
This commit is contained in:
parent
411556293c
commit
ad87c1263c
5 changed files with 14 additions and 85 deletions
|
|
@ -1,12 +1,7 @@
|
|||
import { defineConfig } from 'astro/config';
|
||||
import node from "@astrojs/node";
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
output: "hybrid",
|
||||
adapter: node({
|
||||
mode: "standalone"
|
||||
}),
|
||||
server: {
|
||||
port: 8080,
|
||||
host: true
|
||||
|
|
|
|||
|
|
@ -1,62 +0,0 @@
|
|||
import { exec } from 'child_process';
|
||||
|
||||
export const prerender = false;
|
||||
|
||||
let isBuildInProgress = false;
|
||||
|
||||
export async function POST({ request }: { request: Request }): Promise<Response> {
|
||||
const data = await request.json();
|
||||
|
||||
if (!data.token || data.token !== import.meta.env.WEBHOOK_TOKEN) {
|
||||
return new Response(
|
||||
JSON.stringify({ status: "unauthorized" }),
|
||||
{ status: 401, headers: { "Content-Type": "application/json" } }
|
||||
)
|
||||
}
|
||||
|
||||
try {
|
||||
if (isBuildInProgress) {
|
||||
return new Response(
|
||||
JSON.stringify({status: 'error', message: 'Build already in progress'}),
|
||||
{
|
||||
status: 409,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
isBuildInProgress = true;
|
||||
exec('npm run build', (error, stdout, stderr) => {
|
||||
if (error) {
|
||||
console.error(`Error executing build: ${error}`);
|
||||
}
|
||||
if (stdout) {
|
||||
console.log(`Build stdout: ${stdout}`);
|
||||
}
|
||||
if (stderr) {
|
||||
console.error(`Build stderr: ${stderr}`);
|
||||
}
|
||||
|
||||
isBuildInProgress = false;
|
||||
});
|
||||
|
||||
return new Response(JSON.stringify({status: 'success'}), {
|
||||
status: 200,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("Error in webhook:", error);
|
||||
|
||||
// Return a error response
|
||||
return new Response(JSON.stringify({status: 'error', message: error?.toString()}), {
|
||||
status: 500,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -3,8 +3,6 @@ import Layout from '../layouts/Layout.astro';
|
|||
import { fetchEvenementsPassés } from "../lib/contentful";
|
||||
import GrilleSpectaclesPassés from "../components/GrilleSpectaclesPassés.astro";
|
||||
|
||||
export const prerender = false
|
||||
|
||||
const evenementsPassés = await fetchEvenementsPassés()
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -1,28 +1,28 @@
|
|||
---
|
||||
import type { Document } from '@contentful/rich-text-types';
|
||||
import { documentToHtmlString } from "@contentful/rich-text-html-renderer";
|
||||
import {fetchEvenement, fetchAllEvenements} from "../../lib/contentful";
|
||||
import { fetchAllEvenements } from "../../lib/contentful";
|
||||
import Layout from "../../layouts/Layout.astro";
|
||||
import Card from "../../components/Card.astro";
|
||||
import { formatDateAvecHeure } from "../../utils/date";
|
||||
|
||||
export const prerender = false
|
||||
export async function getStaticPaths() {
|
||||
const tousEvenements = await fetchAllEvenements()
|
||||
return tousEvenements.map((evenement, index) => ({
|
||||
params: { slug: evenement.slug },
|
||||
props: {
|
||||
evenement,
|
||||
evenementPrecedent: index > 0 ? tousEvenements[index - 1] : null,
|
||||
evenementSuivant: index < tousEvenements.length - 1 ? tousEvenements[index + 1] : null,
|
||||
},
|
||||
}))
|
||||
}
|
||||
|
||||
const {slug} = Astro.params
|
||||
|
||||
const evenement = await fetchEvenement(slug)
|
||||
const { evenement, evenementPrecedent, evenementSuivant } = Astro.props
|
||||
const { nom, description, date, lieu, lieuUrl, affiche, album } = evenement
|
||||
|
||||
// Récupération de tous les événements pour la navigation
|
||||
const tousEvenements = await fetchAllEvenements()
|
||||
const currentIndex = tousEvenements.findIndex(e => e.slug === slug)
|
||||
const evenementPrecedent = currentIndex > 0 ? tousEvenements[currentIndex - 1] : null
|
||||
const evenementSuivant = currentIndex < tousEvenements.length - 1 ? tousEvenements[currentIndex + 1] : null
|
||||
|
||||
const Wrapper = lieuUrl ? 'a' : 'div'
|
||||
|
||||
---
|
||||
<Layout>
|
||||
<Layout title={`${nom} - Les Particules`}>
|
||||
<div class="navigation-header">
|
||||
{evenementPrecedent && (
|
||||
<a href={`/evenements/${evenementPrecedent.slug}`} class="nav-link nav-prev">
|
||||
|
|
|
|||
|
|
@ -5,8 +5,6 @@ import { fetchEvenements, fetchEvenementsPassés } from "../lib/contentful";
|
|||
import Evenement from "../components/Evenement.astro";
|
||||
import GrilleSpectaclesPassés from "../components/GrilleSpectaclesPassés.astro";
|
||||
|
||||
export const prerender = false
|
||||
|
||||
const evenements = await fetchEvenements()
|
||||
const evenementsPassés = await fetchEvenementsPassés()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue