Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Jan 2018 16:35:23 +0000 (UTC)
From:      Torsten Zuehlsdorff <tz@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r459673 - in head/Mk: . Scripts
Message-ID:  <201801221635.w0MGZNYs031827@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: tz
Date: Mon Jan 22 16:35:23 2018
New Revision: 459673
URL: https://svnweb.freebsd.org/changeset/ports/459673

Log:
  add new stage-qa target: gemfiledeps
  
  This checks whether rubygem based ports have all of their dependencies
  in Gemfile(s) satisfied by what's currently installed. Sample output:
  
  ====> Running Q/A tests (stage-qa)
  Warning: Dependencies defined in /usr/ports/www/gitlab/work/stage/usr/local/www/gitlab/Gemfile are not satisfied
  
  These ports could (!) be broken at runtime. Be aware: some projects
  defines multiple Gemfiles and not all are used at runtime. For example
  www/gitlab has two Gemfiles, but only one is used for testing and warnings
  about it can be ignored.
  
  Approved by: portmgr (mat), lifanov
  Differential Revision: https://reviews.freebsd.org/D11865

Modified:
  head/Mk/Scripts/qa.sh
  head/Mk/bsd.port.mk

Modified: head/Mk/Scripts/qa.sh
==============================================================================
--- head/Mk/Scripts/qa.sh	Mon Jan 22 16:17:23 2018	(r459672)
+++ head/Mk/Scripts/qa.sh	Mon Jan 22 16:35:23 2018	(r459673)
@@ -841,6 +841,51 @@ gemdeps()
 	return $rc
 }
 
+# If an non rubygem-port has a 'Gemfile' file
+# it is checked with bundle to be sure
+# all dependencies are satisfied.
+# Without the check missing/wrong dependencies
+# are just found when executing the application
+gemfiledeps()
+{
+	# skip check if port does not use ruby at all
+	if [ -z "$USE_RUBY" ]; then
+		return 0
+	fi
+	
+	# skip check if port is a rubygem-* one; they have no Gemfiles
+	if [ "${PKGBASE%%-*}" = "rubygem" ]; then
+		return 0
+	fi
+	
+	# advise install of bundler if its not present for check
+	if ! type bundle > /dev/null 2>&1; then
+		notice "Please install sysutils/rubygem-bundler for additional Gemfile-checks"
+		return 0
+	fi
+ 
+	# locate the Gemfile(s)
+	while read -r f; do
+	
+		# no results presents a blank line from heredoc
+		[ -z "$f" ] && continue
+	
+		# if there is no Gemfile everything is fine - stop here
+		[ ! -f "$f" ] && return 0;
+
+		# use bundle to check if Gemfile is satisfied
+		# if bundle returns 1 the Gemfile is not satisfied
+		# and so stage-qa isn't also
+		if ! bundle check --dry-run --gemfile $f > /dev/null 2>&1; then
+			warn "Dependencies defined in ${f} are not satisfied"
+		fi
+      
+	done <<-EOF
+		$(find ${STAGEDIR} -name Gemfile)
+		EOF
+	return 0
+}
+
 flavors()
 {
 	local rc pkgnames uniques
@@ -860,7 +905,7 @@ flavors()
 
 checks="shebang symlinks paths stripped desktopfileutils sharedmimeinfo"
 checks="$checks suidfiles libtool libperl prefixvar baselibs terminfo"
-checks="$checks proxydeps sonames perlcore no_arch gemdeps flavors"
+checks="$checks proxydeps sonames perlcore no_arch gemdeps gemfiledeps flavors"
 
 ret=0
 cd ${STAGEDIR}

Modified: head/Mk/bsd.port.mk
==============================================================================
--- head/Mk/bsd.port.mk	Mon Jan 22 16:17:23 2018	(r459672)
+++ head/Mk/bsd.port.mk	Mon Jan 22 16:35:23 2018	(r459673)
@@ -1616,7 +1616,8 @@ QA_ENV+=		STAGEDIR=${STAGEDIR} \
 				PKGBASE=${PKGBASE} \
 				PORTNAME=${PORTNAME} \
 				NO_ARCH=${NO_ARCH} \
-				"NO_ARCH_IGNORE=${NO_ARCH_IGNORE}"
+				"NO_ARCH_IGNORE=${NO_ARCH_IGNORE}" \
+				USE_RUBY=${USE_RUBY}
 .if !empty(USES:Mssl)
 QA_ENV+=		USESSSL=yes
 .endif



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201801221635.w0MGZNYs031827>