Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions .buildkite/hooks/asdf-pre-command
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/usr/bin/env bash
# this script is executed by multiple buildkite agents running on one node, so we write the pid to a file
# if the pidfile exists we know another process is executing so we don't need to install anything
#
# A more robust approach would be to use a lock file, but that would require some more work
set -eu
pushd "$(dirname "${BASH_SOURCE[0]}")"/../..

WORKDIR=$(pwd)
PIDFILE=/var/lock/dobackup.pid

remove_pidfile()
{
rm -f "$PIDFILE"
}

another_instance()
{
echo "There is another instance running, skipping"
exit 0
}

if [ -f "$PIDFILE" ]; then
kill -0 "$(cat $PIDFILE)" && another_instance
fi
trap remove_pidfile EXIT
echo $$ > "$PIDFILE"

echo "Installing asdf dependencies as defined in '${WORKDIR}/.tool-versions':"
asdf install
33 changes: 7 additions & 26 deletions .buildkite/hooks/pre-command
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,30 +1,11 @@
#!/usr/bin/env bash
# this script is executed by multiple buildkite agents running on one node, so we write the pid to a file
# if the pidfile exists we know another process is executing so we don't need to install anything
#
# A more robust approach would be to use a lock file, but that would require some more work
set -eu
pushd "$(dirname "${BASH_SOURCE[0]}")"/../..

WORKDIR=$(pwd)
PIDFILE=/var/lock/dobackup.pid

remove_pidfile()
{
rm -f "$PIDFILE"
}

another_instance()
{
echo "There is another instance running, skipping"
# Skip the rest if this is pipeline upload or empty
if [[ "${BUILDKITE_COMMAND:-}" =~ "buildkite-agent pipeline upload".* ]]; then
exit 0
elif [[ "${BUILDKITE_COMMAND:-}" = "" ]]; then
exit 0
}

if [ -f "$PIDFILE" ]; then
kill -0 "$(cat $PIDFILE)" && another_instance
fi
trap remove_pidfile EXIT
echo $$ > "$PIDFILE"

echo "Installing asdf dependencies as defined in '${WORKDIR}/.tool-versions':"
asdf install
if [ ! -f .use_mise ]; then
source ./asdf-pre-command
fi
6 changes: 6 additions & 0 deletions .use_mise
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Stateless CI agents use the presence of this file to determine whether it should install tools with mise or install them with ASDF.
Thus if you delete this file, CI will use ASDF to install tools and not mise.

The file is only meant to be here while we transition to using mise completely.

For more information you can reach out to the dev-infra team on #discuss-dev-infra.