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
42 changes: 42 additions & 0 deletions .github/workflows/pages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Deploy to GitHub Pages

on:
push:
branches: ["main"]
workflow_dispatch:

permissions: {}

concurrency:
group: pages
cancel-in-progress: true

jobs:
build-and-deploy:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false

- name: Setup mise
uses: jdx/mise-action@6d1e696aa24c1aa1bcc1adea0212707c71ab78a8 # v3.6.1
with:
cache: true

- name: Build docs
env:
HUGO_BASEURL: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/
run: mise run build-docs

- name: Push rendered site to gh-pages
uses: peaceiris/actions-gh-pages@84c30a85c19949d7eee79c4ff27748b70285e453 # v4.1.0
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs/public
publish_branch: gh-pages
keep_files: true
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Same comment as on the minfraud-api-java PR.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Same as on the GeoIP2-java PR: deferred to post-merge, captured on the Linear STF-448 cleanup checklist (one-time direct push to gh-pages after Hugo populates the new content).

(Claude, responding on behalf of @oschwald.)

user_name: "github-actions[bot]"
user_email: "41898282+github-actions[bot]@users.noreply.github.com"
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
.claude
.gh-pages
.idea
docs/.hugo_build.lock
docs/public/
.pmd
.project
.settings
Expand Down
13 changes: 0 additions & 13 deletions dev-bin/release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -118,17 +118,6 @@ if [ "$should_continue" != "y" ]; then
exit 1
fi

page=.gh-pages/index.md
cat <<EOF >$page
---
layout: default
title: MaxMind DB Java API
language: java
version: $tag
---

EOF

mvn versions:set -DnewVersion="$version"

perl -pi -e "s/(?<=<version>)[^<]*/$version/" README.md
Expand All @@ -137,8 +126,6 @@ perl -pi -e "s/(?<=com\.maxmind\.db\:maxmind-db\:)\d+\.\d+\.\d+([\w\-]+)?/$versi
# Update japicmp.baselineVersion for API compatibility checking
perl -pi -e "s/(<japicmp\.baselineVersion>)[^<]*(<\/japicmp\.baselineVersion>)/\${1}$version\${2}/" pom.xml

cat README.md >>$page

git diff

read -r -n 1 -p "Commit changes? " should_commit
Expand Down
189 changes: 189 additions & 0 deletions docs/assets/css/main.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
:root {
--fg: #2d2d2d;
--bg: #faf9f7;
--accent: #1a6b50;
--accent-soft: rgba(26, 107, 80, 0.06);
--border: #d5d0c8;
--code-bg: #f0eeea;
--heading: #1a1a1a;
--muted: #70695f;
}

::selection {
background: rgba(26, 107, 80, 0.15);
}

*,
*::before,
*::after {
box-sizing: border-box;
}

body {
font-family: Charter, "Bitstream Charter", "Sitka Text", Cambria, serif;
font-size: 1.05rem;
line-height: 1.78;
color: var(--fg);
background: var(--bg);
max-width: 50rem;
margin: 0 auto;
padding: 3rem 1.5rem 5rem;
}

h1,
h2,
h3,
h4 {
font-family: system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;
line-height: 1.35;
}

h1 {
font-size: 1.75rem;
font-weight: 800;
color: var(--heading);
margin: 0 0 1.5rem;
padding-bottom: 0.75rem;
border-bottom: 3px solid var(--accent);
}

h2 {
font-size: 1.3rem;
font-weight: 700;
color: var(--heading);
margin: 3rem 0 0.75rem;
padding-bottom: 0.4rem;
border-bottom: 1px solid var(--border);
}

h3 {
font-size: 1.05rem;
font-weight: 700;
color: var(--accent);
margin: 2.5rem 0 0.5rem;
padding: 0.4rem 0.75rem;
border-left: 3px solid var(--accent);
background: linear-gradient(135deg, var(--accent-soft), transparent 80%);
border-radius: 0 3px 3px 0;
}

h4 {
font-size: 0.92rem;
font-weight: 700;
color: var(--muted);
margin: 2rem 0 0.5rem;
padding-bottom: 0.2rem;
border-bottom: 1px dashed var(--border);
}

p {
margin: 0.8rem 0;
}

a {
color: var(--accent);
text-decoration-thickness: 1px;
text-underline-offset: 2px;
transition: text-decoration-thickness 0.15s;
}

a:hover {
text-decoration-thickness: 2px;
}

strong {
color: var(--heading);
font-weight: 700;
}

ol,
ul {
padding-left: 1.75rem;
}

li + li {
margin-top: 0.3rem;
}

