From 97113a13215df9882a8d2ee4f309f57c55666c45 Mon Sep 17 00:00:00 2001 From: Allan Blanchard <allan.blanchard@cea.fr> Date: Fri, 20 Nov 2020 12:37:29 +0100 Subject: [PATCH] [Release] Changes website target --- bin/build-src-distrib.sh | 400 ++++++++++++++++++++------------------- 1 file changed, 208 insertions(+), 192 deletions(-) diff --git a/bin/build-src-distrib.sh b/bin/build-src-distrib.sh index 272eb1caf79..1bfb095e9c7 100755 --- a/bin/build-src-distrib.sh +++ b/bin/build-src-distrib.sh @@ -5,14 +5,14 @@ set -u # Executing this script requires bash 4.0 or higher # (special use of the 'case' construct) if test `echo $BASH_VERSION | sed "s/\([0-9]\).*/\1/" ` -lt 4; then - echo "bash version >= 4 is required." - exit 99 + echo "bash version >= 4 is required." + exit 99 fi # git-lfs needs to be installed if ! command -v git-lfs >/dev/null 2>/dev/null; then - echo "git-lfs is required" - exit 99 + echo "git-lfs is required" + exit 99 fi # Set it to "no" in order to really execute the commands. @@ -37,6 +37,8 @@ FRAMAC_VERSION_AND_CODENAME="${FRAMAC_VERSION}-${FRAMAC_VERSION_CODENAME}" TARGZ_FILENAME=frama-c-${FRAMAC_VERSION_AND_CODENAME}.tar.gz VERSION_MODIFIER=$(cat VERSION | sed -e s/[0-9.]*\\\(.*\\\)/\\1/) +VERSION_MAJOR=$(cat VERSION | sed -e s/\\\([0-9]*\\\).[0-9]*.*/\\1/) +VERSION_MINOR=$(cat VERSION | sed -e s/[0-9]*.\\\([0-9]*\\\).*/\\1/) if test -n "$VERSION_MODIFIER"; then FINAL_RELEASE=no; else FINAL_RELEASE=yes; fi @@ -47,35 +49,36 @@ if test "$FRAMAC_VERSION" != "$FRAMAC_TAG"; then fi run () { - cmd=$1 - echo "$cmd" - if test "$DEBUG" == "no"; then - sh -c "$cmd" || { echo "Aborting step ${STEP}."; exit "${STEP}"; } - fi + cmd=$1 + echo "$cmd" + if test "$DEBUG" == "no"; then + sh -c "$cmd" || { echo "Aborting step ${STEP}."; exit "${STEP}"; } + fi } -GITLAB_DIR=./pub-frama-c -GITLAB_GIT="git@git.frama-c.com:pub/frama-c.git" +# GITLAB_DIR=./pub-frama-c +# GITLAB_GIT="git@git.frama-c.com:pub/frama-c.git" + +# if test ! -d $GITLAB_DIR/.git; then +# echo "WARNING: $GITLAB_DIR/.git directory not found; do you want to clone it? (y/n)" +# read CHOICE +# case "${CHOICE}" in +# "Y"|"y") +# run "git clone $GITLAB_GIT $GITLAB_DIR" +# ;; +# *) +# echo "gitlab's public Frama-C project must be linked at $GITLAB_DIR \ + # (clone or symbolic link)" +# exit 1 +# ;& +# esac +# fi +# GITLAB_BRANCH=$(git --git-dir=$GITLAB_DIR/.git rev-parse --abbrev-ref HEAD) +# if test "$FRAMAC_BRANCH" != "$GITLAB_BRANCH"; then +# echo "WARNING: switching pub-frama-c to current branch $FRAMAC_BRANCH" +# run "git -C $GITLAB_DIR checkout -b $FRAMAC_BRANCH" +# fi -if test ! -d $GITLAB_DIR/.git; then - echo "WARNING: $GITLAB_DIR/.git directory not found; do you want to clone it? (y/n)" - read CHOICE - case "${CHOICE}" in - "Y"|"y") - run "git clone $GITLAB_GIT $GITLAB_DIR" - ;; - *) - echo "gitlab's public Frama-C project must be linked at $GITLAB_DIR \ - (clone or symbolic link)" - exit 1 - ;& - esac -fi -GITLAB_BRANCH=$(git --git-dir=$GITLAB_DIR/.git rev-parse --abbrev-ref HEAD) -if test "$FRAMAC_BRANCH" != "$GITLAB_BRANCH"; then - echo "WARNING: switching pub-frama-c to current branch $FRAMAC_BRANCH" - run "git -C $GITLAB_DIR checkout -b $FRAMAC_BRANCH" -fi GITLAB_WIKI_GIT="git@git.frama-c.com:pub/frama-c.wiki" GITLAB_WIKI=./frama-c.wiki if test ! -d $GITLAB_WIKI/.git; then @@ -121,14 +124,23 @@ fi MANUALS_DIR="./doc/manuals" # push on frama-c.com only for final releases +WEBSITE_GIT="git@git.frama-c.com:pub/pub.frama-c.com.git" if test "$FINAL_RELEASE" = "yes"; then -WEBSITE_DIR="./website" -if test \! -d $WEBSITE_DIR/.git ; then - echo "ERROR: $WEBSITE_DIR/.git directory not found" - echo "The Frama-C website repository must be linked at $WEBSITE_DIR (clone or symbolic link)" - exit 1 -fi -WEBSITE_BRANCH=`git --git-dir=$WEBSITE_DIR/.git rev-parse --abbrev-ref HEAD` + WEBSITE_DIR="./website" + if test \! -d $WEBSITE_DIR/.git ; then + echo "ERROR: $WEBSITE_DIR/.git directory not found; do you want to clone it? (y/n)" + read CHOICE + case "${CHOICE}" in + "Y"|"y") + run "git clone $WEBSITE_GIT website" + ;; + *) + echo "The Github Website repository must be linked at $WEBSITE_DIR (clone or symbolic link)" + exit 1 + ;& + esac + fi + WEBSITE_BRANCH=`git --git-dir=$WEBSITE_DIR/.git rev-parse --abbrev-ref HEAD` fi # FINAL_RELEASE == yes BUILD_DIR_ROOT="/tmp/release" @@ -137,24 +149,24 @@ BUILD_DIR="$BUILD_DIR_ROOT/frama-c" echo "Frama-C Version : $FRAMAC_VERSION" echo "Frama-C Branch : $FRAMAC_BRANCH" echo "Final release : $FINAL_RELEASE" -echo "pub/frama-c dir : $GITLAB_DIR" -echo "pub/frama-c branch : $GITLAB_BRANCH" +# echo "pub/frama-c dir : $GITLAB_DIR" +# echo "pub/frama-c branch : $GITLAB_BRANCH" echo "pub/frama-c wiki : $GITLAB_WIKI" echo "Manuals Dir : $MANUALS_DIR" if test "$FINAL_RELEASE" = "yes"; then -echo "Website Dir : $WEBSITE_DIR" -echo "Website Branch : $WEBSITE_BRANCH" + echo "Website Dir : $WEBSITE_DIR" + echo "Website Branch : $WEBSITE_BRANCH" else -echo "Intermediate release: website not updated" + echo "Intermediate release: website not updated" fi echo "Build Dir : $BUILD_DIR" -DOWNLOAD_DIR="www/download" +DOWNLOAD_DIR="download" step () { - STEP=$1 - echo - echo "Step $1: $2" + STEP=$1 + echo + echo "Step $1: $2" } export LC_CTYPE=en_US.UTF-8 @@ -174,157 +186,161 @@ Start at which step? (default is N, which cancels everything) read STEP case "${STEP}" in - ""|"N") - echo "Exiting without doing anything."; - exit 0; - ;& - 0) - step 0 "COMPILING PDF MANUALS" - run "rm -rf $MANUALS_DIR" - run "mkdir -p $MANUALS_DIR" - run "doc/build-manuals.sh" - ;& - 1) - run "git -C $GITLAB_DIR reset --hard" - run "git -C $GITLAB_WIKI reset --hard" - if test "$FINAL_RELEASE" = "yes"; then - run "git -C $WEBSITE_DIR reset --hard" - fi - ;& - 2) - step 2 "BUILDING THE SOURCE DISTRIBUTION" - # WARNING! MUST RUN git update-index BEFORE git diff-index! - # See: https://stackoverflow.com/questions/36367190/git-diff-files-output-changes-after-git-status - run "git update-index --refresh" - if ! git diff-index HEAD --; then - echo "" - echo "### WARNING: uncommitted git changes will be discarded when creating archive!" - echo "Proceed anyway? [y/N]" - read CHOICE - case "${CHOICE}" in - "Y"|"y") + ""|"N") + echo "Exiting without doing anything."; + exit 0; + ;& + 0) + step 0 "COMPILING PDF MANUALS" + run "rm -rf $MANUALS_DIR" + run "mkdir -p $MANUALS_DIR" + run "doc/build-manuals.sh" + ;& + 1) + # run "git -C $GITLAB_DIR reset --hard" + run "git -C $GITLAB_WIKI reset --hard" + if test "$FINAL_RELEASE" = "yes"; then + run "git -C $WEBSITE_DIR reset --hard" + fi + ;& + 2) + step 2 "BUILDING THE SOURCE DISTRIBUTION" + # WARNING! MUST RUN git update-index BEFORE git diff-index! + # See: https://stackoverflow.com/questions/36367190/git-diff-files-output-changes-after-git-status + run "git update-index --refresh" + if ! git diff-index HEAD --; then + echo "" + echo "### WARNING: uncommitted git changes will be discarded when creating archive!" + echo "Proceed anyway? [y/N]" + read CHOICE + case "${CHOICE}" in + "Y"|"y") ;; - *) - echo "Stash or commit local changes, then run the script again." - exit 1 - esac - fi - run "mkdir -p $BUILD_DIR_ROOT" - run "rm -rf $BUILD_DIR" - run "git worktree add -f --detach $BUILD_DIR $FRAMAC_BRANCH" - run "cd $BUILD_DIR; autoconf" - run "cd $BUILD_DIR; ./configure" - run "cd $BUILD_DIR; make -j OPEN_SOURCE=yes src-distrib" - # sanity check: markdown-report must be distributed - run "tar tf $BUILD_DIR/$TARGZ_FILENAME | grep -q src/plugins/markdown-report" - # populate release assets in wiki - run "mkdir -p $GITLAB_WIKI/downloads" - run "cp $BUILD_DIR/$TARGZ_FILENAME $GITLAB_WIKI/downloads/" - if test "$FINAL_RELEASE" = "yes"; then - SPEC_FILE="$DOWNLOAD_DIR/$TARGZ_FILENAME" - run "rm -f $WEBSITE_DIR/$SPEC_FILE" - run "cp $BUILD_DIR/$TARGZ_FILENAME $WEBSITE_DIR/$SPEC_FILE" - run "git -C $WEBSITE_DIR add $SPEC_FILE" - run "cp Changelog $WEBSITE_DIR/src/last-release/Changelog" - run "cp src/plugins/wp/Changelog $WEBSITE_DIR/src/wpChangelog" - run "cp src/plugins/wp/Changelog $WEBSITE_DIR/src/last-release/wpChangelog" - run "cp src/plugins/e-acsl/doc/Changelog $WEBSITE_DIR/src/eacslChangelog" - run "cp src/plugins/e-acsl/doc/Changelog $WEBSITE_DIR/src/last-release/eacslChangelog" - fi - ;& - 3) - #note: this step may fail if step 4 was performed, - # because it will erase BUILD_DIR - step 3 "BUILDING THE API BUNDLE" - if test \! -d "$BUILD_DIR" ; then - echo "ERROR: $BUILD_DIR does not exist, possibly removed by another step" - exit 1 - fi - run "cd $BUILD_DIR; make -j doc-distrib" - if test "$FINAL_RELEASE" = "yes"; then - SPEC_FILE="$DOWNLOAD_DIR/frama-c-${FRAMAC_VERSION_AND_CODENAME}-api.tar.gz" - run "rm -f $WEBSITE_DIR/$SPEC_FILE" - run "cp $BUILD_DIR/frama-c-api.tar.gz $WEBSITE_DIR/$SPEC_FILE" - run "git -C $WEBSITE_DIR add $SPEC_FILE" - fi - ;& - 4) - step 4 "BUILDING THE DOCUMENTATION COMPANIONS" - if test \! -d "$BUILD_DIR" ; then - echo "ERROR: $BUILD_DIR does not exist, possibly removed by another step" - exit 1 - fi - run "cd $BUILD_DIR; make -j doc-companions" - if test "$FINAL_RELEASE" = "yes"; then - SPEC_FILE="$DOWNLOAD_DIR/hello-${FRAMAC_VERSION_AND_CODENAME}.tar.gz" - RELE_FILE="$DOWNLOAD_DIR/hello.tar.gz" - run "rm -f $WEBSITE_DIR/$SPEC_FILE $WEBSITE_DIR/$RELE_FILE" - run "cp $BUILD_DIR/hello-${FRAMAC_VERSION_AND_CODENAME}.tar.gz $WEBSITE_DIR/$SPEC_FILE" - run "git -C $WEBSITE_DIR add $SPEC_FILE" - run "ln -s hello-${FRAMAC_VERSION_AND_CODENAME}.tar.gz $WEBSITE_DIR/$RELE_FILE"; - run "git -C $WEBSITE_DIR add $RELE_FILE" + *) + echo "Stash or commit local changes, then run the script again." + exit 1 + esac + fi + run "mkdir -p $BUILD_DIR_ROOT" run "rm -rf $BUILD_DIR" - run "git worktree prune" - fi - ;& - 5) - step 5 "COPYING AND STAGING THE DISTRIBUTED MANUALS" - PAGE_NAME=Frama-C-${FRAMAC_VERSION_AND_CODENAME}.md - WIKI_PAGE=$GITLAB_WIKI/$PAGE_NAME - run "mkdir -p $GITLAB_WIKI/manuals" - run "sed -i -e '/<!-- LAST RELEASE -->/a \ + run "git worktree add -f --detach $BUILD_DIR $FRAMAC_BRANCH" + run "cd $BUILD_DIR; autoconf" + run "cd $BUILD_DIR; ./configure" + run "cd $BUILD_DIR; make -j OPEN_SOURCE=yes src-distrib" + # sanity check: markdown-report must be distributed + run "tar tf $BUILD_DIR/$TARGZ_FILENAME | grep -q src/plugins/markdown-report" + # populate release assets in wiki + run "mkdir -p $GITLAB_WIKI/downloads" + run "cp $BUILD_DIR/$TARGZ_FILENAME $GITLAB_WIKI/downloads/" + if test "$FINAL_RELEASE" = "yes"; then + SPEC_FILE="$DOWNLOAD_DIR/$TARGZ_FILENAME" + run "rm -f $WEBSITE_DIR/$SPEC_FILE" + run "cp $BUILD_DIR/$TARGZ_FILENAME $WEBSITE_DIR/$SPEC_FILE" + run "git -C $WEBSITE_DIR add $SPEC_FILE" + fi + ;& + 3) + #note: this step may fail if step 4 was performed, + # because it will erase BUILD_DIR + step 3 "BUILDING THE API BUNDLE" + if test \! -d "$BUILD_DIR" ; then + echo "ERROR: $BUILD_DIR does not exist, possibly removed by another step" + exit 1 + fi + run "cd $BUILD_DIR; make -j doc-distrib" + if test "$FINAL_RELEASE" = "yes"; then + SPEC_FILE="$DOWNLOAD_DIR/frama-c-${FRAMAC_VERSION_AND_CODENAME}-api.tar.gz" + run "rm -f $WEBSITE_DIR/$SPEC_FILE" + run "cp $BUILD_DIR/frama-c-api.tar.gz $WEBSITE_DIR/$SPEC_FILE" + run "git -C $WEBSITE_DIR add $SPEC_FILE" + fi + ;& + 4) + step 4 "BUILDING THE DOCUMENTATION COMPANIONS" + if test \! -d "$BUILD_DIR" ; then + echo "ERROR: $BUILD_DIR does not exist, possibly removed by another step" + exit 1 + fi + run "cd $BUILD_DIR; make -j doc-companions" + if test "$FINAL_RELEASE" = "yes"; then + SPEC_FILE="$DOWNLOAD_DIR/hello-${FRAMAC_VERSION_AND_CODENAME}.tar.gz" + RELE_FILE="$DOWNLOAD_DIR/hello.tar.gz" + run "rm -f $WEBSITE_DIR/$SPEC_FILE $WEBSITE_DIR/$RELE_FILE" + run "cp $BUILD_DIR/hello-${FRAMAC_VERSION_AND_CODENAME}.tar.gz $WEBSITE_DIR/$SPEC_FILE" + run "git -C $WEBSITE_DIR add $SPEC_FILE" + run "ln -s hello-${FRAMAC_VERSION_AND_CODENAME}.tar.gz $WEBSITE_DIR/$RELE_FILE"; + run "git -C $WEBSITE_DIR add $RELE_FILE" + run "rm -rf $BUILD_DIR" + run "git worktree prune" + fi + ;& + 5) + step 5 "COPYING AND STAGING THE DISTRIBUTED MANUALS" + PAGE_NAME=Frama-C-${FRAMAC_VERSION_AND_CODENAME}.md + WIKI_PAGE=$GITLAB_WIKI/$PAGE_NAME + run "mkdir -p $GITLAB_WIKI/manuals" + run "sed -i -e '/<!-- LAST RELEASE -->/a \ - [${FRAMAC_VERSION} (${FRAMAC_VERSION_CODENAME})](Frama-C-${FRAMAC_VERSION_AND_CODENAME})' $GITLAB_WIKI/Home.md" - if test "$FINAL_RELEASE" = "yes"; then - release_type="FINAL" - else - release_type="BETA" - fi - run "sed -i -e '/<!-- LAST ${release_type} RELEASE -->/a \ + if test "$FINAL_RELEASE" = "yes"; then + release_type="FINAL" + else + release_type="BETA" + fi + run "sed -i -e '/<!-- LAST ${release_type} RELEASE -->/a \ - [${FRAMAC_VERSION} (${FRAMAC_VERSION_CODENAME})](Frama-C-${FRAMAC_VERSION_AND_CODENAME})' $GITLAB_WIKI/_sidebar.md" - echo "# Frama-C release ${FRAMAC_VERSION} (${FRAMAC_VERSION_CODENAME})" > $WIKI_PAGE - echo "## Sources" >> $WIKI_PAGE - echo " - [$TARGZ_FILENAME](downloads/$TARGZ_FILENAME)" >> $WIKI_PAGE - echo "" >> $WIKI_PAGE - echo "## Manuals" >> $WIKI_PAGE - for fpath in $MANUALS_DIR/*; do - f=$(basename $fpath) - f_no_ext=${f%.*} - # E-ACSL-related files are stored in subdirectory e-acsl - if [[ $f_no_ext =~ ^e-acsl.*$ ]]; then - destdir="$WEBSITE_DIR/$DOWNLOAD_DIR/e-acsl" - else - destdir="$WEBSITE_DIR/$DOWNLOAD_DIR" - fi - if [[ -L $fpath ]]; then - # symbolic links are copied to the website and prepended with 'frama-c-' - # (except for acsl.pdf, which is copied as is) - if [[ $f_no_ext =~ ^(e-)?acsl$ ]]; then - ln="$f" - else - ln="frama-c-$f" - fi - run "rm -f $destdir/$ln" - run "cp -P $fpath $destdir/$ln" - run "git -C $destdir add $ln" - else - # non-symbolic links are copied as-is to the website, and also to - # the Gitlab wiki, where they are also added as links - f_no_pdf_ext="${f%.pdf}" - echo "- [${f_no_pdf_ext%-${FRAMAC_VERSION_AND_CODENAME}}](manuals/$f)" >> $WIKI_PAGE - run "cp $fpath $GITLAB_WIKI/manuals/" - run "git -C $GITLAB_WIKI add manuals/$f" - run "cp $fpath $destdir/$f" - run "git -C $destdir add $f" - fi - done + echo "# Frama-C release ${FRAMAC_VERSION} (${FRAMAC_VERSION_CODENAME})" > $WIKI_PAGE + echo "## Sources" >> $WIKI_PAGE + echo " - [$TARGZ_FILENAME](downloads/$TARGZ_FILENAME)" >> $WIKI_PAGE + echo "" >> $WIKI_PAGE + echo "## Manuals" >> $WIKI_PAGE + for fpath in $MANUALS_DIR/*; do + f=$(basename $fpath) + f_no_ext=${f%.*} + # E-ACSL-related files are stored in subdirectory e-acsl + if [[ $f_no_ext =~ ^e-acsl.*$ ]]; then + destdir="$WEBSITE_DIR/$DOWNLOAD_DIR/e-acsl" + else + destdir="$WEBSITE_DIR/$DOWNLOAD_DIR" + fi + if [[ -L $fpath ]]; then + # symbolic links are copied to the website and prepended with 'frama-c-' + # (except for acsl.pdf, which is copied as is) + if [[ $f_no_ext =~ ^(e-)?acsl$ ]]; then + ln="$f" + else + ln="frama-c-$f" + fi + run "rm -f $destdir/$ln" + run "cp -P $fpath $destdir/$ln" + run "git -C $destdir add $ln" + else + # non-symbolic links are copied as-is to the website, and also to + # the Gitlab wiki, where they are also added as links + f_no_pdf_ext="${f%.pdf}" + echo "- [${f_no_pdf_ext%-${FRAMAC_VERSION_AND_CODENAME}}](manuals/$f)" >> $WIKI_PAGE + run "cp $fpath $GITLAB_WIKI/manuals/" + run "git -C $GITLAB_WIKI add manuals/$f" + run "cp $fpath $destdir/$f" + run "git -C $destdir add $f" + fi + done + + INSTALL_WEBPAGE=html/installations/$(echo "$FRAMAC_VERSION_CODENAME" | tr '[:upper:]' '[:lower:]').md + INSTALL_WEBPAGE_PATH=$WEBSITE_DIR/$INSTALL_WEBPAGE + echo "----" > $INSTALL_WEBPAGE_PATH + echo "layout: doc_page" >> $INSTALL_WEBPAGE_PATH + echo "title: Installation instructions for $FRAMAC_VERSION_CODENAME" >> $INSTALL_WEBPAGE_PATH + echo "----" >> $INSTALL_WEBPAGE_PATH + cat ./INSTALL.md >> $INSTALL_WEBPAGE_PATH + run "git -C $WEBSITE_DIR add $INSTALL_WEBPAGE" - run "git -C $GITLAB_WIKI add $PAGE_NAME" - ;; - *) - echo "Bad entry: ${STEP}" - echo "Exiting without doing anything."; - exit 31 - ;; + run "git -C $GITLAB_WIKI add $PAGE_NAME" + ;; + *) + echo "Bad entry: ${STEP}" + echo "Exiting without doing anything."; + exit 31 + ;; esac exit 0 -- GitLab