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
This commit is contained in:
Torsten Zuehlsdorff 2018-01-22 16:35:23 +00:00
parent 859fd6a16c
commit 2816b55780
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=459673
2 changed files with 48 additions and 2 deletions

View file

@ -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}

View file

@ -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