chiark / gitweb /
Merge branch 'gradleplugin' into 'master'
[fdroidserver.git] / buildserver / gradle
1 #!/bin/bash
2
3 bindir="$(dirname $0)"
4 basedir="$(dirname $bindir)"
5 verdir="${basedir}/versions"
6 args=("$@")
7
8 run_gradle() {
9         "${verdir}/${v_found}/bin/gradle" "${args[@]}"
10         exit $?
11 }
12
13 contains() {
14         local e
15         for e in $2; do
16                 [[ $e == $1 ]] && return 0;
17         done
18         return 1
19 }
20
21 # key-value pairs of what gradle version each gradle plugin version
22 # should accept (see: https://developer.android.com/studio/releases/gradle-plugin.html#updating-gradle)
23 d_plugin_k=(2.3.1 2.3.0 2.3  2.2.3  2.2.2  2.2.1  2.2.0    2.2  2.1.3  2.1  2.0 1.5 1.3 1.2   1.1   1.0 0.14 0.13 0.12 0.11 0.10  0.9  0.8 0.7 0.6 0.5 0.4 0.3 0.2)
24 d_plugin_v=(  3.3   3.3 3.3 2.14.1 2.14.1 2.14.1 2.14.1 2.14.1 2.14.1 2.12 2.12 2.4 2.4 2.3 2.2.1 2.2.1  2.1  2.1 1.12 1.12 1.12 1.11 1.10 1.9 1.8 1.6 1.6 1.4 1.4)
25
26 # All gradle versions we know about
27 plugin_v=(3.5 3.4.1 3.4 3.3 3.2.1 3.2 3.1 3.0 2.14.1 2.14 2.13 2.12 2.11 2.10 2.9 2.8 2.7 2.6 2.5 2.4 2.3 2.2.1 2.2 2.1 1.12 1.11 1.10 1.9 1.8 1.7 1.6 1.4)
28
29 v_all=${plugin_v[@]}
30 echo "Available gradle versions: ${v_all[@]}"
31
32 # Earliest takes priority
33 for f in {.,..}/gradle/wrapper/gradle-wrapper.properties; do
34         [[ -f $f ]] || continue
35         while read l; do
36                 if [[ $l == 'distributionUrl='* ]]; then
37                         wrapper_ver=$(echo -n "$l" | sed "s/.*gradle-\\([0-9\\.\\+]\\+\\).*/\\1/")
38                 fi
39         done < $f
40 done
41
42 if [[ -n $wrapper_ver ]]; then
43         v_found=$wrapper_ver
44         echo "Found $v_found via distributionUrl"
45         run_gradle
46 fi
47
48 # Earliest takes priority
49 for f in {.,..}/build.gradle; do
50         [[ -f $f ]] || continue
51         while read l; do
52                 if [[ -z "$plugin_pver" && $l == *'com.android.tools.build:gradle:'* ]]; then
53                         plugin_pver=$(echo -n "$l" | sed "s/.*com.android.tools.build:gradle:\\([0-9\\.\\+]\\+\\).*/\\1/")
54                 elif [[ -z "$wrapper_ver" && $l == *'gradleVersion = '* ]]; then
55                         wrapper_ver=$(echo -n "$l" | sed "s/.*gradleVersion *=* *[\"']\\([0-9\\.]\\+\\)[\"'].*/\\1/")
56                 fi
57         done < $f
58 done
59
60 if [[ -n $wrapper_ver ]]; then
61         v_found=$wrapper_ver
62         echo "Found $v_found via gradleVersion"
63         run_gradle
64 fi
65
66 if [[ -n $plugin_pver ]]; then
67         i=0
68         match=false
69         for k in ${d_plugin_k[@]}; do
70                 if [[ $plugin_pver == ${k}* ]]; then
71                         plugin_ver=${d_plugin_v[$i]}
72                         match=true
73                         break
74                 fi
75                 let i++
76         done
77         if $match; then
78                 v_found=$plugin_ver
79                 echo "Found $v_found via gradle plugin version $k"
80         fi
81 fi
82
83 # Find the highest version available
84 for v in ${plugin_v[*]}; do
85         if contains $v "${v_all[*]}"; then
86                 v_def=$v
87                 break
88         fi
89 done
90
91 if [[ -z $v_found ]]; then
92         echo "No suitable gradle version found - defaulting to $v_def"
93         v_found=$v_def
94 fi
95
96 run_gradle