# # 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 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 # Disable service install for now, waiting for boo#1032649 rm -f %{buildroot}/etc/dbus-1/system.d/org.opensuse.openqa.conf %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 # Disable service install for now, waiting for boo#1032649 #%%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