code {
font-family: "JetBrains Mono", "Cascadia Code", Menlo, Consolas, monospace;
font-size: 0.88em;
background: var(--code-bg);
padding: 0.15em 0.4em;
border-radius: 3px;
border: 1px solid rgba(0, 0, 0, 0.06);
}

pre {
background: var(--code-bg);
border: 1px solid var(--border);
border-radius: 5px;
padding: 1rem 1.25rem;
overflow-x: auto;
line-height: 1.55;
}

pre code {
background: none;
padding: 0;
border: none;
font-size: 0.85em;
}

img {
max-width: 100%;
height: auto;
}

.heading-anchor {
opacity: 0;
margin-left: 0.3em;
font-weight: 400;
text-decoration: none;
transition: opacity 0.15s;
}

h1:hover .heading-anchor,
h2:hover .heading-anchor,
h3:hover .heading-anchor,
h4:hover .heading-anchor,
.heading-anchor:focus {
opacity: 0.4;
}

.heading-anchor:hover {
opacity: 1;
}

.page-nav {
margin-bottom: 2.5rem;
display: flex;
gap: 0.5rem;
flex-wrap: wrap;
}

.page-nav a {
font-family: system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;
font-size: 0.85rem;
font-weight: 600;
text-decoration: none;
color: var(--muted);
padding: 0.3rem 0.75rem;
border: 1px solid var(--border);
border-radius: 999px;
transition:
color 0.15s,
border-color 0.15s,
background 0.15s;
}

.page-nav a:hover {
color: var(--accent);
border-color: var(--accent);
}

.page-nav a.active {
color: var(--bg);
background: var(--accent);
border-color: var(--accent);
}
13 changes: 13 additions & 0 deletions docs/hugo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
title = "MaxMind DB Java API"
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

high

The baseURL is missing from the Hugo configuration. Since the documentation site is hosted on GitHub Pages at a subpath (/MaxMind-DB-Reader-java/), Hugo requires a baseURL to correctly resolve relative links and asset paths. Without it, the relURL function used in the navigation (line 208 of default.html) and .RelPermalink will generate paths relative to the domain root (e.g., /doc/latest/), which will result in 404 errors on the deployed site. While hugo server handles this correctly during local development, the production build will be broken.

Suggested change
title = "MaxMind DB Java API"
baseURL = "https://maxmind.github.io/MaxMind-DB-Reader-java/"
title = "MaxMind DB Java API"

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

baseURL was deliberately removed from hugo.toml in an earlier round of this PR. It's now passed via the HUGO_BASEURL env var in the workflow's "Build docs" step, which Hugo natively supports as a config override. The deployed link generation is correct.

(Claude, responding on behalf of @oschwald.)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

high

The baseURL is missing from the Hugo configuration. When deploying to GitHub Pages as a project site (which resides in a subdirectory like /MaxMind-DB-Reader-java/), Hugo needs the baseURL to correctly resolve relative URLs and asset paths. Without it, links generated via relURL or RelPermalink will point to the root of the domain (e.g., maxmind.github.io/doc/latest/) instead of the project subdirectory, leading to 404 errors.

Suggested change
title = "MaxMind DB Java API"
baseURL = "https://maxmind.github.io/MaxMind-DB-Reader-java/"
title = "MaxMind DB Java API"

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

baseURL was deliberately removed from hugo.toml in an earlier round of this PR. It's passed via the HUGO_BASEURL env var in the workflow's "Build docs" step (Hugo natively respects this as a config override). The deployed link generation is correct.

(Claude, responding on behalf of @oschwald.)

disableKinds = ["taxonomy", "term", "RSS"]

[[cascade]]
layout = "default"

[markup.highlight]
noClasses = true
style = "github"

[[module.mounts]]
source = "../README.md"
target = "content/_index.md"
24 changes: 24 additions & 0 deletions docs/layouts/404.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Page not found | {{ .Site.Title }}</title>
{{- $css := resources.Get "css/main.css" | fingerprint -}}
<link
rel="stylesheet"
href="{{ $css.RelPermalink }}"
integrity="{{ $css.Data.Integrity }}"
crossorigin="anonymous"
/>
</head>
<body>
<main>
<h1>Page not found</h1>
<p>
The page you're looking for doesn't exist. Return to
<a href="{{ .Site.Home.RelPermalink }}">{{ .Site.Title }}</a>.
</p>
</main>
</body>
</html>
4 changes: 4 additions & 0 deletions docs/layouts/_default/_markup/render-heading.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<h{{ .Level }} id="{{ .Anchor }}">
{{- .Text | safeHTML -}}
<a class="heading-anchor" href="#{{ .Anchor }}" aria-label="Link to {{ .PlainText }}">#</a>
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

The aria-label contains a hardcoded English string ("Link to"). To support internationalization, consider using Hugo's i18n function or a site parameter for this label.

