diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0bc75d41..f4f12fde 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,6 +21,8 @@ jobs: uses: actions/checkout@v2 - name: Release hrp cli binaries uses: wangyoucao577/go-release-action@v1.22 + env: + GA_TRACKING_ID: ${{ secrets.GA_TRACKING_ID }} with: github_token: ${{ secrets.GITHUB_TOKEN }} goos: ${{ matrix.goos }} diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index ece0b0fb..d0680739 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -28,6 +28,8 @@ jobs: - name: Checkout code uses: actions/checkout@v2 - name: Run coverage + env: + GA_TRACKING_ID: ${{ secrets.GA_TRACKING_ID }} run: go test -coverprofile="cover.out" -covermode=atomic -race ./... - name: Upload coverage to Codecov uses: codecov/codecov-action@v2 diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 7023b21f..ae6f24e7 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -3,6 +3,8 @@ ## v0.5.0 (2022-01-06) - feat: support creating and calling custom functions with [go plugin](https://pkg.go.dev/plugin) +- feat: install hrp with one shell command +- feat: report GA event for loading go plugin ## v0.4.0 (2022-01-05) diff --git a/docs/cmd/hrp.md b/docs/cmd/hrp.md index af644700..cb05f56f 100644 --- a/docs/cmd/hrp.md +++ b/docs/cmd/hrp.md @@ -32,4 +32,4 @@ Copyright 2021 debugtalk * [hrp har2case](hrp_har2case.md) - Convert HAR to json/yaml testcase files * [hrp run](hrp_run.md) - run API test -###### Auto generated by spf13/cobra on 6-Jan-2022 +###### Auto generated by spf13/cobra on 7-Jan-2022 diff --git a/docs/cmd/hrp_boom.md b/docs/cmd/hrp_boom.md index 5690fc09..f81e3723 100644 --- a/docs/cmd/hrp_boom.md +++ b/docs/cmd/hrp_boom.md @@ -38,4 +38,4 @@ hrp boom [flags] * [hrp](hrp.md) - One-stop solution for HTTP(S) testing. -###### Auto generated by spf13/cobra on 6-Jan-2022 +###### Auto generated by spf13/cobra on 7-Jan-2022 diff --git a/docs/cmd/hrp_har2case.md b/docs/cmd/hrp_har2case.md index 144caa8c..da27b051 100644 --- a/docs/cmd/hrp_har2case.md +++ b/docs/cmd/hrp_har2case.md @@ -23,4 +23,4 @@ hrp har2case harPath... [flags] * [hrp](hrp.md) - One-stop solution for HTTP(S) testing. -###### Auto generated by spf13/cobra on 6-Jan-2022 +###### Auto generated by spf13/cobra on 7-Jan-2022 diff --git a/docs/cmd/hrp_run.md b/docs/cmd/hrp_run.md index a0f5d0db..5564d2e4 100644 --- a/docs/cmd/hrp_run.md +++ b/docs/cmd/hrp_run.md @@ -31,4 +31,4 @@ hrp run path... [flags] * [hrp](hrp.md) - One-stop solution for HTTP(S) testing. -###### Auto generated by spf13/cobra on 6-Jan-2022 +###### Auto generated by spf13/cobra on 7-Jan-2022 diff --git a/hrp/cmd/root.go b/hrp/cmd/root.go index db06388e..0b60831a 100644 --- a/hrp/cmd/root.go +++ b/hrp/cmd/root.go @@ -51,7 +51,6 @@ func Execute() { RootCmd.PersistentFlags().BoolVar(&logJSON, "log-json", false, "set log to json format") if err := RootCmd.Execute(); err != nil { - log.Error().Err(err).Msg("Failed to execute root command") os.Exit(1) } } diff --git a/hrp/cmd/run.go b/hrp/cmd/run.go index 93423094..29aa2486 100644 --- a/hrp/cmd/run.go +++ b/hrp/cmd/run.go @@ -1,6 +1,8 @@ package cmd import ( + "os" + "github.com/spf13/cobra" "github.com/httprunner/hrp" @@ -18,7 +20,7 @@ var runCmd = &cobra.Command{ PreRun: func(cmd *cobra.Command, args []string) { setLogLevel(logLevel) }, - RunE: func(cmd *cobra.Command, args []string) error { + Run: func(cmd *cobra.Command, args []string) { var paths []hrp.ITestCase for _, arg := range args { paths = append(paths, &hrp.TestCasePath{Path: arg}) @@ -29,7 +31,10 @@ var runCmd = &cobra.Command{ if proxyUrl != "" { runner.SetProxyUrl(proxyUrl) } - return runner.Run(paths...) + err := runner.Run(paths...) + if err != nil { + os.Exit(1) + } }, } diff --git a/hrp/scripts/install.sh b/hrp/scripts/install.sh new file mode 100644 index 00000000..038e0493 --- /dev/null +++ b/hrp/scripts/install.sh @@ -0,0 +1,84 @@ +#!/bin/bash +# install hrp with one shell command +# curl -sL https://raw.githubusercontent.com/httprunner/hrp/main/hrp/scripts/install.sh | bash + +set -e + +function echoError() { + echo -e "\033[31m✘ $1\033[0m" # red +} +export -f echoError + +function echoInfo() { + echo -e "\033[32m✔ $1\033[0m" # green +} +export -f echoInfo + +function echoWarn() { + echo -e "\033[33m! $1\033[0m" # yellow +} +export -f echoError + +function get_latest_version() { + # Release v0.4.0 · httprunner/hrp · GitHub + curl -sL https://github.com/httprunner/hrp/releases/latest | grep 'Release' | cut -d" " -f4 +} + +function get_arch() { + arch=$(uname -m) + if [ "$arch" == "x86_64" ]; then + arch="amd64" + fi + echo "$arch" +} + +function main() { + echoInfo "Detect target hrp package..." + version=$(get_latest_version) + echo "Latest version: $version" + os=$(uname -s) + echo "Current OS: $os" + arch=$(get_arch) + echo "Current ARCH: $arch" + pkg="hrp-$version-$os-$arch.tar.gz" + url="https://github.com/httprunner/hrp/releases/download/$version/$pkg" + echo "Selected package: $url" + echo + + echoInfo "Created temp dir..." + tmp_dir=$(mktemp -d -t hrp) + echo "$tmp_dir" + cd "$tmp_dir" + echo + + echoInfo "Downloading..." + curl -L $url -o "$pkg" + echo + + echoInfo "Extracting..." + tar -zxf "$pkg" + ls -lh + echo + + echoInfo "Installing..." + if hrp -v > /dev/null; then + echoWarn "$(hrp -v) exists, remove first !!!" + echo "$ rm -rf $(which hrp)" + rm -rf "$(which hrp)" + fi + + echo "chmod +x hrp && mv hrp /usr/local/bin/" + chmod +x hrp + mv hrp /usr/local/bin/ + echo + + echoInfo "Check installation..." + echo "$ which hrp" + which hrp + echo "$ hrp -v" + hrp -v + echo "$ hrp -h" + hrp -h +} + +main diff --git a/internal/ga/init.go b/internal/ga/init.go index b759398d..4f9c83c1 100644 --- a/internal/ga/init.go +++ b/internal/ga/init.go @@ -1,17 +1,16 @@ package ga import ( + "os" + "github.com/denisbrodbeck/machineid" "github.com/google/uuid" ) -const ( - trackingID = "UA-114587036-1" // Tracking ID for Google Analytics -) - var gaClient *GAClient func init() { + trackingID := os.Getenv("GA_TRACKING_ID") // Tracking ID for Google Analytics clientID, err := machineid.ProtectedID("hrp") if err != nil { nodeUUID, _ := uuid.NewUUID() diff --git a/plugin.go b/plugin.go index 005dbda8..6a5cf1f7 100644 --- a/plugin.go +++ b/plugin.go @@ -9,6 +9,7 @@ import ( "github.com/rs/zerolog/log" "github.com/httprunner/hrp/internal/builtin" + "github.com/httprunner/hrp/internal/ga" ) func (p *parser) loadPlugin(path string) error { @@ -33,6 +34,12 @@ func (p *parser) loadPlugin(path string) error { return nil } + // report event for loading go plugin + go ga.SendEvent(ga.EventTracking{ + Category: "LoadGoPlugin", + Action: "plugin.Open", + }) + // load plugin plugins, err := plugin.Open(pluginPath) if err != nil {