tdecacqu / rpms / zuul

Forked from rpms/zuul 6 years ago
Clone
Blob Blame History Raw
%global gitdate 20171227
%global commit  420e8a460bda83e14b6063bc17f8649597b22d46
%global shortcommit %(c=%{commit}; echo ${c:0:7})

Name:           zuul
Version:        3.0.0
Release:        0.1.%{gitdate}git%{shortcommit}%{?dist}
Summary:        Trunk Gating System

License:        ASL 2.0
URL:            http://docs.openstack.org/infra/system-config/
Source0:        https://github.com/openstack-infra/zuul/archive/%{commit}/zuul-%{version}.tar.gz
Source1:        zuul-scheduler.service
Source2:        zuul-merger.service
Source3:        zuul-executor.service
Source4:        zuul-web.service
Source5:        zuul-fingergw.service
Source6:        zuul.logrotate

BuildArch:      noarch

Requires:       python3
Requires:       python3-pbr
Requires:       python3-CacheControl
Requires:       python3-jwt
Requires:       python3-github3py
Requires:       python3-PyYAML
Requires:       python3-paste
Requires:       python3-webob
Requires:       python3-paramiko
Requires:       python3-GitPython
Requires:       python3-daemon
Requires:       python3-extras
Requires:       python3-iso8601
Requires:       python3-statsd
Requires:       python3-voluptuous
Requires:       python3-gear
Requires:       python3-APScheduler
Requires:       python3-prettytable
Requires:       python3-babel
Requires:       python3-kazoo
Requires:       python3-sqlalchemy
Requires:       python3-alembic
Requires:       python3-PyMySQL
Requires:       python3-alembic
Requires:       python3-crypto
Requires:       python3-aiohttp
Requires:       python3-uvloop
Requires:       python3-netaddr
Requires:       python3-paho-mqtt
Requires:       git

BuildRequires:  python3-devel
BuildRequires:  python3-pbr
BuildRequires:  python3-setuptools
BuildRequires:  python3-zuul-sphinx
BuildRequires:  python3-sphinx-autodoc-typehints
BuildRequires:  python3-sphinxcontrib-blockdiag
BuildRequires:  python3-sphinxcontrib-programoutput
BuildRequires:  help2man
%{?systemd_requires}
BuildRequires:  systemd


%description
Zuul is a project gating system developed for the OpenStack Project.


%package scheduler
Summary:  The Zuul scheduler
Requires: zuul

%description scheduler
The Zuul scheduler


%package merger
Summary:  The Zuul merger
Requires: zuul

%description merger
The Zuul merger


%package web
Summary:  The Zuul web
Requires: zuul

%description web
The Zuul web


%package executor
Summary:  The Zuul executor
Requires: zuul
Requires: ansible-python3
Requires: python3-jmespath
Requires: bubblewrap

%description executor
The Zuul executor


%package migrate
Summary:  Migrate zuul v2 and Jenkins Job Builder to Zuul v3
Requires: zuul
Requires: python3-jenkins-job-builder

%description migrate
Migrate zuul v2 and Jenkins Job Builder to Zuul v3


%package fingergw
Summary: Executor finger gateway
Requires: zuul

%description fingergw
Executor finger gateway


%package doc
Summary: The Zuul documentation

%description doc
The Zuul documentation


%prep
%autosetup -n zuul-%{commit} -p1
rm -Rf *requirements.txt *.egg-info

# Add alembic __init__.py file, otherwise the migration script isn't packaged
touch zuul/driver/sql/alembic/__init__.py \
      zuul/driver/sql/alembic/versions/__init__.py \
      zuul/ansible/filter/__init__.py

# Remove interpreter
find zuul/ -type f -exec sed -i -e '/#!\/usr\/bin\/.*python.*/{1D}' {} \;


%build
PBR_VERSION=%{version} %py3_build
PBR_VERSION=%{version} SPHINX_DEBUG=1 sphinx-build -b html doc/source build/html

rm -Rf build/html/.buildinfo build/html/objects.inv

# Generate man pages
mkdir man
pushd man
echo -e "#!/usr/bin/python3\nimport sys\nfrom zuul.cmd.client import main\nmain()" > zuul
echo -e "#!/usr/bin/python3\nimport sys\nfrom zuul.driver.bubblewrap import main\nmain()" > zuul-bwrap
for subcmd in cloner executor fingergw merger migrate scheduler web; do
    echo -e "#!/usr/bin/python3\nimport sys\nfrom zuul.cmd.${subcmd} import main\nmain()" > zuul-${subcmd}
done
chmod +x zuul*
for cmd in zuul*; do
    PYTHONPATH=.. help2man --no-discard-stderr --no-info -o ${cmd}.man ./${cmd}
done
popd


%install
PBR_VERSION=%{version} %py3_install

# Remove executable bit from libraries
find %{buildroot}%{python3_sitelib}/zuul -type f -exec chmod -x {} \;

# Add zuul web static
cp -R zuul/web/static %{buildroot}%{python3_sitelib}/zuul/web/static

# Man pages
install -p -D -m 0644 man/zuul.man %{buildroot}%{_mandir}/man1/zuul.1
for cmd in bwrap cloner executor fingergw merger migrate scheduler web; do
    install -p -D -m 0644 man/zuul-${cmd}.man %{buildroot}%{_mandir}/man1/zuul-${cmd}.1
