Skip to content

Commit 0fb4a2d

Browse files
authored
Support versioning for redisvl (#2009)
1 parent 82d47df commit 0fb4a2d

File tree

5 files changed

+187
-20
lines changed

5 files changed

+187
-20
lines changed

.github/workflows/main-staging.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,12 @@ jobs:
6565
kubernetes_versions=($(find content/operate/kubernetes/ -maxdepth 1 -type d -regex ".*[0-9-]" | awk -F/ '{print $NF}'))
6666
rs_versions=($(find content/operate/rs/ -maxdepth 1 -type d -regex ".*[0-9-]" | awk -F/ '{print $NF}'))
6767
rdi_versions=($(find content/integrate/redis-data-integration/ -maxdepth 1 -type d -regex ".*[0-9-]" | awk -F/ '{print $NF}'))
68+
redisvl_versions=($(find content/develop/ai/redisvl/ -maxdepth 1 -type d -regex ".*[0-9-]" | awk -F/ '{print $NF}'))
6869
6970
printf "%s\n" "${kubernetes_versions[@]}" > kubernetes-versions
7071
printf "%s\n" "${rs_versions[@]}" > rs-versions
7172
printf "%s\n" "${rdi_versions[@]}" > rdi-versions
73+
printf "%s\n" "${redisvl_versions[@]}" > redisvl-versions
7274
7375
# build latest
7476
for version in "${kubernetes_versions[@]}"; do
@@ -80,6 +82,9 @@ jobs:
8082
for version in "${rdi_versions[@]}"; do
8183
rm -r "content/integrate/redis-data-integration/${version}"
8284
done
85+
for version in "${redisvl_versions[@]}"; do
86+
rm -r "content/develop/ai/redisvl/${version}"
87+
done
8388
make all
8489
8590
git checkout .
@@ -166,6 +171,33 @@ jobs:
166171
git checkout .
167172
done
168173
174+
for version in "${redisvl_versions[@]}"; do
175+
176+
setBaseUrl
177+
178+
# for each version, remove all other versions before building
179+
versions_to_remove=($(echo "${redisvl_versions[@]}" "${version}" | tr ' ' '\n' | sort | uniq -u))
180+
for version_to_remove in "${versions_to_remove[@]}"; do
181+
rm -r "content/develop/ai/redisvl/${version_to_remove}"
182+
done
183+
184+
# relrefs should not include version
185+
find "content/develop/ai/redisvl/${version}" -type f | while read file; do
186+
awk '{gsub(/\(\{\{< ?relref "\/develop\/ai\/redisvl\/'${version}'/, "({{< relref \"/develop/ai/redisvl") }1' "$file" > tmpfile && mv tmpfile "$file"
187+
done
188+
189+
rsync -a --delete-after "content/develop/ai/redisvl/${version}"/ content/develop/ai/redisvl/
190+
sed -i 's/id="versionSelectorRedisvlValue" class="version-selector-control">latest/id="versionSelectorRedisvlValue" class="version-selector-control">v'"${version}"'/' layouts/partials/docs-nav.html
191+
sed -i 's/linkTitle: '"${version}"'/linkTitle: RedisVL/' content/develop/ai/redisvl/_index.md
192+
193+
# inject replace command in meta-links to make sure editURL and issuesURL point to right version
194+
sed -i "12i \{\{ \$gh_path = replaceRE \`\^develop\/ai\/redisvl\/\` \"develop\/ai\/redisvl\/$version\/\" \$gh_path }}" layouts/partials/meta-links.html
195+
196+
hugo -d "redisvl-${version}"
197+
198+
git checkout .
199+
done
200+
169201
- name: List client examples
170202
run: ls "${{ github.workspace }}/examples"
171203
- name: List files to be published
@@ -205,6 +237,8 @@ jobs:
205237
product=$(awk 'BEGIN{FS=OFS="-"}{NF--; print}' <<< $versioned_build)
206238
if [[ "${product}" == "redis-data-integration" ]]; then
207239
gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/integrate/${product}/" "gs://${BUCKET}/${bucket_path}/${versioned_build}/integrate/${product}"
240+
elif [[ "${product}" == "redisvl" ]]; then
241+
gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/develop/ai/${product}/" "gs://${BUCKET}/${bucket_path}/${versioned_build}/develop/ai/${product}"
208242
else
209243
gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/operate/${product}/" "gs://${BUCKET}/${bucket_path}/${versioned_build}/operate/${product}"
210244
fi

.github/workflows/main.yml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,12 @@ jobs:
6565
kubernetes_versions=($(find content/operate/kubernetes/ -maxdepth 1 -type d -regex ".*[0-9-]" | awk -F/ '{print $NF}'))
6666
rs_versions=($(find content/operate/rs/ -maxdepth 1 -type d -regex ".*[0-9-]" | awk -F/ '{print $NF}'))
6767
rdi_versions=($(find content/integrate/redis-data-integration/ -maxdepth 1 -type d -regex ".*[0-9-]" | awk -F/ '{print $NF}'))
68+
redisvl_versions=($(find content/develop/ai/redisvl/ -maxdepth 1 -type d -regex ".*[0-9-]" | awk -F/ '{print $NF}'))
6869
6970
printf "%s\n" "${kubernetes_versions[@]}" > kubernetes-versions
7071
printf "%s\n" "${rs_versions[@]}" > rs-versions
7172
printf "%s\n" "${rdi_versions[@]}" > rdi-versions
73+
printf "%s\n" "${redisvl_versions[@]}" > redisvl-versions
7274
7375
# build latest
7476
for version in "${kubernetes_versions[@]}"; do
@@ -80,6 +82,9 @@ jobs:
8082
for version in "${rdi_versions[@]}"; do
8183
rm -r "content/integrate/redis-data-integration/${version}"
8284
done
85+
for version in "${redisvl_versions[@]}"; do
86+
rm -r "content/develop/ai/redisvl/${version}"
87+
done
8388
make all
8489
8590
git checkout .
@@ -166,6 +171,33 @@ jobs:
166171
git checkout .
167172
done
168173
174+
for version in "${redisvl_versions[@]}"; do
175+
176+
setBaseUrl
177+
178+
# for each version, remove all other versions before building
179+
versions_to_remove=($(echo "${redisvl_versions[@]}" "${version}" | tr ' ' '\n' | sort | uniq -u))
180+
for version_to_remove in "${versions_to_remove[@]}"; do
181+
rm -r "content/develop/ai/redisvl/${version_to_remove}"
182+
done
183+
184+
# relrefs should not include version
185+
find "content/develop/ai/redisvl/${version}" -type f | while read file; do
186+
awk '{gsub(/\(\{\{< ?relref "\/develop\/ai\/redisvl\/'${version}'/, "({{< relref \"/develop/ai/redisvl") }1' "$file" > tmpfile && mv tmpfile "$file"
187+
done
188+
189+
rsync -a --delete-after "content/develop/ai/redisvl/${version}"/ content/develop/ai/redisvl/
190+
sed -i 's/id="versionSelectorRedisvlValue" class="version-selector-control">latest/id="versionSelectorRedisvlValue" class="version-selector-control">v'"${version}"'/' layouts/partials/docs-nav.html
191+
sed -i 's/linkTitle: '"${version}"'/linkTitle: RedisVL/' content/develop/ai/redisvl/_index.md
192+
193+
# inject replace command in meta-links to make sure editURL and issuesURL point to right version
194+
sed -i "12i \{\{ \$gh_path = replaceRE \`\^develop\/ai\/redisvl\/\` \"develop\/ai\/redisvl\/$version\/\" \$gh_path }}" layouts/partials/meta-links.html
195+
196+
hugo -d "redisvl-${version}"
197+
198+
git checkout .
199+
done
200+
169201
- name: List client examples
170202
run: ls "${{ github.workspace }}/examples"
171203
- name: List files to be published
@@ -211,6 +243,9 @@ jobs:
211243
if [[ "${product}" == "redis-data-integration" ]]; then
212244
gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/integrate/${product}" "gs://${BUCKET}/${versioned_build}/integrate/${product}"
213245
gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/integrate/${product}/${version}" "gs://${BUCKET}/docs/$bucket_path/integrate/${product}/${version}"
246+
elif [[ "${product}" == "redisvl" ]]; then
247+
gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/develop/ai/${product}" "gs://${BUCKET}/${versioned_build}/develop/ai/${product}"
248+
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}"
214249
else
215250
gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/operate/${product}" "gs://${BUCKET}/${versioned_build}/operate/${product}"
216251
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:
235270
if [[ "${product}" == "redis-data-integration" ]]; then
236271
gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/integrate/${product}" "gs://${BUCKET}/${bucket_path}/${versioned_build}/integrate/${product}"
237272
gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/integrate/${product}/${version}" "gs://${BUCKET}/docs/${bucket_path}/integrate/${product}/${version}"
273+
elif [[ "${product}" == "redisvl" ]]; then
274+
gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/develop/ai/${product}" "gs://${BUCKET}/${bucket_path}/${versioned_build}/develop/ai/${product}"
275+
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}"
238276
else
239277
gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/operate/${product}" "gs://${BUCKET}/${bucket_path}/${versioned_build}/operate/${product}"
240278
gsutil -m rsync -r -c -j html -d "${{ github.workspace }}/${versioned_build}/operate/${product}/${version}" "gs://${BUCKET}/docs/${bucket_path}/operate/${product}/${version}"

