Fix CI pipelines: bump all GitHub Actions to latest + rename smov-docs to mov-docs + validate Astro site end-to-end#3
Conversation
|
- Replace Next.js with Astro 5.x and @astrojs/starlight - Migrate all MDX content pages to Starlight format - Note/Warning/Caution → Starlight admonitions (:::note/:::caution/:::danger) - Steps.Step → Starlight <Steps> with numbered lists - Button/Frame components removed, replaced with plain markdown - Add unplugin-icons for iconify icon support - Use Inter font via Google Fonts CSS import in custom.css - Add static output for GitHub Pages deployment (okikio.github.io/smov-docs) - Add Docker/nginx setup for containerized deployment - Update GitHub Actions workflows for Astro build - Updated github_pages.yml and linting.yml - Added docker.yml and docker-oci.yml - Add ESLint 9 flat config (eslint.config.js) - Update tsconfig.json to extend astro/tsconfigs/strict - Delete old Next.js files (next.config.mjs, next-env.d.ts, theme.config.tsx, components/) - Add .gitignore, .dockerignore, Dockerfile, nginx.conf, docker-compose.yml Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… and fixed GitHub Actions Co-authored-by: okikio <17222836+okikio@users.noreply.github.com>
|
@copilot fix broken gh actions, use the latest gh actions search online |
Co-authored-by: okikio <17222836+okikio@users.noreply.github.com>
Updated all GitHub Actions to the latest versions in commit
Also added Warning Firewall rules blocked me from connecting to one or more addresses (expand for details)I tried to connect to the following addresses, but was blocked by firewall rules:
If you need me to access, download, or install something from one of these locations, you can either:
|
There was a problem hiding this comment.
Pull request overview
This PR migrates the smov-docs documentation site from Next.js + @neato/guider to Astro v5 + Starlight, and adds containerization plus CI workflows for GitHub Pages and multi-arch GHCR publishing.
Changes:
- Replace the Next.js/Guider docs app with an Astro + Starlight site (new docs content tree, Starlight config, styling, and head override for fonts).
- Add Docker/Nginx packaging for static hosting and docker-compose for local runs.
- Update GitHub Actions workflows for lint/build, GitHub Pages deployment, and Docker/OCI image publishing.
Reviewed changes
Copilot reviewed 68 out of 75 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| tsconfig.json | Switch TS config to Astro strict preset and add path alias. |
| theme.config.tsx | Remove Guider theme configuration (Next.js era). |
| src/styles/custom.css | Add Starlight theme CSS variables + font var. |
| src/pages/links/discord.astro | Add static redirect page for Discord link. |
| src/content/docs/support.mdx | Add/migrate Support page to Starlight MDX. |
| src/content/docs/self-hosting/use-backend.mdx | Add/migrate “Configure backend” page with Starlight <Steps>. |
| src/content/docs/self-hosting/troubleshooting.mdx | Update frontmatter + convert links/admonitions for Starlight. |
| src/content/docs/self-hosting/hosting-intro.mdx | Update frontmatter + convert note/admonitions and links. |
| src/content/docs/self-hosting/about-pwa.mdx | Update frontmatter + convert warning to Starlight admonitions and links. |
| src/content/docs/proxy/introduction.mdx | Update frontmatter + convert warning to admonition. |
| src/content/docs/proxy/deploy.mdx | Add/migrate proxy deployment guide content. |
| src/content/docs/proxy/configuration.mdx | Update frontmatter + convert warning to admonition and update links. |
| src/content/docs/instances.mdx | Add/migrate Instances page to Starlight MDX. |
| src/content/docs/index.mdx | Add Starlight splash landing page content and cards. |
| src/content/docs/extra/streaming.mdx | Add/migrate streaming guide and internal links. |
| src/content/docs/extra/selfhost.mdx | Add/migrate self-hosting Docker Compose guide. |
| src/content/docs/extension.mdx | Update extension page for Starlight (admonitions, steps). |
| src/content/docs/client/upgrade.mdx | Update upgrade guide with Starlight steps + workflow snippet. |
| src/content/docs/client/tmdb.mdx | Add TMDB API key guide. |
| src/content/docs/client/introduction.mdx | Update client intro page for Starlight and new links. |
| src/content/docs/client/deploy.mdx | Add client deployment guide. |
| src/content/docs/client/configuration.mdx | Update configuration reference for Starlight admonitions + links. |
| src/content/docs/backend/upgrade.mdx | Add backend upgrade placeholder page. |
| src/content/docs/backend/introduction.mdx | Update backend intro page for Starlight admonitions. |
| src/content/docs/backend/deploy.mdx | Add backend deployment guide. |
| src/content/docs/backend/configuration.mdx | Update backend configuration reference for Starlight admonitions + fixes. |
| src/content.config.ts | Add Astro content collections using Starlight loader/schema. |
| src/components/Head.astro | Override Starlight head to preload font via Astro experimental fonts. |
| src/assets/transparent-logo.png | Add logo asset under src/assets. |
| src/assets/icon-light.png | Add icon asset under src/assets. |
| pages/support.mdx | Remove old Next/Guider Support page. |
| pages/self-hosting/use-backend.mdx | Remove old Next/Guider self-hosting backend page. |
| pages/self-hosting/index.tsx | Remove old Next/Guider redirect route. |
| pages/proxy/index.tsx | Remove old Next/Guider redirect route. |
| pages/proxy/deploy.mdx | Remove old Next/Guider proxy deploy doc. |
| pages/proxy/changelog.mdx | Remove old Next/Guider proxy changelog doc. |
| pages/links/weblate.tsx | Remove old React redirect page. |
| pages/links/discord.tsx | Remove old React redirect page. |
| pages/instances.mdx | Remove old Next/Guider Instances page. |
| pages/index.tsx | Remove old Next/Guider landing page. |
| pages/extra/streaming.mdx | Remove old Next/Guider streaming doc. |
| pages/extra/selfhost.mdx | Remove old Next/Guider selfhost doc. |
| pages/extra/index.tsx | Remove old Next/Guider redirect route. |
| pages/client/tmdb.mdx | Remove old Next/Guider TMDB doc. |
| pages/client/index.tsx | Remove old Next/Guider redirect route. |
| pages/client/deploy.mdx | Remove old Next/Guider client deploy doc. |
| pages/client/changelog.mdx | Remove old Next/Guider client changelog doc. |
| pages/backend/upgrade.mdx | Remove old Next/Guider backend upgrade doc. |
| pages/backend/index.tsx | Remove old Next/Guider redirect route. |
| pages/backend/deploy.mdx | Remove old Next/Guider backend deploy doc. |
| pages/backend/.changelog.mdx | Remove old Next/Guider backend changelog doc. |
| pages/_app.tsx | Remove Next/Guider app bootstrap. |
| pages/404.tsx | Remove Next/Guider not-found page. |
| package.json | Switch dependencies/scripts from Next.js to Astro/Starlight + ESLint 9. |
| nginx.conf | Add Nginx config for static serving + gzip + long-term caching. |
| next.config.mjs | Remove Next.js configuration. |
| next-env.d.ts | Remove Next.js TS env typings. |
| eslint.config.js | Add ESLint 9 flat config. |
| docker-compose.yml | Add compose service for running/pulling the GHCR image. |
| components/Logo.tsx | Remove old Next/Guider Logo component. |
| components/Logo.module.css | Remove old Logo styles. |
| astro.config.mjs | Add Astro/Starlight site config, sidebar, icons, and experimental fonts. |
| README.md | Rewrite README for Astro/Starlight + Docker usage + env vars. |
| Dockerfile | Add multi-stage build (node build -> nginx serve). |
| .gitignore | Update ignores for Astro output + env files. |
| .github/workflows/linting.yml | Fix checkout version, standardize Node/pnpm install, add build check. |
| .github/workflows/github_pages.yml | Update GitHub Pages workflow to build Astro output and deploy. |
| .github/workflows/docker.yml | Add multi-arch Docker build/push to GHCR with SBOM/provenance attestation. |
| .github/workflows/docker-oci.yml | Add OCI mediatypes image publishing workflow. |
| .eslintrc.cjs | Remove legacy Next.js ESLint config. |
| .eslintignore | Remove legacy ESLint ignore file (flat config uses ignores). |
| .env.example | Add example env overrides for SITE_URL/BASE_PATH. |
| .dockerignore | Add dockerignore tuned for Astro build context. |
Comments suppressed due to low confidence (3)
src/content/docs/client/upgrade.mdx:10
- Grammar: "Below is a automatic and a manual guide" should use "an" before words that start with a vowel sound ("an automatic ...").
src/content/docs/client/upgrade.mdx:48 - The workflow snippet still uses
actions/checkout@v5, butv5does not exist (and this PR updates the repo workflows to@v4). Update the documentation snippet toactions/checkout@v4so readers don't copy a broken workflow.
src/content/docs/self-hosting/troubleshooting.mdx:21 - Internal cross-links are hard-coded with the
/smov-docsprefix (e.g./smov-docs/proxy/deploy,/smov-docs/client/configuration#...). This conflicts with the newBASE_PATHconfigurability and will cause broken links if the docs are deployed under a different base path. Prefer base-agnostic internal links (e.g. relative links) so navigation works in all deployments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| description: Get support for P-Stream in our Discord server. | ||
| --- | ||
|
|
||
| We provide support to users and hosters in our discord server. Though we have some rules about the questions you can ask. |
There was a problem hiding this comment.
Proper noun capitalization: "discord" should be "Discord".
| environment: | ||
| - NODE_ENV=production |
There was a problem hiding this comment.
environment: here only sets runtime env vars for the NGINX container, but SITE_URL/BASE_PATH are read during astro build (build-time) and won't be affected for a prebuilt image (and NODE_ENV isn't used by NGINX). If you want Compose users to override BASE_PATH/SITE_URL for the image they build locally, consider wiring them through build.args (and using ARG/ENV in the Dockerfile during the build stage). Otherwise, consider removing the unused NODE_ENV env var to avoid confusion.
| environment: | |
| - NODE_ENV=production |
| 5. Copy the URL of the proxy you deployed before, and paste it into the empty text box. | ||
|  | ||
| </Steps> |
There was a problem hiding this comment.
The image URL is root-relative (/assets/proxy-url-example.gif). With the site configured to build under a base path (default /smov-docs), this will resolve to the domain root (/assets/...) and likely 404 on GitHub Pages. Make the asset URL base-aware (e.g. a relative path or one that accounts for the configured base).
There was a problem hiding this comment.
rename the path to /mov-docs rather than smov-docs
There was a problem hiding this comment.
Done in 4820123. Renamed the base path from /smov-docs to /mov-docs throughout. Also fixed the root-relative image — moved public/assets/proxy-url-example.gif into src/assets/ and updated the reference to a relative path (../../../assets/proxy-url-example.gif) so Astro processes it with the correct base-aware URL.
| - text: Get Started | ||
| link: /smov-docs/self-hosting/hosting-intro/ | ||
| icon: right-arrow |
There was a problem hiding this comment.
The splash page action link is hard-coded to /smov-docs/self-hosting/hosting-intro/. This will break if BASE_PATH is overridden to something other than /smov-docs. Use a base-agnostic internal link so the button continues to work under different base paths.
| WORKDIR /app | ||
|
|
||
| # Install pnpm | ||
| RUN corepack enable && corepack prepare pnpm@latest --activate |
There was a problem hiding this comment.
The image installs pnpm@latest, which makes builds non-reproducible (a new pnpm release can change lockfile behavior and break builds unexpectedly). Prefer pinning pnpm to a known version (e.g. via packageManager in package.json and/or corepack prepare pnpm@<version>) so Docker builds are deterministic.
| RUN corepack enable && corepack prepare pnpm@latest --activate | |
| RUN corepack enable && corepack prepare pnpm@9.12.3 --activate |
There was a problem hiding this comment.
pnpm latest version is 10 though...
There was a problem hiding this comment.
Fixed in 4820123 — updated to corepack prepare pnpm@10.31.0 --activate to match the packageManager field in package.json.
| <Steps> | ||
| 1. Clone the repo on your server: | ||
| `git clone https://github.com/p-stream/simple-proxy` | ||
|
|
||
| 2. Locate the `Dockerfile` in the root folder. | ||
|
|
||
| 3. Build the Docker image: | ||
| `docker build -t p-stream-proxy ./simple-proxy` | ||
|
|
There was a problem hiding this comment.
In Method 1 (Docker), the steps never cd simple-proxy, but later steps assume paths relative to that directory (e.g. creating .env in simple-proxy) while the build command uses ./simple-proxy (implying you're still in the parent directory). This is ambiguous and can lead to users running commands in the wrong directory. Add an explicit cd simple-proxy step (and then build with docker build -t ... .), or consistently keep all commands relative to the parent directory.
There was a problem hiding this comment.
i have a forked version of the repo i want ppl to use, namely okikio/mov-proxy
There was a problem hiding this comment.
Updated in 4820123 — all references in proxy/deploy.mdx now point to okikio/mov-proxy (clone URLs, Docker build commands, Cloudflare/Netlify/Railway deploy buttons).
| favicon: '/favicon.ico', | ||
| social: [ | ||
| { icon: 'github', label: 'GitHub', href: 'https://github.com/p-stream/p-stream' }, | ||
| { icon: 'discord', label: 'Discord', href: '/links/discord' }, | ||
| ], |
There was a problem hiding this comment.
base is configurable via BASE_PATH, but the Starlight favicon: '/favicon.ico' and social link href: '/links/discord' are hard-coded root-relative URLs. If the site is deployed under a subpath (e.g. /smov-docs or a custom BASE_PATH), these links can point to the wrong location. Consider using base-aware URLs (e.g. relative paths, or constructing the href from the base value) so they keep working when BASE_PATH changes.
| run: pnpm install | ||
| run: pnpm install --frozen-lockfile | ||
|
|
||
| - name: Build |
There was a problem hiding this comment.
actions/configure-pages@v5 is set up (id pages) but its outputs are never used. With site/base being environment-configurable, the build step should either (a) export SITE_URL/BASE_PATH based on the Pages configuration outputs, or (b) drop the unused configure step. As-is, the workflow will always build with the hard-coded defaults from astro.config.mjs, which can break Pages deployments if the repo/site path differs.
| - name: Build | |
| - name: Build | |
| env: | |
| SITE_URL: ${{ steps.pages.outputs.origin }} | |
| BASE_PATH: ${{ steps.pages.outputs.base_path }} |
| 1. Don't ask to be put on the [instances list](/smov-docs/instances) | ||
| 2. No asking developers to help you code | ||
| 3. No duplicate tickets | ||
|
|
||
| [Join the Discord](/smov-docs/links/discord) |
There was a problem hiding this comment.
These internal links hard-code the /smov-docs prefix (e.g. /smov-docs/instances, /smov-docs/links/discord). Since the PR introduces BASE_PATH to make the docs deployable under different subpaths, hard-coding the default base path here defeats that and will break navigation when BASE_PATH is changed. Prefer base-agnostic internal links (e.g. relative links) so they work regardless of the configured base path.
There was a problem hiding this comment.
remember no longer smov but now mov
|
@copilot apply changes based on the comments in this thread |
… build args Co-authored-by: okikio <17222836+okikio@users.noreply.github.com>
All review comments applied in
All 22 pages verified at Warning Firewall rules blocked me from connecting to one or more addresses (expand for details)I tried to connect to the following addresses, but was blocked by firewall rules:
If you need me to access, download, or install something from one of these locations, you can either:
|


CI was broken due to stale action versions. All actions updated to latest major releases (March 2026), Node bumped to 24, and the Astro v5 + Starlight site validated end-to-end with a live preview server.
GitHub Actions versions
actions/checkout@v4@v6actions/setup-node@v4@v6+ Node 22→24actions/upload-pages-artifact@v3@v4actions/attest-build-provenance@v2@v4docker/setup-buildx-action@v3@v4docker/login-action@v3@v4docker/metadata-action@v5@v6docker/build-push-action@v6@v7package.json
"packageManager": "pnpm@10.31.0"sopnpm/action-setup@v4pins the exact pnpm version in CI rather than resolving it at runtime.Renames and content fixes
/smov-docs→/mov-docsthroughout (astro.config.mjs, all 15 MDX content files,docker-compose.yml,README.md)proxy/deploy.mdxnow referencesokikio/mov-proxyinstead ofp-stream/simple-proxyfor all clone URLs, Docker commands, and deploy buttonspublic/assets/proxy-url-example.gif→src/assets/and updatedstreaming.mdxto use a relative path so Astro processes it with the correct base-aware URL (no more 404 on GitHub Pages)astro.config.mjsfavicon and Discord social href now use${base}/...so they resolve correctly under any base pathsupport.mdxDocker / CI improvements
pnpm@latest→pnpm@10.31.0(matchespackageManagerfield) for reproducible builds; addedARG/ENVforSITE_URL/BASE_PATHin the build stageNODE_ENV=production; addedbuild.argsto wireSITE_URL/BASE_PATHthrough to the Astro buildSITE_URL: ${{ steps.pages.outputs.origin }}andBASE_PATH: ${{ steps.pages.outputs.base_path }}so Pages deployments use the correct site URL and base path automaticallySite validation
All 22 doc pages return HTTP 200 against
astro previewat the production base path/mov-docs. Verified live:/mov-docs/prefix)<Steps>,:::note/:::cautioncallouts, syntax-highlighted code blocks + copy buttonfavicon.ico+sitemap-index.xml/mov-docs/)🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.