name: Reusable Documentation Workflow on: workflow_call: inputs: python-version: description: 'Python version to use' required: false type: string default: '3.11' node-version: description: 'Node.js version to use' required: false type: string default: '14.x' version-source: description: 'Source of version: "release" (from GitHub release) or "custom" (provided)' required: false type: string default: 'release' custom-version: description: 'Custom version string when version-source is "custom"' required: false type: string default: '' base-path: description: 'Base path for documentation (e.g., "/" for prod, "/dev/" for dev)' required: false type: string default: '/' destination-dir: description: 'Destination directory for GitHub Pages deployment' required: false type: string default: '.' generate-webuploader: description: 'Generate WebUploader manifest' required: false type: boolean default: true webuploader-args: description: 'Additional arguments for gen_wu.py script' required: false type: string default: '' run-pagespeed: description: 'Run PageSpeed Insights after deployment' required: false type: boolean default: false pagespeed-url: description: 'URL to test with PageSpeed Insights' required: false type: string default: 'https://docs.openmqttgateway.com/' secrets: GITHUB_TOKEN: required: true APIKEY: required: false jobs: documentation: runs-on: ubuntu-latest name: Create and deploy documentation steps: - uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: ${{ inputs.node-version }} - name: Set up Python uses: actions/setup-python@v5 with: python-version: ${{ inputs.python-version }} - name: Build documentation site run: | # Build script arguments based on inputs ARGS="" # Set version source and custom version if [ "${{ inputs.version-source }}" = "custom" ] && [ -n "${{ inputs.custom-version }}" ]; then ARGS="$ARGS --custom-version '${{ inputs.custom-version }}' --version-source custom" elif [ "${{ inputs.version-source }}" = "release" ]; then # Get latest release tag if command -v git >/dev/null 2>&1; then LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "development") ARGS="$ARGS --custom-version '${LATEST_TAG}' --version-source release" else ARGS="$ARGS --version-source release" fi fi # Set base path/URL prefix if [ "${{ inputs.base-path }}" != "/" ]; then ARGS="$ARGS --url-prefix '${{ inputs.base-path }}'" fi # WebUploader generation if [ "${{ inputs.generate-webuploader }}" != "true" ]; then ARGS="$ARGS --no-webuploader" elif [ -n "${{ inputs.webuploader-args }}" ]; then ARGS="$ARGS --webuploader-args '${{ inputs.webuploader-args }}'" fi # Run the build script eval "./scripts/ci_site.sh ${ARGS}" - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./generated/site destination_dir: ${{ inputs.destination-dir }} cname: docs.openmqttgateway.com - name: Run PageSpeed Insights if: inputs.run-pagespeed uses: jakepartusch/psi-action@v1.3 id: psi with: url: ${{ inputs.pagespeed-url }} threshold: 60 key: ${{ secrets.APIKEY }}