From b1b81f77b6941221ae6230aef7a3afc9bfd7064b Mon Sep 17 00:00:00 2001 From: ssun30 Date: Thu, 10 Jul 2025 22:39:54 -0400 Subject: [PATCH 01/18] Modified install_rms.sh to Use The Correct Backend Added developer install option for install_rms.sh --- .github/workflows/CI.yml | 12 ++++---- install_rms.sh | 59 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 61 insertions(+), 10 deletions(-) mode change 100644 => 100755 install_rms.sh diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 936c319b1e..6bfc2ae194 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -2,7 +2,7 @@ # This file contains the script used by GitHub actions to execute the Continuous Integration (CI) # for RMG-Py. This includes building RMG and its dependencies, executing the unit tests, # functional tests, database tests, and regression tests. -# +# # This will run automatically on any push to any branch, but will only run one instance of # itself at a time per branch (to avoid spawning tons of runners, which prevents them from # executing). @@ -14,7 +14,7 @@ # # # Changelog: -# 2023-04 - Jackson Burns - Added this header, regression tests, cleanup of action in +# 2023-04 - Jackson Burns - Added this header, regression tests, cleanup of action in # in general, and documentation throughout the file. # 2023-05 - added Docker build steps # 2023-05-12 - added changes to allow running on forks @@ -54,6 +54,8 @@ env: RMG_DATABASE_BRANCH: main # RMS branch to use for ReactionMechanismSimulator installation RMS_BRANCH: for_rmg + # Use standard RMS installation mode for install_rms.sh + RMS_MODE: standard # julia parallel pre-compilation leads to race conditions and hangs, so we limit it to run in serial JULIA_NUM_PRECOMPILE_TASKS: 1 @@ -131,7 +133,7 @@ jobs: name: Regression Test # skip scheduled runs from forks if: ${{ !( github.repository != 'ReactionMechanismGenerator/RMG-Py' && github.event_name == 'schedule' ) }} - env: + env: # This is true only if this is a reference case for the regression testing: REFERENCE_JOB: ${{ github.ref == 'refs/heads/main' && github.repository == 'ReactionMechanismGenerator/RMG-Py' }} defaults: @@ -167,7 +169,7 @@ jobs: # RMG build step - run: make install - + - name: Make separate No-RMS conda env run: | conda create --name rmg_env_without_rms --clone rmg_env @@ -270,7 +272,7 @@ jobs: REFERENCE: stable_regression_results run: | conda activate rmg_env_without_rms - + exec 2> >(tee -a regression.stderr >&2) 1> >(tee -a regression.stdout) mkdir -p "test/regression-diff" for regr_test in aromatics liquid_oxidation nitrogen oxidation sulfur superminimal RMS_constantVIdealGasReactor_superminimal RMS_CSTR_liquid_oxidation fragment RMS_constantVIdealGasReactor_fragment minimal_surface; diff --git a/install_rms.sh b/install_rms.sh old mode 100644 new mode 100755 index 8dc635214a..3019d451ce --- a/install_rms.sh +++ b/install_rms.sh @@ -43,12 +43,14 @@ echo "Current conda environment: $current_env" # Set environment variables for the current environment, for future uses # https://juliapy.github.io/PythonCall.jl/stable/pythoncall/#If-you-already-have-Python-and-required-Python-packages-installed -conda env config vars set JULIA_CONDAPKG_BACKEND=Null +conda env config vars set JULIA_CONDAPKG_BACKEND=Current +conda env config vars set JULIA_CONDAPKG_EXE=$(which conda) conda env config vars set JULIA_PYTHONCALL_EXE=$CONDA_PREFIX/bin/python conda env config vars set PYTHON_JULIAPKG_EXE=$(which julia) conda env config vars set PYTHON_JULIAPKG_PROJECT=$CONDA_PREFIX/julia_env # Also export for current shell/session (needed for Docker/non-interactive use) -export JULIA_CONDAPKG_BACKEND=Null +export JULIA_CONDAPKG_BACKEND=Current +export JULIA_CONDAPKG_EXE="$(which conda)" export JULIA_PYTHONCALL_EXE="$CONDA_PREFIX/bin/python" export PYTHON_JULIAPKG_EXE="$(which julia)" export PYTHON_JULIAPKG_PROJECT="$CONDA_PREFIX/julia_env" @@ -58,11 +60,58 @@ conda install -y conda-forge::pyjuliacall echo "Environment variables referencing JULIA:" env | grep JULIA -# Use RMS_BRANCH environment variable if set, otherwise default to for_rmg +# Ask user whether to do a standard or developer install +if [ -z "$RMS_MODE" ]; then + echo "Choose installation mode:" + echo " 1) Standard install (download from GitHub)" + echo " 2) Developer install (install from local path)" + read -p "Enter 1 or 2 [default: 1]: " installation_choice + + if [ "$installation_choice" = "2" ]; then + RMS_MODE="dev" + else + RMS_MODE="standard" + fi +fi + +echo "Selected RMS installation mode: $RMS_MODE" + +# Default RMS branch for standard install RMS_BRANCH=${RMS_BRANCH:-for_rmg} -echo "Installing ReactionMechanismSimulator from branch: $RMS_BRANCH" -julia -e "using Pkg; Pkg.add(Pkg.PackageSpec(name=\"ReactionMechanismSimulator\", url=\"https://github.com/ReactionMechanismGenerator/ReactionMechanismSimulator.jl.git\", rev=\"$RMS_BRANCH\")); using ReactionMechanismSimulator; println(read(joinpath(dirname(pathof(ReactionMechanismSimulator)), \"..\", \"Project.toml\"), String)); Pkg.instantiate()" || echo "RMS install error - continuing anyway." +# Ask for local RMS path +if [ "$RMS_MODE" = "dev" ]; then + read -e -p "Please enter full path to your local RMS source code: " RMS_PATH + if [ ! -d "$RMS_PATH" ]; then + echo "ERROR: '$RMS_PATH' is not a valid directory." + exit 1 + fi + echo "Using local RMS path: $RMS_PATH" +fi + +if [ "$RMS_MODE" = "standard" ]; then + echo "Installing RMS from branch: $RMS_BRANCH" + julia << EOF || echo "RMS standard install error - continuing anyway ¯\\_(ツ)_/¯" + using Pkg + Pkg.activate(ENV["PYTHON_JULIAPKG_PROJECT"]) + Pkg.add(Pkg.PackageSpec(name="ReactionMechanismSimulator", url="https://github.com/ReactionMechanismGenerator/ReactionMechanismSimulator.jl.git", rev="$RMS_BRANCH")) + println(read(joinpath(dirname(pathof(ReactionMechanismSimulator)), \"..\", \"Project.toml\"), String)) + Pkg.instantiate() + using ReactionMechanismSimulator +EOF +elif [ "$RMS_MODE" = "dev" ]; then + echo "Installing RMS in developer mode from path: $RMS_PATH" + julia << EOF || echo "RMS developer install error - continuing anyway ¯\\_(ツ)_/¯" + using Pkg + Pkg.activate(ENV["PYTHON_JULIAPKG_PROJECT"]) + Pkg.develop(path="$RMS_PATH") + Pkg.instantiate() + using ReactionMechanismSimulator +EOF +else + echo "Unknown RMS_MODE: $RMS_MODE. Must be either 'standard' or 'dev'." + exit 1 +fi echo "Checking if ReactionMechanismSimulator is installed in the current conda environment for Python usage..." python -c "from juliacall import Main; import sys; sys.exit(0 if Main.seval('Base.identify_package(\"ReactionMechanismSimulator\") !== nothing') and print('ReactionMechanismSimulator is installed in $current_env') is None else 1)" From 257b86e3ba30d57b3222bcbd05cf30e940ed9dbd Mon Sep 17 00:00:00 2001 From: ssun30 Date: Thu, 17 Jul 2025 14:08:01 -0400 Subject: [PATCH 02/18] [RMS] Reverted JULIA_CONDAPKG_BACKEND to Null --- install_rms.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install_rms.sh b/install_rms.sh index 3019d451ce..b4995bd631 100755 --- a/install_rms.sh +++ b/install_rms.sh @@ -43,13 +43,13 @@ echo "Current conda environment: $current_env" # Set environment variables for the current environment, for future uses # https://juliapy.github.io/PythonCall.jl/stable/pythoncall/#If-you-already-have-Python-and-required-Python-packages-installed -conda env config vars set JULIA_CONDAPKG_BACKEND=Current +conda env config vars set JULIA_CONDAPKG_BACKEND=Null conda env config vars set JULIA_CONDAPKG_EXE=$(which conda) conda env config vars set JULIA_PYTHONCALL_EXE=$CONDA_PREFIX/bin/python conda env config vars set PYTHON_JULIAPKG_EXE=$(which julia) conda env config vars set PYTHON_JULIAPKG_PROJECT=$CONDA_PREFIX/julia_env # Also export for current shell/session (needed for Docker/non-interactive use) -export JULIA_CONDAPKG_BACKEND=Current +export JULIA_CONDAPKG_BACKEND=Null export JULIA_CONDAPKG_EXE="$(which conda)" export JULIA_PYTHONCALL_EXE="$CONDA_PREFIX/bin/python" export PYTHON_JULIAPKG_EXE="$(which julia)" From 101a14eebc5dc54ff7ded1ad68ea4a7ed4c83dbd Mon Sep 17 00:00:00 2001 From: ssun30 Date: Thu, 17 Jul 2025 15:44:22 -0400 Subject: [PATCH 03/18] [RMS] Add check for the correct conda environment Initialize Julia environment before installing RMS Add extra debug info --- .github/workflows/CI.yml | 2 +- install_rms.sh | 84 +++++++++++++++++++++++++++++++++++++--- 2 files changed, 80 insertions(+), 6 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 6bfc2ae194..7dfb0f30a5 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -55,7 +55,7 @@ env: # RMS branch to use for ReactionMechanismSimulator installation RMS_BRANCH: for_rmg # Use standard RMS installation mode for install_rms.sh - RMS_MODE: standard + RMS_MODE: CI # julia parallel pre-compilation leads to race conditions and hangs, so we limit it to run in serial JULIA_NUM_PRECOMPILE_TASKS: 1 diff --git a/install_rms.sh b/install_rms.sh index b4995bd631..b6187afcb9 100755 --- a/install_rms.sh +++ b/install_rms.sh @@ -39,7 +39,25 @@ echo "Julia 1.10 binary path: $julia_path" # Get current conda environment name current_env=$(conda info --envs | grep -v '^#' | awk '/\*/{print $1}') -echo "Current conda environment: $current_env" + +# Ask the user to confirm RMS is being installed in the correct +# conda environemnt. Skip if this is run under CI. +if [ "$RMS_MODE" != "CI" ]; then + echo " Please confirm that you want to install RMS into the current conda environment: '$current_env'" + echo " If this is not correct, abort and activate the correct environment before rerunning." + read -p "Proceed with installation in '$current_env'? (y/N): " confirm + case "$confirm" in + [yY][eE][sS]|[yY]) + echo "✅ Proceeding with installation in '$current_env'" + ;; + *) + echo "❌ Aborted. Please activate the correct conda environment and try again." + exit 1 + ;; + esac +else + echo "Current conda environment: $current_env" +fi # Set environment variables for the current environment, for future uses # https://juliapy.github.io/PythonCall.jl/stable/pythoncall/#If-you-already-have-Python-and-required-Python-packages-installed @@ -89,7 +107,23 @@ if [ "$RMS_MODE" = "dev" ]; then echo "Using local RMS path: $RMS_PATH" fi -if [ "$RMS_MODE" = "standard" ]; then +# Initialize the Julia environment from Python using juliacall +python << EOF +import sys +try: + from juliacall import Main + Main.seval('println("Active Julia environment: ", Base.active_project())') + Main.seval('println("Julia load path: ", Base.load_path())') + Main.seval('using Pkg') + Main.seval('Pkg.status()') +except Exception as e: + print("❌ Error while initialize Julia environment:") + print(e) + sys.exit(1) +EOF + +# Install RMS +if [ "$RMS_MODE" = "standard" ] || [ "$RMS_MODE" = "CI" ]; then echo "Installing RMS from branch: $RMS_BRANCH" julia << EOF || echo "RMS standard install error - continuing anyway ¯\\_(ツ)_/¯" using Pkg @@ -97,21 +131,61 @@ if [ "$RMS_MODE" = "standard" ]; then Pkg.add(Pkg.PackageSpec(name="ReactionMechanismSimulator", url="https://github.com/ReactionMechanismGenerator/ReactionMechanismSimulator.jl.git", rev="$RMS_BRANCH")) println(read(joinpath(dirname(pathof(ReactionMechanismSimulator)), \"..\", \"Project.toml\"), String)) Pkg.instantiate() - using ReactionMechanismSimulator + try + @info "Loading RMS" + using ReactionMechanismSimulator + @info "RMS loaded successfully!" + catch err + @error "Failed to load RMS" exception=err + Base.show_backtrace(stderr, catch_backtrace()) + exit(1) + end EOF elif [ "$RMS_MODE" = "dev" ]; then echo "Installing RMS in developer mode from path: $RMS_PATH" julia << EOF || echo "RMS developer install error - continuing anyway ¯\\_(ツ)_/¯" using Pkg + println(ENV["PYTHON_JULIAPKG_PROJECT"]) Pkg.activate(ENV["PYTHON_JULIAPKG_PROJECT"]) Pkg.develop(path="$RMS_PATH") Pkg.instantiate() - using ReactionMechanismSimulator + try + @info "Loading RMS" + using ReactionMechanismSimulator + @info "RMS loaded successfully!" + catch err + @error "Failed to load RMS" exception=err + Base.show_backtrace(stderr, catch_backtrace()) + exit(1) + end EOF else echo "Unknown RMS_MODE: $RMS_MODE. Must be either 'standard' or 'dev'." exit 1 fi +julia_status=$? +if [ $julia_status -ne 0 ]; then + echo "RMS installation failed!" + exit $julia_status +fi + echo "Checking if ReactionMechanismSimulator is installed in the current conda environment for Python usage..." -python -c "from juliacall import Main; import sys; sys.exit(0 if Main.seval('Base.identify_package(\"ReactionMechanismSimulator\") !== nothing') and print('ReactionMechanismSimulator is installed in $current_env') is None else 1)" + +python << EOF +import sys +try: + from juliacall import Main + RMS_Pkg = Main.seval('Base.identify_package("ReactionMechanismSimulator")') + print("Package identify result: ", RMS_Pkg) + if RMS_Pkg is Main.nothing: + print("❌ ReactionMechanismSimulator is NOT installed correctly.") + sys.exit(1) + else: + print("✅ ReactionMechanismSimulator is succesfully installed!") + sys.exit(0) +except Exception as e: + print("❌ Error while checking ReactionMechanismSimulator installation:") + print(e) + sys.exit(1) +EOF From b08d6ed06887dd6a5aaf095c9609ee17e36569f1 Mon Sep 17 00:00:00 2001 From: ssun30 Date: Fri, 18 Jul 2025 09:14:14 -0400 Subject: [PATCH 04/18] [RMS] Updated Dockerfile for the new install_rms --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 2e462e3475..199c5428a1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -77,9 +77,11 @@ RUN make # setting this env variable fixes an issue with Julia precompilation on Windows ENV JULIA_CPU_TARGET="x86-64,haswell,skylake,broadwell,znver1,znver2,znver3,cascadelake,icelake-client,cooperlake,generic" ENV RMS_BRANCH=${RMS_Branch} +ENV RMS_MODE=CI # Usually this is set automatically, but we're not actually running # in an active conda environment when building the Docker so we need to set it manually ENV PYTHON_JULIAPKG_PROJECT="/miniconda/envs/rmg_env/julia_env" +ENV JULIA_PYTHONCALL_EXE="/miniconda/envs/rmg_env/bin/python" RUN source install_rms.sh # RMG-Py should now be installed and ready - trigger precompilation and test run From 681e99fc8f69bd486e2c47a0a64b2e51d207eacb Mon Sep 17 00:00:00 2001 From: ssun30 Date: Fri, 18 Jul 2025 09:30:09 -0400 Subject: [PATCH 05/18] [RMS] Standard mode is now default Developer mode will only be enabled if the user specify "developer" option for install_rms.sh --- .github/workflows/CI.yml | 2 +- install_rms.sh | 24 ++++++------------------ 2 files changed, 7 insertions(+), 19 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 7dfb0f30a5..d30d2e3074 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -54,7 +54,7 @@ env: RMG_DATABASE_BRANCH: main # RMS branch to use for ReactionMechanismSimulator installation RMS_BRANCH: for_rmg - # Use standard RMS installation mode for install_rms.sh + # RMS mode used for install_rms.sh RMS_MODE: CI # julia parallel pre-compilation leads to race conditions and hangs, so we limit it to run in serial JULIA_NUM_PRECOMPILE_TASKS: 1 diff --git a/install_rms.sh b/install_rms.sh index b6187afcb9..6a7b19a952 100755 --- a/install_rms.sh +++ b/install_rms.sh @@ -78,27 +78,15 @@ conda install -y conda-forge::pyjuliacall echo "Environment variables referencing JULIA:" env | grep JULIA -# Ask user whether to do a standard or developer install -if [ -z "$RMS_MODE" ]; then - echo "Choose installation mode:" - echo " 1) Standard install (download from GitHub)" - echo " 2) Developer install (install from local path)" - read -p "Enter 1 or 2 [default: 1]: " installation_choice - - if [ "$installation_choice" = "2" ]; then - RMS_MODE="dev" - else - RMS_MODE="standard" - fi -fi - -echo "Selected RMS installation mode: $RMS_MODE" +# Defaults to "standard" if no arg provided +RMS_MODE=${1:-standard} # Default RMS branch for standard install RMS_BRANCH=${RMS_BRANCH:-for_rmg} # Ask for local RMS path -if [ "$RMS_MODE" = "dev" ]; then +if [ "$RMS_MODE" = "developer" ]; then + echo "Using developer mode for RMS installation" read -e -p "Please enter full path to your local RMS source code: " RMS_PATH if [ ! -d "$RMS_PATH" ]; then echo "ERROR: '$RMS_PATH' is not a valid directory." @@ -141,7 +129,7 @@ if [ "$RMS_MODE" = "standard" ] || [ "$RMS_MODE" = "CI" ]; then exit(1) end EOF -elif [ "$RMS_MODE" = "dev" ]; then +elif [ "$RMS_MODE" = "developer" ]; then echo "Installing RMS in developer mode from path: $RMS_PATH" julia << EOF || echo "RMS developer install error - continuing anyway ¯\\_(ツ)_/¯" using Pkg @@ -160,7 +148,7 @@ elif [ "$RMS_MODE" = "dev" ]; then end EOF else - echo "Unknown RMS_MODE: $RMS_MODE. Must be either 'standard' or 'dev'." + echo "Unknown RMS_MODE: $RMS_MODE. Must be either 'CI', 'standard' or 'developer'." exit 1 fi From 034f147d1479405f7c48103782651f0587b406e3 Mon Sep 17 00:00:00 2001 From: ssun30 Date: Wed, 29 Oct 2025 15:08:44 -0400 Subject: [PATCH 06/18] Replace return 1 with exit 1 --- install_rms.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install_rms.sh b/install_rms.sh index 6a7b19a952..a894bd1521 100755 --- a/install_rms.sh +++ b/install_rms.sh @@ -11,7 +11,7 @@ if ! command -v juliaup &> /dev/null; then echo "juliaup add 1.10" echo "juliaup default 1.10" echo "juliaup remove release" - return 1 + exit 1 fi # Check if julia command is available @@ -20,7 +20,7 @@ if ! command -v julia &> /dev/null; then echo "juliaup add 1.10" echo "juliaup default 1.10" echo "juliaup remove release" - return 1 + exit 1 fi # Check if Julia version is 1.10 @@ -30,7 +30,7 @@ if ! julia --version | grep -q " 1\.10"; then echo "juliaup add 1.10" echo "juliaup default 1.10" echo "juliaup remove release" - return 1 + exit 1 fi # Print the path of the Julia binary From d16d135169a11223678bd8d357ec5f44d94011ea Mon Sep 17 00:00:00 2001 From: Richard West Date: Wed, 3 Dec 2025 10:13:52 -0500 Subject: [PATCH 07/18] Revert "Replace return 1 with exit 1" and fix other cases too. As explained in c46a861a88961acec5ef211b0a38cfc39df54313 we don't want to terminate the shell that's running this script, we just want to exit the script, because our instructions are to "source install_rms.sh" which runs it in the current shell. --- install_rms.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/install_rms.sh b/install_rms.sh index a894bd1521..9b976a4c0e 100755 --- a/install_rms.sh +++ b/install_rms.sh @@ -11,7 +11,7 @@ if ! command -v juliaup &> /dev/null; then echo "juliaup add 1.10" echo "juliaup default 1.10" echo "juliaup remove release" - exit 1 + return 1 fi # Check if julia command is available @@ -20,7 +20,7 @@ if ! command -v julia &> /dev/null; then echo "juliaup add 1.10" echo "juliaup default 1.10" echo "juliaup remove release" - exit 1 + return 1 fi # Check if Julia version is 1.10 @@ -30,7 +30,7 @@ if ! julia --version | grep -q " 1\.10"; then echo "juliaup add 1.10" echo "juliaup default 1.10" echo "juliaup remove release" - exit 1 + return 1 fi # Print the path of the Julia binary @@ -52,7 +52,7 @@ if [ "$RMS_MODE" != "CI" ]; then ;; *) echo "❌ Aborted. Please activate the correct conda environment and try again." - exit 1 + return 1 ;; esac else @@ -90,7 +90,7 @@ if [ "$RMS_MODE" = "developer" ]; then read -e -p "Please enter full path to your local RMS source code: " RMS_PATH if [ ! -d "$RMS_PATH" ]; then echo "ERROR: '$RMS_PATH' is not a valid directory." - exit 1 + return 1 fi echo "Using local RMS path: $RMS_PATH" fi @@ -149,13 +149,13 @@ elif [ "$RMS_MODE" = "developer" ]; then EOF else echo "Unknown RMS_MODE: $RMS_MODE. Must be either 'CI', 'standard' or 'developer'." - exit 1 + return 1 fi julia_status=$? if [ $julia_status -ne 0 ]; then echo "RMS installation failed!" - exit $julia_status + return $julia_status fi echo "Checking if ReactionMechanismSimulator is installed in the current conda environment for Python usage..." From f447705ec867fb756e80274c35b4244255a84c3d Mon Sep 17 00:00:00 2001 From: Richard West Date: Wed, 3 Dec 2025 10:30:22 -0500 Subject: [PATCH 08/18] Rename RMS_MODE to RMS_INSTALLER and use environment variable There was some inconsistency about whether this would be an environment variable or an argument to the script. Hopefully this is clearer. Call it like RMS_INSTALLER=developer source install_rms.sh or set an environment variable first like export RMS_INSTALLER=continuous source install_rms.sh Options are: standard (default) continuous (doesn't pause for confirmation prompts) developer (asks for path to RMS) --- .github/workflows/CI.yml | 2 +- Dockerfile | 2 +- install_rms.sh | 20 +++++++++++--------- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index d30d2e3074..bd0e615aeb 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -55,7 +55,7 @@ env: # RMS branch to use for ReactionMechanismSimulator installation RMS_BRANCH: for_rmg # RMS mode used for install_rms.sh - RMS_MODE: CI + RMS_INSTALLER: continuous # julia parallel pre-compilation leads to race conditions and hangs, so we limit it to run in serial JULIA_NUM_PRECOMPILE_TASKS: 1 diff --git a/Dockerfile b/Dockerfile index 199c5428a1..080c962d94 100644 --- a/Dockerfile +++ b/Dockerfile @@ -77,7 +77,7 @@ RUN make # setting this env variable fixes an issue with Julia precompilation on Windows ENV JULIA_CPU_TARGET="x86-64,haswell,skylake,broadwell,znver1,znver2,znver3,cascadelake,icelake-client,cooperlake,generic" ENV RMS_BRANCH=${RMS_Branch} -ENV RMS_MODE=CI +ENV RMS_INSTALLER=continuous # Usually this is set automatically, but we're not actually running # in an active conda environment when building the Docker so we need to set it manually ENV PYTHON_JULIAPKG_PROJECT="/miniconda/envs/rmg_env/julia_env" diff --git a/install_rms.sh b/install_rms.sh index 9b976a4c0e..60a6bdc71e 100755 --- a/install_rms.sh +++ b/install_rms.sh @@ -3,6 +3,10 @@ # Convenience script to install ReactionMechanismSimulator into an rmg_env conda environment # +# Defaults to "standard" if not already set via RMS_INSTALLER env variable +RMS_INSTALLER=${RMS_INSTALLER:-standard} + + # Check if juliaup is installed if ! command -v juliaup &> /dev/null; then echo "Could not find julia via juliaup. Please install it by running:" @@ -40,9 +44,9 @@ echo "Julia 1.10 binary path: $julia_path" # Get current conda environment name current_env=$(conda info --envs | grep -v '^#' | awk '/\*/{print $1}') -# Ask the user to confirm RMS is being installed in the correct -# conda environemnt. Skip if this is run under CI. -if [ "$RMS_MODE" != "CI" ]; then +# Ask the user to confirm RMS is being installed in the correct conda environemnt. +# Skip confirmation if this is run under continuous mode. +if [ "$RMS_INSTALLER" != "continuous" ]; then echo " Please confirm that you want to install RMS into the current conda environment: '$current_env'" echo " If this is not correct, abort and activate the correct environment before rerunning." read -p "Proceed with installation in '$current_env'? (y/N): " confirm @@ -78,14 +82,12 @@ conda install -y conda-forge::pyjuliacall echo "Environment variables referencing JULIA:" env | grep JULIA -# Defaults to "standard" if no arg provided -RMS_MODE=${1:-standard} # Default RMS branch for standard install RMS_BRANCH=${RMS_BRANCH:-for_rmg} # Ask for local RMS path -if [ "$RMS_MODE" = "developer" ]; then +if [ "$RMS_INSTALLER" = "developer" ]; then echo "Using developer mode for RMS installation" read -e -p "Please enter full path to your local RMS source code: " RMS_PATH if [ ! -d "$RMS_PATH" ]; then @@ -111,7 +113,7 @@ except Exception as e: EOF # Install RMS -if [ "$RMS_MODE" = "standard" ] || [ "$RMS_MODE" = "CI" ]; then +if [ "$RMS_INSTALLER" = "standard" ] || [ "$RMS_INSTALLER" = "continuous" ]; then echo "Installing RMS from branch: $RMS_BRANCH" julia << EOF || echo "RMS standard install error - continuing anyway ¯\\_(ツ)_/¯" using Pkg @@ -129,7 +131,7 @@ if [ "$RMS_MODE" = "standard" ] || [ "$RMS_MODE" = "CI" ]; then exit(1) end EOF -elif [ "$RMS_MODE" = "developer" ]; then +elif [ "$RMS_INSTALLER" = "developer" ]; then echo "Installing RMS in developer mode from path: $RMS_PATH" julia << EOF || echo "RMS developer install error - continuing anyway ¯\\_(ツ)_/¯" using Pkg @@ -148,7 +150,7 @@ elif [ "$RMS_MODE" = "developer" ]; then end EOF else - echo "Unknown RMS_MODE: $RMS_MODE. Must be either 'CI', 'standard' or 'developer'." + echo "Unknown RMS_INSTALLER mode: $RMS_INSTALLER. Must be either 'continuous', 'standard' or 'developer'." return 1 fi From 39597f9fb6b357d5c202a5072702c1aee16a9f05 Mon Sep 17 00:00:00 2001 From: Richard West Date: Wed, 3 Dec 2025 10:40:28 -0500 Subject: [PATCH 09/18] Use RMS_PATH from environment if set. Rather than always ask the user to type in the path, they can set it with a variable before hand. We also check it looks like the right sort of path. --- install_rms.sh | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/install_rms.sh b/install_rms.sh index 60a6bdc71e..f719b3e7b2 100755 --- a/install_rms.sh +++ b/install_rms.sh @@ -86,12 +86,17 @@ env | grep JULIA # Default RMS branch for standard install RMS_BRANCH=${RMS_BRANCH:-for_rmg} -# Ask for local RMS path +# Get local RMS path if in developer mode if [ "$RMS_INSTALLER" = "developer" ]; then echo "Using developer mode for RMS installation" - read -e -p "Please enter full path to your local RMS source code: " RMS_PATH - if [ ! -d "$RMS_PATH" ]; then - echo "ERROR: '$RMS_PATH' is not a valid directory." + # Check if RMS_PATH is set + if [ -z "$RMS_PATH" ]; then + read -e -p "Please enter full path to your local RMS source code: " RMS_PATH + fi + # Validate Project.toml exists + if [ ! -f "$RMS_PATH/Project.toml" ]; then + echo "ERROR: '$RMS_PATH' does not contain a Project.toml file." + echo "Please set RMS_PATH to a valid ReactionMechanismSimulator.jl directory." return 1 fi echo "Using local RMS path: $RMS_PATH" From 9ca9c8923df1652f905fb2081bb61677472b7bc5 Mon Sep 17 00:00:00 2001 From: Richard West Date: Wed, 3 Dec 2025 10:45:28 -0500 Subject: [PATCH 10/18] Reorganize code. Trying to group related bits. --- install_rms.sh | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/install_rms.sh b/install_rms.sh index f719b3e7b2..5dfd4ae2ff 100755 --- a/install_rms.sh +++ b/install_rms.sh @@ -6,7 +6,6 @@ # Defaults to "standard" if not already set via RMS_INSTALLER env variable RMS_INSTALLER=${RMS_INSTALLER:-standard} - # Check if juliaup is installed if ! command -v juliaup &> /dev/null; then echo "Could not find julia via juliaup. Please install it by running:" @@ -82,6 +81,20 @@ conda install -y conda-forge::pyjuliacall echo "Environment variables referencing JULIA:" env | grep JULIA +# Initialize the Julia environment from Python using juliacall +python << EOF || return 1 +import sys +try: + from juliacall import Main + Main.seval('println("Active Julia environment: ", Base.active_project())') + Main.seval('println("Julia load path: ", Base.load_path())') + Main.seval('using Pkg') + Main.seval('Pkg.status()') +except Exception as e: + print("❌ Error while initializing Julia environment:") + print(e) + sys.exit(1) +EOF # Default RMS branch for standard install RMS_BRANCH=${RMS_BRANCH:-for_rmg} @@ -102,20 +115,6 @@ if [ "$RMS_INSTALLER" = "developer" ]; then echo "Using local RMS path: $RMS_PATH" fi -# Initialize the Julia environment from Python using juliacall -python << EOF -import sys -try: - from juliacall import Main - Main.seval('println("Active Julia environment: ", Base.active_project())') - Main.seval('println("Julia load path: ", Base.load_path())') - Main.seval('using Pkg') - Main.seval('Pkg.status()') -except Exception as e: - print("❌ Error while initialize Julia environment:") - print(e) - sys.exit(1) -EOF # Install RMS if [ "$RMS_INSTALLER" = "standard" ] || [ "$RMS_INSTALLER" = "continuous" ]; then From 97a8d0af7ff10d942c6e226ba75ba3b5bb070a4c Mon Sep 17 00:00:00 2001 From: Richard West Date: Wed, 3 Dec 2025 10:45:53 -0500 Subject: [PATCH 11/18] Added documentation to top of install_rms.sh Should also add to the installation instructions. --- install_rms.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/install_rms.sh b/install_rms.sh index 5dfd4ae2ff..f63886073a 100755 --- a/install_rms.sh +++ b/install_rms.sh @@ -2,6 +2,20 @@ # # Convenience script to install ReactionMechanismSimulator into an rmg_env conda environment # +# Usage: +# source install_rms.sh +# Options: +# RMS_INSTALLER environment variable can be set to "continuous", "standard", or "developer" +# "continuous": non-interactive install for CI environments +# "standard": interactive install with user confirmation (default) +# "developer": install from local RMS source code (requires RMS_PATH to be set) +# RMS_PATH environment variable (required if RMS_INSTALLER="developer") +# Path to local ReactionMechanismSimulator.jl source code for developer mode +# RMS_BRANCH environment variable (optional), for "standard" or "continuous" modes +# Git branch of ReactionMechanismSimulator.jl to install (default: for_rmg) +# Example: +# RMS_INSTALLER=developer RMS_PATH=/path/to/ReactionMechanismSimulator.jl source install_rms.sh + # Defaults to "standard" if not already set via RMS_INSTALLER env variable RMS_INSTALLER=${RMS_INSTALLER:-standard} From 00a1150c200f77afd16de1ffc39828b1ab0a8881 Mon Sep 17 00:00:00 2001 From: Richard West Date: Wed, 3 Dec 2025 10:52:41 -0500 Subject: [PATCH 12/18] Reorganize. Put all the variable setting near the top. --- install_rms.sh | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/install_rms.sh b/install_rms.sh index f63886073a..1448843e38 100755 --- a/install_rms.sh +++ b/install_rms.sh @@ -20,6 +20,25 @@ # Defaults to "standard" if not already set via RMS_INSTALLER env variable RMS_INSTALLER=${RMS_INSTALLER:-standard} +# RMS branch for standard or continuous installs. Set to "for_rmg" by default. +RMS_BRANCH=${RMS_BRANCH:-for_rmg} + +# Get local RMS path if in developer mode +if [ "$RMS_INSTALLER" = "developer" ]; then + echo "Using developer mode for RMS installation" + # Check if RMS_PATH is set + if [ -z "$RMS_PATH" ]; then + read -e -p "Please enter full path to your local RMS source code: " RMS_PATH + fi + # Validate Project.toml exists + if [ ! -f "$RMS_PATH/Project.toml" ]; then + echo "ERROR: '$RMS_PATH' does not contain a Project.toml file." + echo "Please set RMS_PATH to a valid ReactionMechanismSimulator.jl directory." + return 1 + fi + echo "Using local RMS path: $RMS_PATH" +fi + # Check if juliaup is installed if ! command -v juliaup &> /dev/null; then echo "Could not find julia via juliaup. Please install it by running:" @@ -110,26 +129,6 @@ except Exception as e: sys.exit(1) EOF -# Default RMS branch for standard install -RMS_BRANCH=${RMS_BRANCH:-for_rmg} - -# Get local RMS path if in developer mode -if [ "$RMS_INSTALLER" = "developer" ]; then - echo "Using developer mode for RMS installation" - # Check if RMS_PATH is set - if [ -z "$RMS_PATH" ]; then - read -e -p "Please enter full path to your local RMS source code: " RMS_PATH - fi - # Validate Project.toml exists - if [ ! -f "$RMS_PATH/Project.toml" ]; then - echo "ERROR: '$RMS_PATH' does not contain a Project.toml file." - echo "Please set RMS_PATH to a valid ReactionMechanismSimulator.jl directory." - return 1 - fi - echo "Using local RMS path: $RMS_PATH" -fi - - # Install RMS if [ "$RMS_INSTALLER" = "standard" ] || [ "$RMS_INSTALLER" = "continuous" ]; then echo "Installing RMS from branch: $RMS_BRANCH" From 738e9488ca4d140d2c734f0b79401ed34411cdce Mon Sep 17 00:00:00 2001 From: Richard West Date: Wed, 3 Dec 2025 10:53:04 -0500 Subject: [PATCH 13/18] Reorganize. Put the "if true" first, and the rest in "else" --- install_rms.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install_rms.sh b/install_rms.sh index 1448843e38..56141ff868 100755 --- a/install_rms.sh +++ b/install_rms.sh @@ -78,7 +78,9 @@ current_env=$(conda info --envs | grep -v '^#' | awk '/\*/{print $1}') # Ask the user to confirm RMS is being installed in the correct conda environemnt. # Skip confirmation if this is run under continuous mode. -if [ "$RMS_INSTALLER" != "continuous" ]; then +if [ "$RMS_INSTALLER" = "continuous" ]; then + echo "Current conda environment: $current_env" +else echo " Please confirm that you want to install RMS into the current conda environment: '$current_env'" echo " If this is not correct, abort and activate the correct environment before rerunning." read -p "Proceed with installation in '$current_env'? (y/N): " confirm @@ -91,8 +93,6 @@ if [ "$RMS_INSTALLER" != "continuous" ]; then return 1 ;; esac -else - echo "Current conda environment: $current_env" fi # Set environment variables for the current environment, for future uses From 1d92bd555509eb6f8e88a31983d8a5d1445621ed Mon Sep 17 00:00:00 2001 From: Richard West Date: Wed, 3 Dec 2025 11:00:39 -0500 Subject: [PATCH 14/18] Fix Julia heredoc escaping issues in install_rms.sh Use quoted heredoc delimiters ('EOF' instead of EOF) to prevent bash from interpreting backslashes and variable substitutions within Julia code blocks. This fixes ParseError caused by escaped quotes being consumed by bash. Also changed to access shell variables via Julia's ENV dict for clarity. Seemed to be a problem only on the macos github runner. Hopefully this works cross platform. --- install_rms.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/install_rms.sh b/install_rms.sh index 56141ff868..11710eff55 100755 --- a/install_rms.sh +++ b/install_rms.sh @@ -132,11 +132,11 @@ EOF # Install RMS if [ "$RMS_INSTALLER" = "standard" ] || [ "$RMS_INSTALLER" = "continuous" ]; then echo "Installing RMS from branch: $RMS_BRANCH" - julia << EOF || echo "RMS standard install error - continuing anyway ¯\\_(ツ)_/¯" + julia << 'EOF' || echo "RMS standard install error - continuing anyway ¯\\_(ツ)_/¯" using Pkg Pkg.activate(ENV["PYTHON_JULIAPKG_PROJECT"]) - Pkg.add(Pkg.PackageSpec(name="ReactionMechanismSimulator", url="https://github.com/ReactionMechanismGenerator/ReactionMechanismSimulator.jl.git", rev="$RMS_BRANCH")) - println(read(joinpath(dirname(pathof(ReactionMechanismSimulator)), \"..\", \"Project.toml\"), String)) + Pkg.add(Pkg.PackageSpec(name="ReactionMechanismSimulator", url="https://github.com/ReactionMechanismGenerator/ReactionMechanismSimulator.jl.git", rev=ENV["RMS_BRANCH"])) + println(read(joinpath(dirname(pathof(ReactionMechanismSimulator)), "..", "Project.toml"), String)) Pkg.instantiate() try @info "Loading RMS" @@ -150,11 +150,11 @@ if [ "$RMS_INSTALLER" = "standard" ] || [ "$RMS_INSTALLER" = "continuous" ]; the EOF elif [ "$RMS_INSTALLER" = "developer" ]; then echo "Installing RMS in developer mode from path: $RMS_PATH" - julia << EOF || echo "RMS developer install error - continuing anyway ¯\\_(ツ)_/¯" + julia << 'EOF' || echo "RMS developer install error - continuing anyway ¯\\_(ツ)_/¯" using Pkg println(ENV["PYTHON_JULIAPKG_PROJECT"]) Pkg.activate(ENV["PYTHON_JULIAPKG_PROJECT"]) - Pkg.develop(path="$RMS_PATH") + Pkg.develop(path=ENV["RMS_PATH"]) Pkg.instantiate() try @info "Loading RMS" From aa1c5d4b255a163a484ef8a2cb58d6e40c599f0f Mon Sep 17 00:00:00 2001 From: Richard West Date: Wed, 3 Dec 2025 14:12:02 -0500 Subject: [PATCH 15/18] Make install_rms.sh compatible with zsh Replace bash-specific `read -p` syntax with portable `printf` + `read` combination that works in both bash and zsh. This fixes "no coprocess" error when sourcing the script in zsh shells. --- install_rms.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/install_rms.sh b/install_rms.sh index 11710eff55..4702042c6e 100755 --- a/install_rms.sh +++ b/install_rms.sh @@ -28,7 +28,8 @@ if [ "$RMS_INSTALLER" = "developer" ]; then echo "Using developer mode for RMS installation" # Check if RMS_PATH is set if [ -z "$RMS_PATH" ]; then - read -e -p "Please enter full path to your local RMS source code: " RMS_PATH + printf "Please enter full path to your local RMS source code: " + read -r RMS_PATH fi # Validate Project.toml exists if [ ! -f "$RMS_PATH/Project.toml" ]; then @@ -83,7 +84,8 @@ if [ "$RMS_INSTALLER" = "continuous" ]; then else echo " Please confirm that you want to install RMS into the current conda environment: '$current_env'" echo " If this is not correct, abort and activate the correct environment before rerunning." - read -p "Proceed with installation in '$current_env'? (y/N): " confirm + printf "Proceed with installation in '%s'? (y/N): " "$current_env" + read confirm case "$confirm" in [yY][eE][sS]|[yY]) echo "✅ Proceeding with installation in '$current_env'" From 123c66c4ad2b0875f0c56e1be4fe0b0c74d87d29 Mon Sep 17 00:00:00 2001 From: Richard West Date: Wed, 3 Dec 2025 15:29:17 -0500 Subject: [PATCH 16/18] Fix detection of conda executable. Previously the (which conda) was returning, on macos, some garbage shell function or alias, leading to this mess: JULIA_CONDAPKG_BACKEND=Null JULIA_CONDAPKG_EXE=conda () { \local cmd="${1-__missing__}" case "$cmd" in (activate | deactivate) __conda_activate "$@" ;; eturn (install | update | upgrade | remove | uninstall) __conda_exe "$@" || __conda_activate reactivate ;; (*) __conda_exe "$@" ;; esac } JULIA_PYTHONCALL_EXE=/Users/rwest/miniconda3/envs/rmg_env15/bin/python PYTHON_JULIAPKG_EXE=/Users/rwest/.juliaup/bin/julia PYTHON_JULIAPKG_PROJECT=/Users/rwest/miniconda3/envs/rmg_env15/julia_env which totally messed up the conda environment, making it impossible to activate. This method now finds the actual conda excutable. --- install_rms.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/install_rms.sh b/install_rms.sh index 4702042c6e..70e10c6f88 100755 --- a/install_rms.sh +++ b/install_rms.sh @@ -99,14 +99,16 @@ fi # Set environment variables for the current environment, for future uses # https://juliapy.github.io/PythonCall.jl/stable/pythoncall/#If-you-already-have-Python-and-required-Python-packages-installed +# Find the actual conda executable (not the shell function) +CONDA_EXE="${CONDA_EXE:-$(conda info --base)/bin/conda}" conda env config vars set JULIA_CONDAPKG_BACKEND=Null -conda env config vars set JULIA_CONDAPKG_EXE=$(which conda) +conda env config vars set JULIA_CONDAPKG_EXE="$CONDA_EXE" conda env config vars set JULIA_PYTHONCALL_EXE=$CONDA_PREFIX/bin/python conda env config vars set PYTHON_JULIAPKG_EXE=$(which julia) conda env config vars set PYTHON_JULIAPKG_PROJECT=$CONDA_PREFIX/julia_env # Also export for current shell/session (needed for Docker/non-interactive use) export JULIA_CONDAPKG_BACKEND=Null -export JULIA_CONDAPKG_EXE="$(which conda)" +export JULIA_CONDAPKG_EXE="$CONDA_EXE" export JULIA_PYTHONCALL_EXE="$CONDA_PREFIX/bin/python" export PYTHON_JULIAPKG_EXE="$(which julia)" export PYTHON_JULIAPKG_PROJECT="$CONDA_PREFIX/julia_env" From ccc0f979644e9df84e50c7d013743dc9e28732e8 Mon Sep 17 00:00:00 2001 From: Richard West Date: Thu, 4 Dec 2025 00:35:14 -0500 Subject: [PATCH 17/18] Add instructions for the new install_rms.sh script. I'm sure could be better written, but this is better than nothing. I also fixed a small bug that sphinx was complaining about in the releaseNotes --- .../rmg/installation/anacondaDeveloper.rst | 19 +++++++++++++++++++ .../source/users/rmg/releaseNotes.rst | 4 ++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/documentation/source/users/rmg/installation/anacondaDeveloper.rst b/documentation/source/users/rmg/installation/anacondaDeveloper.rst index ffe37dc68b..78ca2196cb 100644 --- a/documentation/source/users/rmg/installation/anacondaDeveloper.rst +++ b/documentation/source/users/rmg/installation/anacondaDeveloper.rst @@ -129,6 +129,25 @@ Installation by Source Using Anaconda Environment for Unix-based Systems: Linux which can involve several steps including restarting your terminal or shell. Run the script again, until it finishes installing RMS and all of its dependencies, and reports that ReactionMechanismSimulator is installed. + **Advanced Usage**: + The ``install_rms.sh`` script has options, that can be set as environment variables or variables to the script. + By default, it installs the latest release of the ``for_rmg`` branch of RMS, from https://github.com/ReactionMechanismGenerator/ReactionMechanismSimulator.jl/branches, which is recommended for most users. + To install a different branch (from the same github repository) specify ``RMS_BRANCH``. + The default installation mode is ``standard``, which prompts the user to confirm their conda environment. + In an automated workflow (eg. CI/CD), you may wish to set ``RMS_INSTALLER`` to ``continuous`` to skip the prompt. + If you set ``RMS_INSTALLER`` to ``developer`` then it will link to a local version of RMS, + so you must also specify ``RMS_PATH`` to point to your local clone of the ReactionMechanismSimulator.jl repository. + Exmaple usage: :: + + export RMS_BRANCH=for_rmg + export RMS_INSTALLER=continuous + source install_rms.sh + + or :: + + RMS_INSTALLER=developer RMS_PATH=$HOME/Code/ReactionMechanismSimulator.jl source install_rms.sh + + #. Finally, you can run RMG from any location by typing the following (given that you have prepared the input file as ``input.py`` in the current folder). :: python replace/with/path/to/rmg.py input.py diff --git a/documentation/source/users/rmg/releaseNotes.rst b/documentation/source/users/rmg/releaseNotes.rst index c0702736a9..a6ef6225d1 100644 --- a/documentation/source/users/rmg/releaseNotes.rst +++ b/documentation/source/users/rmg/releaseNotes.rst @@ -8,7 +8,7 @@ RMG-Py Version 3.3.0 ==================== Date: July 10, 2025 -The below list is a summary. For a complete list of all changes, see the `Official Release Page `_. +The below list is a summary. For a complete list of all changes, see the `Official RMG-Py Release Page `_. - Software Improvements - RMG-Py now uses Python 3.9 @@ -33,7 +33,7 @@ RMG-Database Version 3.3.0 ========================== Date: July 10, 2025 -The below list is a summary. For a complete list of all changes, see the `Official Release Page `_. +The below list is a summary. For a complete list of all changes, see the `Official RMG-Database Release Page `_. - Features - Electrochemistry with Lithium From 39c1b65a147b11389ea9097acb76dd416dd9862c Mon Sep 17 00:00:00 2001 From: Richard West Date: Thu, 11 Dec 2025 10:27:17 -0500 Subject: [PATCH 18/18] Format a hyperlink in the installation instructions. Co-authored-by: Jackson Burns <33505528+JacksonBurns@users.noreply.github.com> --- .../source/users/rmg/installation/anacondaDeveloper.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/source/users/rmg/installation/anacondaDeveloper.rst b/documentation/source/users/rmg/installation/anacondaDeveloper.rst index 78ca2196cb..c3a3ee6cd6 100644 --- a/documentation/source/users/rmg/installation/anacondaDeveloper.rst +++ b/documentation/source/users/rmg/installation/anacondaDeveloper.rst @@ -131,7 +131,7 @@ Installation by Source Using Anaconda Environment for Unix-based Systems: Linux **Advanced Usage**: The ``install_rms.sh`` script has options, that can be set as environment variables or variables to the script. - By default, it installs the latest release of the ``for_rmg`` branch of RMS, from https://github.com/ReactionMechanismGenerator/ReactionMechanismSimulator.jl/branches, which is recommended for most users. + By default, it installs the latest release of the ``for_rmg`` branch of RMS, from `the official GitHub fork `_, which is recommended for most users. To install a different branch (from the same github repository) specify ``RMS_BRANCH``. The default installation mode is ``standard``, which prompts the user to confirm their conda environment. In an automated workflow (eg. CI/CD), you may wish to set ``RMS_INSTALLER`` to ``continuous`` to skip the prompt.