arvbox updates for ruby and bundler, refs #21301
[arvados.git] / tools / arvbox / lib / arvbox / docker / common.sh
index eb53e190490aa963bddf706be1bc7893053f61e4..9c5df83c0e91b25f523531a5512b7efa00c2370f 100644 (file)
@@ -2,14 +2,22 @@
 #
 # SPDX-License-Identifier: AGPL-3.0
 
+export RUBY_VERSION=3.2.2
+export BUNDLER_VERSION=2.4.22
+
 export DEBIAN_FRONTEND=noninteractive
-export GEM_HOME=/var/lib/arvados/lib/ruby/gems/2.5.0
-export PATH=${PATH}:/usr/local/go/bin:$GEM_HOME/bin:/var/lib/arvados/bin
+export PATH=${PATH}:/usr/local/go/bin:/var/lib/arvados/bin:/usr/src/arvados/sdk/cli/binstubs
 export npm_config_cache=/var/lib/npm
 export npm_config_cache_min=Infinity
 export R_LIBS=/var/lib/Rlibs
 export HOME=$(getent passwd arvbox | cut -d: -f6)
 export ARVADOS_CONTAINER_PATH=/var/lib/arvados-arvbox
+export GEM_HOME=$HOME/.gem
+GEMLOCK=$HOME/gems.lock
+
+export LANG=en_US.UTF-8
+export LANGUAGE=en_US:en
+export LC_ALL=en_US.UTF-8
 
 defaultdev=$(/sbin/ip route|awk '/default/ { print $5 }')
 dockerip=$(/sbin/ip route | grep default | awk '{ print $3 }')
@@ -27,13 +35,11 @@ server_cert_key=$ARVADOS_CONTAINER_PATH/server-cert-${localip}.key
 
 declare -A services
 services=(
-  [workbench]=443
   [workbench2]=3000
-  [workbench2-ssl]=3001
+  [workbench2-ssl]=443
   [api]=8004
   [controller]=8003
   [controller-ssl]=8000
-  [composer]=4200
   [arv-git-httpd-ssl]=9000
   [arv-git-httpd]=9001
   [keep-web]=9003
@@ -60,29 +66,39 @@ else
 fi
 
 run_bundler() {
-    if test -f Gemfile.lock ; then
-        # The 'gem install bundler line below' is cf.
-        # https://bundler.io/blog/2019/05/14/solutions-for-cant-find-gem-bundler-with-executable-bundle.html,
-        # until we get bundler 2.7.10/3.0.0 or higher
-        flock $GEM_HOME/gems.lock gem install bundler --no-document -v "$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1|tr -d ' ')"
-        frozen=--frozen
+    flock $GEMLOCK /var/lib/arvados/bin/gem install --no-document --user bundler:$BUNDLER_VERSION
+
+    BUNDLER=bundle
+    if test -x $PWD/bin/bundle ; then
+       # If present, use the one associated with rails API
+       BUNDLER=$PWD/bin/bundle
+    fi
+
+    # Use Gemfile.lock only if it is git tracked.
+    if git ls-files --error-unmatch Gemfile.lock ; then
+       flock $GEMLOCK $BUNDLER config set --local frozen true
     else
-        frozen=""
+       flock $GEMLOCK $BUNDLER config set --local frozen false
     fi
-    # if ! test -x $GEM_HOME/bin/bundler ; then
-    #  bundleversion=2.0.2
-    #     bundlergem=$(ls -r $GEM_HOME/cache/bundler-${bundleversion}.gem 2>/dev/null | head -n1 || true)
-    #     if test -n "$bundlergem" ; then
-    #         flock $GEM_HOME/gems.lock gem install --verbose --local --no-document $bundlergem
-    #     else
-    #         flock $GEM_HOME/gems.lock gem install --verbose --no-document bundler --version ${bundleversion}
-    #     fi
-    # fi
-    # Make sure to put the gem binaries in the right place
-    flock /var/lib/arvados/lib/ruby/gems/2.5.0/gems.lock bundler config bin $GEM_HOME/bin
-    if ! flock $GEM_HOME/gems.lock bundler install --verbose --local --no-deployment $frozen "$@" ; then
-        flock $GEM_HOME/gems.lock bundler install --verbose --no-deployment $frozen "$@"
+    flock $GEMLOCK $BUNDLER config set --local deployment false
+
+    if test -z "$(flock $GEMLOCK /var/lib/arvados/bin/gem list | grep 'arvados[[:blank:]].*[0-9.]*dev')" ; then
+        (cd /usr/src/arvados/sdk/ruby && \
+        /var/lib/arvados/bin/gem build arvados.gemspec && flock $GEMLOCK /var/lib/arvados/bin/gem install $(ls -1 *.gem | sort -r | head -n1))
+    fi
+
+    if ! flock $GEMLOCK $BUNDLER install --verbose --local "$@" ; then
+        flock $GEMLOCK $BUNDLER install --verbose "$@"
+    fi
+}
+
+bundler_binstubs() {
+    BUNDLER=bundle
+    if test -x $PWD/bin/bundle ; then
+       # If present, use the one associated with rails API
+       BUNDLER=$PWD/bin/bundle
     fi
+    flock $GEMLOCK $BUNDLER binstubs --all
 }
 
 PYCMD=""