docs: update starlight to 0.35.2 + update docker images to latest

This commit is contained in:
Yassine Doghri 2025-08-29 10:37:01 +00:00
parent 9dffc8d5f1
commit 835f099f2e
22 changed files with 2148 additions and 7065 deletions

View File

@ -12,7 +12,7 @@ LABEL maintainer="Yassine Doghri <yassine@doghri.fr>"
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# Install server requirements
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
&& apt-get update \
&& apt-get install --yes --no-install-recommends nodejs \
# gnupg to sign commits with gpg

View File

@ -1,6 +1,6 @@
FROM docker.io/golang:1.20-bookworm AS CRON_BUILDER
FROM docker.io/golang:1.25-bookworm AS CRON_BUILDER
ARG SUPERCRONIC_VERSION=v0.2.25
ARG SUPERCRONIC_VERSION=v0.2.34
RUN apt-get update && \
apt-get install -y git && \

View File

@ -1,6 +1,6 @@
FROM docker.io/golang:1.21-bookworm AS CRON_BUILDER
FROM docker.io/golang:1.25-bookworm AS CRON_BUILDER
ARG SUPERCRONIC_VERSION=v0.2.26
ARG SUPERCRONIC_VERSION=v0.2.34
RUN apt-get update && \
apt-get install -y git && \
@ -13,7 +13,7 @@ RUN apt-get update && \
FROM docker.io/php:8.4-cli
ARG UNIT_VERSION=1.31.1
ARG UNIT_VERSION=1.34.2
COPY --from=CRON_BUILDER /usr/local/bin/supercronic /usr/local/bin/supercronic

View File

@ -1,4 +1,4 @@
FROM docker.io/nginx:1.25
FROM docker.io/nginx:1.29
COPY docker/production/web-server/entrypoint.sh /entrypoint.sh
COPY docker/production/web-server/nginx.template.conf /nginx.template.conf

View File

@ -1,4 +1,4 @@
image: node:20
image: node:22
stages:
- build

View File

