name: Documentation on: push: branches: - 'main' paths: - 'packages/*/src/**' - '!packages/create-discord-bot/**' - '!packages/proxy-container/**' - '!packages/ui/**' tags: - '**' workflow_dispatch: inputs: ref: description: 'The branch, tag or SHA to checkout' required: true ref_type: type: choice description: 'Branch or tag' options: - branch - tag required: true concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} cancel-in-progress: true jobs: build-docs: name: Build & upload documentation runs-on: ubuntu-latest env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} REF_TYPE: ${{ inputs.ref_type || github.ref_type }} if: github.repository_owner == 'discordjs' steps: - name: Checkout repository uses: actions/checkout@v3 with: ref: ${{ inputs.ref || '' }} - name: Install node.js v18 uses: actions/setup-node@v3 with: node-version: 18 - name: Install dependencies uses: ./packages/actions/src/pnpmCache - name: Build dependencies run: pnpm run build - name: Checkout main repository if: ${{ inputs.ref && inputs.ref != 'main' }} uses: actions/checkout@v3 with: path: 'main' - name: Build main if: ${{ inputs.ref && inputs.ref != 'main' }} shell: bash run: | cd main pnpm install --frozen-lockfile --prefer-offline --loglevel error pnpm run build cd .. - name: Extract package and semver from tag if: ${{ env.REF_TYPE == 'tag' }} id: extract-tag uses: ./packages/actions/src/formatTag with: tag: ${{ inputs.ref || github.ref_name }} - name: Apply tag to api-extractor config if: ${{ env.REF_TYPE == 'tag' && !inputs.ref }} run: sed -i 's!https://github.com/discordjs/discord.js/tree/main!https://github.com/discordjs/discord.js/tree/${{ steps.extract-tag.outputs.semver }}!' "packages/${{ steps.extract-tag.outputs.package}}/" - name: Build docs run: pnpm run docs - name: Build docs with main api-extractor if: ${{ inputs.ref && inputs.ref != 'main' }} run: | declare -a PACKAGES=("brokers" "builders" "collection" "core" "discord.js" "formatters" "next" "proxy" "rest" "util" "voice" "ws") for PACKAGE in "${PACKAGES[@]}"; do cd "packages/${PACKAGE}" sed -i 's!https://github.com/discordjs/discord.js/tree/main!https://github.com/discordjs/discord.js/tree/${{ inputs.ref }}!' api-extractor.json ../../main/packages/api-extractor/bin/api-extractor run --local --minify ../../main/packages/scripts/bin/generateSplitDocumentation.js cd ../.. done - name: Checkout docs repository uses: actions/checkout@v3 with: repository: 'discordjs/docs' token: ${{ secrets.DJS_DOCS }} path: 'out' - name: Upload documentation to database if: ${{ env.REF_TYPE == 'tag' && (!inputs.ref || inputs.ref == 'main') }} env: DATABASE_URL: ${{ secrets.DATABASE_URL }} BLOB_READ_WRITE_TOKEN: ${{ secrets.BLOB_READ_WRITE_TOKEN }} uses: ./packages/actions/src/uploadDocumentation with: package: ${{ steps.extract-tag.outputs.package }} version: ${{ steps.extract-tag.outputs.semver }} - name: Upload documentation to database if: ${{ env.REF_TYPE == 'tag' && inputs.ref && inputs.ref != 'main' }} env: DATABASE_URL: ${{ secrets.DATABASE_URL }} BLOB_READ_WRITE_TOKEN: ${{ secrets.BLOB_READ_WRITE_TOKEN }} uses: ./main/packages/actions/src/uploadDocumentation with: package: ${{ steps.extract-tag.outputs.package }} version: ${{ steps.extract-tag.outputs.semver }} - name: Upload split documentation to blob storage if: ${{ env.REF_TYPE == 'tag' && (!inputs.ref || inputs.ref == 'main') }} env: BLOB_READ_WRITE_TOKEN: ${{ secrets.BLOB_READ_WRITE_TOKEN }} uses: ./packages/actions/src/uploadSplitDocumentation with: package: ${{ steps.extract-tag.outputs.package }} version: ${{ steps.extract-tag.outputs.semver }} - name: Upload split documentation to blob storage if: ${{ env.REF_TYPE == 'tag' && inputs.ref && inputs.ref != 'main' }} env: BLOB_READ_WRITE_TOKEN: ${{ secrets.BLOB_READ_WRITE_TOKEN }} uses: ./main/packages/actions/src/uploadSplitDocumentation with: package: ${{ steps.extract-tag.outputs.package }} version: ${{ steps.extract-tag.outputs.semver }} - name: Move docs to correct directory if: ${{ env.REF_TYPE == 'tag' }} env: PACKAGE: ${{ steps.extract-tag.outputs.package }} SEMVER: ${{ steps.extract-tag.outputs.semver }} run: | mkdir -p "out/${PACKAGE}" if [[ "${PACKAGE}" == "discord.js" ]]; then mv "packages/${PACKAGE}/docs/docs.json" "out/${PACKAGE}/${SEMVER}.json" mv "packages/${PACKAGE}/docs/docs.api.json" "out/${PACKAGE}/${SEMVER}.api.json" else mv "packages/${PACKAGE}/docs/docs.api.json" "out/${PACKAGE}/${SEMVER}.api.json" fi - name: Upload documentation to database if: ${{ env.REF_TYPE == 'branch' && (!inputs.ref || inputs.ref == 'main') }} env: DATABASE_URL: ${{ secrets.DATABASE_URL }} BLOB_READ_WRITE_TOKEN: ${{ secrets.BLOB_READ_WRITE_TOKEN }} uses: ./packages/actions/src/uploadDocumentation - name: Upload documentation to database if: ${{ env.REF_TYPE == 'branch' && inputs.ref && inputs.ref != 'main' }} env: DATABASE_URL: ${{ secrets.DATABASE_URL }} BLOB_READ_WRITE_TOKEN: ${{ secrets.BLOB_READ_WRITE_TOKEN }} uses: ./main/packages/actions/src/uploadDocumentation - name: Upload split documentation to blob storage if: ${{ env.REF_TYPE == 'branch' && (!inputs.ref || inputs.ref == 'main') }} env: BLOB_READ_WRITE_TOKEN: ${{ secrets.BLOB_READ_WRITE_TOKEN }} uses: ./packages/actions/src/uploadSplitDocumentation - name: Upload split documentation to blob storage if: ${{ env.REF_TYPE == 'branch' && inputs.ref && inputs.ref != 'main' }} env: BLOB_READ_WRITE_TOKEN: ${{ secrets.BLOB_READ_WRITE_TOKEN }} uses: ./main/packages/actions/src/uploadSplitDocumentation - name: Move docs to correct directory if: ${{ env.REF_TYPE == 'branch' }} run: | declare -a PACKAGES=("brokers" "builders" "collection" "core" "discord.js" "formatters" "next" "proxy" "rest" "util" "voice" "ws") for PACKAGE in "${PACKAGES[@]}"; do if [[ "${PACKAGE}" == "discord.js" ]]; then mkdir -p "out/${PACKAGE}" mv "packages/${PACKAGE}/docs/docs.json" "out/${PACKAGE}/${GITHUB_REF_NAME}.json" mv "packages/${PACKAGE}/docs/docs.api.json" "out/${PACKAGE}/${GITHUB_REF_NAME}.api.json" else mkdir -p "out/${PACKAGE}" mv "packages/${PACKAGE}/docs/docs.api.json" "out/${PACKAGE}/${GITHUB_REF_NAME}.api.json" fi done - name: Commit and push run: | cd out git config user.name github-actions[bot] git config user.email 41898282+github-actions[bot]@users.noreply.github.com git add . git commit -m "Docs build for ${GITHUB_REF_TYPE} ${GITHUB_REF_NAME}: ${GITHUB_SHA}" || true git push build-indices: needs: build-docs name: Build & upload search indices runs-on: ubuntu-latest env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} if: github.repository_owner == 'discordjs' steps: - name: Checkout repository uses: actions/checkout@v3 - name: Install node.js v18 uses: actions/setup-node@v3 with: node-version: 18 - name: Install dependencies uses: ./packages/actions/src/pnpmCache - name: Build dependencies run: pnpm run build - name: Upload search indices to meilisearch env: DATABASE_URL: ${{ secrets.DATABASE_URL }} SEARCH_API_URL: ${{ secrets.SEARCH_API_URL }} SEARCH_API_KEY: ${{ secrets.SEARCH_API_KEY }} uses: ./packages/actions/src/uploadSearchIndices