feat: add Coder Tasks example template (#182)
## Description This PR adds an example template for Coder Tasks under "Coder Labs." Coder Labs will be a place where we can post examples, templates, modules, etc with fewer guarantees as they are designed for example/reference use and not production. --- ## Type of Change - [x] New template - [ ] New module - [ ] Bug fix - [ ] Feature/enhancement - [ ] Documentation - [ ] Other --- If you are in dogfood, you can try the template here: https://dev.coder.com/templates/coder/tasks-realworld
This commit is contained in:
parent
578e2131f7
commit
9da899ee66
308
package-lock.json
generated
Normal file
308
package-lock.json
generated
Normal file
@ -0,0 +1,308 @@
|
|||||||
|
{
|
||||||
|
"name": "registry",
|
||||||
|
"lockfileVersion": 3,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"name": "registry",
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/bun": "^1.2.9",
|
||||||
|
"bun-types": "^1.1.23",
|
||||||
|
"gray-matter": "^4.0.3",
|
||||||
|
"marked": "^12.0.2",
|
||||||
|
"prettier": "^3.3.3",
|
||||||
|
"prettier-plugin-sh": "^0.13.1",
|
||||||
|
"prettier-plugin-terraform-formatter": "^1.2.1"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"typescript": "^5.5.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@types/bun": {
|
||||||
|
"version": "1.2.18",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.2.18.tgz",
|
||||||
|
"integrity": "sha512-Xf6RaWVheyemaThV0kUfaAUvCNokFr+bH8Jxp+tTZfx7dAPA8z9ePnP9S9+Vspzuxxx9JRAXhnyccRj3GyCMdQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"bun-types": "1.2.18"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@types/node": {
|
||||||
|
"version": "24.0.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.10.tgz",
|
||||||
|
"integrity": "sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"undici-types": "~7.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@types/react": {
|
||||||
|
"version": "19.1.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz",
|
||||||
|
"integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
|
"dependencies": {
|
||||||
|
"csstype": "^3.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/argparse": {
|
||||||
|
"version": "1.0.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
|
||||||
|
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"sprintf-js": "~1.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/bun-types": {
|
||||||
|
"version": "1.2.18",
|
||||||
|
"resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.2.18.tgz",
|
||||||
|
"integrity": "sha512-04+Eha5NP7Z0A9YgDAzMk5PHR16ZuLVa83b26kH5+cp1qZW4F6FmAURngE7INf4tKOvCE69vYvDEwoNl1tGiWw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/node": "*"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@types/react": "^19"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/csstype": {
|
||||||
|
"version": "3.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
|
||||||
|
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"node_modules/esprima": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
|
||||||
|
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "BSD-2-Clause",
|
||||||
|
"bin": {
|
||||||
|
"esparse": "bin/esparse.js",
|
||||||
|
"esvalidate": "bin/esvalidate.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/extend-shallow": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"is-extendable": "^0.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/gray-matter": {
|
||||||
|
"version": "4.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz",
|
||||||
|
"integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"js-yaml": "^3.13.1",
|
||||||
|
"kind-of": "^6.0.2",
|
||||||
|
"section-matter": "^1.0.0",
|
||||||
|
"strip-bom-string": "^1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/is-extendable": {
|
||||||
|
"version": "0.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
|
||||||
|
"integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/js-yaml": {
|
||||||
|
"version": "3.14.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
|
||||||
|
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"argparse": "^1.0.7",
|
||||||
|
"esprima": "^4.0.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"js-yaml": "bin/js-yaml.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/kind-of": {
|
||||||
|
"version": "6.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
|
||||||
|
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/marked": {
|
||||||
|
"version": "12.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz",
|
||||||
|
"integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"bin": {
|
||||||
|
"marked": "bin/marked.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 18"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mvdan-sh": {
|
||||||
|
"version": "0.10.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/mvdan-sh/-/mvdan-sh-0.10.1.tgz",
|
||||||
|
"integrity": "sha512-kMbrH0EObaKmK3nVRKUIIya1dpASHIEusM13S4V1ViHFuxuNxCo+arxoa6j/dbV22YBGjl7UKJm9QQKJ2Crzhg==",
|
||||||
|
"deprecated": "See https://github.com/mvdan/sh/issues/1145",
|
||||||
|
"dev": true,
|
||||||
|
"license": "BSD-3-Clause"
|
||||||
|
},
|
||||||
|
"node_modules/prettier": {
|
||||||
|
"version": "3.6.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
|
||||||
|
"integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"bin": {
|
||||||
|
"prettier": "bin/prettier.cjs"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/prettier/prettier?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/prettier-plugin-sh": {
|
||||||
|
"version": "0.13.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/prettier-plugin-sh/-/prettier-plugin-sh-0.13.1.tgz",
|
||||||
|
"integrity": "sha512-ytMcl1qK4s4BOFGvsc9b0+k9dYECal7U29bL/ke08FEUsF/JLN0j6Peo0wUkFDG4y2UHLMhvpyd6Sd3zDXe/eg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"mvdan-sh": "^0.10.1",
|
||||||
|
"sh-syntax": "^0.4.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://opencollective.com/unts"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"prettier": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/prettier-plugin-terraform-formatter": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/prettier-plugin-terraform-formatter/-/prettier-plugin-terraform-formatter-1.2.1.tgz",
|
||||||
|
"integrity": "sha512-rdzV61Bs/Ecnn7uAS/vL5usTX8xUWM+nQejNLZxt3I1kJH5WSeLEmq7LYu1wCoEQF+y7Uv1xGvPRfl3lIe6+tA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"peerDependencies": {
|
||||||
|
"prettier": ">= 1.16.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"prettier": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/section-matter": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"extend-shallow": "^2.0.1",
|
||||||
|
"kind-of": "^6.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/sh-syntax": {
|
||||||
|
"version": "0.4.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/sh-syntax/-/sh-syntax-0.4.2.tgz",
|
||||||
|
"integrity": "sha512-/l2UZ5fhGZLVZa16XQM9/Vq/hezGGbdHeVEA01uWjOL1+7Ek/gt6FquW0iKKws4a9AYPYvlz6RyVvjh3JxOteg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"tslib": "^2.6.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://opencollective.com/unts"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/sprintf-js": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "BSD-3-Clause"
|
||||||
|
},
|
||||||
|
"node_modules/strip-bom-string": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/tslib": {
|
||||||
|
"version": "2.8.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
|
||||||
|
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "0BSD"
|
||||||
|
},
|
||||||
|
"node_modules/typescript": {
|
||||||
|
"version": "5.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
|
||||||
|
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"peer": true,
|
||||||
|
"bin": {
|
||||||
|
"tsc": "bin/tsc",
|
||||||
|
"tsserver": "bin/tsserver"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.17"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/undici-types": {
|
||||||
|
"version": "7.8.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz",
|
||||||
|
"integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
25
registry/coder-labs/.images/avatar.svg
Normal file
25
registry/coder-labs/.images/avatar.svg
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<rect width="512" height="512" fill="#090B0B"/>
|
||||||
|
<path d="M427.787 172H296.889V188.277H427.787V172Z" fill="white"/>
|
||||||
|
<path d="M427.787 190.878H296.889V207.154H427.787V190.878Z" fill="white"/>
|
||||||
|
<path d="M427.787 209.74H296.889V226.017H427.787V209.74Z" fill="white"/>
|
||||||
|
<path d="M427.787 228.618H296.889V244.895H427.787V228.618Z" fill="white"/>
|
||||||
|
<path d="M427.787 247.496H296.889V263.773H427.787V247.496Z" fill="white"/>
|
||||||
|
<path d="M428 266.359H297.102V282.636H428V266.359Z" fill="white"/>
|
||||||
|
<path d="M427.68 285.237H296.783V301.513H427.68V285.237Z" fill="white"/>
|
||||||
|
<path d="M427.68 304.115H296.783V320.391H427.68V304.115Z" fill="white"/>
|
||||||
|
<path d="M427.893 322.993H296.996V339.269H427.893V322.993Z" fill="white"/>
|
||||||
|
<path d="M245.778 172H116.325V188.277H245.778V172Z" fill="white"/>
|
||||||
|
<path d="M262.024 190.878H100.17V207.154H262.024V190.878Z" fill="white"/>
|
||||||
|
<path d="M262.024 304.115H100.17V320.391H262.024V304.115Z" fill="white"/>
|
||||||
|
<path d="M245.747 322.993H116.325V339.269H245.747V322.993Z" fill="white"/>
|
||||||
|
<path d="M138.839 247.496H84V263.773H138.839V247.496Z" fill="white"/>
|
||||||
|
<path d="M148.665 266.374H84V282.651H148.665V266.374Z" fill="white"/>
|
||||||
|
<path d="M278.088 266.374H213.422V282.651H278.088V266.374Z" fill="white"/>
|
||||||
|
<path d="M278.087 285.237H207.17V301.513H278.087V285.237Z" fill="white"/>
|
||||||
|
<path d="M156.652 285.237H84V301.513H156.652V285.237Z" fill="white"/>
|
||||||
|
<path d="M156.652 209.74H84V226.017H156.652V209.74Z" fill="white"/>
|
||||||
|
<path d="M278.118 209.74H207.17V226.017H278.118V209.74Z" fill="white"/>
|
||||||
|
<path d="M148.665 228.618H84V244.895H148.665V228.618Z" fill="white"/>
|
||||||
|
<path d="M278.118 228.618H213.392V244.895H278.118V228.618Z" fill="white"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.8 KiB |
BIN
registry/coder-labs/.images/tasks-screenshot.png
Normal file
BIN
registry/coder-labs/.images/tasks-screenshot.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 MiB |
5
registry/coder-labs/.images/tasks.svg
Normal file
5
registry/coder-labs/.images/tasks.svg
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<svg width="120" height="120" viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M66.1403 24.9315H106.4V33.5714H14.6005V99.3601H106.4V33.5714L115 33.5682V107.997L14.591 108V99.3695H6V24.9409H14.0531V24.9346L57.5399 24.9315V12H66.1403V24.9315Z" fill="white"/>
|
||||||
|
<path d="M77.94 57.3044V70.2485H69.3521V57.3044H77.94Z" fill="white"/>
|
||||||
|
<path d="M52.1701 57.3044V70.2485H43.5822V57.3044H52.1701Z" fill="white"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 452 B |
15
registry/coder-labs/README.md
Normal file
15
registry/coder-labs/README.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
display_name: Coder Labs
|
||||||
|
bio: Collection of example templates and modules for Coder. Designed for reference, not production use.
|
||||||
|
github: coder
|
||||||
|
avatar: ./.images/avatar.svg
|
||||||
|
linkedin: https://www.linkedin.com/company/coderhq
|
||||||
|
website: https://discord.gg/coder
|
||||||
|
status: community
|
||||||
|
---
|
||||||
|
|
||||||
|
å
|
||||||
|
|
||||||
|
# Coder Labs
|
||||||
|
|
||||||
|
Collection of example templates and modules for Coder. Designed for reference, not production use.
|
||||||
87
registry/coder-labs/templates/tasks-docker/README.md
Normal file
87
registry/coder-labs/templates/tasks-docker/README.md
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
---
|
||||||
|
display_name: Tasks on Docker
|
||||||
|
description: Run Coder Tasks on Docker with an example application
|
||||||
|
icon: ./.images/tasks.svg
|
||||||
|
maintainer_github: coder
|
||||||
|
verified: false
|
||||||
|
tags: [docker, container, ai, tasks]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Run Coder Tasks on Docker
|
||||||
|
|
||||||
|
This is an example template for running [Coder Tasks](https://coder.com/docs/ai-coder/tasks), Claude Code, along with a [real world application](https://realworld-docs.netlify.app/).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
This is a fantastic starting point for working with AI agents with Coder Tasks. Try prompts such as:
|
||||||
|
|
||||||
|
- "Make the background color blue"
|
||||||
|
- "Add a dark mode"
|
||||||
|
- "Rewrite the entire backend in Go"
|
||||||
|
|
||||||
|
## Included in this template
|
||||||
|
|
||||||
|
This template is designed to be an example and a reference for building other templates with Coder Tasks. You can always run Coder Tasks on different infrastructure (e.g. as on Kubernetes, VMs) and with your own GitHub repositories, MCP servers, images, etc.
|
||||||
|
|
||||||
|
Additionally, this template uses our [Claude Code](https://registry.coder.com/modules/coder/claude-code) module, but [other agents](https://registry.coder.com/modules?search=tag%3Aagent) or even [custom agents](https://coder.com/docs/ai-coder/custom-agents) can be used in its place.
|
||||||
|
|
||||||
|
This template uses a [Workspace Preset](https://coder.com/docs/admin/templates/extending-templates/parameters#workspace-presets) that pre-defines:
|
||||||
|
|
||||||
|
- Universal Container Image (e.g. contains Node.js, Java, Python, Ruby, etc)
|
||||||
|
- MCP servers (desktop-commander for long-running logs, playwright for previewing changes)
|
||||||
|
- System prompt and [repository](https://github.com/coder-contrib/realworld-django-rest-framework-angular) for the AI agent
|
||||||
|
- Startup script to initialize the repository and start the development server
|
||||||
|
|
||||||
|
## Add this template to your Coder deployment
|
||||||
|
|
||||||
|
You can also add this template to your Coder deployment and begin tinkering right away!
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
- Coder installed (see [our docs](https://coder.com/docs/install)), ideally a Linux VM with Docker
|
||||||
|
- Anthropic API Key (or access to Anthropic models via Bedrock or Vertex, see [Claude Code docs](https://docs.anthropic.com/en/docs/claude-code/third-party-integrations))
|
||||||
|
- Access to a Docker socket
|
||||||
|
- If on the local VM, ensure the `coder` user is added to the Docker group (docs)
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Add coder user to Docker group
|
||||||
|
sudo adduser coder docker
|
||||||
|
|
||||||
|
# Restart Coder server
|
||||||
|
sudo systemctl restart coder
|
||||||
|
|
||||||
|
# Test Docker
|
||||||
|
sudo -u coder docker ps
|
||||||
|
```
|
||||||
|
|
||||||
|
- If on a remote VM, see the [Docker Terraform provider documentation](https://registry.terraform.io/providers/kreuzwerker/docker/latest/docs#remote-hosts) to configure a remote host
|
||||||
|
|
||||||
|
To import this template into Coder, first create a template from "Scratch" in the template editor.
|
||||||
|
|
||||||
|
Visit this URL for your Coder deployment:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
https://coder.example.com/templates/new?exampleId=scratch
|
||||||
|
```
|
||||||
|
|
||||||
|
After creating the template, paste the contents from [main.tf](./main.tf) into the template editor and save.
|
||||||
|
|
||||||
|
Alternatively, you can use the Coder CLI to [push the template](https://coder.com/docs/reference/cli/templates_push)
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Download the CLI
|
||||||
|
curl -L https://coder.com/install.sh | sh
|
||||||
|
|
||||||
|
# Log in to your deployment
|
||||||
|
coder login https://coder.example.com
|
||||||
|
|
||||||
|
# Clone the registry
|
||||||
|
git clone https://github.com/coder/registry
|
||||||
|
cd registry
|
||||||
|
|
||||||
|
# Navigate to this template
|
||||||
|
cd registry/coder-labs/templates/tasks-docker
|
||||||
|
|
||||||
|
# Push the template
|
||||||
|
coder templates push
|
||||||
|
```
|
||||||
426
registry/coder-labs/templates/tasks-docker/main.tf
Normal file
426
registry/coder-labs/templates/tasks-docker/main.tf
Normal file
@ -0,0 +1,426 @@
|
|||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
coder = {
|
||||||
|
source = "coder/coder"
|
||||||
|
}
|
||||||
|
docker = {
|
||||||
|
source = "kreuzwerker/docker"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# This template requires a valid Docker socket
|
||||||
|
# However, you can reference our Kubernetes/VM
|
||||||
|
# example templates and adapt the Claude Code module
|
||||||
|
#
|
||||||
|
# see: https://registry.coder.com/templates
|
||||||
|
provider "docker" {}
|
||||||
|
|
||||||
|
# The Claude Code module does the automatic task reporting
|
||||||
|
# Other agent modules: https://registry.coder.com/modules?search=agent
|
||||||
|
# Or use a custom agent:
|
||||||
|
module "claude-code" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
|
source = "registry.coder.com/coder/claude-code/coder"
|
||||||
|
version = "2.0.0"
|
||||||
|
agent_id = coder_agent.main.id
|
||||||
|
folder = "/home/coder/projects"
|
||||||
|
install_claude_code = true
|
||||||
|
claude_code_version = "latest"
|
||||||
|
order = 999
|
||||||
|
|
||||||
|
experiment_post_install_script = data.coder_parameter.setup_script.value
|
||||||
|
|
||||||
|
# This enables Coder Tasks
|
||||||
|
experiment_report_tasks = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# You can also use a model provider, like AWS Bedrock or Vertex by replacing
|
||||||
|
# this with the special env vars from the Claude Code docs.
|
||||||
|
# see: https://docs.anthropic.com/en/docs/claude-code/third-party-integrations
|
||||||
|
variable "anthropic_api_key" {
|
||||||
|
type = string
|
||||||
|
description = "Generate one at: https://console.anthropic.com/settings/keys"
|
||||||
|
sensitive = true
|
||||||
|
}
|
||||||
|
resource "coder_env" "anthropic_api_key" {
|
||||||
|
agent_id = coder_agent.main.id
|
||||||
|
name = "CODER_MCP_CLAUDE_API_KEY"
|
||||||
|
value = var.anthropic_api_key
|
||||||
|
}
|
||||||
|
|
||||||
|
# We are using presets to set the prompts, image, and set up instructions
|
||||||
|
# See https://coder.com/docs/admin/templates/extending-templates/parameters#workspace-presets
|
||||||
|
data "coder_workspace_preset" "default" {
|
||||||
|
name = "Real World App: Angular + Django"
|
||||||
|
default = true
|
||||||
|
parameters = {
|
||||||
|
"system_prompt" = <<-EOT
|
||||||
|
-- Framing --
|
||||||
|
You are a helpful assistant that can help with code. You are running inside a Coder Workspace and provide status updates to the user via Coder MCP. Stay on track, feel free to debug, but when the original plan fails, do not choose a different route/architecture without checking the user first.
|
||||||
|
|
||||||
|
-- Tool Selection --
|
||||||
|
- playwright: previewing your changes after you made them
|
||||||
|
to confirm it worked as expected
|
||||||
|
- desktop-commander - use only for commands that keep running
|
||||||
|
(servers, dev watchers, GUI apps).
|
||||||
|
- Built-in tools - use for everything else:
|
||||||
|
(file operations, git commands, builds & installs, one-off shell commands)
|
||||||
|
|
||||||
|
Remember this decision rule:
|
||||||
|
- Stays running? → desktop-commander
|
||||||
|
- Finishes immediately? → built-in tools
|
||||||
|
|
||||||
|
-- Context --
|
||||||
|
There is an existing app and tmux dev server running on port 8000. Be sure to read it's CLAUDE.md (./realworld-django-rest-framework-angular/CLAUDE.md) to learn more about it.
|
||||||
|
|
||||||
|
Since this app is for demo purposes and the user is previewing the homepage and subsequent pages, aim to make the first visual change/prototype very quickly so the user can preview it, then focus on backend or logic which can be a more involved, long-running architecture plan.
|
||||||
|
|
||||||
|
EOT
|
||||||
|
|
||||||
|
"setup_script" = <<-EOT
|
||||||
|
# Set up projects dir
|
||||||
|
mkdir -p /home/coder/projects
|
||||||
|
cd $HOME/projects
|
||||||
|
|
||||||
|
# Packages: Install additional packages
|
||||||
|
sudo apt-get update && sudo apt-get install -y tmux
|
||||||
|
if ! command -v google-chrome >/dev/null 2>&1; then
|
||||||
|
yes | npx playwright install chrome
|
||||||
|
fi
|
||||||
|
|
||||||
|
# MCP: Install and configure MCP Servers
|
||||||
|
npm install -g @wonderwhy-er/desktop-commander
|
||||||
|
claude mcp add playwright npx -- @playwright/mcp@latest --headless --isolated --no-sandbox
|
||||||
|
claude mcp add desktop-commander desktop-commander
|
||||||
|
|
||||||
|
# Repo: Clone and pull changes from the git repository
|
||||||
|
if [ ! -d "realworld-django-rest-framework-angular" ]; then
|
||||||
|
git clone https://github.com/coder-contrib/realworld-django-rest-framework-angular.git
|
||||||
|
else
|
||||||
|
cd realworld-django-rest-framework-angular
|
||||||
|
git fetch
|
||||||
|
# Check for uncommitted changes
|
||||||
|
if git diff-index --quiet HEAD -- && \
|
||||||
|
[ -z "$(git status --porcelain --untracked-files=no)" ] && \
|
||||||
|
[ -z "$(git log --branches --not --remotes)" ]; then
|
||||||
|
echo "Repo is clean. Pulling latest changes..."
|
||||||
|
git pull
|
||||||
|
else
|
||||||
|
echo "Repo has uncommitted or unpushed changes. Skipping pull."
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Initialize: Start the development server
|
||||||
|
cd realworld-django-rest-framework-angular && ./start-dev.sh
|
||||||
|
EOT
|
||||||
|
"preview_port" = "4200"
|
||||||
|
"container_image" = "codercom/example-universal:ubuntu"
|
||||||
|
"jetbrains_ide" = "PY"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Pre-builds is a Coder Premium
|
||||||
|
# feature to speed up workspace creation
|
||||||
|
#
|
||||||
|
# see https://coder.com/docs/admin/templates/extending-templates/prebuilt-workspaces
|
||||||
|
# prebuilds {
|
||||||
|
# instances = 1
|
||||||
|
# expiration_policy {
|
||||||
|
# ttl = 86400 # Time (in seconds) after which unclaimed prebuilds are expired (1 day)
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
}
|
||||||
|
|
||||||
|
# Advanced parameters (these are all set via preset)
|
||||||
|
data "coder_parameter" "system_prompt" {
|
||||||
|
name = "system_prompt"
|
||||||
|
display_name = "System Prompt"
|
||||||
|
type = "string"
|
||||||
|
form_type = "textarea"
|
||||||
|
description = "System prompt for the agent with generalized instructions"
|
||||||
|
mutable = false
|
||||||
|
}
|
||||||
|
data "coder_parameter" "ai_prompt" {
|
||||||
|
type = "string"
|
||||||
|
name = "AI Prompt"
|
||||||
|
default = ""
|
||||||
|
description = "Write a prompt for Claude Code"
|
||||||
|
mutable = true
|
||||||
|
}
|
||||||
|
data "coder_parameter" "setup_script" {
|
||||||
|
name = "setup_script"
|
||||||
|
display_name = "Setup Script"
|
||||||
|
type = "string"
|
||||||
|
form_type = "textarea"
|
||||||
|
description = "Script to run before running the agent"
|
||||||
|
mutable = false
|
||||||
|
}
|
||||||
|
data "coder_parameter" "container_image" {
|
||||||
|
name = "container_image"
|
||||||
|
display_name = "Container Image"
|
||||||
|
type = "string"
|
||||||
|
default = "codercom/example-universal:ubuntu"
|
||||||
|
mutable = false
|
||||||
|
}
|
||||||
|
data "coder_parameter" "preview_port" {
|
||||||
|
name = "preview_port"
|
||||||
|
display_name = "Preview Port"
|
||||||
|
description = "The port the web app is running to preview in Tasks"
|
||||||
|
type = "number"
|
||||||
|
default = "3000"
|
||||||
|
mutable = false
|
||||||
|
}
|
||||||
|
|
||||||
|
# Other variables for Claude Code
|
||||||
|
resource "coder_env" "claude_task_prompt" {
|
||||||
|
agent_id = coder_agent.main.id
|
||||||
|
name = "CODER_MCP_CLAUDE_TASK_PROMPT"
|
||||||
|
value = data.coder_parameter.ai_prompt.value
|
||||||
|
}
|
||||||
|
resource "coder_env" "app_status_slug" {
|
||||||
|
agent_id = coder_agent.main.id
|
||||||
|
name = "CODER_MCP_APP_STATUS_SLUG"
|
||||||
|
value = "claude-code"
|
||||||
|
}
|
||||||
|
resource "coder_env" "claude_system_prompt" {
|
||||||
|
agent_id = coder_agent.main.id
|
||||||
|
name = "CODER_MCP_CLAUDE_SYSTEM_PROMPT"
|
||||||
|
value = data.coder_parameter.system_prompt.value
|
||||||
|
}
|
||||||
|
|
||||||
|
data "coder_provisioner" "me" {}
|
||||||
|
data "coder_workspace" "me" {}
|
||||||
|
data "coder_workspace_owner" "me" {}
|
||||||
|
|
||||||
|
resource "coder_agent" "main" {
|
||||||
|
arch = data.coder_provisioner.me.arch
|
||||||
|
os = "linux"
|
||||||
|
startup_script = <<-EOT
|
||||||
|
set -e
|
||||||
|
# Prepare user home with default files on first start.
|
||||||
|
if [ ! -f ~/.init_done ]; then
|
||||||
|
cp -rT /etc/skel ~
|
||||||
|
touch ~/.init_done
|
||||||
|
fi
|
||||||
|
EOT
|
||||||
|
|
||||||
|
# These environment variables allow you to make Git commits right away after creating a
|
||||||
|
# workspace. Note that they take precedence over configuration defined in ~/.gitconfig!
|
||||||
|
# You can remove this block if you'd prefer to configure Git manually or using
|
||||||
|
# dotfiles. (see docs/dotfiles.md)
|
||||||
|
env = {
|
||||||
|
GIT_AUTHOR_NAME = coalesce(data.coder_workspace_owner.me.full_name, data.coder_workspace_owner.me.name)
|
||||||
|
GIT_AUTHOR_EMAIL = "${data.coder_workspace_owner.me.email}"
|
||||||
|
GIT_COMMITTER_NAME = coalesce(data.coder_workspace_owner.me.full_name, data.coder_workspace_owner.me.name)
|
||||||
|
GIT_COMMITTER_EMAIL = "${data.coder_workspace_owner.me.email}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# The following metadata blocks are optional. They are used to display
|
||||||
|
# information about your workspace in the dashboard. You can remove them
|
||||||
|
# if you don't want to display any information.
|
||||||
|
# For basic resources, you can use the `coder stat` command.
|
||||||
|
# If you need more control, you can write your own script.
|
||||||
|
metadata {
|
||||||
|
display_name = "CPU Usage"
|
||||||
|
key = "0_cpu_usage"
|
||||||
|
script = "coder stat cpu"
|
||||||
|
interval = 10
|
||||||
|
timeout = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
metadata {
|
||||||
|
display_name = "RAM Usage"
|
||||||
|
key = "1_ram_usage"
|
||||||
|
script = "coder stat mem"
|
||||||
|
interval = 10
|
||||||
|
timeout = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
metadata {
|
||||||
|
display_name = "Home Disk"
|
||||||
|
key = "3_home_disk"
|
||||||
|
script = "coder stat disk --path $${HOME}"
|
||||||
|
interval = 60
|
||||||
|
timeout = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
metadata {
|
||||||
|
display_name = "CPU Usage (Host)"
|
||||||
|
key = "4_cpu_usage_host"
|
||||||
|
script = "coder stat cpu --host"
|
||||||
|
interval = 10
|
||||||
|
timeout = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
metadata {
|
||||||
|
display_name = "Memory Usage (Host)"
|
||||||
|
key = "5_mem_usage_host"
|
||||||
|
script = "coder stat mem --host"
|
||||||
|
interval = 10
|
||||||
|
timeout = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
metadata {
|
||||||
|
display_name = "Load Average (Host)"
|
||||||
|
key = "6_load_host"
|
||||||
|
# get load avg scaled by number of cores
|
||||||
|
script = <<EOT
|
||||||
|
echo "`cat /proc/loadavg | awk '{ print $1 }'` `nproc`" | awk '{ printf "%0.2f", $1/$2 }'
|
||||||
|
EOT
|
||||||
|
interval = 60
|
||||||
|
timeout = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
metadata {
|
||||||
|
display_name = "Swap Usage (Host)"
|
||||||
|
key = "7_swap_host"
|
||||||
|
script = <<EOT
|
||||||
|
free -b | awk '/^Swap/ { printf("%.1f/%.1f", $3/1024.0/1024.0/1024.0, $2/1024.0/1024.0/1024.0) }'
|
||||||
|
EOT
|
||||||
|
interval = 10
|
||||||
|
timeout = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# See https://registry.coder.com/modules/coder/code-server
|
||||||
|
module "code-server" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
|
folder = "/home/coder/projects"
|
||||||
|
source = "registry.coder.com/coder/code-server/coder"
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
"workbench.colorTheme" : "Default Dark Modern"
|
||||||
|
}
|
||||||
|
|
||||||
|
# This ensures that the latest non-breaking version of the module gets downloaded, you can also pin the module version to prevent breaking changes in production.
|
||||||
|
version = "~> 1.0"
|
||||||
|
|
||||||
|
agent_id = coder_agent.main.id
|
||||||
|
order = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
module "vscode" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
|
source = "registry.coder.com/coder/vscode-desktop/coder"
|
||||||
|
version = "1.1.0"
|
||||||
|
agent_id = coder_agent.main.id
|
||||||
|
}
|
||||||
|
|
||||||
|
module "windsurf" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
|
source = "registry.coder.com/coder/windsurf/coder"
|
||||||
|
version = "1.1.0"
|
||||||
|
agent_id = coder_agent.main.id
|
||||||
|
}
|
||||||
|
|
||||||
|
module "cursor" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
|
source = "registry.coder.com/coder/cursor/coder"
|
||||||
|
version = "1.2.0"
|
||||||
|
agent_id = coder_agent.main.id
|
||||||
|
}
|
||||||
|
|
||||||
|
module "jetbrains_gateway" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
|
source = "registry.coder.com/coder/jetbrains-gateway/coder"
|
||||||
|
|
||||||
|
# JetBrains IDEs to make available for the user to select
|
||||||
|
jetbrains_ides = ["IU", "PS", "WS", "PY", "CL", "GO", "RM", "RD", "RR"]
|
||||||
|
default = "IU"
|
||||||
|
|
||||||
|
# Default folder to open when starting a JetBrains IDE
|
||||||
|
folder = "/home/coder/projects"
|
||||||
|
|
||||||
|
# This ensures that the latest non-breaking version of the module gets downloaded, you can also pin the module version to prevent breaking changes in production.
|
||||||
|
version = "~> 1.0"
|
||||||
|
|
||||||
|
agent_id = coder_agent.main.id
|
||||||
|
agent_name = "main"
|
||||||
|
order = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "docker_volume" "home_volume" {
|
||||||
|
name = "coder-${data.coder_workspace.me.id}-home"
|
||||||
|
# Protect the volume from being deleted due to changes in attributes.
|
||||||
|
lifecycle {
|
||||||
|
ignore_changes = all
|
||||||
|
}
|
||||||
|
# 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
|
||||||
|
}
|
||||||
|
# This field becomes outdated if the workspace is renamed but can
|
||||||
|
# be useful for debugging or cleaning out dangling volumes.
|
||||||
|
labels {
|
||||||
|
label = "coder.workspace_name_at_creation"
|
||||||
|
value = data.coder_workspace.me.name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "coder_app" "preview" {
|
||||||
|
agent_id = coder_agent.main.id
|
||||||
|
slug = "preview"
|
||||||
|
display_name = "Preview your app"
|
||||||
|
icon = "${data.coder_workspace.me.access_url}/emojis/1f50e.png"
|
||||||
|
url = "http://localhost:${data.coder_parameter.preview_port.value}"
|
||||||
|
share = "authenticated"
|
||||||
|
subdomain = true
|
||||||
|
open_in = "tab"
|
||||||
|
order = 0
|
||||||
|
healthcheck {
|
||||||
|
url = "http://localhost:${data.coder_parameter.preview_port.value}/"
|
||||||
|
interval = 5
|
||||||
|
threshold = 15
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "docker_container" "workspace" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
|
image = data.coder_parameter.container_image.value
|
||||||
|
# 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
|
||||||
|
user = "coder"
|
||||||
|
# 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"
|
||||||
|
}
|
||||||
|
volumes {
|
||||||
|
container_path = "/home/coder"
|
||||||
|
volume_name = docker_volume.home_volume.name
|
||||||
|
read_only = false
|
||||||
|
}
|
||||||
|
|
||||||
|
# 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
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -4,7 +4,7 @@ description: Run Claude Code in your workspace
|
|||||||
icon: ../../../../.icons/claude.svg
|
icon: ../../../../.icons/claude.svg
|
||||||
maintainer_github: coder
|
maintainer_github: coder
|
||||||
verified: true
|
verified: true
|
||||||
tags: [agent, claude-code, ai]
|
tags: [agent, claude-code, ai, tasks]
|
||||||
---
|
---
|
||||||
|
|
||||||
# Claude Code
|
# Claude Code
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user