From 3fbc9b4302b927f334d03bd7bed40e9b69e8c40b Mon Sep 17 00:00:00 2001 From: Jan Kurik Date: Wed, 27 Mar 2024 08:14:00 +0100 Subject: [PATCH] Initial setup of the test repo for chan component --- .fmf/version | 1 + Sanity/licence-check/epel.repo | 30 +++++++++++++ Sanity/licence-check/main.fmf | 16 +++++++ Sanity/licence-check/test.sh | 62 +++++++++++++++++++++++++ Sanity/main.fmf | 4 ++ Sanity/sanity-test/main.fmf | 12 +++++ Sanity/sanity-test/runtest.sh | 82 ++++++++++++++++++++++++++++++++++ plans/gating.fmf | 6 +++ 8 files changed, 213 insertions(+) create mode 100644 .fmf/version create mode 100644 Sanity/licence-check/epel.repo create mode 100644 Sanity/licence-check/main.fmf create mode 100755 Sanity/licence-check/test.sh create mode 100644 Sanity/main.fmf create mode 100644 Sanity/sanity-test/main.fmf create mode 100755 Sanity/sanity-test/runtest.sh create mode 100644 plans/gating.fmf diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/Sanity/licence-check/epel.repo b/Sanity/licence-check/epel.repo new file mode 100644 index 0000000..d52a962 --- /dev/null +++ b/Sanity/licence-check/epel.repo @@ -0,0 +1,30 @@ +[epel] +name=Extra Packages for Enterprise Linux $releasever - $basearch +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place its address here. +#baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch/ +metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir +enabled = 0 +gpgcheck=1 +countme=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever + +[epel-debuginfo] +name=Extra Packages for Enterprise Linux $releasever - $basearch - Debug +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place its address here. +#baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch/debug/ +metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-$releasever&arch=$basearch&infra=$infra&content=$contentdir +enabled=0 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever +gpgcheck=1 + +[epel-source] +name=Extra Packages for Enterprise Linux $releasever - $basearch - Source +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place its address here. +#baseurl=https://download.example/pub/epel/$releasever/Everything/source/tree/ +metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-$releasever&arch=$basearch&infra=$infra&content=$contentdir +enabled=0 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever +gpgcheck=1 diff --git a/Sanity/licence-check/main.fmf b/Sanity/licence-check/main.fmf new file mode 100644 index 0000000..45a408e --- /dev/null +++ b/Sanity/licence-check/main.fmf @@ -0,0 +1,16 @@ +summary: Chek for used licenses in packages +test: ./test.sh +link: + - relates: https://fedoraproject.org/wiki/Changes/SPDX_Licenses_Phase_1 + - relates: https://fedoraproject.org/wiki/Changes/SPDX_Licenses_Phase_2 +recommend: + - chan + - rpm-build + - license-validate +duration: 15m +tag: + - gating +adjust: + - enabled: false + continue: false + when: distro < rhel-10 diff --git a/Sanity/licence-check/test.sh b/Sanity/licence-check/test.sh new file mode 100755 index 0000000..7c0452a --- /dev/null +++ b/Sanity/licence-check/test.sh @@ -0,0 +1,62 @@ +#!/bin/bash +# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE=chan +TCWD="$(pwd)" + +rlJournalStart + rlPhaseStartSetup + rlRun "tmp=\$(mktemp -d /var/tmp/XXXXXXXXXXXXX)" 0 "Create tmp directory" + rlRun "pushd $tmp" + rlRun "set -o pipefail" + + # Ensure we have license tools available + EPELREPO= + if ! which license-fedora2spdx &>/dev/null; then + YUMPARAM= + if rlIsRHEL || rlIsCentOS; then + EPELREPO="/etc/yum.repos.d/$(basename ${tmp})" + rlRun "cp ${TCWD}/epel.repo ${EPELREPO}" + YUMPARAM="--enablerepo=epel" + else + rlDie "Can not find license-validate tool" + fi + rlRun "yum install -y ${YUMPARAM} license-validate" \ + || rlDie "Failed to install license-validate tool" + fi + + # Get list of rpms + rlFetchSrcForInstalled --quiet "${PACKAGE}" || \ + rlDie 'Can not get source package of ${PACKAGE} .... giving up...' + SOURCEPKG=$(rpm -q --qf '%{name}-%{version}-%{release}.src.rpm' ${PACKAGE}) + rlAssertExists "${tmp}/${SOURCEPKG}" + rlRun "rpm -D '_topdir ${tmp}' -i ${tmp}/${SOURCEPKG}" + rlRun "LICENSES=\"\$(rpm -q --qf '%{license}\n' --specfile ${tmp}/SPECS/${PACKAGE}.spec\ + | sed -e 's/ and /\\n/g' -e 's/^ *//' -e 's/ *$//')\"" + rlRun "TUPLE=\"\$(rpm -q --qf '%{name} %{license}\n' \ + --specfile ${tmp}/SPECS/${PACKAGE}.spec )\"" + rlPhaseEnd + +while read l; do + rlPhaseStart FAIL "License check of ${l}" + retcode= + rlRun -s "license-validate '${l}'" || retcode=Fail + # Report affected packages + if [[ -n "${retcode}" ]]; then + rlLogInfo "The following packages needs to fix the ${l} license:" + #for p in $(awk "\$0~/${l}/{print \$1;}" <<< "${TUPLE}"); do + for p in $(grep "${l}" <<< "${TUPLE}" | cut -d ' ' -f 1); do + rlLogInfo " - ${p}" + done + fi + rlPhaseEnd +done < <(sort -u <<< "${LICENSES}") + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $tmp" 0 "Remove tmp directory" + rlRun "yum clean metadata" + [[ -n "${EPELREPO}" ]] && rlRun "rm -f ${EPELREPO}" + rlPhaseEnd +rlJournalEnd diff --git a/Sanity/main.fmf b/Sanity/main.fmf new file mode 100644 index 0000000..2607f79 --- /dev/null +++ b/Sanity/main.fmf @@ -0,0 +1,4 @@ +contact: Jan Kuřík +component: chan +framework: beakerlib +enabled: true diff --git a/Sanity/sanity-test/main.fmf b/Sanity/sanity-test/main.fmf new file mode 100644 index 0000000..364b6a5 --- /dev/null +++ b/Sanity/sanity-test/main.fmf @@ -0,0 +1,12 @@ +summary: Sanity upstream test of chan package +test: ./runtest.sh +recommend: + - autoconf + - automake + - chan + - gcc + - libtool + - rpm-build +duration: 15m +tag: + - gating diff --git a/Sanity/sanity-test/runtest.sh b/Sanity/sanity-test/runtest.sh new file mode 100755 index 0000000..867b190 --- /dev/null +++ b/Sanity/sanity-test/runtest.sh @@ -0,0 +1,82 @@ +#!/bin/bash +# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /tools/chan/Sanity/sanity-test +# Description: Sanity upstream test of chan package +# Author: Jan Kuřík +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2020 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="chan" +BUILD_USER=${BUILD_USER:-chanbld} + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "pushd $TmpDir" + rlPhaseEnd + + rlPhaseStartTest "Get source code and setup build environment" + rlFetchSrcForInstalled "${PACKAGE}" \ + || rlDie "Can not download SRPM of ${PACKAGE} - giving up" + rlRun "yum-builddep -y \ + $(rpm -q --qf '%{name}-%{version}-%{release}.src.rpm' ${PACKAGE}.$(arch))" \ + || rlDie "Can not install build dependencies - giving up" + rlRun "useradd -m -N $BUILD_USER" 0,9 && del="yes" + rlPhaseEnd + + rlPhaseStartTest "Build ${PACKAGE}" + rlRun "rpm -D \"_topdir ${TmpDir}\" -U \ + $(rpm -q --qf '%{name}-%{version}-%{release}.src.rpm' ${PACKAGE}.$(arch))" + rlRun "chown -R ${BUILD_USER}:users ${TmpDir}" + rlRun -s "su -c \ + 'rpmbuild -D \"_topdir ${TmpDir}\" -bc ${TmpDir}/SPECS/${PACKAGE}.spec' \ + ${BUILD_USER}" + rlFileSubmit "${rlRun_LOG}" "rpmbuild-${PACKAGE}.log" + rlPhaseEnd + + rlPhaseStartTest "Run upstream testsuite" + BDIR=$(rpm -q --qf '%{name}-%{version}' ${PACKAGE}.$(arch)) + if rlRun "pushd ${TmpDir}/BUILD/${BDIR}"; then + rlRun "rm -f .libs/libchan.so*" + rlRun "ln -s /usr/lib64/libchan.so.0 .libs/libchan.so" + rlRun "ln -s /usr/lib64/libchan.so.0 .libs/libchan.so.0" + export RPM_ARCH="$(arch)" + export RPM_PACKAGE_RELEASE="$(rpm -q --qf '%{release}' ${PACKAGE}.$(arch))" + export RPM_PACKAGE_VERSION="$(rpm -q --qf '%{version}' ${PACKAGE}.$(arch))" + export RPM_PACKAGE_NAME="$(rpm -q --qf '%{name}' ${PACKAGE}.$(arch))" + rlRun "make src/chan_test" + rlRun -s "src/chan_test" + rlAssertGrep '[0-9]+ passed' "${rlRun_LOG}" -E + rlRun "popd" + fi + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd diff --git a/plans/gating.fmf b/plans/gating.fmf new file mode 100644 index 0000000..5ed0c31 --- /dev/null +++ b/plans/gating.fmf @@ -0,0 +1,6 @@ +summary: CI Gating Plan +discover: + how: fmf + filter: tag:gating +execute: + how: tmt