llvm-project/libcxx/utils/ci/run-buildbot-container
Eric 601e8fdd28
Rehome libcxx-builder docker image & attempt gentler termination. (#71604)
There are three changes present in this PR.

1. Use github packages for libcxx-builder rather than dockerhub.

The ldionne/libcxx-builder image will now be hosted at
ghcr.io/libcxx/libcxx-builder. This has the benefit of allowing members
of the github org to push new versions.

In the future I hope to add github actions to rebuild the image as
needed.

2. Add docker-compose file

The compose file allows to to specify the package repository, so that
users can simply write 'docker compose build' and 'docker compose push'.

It also gives us a centralized place to manage version arguments which
change frequently.

3. Use non-shell CMD form.

This may help the google libcxx builders disconnect more gracefully as
the shell form of CMD may eat the shutdown signal. I'm hoping this
corrects inaccurate agent counts from the buildkite API, since when the
VM's terminate, they do so without signaling it to buildkite, which
hangs around waiting for them to reconnect. It's likely more changes
will be needed though.

---------

Co-authored-by: Mark de Wever <zar-rpg@xs4all.nl>
2023-11-10 08:24:39 -05:00

32 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# This script starts a shell in a container running the libc++ build bot Docker
# image. That image emulates the environment used by libc++'s Linux builders on
# BuildKite.
#
# Once you're inside the shell, you can run the various build jobs with the
# `run-buildbot` script.
#
# This script must be run from within the LLVM monorepo. Furthermore, the
# monorepo will be mounted as `/llvm` inside the container. Be careful, the
# state in `/llvm` is shared between the container and the host machine, which
# is useful for editing files on the host machine and re-running the build bot
# in the container.
#
# If you are on Linux you will likely not be able to write to the mount because
# the user in the container doesn't have permissions to do so.
# If you need to do this, give that user permission to do so after running
# the container or add this flag to run the container as your local user IDs:
# --user $(id -u):$(id -g)
set -e
MONOREPO_ROOT="$(git rev-parse --show-toplevel)"
if [[ ! -d "${MONOREPO_ROOT}/libcxx/utils/ci" ]]; then
echo "Was unable to find the root of the LLVM monorepo; are you running from within the monorepo?"
exit 1
fi
docker pull ghcr.io/libcxx/libcxx-builder
docker run -it --volume "${MONOREPO_ROOT}:/llvm" --workdir "/llvm" --cap-add=SYS_PTRACE ghcr.io/libcxx/libcxx-builder \
bash -c 'git config --global --add safe.directory /llvm ; exec bash'