# 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 </dev/null 2>&1 } warn() { cat <&2 </dev/null || true info "To create a virtualenv, please type: python3.6 -m venv ${venv_name}" require "python3.6" || die "You'll need to install python3, 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 # Frontend hot module reloader using `react-refresh` # Enable this by default for development envs (CI/deploys do not use envrc) export SENTRY_UI_HOT_RELOAD=1 ### 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 ### venv_name=".venv" info "Activating virtualenv..." if [ ! -f "${venv_name}/bin/activate" ]; then info "You don't seem to have a virtualenv." advice_init_venv "$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 info "Ensuring proper virtualenv..." ${PWD}/scripts/ensure-venv.sh if ! require sentry; then info "Your virtualenv 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 <