mirror of
git://git.yoctoproject.org/yocto-autobuilder-helper.git
synced 2025-07-19 20:59:02 +02:00

Add a modified 5.1 buildtools tarball for docs builds which has support for svg -> png conversion using rsvg-convert. Older releases need older docs buildtools. Add support for this in the build script for docs, installing both and choosing depending on how old the main release branch is. For now I've put the changeover at scarthgap, it may be possible to make it older. I know kirkstone fails with the new tools. Bitbake doesn't need this since it's docs work fine with both versions. The actual docs build is done in a subshell so we can choose the environment. We may need to improve the selection logic in future since some branches may start to build with the newer tools after backports. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
248 lines
9.0 KiB
Bash
Executable File
248 lines
9.0 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
# Called with $1 as the build directory
|
|
# $2 as the path to yocto-docs
|
|
# $3 as the path to bitbake
|
|
#
|
|
# Environment variables:
|
|
# - buildtools_url as the path to buildtools script for the docs.
|
|
# Can be found here: https://autobuilder.yocto.io/pub/buildtools/
|
|
# - docbookarchive_url as the path to old (pre 3.1.5 and Sphinx migration) docs tarball
|
|
# Can be found here: https://downloads.yoctoproject.org/mirror/docbook-mirror/docbook-archives-20201105.tar.xz
|
|
# - PUBLISH (0/1) for whether the files should be rsync'ed to docs.yoctoproject.org
|
|
|
|
set -e
|
|
set -u
|
|
set -o pipefail
|
|
set -x
|
|
|
|
builddir=$(realpath "$1")
|
|
ypdocs=$(realpath "$2/documentation/")
|
|
bbdocs=$(realpath "$3/doc/")
|
|
outputdir=$builddir/output
|
|
scriptdir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
|
|
PUBLISH=${PUBLISH:-1}
|
|
sharedir=`jq -r '.["BASE_SHAREDDIR"]' < $HOME/config-local.json`
|
|
# Modified 5.1 tools image to include rsvg, switch to next released version
|
|
buildtools_url=${buildtools_url:-https://downloads.yoctoproject.org/releases/yocto/yocto-4.1.2/buildtools/x86_64-buildtools-docs-nativesdk-standalone-5.1-modified.sh}
|
|
buildtools_url_old=${buildtools_url_old:-https://downloads.yoctoproject.org/releases/yocto/yocto-4.1.2/buildtools/x86_64-buildtools-docs-nativesdk-standalone-4.1.2.sh}
|
|
docbookarchive_url=${docbookarchive_url:-https://downloads.yoctoproject.org/mirror/docbook-mirror/docbook-archives-20201105.tar.xz}
|
|
|
|
|
|
buildtools_name=`basename $buildtools_url`
|
|
buildtools_localpath=${sharedir}/cluster-downloads-cache/${buildtools_name}
|
|
if [ ! -e ${buildtools_localpath} ]; then
|
|
mkdir -p `dirname ${buildtools_localpath}`
|
|
wget ${buildtools_url} -O ${buildtools_localpath}
|
|
chmod a+x ${buildtools_localpath}
|
|
fi
|
|
cd $builddir
|
|
mkdir buildtools
|
|
${buildtools_localpath} -y -d $builddir/buildtools
|
|
|
|
|
|
buildtools_name_old=`basename $buildtools_url_old`
|
|
buildtools_localpath_old=${sharedir}/cluster-downloads-cache/${buildtools_name_old}
|
|
if [ ! -e ${buildtools_localpath_old} ]; then
|
|
mkdir -p `dirname ${buildtools_localpath_old}`
|
|
wget ${buildtools_url_old} -O ${buildtools_localpath_old}
|
|
chmod a+x ${buildtools_localpath_old}
|
|
fi
|
|
|
|
cd $builddir
|
|
mkdir buildtools-old
|
|
${buildtools_localpath_old} -y -d $builddir/buildtools-old
|
|
|
|
|
|
# To build the latexpdf output we need Xetex (which can handle international characters)
|
|
# Rather than require it on all autobuilder workers, along with dependencies, we install
|
|
# a copy onto NFS which the workers can use. The full install is 6GB so just install
|
|
# the pieces we've found we need via tlmgr on top of a small install. This script
|
|
# creates the install if it isn't present.
|
|
# For local docs builds, we assume the user has the tools available.
|
|
if [ -e /srv/autobuilder/valkyrie.yocto.io/ ]; then
|
|
textooldir=/srv/autobuilder/valkyrie.yocto.io/docs-build-tex-tools
|
|
if [ ! -e ${textooldir} ]; then
|
|
mkdir -p /tmp/textemp
|
|
pushd /tmp/textemp
|
|
wget https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
|
|
zcat < install-tl-unx.tar.gz | tar xf -
|
|
cd install-tl-*/
|
|
./install-tl --scheme=small --texdir=${textooldir} --no-interaction
|
|
PATH=$PATH:${textooldir}/bin/x86_64-linux tlmgr install titlesec varwidth tabulary needspace upquote framed capt-of wrapfig fncychap gnu-freefont ctex latexmk
|
|
popd
|
|
fi
|
|
PATH=$PATH:${textooldir}/bin/x86_64-linux
|
|
fi
|
|
|
|
# Getting the old docbook built docs from an archive. Not rebuilding them.
|
|
docbookarchive_localpath=${sharedir}/cluster-downloads-cache/`basename ${docbookarchive_url}`
|
|
if [ ! -e ${docbookarchive_localpath} ]; then
|
|
mkdir -p `dirname ${docbookarchive_localpath}`
|
|
wget ${docbookarchive_url} -O ${docbookarchive_localpath}
|
|
fi
|
|
|
|
mkdir $outputdir
|
|
cd $outputdir
|
|
echo Extracing old content from archive
|
|
tar --exclude=eclipse -xJf ${docbookarchive_localpath}
|
|
|
|
$scriptdir/docs_add_banner.py
|
|
|
|
cd $bbdocs
|
|
mkdir $outputdir/bitbake
|
|
|
|
# A decision was made to keep updating all the Sphinx generated docs for the moment,
|
|
# even the ones corresponding to no longer supported releases
|
|
# https://lists.yoctoproject.org/g/docs/message/2193
|
|
# We copy the releases.rst file from master so that all versions of the docs
|
|
# see the latest releases.
|
|
first_sphinx_commit=84ccba0f4aff91528f764523fe1205a354c889ed
|
|
|
|
latest_branch=$(git branch --remote --contains "$first_sphinx_commit" --format '%(refname:lstrip=3)' --sort='-version:refname' | grep --max-count=1 "[0-9]*\.[0-9]*")
|
|
|
|
for branch in 1.46 $(git branch --remote --contains "$first_sphinx_commit" --format '%(refname:lstrip=3)'); do
|
|
if [ "$branch" = "HEAD" ]; then
|
|
continue
|
|
fi
|
|
|
|
echo Building bitbake $branch branch
|
|
git checkout $branch
|
|
git reset --hard
|
|
git clean -ffdx
|
|
git checkout origin/master releases.rst
|
|
|
|
(
|
|
. $builddir/buildtools/environment-setup*
|
|
make clean
|
|
SPHINXOPTS="-j auto" make publish
|
|
)
|
|
|
|
if [ "$branch" = "master-next" ]; then
|
|
branch="next"
|
|
mkdir $outputdir/bitbake/$branch
|
|
elif [ "$branch" = "master" ]; then
|
|
branch="dev"
|
|
mkdir $outputdir/bitbake/$branch
|
|
elif [ "$branch" = "$latest_branch" ]; then
|
|
branch=""
|
|
mkdir $outputdir/bitbake/$latest_branch
|
|
cp -r ./_build/final/* $outputdir/bitbake/$latest_branch
|
|
else
|
|
mkdir $outputdir/bitbake/$branch
|
|
fi
|
|
|
|
cp -r ./_build/final/* $outputdir/bitbake/$branch
|
|
git reset --hard
|
|
git clean -ffdx
|
|
done
|
|
|
|
if [ "$PUBLISH" -ne 0 ]; then
|
|
# only sync bitbake folder for now. We need bitbake to be published first
|
|
# since the bitbake intersphinx index will be downloaded to build yocto-docs
|
|
cd $outputdir
|
|
rsync -irlp --checksum --ignore-times --delete bitbake docs@docs.yoctoproject.org:docs/
|
|
fi
|
|
|
|
cd $ypdocs
|
|
|
|
# transition must build after master for the switchers.js file
|
|
# Again, keeping even the no longer supported releases (see above comment)
|
|
first_sphinx_commit=01dd5af7954e24552aca022917669b27bb0541ed
|
|
first_dunfell_sphinx_commit=c25fe058b88b893b0d146f3ed27320b47cdec236
|
|
|
|
ypdocsbranch=$(git symbolic-ref -q --short HEAD || git rev-parse HEAD)
|
|
|
|
git checkout origin/master set_versions.py
|
|
#latest_tag=$(git tag --contains "$first_sphinx_commit" --contains "$first_dunfell_sphinx_commit" --sort="version:refname" 'yocto-*' | tail -1 | sed 's/yocto-//')
|
|
latest_tag=$(./set_versions.py getlatest)
|
|
git reset --hard
|
|
git clean -ffdx
|
|
|
|
for branch in "$ypdocsbranch" dunfell $(git branch --remote --contains "$first_sphinx_commit" --format '%(refname:lstrip=3)') $(git tag --contains "$first_sphinx_commit" --contains "$first_dunfell_sphinx_commit" 'yocto-*') transition; do
|
|
if [ "$branch" = "HEAD" ]; then
|
|
continue
|
|
fi
|
|
|
|
# Do not build <release>-next branches as they are development branches only
|
|
# Do build master-next branch and request branch though!
|
|
if echo "$branch" | grep -v "master-next\|$ypdocsbranch" | grep -q -E "-next$"; then
|
|
continue
|
|
fi
|
|
# Do not build contrib/ branches as they are development branches only
|
|
# Do build request branch though!
|
|
if echo "$branch" | grep -v "$ypdocsbranch" | grep -q -E "^contrib/"; then
|
|
continue
|
|
fi
|
|
|
|
echo Building $branch
|
|
git checkout $branch
|
|
git reset --hard
|
|
git clean -ffdx
|
|
|
|
if [ -e "${scriptdir}/docs-build-patches/${branch}/" ]; then
|
|
echo Adding patch for $branch
|
|
git am "${scriptdir}/docs-build-patches/${branch}/"000*
|
|
fi
|
|
|
|
git checkout origin/master sphinx-static/switchers.js.in set_versions.py
|
|
if [ -e poky.yaml ]; then
|
|
cp poky.yaml poky.yaml.in
|
|
case $branch in
|
|
yocto-*)
|
|
./set_versions.py $(echo "$branch" | sed 's/yocto-//')
|
|
;;
|
|
*)
|
|
./set_versions.py
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
(
|
|
# Anything older than scarthgap needs the older buildtools
|
|
if git merge-base --is-ancestor 0cdc0afd3332459d30cfc8f4c2e62bdcc23f5ed5 HEAD; then
|
|
. $builddir/buildtools/environment-setup*
|
|
else
|
|
. $builddir/buildtools-old/environment-setup*
|
|
fi
|
|
make clean
|
|
SPHINXOPTS="-j auto" make publish
|
|
)
|
|
|
|
# Strip yocto- from tag names
|
|
branch=$(echo "$branch" | sed 's/yocto-//')
|
|
|
|
if [ "$branch" = "master-next" ]; then
|
|
branch="next"
|
|
mkdir -p $outputdir/$branch
|
|
elif [ "$branch" = "master" ]; then
|
|
branch="dev"
|
|
mkdir -p $outputdir/$branch
|
|
elif [ "$branch" = "$latest_tag" ]; then
|
|
branch=""
|
|
mkdir -p $outputdir/$latest_tag
|
|
cp -r ./_build/final/* $outputdir/$latest_tag
|
|
echo Linking to $latest_tag as current
|
|
ln -s $latest_tag $outputdir/current
|
|
elif [ "$branch" = "transition" ]; then
|
|
branch=""
|
|
else
|
|
mkdir -p $outputdir/$branch
|
|
fi
|
|
|
|
cp -r ./_build/final/* $outputdir/$branch
|
|
git reset --hard
|
|
git clean -ffdx
|
|
done
|
|
|
|
# Update bitbake switchers.js with the copy from master ypdocs
|
|
cd $outputdir/bitbake
|
|
find . -name switchers.js -exec cp $outputdir/current/_static/switchers.js {} \;
|
|
|
|
if [ "$PUBLISH" -ne 0 ]; then
|
|
cd $outputdir
|
|
rsync -irlp --checksum --ignore-times --delete . docs@docs.yoctoproject.org:docs/
|
|
fi
|