diff --git a/.github/workflows/sonarqube.yaml b/.github/workflows/sonarqube.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9978c47fef3123e455048ca04d06547933eecbf8 --- /dev/null +++ b/.github/workflows/sonarqube.yaml @@ -0,0 +1,21 @@ +on: + push: + branches: + - master + pull_request: + types: [opened, synchronize, reopened] +name: Sonarqube +jobs: + sonarcloud: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Test + run: | + export PATH=$PATH:${PWD}/bin:$GOPATH/bin:/home/runner/go/bin + make test + - name: SonarCloud Scan + uses: sonarsource/sonarcloud-github-action@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: 3caad1285eb0edf2b4f65ee07b3cd8edde6c5176 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index ff717ca47303ad6c31843c1d9df91ea5ce1d89b3..0000000000000000000000000000000000000000 --- a/.travis.yml +++ /dev/null @@ -1,30 +0,0 @@ -language: go -dist: trusty - -go: -- 1.12.x - -env: - global: - - GO111MODULE=on - -addons: - sonarcloud: - organization: "jenkins-zh" - token: - secure: 3caad1285eb0edf2b4f65ee07b3cd8edde6c5176 # encrypted value of your token - -script: - # Execute some tests - - export PATH=${PWD}/bin:$PATH - - make clean gen-data-linux tools init build-all test - # And finally run the SonarQube analysis - read the "sonar-project.properties" - # file to see the specific configuration - - curl -LsS https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.0.0.1744-linux.zip > sonar-scanner-cli-4.0.0.1744-linux.zip - - unzip sonar-scanner-cli-4.0.0.1744-linux.zip - - export branch=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo $TRAVIS_BRANCH; else echo pr-$TRAVIS_PULL_REQUEST; fi) - - branch=$(echo $branch | sed 's/\//-/g') - - sonar-scanner-4.0.0.1744-linux/bin/sonar-scanner -Dsonar.branch.name=$branch -Dsonar.projectKey=jenkins-zh_jenkins-cli -Dsonar.organization=jenkins-zh -Dsonar.sources=. -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=674e187e300edc0ad56a05705bd0b21cbe18bd52 - # it's bad, but no better solution for now -# - sleep 30 -# - if [ 'OK' != $(curl -s "https://sonarcloud.io/api/qualitygates/project_status?branch=$branch&projectKey=jenkins-zh_jenkins-cli" | python -c "import sys, json; print(json.load(sys.stdin)['projectStatus']['status'])") ]; then exit -1; fi diff --git a/Makefile b/Makefile index 38aad121c22ceace3fbb10865d730e197988048a..696e1f29b209faa0d01f07ca496d99942c949436 100644 --- a/Makefile +++ b/Makefile @@ -116,13 +116,15 @@ test-slow: test: mkdir -p bin - go test ./util -v -count=1 - go test ./client -v -count=1 -coverprofile coverage.out - go test ./app -v -count=1 - go test ./app/health -v -count=1 - go test ./app/helper -v -count=1 - go test ./app/i18n -v -count=1 + go test ./util ./client ./app/ ./app/health ./app/helper ./app/i18n ./app/cmd/common -v -count=1 -coverprofile coverage.out go test ./app/cmd -v -count=1 +# go test ./util -v -count=1 +# go test ./client -v -count=1 -coverprofile coverage.out +# go test ./app -v -count=1 +# go test ./app/health -v -count=1 +# go test ./app/helper -v -count=1 +# go test ./app/i18n -v -count=1 +# go test ./app/cmd -v -count=1 dep: go get github.com/AlecAivazis/survey/v2 @@ -141,12 +143,3 @@ gen-data: image: docker build . -t jenkinszh/jcli - -image-win: - docker build . -t jenkinszh/jcli:win -f Dockerfile-win - -image-darwin: - docker build . -t jenkinszh/jcli:darwin -f Dockerfile-darwin - -image-dev: - docker build . -t jenkinszh/jcli:dev -f Docker-dev diff --git a/app/cmd/casc.go b/app/cmd/casc.go index 90cd76280de4b8c400771962dc95c579eed834a0..6726e697ab3fe6be6c8d3176d92623bcf6c56e6b 100644 --- a/app/cmd/casc.go +++ b/app/cmd/casc.go @@ -33,6 +33,6 @@ var cascCmd = &cobra.Command{ Short: i18n.T("Configuration as Code"), Long: i18n.T("Configuration as Code"), Annotations: map[string]string{ - common.Since: "v0.0.24", + common.Since: common.VersionSince0024, }, } diff --git a/app/cmd/casc_apply.go b/app/cmd/casc_apply.go index a4bc0c956a8880dabffe7d08588af9539e732a4d..d2788e102612ddae0ec7c656e50382b05f3b01be 100644 --- a/app/cmd/casc_apply.go +++ b/app/cmd/casc_apply.go @@ -36,6 +36,6 @@ var cascApplyCmd = &cobra.Command{ return jClient.Apply() }, Annotations: map[string]string{ - common.Since: "v0.0.24", + common.Since: common.VersionSince0024, }, } diff --git a/app/cmd/casc_apply_test.go b/app/cmd/casc_apply_test.go index c73867a96c0dfb8294dcc2918f1c14cbd9fe8207..dbe36fcf42363b00f61520577dd3b44749ae6816 100644 --- a/app/cmd/casc_apply_test.go +++ b/app/cmd/casc_apply_test.go @@ -42,7 +42,7 @@ var _ = Describe("casc apply command", func() { Context("basic cases", func() { It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/casc_export.go b/app/cmd/casc_export.go index 6c0fbd83a7503e4e67e0d735611d95bcb9787679..195cacefac7cf635809b4d3ef7c4b244e0ae20c7 100644 --- a/app/cmd/casc_export.go +++ b/app/cmd/casc_export.go @@ -41,6 +41,6 @@ var cascExportCmd = &cobra.Command{ return }, Annotations: map[string]string{ - common.Since: "v0.0.24", + common.Since: common.VersionSince0024, }, } diff --git a/app/cmd/casc_export_test.go b/app/cmd/casc_export_test.go index ffe07bb9b6c402b4f1ff25cef9fa39e4795dcaf8..8a3cfc4dcebf88a6a525dc3e84bfc2c258ab806a 100644 --- a/app/cmd/casc_export_test.go +++ b/app/cmd/casc_export_test.go @@ -42,7 +42,7 @@ var _ = Describe("casc apply command", func() { Context("basic cases", func() { It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/casc_open.go b/app/cmd/casc_open.go index 8bfb0c8b6b52f3fe3a4282f6a5d631588cc94353..7ed37e20ea1454c975e25681f064edb1ca983c8f 100644 --- a/app/cmd/casc_open.go +++ b/app/cmd/casc_open.go @@ -47,6 +47,6 @@ var cascOpenCmd = &cobra.Command{ return }, Annotations: map[string]string{ - common.Since: "v0.0.24", + common.Since: common.VersionSince0024, }, } diff --git a/app/cmd/casc_open_test.go b/app/cmd/casc_open_test.go index 64dd5e58f9e6fe285fed60d1011dc2608c8c04f1..811e4e4b3aae2b435a0f1f77a6a6a2434968bc6b 100644 --- a/app/cmd/casc_open_test.go +++ b/app/cmd/casc_open_test.go @@ -16,7 +16,7 @@ var _ = Describe("casc open test", func() { BeforeEach(func() { cascOpenOption.ExecContext = util.FakeExecCommandSuccess - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) tempFile, err = ioutil.TempFile(".", "test.yaml") diff --git a/app/cmd/casc_reload.go b/app/cmd/casc_reload.go index 5e25f6d8a79e2a2dd6a38e2d715efb4f29c6adfa..a7765a82a1c5a393028638beaf33c6a7d75e52c9 100644 --- a/app/cmd/casc_reload.go +++ b/app/cmd/casc_reload.go @@ -36,6 +36,6 @@ var cascReloadCmd = &cobra.Command{ return jClient.Reload() }, Annotations: map[string]string{ - common.Since: "v0.0.24", + common.Since: common.VersionSince0024, }, } diff --git a/app/cmd/casc_reload_test.go b/app/cmd/casc_reload_test.go index ff6463f20a0f42ddf7dff5eba68d8ca792b555e7..c3bf7e58cb1bfac816a673132244adc9d0fcf79e 100644 --- a/app/cmd/casc_reload_test.go +++ b/app/cmd/casc_reload_test.go @@ -42,7 +42,7 @@ var _ = Describe("casc reload command", func() { Context("basic cases", func() { It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/casc_schema.go b/app/cmd/casc_schema.go index 2bd1a44905f642a4703efa0c21d8df692fd438bf..4698f62084a2c9e2070081b9524138c6c67ccc0c 100644 --- a/app/cmd/casc_schema.go +++ b/app/cmd/casc_schema.go @@ -41,6 +41,6 @@ var cascSchemaCmd = &cobra.Command{ return }, Annotations: map[string]string{ - common.Since: "v0.0.24", + common.Since: common.VersionSince0024, }, } diff --git a/app/cmd/casc_schema_test.go b/app/cmd/casc_schema_test.go index 4b0554ff66134eb34bab7ef48d3afbd4409cceae..fdeea095aacd9f6f93ae9a9483da8206a6a3cfa1 100644 --- a/app/cmd/casc_schema_test.go +++ b/app/cmd/casc_schema_test.go @@ -42,7 +42,7 @@ var _ = Describe("casc apply command", func() { Context("basic cases", func() { It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/center_download_test.go b/app/cmd/center_download_test.go index 57409261e9767d76ae0a98cf893678b28ce62114..0536b2ea76dc4d5c8474aa98d6b2d71ea8780804 100644 --- a/app/cmd/center_download_test.go +++ b/app/cmd/center_download_test.go @@ -49,7 +49,7 @@ var _ = Describe("center download command", func() { Context("basic cases", func() { BeforeEach(func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/center_identity_test.go b/app/cmd/center_identity_test.go index e8f2f802353a7bd3d32bfaab1310db372cbdbdc2..e58ffa42aad7638125840962c552703ed143717f 100644 --- a/app/cmd/center_identity_test.go +++ b/app/cmd/center_identity_test.go @@ -40,7 +40,7 @@ var _ = Describe("center identity command", func() { Context("basic cases", func() { It("should not error", func() { var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/center_mirror_test.go b/app/cmd/center_mirror_test.go index 5c317d440ad3a34c0af39381cf511bb0bc0172c6..afcbf137d48be5da80548905be330fb82c69e9a5 100644 --- a/app/cmd/center_mirror_test.go +++ b/app/cmd/center_mirror_test.go @@ -42,7 +42,7 @@ var _ = Describe("center mirror command", func() { Context("basic cases", func() { It("enable mirror site", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -57,7 +57,7 @@ var _ = Describe("center mirror command", func() { }) It("disable mirror site", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/center_start_test.go b/app/cmd/center_start_test.go index 9d269a83fa1b86972135a808758b4fde85e48964..5493b6b0a1e957b8224ced1999afe1911f2cc2a5 100644 --- a/app/cmd/center_start_test.go +++ b/app/cmd/center_start_test.go @@ -17,7 +17,7 @@ var _ = Describe("center start command", func() { Expect(err).NotTo(HaveOccurred()) configFile = file.Name() - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(configFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/center_test.go b/app/cmd/center_test.go index f6fa19f1f6256405e9a85db312596b842784c337..2c2a038eba04aabf98f320875e05a6a3364fa4ce 100644 --- a/app/cmd/center_test.go +++ b/app/cmd/center_test.go @@ -39,7 +39,7 @@ var _ = Describe("center command", func() { Context("basic cases", func() { It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/center_upgrade_test.go b/app/cmd/center_upgrade_test.go index 6ca32618a1d618f054ac32dd77694d82f33014bb..c1af8cbc2ee76e0fe1d3c327e491fb952096b559 100644 --- a/app/cmd/center_upgrade_test.go +++ b/app/cmd/center_upgrade_test.go @@ -38,7 +38,7 @@ var _ = Describe("center upgrade command", func() { Context("basic cases", func() { It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/center_watch_test.go b/app/cmd/center_watch_test.go index 12f918a51a7f7f304cdc2c5980dbeb23eb9ebf67..c15317ea3ef7bee8e7ac988fff0978f810bdceda 100644 --- a/app/cmd/center_watch_test.go +++ b/app/cmd/center_watch_test.go @@ -41,7 +41,7 @@ var _ = Describe("center watch command", func() { Context("basic cases", func() { It("should success, center watch command", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/common_test.go b/app/cmd/common/common_test.go similarity index 89% rename from app/cmd/common_test.go rename to app/cmd/common/common_test.go index 13dd6342483fe4b85a9e077ef7ee9d3ad6558506..6742f1bbc35a22c66e0884d1e121ba65fcaa2b32 100644 --- a/app/cmd/common_test.go +++ b/app/cmd/common/common_test.go @@ -1,8 +1,7 @@ -package cmd_test +package common import ( "bytes" - "github.com/jenkins-zh/jenkins-cli/app/cmd/common" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "reflect" @@ -10,12 +9,12 @@ import ( var _ = Describe("test OutputOption", func() { var ( - outputOption common.OutputOption + outputOption OutputOption fakeFoos []FakeFoo ) BeforeEach(func() { - outputOption = common.OutputOption{} + outputOption = OutputOption{} fakeFoos = []FakeFoo{{ Name: "fake", @@ -39,7 +38,7 @@ var _ = Describe("test OutputOption", func() { Context("with filter", func() { BeforeEach(func() { - outputOption = common.OutputOption{ + outputOption = OutputOption{ Filter: []string{"Name=fake"}, } }) @@ -95,7 +94,7 @@ foo-1 Context("with json format", func() { BeforeEach(func() { - outputOption.Format = common.JSONOutputFormat + outputOption.Format = JSONOutputFormat }) It("should get a json text", func() { @@ -112,7 +111,7 @@ foo-1 Context("with yaml format", func() { BeforeEach(func() { - outputOption.Format = common.YAMLOutputFormat + outputOption.Format = YAMLOutputFormat }) It("should get a yaml text", func() { @@ -150,7 +149,7 @@ foo-1 Context("ignore invalid filter", func() { BeforeEach(func() { - outputOption = common.OutputOption{ + outputOption = OutputOption{ Filter: []string{"Name"}, } }) diff --git a/app/cmd/common/setup_test.go b/app/cmd/common/setup_test.go new file mode 100644 index 0000000000000000000000000000000000000000..7cea3380eef457e030d9c49daf6e7238185d6c72 --- /dev/null +++ b/app/cmd/common/setup_test.go @@ -0,0 +1,16 @@ +package common + +import ( + "testing" + + "github.com/onsi/ginkgo/reporters" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +func TestCmd(t *testing.T) { + RegisterFailHandler(Fail) + junitReporter := reporters.NewJUnitReporter("test-app-cmd-common.xml") + RunSpecsWithDefaultAndCustomReporters(t, "app/cmd/common", []Reporter{junitReporter}) +} diff --git a/app/cmd/common/version_since.go b/app/cmd/common/version_since.go new file mode 100644 index 0000000000000000000000000000000000000000..5aa176b5d5cacd2b54bc00dbe802f6507260316b --- /dev/null +++ b/app/cmd/common/version_since.go @@ -0,0 +1,8 @@ +package common + +const ( + // VersionSince0028 represents v0.0.28 + VersionSince0028 = "v0.0.28" + // VersionSince0024 represents v0.0.24 + VersionSince0024 = "v0.0.24" +) diff --git a/app/cmd/completion_test.go b/app/cmd/completion_test.go index 5451110d57b204f638eeac4fe9be280effe479d7..79df72945877772e5d34211c73f9396ddbc86f7b 100644 --- a/app/cmd/completion_test.go +++ b/app/cmd/completion_test.go @@ -25,7 +25,7 @@ var _ = Describe("completion command", func() { rootOptions.ConfigFile = "test.yaml" var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/computer_create.go b/app/cmd/computer_create.go index 4a9e3d7ca8b2dde6a40564b559b94d99f685cfd2..4d5c992e9015a45494b94e0449628d40d7b70ec0 100644 --- a/app/cmd/computer_create.go +++ b/app/cmd/computer_create.go @@ -31,6 +31,6 @@ It can only create a JNLP agent.`), return jClient.Create(args[0]) }, Annotations: map[string]string{ - common.Since: "v0.0.24", + common.Since: common.VersionSince0024, }, } diff --git a/app/cmd/computer_create_test.go b/app/cmd/computer_create_test.go index 72da4f1a6f2fda0db7cd0e4fdb43ed3d81e1dc3f..0c0aea3667a8192d8538c0a8b5b986f38bfdb424 100644 --- a/app/cmd/computer_create_test.go +++ b/app/cmd/computer_create_test.go @@ -48,7 +48,7 @@ var _ = Describe("create list command", func() { BeforeEach(func() { var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/computer_delete.go b/app/cmd/computer_delete.go index fee40d2dd9bfa91324d33de0a4d1d1cb07e803c0..87357ab43f17e36f028e11faba2789891ea2b692 100644 --- a/app/cmd/computer_delete.go +++ b/app/cmd/computer_delete.go @@ -30,6 +30,6 @@ var computerDeleteCmd = &cobra.Command{ return jClient.Delete(args[0]) }, Annotations: map[string]string{ - common.Since: "v0.0.24", + common.Since: common.VersionSince0024, }, } diff --git a/app/cmd/computer_delete_test.go b/app/cmd/computer_delete_test.go index d57ffbcb0dfe6d067f8303801b25e39ac1f98880..04a047f598c26cecdb6a5236d8639adee8b4652e 100644 --- a/app/cmd/computer_delete_test.go +++ b/app/cmd/computer_delete_test.go @@ -48,7 +48,7 @@ var _ = Describe("create delete command", func() { BeforeEach(func() { var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/computer_launch_test.go b/app/cmd/computer_launch_test.go index 4ebcd06c4be0bb477eab54593a089e43c113969f..8986fc7498c2aaba241777bc1cdc7c7ad4d6186c 100644 --- a/app/cmd/computer_launch_test.go +++ b/app/cmd/computer_launch_test.go @@ -39,7 +39,7 @@ var _ = Describe("computer launch command", func() { name = "fake" var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/computer_list_test.go b/app/cmd/computer_list_test.go index 6340ad9fe607743adf2f88b865c69096961ade6d..e3ae3b465280815c48149afa7c91fa2ccc789b43 100644 --- a/app/cmd/computer_list_test.go +++ b/app/cmd/computer_list_test.go @@ -47,7 +47,7 @@ var _ = Describe("computer list command", func() { BeforeEach(func() { var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/computer_log_test.go b/app/cmd/computer_log_test.go index 123bd5b5753bf361ccb51e2b3351076092a1655c..9fb4ca1623247fb37cb1f375e1a7422d1063e029 100644 --- a/app/cmd/computer_log_test.go +++ b/app/cmd/computer_log_test.go @@ -47,7 +47,7 @@ var _ = Describe("computer log command", func() { BeforeEach(func() { var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/config_add_test.go b/app/cmd/config_add_test.go index 5954b6289123b338f6aa8b17fa8efe21cf0a69f2..d311f50eb1ee417c3ed9a45c1d22126621cdc61d 100644 --- a/app/cmd/config_add_test.go +++ b/app/cmd/config_add_test.go @@ -30,7 +30,7 @@ var _ = Describe("config add command", func() { configPath = path.Join(os.TempDir(), "fake.yaml") var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(configPath, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/config_edit_test.go b/app/cmd/config_edit_test.go index 6a9c00ee007d2bb10abd9701a2a3beaf153c45ca..8f14b4137aaf6b9c67e0943dafc646711008688e 100644 --- a/app/cmd/config_edit_test.go +++ b/app/cmd/config_edit_test.go @@ -12,7 +12,7 @@ package cmd // }, // Test: func(stdio terminal.Stdio) (err error) { // rootOptions.ConfigFile = "test.yaml" -// data, err := generateSampleConfig() +// data, err := GenerateSampleConfig() // err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) // // rootCmd.SetArgs([]string{"config", "edit"}) diff --git a/app/cmd/config_generate.go b/app/cmd/config_generate.go index 8be4751b2330646bdfa7a53c448af686b2bb7c26..30458940aa4d2b2f8a95713d1616fe4c89dda72f 100644 --- a/app/cmd/config_generate.go +++ b/app/cmd/config_generate.go @@ -43,7 +43,7 @@ var configGenerateCmd = &cobra.Command{ Long: i18n.T("Generate a sample config file for you"), RunE: func(cmd *cobra.Command, _ []string) (err error) { var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() if err == nil { if configGenerateOption.Interactive { err = configGenerateOption.InteractiveWithConfig(cmd, data) @@ -124,7 +124,8 @@ func getSampleConfig() (sampleConfig Config) { return } -func generateSampleConfig() ([]byte, error) { +// GenerateSampleConfig returns a sample config +func GenerateSampleConfig() ([]byte, error) { sampleConfig := getSampleConfig() return yaml.Marshal(&sampleConfig) } diff --git a/app/cmd/config_list_test.go b/app/cmd/config_list_test.go index 3aba7ab0d16770475c8e9cd1b3b0e607ecb9be23..18bb555bc24884aa0438e33a227c3e39122c82f3 100644 --- a/app/cmd/config_list_test.go +++ b/app/cmd/config_list_test.go @@ -25,7 +25,7 @@ var _ = Describe("config list command", func() { rootOptions.ConfigFile = "test.yaml" var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/config_plugin.go b/app/cmd/config_plugin.go index 6754e317a02a0de823c5b5db1bc59d8fbbbfc25a..6898a10388587e14475fc570164cb6bc3b74b06c 100644 --- a/app/cmd/config_plugin.go +++ b/app/cmd/config_plugin.go @@ -46,7 +46,7 @@ var configPluginCmd = &cobra.Command{ If you want to submit a plugin for jcli, please see also the following project. https://github.com/jenkins-zh/jcli-plugins`), Annotations: map[string]string{ - common.Since: "v0.0.28", + common.Since: common.VersionSince0028, }, } @@ -66,7 +66,7 @@ func NewConfigPluginListCmd() (cmd *cobra.Command) { Long: "list all installed plugins", RunE: configPluginListCmd.RunE, Annotations: map[string]string{ - common.Since: "v0.0.28", + common.Since: common.VersionSince0028, }, } @@ -93,7 +93,7 @@ The official metadata git repository is https://github.com/jenkins-zh/jcli-plugi but you can change it by giving a command parameter.`, RunE: pluginFetchCmd.Run, Annotations: map[string]string{ - common.Since: "v0.0.28", + common.Since: common.VersionSince0028, }, } @@ -125,7 +125,7 @@ func NewConfigPluginInstallCmd() (cmd *cobra.Command) { Args: cobra.MinimumNArgs(1), RunE: pluginInstallCmd.Run, Annotations: map[string]string{ - common.Since: "v0.0.28", + common.Since: common.VersionSince0028, }, } diff --git a/app/cmd/config_plugin/root.go b/app/cmd/config_plugin/root.go index 042bc9c1e9d5faba2692e00099617ad52b3ed2c6..e6691f6009f8d5a4a41828b5d5eae406322c3aed 100644 --- a/app/cmd/config_plugin/root.go +++ b/app/cmd/config_plugin/root.go @@ -39,7 +39,7 @@ func NewConfigPluginCmd(opt *common.CommonOption) (cmd *cobra.Command) { If you want to submit a plugin for jcli, please see also the following project. https://github.com/jenkins-zh/jcli-plugins`), Annotations: map[string]string{ - common.Since: "v0.0.28", + common.Since: common.VersionSince0028, }, } @@ -62,7 +62,7 @@ func NewConfigPluginListCmd(opt *common.CommonOption) (cmd *cobra.Command) { Long: "list all installed plugins", RunE: configPluginListCmd.RunE, Annotations: map[string]string{ - common.Since: "v0.0.28", + common.Since: common.VersionSince0028, }, } @@ -91,7 +91,7 @@ The official metadata git repository is https://github.com/jenkins-zh/jcli-plugi but you can change it by giving a command parameter.`, RunE: pluginFetchCmd.Run, Annotations: map[string]string{ - common.Since: "v0.0.28", + common.Since: common.VersionSince0028, }, } @@ -125,7 +125,7 @@ func NewConfigPluginInstallCmd(opt *common.CommonOption) (cmd *cobra.Command) { Args: cobra.MinimumNArgs(1), RunE: pluginInstallCmd.Run, Annotations: map[string]string{ - common.Since: "v0.0.28", + common.Since: common.VersionSince0028, }, } diff --git a/app/cmd/config_plugin/uninstall_plugin.go b/app/cmd/config_plugin/uninstall_plugin.go index 14a1ded8175ce47787d47147a01d39fa8b766815..7773e96400d720b4bbd1079980370044ba01324a 100644 --- a/app/cmd/config_plugin/uninstall_plugin.go +++ b/app/cmd/config_plugin/uninstall_plugin.go @@ -23,7 +23,7 @@ func NewConfigPluginUninstallCmd(opt *common.CommonOption) (cmd *cobra.Command) Args: cobra.MinimumNArgs(1), RunE: jcliPluginUninstallCmd.RunE, Annotations: map[string]string{ - common.Since: "v0.0.28", + common.Since: common.VersionSince0028, }, } return diff --git a/app/cmd/config_select_test.go b/app/cmd/config_select_test.go index 07c7b758538beba177dca5d119a98a07fd02d003..4a46d85feb76709ee80086c8b46a03d0bf8f94dd 100644 --- a/app/cmd/config_select_test.go +++ b/app/cmd/config_select_test.go @@ -74,7 +74,7 @@ var _ = Describe("config select command", func() { // defer os.Remove(configFile) // // var data []byte -// data, err = generateSampleConfig() +// data, err = GenerateSampleConfig() // err = ioutil.WriteFile(configFile, data, 0664) // // configSelectOptions.CommonOption.Stdio = stdio diff --git a/app/cmd/config_test.go b/app/cmd/config_test.go index de575da2cced580baa81c5491f219ee1d68ce335..ecefa643a51783f5cbb1c15055407a2cc399d414 100644 --- a/app/cmd/config_test.go +++ b/app/cmd/config_test.go @@ -84,7 +84,7 @@ var _ = Describe("Table util test", func() { rootOptions.Jenkins = "" rootOptions.ConfigFile = "test.yaml" - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/credential.go b/app/cmd/credential.go index 0336c29f52393968b3d50700767f35d6a1c95cca..d7690294c047a970271f06bda5dccec2b751b913 100644 --- a/app/cmd/credential.go +++ b/app/cmd/credential.go @@ -16,6 +16,6 @@ var credentialCmd = &cobra.Command{ Short: i18n.T("Manage the credentials of your Jenkins"), Long: i18n.T(`Manage the credentials of your Jenkins`), Annotations: map[string]string{ - common.Since: "v0.0.24", + common.Since: common.VersionSince0024, }, } diff --git a/app/cmd/credential_create.go b/app/cmd/credential_create.go index 56376c6b632f2a4a002dfe527aba20e58968fad9..7e031d1e9c98a3d676b826fc47b180c5dc29a86c 100644 --- a/app/cmd/credential_create.go +++ b/app/cmd/credential_create.go @@ -98,6 +98,6 @@ var credentialCreateCmd = &cobra.Command{ return }, Annotations: map[string]string{ - common.Since: "v0.0.24", + common.Since: common.VersionSince0024, }, } diff --git a/app/cmd/credential_create_test.go b/app/cmd/credential_create_test.go index c3c57621616850503ee3089128190862118a7002..437331e001f3b3b0ef767ba107b213131e4bbc32 100644 --- a/app/cmd/credential_create_test.go +++ b/app/cmd/credential_create_test.go @@ -51,7 +51,7 @@ var _ = Describe("credential create command", func() { BeforeEach(func() { var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/credential_delete.go b/app/cmd/credential_delete.go index 0c1ba9d8eecdb9de572b85f2376a0eb5f38f553b..f57ccf8c079a49ed23fb03f77c5f5d293519d2f7 100644 --- a/app/cmd/credential_delete.go +++ b/app/cmd/credential_delete.go @@ -67,6 +67,6 @@ var credentialDeleteCmd = &cobra.Command{ return }, Annotations: map[string]string{ - common.Since: "v0.0.24", + common.Since: common.VersionSince0024, }, } diff --git a/app/cmd/credential_delete_test.go b/app/cmd/credential_delete_test.go index 0e2ce7cba0dbc9859bf156ce39dec1c1a1d108f5..425b75ae66bdbaa1321b9c8db2e37aab92133e37 100644 --- a/app/cmd/credential_delete_test.go +++ b/app/cmd/credential_delete_test.go @@ -2,8 +2,8 @@ package cmd import ( "bytes" - _ "github.com/Netflix/go-expect" - _ "github.com/jenkins-zh/jenkins-cli/app/cmd/common" + //"github.com/Netflix/go-expect" + //"github.com/jenkins-zh/jenkins-cli/app/cmd/common" "io/ioutil" "os" @@ -54,7 +54,7 @@ var _ = Describe("credential delete command", func() { BeforeEach(func() { var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/credential_list.go b/app/cmd/credential_list.go index 3976db109ed0033950bd986caec549f57a53cf9c..aa4dae723e880707f31e54141b345a097165ffba 100644 --- a/app/cmd/credential_list.go +++ b/app/cmd/credential_list.go @@ -49,6 +49,6 @@ var credentialListCmd = &cobra.Command{ return }, Annotations: map[string]string{ - common.Since: "v0.0.24", + common.Since: common.VersionSince0024, }, } diff --git a/app/cmd/credential_list_test.go b/app/cmd/credential_list_test.go index 7e560545d903e5d2597b98c088e5f1af1b46861d..a47cb09f2956dc0143c71d359d24819ce8c92b37 100644 --- a/app/cmd/credential_list_test.go +++ b/app/cmd/credential_list_test.go @@ -50,7 +50,7 @@ var _ = Describe("credential list command", func() { BeforeEach(func() { var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/crumbissuer_test.go b/app/cmd/crumbissuer_test.go index 824cb821761400013e930259ae932a58e13ff920..3bd7c7221f4224aef4311cb7f03ae69703e85782 100644 --- a/app/cmd/crumbissuer_test.go +++ b/app/cmd/crumbissuer_test.go @@ -45,7 +45,7 @@ var _ = Describe("crumb command", func() { Context("basic cases", func() { It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/doc_test.go b/app/cmd/doc_test.go index 154dd9f4bb44a89b9cfec3493a0d81ec79f571f3..7da554f3ec2fea80d4811d53146ccd880683388b 100644 --- a/app/cmd/doc_test.go +++ b/app/cmd/doc_test.go @@ -22,7 +22,7 @@ var _ = Describe("doc command test", func() { rootOptions.ConfigFile = "test.yaml" - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/job_artifact_download_test.go b/app/cmd/job_artifact_download_test.go index b0f9ac42f838f0e4a23106fa664645e77a0c8c24..adca545ac116a9347cb995196de389058bfed35a 100644 --- a/app/cmd/job_artifact_download_test.go +++ b/app/cmd/job_artifact_download_test.go @@ -44,7 +44,7 @@ var _ = Describe("job artifact download command", func() { Context("basic cases", func() { It("invalid build id", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -59,7 +59,7 @@ var _ = Describe("job artifact download command", func() { }) It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -96,7 +96,7 @@ var _ = Describe("job artifact download command", func() { }) It("should success, fake artifact id", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/job_artifact_test.go b/app/cmd/job_artifact_test.go index ccb5afe9f53de8bc68548bc3d052143f5083fc6e..1cc11253f160c3fd228d23099598a741ff729ae1 100644 --- a/app/cmd/job_artifact_test.go +++ b/app/cmd/job_artifact_test.go @@ -52,7 +52,7 @@ var _ = Describe("job artifact command", func() { }) It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -72,7 +72,7 @@ a.log a.log 0 }) It("should success, zero build id", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -93,7 +93,7 @@ a.log a.log 0 }) It("should success, invalid build id", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/job_build_test.go b/app/cmd/job_build_test.go index b9b65e35ac67bc1ef9ee6870ee100f6c6e790663..219dc5e536eae41a48207b84d75c15e465dc4e8a 100644 --- a/app/cmd/job_build_test.go +++ b/app/cmd/job_build_test.go @@ -47,7 +47,7 @@ var _ = Describe("job build command", func() { Context("basic cases", func() { It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -90,7 +90,7 @@ var _ = Describe("job build command", func() { }) It("with --param-entry", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -126,7 +126,7 @@ var _ = Describe("job build command", func() { // Test: func(stdio terminal.Stdio) (err error) { // var data []byte // rootOptions.ConfigFile = "test.yaml" -// data, err = generateSampleConfig() +// data, err = GenerateSampleConfig() // err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) // // ctrl := gomock.NewController(t) diff --git a/app/cmd/job_create_test.go b/app/cmd/job_create_test.go index 19392ad34a0abd0d6ba33bdffb89874c11cb1632..07aa1e6e5e0ea53edca070737f422f5e829abd12 100644 --- a/app/cmd/job_create_test.go +++ b/app/cmd/job_create_test.go @@ -54,7 +54,7 @@ var _ = Describe("job create command", func() { } var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/job_delete_test.go b/app/cmd/job_delete_test.go index 9f43f9dd53afe1efeba41a79835944cbf8806b42..2fb53650ee4e6bb48b3b60af288092145ef113a1 100644 --- a/app/cmd/job_delete_test.go +++ b/app/cmd/job_delete_test.go @@ -51,7 +51,7 @@ var _ = Describe("job delete command", func() { }) It("should success, with batch mode", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -134,7 +134,7 @@ type EditorTest struct { //func RunPromptCommandTest(t *testing.T, test PromptCommandTest) { // RunTest(t, func(stdio terminal.Stdio) (err error) { // var data []byte -// data, err = generateSampleConfig() +// data, err = GenerateSampleConfig() // err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) // // test.BatchOption.Stdio = stdio diff --git a/app/cmd/job_disable_test.go b/app/cmd/job_disable_test.go index acb8ae7c60fd70dd0b2eb9b6f52bcaa875063734..5a746ed08536c7b715d60885b785f1532b9ef4e3 100644 --- a/app/cmd/job_disable_test.go +++ b/app/cmd/job_disable_test.go @@ -26,7 +26,7 @@ var _ = Describe("job disable command", func() { rootOptions.Jenkins = "" rootOptions.ConfigFile = "test.yaml" - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/job_edit_test.go b/app/cmd/job_edit_test.go index 520f251fcb0302eb119d611537e157a3151f0028..c04ba3c699e8e6261ec9ab479cdeb322bda9f883 100644 --- a/app/cmd/job_edit_test.go +++ b/app/cmd/job_edit_test.go @@ -48,7 +48,7 @@ var _ = Describe("job edit command", func() { Context("basic cases", func() { It("edit with script param", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -67,7 +67,7 @@ var _ = Describe("job edit command", func() { }) It("edit with file param", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -91,7 +91,7 @@ var _ = Describe("job edit command", func() { }) It("edit with url param", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/job_enable_test.go b/app/cmd/job_enable_test.go index 31eb30b8c741b62e480b538ecfffeb91a7528a07..78a63ad14366b4fd9e56db6c937e121bc29899b9 100644 --- a/app/cmd/job_enable_test.go +++ b/app/cmd/job_enable_test.go @@ -26,7 +26,7 @@ var _ = Describe("job enable command", func() { rootOptions.Jenkins = "" rootOptions.ConfigFile = "test.yaml" - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/job_history_test.go b/app/cmd/job_history_test.go index 2f852de5bfe1ddaa296d311705755d1aece5a548..1355c360cbb3deddd79355fa3ff1e186ce4ac81d 100644 --- a/app/cmd/job_history_test.go +++ b/app/cmd/job_history_test.go @@ -50,7 +50,7 @@ var _ = Describe("job history command", func() { }) It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/job_input_test.go b/app/cmd/job_input_test.go index ded9149b4273f6d3d7253da5f25dca1973ef6e08..68cf1d5f7af6d97d06d3720c702b4a3ea2d0d30a 100644 --- a/app/cmd/job_input_test.go +++ b/app/cmd/job_input_test.go @@ -46,7 +46,7 @@ var _ = Describe("job input command", func() { Context("basic cases", func() { It("no params, will error", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -62,7 +62,7 @@ var _ = Describe("job input command", func() { }) It("should success, abort without inputs", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -102,7 +102,7 @@ var _ = Describe("job input command", func() { }) It("should success, process without inputs", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/job_log_test.go b/app/cmd/job_log_test.go index f011e9bb857f90d01fd4b111cde62abaf466b41f..dbab8512299d847382e1fdc883860a62268b1b8a 100644 --- a/app/cmd/job_log_test.go +++ b/app/cmd/job_log_test.go @@ -44,7 +44,7 @@ var _ = Describe("job log command", func() { Context("basic cases, need RoundTripper", func() { It("output the last build log", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/job_param_test.go b/app/cmd/job_param_test.go index 16e863668991ad13708007fe7e14b9f199c6d34a..7836af3c76a469b3555b1e749db6c5e91039c774 100644 --- a/app/cmd/job_param_test.go +++ b/app/cmd/job_param_test.go @@ -44,7 +44,7 @@ var _ = Describe("job search command", func() { Context("basic cases, need RoundTripper", func() { It("without parameters", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -62,7 +62,7 @@ var _ = Describe("job search command", func() { }) It("with one parameter", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -80,7 +80,7 @@ var _ = Describe("job search command", func() { }) It("with one parameter, output with indent", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/job_search_test.go b/app/cmd/job_search_test.go index 7ff330d3762e83f23ac92d2178907d122843635f..6e2cfe6ea215fd961b4e7c83bd7659668986418f 100644 --- a/app/cmd/job_search_test.go +++ b/app/cmd/job_search_test.go @@ -41,7 +41,7 @@ var _ = Describe("job search command", func() { }) It("should success, search with one result item", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -65,7 +65,7 @@ fake fake WorkflowJob job/fake/ }) It("should success, search without keyword", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/job_stop_test.go b/app/cmd/job_stop_test.go index 87b8add539f906cafbde7c1e39b8884cc1250d3d..a14de042ae2cc18c5dbb4af32d7f0d1b7fb64710 100644 --- a/app/cmd/job_stop_test.go +++ b/app/cmd/job_stop_test.go @@ -30,7 +30,7 @@ var _ = Describe("job stop command", func() { rootOptions.ConfigFile = "test.yaml" var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -84,7 +84,7 @@ var _ = Describe("job stop command", func() { }) It("stop the last build, with batch mode", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/job_type_test.go b/app/cmd/job_type_test.go index 867684ab64de8fc766524c874aa6bb1cb5ffd8b6..bfa5563c2b580ef7b2eaa473b026ae796000d6af 100644 --- a/app/cmd/job_type_test.go +++ b/app/cmd/job_type_test.go @@ -40,7 +40,7 @@ var _ = Describe("job type command", func() { Context("basic cases", func() { It("GetCategories", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -79,7 +79,7 @@ var _ = Describe("job type command", func() { }) It("should success, empty list", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -106,7 +106,7 @@ var _ = Describe("job type command", func() { }) It("should success, empty list", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -133,7 +133,7 @@ var _ = Describe("job type command", func() { }) It("should success, one item", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/open_test.go b/app/cmd/open_test.go index 0358983e09005dab7dfeec5f6cc0f138923658e1..0c347592d77009593c7715b548181a18327ddca8 100644 --- a/app/cmd/open_test.go +++ b/app/cmd/open_test.go @@ -22,7 +22,7 @@ var _ = Describe("test open", func() { BeforeEach(func() { configFile = path.Join(os.TempDir(), "fake.yaml") - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(configFile, data, 0664) Expect(err).To(BeNil()) @@ -93,7 +93,7 @@ var _ = Describe("test open", func() { // defer os.Remove(configFile) // // var data []byte -// data, err = generateSampleConfig() +// data, err = GenerateSampleConfig() // err = ioutil.WriteFile(configFile, data, 0664) // // openOption.ExecContext = util.FakeExecCommandSuccess diff --git a/app/cmd/plugin_checkout_test.go b/app/cmd/plugin_checkout_test.go index 19fec07f2683e6a622ede144825b4414233a6f63..fbc909a00cdf4563f7bb3c2fd623ce882ad48f0f 100644 --- a/app/cmd/plugin_checkout_test.go +++ b/app/cmd/plugin_checkout_test.go @@ -39,7 +39,7 @@ var _ = Describe("plugin checkout command", func() { It("should success", func() { var err error var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/plugin_create_test.go b/app/cmd/plugin_create_test.go index bc2073cec7632c7c770140ee780b47001b73de11..7d8075e064d0980cf2d96339b45c8fcf249002cf 100644 --- a/app/cmd/plugin_create_test.go +++ b/app/cmd/plugin_create_test.go @@ -16,7 +16,7 @@ var _ = Describe("plugin create test", func() { BeforeEach(func() { pluginCreateOptions.SystemCallExec = util.FakeSystemCallExecSuccess pluginCreateOptions.LookPathContext = util.FakeLookPath - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) rootOptions.ConfigFile = "test.yaml" err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) diff --git a/app/cmd/plugin_download_test.go b/app/cmd/plugin_download_test.go index 86e1d75982321b3b00b775e09bf6a03f2e880cd0..317723ed36952a5cb8f2a7d44403c6b4b54d4b59 100644 --- a/app/cmd/plugin_download_test.go +++ b/app/cmd/plugin_download_test.go @@ -39,7 +39,7 @@ var _ = Describe("plugin download command", func() { It("should success", func() { var err error var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -56,9 +56,8 @@ var _ = Describe("plugin download command", func() { Expect(buf.String()).To(Equal("")) _, err = os.Stat("fake.hpi") - Expect(err).To(BeNil()) - defer os.Remove("fake.hpi") + Expect(err).To(BeNil()) }) }) }) diff --git a/app/cmd/plugin_install_test.go b/app/cmd/plugin_install_test.go index 60346216980e7533f72ab4e6e0e868d8f5cab71a..43b574ef2476fb620d47e1ac01dd83eb366acae3 100644 --- a/app/cmd/plugin_install_test.go +++ b/app/cmd/plugin_install_test.go @@ -48,7 +48,7 @@ var _ = Describe("plugin install command", func() { Context("basic cases", func() { It("install one plugin", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -66,7 +66,7 @@ var _ = Describe("plugin install command", func() { }) It("unknow suite", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/plugin_list_test.go b/app/cmd/plugin_list_test.go index 00a5c16b366a52cd0b9d76d923acfe76bb81b971..69b924d5463f9654b12eb3e2c780711ff8d15f6a 100644 --- a/app/cmd/plugin_list_test.go +++ b/app/cmd/plugin_list_test.go @@ -37,7 +37,7 @@ var _ = Describe("plugin list command", func() { Context("basic cases", func() { It("no plugin in the list", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -56,7 +56,7 @@ var _ = Describe("plugin list command", func() { }) It("one plugin in the list", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -77,7 +77,7 @@ fake 1.0 true }) It("one plugin in the list without headers", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -97,7 +97,7 @@ fake 1.0 true }) It("one plugin output with json format", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -117,7 +117,7 @@ fake 1.0 true }) It("one plugin output with yaml format", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -137,7 +137,7 @@ fake 1.0 true }) It("one plugin output with not support format", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/plugin_open_test.go b/app/cmd/plugin_open_test.go index ef46853c0e9cc417428dec2f8bdcb047b4f52902..1fa10c3bf6878feccd5749510ff8bdbc679901b3 100644 --- a/app/cmd/plugin_open_test.go +++ b/app/cmd/plugin_open_test.go @@ -17,7 +17,7 @@ var _ = Describe("plugin open test", func() { BeforeEach(func() { pluginOpenOption.ExecContext = util.FakeExecCommandSuccess - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) rootOptions.ConfigFile = "test.yaml" err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) diff --git a/app/cmd/plugin_release.go b/app/cmd/plugin_release.go index f1d8fbcd170175e27e09dd57900bf2d2460ced0d..0515945536c413b7529039317ff1ec04e06b4a1d 100644 --- a/app/cmd/plugin_release.go +++ b/app/cmd/plugin_release.go @@ -73,6 +73,6 @@ var pluginReleaseCmd = &cobra.Command{ return }, Annotations: map[string]string{ - common.Since: "v0.0.24", + common.Since: common.VersionSince0024, }, } diff --git a/app/cmd/plugin_release_test.go b/app/cmd/plugin_release_test.go index 7bc524afcb2f6b27586abeaab655055051d7e60b..5176156de77f5e1923edb0355b8bdba557e46f4a 100644 --- a/app/cmd/plugin_release_test.go +++ b/app/cmd/plugin_release_test.go @@ -16,7 +16,7 @@ var _ = Describe("plugin release test", func() { BeforeEach(func() { pluginReleaseOptions.SystemCallExec = util.FakeSystemCallExecSuccess pluginReleaseOptions.LookPathContext = util.FakeLookPath - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) rootOptions.ConfigFile = "test.yaml" err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) diff --git a/app/cmd/plugin_search_test.go b/app/cmd/plugin_search_test.go index 131c0f68e1738e34e5e2132c32e8ef6e38682064..fcedab917345efa34f7e8e0cd53afc4afda81f00 100644 --- a/app/cmd/plugin_search_test.go +++ b/app/cmd/plugin_search_test.go @@ -37,7 +37,7 @@ var _ = Describe("plugin search command", func() { Context("basic cases", func() { It("should success, empty list", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -55,7 +55,7 @@ var _ = Describe("plugin search command", func() { }) It("many plugins in the list", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -84,7 +84,7 @@ var _ = Describe("plugin search command", func() { }) It("should success, empty updateCenter list", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -112,7 +112,7 @@ var _ = Describe("plugin search command", func() { }) It("should success, null updateCenter and 500 installed list", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/plugin_trend_test.go b/app/cmd/plugin_trend_test.go index 5ee96ecaa4597418153a119baab63dbf1fd24c86..ff5b99398e28ce807282647d78ecfb187f707ee9 100644 --- a/app/cmd/plugin_trend_test.go +++ b/app/cmd/plugin_trend_test.go @@ -39,7 +39,7 @@ var _ = Describe("plugin trend command", func() { Context("basic cases", func() { It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/plugin_uninstall_test.go b/app/cmd/plugin_uninstall_test.go index fb75d117e7b2e543337dd96a871bb9cf509034ae..ff0f4f030164fe31a611d4e50529255d14aed40c 100644 --- a/app/cmd/plugin_uninstall_test.go +++ b/app/cmd/plugin_uninstall_test.go @@ -39,7 +39,7 @@ var _ = Describe("plugin uninstall command", func() { Context("basic cases", func() { It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -59,7 +59,7 @@ var _ = Describe("plugin uninstall command", func() { }) It("with error", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/plugin_upgrade_test.go b/app/cmd/plugin_upgrade_test.go index 5c9494a2ff1b6dc59dbc131d7efe0be816c32832..a424b64e5a124e6c7a60570facc796702cfbcd52 100644 --- a/app/cmd/plugin_upgrade_test.go +++ b/app/cmd/plugin_upgrade_test.go @@ -39,7 +39,7 @@ var _ = Describe("plugin upgrade command", func() { Context("basic cases", func() { It("given plugin name, should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -57,7 +57,7 @@ var _ = Describe("plugin upgrade command", func() { }) It("findUpgradeablePlugins", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -86,7 +86,7 @@ var _ = Describe("plugin upgrade command", func() { }) It("upgrade all plugin, should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/plugin_upload_test.go b/app/cmd/plugin_upload_test.go index 88e8766981fbc3f805e82ab603e38704835a0806..83bba14505f5a98b4e79bde9447fc4b25742927b 100644 --- a/app/cmd/plugin_upload_test.go +++ b/app/cmd/plugin_upload_test.go @@ -37,7 +37,7 @@ var _ = Describe("plugin upload command", func() { Context("basic cases", func() { It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/queue_cancel_test.go b/app/cmd/queue_cancel_test.go index 7ecb7d543d31cd746b4122ffe58e5f95c13263c1..6068c16bef4ec70506c3b0963897b3a6b0f04047 100644 --- a/app/cmd/queue_cancel_test.go +++ b/app/cmd/queue_cancel_test.go @@ -39,7 +39,7 @@ var _ = Describe("queue cancel command", func() { }) It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -57,7 +57,7 @@ var _ = Describe("queue cancel command", func() { }) It("should have error with invalid number", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/queue_list_test.go b/app/cmd/queue_list_test.go index 54cb2f769a72721b89f0123dd376ed8eb330e3c7..a62929fa8f59e60572f5cba72d3bd2f7693c376e 100644 --- a/app/cmd/queue_list_test.go +++ b/app/cmd/queue_list_test.go @@ -40,7 +40,7 @@ var _ = Describe("queue list command", func() { }) It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -71,7 +71,7 @@ var _ = Describe("queue list command", func() { }) It("output with table format", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/queue_test.go b/app/cmd/queue_test.go index a12a8944b2af7999d5f47a82960ecfb5174bb47b..91ff6a08dd9c28d14a37314abfadac02373b8089 100644 --- a/app/cmd/queue_test.go +++ b/app/cmd/queue_test.go @@ -31,7 +31,7 @@ var _ = Describe("queue command", func() { Context("without http requests", func() { It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/restart_test.go b/app/cmd/restart_test.go index 1fa5d2a5a12c0933821a2a2970a32ff63eb2bd27..681833ab70c6b880244a54f4e57a6f5963e50018 100644 --- a/app/cmd/restart_test.go +++ b/app/cmd/restart_test.go @@ -29,7 +29,7 @@ var _ = Describe("restart command", func() { rootOptions.ConfigFile = path.Join(os.TempDir(), "fake.yaml") var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/root.go b/app/cmd/root.go index 363298786ba188bd550efa6ec7259e69c0a07ca0..9421e19e8cfa61037ca4d08868562d874be19795 100644 --- a/app/cmd/root.go +++ b/app/cmd/root.go @@ -2,12 +2,14 @@ package cmd import ( "fmt" + "github.com/jenkins-zh/jenkins-cli/app/cmd/common" "io" "log" "os" "os/exec" "regexp" "strings" + "time" . "github.com/jenkins-zh/jenkins-cli/app/config" "github.com/jenkins-zh/jenkins-cli/app/health" @@ -38,7 +40,11 @@ type RootOptions struct { ProxyAuth string ProxyDisable bool - Doctor bool + Doctor bool + StartTime time.Time + EndTime time.Time + + CommonOption *common.CommonOption LoggerLevel string } @@ -54,6 +60,7 @@ var rootCmd = &cobra.Command{ We'd love to hear your feedback at https://github.com/jenkins-zh/jenkins-cli/issues`, PersistentPreRunE: func(cmd *cobra.Command, args []string) (err error) { + rootOptions.StartTime = time.Now() if logger, err = util.InitLogger(rootOptions.LoggerLevel); err == nil { (&configOptions).Logger = logger client.SetLogger(logger) @@ -88,6 +95,15 @@ We'd love to hear your feedback at https://github.com/jenkins-zh/jenkins-cli/iss } return }, + PersistentPostRun: func(cmd *cobra.Command, args []string) { + cmdPath := getCmdPath(cmd) + + // calculate the time + rootOptions.EndTime = time.Now() + + logger.Debug("done with command", zap.String("command", cmdPath), + zap.Float64("duration", rootOptions.EndTime.Sub(rootOptions.StartTime).Seconds())) + }, BashCompletionFunction: jcliBashCompletionFunc, } @@ -175,6 +191,19 @@ func init() { rootCmd.SetOut(os.Stdout) loadPlugins(rootCmd) + + // add sub-commands + NewShutdownCmd(&rootOptions) +} + +// GetRootOptions returns the root options +func GetRootOptions() *RootOptions { + return &rootOptions +} + +// GetRootCommand returns the root cmd +func GetRootCommand() *cobra.Command { + return rootCmd } func getCurrentJenkinsFromOptions() (jenkinsServer *JenkinsServer) { diff --git a/app/cmd/root_test.go b/app/cmd/root_test.go index 7c2f5ed70599e836770071a3b8e895264d680ba7..e1842f4489afee4d9bd22c0dd934f1b5b02f8084 100644 --- a/app/cmd/root_test.go +++ b/app/cmd/root_test.go @@ -270,7 +270,7 @@ var _ = Describe("Root cmd test", func() { defer os.Remove(configFile.Name()) - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(configFile.Name(), data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/shell_test.go b/app/cmd/shell_test.go index 597b6e7043a1cbfd2eb8d3bc0803a0123eaa5d38..116644b7f97ecb60c64bb050d247e7c9429a2f5b 100644 --- a/app/cmd/shell_test.go +++ b/app/cmd/shell_test.go @@ -36,7 +36,7 @@ var _ = Describe("shell command", func() { //Context("basic test", func() { // It("should success", func() { - // data, err := generateSampleConfig() + // data, err := GenerateSampleConfig() // Expect(err).To(BeNil()) // err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) // Expect(err).To(BeNil()) diff --git a/app/cmd/shutdown.go b/app/cmd/shutdown.go new file mode 100644 index 0000000000000000000000000000000000000000..28849ffae50e992403b6bf6732b747c157214275 --- /dev/null +++ b/app/cmd/shutdown.go @@ -0,0 +1,77 @@ +package cmd + +import ( + "fmt" + "github.com/jenkins-zh/jenkins-cli/app/cmd/common" + "github.com/jenkins-zh/jenkins-cli/app/i18n" + "github.com/jenkins-zh/jenkins-cli/client" + "github.com/spf13/cobra" +) + +// ShutdownOption holds the options for shutdown cmd +type ShutdownOption struct { + common.BatchOption + common.CommonOption + RootOptions *RootOptions + + Safe bool + Prepare bool + CancelPrepare bool +} + +const ( + // SafeShutdown the text about shutdown safely + SafeShutdown = "Puts Jenkins into the quiet mode, wait for existing builds to be completed, and then shut down Jenkins" +) + +// NewShutdownCmd create the shutdown command +func NewShutdownCmd(rootOpt *RootOptions) (cmd *cobra.Command) { + shutdownOption := &ShutdownOption{ + RootOptions: rootOpt, + } + cmd = &cobra.Command{ + Use: "shutdown", + Short: i18n.T(SafeShutdown), + Long: i18n.T(SafeShutdown), + RunE: shutdownOption.runE, + } + shutdownOption.init(cmd) + return +} + +func (o *ShutdownOption) runE(cmd *cobra.Command, _ []string) (err error) { + jenkins := getCurrentJenkinsFromOptions() + if !o.Confirm(fmt.Sprintf("Are you sure to shutdown Jenkins %s?", jenkins.URL)) { + return + } + + jClient := &client.CoreClient{ + JenkinsCore: client.JenkinsCore{ + RoundTripper: o.RootOptions.CommonOption.RoundTripper, + Debug: o.RootOptions.Debug, + }, + } + getCurrentJenkinsAndClient(&(jClient.JenkinsCore)) + + if o.CancelPrepare { + err = jClient.PrepareShutdown(true) + } else if o.Prepare { + err = jClient.PrepareShutdown(false) + } else { + err = jClient.Shutdown(o.Safe) + } + return +} + +func (o *ShutdownOption) init(shutdownCmd *cobra.Command) { + rootCmd.AddCommand(shutdownCmd) + o.SetFlag(shutdownCmd) + shutdownCmd.Flags().BoolVarP(&o.Safe, "safe", "s", true, + i18n.T(SafeShutdown)) + shutdownCmd.Flags().BoolVarP(&o.Prepare, "prepare", "", false, + i18n.T("Put Jenkins in a Quiet mode, in preparation for a restart. In that mode Jenkins don’t start any build")) + shutdownCmd.Flags().BoolVarP(&o.CancelPrepare, "prepare-cancel", "", false, + i18n.T(" Cancel the effect of the “quiet-down” command")) + o.BatchOption.Stdio = common.GetSystemStdio() + o.CommonOption.Stdio = common.GetSystemStdio() +} diff --git a/app/cmd/shutdown_test.go b/app/cmd/shutdown_test.go new file mode 100644 index 0000000000000000000000000000000000000000..87e4d9ea27a68308b5bd76b7461689b7a0472985 --- /dev/null +++ b/app/cmd/shutdown_test.go @@ -0,0 +1,61 @@ +package cmd + +import ( + "bytes" + "github.com/jenkins-zh/jenkins-cli/app/cmd/common" + "github.com/jenkins-zh/jenkins-cli/client" + "github.com/jenkins-zh/jenkins-cli/mock/mhttp" + "io/ioutil" + "os" + "path" + + "github.com/golang/mock/gomock" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("shutdown command", func() { + var ( + ctrl *gomock.Controller + roundTripper *mhttp.MockRoundTripper + configFile string + err error + ) + + BeforeEach(func() { + rootOptions := GetRootOptions() + ctrl = gomock.NewController(GinkgoT()) + roundTripper = mhttp.NewMockRoundTripper(ctrl) + rootOptions.CommonOption = &common.CommonOption{ + RoundTripper: roundTripper, + } + rootOptions.Jenkins = "" + configFile = path.Join(os.TempDir(), "fake.yaml") + rootOptions.ConfigFile = configFile + + var data []byte + data, err = GenerateSampleConfig() + Expect(err).To(BeNil()) + err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) + Expect(err).To(BeNil()) + }) + + AfterEach(func() { + os.Remove(configFile) + GetRootOptions().ConfigFile = "" + ctrl.Finish() + }) + + Context("with batch mode", func() { + It("should success", func() { + client.PrepareForShutdown(roundTripper, "http://localhost:8080/jenkins", "admin", "111e3a2f0231198855dceaff96f20540a9", true) + + GetRootCommand().SetArgs([]string{"shutdown", "-b"}) + + buf := new(bytes.Buffer) + GetRootCommand().SetOutput(buf) + _, err = GetRootCommand().ExecuteC() + Expect(err).To(BeNil()) + }) + }) +}) diff --git a/app/cmd/user_create_test.go b/app/cmd/user_create_test.go index 2908fe7b259cf98214500c174a3fc2b6ce2c7c8d..27c35e241d6612f2b605a6c8db85ae4b12269a70 100644 --- a/app/cmd/user_create_test.go +++ b/app/cmd/user_create_test.go @@ -39,7 +39,7 @@ var _ = Describe("user create command", func() { }) It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -58,7 +58,7 @@ var _ = Describe("user create command", func() { }) It("with status code 500", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/user_delete_test.go b/app/cmd/user_delete_test.go index aae76fb18bc411d2145eec3f4a88439f7d10a0c3..597486f06236cdfa498679c7d974a9d179187d5f 100644 --- a/app/cmd/user_delete_test.go +++ b/app/cmd/user_delete_test.go @@ -38,7 +38,7 @@ var _ = Describe("user delete command", func() { }) It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -57,7 +57,7 @@ var _ = Describe("user delete command", func() { }) It("with status code 500", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/user_edit_test.go b/app/cmd/user_edit_test.go index f15889b40eae19707c46e497af5a3e3ff257d4a5..6278a6a1fbf015397d73e80f388a75cd0f3be39b 100644 --- a/app/cmd/user_edit_test.go +++ b/app/cmd/user_edit_test.go @@ -14,7 +14,7 @@ package cmd // configFile := path.Join(os.TempDir(), "fake.yaml") // defer os.Remove(configFile) // -// data, err := generateSampleConfig() +// data, err := GenerateSampleConfig() // err = ioutil.WriteFile(configFile, data, 0664) // // var ( diff --git a/app/cmd/user_test.go b/app/cmd/user_test.go index fcc08b7ee1e2d8ce19025980f1fdcb9674ee7d3f..fade306441d6099986a8e9dcdbc275c94cc0d968 100644 --- a/app/cmd/user_test.go +++ b/app/cmd/user_test.go @@ -40,7 +40,7 @@ var _ = Describe("user command", func() { }) It("should success", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) @@ -59,7 +59,7 @@ var _ = Describe("user command", func() { }) It("with status code 500", func() { - data, err := generateSampleConfig() + data, err := GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/user_token_test.go b/app/cmd/user_token_test.go index 56c0a4a5a6f4bf396226d288bd728bdc1113a642..883bb2c9dd31f2c62a5d4ebb163cd20a1e672e85 100644 --- a/app/cmd/user_token_test.go +++ b/app/cmd/user_token_test.go @@ -30,7 +30,7 @@ var _ = Describe("user token command", func() { rootOptions.ConfigFile = "test.yaml" var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/app/cmd/version_test.go b/app/cmd/version_test.go index 0cbf2abafd9829bc77c895bfb019790d6df07360..461cdf096d5951e3346658c128c3269cb40fa536 100644 --- a/app/cmd/version_test.go +++ b/app/cmd/version_test.go @@ -33,7 +33,7 @@ var _ = Describe("version command", func() { rootCmd.SetOutput(buf) var data []byte - data, err = generateSampleConfig() + data, err = GenerateSampleConfig() Expect(err).To(BeNil()) err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664) Expect(err).To(BeNil()) diff --git a/client/core.go b/client/core.go index 533be47d3b1756bc8a4a9274c407460a8c905adf..911cf8971bb2f8734f5a6c214716d1914bc540fc 100644 --- a/client/core.go +++ b/client/core.go @@ -38,6 +38,26 @@ func (q *CoreClient) RestartDirectly() (err error) { return } +// Shutdown puts Jenkins into the quiet mode, wait for existing builds to be completed, and then shut down Jenkins +func (q *CoreClient) Shutdown(safe bool) (err error) { + if safe { + _, err = q.RequestWithoutData("POST", "/safeExit", nil, nil, 200) + } else { + _, err = q.RequestWithoutData("POST", "/exit", nil, nil, 200) + } + return +} + +// PrepareShutdown Put Jenkins in a Quiet mode, in preparation for a restart. In that mode Jenkins don’t start any build +func (q *CoreClient) PrepareShutdown(cancel bool) (err error) { + if cancel { + _, err = q.RequestWithoutData("POST", "/cancelQuietDown", nil, nil, 200) + } else { + _, err = q.RequestWithoutData("POST", "/quietDown", nil, nil, 200) + } + return +} + // JenkinsIdentity belongs to a Jenkins type JenkinsIdentity struct { Fingerprint string diff --git a/client/core_test.go b/client/core_test.go index 55d9b23bbf1091ec85f1b274d7bfcfae7392d50c..685a046de53ee4090e4a81024673aa9c7e10a8a9 100644 --- a/client/core_test.go +++ b/client/core_test.go @@ -69,4 +69,64 @@ var _ = Describe("core test", func() { })) }) }) + + Context("shutdown", func() { + var ( + err error + safe bool + ) + + JustBeforeEach(func() { + PrepareForShutdown(roundTripper, coreClient.URL, username, password, safe) + err = coreClient.Shutdown(safe) + }) + + Context("shutdown safely", func() { + BeforeEach(func() { + safe = true + }) + It("should success", func() { + Expect(err).To(BeNil()) + }) + }) + + Context("shutdown not safely", func() { + BeforeEach(func() { + safe = false + }) + It("should success", func() { + Expect(err).To(BeNil()) + }) + }) + }) + + Context("prepare shutdown", func() { + var ( + err error + cancel bool + ) + + JustBeforeEach(func() { + PrepareForCancelShutdown(roundTripper, coreClient.URL, username, password, cancel) + err = coreClient.PrepareShutdown(cancel) + }) + + Context("cancelQuietDown", func() { + BeforeEach(func() { + cancel = true + }) + It("should success", func() { + Expect(err).To(BeNil()) + }) + }) + + Context("quietDown", func() { + BeforeEach(func() { + cancel = false + }) + It("should success", func() { + Expect(err).To(BeNil()) + }) + }) + }) }) diff --git a/client/core_test_common.go b/client/core_test_common.go index 6a2dca3494743644dae13c21664f708106176cf3..6af6e9d9b05bb49fd6f3915cb73e830dd1884996 100644 --- a/client/core_test_common.go +++ b/client/core_test_common.go @@ -24,6 +24,30 @@ func PrepareRestartDirectly(roundTripper *mhttp.MockRoundTripper, rootURL, user, return } +// PrepareForShutdown only for test +func PrepareForShutdown(roundTripper *mhttp.MockRoundTripper, rootURL, user, password string, safe bool) { + var request *http.Request + if safe { + request, _ = http.NewRequest("POST", fmt.Sprintf("%s/safeExit", rootURL), nil) + } else { + request, _ = http.NewRequest("POST", fmt.Sprintf("%s/exit", rootURL), nil) + } + PrepareCommonPost(request, "", roundTripper, user, password, rootURL) + return +} + +// PrepareForCancelShutdown only for test +func PrepareForCancelShutdown(roundTripper *mhttp.MockRoundTripper, rootURL, user, password string, cancel bool) { + var request *http.Request + if cancel { + request, _ = http.NewRequest("POST", fmt.Sprintf("%s/cancelQuietDown", rootURL), nil) + } else { + request, _ = http.NewRequest("POST", fmt.Sprintf("%s/quietDown", rootURL), nil) + } + PrepareCommonPost(request, "", roundTripper, user, password, rootURL) + return +} + // PrepareForGetIdentity only for test func PrepareForGetIdentity(roundTripper *mhttp.MockRoundTripper, rootURL, user, password string) { request, _ := http.NewRequest("GET", fmt.Sprintf("%s/instance", rootURL), nil) diff --git a/client/pluginApi_test.go b/client/pluginApi_test.go index 06dd04d205050a87402729f9958a328825ae4163..570479b98850dee79859cbb6cf0a5a0bb5a548a3 100644 --- a/client/pluginApi_test.go +++ b/client/pluginApi_test.go @@ -63,9 +63,8 @@ var _ = Describe("plugin api test", func() { pluginAPI.DownloadPlugins(names) _, err := os.Stat("fake.hpi") - Expect(err).To(BeNil()) - defer os.Remove("fake.hpi") + Expect(err).To(BeNil()) }) It("use mirror", func() { @@ -78,9 +77,8 @@ var _ = Describe("plugin api test", func() { pluginAPI.DownloadPlugins(names) _, err := os.Stat("fake.hpi") - Expect(err).To(BeNil()) - defer os.Remove("fake.hpi") + Expect(err).To(BeNil()) }) It("with dependency which is not optional", func() { diff --git a/e2e/shutdown_test.go b/e2e/shutdown_test.go new file mode 100644 index 0000000000000000000000000000000000000000..f1269b60c231c9f042582ccf9c3a5885261f3846 --- /dev/null +++ b/e2e/shutdown_test.go @@ -0,0 +1,14 @@ +package e2e + +import ( + "fmt" + "github.com/stretchr/testify/assert" + "os/exec" + "testing" +) + +func TestShutdown(t *testing.T) { + cmd := exec.Command("jcli", "shutdown", "--url", GetJenkinsURL()) + data, err := cmd.CombinedOutput() + assert.Nil(t, err, fmt.Sprintf("failed in shutdown Jenkins, output is %s", string(data))) +} diff --git a/sonar-project.properties b/sonar-project.properties index 6c08401217446740843d535ea5503ebea18a0b9c..f8fb31b189734ae498bd8df7522fd8f82283b783 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,3 +1,4 @@ +sonar.organization=jenkins-zh sonar.projectKey=jenkins-zh_jenkins-cli # this is the name and version displayed in the SonarCloud UI. sonar.projectName=jenkins-cli @@ -10,6 +11,8 @@ sonar.sources=. # Encoding of the source code. Default is default system encoding #sonar.sourceEncoding=UTF-8 -sonar.go.exclusions=**/vendor/**,**/**/*_test.go,client/test_methods.go +sonar.go.exclusions=**/vendor/**,**/**/*_test.go,client/test_methods.go,app/i18n/bindata.go +sonar.exclusions=**/vendor/**,**/**/*_test.go,client/test_methods.go,app/i18n/bindata.go +sonar.coverage.exclusions=app/i18n/bindata.go sonar.go.coverage.reportPaths=coverage.out