Skip to content

Ansible package docs build #6

Ansible package docs build

Ansible package docs build #6

---
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