diff --git a/drone-runner-docker/drone-runner-docker.sh b/drone-runner-docker/drone-runner-docker.sh new file mode 100644 index 0000000000..589dc2855f --- /dev/null +++ b/drone-runner-docker/drone-runner-docker.sh @@ -0,0 +1,13 @@ +## +## drone-runner-docker.sh -- drone-runner-docker(8) configuration +## + +GODEBUG=netdns=go +DRONE_DEBUG=true + +DRONE_RPC_PROTO=http +DRONE_RPC_HOST=127.0.0.1:9000 +DRONE_RPC_SECRET=the-server-secret +DRONE_RUNNER_CAPACITY=4 +DRONE_RUNNER_NAME=${HOSTNAME} + diff --git a/drone-runner-docker/drone-runner-docker.spec b/drone-runner-docker/drone-runner-docker.spec new file mode 100644 index 0000000000..7623ee1f88 --- /dev/null +++ b/drone-runner-docker/drone-runner-docker.spec @@ -0,0 +1,127 @@ +## +## drone-runner-docker.spec -- OpenPKG RPM Package Specification +## Copyright (c) 2000-2019 OpenPKG Project +## +## Permission to use, copy, modify, and distribute this software for +## any purpose with or without fee is hereby granted, provided that +## the above copyright notice and this permission notice appear in all +## copies. +## +## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED +## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR +## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +## SUCH DAMAGE. +## + +# package version +%define V_opkg 1.0.1 +%define V_release 1.0.1 +%define V_dist 20191123 + +# package information +Name: drone-runner-docker +Summary: Continuous Integration (CI) Service: Docker Runner +URL: https://drone.io/ +Vendor: Drone.IO Inc. +Packager: OpenPKG Project +Distribution: OpenPKG Community +Class: EVAL +Group: Web +License: Apache +Version: %{V_opkg}.%{V_dist} +Release: 20191123 + +# list of sources +Source0: http://download.openpkg.org/components/versioned/drone/drone-runner-docker-%{V_dist}.tar.xz +Source1: rc.drone-runner-docker +Source2: drone-runner-docker.sh + +# build information +BuildPreReq: OpenPKG, openpkg >= 20160101, go +PreReq: OpenPKG, openpkg >= 20160101 + +%description + Drone is a Continuous Delivery system built on Docker container + technology. Drone uses a simple YAML configuration file, a superset + of docker-compose(1), to define and dockerute Pipelines inside Docker + containers. This is the Docker runner. + +%track + prog drone-runner-docker:release = { + version = %{V_release} + url = https://github.com/drone-runners/drone-runner-docker/releases + regex = v(__VER__)\.tar\.gz + } + prog drone-runner-docker:snapshot = { + version = %{V_dist} + url = http://download.openpkg.org/components/versioned/drone/ + regex = drone-runner-docker-(__VER__)\.tar\.xz + } + +%prep + %setup -q -n drone-runner-docker + +%build + # build program + export GOPATH=`pwd` + rm -rf $GOPATH/src/github.com/docker/distribution/vendor/github.com/opencontainers/go-digest + go build -v -o drone-runner-docker github.com/drone-runners/drone-runner-docker/ + +%install + # create installation hierarchy + %{l_shtool} mkdir -f -p -m 755 \ + $RPM_BUILD_ROOT%{l_prefix}/sbin \ + $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d \ + $RPM_BUILD_ROOT%{l_prefix}/etc/drone-runner-docker \ + $RPM_BUILD_ROOT%{l_prefix}/var/drone-runner-docker/log \ + $RPM_BUILD_ROOT%{l_prefix}/var/drone-runner-docker/run + + # install program + %{l_shtool} install -c -s -m 755 \ + drone-runner-docker $RPM_BUILD_ROOT%{l_prefix}/sbin/ + + # install default configuration + %{l_shtool} install -c -m 644 %{l_value -s -a} \ + %{SOURCE drone-runner-docker.sh} $RPM_BUILD_ROOT%{l_prefix}/etc/drone-runner-docker/ + + # install run-command script + %{l_shtool} install -c -m 755 %{l_value -s -a} \ + %{SOURCE rc.drone-runner-docker} $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/ + + # determine installation files + %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \ + %{l_files_std} \ + '%config %attr(-,%{l_rusr},%{l_rgrp}) %{l_prefix}/etc/drone-runner-docker' \ + '%config %attr(-,%{l_rusr},%{l_rgrp}) %{l_prefix}/etc/drone-runner-docker/*' \ + '%attr(-,%{l_rusr},%{l_rgrp}) %{l_prefix}/var/drone-runner-docker/*' \ + '%attr(-,%{l_rusr},%{l_rgrp}) %{l_prefix}/var/drone-runner-docker/*/*' + +%files -f files + +%clean + +%post + if [ $1 -eq 2 ]; then + # after upgrade, restart service + eval `%{l_rc} drone-runner-docker status 2>/dev/null` + [ ".$drone_server_active" = .yes ] && %{l_rc} drone-runner-docker restart + fi + exit 0 + +%preun + if [ $1 -eq 0 ]; then + # before erase, stop service and remove log files + %{l_rc} drone-runner-docker stop 2>/dev/null + rm -rf $RPM_INSTALL_PREFIX/var/drone-runner-docker/log/* >/dev/null 2>&1 || true + rm -rf $RPM_INSTALL_PREFIX/var/drone-runner-docker/run/* >/dev/null 2>&1 || true + fi + exit 0 + diff --git a/drone-runner-docker/rc.drone-runner-docker b/drone-runner-docker/rc.drone-runner-docker new file mode 100644 index 0000000000..ba2e3c88ed --- /dev/null +++ b/drone-runner-docker/rc.drone-runner-docker @@ -0,0 +1,68 @@ +#!@l_prefix@/bin/openpkg rc +## +## rc.drone-runner-docker -- Run-Commands +## + +%config + drone_runner_docker_enable="$openpkg_rc_def" + drone_runner_docker_flags="" + drone_runner_docker_log_prolog="true" + drone_runner_docker_log_epilog="true" + drone_runner_docker_log_numfiles="10" + drone_runner_docker_log_minsize="1M" + drone_runner_docker_log_complevel="9" + +%common + drone_runner_docker_cfgfile="@l_prefix@/etc/drone-runner-docker/drone-runner-docker.sh" + drone_runner_docker_pidfile="@l_prefix@/var/drone-runner-docker/run/drone-runner-docker.pid" + drone_runner_docker_tmpfile="@l_prefix@/var/drone-runner-docker/run/drone-runner-docker.tmp" + drone_runner_docker_logfile="@l_prefix@/var/drone-runner-docker/log/drone-runner-docker.log" + drone_runner_docker_signal () { + [ -f $drone_runner_docker_pidfile ] && kill -$1 `cat $drone_runner_docker_pidfile` + } + +%status -u @l_rusr@ -o + drone_runner_docker_usable="unknown" + drone_runner_docker_active="no" + rcService drone_runner_docker enable yes && \ + drone_runner_docker_signal 0 && drone_runner_docker_active="yes" + echo "drone_runner_docker_enable=\"$drone_runner_docker_enable\"" + echo "drone_runner_docker_usable=\"$drone_runner_docker_usable\"" + echo "drone_runner_docker_active=\"$drone_runner_docker_active\"" + +%start -u @l_rusr@ + rcService drone-runner-docker enable yes || exit 0 + rcService drone-runner-docker active yes && exit 0 + ( GOMAXPROCS=32 + export GOMAXPROCS + sed -e 's/^\([A-Z][^=]*\)=\(.*\)$/\1=\2; export \1/' \ + <@l_prefix@/etc/drone-runner-docker/drone-runner-docker.sh >$drone_runner_docker_tmpfile + . $drone_runner_docker_tmpfile + rm -f $drone_runner_docker_tmpfile + nohup @l_prefix@/sbin/drone-runner-docker \ + $drone_runner_docker_flags \ + >$drone_runner_docker_logfile 2>&1 & + echo $! >$drone_runner_docker_pidfile + ) >/dev/null 2>&1 + +%stop -u @l_rusr@ + rcService drone-runner-docker enable yes || exit 0 + rcService drone-runner-docker active no && exit 0 + drone_runner_docker_signal TERM + sleep 2 + rm -f $drone_runner_docker_pidfile >/dev/null 2>&1 || true + +%restart -u @l_rusr@ + rcService drone-runner-docker enable yes || exit 0 + rcService drone-runner-docker active no && exit 0 + rc drone_runner_docker stop start + +%daily -u @l_susr@ + rcService drone-runner-docker enable yes || exit 0 + shtool rotate -f \ + -n ${drone_runner_docker_log_numfiles} -s ${drone_runner_docker_log_minsize} -d \ + -z ${drone_runner_docker_log_complevel} -m 664 -o @l_rusr@ -g @l_rgrp@ \ + -P "${drone_runner_docker_log_prolog}" \ + -E "${drone_runner_docker_log_epilog}; rc drone-runner-docker restart" \ + $drone_runner_docker_logfile +