From 06af8cc0834e49cab08bd74a16d160b8f97f2759 Mon Sep 17 00:00:00 2001 From: Allan Blanchard <allan.blanchard@cea.fr> Date: Wed, 4 Sep 2024 16:18:51 +0200 Subject: [PATCH] [release] the installation link now targets GitLab --- bin/build-src-distrib.sh | 837 --------------------------------------- dev/build-release.sh | 2 +- doc/release/deploy.tex | 13 - 3 files changed, 1 insertion(+), 851 deletions(-) delete mode 100755 bin/build-src-distrib.sh diff --git a/bin/build-src-distrib.sh b/bin/build-src-distrib.sh deleted file mode 100755 index c4b43f1b3eb..00000000000 --- a/bin/build-src-distrib.sh +++ /dev/null @@ -1,837 +0,0 @@ -#! /usr/bin/env bash -########################################################################## -# # -# This file is part of Frama-C. # -# # -# Copyright (C) 2007-2024 # -# CEA (Commissariat à l'énergie atomique et aux énergies # -# alternatives) # -# # -# you can redistribute it and/or modify it under the terms of the GNU # -# Lesser General Public License as published by the Free Software # -# Foundation, version 2.1. # -# # -# It is distributed in the hope that it will be useful, # -# but WITHOUT ANY WARRANTY; without even the implied warranty of # -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # -# GNU Lesser General Public License for more details. # -# # -# See the GNU Lesser General Public License version 2.1 # -# for more details (enclosed in the file licenses/LGPLv2.1). # -# # -########################################################################## - -set -u - -# Search "BEGIN SCRIPT" to skip functions - -# Set it to "no" in order to really execute the commands. -# Otherwise, they are only printed. -DEBUG=no - -# Set variable VERBOSE_MAKE_DOC to see all latex messages during manuals build - -# 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 127 -fi - -# git-lfs needs to be installed -if ! command -v git-lfs >/dev/null 2>/dev/null; then - echo "git-lfs is required" - exit 127 -fi - -# grep needs to be installed -if ! command -v grep --version >/dev/null 2>/dev/null; then - echo "grep is required" - exit 127 -fi - -function run { - cmd=$1 - echo "$cmd" - if test "$DEBUG" == "no"; then - sh -c "$cmd" || { echo "Aborting step ${STEP}."; exit "${STEP}"; } - fi -} - -function step { - STEP=$1 - echo - echo "Step $1: $2" -} - -# find_repository_DIRECTORY_BRANCH path url -# - path: path to the directory -# - url: URL of the repository -# Checks: -# - master branch -# Sets: -# DIRECTORY: path to the directory -function find_repository_DIRECTORY_BRANCH { - name=$1 - url=$2 - if test \! -d $name/.git ; then - echo "### WARNING: $name/.git directory not found; do you want to clone it? (y/n)" - read CHOICE - case "${CHOICE}" in - "Y"|"y") - run "git clone $url $name" - ;; - *) - echo "The $url repository must be linked at $name (clone or symbolic link)" - exit 1 - ;& - esac - fi - DIRECTORY=$name - BRANCH=`git --git-dir=$name/.git rev-parse --abbrev-ref HEAD` - if [ "$BRANCH" != "master" ]; then - echo "### WARNING: $name repository is on branch $BRANCH" - proceed_anyway "Reset the branch to 'master', then run the script again." - fi -} - -# proceed_anyway message -# - message: text to display if we have to stop -# Ask if the user wants to continue and display the message if not (then exit) -function proceed_anyway { - message=$1 - echo "Proceed anyway? [y/N]" - read CHOICE - case "${CHOICE}" in - "Y"|"y") - ;; - *) - echo "$message" - exit 1 - esac -} - -function look_for_uncommited_changes { - run "git update-index --refresh" - if ! git diff-index HEAD --; then - echo "" - echo "### WARNING: uncommitted git changes will be discarded when creating archive!" - proceed_anyway "Stash or commit local changes, then run the script again." - fi -} - -function look_for_frama_c_dev { - grep -Iir "frama-c+dev" src &> /dev/null - if [ "$?" == "0" ]; then - echo "### WARNING: Remaining frama-c+dev occurrences in 'src'" - proceed_anyway "Update API, then run the script again" - fi -} - -function assert_build_dir { - if test \! -d "$BUILD_DIR" ; then - echo "ERROR: $BUILD_DIR does not exist, possibly removed by another step" - exit 1 - 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 -# Ask for user validation before staging changes in [file] on the [repository]. -# Stops the script if the user refuses the changes -function diff_validation { - repo=$1 - file=$2 - run "git -C $repo diff $file" - echo - echo "Is the above diff correct for $file? [y/N]" - read CHOICE - case "${CHOICE}" in - "Y"|"y") - ;; - *) - echo "Something went wrong, you may want to clean $repo" - exit 1 - esac - 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 { - PAGE_NAME=Frama-C-${FRAMAC_VERSION_AND_CODENAME}.md - WIKI_PAGE=$WIKI_DIR/$PAGE_NAME - run "mkdir -p $WIKI_DIR/manuals" - run "sed -e '/<!-- LAST RELEASE -->/a\\ -- [${FRAMAC_VERSION} (${FRAMAC_VERSION_CODENAME})](Frama-C-${FRAMAC_VERSION_AND_CODENAME})' -i.bak $WIKI_DIR/Home.md" - run "rm -f $WIKI_DIR/Home.md.bak" - if test "$FINAL_RELEASE" = "yes"; then - release_type="FINAL" - else - release_type="BETA" - fi - run "sed -e '/<!-- LAST ${release_type} RELEASE -->/a\\ -- [${FRAMAC_VERSION} (${FRAMAC_VERSION_CODENAME})](Frama-C-${FRAMAC_VERSION_AND_CODENAME})' -i.bak $WIKI_DIR/_sidebar.md" - run "rm -f $WIKI_DIR/_sidebar.md.bak" - echo "# Frama-C release ${FRAMAC_VERSION} (${FRAMAC_VERSION_CODENAME})" > $WIKI_PAGE - echo "## Sources" >> $WIKI_PAGE - run "cp $OUT_DIR/$TARGZ_FILENAME $WIKI_DIR/downloads" - run "git -C $WIKI_DIR add downloads/$TARGZ_FILENAME" - echo " - [$TARGZ_FILENAME](downloads/$TARGZ_FILENAME)" >> $WIKI_PAGE - echo "" >> $WIKI_PAGE - echo "## Manuals" >> $WIKI_PAGE - for fpath in $OUT_DIR/manuals/* ; do - f=$(basename $fpath) - 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 - sed 's/\(\#.*\)/##\1/' $CHANGES >> $WIKI_PAGE - run "git -C $WIKI_DIR add $PAGE_NAME" - diff_validation $WIKI_DIR "Home.md" - diff_validation $WIKI_DIR "_sidebar.md" -} - -# WEBSITE pages generation - -function add_install_page { - INSTALL_WEBPAGE=html/installations/$FRAMAC_VERSION_CODENAME_LOWER.md - INSTALL_WEBPAGE_PATH=$WEBSITE_DIR/$INSTALL_WEBPAGE - EXT="$FRAMAC_VERSION_CODENAME (released on $(date +%Y-%m-%d))" - echo "---" > $INSTALL_WEBPAGE_PATH - echo "layout: installation_page" >> $INSTALL_WEBPAGE_PATH - echo "version: $FRAMAC_VERSION_CODENAME_LOWER" >> $INSTALL_WEBPAGE_PATH - echo "title: Installation instructions for $FRAMAC_VERSION_CODENAME" >> $INSTALL_WEBPAGE_PATH - echo "---" >> $INSTALL_WEBPAGE_PATH - echo >> $INSTALL_WEBPAGE_PATH - cat ./INSTALL.md |\ - sed -e "s/^\(# Installing Frama-C\)$/\1 $EXT/" >> $INSTALL_WEBPAGE_PATH - - run "git -C $WEBSITE_DIR add $INSTALL_WEBPAGE" -} - -function add_event_page { - EVENT_WEBPAGE=_events/framac-$FRAMAC_VERSION_SAFE.md - EVENT_WEBPAGE_PATH=$WEBSITE_DIR/$EVENT_WEBPAGE - - if [ "$VERSION_MINOR" != 0 ]; then - PREVIOUS=$VERSION_MAJOR - else - PREVIOUS=$(( $VERSION_MAJOR-1 )) - fi - PREVIOUS_NAME=$(git show $PREVIOUS.0:VERSION_CODENAME) - - TEXTUAL_VERSION="Frama-C $FRAMAC_VERSION ($FRAMAC_VERSION_CODENAME)" - TEXTUAL_PREVIOUS="Frama-C $PREVIOUS ($PREVIOUS_NAME)" - - echo "---" > $EVENT_WEBPAGE_PATH - echo "layout: default" >> $EVENT_WEBPAGE_PATH - echo "date: $(date +\"%d-%m-%Y\")" >> $EVENT_WEBPAGE_PATH - echo "short_title: $TEXTUAL_VERSION" >> $EVENT_WEBPAGE_PATH - echo -n "title: " >> $EVENT_WEBPAGE_PATH - if [ "$FINAL_RELEASE" = "no" ]; then - echo -n "Beta release " >> $EVENT_WEBPAGE_PATH - else - echo -n "Release " >> $EVENT_WEBPAGE_PATH - fi - echo "of $TEXTUAL_VERSION" >> $EVENT_WEBPAGE_PATH - VERSION_PAGE="/fc-versions/$FRAMAC_VERSION_CODENAME_LOWER.html" - echo "link: $VERSION_PAGE" >> $EVENT_WEBPAGE_PATH - echo "---" >> $EVENT_WEBPAGE_PATH - echo >> $EVENT_WEBPAGE_PATH - echo "$TEXTUAL_VERSION is out. Download it [here]($VERSION_PAGE)." >> $EVENT_WEBPAGE_PATH - echo >> $EVENT_WEBPAGE_PATH - echo "Main changes with respect to $TEXTUAL_PREVIOUS include:" >> $EVENT_WEBPAGE_PATH - echo >> $EVENT_WEBPAGE_PATH - sed 's/\(\#.*\)/###\1/' $CHANGES >> $EVENT_WEBPAGE_PATH - - run "git -C $WEBSITE_DIR add $EVENT_WEBPAGE" -} - -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 - echo "beta: true" >> $VERSION_WEBPAGE_PATH - else - 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.tar.gz" >> $VERSION_WEBPAGE_PATH - fi - 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" -} - -function add_downloads { - DOWNLOAD_DIR="$WEBSITE_DIR/download" - DOWNLOAD_PATH="download" - for fpath in $OUT_DIR/manuals/* ; do - f=$(basename $fpath) - f_no_ext=${f%.*} - - 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 - 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" - # 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" - 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" - if test "$FINAL_RELEASE" = "yes"; then - run "cp $OUT_DIR/$TARGZ_FILENAME $DOWNLOAD_DIR/frama-c-source-dist.tar.gz" - run "git -C $WEBSITE_DIR add $DOWNLOAD_PATH/frama-c-source-dist.tar.gz" - fi - - # API - run "cp $OUT_DIR/frama-c-api.tar.gz $DOWNLOAD_DIR/frama-c-$FRAMAC_VERSION_AND_CODENAME-api.tar.gz" - run "git -C $WEBSITE_DIR add $DOWNLOAD_PATH/frama-c-$FRAMAC_VERSION_AND_CODENAME-api.tar.gz" -} - -function fill_website { - add_install_page - add_event_page - add_version_page - add_downloads -} - -# Commit changes - -function create_website_branch { - if test "$FINAL_RELEASE" = "yes"; then - BRANCH_NAME="release/stable-$FRAMAC_VERSION_SAFE-$FRAMAC_VERSION_CODENAME_LOWER" - else - BRANCH_NAME="release/beta-$FRAMAC_VERSION_SAFE-$FRAMAC_VERSION_CODENAME_LOWER" - fi - # Chech whether release/<release> exists on the website - git -C $WEBSITE_DIR show-ref --verify --quiet refs/heads/$BRANCH_NAME - if [[ "$?" == "0" ]]; then - echo "### Warning: branch $BRANCH_NAME already exists in $WEBSITE_DIR" - echo "The script will ERASE this branch" - proceed_anyway "Rename or erase the branch, then run the script again." - run "git -C $WEBSITE_DIR checkout master" - run "git -C $WEBSITE_DIR branch -D $BRANCH_NAME" - fi - - # Set release/<release> and displays changes to be committed - run "git -C $WEBSITE_DIR checkout --quiet -b $BRANCH_NAME" - run "git -C $WEBSITE_DIR status" - - echo "Commit locally the previous changes on $WEBSITE_DIR:$BRANCH_NAME? [y/N]" - read CHOICE - case "${CHOICE}" in - "Y"|"y") - ;; - *) - echo "Abort website branch creation, reset to master." - run "git -C $WEBSITE_DIR checkout master" - exit 1 - esac - run "git -C $WEBSITE_DIR commit -m \"$FRAMAC_VERSION_SAFE-$FRAMAC_VERSION_CODENAME release\"" -} - -function commit_wiki { - run "git -C $WIKI_DIR status" - - echo "Commit locally the previous changes on $WIKI_DIR? [y/N]" - read CHOICE - case "${CHOICE}" in - "Y"|"y") - ;; - *) - echo "Abort wiki update." - exit 1 - esac - run "git -C $WIKI_DIR commit -m \"$FRAMAC_VERSION_SAFE-$FRAMAC_VERSION_CODENAME release\"" -} - - -function propagate_changes { - create_website_branch - commit_wiki -} - -function last_step_validation { - # if test "$FRAMAC_VERSION" != "$FRAMAC_TAG"; then - # echo "To go further, the last commit must be tagged with the right version" - # exit 1 - # fi - echo " - This step will: - - - ask for a validation of the changes to website - - create a NEW local branch for the website - - - ask for a validation of the changes to wiki - - commit changes to the wiki MASTER local branch - - If you want to perform some additional checks it is probably time to stop. - - Generated files are available in: $OUT_DIR. - " - echo -n "If you are ready to continue, type exactly \"RELEASE\": " - read CHOICE - case "${CHOICE}" in - "RELEASE") - ;; - *) - echo "Aborting" - exit 1 - esac -} - - -# BEGIN SCRIPT -GITLAB_FRAMA_C_PUBLIC="git@git.frama-c.com:pub" -GITLAB_WIKI="$GITLAB_FRAMA_C_PUBLIC/frama-c.wiki.git" -GITLAB_WEBSITE="$GITLAB_FRAMA_C_PUBLIC/pub.frama-c.com.git" -GITLAB_ACSL="git@github.com:acsl-language/acsl.git" -GITLAB_FRAMA_C_PRIVATE="git@git.frama-c.com:frama-c/frama-c.git" - -if test \! -e .git ; then - echo "ERROR: .git directory not found" - echo "This script must be run at the root of a Frama-C repository" - exit 1 -fi -FRAMAC_BRANCH=`git --git-dir=.git rev-parse --abbrev-ref HEAD` - -if test \! -f VERSION ; then - echo "ERROR: VERSION file not found" - echo "This script must be run at the root of a Frama-C repository" - exit 1 -fi - -FRAMAC_VERSION=$(cat VERSION) -FRAMAC_VERSION_SAFE="$(echo ${FRAMAC_VERSION} | sed -e "s/~/-/")" -FRAMAC_TAG=$(git describe --tag) -FRAMAC_VERSION_CODENAME=$(cat VERSION_CODENAME) -FRAMAC_VERSION_CODENAME_LOWER=$(echo "$FRAMAC_VERSION_CODENAME" | tr '[:upper:]' '[:lower:]') -FRAMAC_VERSION_AND_CODENAME="${FRAMAC_VERSION_SAFE}-${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 -if [ "$VERSION_MODIFIER" == "+dev" ]; then - echo "### WARNING: The VERSION is a development version" - proceed_anyway "Update VERSION and run the script again" -fi - -if test "$FRAMAC_VERSION_SAFE" != "$FRAMAC_TAG"; then - echo "### WARNING: The current commit is not tagged with the current version:" - echo "Frama-C Version: $FRAMAC_VERSION" - echo "Frama-C Tag : $FRAMAC_TAG" -fi - -# Find specific repositories - -find_repository_DIRECTORY_BRANCH "./frama-c.wiki" $GITLAB_WIKI -WIKI_DIR=$DIRECTORY -WIKI_BRANCH=$BRANCH - -find_repository_DIRECTORY_BRANCH "./website" $GITLAB_WEBSITE -WEBSITE_DIR=$DIRECTORY -WEBSITE_BRANCH=$BRANCH - -find_repository_DIRECTORY_BRANCH "./doc/acsl" $GITLAB_ACSL -ACSL_DIR=$DIRECTORY - -CHANGES="./main_changes.md" -if test \! -f $CHANGES ; then - echo "### WARNING: The $CHANGES file is missing" - echo "Do you want to create an empty one? [y/N]" - read CHOICE - case "${CHOICE}" in - "Y"|"y") - touch $CHANGES;; - *) - echo "Create a changes file and run the script again" - exit 1 - 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 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" - -FILTER="" -if [ -z ${VERBOSE_MAKE_DOC+x} ]; then - if command -v texfot --version >/dev/null 2>/dev/null; then - FILTER="texfot --ignore '(Warning|Overfull|Underfull|Version)'" - fi -fi - -BUILD_DIR_ROOT="/tmp/release" -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 "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: - - N) previous information is wrong, STOP the script - 0) ERASE $OUT_DIR - 1) compile PDF manuals (will ERASE $MANUALS_DIR!) - 2) build the source distribution - 3) build API bundle - 4) build documentation companions - 5) clean $BUILD_DIR - 6) prepare wiki (will RESET HARD $WIKI_DIR:$WIKI_BRANCH) - 7) prepare website (will RESET HARD $WEBSITE_DIR:$WEBSITE_BRANCH) - 8) check generated distribution - 9) generate opam file - 10) commit changes - -Start at which step? (default is N, which cancels everything) -- If this is the first time running this script, start at 0 -- Otherwise, start at the latest step before failure -" -read STEP - -case "${STEP}" in - ""|"N") - echo "Exiting without doing anything."; - exit 0; - ;& - 0) - step 0 "PREPARE DISTRIBUTION DIRECTORY" - run "rm -rf $OUT_DIR" - run "mkdir -p $OUT_DIR" - ;& - - 1) - step 1 "COMPILING PDF MANUALS" - run "rm -rf $MANUALS_DIR" - run "mkdir -p $MANUALS_DIR" - run "$FILTER make -C doc all" - run "rm -rf $OUT_DIR/manuals" - run "mkdir -p $OUT_DIR/manuals" - run "cp $MANUALS_DIR/* $OUT_DIR/manuals" - ;& - 2) - step 2 "BUILDING THE SOURCE DISTRIBUTION" - look_for_uncommited_changes - look_for_frama_c_dev - 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 DISTRIB=frama-c-${FRAMAC_VERSION_AND_CODENAME} src-distrib" - # sanity check: markdown-report must be distributed - run "tar tf $BUILD_DIR/$TARGZ_FILENAME | grep -q src/plugins/markdown-report" - run "cp $BUILD_DIR/$TARGZ_FILENAME $OUT_DIR" - ;& - 3) - step 3 "BUILDING THE API BUNDLE" - assert_build_dir - run "cd $BUILD_DIR; make -j doc-distrib" - run "cp $BUILD_DIR/frama-c-api.tar.gz $OUT_DIR" - ;& - 4) - step 4 "BUILDING THE DOCUMENTATION COMPANIONS" - assert_build_dir - run "cd $BUILD_DIR; make -j doc-companions" - run "cp $BUILD_DIR/hello-${FRAMAC_VERSION_AND_CODENAME}.tar.gz $OUT_DIR" - ;& - 5) - step 5 "CLEAN $BUILD_DIR" - run "rm -rf $BUILD_DIR" - run "git worktree prune" - ;& - 6) - step 6 "PREPARE WIKI" - assert_out_dir - run "git -C $WIKI_DIR checkout master" - run "git -C $WIKI_DIR fetch origin" - run "git -C $WIKI_DIR reset --hard origin/master" - fill_wiki - ;& - 7) - step 7 "PREPARE WEBSITE" - assert_out_dir - run "git -C $WEBSITE_DIR checkout master" - run "git -C $WEBSITE_DIR fetch origin" - run "git -C $WEBSITE_DIR reset --hard origin/master" - fill_website - ;& - 8) - step 8 "CHECK GENERATED DISTRIBUTION" - assert_out_dir - TEST_DIR="$BUILD_DIR_ROOT/frama-c-${FRAMAC_VERSION_AND_CODENAME}" - run "mkdir -p $BUILD_DIR_ROOT" - run "rm -rf $TEST_DIR" - run "cp $OUT_DIR/$TARGZ_FILENAME $BUILD_DIR_ROOT" - run "cd $BUILD_DIR_ROOT ; tar xzf $TARGZ_FILENAME" - run "./doc/release/checktar.sh $TEST_DIR" - run "cd $TEST_DIR ; ./configure && make -j && make tests PTESTS_OPTS=\"-error-code\"" - run "rm -rf $TEST_DIR" - ;& - 9) - step 9 "GENERATE OPAM FILE" - assert_out_dir - cat opam | grep -v "^version\:" | grep -v "^name\:" > $OUT_DIR/opam - echo >> "$OUT_DIR/opam" - echo "url {" >> "$OUT_DIR/opam" - echo " src: \"https://git.frama-c.com/pub/frama-c/-/wikis/downloads/$TARGZ_FILENAME\"" >> "$OUT_DIR/opam" - echo " checksum: \"sha256=$(sha256sum $OUT_DIR/$TARGZ_FILENAME | cut -d" " -f1)\"" >> "$OUT_DIR/opam" - echo "}" >> "$OUT_DIR/opam" - ;& - 10) - step 10 "COMMIT CHANGES" - last_step_validation - propagate_changes - ;; - *) - echo "Bad entry: ${STEP}" - echo "Exiting without doing anything."; - exit 31 -esac - -exit 0 diff --git a/dev/build-release.sh b/dev/build-release.sh index cf2a3594f26..0434490bfdc 100755 --- a/dev/build-release.sh +++ b/dev/build-release.sh @@ -483,7 +483,7 @@ releases: - name: Source distribution link: /download/$TARGZ_VERSION help: Compilation instructions - help_link: /html/installations/$LOWER_CODENAME.html + help_link: https://git.frama-c.com/pub/frama-c/-/blob/$TAG/INSTALL.md - name: User manual link: /download/user-manual-$VERSION_AND_CODENAME.pdf - name: Plug-in development guide diff --git a/doc/release/deploy.tex b/doc/release/deploy.tex index e0592f1698d..7a77fd1464e 100644 --- a/doc/release/deploy.tex +++ b/doc/release/deploy.tex @@ -60,19 +60,6 @@ Once the pipeline for the website has run, open \texttt{https://pub.frama-c.com} \item \texttt{rss.xml}: check last event \end{itemize} -For a beta version, the installation pages for: -\begin{itemize} -\item \texttt{/html/installations/<beta\_codename>.html} should indicate the beta status -\item \texttt{/html/installations/<current\_codename>.html} should not indicate anything -\item \texttt{/html/installations/<previous\_codename>.html} should indicate older version -\end{itemize} - -For a final version, the installation pages for: -\begin{itemize} -\item \texttt{/html/installations/<codename>.html} should not indicate anything -\item \texttt{/html/installations/<previous\_codename>.html} should indicate older version -\end{itemize} - On GitLab, in the website repository, in the merge request assigned to you, the following files must appear as \textbf{new} in \texttt{download}: \begin{itemize} -- GitLab