Skip to content

Unify the public 'VORTEX_*' environment variable vocabulary #2888

Description

@AlexSkrypnyk

Summary

The VORTEX_* environment variables exposed by the shipped tooling scripts in .vortex/tooling/src use several different words for the same concept. Because drevops/vortex-tooling is a published Composer package and consumer projects set these variables directly in their .env files, CI configuration and hosting dashboards, the vocabulary is a public contract - so the inconsistency cannot be fixed on main without breaking existing sites.

This was found during a codebase convergence audit of main. Every other naming inconsistency surfaced by that audit was converged in place; this one was deliberately deferred here because it needs a deprecation path rather than a rename.

Details

Roughly 70 variables across 42 scripts are affected. The distinct families:

Credential nouns - five spellings for one concept. _PASS (FTP, container registry), _SECRET (Acquia), _SECRET_KEY (S3), _TOKEN (GitHub, JIRA, Diffy), _USER_KEY (New Relic). The identifier side splits the same way: _USER, _KEY (Acquia client id), _ACCESS_KEY (S3), _USER_EMAIL (JIRA).

Host nouns. _HOST (VORTEX_FETCH_DB_FTP_HOST, VORTEX_FETCH_DB_LAGOON_SSH_HOST) versus _HOSTNAME (VORTEX_DEPLOY_LAGOON_INSTANCE_HOSTNAME, VORTEX_TASK_CUSTOM_LAGOON_INSTANCE_HOSTNAME).

Environment nouns. _ENVIRONMENT (VORTEX_FETCH_DB_ENVIRONMENT) versus _ENV (VORTEX_TASK_PURGE_CACHE_ACQUIA_ENV, VORTEX_NOTIFY_DIFFY_SOURCE_ENV).

Lagoon CLI settings. LAGOONCLI fused, with a generic fallback (VORTEX_DEPLOY_LAGOON_LAGOONCLI_PATH falling back to VORTEX_LAGOONCLI_PATH) versus CLI separated, with no fallback (VORTEX_TASK_CUSTOM_LAGOON_CLI_PATH).

A missing namespace segment. VORTEX_PURGE_CACHE_ACQUIA_SKIP drops the TASK_ segment that every sibling variable in the same file carries (VORTEX_TASK_PURGE_CACHE_ACQUIA_ENV, VORTEX_TASK_PURGE_CACHE_ACQUIA_DOMAINS_FILE).

_LOG means two different things. VORTEX_DEPLOY_ARTIFACT_LOG is a file path, but VORTEX_NOTIFY_LOG and VORTEX_PROVISION_LOG are 0/1 flags with separate _LOG_FILE and _LOG_DIR variables for the paths.

Two freshness flags in one namespace. VORTEX_FETCH_DB_FORCE means "ignore the local cached dump" while VORTEX_FETCH_DB_FRESH means "trigger a new remote dump" - both under VORTEX_FETCH_DB*, with nothing in the names to distinguish them.

Directory versus path suffix. _DIR is used for data directories (17 variables) and _PATH for binary locations (4 variables), but VORTEX_LOGIN_CONTAINER_REGISTRY_DOCKER_CONFIG is a directory carrying neither suffix.

Mixed prefix families for one role. The provision subscripts read behaviour knobs under DRUPAL_* (DRUPAL_MIGRATION_SKIP, DRUPAL_SEARCH_INDEX_SKIP) while sibling knobs in the same scripts use VORTEX_* (VORTEX_DB_DIR, VORTEX_PROVISION_OVERRIDE_DB).

Un-prefixed third-party names used as fallbacks. LAGOON_PROJECT, S3_ACCESS_KEY, S3_SECRET_KEY, S3_BUCKET, GITHUB_TOKEN, NEWRELIC_ENABLED, DRUPAL_SITE_EMAIL, DOCKER_CONFIG, WEBROOT, RUN_ON_HOST.

Automation actor defaults. Three spellings of one actor: Deployment Robot (git user), Deployment robot (New Relic user), Deployment Bot (Slack username).

Suggested approach

Any rename needs an alias shim so existing consumer configuration keeps working: read the new name first, fall back to the old one, and emit a deprecation notice when the old name is what actually resolved. That shim can then be dropped in a later major.

Worth deciding up front whether the canonical spelling is chosen per family by majority, or whether the whole vocabulary is redesigned in one pass - the second is more disruptive but avoids a second round of renames later.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status
    BACKLOG

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions