chiark / gitweb /
Add our gradle wrapper script
authorDaniel Martí <mvdan@mvdan.cc>
Thu, 9 Jan 2014 17:30:35 +0000 (18:30 +0100)
committerDaniel Martí <mvdan@mvdan.cc>
Thu, 9 Jan 2014 21:56:51 +0000 (22:56 +0100)
buildserver/cookbooks/gradle/recipes/default.rb
makebuildserver

index 2a64e21a715515fb803d15936ce0446c95ac287d..89f5144c6c357858d7f4b94de98b0b0661e859d5 100644 (file)
@@ -1,11 +1,18 @@
 
 user = node[:settings][:user]
 
-script "add-gradle-dir" do
+script "add-gradle-bindir" do
   cwd "/tmp"
   interpreter "bash"
-  code "mkdir -p /opt/gradle"
-  not_if "test -d /opt/gradle"
+  code "mkdir -p /opt/gradle/bin"
+  not_if "test -d /opt/gradle/bin"
+end
+
+script "add-gradle-verdir" do
+  cwd "/tmp"
+  interpreter "bash"
+  code "mkdir -p /opt/gradle/versions"
+  not_if "test -d /opt/gradle/versions"
 end
 
 %w{1.4 1.6 1.7 1.8 1.9}.each do |ver|
@@ -14,9 +21,91 @@ end
     interpreter "bash"
     code "
       unzip /vagrant/cache/gradle-#{ver}-bin.zip
-      mv gradle-#{ver} /opt/gradle/#{ver}
+      mv gradle-#{ver} /opt/gradle/versions/#{ver}
     "
-    not_if "test -d /opt/gradle/#{ver}"
+    not_if "test -d /opt/gradle/versions/#{ver}"
   end
 end
 
+script "add-gradle-wrapper" do
+  cwd "/tmp"
+  interpreter "bash"
+  code %{cat << EOF > /opt/gradle/bin/gradle
+#!/bin/bash
+
+bindir=$(dirname $0)
+basedir=$(dirname $bindir)
+verdir="${basedir}/versions"
+args=("$@")
+pushd "${verdir}" &>/dev/null
+
+v_all=(*/)
+v_all=(${v_all[@]%/})
+
+v_def=${v_all[-1]}
+echo "Available gradle versions: ${v_all[@]}"
+
+popd &>/dev/null
+
+run_gradle() {
+       ${verdir}/${v_found}/bin/gradle "${args[@]}"
+       exit $?
+}
+
+# key-value pairs of what gradle version each gradle plugin version
+# should accept
+d_plugin_k=(0.7 0.6 0.5 0.4 0.3 0.2)
+d_plugin_v=(1.9 1.8 1.6 1.6 1.4 1.4)
+
+# Latest takes priority
+files=(build.gradle)
+
+for f in ${files[@]}; do
+       [[ -f $f ]] || continue
+       while read l; do
+               if [[ "$l" == *'com.android.tools.build:gradle:'* ]]; then
+                       plugin_pver=$(echo -n "$l" | sed "s/.*com.android.tools.build:gradle:\\([0-9\\.\\+]\\+\\).*/\\1/")
+               elif [[ "$l" == *'gradleVersion'* ]]; then
+                       wrapper_ver=$(echo -n "$l" | sed "s/.*gradleVersion[ ]*=[ ]*[\"']\\([0-9\\.]\\+\\)[\"'].*/\\1/")
+               fi
+       done < $f
+done
+
+if [[ -n $wrapper_ver ]]; then
+       v_found=$wrapper_ver
+       echo "Found $v_found via gradleVersion"
+       run_gradle
+fi
+
+if [[ -n $plugin_pver ]]; then
+       i=0
+       match=false
+       for k in ${d_plugin_k[@]}; do
+               if [[ $plugin_pver == ${k}* ]]; then
+                       plugin_ver=${d_plugin_v[$i]}
+                       match=true
+                       break
+               fi
+               let i++
+       done
+       if $match; then
+               v_found=$plugin_ver
+               echo "Found $v_found via gradle plugin version ${k}*"
+       fi
+fi
+
+[[ -n $v_found ]] && run_gradle
+
+echo "No suitable gradle version found - defaulting to $v_def"
+v_found=$v_def
+run_gradle
+
+EOF
+  }
+end
+
+execute "add-android-ndk-path" do
+  user user
+  command "echo \"export PATH=\\$PATH:/opt/gradle/bin #PATH-GRADLE\" >> /home/#{user}/.bsenv"
+  not_if "grep PATH-GRADLE /home/#{user}/.bsenv"
+end
index adaacc4fc8c70900710c4fa19a51827cb4a2684d..55c5aa1f7abe2e808844d54c7d653601f6cfb1ed 100755 (executable)
@@ -147,6 +147,7 @@ vagrantfile += """
     chef.add_recipe "fdroidbuild-general"
     chef.add_recipe "android-sdk"
     chef.add_recipe "android-ndk"
+    chef.add_recipe "gradle"
     chef.add_recipe "kivy"
   end
 end