2020-05-21 06:30:41 +00:00
/ *
2020-05-25 16:19:20 +00:00
Copyright 2020 Qiniu Cloud ( qiniu . com )
2020-05-21 06:30:41 +00:00
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 .
* /
2020-05-21 06:58:40 +00:00
package cmd
2020-05-21 06:30:41 +00:00
import (
2020-06-13 10:15:51 +00:00
"github.com/qiniu/goc/pkg/build"
2020-06-14 11:37:27 +00:00
"github.com/qiniu/goc/pkg/cover"
2020-05-21 06:30:41 +00:00
"github.com/spf13/cobra"
)
var buildCmd = & cobra . Command {
Use : "build" ,
Short : "Do cover for all go files and execute go build command" ,
2020-06-03 09:12:47 +00:00
Long : `
First of all , this build command will copy the project code and its necessary dependencies to a temporary directory , then do cover for the target in this temporary directory , finally go build command will be executed and binaries generated to their original place .
2020-06-07 02:48:07 +00:00
To pass original go build flags to goc command , place them after "--" , see examples below for reference .
2020-06-03 09:12:47 +00:00
` ,
Example : `
# Build the current binary with cover variables injected . The binary will be generated in the current folder .
goc build
2020-06-05 02:17:51 +00:00
# Build the current binary with cover variables injected , and set the registry center to http : //127.0.0.1:7777.
2020-06-03 09:12:47 +00:00
goc build -- center = http : //127.0.0.1:7777
2020-06-05 02:17:51 +00:00
# Build the current binary with cover variables injected , and redirect output to / to / this / path .
2020-06-03 09:12:47 +00:00
goc build -- - o / to / this / path
2020-06-05 02:17:51 +00:00
# Build the current binary with cover variables injected , and set necessary build flags : - ldflags "-extldflags -static" - tags = "embed kodo" .
2020-06-03 09:12:47 +00:00
goc build -- - ldflags "-extldflags -static" - tags = "embed kodo"
` ,
2020-05-21 06:30:41 +00:00
Run : func ( cmd * cobra . Command , args [ ] string ) {
2020-06-14 04:43:25 +00:00
gocBuild := build . NewBuild ( buildFlags , packages , buildOutput )
2020-06-13 10:15:51 +00:00
// remove temporary directory if needed
2020-06-15 07:29:49 +00:00
defer gocBuild . Clean ( )
2020-06-13 10:15:51 +00:00
// doCover with original buildFlags, with new GOPATH( tmp:original )
// in the tmp directory
2020-06-14 11:37:27 +00:00
cover . Execute ( buildFlags , gocBuild . NewGOPATH , gocBuild . TmpDir , mode , center )
2020-06-13 10:15:51 +00:00
// do install in the temporary directory
2020-06-14 04:43:25 +00:00
gocBuild . Build ( )
2020-06-12 09:51:10 +00:00
return
2020-05-21 06:30:41 +00:00
} ,
}
2020-06-13 10:15:51 +00:00
var buildOutput string
2020-05-21 06:30:41 +00:00
func init ( ) {
2020-06-12 09:51:10 +00:00
addBuildFlags ( buildCmd . Flags ( ) )
2020-06-13 10:15:51 +00:00
buildCmd . Flags ( ) . StringVar ( & buildOutput , "output" , "" , "it forces build to write the resulting executable or object to the named output file or directory" )
2020-05-21 06:30:41 +00:00
rootCmd . AddCommand ( buildCmd )
}