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
 |