From d14d6eeb336de8212d70c2319118465a96e93907 Mon Sep 17 00:00:00 2001
From: Muhammad Atif Ali <me@matifali.dev>
Date: Wed, 3 Jul 2024 23:06:56 +0300
Subject: [PATCH 01/16] chore!: remove deprecated owner-related fields from
 workspace data source

The owner-related fields (`owner`, `owner_email`, `owner_id`, `owner_name`, `owner_oidc_access_token`, `owner_groups`, `owner_session_token`) in the workspace data source have been deprecated. This commit removes these fields from the codebase.
---
 docs/data-sources/workspace.md |  7 -----
 provider/workspace.go          | 47 ----------------------------------
 provider/workspace_test.go     | 29 +++------------------
 3 files changed, 3 insertions(+), 80 deletions(-)

diff --git a/docs/data-sources/workspace.md b/docs/data-sources/workspace.md
index 8b824c37..4dff8e3f 100644
--- a/docs/data-sources/workspace.md
+++ b/docs/data-sources/workspace.md
@@ -30,13 +30,6 @@ resource "kubernetes_pod" "dev" {
 - `access_url` (String) The access URL of the Coder deployment provisioning this workspace.
 - `id` (String) UUID of the workspace.
 - `name` (String) Name of the workspace.
-- `owner` (String, **Deprecated**: Use `coder_workspace_owner.name` instead.) Username of the workspace owner.
-- `owner_email` (String, **Deprecated**: Use `coder_workspace_owner.email` instead.) Email address of the workspace owner.
-- `owner_groups` (List of String, **Deprecated**: Use `coder_workspace_owner.groups` instead.) List of groups the workspace owner belongs to.
-- `owner_id` (String, **Deprecated**: Use `coder_workspace_owner.id` instead.) UUID of the workspace owner.
-- `owner_name` (String, **Deprecated**: Use `coder_workspace_owner.full_name` instead.) Name of the workspace owner.
-- `owner_oidc_access_token` (String, **Deprecated**: Use `coder_workspace_owner.oidc_access_token` instead.) A valid OpenID Connect access token of the workspace owner. This is only available if the workspace owner authenticated with OpenID Connect. If a valid token cannot be obtained, this value will be an empty string.
-- `owner_session_token` (String, **Deprecated**: Use `coder_workspace_owner.session_token` instead.) Session token for authenticating with a Coder deployment. It is regenerated everytime a workspace is started.
 - `start_count` (Number) A computed count based on `transition` state. If `start`, count will equal 1.
 - `template_id` (String) ID of the workspace's template.
 - `template_name` (String) Name of the workspace's template.
diff --git a/provider/workspace.go b/provider/workspace.go
index 3f667e8f..f52768fa 100644
--- a/provider/workspace.go
+++ b/provider/workspace.go
@@ -122,47 +122,6 @@ func workspaceDataSource() *schema.Resource {
 				Computed:    true,
 				Description: "Either `start` or `stop`. Use this to start/stop resources with `count`.",
 			},
-			"owner": {
-				Type:        schema.TypeString,
-				Computed:    true,
-				Description: "Username of the workspace owner.",
-				Deprecated:  "Use `coder_workspace_owner.name` instead.",
-			},
-			"owner_email": {
-				Type:        schema.TypeString,
-				Computed:    true,
-				Description: "Email address of the workspace owner.",
-				Deprecated:  "Use `coder_workspace_owner.email` instead.",
-			},
-			"owner_id": {
-				Type:        schema.TypeString,
-				Computed:    true,
-				Description: "UUID of the workspace owner.",
-				Deprecated:  "Use `coder_workspace_owner.id` instead.",
-			},
-			"owner_name": {
-				Type:        schema.TypeString,
-				Computed:    true,
-				Description: "Name of the workspace owner.",
-				Deprecated:  "Use `coder_workspace_owner.full_name` instead.",
-			},
-			"owner_oidc_access_token": {
-				Type:     schema.TypeString,
-				Computed: true,
-				Description: "A valid OpenID Connect access token of the workspace owner. " +
-					"This is only available if the workspace owner authenticated with OpenID Connect. " +
-					"If a valid token cannot be obtained, this value will be an empty string.",
-				Deprecated: "Use `coder_workspace_owner.oidc_access_token` instead.",
-			},
-			"owner_groups": {
-				Type: schema.TypeList,
-				Elem: &schema.Schema{
-					Type: schema.TypeString,
-				},
-				Computed:    true,
-				Description: "List of groups the workspace owner belongs to.",
-				Deprecated:  "Use `coder_workspace_owner.groups` instead.",
-			},
 			"id": {
 				Type:        schema.TypeString,
 				Computed:    true,
@@ -173,12 +132,6 @@ func workspaceDataSource() *schema.Resource {
 				Computed:    true,
 				Description: "Name of the workspace.",
 			},
-			"owner_session_token": {
-				Type:        schema.TypeString,
-				Computed:    true,
-				Description: "Session token for authenticating with a Coder deployment. It is regenerated everytime a workspace is started.",
-				Deprecated:  "Use `coder_workspace_owner.session_token` instead.",
-			},
 			"template_id": {
 				Type:        schema.TypeString,
 				Computed:    true,
diff --git a/provider/workspace_test.go b/provider/workspace_test.go
index e53f30d4..12d5210b 100644
--- a/provider/workspace_test.go
+++ b/provider/workspace_test.go
@@ -14,13 +14,6 @@ import (
 )
 
 func TestWorkspace(t *testing.T) {
-	t.Setenv("CODER_WORKSPACE_OWNER", "owner123")
-	t.Setenv("CODER_WORKSPACE_OWNER_ID", "11111111-1111-1111-1111-111111111111")
-	t.Setenv("CODER_WORKSPACE_OWNER_NAME", "Mr Owner")
-	t.Setenv("CODER_WORKSPACE_OWNER_EMAIL", "owner123@example.com")
-	t.Setenv("CODER_WORKSPACE_OWNER_SESSION_TOKEN", "abc123")
-	t.Setenv("CODER_WORKSPACE_OWNER_GROUPS", `["group1", "group2"]`)
-	t.Setenv("CODER_WORKSPACE_OWNER_OIDC_ACCESS_TOKEN", "supersecret")
 	t.Setenv("CODER_WORKSPACE_TEMPLATE_ID", "templateID")
 	t.Setenv("CODER_WORKSPACE_TEMPLATE_NAME", "template123")
 	t.Setenv("CODER_WORKSPACE_TEMPLATE_VERSION", "v1.2.3")
@@ -49,16 +42,9 @@ func TestWorkspace(t *testing.T) {
 				t.Log(value)
 				assert.Equal(t, "https://example.com:8080", attribs["access_url"])
 				assert.Equal(t, "8080", attribs["access_port"])
-				assert.Equal(t, "owner123", attribs["owner"])
-				assert.Equal(t, "11111111-1111-1111-1111-111111111111", attribs["owner_id"])
-				assert.Equal(t, "Mr Owner", attribs["owner_name"])
-				assert.Equal(t, "owner123@example.com", attribs["owner_email"])
-				assert.Equal(t, "group1", attribs["owner_groups.0"])
-				assert.Equal(t, "group2", attribs["owner_groups.1"])
 				assert.Equal(t, "templateID", attribs["template_id"])
 				assert.Equal(t, "template123", attribs["template_name"])
 				assert.Equal(t, "v1.2.3", attribs["template_version"])
-				assert.Equal(t, "supersecret", attribs["owner_oidc_access_token"])
 				return nil
 			},
 		}},
@@ -66,9 +52,6 @@ func TestWorkspace(t *testing.T) {
 }
 
 func TestWorkspace_UndefinedOwner(t *testing.T) {
-	t.Setenv("CODER_WORKSPACE_OWNER", "owner123")
-	t.Setenv("CODER_WORKSPACE_OWNER_SESSION_TOKEN", "abc123")
-	t.Setenv("CODER_WORKSPACE_OWNER_GROUPS", `["group1", "group2"]`)
 	t.Setenv("CODER_WORKSPACE_TEMPLATE_ID", "templateID")
 	t.Setenv("CODER_WORKSPACE_TEMPLATE_NAME", "template123")
 	t.Setenv("CODER_WORKSPACE_TEMPLATE_VERSION", "v1.2.3")
@@ -95,8 +78,9 @@ func TestWorkspace_UndefinedOwner(t *testing.T) {
 				value := attribs["transition"]
 				require.NotNil(t, value)
 				t.Log(value)
-				assert.Equal(t, "owner123", attribs["owner"])
-				assert.Equal(t, "default@example.com", attribs["owner_email"])
+				assert.Equal(t, "templateID", attribs["template_id"])
+				assert.Equal(t, "template123", attribs["template_name"])
+				assert.Equal(t, "v1.2.3", attribs["template_version"])
 				// Skip other asserts
 				return nil
 			},
@@ -107,13 +91,6 @@ func TestWorkspace_UndefinedOwner(t *testing.T) {
 func TestWorkspace_MissingTemplateName(t *testing.T) {
 	t.Setenv("CODER_WORKSPACE_BUILD_ID", "1") // Let's pretend this is a workspace build
 
-	t.Setenv("CODER_WORKSPACE_OWNER", "owner123")
-	t.Setenv("CODER_WORKSPACE_OWNER_ID", "11111111-1111-1111-1111-111111111111")
-	t.Setenv("CODER_WORKSPACE_OWNER_NAME", "Mr Owner")
-	t.Setenv("CODER_WORKSPACE_OWNER_EMAIL", "owner123@example.com")
-	t.Setenv("CODER_WORKSPACE_OWNER_SESSION_TOKEN", "abc123")
-	t.Setenv("CODER_WORKSPACE_OWNER_GROUPS", `["group1", "group2"]`)
-	t.Setenv("CODER_WORKSPACE_OWNER_OIDC_ACCESS_TOKEN", "supersecret")
 	t.Setenv("CODER_WORKSPACE_TEMPLATE_ID", "templateID")
 	// CODER_WORKSPACE_TEMPLATE_NAME is missing
 	t.Setenv("CODER_WORKSPACE_TEMPLATE_VERSION", "v1.2.3")

From 1da8ba7666e806bf6864b8796ba5361dffd30eb4 Mon Sep 17 00:00:00 2001
From: Muhammad Atif Ali <me@matifali.dev>
Date: Wed, 3 Jul 2024 23:14:03 +0300
Subject: [PATCH 02/16] fix integration tests

---
 integration/integration_test.go     | 38 +++++++++--------------------
 integration/workspace-owner/main.tf |  7 ------
 2 files changed, 12 insertions(+), 33 deletions(-)

diff --git a/integration/integration_test.go b/integration/integration_test.go
index 75b35d20..8208d20a 100644
--- a/integration/integration_test.go
+++ b/integration/integration_test.go
@@ -71,25 +71,18 @@ func TestIntegration(t *testing.T) {
 			name:       "test-data-source",
 			minVersion: "v0.0.0",
 			expectedOutput: map[string]string{
-				"provisioner.arch":                  runtime.GOARCH,
-				"provisioner.id":                    `[a-zA-Z0-9-]+`,
-				"provisioner.os":                    runtime.GOOS,
-				"workspace.access_port":             `\d+`,
-				"workspace.access_url":              `https?://\D+:\d+`,
-				"workspace.id":                      `[a-zA-z0-9-]+`,
-				"workspace.name":                    `test-data-source`,
-				"workspace.owner":                   `testing`,
-				"workspace.owner_email":             `testing@coder\.com`,
-				"workspace.owner_groups":            `\[\]`,
-				"workspace.owner_id":                `[a-zA-Z0-9]+`,
-				"workspace.owner_name":              `default`,
-				"workspace.owner_oidc_access_token": `^$`, // TODO: need a test OIDC integration
-				"workspace.owner_session_token":     `[a-zA-Z0-9-]+`,
-				"workspace.start_count":             `1`,
-				"workspace.template_id":             `[a-zA-Z0-9-]+`,
-				"workspace.template_name":           `test-data-source`,
-				"workspace.template_version":        `.+`,
-				"workspace.transition":              `start`,
+				"provisioner.arch":           runtime.GOARCH,
+				"provisioner.id":             `[a-zA-Z0-9-]+`,
+				"provisioner.os":             runtime.GOOS,
+				"workspace.access_port":      `\d+`,
+				"workspace.access_url":       `https?://\D+:\d+`,
+				"workspace.id":               `[a-zA-z0-9-]+`,
+				"workspace.name":             `test-data-source`,
+				"workspace.start_count":      `1`,
+				"workspace.template_id":      `[a-zA-Z0-9-]+`,
+				"workspace.template_name":    `test-data-source`,
+				"workspace.template_version": `.+`,
+				"workspace.transition":       `start`,
 			},
 		},
 		{
@@ -103,13 +96,6 @@ func TestIntegration(t *testing.T) {
 				"workspace.access_url":              `https?://\D+:\d+`,
 				"workspace.id":                      `[a-zA-z0-9-]+`,
 				"workspace.name":                    ``,
-				"workspace.owner":                   `testing`,
-				"workspace.owner_email":             `testing@coder\.com`,
-				"workspace.owner_groups":            `\[\]`,
-				"workspace.owner_id":                `[a-zA-Z0-9]+`,
-				"workspace.owner_name":              `default`,
-				"workspace.owner_oidc_access_token": `^$`, // TODO: need a test OIDC integration
-				"workspace.owner_session_token":     `[a-zA-Z0-9-]+`,
 				"workspace.start_count":             `1`,
 				"workspace.template_id":             `[a-zA-Z0-9-]+`,
 				"workspace.template_name":           `workspace-owner`,
diff --git a/integration/workspace-owner/main.tf b/integration/workspace-owner/main.tf
index 580592cb..adc54202 100644
--- a/integration/workspace-owner/main.tf
+++ b/integration/workspace-owner/main.tf
@@ -26,13 +26,6 @@ locals {
     "workspace.access_url" : data.coder_workspace.me.access_url,
     "workspace.id" : data.coder_workspace.me.id,
     "workspace.name" : data.coder_workspace.me.name,
-    "workspace.owner" : data.coder_workspace.me.owner,
-    "workspace.owner_email" : data.coder_workspace.me.owner_email,
-    "workspace.owner_groups" : jsonencode(data.coder_workspace.me.owner_groups),
-    "workspace.owner_id" : data.coder_workspace.me.owner_id,
-    "workspace.owner_name" : data.coder_workspace.me.owner_name,
-    "workspace.owner_oidc_access_token" : data.coder_workspace.me.owner_oidc_access_token,
-    "workspace.owner_session_token" : data.coder_workspace.me.owner_session_token,
     "workspace.start_count" : tostring(data.coder_workspace.me.start_count),
     "workspace.template_id" : data.coder_workspace.me.template_id,
     "workspace.template_name" : data.coder_workspace.me.template_name,

From 4d5b168265d7842531b90a8e807c4f8916eeb9e2 Mon Sep 17 00:00:00 2001
From: Muhammad Atif Ali <me@matifali.dev>
Date: Wed, 3 Jul 2024 23:19:08 +0300
Subject: [PATCH 03/16] remove remaining instances

---
 integration/test-data-source/main.tf |  7 -------
 provider/workspace.go                | 26 --------------------------
 2 files changed, 33 deletions(-)

diff --git a/integration/test-data-source/main.tf b/integration/test-data-source/main.tf
index 838125a0..cefd1406 100644
--- a/integration/test-data-source/main.tf
+++ b/integration/test-data-source/main.tf
@@ -26,13 +26,6 @@ locals {
     "workspace.access_url" : data.coder_workspace.me.access_url,
     "workspace.id" : data.coder_workspace.me.id,
     "workspace.name" : data.coder_workspace.me.name,
-    "workspace.owner" : data.coder_workspace.me.owner,
-    "workspace.owner_email" : data.coder_workspace.me.owner_email,
-    "workspace.owner_groups" : jsonencode(data.coder_workspace.me.owner_groups),
-    "workspace.owner_id" : data.coder_workspace.me.owner_id,
-    "workspace.owner_name" : data.coder_workspace.me.owner_name,
-    "workspace.owner_oidc_access_token" : data.coder_workspace.me.owner_oidc_access_token,
-    "workspace.owner_session_token" : data.coder_workspace.me.owner_session_token,
     "workspace.start_count" : tostring(data.coder_workspace.me.start_count),
     "workspace.template_id" : data.coder_workspace.me.template_id,
     "workspace.template_name" : data.coder_workspace.me.template_name,
diff --git a/provider/workspace.go b/provider/workspace.go
index f52768fa..2400ebd5 100644
--- a/provider/workspace.go
+++ b/provider/workspace.go
@@ -2,7 +2,6 @@ package provider
 
 import (
 	"context"
-	"encoding/json"
 	"reflect"
 	"strconv"
 
@@ -28,31 +27,6 @@ func workspaceDataSource() *schema.Resource {
 			}
 			_ = rd.Set("start_count", count)
 
-			owner := helpers.OptionalEnvOrDefault("CODER_WORKSPACE_OWNER", "default")
-			_ = rd.Set("owner", owner)
-
-			ownerEmail := helpers.OptionalEnvOrDefault("CODER_WORKSPACE_OWNER_EMAIL", "default@example.com")
-			_ = rd.Set("owner_email", ownerEmail)
-
-			ownerGroupsText := helpers.OptionalEnv("CODER_WORKSPACE_OWNER_GROUPS")
-			var ownerGroups []string
-			if ownerGroupsText != "" {
-				err := json.Unmarshal([]byte(ownerGroupsText), &ownerGroups)
-				if err != nil {
-					return diag.Errorf("couldn't parse owner groups %q", ownerGroupsText)
-				}
-			}
-			_ = rd.Set("owner_groups", ownerGroups)
-
-			ownerName := helpers.OptionalEnvOrDefault("CODER_WORKSPACE_OWNER_NAME", "default")
-			_ = rd.Set("owner_name", ownerName)
-
-			ownerID := helpers.OptionalEnvOrDefault("CODER_WORKSPACE_OWNER_ID", uuid.Nil.String())
-			_ = rd.Set("owner_id", ownerID)
-
-			ownerOIDCAccessToken := helpers.OptionalEnv("CODER_WORKSPACE_OWNER_OIDC_ACCESS_TOKEN")
-			_ = rd.Set("owner_oidc_access_token", ownerOIDCAccessToken)
-
 			name := helpers.OptionalEnvOrDefault("CODER_WORKSPACE_NAME", "default")
 			rd.Set("name", name)
 

From 4dbf571639f89fe207314c19bb1f50ecc2949625 Mon Sep 17 00:00:00 2001
From: Muhammad Atif Ali <me@matifali.dev>
Date: Wed, 3 Jul 2024 23:24:34 +0300
Subject: [PATCH 04/16] Discard changes to integration/workspace-owner/main.tf

---
 integration/workspace-owner/main.tf | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/integration/workspace-owner/main.tf b/integration/workspace-owner/main.tf
index adc54202..580592cb 100644
--- a/integration/workspace-owner/main.tf
+++ b/integration/workspace-owner/main.tf
@@ -26,6 +26,13 @@ locals {
     "workspace.access_url" : data.coder_workspace.me.access_url,
     "workspace.id" : data.coder_workspace.me.id,
     "workspace.name" : data.coder_workspace.me.name,
+    "workspace.owner" : data.coder_workspace.me.owner,
+    "workspace.owner_email" : data.coder_workspace.me.owner_email,
+    "workspace.owner_groups" : jsonencode(data.coder_workspace.me.owner_groups),
+    "workspace.owner_id" : data.coder_workspace.me.owner_id,
+    "workspace.owner_name" : data.coder_workspace.me.owner_name,
+    "workspace.owner_oidc_access_token" : data.coder_workspace.me.owner_oidc_access_token,
+    "workspace.owner_session_token" : data.coder_workspace.me.owner_session_token,
     "workspace.start_count" : tostring(data.coder_workspace.me.start_count),
     "workspace.template_id" : data.coder_workspace.me.template_id,
     "workspace.template_name" : data.coder_workspace.me.template_name,

From c7ce74a9f7c9fb323439fe0f8fb82ef45cf30264 Mon Sep 17 00:00:00 2001
From: Muhammad Atif Ali <me@matifali.dev>
Date: Wed, 3 Jul 2024 23:24:43 +0300
Subject: [PATCH 05/16] Discard changes to integration/test-data-source/main.tf

---
 integration/test-data-source/main.tf | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/integration/test-data-source/main.tf b/integration/test-data-source/main.tf
index cefd1406..838125a0 100644
--- a/integration/test-data-source/main.tf
+++ b/integration/test-data-source/main.tf
@@ -26,6 +26,13 @@ locals {
     "workspace.access_url" : data.coder_workspace.me.access_url,
     "workspace.id" : data.coder_workspace.me.id,
     "workspace.name" : data.coder_workspace.me.name,
+    "workspace.owner" : data.coder_workspace.me.owner,
+    "workspace.owner_email" : data.coder_workspace.me.owner_email,
+    "workspace.owner_groups" : jsonencode(data.coder_workspace.me.owner_groups),
+    "workspace.owner_id" : data.coder_workspace.me.owner_id,
+    "workspace.owner_name" : data.coder_workspace.me.owner_name,
+    "workspace.owner_oidc_access_token" : data.coder_workspace.me.owner_oidc_access_token,
+    "workspace.owner_session_token" : data.coder_workspace.me.owner_session_token,
     "workspace.start_count" : tostring(data.coder_workspace.me.start_count),
     "workspace.template_id" : data.coder_workspace.me.template_id,
     "workspace.template_name" : data.coder_workspace.me.template_name,

From d38e383aff31360607c498553fe84cd4a2380809 Mon Sep 17 00:00:00 2001
From: Muhammad Atif Ali <me@matifali.dev>
Date: Wed, 3 Jul 2024 23:25:12 +0300
Subject: [PATCH 06/16] Discard changes to integration/integration_test.go

---
 integration/integration_test.go | 38 ++++++++++++++++++++++-----------
 1 file changed, 26 insertions(+), 12 deletions(-)

diff --git a/integration/integration_test.go b/integration/integration_test.go
index 8208d20a..75b35d20 100644
--- a/integration/integration_test.go
+++ b/integration/integration_test.go
@@ -71,18 +71,25 @@ func TestIntegration(t *testing.T) {
 			name:       "test-data-source",
 			minVersion: "v0.0.0",
 			expectedOutput: map[string]string{
-				"provisioner.arch":           runtime.GOARCH,
-				"provisioner.id":             `[a-zA-Z0-9-]+`,
-				"provisioner.os":             runtime.GOOS,
-				"workspace.access_port":      `\d+`,
-				"workspace.access_url":       `https?://\D+:\d+`,
-				"workspace.id":               `[a-zA-z0-9-]+`,
-				"workspace.name":             `test-data-source`,
-				"workspace.start_count":      `1`,
-				"workspace.template_id":      `[a-zA-Z0-9-]+`,
-				"workspace.template_name":    `test-data-source`,
-				"workspace.template_version": `.+`,
-				"workspace.transition":       `start`,
+				"provisioner.arch":                  runtime.GOARCH,
+				"provisioner.id":                    `[a-zA-Z0-9-]+`,
+				"provisioner.os":                    runtime.GOOS,
+				"workspace.access_port":             `\d+`,
+				"workspace.access_url":              `https?://\D+:\d+`,
+				"workspace.id":                      `[a-zA-z0-9-]+`,
+				"workspace.name":                    `test-data-source`,
+				"workspace.owner":                   `testing`,
+				"workspace.owner_email":             `testing@coder\.com`,
+				"workspace.owner_groups":            `\[\]`,
+				"workspace.owner_id":                `[a-zA-Z0-9]+`,
+				"workspace.owner_name":              `default`,
+				"workspace.owner_oidc_access_token": `^$`, // TODO: need a test OIDC integration
+				"workspace.owner_session_token":     `[a-zA-Z0-9-]+`,
+				"workspace.start_count":             `1`,
+				"workspace.template_id":             `[a-zA-Z0-9-]+`,
+				"workspace.template_name":           `test-data-source`,
+				"workspace.template_version":        `.+`,
+				"workspace.transition":              `start`,
 			},
 		},
 		{
@@ -96,6 +103,13 @@ func TestIntegration(t *testing.T) {
 				"workspace.access_url":              `https?://\D+:\d+`,
 				"workspace.id":                      `[a-zA-z0-9-]+`,
 				"workspace.name":                    ``,
+				"workspace.owner":                   `testing`,
+				"workspace.owner_email":             `testing@coder\.com`,
+				"workspace.owner_groups":            `\[\]`,
+				"workspace.owner_id":                `[a-zA-Z0-9]+`,
+				"workspace.owner_name":              `default`,
+				"workspace.owner_oidc_access_token": `^$`, // TODO: need a test OIDC integration
+				"workspace.owner_session_token":     `[a-zA-Z0-9-]+`,
 				"workspace.start_count":             `1`,
 				"workspace.template_id":             `[a-zA-Z0-9-]+`,
 				"workspace.template_name":           `workspace-owner`,

From ff0131f1d6027b9b282ce87c6ae87d8d041b2a8d Mon Sep 17 00:00:00 2001
From: Muhammad Atif Ali <me@matifali.dev>
Date: Wed, 3 Jul 2024 23:35:35 +0300
Subject: [PATCH 07/16] fixup!

---
 integration/test-data-source/main.tf | 19 ++++++++++---------
 integration/workspace-owner/main.tf  | 10 +---------
 2 files changed, 11 insertions(+), 18 deletions(-)

diff --git a/integration/test-data-source/main.tf b/integration/test-data-source/main.tf
index 838125a0..bfb1f50b 100644
--- a/integration/test-data-source/main.tf
+++ b/integration/test-data-source/main.tf
@@ -9,9 +9,8 @@ terraform {
   }
 }
 
-// TODO: test coder_external_auth and coder_git_auth
+// TODO: test coder_external_auth
 // data coder_external_auth "me" {}
-// data coder_git_auth "me" {}
 data "coder_provisioner" "me" {}
 data "coder_workspace" "me" {}
 data "coder_workspace_owner" "me" {}
@@ -26,13 +25,15 @@ locals {
     "workspace.access_url" : data.coder_workspace.me.access_url,
     "workspace.id" : data.coder_workspace.me.id,
     "workspace.name" : data.coder_workspace.me.name,
-    "workspace.owner" : data.coder_workspace.me.owner,
-    "workspace.owner_email" : data.coder_workspace.me.owner_email,
-    "workspace.owner_groups" : jsonencode(data.coder_workspace.me.owner_groups),
-    "workspace.owner_id" : data.coder_workspace.me.owner_id,
-    "workspace.owner_name" : data.coder_workspace.me.owner_name,
-    "workspace.owner_oidc_access_token" : data.coder_workspace.me.owner_oidc_access_token,
-    "workspace.owner_session_token" : data.coder_workspace.me.owner_session_token,
+    "workspace_owner.email" : data.coder_workspace_owner.me.email,
+    "workspace_owner.full_name" : data.coder_workspace_owner.me.full_name,
+    "workspace_owner.groups" : jsonencode(data.coder_workspace_owner.me.groups),
+    "workspace_owner.id" : data.coder_workspace_owner.me.id,
+    "workspace_owner.name" : data.coder_workspace_owner.me.name,
+    "workspace_owner.oidc_access_token" : data.coder_workspace_owner.me.oidc_access_token,
+    "workspace_owner.session_token" : data.coder_workspace_owner.me.session_token,
+    "workspace_owner.ssh_private_key" : data.coder_workspace_owner.me.ssh_private_key,
+    "workspace_owner.ssh_public_key" : data.coder_workspace_owner.me.ssh_public_key,
     "workspace.start_count" : tostring(data.coder_workspace.me.start_count),
     "workspace.template_id" : data.coder_workspace.me.template_id,
     "workspace.template_name" : data.coder_workspace.me.template_name,
diff --git a/integration/workspace-owner/main.tf b/integration/workspace-owner/main.tf
index 580592cb..2be11d8e 100644
--- a/integration/workspace-owner/main.tf
+++ b/integration/workspace-owner/main.tf
@@ -9,9 +9,8 @@ terraform {
   }
 }
 
-// TODO: test coder_external_auth and coder_git_auth
+// TODO: test coder_external_auth
 // data coder_external_auth "me" {}
-// data coder_git_auth "me" {}
 data "coder_provisioner" "me" {}
 data "coder_workspace" "me" {}
 data "coder_workspace_owner" "me" {}
@@ -26,13 +25,6 @@ locals {
     "workspace.access_url" : data.coder_workspace.me.access_url,
     "workspace.id" : data.coder_workspace.me.id,
     "workspace.name" : data.coder_workspace.me.name,
-    "workspace.owner" : data.coder_workspace.me.owner,
-    "workspace.owner_email" : data.coder_workspace.me.owner_email,
-    "workspace.owner_groups" : jsonencode(data.coder_workspace.me.owner_groups),
-    "workspace.owner_id" : data.coder_workspace.me.owner_id,
-    "workspace.owner_name" : data.coder_workspace.me.owner_name,
-    "workspace.owner_oidc_access_token" : data.coder_workspace.me.owner_oidc_access_token,
-    "workspace.owner_session_token" : data.coder_workspace.me.owner_session_token,
     "workspace.start_count" : tostring(data.coder_workspace.me.start_count),
     "workspace.template_id" : data.coder_workspace.me.template_id,
     "workspace.template_name" : data.coder_workspace.me.template_name,

From c9168021f16a033e639b195b0370fd7865304f61 Mon Sep 17 00:00:00 2001
From: Muhammad Atif Ali <me@matifali.dev>
Date: Wed, 3 Jul 2024 23:38:27 +0300
Subject: [PATCH 08/16] cleanup

---
 provider/workspace.go | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/provider/workspace.go b/provider/workspace.go
index 2400ebd5..575fd60f 100644
--- a/provider/workspace.go
+++ b/provider/workspace.go
@@ -30,9 +30,6 @@ func workspaceDataSource() *schema.Resource {
 			name := helpers.OptionalEnvOrDefault("CODER_WORKSPACE_NAME", "default")
 			rd.Set("name", name)
 
-			sessionToken := helpers.OptionalEnv("CODER_WORKSPACE_OWNER_SESSION_TOKEN")
-			_ = rd.Set("owner_session_token", sessionToken)
-
 			id := helpers.OptionalEnvOrDefault("CODER_WORKSPACE_ID", uuid.NewString())
 			rd.SetId(id)
 

From f604605ddced53b74af66648225b149224436b31 Mon Sep 17 00:00:00 2001
From: Muhammad Atif Ali <me@matifali.dev>
Date: Wed, 3 Jul 2024 23:46:28 +0300
Subject: [PATCH 09/16] more cleanup

---
 integration/integration_test.go | 38 +++++++++++----------------------
 1 file changed, 12 insertions(+), 26 deletions(-)

diff --git a/integration/integration_test.go b/integration/integration_test.go
index 75b35d20..8208d20a 100644
--- a/integration/integration_test.go
+++ b/integration/integration_test.go
@@ -71,25 +71,18 @@ func TestIntegration(t *testing.T) {
 			name:       "test-data-source",
 			minVersion: "v0.0.0",
 			expectedOutput: map[string]string{
-				"provisioner.arch":                  runtime.GOARCH,
-				"provisioner.id":                    `[a-zA-Z0-9-]+`,
-				"provisioner.os":                    runtime.GOOS,
-				"workspace.access_port":             `\d+`,
-				"workspace.access_url":              `https?://\D+:\d+`,
-				"workspace.id":                      `[a-zA-z0-9-]+`,
-				"workspace.name":                    `test-data-source`,
-				"workspace.owner":                   `testing`,
-				"workspace.owner_email":             `testing@coder\.com`,
-				"workspace.owner_groups":            `\[\]`,
-				"workspace.owner_id":                `[a-zA-Z0-9]+`,
-				"workspace.owner_name":              `default`,
-				"workspace.owner_oidc_access_token": `^$`, // TODO: need a test OIDC integration
-				"workspace.owner_session_token":     `[a-zA-Z0-9-]+`,
-				"workspace.start_count":             `1`,
-				"workspace.template_id":             `[a-zA-Z0-9-]+`,
-				"workspace.template_name":           `test-data-source`,
-				"workspace.template_version":        `.+`,
-				"workspace.transition":              `start`,
+				"provisioner.arch":           runtime.GOARCH,
+				"provisioner.id":             `[a-zA-Z0-9-]+`,
+				"provisioner.os":             runtime.GOOS,
+				"workspace.access_port":      `\d+`,
+				"workspace.access_url":       `https?://\D+:\d+`,
+				"workspace.id":               `[a-zA-z0-9-]+`,
+				"workspace.name":             `test-data-source`,
+				"workspace.start_count":      `1`,
+				"workspace.template_id":      `[a-zA-Z0-9-]+`,
+				"workspace.template_name":    `test-data-source`,
+				"workspace.template_version": `.+`,
+				"workspace.transition":       `start`,
 			},
 		},
 		{
@@ -103,13 +96,6 @@ func TestIntegration(t *testing.T) {
 				"workspace.access_url":              `https?://\D+:\d+`,
 				"workspace.id":                      `[a-zA-z0-9-]+`,
 				"workspace.name":                    ``,
-				"workspace.owner":                   `testing`,
-				"workspace.owner_email":             `testing@coder\.com`,
-				"workspace.owner_groups":            `\[\]`,
-				"workspace.owner_id":                `[a-zA-Z0-9]+`,
-				"workspace.owner_name":              `default`,
-				"workspace.owner_oidc_access_token": `^$`, // TODO: need a test OIDC integration
-				"workspace.owner_session_token":     `[a-zA-Z0-9-]+`,
 				"workspace.start_count":             `1`,
 				"workspace.template_id":             `[a-zA-Z0-9-]+`,
 				"workspace.template_name":           `workspace-owner`,

From f4a4746f0e3654a1eb3089207ea869b7d1220d94 Mon Sep 17 00:00:00 2001
From: Muhammad Atif Ali <me@matifali.dev>
Date: Wed, 3 Jul 2024 23:55:33 +0300
Subject: [PATCH 10/16] fixup!

---
 integration/test-data-source/main.tf | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/integration/test-data-source/main.tf b/integration/test-data-source/main.tf
index bfb1f50b..6d4b85cd 100644
--- a/integration/test-data-source/main.tf
+++ b/integration/test-data-source/main.tf
@@ -25,15 +25,6 @@ locals {
     "workspace.access_url" : data.coder_workspace.me.access_url,
     "workspace.id" : data.coder_workspace.me.id,
     "workspace.name" : data.coder_workspace.me.name,
-    "workspace_owner.email" : data.coder_workspace_owner.me.email,
-    "workspace_owner.full_name" : data.coder_workspace_owner.me.full_name,
-    "workspace_owner.groups" : jsonencode(data.coder_workspace_owner.me.groups),
-    "workspace_owner.id" : data.coder_workspace_owner.me.id,
-    "workspace_owner.name" : data.coder_workspace_owner.me.name,
-    "workspace_owner.oidc_access_token" : data.coder_workspace_owner.me.oidc_access_token,
-    "workspace_owner.session_token" : data.coder_workspace_owner.me.session_token,
-    "workspace_owner.ssh_private_key" : data.coder_workspace_owner.me.ssh_private_key,
-    "workspace_owner.ssh_public_key" : data.coder_workspace_owner.me.ssh_public_key,
     "workspace.start_count" : tostring(data.coder_workspace.me.start_count),
     "workspace.template_id" : data.coder_workspace.me.template_id,
     "workspace.template_name" : data.coder_workspace.me.template_name,

From 28d764d0506b9e50de428e7c0b89ffd8258d6967 Mon Sep 17 00:00:00 2001
From: Muhammad Atif Ali <me@matifali.dev>
Date: Thu, 4 Jul 2024 01:10:43 +0300
Subject: [PATCH 11/16] remove example

---
 examples/data-sources/coder_workspace/data-source.tf       | 6 ------
 examples/data-sources/coder_workspace_owner/data-source.tf | 4 ++--
 2 files changed, 2 insertions(+), 8 deletions(-)
 delete mode 100644 examples/data-sources/coder_workspace/data-source.tf

diff --git a/examples/data-sources/coder_workspace/data-source.tf b/examples/data-sources/coder_workspace/data-source.tf
deleted file mode 100644
index 4898439b..00000000
--- a/examples/data-sources/coder_workspace/data-source.tf
+++ /dev/null
@@ -1,6 +0,0 @@
-data "coder_workspace" "dev" {
-}
-
-resource "kubernetes_pod" "dev" {
-  count = data.coder_workspace.dev.transition == "start" ? 1 : 0
-}
diff --git a/examples/data-sources/coder_workspace_owner/data-source.tf b/examples/data-sources/coder_workspace_owner/data-source.tf
index fc27db6c..221f4668 100644
--- a/examples/data-sources/coder_workspace_owner/data-source.tf
+++ b/examples/data-sources/coder_workspace_owner/data-source.tf
@@ -7,7 +7,7 @@ data "coder_workspace_owner" "me" {}
 resource "coder_agent" "dev" {
   arch = "amd64"
   os   = "linux"
-  dir  = local.repo_dir
+  dir  = "/workspace"
   env = {
     OIDC_TOKEN : data.coder_workspace_owner.me.oidc_access_token,
   }
@@ -21,7 +21,7 @@ resource "coder_env" "git_author_name" {
 }
 
 resource "coder_env" "git_author_email" {
-  agent_id = var.agent_id
+  agent_id = coder_agent.dev.id
   name     = "GIT_AUTHOR_EMAIL"
   value    = data.coder_workspace_owner.me.email
   count    = data.coder_workspace_owner.me.email != "" ? 1 : 0

From 396eaff711bf512c1201beb24b1b564fc9ccf456 Mon Sep 17 00:00:00 2001
From: Muhammad Atif Ali <me@matifali.dev>
Date: Thu, 4 Jul 2024 01:16:03 +0300
Subject: [PATCH 12/16] fixup!

---
 docs/data-sources/workspace_owner.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/docs/data-sources/workspace_owner.md b/docs/data-sources/workspace_owner.md
index 0deff622..250eb685 100644
--- a/docs/data-sources/workspace_owner.md
+++ b/docs/data-sources/workspace_owner.md
@@ -22,7 +22,7 @@ data "coder_workspace_owner" "me" {}
 resource "coder_agent" "dev" {
   arch = "amd64"
   os   = "linux"
-  dir  = local.repo_dir
+  dir  = "/workspace"
   env = {
     OIDC_TOKEN : data.coder_workspace_owner.me.oidc_access_token,
   }
@@ -36,7 +36,7 @@ resource "coder_env" "git_author_name" {
 }
 
 resource "coder_env" "git_author_email" {
-  agent_id = var.agent_id
+  agent_id = coder_agent.dev.id
   name     = "GIT_AUTHOR_EMAIL"
   value    = data.coder_workspace_owner.me.email
   count    = data.coder_workspace_owner.me.email != "" ? 1 : 0

From 4ede0cd9ec89657b9ae0f5504ae0a6f10f219e9d Mon Sep 17 00:00:00 2001
From: Muhammad Atif Ali <me@matifali.dev>
Date: Thu, 4 Jul 2024 01:17:00 +0300
Subject: [PATCH 13/16] Discard changes to
 examples/data-sources/coder_workspace/data-source.tf

---
 examples/data-sources/coder_workspace/data-source.tf | 6 ++++++
 1 file changed, 6 insertions(+)
 create mode 100644 examples/data-sources/coder_workspace/data-source.tf

diff --git a/examples/data-sources/coder_workspace/data-source.tf b/examples/data-sources/coder_workspace/data-source.tf
new file mode 100644
index 00000000..4898439b
--- /dev/null
+++ b/examples/data-sources/coder_workspace/data-source.tf
@@ -0,0 +1,6 @@
+data "coder_workspace" "dev" {
+}
+
+resource "kubernetes_pod" "dev" {
+  count = data.coder_workspace.dev.transition == "start" ? 1 : 0
+}

From 001c185bb4c5ab7d19d846aff2246c197a3604a2 Mon Sep 17 00:00:00 2001
From: Muhammad Atif Ali <me@matifali.dev>
Date: Thu, 4 Jul 2024 01:27:44 +0300
Subject: [PATCH 14/16] elaborate example

---
 docs/data-sources/workspace.md                | 46 +++++++++++++++++--
 docs/data-sources/workspace_owner.md          |  2 -
 .../coder_workspace/data-source.tf            | 46 +++++++++++++++++--
 .../coder_workspace_owner/data-source.tf      |  2 -
 4 files changed, 86 insertions(+), 10 deletions(-)

diff --git a/docs/data-sources/workspace.md b/docs/data-sources/workspace.md
index 4dff8e3f..07174004 100644
--- a/docs/data-sources/workspace.md
+++ b/docs/data-sources/workspace.md
@@ -13,11 +13,51 @@ Use this data source to get information for the active workspace build.
 ## Example Usage
 
 ```terraform
-data "coder_workspace" "dev" {
+provider "coder" {}
+  
+provider "docker" {}
+  
+data "coder_workspace" "me" {}
+
+data "coder_workspace_owner" "me" {}
+
+resource "coder_agent" "dev" {
+  arch = "amd64"
+  os   = "linux"
+  dir  = "/workspace"
 }
 
-resource "kubernetes_pod" "dev" {
-  count = data.coder_workspace.dev.transition == "start" ? 1 : 0
+resource "docker_container" "workspace" {
+  count = data.coder_workspace.me.start_count
+  image = docker_image.main.name
+  # Uses lower() to avoid Docker restriction on container names.
+  name = "coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.name)}"
+  # Hostname makes the shell more user friendly: coder@my-workspace:~$
+  hostname = data.coder_workspace.me.name
+  # Use the docker gateway if the access URL is 127.0.0.1
+  entrypoint = ["sh", "-c", replace(coder_agent.main.init_script, "/localhost|127\\.0\\.0\\.1/", "host.docker.internal")]
+  env        = ["CODER_AGENT_TOKEN=${coder_agent.main.token}"]
+  host {
+    host = "host.docker.internal"
+    ip   = "host-gateway"
+  }
+  # Add labels in Docker to keep track of orphan resources.
+  labels {
+    label = "coder.owner"
+    value = data.coder_workspace_owner.me.name
+  }
+  labels {
+    label = "coder.owner_id"
+    value = data.coder_workspace_owner.me.id
+  }
+  labels {
+    label = "coder.workspace_id"
+    value = data.coder_workspace.me.id
+  }
+  labels {
+    label = "coder.workspace_name"
+    value = data.coder_workspace.me.name
+  }
 }
 ```
 
diff --git a/docs/data-sources/workspace_owner.md b/docs/data-sources/workspace_owner.md
index 250eb685..1c64ea50 100644
--- a/docs/data-sources/workspace_owner.md
+++ b/docs/data-sources/workspace_owner.md
@@ -15,8 +15,6 @@ Use this data source to fetch information about the workspace owner.
 ```terraform
 provider "coder" {}
 
-data "coder_workspace" "me" {}
-
 data "coder_workspace_owner" "me" {}
 
 resource "coder_agent" "dev" {
diff --git a/examples/data-sources/coder_workspace/data-source.tf b/examples/data-sources/coder_workspace/data-source.tf
index 4898439b..dc9ec098 100644
--- a/examples/data-sources/coder_workspace/data-source.tf
+++ b/examples/data-sources/coder_workspace/data-source.tf
@@ -1,6 +1,46 @@
-data "coder_workspace" "dev" {
+provider "coder" {}
+  
+provider "docker" {}
+  
+data "coder_workspace" "me" {}
+
+data "coder_workspace_owner" "me" {}
+
+resource "coder_agent" "dev" {
+  arch = "amd64"
+  os   = "linux"
+  dir  = "/workspace"
 }
 
-resource "kubernetes_pod" "dev" {
-  count = data.coder_workspace.dev.transition == "start" ? 1 : 0
+resource "docker_container" "workspace" {
+  count = data.coder_workspace.me.start_count
+  image = docker_image.main.name
+  # Uses lower() to avoid Docker restriction on container names.
+  name = "coder-${data.coder_workspace_owner.me.name}-${lower(data.coder_workspace.me.name)}"
+  # Hostname makes the shell more user friendly: coder@my-workspace:~$
+  hostname = data.coder_workspace.me.name
+  # Use the docker gateway if the access URL is 127.0.0.1
+  entrypoint = ["sh", "-c", replace(coder_agent.main.init_script, "/localhost|127\\.0\\.0\\.1/", "host.docker.internal")]
+  env        = ["CODER_AGENT_TOKEN=${coder_agent.main.token}"]
+  host {
+    host = "host.docker.internal"
+    ip   = "host-gateway"
+  }
+  # Add labels in Docker to keep track of orphan resources.
+  labels {
+    label = "coder.owner"
+    value = data.coder_workspace_owner.me.name
+  }
+  labels {
+    label = "coder.owner_id"
+    value = data.coder_workspace_owner.me.id
+  }
+  labels {
+    label = "coder.workspace_id"
+    value = data.coder_workspace.me.id
+  }
+  labels {
+    label = "coder.workspace_name"
+    value = data.coder_workspace.me.name
+  }
 }
diff --git a/examples/data-sources/coder_workspace_owner/data-source.tf b/examples/data-sources/coder_workspace_owner/data-source.tf
index 221f4668..cad73e1e 100644
--- a/examples/data-sources/coder_workspace_owner/data-source.tf
+++ b/examples/data-sources/coder_workspace_owner/data-source.tf
@@ -1,7 +1,5 @@
 provider "coder" {}
 
-data "coder_workspace" "me" {}
-
 data "coder_workspace_owner" "me" {}
 
 resource "coder_agent" "dev" {

From 7337eac84249a211e52d9af9b64bcb647b7c0bee Mon Sep 17 00:00:00 2001
From: Muhammad Atif Ali <me@matifali.dev>
Date: Thu, 4 Jul 2024 13:24:42 +0300
Subject: [PATCH 15/16] fmt

---
 examples/data-sources/coder_workspace/data-source.tf | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/examples/data-sources/coder_workspace/data-source.tf b/examples/data-sources/coder_workspace/data-source.tf
index dc9ec098..8eb4a8f8 100644
--- a/examples/data-sources/coder_workspace/data-source.tf
+++ b/examples/data-sources/coder_workspace/data-source.tf
@@ -1,7 +1,7 @@
 provider "coder" {}
-  
+
 provider "docker" {}
-  
+
 data "coder_workspace" "me" {}
 
 data "coder_workspace_owner" "me" {}

From 025afb1d55eb973a5dcff044c183531a9f90271d Mon Sep 17 00:00:00 2001
From: Muhammad Atif Ali <me@matifali.dev>
Date: Thu, 4 Jul 2024 13:27:09 +0300
Subject: [PATCH 16/16] `make gen`

---
 docs/data-sources/workspace.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/docs/data-sources/workspace.md b/docs/data-sources/workspace.md
index 07174004..26396ba1 100644
--- a/docs/data-sources/workspace.md
+++ b/docs/data-sources/workspace.md
@@ -14,9 +14,9 @@ Use this data source to get information for the active workspace build.
 
 ```terraform
 provider "coder" {}
-  
+
 provider "docker" {}
-  
+
 data "coder_workspace" "me" {}
 
 data "coder_workspace_owner" "me" {}