2023-01-27 21:37:20 +00:00
// Copyright (c) Tailscale Inc & AUTHORS
// SPDX-License-Identifier: BSD-3-Clause
2022-06-07 22:24:22 +01:00
2023-08-24 23:02:42 +01:00
//go:build !plan9
2022-06-07 22:24:22 +01:00
// The tsconnect command builds and serves the static site that is generated for
// the Tailscale Connect JS/WASM client. Can be run in 3 modes:
2022-08-02 17:33:46 +01:00
// - dev: builds the site and serves it. JS and CSS changes can be picked up
// with a reload.
// - build: builds the site and writes it to dist/
// - serve: serves the site from dist/ (embedded in the binary)
2022-06-07 22:24:22 +01:00
package main // import "tailscale.com/cmd/tsconnect"
import (
"flag"
"fmt"
"log"
"os"
)
var (
2022-08-02 23:00:26 +01:00
addr = flag . String ( "addr" , ":9090" , "address to listen on" )
distDir = flag . String ( "distdir" , "./dist" , "path of directory to place build output in" )
2022-08-24 02:05:23 +01:00
pkgDir = flag . String ( "pkgdir" , "./pkg" , "path of directory to place NPM package build output in" )
2023-08-10 19:34:38 +01:00
yarnPath = flag . String ( "yarnpath" , "" , "path yarn executable used to install JavaScript dependencies" )
2022-08-02 23:00:26 +01:00
fastCompression = flag . Bool ( "fast-compression" , false , "Use faster compression when building, to speed up build time. Meant to iterative/debugging use only." )
2022-08-04 18:37:19 +01:00
devControl = flag . String ( "dev-control" , "" , "URL of a development control server to be used with dev. If provided without specifying dev, an error will be returned." )
2023-03-31 00:11:30 +01:00
rootDir = flag . String ( "rootdir" , "" , "Root directory of repo. If not specified, will be inferred from the cwd." )
2022-06-07 22:24:22 +01:00
)
func main ( ) {
flag . Usage = usage
flag . Parse ( )
if len ( flag . Args ( ) ) != 1 {
flag . Usage ( )
}
switch flag . Arg ( 0 ) {
case "dev" :
runDev ( )
2022-08-31 02:05:49 +01:00
case "dev-pkg" :
runDevPkg ( )
2022-06-07 22:24:22 +01:00
case "build" :
runBuild ( )
2022-08-24 02:05:23 +01:00
case "build-pkg" :
runBuildPkg ( )
2022-06-07 22:24:22 +01:00
case "serve" :
runServe ( )
default :
log . Printf ( "Unknown command: %s" , flag . Arg ( 0 ) )
flag . Usage ( )
}
}
func usage ( ) {
fmt . Fprintf ( os . Stderr , `
usage : tsconnect { dev | build | serve }
` [ 1 : ] )
flag . PrintDefaults ( )
fmt . Fprintf ( os . Stderr , `
tsconnect implements development / build / serving workflows for Tailscale Connect .
It can be invoked with one of three subcommands :
- dev : Run in development mode , allowing JS and CSS changes to be picked up without a rebuilt or restart .
- build : Run in production build mode ( generating static assets )
- serve : Run in production serve mode ( serving static assets )
` [ 1 : ] )
os . Exit ( 2 )
}