Rename the 12 unprefixed config env vars to VCELL_* (needs vcell-fluxcd coordination)
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 62/100
Research direction
Start with tier 1: keystore and workingDir are Dockerfile-only, so drop their -D flags and delete their lines from vcell-core/src/main/resources/vcell-legacy-env-names.properties. The other 10 require vcell-fluxcd changes first (add VCELL_* alongside the legacy name, then remove -D, then remove the legacy name) because a rename with the -D flag still present silently resolves empty. Run LegacyEnvironmentNamesTest, which re-derives the table from the Dockerfiles and fails on drift; done when all 12 lines are gone, the test passes, and prod is verified.
Written by the indexing model from the issue text.
Description
Follow-up to #1920, which is additive and deliberately does not do this.
Why
#1920 lets a service read configuration from its environment instead of from a wall of -D flags. Because the deployment supplies configuration under short legacy names, those 81 names sit in vcell-legacy-env-names.properties as a fallback. 12 of them are short and unprefixed:
| legacy | property | target |
|---|---|---|
dburl |
vcell.server.dbConnectURL |
VCELL_SERVER_DBCONNECTURL |
dbuser |
vcell.server.dbUserid |
VCELL_SERVER_DBUSERID |
dbdriver |
vcell.server.dbDriverName |
VCELL_SERVER_DBDRIVERNAME |
serverid |
vcell.server.id |
VCELL_SERVER_ID |
jmsuser |
vcell.jms.user |
VCELL_JMS_USER |
batchuser |
vcell.htc.user |
VCELL_HTC_USER |
batchhost |
vcell.htc.hosts |
VCELL_HTC_HOSTS |
htcnodelist |
vcell.htc.nodelist |
VCELL_HTC_NODELIST |
dbpswdfile |
vcell.db.pswdfile |
VCELL_DB_PSWDFILE |
jmspswdfile |
vcell.jms.pswdfile |
VCELL_JMS_PSWDFILE |
keystore |
vcellapi.keystore.file |
VCELLAPI_KEYSTORE_FILE |
workingDir |
cli.workingDir |
CLI_WORKINGDIR |
A name this generic can collide with something unrelated in the environment. #1920 narrowed the blast radius by making the provider per-service rather than a PropertyLoader default — the desktop client and CLI no longer read the environment at all — but inside the containers the surface remains, and renaming removes it rather than documenting it.
⚠️ Ordering is mandatory, and getting it wrong fails silently
Do not rename an environment variable while its -D flag still exists. The flag expands the old name, so after a rename it expands to empty — and an empty system property is not absent. It wins over the environment, and validateSystemProperties counts it as set.
Demonstrated against the real provider:
A) env renamed, -D flag removed -> resolved = [jdbc:good] (length 9)
B) env renamed, -D flag still present -> resolved = [] (length 0)
In case B the service starts with an empty DB URL and no error. Per variable, the -D flag must go first (or both names must be set during the transition).
We cannot guard this by treating blank as unset: htcnodelist= is legitimately empty in all five overlays.
Safe sequence, per variable
#1920 resolves in this order — system property, then vcell.server.id / vcell_server_id / VCELL_SERVER_ID, then the legacy name — so the modern name wins and each variable can move on its own:
- vcell-fluxcd: add
VCELL_*alongside the legacy name, both set. Behaviourally inert — the-Dflag still wins. - vcell: delete the
-Dflag from the Dockerfile. The provider now resolves the modern name; the legacy name remains as a backstop. - Deploy, verify.
- vcell-fluxcd: remove the legacy name.
- vcell: remove the line from
vcell-legacy-env-names.properties.
Every step is independently reversible, and no step has a window where the value is unreachable.
Precedent already in the tree: kustomize/config/dev/shared.env carries both softwareVersion and VCELL_SOFTWAREVERSION.
Who sets what
Measured against vcell-fluxcd@origin/main (a6feb47) and this repo:
| name | Dockerfile ENV/-D |
docker-compose | fluxcd config/*.env |
fluxcd base/*.yaml env: |
|---|---|---|---|---|
dburl dbuser dbdriver |
✅ | 7 | 5 | — |
serverid jmsuser |
✅ | 8 | 5 | — |
batchuser batchhost htcnodelist |
✅ | 2 | 10 | — |
dbpswdfile jmspswdfile |
✅ | — | — | 5 |
keystore workingDir |
✅ | — | — | — |
Three tiers by coordination cost:
keystore,workingDir— Dockerfile-only. No vcell-fluxcd change at all; can be done unilaterally, and are the natural first move.- The 8
.envkeys — live inkustomize/config/<overlay>/{shared,sched,submit}.envacross dev, island, prod, remote, stage. Base manifests consume them viaenvFrom: configMapRef(whole ConfigMap injected), so a key rename needs no base-yaml edit. dbpswdfile,jmspswdfile— literalenv:entries inkustomize/base/*.yaml(5 files each), so these two do need base-manifest edits.
docker/swarm/docker-compose*.yml also sets several of these. Per [No Swarm, Only K8s], that tree is not a live deployment path, but it should be updated for consistency or explicitly declared stale.
Out of scope
docker/build/batch/Java{SimExe,Preprocessor,Postprocessor}64 build their own -D list on the HPC node and are a separate surface — 6 properties appear only there, and 7 use different env names. In particular vcell.jms.sim.{host,port,restport}.external deliberately point at the internal names because the solver runs inside the cluster; these are intentional and must not be "reconciled".
Done when
- The 12 are
VCELL_*in vcell-fluxcd and in the DockerfileENV/-Dreferences - Their lines are gone from
vcell-core/src/main/resources/vcell-legacy-env-names.properties -
LegacyEnvironmentNamesTestpasses (it re-derives the table from the Dockerfiles and fails on drift) - prod deployed and healthy on the renamed variables
Ideally the remaining 69 aliases follow the same path, after which the table and its test can be deleted outright.
- Dominant language
- Java
- Stars
- 140
- Forks
- 35
- Avg merge
- 11h 28m
- Merged PRs (30d)
- 19
Getting set up
- Ships a Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from virtualcell/vcell
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
virtualcell/vcell#2193 ·
Maintainers usually reply within 1 day
-
Accessibility Requirement Java-based User Interface
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
virtualcell/vcell#2138 ·
Maintainers usually reply within 1 day
-
Accessibility Requirement Java-based
Difficulty 2/5 1-3 hours Newbie friendliness 80/100
virtualcell/vcell#2137 ·
Maintainers usually reply within 1 day
-
Accessibility Requirement User Interface
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
virtualcell/vcell#2135 ·
Maintainers usually reply within 1 day
-
Accessibility Requirement Java-based User Interface
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
virtualcell/vcell#2134 ·
Maintainers usually reply within 1 day
All issues in virtualcell/vcell
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
micronaut-projects/micronaut-redis#844 ·
Maintainers usually reply within 4 days
-
ai-driven-fuzzing bug claude Major
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
linagora/tmail-backend#2862 ·
Maintainers usually reply within 1 day
-
ai-driven-fuzzing bug claude Minor
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
linagora/twake-calendar-side-service#1435 ·
Maintainers usually reply within 1 day
-
Poetry updater rejects OR (||) Python constraints in PyprojectPreparer#update_python_requirementOpenL: python L: ruby:bundler
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
dependabot/dependabot-core#16819 ·
Maintainers usually reply within 1 day
-
[Bug] Auto-trusted serialization allow list skips array component classesPossibly taken @Icesource claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day