# This is the .envrc for sentry, for use with direnv. # It's responsible for enforcing a standard dev environment by checking as much state as possible, and either performing # initialization (e.g. activating the venv) or giving recommendations on how to reach the desired state. # It also sets useful environment variables. # If you'd like to override or set any custom environment variables, this .envrc will read a .env file at the end. set -e bold="$(tput bold)" red="$(tput setaf 1)" green="$(tput setaf 2)" yellow="$(tput setaf 3)" reset="$(tput sgr0)" # XXX: we can't trap bash EXIT, because it'll override direnv's finalizing routines. # consequently, using "exit" anywhere will skip this notice from showing. # so need to use set -e, and return 1. trap notice ERR notice() { [ $? -eq 0 ] && return cat <&1 >/dev/null } warn() { cat <&2 </dev/null || true info "To create a virtualenv, please type: ${python_version} -m virtualenv ${venv_name}" require ${python_version} || die "You'll need to install ${python_version}, or make it available on your PATH. It's recommended to use pyenv - please refer to https://docs.sentry.io/development/contribute/environment" return 1 } advice_install_sentry() { info "To install sentry, please type: make install-py-dev" return 1 } advice_install_pre_commit() { info "To install pre-commit, please type: make setup-git" return 1 } advice_install_yarn_pkgs() { info "To install yarn packages, please type: make install-js-dev" return 1 } ### Environment ### # don't write *.pyc files; using stale python code occasionally causes subtle problems export PYTHONDONTWRITEBYTECODE=1 # make sure we don't have any conflicting PYTHONPATH unset PYTHONPATH # don't check pypi for a potential new pip version; low-hanging fruit to save a bit of time export PIP_DISABLE_PIP_VERSION_CHECK=on # increase node's memory limit, required for our webpacking export NODE_OPTIONS=--max-old-space-size=4096 ### System ### for pkg in \ make \ docker \ chromedriver \ pkg-config \ openssl; do if ! require "$pkg"; then die "You seem to be missing the system dependency: ${pkg} Please install homebrew, and run brew bundle." fi done ### Git ### info "Configuring git..." make setup-git-config ### Python ### # we're enforcing that virtualenv be in .venv{,3}, since future tooling e.g. # venv-update will rely on this. venv_name=".venv" python_version="python2.7" if [ "$SENTRY_PYTHON3" = "1" ]; then venv_name=".venv3" python_version="python3.6" warn "Running in EXPERIMENTAL Python 3 mode... Good luck" fi info "Activating virtualenv..." if [ ! -f "${venv_name}/bin/activate" ]; then info "You don't seem to have a virtualenv." advice_init_venv "$python_version" "$venv_name" fi # The user might be cd'ing into sentry with another non-direnv managed # (in that it would be automatically deactivated) virtualenv active. deactivate 2>/dev/null || true source ${venv_name}/bin/activate # XXX: ideally, direnv is able to export PS1 as modified by sourcing venvs # but we'd have to patch direnv, and ".venv" isn't descriptive anyways unset PS1 # We're explicitly disallowing symlinked venvs (python would resolve to the canonical location) if [ "$(command -v python)" != "${PWD}/${venv_name}/bin/python" ]; then info "Failed to activate virtualenv. Your virtualenv's probably symlinked." \ "We want everyone to be on the same page here, so you'll have to recreate your virtualenv." advice_init_venv "$python_version" "$venv_name" fi if [ "$SENTRY_PYTHON3" = "1" ]; then python -c "import sys; sys.exit(sys.version_info[:2] != (3, 6))" || die "For some reason, the virtualenv isn't Python 3.6." else python -c "import sys; sys.exit(sys.version_info[:2] != (2, 7))" || die "For some reason, the virtualenv isn't Python 2.7." fi if [ "$(command -v sentry)" != "${PWD}/${venv_name}/bin/sentry" ]; then info "Your virtual env is activated, but sentry doesn't seem to be installed." # XXX: if direnv fails, the venv won't be activated outside of direnv execution... # So, it is critical that make install-py-dev is guarded by scripts/ensure-venv. advice_install_sentry fi ### pre-commit ### info "Checking pre-commit..." if ! require pre-commit; then info "Looks like you don't have pre-commit installed." advice_install_pre_commit fi ### Node ### info "Checking node..." if ! require node; then die "You don't seem to have node installed. Install volta (a node version manager): https://develop.sentry.dev/environment/#javascript" fi make node-version-check if [ ! -x "node_modules/.bin/webpack" ]; then info "You don't seem to have yarn packages installed." advice_install_yarn_pkgs fi PATH_add node_modules/.bin ### Overrides ### if [ -f '.env' ]; then info ".env found. Reading it..." dotenv .env fi cat <