From a5328a6c226b4c7d73d1dd811eefdec4fd490b4f Mon Sep 17 00:00:00 2001 From: Allan Blanchard <allan.blanchard@cea.fr> Date: Fri, 4 Dec 2020 14:23:10 +0100 Subject: [PATCH] [release-script] Include only asked manuals on beta --- bin/build-src-distrib.sh | 287 +++++++++++++++++++++++++++++++++------ bin/version_template.md | 41 ------ 2 files changed, 243 insertions(+), 85 deletions(-) delete mode 100644 bin/version_template.md diff --git a/bin/build-src-distrib.sh b/bin/build-src-distrib.sh index 90cf780c85e..014775128af 100755 --- a/bin/build-src-distrib.sh +++ b/bin/build-src-distrib.sh @@ -108,6 +108,13 @@ function assert_build_dir { fi } +function assert_out_dir { + if test \! -d "$OUT_DIR" ; then + echo "ERROR: $OUT_DIR does not exist, possibly removed by another step" + exit 1 + fi +} + # diff_validation repository file # - repository: target repository # - file: target file @@ -130,6 +137,68 @@ function diff_validation { run "git -C $repo add $file" } +# Manuals choice + +function get_MANUAL_NAME { + case "$1" in + "user") MANUAL_NAME="Frama-C user manual" ;; + "plugin-dev") MANUAL_NAME="Frama-C plug-in development guide" ;; + "api") MANUAL_NAME="Frama-C API bundle" ;; + "acsl-1") MANUAL_NAME="ACSL manual" ;; + "acsl-impl") MANUAL_NAME="ACSL implementation" ;; + "aorai") MANUAL_NAME="Aorai manual" ;; + "e-acsl-1") MANUAL_NAME="E-ACSL reference" ;; + "e-acsl-impl") MANUAL_NAME="E-ACSL implementation" ;; + "e-acsl-man") MANUAL_NAME="E-ACSL manual" ;; + "eva") MANUAL_NAME="EVA manual" ;; + "metrics") MANUAL_NAME="Metrics manual" ;; + "rte") MANUAL_NAME="RTE manual" ;; + "wp") MANUAL_NAME="WP manual" ;; + *) MANUAL_NAME="Not a manual identifier: $1" ;; + esac +} + +function check_manual { + value=$1 + if [[ ! " ${AVAILABLE_MANUALS[@]} " =~ " ${value} " ]]; then + echo "### ERROR: in $INCLUDED_MANUALS_CONFIG: $value is not a valid manual identifier" + exit 1 + fi +} + +function show_generated_manuals { + echo + echo "The following manuals will be included." + for i in ${INCLUDED_MANUALS[@]}; do + get_MANUAL_NAME $i + echo "- $MANUAL_NAME" + done + echo +} + +function create_manuals_config { + echo -n > $INCLUDED_MANUALS_CONFIG + for i in ${AVAILABLE_MANUALS[@]}; do + get_MANUAL_NAME $i + echo "Include $MANUAL_NAME? [y/N]" + read CHOICE + case "${CHOICE}" in + "Y"|"y") + echo $i >> $INCLUDED_MANUALS_CONFIG ;; + *) ;; + esac + done +} + +function check_manual_path_MUST_ADD { + MUST_ADD="no" + for i in ${INCLUDED_MANUALS[@]}; do + if [[ $1 == "$i"* ]]; then + MUST_ADD="yes" + fi + done +} + # WIKI generation function fill_wiki { @@ -154,11 +223,14 @@ function fill_wiki { echo "## Manuals" >> $WIKI_PAGE for fpath in $OUT_DIR/manuals/* ; do f=$(basename $fpath) - f_no_ext=${f%.*} - f_no_pdf_ext="${f%.pdf}" - echo "- [${f_no_pdf_ext%-${FRAMAC_VERSION_AND_CODENAME}}](manuals/$f)" >> $WIKI_PAGE - run "cp $fpath $WIKI_DIR/manuals/" - run "git -C $WIKI_DIR add manuals/$f" + check_manual_path_MUST_ADD $f + if [[ $MUST_ADD == "yes" ]]; then + f_no_ext=${f%.*} + f_no_pdf_ext="${f%.pdf}" + echo "- [${f_no_pdf_ext%-${FRAMAC_VERSION_AND_CODENAME}}](manuals/$f)" >> $WIKI_PAGE + run "cp $fpath $WIKI_DIR/manuals/" + run "git -C $WIKI_DIR add manuals/$f" + fi done echo "" >> $WIKI_PAGE echo "## Main changes" >> $WIKI_PAGE @@ -224,21 +296,84 @@ function add_event_page { function add_version_page { VERSION_WEBPAGE="_fc-versions/$FRAMAC_VERSION_CODENAME_LOWER.md" VERSION_WEBPAGE_PATH=$WEBSITE_DIR/$VERSION_WEBPAGE + ACSL_VERSION=$(ls $OUT_DIR/manuals | sed -n 's/^acsl-1.\([0-9][0-9]\).pdf/\1/p') + echo "---" > $VERSION_WEBPAGE_PATH + echo "layout: version" >> $VERSION_WEBPAGE_PATH + echo "number: $VERSION_MAJOR" >> $VERSION_WEBPAGE_PATH + echo "name: $FRAMAC_VERSION_CODENAME" >> $VERSION_WEBPAGE_PATH if [ "$FINAL_RELEASE" = "no" ]; then - REMOVE="^acsl\| acsl\|/acsl" - ACSL_VERSION=0 + echo "beta: true" >> $VERSION_WEBPAGE_PATH else - REMOVE="beta" - ACSL_VERSION=$(ls $OUT_DIR/manuals | sed -n 's/^acsl-1.\([0-9][0-9]\).pdf/\1/p') + echo "acsl: $ACSL_VERSION" >> $VERSION_WEBPAGE_PATH + fi + echo "releases:" >> $VERSION_WEBPAGE_PATH + echo " - number: $VERSION_MINOR" >> $VERSION_WEBPAGE_PATH + echo " categories:" >> $VERSION_WEBPAGE_PATH + echo " - name: Frama-C v$FRAMAC_VERSION $FRAMAC_VERSION_CODENAME" >> $VERSION_WEBPAGE_PATH + echo " files:" >> $VERSION_WEBPAGE_PATH + echo " - name: Source distribution" >> $VERSION_WEBPAGE_PATH + echo " link: /download/$TARGZ_FILENAME" >> $VERSION_WEBPAGE_PATH + echo " help: Compilation instructions" >> $VERSION_WEBPAGE_PATH + echo " help_link: /html/installations/$FRAMAC_VERSION_CODENAME_LOWER.html" >> $VERSION_WEBPAGE_PATH + check_manual_path_MUST_ADD "user" + if [[ $MUST_ADD == "yes" ]]; then + echo " - name: User manual" >> $VERSION_WEBPAGE_PATH + echo " link: /download/user-manual-$FRAMAC_VERSION_AND_CODENAME.pdf" >> $VERSION_WEBPAGE_PATH + fi + check_manual_path_MUST_ADD "plugin-dev" + if [[ $MUST_ADD == "yes" ]]; then + echo " - name: Plug-in development guide" >> $VERSION_WEBPAGE_PATH + echo " link: /download/plugin-development-guide-$FRAMAC_VERSION_AND_CODENAME.pdf" >> $VERSION_WEBPAGE_PATH + echo " help: Hello plug-in tutorial archive" >> $VERSION_WEBPAGE_PATH + echo " help_link: /download/hello-$FRAMAC_VERSION_AND_CODENAME.tar.gz" >> $VERSION_WEBPAGE_PATH + fi + check_manual_path_MUST_ADD "api" + if [[ $MUST_ADD == "yes" ]]; then + echo " - name: API Documentation" >> $VERSION_WEBPAGE_PATH + echo " link: /download/frama-c-$FRAMAC_VERSION_AND_CODENAME-api.tar.gz" >> $VERSION_WEBPAGE_PATH + fi + check_manual_path_MUST_ADD "acsl-impl" + if [[ $MUST_ADD == "yes" ]]; then + echo " - name: ACSL 1.$ACSL_VERSION ($FRAMAC_VERSION_CODENAME implementation)" >> $VERSION_WEBPAGE_PATH + echo " link: /download/acsl-implementation-$FRAMAC_VERSION_AND_CODENAME.pdf" >> $VERSION_WEBPAGE_PATH + fi + echo " - name: Plug-in Manuals" >> $VERSION_WEBPAGE_PATH + echo " sort: true" >> $VERSION_WEBPAGE_PATH + echo " files:" >> $VERSION_WEBPAGE_PATH + check_manual_path_MUST_ADD "aorai" + if [[ $MUST_ADD == "yes" ]]; then + echo " - name: Aoraï manual" >> $VERSION_WEBPAGE_PATH + echo " link: /download/aorai-manual-$FRAMAC_VERSION_AND_CODENAME.pdf" >> $VERSION_WEBPAGE_PATH + echo " help: Aoraï example" >> $VERSION_WEBPAGE_PATH + echo " help_link: /download/aorai-example-$FRAMAC_VERSION_AND_CODENAME.tgz" >> $VERSION_WEBPAGE_PATH fi - sed -e "s/ACSL_VERSION/$ACSL_VERSION/" \ - -e "s/MAJOR_VERSION/$VERSION_MAJOR/" \ - -e "s/MINOR_VERSION/$VERSION_MINOR/" \ - -e "s/VERSION_CODENAME/$FRAMAC_VERSION_CODENAME/" \ - -e "s/LOWER_CODENAME/$FRAMAC_VERSION_CODENAME_LOWER/" \ - -e "s/COMP_VERSION/$FRAMAC_VERSION/" \ - ./bin/version_template.md \ - | grep -vi "$REMOVE" > $VERSION_WEBPAGE_PATH + check_manual_path_MUST_ADD "metrics" + if [[ $MUST_ADD == "yes" ]]; then + echo " - name: Metrics manual" >> $VERSION_WEBPAGE_PATH + echo " link: /download/metrics-manual-$FRAMAC_VERSION_AND_CODENAME.pdf" >> $VERSION_WEBPAGE_PATH + fi + check_manual_path_MUST_ADD "rte" + if [[ $MUST_ADD == "yes" ]]; then + echo " - name: Rte manual" >> $VERSION_WEBPAGE_PATH + echo " link: /download/rte-manual-$FRAMAC_VERSION_AND_CODENAME.pdf" >> $VERSION_WEBPAGE_PATH + fi + check_manual_path_MUST_ADD "eva" + if [[ $MUST_ADD == "yes" ]]; then + echo " - name: Eva manual" >> $VERSION_WEBPAGE_PATH + echo " link: /download/eva-manual-$FRAMAC_VERSION_AND_CODENAME.pdf" >> $VERSION_WEBPAGE_PATH + fi + check_manual_path_MUST_ADD "wp" + if [[ $MUST_ADD == "yes" ]]; then + echo " - name: WP manual" >> $VERSION_WEBPAGE_PATH + echo " link: /download/wp-manual-$FRAMAC_VERSION_AND_CODENAME.pdf" >> $VERSION_WEBPAGE_PATH + fi + check_manual_path_MUST_ADD "e-acsl-man" + if [[ $MUST_ADD == "yes" ]]; then + echo " - name: E-ACSL manual" >> $VERSION_WEBPAGE_PATH + echo " link: /download/e-acsl/e-acsl-manual-$FRAMAC_VERSION_AND_CODENAME.pdf" >> $VERSION_WEBPAGE_PATH + fi + echo "---" >> $VERSION_WEBPAGE_PATH + run "git -C $WEBSITE_DIR add $VERSION_WEBPAGE" } @@ -249,39 +384,56 @@ function add_downloads { f=$(basename $fpath) f_no_ext=${f%.*} - if [[ $f_no_ext =~ ^e-acsl.*$ ]]; then - BASE="e-acsl/$f" - else - BASE="$f" - fi - - if [[ $f_no_ext =~ ^(e-)?acsl-[0-9].[0-9][0-9]$ ]]; then - REPL=$(echo $BASE | sed -e "s/-[0-9].[0-9][0-9]//") - elif [[ $f_no_ext =~ ^e-acsl-* ]]; then - REPL=$(echo $BASE | sed -e "s/-$FRAMAC_VERSION_AND_CODENAME//") - else - REPL=$(echo $BASE | sed -e "s/\(.*\)-$FRAMAC_VERSION_AND_CODENAME/frama-c-\1/") + check_manual_path_MUST_ADD $f + if [[ $MUST_ADD == "yes" ]]; then + if [[ $f_no_ext =~ ^e-acsl.*$ ]]; then + BASE="e-acsl/$f" + else + BASE="$f" + fi + + if [[ $f_no_ext =~ ^(e-)?acsl-[0-9].[0-9][0-9]$ ]]; then + REPL=$(echo $BASE | sed -e "s/-[0-9].[0-9][0-9]//") + elif [[ $f_no_ext =~ ^e-acsl-* ]]; then + REPL=$(echo $BASE | sed -e "s/-$FRAMAC_VERSION_AND_CODENAME//") + else + REPL=$(echo $BASE | sed -e "s/\(.*\)-$FRAMAC_VERSION_AND_CODENAME/frama-c-\1/") + fi + + run "cp $fpath $DOWNLOAD_DIR/$BASE" + run "git -C $WEBSITE_DIR add $DOWNLOAD_PATH/$BASE" + + # we change generic files ONLY for FINAL release + if test "$FINAL_RELEASE" = "yes"; then + run "cp $fpath $DOWNLOAD_DIR/$REPL" + run "git -C $WEBSITE_DIR add $DOWNLOAD_PATH/$REPL" + fi fi - - run "cp $fpath $DOWNLOAD_DIR/$BASE" - run "git -C $WEBSITE_DIR add $DOWNLOAD_PATH/$BASE" - run "cp $fpath $DOWNLOAD_DIR/$REPL" - run "git -C $WEBSITE_DIR add $DOWNLOAD_PATH/$REPL" done + # Particular case for the value analysis manual: EVA_FILE="$OUT_DIR/manuals/eva-manual-$FRAMAC_VERSION_AND_CODENAME.pdf" VALUE_PATH="$DOWNLOAD_DIR/frama-c-value-analysis.pdf" VALUE_GIT_PATH="$DOWNLOAD_PATH/frama-c-value-analysis.pdf" - run "cp $EVA_FILE $VALUE_PATH" - run "git -C $WEBSITE_DIR add $VALUE_GIT_PATH" + # we change generic files ONLY for FINAL release + if test "$FINAL_RELEASE" = "yes"; then + run "cp $EVA_FILE $VALUE_PATH" + run "git -C $WEBSITE_DIR add $VALUE_GIT_PATH" + fi # Examples: HELLO="hello-$FRAMAC_VERSION_AND_CODENAME.tar.gz" - run "cp $OUT_DIR/$HELLO $DOWNLOAD_DIR" - run "git -C $WEBSITE_DIR add $DOWNLOAD_PATH/$HELLO" - run "cp $OUT_DIR/$HELLO $DOWNLOAD_DIR" - run "git -C $WEBSITE_DIR add $DOWNLOAD_PATH/hello.tar.gz" - + check_manual_path_MUST_ADD "plugin-dev" + if [[ $MUST_ADD == "yes" ]]; then + run "cp $OUT_DIR/$HELLO $DOWNLOAD_DIR" + run "git -C $WEBSITE_DIR add $DOWNLOAD_PATH/$HELLO" + # we change generic files ONLY for FINAL release + if test "$FINAL_RELEASE" = "yes"; then + run "cp $OUT_DIR/$HELLO $DOWNLOAD_DIR" + run "git -C $WEBSITE_DIR add $DOWNLOAD_PATH/hello.tar.gz" + fi + fi + # Source distribution: run "cp $OUT_DIR/$TARGZ_FILENAME $DOWNLOAD_DIR" run "git -C $WEBSITE_DIR add $DOWNLOAD_PATH/$TARGZ_FILENAME" @@ -453,6 +605,40 @@ if test \! -f $CHANGES ; then esac fi +AVAILABLE_MANUALS=("user" "api" "plugin-dev" "acsl-1" "acsl-impl" "aorai" "e-acsl-1" "e-acsl-man" "e-acsl-impl" "eva" "metrics" "rte" "wp") +INCLUDED_MANUALS_CONFIG="./included_manuals" +INCLUDED_MANUALS=() + +if test "$FINAL_RELEASE" = "yes"; then + # In final release mode, all manuals must be distributed + for i in ${AVAILABLE_MANUALS[@]}; do + INCLUDED_MANUALS+=($i) + done +else + if test \! -f $INCLUDED_MANUALS_CONFIG ; then + echo "### WARNING: The $INCLUDED_MANUALS_CONFIG file is missing" + echo "Do you want to create a one? [y/N]" + read CHOICE + case "${CHOICE}" in + "Y"|"y") + create_manuals_config + for i in $(cat $INCLUDED_MANUALS_CONFIG); do + check_manual $i + INCLUDED_MANUALS+=($i) + done + ;; + *) + echo "NO manuals will be included" + ;; + esac + else + for i in $(cat $INCLUDED_MANUALS_CONFIG); do + check_manual $i + INCLUDED_MANUALS+=($i) + done + fi +fi + MANUALS_DIR="./doc/manuals" if [ -z ${VERBOSE_MAKE_DOC+x} ]; then @@ -466,20 +652,29 @@ BUILD_DIR="$BUILD_DIR_ROOT/frama-c" OUT_DIR="./distributed" +echo "############################# Frama-C Info ##############################" +echo "" echo "Frama-C Version : $FRAMAC_VERSION" echo "Final release : $FINAL_RELEASE" echo "Frama-C Branch : $FRAMAC_BRANCH" -echo "Manuals Dir : $MANUALS_DIR" -echo "ACSL Dir : $ACSL_DIR" echo "Frama-C Wiki Dir : $WIKI_DIR" echo "Website Dir : $WEBSITE_DIR" echo "Changes file : $CHANGES" echo "Build Dir : $BUILD_DIR" echo "Output Dir : $OUT_DIR" +echo "" +echo "############################# Manuals ##############################" +echo "" +echo "Manuals Dir : $MANUALS_DIR" +echo "ACSL Dir : $ACSL_DIR" +show_generated_manuals + +echo "#########################################################################" export LC_CTYPE=en_US.UTF-8 -echo -n "Steps are: +echo -n " +Steps are: N) previous information is wrong, STOP the script 0) ERASE $OUT_DIR @@ -553,16 +748,19 @@ case "${STEP}" in ;& 6) step 6 "PREPARE WIKI" + assert_out_dir run "git -C $WIKI_DIR reset --hard" fill_wiki ;& 7) step 7 "PREPARE WEBSITE" + assert_out_dir run "git -C $WEBSITE_DIR reset --hard" fill_website ;& 8) step 8 "CHECK GENERATED DISTRIBUTION" + assert_out_dir TEST_DIR="$BUILD_DIR_ROOT/frama-c-$FRAMAC_VERSION-$FRAMAC_VERSION_CODENAME" run "mkdir -p $BUILD_DIR_ROOT" run "rm -rf $TEST_DIR" @@ -574,6 +772,7 @@ case "${STEP}" in ;& 9) step 9 "GENERATE OPAM FILE" + assert_out_dir run "cp opam/opam $OUT_DIR/opam" echo >> "$OUT_DIR/opam" echo "url {" >> "$OUT_DIR/opam" diff --git a/bin/version_template.md b/bin/version_template.md deleted file mode 100644 index 7c07bab86e1..00000000000 --- a/bin/version_template.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -layout: version -number: MAJOR_VERSION -name: VERSION_CODENAME -beta: true -acsl: ACSL_VERSION -releases: - - number: MINOR_VERSION - categories: - - name: Frama-C vCOMP_VERSION VERSION_CODENAME - files: - - name: Source distribution - link: /download/frama-c-COMP_VERSION-VERSION_CODENAME.tar.gz - help: Compilation instructions - help_link: /html/installations/LOWER_CODENAME.html - - name: User manual - link: /download/user-manual-COMP_VERSION-VERSION_CODENAME.pdf - - name: Plug-in development guide - link: /download/plugin-development-guide-COMP_VERSION-VERSION_CODENAME.pdf - help: Hello plug-in tutorial archive - help_link: /download/hello-COMP_VERSION-VERSION_CODENAME.tar.gz - - name: API Documentation - link: /download/frama-c-COMP_VERSION-VERSION_CODENAME-api.tar.gz - - name: ACSL 1.ACSL_VERSION (VERSION_CODENAME implementation) - link: /download/acsl-implementation-COMP_VERSION-VERSION_CODENAME.pdf - - name: Plug-in Manuals - sort: true - files: - - name: Aoraï manual - link: /download/aorai-manual-COMP_VERSION-VERSION_CODENAME.pdf - - name: Metrics manual - link: /download/metrics-manual-COMP_VERSION-VERSION_CODENAME.pdf - - name: Rte manual - link: /download/rte-manual-COMP_VERSION-VERSION_CODENAME.pdf - - name: Eva manual - link: /download/eva-manual-COMP_VERSION-VERSION_CODENAME.pdf - - name: WP manual - link: /download/wp-manual-COMP_VERSION-VERSION_CODENAME.pdf - - name: E-ACSL manual - link: /download/e-acsl/e-acsl-manual-COMP_VERSION-VERSION_CODENAME.pdf ---- -- GitLab