From 1b5c89232f5969d510ecae45bbea1e688f5bebeb Mon Sep 17 00:00:00 2001 From: Thibault Le Ouay Date: Thu, 7 Nov 2024 12:09:42 +0100 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=94=A5=20tcp=20test=20working=20with?= =?UTF-8?q?=20CLI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test.yml | 24 +++++ .goreleaser.yaml | 3 +- README.md | 9 +- config.openstatus.yaml | 5 +- internal/monitors/monitor_info.go | 4 +- internal/monitors/monitor_info_test.go | 62 ++++++++----- internal/monitors/monitor_trigger.go | 32 +++++-- internal/monitors/monitor_trigger_test.go | 81 +++++++++++++++++ internal/monitors/monitors.go | 31 +++++-- internal/monitors/monitors_list.go | 4 +- internal/monitors/monitors_list_test.go | 86 ++++++++++++++++++ internal/monitors/monitors_test.go | 17 ++++ internal/run/run.go | 33 +++++-- internal/run/run_test.go | 102 ++++++++++++++++++++++ internal/whoami/whoami.go | 4 +- internal/whoami/whoami_test.go | 80 +++++++++++++++++ 16 files changed, 522 insertions(+), 55 deletions(-) create mode 100644 .github/workflows/test.yml create mode 100644 internal/monitors/monitor_trigger_test.go create mode 100644 internal/monitors/monitors_list_test.go create mode 100644 internal/monitors/monitors_test.go create mode 100644 internal/run/run_test.go create mode 100644 internal/whoami/whoami_test.go diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..b164f1c --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,24 @@ +name: Tests + +on: + push: + branches: + - master + tags: + - '*.*.*' + pull_request: + branches: + - '**' + +jobs: + ci: + name: Continuous Integration + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version: '>=1.22.0' + - name: Run test + run: go test -timeout 30s -race -count=1 ./... diff --git a/.goreleaser.yaml b/.goreleaser.yaml index bcef038..c0c9f8e 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -73,9 +73,8 @@ brews: # Repository name. # # Templates: allowed. - name: homebrew-tap + name: homebrew-cli branch: main token: "{{ .Env.TAP_GITHUB_TOKEN }}" - diff --git a/README.md b/README.md index 627f792..02589d1 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,10 @@ # OpenStatus CLI -OpenStatus CLI is a command line interface for OpenStatus. \ No newline at end of file +OpenStatus CLI is a command line interface for OpenStatus. + +## Installation + +```bash +brew tap openstatus/cli +brew install openstatus +``` diff --git a/config.openstatus.yaml b/config.openstatus.yaml index f2a0360..b92fdbc 100644 --- a/config.openstatus.yaml +++ b/config.openstatus.yaml @@ -1,5 +1,4 @@ tests: ids: - - 2260 - - 2264 - + - 1 + - 2 diff --git a/internal/monitors/monitor_info.go b/internal/monitors/monitor_info.go index 2eb00cc..892ecf2 100644 --- a/internal/monitors/monitor_info.go +++ b/internal/monitors/monitor_info.go @@ -10,7 +10,7 @@ import ( "github.com/urfave/cli/v3" ) -func getMonitorInfo(httpClient *http.Client, apiKey string, monitorId string) error { +func GetMonitorInfo(httpClient *http.Client, apiKey string, monitorId string) error { if monitorId == "" { return fmt.Errorf("Monitor ID is required") @@ -50,7 +50,7 @@ func GetMonitorInfoCmd() *cli.Command { Action: func(ctx context.Context, cmd *cli.Command) error { fmt.Println("Monitor information") monitorId := cmd.Args().Get(0) - err := getMonitorInfo(http.DefaultClient, cmd.String("access-token"), monitorId) + err := GetMonitorInfo(http.DefaultClient, cmd.String("access-token"), monitorId) if err != nil { return cli.Exit("Failed to get monitor information", 1) } diff --git a/internal/monitors/monitor_info_test.go b/internal/monitors/monitor_info_test.go index 8edb55e..5a48ac9 100644 --- a/internal/monitors/monitor_info_test.go +++ b/internal/monitors/monitor_info_test.go @@ -1,26 +1,15 @@ -package monitors +package monitors_test import ( "bytes" + "io" "log" "net/http" "os" "testing" -) - -type interceptorHTTPClient struct { - f func(req *http.Request) (*http.Response, error) -} - -func (i *interceptorHTTPClient) RoundTrip(req *http.Request) (*http.Response, error) { - return i.f(req) -} -func (i *interceptorHTTPClient) GetHTTPClient() *http.Client { - return &http.Client{ - Transport: i, - } -} + "github.com/openstatusHQ/cli/internal/monitors" +) func Test_getMonitorInfo(t *testing.T) { t.Parallel() @@ -30,7 +19,7 @@ func Test_getMonitorInfo(t *testing.T) { interceptor := &interceptorHTTPClient{ f: func(req *http.Request) (*http.Response, error) { return &http.Response{ - StatusCode: http.StatusAccepted, + StatusCode: http.StatusOK, }, nil }, } @@ -40,18 +29,49 @@ func Test_getMonitorInfo(t *testing.T) { t.Cleanup(func() { log.SetOutput(os.Stdout) }) - err := getMonitorInfo(interceptor.GetHTTPClient(), "", "") + err := monitors.GetMonitorInfo(interceptor.GetHTTPClient(), "", "") if err == nil { t.Errorf("Expected log output, got nothing") } }) - t.Run("Monitor ID is required", func(t *testing.T) { + t.Run("Should work", func(t *testing.T) { + + body := `{ + "id": 2260, + "periodicity": "10m", + "url": "https://www.openstatus.dev", + "regions": [ + "iad", + "hkg", + "jnb", + "syd", + "gru" + ], + "name": "Vercel Checker Edge", + "description": "", + "method": "GET", + "body": "", + "headers": [ + { + "key": "", + "value": "" + } + ], + "assertions": [], + "active": false, + "public": false, + "degradedAfter": null, + "timeout": 45000, + "jobType": "http" +}` + r := io.NopCloser(bytes.NewReader([]byte(body))) interceptor := &interceptorHTTPClient{ f: func(req *http.Request) (*http.Response, error) { return &http.Response{ - StatusCode: http.StatusAccepted, + StatusCode: http.StatusOK, + Body: r, }, nil }, } @@ -61,8 +81,8 @@ func Test_getMonitorInfo(t *testing.T) { t.Cleanup(func() { log.SetOutput(os.Stdout) }) - err := getMonitorInfo(interceptor.GetHTTPClient(), "", "") - if err == nil { + err := monitors.GetMonitorInfo(interceptor.GetHTTPClient(), "test", "1") + if err != nil { t.Errorf("Expected log output, got nothing") } }) diff --git a/internal/monitors/monitor_trigger.go b/internal/monitors/monitor_trigger.go index 7df1890..8972c3d 100644 --- a/internal/monitors/monitor_trigger.go +++ b/internal/monitors/monitor_trigger.go @@ -17,7 +17,7 @@ var ( noResult bool ) -func monitorTrigger(httpClient *http.Client, apiKey string, monitorId string) error { +func MonitorTrigger(httpClient *http.Client, apiKey string, monitorId string) error { if monitorId == "" { return fmt.Errorf("Monitor ID is required") @@ -57,12 +57,30 @@ func monitorTrigger(httpClient *http.Client, apiKey string, monitorId string) er var inError bool for _, r := range result { - if r.Error != "" { - inError = true - tbl.AddRow(r.Region, r.Latency, color.RedString("❌")) - } else { - tbl.AddRow(r.Region, r.Latency, color.GreenString("✔")) + if r.JobType == "tcp" { + var result TCPRunResult + if err := json.Unmarshal(r.Message, &result); err != nil { + return fmt.Errorf("unable to unmarshal : %w", err) + } + if result.ErrorMessge != "" { + inError = true + tbl.AddRow(r.Region, r.Latency, color.RedString("❌")) + continue + } + + } + if r.JobType == "http" { + var result HTTPRunResult + if err := json.Unmarshal(r.Message, &result); err != nil { + return fmt.Errorf("unable to unmarshal : %w", err) + } + if result.Error != "" { + inError = true + tbl.AddRow(r.Region, r.Latency, color.RedString("❌")) + continue + } } + tbl.AddRow(r.Region, r.Latency, color.GreenString("✔")) } tbl.Print() @@ -98,7 +116,7 @@ func GetMonitorsTriggerCmd() *cli.Command { }, Action: func(ctx context.Context, cmd *cli.Command) error { monitorId := cmd.Args().Get(0) - err := monitorTrigger(http.DefaultClient, cmd.String("access-token"), monitorId) + err := MonitorTrigger(http.DefaultClient, cmd.String("access-token"), monitorId) if err != nil { return cli.Exit("Failed to trigger monitor", 1) } diff --git a/internal/monitors/monitor_trigger_test.go b/internal/monitors/monitor_trigger_test.go new file mode 100644 index 0000000..1e22e5d --- /dev/null +++ b/internal/monitors/monitor_trigger_test.go @@ -0,0 +1,81 @@ +package monitors_test + +import ( + "bytes" + "io" + "log" + "net/http" + "os" + "testing" + + "github.com/openstatusHQ/cli/internal/monitors" +) + +func Test_getMonitorTrigger(t *testing.T) { + t.Parallel() + + t.Run("Monitor ID is required", func(t *testing.T) { + + interceptor := &interceptorHTTPClient{ + f: func(req *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusOK, + }, nil + }, + } + + var bf bytes.Buffer + log.SetOutput(&bf) + t.Cleanup(func() { + log.SetOutput(os.Stdout) + }) + err := monitors.MonitorTrigger(interceptor.GetHTTPClient(), "", "") + if err == nil { + t.Errorf("Expected log output, got nothing") + } + }) + + t.Run("Successfully return", func(t *testing.T) { + body := `{"resultId": 1}` + r := io.NopCloser(bytes.NewReader([]byte(body))) + + interceptor := &interceptorHTTPClient{ + f: func(req *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusOK, + Body: r, + }, nil + }, + } + + var bf bytes.Buffer + log.SetOutput(&bf) + t.Cleanup(func() { + log.SetOutput(os.Stdout) + }) + err := monitors.MonitorTrigger(interceptor.GetHTTPClient(), "", "") + if err == nil { + t.Errorf("Expected log output, got nothing") + } + }) + t.Run("No 200 throw error", func(t *testing.T) { + + interceptor := &interceptorHTTPClient{ + f: func(req *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusInternalServerError, + }, nil + }, + } + + var bf bytes.Buffer + log.SetOutput(&bf) + t.Cleanup(func() { + log.SetOutput(os.Stdout) + }) + err := monitors.MonitorTrigger(interceptor.GetHTTPClient(), "1", "1") + if err == nil { + t.Errorf("Expected log output, got nothing") + } + }) +} diff --git a/internal/monitors/monitors.go b/internal/monitors/monitors.go index 4369ea5..3caa76d 100644 --- a/internal/monitors/monitors.go +++ b/internal/monitors/monitors.go @@ -1,6 +1,8 @@ package monitors import ( + "encoding/json" + "github.com/urfave/cli/v3" ) @@ -46,14 +48,27 @@ type TriggerResultResponse struct { } type RunResult struct { - Headers map[string]string `json:"headers,omitempty"` - Body string `json:"body,omitempty"` - Error string `json:"error,omitempty"` - Region string `json:"region"` - Latency int64 `json:"latency"` - Timestamp int64 `json:"timestamp"` - Status int `json:"status,omitempty"` - Timing Timing `json:"timing"` + JobType string `json:"jobType"` + Region string `json:"region"` + Message json.RawMessage + Timestamp int64 `json:"timestamp"` + Latency int64 `json:"latency"` +} + +type HTTPRunResult struct { + Headers map[string]string `json:"headers,omitempty"` + Body string `json:"body,omitempty"` + Error string `json:"error,omitempty"` + Status int `json:"status,omitempty"` + Timing Timing `json:"timing"` +} + +type TCPRunResult struct { + ErrorMessge string `json:"errorMessage"` + Timing struct { + TCPStart int64 `json:"tcpStart"` + TCPDone int64 `json:"tcpDone"` + } `json:"timing"` } func MonitorsCmd() *cli.Command { diff --git a/internal/monitors/monitors_list.go b/internal/monitors/monitors_list.go index 909e21e..3003709 100644 --- a/internal/monitors/monitors_list.go +++ b/internal/monitors/monitors_list.go @@ -14,7 +14,7 @@ import ( var allMonitor bool -func listMonitors(httpClient *http.Client, apiKey string) error { +func ListMonitors(httpClient *http.Client, apiKey string) error { url := "https://api.openstatus.dev/v1/monitor" req, _ := http.NewRequest("GET", url, nil) @@ -72,7 +72,7 @@ func GetMonitorsListCmd() *cli.Command { }, Action: func(ctx context.Context, cmd *cli.Command) error { fmt.Println("List of all monitors") - err := listMonitors(http.DefaultClient, cmd.String("access-token")) + err := ListMonitors(http.DefaultClient, cmd.String("access-token")) if err != nil { return cli.Exit("Failed to list monitors", 1) } diff --git a/internal/monitors/monitors_list_test.go b/internal/monitors/monitors_list_test.go new file mode 100644 index 0000000..e484de1 --- /dev/null +++ b/internal/monitors/monitors_list_test.go @@ -0,0 +1,86 @@ +package monitors_test + +import ( + "bytes" + "io" + "log" + "net/http" + "os" + "testing" + + "github.com/openstatusHQ/cli/internal/monitors" +) + +func Test_listMonitors(t *testing.T) { + t.Parallel() + + t.Run("Successfully return", func(t *testing.T) { + body := `[ + { + "id": 1, + "periodicity": "10m", + "url": "https://www.openstatus.dev", + "regions": [ + "ams", + "scl" + ], + "name": "OpenStatus ", + "description": "Our website 🌐", + "method": "GET", + "body": "", + "headers": [ + { + "key": "", + "value": "" + } + ], + "assertions": [], + "active": true, + "public": true, + "degradedAfter": null, + "timeout": 45000, + "jobType": "http" + }]` + r := io.NopCloser(bytes.NewReader([]byte(body))) + + interceptor := &interceptorHTTPClient{ + f: func(req *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusOK, + Body: r, + }, nil + }, + } + + var bf bytes.Buffer + log.SetOutput(&bf) + t.Cleanup(func() { + log.SetOutput(os.Stdout) + }) + err := monitors.ListMonitors(interceptor.GetHTTPClient(), "") + if err != nil { + t.Error(err) + t.Errorf("Expected log output, got nothing") + } + }) + t.Run("No 200 throw error", func(t *testing.T) { + + interceptor := &interceptorHTTPClient{ + f: func(req *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusInternalServerError, + }, nil + }, + } + + var bf bytes.Buffer + log.SetOutput(&bf) + t.Cleanup(func() { + log.SetOutput(os.Stdout) + }) + err := monitors.ListMonitors(interceptor.GetHTTPClient(), "1") + if err == nil { + t.Errorf("Expected log output, got nothing") + } + }) +} diff --git a/internal/monitors/monitors_test.go b/internal/monitors/monitors_test.go new file mode 100644 index 0000000..d0ea92c --- /dev/null +++ b/internal/monitors/monitors_test.go @@ -0,0 +1,17 @@ +package monitors_test + +import "net/http" + +type interceptorHTTPClient struct { + f func(req *http.Request) (*http.Response, error) +} + +func (i *interceptorHTTPClient) RoundTrip(req *http.Request) (*http.Response, error) { + return i.f(req) +} + +func (i *interceptorHTTPClient) GetHTTPClient() *http.Client { + return &http.Client{ + Transport: i, + } +} diff --git a/internal/run/run.go b/internal/run/run.go index 44e051f..ef68891 100644 --- a/internal/run/run.go +++ b/internal/run/run.go @@ -15,7 +15,7 @@ import ( "github.com/urfave/cli/v3" ) -func monitorTrigger(httpClient *http.Client, apiKey string, monitorId string) error { +func MonitorTrigger(httpClient *http.Client, apiKey string, monitorId string) error { if monitorId == "" { return fmt.Errorf("Monitor ID is required") @@ -54,12 +54,31 @@ func monitorTrigger(httpClient *http.Client, apiKey string, monitorId string) er var inError bool for _, r := range result { - if r.Error != "" { - inError = true - tbl.AddRow(r.Region, r.Latency, color.RedString("❌")) - } else { - tbl.AddRow(r.Region, r.Latency, color.GreenString("✔")) + if r.JobType == "tcp" { + var result monitors.TCPRunResult + if err := json.Unmarshal(r.Message, &result); err != nil { + return fmt.Errorf("unable to unmarshal : %w", err) + } + if result.ErrorMessge != "" { + inError = true + tbl.AddRow(r.Region, r.Latency, color.RedString("❌")) + continue + } + } + if r.JobType == "http" { + var result monitors.HTTPRunResult + if err := json.Unmarshal(r.Message, &result); err != nil { + return fmt.Errorf("unable to unmarshal : %w", err) + } + if result.Error != "" { + inError = true + tbl.AddRow(r.Region, r.Latency, color.RedString("❌")) + continue + } + } + + tbl.AddRow(r.Region, r.Latency, color.GreenString("✔")) } tbl.Print() @@ -96,7 +115,7 @@ func RunCmd() *cli.Command { wg.Add(1) go func(id int) { defer wg.Done() - if err := monitorTrigger(http.DefaultClient, cmd.String("access-token"), fmt.Sprintf("%d", id)); err != nil { + if err := MonitorTrigger(http.DefaultClient, cmd.String("access-token"), fmt.Sprintf("%d", id)); err != nil { ch <- err } diff --git a/internal/run/run_test.go b/internal/run/run_test.go new file mode 100644 index 0000000..21f05f2 --- /dev/null +++ b/internal/run/run_test.go @@ -0,0 +1,102 @@ +package run_test + +import ( + "bytes" + "io" + "log" + "net/http" + "os" + "testing" + + "github.com/openstatusHQ/cli/internal/run" +) + +type interceptorHTTPClient struct { + f func(req *http.Request) (*http.Response, error) +} + +func (i *interceptorHTTPClient) RoundTrip(req *http.Request) (*http.Response, error) { + return i.f(req) +} + +func (i *interceptorHTTPClient) GetHTTPClient() *http.Client { + return &http.Client{ + Transport: i, + } +} + +func Test_run(t *testing.T) { + t.Parallel() + + t.Run("No Id should return error", func(t *testing.T) { + // body := `{ + // "name": "openstatus", + // "slug": "openstatus", + // "plan": "pro" + // }` + // r := io.NopCloser(bytes.NewReader([]byte(body))) + + interceptor := &interceptorHTTPClient{ + f: func(req *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusOK, + // Body: r, + }, nil + }, + } + + var bf bytes.Buffer + log.SetOutput(&bf) + t.Cleanup(func() { + log.SetOutput(os.Stdout) + }) + err := run.MonitorTrigger(interceptor.GetHTTPClient(), "", "") + if err == nil { + t.Error(err) + t.Errorf("Monitor Trigger should return error") + } + }) + t.Run("Successfully run http reponse", func(t *testing.T) { + body := `[ + { + "status": 200, + "latency": 318, + "region": "iad", + "timestamp": 1730296465106, + "timing": { + "dnsStart": 1730296465106, + "dnsDone": 1730296465109, + "connectStart": 1730296465109, + "connectDone": 1730296465110, + "tlsHandshakeStart": 1730296465110, + "tlsHandshakeDone": 1730296465116, + "firstByteStart": 1730296465117, + "firstByteDone": 1730296465425, + "transferStart": 1730296465425, + "transferDone": 1730296465425 + }, + "body": "{\"ping\":\"pong\"}" + }]` + r := io.NopCloser(bytes.NewReader([]byte(body))) + + interceptor := &interceptorHTTPClient{ + f: func(req *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusOK, + Body: r, + }, nil + }, + } + + var bf bytes.Buffer + log.SetOutput(&bf) + t.Cleanup(func() { + log.SetOutput(os.Stdout) + }) + err := run.MonitorTrigger(interceptor.GetHTTPClient(), "", "1") + if err != nil { + t.Error(err) + t.Errorf("Monitor Trigger should return error") + } + }) +} diff --git a/internal/whoami/whoami.go b/internal/whoami/whoami.go index 3a3e0cf..c4b6f86 100644 --- a/internal/whoami/whoami.go +++ b/internal/whoami/whoami.go @@ -16,7 +16,7 @@ type Whoami struct { Plan string `json:"plan"` } -func getWhoamiCmd(httpClient *http.Client, apiKey string) error { +func GetWhoamiCmd(httpClient *http.Client, apiKey string) error { url := "https://api.openstatus.dev/v1/whoami" req, _ := http.NewRequest("GET", url, nil) @@ -50,7 +50,7 @@ func WhoamiCmd() *cli.Command { Usage: "Get your current workspace information", Action: func(ctx context.Context, cmd *cli.Command) error { fmt.Println("Your current workspace information") - err := getWhoamiCmd(http.DefaultClient, cmd.String("access-token")) + err := GetWhoamiCmd(http.DefaultClient, cmd.String("access-token")) if err != nil { return cli.Exit("Failed to get workspace information", 1) } diff --git a/internal/whoami/whoami_test.go b/internal/whoami/whoami_test.go new file mode 100644 index 0000000..907bd2e --- /dev/null +++ b/internal/whoami/whoami_test.go @@ -0,0 +1,80 @@ +package whoami_test + +import ( + "bytes" + "io" + "log" + "net/http" + "os" + "testing" + + "github.com/openstatusHQ/cli/internal/whoami" +) + +type interceptorHTTPClient struct { + f func(req *http.Request) (*http.Response, error) +} + +func (i *interceptorHTTPClient) RoundTrip(req *http.Request) (*http.Response, error) { + return i.f(req) +} + +func (i *interceptorHTTPClient) GetHTTPClient() *http.Client { + return &http.Client{ + Transport: i, + } +} + +func Test_getWhoami(t *testing.T) { + t.Parallel() + + t.Run("Successfully return", func(t *testing.T) { + body := `{ + "name": "openstatus", + "slug": "openstatus", + "plan": "pro" +}` + r := io.NopCloser(bytes.NewReader([]byte(body))) + + interceptor := &interceptorHTTPClient{ + f: func(req *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusOK, + Body: r, + }, nil + }, + } + + var bf bytes.Buffer + log.SetOutput(&bf) + t.Cleanup(func() { + log.SetOutput(os.Stdout) + }) + err := whoami.GetWhoamiCmd(interceptor.GetHTTPClient(), "") + if err != nil { + t.Error(err) + t.Errorf("Expected log output, got nothing") + } + }) + + t.Run("Should return error", func(t *testing.T) { + + interceptor := &interceptorHTTPClient{ + f: func(req *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusInternalServerError, + }, nil + }, + } + + var bf bytes.Buffer + log.SetOutput(&bf) + t.Cleanup(func() { + log.SetOutput(os.Stdout) + }) + err := whoami.GetWhoamiCmd(interceptor.GetHTTPClient(), "") + if err == nil { + t.Errorf("Expected log output, got nothing") + } + }) +} -- 2.51.2 From 4f715754df4d507939fb5939496305ad9e95e7aa Mon Sep 17 00:00:00 2001 From: Thibault Le Ouay Date: Thu, 7 Nov 2024 12:11:49 +0100 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=94=A5=20improve=20action?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6c14452..8bd1435 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,7 +2,6 @@ name: goreleaser on: - pull_request: push: # run only against tags tags: -- 2.51.2