mirror of
https://github.com/coder/coder.git
synced 2025-07-12 00:14:10 +00:00
This change bundles the static assets like we have for v1 - using the [`embed`](https://pkg.go.dev/embed) go package. Fixes #22 In addition, it sets up a development script that runs `coderd` locally and serves the front-end, with hot-reloading. The script used is `./develop.sh`:  > NOTE: The UI is still placeholder, of course. Need to start testing out a simple, placeholder flow for the new v2 world as a next step Summary of changes: - Add build steps for `go` in the `Makefile` - Add a step for production build, in which we use the `embed` tag - Add a step for development, which doesn't need the `embed` tag - so we don't need to build the front-end twice - Add `next export` build step to output front-end artifacts in `out` - Add a `site` package for `go` - Add `embed_static.go` and `embed.go`. This is mostly brought in as-is from v1, except removing some intercom/sentry CSP entries that we aren't using. - Add a [next development server](https://nextjs.org/docs/advanced-features/custom-server) - Add a `v2-dev` script, that runs `coderd` and the `next` dev server side-by-side - Use the `site` package as the fallback handler. - Add `.gitignore` entries for additional build collateral
43 lines
977 B
TypeScript
43 lines
977 B
TypeScript
import express from "express"
|
|
import { createProxyMiddleware } from "http-proxy-middleware"
|
|
import next from "next"
|
|
|
|
const port = process.env.PORT || 8080
|
|
const dev = process.env.NODE_ENV !== "production"
|
|
|
|
let coderV2Host = "http://127.0.0.1:3000"
|
|
|
|
if (process.env.CODERV2_HOST) {
|
|
if (!/^http(s)?:\/\//.test(process.env.CODERV2_HOST)) {
|
|
throw new Error("CODERV2_HOST must be http(s)")
|
|
} else {
|
|
coderV2Host = process.env.CODERV2_HOST
|
|
}
|
|
}
|
|
|
|
console.log(`Using CODERV2_HOST: ${coderV2Host}`)
|
|
|
|
const app = next({ dev, dir: "./site" })
|
|
const handle = app.getRequestHandler()
|
|
|
|
app
|
|
.prepare()
|
|
.then(() => {
|
|
const server = express()
|
|
server.use(
|
|
"/api",
|
|
createProxyMiddleware("/api", {
|
|
target: coderV2Host,
|
|
ws: true,
|
|
secure: false,
|
|
changeOrigin: true,
|
|
}),
|
|
)
|
|
server.all("*", (req, res) => handle(req, res))
|
|
server.listen(port)
|
|
})
|
|
.catch((err) => {
|
|
console.error(err)
|
|
process.exit(1)
|
|
})
|