@ -6,9 +6,6 @@
pnpm create astro@latest -- --template starlight
```
[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/starlight/tree/main/examples/basics)
[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/starlight/tree/main/examples/basics)
> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun!
## 🚀 Project Structure
@ -16,15 +13,14 @@ pnpm create astro@latest -- --template starlight
Inside of your Astro + Starlight project, you'll see the following folders and
files:
```
```sh
.
├── public/
├── src/
│ ├── assets/
│ ├── content/
│ │ ├── docs/
│ │ └── config.ts
│ └── env.d.ts
│ │ └── docs/
│ └── content.config.ts
├── astro.config.mjs
├── package.json
└── tsconfig.json
@ -42,14 +38,14 @@ Static assets, like favicons, can be placed in the `public/` directory.
All commands are run from the root of the project, from a terminal:
| Command | Action |
| :------------------------ | :----------------------------------------------- |
| `npm install` | Installs dependencies |
| `npm run dev` | Starts local dev server at `localhost:4321` |
| `npm run build` | Build your production site to `./dist/` |
| `npm run preview` | Preview your build locally, before deploying |
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
| `npm run astro -- --help` | Get help using the Astro CLI |
| Command | Action |
| :--------------------- | :----------------------------------------------- |
| `pnpm install` | Installs dependencies |
| `pnpm dev` | Starts local dev server at `localhost:4321` |
| `pnpm build` | Build your production site to `./dist/` |
| `pnpm preview` | Preview your build locally, before deploying |
| `pnpm astro ...` | Run CLI commands like `astro add`, `astro check` |
| `pnpm astro -- --help` | Get help using the Astro CLI |
## 👀 Want to learn more?

View File

@ -1,9 +1,8 @@
// @ts-check
import { defineConfig } from "astro/config";
import starlight from "@astrojs/starlight";
import starlightOpenAPI from "starlight-openapi";
import tailwind from "@astrojs/tailwind";
const site = "https://docs.castopod.org/";
const base = process.env.BASE ?? "/docs";
@ -17,8 +16,7 @@ export default defineConfig({
description:
"Check out the Castopod documentation! Install your own free & open-source podcast host, help make it better by contributing, or simply learn more about Castopod!",
components: {
Header: "./src/components/Header.astro",
MobileMenuFooter: "./src/components/MobileMenuFooter.astro",
ThemeSelect: "./src/components/ThemeSelect.astro",
},
logo: {
src: "./src/assets/castopod-logo-inline.svg",
@ -29,7 +27,7 @@ export default defineConfig({
"@fontsource/inter/400.css",
"@fontsource/inter/600.css",
"@fontsource/rubik/700.css",
"./src/styles/tailwind.css",
"./src/styles/custom.css",
],
head: [
{
@ -82,6 +80,33 @@ export default defineConfig({
},
},
],
social: [
{
icon: "discord",
label: "Discord",
href: "https://castopod.org/chat",
},
{
icon: "x.com",
label: "Twitter/X",
href: "https://twitter.com/castopod",
},
{
icon: "mastodon",
label: "Mastodon",
href: "https://podlibre.social/@Castopod",
},
{
icon: "gitlab",
label: "Source code",
href: "https://code.castopod.org/adaures/castopod",
},
{
icon: "github",
label: "Github",
href: "https://github.com/ad-aures/castopod",
},
],
defaultLocale: "en",
locales: {
en: {
@ -116,14 +141,8 @@ export default defineConfig({
lang: "zh-Hans",
},
},
social: {
discord: "https://castopod.org/chat",
"x.com": "https://twitter.com/castopod",
mastodon: "https://podlibre.social/@Castopod",
gitlab: "https://code.castopod.org/adaures/castopod",
github: "https://github.com/ad-aures/castopod",
},
plugins: [
// Generate the OpenAPI documentation pages.
starlightOpenAPI([
{
base: "en/api",
@ -374,8 +393,5 @@ export default defineConfig({
baseUrl: "https://code.castopod.org/adaures/castopod/-/edit/main/docs/",
},
}),
tailwind({
applyBaseStyles: false,
}),
],
});

View File

@ -1,30 +1,21 @@
{
"name": "civil-chasm",
"name": "castopod-docs",
"type": "module",
"version": "0.0.1",
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"build": "astro check && astro build",
"build": "astro build",
"preview": "astro preview",
"astro": "astro",
"prepare": "astro telemetry disable"
},
"dependencies": {
"@astrojs/check": "^0.9.4",
"@astrojs/starlight": "^0.32.2",
"@astrojs/starlight-tailwind": "^3.0.0",
"@astrojs/tailwind": "^5.1.5",
"@fontsource/inter": "^5.2.5",
"@fontsource/rubik": "^5.2.5",
"astro": "^5.5.2",
"autoprefixer": "^10.4.21",
"cssnano": "^7.0.6",
"postcss-preset-env": "^10.1.5",
"sharp": "^0.33.5",
"starlight-openapi": "^0.14.1",
"tailwindcss": "^3.4.17",
"typescript": "^5.8.2",
"zod": "3.24.2"
"@astrojs/starlight": "^0.35.2",
"@fontsource/inter": "^5.2.6",
"@fontsource/rubik": "^5.2.6",
"astro": "^5.13.4",
"sharp": "^0.34.3",
"starlight-openapi": "^0.20.0"
}
}

8787
docs/pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +0,0 @@
module.exports = {
plugins: [
require("autoprefixer"),
require("cssnano"),
require("postcss-preset-env")({
stage: 3,
features: { "nesting-rules": false },
}),
],
};

View File

@ -1,6 +1,5 @@
---
import Select from '@astrojs/starlight/components/Select.astro';
import type { Props } from '@astrojs/starlight/props';
---
<docs-version-select>

View File

@ -1,91 +0,0 @@
---
import config from 'virtual:starlight/user-config';
import type { Props } from '@astrojs/starlight/props';
import LanguageSelect from '@astrojs/starlight/components/LanguageSelect.astro';
import Search from '@astrojs/starlight/components/Search.astro';
import SiteTitle from '@astrojs/starlight/components/SiteTitle.astro';
import SocialIcons from '@astrojs/starlight/components/SocialIcons.astro';
import ThemeSelect from '@astrojs/starlight/components/ThemeSelect.astro';
import VersionSelect from './DocsVersionSelect.astro';
/**
* Render the `Search` component if Pagefind is enabled or the default search component has been overridden.
*/
const shouldRenderSearch =
config.pagefind || config.components.Search !== '@astrojs/starlight/components/Search.astro';
---
<div class="header sl-flex">
<div class="title-wrapper sl-flex">
<SiteTitle {...Astro.props} />
</div>
<div class="sl-flex">
{shouldRenderSearch && <Search {...Astro.props} />}
</div>
<div class="sl-hidden md:sl-flex right-group">
<div class="sl-flex social-icons">
<SocialIcons {...Astro.props} />
</div>
<ThemeSelect {...Astro.props} />
<VersionSelect {...Astro.props} />
<LanguageSelect {...Astro.props} />
</div>
</div>
<style>
.header {
gap: var(--sl-nav-gap);
justify-content: space-between;
align-items: center;
height: 100%;
}
.title-wrapper {
/* Prevent long titles overflowing and covering the search and menu buttons on narrow viewports. */
overflow: hidden;
}
.right-group,
.social-icons {
gap: 1rem;
align-items: center;
}
.social-icons::after {
content: '';
height: 2rem;
border-inline-end: 1px solid var(--sl-color-gray-5);
}
@media (min-width: 50rem) {
:global(:root[data-has-sidebar]) {
--__sidebar-pad: calc(2 * var(--sl-nav-pad-x));
}
:global(:root:not([data-has-toc])) {
--__toc-width: 0rem;
}
.header {
--__sidebar-width: max(0rem, var(--sl-content-inline-start, 0rem) - var(--sl-nav-pad-x));
--__main-column-fr: calc(
(
100% + var(--__sidebar-pad, 0rem) - var(--__toc-width, var(--sl-sidebar-width)) -
(2 * var(--__toc-width, var(--sl-nav-pad-x))) - var(--sl-content-inline-start, 0rem) -
var(--sl-content-width)
) / 2
);
display: grid;
grid-template-columns:
/* 1 (site title): runs up until the main content columns left edge or the width of the title, whichever is the largest */
minmax(
calc(var(--__sidebar-width) + max(0rem, var(--__main-column-fr) - var(--sl-nav-gap))),
auto
)
/* 2 (search box): all free space that is available. */
1fr
/* 3 (right items): use the space that these need. */
auto;
align-content: center;
}
}
</style>

View File

@ -1,35 +0,0 @@
---
import LanguageSelect from '@astrojs/starlight/components/LanguageSelect.astro';
import SocialIcons from '@astrojs/starlight/components/SocialIcons.astro';
import ThemeSelect from '@astrojs/starlight/components/ThemeSelect.astro';
import type { Props } from '@astrojs/starlight/props';
import VersionSelect from './DocsVersionSelect.astro';
---
<div class="mobile-preferences sl-flex">
<div class="sl-flex social-icons">
<SocialIcons {...Astro.props} />
</div>
<ThemeSelect {...Astro.props} />
<VersionSelect {...Astro.props} />
<LanguageSelect {...Astro.props} />
</div>
<style>
.social-icons {
margin-inline-end: auto;
gap: 1rem;
align-items: center;
padding-block: 1rem;
}
.social-icons:empty {
display: none;
}
.mobile-preferences {
justify-content: space-between;
flex-wrap: wrap;
border-top: 1px solid var(--sl-color-gray-6);
column-gap: 1rem;
padding: 0.5rem 0;
}
</style>

View File

@ -0,0 +1,8 @@
---
import Default from '@astrojs/starlight/components/ThemeSelect.astro';
import VersionSelect from './DocsVersionSelect.astro';
---
<Default><slot /></Default>
<VersionSelect />

View File

@ -1,8 +1,7 @@
import { defineCollection } from "astro:content";
import { docsLoader, i18nLoader } from "@astrojs/starlight/loaders";
import { docsSchema, i18nSchema } from "@astrojs/starlight/schema";
import { docsLoader } from "@astrojs/starlight/loaders";
import { docsSchema } from "@astrojs/starlight/schema";
export const collections = {
docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
i18n: defineCollection({ loader: i18nLoader(), schema: i18nSchema() }),
};

View File

@ -2,7 +2,7 @@
title: How to install Castopod?
---
import { Aside } from "@astrojs/starlight/components";
import { Aside, LinkButton } from "@astrojs/starlight/components";
Castopod was thought-out to be easy to install. Whether using dedicated or
shared hosting, you can install it on most PHP-MySQL compatible web servers.
@ -205,8 +205,6 @@ of the packages created and maintained by the open-source community.
made up of free and open-source software packages. It manages the hardships of
self-hosting for you.
<div class="flex flex-wrap items-center gap-4">
<a
href="https://install-app.yunohost.org/?app=castopod"
target="_blank"
@ -215,27 +213,14 @@ self-hosting for you.
<img
src="https://install-app.yunohost.org/install-with-yunohost.svg"
alt="Install Castopod with YunoHost"
class="align-middle"
/>
</a>
<a
<LinkButton
href="https://github.com/YunoHost-Apps/castopod_ynh"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"
variant="secondary"
icon="github"
iconPlacement="start"
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width="1em"
height="1em"
class="text-xl"
>
<path fill="none" d="M0 0h24v24H0z" />
<path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z" />
</svg>
Github Repo
</a>
</div>
</LinkButton>

View File

@ -27,34 +27,35 @@ project generated for you!
### Manual setup
<Steps>
1. create a plugin folder inside a vendor directory
<FileTree>
- plugins
- acme
- **hello-world/**
- …
1. create a plugin folder inside a vendor directory
</FileTree>
<FileTree>
- plugins
- acme // vendor name
- **hello-world/** // plugin name
- …
2. add a manifest.json file
</FileTree>
<FileTree>
- hello-world
- **manifest.json**
2. add a manifest.json file
</FileTree>
<FileTree>
- hello-world
- **manifest.json**
See the [manifest reference](./manifest).
</FileTree>
3. add the Plugin.php class
See the [manifest reference](./manifest).
<FileTree>
- hello-world
- manifest.json
- **Plugin.php**
3. add the Plugin.php class
</FileTree>
<FileTree>
- hello-world
- manifest.json
- **Plugin.php**
</FileTree>
</Steps>

4
docs/src/env.d.ts vendored
View File

@ -1,4 +0,0 @@
/* eslint-disable @typescript-eslint/triple-slash-reference */
/// <reference path="../.astro/types.d.ts" />
/// <reference types="astro/client" />
/// <reference path="../node_modules/@astrojs/starlight/virtual.d.ts"/>

View File

@ -0,0 +1,44 @@
/* Dark mode colors. */
:root {
--sl-font: "Inter", sans-serif;
--sl-color-accent-low: #002b26;
--sl-color-accent: #007b6f;
--sl-color-accent-high: #81dcce;
--sl-color-white: #fff;
--sl-color-gray-1: #e8efee;
--sl-color-gray-2: #bbc4c2;
--sl-color-gray-3: #7f908c;
--sl-color-gray-4: #4c5c59;
--sl-color-gray-5: #2d3c39;
--sl-color-gray-6: #1c2a28;
--sl-color-black: #131a19;
}
/* Light mode colors. */
:root[data-theme="light"] {
--sl-color-accent-low: #a5e6db;
--sl-color-accent: #007368;
--sl-color-accent-high: #003b35;
--sl-color-white: #131a19;
--sl-color-gray-1: #1c2a28;
--sl-color-gray-2: #2d3c39;
--sl-color-gray-3: #4c5c59;
--sl-color-gray-4: #7f908c;
--sl-color-gray-5: #bbc4c2;
--sl-color-gray-6: #e8efee;
--sl-color-gray-7: #f3f7f6;
--sl-color-black: #fff;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: Rubik, sans-serif;
}
:is(code, kbd, samp) {
font-family: monospace;
}

View File

@ -1,14 +0,0 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
main {
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: Rubik, sans-serif;
}
}

View File

@ -1,31 +0,0 @@
import starlightPlugin from "@astrojs/starlight-tailwind";
import colors from "tailwindcss/colors";
import defaultTheme from "tailwindcss/defaultTheme";
/** @type {import('tailwindcss').Config} */
export default {
content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}"],
theme: {
extend: {
colors: {
accent: {
50: "#F2FAF9",
100: "#E7F9E4",
200: "#bfe4e1",
300: "#99d4cf",
400: "#4db4aa",
500: "#009486",
600: "#008579",
700: "#006D60",
800: "#00564A",
900: "#003D0B",
},
gray: colors.stone,
},
fontFamily: {
sans: ["Inter", ...defaultTheme.fontFamily.sans],
},
},
},
plugins: [starlightPlugin()],
};

View File

@ -1,3 +1,5 @@
{
"extends": "astro/tsconfigs/strict"
"extends": "astro/tsconfigs/strict",
"include": [".astro/types.d.ts", "**/*"],
"exclude": ["dist"]
}