#!/bin/sh # # 2011-2013 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 . # # # This file contains the heavy lifting found usually in the Makefile # basedir=${0%/*} version=$(cd "$basedir" && 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 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 ;; release-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" ;; 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/:.*//' ;; check-version) 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 ;; check-date) # 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 ;; release-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 ;; release-ml) 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-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 ;; release-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-speeches) cd "$SPEECHESDIR" for speech in *tex; do pdflatex "$speech" pdflatex "$speech" pdflatex "$speech" done ;; web-doc) rsync -av "${basedir}/docs/web/" "${WEBTOPDIR}" cd "${WEBDIR}" && git add "${WEBBASE}" cd "${WEBDIR}" && git commit -m "cdist update" "${WEBBASE}" "${WEBPAGE}" cd "${WEBDIR}" && make pub ;; release-web) set -e # 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" ;; pub) for remote in "" github sf; 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 ;; distclean) 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/ ;; test) shift # skip t export PYTHONPATH="$(pwd -P)" if [ $# -lt 1 ]; then python3 -m cdist.test else python3 -m unittest "$@" fi ;; version) echo "VERSION = \"$(git describe)\"" > cdist/version.py ;; *) echo "Unknown target $@ - aborting" exit 1 ;; esac