File redmine.spec of Package redmine
#
# spec file for package redmine
#
# Copyright (c) 2024 SUSE LLC
#
# 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 https://bugs.opensuse.org/
#
%define basedir /srv/www/vhosts/redmine/
%define logdir %{_localstatedir}/log/redmine/
%define datadir %{_localstatedir}/lib/redmine/
%define confdir %{_sysconfdir}/redmine/
%define rails_fix_ruby_shebang() \
for S in $(grep -l '#!.*ruby' %* ) ; do \
SB="${S}.backup" \
cp ${S} ${SB} \
perl -p -i -e 's|#!%{_bindir}/env ruby|#!%{_bindir}/ruby.%{rb_suffix}|g' $S \
diff -urN ${SB} ${S} || : \
rm ${SB} \
done \
%{nil}
#
%define rb_build_versions %{redmine_ruby_build_versions}
%define rb_build_abi %{redmine_ruby_abis}
%define rb_suffix %{redmine_ruby_suffix}
%define rb_version %{redmine_ruby_version}
#
Name: redmine
Version: 6.0.4
Release: 0
Summary: A flexible project management web application
License: GPL-2.0-or-later
Group: Productivity/Other
URL: https://www.redmine.org/
Source: https://www.redmine.org/releases/redmine-%{version}.tar.gz
Source1: %{name}.service
Source2: unicorn.rb
Source3: opensuse-favicon.ico
Source4: %{name}-update
Source5: %{name}.sysuser
Source6: %{name}-update.service
Source8: %{name}-sidekiq.service
Source9: sidekiq.rb
Source10: %{name}-reminder.service
Source11: %{name}-reminder.timer
Source12: %{name}.apparmor
Source13: %{name}.apparmor.abstractions
Source14: %{name}-admin_constraint.rb
Source15: %{name}.logrotate
Patch0: redmine-6.0.4-gemdeps.patch
Patch1: redmine-button_edit-text.patch
Patch2: redmine-routes_sidekiq.patch
BuildRequires: apparmor-abstractions
BuildRequires: apparmor-rpm-macros
BuildRequires: %{rubygem actionpack-xml_parser}
BuildRequires: %{rubygem addressable}
#
BuildRequires: %{rubygem bundler >= 1.12.0}
BuildRequires: %{rubygem commonmarker:0.23 >= 0.23.8}
BuildRequires: %{rubygem csv:3.2 >= 3.2.8}
BuildRequires: %{rubygem deckar01-task_list == 2.3.2}
#
BuildRequires: %{rubygem html-pipeline >= 2.13.2}
BuildRequires: %{rubygem i18n:1.14 >= 1.14.1}
BuildRequires: %{rubygem mail:2.8 >= 2.8.1}
BuildRequires: %{rubygem marcel}
BuildRequires: %{rubygem mini_magick:5.0 >= 5.0.1}
BuildRequires: %{rubygem mini_mime:1.1}
BuildRequires: %{rubygem mysql2:0.5 >= 0.5.0}
BuildRequires: %{rubygem net-imap:0.4 >= 0.4.8}
BuildRequires: %{rubygem net-ldap:0.17}
BuildRequires: %{rubygem net-pop:0.1 >= 0.1.2}
BuildRequires: %{rubygem net-smtp:0.4}
BuildRequires: %{rubygem nokogiri:1.18 >= 1.18.3}
#
BuildRequires: %{rubygem pg:1 >= 1.0.0}
#BuildRequires: #{rubygem puma}
BuildRequires: %{rubygem rack >= 3.1.3}
BuildRequires: %{rubygem rack-openid}
BuildRequires: %{rubygem rack-test >= 1.1}
BuildRequires: %{rubygem rails:7.2 == 7.2.2.1}
BuildRequires: %{rubygem rbpdf:1.21 >= 1.21.3}
BuildRequires: %{rubygem redcarpet:3.6 >= 3.6.0}
BuildRequires: %{rubygem roadie-rails:3.2}
BuildRequires: %{rubygem rotp >= 5}
BuildRequires: %{rubygem rouge:4.5}
BuildRequires: %{rubygem rqrcode}
BuildRequires: %{rubygem ruby-openid:2.9 >= 2.9.2}
BuildRequires: %{rubygem rubyzip:2.3 >= 2.3.0}
BuildRequires: %{rubygem sanitize:6.0}
BuildRequires: %{rubygem sidekiq >= 6.0.6}
BuildRequires: %{rubygem sprockets >= 4}
BuildRequires: %{rubygem unicorn}
BuildRequires: %{rubygem websocket-driver >= 0.7}
BuildRequires: %{rubygem with_advisory_lock}
BuildRequires: %{rubygem propshaft:1.1}
BuildRequires: pkgconfig
BuildRequires: rsync
BuildRequires: ruby-common-rails
BuildRequires: sysuser-tools
BuildRequires: pkgconfig(systemd)
Requires: apparmor-abstractions
Requires: %{rb_suffix}-rubygem-mysql2
Requires: %{rb_suffix}-rubygem-redmine_crm
Requires: %{rb_suffix}-rubygem-with_advisory_lock
# PDF support
Recommends: ghostscript
Recommends: logrotate
BuildArch: noarch
%{?systemd_requires}
%description
Redmine is a flexible project management web application. Written using the
Ruby on Rails framework, it is cross-platform and cross-database.
%prep
%autosetup -p1
touch Gemfile.lock
#rails_save_gemfile
rm -r .github
rm -r lib/plugins/*/test
find -type f \( -name '.*' -o -size 0 -not -name empty \) -delete
# only needed by upstream to generate the changelog file
rm bin/changelog.rb
# ???
rm {files,log}/delete.me
sed -i 's|%{_bindir}/env rake|%{_bindir}/rake|g' Rakefile
for file in \
extra/mail_handler/rdm-mailhandler.rb \
extra/svn/reposman.rb \
; do
sed -i 's|%{_bindir}/env ruby|%{_bindir}/ruby|g' "$file"
done
%build
tee Gemfile.local <<EOF
gem 'unicorn'
#gem 'puma'
gem 'sidekiq'
EOF
%rails_fix_ruby_shebang bin/*
%{rails_regen_gemfile_lock}
%{rails_fix_ruby_suffix}
%{rails_write_appinfo}
%sysusers_generate_pre %{SOURCE5} %{name} system-user-%{name}.conf
%install
install -d -m 0755 \
%{buildroot}%{_sbindir} \
%{buildroot}%{_sysusersdir} \
%{buildroot}%{_unitdir}
install -dD -m 0750 \
%{buildroot}%{confdir} \
%{buildroot}%{basedir} \
%{buildroot}%{logdir} \
%{buildroot}%{datadir}
mkdir -p public/plugin_assets
pushd config/
for i in *example ; do
dst="${i%%.example}"
echo "$i => $dst" ;
cp $i %{buildroot}%{confdir}/$dst
ln -s %{confdir}/$dst .
done
# The MariaDB version in Leap seems to want this variable instead?
sed -i 's/transaction_isolation/tx_isolation/' %{buildroot}%{confdir}/database.yml
ln -s %{confdir}/unicorn.rb .
popd
echo 'config.active_job.queue_adapter = :sidekiq' > %{buildroot}%{confdir}/additional_environment.rb
cp %{SOURCE3} public/favicon.ico
# license gets installed separately
# readme is not relevant with packaged themes
rsync -a \
--exclude LICENSE.txt \
--exclude themes/README \
. %{buildroot}%{basedir}
install -m 0644 %{SOURCE9} %{buildroot}%{basedir}config/initializers
#
install -D -m 0640 %{SOURCE2} %{buildroot}%{confdir}/unicorn.rb
install -m 0755 %{SOURCE4} %{buildroot}%{_sbindir}/%{name}-update
install -m 0644 %{SOURCE6} %{buildroot}%{_unitdir}/%{name}-update.service
ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{name}-update
install -m 0644 %{SOURCE1} %{buildroot}%{_unitdir}/%{name}.service
ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{name}
install -m 0644 %{SOURCE8} %{buildroot}%{_unitdir}/%{name}-sidekiq.service
ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{name}-sidekiq
install -m 0644 %{SOURCE10} %{buildroot}%{_unitdir}
install -m 0644 %{SOURCE11} %{buildroot}%{_unitdir}
ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{name}-reminder
# log directory
rmdir %{buildroot}%{basedir}/log
ln -s %{logdir} %{buildroot}%{basedir}/log
install -d %{buildroot}%{_sysconfdir}/logrotate.d
sed \
-e 's?__BINDIR__?%{_bindir}?' \
-e 's?__LOGDIR__?%{logdir}?' \
-e 's?__NAME__?%{name}?g' \
%{SOURCE15} > %{buildroot}%{_sysconfdir}/logrotate.d/%{name}
# permissions clean up
chmod -R o= %{buildroot}%{basedir} %{buildroot}%{confdir}
chmod o+X %{buildroot}%{basedir}
chmod -R o+rX %{buildroot}%{basedir}/public/
chmod g+rx %{buildroot}%{basedir}/extra/mail_handler/rdm-mailhandler.rb
install -v -m 0644 %{SOURCE5} %{buildroot}%{_sysusersdir}/system-user-%{name}.conf
# how does this end up there ??
rm %{buildroot}/%{basedir}/%{name}.pre
# AppArmor
install -d %{buildroot}%{_sysconfdir}/apparmor.d
sed \
-e 's?__BASE__?%{basedir}?' \
-e 's?__RUBY_SUFFIX__?%{rb_suffix}?' \
-e 's?__RUBY_VERSION__?%{rb_version}?' \
%{SOURCE12} > %{buildroot}%{_sysconfdir}/apparmor.d/%{name}
chmod 0644 %{buildroot}%{_sysconfdir}/apparmor.d/%{name}
install -D -m 0644 %{SOURCE13} %{buildroot}%{_sysconfdir}/apparmor.d/abstractions/%{name}
# directory for plugin includes
install -d %{buildroot}%{_sysconfdir}/apparmor.d/%{name}.d
# Sidekiq Web UI
install -D -m 0644 %{SOURCE14} %{buildroot}%{basedir}/lib/openSUSE/admin_constraint.rb
%pre -f %{name}.pre
%service_add_pre %{name}-update.service %{name}-sidekiq.service %{name}.service %{name}-reminder.service
%post
touch %{basedir}/rebuild
%{apparmor_reload %{_sysconfdir}/apparmor.d/%{name}}
SECRET_TOKEN_FILE='%{basedir}/config/initializers/secret_token.rb'
if [ ! -f "$SECRET_TOKEN_FILE" ]
then
(
set -e
cd %{basedir}
umask 137
rake.%{rb_suffix} generate_secret_token --trace
chown redmine: "$SECRET_TOKEN_FILE"
)
fi
%service_add_post %{name}-update.service %{name}-sidekiq.service %{name}.service %{name}-reminder.service
%preun
%service_del_preun %{name}-update.service %{name}-sidekiq.service %{name}.service %{name}-reminder.service
%postun
touch %{basedir}/rebuild
%service_del_postun %{name}-update.service %{name}-sidekiq.service %{name}.service %{name}-reminder.service
%posttrans
pushd %{basedir} >/dev/null
if [ -f Gemfile.lock ]
then
rm Gemfile.lock
fi
%{_bindir}/bundle.%{rb_suffix} check
if [ -f Gemfile.lock ]
then
chown root:%{name} Gemfile.lock
chmod 0640 Gemfile.lock
fi
popd >/dev/null
%files
%license LICENSE.txt
%{_sbindir}/%{name}-update
%{_unitdir}/%{name}.service
%{_sbindir}/rc%{name}
%{_unitdir}/%{name}-sidekiq.service
%{_sbindir}/rc%{name}-sidekiq
%{_unitdir}/%{name}-update.service
%{_sbindir}/rc%{name}-update
%{_unitdir}/%{name}-reminder.service
%{_unitdir}/%{name}-reminder.timer
%{_sbindir}/rc%{name}-reminder
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
%dir /srv/www/vhosts/
%defattr(-,root,redmine)
%dir %{basedir}
%dir %{basedir}/themes
%{basedir}/.appinfo.yml
%{basedir}/app/
%{basedir}/bin/
%{basedir}/config/
%{basedir}/config.ru
%{basedir}/CONTRIBUTING.md
%{basedir}/db/
%{basedir}/doc/
%{basedir}/extra/
%{basedir}/Gemfile*
%{basedir}/lib/
%{basedir}/log
%{basedir}/plugins/
%{basedir}/package.json
%{basedir}/yarn.lock
%{basedir}/Rakefile
%{basedir}/README.rdoc
%{basedir}/test/
%{basedir}/vendor/
%dir %{basedir}/public/
%{basedir}/public/404.html
%{basedir}/public/500.html
%{basedir}/public/favicon.ico
%{basedir}/public/help/
%attr(-,%{name},%{name}) %{basedir}/public/plugin_assets/
%dir %attr(-,%{name},%{name}) %{basedir}/files/
%attr(-,%{name},%{name}) %{basedir}/tmp/
#
%config(noreplace) %{confdir}
%dir %attr(-,%{name},%{name}) %{logdir}
%dir %attr(-,%{name},%{name}) %{datadir}
%{_sysusersdir}/system-user-%{name}.conf
%config %{_sysconfdir}/apparmor.d/%{name}
%config %{_sysconfdir}/apparmor.d/abstractions/%{name}
%dir %{_sysconfdir}/apparmor.d/%{name}.d
%ghost %{basedir}/config/initializers/secret_token.rb
%ghost %{basedir}/db/schema
%ghost %{basedir}/public/assets
%ghost %{basedir}/rebuild
%ghost %{basedir}/tmp/cache
%ghost %{basedir}/tmp/pids
%changelog