on: push: branches: - '**' jobs: build_docs: name: Build the production documentation site runs-on: ubuntu-latest env: HUGO_VERSION: 0.111.2 GCLOUD_VERSION: 458.0.1-linux-x86_64 BUCKET: docs-prod-learn-redis-com BUCKET_SERVICE_ACCOUNT: ${{ secrets.BUCKET_DOCUMENTATION_SA_PROD }} BUCKET_SECRET: ${{ secrets.BUCKET_DOCUMENTATION_PROD }} GCP_PROJECT: ${{ secrets.GCP_PROJECT_PROD }} steps: - name: Start run: echo "The name of the branch is ${{ github.ref }} on ${{ github.repository }}" - name: Install Hugo run: | wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \ && sudo dpkg -i ${{ runner.temp }}/hugo.deb - name: Check the branch out uses: actions/checkout@v4 - name: List repository files run: ls ${{ github.workspace }} - name: Validate the branch name before using it run: | if [[ "${{ github.ref_name }}" =~ ^[a-zA-Z0-9_.-]+$ ]] then echo "The branch name ${{ github.ref_name }} is valid." else echo "ERROR: Invalid branch name ${{ github.ref_name }}!" exit 1 fi - name: Install dependencies run: make deps - name: Build out all versions run: | set -x function setBaseUrl() { if [[ "${{ github.ref_name }}" == "main" ]] then hugo_root_path=docs/staging/dev elif [[ "${{ github.ref_name }}" == "latest" ]] then hugo_root_path="docs/latest" elif [[ "${{ endsWith(github.ref_name, '-build') }}" == "true" ]] then hugo_root_path=`echo docs/version/${{ github.ref_name }} | sed 's/-build$//'` else hugo_root_path=docs/staging/${{ github.ref_name }} fi \ && sed -i "s#baseURL = \"https://redis.io\"#baseURL = \"https://redis.io/$hugo_root_path\"#g" config.toml } setBaseUrl kubernetes_versions=($(find content/operate/kubernetes/ -maxdepth 1 -type d -regex ".*[0-9-]" | awk -F/ '{print $NF}')) rs_versions=($(find content/operate/rs/ -maxdepth 1 -type d -regex ".*[0-9-]" | awk -F/ '{print $NF}')) # build latest for version in "${kubernetes_versions[@]}"; do rm -r "content/operate/kubernetes/${version}" done for version in "${rs_versions[@]}"; do rm -r "content/operate/rs/${version}" done make all git checkout . # build all versions for version in "${kubernetes_versions[@]}"; do setBaseUrl # for each version, remove all other versions before building versions_to_remove=($(echo "${kubernetes_versions[@]}" "${version}" | tr ' ' '\n' | sort | uniq -u)) for version_to_remove in "${versions_to_remove[@]}"; do rm -r "content/operate/kubernetes/${version_to_remove}" done cp -r "content/operate/kubernetes/${version}"/* content/operate/kubernetes/ rm -r "content/operate/kubernetes/${version}" sed -i 's/id="versionSelectorKubernetesValue" class="version-selector-control">latest/id="versionSelectorKubernetesValue" class="version-selector-control">v'"${version}"'/' layouts/partials/docs-nav.html sed -i 's/linkTitle: '"${version}"'/linkTitle: Redis for Kubernetes/' content/operate/kubernetes/_index.md # inject replace command in meta-links to make sure editURL and issuesURL point to right version sed -i "11i \{\{ \$gh_file = replaceRE \`\^operate\/kubernetes\/\` \"operate\/kubernetes\/$version\/\" \$gh_file }}" layouts/partials/meta-links.html hugo -d "kubernetes-${version}" git checkout . done for version in "${rs_versions[@]}"; do setBaseUrl # for each version, remove all other versions before building versions_to_remove=($(echo "${rs_versions[@]}" "${version}" | tr ' ' '\n' | sort | uniq -u)) for version_to_remove in "${versions_to_remove[@]}"; do rm -r "content/operate/rs/${version_to_remove}" done cp -r "content/operate/rs/${version}"/* content/operate/rs/ rm -r "content/operate/rs/${version}" sed -i 's/id="versionSelectorRsValue" class="version-selector-control">latest/id="versionSelectorRsValue" class="version-selector-control">v'"${version}"'/' layouts/partials/docs-nav.html sed -i 's/linkTitle: '"${version}"'/linkTitle: Redis Software/' content/operate/rs/_index.md # inject replace command in meta-links to make sure editURL and issuesURL point to right version sed -i "11i \{\{ \$gh_file = replaceRE \`\^operate\/rs\/\` \"operate\/rs\/$version\/\" \$gh_file }}" layouts/partials/meta-links.html hugo -d "rs-${version}" git checkout . done - name: List client examples run: ls "${{ github.workspace }}/examples" - name: List files to be published run: ls "${{ github.workspace }}/public" - name: Install the Google Cloud CLI run: | wget -O ${{ github.workspace }}/google-cloud-cli.tar.gz "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-$GCLOUD_VERSION.tar.gz" \ && tar -xvf google-cloud-cli.tar.gz -C ${{ github.workspace }}\ && ${{ github.workspace }}/google-cloud-sdk/install.sh --quiet - name: Prepare bucket authentication run: echo $BUCKET_SECRET | base64 --decode > service_account.json && ls -a service_account.json - name: Authenticate to the bucket run: | ./google-cloud-sdk/bin/gcloud auth activate-service-account $BUCKET_SERVICE_ACCOUNT --key-file=./service_account.json --project=$GCP_PROJECT \ && ./google-cloud-sdk/bin/gcloud auth list - name: Sync the branch to the bucket run: | if [[ "${{ github.ref_name }}" == "main" ]] then bucket_path=staging/dev elif [[ "${{ github.ref_name }}" == "latest" ]] then bucket_path=${{ github.ref_name }} elif [[ "${{ endsWith(github.ref_name, '-build') }}" == "true" ]] then bucket_path=`echo "version/${{ github.ref_name }}" | sed 's/-build$//'` else bucket_path=staging/${{ github.ref_name }} fi \ && ./google-cloud-sdk/bin/gsutil -m rsync -r -c -j html -d ${{ github.workspace }}/public gs://$BUCKET/$bucket_path if [[ "${{ github.ref_name }}" == "latest" ]] then versioned_builds=($(find . -type d -regex ".*[0-9-]" -maxdepth 1 | sed -E 's/^.\///')) for versioned_build in "${versioned_builds[@]}"; do product=$(grep -Eo '[a-zA-Z]+' <<< $versioned_build) gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/operate/${product}" "gs://${BUCKET}/${versioned_build}/operate/${product}" done fi if [[ "$bucket_path" == staging/* ]] then versioned_builds=($(find . -type d -regex ".*[0-9-]" -maxdepth 1 | sed -E 's/^.\///')) for versioned_build in "${versioned_builds[@]}"; do product=$(grep -Eo '[a-zA-Z]+' <<< $versioned_build) gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/operate/${product}" "gs://${BUCKET}/${bucket_path}/${versioned_build}/operate/${product}" done fi - name: End run: echo "This job's status is ${{ job.status }}."