tikz-trackschematic/create-release.sh

187 lines
4.6 KiB
Bash
Executable File

#!/usr/bin/env sh
# Copyright (c) 2018 - 2022, Martin Scheidt (ISC license)
# Permission to use, copy, modify, and/or distribute this file for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
####
# This script produces a .zip-file in accordance to the requirements for CTAN.
# For more information see https://ctan.org/help/upload-pkg.
####
# Halt on error
set -e
## -- pass getopts
usage() { echo "Usage: create-release.sh [-v version]"; }
verbose=1
batch_mode=0
while getopts ":v" opt; do
case ${opt} in
v ) batch_mode=1
verbose=0
;;
\? ) usage
exit 1
;;
esac
done
## -- cross platform helpers
if [ "`echo -n`" = "-n" ]; then
n=""
c="\c"
else
n="-n"
c=""
fi
# https://stackoverflow.com/questions/2320564/sed-i-command-for-in-place-editing-to-work-with-both-gnu-sed-and-bsd-osx
sedi () {
sed --version >/dev/null 2>&1 && sed -i -- "$@" || sed -i "" "$@"
}
## -- get input
if [ "$batch_mode" = 0 ]; then
echo $n "specify version ( e.g. v0.6 ): $c"
read VERSION_STR
else
VERSION_STR=$2
fi
# remove leading character "v"
VERSION_NUM=$(echo $VERSION_STR | cut -c 2-)
RELEASE="tikz-trackschematic-$VERSION_STR"
## -- commands
check_readme() {
# check if $VERSION is present in README.md
status=0
grep -qs "Version $VERSION_NUM" README.md || status=1
if [ $status = 0 ]; then
if [ $verbose = 1 ]; then
echo "Version $VERSION_NUM is present in README.md."
fi
return 0
fi
echo "Version $VERSION_NUM not found in README.md."
echo "Be sure to edit README.md and specify current version!"
exit 1
}
check_versionhistory() {
# check if $VERSION is present in doc/versionhistory.tex
status=0
grep -qs "vhEntry{$VERSION_NUM" doc/versionhistory.tex || status=1
if [ $status = 0 ]; then
if [ $verbose = 1 ]; then
echo "Version $VERSION_NUM is present in versionhistory.tex."
fi
return 0
fi
echo "Version $VERSION_NUM not found in versionhistory.tex."
echo "Be sure to edit versionhistory.tex and specify current version!"
exit 1
}
# check for zip
check_zip() {
status=0
command -v zip >/dev/null 2>&1 || status=1
if [ $status = 0 ]; then
if [ $verbose = 1 ]; then
echo "zip found"
fi
return 0
fi
echo "Program 'zip' not found."
echo "Be sure to have zip installed!"
exit 1
}
## -- creating the release
## check if $VERSION is present in README.md and versionhistory.tex
check_readme
check_versionhistory
check_zip
## extract DATE from versionhistory.tex
LINE=$(grep "vhEntry{$VERSION_NUM" doc/versionhistory.tex)
DATEISO=$(echo $LINE | egrep -o '[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])')
# DATE=$(echo $DATEISO | sed -e "s|-|\\\/|g") # with escape character for sed
# DATE=$(date "+%Y\/%m\/%d") # with escape character for sed
if [ $verbose = 1 ]; then
echo "The date $DATEISO was extracted from versionhistory.tex."
fi
## create backup-file und update VERSIONDATE in tikz-trackschematic.sty
sed -i".backup" -e"s/VERSIONDATE/$DATEISO/g" src/tikz-trackschematic.sty
sedi "/create-release/d" src/tikz-trackschematic.sty
if [ $verbose = 1 ]; then
echo "Updated version in src/tikz-trackschematic.sty"
fi
## (OPTIONAL) recompile manual.tex, examples, symboly_table and snippets.tex`
## create zip-archive
# create temporary folder
TMP=$RELEASE
mkdir -p $TMP
# copy README and .sty-file
cp README.md $TMP/README.md
cp doc/tikz-trackschematic-documentation.sty $TMP/
# copy and rename documentation
cp doc/manual.pdf $TMP/tikz-trackschematic.pdf
cp doc/manual.tex $TMP/tikz-trackschematic.tex
cp doc/snippets.pdf $TMP/tikz-trackschematic-snippets.pdf
cp doc/snippets.tex $TMP/tikz-trackschematic-snippets.tex
cp doc/symbology-table.pdf $TMP/tikz-trackschematic-symbology-table.pdf
cp doc/symbology-table.tex $TMP/tikz-trackschematic-symbology-table.tex
mkdir $TMP/tikz-trackschematic-examples
mkdir $TMP/tikz-trackschematic-snippets
cp -R doc/examples/* $TMP/tikz-trackschematic-examples/
cp -R doc/snippets/* $TMP/tikz-trackschematic-snippets/
if [ $verbose = 1 ]; then
echo "copied documentation"
fi
# copy src-files
for SRC in src/*; do
EXT=${SRC##*.}
# do not copy backup created by sed
if [ $EXT != "backup" ]; then
cp $SRC $TMP/
fi
done
if [ $verbose = 1 ]; then
echo "copied src-files"
fi
# zip package
zip -r $RELEASE.zip $TMP/*
if [ $verbose = 1 ]; then
echo "compressed the release in $RELEASE.zip"
fi
## cleanup
# remove TMP-folder
rm -rf $TMP/*
rmdir $TMP
# undo changes to tikz-trackschematic.sty by sed
mv src/tikz-trackschematic.sty.backup src/tikz-trackschematic.sty
if [ $verbose = 1 ]; then
echo "clean up done!"
fi