diff --git a/.github/workflows/main-staging.yml b/.github/workflows/main-staging.yml index e20cc39ab7..7698fa3cfb 100644 --- a/.github/workflows/main-staging.yml +++ b/.github/workflows/main-staging.yml @@ -65,10 +65,12 @@ jobs: 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}')) rdi_versions=($(find content/integrate/redis-data-integration/ -maxdepth 1 -type d -regex ".*[0-9-]" | awk -F/ '{print $NF}')) + redisvl_versions=($(find content/develop/ai/redisvl/ -maxdepth 1 -type d -regex ".*[0-9-]" | awk -F/ '{print $NF}')) printf "%s\n" "${kubernetes_versions[@]}" > kubernetes-versions printf "%s\n" "${rs_versions[@]}" > rs-versions printf "%s\n" "${rdi_versions[@]}" > rdi-versions + printf "%s\n" "${redisvl_versions[@]}" > redisvl-versions # build latest for version in "${kubernetes_versions[@]}"; do @@ -80,6 +82,9 @@ jobs: for version in "${rdi_versions[@]}"; do rm -r "content/integrate/redis-data-integration/${version}" done + for version in "${redisvl_versions[@]}"; do + rm -r "content/develop/ai/redisvl/${version}" + done make all git checkout . @@ -166,6 +171,33 @@ jobs: git checkout . done + for version in "${redisvl_versions[@]}"; do + + setBaseUrl + + # for each version, remove all other versions before building + versions_to_remove=($(echo "${redisvl_versions[@]}" "${version}" | tr ' ' '\n' | sort | uniq -u)) + for version_to_remove in "${versions_to_remove[@]}"; do + rm -r "content/develop/ai/redisvl/${version_to_remove}" + done + + # relrefs should not include version + find "content/develop/ai/redisvl/${version}" -type f | while read file; do + awk '{gsub(/\(\{\{< ?relref "\/develop\/ai\/redisvl\/'${version}'/, "({{< relref \"/develop/ai/redisvl") }1' "$file" > tmpfile && mv tmpfile "$file" + done + + rsync -a --delete-after "content/develop/ai/redisvl/${version}"/ content/develop/ai/redisvl/ + sed -i 's/id="versionSelectorRedisvlValue" class="version-selector-control">latest/id="versionSelectorRedisvlValue" class="version-selector-control">v'"${version}"'/' layouts/partials/docs-nav.html + sed -i 's/linkTitle: '"${version}"'/linkTitle: RedisVL/' content/develop/ai/redisvl/_index.md + + # inject replace command in meta-links to make sure editURL and issuesURL point to right version + sed -i "12i \{\{ \$gh_path = replaceRE \`\^develop\/ai\/redisvl\/\` \"develop\/ai\/redisvl\/$version\/\" \$gh_path }}" layouts/partials/meta-links.html + + hugo -d "redisvl-${version}" + + git checkout . + done + - name: List client examples run: ls "${{ github.workspace }}/examples" - name: List files to be published @@ -205,6 +237,8 @@ jobs: product=$(awk 'BEGIN{FS=OFS="-"}{NF--; print}' <<< $versioned_build) if [[ "${product}" == "redis-data-integration" ]]; then gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/integrate/${product}/" "gs://${BUCKET}/${bucket_path}/${versioned_build}/integrate/${product}" + elif [[ "${product}" == "redisvl" ]]; then + gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/develop/ai/${product}/" "gs://${BUCKET}/${bucket_path}/${versioned_build}/develop/ai/${product}" else gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/operate/${product}/" "gs://${BUCKET}/${bucket_path}/${versioned_build}/operate/${product}" fi diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2995d0b10b..0847c05908 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -65,10 +65,12 @@ jobs: 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}')) rdi_versions=($(find content/integrate/redis-data-integration/ -maxdepth 1 -type d -regex ".*[0-9-]" | awk -F/ '{print $NF}')) + redisvl_versions=($(find content/develop/ai/redisvl/ -maxdepth 1 -type d -regex ".*[0-9-]" | awk -F/ '{print $NF}')) printf "%s\n" "${kubernetes_versions[@]}" > kubernetes-versions printf "%s\n" "${rs_versions[@]}" > rs-versions printf "%s\n" "${rdi_versions[@]}" > rdi-versions + printf "%s\n" "${redisvl_versions[@]}" > redisvl-versions # build latest for version in "${kubernetes_versions[@]}"; do @@ -80,6 +82,9 @@ jobs: for version in "${rdi_versions[@]}"; do rm -r "content/integrate/redis-data-integration/${version}" done + for version in "${redisvl_versions[@]}"; do + rm -r "content/develop/ai/redisvl/${version}" + done make all git checkout . @@ -166,6 +171,33 @@ jobs: git checkout . done + for version in "${redisvl_versions[@]}"; do + + setBaseUrl + + # for each version, remove all other versions before building + versions_to_remove=($(echo "${redisvl_versions[@]}" "${version}" | tr ' ' '\n' | sort | uniq -u)) + for version_to_remove in "${versions_to_remove[@]}"; do + rm -r "content/develop/ai/redisvl/${version_to_remove}" + done + + # relrefs should not include version + find "content/develop/ai/redisvl/${version}" -type f | while read file; do + awk '{gsub(/\(\{\{< ?relref "\/develop\/ai\/redisvl\/'${version}'/, "({{< relref \"/develop/ai/redisvl") }1' "$file" > tmpfile && mv tmpfile "$file" + done + + rsync -a --delete-after "content/develop/ai/redisvl/${version}"/ content/develop/ai/redisvl/ + sed -i 's/id="versionSelectorRedisvlValue" class="version-selector-control">latest/id="versionSelectorRedisvlValue" class="version-selector-control">v'"${version}"'/' layouts/partials/docs-nav.html + sed -i 's/linkTitle: '"${version}"'/linkTitle: RedisVL/' content/develop/ai/redisvl/_index.md + + # inject replace command in meta-links to make sure editURL and issuesURL point to right version + sed -i "12i \{\{ \$gh_path = replaceRE \`\^develop\/ai\/redisvl\/\` \"develop\/ai\/redisvl\/$version\/\" \$gh_path }}" layouts/partials/meta-links.html + + hugo -d "redisvl-${version}" + + git checkout . + done + - name: List client examples run: ls "${{ github.workspace }}/examples" - name: List files to be published @@ -211,6 +243,9 @@ jobs: if [[ "${product}" == "redis-data-integration" ]]; then gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/integrate/${product}" "gs://${BUCKET}/${versioned_build}/integrate/${product}" gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/integrate/${product}/${version}" "gs://${BUCKET}/docs/$bucket_path/integrate/${product}/${version}" + elif [[ "${product}" == "redisvl" ]]; then + gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/develop/ai/${product}" "gs://${BUCKET}/${versioned_build}/develop/ai/${product}" + gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/develop/ai/${product}/${version}" "gs://${BUCKET}/docs/$bucket_path/develop/ai/${product}/${version}" else gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/operate/${product}" "gs://${BUCKET}/${versioned_build}/operate/${product}" gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/operate/${product}/${version}" "gs://${BUCKET}/docs/$bucket_path/operate/${product}/${version}" @@ -235,6 +270,9 @@ jobs: if [[ "${product}" == "redis-data-integration" ]]; then gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/integrate/${product}" "gs://${BUCKET}/${bucket_path}/${versioned_build}/integrate/${product}" gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/integrate/${product}/${version}" "gs://${BUCKET}/docs/${bucket_path}/integrate/${product}/${version}" + elif [[ "${product}" == "redisvl" ]]; then + gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/develop/ai/${product}" "gs://${BUCKET}/${bucket_path}/${versioned_build}/develop/ai/${product}" + gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/develop/ai/${product}/${version}" "gs://${BUCKET}/docs/${bucket_path}/develop/ai/${product}/${version}" else gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/operate/${product}" "gs://${BUCKET}/${bucket_path}/${versioned_build}/operate/${product}" gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/operate/${product}/${version}" "gs://${BUCKET}/docs/${bucket_path}/operate/${product}/${version}" diff --git a/.github/workflows/redisvl_docs_sync.yaml b/.github/workflows/redisvl_docs_sync.yaml index f51a55a979..9584f2ff68 100644 --- a/.github/workflows/redisvl_docs_sync.yaml +++ b/.github/workflows/redisvl_docs_sync.yaml @@ -6,8 +6,30 @@ on: workflow_dispatch: # or run on manual trigger jobs: + define-version-matrix: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - id: set-matrix + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + OLDEST_SUPPORTED_VERSION="0.6.0" + versions=$(gh release -R redis/redis-vl-python list --json name,isLatest \ + | jq -r '.[] | [.name, .isLatest] | @tsv' \ + | sed "/${OLDEST_SUPPORTED_VERSION}/q" \ + | jq -Rnc '{include: [inputs | split("\t") | {version: .[0], isLatest: .[1]}]}') + + echo "${versions}" + echo "matrix=${versions}" >> "$GITHUB_OUTPUT" + redisvl_docs_sync: runs-on: ubuntu-latest + needs: define-version-matrix + strategy: + matrix: ${{ fromJSON(needs['define-version-matrix'].outputs.matrix) }} + fail-fast: false permissions: contents: write pull-requests: write @@ -30,20 +52,25 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - pushd redis-vl-python + version="${{ matrix.version }}" + isLatest="${{ matrix.isLatest }}" - # Get latest release - latest_release=$(gh release -R redis/redis-vl-python list --json name,isLatest --jq '.[] | select(.isLatest)|.name') - git checkout "tags/${latest_release}" || git checkout "tags/v${latest_release}" + pushd redis-vl-python + git checkout "tags/${version}" || git checkout "tags/v${version}" pip3 install -e . - popd - sphinx-build -M markdown ./redis-vl-python/docs ./build - - echo "release=${latest_release}" >> "$GITHUB_OUTPUT" + + if [ ${isLatest} = true ]; then + sphinx-build -M markdown ./redis-vl-python/docs ./build-latest + else + sphinx-build -M markdown ./redis-vl-python/docs ./build-${version} + fi - name: 'Format markdown files for hugo compatibility' run: | + version="${{ matrix.version }}" + isLatest="${{ matrix.isLatest }}" + #!/bin/bash mkdir -p redis_vl_hugo/user_guide/ mkdir redis_vl_hugo/overview/ @@ -65,6 +92,7 @@ jobs: alias=$(echo ${src} | sed -E 's|./redis_vl_hugo/|/integrate/redisvl/| ; s|\.md$|| ; s|\/_index$||') # Inject frontmatter in destination file + if [ ${isLatest} = true ]; then cat >_tmp <_tmp </dev/null - jupyter nbconvert --to markdown build/jupyter_execute/overview/cli.ipynb --output-dir redis_vl_hugo/overview/ 2>/dev/null + build_folder=$(echo build-*) + jupyter nbconvert --to markdown ${build_folder}/jupyter_execute/user_guide/*.ipynb --output-dir redis_vl_hugo/user_guide/ 2>/dev/null + jupyter nbconvert --to markdown ${build_folder}/jupyter_execute/overview/cli.ipynb --output-dir redis_vl_hugo/overview/ 2>/dev/null # Prepare markdown files - rsync -a ./build/markdown/api/ ./redis_vl_hugo/api/ --exclude=index.md - cp ./build/markdown/overview/installation.md ./redis_vl_hugo/overview/installation.md + rsync -a ./${build_folder}/markdown/api/ ./redis_vl_hugo/api/ --exclude=index.md + cp ./${build_folder}/markdown/overview/installation.md ./redis_vl_hugo/overview/installation.md # Format markdown files shopt -s globstar @@ -211,9 +248,9 @@ jobs: done # Format _index.md pages - cp ./build/markdown/api/index.md ./redis_vl_hugo/api/_index.md - cp ./build/markdown/user_guide/index.md ./redis_vl_hugo/user_guide/_index.md - cp ./build/markdown/overview/index.md ./redis_vl_hugo/overview/_index.md + cp ./${build_folder}/markdown/api/index.md ./redis_vl_hugo/api/_index.md + cp ./${build_folder}/markdown/user_guide/index.md ./redis_vl_hugo/user_guide/_index.md + cp ./${build_folder}/markdown/overview/index.md ./redis_vl_hugo/overview/_index.md index_markdown_pages=( ./redis_vl_hugo/api/_index.md @@ -237,13 +274,19 @@ jobs: fi done - cp -r redis_vl_hugo/* content/develop/ai/redisvl/ + if [ ${isLatest} = true ]; then + cp -r redis_vl_hugo/* content/develop/ai/redisvl/ + else + mkdir content/develop/ai/redisvl/${version}/ + cp -r redis_vl_hugo/* content/develop/ai/redisvl/${version}/ + python3 build/version_archiver.py redisvl ${version} --skip-archive + fi - name: 'Create pull request if necessary' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - release="${{ steps.sphinx.outputs.release }}" + release="${{ matrix.version }}" branch="redisvl_docs_sync_${release}" redisvl_change=false @@ -254,7 +297,7 @@ jobs: if [ "$?" -eq 0 ]; then set -e # if it does, create local branch off existing remote branch - git checkout -b "${branch}" "origin/${branch}" + git checkout -f -b "${branch}" "origin/${branch}" git branch --set-upstream-to="origin/${branch}" "${branch}" git pull else @@ -263,9 +306,11 @@ jobs: git checkout -b "${branch}" fi - redisvl_is_different=$(git diff content/develop/ai/redisvl/) + set +e + latest_redisvl_release_is_different=$(git diff content/develop/ai/redisvl/) + new_release=$(git ls-files --others --directory | grep content/develop/ai/redisvl/${release}) - if [[ ! -z $redisvl_is_different ]]; then + if [[ -n "$latest_redisvl_release_is_different" || -n "$new_release" ]]; then redisvl_change=true git add "content/develop/ai/redisvl/" diff --git a/layouts/partials/docs-nav.html b/layouts/partials/docs-nav.html index 9c4521c686..11f0ee822a 100644 --- a/layouts/partials/docs-nav.html +++ b/layouts/partials/docs-nav.html @@ -105,6 +105,51 @@ {{- end }} + {{else if (eq (.Params.linkTitle) "RedisVL")}} + {{end}} diff --git a/layouts/partials/scripts.html b/layouts/partials/scripts.html index 4eef3d945e..67583a70d5 100644 --- a/layouts/partials/scripts.html +++ b/layouts/partials/scripts.html @@ -94,6 +94,7 @@ var currentUrl = window.location.href const regex_kubernetes = new RegExp('/docs/(latest|staging\/.+)/operate/kubernetes/.*') const regex_rs = new RegExp('/docs/(latest|staging\/.+)/operate/rs/.*') + const regex_redisvl = new RegExp('/docs/(latest|staging\/.+)/develop/ai/redisvl/.*') if (regex_kubernetes.test(currentUrl)){ // unhide kubernetes version selector @@ -103,6 +104,10 @@ // unhide rs version selector document.getElementById( 'versionSelectorRs' ).style.display = ''; } + else if (regex_redisvl.test(currentUrl)) { + // unhide redisvl version selector + document.getElementById( 'versionSelectorRedisvl' ).style.display = ''; + } } function _setSelectedVersion(product, ver) {