diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 69ebd31169be79e1d42f518dcf9cba673227af0a..3df4eca2ade082f6fda7d5717905ea18abfe2d72 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -265,6 +265,7 @@ release-content: - website - wiki - opam-repository + - release-data.json only: variables: - $RELEASE == "yes" @@ -400,7 +401,7 @@ src-distrib-tests-long: - echo "$FRAMA_CI_BOT_SSH_PRIVATE" | nix run -f channel:nixos-19.03 coreutils --command base64 -d > nix/frama-c-public/id_ed25519 - nix run -f channel:nixos-19.03 coreutils --command chmod 400 nix/frama-c-public/id_ed25519 -release-frama-c: +release-branch: stage: release <<: *prepare_ssh_template script: @@ -412,6 +413,20 @@ release-frama-c: when: manual interruptible: false +release-create: + stage: release + script: + - (! git merge-base --is-ancestor a1e186c68a6418a53b3dc06237f49e8dcbf75f4a origin/$CI_COMMIT_BRANCH) + - nix-shell -p curl --run './nix/frama-c-public/publish-release.sh' + needs: + - release-branch + - release-content + only: + variables: + - $RELEASE == "yes" + when: manual + interruptible: false + release-opam: stage: release <<: *prepare_ssh_template diff --git a/dev/build-release.sh b/dev/build-release.sh index 75ce8d408fa1381db696aaae7132494cc9899c8a..219aca1ca2dfe00034c87f129974c229c49643b1 100755 --- a/dev/build-release.sh +++ b/dev/build-release.sh @@ -38,6 +38,7 @@ # - wiki (for the public Frama-C instance) # - website # - opam-repository +# - release-data.json # with the correct tree for generated files. ########################################################################## @@ -89,6 +90,13 @@ CODENAME="$(cat VERSION_CODENAME)" LOWER_CODENAME="$(echo "$CODENAME" | tr '[:upper:]' '[:lower:]')" VERSION_AND_CODENAME="${VERSION_SAFE}-${CODENAME}" +if [ "$VERSION_MINOR" != 0 ]; then + PREVIOUS="$VERSION_MAJOR.$(($VERSION_MINOR - 1))" +else + PREVIOUS="$(($VERSION_MAJOR - 1)).0" +fi +PREVIOUS_NAME=$(git show $PREVIOUS:VERSION_CODENAME) + if [ "$VERSION_MODIFIER" == "+dev" ]; then echo "Development version ($VERSION)" echo_red "Aborting" @@ -259,7 +267,7 @@ echo "Opam file built" ########################################################################## # Make wiki -show_step "Building website" +show_step "Building wiki" WIKI_DIR="wiki" @@ -295,6 +303,38 @@ sed 's/\(\#.*\)/##\1/' $CHANGES >> $WIKI_PAGE echo "Wiki page built" +########################################################################## +# Make wiki + +show_step "Building release json file" + +JSON_DATA="release-data.json" + +cat >$JSON_DATA <<EOL +{ + "name": "Frama-C $VERSION $CODENAME", + "tag_name": "$VERSION_SAFE", + "ref": "stable/$LOWER_CODENAME", + "assets": { + "links": [ + { + "name": "API Documentation", + "url": "https://frama-c.com/download/frama-c-$VERSION_AND_CODENAME-api.tar.gz", + "link_type":"other" + }, + { + "name": "Official source archive", + "url": "https://frama-c.com/download/$TARGZ_VERSION", + "link_type":"other" + } + ] + }, +EOL + echo " \"description\": \"# Main changes since $PREVIOUS $PREVIOUS_NAME\n$(cat $CHANGES | sed -z 's/\n/\\n/g' | sed 's/\(\#.*\)/#\1/')\"" >> $JSON_DATA + echo "}" >> $JSON_DATA + +echo "Release data file built" + ########################################################################## # Make website @@ -344,13 +384,6 @@ echo "Installation file built" mkdir -p $WEBSITE_EVENTS_DIR -if [ "$VERSION_MINOR" != 0 ]; then - PREVIOUS="$VERSION_MAJOR.$(($VERSION_MINOR - 1))" -else - PREVIOUS="$(($VERSION_MAJOR - 1)).0" -fi -PREVIOUS_NAME=$(git show $PREVIOUS:VERSION_CODENAME) - TEXTUAL_VERSION="Frama-C $VERSION ($CODENAME)" TEXTUAL_PREVIOUS="Frama-C $PREVIOUS ($PREVIOUS_NAME)" diff --git a/nix/frama-c-public/publish-release.sh b/nix/frama-c-public/publish-release.sh new file mode 100755 index 0000000000000000000000000000000000000000..9278ebae543a7dab6bbc5bf911609ef263332518 --- /dev/null +++ b/nix/frama-c-public/publish-release.sh @@ -0,0 +1,41 @@ +#! /usr/bin/env bash +########################################################################## +# # +# This file is part of Frama-C. # +# # +# Copyright (C) 2007-2022 # +# 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). # +# # +########################################################################## + +# Note: +# +# While this script can be run locally, it is meant to run in the Frama-C CI. +# Thus, it expects to be run from the root of the Frama-C directory and that +# some CI artifacts are available. Namely: +# - 'release-data.json' as generated by the script Frama-C/dev/build-release.sh +# - the 'FRAMA_CI_BOT_RELEASE_TOKEN' variable +# - the stable branch must be available on 'pub/frama-c' +# Availability of the file is NOT checked when the script starts. + +########################################################################## + +curl \ + --header 'Content-Type: application/json' \ + --header "PRIVATE-TOKEN:$FRAMA_CI_BOT_RELEASE_TOKEN" \ + --data-binary "@release-data.json" \ + --request POST \ + "https://git.frama-c.com/api/v4/projects/1113/releases"