Skip to content

Commit

Permalink
Merge pull request #121 from vim-jp/urfave-cli
Browse files Browse the repository at this point in the history
Re-Implemente subcmd on github.com/urfave/cli/v2
  • Loading branch information
koron committed May 15, 2020
2 parents d8a4189 + 00fd416 commit 85f68f4
Show file tree
Hide file tree
Showing 13 changed files with 165 additions and 83 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build_pages.yml
Expand Up @@ -24,7 +24,7 @@ jobs:
- name: 'Generate htdocs'
run: |
cd generator
BASEURL=/slacklog go run . generate-html scripts/config.json templates/ ../data/files ../data/slacklog_data/ ../data/
BASEURL=/slacklog go run . generate-html --filesdir ../data/files --indir ../data/slacklog_data/ --outdir ../data/
cp -r assets ../data
rm -fr ../data/slacklog_data/ ../data/.github/
touch ../data/.nojekyll
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Expand Up @@ -7,6 +7,6 @@ require (
github.com/google/go-cmp v0.4.0
github.com/joho/godotenv v1.3.0
github.com/kyokomi/emoji v2.2.2+incompatible
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/slack-go/slack v0.6.4
github.com/urfave/cli/v2 v2.2.0
)
8 changes: 8 additions & 0 deletions go.sum
@@ -1,3 +1,5 @@
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-test/deep v1.0.4 h1:u2CU3YKy9I2pmu9pX0eq50wCgjfGIt539SqR7FbHiho=
Expand All @@ -14,9 +16,15 @@ github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/slack-go/slack v0.6.4 h1:cxOqFgM5RW6mdEyDqAJutFk3qiORK9oHRKi5bPqkY9o=
github.com/slack-go/slack v0.6.4/go.mod h1:sGRjv3w+ERAUMMMbldHObQPBcNSyVB7KLKYfnwUFBfw=
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/urfave/cli/v2 v2.2.0 h1:JTTnM6wKzdA0Jqodd966MVj4vWbbquZykeX1sKbe2C4=
github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
2 changes: 1 addition & 1 deletion scripts/download_emoji.sh
Expand Up @@ -9,4 +9,4 @@ if [ ! -d _logdata/slacklog_data/ ] ; then
exit 1
fi

go run . download-emoji _logdata/emojis/ _logdata/slacklog_data/emoji.json
go run . download-emoji
2 changes: 1 addition & 1 deletion scripts/download_files.sh
Expand Up @@ -9,4 +9,4 @@ if [ ! -d _logdata/slacklog_data/ ] ; then
exit 1
fi

go run . download-files _logdata/slacklog_data/ _logdata/files/
go run . download-files
2 changes: 1 addition & 1 deletion scripts/generate_html.sh
Expand Up @@ -9,4 +9,4 @@ if [ ! -d _logdata/slacklog_data/ ] ; then
exit 1
fi

go run . generate-html scripts/config.json templates/ files/ _logdata/slacklog_data/ _site/
go run . generate-html
2 changes: 1 addition & 1 deletion scripts/site_diff.sh
Expand Up @@ -51,7 +51,7 @@ generate_site() {
if [ -d _logdata ] ; then
filesdir=_logdata/files/
fi
${cmd} generate-html scripts/config.json ${tmpldir} ${filesdir} ${logdir} ${outdir}/ > ${outdir}.generate-html.log 2>&1 || ( cat ${outdir}.generate-html.log && exit 1 )
${cmd} generate-html --templatedir ${tmpldir} --filesdir ${filesdir} --indir ${logdir} --outdir ${outdir}/ > ${outdir}.generate-html.log 2>&1 || ( cat ${outdir}.generate-html.log && exit 1 )
rm -f ${cmd}
./scripts/build.sh -o $outdir > ${outdir}.build.log 2>&1 || ( cat ${outdir}.build.log && exit 1 )
}
Expand Down
25 changes: 17 additions & 8 deletions subcmd/convert_exported_logs.go
Expand Up @@ -14,19 +14,28 @@ import (
"os"
"path/filepath"

cli "github.com/urfave/cli/v2"
"github.com/vim-jp/slacklog-generator/internal/slacklog"
)

var ConvertExportedLogsFlags = []cli.Flag {
&cli.StringFlag{
Name: "indir",
Usage: "exported log dir",
Value: "_old_logs",
},
&cli.StringFlag{
Name: "outdir",
Usage: "slacklog_data dir",
Value: filepath.Join("_logdata", "slacklog_data"),
},
}

