File: release.sh

package info (click to toggle)
vite 1.4-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 19,112 kB
  • sloc: cpp: 30,167; makefile: 467; sh: 233; python: 140; ansic: 67
file content (96 lines) | stat: -rwxr-xr-x 3,093 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/usr/bin/env bash
###
#
#  @file release.sh
#  @copyright 2013-2024 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
#                       Univ. Bordeaux. All rights reserved.
#
#  @brief Script to generate the release when pushing a tag
#
#  @version 1.4.0
#  @author Florent Pruvost
#  @author Mathieu Faverge
#  @author Camille Ordronneau
#  @date 2024-07-23
#
###

#
# Steps to do the release:
#    - Update information in the code
#    - Update the ChangeLog
#    - Create a tag named vx.x.x and push it on solverstack (will trigger the CI to generate the release)
#
changelog=""
function gen_changelog()
{
    local firstline=$( grep -n "^ViTE " ChangeLog | head -n 1 | cut -d ':' -f 1 )
    firstline=$(( firstline + 2 ))
    echo $firstline
    local lastline=$( grep -n "^ViTE " ChangeLog | head -n 2 | tail -n 1 | cut -d ':' -f 1 )
    lastline=$(( lastline - 1 ))
    echo $lastline

    changelog="Changes:\n"
    for i in `seq $firstline $lastline`
    do
        local line=$( head -n $i ChangeLog | tail -n 1 )
        changelog="$changelog$line\n"
        echo $line
    done
}

release=""
function get_release()
{
    local firstline=$( grep -n "^ViTE " ChangeLog | head -n 1 | cut -d ':' -f 1 )
    release=$( head -n 1 ChangeLog | sed -E 's/ViTE ([0-9]+(\.[0-9]+){1,2}) .+/\1/' )
}

set -x

# Get the release name through the branch name, and through the ChangeLog file.
# Both have to match to be correct
RELEASE_NAME=`echo $CI_COMMIT_TAG | cut -d v -f 2`
get_release

if [ -z "$RELEASE_NAME" -o -z "$release" -o "$RELEASE_NAME" != "$release" ]
then
    echo "Commit name $RELEASE_NAME is different from ChangeLog name $release"
    exit 1
fi

readonly FULL_RELEASE_NAME=vite-$RELEASE_NAME
readonly GITLAB_API_ENDPOINT=https://gitlab.inria.fr/api/v4/projects/$CI_PROJECT_ID

# generate the archive without the web folder
git archive --format=tar HEAD --prefix=$FULL_RELEASE_NAME/ -o $FULL_RELEASE_NAME.tar
tar -f $FULL_RELEASE_NAME.tar --delete $FULL_RELEASE_NAME/web
gzip $FULL_RELEASE_NAME.tar

# upload the source archive to the Gitlab's Package registry
curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ./$FULL_RELEASE_NAME.tar.gz "$GITLAB_API_ENDPOINT/packages/generic/source/$CI_COMMIT_TAG/$FULL_RELEASE_NAME.tar.gz"

# extract the change log from ChangeLog
gen_changelog
echo -e $changelog
escaped_changelog=$(echo $changelog | sed 's/\"/\\\"/g')

# Try to remove the release if it already exists
curl --request DELETE --header "JOB-TOKEN: $CI_JOB_TOKEN" $GITLAB_API_ENDPOINT/releases/v$RELEASE_NAME

# create the release associated to the tag
curl --header "Content-Type: application/json" --header "JOB-TOKEN: $CI_JOB_TOKEN" --request POST $GITLAB_API_ENDPOINT/releases --data @- <<EOF
{
    "name": "v$RELEASE_NAME",
    "tag_name": "v$RELEASE_NAME",
    "ref": "$CI_COMMIT_REF_NAME",
    "description": "$escaped_changelog",
    "assets": {
        "links": [{
            "name": "Download release $FULL_RELEASE_NAME.tar.gz",
            "url": "$GITLAB_API_ENDPOINT/packages/generic/source/$CI_COMMIT_TAG/$FULL_RELEASE_NAME.tar.gz"
        }]
    }
}
EOF