%global common_description %{expand:
A runner for Gitea based on act.}

%global dockerd                     dockerd
%global rootless                    rootless
%global dockerd_rootless            %{dockerd}-%{rootless}
%global dockerd_rootless_service    %{dockerd}-%{rootless}-user.service
%global act_runner_bin              act_runner
%global runner_user                 act-runner
%global runner_user_rootless        %{runner_user}-%{rootless}
%global debug_package %{nil}

%global golicenses      LICENSE
%global godocs          examples README.md
%global goipath         gitea.com/gitea/act_runner

Name:           gitea-act-runner
Version:        0.2.11
Release:        %autorelease -b 4
Summary:        A runner for Gitea based on act.

%global act_runner_service          %{name}.service
%global act_runner_rootless_service %{name}-%{rootless}.service

License:        MIT
URL:            https://gitea.com/gitea/act_runner
Source0:        https://gitea.com/gitea/act_runner/archive/v%{version}.tar.gz
Source1:        %{act_runner_service}
Source2:        %{act_runner_rootless_service}
Source3:        %{dockerd_rootless_service}
Source4:        README-%{dockerd}.md
Source5:        README-%{rootless}-%{dockerd}.md
Source6:        rootless-act_runner-register.sh
Source7:        %{name}-sysusers.conf
Source8:        %{name}-tmpfiles.conf
Source9:        act_runner-register.sh

BuildRequires:  go >= 1.23
BuildRequires:  go-rpm-macros
BuildRequires:  git-core

%gometa -L -f

%description %{common_description}

# #############################################################
# act_runner with dockerd package
%package %{dockerd}
Summary: Enable running gitea actions in docker containers
Requires:   %{name} docker-ce
Conflicts:  %{name}-%{dockerd_rootless}
BuildRequires:  systemd-rpm-macros
%{?%systemd_requires}

%description %{dockerd}
%{common_description}
Run gitea actions in docker containers

%pre %{dockerd}
%sysusers_create_package %{name} %{SOURCE7}
%tmpfiles_create_package %{name} %{SOURCE8}

%post %{dockerd}
%systemd_post %{act_runner_service}
if [ $1 -eq 1 ] || [ ! -d %{_sharedstatedir}/%{runner_user}/act_runner ]; then
    echo '  INFO Please read README-%{dockerd}.md to finish the installation'
fi

%preun %{dockerd}
%systemd_preun %{act_runner_service}

%postun %{dockerd}
%systemd_postun %{act_runner_service}

# #############################################################


# #############################################################
# act_runner with rootless dockerd package
%package %{dockerd_rootless}
Summary: Enable running gitea actions in non-root docker containers

Requires:   %{name} docker-ce slirp4netns fuse-overlayfs iptables docker-ce-rootless-extras shadow-utils
Conflicts:  %{name}-%{dockerd}
BuildRequires:  systemd-rpm-macros
%{?%systemd_requires}

%description %{dockerd_rootless}
%{common_description}
Run gitea actions in non-root docker containers

%pre %{dockerd_rootless}
if [ $1 -eq 1 ]; then
    getent group '%{runner_user_rootless}' >/dev/null || groupadd -r '%{runner_user_rootless}' || :
    getent passwd '%{runner_user_rootless}' >/dev/null || \
        CREATE_MAIL_SPOOL=false useradd -r -m -F -g '%{runner_user_rootless}' -d '/home/%{runner_user_rootless}' -s '/sbin/nologin' -c 'Rootless act_runner docker user' '%{runner_user_rootless}' || :
fi

%post %{dockerd_rootless}
%systemd_user_post %{act_runner_rootless_service} %{dockerd_rootless_service}
if [ $1 -eq 1 ] || [ ! -d /home/%{runner_user_rootless}/act_runner ]; then
    echo '  INFO Please read README-%{rootless}-%{dockerd}.md to finish the installation'
fi
loginctl enable-linger %{runner_user_rootless}

%preun %{dockerd_rootless}
%systemd_user_preun %{dockerd_rootless_service} %{act_runner_rootless_service}
if [ $1 -eq 0 ]; then
    loginctl disable-linger %{runner_user_rootless}
fi

%postun %{dockerd_rootless}
%systemd_user_postun %{dockerd_rootless_service} %{act_runner_rootless_service}
if [ $1 -eq 0 ]; then
    CREATE_MAIL_SPOOL=false userdel -rf %{runner_user_rootless}
fi

# #############################################################


%prep
%autosetup -p1 -C
%{__cp} %{SOURCE4} %{SOURCE5} .

%build
go build %{gobuild_baseflags} -o bin/%{act_runner_bin} %{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 -D -m 0644 -vp %{SOURCE1} %{buildroot}%{_unitdir}/%{act_runner_service}
install -D %{SOURCE7} %{buildroot}%{_sysusersdir}/%{name}.conf
install -D %{SOURCE8} %{buildroot}%{_tmpfilesdir}/%{name}.conf
bin/act_runner generate-config > %{buildroot}%{_sysconfdir}/%{name}/config.yaml
install -D -m 0755 -vp %{SOURCE9} %{buildroot}%{_datadir}/%{name}/act_runner-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}/%{act_runner_rootless_service}
install -D -m 0644 -vp %{SOURCE3} %{buildroot}%{_userunitdir}/%{dockerd_rootless_service}
install -D -m 0755 -vp %{SOURCE6} %{buildroot}%{_datadir}/%{name}/rootless-act_runner-register.sh

%files
%license LICENSE
%doc README.md
%{_bindir}/*
%dir %{_datadir}/%{name}

%files %{dockerd}
%license LICENSE
%doc README-%{dockerd}.md
%dir %{_sysconfdir}/%{name}
%config %{_sysconfdir}/%{name}/config.yaml
%{_unitdir}/*
%{_sysusersdir}/%{name}.conf
%{_tmpfilesdir}/%{name}.conf
%{_datadir}/%{name}/act_runner-register.sh

%files %{dockerd_rootless}
%license LICENSE
%doc README-%{rootless}-%{dockerd}.md
%{_userunitdir}/*
%{_datadir}/%{name}/rootless-act_runner-register.sh

%changelog
%autochangelog