From 814abe3d9af9b43f6d7cd47f555e3df4c59deee3 Mon Sep 17 00:00:00 2001 From: Andre Maroneze <andre.oliveiramaroneze@cea.fr> Date: Mon, 11 May 2020 14:26:36 +0200 Subject: [PATCH] [Release] Update release script for Gitlab and minor fixes --- bin/build-src-distrib.sh | 169 ++++++++++++--------------------------- 1 file changed, 51 insertions(+), 118 deletions(-) diff --git a/bin/build-src-distrib.sh b/bin/build-src-distrib.sh index 135ec77bc8a..f0394c36d3b 100755 --- a/bin/build-src-distrib.sh +++ b/bin/build-src-distrib.sh @@ -54,57 +54,51 @@ run () { fi } -GITHUB_DIR=./Frama-C-snapshot -GITHUB_GIT="git@github.com:Frama-C/Frama-C-snapshot.git" +GITLAB_DIR=./pub-frama-c +GITLAB_GIT="git@git.frama-c.com:pub/frama-c.git" -if test ! -d $GITHUB_DIR/.git; then - echo "WARNING: $GITHUB_DIR/.git directory not found; do you want to clone it? (y/n)" +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 $GITHUB_GIT" + run "git clone $GITLAB_GIT $GITLAB_DIR" ;; *) - echo "github's Frama-C-snapshot project must be linked at $GITHUB_DIR \ + echo "gitlab's public Frama-C project must be linked at $GITLAB_DIR \ (clone or symbolic link)" exit 1 ;& esac fi -GITHUB_BRANCH=$(git --git-dir=$GITHUB_DIR/.git rev-parse --abbrev-ref HEAD) - -if test "$FINAL_RELEASE" = "yes" -a "$GITHUB_BRANCH" != "master"; then - echo "WARNING: your setup will commit (locally) a final release on a non-master branch of Frama-C-snapshot"; -fi - -if test "$FINAL_RELEASE" = "no" -a "$GITHUB_BRANCH" = "master"; -then - echo "WARNING: your setup will commit (locally) an intermediate release on the master branch of Frama-C-snapshot" +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 - -GITHUB_WIKI_GIT="git@github.com:Frama-C/Frama-C-snapshot.wiki.git" -GITHUB_WIKI=./Frama-C-snapshot.wiki -if test ! -d $GITHUB_WIKI/.git; then - echo "WARNING: $GITHUB_WIKI/.git directory not found; do you want to clone it? (y/n)" +GITLAB_WIKI_GIT="git@git.frama-c.com:pub/frama-c.wiki" +GITLAB_WIKI=./frama-c.wiki +if test ! -d $GITLAB_WIKI/.git; then + echo "WARNING: $GITLAB_WIKI/.git directory not found; do you want to clone it? (y/n)" read CHOICE case "${CHOICE}" in "Y"|"y") - run "git clone $GITHUB_WIKI_GIT" + run "git clone $GITLAB_WIKI_GIT" ;; *) - echo "Frama-C-snapshot wiki must be linked at $GITHUB_WIKI \ + echo "pub/frama-c wiki must be linked at $GITLAB_WIKI \ (clone or symbolic link)" exit 1 ;& esac fi -GITHUB_WIKI_BRANCH=$(git --git-dir=$GITHUB_WIKI/.git rev-parse --abbrev-ref HEAD) +GITLAB_WIKI_BRANCH=$(git --git-dir=$GITLAB_WIKI/.git rev-parse --abbrev-ref HEAD) -if test "$GITHUB_WIKI_BRANCH" != "master"; then - echo "WARNING: Frama-C-snapshot's wiki is not on the master branch"; +if test "$GITLAB_WIKI_BRANCH" != "master"; then + echo "WARNING: pub/frama-c's wiki is not on the master branch"; fi -ACSL_GIT="git@github.com:acsl-language/acsl.git" +ACSL_GIT="git@gitlab.com:acsl-language/acsl.git" ACSL_DIR="./doc/acsl" if test \! -d $ACSL_DIR/.git ; then echo "WARNING: $ACSL_DIR/.git directory not found; do you want to clone it? (y/n)" @@ -125,12 +119,6 @@ fi MANUALS_DIR="./doc/manuals" -#if test \! -d $MANUALS_DIR/.git ; then -# echo "ERROR: $MANUALS_DIR/.git directory not found" -# echo "The Frama-C manuals repository must linked at $MANUALS_DIR (clone or symbolic link)" -# exit 1 -#fi -#MANUALS_BRANCH=`git --git-dir=$MANUALS_DIR/.git rev-parse --abbrev-ref HEAD` # push on frama-c.com only for final releases if test "$FINAL_RELEASE" = "yes"; then @@ -149,11 +137,10 @@ 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 "Frama-C-snapshot dir : $GITHUB_DIR" -echo "Frama-C-snapshot branch : $GITHUB_BRANCH" -echo "Frama-C-snapshot wiki : $GITHUB_WIKI" +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" -#echo "Manuals Branch : $MANUALS_BRANCH" if test "$FINAL_RELEASE" = "yes"; then echo "Website Dir : $WEBSITE_DIR" echo "Website Branch : $WEBSITE_BRANCH" @@ -198,15 +185,18 @@ case "${STEP}" in run "doc/build-manuals.sh" ;& 1) - run "git -C $GITHUB_DIR reset --hard" - run "git -C $GITHUB_WIKI reset --hard" + 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" - if ! git diff-index --quiet HEAD --; then + # 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]" @@ -227,15 +217,9 @@ case "${STEP}" in 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" - # cleanup Frama-C-snapshot - for file in $(git -C $GITHUB_DIR ls-files); do - run "rm $GITHUB_DIR/$file"; - done - run "git -C $GITHUB_DIR clean -fx" - run "cd $GITHUB_DIR; tar --strip-components=1 -xzvf $BUILD_DIR/$TARGZ_FILENAME" - run "git -C $GITHUB_DIR add -A" - run "mkdir -p $GITHUB_WIKI/downloads" - run "cp $BUILD_DIR/$TARGZ_FILENAME $GITHUB_WIKI/downloads/" + # 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" @@ -284,83 +268,32 @@ case "${STEP}" in 5) step 5 "COPYING AND STAGING THE DISTRIBUTED MANUALS" PAGE_NAME=Frama-C-${FRAMAC_VERSION_AND_CODENAME}.md - WIKI_PAGE=$GITHUB_WIKI/$PAGE_NAME - run "mkdir -p $GITHUB_WIKI/manuals" + 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})' $GITHUB_WIKI/Home.md" +- [${FRAMAC_VERSION} (${FRAMAC_VERSION_CODENAME})](Frama-C-${FRAMAC_VERSION_AND_CODENAME})' $GITLAB_WIKI/Home.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 f in "user-manual" "acsl-implementation" "eva-manual" "plugin-development-guide" "rte-manual" "wp-manual" "metrics-manual" "aorai-manual"; do - echo "- [$f](manuals/$f-${FRAMAC_VERSION_AND_CODENAME}.pdf)" >> $WIKI_PAGE - run "cp $MANUALS_DIR/$f.pdf $GITHUB_WIKI/manuals/$f-${FRAMAC_VERSION_AND_CODENAME}.pdf" - run "git -C $GITHUB_WIKI add manuals/$f-${FRAMAC_VERSION_AND_CODENAME}.pdf" - if test "$FINAL_RELEASE" = "yes"; then - SPEC_FILE="$DOWNLOAD_DIR/$f-${FRAMAC_VERSION_AND_CODENAME}.pdf" - RELE_FILE="$DOWNLOAD_DIR/frama-c-$f.pdf" - run "rm -f $WEBSITE_DIR/$SPEC_FILE $WEBSITE_DIR/$RELE_FILE" - run "cp $MANUALS_DIR/$f.pdf $WEBSITE_DIR/$SPEC_FILE"; - run "ln -s $f-${FRAMAC_VERSION_AND_CODENAME}.pdf $WEBSITE_DIR/$RELE_FILE"; - run "git -C $WEBSITE_DIR add $SPEC_FILE" - run "git -C $WEBSITE_DIR add $RELE_FILE" - fi - done - for f in "aorai-example"; do - if test "$FINAL_RELEASE" = "yes"; then - SPEC_FILE="$DOWNLOAD_DIR/$f-${FRAMAC_VERSION_AND_CODENAME}.tgz" - RELE_FILE="$DOWNLOAD_DIR/frama-c-$f.tgz" - run "rm -f $WEBSITE_DIR/$SPEC_FILE $WEBSITE_DIR/$RELE_FILE" - run "cp $MANUALS_DIR/$f.tgz $WEBSITE_DIR/$SPEC_FILE"; - run "ln -s $f-${FRAMAC_VERSION_AND_CODENAME}.tgz $WEBSITE_DIR/$RELE_FILE"; - run "git -C $WEBSITE_DIR add $SPEC_FILE" - run "git -C $WEBSITE_DIR add $RELE_FILE" - fi - done + for fpath in $MANUALS_DIR/*; do + f=$(basename $fpath) + f_no_ext=${f%.*} + if [[ $f =~ ^frama-c ]]; then + echo "Skipping adding link to $f in wiki" + continue + fi + if [[ $f_no_ext = *${FRAMAC_VERSION_AND_CODENAME} ]]; then + echo "Skipping adding link to $f in wiki" + continue + fi + echo "- [$f](manuals/$f)" >> $WIKI_PAGE + run "cp $fpath $GITLAB_WIKI/manuals/" + run "git -C $GITLAB_WIKI add manuals/$f" + done - for f in "acsl"; do - ACSL_VERSION=`cat doc/acsl/ACSL_VERSION` - if test "$FINAL_RELEASE" = "yes"; then - SPEC_FILE="$DOWNLOAD_DIR/${f}-${ACSL_VERSION}.pdf" - RELE_FILE="$DOWNLOAD_DIR/$f.pdf" - run "rm -f $WEBSITE_DIR/$SPEC_FILE $WEBSITE_DIR/$RELE_FILE" - run "cp $MANUALS_DIR/$f.pdf $WEBSITE_DIR/$SPEC_FILE"; - run "ln -s ${f}-${ACSL_VERSION}.pdf $WEBSITE_DIR/$RELE_FILE"; - run "git -C $WEBSITE_DIR add $SPEC_FILE" - run "git -C $WEBSITE_DIR add $RELE_FILE" - fi - done - for f in "e-acsl-manual" "e-acsl-implementation"; do - echo "- [$f](manuals/${f}-${FRAMAC_VERSION_AND_CODENAME}.pdf)" >> $WIKI_PAGE - run "cp src/plugins/e-acsl/doc/manuals/$f.pdf $GITHUB_WIKI/manuals/${f}-${FRAMAC_VERSION_AND_CODENAME}.pdf" - run "git -C $GITHUB_WIKI add manuals/${f}-${FRAMAC_VERSION_AND_CODENAME}.pdf" - if test "$FINAL_RELEASE" = "yes"; then - SPEC_FILE="$DOWNLOAD_DIR/e-acsl/${f}-${FRAMAC_VERSION_AND_CODENAME}.pdf" - RELE_FILE="$DOWNLOAD_DIR/e-acsl/$f.pdf" - run "rm -f $WEBSITE_DIR/$SPEC_FILE $WEBSITE_DIR/$RELE_FILE" - run "cp src/plugins/e-acsl/doc/manuals/$f.pdf $WEBSITE_DIR/$SPEC_FILE" - run "ln -s ${f}-${FRAMAC_VERSION_AND_CODENAME}.pdf $WEBSITE_DIR/$RELE_FILE"; - run "git -C $WEBSITE_DIR add $SPEC_FILE" - run "git -C $WEBSITE_DIR add $RELE_FILE" - fi - done - # E-ACSL manuals based on ACSL version number - for f in "e-acsl"; do - echo "- [$f](manuals/${f}-${ACSL_VERSION}.pdf)" >> $WIKI_PAGE - run "cp src/plugins/e-acsl/doc/manuals/$f.pdf $GITHUB_WIKI/manuals/${f}-${ACSL_VERSION}.pdf" - run "git -C $GITHUB_WIKI add manuals/${f}-${ACSL_VERSION}.pdf" - if test "$FINAL_RELEASE" = "yes"; then - SPEC_FILE="$DOWNLOAD_DIR/e-acsl/${f}-${ACSL_VERSION}.pdf" - RELE_FILE="$DOWNLOAD_DIR/e-acsl/$f.pdf" - run "rm -f $WEBSITE_DIR/$SPEC_FILE $WEBSITE_DIR/$RELE_FILE" - run "cp src/plugins/e-acsl/doc/manuals/$f.pdf $WEBSITE_DIR/$SPEC_FILE" - run "ln -s ${f}-${ACSL_VERSION}.pdf $WEBSITE_DIR/$RELE_FILE"; - run "git -C $WEBSITE_DIR add $SPEC_FILE" - run "git -C $WEBSITE_DIR add $RELE_FILE" - fi - done - run "git -C $GITHUB_WIKI add $PAGE_NAME" + run "git -C $GITLAB_WIKI add $PAGE_NAME" ;; *) echo "Bad entry: ${STEP}" -- GitLab