--- name: Ansible package docs build on: workflow_dispatch: inputs: repository-owner: description: GitHub account or org that owns the repository required: true default: ansible repository-name: description: Name of the GitHub repository required: true default: ansible-documentation repository-branch: description: Branch, tag, or commit SHA required: true default: devel language: type: choice description: Language required: true default: english options: - english - japanese ansible-package-version: type: choice description: Ansible community package version required: true default: devel options: - devel - '11' - '10' - '9' deploy: type: boolean description: Deploy the build required: true deployment-environment: type: choice description: Deployment environment required: true default: test options: - production - test env: PACKAGE_VERSION: ${{ github.event.inputs.ansible-package-version }} LANGUAGE: ${{ github.event.inputs.language }} jobs: build-package-docs: runs-on: ubuntu-latest steps: - name: Checkout Ansible documentation uses: actions/checkout@v4 with: repository: >- ${{ github.event.inputs.repository-owner }}/${{ github.event.inputs.repository-name }} ref: ${{ github.event.inputs.repository-branch }} path: build-directory - name: Setup nox uses: wntrblm/nox@2024.04.15 - name: Output Python info run: python --version --version && which python - name: Graft ansible-core run: nox -s clone-core working-directory: build-directory - name: Install project requirements run: >- python -m pip install -r tests/requirements.in -c tests/requirements.txt working-directory: build-directory - name: Set the COLLECTION_LIST variable if: env.PACKAGE_VERSION != 'devel' run: >- echo COLLECTION_LIST='"${PACKAGE_VERSION}"' >> "${GITHUB_ENV}" - name: Set the VERSION variable run: | if [ ${LANGUAGE} == "english" ]; then echo VERSION="${PACKAGE_VERSION}" >> "${GITHUB_ENV}" elif [ ${LANGUAGE} == "japanese" ]; then echo VERSION="${PACKAGE_VERSION}_ja" >> "${GITHUB_ENV}" fi - name: Build the Ansible community package docs run: make webdocs ANSIBLE_VERSION="${COLLECTION_LIST}" working-directory: build-directory/docs/docsite - name: Create a tarball with the build contents run: >- tar -czvf ansible-package-docs-html-"${PACKAGE_VERSION}"-$(date '+%Y-%m-%d')-${{ github.run_id }}-${{ github.run_number }}-${{ github.run_attempt }}.tar.gz --directory=_build/html/ . working-directory: build-directory/docs/docsite - name: Create a downloadable archive that contains the tarball uses: actions/upload-artifact@v4 with: name: package-docs-build path: build-directory/docs/docsite/ansible-package-docs-html-*.tar.gz retention-days: 7 deploy-package-docs: if: fromJSON(github.event.inputs.deploy) needs: build-package-docs runs-on: ubuntu-latest environment: name: deploy-package-docs url: ${{ env.ENV_URL }} env: TARGET: ${{ github.event.inputs.deployment-environment }} DEST_REPO: ansible-community/package-doc-builds USER_EMAIL: "41898282+github-actions[bot]@users.noreply.github.com" USER_NAME: "github-actions[bot]" steps: - name: Download the build archive uses: actions/download-artifact@v4 with: name: package-docs-build - name: Extract the tarball run: >- tar -xvzf ansible-package-docs-html-*.tar.gz --one-top-level - name: Set the production branch and url if: env.TARGET == 'production' env: BRANCH_NAME: ${{ github.event.inputs.ansible-package-version }} PROD_URL: https://ansible.readthedocs.io/projects/ansible run: | echo "BRANCH=${BRANCH_NAME}" >> "${GITHUB_ENV}" echo "ENV_URL=${PROD_URL}/${BRANCH_NAME}" >> "${GITHUB_ENV}" - name: Set the test branch and url if: env.TARGET == 'test' env: TEST_URL: https://ansible-community.github.io/package-doc-builds run: | echo "BRANCH=gh-pages" >> "${GITHUB_ENV}" echo "ENV_URL=${TEST_URL}" >> "${GITHUB_ENV}" - name: Checkout the deploy directory uses: actions/checkout@v4 with: repository: ${{ env.DEST_REPO }} ref: ${{ env.BRANCH }} path: deploy-directory fetch-depth: 0 ssh-key: ${{ secrets.DEPLOY_DOC_BUILD }} persist-credentials: true - name: Copy the generated HTML and assets for production run: >- rsync -av --delete --mkpath ansible-package-docs-html-*/ deploy-directory/docs - name: Create a norobots.txt file for the test site if: env.TARGET == 'test' run: | touch norobots.txt echo "User-agent: *" > norobots.txt echo "Disallow: /" >> norobots.txt working-directory: deploy-directory/docs - name: Configure the git user run: | git config --local user.email "${USER_EMAIL}" git config --local user.name "${USER_NAME}" working-directory: deploy-directory - name: Git add the generated HTML and assets run: git add ./docs --all --force working-directory: deploy-directory - name: Commit generated HTML and assets run: >- git diff-index --quiet HEAD || git commit -m "Push docs build $(date '+%Y-%m-%d')-${{ github.run_id }}-${{ github.run_number }}-${{ github.run_attempt }}" working-directory: deploy-directory - name: Push build to deploy repository run: git push origin working-directory: deploy-directory