Merge "Add Maven job to build dependencies with patches"
[releng/global-jjb.git] / shell / gerrit-fetch-dependencies.sh
1 #!/bin/bash
2 # SPDX-License-Identifier: EPL-1.0
3 ##############################################################################
4 # Copyright (c) 2017 The Linux Foundation and others.
5 #
6 # All rights reserved. This program and the accompanying materials
7 # are made available under the terms of the Eclipse Public License v1.0
8 # which accompanies this distribution, and is available at
9 # http://www.eclipse.org/legal/epl-v10.html
10 ##############################################################################
11 # Fetches patches all projects provided by comment trigger
12 #
13 # Takes a list of Gerrit patches and fetches all projects and cherry-pick
14 # patches for projects. The trigger is
15 #     'recheck: SPACE_SEPERATED_LIST_OF_PATCHES'
16 #
17 # NOTE: This script assumes the user will provide the correct dependency order
18 #       via the PATCHES list.
19
20 # Ensure we fail the job if any steps fail.
21 set -eu -o pipefail
22
23 REPOS_DIR="$WORKSPACE/.repos"
24
25 PATCHES=($(echo "$GERRIT_EVENT_COMMENT_TEXT" | grep 'recheck:' | awk -F: '{print $2}'))
26
27 projects=()
28 for patch in $(echo "${PATCHES[@]}"); do
29     json=$(curl -s "$GERRIT_URL/changes/$patch" | sed -e "s/)]}'//")
30     project=$(echo "$json" | jq -r '.project')
31     branch=$(echo "$json" | jq -r '.branch')
32
33     if [ ! -d "$REPOS_DIR/$project" ]; then
34         git clone -q --depth 1 -b "$branch" "$GIT_URL/$project" "$REPOS_DIR/$project"
35
36         # This array will be used later to determine project build order.
37         projects+=("$project")
38     fi
39
40     pushd "$REPOS_DIR/$project"
41     git remote add gerrit "$GIT_URL/$project"
42     git review --cherrypick="$patch"
43     popd
44 done
45
46 # This script should be a macro which re-inject's the projects variable back
47 # into the build so a script later on can use it.
48 echo "DEPENDENCY_BUILD_ORDER=${projects[*]}" > "$WORKSPACE/.dependency.properties"