SHA256
1
0
forked from pool/openQA
openQA/openQA.spec

392 lines
13 KiB
RPMSpec

#
# spec file for package openQA
#
# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
# can't use linebreaks here!
%define openqa_services openqa-webui.service openqa-gru.service openqa-websockets.service openqa-scheduler.service
%define openqa_worker_services openqa-worker.target openqa-worker@.service openqa-slirpvde.service openqa-vde_switch.service
%if %{undefined tmpfiles_create}
%define tmpfiles_create() \
/usr/bin/systemd-tmpfiles --create %{?*} || : \
%{nil}
%endif
%if %suse_version >= 1330
%ifarch x86_64
%bcond_without tests
%else
%bcond_with tests
%endif
%else
%bcond_with tests
%endif
Name: openQA
Version: 4.4.1491400697.19ef0fc5
Release: 0
Summary: The openQA web-frontend, scheduler and tools
License: GPL-2.0+
Group: Development/Tools/Other
Url: http://os-autoinst.github.io/openQA/
Source0: %{name}-%{version}.tar.xz
# a workaround for set_version looking at random files (so we can't name it .tar.xz)
# use update-cache to update it
Source1: cache.txz
Source100: openQA-rpmlintrc
Source101: update-cache.sh
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Requires(post): sqlite3
BuildRequires: os-autoinst
Requires: openQA-client = %{version}
Requires: openQA-common = %{version}
Requires: perl(URI)
BuildRequires: systemd
BuildRequires: rubygem(sass)
# needed for openid support
Requires: perl(LWP::Protocol::https)
Recommends: apparmor-profiles
Recommends: apparmor-utils
Recommends: apache2
Recommends: logrotate
# for postgresql
Recommends: perl(DateTime::Format::Pg) perl(DBD::Pg)
# runtime requirements that also the testsuite needs
%define t_requires perl(DBD::SQLite) perl(DBIx::Class) perl(Config::IniFiles) perl(SQL::Translator) perl(Date::Format) perl(File::Copy::Recursive) perl(DateTime::Format::SQLite) perl(Net::OpenID::Consumer) perl(Mojolicious::Plugin::RenderFile) perl(Mojolicious::Plugin::AssetPack) perl(aliased) perl(Config::Tiny) perl(DBIx::Class::DynamicDefault) perl(DBIx::Class::Schema::Config) perl(DBIx::Class::Storage::Statistics) perl(IO::Socket::SSL) perl(Data::Dump) perl(DBIx::Class::OptimisticLocking) perl(Text::Markdown) perl(Net::DBus) perl(IPC::Run) perl(Archive::Extract) perl(CSS::Minifier::XS) perl(JavaScript::Minifier::XS) perl(Time::ParseDate) perl(Sort::Versions) perl(Mojo::RabbitMQ::Client)
BuildRequires: perl(Mojolicious) >= 7.24
BuildRequires: perl(Mojolicious::Plugin::AssetPack) >= 1.36
# critical bug fix
BuildRequires: perl(DBIx::Class) >= 0.082801
Requires: perl(DBIx::Class) >= 0.082801
# needed for test suite
Requires: git-core
# needed for saving needles optimized
Requires: optipng
BuildRequires: %{t_requires}
Requires: dbus-1
BuildRequires: fdupes
%if %{with tests}
BuildRequires: phantomjs
BuildRequires: perl(Mojo::RabbitMQ::Client)
BuildRequires: perl(Perl::Tidy)
BuildRequires: perl(Perl::Critic)
BuildRequires: perl(Selenium::Remote::Driver)
BuildRequires: perl(Test::Compile)
BuildRequires: perl(Test::MockObject)
BuildRequires: perl(Test::Warnings)
BuildRequires: perl-App-cpanminus
%endif
Requires(post): perl(DBIx::Class::DeploymentHandler)
Requires(post): perl(SQL::SplitStatement)
Requires(post): coreutils
%{?systemd_requires}
BuildArch: noarch
# we need to have the same sha1 as expected
%requires_eq perl-Mojolicious-Plugin-AssetPack
%description
The openQA framework consists of two parts, which are tracked in
separate git repos. The OS-autoinst test engine and the front-end
with web-interface, test-scheduler and other high-level logic, which
is part of this repo.
%package common
Summary: The openQA common tools for web-frontend and workers
Group: Development/Tools/Other
Requires: %{t_requires}
Requires: perl(Mojolicious) >= 7.24
%description common
This package contain shared resources for openQA web-frontend and
openQA workers.
%package worker
Summary: The openQA worker
Group: Development/Tools/Other
PreReq: openQA-common = %{version}
Requires(post): coreutils
Requires(post): os-autoinst >= 4.4
Requires: openQA-client = %{version}
Requires: os-autoinst < 5
Recommends: qemu
Requires: perl(SQL::SplitStatement)
%description worker
The openQA worker manages test engine (provided by os-autoinst package).
%package client
Summary: Client tools for remote openQA management
Group: Development/Tools/Other
Requires: perl(Config::IniFiles)
Requires: perl(Data::Dump)
Requires: perl(Getopt::Long)
Requires: perl(JSON)
Requires: perl(Mojolicious)
%description client
Tools and support files for openQA client script. Client script is
a convenient helper for interacting with openQA webui REST API.
%package doc
Summary: The openQA documentation
Group: Development/Tools/Other
%description doc
Documentation material covering installation, configuration, basic test writing, etc.
Covering both openQA and also os-autoinst test engine..
%prep
%setup
tar xvf %{S:1}
%build
make
%check
#for double checking
%if %{with tests}
cpanm --installdeps --with-feature=test .
%endif
# we don't really need the tidy test
rm -f t/00-tidy.t
%if %{with tests}
#make test
OBS_RUN=1 prove -r -j2 -v
%endif
%install
%make_install
mkdir -p %{buildroot}/usr/share/openqa/etc/openqa
ln -s /etc/openqa/openqa.ini %{buildroot}/usr/share/openqa/etc/openqa/openqa.ini
ln -s /etc/openqa/database.ini %{buildroot}/usr/share/openqa/etc/openqa/database.ini
mkdir -p %{buildroot}%{_bindir}
ln -s /usr/share/openqa/script/client %{buildroot}%{_bindir}/openqa-client
cd %buildroot
grep -rl /usr/bin/env . | while read file; do
sed -e 's,/usr/bin/env perl,/usr/bin/perl,' -i $file
done
mkdir -p %{buildroot}%{_sbindir}
for i in webui gru worker scheduler websockets slirpvde vde_switch; do
ln -s ../sbin/service %{buildroot}%{_sbindir}/rcopenqa-$i
done
#
install -D -m 644 /dev/null %{buildroot}%{_localstatedir}/log/openqa
install -m 0644 %_sourcedir/openQA.changes %{buildroot}%{_datadir}/openqa/public/Changelog
#
mkdir %{buildroot}%{_localstatedir}/lib/openqa/pool/1
mkdir %{buildroot}%{_localstatedir}/lib/openqa/cache
#
%fdupes %buildroot/%_prefix
%pre
if ! getent passwd geekotest > /dev/null; then
/usr/sbin/useradd -r -g nogroup -c "openQA user" \
-d /var/lib/openqa geekotest 2>/dev/null || :
fi
%service_add_pre %openqa_services
%pre common
if [ "$1" = 1 ]; then
# upgrade from openQA -> openQA-common (before -> after package split)
# old data needs to be moved to new locations else cpio fail during package deploying
if [ -d "%{_localstatedir}/lib/openqa/" -a ! -d "%{_localstatedir}/lib/openqa/share" ]; then
echo "### performing migration of openQA data"
mkdir "%{_localstatedir}/lib/openqa/share"
if [ -e "%{_localstatedir}/lib/openqa/factory" ]; then
echo "### moving %{_localstatedir}/lib/openqa/factory to %{_localstatedir}/lib/openqa/share/"
mv "%{_localstatedir}/lib/openqa/factory" "%{_localstatedir}/lib/openqa/share/"
fi
fi
fi
%pre worker
if ! getent passwd _openqa-worker > /dev/null; then
/usr/sbin/useradd -r -g nogroup -c "openQA worker" \
-d /var/lib/empty _openqa-worker 2>/dev/null || :
# might fail for non-kvm workers (qemu package owns the group)
/usr/sbin/usermod _openqa-worker -a -G kvm || :
fi
%service_add_pre %openqa_worker_services
%post
# install empty log file
if [ ! -e /var/log/openqa ]; then
install -D -m 644 -o geekotest /dev/null %{_localstatedir}/log/openqa || :
fi
if [ $1 -eq 1 ]; then
echo "### copy and edit /etc/apache2/vhosts.d/openqa.conf.template!"
echo "### run sudo /usr/share/openqa/script/fetchneedles"
else
if [ -d "%{_localstatedir}/lib/openqa/share/testresults" ]; then
# remove the symlink
rm "%{_localstatedir}/lib/openqa/testresults"
mv "%{_localstatedir}/lib/openqa/share/testresults" "%{_localstatedir}/lib/openqa/"
fi
fi
%service_add_post %openqa_services
%post worker
%tmpfiles_create %{_tmpfilesdir}/openqa.conf
%service_add_post %openqa_worker_services
%preun
%service_del_preun %openqa_services
%preun worker
%service_del_preun %openqa_worker_services
%postun
%service_del_postun %openqa_services
%restart_on_update boot.apparmor
%postun worker
%service_del_postun %openqa_worker_services
%files
%defattr(-,root,root)
%doc README.asciidoc
%{_sbindir}/rcopenqa-gru
%{_sbindir}/rcopenqa-scheduler
%{_sbindir}/rcopenqa-websockets
%{_sbindir}/rcopenqa-webui
%dir %{_sysconfdir}/openqa
%config(noreplace) %attr(-,geekotest,root) %{_sysconfdir}/openqa/openqa.ini
%config(noreplace) %attr(-,geekotest,root) %{_sysconfdir}/openqa/database.ini
%dir %{_datadir}/openqa
%dir %{_datadir}/openqa/etc
%dir %{_datadir}/openqa/etc/openqa
%{_datadir}/openqa/etc/openqa/openqa.ini
%{_datadir}/openqa/etc/openqa/database.ini
%config %{_sysconfdir}/logrotate.d
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.opensuse.openqa.conf
# apache vhost
%dir %{_sysconfdir}/apache2
%dir %{_sysconfdir}/apache2/vhosts.d
%config %{_sysconfdir}/apache2/vhosts.d/openqa.conf.template
%config %{_sysconfdir}/apache2/vhosts.d/openqa-common.inc
%config %{_sysconfdir}/apache2/vhosts.d/openqa-ssl.conf.template
# apparmor profile
%dir %{_sysconfdir}/apparmor.d
%config %{_sysconfdir}/apparmor.d/usr.share.openqa.script.openqa
# init
%dir %{_unitdir}
%{_unitdir}/openqa-webui.service
%{_unitdir}/openqa-gru.service
%{_unitdir}/openqa-scheduler.service
%{_unitdir}/openqa-websockets.service
# web libs
%dir %{_datadir}/openqa
%{_datadir}/openqa/templates
%{_datadir}/openqa/public
%{_datadir}/openqa/assets
%{_datadir}/openqa/dbicdh
%{_datadir}/openqa/script/check_dependencies
%{_datadir}/openqa/script/clean_needles
%{_datadir}/openqa/script/create_admin
%{_datadir}/openqa/script/fetchneedles
%{_datadir}/openqa/script/initdb
%{_datadir}/openqa/script/openqa
%{_datadir}/openqa/script/openqa-scheduler
%{_datadir}/openqa/script/openqa-websockets
%{_datadir}/openqa/script/upgradedb
%{_datadir}/openqa/script/modify_needle
# TODO: define final user
%defattr(-,geekotest,root)
# attention: never package subdirectories owned by a user other
# than root as that opens a security hole!
%dir %{_localstatedir}/lib/openqa/db
%dir %{_localstatedir}/lib/openqa/images
%{_localstatedir}/lib/openqa/testresults
%dir %{_localstatedir}/lib/openqa/share/tests
%dir %{_localstatedir}/lib/openqa/share/factory
# iso hdd repo must be geekotest writable to enable *_URL and HDD upload functionality
%dir %{_localstatedir}/lib/openqa/share/factory/iso
%dir %{_localstatedir}/lib/openqa/share/factory/hdd
%dir %{_localstatedir}/lib/openqa/share/factory/repo
%dir %{_localstatedir}/lib/openqa/share/factory/other
%ghost %{_localstatedir}/lib/openqa/db/db.sqlite
%ghost %{_localstatedir}/log/openqa
%files common
%defattr(-,root,root)
%dir %{_datadir}/openqa
%{_datadir}/openqa/lib
%exclude %{_datadir}/openqa/lib/OpenQA/Client.pm
%dir %{_localstatedir}/lib/openqa
%ghost %dir %{_localstatedir}/lib/openqa/share/
%{_localstatedir}/lib/openqa/factory
%{_localstatedir}/lib/openqa/script
%{_localstatedir}/lib/openqa/tests
%files worker
%defattr(-,root,root)
%{_sbindir}/rcopenqa-slirpvde
%{_sbindir}/rcopenqa-vde_switch
%{_sbindir}/rcopenqa-worker
%config(noreplace) %{_sysconfdir}/openqa/workers.ini
%config(noreplace) %attr(0400,_openqa-worker,root) %{_sysconfdir}/openqa/client.conf
# apparmor profile
%dir %{_sysconfdir}/apparmor.d
%config %{_sysconfdir}/apparmor.d/usr.share.openqa.script.worker
# init
%dir %{_unitdir}
%{_libexecdir}/systemd/system-generators
%{_unitdir}/openqa-worker.target
%{_unitdir}/openqa-worker@.service
%{_unitdir}/openqa-slirpvde.service
%{_unitdir}/openqa-vde_switch.service
%{_tmpfilesdir}/openqa.conf
%ghost %dir %{_rundir}/openqa
# worker libs
%dir %{_datadir}/openqa
%dir %{_datadir}/openqa/script
%{_datadir}/openqa/script/worker
%dir %{_localstatedir}/lib/openqa/pool
%defattr(-,_openqa-worker,root)
%dir %{_localstatedir}/lib/openqa/cache
# own one pool - to create the others is task of the admin
%dir %{_localstatedir}/lib/openqa/pool/1
%files client
%defattr(-,root,root)
%dir %{_datadir}/openqa
%dir %{_datadir}/openqa/script
%{_datadir}/openqa/script/client
%{_datadir}/openqa/script/clone_job.pl
%{_datadir}/openqa/script/dump_templates
%{_datadir}/openqa/script/load_templates
%dir %{_datadir}/openqa/lib
%{_datadir}/openqa/lib/OpenQA/Client.pm
%{_bindir}/openqa-client
%files doc
%defattr(-,root,root)
%doc docs/*
%changelog