Ansible package docs build #6
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
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: Version of the Ansible community package to build | |
required: true | |
default: devel | |
options: | |
- devel | |
- '10' | |
- '9' | |
- '8' | |
- '7' | |
latest-symlink: | |
type: boolean | |
description: Add latest symlink | |
required: true | |
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 latest symlink | |
if: fromJSON(github.event.inputs.latest-symlink) | |
run: ln -s "${VERSION}" _build/html/latest | |
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.repository-branch }} | |
PROD_URL: https://ansible.readthedocs.io/projects/ansible/en | |
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 |