Skip to content
Open
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.

The legacy Jekyll cleanup on gh-pages is being deferred to post-merge so the Hugo workflow lands its new content before we remove the old files — see the cleanup checklist comment on Linear STF-448. The same comment covers all 7 Flavor A repos.

(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 GeoIP2 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\.geoip2\:geoip2\:)\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
13 changes: 13 additions & 0 deletions docs/hugo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
title = "GeoIP2 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.

medium

The baseURL property is missing. For GitHub Pages project sites (e.g., https://maxmind.github.io/GeoIP2-java/), Hugo needs this to correctly resolve relative and absolute URLs. Without it, links generated by relURL or RelPermalink may point to the domain root instead of the project subdirectory.

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

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

[[cascade]]
layout = "default"

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

[[module.mounts]]
source = "../README.md"
target = "content/_index.md"
Comment on lines +11 to +13
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

Hugo's default security policy restricts module.mounts to the project root. Since the Hugo source is set to the docs/ directory (via mise.toml), mounting ../README.md will likely fail with a security error. You need to explicitly allow mounting from the parent directory in the security configuration.

Suggested change
[[module.mounts]]
source = "../README.md"
target = "content/_index.md"
[security.module]
mounts = { allow = ['\.\.'] }
[[module.mounts]]
source = "../README.md"
target = "content/_index.md"

58 changes: 58 additions & 0 deletions docs/layouts/404.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<!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>
<style>
:root {
--fg: #2d2d2d;
--bg: #faf9f7;
--accent: #1a6b50;
--heading: #1a1a1a;
}

*,
*::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 {
font-family: system-ui, -apple-system, "Segoe UI", Helvetica, Arial,
sans-serif;
font-size: 1.75rem;
font-weight: 800;
line-height: 1.35;
color: var(--heading);
margin: 0 0 1.5rem;
padding-bottom: 0.75rem;
border-bottom: 3px solid var(--accent);
}

a {
color: var(--accent);
}
</style>
</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>
</h{{ .Level }}>
214 changes: 214 additions & 0 deletions docs/layouts/_default/default.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
{{- $title := .Title -}}
{{- if not $title }}{{ with .File }}{{ $title = .BaseFileName }}{{ end }}{{- end -}}
<title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ with $title }}{{ . }} | {{ end }}{{ .Site.Title }}{{ end }}</title>
<style>
: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);
}
</style>
</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>
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 link to the Javadoc uses a relative path without a leading slash. This can be fragile depending on whether the current URL ends with a trailing slash or if the user is on a subpage. It is safer to use a root-relative path (starting with /) in conjunction with relURL and a defined baseURL.

Suggested change
<a href="{{ "doc/latest/" | relURL }}">API documentation</a>
<a href="{{ "/doc/latest/" | relURL }}">API documentation</a>

</nav>
<main>
{{ .Content }}
</main>
</body>
</html>
Loading
Loading