Skip to content

Commit 92cc539

Browse files
committed
feat: allow you to override environment file path
1 parent 46af934 commit 92cc539

File tree

12 files changed

+58
-34
lines changed

12 files changed

+58
-34
lines changed

cli/src/main.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ mod rindexer_yaml;
1515
use std::{path::PathBuf, str::FromStr, sync::Once};
1616

1717
use clap::Parser;
18-
use rindexer::{load_env_from_path, manifest::core::ProjectType};
18+
use rindexer::{load_env_from_project_path, manifest::core::ProjectType};
1919

2020
use crate::{
2121
cli_interface::{AddSubcommands, Commands, NewSubcommands, CLI},
@@ -79,7 +79,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
7979
match &cli.command {
8080
Commands::New { subcommand, path } => {
8181
let resolved_path = resolve_path(path).inspect_err(|e| print_error_message(e))?;
82-
load_env_from_path(&resolved_path);
82+
load_env_from_project_path(&resolved_path);
8383

8484
let project_type = match subcommand {
8585
NewSubcommands::NoCode => ProjectType::NoCode,
@@ -90,30 +90,30 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
9090
}
9191
Commands::Add { subcommand, path } => {
9292
let resolved_path = resolve_path(path).inspect_err(|e| print_error_message(e))?;
93-
load_env_from_path(&resolved_path);
93+
load_env_from_project_path(&resolved_path);
9494

9595
match subcommand {
9696
AddSubcommands::Contract => handle_add_contract_command(resolved_path).await,
9797
}
9898
}
9999
Commands::Codegen { subcommand, path } => {
100100
let resolved_path = resolve_path(path).inspect_err(|e| print_error_message(e))?;
101-
load_env_from_path(&resolved_path);
101+
load_env_from_project_path(&resolved_path);
102102
handle_codegen_command(resolved_path, subcommand).await
103103
}
104104
Commands::Start { subcommand, path } => {
105105
let resolved_path = resolve_path(path).inspect_err(|e| print_error_message(e))?;
106-
load_env_from_path(&resolved_path);
106+
load_env_from_project_path(&resolved_path);
107107
start(resolved_path, subcommand).await
108108
}
109109
Commands::Delete { path } => {
110110
let resolved_path = resolve_path(path).inspect_err(|e| print_error_message(e))?;
111-
load_env_from_path(&resolved_path);
111+
load_env_from_project_path(&resolved_path);
112112
handle_delete_command(resolved_path).await
113113
}
114114
Commands::Phantom { subcommand, path } => {
115115
let resolved_path = resolve_path(path).inspect_err(|e| print_error_message(e))?;
116-
load_env_from_path(&resolved_path);
116+
load_env_from_project_path(&resolved_path);
117117
handle_phantom_commands(resolved_path, subcommand).await
118118
}
119119
}

core/src/generator/build.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,6 @@ serde = {{ version = "1.0.194", features = ["derive"] }}
440440
let manifest_path = path.join("rindexer.yaml");
441441
let result = start_rindexer(StartDetails {
442442
manifest_path: &manifest_path,
443-
override_environment_path: None,
444443
indexing_details: if enable_indexer {
445444
Some(IndexingDetails {
446445
registry: register_all_handlers(&manifest_path).await,

core/src/helpers/file.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,15 @@ pub fn create_mod_file(
119119
Ok(())
120120
}
121121

122-
pub fn load_env_from_path(project_path: &Path) {
122+
pub fn load_env_from_project_path(project_path: &Path) {
123123
if from_path(project_path.join(".env")).is_err() {
124124
dotenv().ok();
125125
}
126126
}
127+
128+
pub fn load_env_from_full_path(path: &Path) {
129+
if from_path(path).is_err() {
130+
dotenv().ok();
131+
}
132+
}
133+

core/src/helpers/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ use std::{
1515
use dotenv::dotenv;
1616
use ethers::prelude::{I256, U256};
1717
pub use file::{
18-
create_mod_file, format_all_files_for_project, load_env_from_path, write_file,
19-
CreateModFileError, WriteFileError,
18+
create_mod_file, format_all_files_for_project, load_env_from_project_path, write_file,
19+
CreateModFileError, WriteFileError, load_env_from_full_path
2020
};
2121
use rand::{distributions::Alphanumeric, Rng};
2222

core/src/indexer/no_code.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,6 @@ pub async fn setup_no_code(
8484
if !details.indexing_details.enabled {
8585
return Ok(StartDetails {
8686
manifest_path: details.manifest_path,
87-
// TODO: enable ability to override this for no-code projects
88-
override_environment_path: None,
8987
indexing_details: None,
9088
graphql_details: details.graphql_details,
9189
});
@@ -117,8 +115,6 @@ pub async fn setup_no_code(
117115

118116
Ok(StartDetails {
119117
manifest_path: details.manifest_path,
120-
// TODO: enable ability to override this for no-code projects
121-
override_environment_path: None,
122118
indexing_details: Some(IndexingDetails { registry }),
123119
graphql_details: details.graphql_details,
124120
})

core/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ pub use simple_file_formatters::csv::AsyncCsvAppender;
1616

1717
mod helpers;
1818
pub use helpers::{
19-
format_all_files_for_project, generate_random_id, load_env_from_path, public_read_env_value,
19+
format_all_files_for_project, generate_random_id, load_env_from_project_path, public_read_env_value,
2020
write_file, WriteFileError,
2121
};
2222
mod api;

core/src/manifest/yaml.rs

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,17 @@ use std::{
55
io::{Read, Write},
66
path::{Path, PathBuf},
77
};
8-
8+
use std::str::FromStr;
99
use ethers::types::ValueOrArray;
1010
use regex::{Captures, Regex};
1111
use serde::{Deserialize, Serialize};
1212
use tracing::error;
1313

14-
use crate::{
15-
abi::ABIItem,
16-
helpers::replace_env_variable_to_raw_name,
17-
manifest::{
18-
core::{Manifest, ProjectType},
19-
network::Network,
20-
},
21-
StringOrArray,
22-
};
14+
use crate::{abi::ABIItem, helpers::replace_env_variable_to_raw_name, load_env_from_project_path, manifest::{
15+
core::{Manifest, ProjectType},
16+
network::Network,
17+
}, StringOrArray};
18+
use crate::helpers::load_env_from_full_path;
2319

2420
pub const YAML_CONFIG_NAME: &str = "rindexer.yaml";
2521

@@ -275,12 +271,31 @@ struct ManifestNetworksOnly {
275271
pub networks: Vec<Network>,
276272
}
277273

274+
fn extract_environment_path(contents: &str, file_path: &Path) -> Option<PathBuf> {
275+
let re = Regex::new(r"(?m)^environment_path:\s*(.+)$").unwrap();
276+
re.captures(contents)
277+
.and_then(|cap| cap.get(1))
278+
.map(|m| {
279+
let path_str = m.as_str().trim().replace('\"', ""); // Remove any quotes
280+
let base_dir = file_path.parent().unwrap_or(Path::new(""));
281+
let full_path = base_dir.join(path_str);
282+
full_path.canonicalize().unwrap_or(full_path)
283+
})
284+
}
285+
286+
278287
pub fn read_manifest(file_path: &PathBuf) -> Result<Manifest, ReadManifestError> {
279288
let mut file = File::open(file_path)?;
280289
let mut contents = String::new();
281290

282291
file.read_to_string(&mut contents)?;
283292

293+
let environment_path = extract_environment_path(&contents, file_path);
294+
if let Some(ref path) = environment_path {
295+
println!("Loading environment from path: {:?}", path);
296+
load_env_from_full_path(path);
297+
}
298+
284299
let contents_before_transform = contents.clone();
285300

286301
contents = substitute_env_variables(&contents)?;

core/src/start.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use crate::{
1717
start::{start_indexing, StartIndexingError},
1818
ContractEventDependencies, ContractEventDependenciesMapFromRelationshipsError,
1919
},
20-
load_env_from_path,
20+
load_env_from_project_path,
2121
manifest::{
2222
core::ProjectType,
2323
storage::RelationshipsAndIndexersError,
@@ -32,7 +32,6 @@ pub struct IndexingDetails {
3232

3333
pub struct StartDetails<'a> {
3434
pub manifest_path: &'a PathBuf,
35-
pub override_environment_path: Option<&'a PathBuf>,
3635
pub indexing_details: Option<IndexingDetails>,
3736
pub graphql_details: GraphqlOverrideSettings,
3837
}
@@ -79,9 +78,6 @@ pub async fn start_rindexer(details: StartDetails<'_>) -> Result<(), StartRindex
7978
let project_path = details.manifest_path.parent();
8079
match project_path {
8180
Some(project_path) => {
82-
let env_path =
83-
details.override_environment_path.map(PathBuf::as_path).unwrap_or(project_path);
84-
load_env_from_path(env_path);
8581
let manifest = Arc::new(read_manifest(details.manifest_path)?);
8682

8783
if manifest.project_type != ProjectType::NoCode {

documentation/docs/pages/docs/changelog.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
- feat: expose postgres ToSql trait
1111
- feat: support with_transaction in postgres client
1212
- feat: get the block timestamp from the RPC call (its an option as not all providers expose it)
13-
- feat: allow rust project to override the environment file path
13+
- feat: allow you to override environment file path
1414

1515
### Bug fixes
1616
-------------------------------------------------

documentation/docs/pages/docs/start-building/rust-project-deep-dive/indexers.mdx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -992,7 +992,6 @@ async fn main() {
992992
let manifest_path = path.join("rindexer.yaml");
993993
let result = start_rindexer(StartDetails {
994994
manifest_path: &manifest_path,
995-
override_environment_path: None,
996995
indexing_details: if enable_indexer {
997996
Some(IndexingDetails {
998997
registry: register_all_handlers(&manifest_path).await,

0 commit comments

Comments
 (0)