Skip to content

Commit 33ffd77

Browse files
committed
Add stories
1 parent 65c8757 commit 33ffd77

File tree

3 files changed

+68
-203
lines changed

3 files changed

+68
-203
lines changed
Lines changed: 30 additions & 202 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
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"
211
import {
312
TemplateVersionEditor,
413
TemplateVersionEditorProps,
514
} from "./TemplateVersionEditor"
615

716
export default {
8-
title: "components/TemplateEditor",
17+
title: "components/TemplateVersionEditor",
918
component: TemplateVersionEditor,
1019
parameters: {
1120
layout: "fullscreen",
@@ -18,211 +27,30 @@ const Template: Story<TemplateVersionEditorProps> = (args: any) => (
1827

1928
export const Example = Template.bind({})
2029
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,
14233
}
14334

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({})
15236

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,
15942
}
16043

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({})
17045

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+
],
22856
}

site/src/components/TemplateVersionEditor/TemplateVersionEditor.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,11 @@ export const TemplateVersionEditor: FC<TemplateVersionEditorProps> = ({
6464
buildLogs,
6565
resources,
6666
}) => {
67-
const [selectedTab, setSelectedTab] = useState(0)
67+
const [selectedTab, setSelectedTab] = useState(() => {
68+
// If resources are provided, show them by default!
69+
// This is for Storybook!
70+
return resources ? 1 : 0
71+
})
6872
const [files, setFiles] = useState(initialFiles)
6973
const [createFileOpen, setCreateFileOpen] = useState(false)
7074
const [deleteFileOpen, setDeleteFileOpen] = useState<File>()

site/src/testHelpers/entities.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import * as Types from "../api/types"
55
import * as TypesGen from "../api/typesGenerated"
66
import range from "lodash/range"
77
import { Permissions } from "xServices/auth/authXService"
8+
import { TemplateVersionFiles } from "util/templateVersion"
89

910
export const MockTemplateDAUResponse: TypesGen.TemplateDAUsResponse = {
1011
entries: [
@@ -270,6 +271,38 @@ export const MockTemplate: TypesGen.Template = {
270271
allow_user_cancel_workspace_jobs: true,
271272
}
272273

274+
export const MockTemplateVersionFiles: TemplateVersionFiles = {
275+
"README.md": "# Example\n\nThis is an example template.",
276+
"main.tf": `// Provides info about the workspace.
277+
data "coder_workspace" "me" {}
278+
279+
// Provides the startup script used to download
280+
// the agent and communicate with Coder.
281+
resource "coder_agent" "dev" {
282+
os = "linux"
283+
arch = "amd64"
284+
}
285+
286+
resource "kubernetes_pod" "main" {
287+
// Ensures that the Pod dies when the workspace shuts down!
288+
count = data.coder_workspace.me.start_count
289+
metadata {
290+
name = "dev-\${data.coder_workspace.me.id}"
291+
}
292+
spec {
293+
container {
294+
image = "ubuntu"
295+
command = ["sh", "-c", coder_agent.main.init_script]
296+
env {
297+
name = "CODER_AGENT_TOKEN"
298+
value = coder_agent.main.token
299+
}
300+
}
301+
}
302+
}
303+
`,
304+
}
305+
273306
export const MockWorkspaceApp: TypesGen.WorkspaceApp = {
274307
id: "test-app",
275308
slug: "test-app",

0 commit comments

Comments
 (0)