diff --git a/shell.nix b/shell.nix index 49c9055..7f2a035 100644 --- a/shell.nix +++ b/shell.nix @@ -2,15 +2,57 @@ with pkgs; -mkShell { - buildInputs = [ python27 python27Packages.virtualenv ]; +let + psql_file = "psql_creation.sql"; + psql_dir = "$(pwd)/.pgdata"; + mysql_file = "mysql_creation.sql"; + mysql_dir = "$(pwd)/.mysql"; + socket = "${mysql_dir}/mysql.sock"; + origin = "mysql:///odyfo"; + destination = "postgresql:///odyfo"; + +in mkShell { + buildInputs = [ + postgresql + mysql57 + pgloader + python38Packages.alembic + python38Packages.pymysql + ]; shellHook = '' - # Workaround to use pip - SOURCE_DATE_EPOCH=$(date +%s) - virtualenv .venv - export PATH=$PWD/.venv/bin:$PATH - pip install etlalchemy - pip install psycopg2 - ''; + trap "kill 0" EXIT + export PGDATA="${psql_dir}" + export PGHOST="${psql_dir}" + + # Initialize PostgreSQL + if [ ! -d ${psql_dir} ]; then + initdb --auth-local=trust --no-locale --encoding=UTF8 + fi + + if ! pg_ctl status; then + pg_ctl start -o "--unix_socket_directories=${psql_dir} --listen_addresses='''" + fi + + psql -d postgres -f ${psql_file} + + # Initialize MySQL + if [ ! -d ${mysql_dir} ]; then + mysqld --datadir="${mysql_dir}" --socket="${socket}" --initialize-insecure + fi + + mysqld --datadir="${mysql_dir}" --socket="${socket}" --skip-networking & + sleep 5 + + mysql --socket="${socket}" -u root < ${mysql_file} + + alias psql='psql -d postgres' + alias mysql='mysql --socket="${socket}" -u root' + alias nuke='rm -rf ${psql_dir} ${mysql_dir}' + + alembic upgrade head + pgloader ${origin} ${destination} + pg_dump odyfo > databases/migrated_db.sql + >>>>>>> parent of fcc06ae (Fix pgloader database URI) + ''; }