335 lines
		
	
	
	
		
			8.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			335 lines
		
	
	
	
		
			8.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/sh
 | |
| #
 | |
| # 2011 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/niconetz
 | |
| WEBBASE=$WEBDIR/software/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
 | |
|     ;;
 | |
| 
 | |
|     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
 | |
| 
 | |
|         $0 pub
 | |
| 
 | |
|         $0 dist-freecode
 | |
| 
 | |
|         $0 dist-post
 | |
|     ;;
 | |
| 
 | |
|     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
 | |
| 
 | |
|     ;;
 | |
| 
 | |
|     dist-post)
 | |
|         cat << notes
 | |
| 
 | |
|     To be done manually...
 | |
|     
 | |
|         - freecode release
 | |
|         - blog entry
 | |
|         - linkedin entry
 | |
|         - mailinglist update
 | |
| 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
 | |
|     ;;
 | |
|         
 | |
|     webmain)
 | |
|         cp README ${WEBPAGE}
 | |
|         cd ${WEBDIR} && git commit -m "cdist main update" ${WEBPAGE}
 | |
|         cd ${WEBDIR} && make pub
 | |
|     ;;
 | |
| 
 | |
|     web)
 | |
|         cp README ${WEBPAGE}
 | |
|         rm -rf ${WEBMAN}
 | |
|         mkdir -p ${WEBMAN}/man1 ${WEBMAN}/man7
 | |
| 
 | |
|         cp ${MAN1DSTDIR}/*.html ${MAN1DSTDIR}/*.css ${WEBMAN}/man1 
 | |
|         cp ${MAN7DSTDIR}/*.html ${MAN7DSTDIR}/*.css ${WEBMAN}/man7
 | |
|         
 | |
|         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
 |