#!/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%/*}/../ # Change to checkout directory cd "$basedir" 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 case "$1" in 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 version ${version}: 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 ;; 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 ;; 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 helper target $@ - aborting" exit 1 ;; esac