.github/workflows/redisvl_docs_sync.yaml

Lines changed: 65 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,30 @@ on:
66
workflow_dispatch: # or run on manual trigger
77

88
jobs:
9+
define-version-matrix:
10+
runs-on: ubuntu-latest
11+
outputs:
12+
matrix: ${{ steps.set-matrix.outputs.matrix }}
13+
steps:
14+
- id: set-matrix
15+
env:
16+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
17+
run: |
18+
OLDEST_SUPPORTED_VERSION="0.6.0"
19+
versions=$(gh release -R redis/redis-vl-python list --json name,isLatest \
20+
| jq -r '.[] | [.name, .isLatest] | @tsv' \
21+
| sed "/${OLDEST_SUPPORTED_VERSION}/q" \
22+
| jq -Rnc '{include: [inputs | split("\t") | {version: .[0], isLatest: .[1]}]}')
23+
24+
echo "${versions}"
25+
echo "matrix=${versions}" >> "$GITHUB_OUTPUT"
26+
927
redisvl_docs_sync:
1028
runs-on: ubuntu-latest
29+
needs: define-version-matrix
30+
strategy:
31+
matrix: ${{ fromJSON(needs['define-version-matrix'].outputs.matrix) }}
32+
fail-fast: false
1133
permissions:
1234
contents: write
1335
pull-requests: write
@@ -30,20 +52,25 @@ jobs:
3052
env:
3153
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3254
run: |
33-
pushd redis-vl-python
55+
version="${{ matrix.version }}"
56+
isLatest="${{ matrix.isLatest }}"
3457
35-
# Get latest release
36-
latest_release=$(gh release -R redis/redis-vl-python list --json name,isLatest --jq '.[] | select(.isLatest)|.name')
37-
git checkout "tags/${latest_release}" || git checkout "tags/v${latest_release}"
58+
pushd redis-vl-python
59+
git checkout "tags/${version}" || git checkout "tags/v${version}"
3860
pip3 install -e .
39-
4061
popd
41-
sphinx-build -M markdown ./redis-vl-python/docs ./build
42-
43-
echo "release=${latest_release}" >> "$GITHUB_OUTPUT"
62+
63+
if [ ${isLatest} = true ]; then
64+
sphinx-build -M markdown ./redis-vl-python/docs ./build-latest
65+
else
66+
sphinx-build -M markdown ./redis-vl-python/docs ./build-${version}
67+
fi
4468
4569
- name: 'Format markdown files for hugo compatibility'
4670
run: |
71+
version="${{ matrix.version }}"
72+
isLatest="${{ matrix.isLatest }}"
73+
4774
#!/bin/bash
4875
mkdir -p redis_vl_hugo/user_guide/
4976
mkdir redis_vl_hugo/overview/
@@ -65,13 +92,22 @@ jobs:
6592
alias=$(echo ${src} | sed -E 's|./redis_vl_hugo/|/integrate/redisvl/| ; s|\.md$|| ; s|\/_index$||')
6693
6794
# Inject frontmatter in destination file
95+
if [ ${isLatest} = true ]; then
6896
cat >_tmp <<EOL
6997
---
7098
linkTitle: ${linkTitle}
7199
title: ${title}
72100
aliases:
73101
- ${alias}
74102
EOL
103+
else
104+
cat >_tmp <<EOL
105+
---
106+
linkTitle: ${linkTitle}
107+
title: ${title}
108+
EOL
109+
fi
110+
75111
76112
# Inject weight property for index pages to preserve order
77113
case "${title}" in
@@ -110,12 +146,13 @@ jobs:
110146
}
111147
112148
# Convert jupyter notebooks to markdown
113-
jupyter nbconvert --to markdown build/jupyter_execute/user_guide/*.ipynb --output-dir redis_vl_hugo/user_guide/ 2>/dev/null
114-
jupyter nbconvert --to markdown build/jupyter_execute/overview/cli.ipynb --output-dir redis_vl_hugo/overview/ 2>/dev/null
149+
build_folder=$(echo build-*)
150+
jupyter nbconvert --to markdown ${build_folder}/jupyter_execute/user_guide/*.ipynb --output-dir redis_vl_hugo/user_guide/ 2>/dev/null
151+
jupyter nbconvert --to markdown ${build_folder}/jupyter_execute/overview/cli.ipynb --output-dir redis_vl_hugo/overview/ 2>/dev/null
115152
116153
# Prepare markdown files
117-
rsync -a ./build/markdown/api/ ./redis_vl_hugo/api/ --exclude=index.md
118-
cp ./build/markdown/overview/installation.md ./redis_vl_hugo/overview/installation.md
154+
rsync -a ./${build_folder}/markdown/api/ ./redis_vl_hugo/api/ --exclude=index.md
155+
cp ./${build_folder}/markdown/overview/installation.md ./redis_vl_hugo/overview/installation.md
119156
120157
# Format markdown files
121158
shopt -s globstar
@@ -211,9 +248,9 @@ jobs:
211248
done
212249
213250
# Format _index.md pages
214-
cp ./build/markdown/api/index.md ./redis_vl_hugo/api/_index.md
215-
cp ./build/markdown/user_guide/index.md ./redis_vl_hugo/user_guide/_index.md
216-
cp ./build/markdown/overview/index.md ./redis_vl_hugo/overview/_index.md
251+
cp ./${build_folder}/markdown/api/index.md ./redis_vl_hugo/api/_index.md
252+
cp ./${build_folder}/markdown/user_guide/index.md ./redis_vl_hugo/user_guide/_index.md
253+
cp ./${build_folder}/markdown/overview/index.md ./redis_vl_hugo/overview/_index.md
217254
218255
index_markdown_pages=(
219256
./redis_vl_hugo/api/_index.md
@@ -237,13 +274,19 @@ jobs:
237274
fi
238275
done
239276
240-
cp -r redis_vl_hugo/* content/develop/ai/redisvl/
277+
if [ ${isLatest} = true ]; then
278+
cp -r redis_vl_hugo/* content/develop/ai/redisvl/
279+
else
280+
mkdir content/develop/ai/redisvl/${version}/
281+
cp -r redis_vl_hugo/* content/develop/ai/redisvl/${version}/
282+
python3 build/version_archiver.py redisvl ${version} --skip-archive
283+
fi
241284
242285
- name: 'Create pull request if necessary'
243286
env:
244287
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
245288
run: |
246-
release="${{ steps.sphinx.outputs.release }}"
289+
release="${{ matrix.version }}"
247290
branch="redisvl_docs_sync_${release}"
248291
redisvl_change=false
249292
@@ -254,7 +297,7 @@ jobs:
254297
if [ "$?" -eq 0 ]; then
255298
set -e
256299
# if it does, create local branch off existing remote branch
257-
git checkout -b "${branch}" "origin/${branch}"
300+
git checkout -f -b "${branch}" "origin/${branch}"
258301
git branch --set-upstream-to="origin/${branch}" "${branch}"
259302
git pull
260303
else
@@ -263,9 +306,11 @@ jobs:
263306
git checkout -b "${branch}"
264307
fi
265308
266-
redisvl_is_different=$(git diff content/develop/ai/redisvl/)
309+
set +e
310+
latest_redisvl_release_is_different=$(git diff content/develop/ai/redisvl/)
311+
new_release=$(git ls-files --others --directory | grep content/develop/ai/redisvl/${release})
267312
268-
if [[ ! -z $redisvl_is_different ]]; then
313+
if [[ -n "$latest_redisvl_release_is_different" || -n "$new_release" ]]; then
269314
redisvl_change=true
270315
271316
git add "content/develop/ai/redisvl/"

layouts/partials/docs-nav.html

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,51 @@
105105
{{- end }}
106106
</div>
107107
</div>
108+
{{else if (eq (.Params.linkTitle) "RedisVL")}}
109+
<div id="versionSelectorRedisvl" class="menu__version-selector version-selector-control" onclick="_openVersionSelector('Redisvl')" style="display: none;">
110+
<button class="menu__version-selector-btn version-selector-control">
111+
<span id="versionSelectorRedisvlValue" class="version-selector-control">latest</span>
112+
<span class="menu__version-selector__toggler opener version-selector-control">&#x25BC;</span>
113+
<span class="menu__version-selector__toggler closer version-selector-control">&#x25B2;</span>
114+
</button>
115+
{{- $vers := slice -}}
116+
{{- $lines := slice -}}
117+
118+
{{ if fileExists "redisvl-versions" }}
119+
{{- $txt := readFile "redisvl-versions" -}}
120+
{{- $lines = split $txt "\n" -}}
121+
122+
{{- range $lines }}
123+
{{- $v := strings.TrimSpace . -}}
124+
{{- if and (ne $v "") (findRE `^\d+\.\d+\.\d+$` $v) -}}
125+
{{- $p := split $v "." -}}
126+
{{- $key := printf "%03d.%03d.%03d" (int (index $p 0)) (int (index $p 1)) (int (index $p 2)) -}}
127+
{{- $vers = $vers | append (dict "v" $v "key" $key) -}}
128+
{{- end -}}
129+
{{- end -}}
130+
{{ else }}
131+
{{- $entries := readDir "content/develop/ai/redisvl" -}}
132+
{{- range $e := $entries -}}
133+
{{- if and $e.IsDir (findRE `^\d+\.\d+\.\d+$` $e.Name) -}}
134+
{{- $p := split $e.Name "." -}}
135+
{{- $maj := int (index $p 0) -}}
136+
{{- $min := int (index $p 1) -}}
137+
{{- $pat := int (index $p 2) -}}
138+
{{- $key := printf "%03d.%03d.%03d" $maj $min $pat -}} {{/* for sorting */}}
139+
{{- $vers = $vers | append (dict "v" $e.Name "key" $key) -}}
140+
{{- end -}}
141+
{{- end -}}
142+
{{ end}}
143+
144+
{{- $vers = sort $vers "key" "desc" -}}
145+
146+
<div id="versionDropdownRedisvl" class="menu__version-selector__list version-selector-control">
147+
<a href="{{ absURL "develop/ai/redisvl/" }}" id="redisvl-version-select-latest" onclick="_setSelectedVersion('redisvl', 'latest')">latest</a>
148+
{{- range $vers }}
149+
<a href="{{ (absURL "develop/ai/redisvl/{{ .v }}/") }}" id="redisvl-version-select-{{ .v }}" onclick="_setSelectedVersion('redisvl', 'v{{ .v }}')">v{{ .v }}</a>
150+
{{- end }}
151+
</div>
152+
</div>
108153
</li>
109154

110155
{{end}}

layouts/partials/scripts.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
var currentUrl = window.location.href
9595
const regex_kubernetes = new RegExp('/docs/(latest|staging\/.+)/operate/kubernetes/.*')
9696
const regex_rs = new RegExp('/docs/(latest|staging\/.+)/operate/rs/.*')
97+
const regex_redisvl = new RegExp('/docs/(latest|staging\/.+)/develop/ai/redisvl/.*')
9798

9899
if (regex_kubernetes.test(currentUrl)){
99100
// unhide kubernetes version selector
@@ -103,6 +104,10 @@
103104
// unhide rs version selector
104105
document.getElementById( 'versionSelectorRs' ).style.display = '';
105106
}
107+
else if (regex_redisvl.test(currentUrl)) {
108+
// unhide redisvl version selector
109+
document.getElementById( 'versionSelectorRedisvl' ).style.display = '';
110+
}
106111
}
107112

108113
function _setSelectedVersion(product, ver) {

0 commit comments

Comments
 (0)