diff --git a/cmd/notices.go b/cmd/notices.go deleted file mode 100644 index 26cd4000..00000000 --- a/cmd/notices.go +++ /dev/null @@ -1,144 +0,0 @@ -package cmd - -import ( - "encoding/json" - "fmt" - "net/http" - "net/url" - "os" - "path/filepath" - "runtime" - "strings" - "time" - - log "github.com/sirupsen/logrus" -) - -type Notice struct { - Level string `json:"level"` - Message string `json:"message"` -} - -func displayNotices(input *Input) { - // Avoid causing trouble parsing the json - if input.listOptions { - return - } - select { - case notices := <-noticesLoaded: - if len(notices) > 0 { - noticeLogger := log.New() - if input.jsonLogger { - noticeLogger.SetFormatter(&log.JSONFormatter{}) - } else { - noticeLogger.SetFormatter(&log.TextFormatter{ - DisableQuote: true, - DisableTimestamp: true, - PadLevelText: true, - }) - } - - fmt.Printf("\n") - for _, notice := range notices { - level, err := log.ParseLevel(notice.Level) - if err != nil { - level = log.InfoLevel - } - noticeLogger.Log(level, notice.Message) - } - } - case <-time.After(time.Second * 1): - log.Debugf("Timeout waiting for notices") - } -} - -var noticesLoaded = make(chan []Notice) - -func loadVersionNotices(version string) { - go func() { - noticesLoaded <- getVersionNotices(version) - }() -} - -const NoticeURL = "https://api.nektosact.com/notices" - -func getVersionNotices(version string) []Notice { - if os.Getenv("ACT_DISABLE_VERSION_CHECK") == "1" { - return nil - } - - noticeURL, err := url.Parse(NoticeURL) - if err != nil { - log.Error(err) - return nil - } - query := noticeURL.Query() - query.Add("os", runtime.GOOS) - query.Add("arch", runtime.GOARCH) - query.Add("version", version) - - noticeURL.RawQuery = query.Encode() - - client := &http.Client{} - req, err := http.NewRequest("GET", noticeURL.String(), nil) - if err != nil { - log.Debug(err) - return nil - } - - etag := loadNoticesEtag() - if etag != "" { - log.Debugf("Conditional GET for notices etag=%s", etag) - req.Header.Set("If-None-Match", etag) - } - - resp, err := client.Do(req) - if err != nil { - log.Debug(err) - return nil - } - - newEtag := resp.Header.Get("Etag") - if newEtag != "" { - log.Debugf("Saving notices etag=%s", newEtag) - saveNoticesEtag(newEtag) - } - - defer resp.Body.Close() - notices := []Notice{} - if resp.StatusCode == 304 { - log.Debug("No new notices") - return nil - } - if err := json.NewDecoder(resp.Body).Decode(¬ices); err != nil { - log.Debug(err) - return nil - } - - return notices -} - -func loadNoticesEtag() string { - p := etagPath() - content, err := os.ReadFile(p) - if err != nil { - log.Debugf("Unable to load etag from %s: %e", p, err) - } - return strings.TrimSuffix(string(content), "\n") -} - -func saveNoticesEtag(etag string) { - p := etagPath() - err := os.WriteFile(p, []byte(strings.TrimSuffix(etag, "\n")), 0o600) - if err != nil { - log.Debugf("Unable to save etag to %s: %e", p, err) - } -} - -func etagPath() string { - dir := filepath.Join(CacheHomeDir, "act") - if err := os.MkdirAll(dir, 0o777); err != nil { - log.Fatal(err) - } - return filepath.Join(dir, ".notices.etag") -} diff --git a/cmd/root.go b/cmd/root.go index e6c01a49..da7d345f 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -55,14 +55,13 @@ func Execute(ctx context.Context, version string) { func createRootCommand(ctx context.Context, input *Input, version string) *cobra.Command { rootCmd := &cobra.Command{ - Use: "act [event name to run] [flags]\n\nIf no event name passed, will default to \"on: push\"\nIf actions handles only one event it will be used as default instead of \"on: push\"", - Short: "Run GitHub actions locally by specifying the event name (e.g. `push`) or an action name directly.", - Args: cobra.MaximumNArgs(1), - RunE: newRunCommand(ctx, input), - PersistentPreRun: setup(input), - PersistentPostRun: cleanup(input), - Version: version, - SilenceUsage: true, + Use: "act [event name to run] [flags]\n\nIf no event name passed, will default to \"on: push\"\nIf actions handles only one event it will be used as default instead of \"on: push\"", + Short: "Run GitHub actions locally by specifying the event name (e.g. `push`) or an action name directly.", + Args: cobra.MaximumNArgs(1), + RunE: newRunCommand(ctx, input), + PersistentPreRun: setup(input), + Version: version, + SilenceUsage: true, } rootCmd.Flags().BoolP("watch", "w", false, "watch the contents of the local repo and run when files change") @@ -303,13 +302,6 @@ func setup(_ *Input) func(*cobra.Command, []string) { if verbose { log.SetLevel(log.DebugLevel) } - loadVersionNotices(cmd.Version) - } -} - -func cleanup(inputs *Input) func(*cobra.Command, []string) { - return func(_ *cobra.Command, _ []string) { - displayNotices(inputs) } }