Annotation of buildman/bm, revision 1.1.1.1
1.1 snw 1: #!/bin/sh
2:
3: # SPDX-FileCopyrightText: (C) 2025 Coherent Logic Development LLC
4: # SPDX-FileCopyrightText: (C) 2025 Serena Willis
5: #
6: # SPDX-License-Identifier: AGPL-3.0
7:
8: #
9: # BuildMan 0.0.1
10: # Distributed CI/CD system with portability to older UNIX systems
11: #
12: # bm - primary BuildMan script
13: #
14: # Copyright (C) 2025 Coherent Logic Development LLC
15: #
16: # Author: Serena Willis <snw@coherent-logic.com>
17: #
18:
19: PROGN=`basename $0`
20:
21: if [ -f "/etc/default/bm" ]
22: then
23: . /etc/default/bm
24: else
25: echo "${PROGN} error: no /etc/default/bm"
26: exit 1
27: fi
28:
29: if [ -z ${BUILDMAN_BASE} ]
30: then
31: echo "${PROGN} error: BUILDMAN_BASE undefined"
32: exit 1
33: fi
34:
35: if [ -z ${BUILDMAN_UID} ]
36: then
37: echo "${PROGN} error: BUILDMAN_UID undefined"
38: exit 1
39: fi
40:
41: if [ -z ${BUILDMAN_GID} ]
42: then
43: echo "${PROGN} error: BUILDMAN_GID undefined"
44: exit 1
45: fi
46:
47: if [ $EUID -ne ${BUILDMAN_UID} ]
48: then
49: echo "${PROGN} error: must be run as user \"${BUILDMAN_USER}\""
50: exit 1
51: fi
52:
53: ACTION=""
54: PROJECT=""
55: BUILD_HOST=""
56: OS=`uname`
57:
58: if [ "$OS" = "SCO_SV" ] ; then
59: THOST=`hostname -s`
60: PATH=/usr/gnu/bin:$PATH
61: export PATH
62: else
63: if [ "$OS" = "SunOS" ] ; then
64: THOST=`hostname`
65: else
66: THOST=`hostname -s`
67: fi
68: fi
69:
70: tmphost=`echo ${THOST} | cut -d. -f1`
71: THOST="${tmphost}"
72:
73:
74: while getopts ':p:h:a:bl:o:' OPTION
75: do
76: case $OPTION in
77:
78: l)
79: ACTION="list"
80: TOLIST="${OPTARG}"
81: ;;
82:
83: o)
84: OPTIONS="${OPTARG}"
85: ;;
86:
87: p)
88: PROJECT="${OPTARG}"
89: ;;
90:
91: a)
92: ACTION="add"
93: TOADD="${OPTARG}"
94: ;;
95:
96: b)
97: ACTION="build"
98: ;;
99:
100: h)
101: BUILD_HOST="${OPTARG}"
102: ;;
103:
104: esac
105: done
106:
107: if [ ! -z "${PROJECT}" ]
108: then
109: PROJECT_BASE="${BUILDMAN_BASE}/projects/${PROJECT}"
110: if [ "${ACTION}" == "add" -a ! -d ${PROJECT_BASE} ]
111: then
112: echo "$PROGN: creating ${PROJECT} in ${PROJECT_BASE}..."
113: mkdir -p "${PROJECT_BASE}"
114: fi
115:
116: if [ ! -d "${PROJECT_BASE}" ]
117: then
118: echo "$PROGN error: project ${PROJECT} not defined"
119: exit 1
120: fi
121: fi
122:
123: case $ACTION in
124:
125: list)
126: case $TOLIST in
127:
128: p|projects)
129: ls -d -1 ${BUILDMAN_BASE}/projects/*
130: ;;
131:
132: h|hosts)
133: ls -l "${BUILDMAN_BASE}/projects/${PROJECT}/hosts"
134: ;;
135:
136: *)
137: echo "$PROGN error: invalid list specifier \"${TOLIST}\""
138: exit 1
139: ;;
140: esac
141: ;;
142:
143: add)
144: case $TOADD in
145:
146: p|project)
147: if [ -z "${PROJECT}" ]
148: then
149: echo "$PROGN error: no project specified (use -p)"
150: exit 1
151: fi
152:
153: PBASE="${BUILDMAN_BASE}/projects/${PROJECT}"
154: if [ -d "${PBASE}" ]
155: then
156: echo "$PROGN error: project \"${PROJECT}\" already exists"
157: exit 1
158: fi
159:
160: echo "$PROGN: creating directory structure for project \"${PROJECT}\""
161: mkdir -p "${PBASE}/hosts"
162:
163: ;;
164:
165:
166: h|host)
167: if [ -z "${PROJECT}" ]
168: then
169: echo "$PROGN error: no project specified (use -p)"
170: exit 1
171: fi
172:
173: PBASE="${BUILDMAN_BASE}/projects/${PROJECT}"
174: if [ ! -d "${PBASE}" ]
175: then
176: echo "$PROGN error: project \"${PROJECT}\" does not exist"
177: exit 1
178: fi
179:
180: if [ -z "${BUILD_HOST}" ]
181: then
182: echo "$PROGN error: no host specified (use -h)"
183: exit 1
184: fi
185:
186: HBASE="${PBASE}/hosts/${BUILD_HOST}"
187: if [ -d "${HBASE}" ]
188: then
189: echo "$PROGN error: build host \"${BUILD_HOST}\" already exists"
190: exit 1
191: fi
192:
193: echo "$PROGN: adding host \"${BUILD_HOST}\" to project \"${PROJECT}\""
194: mkdir -p "${HBASE}"
195: ;;
196:
197: esac
198: ;;
199:
200:
201:
202: build)
203: if [ -z "${BUILD_HOST}" ]
204: then
205: echo "$PROGN error: no build host specified"
206: exit 1
207: fi
208:
209: BUILD_BASE="${PROJECT_BASE}/hosts/${BUILD_HOST}"
210:
211: if [ ! -d "${BUILD_BASE}" ]
212: then
213: echo "$PROGN error: build host ${BUILD_HOST} not configured"
214: exit 1
215: fi
216:
217: BUILD_WANTED="${PROJECT_BASE}/${HOST}/build-wanted"
218:
219: if [ -f "${BUILD_WANTED}" ]
220: then
221: echo "$PROGN error: build already requested"
222: exit 1
223: fi
224:
225: touch "${BUILD_WANTED}"
226: echo "$PROGN: build of project ${PROJECT} requested on build host ${HOST}"
227: ;;
228:
229: esac
230:
231:
232:
233:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>