dsanderbi commented on issue #4193:
URL: https://github.com/apache/hop/issues/4193#issuecomment-5952787550

   A `lifecycleEnvironment` is:
   `name, purpose, projectName, canvasText, configurationFiles, attributesMap`
   
   `projectName` means it belongs to exactly one project, and 
`configurationFiles` are
   `${PROJECT_HOME}/...` paths in practice. So the record holds nothing user- or
   machine-specific — unlike `projectConfigurations.projectHome`, which is an 
absolute local
   path. Environments are the only project-bound block in `projectsConfig` that 
is already
   portable, and they sit in the one file that can never be shared: 
hop-config.json also
   holds `guiProperties` (DarkMode, fonts, icon size), `azure`, `googleCloud`, 
`dropbox`,
   `gitConfig` and 60+ variables.
   
   @mattcasters — credentials don't live in the environment, they live in the 
config files
   it points to. Sharing an environment shares *which files to load*, not *what 
is in them*.
   
   ## Proposal: two layers, not a move
   
   The environment list currently exists exactly once. Moving it to the project 
would make it
   fully shared and remove per-developer settings. Instead, merge two sources 
when a project
   is opened.
   
   **project-config.json** (committed, same for everyone):
   
   ```json
   {
     "metadataBaseFolder" : "${PROJECT_HOME}/metadata",
     "unitTestsBasePath" : "${PROJECT_HOME}",
     "dataSetsCsvFolder" : "${PROJECT_HOME}/datasets",
     "enforcingExecutionInHome" : true,
     "autoExportMetadataFilename" : "metadata.json",
     "parentProjectName" : "default",
     "config" : {
       "variables" : [ ]
     },
     "lifecycleEnvironments" : [ {
       "name" : "development",
       "purpose" : "Development",
       "configurationFiles" : [ "${PROJECT_HOME}/config/dev.json" ]
     }, {
       "name" : "production",
       "purpose" : "Production",
       "configurationFiles" : [ "${PROJECT_HOME}/config/prod.json" ]
     } ]
   }
   ```
   `projectName` is deliberately absent here: a project's name only exists in 
hop-config.json,
   paired with the local `projectHome`, and everyone is free to register the 
same repository
   under a different name.
   
   **hop-config.json** (local to one developer):
   
   ```json
   "lifecycleEnvironments": [
     { "name": "production", "projectName": "myproject",
       "configurationFiles": 
["${PROJECT_HOME}/.hop/myproject-prod-credentials.json"] },
     { "name": "my-sandbox", "projectName": "myproject",
       "configurationFiles": ["${PROJECT_HOME}/.hop/sandbox.json"] }
   ]
   ```
   (`.hop/` is in `.gitignore`)
   
   **Result on open:**
   
   | Environment   | files loaded                              | source         
|
   
|---------------|-------------------------------------------|----------------|
   | `development` | `dev.json`                                | shared only    
|
   | `production`  | `prod.json`, then `prod-credentials.json` | shared + local 
|
   | `my-sandbox`  | `sandbox.json`                            | local only     
|
   
   ## UI
   
   The environment dialog needs an explicit scope choice on save — *Project 
(shared)* vs
   *Local (this machine only)* — covering two cases:
   
   - creating a new environment: where is it stored
   - adding a config file to a shared environment: must be storable locally and 
never written
     back into the project file
   
   The dialog should also show which entries come from the project and which 
are local.
   
   ## Practical impact
   
   A fresh checkout of a project with ~1000 environments means re-creating 
every environment
   entry by hand, per developer, per machine. Not the file contents — those 
come from the
   repo — but the wiring: pointing `production` at the dev config file doesn't 
error out, it
   just runs against the wrong target.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to