
This script along with the macros file will be used to initially check the specfiles being added as part of the MultiOS work. It will be executed via zuul and tox to scan the openSUSE specfiles, later we can start add the CentOS specfiles also. The macros.openstack-singlespec is orignally from openstack/rpm-packaging customized with tis_patch_ver Change-Id: I22bf778388e6dcc3ca42d5fd6ec16b30200d6b75 Signed-off-by: Saul Wold <sgw@linux.intel.com>
99 lines
2.7 KiB
Bash
Executable File
99 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
# Derived from the openstack/rpm-packaging scripts
|
|
|
|
set -e
|
|
|
|
usage() {
|
|
echo ""
|
|
echo "Usage: "
|
|
echo " Provide lint-like info about specfiles:"
|
|
echo " speclint.sh <spec files list>"
|
|
exit 1
|
|
}
|
|
|
|
if [ -z $@ ]; then
|
|
usage
|
|
fi
|
|
|
|
while getopts "h" o; do
|
|
case "${o}" in
|
|
*)
|
|
usage
|
|
;;
|
|
esac
|
|
done
|
|
|
|
tmpdir=$(mktemp -d)
|
|
MAXPROC=4
|
|
if [ -d ../stx-integ ]; then
|
|
echo "Fetching from stx-integ"
|
|
cat ../stx-integ/tools/spec-tools/macros.openstack-singlespec > $tmpdir/.rpmmacros
|
|
elif [ -d ../integ ]; then
|
|
echo "Fetching from integ"
|
|
cat ../integ/tools/spec-tools/macros.openstack-singlespec > $tmpdir/.rpmmacros
|
|
else
|
|
echo "Fetching from git"
|
|
wget -q -O $tmpdir/.rpmmacros https://opendev.org/openstack/rpm-packaging/raw/branch/master/openstack/openstack-macros/macros.openstack-singlespec
|
|
echo "%tis_patch_ver 1" >> $tmpdir/.rpmmacros
|
|
fi
|
|
|
|
failed=0
|
|
for spec in $@; do
|
|
if [ ! -f $spec ]; then
|
|
echo "$spec does not exisit, please pass valid RPM specfiles on the cmdline"
|
|
failed=1
|
|
continue 1
|
|
fi
|
|
echo "Checking $spec"
|
|
specname=$(basename $spec)
|
|
egrep -q '^Source:' $spec && {
|
|
echo "$spec should not have Source: lines. Please use Source0: instead."
|
|
failed=1
|
|
}
|
|
egrep -q '^%setup' $spec && {
|
|
echo "$spec should not use '%setup'. Please use '%autosetup' instead."
|
|
failed=1
|
|
}
|
|
egrep -q '%{__python[23]}' $spec && {
|
|
echo "$spec should not use '%{__python[23]}'. Please use 'python2' or 'python3' instead."
|
|
failed=1
|
|
}
|
|
|
|
(cd $(dirname $spec); HOME=$tmpdir rpmspec -q --qf "%{VERSION}\n" $specname) >/dev/null || {
|
|
echo "$spec does not parse properly. Please check your syntax."
|
|
failed=1
|
|
}
|
|
|
|
echo "spec-cleaner checking $specname"
|
|
# Make a copy to do some fix-ups required by spec-cleaner
|
|
cp $spec $tmpdir/$specname
|
|
# NOTE(toabctl):spec-cleaner can not ignore epochs currently
|
|
sed -i '/^Epoch:.*/d' $tmpdir/$specname
|
|
# NOTE(jpena): spec-cleaner wants python2/python3 instead of
|
|
# %{__python2}/%{__python3}
|
|
# https://github.com/openSUSE/spec-cleaner/issues/173
|
|
sed -i 's/%{__python2}/python2/g' $tmpdir/$specname
|
|
sed -i 's/%{__python3}/python3/g' $tmpdir/$specname
|
|
spec-cleaner -m -d --no-copyright --diff-prog "diff -uw" \
|
|
$tmpdir/$specname > $tmpdir/$specname.cleaner.diff &
|
|
let count+=1
|
|
[[ count -eq $MAXPROC ]] && wait && count=0
|
|
done
|
|
|
|
# check if some diffs are available
|
|
failed=0
|
|
for specdiff in $tmpdir/*; do
|
|
if [ -s "$specdiff" ]; then
|
|
echo "##### `basename ${specdiff}` ##### "
|
|
cat $specdiff
|
|
failed=1
|
|
fi
|
|
done
|
|
|
|
rm -rf $tmpdir
|
|
|
|
exit $failed
|