Skip to content

docs: README#44

Open
dubinsky wants to merge 1 commit intoskevetter:mainfrom
dubinsky:documentation
Open

docs: README#44
dubinsky wants to merge 1 commit intoskevetter:mainfrom
dubinsky:documentation

Conversation

@dubinsky
Copy link
Copy Markdown

@dubinsky dubinsky commented Mar 16, 2026

I believe that documentation should be complete enough for a developer that never used Google Cloud to be able to start running workspaces on it without further research :)

  • fix: typos
  • chore: remove unused parameters
  • feat: take provider name into account for environment lookup
  • feat: elevate undocumented Google Cloud key environment variables to provider options

Summary by CodeRabbit

  • New Features

    • Support for supplying Google Cloud credentials via KEY or KEY_FILE environment variables and provider-scoped options (project, zone) for clearer provider-driven workflows.
  • Documentation

    • Rewrote README into a provider-centric guide: Google Cloud setup, ADC and env-var auth, service account instructions, provider options table, CLI workflow, direnv/.envrc examples, and multi-context/name-remap guidance.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 16, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds provider-prefixed environment-variable resolution, removes the context parameter from gcloud.SetupEnvJson and updates callers, changes gcloud credential handling to accept KEY/KEY_FILE envs (writing KEY to a file when provided), and rewrites README to document GCP auth, provider usage, and CLI workflows.

Changes

Cohort / File(s) Summary
Documentation
README.md
Major rewrite: "Getting started" → "Google Cloud Project"; adds Authentication (ADC, env vars, Service Account), Using the Provider, CLI Workflow, direnv/.envrc, per-context provider customization, and env-var examples.
Environment config
pkg/options/options.go
Adds GetEnv(key string) to resolve provider-prefixed env vars (DEVPOD_PROVIDER_<PROVIDER>_<KEY>) with fallback to raw keys; replaces direct os.Getenv reads with GetEnv.
gcloud credential handling
pkg/gcloud/gcloud.go
Removes context parameter from SetupEnvJson() signature; callers (NewClient, GetToken) updated; SetupEnvJson now reads KEY_FILE/KEY via options.GetEnv, writes KEY to a file when provided, and sets GOOGLE_APPLICATION_CREDENTIALS.
Provider CLI help
hack/provider/main.go
Adds PROJECT, ZONE, KEY_FILE, and KEY options to GCloud option group and tweaks ZONE description punctuation.

Sequence Diagram(s)

mermaid
sequenceDiagram
participant CLI as "CLI / Provider\n(options)"
participant Options as "pkg/options\nGetEnv"
participant GCloud as "pkg/gcloud\nSetupEnvJson"
participant FS as "Filesystem\n(write key file)"
participant Env as "Process Env\n(GOOGLE_APPLICATION_CREDENTIALS)"
CLI->>Options: request env value (KEY/KEY_FILE/PROJECT/ZONE)
Options-->>CLI: return resolved value (prefixed or raw)
CLI->>GCloud: NewClient()/GetToken() -> SetupEnvJson()
GCloud->>Options: GetEnv("KEY_FILE"/"KEY"/"GCLOUD_JSON_AUTH")
Options-->>GCloud: resolved credential value
alt KEY provided
GCloud->>FS: write key to temporary file (writeKey)
FS-->>GCloud: path to key file
GCloud->>Env: set GOOGLE_APPLICATION_CREDENTIALS=path
else KEY_FILE provided
GCloud->>Env: set GOOGLE_APPLICATION_CREDENTIALS=KEY_FILE
else fallback
GCloud->>Env: set GOOGLE_APPLICATION_CREDENTIALS=GCLOUD_JSON_AUTH path
end
GCloud->>GCloud: proceed to obtain token using env creds
GCloud-->>CLI: token / client ready

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • skevetter
🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 8.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title 'docs: README' is vague and generic, failing to convey meaningful information about the changeset's primary purpose or scope. Revise the title to be more specific about the main change, e.g., 'docs: expand GCP provider documentation with authentication and CLI workflow guidance' or 'docs: add comprehensive GCP authentication and provider setup documentation'.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@dubinsky dubinsky changed the title doc: README docs: README Mar 16, 2026
@dubinsky dubinsky force-pushed the documentation branch 2 times, most recently from 37ba5c8 to 3d3ea5d Compare March 16, 2026 18:24
@dubinsky
Copy link
Copy Markdown
Author

