summaryrefslogtreecommitdiffstats
path: root/jjb/releng/releng-release-tagging.sh
blob: f8cf9c8ea9e7206745def273694d1fec198f5ebd (plain)
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
#!/bin/bash
# SPDX-License-Identifier: Apache-2.0
##############################################################################
# Copyright (c) 2018 The Linux Foundation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
set -e -o pipefail

GIT_URL=${GIT_URL:-https://gerrit.opnfv.org/gerrit}
STREAM=${STREAM:-'nostream'}
RELEASE_FILES=$(git diff HEAD^1 --name-only -- "releases/$STREAM")

echo "--> Verifying $RELEASE_FILES."
for release_file in $RELEASE_FILES; do
    # Verify the release file schema
    python releases/scripts/verify_schema.py \
    -s releases/schema.yaml \
    -y $release_file

    # Verify tag for each repo exist and are attached to commits on stable-branch
    while read -r repo tag ref
    do
      echo "--> Cloning $repo"
      if [ ! -d $repo ]; then
          git clone $GIT_URL/$repo.git $repo
      fi
      pushd $repo &> /dev/null

      echo "--> Checking for tag: $tag"
      if ! (git tag -l | grep $tag &> /dev/null); then
          echo "$tag does not exist"
          TAG_EXISTS=false
      else
          git cat-file commit $tag
          TAG_EXISTS=true
      fi

      echo "--> Checking if $ref is on stable/$STREAM"
      if ! (git branch -a --contains $ref | grep "stable/$STREAM"); then
          echo "--> ERROR: $ref for $repo is not on stable/$STREAM!"
          # If the tag exists but is on the wrong ref, there's nothing
          # we can do. But if the tag neither exists nor is on the
          # correct branch we need to fail the verification.
          if [ $TAG_EXISTS = false ]; then
              exit 1
          fi
      else
          if [[ $TAG_EXISTS = false && "$JOB_NAME" =~ "merge" ]]; then
              # If the tag doesn't exist and we're in a merge job,
              # everything has been verified up to this point and we
              # are ready to create the tag.
              git config --global user.name "jenkins-ci"
              git config --global user.email "jenkins-opnfv-ci@opnfv.org"
              echo "--> Creating $tag tag for $repo at $ref"
              git tag -am "$tag" $tag $ref
              echo "--> Pushing tag"
              git push origin $tag
          else
              # For non-merge jobs just output the ref info.
              git show -s --format="%h %s %d" $ref
          fi
      fi

      popd &> /dev/null
      echo "--> Done verifing $repo"
    done < <(python releases/scripts/repos.py -f $release_file)
done