From 26f2aa47d343cd84163cc10fbd335786818c7a17 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Mon, 13 May 2019 11:54:18 +0200
Subject: [PATCH] fix(bundler): detect ruby constraint from Gemfile first

---
 lib/manager/bundler/artifacts.js | 37 ++++++++++++++++++++------------
 1 file changed, 23 insertions(+), 14 deletions(-)

diff --git a/lib/manager/bundler/artifacts.js b/lib/manager/bundler/artifacts.js
index b1fd943d00..8b2dfdec45 100644
--- a/lib/manager/bundler/artifacts.js
+++ b/lib/manager/bundler/artifacts.js
@@ -62,23 +62,26 @@ async function getArtifacts(
       logger.info('Running bundler via docker');
       let tag = 'latest';
       let rubyConstraint;
-      const rubyVersionFile = upath.join(
-        upath.dirname(packageFileName),
-        '.ruby-version'
-      );
-      logger.debug('Checking ' + rubyVersionFile);
-      const rubyVersionFileContent = await platform.getFile(rubyVersionFile);
-      if (rubyVersionFileContent) {
-        logger.debug('Using ruby version specified in .ruby-version');
-        rubyConstraint = rubyVersionFileContent.replace(/\n/g, '').trim();
+      if (config && config.compatibility && config.compatibility.ruby) {
+        logger.debug('Using rubyConstraint from config');
+        rubyConstraint = config.compatibility.ruby;
       } else {
-        rubyConstraint =
-          config && config.compatibility && config.compatibility.ruby
-            ? config.compatibility.ruby
-            : undefined;
+        const rubyVersionFile = upath.join(
+          upath.dirname(packageFileName),
+          '.ruby-version'
+        );
+        logger.debug('Checking ' + rubyVersionFile);
+        const rubyVersionFileContent = await platform.getFile(rubyVersionFile);
+        if (rubyVersionFileContent) {
+          logger.debug('Using ruby version specified in .ruby-version');
+          rubyConstraint = rubyVersionFileContent
+            .replace(/^ruby-/, '')
+            .replace(/\n/g, '')
+            .trim();
+        }
       }
       if (rubyConstraint && isValid(rubyConstraint)) {
-        logger.debug('Found ruby compatibility');
+        logger.debug({ rubyConstraint }, 'Found ruby compatibility');
         const rubyReleases = await getPkgReleases({
           lookupName: 'renovate/ruby',
         });
@@ -93,6 +96,12 @@ async function getArtifacts(
             tag = versions.pop();
           }
         }
+        if (tag === 'latest') {
+          logger.warn(
+            { rubyConstraint },
+            'Failed to find a tag satisfying ruby constraint, using latest ruby image instead'
+          );
+        }
       }
       const bundlerConstraint =
         config && config.compatibility && config.compatibility.bundler
-- 
GitLab