Skip to content

Commit

Permalink
Add TargetBadges to add badges like we see on GitHub in READMEs
Browse files Browse the repository at this point in the history
  • Loading branch information
geertjanvdk committed Feb 23, 2023
1 parent 2a162ff commit df1eed5
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 1 deletion.
6 changes: 5 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,8 @@ module github.com/golistic/gomake

go 1.20

require github.com/golistic/xt v1.0.1 // indirect
require (
github.com/golistic/shieldbadger v0.0.0-20230223210348-5649a4ba6aa9 // indirect
github.com/golistic/xt v1.0.1 // indirect
golang.org/x/mod v0.8.0 // indirect
)
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
github.com/golistic/shieldbadger v0.0.0-20230223210348-5649a4ba6aa9 h1:NBSzSvgVJjhI37ytLLcHLkRA7UTR/P1L/0dm6EY4GoE=
github.com/golistic/shieldbadger v0.0.0-20230223210348-5649a4ba6aa9/go.mod h1:9Ad43QCHXG87MxOV2rB668vLcEV/lC4qJZhs+VdEXJQ=
github.com/golistic/xt v1.0.1 h1:prcwpL757GEu+dj6x2v6vxHkulkFdyQ3S1PqO+6ohPM=
github.com/golistic/xt v1.0.1/go.mod h1:j1ZuWefyOD4HegoapgSjbXanA7X9YOKUeEB5gsEPgYg=
golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
71 changes: 71 additions & 0 deletions stock_badges.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
// Copyright (c) 2023, Geert JM Vanderkelen

package gomake

import (
"flag"
"fmt"
"path/filepath"

"github.com/golistic/shieldbadger"
)

// TargetBadges creates badges using Shields.io suitable for showing on, for example,
// GitHub. Badges are stored by default the folder `.badges` in the root of the
// repository.
// The definition of the badges is stored in JSON file `_badges/badges.json`.
var TargetBadges = Target{
Name: "badges",
PreMessages: []string{"generating badges"},
PostMessages: []string{"done generating badges"},
HandleFlags: func(target *Target) (*flag.FlagSet, error) {
flagSet := flag.NewFlagSet(target.Name, flag.ExitOnError)
if target.Flags == nil {
target.Flags = map[string]any{}
}

var (
configFile string
destFolder string
)

flagSet.StringVar(&configFile, "config", filepath.Join("_badges", "badge.json"),
"Configuration file containing which badges to generate")
flagSet.StringVar(&destFolder, "dest", "_badges/",
"Folder in which fetched badges will be stored")

if err := flagSet.Parse(target.FlagArgs); err != nil {
return nil, err
}

if configFile != "" {
target.Flags["config"] = configFile
} else {
return nil, fmt.Errorf("config file is required")
}

if configFile != "" {
target.Flags["destFolder"] = destFolder
} else {
return nil, fmt.Errorf("destination folder is required")
}

return flagSet, nil
},
Do: func(target *Target) error {
if _, err := target.HandleFlags(target); err != nil {
return err
}

sb, err := shieldbadger.NewShieldBadger(target.Flags["config"].(string))
if err != nil {
return err
}

sb.FeedbackCallback = func(format string, a ...any) {
target.Maker.Printf(format, a...)
}

return sb.Fetch()
},
}

0 comments on commit df1eed5

Please sign in to comment.