name: Publish Docs on: workflow_dispatch: inputs: version: description: 'Docs version to publish (e.g. 2.1.0)' required: true type: string workflow_call: inputs: version: description: 'Docs version to publish (e.g. 2.1.0)' required: true type: string secrets: MAVEN_USERNAME: required: true MAVEN_PASSWORD: required: true jobs: docs: name: Build JavaDoc & Update gh-pages runs-on: ubuntu-latest permissions: contents: write steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Temurin 21 uses: actions/setup-java@v4 with: distribution: temurin java-version: 21 cache: maven - name: Build project (compile + resolve deps, skip tests) run: mvn -B --settings .github/settings.xml clean verify -DskipTests env: MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }} MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} # javadoc:aggregate runs on the reactor root. # With flash + flash-extensions both declared as modules in root pom.xml, # this produces a single aggregated Javadoc covering all modules. # Default output path: target/site/apidocs/ (no custom reportOutputDirectory set). - name: Generate aggregated JavaDoc run: mvn -B --settings .github/settings.xml javadoc:aggregate -DskipTests env: MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }} MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} - name: Verify JavaDoc output exists run: | if [ ! -f "target/site/apidocs/index.html" ]; then echo "ERROR: target/site/apidocs/index.html not found." echo "Contents of target/site (if any):" find target/site -maxdepth 3 2>/dev/null || echo "(empty)" exit 1 fi COUNT=$(find target/site/apidocs -name '*.html' | wc -l) echo "JavaDoc OK — $COUNT HTML files at target/site/apidocs/" - name: Checkout gh-pages uses: actions/checkout@v4 with: ref: gh-pages path: gh-pages-out token: ${{ secrets.GITHUB_TOKEN }} - name: Copy JavaDoc to versioned folder and latest run: | VERSION=${{ inputs.version }} mkdir -p gh-pages-out/javadoc/$VERSION cp -r target/site/apidocs/. gh-pages-out/javadoc/$VERSION/ rm -rf gh-pages-out/latest mkdir -p gh-pages-out/latest cp -r target/site/apidocs/. gh-pages-out/latest/ - name: Regenerate index.html run: | cd gh-pages-out python3 - <<'EOF' import os, re def version_key(v): parts = re.findall(r'\d+', v) return [int(p) for p in parts] if parts else [0] versions = sorted( [d for d in os.listdir("javadoc") if os.path.isdir(f"javadoc/{d}")], key=version_key, reverse=True ) latest = versions[0] if versions else None rows = "\n".join( f'''
{v} {"latest" if v == latest else ""}
Open
''' for v in versions ) html = """ Flash — JavaDoc

Flash JavaDoc

API documentation for all published Flash releases.

""" + ( f''' Latest release — {latest} ''' if latest else "" ) + """
""" + ( f'''
{rows}
''' if rows else '''
No versions published yet.
''' ) + """
""" with open("index.html", "w", encoding="utf-8") as f: f.write(html) print(f"index.html generated — {len(versions)} version(s): {versions}") EOF - name: Push gh-pages run: | cd gh-pages-out git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add -A git diff --cached --quiet || git commit -m "docs(javadoc): publish ${{ inputs.version }}" git push origin gh-pages