mirror of https://github.com/mongodb/mongo
SERVER-104255: Add new workstation configure script (#35338)
GitOrigin-RevId: 2b9342ed9daa9a18e5806aac5246a9b9f76d57bf
This commit is contained in:
parent
cbd69e13ae
commit
5fcecd403f
|
|
@ -808,6 +808,15 @@ functions:
|
||||||
dir: src/buildscripts/antithesis/base_images/workload/src
|
dir: src/buildscripts/antithesis/base_images/workload/src
|
||||||
- *configure_evergreen_api_credentials
|
- *configure_evergreen_api_credentials
|
||||||
|
|
||||||
|
"do pre workstation setup":
|
||||||
|
- command: manifest.load
|
||||||
|
- *git_get_shallow_project
|
||||||
|
- *f_expansions_write
|
||||||
|
- *restore_git_history_and_tags
|
||||||
|
- *add_git_tag
|
||||||
|
- *kill_processes
|
||||||
|
- *cleanup_environment
|
||||||
|
|
||||||
"do non-compile setup":
|
"do non-compile setup":
|
||||||
- command: manifest.load
|
- command: manifest.load
|
||||||
- *git_get_shallow_project
|
- *git_get_shallow_project
|
||||||
|
|
@ -1267,6 +1276,17 @@ functions:
|
||||||
- *check_run_tests_infrastructure_failure
|
- *check_run_tests_infrastructure_failure
|
||||||
- *check_resmoke_failure
|
- *check_resmoke_failure
|
||||||
|
|
||||||
|
"set up then check workstation script":
|
||||||
|
- command: subprocess.exec
|
||||||
|
params:
|
||||||
|
binary: bash
|
||||||
|
args:
|
||||||
|
- "-c"
|
||||||
|
- |
|
||||||
|
cd ./src
|
||||||
|
./etc/set_up_workstation.sh
|
||||||
|
./evergreen/check_workstation_setup.sh
|
||||||
|
|
||||||
"run tests":
|
"run tests":
|
||||||
- *f_expansions_write
|
- *f_expansions_write
|
||||||
- *configure_evergreen_api_credentials
|
- *configure_evergreen_api_credentials
|
||||||
|
|
|
||||||
|
|
@ -116,6 +116,13 @@ tasks:
|
||||||
vars:
|
vars:
|
||||||
resmoke_jobs_max: 1
|
resmoke_jobs_max: 1
|
||||||
|
|
||||||
|
- name: check_workstation_setup_script
|
||||||
|
tags: ["assigned_to_jira_team_devprod_correctness", "development_critical"]
|
||||||
|
depends_on: []
|
||||||
|
commands:
|
||||||
|
- func: "do pre workstation setup"
|
||||||
|
- func: "set up then check workstation script"
|
||||||
|
|
||||||
- <<: *gen_burn_in_task_template
|
- <<: *gen_burn_in_task_template
|
||||||
name: burn_in_tags_gen
|
name: burn_in_tags_gen
|
||||||
tags: ["assigned_to_jira_team_devprod_correctness", "auxiliary"]
|
tags: ["assigned_to_jira_team_devprod_correctness", "auxiliary"]
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,9 @@ buildvariants:
|
||||||
- name: monitor_build_status
|
- name: monitor_build_status
|
||||||
distros:
|
distros:
|
||||||
- ubuntu2404-large
|
- ubuntu2404-large
|
||||||
|
- name: check_workstation_setup_script
|
||||||
|
distros:
|
||||||
|
- ubuntu2204-arm64-small
|
||||||
|
|
||||||
# Experimental variant running bazel targets for integration tests. To be removed with SERVER-103537.
|
# Experimental variant running bazel targets for integration tests. To be removed with SERVER-103537.
|
||||||
- name: bazel-integration-tests
|
- name: bazel-integration-tests
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
add-auto-load-safe-path /
|
||||||
|
|
||||||
|
set pagination off
|
||||||
|
set print object on
|
||||||
|
|
||||||
|
set print static-members off
|
||||||
|
set print pretty on
|
||||||
|
#set print elements 0
|
||||||
|
|
||||||
|
# include venv in the Python path
|
||||||
|
python
|
||||||
|
import os, subprocess, sys
|
||||||
|
try:
|
||||||
|
gdb_python_version = sys.version.split()[0]
|
||||||
|
shell_python_version = subprocess.check_output('python -c "import sys;print(sys.version.split()[0])"', shell=True).decode("utf-8").strip()
|
||||||
|
if gdb_python_version == shell_python_version:
|
||||||
|
# Execute a Python using the user's shell and pull out the sys.path (for site-packages)
|
||||||
|
shell_paths = subprocess.check_output('python -c "import os,sys;print(os.linesep.join(sys.path).strip())"', shell=True).decode("utf-8").split()
|
||||||
|
# Extend GDB's Python's search path
|
||||||
|
sys.path.extend(path for path in shell_paths if not path in sys.path)
|
||||||
|
print("Included venv Python path")
|
||||||
|
else:
|
||||||
|
print("Failed to include venv Python path: Python version mismatch (shell {}, gdb {})".format(shell_python_version, gdb_python_version))
|
||||||
|
except Exception as e:
|
||||||
|
print("Failed to include venv Python path: " + str(e))
|
||||||
|
end
|
||||||
|
|
||||||
|
# register boost pretty printers
|
||||||
|
python
|
||||||
|
import sys, pathlib
|
||||||
|
try:
|
||||||
|
sys.path.insert(1, os.path.join(pathlib.Path.home(), 'Boost-Pretty-Printer'))
|
||||||
|
import boost
|
||||||
|
boost.register_printers(boost_version=(1,60,0))
|
||||||
|
print("Loaded boost pretty printers")
|
||||||
|
except Exception as e:
|
||||||
|
print("Failed to load the boost pretty printers: " + str(e))
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,162 @@
|
||||||
|
silent_grep() {
|
||||||
|
command grep -q > /dev/null 2>&1 "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
idem_file_append() {
|
||||||
|
if [[ -z "$1" ]]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if [[ ! -f "$1" && -n "${4-}" ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
if [[ -z "$2" ]]; then
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
if [[ -z "$3" ]]; then
|
||||||
|
return 3
|
||||||
|
fi
|
||||||
|
local start_marker="# BEGIN $2"
|
||||||
|
local end_marker="# END $2"
|
||||||
|
if ! silent_grep "^$start_marker" "$1"; then
|
||||||
|
{
|
||||||
|
echo -e "\n$start_marker";
|
||||||
|
echo -e "$3";
|
||||||
|
echo -e "$end_marker";
|
||||||
|
} >> "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_bash() {
|
||||||
|
# Bash profile should source .bashrc
|
||||||
|
echo "################################################################################"
|
||||||
|
echo "Setting up bash..."
|
||||||
|
local block=$(cat <<BLOCK
|
||||||
|
if [[ -f ~/.bashrc ]]; then
|
||||||
|
source ~/.bashrc
|
||||||
|
fi
|
||||||
|
BLOCK
|
||||||
|
)
|
||||||
|
|
||||||
|
idem_file_append ~/.bash_profile "Source .bashrc" "$block"
|
||||||
|
|
||||||
|
set +o nounset
|
||||||
|
source ~/.bash_profile
|
||||||
|
set -o nounset
|
||||||
|
|
||||||
|
echo "Finished setting up ~/.bashprofile..."
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_mongo_venv() {
|
||||||
|
echo "################################################################################"
|
||||||
|
echo "Setting up the local virtual environment..."
|
||||||
|
|
||||||
|
# PYTHON_KEYRING_BACKEND is needed to make poetry install work
|
||||||
|
# See guide https://wiki.corp.mongodb.com/display/KERNEL/Virtual+Workstation
|
||||||
|
export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
|
||||||
|
/opt/mongodbtoolchain/v4/bin/python3 -m venv python3-venv
|
||||||
|
|
||||||
|
source ./python3-venv/bin/activate
|
||||||
|
POETRY_VIRTUALENVS_IN_PROJECT=true poetry install --no-root --sync
|
||||||
|
deactivate
|
||||||
|
|
||||||
|
echo "Finished setting up the local virtual environment..."
|
||||||
|
echo "Activate it by running 'source python3-venv/bin/activate'"
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_poetry() {
|
||||||
|
echo "################################################################################"
|
||||||
|
echo "Installing 'poetry' command..."
|
||||||
|
export PATH="$PATH:$HOME/.local/bin"
|
||||||
|
if command -v poetry &> /dev/null; then
|
||||||
|
echo "'poetry' command exists; skipping setup"
|
||||||
|
else
|
||||||
|
pipx install poetry==2.0.0
|
||||||
|
echo "Finished installing poetry..."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_pipx() {
|
||||||
|
echo "################################################################################"
|
||||||
|
echo "Installing 'pipx' command..."
|
||||||
|
if command -v pipx &> /dev/null; then
|
||||||
|
echo "'pipx' command exists; skipping setup"
|
||||||
|
else
|
||||||
|
export PATH="$PATH:$HOME/.local/bin"
|
||||||
|
local venv_name="tmp-pipx-venv"
|
||||||
|
/opt/mongodbtoolchain/v4/bin/python3 -m venv $venv_name
|
||||||
|
|
||||||
|
# virtualenv doesn't like nounset
|
||||||
|
set +o nounset
|
||||||
|
source $venv_name/bin/activate
|
||||||
|
set -o nounset
|
||||||
|
|
||||||
|
python -m pip install --upgrade "pip<20.3"
|
||||||
|
python -m pip install pipx
|
||||||
|
|
||||||
|
pipx install pipx --python /opt/mongodbtoolchain/v4/bin/python3 --force
|
||||||
|
pipx ensurepath --force
|
||||||
|
|
||||||
|
set +o nounset
|
||||||
|
deactivate
|
||||||
|
set -o nounset
|
||||||
|
|
||||||
|
rm -rf $venv_name
|
||||||
|
|
||||||
|
source ~/.bashrc
|
||||||
|
|
||||||
|
echo "Finished installing pipx..."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_db_contrib_tool() {
|
||||||
|
echo "################################################################################"
|
||||||
|
echo "Installing 'db-contrib-tool' command..."
|
||||||
|
export PATH="$PATH:$HOME/.local/bin"
|
||||||
|
if command -v db-contrib-tool &> /dev/null; then
|
||||||
|
echo "'db-contrib-tool' command exists; skipping setup"
|
||||||
|
else
|
||||||
|
pipx install db-contrib-tool
|
||||||
|
echo "Finished installing db-contrib-tool"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_gdb() {
|
||||||
|
echo "################################################################################"
|
||||||
|
echo "Setting up GDB..."
|
||||||
|
|
||||||
|
cwd=$(pwd)
|
||||||
|
cd ..
|
||||||
|
if [[ -d 'Boost-Pretty-Printer' ]]; then
|
||||||
|
echo "'Boost-Pretty-Printer' dir exists; skipping setup"
|
||||||
|
else
|
||||||
|
git clone https://github.com/mongodb-forks/Boost-Pretty-Printer.git
|
||||||
|
|
||||||
|
# the original version of this script just appended this line, so we
|
||||||
|
# have to grep for it manually
|
||||||
|
if ! silent_grep "source $HOME/gdbinit" ~/.gdbinit; then
|
||||||
|
idem_file_append ~/.gdbinit "Server Workflow Tool gdbinit" "source $HOME/gdbinit"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Finished installing pretty printers..."
|
||||||
|
fi
|
||||||
|
cd $cwd
|
||||||
|
}
|
||||||
|
|
||||||
|
run_setup() {
|
||||||
|
set +o nounset
|
||||||
|
source ~/.bashrc
|
||||||
|
set -o nounset
|
||||||
|
|
||||||
|
setup_bash
|
||||||
|
|
||||||
|
setup_gdb
|
||||||
|
setup_pipx
|
||||||
|
setup_db_contrib_tool # This step requires `setup_pipx` to have been run.
|
||||||
|
setup_poetry # This step requires `setup_pipx` to have been run.
|
||||||
|
|
||||||
|
setup_mongo_venv # This step requires `setup_poetry` to have been run.
|
||||||
|
|
||||||
|
echo "Please run 'source ~/.bashrc' to complete setup!"
|
||||||
|
}
|
||||||
|
|
||||||
|
run_setup
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
failed_setup=false
|
||||||
|
|
||||||
|
source ~/.bashrc
|
||||||
|
|
||||||
|
if command -v pipx &> /dev/null; then
|
||||||
|
echo "'pipx' command exists"
|
||||||
|
else
|
||||||
|
echo "pipx command not found - failed setup"
|
||||||
|
failed_setup=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if command -v poetry &> /dev/null; then
|
||||||
|
echo "'poetry' command exists"
|
||||||
|
else
|
||||||
|
echo "poetry command not found - failed setup"
|
||||||
|
failed_setup=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if command -v db-contrib-tool &> /dev/null; then
|
||||||
|
echo "'db-contrib-tool' command exists"
|
||||||
|
else
|
||||||
|
echo "db-contrib-tool command not found - failed setup"
|
||||||
|
failed_setup=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -d "./python3-venv"; then
|
||||||
|
echo "Venv directory exists, checking activation"
|
||||||
|
. python3-venv/bin/activate
|
||||||
|
./buildscripts/resmoke.py run --help &> /dev/null
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Virtual workstation set up correctly"
|
||||||
|
else
|
||||||
|
echo "Virtual workstation failed activation"
|
||||||
|
failed_setup=true
|
||||||
|
fi
|
||||||
|
deactivate
|
||||||
|
else
|
||||||
|
echo "mongo virtual environment not created correctly - failed setup"
|
||||||
|
failed_setup=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -d "../Boost-Pretty-Printer"; then
|
||||||
|
echo "Pretty printers set up correctly"
|
||||||
|
else
|
||||||
|
echo "Pretty printers failed setup"
|
||||||
|
failed_setup=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $failed_setup; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
Loading…
Reference in New Issue