aboutsummaryrefslogtreecommitdiff
path: root/devel/buildbot-slave/files/buildslave.in
blob: 1ec58fc2043310a7591ca010b7bd3a95f924f9e1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/bin/sh

# $FreeBSD$
# PROVIDE: buildslave
# REQUIRE: LOGIN
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf to run buildslave:
#
# buildslave_enable (bool):	Set to "YES" to enable buildslave.
#				Default: "NO"
#
# buildslave_flags (flags):	Set extra command flags here. See buildslave(8)
#				Default: Empty ("").
#
# buildslave_uid (user):	User to run buildslave as.
#				Default: "buildbot"
#
# buildslave_gid (group):	Group to run buildslave as.
#				Default: "buildbot"
#
# buildslave_basedir (path):    Location for buildslave base directory
#                               Default: %%PREFIX%%/etc/buildslave
#
# buildslave_profiles (str):    Define profiles names. Space-delimited.
#                               Default: Empty ("")
#
# This rc.d script supports multiple "profiles". When profiles are
# specified, the non-profile specific parameters become defaults.
#
# Example:
#
# buildslave_profiles="foo bar"
#
# buildslave_foo_enable="YES"
# buildslave_foo_basedir="/usr/home/foo/buildbot"
# buildslave_foo_uid="foo"
# buildslave_foo_gid="foo"
#
# buildslave_bar_enable="YES"
# buildslave_bar_basedir="/usr/home/buildbot/"

. /etc/rc.subr

export PATH=${PATH}:%%LOCALBASE%%/bin

name=buildslave
desc="Buildbot Buildslave"
rcvar=buildslave_enable

load_rc_config ${name}

# These are just the defaults, they might get overriden for a specific profile.
eval ": \${${name}_enable:=\"NO\"}"
eval ": \${${name}_flags:=\"\"}"
eval ": \${${name}_uid:=\"buildbot\"}"
eval ": \${${name}_gid:=\"buildbot\"}"
eval ": \${${name}_basedir:=\"%%PREFIX%%/etc/${name}\"}"

command="%%PREFIX%%/bin/twistd"
command_interpreter="%%PYTHON_CMD%%"
pidfile="${buildslave_basedir}/twistd.pid"

	# A specific profile is specified in the command
	if [ -n "$2" ]; then
		profile="$2"
		# Override defaults with profile-specific values
		if [ -n "${buildslave_profiles}" ]; then
			eval buildslave_enable="\${buildslave_${profile}_enable:-${buildslave_enable}}"
			eval buildslave_flags="\${buildslave_${profile}_flags:-${buildslave_flags}}"
			eval buildslave_uid="\${buildslave_${profile}_uid:-${buildslave_uid}}"
			eval buildslave_gid="\${buildslave_${profile}_gid:-${buildslave_gid}}"
			eval buildslave_basedir="\${buildslave_${profile}_basedir:-${buildslave_basedir}}"
			eval pidfile="\${buildslave_${profile}_basedir:-${buildslave_basedir}}/twistd.pid"
		else
			echo "%%PREFIX%%/etc/rc.d/${name}: extra argument ignored"
		fi
	# A specific profile is not in the command
	else
		# Check if any profiles are defined
		if [ -n "$1" -a -n "${buildslave_profiles}" ]; then
			# Loop through them
			for profile in ${buildslave_profiles}; do
				eval _enable="\${buildslave_${profile}_enable}"
				case "${_enable:-${buildslave_enable}}" in
				[Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0)
					continue
					;;
				[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
					;;
				*)
					if test -z "$_enable"; then
						_var=buildslave_enable
					else
						_var=buildslave_"${profile}"_enable
					fi
					warn "Bad value" \
					    "'${_enable:-${buildslave_enable}}'" \
					    "for ${_var}. " \
					    "Profile ${profile} skipped."
					continue
					;;
				esac
				echo "===> ${name} profile: ${profile}"
				if %%PREFIX%%/etc/rc.d/${name} $1 ${profile}; then
					success="${profile} ${success:-}"
				else
					failed="${profile} (${retcode}) ${failed:-}"
				fi
			done
			# Exit so that non-profile rc.d is not started when there are profiles
			exit 0
		fi
	fi

# run_rc_command would send ${name}_flags as parameters to $command (daemon)
# This ensures they are actually passed to fcgiwrap instead.
actual_buildslave_flags="${buildslave_flags}"
buildslave_flags=""
command_args="--uid=${buildslave_uid} --gid=${buildslave_gid} --pidfile=${pidfile} --python=${buildslave_basedir}/buildbot.tac ${actual_buildslave_flags}"
run_rc_command "$1"