blob: 9c2fa8d7ac22cf43362ce25740f5cd46bd7ae430 [file] [log] [blame]
# Example how to setup a clean-up step for the Buildkite Agent on macOS
# Create a "buildkite" user first with a clean home directory.
#
# The agent will run as this "buildkite" user and will be monitored by a launchd
# service that runs a "buildkite-wrapper" script, which will launch the actual
# agent and clean-up after each job. (launchd will restart the service automatically
# after it exits.)
cat > /Library/LaunchDaemons/de.geheimspeicher.buildkite-agent.plist <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>de.geheimspeicher.buildkite-agent</string>
<key>WorkingDirectory</key>
<string>/usr/local/bin</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/buildkite-wrapper</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>ProcessType</key>
<string>Interactive</string>
<key>ThrottleInterval</key>
<integer>10</integer>
<key>StandardOutPath</key>
<string>/usr/local/var/log/buildkite-agent.log</string>
<key>StandardErrorPath</key>
<string>/usr/local/var/log/buildkite-agent.log</string>
</dict>
</plist>
EOF
chown root:wheel /Library/LaunchDaemons/de.geheimspeicher.buildkite-agent.plist
chmod 0644 /Library/LaunchDaemons/de.geheimspeicher.buildkite-agent.plist
cat > /usr/local/bin/buildkite-wrapper <<'EOF'
#!/bin/bash
set -x
OS_VERSION=$(sw_vers -productVersion)
MACHINE_TYPE=$(system_profiler SPHardwareDataType | grep 'Model Name' | cut -d':' -f2 | tr -d ' ' | tr '[:upper:]' '[:lower:]')
BUILDKITE_AGENT_TAGS="queue=macos,kind=worker,os=macos,os-version=${OS_VERSION},machine-type=${MACHINE_TYPE}"
# Kill all processes that might still be running from the last build.
killall -9 -u buildkite
# Remove temporary files.
find /private/tmp -user buildkite -delete
# Delete all Bazel output bases (but leave the cache and install bases).
find /private/var/tmp/_bazel_buildkite -mindepth 1 -maxdepth 1 ! -name 'cache' ! -name 'install' -exec rm -rf {} +
# Delete Bazel install bases older than 7 days.
find /private/var/tmp/_bazel_buildkite/install -mindepth 1 -maxdepth 1 -mtime +7 -exec rm -rf {} +
# Delete the user's cache and temporary files.
find /var/folders -user buildkite -delete
# Completely remove all temporary files, output bases, repo cache, install bases, ...
# find /private/var/tmp -user buildkite -delete
# Completely reset the user's home directory to a known state.
/usr/local/bin/rsync -aAX --delete --ignore-errors /Users/buildkite-fresh/ /Users/buildkite/
sudo -H -u buildkite env \
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin \
BUILDKITE_AGENT_DISCONNECT_AFTER_JOB="true" \
BUILDKITE_AGENT_EXPERIMENT="git-mirrors" \
BUILDKITE_AGENT_NAME="%hostname" \
BUILDKITE_AGENT_TAGS="${BUILDKITE_AGENT_TAGS}" \
BUILDKITE_BUILD_PATH="/Users/buildkite/builds" \
BUILDKITE_CONFIG_PATH="/usr/local/etc/buildkite-agent/buildkite-agent.cfg" \
BUILDKITE_GIT_MIRRORS_PATH="/usr/local/var/bazelbuild" \
BUILDKITE_GIT_CLONE_MIRROR_FLAGS="-v --bare" \
/usr/local/bin/buildkite-agent start
# Just to make really sure that nothing stays running after a job, run 'killall' now.
killall -9 -u buildkite
EOF
chown ci:staff /usr/local/bin/buildkite-wrapper
chmod 0755 /usr/local/bin/buildkite-wrapper
launchctl load /Library/LaunchDaemons/de.geheimspeicher.buildkite-agent.plist