forked from ungleich-public/cdist
		
	
		
			
				
	
	
		
			414 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			414 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/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 <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=$(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
 | 
						|
    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-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
 | 
						|
    ;;
 | 
						|
 | 
						|
    web)
 | 
						|
        set -e
 | 
						|
        "$0" web-doc
 | 
						|
        # 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; 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
 |