Files
gitea-runner-rpm/gitea-runner.spec
T
demusanddemus ab72743bcc
Build and provide rpm of the Gitea runner / Start build on COPR (f44) (release) Successful in 2m11s
Build and provide rpm of the Gitea runner / Start build on COPR (rawhide) (release) Successful in 2m25s
Release 1.0.0 (#9)
Rename from act-runner to gitea-runner.
The upstream projects changed name from act_runner to runner.

Reviewed-on: http://git.demus.dk/demus/gitea-runner-rpm/pulls/9
Co-authored-by: Daniel Demus <daniel@demus.dk>
Co-committed-by: Daniel Demus <daniel@demus.dk>
2026-05-29 00:53:11 +02:00

213 lines
7.6 KiB
RPMSpec

%global dockerd dockerd
%global rootless rootless
%global shim docker-group-shim
%global rootless_dockerd %{dockerd}-%{rootless}
%global rootless_dockerd_service %{dockerd}-%{rootless}-user.service
%global debug_package %{nil}
%global golicenses LICENSE
%global godocs examples README.md
%global goipath gitea.com/gitea/runner
%global common_description %{expand:
A runner for Gitea based on nectos/act.
}
%global major 1
%global minor 0
%global revision 0
Name: gitea-runner
%global rootless_user %{name}-%{rootless}
%global obsolete_user act-runner-%{rootless}
Version: %{major}.%{minor}.%{revision}
Release: %autorelease
Summary: A runner for Gitea
%global runner_service %{name}.service
%global rootless_runner_service %{name}-%{rootless}.service
License: MIT
URL: https://gitea.com/gitea/runner
Source0: https://gitea.com/gitea/runner/archive/v%{version}.tar.gz
Source1: %{runner_service}
Source2: %{rootless_runner_service}
Source3: %{rootless_dockerd_service}
Source4: README-%{dockerd}.md
Source5: README-%{rootless}-%{dockerd}.md
Source6: register-rootless.sh
Source7: %{name}-sysusers.conf
Source8: register.sh
Source9: %{name}-sysusers-%{dockerd}.conf
BuildRequires: go >= 1.26 go-rpm-macros git-core sed systemd-rpm-macros
Conflicts: gitea-act-runner
Obsoletes: gitea-act-runner < 1.0.0
%gometa -L -f
%description %{common_description}
# #############################################################
# act_runner with dockerd package
%package %{dockerd}
Summary: Enable running gitea actions in docker containers
Requires: %{name}
Requires: ( moby-engine or docker-ce )
Conflicts: %{name}-%{rootless_dockerd} gitea-act-runner-%{rootless_dockerd}
Obsoletes: gitea-act-runner-%{dockerd} < 1.0.0
%{?%systemd_requires}
%description %{dockerd}
%{common_description}
Run gitea actions in docker containers
%pre %{dockerd}
# Check if we are replacing the gitea-act-runner package
if [ $1 -eq 1 ]; then
getent group act-runner >/dev/null || groupmod -n %{name} act-runner || :
getent passwd act-runner >/dev/null || usermod -l %{name} -m -d %{_sharedstatedir}/%{name} act-runner || :
fi
%sysusers_create_package %{name} %{SOURCE7}
%sysusers_create_package %{name} %{SOURCE9}
%post %{dockerd}
%systemd_post %{runner_service}
if [ $1 -eq 1 ] || [ ! -d %{_sharedstatedir}/%{name}/runner ]; then
echo ' INFO Please read README-%{dockerd}.md to finish the installation'
fi
%preun %{dockerd}
%systemd_preun %{runner_service}
%postun %{dockerd}
%systemd_postun %{runner_service}
# #############################################################
# #############################################################
# docker-ce docker group dependency provider shim package
%package %{shim}
Summary: Provide the group(docker) requirement when using non-rootless docker-ce
Provides: group(docker)
Requires: docker-ce
%description %{shim}
The %{name}-%{dockerd} package uses sysusers.d to manage users and group
memberships. The user needs to be a member of the docker groupm that is
created by docker-ce or moby-engine. Moby engine provides a group(docker),
but docker-ce doesn't, so this shim provides that requirement to enable
using the act-runner with the non-rootless docker-ce.
# #############################################################
# act_runner with rootless dockerd package
%package %{rootless_dockerd}
Summary: Enable running gitea actions in non-root docker containers
Requires: %{name} iptables sed shadow-utils
Requires: ( moby-engine-rootless-extras or docker-ce-rootless-extras )
Conflicts: %{name}-%{dockerd} gitea-act-runner-%{dockerd}
Obsoletes: gitea-act-runner-%{rootless_dockerd} < 1.0.0
%{?%systemd_requires}
%description %{rootless_dockerd}
%{common_description}
Run gitea actions in non-root docker containers
%pre %{rootless_dockerd}
# sysusers.d doesn't handle either home directory creation or subuid/subgid configuration
if [ $1 -eq 1 ]; then
# Modify the existing user and group if we are upgrade obsoleting the package with the old naming
if getent passwd %{obsolete_user} >/dev/null; then
loginctl disable-linger %{obsolete_user} &
systemctl --user -M %{obsolete_user}@ disable --now --no-warn %{rootless_dockerd_service} gitea-act-runner-rootless.service &
loginctl terminate-user %{obsolete_user} &
wait
getent group %{obsolete_user} >/dev/null && groupmod -n %{rootless_user} %{obsolete_user} || :
getent passwd %{obsolete_user} >/dev/null && usermod -l %{rootless_user} -m -d /home/%{rootless_user} %{obsolete_user} || :
%{__mv} /home/%{rootless_user}/act_runner /home/%{rootless_user}/runner >/dev/null
fi
getent group '%{rootless_user}' >/dev/null || groupadd -r '%{rootless_user}' || :
getent passwd '%{rootless_user}' >/dev/null || \
CREATE_MAIL_SPOOL=false useradd -r -m -F -g '%{rootless_user}' -s '/sbin/nologin' -c 'Rootless act_runner docker user' '%{rootless_user}' || :
fi
%post %{rootless_dockerd}
%systemd_user_post %{rootless_runner_service} %{rootless_dockerd_service}
loginctl enable-linger %{rootless_user}
%preun %{rootless_dockerd}
if [ $1 -eq 0 ]; then
loginctl disable-linger %{rootless_user}
fi
%systemd_user_preun %{rootless_dockerd_service} %{rootless_runner_service}
%postun %{rootless_dockerd}
%systemd_user_postun %{rootless_dockerd_service} %{rootless_runner_service}
# #############################################################
%prep
%autosetup -p1 -C -v
%{__cp} %{SOURCE4} %{SOURCE5} .
%build
go build %{gobuild_baseflags} -o bin/%{name} %{goipath}
%install
# The binary
install -m 0755 -vd %{buildroot}%{_bindir}
install -m 0755 -vp bin/* %{buildroot}%{_bindir}
# dockerd
install -m 0755 -vd %{buildroot}%{_unitdir}
install -m 0755 -vd %{buildroot}%{_sysconfdir}/%{name}
install -m 0700 -vd %{buildroot}%{_sharedstatedir}/%{name}
install -D -m 0644 -vp %{SOURCE1} %{buildroot}%{_unitdir}/%{runner_service}
install -D -m 0644 %{SOURCE7} %{buildroot}%{_sysusersdir}/%{name}.conf
install -D -m 0644 %{SOURCE9} %{buildroot}%{_sysusersdir}/%{name}-%{dockerd}.conf
bin/%{name} generate-config | \
sed -e '/^ A_TEST_ENV/d' -e '/^ - "ubuntu-/d' -e 's:file\: .runner:file\: %{_sharedstatedir}/%{name}/.runner:' -e 's/level: info/level: debug/' \
> %{buildroot}%{_sysconfdir}/%{name}/config.yaml
install -D -m 0755 -vp %{SOURCE8} %{buildroot}%{_datadir}/%{name}/register.sh
# dockerd-rootless
install -m 0755 -vd %{buildroot}%{_userunitdir}
install -m 0755 -vd %{buildroot}%{_datadir}/%{name}
install -D -m 0644 -vp %{SOURCE2} %{buildroot}%{_userunitdir}/%{rootless_runner_service}
install -D -m 0644 -vp %{SOURCE3} %{buildroot}%{_userunitdir}/%{rootless_dockerd_service}
install -D -m 0755 -vp %{SOURCE6} %{buildroot}%{_datadir}/%{name}/register-rootless.sh
%files
%license LICENSE
%doc README.md
%{_bindir}/%{name}
%dir %{_datadir}/%{name}
%files %{dockerd}
%license LICENSE
%doc README-%{dockerd}.md
%dir %{_sysconfdir}/%{name}
%config(noreplace) %{_sysconfdir}/%{name}/config.yaml
%attr(0700, %{name}, %{name}) %dir %{_sharedstatedir}/%{name}
%ghost %config(noreplace) %{_sharedstatedir}/%{name}/.runner
%{_unitdir}/%{runner_service}
%{_sysusersdir}/%{name}.conf
%{_sysusersdir}/%{name}-%{dockerd}.conf
%{_datadir}/%{name}/register.sh
%files %{rootless_dockerd}
%license LICENSE
%doc README-%{rootless}-%{dockerd}.md
%{_userunitdir}/%{rootless_runner_service}
%{_userunitdir}/%{rootless_dockerd_service}
%{_datadir}/%{name}/register-rootless.sh
%files %{shim}
%changelog
%autochangelog