2013-09-03 17:23:58 +00:00
// Copyright 2013 bee authors
//
// Licensed under the Apache License, Version 2.0 (the "License"): you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.
2017-03-06 23:58:53 +00:00
package new
2013-07-24 11:20:30 +00:00
import (
"fmt"
"os"
path "path/filepath"
"strings"
2017-03-06 23:58:53 +00:00
"github.com/beego/bee/cmd/commands"
"github.com/beego/bee/cmd/commands/version"
beeLogger "github.com/beego/bee/logger"
"github.com/beego/bee/logger/colors"
"github.com/beego/bee/utils"
2013-07-24 11:20:30 +00:00
)
2020-07-18 14:09:28 +00:00
var gopath utils . DocValue
2020-06-25 14:29:27 +00:00
var beegoVersion utils . DocValue
2017-03-06 23:58:53 +00:00
var CmdNew = & commands . Command {
2020-07-24 07:54:52 +00:00
UsageLine : "new [appname] [-gopath=false] [-beego=v1.12.1]" ,
2016-12-03 10:54:41 +00:00
Short : "Creates a Beego application" ,
2013-07-24 11:20:30 +00:00
Long : `
2014-12-18 16:19:34 +00:00
Creates a Beego application for the given app name in the current directory .
2020-07-24 07:54:52 +00:00
now default supoort generate a go modules project
The command ' new ' creates a folder named [ appname ] [ - gopath = false ] [ - beego = v1 .12 .1 ] and generates the following structure :
2013-07-24 11:20:30 +00:00
2016-12-03 15:06:46 +00:00
├ ─ ─ main . go
2020-06-25 14:29:27 +00:00
├ ─ ─ go . mod
2016-12-03 15:06:46 +00:00
├ ─ ─ { { "conf" | foldername } }
│ └ ─ ─ app . conf
├ ─ ─ { { "controllers" | foldername } }
│ └ ─ ─ default . go
├ ─ ─ { { "models" | foldername } }
├ ─ ─ { { "routers" | foldername } }
│ └ ─ ─ router . go
├ ─ ─ { { "tests" | foldername } }
│ └ ─ ─ default_test . go
├ ─ ─ { { "static" | foldername } }
│ └ ─ ─ { { "js" | foldername } }
│ └ ─ ─ { { "css" | foldername } }
│ └ ─ ─ { { "img" | foldername } }
└ ─ ─ { { "views" | foldername } }
└ ─ ─ index . tpl
2013-07-24 11:20:30 +00:00
` ,
2020-06-25 14:29:27 +00:00
PreRun : nil ,
2017-03-06 23:58:53 +00:00
Run : CreateApp ,
2013-07-24 11:20:30 +00:00
}
var appconf = ` appname = { { . Appname } }
httpport = 8080
runmode = dev
`
var maingo = ` package main
import (
2013-12-23 16:00:52 +00:00
_ "{{.Appname}}/routers"
2013-07-24 11:20:30 +00:00
"github.com/astaxie/beego"
)
func main ( ) {
beego . Run ( )
}
`
2013-12-23 16:00:52 +00:00
var router = ` package routers
2013-12-23 15:28:31 +00:00
import (
"{{.Appname}}/controllers"
"github.com/astaxie/beego"
)
func init ( ) {
beego . Router ( "/" , & controllers . MainController { } )
}
`
2020-07-18 14:09:28 +00:00
var goMod = ` module % s
2013-12-23 15:28:31 +00:00
2020-06-25 14:29:27 +00:00
go % s
require github . com / astaxie / beego % s
require github . com / smartystreets / goconvey v1 .6 .4
`
2013-12-23 15:28:31 +00:00
var test = ` package test
import (
"net/http"
"net/http/httptest"
"testing"
2014-04-03 08:46:47 +00:00
"runtime"
"path/filepath"
2013-12-23 16:00:52 +00:00
_ "{{.Appname}}/routers"
2014-06-24 09:01:31 +00:00
2013-12-23 15:28:31 +00:00
"github.com/astaxie/beego"
. "github.com/smartystreets/goconvey/convey"
)
2014-04-03 08:41:44 +00:00
func init ( ) {
2019-01-07 17:34:51 +00:00
_ , file , _ , _ := runtime . Caller ( 0 )
2014-06-24 09:01:31 +00:00
apppath , _ := filepath . Abs ( filepath . Dir ( filepath . Join ( file , ".." + string ( filepath . Separator ) ) ) )
2014-04-03 08:41:44 +00:00
beego . TestBeegoInit ( apppath )
}
2016-11-09 12:17:55 +00:00
// TestBeego is a sample to run an endpoint test
func TestBeego ( t * testing . T ) {
2013-12-23 16:11:13 +00:00
r , _ := http . NewRequest ( "GET" , "/" , nil )
2013-12-23 15:28:31 +00:00
w := httptest . NewRecorder ( )
beego . BeeApp . Handlers . ServeHTTP ( w , r )
2014-06-24 09:01:31 +00:00
2016-11-09 12:17:55 +00:00
beego . Trace ( "testing" , "TestBeego" , "Code[%d]\n%s" , w . Code , w . Body . String ( ) )
2014-06-24 09:01:31 +00:00
2013-12-23 15:28:31 +00:00
Convey ( "Subject: Test Station Endpoint\n" , t , func ( ) {
Convey ( "Status Code Should Be 200" , func ( ) {
So ( w . Code , ShouldEqual , 200 )
} )
Convey ( "The Result Should Not Be Empty" , func ( ) {
So ( w . Body . Len ( ) , ShouldBeGreaterThan , 0 )
} )
} )
}
`
2013-07-24 11:20:30 +00:00
var controllers = ` package controllers
import (
"github.com/astaxie/beego"
)
type MainController struct {
beego . Controller
}
2014-11-05 14:48:09 +00:00
func ( c * MainController ) Get ( ) {
c . Data [ "Website" ] = "beego.me"
c . Data [ "Email" ] = "astaxie@gmail.com"
2016-01-07 10:38:43 +00:00
c . TplName = "index.tpl"
2013-07-24 11:20:30 +00:00
}
`
var indextpl = ` < ! DOCTYPE html >
< html >
2014-12-04 07:14:00 +00:00
< head >
< title > Beego < / title >
< meta http - equiv = "Content-Type" content = "text/html; charset=utf-8" >
< link rel = "shortcut icon" href = " data : image / png ; base64 , iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw / eHBhY2tldCBiZWdpbj0i77u / IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8 + IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFNTdGOTA3OTczQTgxMUU0QTlEQUM0NEYyRkI1NEQxQiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFNTdGOTA3QTczQTgxMUU0QTlEQUM0NEYyRkI1NEQxQiI + IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkU1N0Y5MDc3NzNBODExRTRBOURBQzQ0RjJGQjU0RDFCIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkU1N0Y5MDc4NzNBODExRTRBOURBQzQ0RjJGQjU0RDFCIi8 + IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY + IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8 + lsWdMwAAIvtJREFUeNrke3d81PX9 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
< style type = "text/css" >
* , body {
margin : 0 px ;
padding : 0 px ;
}
body {
margin : 0 px ;
font - family : "Helvetica Neue" , Helvetica , Arial , sans - serif ;
font - size : 14 px ;
line - height : 20 px ;
background - color : # fff ;
}
header ,
footer {
width : 960 px ;
margin - left : auto ;
margin - right : auto ;
}
. logo {
background - image : url ( ' data : image / png ; base64 , iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAgAElEQVR42uy9d5Rd13Xm + TvnxhfrVS5UIRSIQEIAQUpMIKlEylGWZblbTi27veyWJXcvjZqW7TVrrPG0Q0vyTKtHtnuWou0ZS1Y7yDOyksdjK9CkJSYxEwCRc6hcr + qFG8 + ZP859r14lEAAhEKBqr0VW4b1X995379ln7 / 3 tb + 8 Na7Ima7Ima7Ima7Ima7Ima7Ima7Ima7Ima7Im17qItVvwyss3vvGNHq31 / QCPfPMfAajPVEmTmN71G6kMDjE4OMju3bsBgi1btnx17a5dHbHXbsE1IduFEF9YbcsSYtGLp4E1BVlTkFe / NJvNIlB55plnBqanpgCIwwiANIlJ44QkioiaTcJGg / m5OdBafupTn1qfHeL8e9 / 73 mTtTq4pyKtStNbvFkJ8rK + nh69 + 4 a / RCE499d1FHvDc2Fls3wHL5cGvFXA9b / g1d911KvvAhsyirMn3SOTaLbhGlKXj / wvqoVnh5TVZsyDfV1aEKGhy + sghANZVisviDyGAJEIEMQrNd7 / 8 RQDKg0OP / ca7f1n99C / 8 W3buvgUhxGfylcrvrd3VNQV51YgQAq01aZyAANu3MpMhltkXoRVaKaKg2Xp9uBW / Z8fpXrujawryPZGpqak9Qohf11pP9vb2 / vurdNq / B05Pz8xs33H7nR8COPXovwBQci1sKRBSIiwLpEY7AqElPZZvAvrZaWIBjzz0zxw4dGjtIa4pyPd0J1 + vtX5nFvReFQXJ5 / MHgYOf / OQn9 / SPGGDqYGxAqYKVhYiZhREIdBYx5i0H0FSDBlprTp84ztjsLOi1YGVNQa6w7N37whuB1x0 / fvy1URS9UpdxXmv9hwCbd + 1 + AGD27EnmgyZplKBUhCUEtrQW / VEUKzSa2XPnSMYnSDWve + tb3 / rA9m3b + NDv / m7rY39cqFTU2lJfU5DLlZ8E8cD8 / Bz797 + 4 NCl3VeRXf / VXjwO / BvDXn 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
background - repeat : no - repeat ;
- webkit - background - size : 100 px 100 px ;
background - size : 100 px 100 px ;
background - position : center center ;
text - align : center ;
font - size : 42 px ;
padding : 250 px 0 70 px ;
font - weight : normal ;
text - shadow : 0 px 1 px 2 px # ddd ;
}
header {
padding : 100 px 0 ;
}
footer {
line - height : 1.8 ;
text - align : center ;
padding : 50 px 0 ;
color : # 999 ;
}
. description {
text - align : center ;
font - size : 16 px ;
}
a {
color : # 444 ;
text - decoration : none ;
}
. backdrop {
position : absolute ;
width : 100 % ;
height : 100 % ;
box - shadow : inset 0 px 0 px 100 px # ddd ;
z - index : - 1 ;
top : 0 px ;
left : 0 px ;
}
< / style >
< / head >
< body >
< header >
< h1 class = "logo" > Welcome to Beego < / h1 >
< div class = "description" >
Beego is a simple & powerful Go web framework which is inspired by tornado and sinatra .
< / div >
< / header >
< footer >
< div class = "author" >
2014-12-18 16:19:34 +00:00
Official website :
< a href = "http://{{.Website}}" > { { . Website } } < / a > /
Contact me :
2014-12-04 07:14:00 +00:00
< a class = "email" href = "mailto:{{.Email}}" > { { . Email } } < / a >
< / div >
< / footer >
< div class = "backdrop" > < / div >
2017-01-27 15:57:37 +00:00
< script src = "/static/js/reload.min.js" > < / script >
2014-12-04 07:14:00 +00:00
< / body >
2013-07-24 11:20:30 +00:00
< / html >
`
2017-01-27 15:57:37 +00:00
var reloadJsClient = ` function b ( a ) { var c = new WebSocket ( a ) ; c . onclose = function ( ) { setTimeout ( function ( ) { b ( a ) } , 2E3 ) } ; c . onmessage = function ( ) { location . reload ( ) } } try { if ( window . WebSocket ) try { b ( "ws://localhost:12450/reload" ) } catch ( a ) { console . error ( a ) } else console . log ( "Your browser does not support WebSockets." ) } catch ( a ) { console . error ( "Exception during connecting to Reload:" , a ) } ;
`
2017-03-06 23:58:53 +00:00
func init ( ) {
2020-07-24 07:54:52 +00:00
CmdNew . Flag . Var ( & gopath , "gopath" , "Support go path,default false" )
CmdNew . Flag . Var ( & beegoVersion , "beego" , "set beego version,only take effect by go mod" )
2017-03-06 23:58:53 +00:00
commands . AvailableCommands = append ( commands . AvailableCommands , CmdNew )
}
func CreateApp ( cmd * commands . Command , args [ ] string ) int {
output := cmd . Out ( )
2020-06-25 14:29:27 +00:00
if len ( args ) == 0 {
2017-03-06 23:58:53 +00:00
beeLogger . Log . Fatal ( "Argument [appname] is missing" )
}
2020-06-25 14:29:27 +00:00
if len ( args ) >= 2 {
2020-07-18 14:09:28 +00:00
err := cmd . Flag . Parse ( args [ 1 : ] )
if err != nil {
beeLogger . Log . Fatal ( "Parse args err " + err . Error ( ) )
}
2020-06-25 14:29:27 +00:00
}
var appPath string
var packPath string
var err error
2020-07-18 14:09:28 +00:00
if gopath == ` true ` {
2020-06-25 14:29:27 +00:00
beeLogger . Log . Info ( "generate new project support GOPATH" )
version . ShowShortVersionBanner ( )
appPath , packPath , err = utils . CheckEnv ( args [ 0 ] )
if err != nil {
beeLogger . Log . Fatalf ( "%s" , err )
}
} else {
beeLogger . Log . Info ( "generate new project support go modules." )
appPath = path . Join ( utils . GetBeeWorkPath ( ) , args [ 0 ] )
packPath = args [ 0 ]
if beegoVersion . String ( ) == ` ` {
beegoVersion . Set ( ` v1.12.1 ` )
}
2017-03-06 23:58:53 +00:00
}
2018-09-13 06:51:09 +00:00
if utils . IsExist ( appPath ) {
beeLogger . Log . Errorf ( colors . Bold ( "Application '%s' already exists" ) , appPath )
2017-03-06 23:58:53 +00:00
beeLogger . Log . Warn ( colors . Bold ( "Do you want to overwrite it? [Yes|No] " ) )
if ! utils . AskForConfirmation ( ) {
os . Exit ( 2 )
}
}
beeLogger . Log . Info ( "Creating application..." )
2020-07-18 14:09:28 +00:00
// If it is the current directory, select the current folder name to package path
if packPath == "." {
packPath = path . Base ( appPath )
}
2018-09-13 06:51:09 +00:00
os . MkdirAll ( appPath , 0755 )
2020-07-18 14:09:28 +00:00
if gopath != ` true ` {
2020-06-25 14:29:27 +00:00
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , path . Join ( appPath , "go.mod" ) , "\x1b[0m" )
2020-07-11 04:29:24 +00:00
utils . WriteToFile ( path . Join ( appPath , "go.mod" ) , fmt . Sprintf ( goMod , packPath , utils . GetGoVersionSkipMinor ( ) , beegoVersion . String ( ) ) )
2020-06-25 14:29:27 +00:00
}
2018-09-13 06:51:09 +00:00
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , appPath + string ( path . Separator ) , "\x1b[0m" )
os . Mkdir ( path . Join ( appPath , "conf" ) , 0755 )
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , path . Join ( appPath , "conf" ) + string ( path . Separator ) , "\x1b[0m" )
os . Mkdir ( path . Join ( appPath , "controllers" ) , 0755 )
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , path . Join ( appPath , "controllers" ) + string ( path . Separator ) , "\x1b[0m" )
os . Mkdir ( path . Join ( appPath , "models" ) , 0755 )
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , path . Join ( appPath , "models" ) + string ( path . Separator ) , "\x1b[0m" )
os . Mkdir ( path . Join ( appPath , "routers" ) , 0755 )
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , path . Join ( appPath , "routers" ) + string ( path . Separator ) , "\x1b[0m" )
os . Mkdir ( path . Join ( appPath , "tests" ) , 0755 )
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , path . Join ( appPath , "tests" ) + string ( path . Separator ) , "\x1b[0m" )
os . Mkdir ( path . Join ( appPath , "static" ) , 0755 )
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , path . Join ( appPath , "static" ) + string ( path . Separator ) , "\x1b[0m" )
os . Mkdir ( path . Join ( appPath , "static" , "js" ) , 0755 )
utils . WriteToFile ( path . Join ( appPath , "static" , "js" , "reload.min.js" ) , reloadJsClient )
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , path . Join ( appPath , "static" , "js" ) + string ( path . Separator ) , "\x1b[0m" )
os . Mkdir ( path . Join ( appPath , "static" , "css" ) , 0755 )
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , path . Join ( appPath , "static" , "css" ) + string ( path . Separator ) , "\x1b[0m" )
os . Mkdir ( path . Join ( appPath , "static" , "img" ) , 0755 )
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , path . Join ( appPath , "static" , "img" ) + string ( path . Separator ) , "\x1b[0m" )
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , path . Join ( appPath , "views" ) + string ( path . Separator ) , "\x1b[0m" )
os . Mkdir ( path . Join ( appPath , "views" ) , 0755 )
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , path . Join ( appPath , "conf" , "app.conf" ) , "\x1b[0m" )
utils . WriteToFile ( path . Join ( appPath , "conf" , "app.conf" ) , strings . Replace ( appconf , "{{.Appname}}" , path . Base ( args [ 0 ] ) , - 1 ) )
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , path . Join ( appPath , "controllers" , "default.go" ) , "\x1b[0m" )
utils . WriteToFile ( path . Join ( appPath , "controllers" , "default.go" ) , controllers )
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , path . Join ( appPath , "views" , "index.tpl" ) , "\x1b[0m" )
utils . WriteToFile ( path . Join ( appPath , "views" , "index.tpl" ) , indextpl )
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , path . Join ( appPath , "routers" , "router.go" ) , "\x1b[0m" )
utils . WriteToFile ( path . Join ( appPath , "routers" , "router.go" ) , strings . Replace ( router , "{{.Appname}}" , packPath , - 1 ) )
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , path . Join ( appPath , "tests" , "default_test.go" ) , "\x1b[0m" )
utils . WriteToFile ( path . Join ( appPath , "tests" , "default_test.go" ) , strings . Replace ( test , "{{.Appname}}" , packPath , - 1 ) )
fmt . Fprintf ( output , "\t%s%screate%s\t %s%s\n" , "\x1b[32m" , "\x1b[1m" , "\x1b[21m" , path . Join ( appPath , "main.go" ) , "\x1b[0m" )
utils . WriteToFile ( path . Join ( appPath , "main.go" ) , strings . Replace ( maingo , "{{.Appname}}" , packPath , - 1 ) )
2017-03-06 23:58:53 +00:00
beeLogger . Log . Success ( "New application successfully created!" )
return 0
}