git: e72b448dc7b2 - 2026Q3 - devel/gitlab-runner: improved start and stop command

From: Matthias Fechner <mfechner_at_FreeBSD.org>
Date: Fri, 31 Jul 2026 07:06:52 UTC
The branch 2026Q3 has been updated by mfechner:

URL: https://cgit.FreeBSD.org/ports/commit/?id=e72b448dc7b210ce42513bf96492e62faa047edd

commit e72b448dc7b210ce42513bf96492e62faa047edd
Author:     Einar Bjarni Halldórsson <einar@isnic.is>
AuthorDate: 2026-07-18 05:48:48 +0000
Commit:     Matthias Fechner <mfechner@FreeBSD.org>
CommitDate: 2026-07-31 06:51:02 +0000

    devel/gitlab-runner: improved start and stop command
    
    The rc system does not wait till the child terminated.
    Added a logic to wait for parent and child pid to terminate before
    starting it again.
    
    That fixes an issue if gitlab-runner has a long run job active
    while a restart is triggered.
    
    PR:             296226
    (cherry picked from commit 079c83dcc034f2ae7eaf07c140d1204f93e87680)
---
 devel/gitlab-runner/Makefile               |  1 +
 devel/gitlab-runner/files/gitlab_runner.in | 30 ++++++++++++++++++++++++++----
 2 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/devel/gitlab-runner/Makefile b/devel/gitlab-runner/Makefile
index e3cdc26faac1..d6dee5a6ecc7 100644
--- a/devel/gitlab-runner/Makefile
+++ b/devel/gitlab-runner/Makefile
@@ -1,6 +1,7 @@
 PORTNAME=	gitlab-runner
 DISTVERSIONPREFIX=	v
 DISTVERSION=	19.2.0
+PORTREVISION=	1
 CATEGORIES=	devel
 MASTER_SITES=	https://gitlab-runner-downloads.s3.amazonaws.com/master/docker/:dockerx64 \
 		https://gitlab-runner-downloads.s3.amazonaws.com/master/docker/:dockerarm
diff --git a/devel/gitlab-runner/files/gitlab_runner.in b/devel/gitlab-runner/files/gitlab_runner.in
index 48e7caba1c90..d2b1a0fea5f7 100644
--- a/devel/gitlab-runner/files/gitlab_runner.in
+++ b/devel/gitlab-runner/files/gitlab_runner.in
@@ -36,13 +36,15 @@ export HOME=${gitlab_runner_dir}
 export PATH=${PATH}:%%PREFIX%%/bin
 
 pidfile="/var/run/${name}.pid"
+pidfile_child="/var/run/${name}_child.pid"
+
 command="/usr/sbin/daemon"
-command_args="-f -p ${pidfile} env HOME=${gitlab_runner_dir} ${gitlab_runner_env} %%PREFIX%%/bin/gitlab-runner run --syslog --service ${gitlab_runner_syslogtag}"
+command_args="-P ${pidfile} -p ${pidfile_child} -f env HOME=${gitlab_runner_dir} ${gitlab_runner_env} %%PREFIX%%/bin/gitlab-runner run --syslog --service ${gitlab_runner_syslogtag}"
 gitlab_runner_chdir="${gitlab_runner_dir}"
-
-procname=%%PREFIX%%/bin/gitlab-runner
+rc_stop_wait=7200
 
 start_precmd="gitlab_runner_startprecmd"
+stop_cmd="gitlab_runner_stop"
 list_cmd="listfunc"
 register_cmd="registerfunc"
 
@@ -59,12 +61,32 @@ registerfunc()
 gitlab_runner_startprecmd()
 {
         if [ ! -e "${pidfile}" ]; then
-                install -g ${gitlab_runner_group} -o ${gitlab_runner_user} -- /dev/null "${pidfile}";
+                install -g ${gitlab_runner_group} -o ${gitlab_runner_user} -- /dev/null "${pidfile}"
         fi
+	if [ ! -e "${pidfile_child}" ]; then
+		install -g ${gitlab_runner_group} -o ${gitlab_runner_user} -- /dev/null "${pidfile_child}"
+	fi
         if [ ! -d "${gitlab_runner_dir}" ]; then
                 install -d -o "${gitlab_runner_user}" -g "${gitlab_runner_group}" "${gitlab_runner_dir}"
         fi
 }
 
+gitlab_runner_stop()
+{
+	if [ ! -f "${pidfile_child}" ]; then
+		echo "${name} not running"
+		return 0
+	fi
+	child_pid=$(cat ${pidfile_child})
+	if [ -z "${child_pid}" ]; then
+		echo "${name} not running"
+		return 0
+	fi
+	echo "Sending SIGQUIT to gitlab-runner (pid=${child_pid})"
+	kill -QUIT ${child_pid}
+	# Wait for the daemon supervisor to exit, which happens after the child exits
+	wait_for_pids $(cat ${pidfile} 2>/dev/null)
+}
+
 extra_commands="list register"
 run_rc_command $1