Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ on:
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
runs-on: ${{ vars.RUNNER_LINUX_X64_4 || 'ubuntu-latest' }}
permissions:
actions: read
contents: read
Expand All @@ -24,7 +24,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v7

- name: Initialize CodeQL
uses: github/codeql-action/init@v2
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/k8s-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ permissions:
packages: write
jobs:
build:
runs-on: ${{ vars.RUNNER_LINUX_X64_8 || vars.RUNNER_LINUX_X64_4 || 'ubuntu-latest' }}
runs-on: ${{ vars.RUNNER_LINUX_X64_4 || 'ubuntu-latest' }}
strategy:
fail-fast: false
matrix:
Expand All @@ -20,9 +20,9 @@ jobs:
dockerfile: website/Dockerfile.everk8s
context: website
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
- uses: actions/checkout@v7
- uses: docker/setup-buildx-action@v4
- uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.actor }}
Expand All @@ -35,7 +35,7 @@ jobs:
main|master) echo "tag=prod" >> "$GITHUB_OUTPUT" ;;
*) echo "tag=${GITHUB_REF_NAME//\//-}" >> "$GITHUB_OUTPUT" ;;
esac
- uses: docker/build-push-action@v6
- uses: docker/build-push-action@v7
with:
context: ${{ matrix.context }}
file: ${{ matrix.dockerfile }}
Expand Down
3 changes: 3 additions & 0 deletions website/Dockerfile.everk8s
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,7 @@ FROM nginx:alpine
# so the stock nginx config serves it correctly — no SPA fallback needed.
COPY --from=build /app/build /usr/share/nginx/html

# Serve directory redirects RELATIVE, not absolute. See nginx-default.conf for why.
COPY nginx-default.conf /etc/nginx/conf.d/default.conf

EXPOSE 80
29 changes: 14 additions & 15 deletions website/docusaurus.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,24 +49,23 @@ const config: Config = {
// Even if you don't use internationalization, you can use this field to set
// useful metadata like html lang. For example, if your site is Chinese, you
// may want to replace "en" with "zh-Hans".
// Locales advertised to visitors.
//
// Docusaurus renders a language dropdown for EVERY locale listed here, but the Docker build runs
// yarn run v1.22.22
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. and so only emits English. The other twelve were linked from every page

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Locale guidance breaks configuration parsing

This pasted Yarn message is not prefixed with //, so TypeScript and Docusaurus parse it as configuration syntax rather than a comment. Both yarn typecheck and NODE_ENV=production yarn build --locale en fail while loading this file, preventing the English documentation site from being built. Remove or comment out the pasted output; the adjacent re-enablement note should also restore the omitted locale build flag.

Artifacts

TypeScript check failing on the locale configuration

  • Ran `yarn typecheck` with the reported config lines captured first; TypeScript reports parse errors beginning at line 56, confirming the configuration is invalid.

Production Docusaurus locale build failing while loading the configuration

  • Ran `NODE_ENV=production yarn build --locale en` with the same config lines captured first; Docusaurus rejects line 56 with a parse error, confirming the requested runtime build path is blocked.

View artifacts

T-Rex Ran code and verified through T-Rex

// and all returned 404 -- 144 dead URLs, found by a crawl of docs.ever.co on 2026-08-30.
//
// Translation sources for all thirteen exist under docs/i18n, so nothing is lost here. To turn one
// back on it must be BOTH listed below AND built: drop the flag in
// Dockerfile.everk8s (which builds every declared locale) or pass that locale explicitly. Adding a
// locale here alone just recreates the 404s.
i18n: {
path: "./docs/i18n/",
defaultLocale: "en",
locales: [
"en",
"fr",
"ar",
"bg",
"zh",
"nl",
"de",
"he",
"it",
"pl",
"pt",
"ru",
"es",
],
locales: ["en"],
// Ready to re-enable once they are built:
// "fr", "ar", "bg", "zh", "nl", "de", "he", "it", "pl", "pt", "ru", "es"
},

presets: [
Expand Down
31 changes: 31 additions & 0 deletions website/nginx-default.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Static server for the built Docusaurus site.
#
# This is the stock nginx:alpine default.conf plus one line: absolute_redirect off.
#
# nginx defaults to absolute_redirect on, so when it issues the trailing-slash redirect for a
# directory it rebuilds a full URL from the Host header and its own listen port. It has no idea TLS
# was terminated upstream by Cloudflare, so it answers with http://. That turned every directory URL
# on docs.ever.co into a three-hop chain with a protocol downgrade in the middle:
#
# https://docs.ever.co/help -> 301 http://docs.ever.co/help/ (nginx, downgraded)
# http://docs.ever.co/help/ -> 301 https://docs.ever.co/help/ (Cloudflare, back up)
#
# Search engines treat redirect chains as a ranking negative and the http hop is a real downgrade.
# With absolute_redirect off nginx emits a relative `Location: /help/`, and the client keeps
# whatever scheme it arrived on -- one hop, no downgrade, no dependence on knowing the public scheme.
server {
listen 80;
server_name localhost;

absolute_redirect off;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
Loading