diff --git a/.github/workflows/javadoc.yml b/.github/workflows/javadoc.yml
index 0465221..3d62f4b 100644
--- a/.github/workflows/javadoc.yml
+++ b/.github/workflows/javadoc.yml
@@ -1,25 +1,20 @@
-name: Build and Publish Javadoc
+name: Build and Publish Versioned Javadoc
on:
push:
- branches: [main]
- paths:
- - '**/*.java'
- - 'build.gradle.kts'
- - '**/build.gradle.kts'
+ tags:
+ - 'v*'
workflow_dispatch:
permissions:
- contents: read
- pages: write
- id-token: write
+ contents: write
concurrency:
- group: "javadoc"
- cancel-in-progress: true
+ group: "javadoc-pages"
+ cancel-in-progress: false
jobs:
- build-javadoc:
+ publish-javadoc:
runs-on: ubuntu-latest
steps:
- name: Checkout
@@ -37,9 +32,75 @@ jobs:
- name: Generate Javadoc
run: ./gradlew aggregateJavadoc
- - name: Upload Javadoc artifact
- uses: actions/upload-artifact@v4
+ - name: Compute version
+ id: vars
+ run: |
+ version="$GITHUB_REF_NAME"
+ version="${version//\//-}"
+ echo "version=$version" >> "$GITHUB_OUTPUT"
+
+ - name: Publish versioned Javadoc
+ uses: peaceiris/actions-gh-pages@v4
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_branch: gh-pages
+ publish_dir: build/docs/javadoc
+ destination_dir: ${{ steps.vars.outputs.version }}
+ keep_files: true
+
+ - name: Checkout gh-pages (for index)
+ uses: actions/checkout@v4
+ continue-on-error: true
+ with:
+ ref: gh-pages
+ path: gh-pages
+ fetch-depth: 1
+
+ - name: Generate index.html
+ env:
+ CURRENT_VERSION: ${{ steps.vars.outputs.version }}
+ run: |
+ mkdir -p site
+
+ versions=""
+ if [ -d gh-pages ]; then
+ versions=$(find gh-pages -maxdepth 1 -mindepth 1 -type d -printf '%f\n' | grep -v '^latest$' | sort -V || true)
+ fi
+
+ if [ -n "${CURRENT_VERSION:-}" ]; then
+ versions=$(printf "%s\n%s\n" "$versions" "$CURRENT_VERSION" | sed '/^$/d' | sort -V | uniq)
+ fi
+
+ {
+ echo ''
+ echo ''
+ echo ''
+ echo ''
+ echo '
Javadoc'
+ echo ''
+ echo 'Javadoc
'
+ echo 'Latest
'
+ echo 'Versions
'
+ echo ''
+
+ if [ -n "$versions" ]; then
+ printf '%s\n' "$versions" | while IFS= read -r v; do
+ [ -z "$v" ] && continue
+ echo " - ${v}
"
+ done
+ else
+ echo ' - No versions published yet.
'
+ fi
+
+ echo '
'
+ echo ''
+ echo ''
+ } > site/index.html
+
+ - name: Publish index.html
+ uses: peaceiris/actions-gh-pages@v4
with:
- name: javadoc
- path: build/docs/javadoc
- retention-days: 7
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_branch: gh-pages
+ publish_dir: site
+ keep_files: true
diff --git a/.github/workflows/latest-javadoc.yml b/.github/workflows/latest-javadoc.yml
new file mode 100644
index 0000000..0c6d1a3
--- /dev/null
+++ b/.github/workflows/latest-javadoc.yml
@@ -0,0 +1,92 @@
+name: Build and Publish Latest Javadoc
+
+on:
+ push:
+ branches: [main]
+ workflow_dispatch:
+
+permissions:
+ contents: write
+
+concurrency:
+ group: "javadoc-latest"
+ cancel-in-progress: true
+
+jobs:
+ publish-latest-javadoc:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Set up JDK 24
+ uses: actions/setup-java@v4
+ with:
+ java-version: '24'
+ distribution: 'temurin'
+
+ - name: Setup Gradle
+ uses: gradle/actions/setup-gradle@v3
+
+ - name: Generate Javadoc
+ run: ./gradlew --no-configuration-cache aggregateJavadoc
+
+ - name: Publish latest Javadoc
+ uses: peaceiris/actions-gh-pages@v4
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_branch: gh-pages
+ publish_dir: build/docs/javadoc
+ destination_dir: latest
+ keep_files: true
+
+ - name: Checkout gh-pages (for index)
+ uses: actions/checkout@v4
+ continue-on-error: true
+ with:
+ ref: gh-pages
+ path: gh-pages
+ fetch-depth: 1
+
+ - name: Generate index.html
+ run: |
+ mkdir -p site
+
+ versions=""
+ if [ -d gh-pages ]; then
+ versions=$(find gh-pages -maxdepth 1 -mindepth 1 -type d -printf '%f\n' | grep -v '^latest$' | sort -V || true)
+ fi
+
+ {
+ echo ''
+ echo ''
+ echo ''
+ echo ''
+ echo 'Javadoc'
+ echo ''
+ echo 'Javadoc
'
+ echo 'Latest
'
+ echo 'Versions
'
+ echo ''
+
+ if [ -n "$versions" ]; then
+ printf '%s\n' "$versions" | while IFS= read -r v; do
+ [ -z "$v" ] && continue
+ echo " - ${v}
"
+ done
+ else
+ echo ' - No versions published yet.
'
+ fi
+
+ echo '
'
+ echo ''
+ echo ''
+ } > site/index.html
+
+ - name: Publish index.html
+ uses: peaceiris/actions-gh-pages@v4
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_branch: gh-pages
+ publish_dir: site
+ keep_files: true