diff --git a/.gitignore b/.gitignore index 13d0dbf..a0c60c3 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -/dist-git-0.10.tar.gz +/dist-git-*.tar.gz diff --git a/dist-git.spec b/dist-git.spec index 300fc48..b9bec9d 100644 --- a/dist-git.spec +++ b/dist-git.spec @@ -1,12 +1,14 @@ +%global selinux_variants mls targeted +%global modulename dist_git +%global installdir /var/lib/dist-git + Name: dist-git -Version: 0.10 -Release: 1%{?dist} +Version: 1.20 +Release: 2%{?dist} Summary: Package source version control system -Group: Applications/Productivity - -# upload.cgi uses GPLv1 and pkgdb_sync_git_branches.py uses GPLv2+ -License: MIT and GPLv1 and GPLv2+ +# upload.cgi uses GPLv1 +License: MIT AND GPL-1.0-only URL: https://github.com/release-engineering/dist-git # Source is created by # git clone https://github.com/release-engineering/dist-git.git @@ -18,133 +20,199 @@ BuildArch: noarch BuildRequires: systemd Requires: httpd -Requires: gitolite3 Requires: perl(Sys::Syslog) +Requires: (dist-git-selinux if selinux-policy-targeted) +Requires: git Requires: git-daemon -Requires: python-requests -Requires: /usr/sbin/semanage Requires: mod_ssl -Requires: fedmsg -Requires: cronie +Requires: crudini +%if 0%{?rhel} && 0%{?rhel} < 10 Requires(pre): shadow-utils +%endif + +Requires: python3-requests +Recommends: python3-grokmirror +Suggests: python3-fedmsg +Suggests: fedora-messaging + +BuildRequires: python3-devel +BuildRequires: python3-pytest +BuildRequires: python3-requests + +# this should be Requires but see https://bugzilla.redhat.com/show_bug.cgi?id=1833810 +Recommends: moreutils + +%if 0%{?fedora} && 0%{?fedora} >= 41 +# The `cgi` module was removed from the Python 3.13 standard library +BuildRequires: python3-legacy-cgi +Requires: python3-legacy-cgi +%endif + %description +DistGit is a Git repository specifically designed to hold RPM +package sources. + + +%package selinux +Summary: SELinux support for dist-git + +BuildRequires: checkpolicy +BuildRequires: hardlink + +Requires: %name = %version-%release +BuildRequires: selinux-policy-devel +%{?selinux_requires} + + +%description selinux Dist Git is a remote Git repository specifically designed to hold RPM package sources. +This package includes SELinux support. + %prep %setup -q %build - +# ------------------------------------------------------------------------------ +# SELinux +# ------------------------------------------------------------------------------ +cd selinux +for selinuxvariant in %{selinux_variants} +do + make NAME=${selinuxvariant} -f /usr/share/selinux/devel/Makefile + mv %{modulename}.pp %{modulename}.pp.${selinuxvariant} + make NAME=${selinuxvariant} -f /usr/share/selinux/devel/Makefile clean +done +cd - %pre +%if 0%{?rhel} && 0%{?rhel} < 10 +# ------------------------------------------------------------------------------ +# Users and Groups +# ------------------------------------------------------------------------------ getent group packager > /dev/null || \ groupadd -r packager +exit 0 +%endif -getent group gen-acls > /dev/null || \ - groupadd -r gen-acls - -getent passwd gen-acls > /dev/null || \ - useradd -r -g gen-acls -G packager -s /bin/bash \ - -d %{_sharedstatedir}/dist-git/git gen-acls - +%check +%pytest -vv . %install - # ------------------------------------------------------------------------------ -# /usr/share/ .... static files +# /usr/share/ ........... scripts # ------------------------------------------------------------------------------ -install -d %{buildroot}%{_datadir}/dist-git - +install -d %{buildroot}%{_datadir}/dist-git/ cp -a scripts/dist-git/* %{buildroot}%{_datadir}/dist-git/ - # ------------------------------------------------------------------------------ # /etc/ .......... config files # ------------------------------------------------------------------------------ install -d %{buildroot}%{_sysconfdir}/dist-git +cp -a configs/dist-git/dist-git.conf %{buildroot}%{_sysconfdir}/dist-git/ install -d %{buildroot}%{_sysconfdir}/httpd/conf.d/dist-git -install -d %{buildroot}%{_sysconfdir}/cron.d/dist-git mkdir -p %{buildroot}%{_unitdir} -cp -a configs/dist-git/dist-git.conf %{buildroot}%{_sysconfdir}/dist-git/ -cp -a configs/gitolite/gitolite.rc %{buildroot}%{_sysconfdir}/dist-git/ -cp -a configs/httpd/dist-git.conf %{buildroot}%{_sysconfdir}/httpd/conf.d/ -cp -a configs/httpd/ssl.conf.example %{buildroot}%{_sysconfdir}/httpd/conf.d/ +cp -a configs/httpd/dist-git.conf %{buildroot}%{_sysconfdir}/httpd/conf.d/ cp -a configs/httpd/dist-git/* %{buildroot}%{_sysconfdir}/httpd/conf.d/dist-git/ -cp -a configs/cron/* %{buildroot}%{_sysconfdir}/cron.d/dist-git/ cp -a configs/systemd/* %{buildroot}%{_unitdir}/ +install -m0644 -D configs/sysusers.d/dist-git.conf %{buildroot}%{_sysusersdir}/dist-git.conf # ------------------------------------------------------------------------------ # /var/lib/ ...... dynamic persistent files # ------------------------------------------------------------------------------ -install -d %{buildroot}%{_sharedstatedir}/dist-git -install -d %{buildroot}%{_sharedstatedir}/dist-git/git -install -d %{buildroot}%{_sharedstatedir}/dist-git/git/rpms -install -d %{buildroot}%{_sharedstatedir}/dist-git/gitolite -install -d %{buildroot}%{_sharedstatedir}/dist-git/gitolite/conf -install -d %{buildroot}%{_sharedstatedir}/dist-git/gitolite/logs -install -d %{buildroot}%{_sharedstatedir}/dist-git/gitolite/local -install -d %{buildroot}%{_sharedstatedir}/dist-git/gitolite/local/VREF -install -d %{buildroot}%{_sharedstatedir}/dist-git/cache -install -d %{buildroot}%{_sharedstatedir}/dist-git/cache/lookaside -install -d %{buildroot}%{_sharedstatedir}/dist-git/cache/lookaside/pkgs -install -d %{buildroot}%{_sharedstatedir}/dist-git/web -install -d %{buildroot}%{_sharedstatedir}/dist-git/gitolite -install -d %{buildroot}%{_sharedstatedir}/dist-git/gitolite/hooks -install -d %{buildroot}%{_sharedstatedir}/dist-git/gitolite/hooks/common +install -d %{buildroot}%{installdir} +install -d %{buildroot}%{installdir}/git +install -d %{buildroot}%{installdir}/cache +install -d %{buildroot}%{installdir}/cache/lookaside +install -d %{buildroot}%{installdir}/cache/lookaside/pkgs +install -d %{buildroot}%{installdir}/web -cp -a scripts/httpd/upload.cgi %{buildroot}%{_sharedstatedir}/dist-git/web/ +cp -a scripts/httpd/upload.cgi %{buildroot}%{installdir}/web/ -cp -a scripts/git/hooks/update-block-push-origin \ - %{buildroot}%{_sharedstatedir}/dist-git/gitolite/local/VREF/update-block-push-origin +%if 0%{?rhel} && 0%{?rhel} < 8 + sed -i '1 s|#.*|#!/usr/bin/python2|' %{buildroot}%{installdir}/web/upload.cgi +%endif -ln -f -s %{_sysconfdir}/dist-git/gitolite.rc \ - %{buildroot}%{_sharedstatedir}/dist-git/git/.gitolite.rc +# ------------------------------------------------------------------------------ +# /usr/bin/ ...... links to executable files +# ------------------------------------------------------------------------------ +install -d %{buildroot}%{_bindir} +ln -s %{_datadir}/dist-git/setup_git_package %{buildroot}%{_bindir}/setup_git_package +ln -s %{_datadir}/dist-git/mkbranch %{buildroot}%{_bindir}/mkbranch +ln -s %{_datadir}/dist-git/mkbranch_branching %{buildroot}%{_bindir}/mkbranch_branching +ln -s %{_datadir}/dist-git/remove_unused_sources %{buildroot}%{_bindir}/remove_unused_sources +mv %{buildroot}%{_datadir}/dist-git/dist-git-gc %{buildroot}%{_bindir}/dist-git-gc -ln -f -s %{_sharedstatedir}/dist-git/gitolite \ - %{buildroot}%{_sharedstatedir}/dist-git/git/.gitolite +# ------------------------------------------------------------------------------ +# SELinux +# ------------------------------------------------------------------------------ +cd selinux +for selinuxvariant in %{selinux_variants} +do + install -d %{buildroot}%{_datadir}/selinux/${selinuxvariant} + install -p -m 644 %{modulename}.pp.${selinuxvariant} \ + %{buildroot}%{_datadir}/selinux/${selinuxvariant}/%{modulename}.pp +done +cd - -ln -f -s %{_sharedstatedir}/dist-git/git/rpms \ - %{buildroot}%{_sharedstatedir}/dist-git/git/repositories +hardlink -cv %{buildroot}%{_datadir}/selinux +%post selinux +for selinuxvariant in %{selinux_variants} +do + /usr/sbin/semodule -s ${selinuxvariant} -i \ + %{_datadir}/selinux/${selinuxvariant}/%{modulename}.pp &> /dev/null || : +done +%{_sbindir}/restorecon -v %{installdir}/cache || : +%{_sbindir}/restorecon -v %{installdir}/cache/lookaside || : +%{_sbindir}/restorecon -v %{installdir}/cache/lookaside/pkgs || : +%{_sbindir}/restorecon -v %{installdir}/git || : +%{_sbindir}/restorecon -Rv %{installdir}/web/ || : +%systemd_post dist-git.socket + +%preun +%systemd_preun dist-git.socket + +%postun selinux +if [ $1 -eq 0 ] ; then + for selinuxvariant in %{selinux_variants} + do + /usr/sbin/semodule -s ${selinuxvariant} -r %{modulename} &> /dev/null || : + done +fi + +%systemd_postun dist-git.socket %files - +# ------------------------------------------------------------------------------ +# Docs +# ------------------------------------------------------------------------------ %license LICENSE %doc README.md -# ------------------------------------------------------------------------------ -# /usr/share/ .... static files -# ------------------------------------------------------------------------------ -%dir %{_datadir}/dist-git -%attr (755, -, -) %{_datadir}/dist-git/* - - # ------------------------------------------------------------------------------ # /etc/ .......... config files # ------------------------------------------------------------------------------ %dir %{_sysconfdir}/dist-git %config(noreplace) %{_sysconfdir}/dist-git/dist-git.conf -%config(noreplace) %{_sysconfdir}/dist-git/gitolite.rc -%config(noreplace) %{_sysconfdir}/httpd/conf.d/dist-git.conf -%config %{_sysconfdir}/httpd/conf.d/ssl.conf.example %dir %{_sysconfdir}/httpd/conf.d/dist-git %config(noreplace) %{_sysconfdir}/httpd/conf.d/dist-git/* -%dir %{_sysconfdir}/cron.d/dist-git -%config(noreplace) %{_sysconfdir}/cron.d/dist-git/cgit_pkg_list.cron -%config(noreplace) %{_sysconfdir}/cron.d/dist-git/dist_git_sync.cron +%config(noreplace) %{_sysconfdir}/httpd/conf.d/dist-git.conf + %{_unitdir}/dist-git@.service %{_unitdir}/dist-git.socket - +%{_unitdir}/dist-git-gc.service +%{_unitdir}/dist-git-gc.timer # ------------------------------------------------------------------------------ # /var/lib/ ...... dynamic persistent files @@ -152,73 +220,130 @@ ln -f -s %{_sharedstatedir}/dist-git/git/rpms \ # non-standard-dir-perm: # - git repositories and their contents must have w permission for their creators -%dir %{_sharedstatedir}/dist-git -%dir %{_sharedstatedir}/dist-git/git -%attr (2775, -, packager) %{_sharedstatedir}/dist-git/git/rpms -%dir %{_sharedstatedir}/dist-git/gitolite -%attr (755, gen-acls, gen-acls) %{_sharedstatedir}/dist-git/gitolite/conf -# non-standard-dir-perm: -# - write access needed into log directory for gitolite -%attr (775, gen-acls, packager) %{_sharedstatedir}/dist-git/gitolite/logs -%dir %{_sharedstatedir}/dist-git/gitolite/local -# non-standard-dir-perm: -# - write access needed for gitolite admin groups -%attr (775, gen-acls, packager) %{_sharedstatedir}/dist-git/gitolite/local/VREF -# non-standard-executable-perm: -# - write access needed for gitolite admin groups -# - exec permission needed for execution by git (it's a git hook script) -%attr (775, gen-acls, packager) %{_sharedstatedir}/dist-git/gitolite/local/VREF/update-block-push-origin -# non-standard-dir-perm: -# - write access needed for gitolite admin groups -%attr (770, -, packager) %{_sharedstatedir}/dist-git/gitolite/hooks -# script-without-shebang: -# zero-length: -# - initial empty file required by gitolite with the correct perms -%dir %{_sharedstatedir}/dist-git/gitolite/hooks/common -%ghost %attr (775, gen-acls, packager) %{_sharedstatedir}/dist-git/gitolite/hooks/common/update -%dir %{_sharedstatedir}/dist-git/web -%attr (755, apache, apache) %{_sharedstatedir}/dist-git/web/upload.cgi -%dir %{_sharedstatedir}/dist-git/cache -%dir %{_sharedstatedir}/dist-git/cache/lookaside -%attr (755, apache, apache) %{_sharedstatedir}/dist-git/cache/lookaside/pkgs -%{_sharedstatedir}/dist-git/git/repositories -%{_sharedstatedir}/dist-git/git/.gitolite -%{_sharedstatedir}/dist-git/git/.gitolite.rc +%dir %{installdir} +%attr (2775, -, packager) %{installdir}/git +%dir %{installdir}/web +%attr (755, apache, apache) %{installdir}/web/upload.cgi +%dir %{installdir}/cache +%dir %{installdir}/cache/lookaside +%attr (2775, apache, apache) %{installdir}/cache/lookaside/pkgs +# ------------------------------------------------------------------------------ +# /usr/share ...... executable files +# ------------------------------------------------------------------------------ + +%dir %{_datadir}/dist-git +%attr (775, -, -) %{_datadir}/dist-git/* +%{_bindir}/dist-git-gc +# TODO: move _datadir executables to _libexecdir, and drop these symlinks +%{_bindir}/mkbranch +%{_bindir}/mkbranch_branching +%{_bindir}/remove_unused_sources +%{_bindir}/setup_git_package + +%{_sysusersdir}/dist-git.conf + +%files selinux +%doc selinux/* +%{_datadir}/selinux/*/%{modulename}.pp %changelog -* Mon Apr 27 2015 Adam Samalik 0.10-1 -- perl require and files update (asamalik@redhat.com) +* Wed Jul 15 2026 Fedora Release Engineering - 1.20-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild -* Thu Apr 23 2015 Adam Samalik 0.9-1 -- update hook update (asamalik@redhat.com) +* Tue Jul 07 2026 Miroslav Suchý 1.20-1 +- Fix tests for Python 3.15: replace removed CGIHTTPRequestHandler -* Thu Apr 23 2015 Adam Samalik 0.8-1 -- review update (asamalik@redhat.com) +* Fri Feb 13 2026 Pavel Raiskup 1.19-1 +- Avoid using parameterized and nose +- Add sysusers.d config file to allow rpm to create users/groups automatically -* Wed Apr 22 2015 Adam Samalik 0.7-1 -- git hooks permissions (asamalik@redhat.com) -- noreplace configs (asamalik@redhat.com) -- fixes after rpmlint (asamalik@redhat.com) +* Fri Sep 27 2024 Pavel Raiskup 1.18-1 +- replace test on _selinux_policy_version by macro that does it all +- handle situation when _selinux_policy_version is not defined +- silence pylint +- remove rhel7 specific code +- Move %%_bindir symlinks out from dist-git-selinux +- Depend on python3-legacy-cgi for F41+ +- licensing: update the project's COPYING file +- dist-git: move the code into sub-directory -* Wed Apr 22 2015 Adam Samalik 0.6-1 -- license + description (asamalik@redhat.com) -- cron files fix (asamalik@redhat.com) +* Wed Jan 04 2023 Miroslav Suchý 1.17-1 +- use spdx license +- use pytest instead of nose test -* Wed Apr 15 2015 Adam Samalik 0.5-1 -- git hook: update-block-push-origin (asamalik@redhat.com) -- lookaside-upload config comments (asamalik@redhat.com) -- gen-acls user fix (asamalik@redhat.com) -- ssl httpd configs as examples (asamalik@redhat.com) +* Mon Oct 5 2020 clime - 1.16-1 +- fixed exceptions for fedora-messaging +- fixed topic for fedora-messaging (to git.lookaside.new) +- spec tweak not to require distgit-selinux in containers +- only Suggests fedmsg +- garbage collection (git gc) script and systemd timer + for its periodic run added -* Fri Apr 10 2015 Adam Samalik 0.4-1 -- spec and config fix -- systemd services -* Tue Mar 31 2015 Adam Samalik 0.3-1 -- alpha package (asamalik@redhat.com) +* Fri Jun 12 2020 clime - 1.15-1 +- added support for fedora-messaging -* Mon Mar 30 2015 Adam Samalik 0.2-1 -- new package built with tito +* Thu May 21 2020 clime - 1.14-1 +- disable unit tests temporarily as they do not pass + with network disabled during build +* Thu May 21 2020 clime - 1.13-1 +- fedmsg made an optional (recommnended) dependency +- slight refactoring of upload.cgi script +- tests added and documented +* Tue May 28 2019 Miroslav Suchy - 1.12-1 +- remove old changelog entries +- do not specify full path for hardlink [RHBZ#1714637] +- add script for removing unused source tarballs in lookaside cache + +* Tue Apr 30 2019 clime 1.11-1 +- remove python3-configparser require +- move scripts to bindir + +* Mon Mar 11 2019 clime 1.10-1 +- python3 support +- fix post-receive hook in case post.receive.d is empty + +* Fri Nov 23 2018 clime 1.9-1 +- do not create sources file when creating a repo +- set umask 0002 in all available dist-git scripts +- Use REMOTE_USER as fallback for GSS_NAME +- add support for setting mtime for an uploaded file + +* Tue Aug 14 2018 clime 1.8-1 +- add disable group check option +- add lookaside_dir option +- deprecate cache_dir +- fix python-grokmirror dep + +* Mon Feb 26 2018 clime 1.7-1 +- move 'fedmsgs', 'old_paths', 'nomd5' options to optional upload section + +* Mon Feb 19 2018 clime 1.6-1 +- add 'fedmsgs', 'old_paths', and 'default_namespace' config options +- remove domain_read_all_domains_state SELinux rule +- require dist-git-selinux +- give optional map permission to git_system_t on git_user_content_t +- update requires to work for all environments +- make the package completely distribution-agnostic + +* Mon Dec 18 2017 clime 1.5-1 +- make selinux policy build on f27+ +- add optional map SELinux permission for httpd_t + +* Tue Jul 25 2017 clime 1.4-1 +- disable md5 uploading by default + +* Mon Jun 26 2017 clime 1.3-1 +- translate '/' to '-' in package name for mailinglist hook + (graybrandon@gmail.com) + +* Fri May 26 2017 clime 1.2-1 +- remove mail git hook +- grokmirror support + +* Wed May 03 2017 clime 1.1-1 +- fix default config value for email +- fix name/email switch diff --git a/packit.yaml b/packit.yaml new file mode 100644 index 0000000..0b8d165 --- /dev/null +++ b/packit.yaml @@ -0,0 +1,24 @@ +upstream_project_url: https://github.com/release-engineering/dist-git +upstream_tag_template: dist-git-{version}-1 +issue_repository: https://github.com/release-engineering/dist-git +copy_upstream_release_description: false + +jobs: +- job: pull_from_upstream + trigger: release + dist_git_branches: + - rawhide + - epel9 + +- job: koji_build + trigger: commit + allowed_committers: ['packit'] + dist_git_branches: + - fedora-all + - epel9 + +- job: bodhi_update + trigger: commit + dist_git_branches: + - fedora-all + - epel9 diff --git a/sources b/sources index 7cf4883..02a6f8a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -58f5139035bf9ec7ca7814d6a53017dc dist-git-0.10.tar.gz +SHA512 (dist-git-1.20.tar.gz) = f68aa733a2d0e0faa8973ced5260a1c5b0f6892c5ebfca977ac17ca3bfbda33225d866bb1c16abe761452d17594399a75815a49f5d941dd2e0c5404a69a1f3be