## START: Set by rpmautospec ## (rpmautospec version 0.8.4) ## RPMAUTOSPEC: autorelease, autochangelog %define autorelease(e:s:pb:n) %{?-p:0.}%{lua: release_number = 1; base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}")); print(release_number + base_release_number - 1); }%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}} ## END: Set by rpmautospec # Generated by go2rpm 1.19.0 %bcond check 1 %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: Official runner for Gitea. } %global major 5 %global minor 0 %global revision 0 %global tag v%{version} Version: %{major}.%{minor}.%{revision} %gometa -L -f Name: gitea-runner Release: %autorelease Summary: A runner for Gitea %global rootless_user %{name}-%{rootless} %global runner_service %{name}.service %global rootless_runner_service %{rootless_user}.service %global obsolete_user act-runner %global obsolete_name gitea-%{obsolete_user} %global obsolete_user_rootless %{obsolete_user}-%{rootless} # Generated by go-vendor-tools License: Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND ISC AND MIT AND MPL-2.0 URL: %{gourl} Source: %{gosource} Source: vendor.tar.bz2 Source: go-vendor-tools.toml Source: %{runner_service} Source: %{rootless_runner_service} Source: %{rootless_dockerd_service} Source: README-%{dockerd}.md Source: README-%{rootless}-%{dockerd}.md Source: register-rootless.sh Source: %{name}-sysusers.conf Source: register.sh Source: %{name}-sysusers-%{dockerd}.conf Source: sources BuildRequires: go >= 1.27 git-core sed systemd-rpm-macros go-rpm-macros go-vendor-tools demus-packaging Requires: git >= 2.34.1 Obsoletes: %{obsolete_name} < 1.0.0 Provides: %{obsolete_name} = %{version} %description %{common_description} # ############################################################# # ############################################################# # gitea-runner with dockerd package %package %{dockerd} Summary: Enable running gitea actions in docker containers Requires: %{name} Requires: ( moby-engine or docker-ce ) Requires(pre): glibc-common shadow-utils Conflicts: %{name}-%{rootless_dockerd} %{obsolete_name}-%{rootless_dockerd} Obsoletes: %{obsolete_name}-%{dockerd} < 1.0.0 Provides: %{obsolete_name}-%{dockerd} = %{version} %{?systemd_requires} %{?systemd_ordering} %description %{dockerd} %{common_description} Run gitea actions in docker containers %pre %{dockerd} # Check if we are replacing the %{obsolete_name} package if [ $1 -eq 1 ]; then getent group %{obsolete_user} >/dev/null || groupmod -n %{name} %{obsolete_user} || : getent passwd %{obsolete_user} >/dev/null || usermod -l %{name} -m -d %{_sharedstatedir}/%{name} %{obsolete_user} || : fi %sysusers_create_package %{name} %{S:9} %sysusers_create_package %{name} %{S:11} %post %{dockerd} %verify_source_checksum %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} %systemd_postun_with_restart %{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 Gitea runner with the non-rootless docker-ce. # ############################################################# # gitea-runner with rootless dockerd package %package %{rootless_dockerd} Summary: Enable running gitea actions in non-root docker containers Requires: %{name} iptables sed coreutils Requires: ( moby-engine-rootless-extras or docker-ce-rootless-extras ) Requires(pre): glibc-common shadow-utils Conflicts: %{name}-%{dockerd} %{obsolete_name}-%{dockerd} Obsoletes: %{obsolete_name}-%{rootless_dockerd} < 1.0.0 Provides: %{obsolete_name}-%{rootless_dockerd} = %{version} %{?systemd_requires} %{?systemd_ordering} %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_rootless} >/dev/null; then loginctl disable-linger %{obsolete_user_rootless} & systemctl --user -M %{obsolete_user_rootless}@ disable --now --no-warn %{rootless_dockerd_service} %{obsolete_name}-%{rootless}.service & loginctl terminate-user %{obsolete_user_rootless} & wait getent group %{obsolete_user_rootless} >/dev/null && groupmod -n %{rootless_user} %{obsolete_user_rootless} || : getent passwd %{obsolete_user_rootless} >/dev/null && usermod -l %{rootless_user} -m -d /home/%{rootless_user} %{obsolete_user_rootless} || : %{__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 Gitea 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} %systemd_user_postun_with_restart %{rootless_dockerd_service} %{rootless_runner_service} # ############################################################# %prep %verify_source_checksum %goprep -p1 -A %{__tar} -xf %{S:1} %generate_buildrequires %go_vendor_license_buildrequires -c %{S:2} %{__cp} %{S:6} %{S:7} . %build %global gomodulesmode GO111MODULE=on %gobuild -o %{gobuilddir}/bin/%{name} %check %go_vendor_license_check -c %{S:2} %gocheck2 -d gitea.com/gitea/runner/act/container -d gitea.com/gitea/runner/act/runner %install %go_vendor_license_install -c %{S:2} # The binary %{__install} -m 0755 -d %{buildroot}%{_bindir} %{__install} -m 0755 -p %{gobuilddir}/bin/%{name} %{buildroot}%{_bindir}/ # dockerd %{__install} -m 0755 -d %{buildroot}%{_unitdir} %{__install} -m 0755 -d %{buildroot}%{_sysconfdir}/%{name} %{__install} -m 0700 -d %{buildroot}%{_sharedstatedir}/%{name} %{__install} -D -m 0644 -p %{S:3} %{buildroot}%{_unitdir}/%{runner_service} %{__install} -D -m 0644 %{S:9} %{buildroot}%{_sysusersdir}/%{name}.conf %{__install} -D -m 0644 %{S:11} %{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 -p %{S:10} %{buildroot}%{_datadir}/%{name}/register.sh # dockerd-rootless %{__install} -m 0755 -d %{buildroot}%{_userunitdir} %{__install} -m 0755 -d %{buildroot}%{_datadir}/%{name} %{__install} -D -m 0644 -p %{S:4} %{buildroot}%{_userunitdir}/%{rootless_runner_service} %{__install} -D -m 0644 -p %{S:5} %{buildroot}%{_userunitdir}/%{rootless_dockerd_service} %{__install} -D -m 0755 -p %{S:8} %{buildroot}%{_datadir}/%{name}/register-rootless.sh %files -f %{go_vendor_license_filelist} %doc examples 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 ## START: Generated by rpmautospec * Sat Oct 17 2026 Daniel Demus - 5.0.0-1 - # ⚠️ Breaking changes Git 2.34.1 or newer is required (#1277) The runner now downloads actions and reusable workflows with Git, so it needs git on its PATH. builtin:checkout now runs Git inside the job. Job images need Git as well, and the job must be able to reach Gitea and trust its certificate. The official runner images include Git. ### builtin:checkout works like actions/checkout (#1277) It now supports SSH keys, LFS, submodules, sparse checkout and partial clones. It also accepts the fetch-tags, clean, show-progress and set-safe-directory inputs, and sets the ref and commit outputs. Branches are checked out as local branches tracking origin, and later steps can fetch and push with the persisted token or SSH key. Two changes can break existing workflows. It removes untracked and ignored files from the checkout directory unless clean: false is set. It also fails when the triggering tag was moved after the workflow started. ### Config values expand `${NAME}` (#1274) A config value containing `${NAME}` now reads that variable from the runner's environment, and the config fails to load when it is unset. Write `$${NAME}` to keep a literal `${NAME}`, for example in a shell command inside a Kubernetes pod_template. ### Jobs require runs- on (#1271) A workflow with a job that has no runs-on, or an empty one, now fails instead of running that job in runner.default_image. This matches GitHub. Jobs that call a reusable workflow are exempt. ### Metrics follow the OpenTelemetry semantic conventions (#1282) OTLP metric names, units, types and attributes change, see the metrics docs. On /metrics, gitea_runner_client_errors_total has a new code label, and gitea_runner_job_total counts jobs stopped by runner.timeout as timeout. ### Unprivileged runners ignore workflow log and OOM options (#1283) Unless container.privileged is set, the runner drops --log-driver, --log- opt, --oom-score-adj and --oom-kill-disable from a workflow's container options and logs a warning. # Features - Support mutual TLS to Gitea with runner.client_cert_file and runner.client_key_file (#1273) - Support SHA-256 repositories for actions, reusable workflows and builtin:checkout (#1277) - Support ${NAME} environment variables in config values (#1274) - Support :ro entries in valid_volumes, which allow only read-only mounts (#1272) - Added runner.extra_headers for headers that a reverse proxy in front of Gitea requires (#1269) - Added container.sweep: false to keep services that jobs deploy to the runner's Docker daemon (#1275) - Added gitea_runner_state metric, which reports whether the runner is busy, idle or unavailable (#1282) # Bug fixes - Fix ephemeral runners failing on every restart with recent Gitea versions (#1287) - Fix actions not reaching Kubernetes job pods on Ubuntu-based images (#1286) - Match matrix include and exclude entries regardless of case, like GitHub (#1278) - Apply runner.insecure to reusable workflow downloads and job summary uploads (#1273) - Apply the Docker daemon's mtu to job networks (#1270) * Sat Oct 17 2026 Daniel Demus - 4.1.0-1 - Release 4.1.0 * Sat Oct 17 2026 Daniel Demus - 4.0.1-1 - Release 4.0.1 * Sat Sep 26 2026 Daniel Demus - 4.0.0-1 - Release 4.0.0 * Sat Sep 26 2026 Daniel Demus - 3.5.0-1 - Release 3.5.0 * Sat Sep 26 2026 Daniel Demus - 3.4.2-1 - Release 3.4.2 * Sat Sep 26 2026 Daniel Demus - 3.4.1-1 - Release 3.4.1 * Sat Sep 26 2026 Daniel Demus - 3.4.0-1 - Release 3.4.0 * Sat Sep 26 2026 Daniel Demus - 3.3.2-1 - Release 3.3.2 * Sat Sep 26 2026 Daniel Demus - 3.3.1-1 - Release 3.3.1 * Sat Aug 22 2026 Daniel Demus - 3.3.0-1 - Release 3.3.0 * Sat Aug 22 2026 Daniel Demus - 3.2.0-1 - Release 3.2.0 * Fri Aug 07 2026 Daniel Demus - 3.1.0-1 - Release 3.1.0 * Tue Aug 04 2026 Daniel Demus - 3.0.2-1 - Release 3.0.2 * Tue Aug 04 2026 Daniel Demus - 3.0.1-1 - Release 3.0.1 * Fri Jul 31 2026 Daniel Demus - 3.0.0-1 - Release 3.0.0 * Tue Jul 28 2026 Daniel Demus - 2.3.0-1 - Release 2.3.0 * Fri Jul 24 2026 Daniel Demus - 2.2.0-1 - Release 2.2.0 * Fri Jul 10 2026 Daniel Demus - 2.0.1-1 - Release 2.0.1 * Sat Jul 04 2026 Daniel Demus - 2.0.0-1 - Release 2.0.0 * Fri Jul 03 2026 Daniel Demus - 1.0.8-2 - Run tests and verify checksums * Sun Jun 07 2026 Daniel Demus - 1.0.8-1 - Release 1.0.8 * Sun Jun 07 2026 Daniel Demus - 1.0.7-1 - Release 1.0.7 * Sun Jun 07 2026 Daniel Demus - 1.0.6-1 - Release 1.0.6 * Sun Jun 07 2026 Daniel Demus - 1.0.5-1 - Release 1.0.5 * Sun Jun 07 2026 Daniel Demus - 1.0.4-1 - Release 1.0.4 * Sun Jun 07 2026 Daniel Demus - 1.0.3-1 - Release 1.0.3 * Sun Jun 07 2026 Daniel Demus - 1.0.2-1 - Release 1.0.2 * Sun Jun 07 2026 Daniel Demus - 1.0.1-2 - Dependency was renamed * Fri Jun 05 2026 Daniel Demus - 1.0.1-1 - Release 1.0.1 * Wed Jun 03 2026 Daniel Demus - 1.0.0-4 - Implement go-vendor-tools * Sat May 30 2026 Daniel Demus - 1.0.0-3 - Missed act-runner -> gitea-runner renames * Fri May 29 2026 Daniel Demus - 1.0.0-2 - Missed act_runner -> gitea-runner renames * Thu May 28 2026 Daniel Demus - 1.0.0-1 - Release 1.0.0 (#9) * Thu Jan 02 2025 Daniel Demus - ## END: Generated by rpmautospec