chiark / gitweb /
buildserver: handle loops in bash, not ruby, to save memory
authorHans-Christoph Steiner <hans@eds.org>
Tue, 14 Jun 2016 14:34:13 +0000 (16:34 +0200)
committerHans-Christoph Steiner <hans@eds.org>
Tue, 14 Jun 2016 14:34:13 +0000 (16:34 +0200)
Apparently, ruby is quite a memory hog when it forks.  I've been getting
errors like this with ./makebuildserver:

Errno::ENOMEM - script[add_btools_17] (android-sdk::default line 72) had an
  error: Errno::ENOMEM: Cannot allocate memory - fork(2)

So instead of looping in ruby and forking for each loop, handle the looping
in the bash script, so ruby is just calling a single bash script.

buildserver/cookbooks/android-sdk/recipes/default.rb

index 82d68972c7e24d9b1928307996dc112d420eecf9..3be497f1cd8dd42760fadd53a944032f0b044def 100644 (file)
@@ -33,20 +33,16 @@ execute "add-android-sdk-path" do
   not_if "grep PATH-SDK /home/#{user}/.bsenv"
 end
 
-%w{
-    platform-tools
-    extra-android-m2repository
-}.each do |pkg|
-  script "add_pkg_#{pkg}" do
-    interpreter "bash"
-    user user
-    code "
-      #{sdk_loc}/tools/android update sdk --no-ui -a -t #{pkg} <<X
+
+script "add_android_packages" do
+  interpreter "bash"
+  user user
+  code "
+    #{sdk_loc}/tools/android update sdk --no-ui --all --filter platform-tools,extra-android-m2repository <<X
 y
 
 X
     "
-  end
 end
 
 script "add-platforms" do
@@ -66,28 +62,29 @@ script "add-platforms" do
   "
 end
 
-%w{17 18.0.1 18.1 18.1.1 19 19.0.1 19.0.2 19.0.3 19.1 20 21 21.0.1 21.0.2 21.1
-   21.1.1 21.1.2 22 22.0.1 23 23.0.1 23.0.2 23.0.3
-}.each do |ver|
-  script "add_btools_#{ver}" do
-    interpreter "bash"
-    user user
-    cwd "/tmp"
-    code "
-      unzip /vagrant/cache/build-tools_r#{ver}-linux.zip
-      case `echo #{ver} | wc -c` in
-        3)
-            dirver=#{ver}.0.0
-            ;;
-        5)
-            dirver=#{ver}.0
-            ;;
-        7)
-            dirver=#{ver}
-            ;;
-      esac
-      rm -rf #{sdk_loc}/build-tools/${dirver}
-      mv android-*/ #{sdk_loc}/build-tools/${dirver}
-    "
-  end
+script "add_build_tools" do
+  interpreter "bash"
+  user user
+  cwd "/tmp"
+  code "
+    rm -rf current-build-tools
+    mkdir current-build-tools
+    cd current-build-tools
+    for ver in 17 18.0.1 18.1 18.1.1 19 19.0.1 19.0.2 19.0.3 19.1 20 21 21.0.1 21.0.2 21.1 21.1.1 21.1.2 22 22.0.1 23 23.0.1 23.0.2 23.0.3; do
+        unzip /vagrant/cache/build-tools_r${ver}-linux.zip
+        case `echo ${ver} | wc -c` in
+            3)
+                dirver=${ver}.0.0
+                ;;
+            5)
+                dirver=${ver}.0
+                ;;
+            7)
+                dirver=${ver}
+                ;;
+        esac
+        rm -rf #{sdk_loc}/build-tools/${dirver}
+        mv android-*/ #{sdk_loc}/build-tools/${dirver}
+    done
+  "
 end