1
1
import { Story } from "@storybook/react"
2
+ import {
3
+ MockTemplate ,
4
+ MockTemplateVersion ,
5
+ MockTemplateVersionFiles ,
6
+ MockWorkspaceBuildLogs ,
7
+ MockWorkspaceResource ,
8
+ MockWorkspaceResource2 ,
9
+ MockWorkspaceResource3 ,
10
+ } from "testHelpers/entities"
2
11
import {
3
12
TemplateVersionEditor ,
4
13
TemplateVersionEditorProps ,
5
14
} from "./TemplateVersionEditor"
6
15
7
16
export default {
8
- title : "components/TemplateEditor " ,
17
+ title : "components/TemplateVersionEditor " ,
9
18
component : TemplateVersionEditor ,
10
19
parameters : {
11
20
layout : "fullscreen" ,
@@ -18,211 +27,30 @@ const Template: Story<TemplateVersionEditorProps> = (args: any) => (
18
27
19
28
export const Example = Template . bind ( { } )
20
29
Example . args = {
21
- initialFiles : {
22
- "README.md" : "# Example\n\nThis is an example template." ,
23
- "main.tf" : `terraform {
24
- required_providers {
25
- coder = {
26
- source = "coder/coder"
27
- version = "0.6.10"
28
- }
29
- docker = {
30
- source = "kreuzwerker/docker"
31
- version = "~> 2.22.0"
32
- }
33
- }
34
- }
35
-
36
- # User parameters
37
-
38
- variable "region" {
39
- type = string
40
- description = "Which region to deploy to."
41
- default = "us-pittsburgh"
42
- validation {
43
- condition = contains(["us-pittsburgh", "eu-helsinki", "ap-sydney"], var.region)
44
- error_message = "Region must be one of us-pittsburg, eu-helsinki, or ap-sydney."
45
- }
46
- }
47
-
48
- variable "dotfiles_uri" {
49
- type = string
50
- description = <<-EOF
51
- Dotfiles repo URI (optional)
52
-
53
- see https://dotfiles.github.io
54
- EOF
55
- default = ""
56
- }
57
-
58
- locals {
59
- // These are Tailscale IP addresses. Ask Dean or Kyle for help.
60
- docker_host = {
61
- "" = "tcp://100.94.74.63:2375"
62
- "us-pittsburgh" = "tcp://100.94.74.63:2375"
63
- "eu-helsinki" = "tcp://100.117.102.81:2375"
64
- "ap-sydney" = "tcp://100.127.2.1:2375"
65
- }
66
- }
67
-
68
- provider "docker" {
69
- host = lookup(local.docker_host, var.region)
70
- }
71
-
72
- provider "coder" {}
73
-
74
- data "coder_workspace" "me" {}
75
-
76
- resource "coder_agent" "dev" {
77
- arch = "amd64"
78
- os = "linux"
79
-
80
- login_before_ready = false
81
- startup_script_timeout = 60
82
- startup_script = <<-EOT
83
- set -ex
84
- # install and start code-server
85
- curl -fsSL https://code-server.dev/install.sh | sh -s -- --version 4.8.3
86
- code-server --auth none --port 13337 &
87
- sudo service docker start
88
- DOTFILES_URI=\${var.dotfiles_uri}
89
- rm -f ~/.personalize.log
90
- if [ -n "$DOTFILES_URI" ]; then
91
- coder dotfiles "$DOTFILES_URI" -y 2>&1 | tee -a ~/.personalize.log
92
- fi
93
- if [ -x ~/personalize ]; then
94
- ~/personalize 2>&1 | tee -a ~/.personalize.log
95
- elif [ -f ~/personalize ]; then
96
- echo "~/personalize is not executable, skipping..." | tee -a ~/.personalize.log
97
- fi
98
- EOT
99
- }
100
-
101
- resource "coder_app" "code-server" {
102
- agent_id = coder_agent.dev.id
103
- slug = "code-server"
104
- display_name = "code-server"
105
- url = "http://localhost:13337/"
106
- icon = "/icon/code.svg"
107
- subdomain = false
108
- share = "owner"
109
-
110
- healthcheck {
111
- url = "http://localhost:13337/healthz"
112
- interval = 3
113
- threshold = 10
114
- }
115
- }
116
-
117
- resource "docker_volume" "home_volume" {
118
- name = "coder-\${data.coder_workspace.me.id}-home"
119
- # Protect the volume from being deleted due to changes in attributes.
120
- lifecycle {
121
- ignore_changes = all
122
- }
123
- # Add labels in Docker to keep track of orphan resources.
124
- labels {
125
- label = "coder.owner"
126
- value = data.coder_workspace.me.owner
127
- }
128
- labels {
129
- label = "coder.owner_id"
130
- value = data.coder_workspace.me.owner_id
131
- }
132
- labels {
133
- label = "coder.workspace_id"
134
- value = data.coder_workspace.me.id
135
- }
136
- # This field becomes outdated if the workspace is renamed but can
137
- # be useful for debugging or cleaning out dangling volumes.
138
- labels {
139
- label = "coder.workspace_name_at_creation"
140
- value = data.coder_workspace.me.name
141
- }
30
+ template : MockTemplate ,
31
+ templateVersion : MockTemplateVersion ,
32
+ initialFiles : MockTemplateVersionFiles ,
142
33
}
143
34
144
- resource "coder_metadata" "home_info" {
145
- resource_id = docker_volume.home_volume.id
146
- item {
147
- key = "🤫🤫🤫<br/><br/>"
148
- value = "❤️❤️❤️"
149
- sensitive = true
150
- }
151
- }
35
+ export const Logs = Template . bind ( { } )
152
36
153
- locals {
154
- container_name = "coder-\${data.coder_workspace.me.owner}-\${lower(data.coder_workspace.me.name)}"
155
- registry_name = "codercom/oss-dogfood"
156
- }
157
- data "docker_registry_image" "dogfood" {
158
- name = "\${local.registry_name}:main"
37
+ Logs . args = {
38
+ template : MockTemplate ,
39
+ templateVersion : MockTemplateVersion ,
40
+ initialFiles : MockTemplateVersionFiles ,
41
+ buildLogs : MockWorkspaceBuildLogs ,
159
42
}
160
43
161
- resource "docker_image" "dogfood" {
162
- name = "\${local.registry_name}@\${data.docker_registry_image.dogfood.sha256_digest}"
163
- pull_triggers = [
164
- data.docker_registry_image.dogfood.sha256_digest,
165
- sha1(join("", [for f in fileset(path.module, "files/*") : filesha1(f)])),
166
- filesha1("Dockerfile"),
167
- ]
168
- keep_locally = true
169
- }
44
+ export const Resources = Template . bind ( { } )
170
45
171
- resource "docker_container" "workspace" {
172
- count = data.coder_workspace.me.start_count
173
- image = docker_image.dogfood.name
174
- name = local.container_name
175
- # Hostname makes the shell more user friendly: coder@my-workspace:~$
176
- hostname = data.coder_workspace.me.name
177
- # Use the docker gateway if the access URL is 127.0.0.1
178
- entrypoint = ["sh", "-c", replace(coder_agent.dev.init_script, "/localhost|127\\.0\\.0\\.1/", "host.docker.internal")]
179
- # CPU limits are unnecessary since Docker will load balance automatically
180
- memory = 32768
181
- runtime = "sysbox-runc"
182
- env = [
183
- "CODER_AGENT_TOKEN=\${coder_agent.dev.token}",
184
- "DATOCMS_API_TOKEN=\${var.datocms_api_token}",
185
- ]
186
- host {
187
- host = "host.docker.internal"
188
- ip = "host-gateway"
189
- }
190
- volumes {
191
- container_path = "/home/coder/"
192
- volume_name = docker_volume.home_volume.name
193
- read_only = false
194
- }
195
- # Add labels in Docker to keep track of orphan resources.
196
- labels {
197
- label = "coder.owner"
198
- value = data.coder_workspace.me.owner
199
- }
200
- labels {
201
- label = "coder.owner_id"
202
- value = data.coder_workspace.me.owner_id
203
- }
204
- labels {
205
- label = "coder.workspace_id"
206
- value = data.coder_workspace.me.id
207
- }
208
- labels {
209
- label = "coder.workspace_name"
210
- value = data.coder_workspace.me.name
211
- }
212
- }
213
-
214
- resource "coder_metadata" "container_info" {
215
- count = data.coder_workspace.me.start_count
216
- resource_id = docker_container.workspace[0].id
217
- item {
218
- key = "memory"
219
- value = docker_container.workspace[0].memory
220
- }
221
- item {
222
- key = "runtime"
223
- value = docker_container.workspace[0].runtime
224
- }
225
- }
226
- ` ,
227
- } ,
46
+ Resources . args = {
47
+ template : MockTemplate ,
48
+ templateVersion : MockTemplateVersion ,
49
+ initialFiles : MockTemplateVersionFiles ,
50
+ buildLogs : MockWorkspaceBuildLogs ,
51
+ resources : [
52
+ MockWorkspaceResource ,
53
+ MockWorkspaceResource2 ,
54
+ MockWorkspaceResource3 ,
55
+ ] ,
228
56
}
0 commit comments