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 '' + 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 '' + 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