forked from goharbor/website
-
Notifications
You must be signed in to change notification settings - Fork 0
/
load-docs.sh
executable file
·164 lines (129 loc) · 5.17 KB
/
load-docs.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#!/bin/bash
# Original file from the Open Policy Agent project: https://github.com/open-policy-agent/opa/blob/master/docs/website/scripts/load-docs.sh
set -xe
ORIGINAL_COMMIT=$(git symbolic-ref -q --short HEAD || git name-rev --name-only HEAD)
# If no name can be found "git name-rev" returns
# "undefined", in which case we'll just use the
# current commit ID.
if [[ "${ORIGINAL_COMMIT}" == "undefined" ]]; then
ORIGINAL_COMMIT=$(git rev-parse HEAD)
fi
ROOT_DIR=$(git rev-parse --show-toplevel)
#RELEASES_YAML_FILE=${ROOT_DIR}/data/releases.yaml
GIT_VERSION=$(git --version)
# Look at the git tags and generate a list of releases
# that we want to show docs for.
if [[ -z ${OFFLINE} ]]; then
git fetch ${REPOSITORY_URL:-https://github.com/goharbor/website.git}
fi
ALL_RELEASES=$(git ls-remote https://github.com/goharbor/website | grep release | awk -F/ '{print $3}' | sort -r -V)
RELEASES=()
PREV_MAJOR_VER="-1"
PREV_MINOR_VER="-1"
for release in ${ALL_RELEASES}; do
CUR_SEM_VER=${release#"release-"}
# ignore any release candidate versions, for now if they
# are the "latest" they'll be documented under "edge"
if [[ "${CUR_SEM_VER}" == *"rc"* ]]; then
continue
fi
# this is just a dirty fix to not use the 1.10.0 branch
if [[ "${CUR_SEM_VER}" == *"1.10.0"* ]]; then
continue
fi
SEMVER_REGEX='[^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)\([0-9A-Za-z-]*\)'
CUR_MAJOR_VER=$(echo ${CUR_SEM_VER} | sed -e "s#${SEMVER_REGEX}#\1#")
CUR_MINOR_VER=$(echo ${CUR_SEM_VER} | sed -e "s#${SEMVER_REGEX}#\2#")
CUR_PATCH_VER=$(echo ${CUR_SEM_VER} | sed -e "s#${SEMVER_REGEX}#\3#")
# ignore versions from before we used this static site generator
if [[ (${CUR_MAJOR_VER} -lt 1) || \
(${CUR_MAJOR_VER} -le 1 && ${CUR_MINOR_VER} -lt 10) ]]; then
continue
fi
# The releases are sorted in order by semver from newest to oldest, and we only want
# the latest point release for each minor version
if [[ "${CUR_MAJOR_VER}" != "${PREV_MAJOR_VER}" || \
("${CUR_MAJOR_VER}" = "${PREV_MAJOR_VER}" && \
"${CUR_MINOR_VER}" != "${PREV_MINOR_VER}") ]]; then
RELEASES+=(${release})
fi
PREV_MAJOR_VER=${CUR_MAJOR_VER}
PREV_MINOR_VER=${CUR_MINOR_VER}
done
echo "Git version: ${GIT_VERSION}"
echo "Saving current workspace state"
STASH_TOKEN=$(cat /dev/urandom | LC_CTYPE=C tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)
git stash push --include-untracked -m "${STASH_TOKEN}"
function restore_tree {
echo "Returning to commit ${ORIGINAL_COMMIT}"
git checkout ${ORIGINAL_COMMIT}
# Only pop from the stash if we had stashed something earlier
if [[ -n "$(git stash list | head -1 | grep ${STASH_TOKEN} || echo '')" ]]; then
git stash pop
fi
}
function cleanup {
EXIT_CODE=$?
if [[ "${EXIT_CODE}" != "0" ]]; then
# on errors attempt to restore the starting tree state
restore_tree
echo "Error loading docs"
exit ${EXIT_CODE}
fi
echo "Docs loading complete"
}
trap cleanup EXIT
echo "Cleaning generated folder"
rm -rf ${ROOT_DIR}/generated/*
#echo "Removing data/releases.yaml file"
#rm -f ${RELEASES_YAML_FILE}
#mkdir -p $(dirname ${RELEASES_YAML_FILE})
#echo 'Adding "latest" version to releases.yaml'
#echo "- latest" > ${RELEASES_YAML_FILE}
# include the main branch as we want to be able to display the latest main
RELEASES+=("main")
for release in "${RELEASES[@]}"; do
echo "Checking out release ${release}"
# Don't error if the checkout fails
set +e
if [[ ${release} != "main" ]]; then
git fetch https://github.com/goharbor/website.git ${release}:${release}-local
git checkout ${release}-local
else
git fetch https://github.com/goharbor/website.git ${release}:main-dev
git checkout main-dev
fi
errc=$?
set -e
# only add the version to the releases.yaml data file
# if we were able to check out the version, otherwise skip it..
# if [[ "${errc}" == "0" ]]; then
# echo "Adding ${release} to releases.yaml"
# echo "- ${release}" >> ${RELEASES_YAML_FILE}
# else
# echo "WARNING: Failed to check out version ${version}!!"
# fi
if [[ ${release} != "main" ]]; then
release=$(echo $release | awk -F- '{print $2}')
version_docs_dir=${ROOT_DIR}/generated/docs/${release}
else
version_docs_dir=${ROOT_DIR}/generated/docs/${release}
fi
mkdir -p ${version_docs_dir}
echo "Copying doc content from tag ${release}"
cp -r ${ROOT_DIR}/docs/* ${version_docs_dir}/
done
# Move generated content to the right place
rm -fr content/docs/*
mkdir -p content/docs
mv generated/docs/* content/docs
# Go back to the original tree state
restore_tree
# Create the "edge" version from current working tree
#echo 'Adding "edge" to releases.yaml'
#echo "- edge" >> ${RELEASES_YAML_FILE}
# Link instead of copy so we don't need to re-generate each time.
# Use a relative link so it works in a container more easily.
ln -s ${ROOT_DIR}/docs ${ROOT_DIR}/content/docs/edge
# Create a "latest" version from the latest semver found
#ln -s ${ROOT_DIR}/docs/website/generated/docs/${RELEASES[0]} ${ROOT_DIR}/docs/website/generated/docs/latest