@skevetter please take a look (unlike https://github.com/skevetter/devpod, this repository does not let me request review...)

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
pkg/options/options.go (1)

103-119: Add a focused regression test for GetEnvPrefixed.

This helper now sits on the option and auth lookup paths, and the default GCLOUD path plus my-gcloud -> MY_GCLOUD normalization are easy to regress. A small table-driven test around getEnv / GetEnvPrefixed would lock the new behavior down.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/options/options.go` around lines 103 - 119, Add a focused table-driven
unit test for getEnv and GetEnvPrefixed that verifies the default provider
lookup and provider-name normalization; write cases that (1) set no
DEVPOD_PROVIDER and ensure GetEnvPrefixed looks up DEVPOD_PROVIDER_GCLOUD_<KEY>,
(2) set DEVPOD_PROVIDER="my-gcloud" and ensure it normalizes to
DEVPOD_PROVIDER_MY_GCLOUD_<KEY>, and (3) verify getEnv returns the direct env
var when present and falls back to GetEnvPrefixed otherwise; in the test mutate
os.Setenv / os.Unsetenv for DEVPOD_PROVIDER and the expected env keys and
restore environment after each case, and assert expected returned strings from
getEnv/GetEnvPrefixed (name the test TestGetEnvPrefixed_TableDriven or similar).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@README.md`:
- Around line 63-66: Update the README text to mention that auth environment
variables are also resolved with the provider-specific prefix: explain that
options.GetEnvPrefixed in pkg/gcloud/gcloud.go looks up KEY_FILE and KEY using
the provider name (e.g., DEVPOD_PROVIDER_MY_GCLOUD_KEY_FILE and
DEVPOD_PROVIDER_MY_GCLOUD_KEY for a provider named "my-gcloud"), and remind CLI
users to set DEVPOD_PROVIDER to the chosen provider name so lookup does not fall
back to GCLOUD; mirror this addition where similar option-prefix examples appear
(around lines 172-178).
- Around line 23-24: Fix multiple copy typos across the README: change "Before
you can you this provider" to "Before you can use this provider", replace
"loose" with "lose" wherever it appears, correct "This provides…" to the
intended phrasing/capitalization (e.g., "This provides…" → "These provide…" or
rephrase to match surrounding context), capitalize "google" to "Google" in the
options table, and correct ".enrc" to ".envrc"; apply these edits at the other
referenced occurrences (lines 72-73, 134-135, 151, and 231-233) to ensure
consistent wording.
- Around line 161-166: The README shows setting DEVPOD_PROVIDER_GCLOUD_PROJECT
and DEVPOD_PROVIDER_GCLOUD_ZONE as plain assignments which are not exported to
child processes; change the example so the variables are exported (or assigned
inline with the command) before running devpod provider add gcloud — update the
two symbols DEVPOD_PROVIDER_GCLOUD_PROJECT and DEVPOD_PROVIDER_GCLOUD_ZONE to
use export (or demonstrate inline assignment) and keep the final command devpod
provider add gcloud as shown.

---

Nitpick comments:
In `@pkg/options/options.go`:
- Around line 103-119: Add a focused table-driven unit test for getEnv and
GetEnvPrefixed that verifies the default provider lookup and provider-name
normalization; write cases that (1) set no DEVPOD_PROVIDER and ensure
GetEnvPrefixed looks up DEVPOD_PROVIDER_GCLOUD_<KEY>, (2) set
DEVPOD_PROVIDER="my-gcloud" and ensure it normalizes to
DEVPOD_PROVIDER_MY_GCLOUD_<KEY>, and (3) verify getEnv returns the direct env
var when present and falls back to GetEnvPrefixed otherwise; in the test mutate
os.Setenv / os.Unsetenv for DEVPOD_PROVIDER and the expected env keys and
restore environment after each case, and assert expected returned strings from
getEnv/GetEnvPrefixed (name the test TestGetEnvPrefixed_TableDriven or similar).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e0e975e9-9d3c-48e4-bb7d-7dccf31d1461

📥 Commits

Reviewing files that changed from the base of the PR and between befea1b and 9d443c8.

📒 Files selected for processing (4)
  • README.md
  • hack/provider/main.go
  • pkg/gcloud/gcloud.go
  • pkg/options/options.go

Comment thread README.md Outdated
Comment thread README.md Outdated
Comment thread README.md
@dubinsky dubinsky force-pushed the documentation branch 2 times, most recently from 5b1d56d to 4219348 Compare March 17, 2026 00:01
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
README.md (1)

67-73: ⚠️ Potential issue | 🟠 Major

Include KEY_FILE in the non-default provider rename example too.

This section currently shows only ..._KEY remapping. The code resolves both KEY_FILE and KEY, so readers should see both renamed forms for custom provider names.

Suggested doc update
 names of the environment variables that supply values for the options
 change accordingly: `DEVPOD_PROVIDER_GCLOUD_KEY` becomes
 `DEVPOD_PROVIDER_MY_GCLOUD_KEY`.
+Likewise, `DEVPOD_PROVIDER_GCLOUD_KEY_FILE` becomes
+`DEVPOD_PROVIDER_MY_GCLOUD_KEY_FILE`.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` around lines 67 - 73, Update the example text around the custom
provider rename (the paragraph using the example command `devpod provider add
gcloud --name my-gcloud`) to show that both KEY and KEY_FILE environment
variables are renamed; explicitly show `DEVPOD_PROVIDER_GCLOUD_KEY` ->
`DEVPOD_PROVIDER_MY_GCLOUD_KEY` and `DEVPOD_PROVIDER_GCLOUD_KEY_FILE` ->
`DEVPOD_PROVIDER_MY_GCLOUD_KEY_FILE`, and adjust the surrounding sentence to
state that both KEY and KEY_FILE are remapped when using a non-default provider
name.
🧹 Nitpick comments (1)
pkg/options/options.go (1)

103-110: Prefer provider-scoped env vars before unprefixed fallbacks.

Current lookup order lets generic env vars override provider-specific ones. That can cause surprising values in multi-provider/context workflows.

Suggested adjustment
 func getEnv(key string) string {
-	val := os.Getenv(key)
-	if val != "" {
-		return val
-	}
-
-	return GetEnvPrefixed(key)
+	if val := GetEnvPrefixed(key); val != "" {
+		return val
+	}
+	return os.Getenv(key)
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/options/options.go` around lines 103 - 110, The getEnv function currently
returns the unprefixed os.Getenv(key) value before falling back to
GetEnvPrefixed(key), which lets generic env vars override provider-scoped ones;
change getEnv to first try the provider-scoped lookup via GetEnvPrefixed(key)
and return it if non-empty, otherwise fall back to os.Getenv(key) so
provider-scoped env vars take precedence; adjust the function body around getEnv
and references to GetEnvPrefixed to preserve the same empty-string semantics.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@README.md`:
- Around line 108-110: The fenced code block in README.md is missing a language
tag which triggers MD040; update the block around the service account example to
include a plain-text language tag (e.g., change the opening fence from ``` to
```text) so the block becomes a text-labeled fenced code block and satisfies the
markdown linter.

---

Duplicate comments:
In `@README.md`:
- Around line 67-73: Update the example text around the custom provider rename
(the paragraph using the example command `devpod provider add gcloud --name
my-gcloud`) to show that both KEY and KEY_FILE environment variables are
renamed; explicitly show `DEVPOD_PROVIDER_GCLOUD_KEY` ->
`DEVPOD_PROVIDER_MY_GCLOUD_KEY` and `DEVPOD_PROVIDER_GCLOUD_KEY_FILE` ->
`DEVPOD_PROVIDER_MY_GCLOUD_KEY_FILE`, and adjust the surrounding sentence to
state that both KEY and KEY_FILE are remapped when using a non-default provider
name.

---

Nitpick comments:
In `@pkg/options/options.go`:
- Around line 103-110: The getEnv function currently returns the unprefixed
os.Getenv(key) value before falling back to GetEnvPrefixed(key), which lets
generic env vars override provider-scoped ones; change getEnv to first try the
provider-scoped lookup via GetEnvPrefixed(key) and return it if non-empty,
otherwise fall back to os.Getenv(key) so provider-scoped env vars take
precedence; adjust the function body around getEnv and references to
GetEnvPrefixed to preserve the same empty-string semantics.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 18d0982c-c865-4db6-a1d5-aeec2933a933

📥 Commits

Reviewing files that changed from the base of the PR and between 9d443c8 and 4219348.

📒 Files selected for processing (4)
  • README.md
  • hack/provider/main.go
  • pkg/gcloud/gcloud.go
  • pkg/options/options.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • pkg/gcloud/gcloud.go

Comment thread README.md Outdated
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
pkg/options/options.go (1)

90-97: ⚠️ Potential issue | 🟡 Minor

Improve missing-env error text to include provider-prefixed key.

fromEnvOrError now resolves via provider-prefixed env first, but the error still only tells users to define raw KEY. On Line 93 this can mislead users who set DEVPOD_PROVIDER_* variables.

Suggested patch
 func fromEnvOrError(name string) (string, error) {
 	val := getEnv(name)
 	if val == "" {
+		providerName := os.Getenv("DEVPOD_PROVIDER")
+		if providerName == "" {
+			providerName = "GCLOUD"
+		}
+		providerName = strings.ToUpper(strings.ReplaceAll(providerName, "-", "_"))
 		return "", fmt.Errorf(
-			"couldn't find option %s in environment, please make sure %s is defined",
+			"couldn't find option %s in environment, please define DEVPOD_PROVIDER_%s_%s (or %s)",
 			name,
-			name,
+			providerName,
+			name,
+			name,
 		)
 	}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/options/options.go` around lines 90 - 97, The error message in
fromEnvOrError currently tells users to define the raw key even though getEnv
resolves provider-prefixed keys first; update fromEnvOrError to compute the
provider-prefixed key (the same lookup used by getEnv) and include that
provider-prefixed environment variable name in the fmt.Errorf message so the
error suggests the correct DEVPOD_PROVIDER_* key (reference functions
fromEnvOrError and getEnv).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@README.md`:
- Around line 75-77: Fix the typos in the service-account section of README.md:
change the phrase "service accounts`s" to "service accounts" in the sentence
that starts "Since this approach uses JSON `key`s for authentication..." and
rename the heading/text "Serviced Accounts for Instances" to "Service Accounts
for Instances" (update both occurrences if duplicated).

---

Outside diff comments:
In `@pkg/options/options.go`:
- Around line 90-97: The error message in fromEnvOrError currently tells users
to define the raw key even though getEnv resolves provider-prefixed keys first;
update fromEnvOrError to compute the provider-prefixed key (the same lookup used
by getEnv) and include that provider-prefixed environment variable name in the
fmt.Errorf message so the error suggests the correct DEVPOD_PROVIDER_* key
(reference functions fromEnvOrError and getEnv).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 23888d60-ed21-4209-9ac8-2b84b5e8b172

📥 Commits

Reviewing files that changed from the base of the PR and between 4219348 and 3cb3e14.

📒 Files selected for processing (4)
  • README.md
  • hack/provider/main.go
  • pkg/gcloud/gcloud.go
  • pkg/options/options.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • hack/provider/main.go

Comment thread README.md
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (1)
README.md (1)

75-78: ⚠️ Potential issue | 🟡 Minor

Fix typo in service account reference.

Line 76 has a malformed backtick/possessive: service accountssshould beservice accounts`.

📝 Suggested fix
 Since this approach uses JSON `key`s for authentication,
-and only `service accounts`s have such keys,
+and only `service accounts` have such keys,
 you need to use a `service account`.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` around lines 75 - 78, Fix the malformed backtick/possessive in the
README by replacing the incorrect inline code string `service accounts`s` with
the correct `service accounts` in the sentence that reads "Since this approach
uses JSON `key`s for authentication, and only `service accounts`s have such
keys, you need to use a `service account`."; update the quoted token `service
accounts`s` to `service accounts` so the backticks and plural form are correct.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@README.md`:
- Around line 75-78: Fix the malformed backtick/possessive in the README by
replacing the incorrect inline code string `service accounts`s` with the correct
`service accounts` in the sentence that reads "Since this approach uses JSON
`key`s for authentication, and only `service accounts`s have such keys, you need
to use a `service account`."; update the quoted token `service accounts`s` to
`service accounts` so the backticks and plural form are correct.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4e8f2c63-a69b-420c-90fb-dde5882ae41f

📥 Commits

Reviewing files that changed from the base of the PR and between 3cb3e14 and fb9532f.

📒 Files selected for processing (4)
  • README.md
  • hack/provider/main.go
  • pkg/gcloud/gcloud.go
  • pkg/options/options.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • hack/provider/main.go
  • pkg/gcloud/gcloud.go

@dubinsky dubinsky force-pushed the documentation branch 3 times, most recently from 1b493a8 to 59c0475 Compare March 17, 2026 17:18
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
README.md (1)

136-152: Consider adding KEY_FILE and KEY options to the table.

The options table documents most provider options but omits KEY_FILE and KEY, which are documented separately in the Environment Variable section. For completeness and discoverability, consider adding them to this table since they are defined as provider options in hack/provider/main.go (lines 227-232).

📝 Suggested addition to options table
 | NAME                      | REQUIRED | DESCRIPTION                                                             | DEFAULT                                              |
 |---------------------------|----------|-------------------------------------------------------------------------|------------------------------------------------------|
 | AGENT_PATH                | false    | The path where to inject the DevPod agent to.                           | /var/lib/toolbox/devpod                              |
 | DISK_IMAGE                | false    | The disk image to use.                                                  | projects/cos-cloud/global/images/cos-101-17162-127-5 |
 | DISK_SIZE                 | false    | The disk size to use (GB).                                              | 40                                                   |
 | INACTIVITY_TIMEOUT        | false    | If defined, will automatically stop the VM after the inactivity period. | 5m                                                   |
 | INJECT_DOCKER_CREDENTIALS | false    | If DevPod should inject docker credentials into the remote host.        | true                                                 |
 | INJECT_GIT_CREDENTIALS    | false    | If DevPod should inject git credentials into the remote host.           | true                                                 |
+| KEY                       | false    | Google Cloud JSON key (content).                                        |                                                      |
+| KEY_FILE                  | false    | Path to the Google Cloud JSON key file.                                 |                                                      |
 | MACHINE_TYPE              | false    | The machine type to use.                                                | c2-standard-4                                        |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` around lines 136 - 152, Add the missing provider options KEY_FILE
and KEY to the options table in README.md so they are discoverable alongside the
other variables; include entries with their REQUIRED status, a short DESCRIPTION
matching how they are used in the provider (e.g., "Path to the private key file
used for SSH" for KEY_FILE and "Private key contents or path used for SSH
authentication" for KEY), and sensible DEFAULT values or leave blank if none,
referencing the existing table format and the same terminology used for other
entries to match the definitions in hack/provider/main.go where KEY_FILE and KEY
are parsed.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@README.md`:
- Around line 136-152: Add the missing provider options KEY_FILE and KEY to the
options table in README.md so they are discoverable alongside the other
variables; include entries with their REQUIRED status, a short DESCRIPTION
matching how they are used in the provider (e.g., "Path to the private key file
used for SSH" for KEY_FILE and "Private key contents or path used for SSH
authentication" for KEY), and sensible DEFAULT values or leave blank if none,
referencing the existing table format and the same terminology used for other
entries to match the definitions in hack/provider/main.go where KEY_FILE and KEY
are parsed.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e49425c3-9a74-40ee-9a19-1bdc3df08093

📥 Commits

Reviewing files that changed from the base of the PR and between fb9532f and 1b493a8.

📒 Files selected for processing (4)
  • README.md
  • hack/provider/main.go
  • pkg/gcloud/gcloud.go
  • pkg/options/options.go

@dubinsky dubinsky force-pushed the documentation branch 3 times, most recently from 8469012 to 7812e45 Compare March 18, 2026 04:23
Enable a developer that never used Google Cloud to start running workspaces on it

- fix: typos
- chore: remove unused parameters
- docs: documentation enhancements
- feat: take provider name into account for environment lookup
- feat: elevate undocumented Google Cloud key environment variables to provider options
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant