1
0
Fork 0
mirror of https://github.com/kubernetes-sigs/node-feature-discovery.git synced 2025-03-31 04:04:51 +00:00
node-feature-discovery/scripts/github/update-gh-pages.sh
Markus Lehtonen ad042f92f5 scripts/update-gh-pages: only update docs if version has been released
Only update documentation if the version has been released (i.e. a git
tag corresponding the version we're updating exists) or it is for the
master branch. Prevents us from pointing users to documentation of an
unreleased version.

Also updates github workflow to fetch full commit history (including
tags) so that git describe works correctly.
2020-12-03 12:54:14 +02:00

165 lines
3.9 KiB
Bash
Executable file

#!/bin/bash -e
set -o pipefail
this=`basename $0`
usage () {
cat << EOF
Usage: $this [-h] [-a] [SITE_SUBDIR]
Options:
-h show this help and exit
-a amend (with --reset-author) instead of creating a new commit
-p REMOTE do git push to remote repo
EOF
}
# Helper function for detecting available versions from the current directory
create_versions_js() {
local _baseurl="/node-feature-discovery"
echo -e "function getVersionListItems() {\n return ["
# 'stable' is a symlink pointing to the latest version
[ -f stable ] && echo " { name: 'stable', url: '$_baseurl/stable' },"
for f in `ls -d */ | tr -d /` ; do
echo " { name: '$f', url: '$_baseurl/$f' },"
done
echo -e " ];\n}"
}
#
# Argument parsing
#
while getopts "hap:" opt; do
case $opt in
h) usage
exit 0
;;
a) amend="--amend --reset-author"
;;
p) push_remote="$OPTARG"
;;
*) usage
exit 1
;;
esac
done
shift "$((OPTIND - 1))"
site_subdir="$1"
# Check that no extra args were provided
if [ $# -gt 1 ]; then
echo "ERROR: extra positional arguments: $@"
usage
exit 1
fi
#
# Build the documentation
#
build_dir="docs/_site"
echo "Creating new Git worktree at $build_dir"
git worktree add "$build_dir" gh-pages
# Drop worktree on exit
trap "echo 'Removing Git worktree $build_dir'; git worktree remove '$build_dir'" EXIT
# Parse subdir name from GITHUB_REF
if [ -z "$site_subdir" ]; then
case "$GITHUB_REF" in
refs/tags/*)
_base_ref=${GITHUB_REF#refs/tags/}
;;
refs/heads/*)
_base_ref=${GITHUB_REF#refs/heads/}
;;
*) _base_ref=
esac
echo "Parsed baseref: '$_base_ref'"
case "$GITHUB_REF" in
refs/tags/v*)
_version=${GITHUB_REF#refs/tags/v}
;;
refs/heads/release-*)
_version=${GITHUB_REF#refs/heads/release-}
;;
*) _version=
esac
echo "Detected version: '$_version'"
_version=`echo -n $_version | sed -nE s'!^([0-9]+\.[0-9]+).*$!\1!p'`
# User version as the subdir
site_subdir=${_version:+v$_version}
# Fallback to base-ref i.e. name of the branch or tag
site_subdir=${site_subdir:-$_base_ref}
fi
# Default to 'master' if no subdir was given and we couldn't parse
# it
site_subdir=${site_subdir:-master}
# Check if this ref is for a released version
if [ "$site_subdir" != "master" ]; then
_base_tag=`git describe --abbrev=0 || :`
case "$_base_tag" in
$site_subdir*)
;;
*)
echo "Not a released version. Parsed release branch is $site_subdir but based on tag $_base_tag. Stopping here."
exit 0
;;
esac
fi
echo "Updating site subdir: '$site_subdir'"
export SITE_DESTDIR="_site/$site_subdir"
export SITE_BASEURL="/node-feature-discovery/$site_subdir"
export JEKYLL_ENV=production
make site-build
#
# Update gh-pages branch
#
if [ -n "$_GIT_TAG" ]; then
commit_hash=${GIT_TAG:10}
else
commit_hash=`git describe --dirty --always`
fi
# Switch to work in the gh-pages worktree
cd "$build_dir"
_stable=`(ls -d1 v*/ || :) | sort -n | tail -n1`
[ -n "$_stable" ] && ln -sfT "$_stable" stable
# Detect existing versions from the gh-pages branch
create_versions_js > versions.js
cat > index.html << EOF
<meta http-equiv="refresh" content="0; URL='stable/'"/>
EOF
if [ -z "`git status --short`" ]; then
echo "No new content, gh-pages branch already up-to-date"
exit 0
fi
# Create a new commit
commit_msg=`echo -e "Update documentation for $SITE_SUBDIR\n\nAuto-generated from $commit_hash by '$this'"`
echo "Committing changes..."
git add .
git commit $amend -m "$commit_msg"
cd -
echo "gh-pages branch successfully updated"
if [ -n "$push_remote" ]; then
echo "Pushing gh-pages to $push_remote"
git push ${amend+-f} "$push_remote" gh-pages
fi