</h{{ .Level }}>
25 changes: 25 additions & 0 deletions docs/layouts/_default/default.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<!doctype html>
<html lang="en">
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

The lang attribute is hardcoded to "en". For better accessibility and to follow Hugo best practices, it is recommended to use the site's configured language code with a fallback.

Suggested change
<html lang="en">
<html lang="{{ .Site.LanguageCode | default 'en' }}">

<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
{{- $title := or .Title .File.BaseFileName -}}
<title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ $title }} | {{ .Site.Title }}{{ end }}</title>
{{- $css := resources.Get "css/main.css" | fingerprint -}}
<link
rel="stylesheet"
href="{{ $css.RelPermalink }}"
integrity="{{ $css.Data.Integrity }}"
crossorigin="anonymous"
/>
</head>
<body>
<nav class="page-nav">
<a href="{{ .Site.Home.RelPermalink }}"{{ if .IsHome }} class="active" aria-current="page"{{ end }}>Overview</a>
<a href="{{ "doc/latest/" | relURL }}">API documentation</a>
</nav>
<main>
{{ .Content }}
</main>
</body>
</html>
32 changes: 32 additions & 0 deletions mise.lock
Original file line number Diff line number Diff line change
@@ -1,5 +1,37 @@
# @generated - this file is auto-generated by `mise lock` https://mise.jdx.dev/dev-tools/mise-lock.html

[[tools.hugo]]
version = "0.161.1"
backend = "aqua:gohugoio/hugo"

[tools.hugo."platforms.linux-arm64"]
checksum = "sha256:382371ec3208236fb854ced51781f859b6c27a7d066b8fe90594eba14ba76d00"
url = "https://github.com/gohugoio/hugo/releases/download/v0.161.1/hugo_0.161.1_linux-arm64.tar.gz"

[tools.hugo."platforms.linux-arm64-musl"]
checksum = "sha256:382371ec3208236fb854ced51781f859b6c27a7d066b8fe90594eba14ba76d00"
url = "https://github.com/gohugoio/hugo/releases/download/v0.161.1/hugo_0.161.1_linux-arm64.tar.gz"

[tools.hugo."platforms.linux-x64"]
checksum = "sha256:fae28bf7909c1a42d1365b89d2e9e3d4194fbe5968ae0dd5504f562381018a1d"
url = "https://github.com/gohugoio/hugo/releases/download/v0.161.1/hugo_0.161.1_linux-amd64.tar.gz"

[tools.hugo."platforms.linux-x64-musl"]
checksum = "sha256:fae28bf7909c1a42d1365b89d2e9e3d4194fbe5968ae0dd5504f562381018a1d"
url = "https://github.com/gohugoio/hugo/releases/download/v0.161.1/hugo_0.161.1_linux-amd64.tar.gz"

[tools.hugo."platforms.macos-arm64"]
checksum = "sha256:b12e1cbebacf61f9cf67e0046c835142e70c829da7c16b05c1ec64a68885ee80"
url = "https://github.com/gohugoio/hugo/releases/download/v0.161.1/hugo_0.161.1_darwin-universal.pkg"

[tools.hugo."platforms.macos-x64"]
checksum = "sha256:b12e1cbebacf61f9cf67e0046c835142e70c829da7c16b05c1ec64a68885ee80"
url = "https://github.com/gohugoio/hugo/releases/download/v0.161.1/hugo_0.161.1_darwin-universal.pkg"

[tools.hugo."platforms.windows-x64"]
checksum = "sha256:7f8d030b37600c60bf2a782611257e6a768934fbe7724c1f3a1a501e6724cf0d"
url = "https://github.com/gohugoio/hugo/releases/download/v0.161.1/hugo_0.161.1_windows-amd64.zip"

[[tools.java]]
version = "26.0.1"
backend = "core:java"
Expand Down
9 changes: 9 additions & 0 deletions mise.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,18 @@ disable_backends = [
]

[tools]
hugo = "latest"
java = "latest"
maven = "latest"

[tasks.build-docs]
description = "Build the docs site with Hugo"
run = "hugo --source docs --minify"
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

It is recommended to add the --cleanDestinationDir flag to the Hugo build command. This ensures that any stale files from previous builds (e.g., if a file was deleted or renamed in the source) are removed from the output directory, preventing them from being accidentally published to the gh-pages branch.

Suggested change
run = "hugo --source docs --minify"
run = "hugo --source docs --minify --cleanDestinationDir"


[tasks.serve-docs]
description = "Serve the docs site locally with Hugo dev server"
run = "hugo server --source docs"

[hooks]
enter = "mise install --quiet --locked"

Expand Down
Loading