mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
Install `glab`, the GitLab CLI, and `glab-axi`, an agent-ergonomic wrapper around it, in the development container. Default `GITLAB_HOST` to `gitlab.kitware.com` so that both address our GitLab instance without further configuration, persist the `glab` configuration directory on a volume so that a credential need be created only once, and pass a `GITLAB_TOKEN` or `GITLAB_CLIENT_ID` from the host through to the container. Neither tool can authenticate on its own, so check for a working credential each time a tool attaches to the container and print what remains to be set up if there is none.
59 lines
2.0 KiB
Bash
Executable File
59 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Report whether this clone and its development container are ready to use
|
|
# and, if they are not, print what remains to be set up. Run each time a
|
|
# tool attaches to the container. See `Help/dev/devcontainer.rst`.
|
|
|
|
set -u
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
# Check that development setup is up-to-date, the way our `pre-commit` hook
|
|
# does. `Utilities/SetupForDevelopment.sh` is interactive, so the container
|
|
# cannot run it on the developer's behalf.
|
|
eval "$(grep '^SetupForDevelopment_VERSION=' Utilities/SetupForDevelopment.sh)"
|
|
setup_done=$(git config --get hooks.SetupForDevelopment || echo 0)
|
|
if test "$setup_done" -lt "${SetupForDevelopment_VERSION:-0}"; then
|
|
cat <<MESSAGE
|
|
git: this work tree is not set up for development.
|
|
Run 'Utilities/SetupForDevelopment.sh' to configure your Git identity and
|
|
install the project's commit hooks. The work tree is shared with the host,
|
|
so running it here sets up both.
|
|
MESSAGE
|
|
fi
|
|
|
|
readonly host="${GITLAB_HOST:-gitlab.com}"
|
|
|
|
if glab auth status --hostname "$host" > /dev/null 2>&1; then
|
|
exit 0
|
|
fi
|
|
|
|
# The OAuth flows need the application ID of an OAuth application registered
|
|
# on the instance. Offer them only when one is available, and prefer the
|
|
# device flow because it needs no redirect back into the container.
|
|
if test -n "${GITLAB_CLIENT_ID:-}"; then
|
|
readonly login="glab auth login --hostname $host --device"
|
|
readonly hint=""
|
|
else
|
|
readonly login="glab auth login --hostname $host"
|
|
readonly hint="
|
|
Setting GITLAB_CLIENT_ID, on the host, to the application ID of a GitLab
|
|
OAuth application offers to sign in through that application instead.
|
|
"
|
|
fi
|
|
|
|
cat <<MESSAGE
|
|
glab: no credential for $host yet.
|
|
Set one up in either of two ways:
|
|
|
|
* Run this in the container, which stores the credential under
|
|
~/.config/glab-cli, on a volume that persists across rebuilds:
|
|
|
|
$login
|
|
|
|
* Or set GITLAB_TOKEN, on the host, to a GitLab personal access token
|
|
before starting the container. It is passed through automatically.
|
|
$hint
|
|
Run '.devcontainer/setup-status.sh' here in the container to check again.
|
|
MESSAGE
|