2019-08-12 23:02:01 +00:00
|
|
|
#!/usr/bin/env bash
|
2022-03-25 22:24:47 +00:00
|
|
|
# Copyright (c) 2019-2022 University of Exeter.
|
|
|
|
# 2019 University of Paris-Saclay.
|
2019-08-12 23:02:01 +00:00
|
|
|
#
|
|
|
|
# Redistribution and use in source and binary forms, with or without
|
|
|
|
# modification, are permitted provided that the following conditions
|
|
|
|
# are met:
|
|
|
|
# 1. Redistributions of source code must retain the above copyright
|
|
|
|
# notice, this list of conditions and the following disclaimer.
|
|
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
# notice, this list of conditions and the following disclaimer in
|
|
|
|
# the documentation and/or other materials provided with the
|
|
|
|
# distribution.
|
|
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
|
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
|
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
|
|
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
|
|
# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
|
|
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
|
|
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
|
|
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
|
|
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
|
|
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
|
|
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
|
|
# POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
#
|
|
|
|
# SPDX-License-Identifier: BSD-2-Clause
|
|
|
|
|
2019-08-16 18:49:15 +00:00
|
|
|
set -e
|
2019-08-12 23:02:01 +00:00
|
|
|
shopt -s nocasematch
|
|
|
|
|
|
|
|
|
|
|
|
print_help()
|
|
|
|
{
|
|
|
|
echo "Usage: mk_release [OPTION] "
|
|
|
|
echo ""
|
2019-08-15 14:52:47 +00:00
|
|
|
echo " A tool for building an Isabelle/DOF release archive."
|
2019-08-12 23:02:01 +00:00
|
|
|
echo ""
|
|
|
|
echo "Run ..."
|
|
|
|
echo ""
|
|
|
|
echo " --help, -h display this help message"
|
2022-03-26 18:17:46 +00:00
|
|
|
echo " --sign, -s sign release archive"
|
2019-08-12 23:02:01 +00:00
|
|
|
echo " (default: $SIGN)"
|
|
|
|
echo " --isabelle, -i isabelle isabelle command used for installation"
|
|
|
|
echo " (default: $ISABELLE)"
|
2022-03-26 18:17:46 +00:00
|
|
|
echo " --tag tag, -t tag use tag for release archive"
|
2019-08-15 14:55:20 +00:00
|
|
|
echo " (default: use master branch)"
|
2022-03-26 18:17:46 +00:00
|
|
|
echo " --publish, -p publish generated artefact"
|
2022-06-26 15:00:06 +00:00
|
|
|
echo " (default: $PUBLISH)"
|
|
|
|
echo " --quick-and-dirty, -d only build required artifacts, no complete test"
|
|
|
|
echo " (default: $DIRTY)"
|
2019-08-12 23:02:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
check_isabelle_version() {
|
|
|
|
ACTUAL_ISABELLE_VERSION=`$ISABELLE version`
|
|
|
|
echo "* Checking Isabelle version:"
|
|
|
|
if [ "$ISABELLE_VERSION" != "$ACTUAL_ISABELLE_VERSION" ]; then
|
|
|
|
echo "* Expecting $ISABELLE_VERSION, found $ACTUAL_ISABELLE_VERSION: ERROR"
|
|
|
|
exit 1
|
|
|
|
else
|
|
|
|
echo "* Expecting $ISABELLE_VERSION, found $ACTUAL_ISABELLE_VERSION: success"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
clone_repo()
|
|
|
|
{
|
2019-08-15 15:55:40 +00:00
|
|
|
echo "* Cloning into $ISADOF_WORK_DIR"
|
|
|
|
git clone . $ISADOF_WORK_DIR
|
2019-08-12 23:02:01 +00:00
|
|
|
if [ "$USE_TAG" = "true" ]; then
|
2019-08-15 16:10:16 +00:00
|
|
|
echo " * Switching to tag $TAG"
|
2019-08-15 15:55:40 +00:00
|
|
|
(cd $ISADOF_WORK_DIR && git checkout $TAG)
|
2019-08-12 23:02:01 +00:00
|
|
|
else
|
|
|
|
echo " * Not tag specified, using master branch"
|
|
|
|
fi
|
2022-03-27 13:05:05 +00:00
|
|
|
(cd $ISADOF_WORK_DIR && git show -s --format="COMMIT=%H%nDATE=%cd" --date=short | sed -e 's|-|/|g') >> $ISADOF_WORK_DIR/etc/settings
|
2019-08-15 15:55:40 +00:00
|
|
|
|
2019-08-12 23:02:01 +00:00
|
|
|
}
|
|
|
|
|
2019-08-16 18:49:15 +00:00
|
|
|
build_and_install_manuals()
|
2019-08-12 23:02:01 +00:00
|
|
|
{
|
|
|
|
echo "* Building manual"
|
2019-08-16 18:49:15 +00:00
|
|
|
|
2022-06-26 15:00:06 +00:00
|
|
|
if [ "$DIRTY" = "true" ]; then
|
2022-06-29 14:59:02 +00:00
|
|
|
$ISABELLE build -d . Isabelle_DOF-Manual 2018-cicm-isabelle_dof-applications
|
2022-06-29 12:37:35 +00:00
|
|
|
mkdir -p $ISADOF_WORK_DIR/examples/scholarly_paper/2018-cicm-isabelle_dof-applications/output/
|
|
|
|
cp examples/scholarly_paper/2018-cicm-isabelle_dof-applications/output/document.pdf \
|
|
|
|
$ISADOF_WORK_DIR/examples/scholarly_paper/2018-cicm-isabelle_dof-applications/output/
|
|
|
|
mkdir -p $ISADOF_WORK_DIR/examples/technical_report/Isabelle_DOF-Manual/output/
|
|
|
|
cp examples/technical_report/Isabelle_DOF-Manual/output/document.pdf \
|
|
|
|
$ISADOF_WORK_DIR/examples/technical_report/Isabelle_DOF-Manual/output/
|
2022-06-26 15:00:06 +00:00
|
|
|
else
|
2022-06-29 14:34:27 +00:00
|
|
|
(cd $ISADOF_WORK_DIR && $ISABELLE env ./install-afp)
|
2022-06-26 15:00:06 +00:00
|
|
|
(cd $ISADOF_WORK_DIR && $ISABELLE build -c -D . )
|
|
|
|
fi
|
2019-08-17 09:14:28 +00:00
|
|
|
mkdir -p $ISADOF_WORK_DIR/doc
|
2019-08-16 18:49:15 +00:00
|
|
|
echo "Isabelle/DOF Manuals!" > $ISADOF_WORK_DIR/doc/Contents
|
|
|
|
|
2019-08-15 15:55:40 +00:00
|
|
|
cp $ISADOF_WORK_DIR/examples/technical_report/Isabelle_DOF-Manual/output/document.pdf \
|
|
|
|
$ISADOF_WORK_DIR/doc/Isabelle_DOF-Manual.pdf
|
2019-08-16 18:49:15 +00:00
|
|
|
echo " Isabelle_DOF-Manual User and Implementation Manual for Isabelle/DOF" >> $ISADOF_WORK_DIR/doc/Contents
|
|
|
|
|
|
|
|
cp $ISADOF_WORK_DIR/examples/scholarly_paper/2018-cicm-isabelle_dof-applications/output/document.pdf \
|
|
|
|
$ISADOF_WORK_DIR/doc/2018-cicm-isabelle_dof-applications.pdf
|
|
|
|
echo " 2018-cicm-isabelle_dof-applications Example academic paper" >> $ISADOF_WORK_DIR/doc/Contents
|
|
|
|
|
2019-08-15 15:55:40 +00:00
|
|
|
find $ISADOF_WORK_DIR -type d -name "output" -exec rm -rf {} \; &> /dev/null || true
|
2022-03-17 22:28:31 +00:00
|
|
|
rm -rf $ISADOF_WORK_DIR/.git* $ISADOF_WORK_DIR/.woodpecker $ISADOF_WORK_DIR/.afp
|
2022-03-27 13:05:05 +00:00
|
|
|
|
2019-08-12 23:02:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
create_archive()
|
|
|
|
{
|
|
|
|
echo "* Creating archive"
|
2019-08-18 13:56:17 +00:00
|
|
|
cp $ISADOF_WORK_DIR/doc/Isabelle_DOF-Manual.pdf $ISADOF_TAR.pdf
|
2019-08-15 15:55:40 +00:00
|
|
|
(mv $ISADOF_WORK_DIR $ISADOF_DIR)
|
2019-08-12 23:02:01 +00:00
|
|
|
(cd $BUILD_DIR && tar cf $ISADOF_TAR.tar $ISADOF_TAR && xz $ISADOF_DIR.tar)
|
|
|
|
mv $BUILD_DIR/$ISADOF_TAR.tar.xz .
|
|
|
|
}
|
|
|
|
|
|
|
|
sign_archive()
|
|
|
|
{
|
2019-08-17 21:08:45 +00:00
|
|
|
echo "* Signing archive"
|
2019-08-12 23:02:01 +00:00
|
|
|
gpg --armor --output $ISADOF_TAR.tar.xz.asc --detach-sig $ISADOF_TAR.tar.xz
|
|
|
|
}
|
|
|
|
|
|
|
|
publish_archive()
|
|
|
|
{
|
|
|
|
echo "* Publish archive"
|
|
|
|
ssh 0x5f.org mkdir -p www/$DOF_ARTIFACT_HOST/htdocs/$DOF_ARTIFACT_DIR
|
2019-08-18 09:38:52 +00:00
|
|
|
scp $ISADOF_TAR.* 0x5f.org:www/$DOF_ARTIFACT_HOST/htdocs/$DOF_ARTIFACT_DIR/
|
2019-08-12 23:02:01 +00:00
|
|
|
ssh 0x5f.org chmod go+u-w -R www/$DOF_ARTIFACT_HOST/htdocs/$DOF_ARTIFACT_DIR
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ISABELLE=`which isabelle`
|
|
|
|
USE_TAG="false"
|
|
|
|
SIGN="false"
|
|
|
|
PUBLISH="false"
|
2022-06-26 15:00:06 +00:00
|
|
|
DIRTY="false"
|
2019-08-12 23:02:01 +00:00
|
|
|
BUILD_DIR=`mktemp -d`
|
2019-08-15 15:55:40 +00:00
|
|
|
ISADOF_WORK_DIR="$BUILD_DIR/Isabelle_DOF"
|
2019-08-12 23:02:01 +00:00
|
|
|
while [ $# -gt 0 ]
|
|
|
|
do
|
|
|
|
case "$1" in
|
|
|
|
--isabelle|-i)
|
|
|
|
ISABELLE="$2";
|
|
|
|
shift;;
|
|
|
|
--tag|-t)
|
|
|
|
TAG="$2";
|
|
|
|
USE_TAG="true"
|
|
|
|
shift;;
|
|
|
|
--sign|-s)
|
|
|
|
SIGN="true";;
|
|
|
|
--publish|-p)
|
|
|
|
PUBLISH="true";;
|
2022-06-26 15:00:06 +00:00
|
|
|
--quick-and-dirty|-d)
|
|
|
|
DIRTY="true";;
|
2019-08-12 23:02:01 +00:00
|
|
|
--help|-h)
|
|
|
|
print_help
|
|
|
|
exit 0;;
|
|
|
|
*) print_help
|
|
|
|
exit 1;;
|
|
|
|
esac
|
|
|
|
shift
|
|
|
|
done
|
|
|
|
|
2019-08-15 15:55:40 +00:00
|
|
|
|
|
|
|
clone_repo
|
|
|
|
|
2022-06-26 14:24:49 +00:00
|
|
|
ISADOF_MAIN_DIR=`pwd`
|
|
|
|
|
2022-06-29 12:57:07 +00:00
|
|
|
if [ "$DIRTY" = "true" ]; then
|
2022-06-29 13:51:04 +00:00
|
|
|
echo "Running in Quick and Dirty mode!"
|
|
|
|
$ISABELLE components -u $ISADOF_MAIN_DIR
|
2022-06-29 12:57:07 +00:00
|
|
|
else
|
|
|
|
$ISABELLE components -x $ISADOF_MAIN_DIR
|
|
|
|
$ISABELLE components -u $ISADOF_WORK_DIR
|
|
|
|
fi
|
2019-08-15 15:55:40 +00:00
|
|
|
|
2022-06-26 14:24:49 +00:00
|
|
|
VARS=`$ISABELLE getenv ISABELLE_TOOL`
|
2019-08-12 23:02:01 +00:00
|
|
|
for i in $VARS; do
|
|
|
|
export "$i"
|
|
|
|
done
|
|
|
|
|
2022-06-26 14:24:49 +00:00
|
|
|
ISABELLE_VERSION="Isabelle$($ISABELLE_TOOL options -g dof_isabelle)"
|
|
|
|
DOF_VERSION="$($ISABELLE_TOOL options -g dof_version)"
|
|
|
|
|
2022-03-27 13:05:05 +00:00
|
|
|
ISABELLE_SHORT_VERSION=`echo $ISABELLE_VERSION | sed -e 's/:.*$//'`
|
|
|
|
ISADOF_TAR="Isabelle_DOF-"$DOF_VERSION"_"$ISABELLE_SHORT_VERSION
|
|
|
|
ISADOF_DIR="$BUILD_DIR/$ISADOF_TAR"
|
|
|
|
|
|
|
|
check_isabelle_version
|
2019-08-16 18:49:15 +00:00
|
|
|
build_and_install_manuals
|
2019-08-15 15:55:40 +00:00
|
|
|
|
2022-06-29 12:57:07 +00:00
|
|
|
if [ "$DIRTY" != "true" ]; then
|
|
|
|
$ISABELLE components -x $ISADOF_WORK_DIR
|
|
|
|
$ISABELLE components -u $ISADOF_MAIN_DIR
|
|
|
|
fi
|
2022-06-26 14:24:49 +00:00
|
|
|
|
2019-08-12 23:02:01 +00:00
|
|
|
create_archive
|
|
|
|
|
|
|
|
if [ "$SIGN" = "true" ]; then
|
|
|
|
sign_archive
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ "$PUBLISH" = "true" ]; then
|
|
|
|
publish_archive
|
|
|
|
fi
|
|
|
|
|
2022-06-26 14:24:49 +00:00
|
|
|
rm -rf $BUILD_DIR
|
2022-03-27 13:05:05 +00:00
|
|
|
|
2019-08-12 23:02:01 +00:00
|
|
|
exit 0
|