// ConvertExportedLogs converts log which exported from Slack, to generator can
// treated.
func ConvertExportedLogs(args []string) error {
if len(args) < 2 {
fmt.Println("Usage: go run . convert_exported_logs {indir} {outdir}")
return nil
}

inDir := filepath.Clean(args[0])
outDir := filepath.Clean(args[1])
func ConvertExportedLogs(c *cli.Context) error {
inDir := filepath.Clean(c.String("indir"))
outDir := filepath.Clean(c.String("outdir"))
inChannelsFile := filepath.Join(inDir, "channels.json")

channels, _, err := readChannels(inChannelsFile, []string{"*"})
Expand Down
28 changes: 17 additions & 11 deletions subcmd/download_emoji.go
Expand Up @@ -15,26 +15,32 @@ import (
"strings"

"github.com/slack-go/slack"
cli "github.com/urfave/cli/v2"
"github.com/vim-jp/slacklog-generator/internal/slacklog"
)

var EmojisFlags = []cli.Flag{
&cli.StringFlag{
Name: "outdir",
Usage: "emojis download target dir",
Value: filepath.Join("_logdata", "emojis"),
},
&cli.StringFlag{
Name: "emojiJSON",
Usage: "emoji json path",
Value: filepath.Join("_logdata", "emojis", "emoji.json"),
},
}

// DownloadEmoji downloads and save emoji image files.
func DownloadEmoji(args []string) error {
func DownloadEmoji(c *cli.Context) error {
slackToken := os.Getenv("SLACK_TOKEN")
if slackToken == "" {
return fmt.Errorf("$SLACK_TOKEN required")
}

if len(args) < 1 {
fmt.Println("Usage: go run . download_emoji {emojis-dir}")
return nil
}

emojisDir := filepath.Clean(args[0])
emojiJSONPath := filepath.Join(emojisDir, "emoji.json")
if 1 < len(args) {
emojiJSONPath = filepath.Clean(args[1])
}
emojisDir := filepath.Clean(c.String("outdir"))
emojiJSONPath := filepath.Clean(c.String("emojiJSON"))

api := slack.New(slackToken)

Expand Down
25 changes: 17 additions & 8 deletions subcmd/download_files.go
Expand Up @@ -12,23 +12,32 @@ import (
"os"
"path/filepath"

cli "github.com/urfave/cli/v2"
"github.com/vim-jp/slacklog-generator/internal/slacklog"
)

var FilesFlags = []cli.Flag{
&cli.StringFlag{
Name: "indir",
Usage: "slacklog_data dir",
Value: filepath.Join("_logdata", "slacklog_data"),
},
&cli.StringFlag{
Name: "outdir",
Usage: "files download target dir",
Value: filepath.Join("_logdata", "files"),
},
}

// DownloadFiles downloads and saves files which attached to message.
func DownloadFiles(args []string) error {
func DownloadFiles(c *cli.Context) error {
slackToken := os.Getenv("SLACK_TOKEN")
if slackToken == "" {
return fmt.Errorf("$SLACK_TOKEN required")
}

if len(args) < 2 {
fmt.Println("Usage: go run . download_files {log-dir} {files-dir}")
return nil
}

logDir := filepath.Clean(args[0])
filesDir := filepath.Clean(args[1])
logDir := filepath.Clean(c.String("indir"))
filesDir := filepath.Clean(c.String("outdir"))

s, err := slacklog.NewLogStore(logDir, &slacklog.Config{Channels: []string{"*"}})
if err != nil {
Expand Down
45 changes: 35 additions & 10 deletions subcmd/generate_html.go
Expand Up @@ -4,20 +4,45 @@ import (
"fmt"
"path/filepath"

cli "github.com/urfave/cli/v2"
"github.com/vim-jp/slacklog-generator/internal/slacklog"
)

var GenerateHTMLFlags = []cli.Flag{
&cli.StringFlag{
Name: "config",
Usage: "config.json path",
Value: filepath.Join("scripts", "config.json"),
},
&cli.StringFlag{
Name: "templatedir",
Usage: "templates dir",
Value: "templates",
},
&cli.StringFlag{
Name: "filesdir",
Usage: "files downloaded dir",
Value: filepath.Join("_logdata", "files"),
},
&cli.StringFlag{
Name: "indir",
Usage: "slacklog_data dir",
Value: filepath.Join("_logdata", "slacklog_data"),
},
&cli.StringFlag{
Name: "outdir",
Usage: "generated html target dir",
Value: "_site",
},
}

// GenerateHTML : SlackからエクスポートしたデータをHTMLに変換して出力する。
func GenerateHTML(args []string) error {
if len(args) < 4 {
fmt.Println("Usage: go run . generate_html {config.json} {templatedir} {filesdir} {indir} {outdir}")
return nil
}
configJSONPath := filepath.Clean(args[0])
templateDir := filepath.Clean(args[1])
filesDir := filepath.Clean(args[2])
inDir := filepath.Clean(args[3])
outDir := filepath.Clean(args[4])
func GenerateHTML(c *cli.Context) error {
configJSONPath := filepath.Clean(c.String("config"))
templateDir := filepath.Clean(c.String("templatedir"))
filesDir := filepath.Clean(c.String("filesdir"))
inDir := filepath.Clean(c.String("indir"))
outDir := filepath.Clean(c.String("outdir"))

cfg, err := slacklog.ReadConfig(configJSONPath)
if err != nil {
Expand Down
39 changes: 24 additions & 15 deletions subcmd/serve/serve.go
@@ -1,12 +1,31 @@
package serve

import (
"flag"
"net/http"
"net/http/httputil"
"net/url"

cli "github.com/urfave/cli/v2"
)

var Flags = []cli.Flag{
&cli.StringFlag{
Name: "addr",
Usage: "address for serve",
Value: ":8081",
},
&cli.StringFlag{
Name: "htdocs",
Usage: "root of files",
Value: "_site",
},
&cli.StringFlag{
Name: "target",
Usage: "proxy target endpoint",
Value: "https://vim-jp.org/slacklog/",
},
}

func newReverseProxy(targetURL string) (*httputil.ReverseProxy, error) {
u, err := url.Parse(targetURL)
if err != nil {
Expand All @@ -23,20 +42,10 @@ func newReverseProxy(targetURL string) (*httputil.ReverseProxy, error) {

// Run starts combined HTTP server (file + reverse proxy) to serve slacklog for
// development.
func Run(args []string) error {
var (
addr string
htdocs string
target string
)
fs := flag.NewFlagSet("serve", flag.ExitOnError)
fs.StringVar(&addr, "addr", ":8001", "address for serve")
fs.StringVar(&htdocs, "htdocs", "_site", "root of files")
fs.StringVar(&target, "target", "https://vim-jp.org/slacklog/", "proxy target endpoint")
err := fs.Parse(args)
if err != nil {
return err
}
func Run(c *cli.Context) error {
addr := c.String("addr")
htdocs := c.String("htdocs")
target := c.String("target")

proxy, err := newReverseProxy(target)
if err != nil {
Expand Down
66 changes: 41 additions & 25 deletions subcmd/subcmd.go
Expand Up @@ -4,36 +4,52 @@ import (
"fmt"
"os"

cli "github.com/urfave/cli/v2"
"github.com/vim-jp/slacklog-generator/subcmd/serve"
)

var commands = []*cli.Command{
{
Name: "convert-exported-logs",
Usage: "convert slack exported logs to API download logs",
Action: ConvertExportedLogs,
Flags: ConvertExportedLogsFlags,
},
{
Name: "download-emoji",
Usage: "download customized emoji from slack",
Action: DownloadEmoji,
Flags: EmojisFlags,
},
{
Name: "download-files",
Usage: "download files from slack.com",
Action: DownloadFiles,
Flags: FilesFlags,
},
{
Name: "generate-html",
Usage: "generate html from slacklog_data",
Action: GenerateHTML,
Flags: GenerateHTMLFlags,
},
{
Name: "serve",
Usage: "serve a generated HTML with files proxy",
Action: serve.Run,
Flags: serve.Flags,
},
}

// Run runs one of sub-commands.
func Run() error {
fmt.Println(os.Args)
if len(os.Args) < 2 {
fmt.Println(`Usage: go run . {subcmd}
Subcmd:
convert-exported-logs
download-emoji
download-files
generate-html`)
return nil
}

args := os.Args[2:]
subCmdName := os.Args[1]
switch subCmdName {
case "convert-exported-logs":
return ConvertExportedLogs(args)
case "download-emoji":
return DownloadEmoji(args)
case "download-files":
return DownloadFiles(args)
case "generate-html":
return GenerateHTML(args)
case "serve":
return serve.Run(args)
}
app := cli.NewApp()
app.EnableBashCompletion = true
app.Name = "slacklog-generator"
app.Usage = "generate slacklog HTML"
app.Version = "0.0.0"
app.Commands = commands

return fmt.Errorf("unknown subcmd: %s", subCmdName)
return app.Run(os.Args)
}

0 comments on commit 85f68f4

Please sign in to comment.