|
|
|
#!/bin/sh
|
|
|
|
#
|
|
|
|
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
|
|
|
|
#
|
|
|
|
# This file is part of cdist.
|
|
|
|
#
|
|
|
|
# cdist is free software: you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License as published by
|
|
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
|
|
# (at your option) any later version.
|
|
|
|
#
|
|
|
|
# cdist is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
# GNU General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
|
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# Push a directory to a target, both sides have the same name (i.e. explorers)
|
|
|
|
# or
|
|
|
|
# Pull a directory from a target, both sides have the same name (i.e. explorers)
|
|
|
|
#
|
|
|
|
|
|
|
|
# exit on any error
|
|
|
|
#set -e
|
|
|
|
|
|
|
|
basedir=${0%/*}
|
|
|
|
version=$(git describe)
|
|
|
|
|
|
|
|
# Manpage and HTML
|
|
|
|
A2XM="a2x -f manpage --no-xmllint -a encoding=UTF-8"
|
|
|
|
A2XH="a2x -f xhtml --no-xmllint -a encoding=UTF-8"
|
|
|
|
|
|
|
|
# Developer webbase
|
|
|
|
WEBDIR=$HOME/www.nico.schottelius.org
|
|
|
|
WEBBLOG=$WEBDIR/blog
|
|
|
|
WEBTOPDIR=$WEBDIR/software
|
|
|
|
WEBBASE=$WEBTOPDIR/cdist
|
|
|
|
WEBMAN=$WEBBASE/man/$version
|
|
|
|
WEBPAGE=${WEBBASE}.mdwn
|
|
|
|
|
|
|
|
# Documentation
|
|
|
|
MANDIR=docs/man
|
|
|
|
MAN1DSTDIR=${MANDIR}/man1
|
|
|
|
MAN7DSTDIR=${MANDIR}/man7
|
|
|
|
SPEECHESDIR=docs/speeches
|
|
|
|
|
|
|
|
# Change to checkout directory
|
|
|
|
cd "$basedir"
|
|
|
|
|
|
|
|
case "$1" in
|
|
|
|
man)
|
|
|
|
set -e
|
|
|
|
"$0" mangen
|
|
|
|
"$0" mantype
|
|
|
|
"$0" manbuild
|
|
|
|
;;
|
|
|
|
|
|
|
|
manbuild)
|
|
|
|
trap abort INT
|
|
|
|
abort() {
|
|
|
|
kill 0
|
|
|
|
}
|
|
|
|
for section in 1 7; do
|
|
|
|
for src in ${MANDIR}/man${section}/*.text; do
|
|
|
|
manpage="${src%.text}.$section"
|
|
|
|
if [ ! -f "$manpage" -o "$manpage" -ot "$src" ]; then
|
|
|
|
echo "Compiling man page for $src"
|
|
|
|
$A2XM "$src"
|
|
|
|
fi
|
|
|
|
htmlpage="${src%.text}.html"
|
|
|
|
if [ ! -f "$htmlpage" -o "$htmlpage" -ot "$src" ]; then
|
|
|
|
echo "Compiling html page for $src"
|
|
|
|
$A2XH "$src"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
done
|
|
|
|
;;
|
|
|
|
|
|
|
|
mantype)
|
|
|
|
for mansrc in cdist/conf/type/*/man.text; do
|
|
|
|
dst="$(echo $mansrc | sed -e 's;cdist/conf/;cdist-;' -e 's;/;;' -e 's;/man;;' -e 's;^;docs/man/man7/;')"
|
|
|
|
ln -sf "../../../$mansrc" "$dst"
|
|
|
|
done
|
|
|
|
;;
|
|
|
|
|
|
|
|
mangen)
|
|
|
|
${MANDIR}/cdist-reference.text.sh
|
|
|
|
;;
|
|
|
|
|
|
|
|
man-pub)
|
|
|
|
$0 man
|
|
|
|
|
|
|
|
version=$($0 changelog-version)
|
|
|
|
|
|
|
|
rm -rf "${WEBMAN}"
|
|
|
|
mkdir -p "${WEBMAN}/man1" "${WEBMAN}/man7"
|
|
|
|
cp ${MAN1DSTDIR}/*.html ${MAN1DSTDIR}/*.css ${WEBMAN}/man1
|
|
|
|
cp ${MAN7DSTDIR}/*.html ${MAN7DSTDIR}/*.css ${WEBMAN}/man7
|
|
|
|
cd ${WEBMAN} && git add . && git commit -m "Cdist Manpage update: $version"
|
|
|
|
;;
|
|
|
|
|
|
|
|
dist)
|
|
|
|
set -e
|
|
|
|
# Do the checks
|
|
|
|
$0 dist-check
|
|
|
|
|
|
|
|
# Git changes - everything depends on this
|
|
|
|
$0 dist-tag
|
|
|
|
$0 dist-branch-merge
|
|
|
|
|
|
|
|
# Pypi first - is the base for others
|
|
|
|
$0 dist-pypi
|
|
|
|
|
|
|
|
# Archlinux depends on successful pypi ;-)
|
|
|
|
$0 dist-archlinux
|
|
|
|
|
|
|
|
# Update website (includes documentation)
|
|
|
|
$0 web
|
|
|
|
|
|
|
|
# Update manpages on website
|
|
|
|
$0 man-pub
|
|
|
|
|
|
|
|
# update git repos
|
|
|
|
$0 pub
|
|
|
|
|
|
|
|
$0 dist-blog
|
|
|
|
$0 dist-freecode
|
|
|
|
$0 dist-ml
|
|
|
|
$0 dist-manual
|
|
|
|
;;
|
|
|
|
|
|
|
|
changelog-changes)
|
|
|
|
awk -F: 'BEGIN { start=0 } { if ($0 ~ /^[[:digit:]]/) { if(start == 0) {start = 1 } else { exit } } else { if(start==1) {print $0 }} }' "$basedir/docs/changelog"
|
|
|
|
;;
|
|
|
|
|
|
|
|
changelog-version)
|
|
|
|
# get version from changelog and ensure it's not already present
|
|
|
|
grep '^[[:digit:]]' "$basedir/docs/changelog" | head -n1 | sed 's/:.*//'
|
|
|
|
;;
|
|
|
|
|
|
|
|
dist-check)
|
|
|
|
set -e
|
|
|
|
echo "Verifying documentation building works ..."
|
|
|
|
$0 clean
|
|
|
|
$0 man
|
|
|
|
|
|
|
|
changelog_version=$($0 changelog-version)
|
|
|
|
echo "Target version from changelog: $changelog_version"
|
|
|
|
|
|
|
|
if git show --quiet $changelog_version >/dev/null 2>&1; then
|
|
|
|
echo "Version $changelog_version already exists, aborting."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# verify date in changelog
|
|
|
|
date_today="$(date +%Y-%m-%d)"
|
|
|
|
date_changelog=$(grep '^[[:digit:]]' "$basedir/docs/changelog" | head -n1 | sed 's/.*: //')
|
|
|
|
|
|
|
|
if [ "$date_today" != "$date_changelog" ]; then
|
|
|
|
echo "Date in changelog is not today"
|
|
|
|
echo "Changelog: $date_changelog"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
blog)
|
|
|
|
version=$($0 changelog-version)
|
|
|
|
blogfile=$WEBBLOG/cdist-${version}-released.mdwn
|
|
|
|
cat << eof > "$blogfile"
|
|
|
|
[[!meta title="Cdist $version released"]]
|
|
|
|
|
|
|
|
Here's a short overview about the changes found in this release:
|
|
|
|
|
|
|
|
eof
|
|
|
|
|
|
|
|
$0 changelog-changes >> "$blogfile"
|
|
|
|
|
|
|
|
cat << eof >> "$blogfile"
|
|
|
|
For more information visit the [[cdist homepage|software/cdist]].
|
|
|
|
|
|
|
|
[[!tag cdist config unix]]
|
|
|
|
eof
|
|
|
|
;;
|
|
|
|
|
|
|
|
dist-blog)
|
|
|
|
$0 blog
|
|
|
|
version=$($0 changelog-version)
|
|
|
|
file=cdist-${version}-released.mdwn
|
|
|
|
cd "$WEBBLOG"
|
|
|
|
git add "$file"
|
|
|
|
git commit -m "New cdist version (blogentry): $version" "$file"
|
|
|
|
git push
|
|
|
|
;;
|
|
|
|
|
|
|
|
dist-ml)
|
|
|
|
$0 blog
|
|
|
|
version=$($0 changelog-version)
|
|
|
|
to_a=cdist
|
|
|
|
to_d=l.schottelius.org
|
|
|
|
to=${to_a}@${to_d}
|
|
|
|
|
|
|
|
from_a=nico-cdist
|
|
|
|
from_d=schottelius.org
|
|
|
|
from=${from_a}@${from_d}
|
|
|
|
|
|
|
|
(
|
|
|
|
cat << eof
|
|
|
|
From: Nico -telmich- Schottelius <$from>
|
|
|
|
To: cdist mailing list <$to>
|
|
|
|
Subject: cdist $version released
|
|
|
|
|
|
|
|
Hello .*,
|
|
|
|
|
|
|
|
cdist $version has been released with the following changes:
|
|
|
|
|
|
|
|
eof
|
|
|
|
|
|
|
|
"$0" changelog-changes
|
|
|
|
cat << eof
|
|
|
|
|
|
|
|
Cheers,
|
|
|
|
|
|
|
|
Nico
|
|
|
|
|
|
|
|
--
|
|
|
|
Automatisation at its best level. With cdist.
|
|
|
|
eof
|
|
|
|
) | /usr/sbin/sendmail -f "$from" "$to"
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
dist-manual)
|
|
|
|
cat << notes
|
|
|
|
|
|
|
|
To be done manually...
|
|
|
|
|
|
|
|
- linkedin entry
|
|
|
|
notes
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
dist-tag)
|
|
|
|
version=$($0 changelog-version)
|
|
|
|
# add tag
|
|
|
|
printf "Enter tag description for %s> " "$version"
|
|
|
|
read tagmessage
|
|
|
|
git tag "$version" -m "$tagmessage"
|
|
|
|
;;
|
|
|
|
|
|
|
|
dist-branch-merge)
|
|
|
|
version=$($0 changelog-version)
|
|
|
|
target_branch=${version%\.*}
|
|
|
|
current_branch=$(git rev-parse --abbrev-ref HEAD)
|
|
|
|
|
|
|
|
if [ "$target_branch" = "$current_branch" ]; then
|
|
|
|
echo "Skipping merge, already on destination branch"
|
|
|
|
else
|
|
|
|
printf "Press enter to git merge $current_branch into \"$target_branch\" > "
|
|
|
|
read prompt
|
|
|
|
git checkout "$target_branch"
|
|
|
|
git merge "$current_branch"
|
|
|
|
git checkout "$current_branch"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
|
|
|
|
dist-archlinux)
|
|
|
|
$0 dist-archlinux-makepkg
|
|
|
|
$0 dist-archlinux-aur-upload
|
|
|
|
;;
|
|
|
|
|
|
|
|
dist-archlinux-makepkg)
|
|
|
|
./PKGBUILD.in
|
|
|
|
makepkg -c --source
|
|
|
|
;;
|
|
|
|
|
|
|
|
dist-archlinux-aur-upload)
|
|
|
|
version=$($0 changelog-version)
|
|
|
|
tar=cdist-${version}-1.src.tar.gz
|
|
|
|
burp -c system "$tar"
|
|
|
|
;;
|
|
|
|
|
|
|
|
dist-freecode)
|
|
|
|
version=$($0 changelog-version)
|
|
|
|
api_token=$(awk '/machine freecode login/ { print $8 }' ~/.netrc)
|
|
|
|
|
|
|
|
printf "Enter tag list for freecode release %s> " "$version"
|
|
|
|
read taglist
|
|
|
|
|
|
|
|
printf "Enter changelog for freecode release %s> " "$version"
|
|
|
|
read changelog
|
|
|
|
|
|
|
|
echo "Submit preview"
|
|
|
|
cat << eof
|
|
|
|
tag_list = $taglist
|
|
|
|
changelog = $changelog
|
|
|
|
version = $version
|
|
|
|
eof
|
|
|
|
printf "Press enter to submit to freecode> "
|
|
|
|
read dummy
|
|
|
|
|
|
|
|
cat << eof | cfreecode-api release-add cdist
|
|
|
|
{
|
|
|
|
"auth_code": "$api_token",
|
|
|
|
"release": {
|
|
|
|
"tag_list": "$taglist",
|
|
|
|
"version": "$version",
|
|
|
|
"changelog": "$changelog",
|
|
|
|
"hidden_from_frontpage": false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
eof
|
|
|
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
dist-pypi)
|
|
|
|
$0 man
|
|
|
|
$0 version
|
|
|
|
python3 setup.py sdist upload
|
|
|
|
;;
|
|
|
|
|
|
|
|
speeches)
|
|
|
|
cd "$SPEECHESDIR"
|
|
|
|
for speech in *tex; do
|
|
|
|
pdflatex "$speech"
|
|
|
|
pdflatex "$speech"
|
|
|
|
pdflatex "$speech"
|
|
|
|
done
|
|
|
|
;;
|
|
|
|
|
|
|
|
web)
|
|
|
|
set -e
|
|
|
|
rsync -av "${basedir}/docs/web/" "${WEBTOPDIR}"
|
|
|
|
|
|
|
|
cd "${WEBDIR}" && git add "${WEBBASE}"
|
|
|
|
cd "${WEBDIR}" && git commit -m "cdist update" "${WEBBASE}" "${WEBPAGE}"
|
|
|
|
cd "${WEBDIR}" && make pub
|
|
|
|
|
|
|
|
# Fix ikiwiki, which does not like symlinks for pseudo security
|
|
|
|
ssh tee.schottelius.org \
|
|
|
|
"cd /home/services/www/nico/www.nico.schottelius.org/www/software/cdist/man &&
|
|
|
|
rm -f latest && ln -sf "$version" latest"
|
|
|
|
;;
|
|
|
|
|
|
|
|
p|pu|pub)
|
|
|
|
for remote in "" github sf ethz; do
|
|
|
|
echo "Pushing to $remote"
|
|
|
|
git push --mirror $remote
|
|
|
|
done
|
|
|
|
;;
|
|
|
|
|
|
|
|
clean)
|
|
|
|
rm -f ${MAN7DSTDIR}/cdist-reference.text
|
|
|
|
|
|
|
|
find "${MANDIR}" -mindepth 2 -type l \
|
|
|
|
-o -name "*.1" \
|
|
|
|
-o -name "*.7" \
|
|
|
|
-o -name "*.html" \
|
|
|
|
-o -name "*.xml" \
|
|
|
|
| xargs rm -f
|
|
|
|
|
|
|
|
find * -name __pycache__ | xargs rm -rf
|
|
|
|
;;
|
|
|
|
clean-dist)
|
|
|
|
rm -f cdist/version.py MANIFEST PKGBUILD
|
|
|
|
rm -rf cache/ dist/
|
|
|
|
|
|
|
|
# Archlinux
|
|
|
|
rm -f cdist-*.pkg.tar.xz cdist-*.tar.gz
|
|
|
|
rm -rf pkg/ src/
|
|
|
|
;;
|
|
|
|
|
|
|
|
very-clean)
|
|
|
|
$0 clean
|
|
|
|
$0 clean-dist
|
|
|
|
;;
|
|
|
|
|
|
|
|
test)
|
|
|
|
shift # skip t
|
|
|
|
export PYTHONPATH="$(pwd -P)"
|
|
|
|
|
|
|
|
if [ $# -lt 1 ]; then
|
|
|
|
python3 -m cdist.test
|
|
|
|
else
|
|
|
|
python3 -m unittest "$@"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
|
|
|
|
version)
|
|
|
|
echo "VERSION=\"$version\"" > cdist/version.py
|
|
|
|
;;
|
|
|
|
|
|
|
|
*)
|
|
|
|
echo ''
|
|
|
|
echo 'Welcome to cdist!'
|
|
|
|
echo ''
|
|
|
|
echo 'Here are the possible targets:'
|
|
|
|
echo ''
|
|
|
|
echo ' clean: Remove build stuff'
|
|
|
|
echo ' man: Build manpages (requires Asciidoc)'
|
|
|
|
echo ' test: Run tests'
|
|
|
|
echo ''
|
|
|
|
echo ''
|
|
|
|
echo "Unknown target, \"$1\"" >&2
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
|
|
|
|
esac
|