done

# Service unit
install -p -D -m 0644 %{SOURCE1} %{buildroot}%{_unitdir}/zuul-scheduler.service
install -p -D -m 0644 %{SOURCE2} %{buildroot}%{_unitdir}/zuul-merger.service
install -p -D -m 0644 %{SOURCE3} %{buildroot}%{_unitdir}/zuul-executor.service
install -p -D -m 0644 %{SOURCE4} %{buildroot}%{_unitdir}/zuul-web.service
install -p -D -m 0644 %{SOURCE5} %{buildroot}%{_unitdir}/zuul-fingergw.service

# Basic configuration
install -p -D -m 0644 etc/logging.conf-sample %{buildroot}%{_sysconfdir}/zuul/logging.conf
install -p -D -m 0640 etc/zuul.conf-sample %{buildroot}%{_sysconfdir}/zuul/zuul.conf
install -p -D -m 0644 %{SOURCE6} %{buildroot}%{_sysconfdir}/logrotate.d/zuul

# Service base directories
install -p -d -m 0700 %{buildroot}%{_sharedstatedir}/zuul
install -p -d -m 0700 %{buildroot}%{_localstatedir}/log/zuul
install -p -d -m 0700 %{buildroot}%{_sharedstatedir}/zuul/.ssh
install -p -d -m 0755 %{buildroot}%{_sharedstatedir}/zuul/ansible
install -p -d -m 0755 %{buildroot}%{_sharedstatedir}/zuul/executor
install -p -d -m 0755 %{buildroot}%{_sharedstatedir}/zuul/git
install -p -d -m 0700 %{buildroot}%{_sharedstatedir}/zuul/keys


%pre
getent group zuul >/dev/null || groupadd -r zuul
if ! getent passwd zuul >/dev/null; then
  useradd -r -g zuul -G zuul -d %{_sharedstatedir}/zuul -s /sbin/nologin -c "Zuul Daemon" zuul
fi
exit 0


%post scheduler
%systemd_post zuul-scheduler.service
%post merger
%systemd_post zuul-merger.service
%post web
%systemd_post zuul-web.service
%post executor
%systemd_post zuul-executor.service
%post fingergw
%systemd_post zuul-fingergw.service


%preun scheduler
%systemd_preun zuul-scheduler.service
%preun merger
%systemd_preun zuul-merger.service
%preun web
%systemd_preun zuul-web.service
%preun executor
%systemd_preun zuul-executor.service
%preun fingergw
%systemd_preun zuul-fingergw.service


%postun scheduler
%systemd_postun zuul-scheduler.service
%postun merger
%systemd_postun zuul-merger.service
%postun web
%systemd_postun zuul-web.service
%postun executor
%systemd_postun zuul-executor.service
%postun fingergw
%systemd_postun zuul-fingergw.service


%files
%license LICENSE
%{_mandir}/man1/zuul.1*
%{_mandir}/man1/zuul-cloner.1*
%{_mandir}/man1/zuul-bwrap.1*
%{_bindir}/zuul
%{_bindir}/zuul-cloner
%{_bindir}/zuul-bwrap
%{python3_sitelib}/zuul
%{python3_sitelib}/zuul-*.egg-info
%config(noreplace) %{_sysconfdir}/logrotate.d/zuul
%config(noreplace) %{_sysconfdir}/zuul/logging.conf
%config(noreplace) %attr(0640, root, zuul) %{_sysconfdir}/zuul/zuul.conf
%dir %attr(0751, zuul, zuul) %{_sharedstatedir}/zuul
%dir %attr(0700, zuul, zuul) %{_sharedstatedir}/zuul/.ssh
%dir %attr(0755, zuul, zuul) %{_sharedstatedir}/zuul/ansible
%dir %attr(0700, zuul, zuul) %{_sharedstatedir}/zuul/keys
%dir %attr(0750, zuul, zuul) %{_localstatedir}/log/zuul

%files scheduler
%license LICENSE
%{_mandir}/man1/zuul-scheduler.1*
%{_bindir}/zuul-scheduler
%{_unitdir}/zuul-scheduler.service

%files merger
%license LICENSE
%{_mandir}/man1/zuul-merger.1*
%{_bindir}/zuul-merger
%{_unitdir}/zuul-merger.service

%files web
%license LICENSE
%{_mandir}/man1/zuul-web.1*
%{_bindir}/zuul-web
%{_unitdir}/zuul-web.service

%files executor
%license LICENSE
%{_mandir}/man1/zuul-executor.1*
%{_bindir}/zuul-executor
%{_unitdir}/zuul-executor.service
%dir %attr(0755, zuul, zuul) %{_sharedstatedir}/zuul/ansible
%dir %attr(0755, zuul, zuul) %{_sharedstatedir}/zuul/executor

%files migrate
%license LICENSE
%{_mandir}/man1/zuul-migrate.1*
%{_bindir}/zuul-migrate

%files fingergw
%license LICENSE
%{_mandir}/man1/zuul-fingergw.1*
%{_bindir}/zuul-fingergw
%{_unitdir}/zuul-fingergw.service

%files doc
%license LICENSE
%doc build/html


%changelog
* Tue Jan 09 2018 Tristan Cacqueray <tdecacqu@redhat.com> - 3.0.0-0.1.20171227git420e8a4
- Import from software factory repository