feat: generate and deploy with path
This commit is contained in:
parent
0241b4ada2
commit
f83bd237e5
|
@ -81,8 +81,14 @@ type Config struct {
|
|||
Deploy Deploy `yaml:"deploy"` // 部署配置
|
||||
}
|
||||
|
||||
var BaseDir string
|
||||
|
||||
func (c *Config) load() error {
|
||||
configBuffer, err := os.ReadFile("config.yaml")
|
||||
var file = "config.yaml"
|
||||
if BaseDir != "" {
|
||||
file = BaseDir + "/config.yaml"
|
||||
}
|
||||
configBuffer, err := os.ReadFile(file)
|
||||
if err != nil {
|
||||
logger.Errorf("read config file failed: %v", err)
|
||||
return err
|
||||
|
|
|
@ -1,14 +1,22 @@
|
|||
package main
|
||||
|
||||
import "github.com/spf13/cobra"
|
||||
import (
|
||||
"github.com/spf13/cobra"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func deployCmd() *cobra.Command {
|
||||
var path string
|
||||
var outter Outter
|
||||
cmd := &cobra.Command{
|
||||
Use: "deploy",
|
||||
Aliases: []string{"d"},
|
||||
Short: "deploy project to upyun",
|
||||
PreRun: func(cmd *cobra.Command, args []string) {
|
||||
if path != "" {
|
||||
BaseDir = strings.TrimSuffix(path, "/")
|
||||
}
|
||||
|
||||
if err := outter.loadConfig(); err != nil {
|
||||
logger.Fatalf("load config failed: %v", err)
|
||||
}
|
||||
|
@ -38,7 +46,7 @@ func deployCmd() *cobra.Command {
|
|||
logger.Errorf("please config upyun auth string: upx auth [bucket] [operator] [password]")
|
||||
return
|
||||
}
|
||||
if err := uploadToUpyun(config.UpyunAuth); err != nil {
|
||||
if err := uploadToUpyun(config.UpyunAuth, path); err != nil {
|
||||
logger.Errorf("upload dist to upyun failed: %v", err)
|
||||
return
|
||||
}
|
||||
|
@ -46,6 +54,6 @@ func deployCmd() *cobra.Command {
|
|||
}
|
||||
},
|
||||
}
|
||||
|
||||
cmd.Flags().StringVar(&path, "path", ".", "mder project path")
|
||||
return cmd
|
||||
}
|
||||
|
|
|
@ -22,11 +22,15 @@ import (
|
|||
func generateCmd() *cobra.Command {
|
||||
var startAt time.Time
|
||||
var outter = newOutter()
|
||||
var path string
|
||||
cmd := &cobra.Command{
|
||||
Use: "generate",
|
||||
Aliases: []string{"g"},
|
||||
Short: "generate project to dist folder",
|
||||
PreRun: func(cmd *cobra.Command, args []string) {
|
||||
if path != "" {
|
||||
BaseDir = strings.TrimSuffix(path, "/")
|
||||
}
|
||||
startAt = time.Now()
|
||||
// 读取配置文件
|
||||
if err := outter.loadConfig(); err != nil {
|
||||
|
@ -62,12 +66,13 @@ func generateCmd() *cobra.Command {
|
|||
logger.Infof("generate used: %s", endAt.String())
|
||||
},
|
||||
}
|
||||
cmd.Flags().StringVar(&path, "path", ".", "mder project path")
|
||||
return cmd
|
||||
}
|
||||
|
||||
// readAllPosts 读取所有post文章
|
||||
func (o *Outter) readAllPosts() error {
|
||||
const postDir = "./posts"
|
||||
var postDir = BaseDir + "/posts"
|
||||
dirs, err := os.ReadDir(postDir)
|
||||
if err != nil {
|
||||
logger.Errorf("read directory failed: %v", err)
|
||||
|
@ -215,7 +220,7 @@ func (o *Outter) readPosts(base, category string) []*Post {
|
|||
}
|
||||
|
||||
func (o *Outter) readAllPages() error {
|
||||
var dir = "./pages"
|
||||
var dir = BaseDir + "/pages"
|
||||
dirs, err := os.ReadDir(dir)
|
||||
if err != nil {
|
||||
logger.Errorf("read directory failed: %v", err)
|
||||
|
@ -241,7 +246,7 @@ func (o *Outter) readAllPages() error {
|
|||
|
||||
func (o *Outter) readTheme(themeName string) (err error) {
|
||||
o.Theme = new(Theme)
|
||||
var dir = fmt.Sprintf("./themes/%s", themeName)
|
||||
var dir = fmt.Sprintf("%s/themes/%s", BaseDir, themeName)
|
||||
o.Theme.BaseLayout, err = os.ReadFile(fmt.Sprintf("%s/base.html", dir))
|
||||
if err != nil {
|
||||
logger.Errorf("read base.html theme file failed: %v", err)
|
||||
|
@ -350,7 +355,7 @@ func (o *Outter) loadConfig() error {
|
|||
// readDataSource 读取资源文件
|
||||
func (o *Outter) readDataSource() error {
|
||||
o.SourceData = make(map[string]interface{})
|
||||
const dataDir = "./data"
|
||||
var dataDir = BaseDir + "/data"
|
||||
dirs, err := os.ReadDir(dataDir)
|
||||
if err != nil {
|
||||
return nil
|
||||
|
@ -401,12 +406,12 @@ func (o *Outter) generate() {
|
|||
|
||||
// clearDistDirectory 清理dist目录
|
||||
func (o *Outter) clearDistDirectory() error {
|
||||
if err := os.RemoveAll("./dist"); err != nil {
|
||||
if err := os.RemoveAll(BaseDir + "/dist"); err != nil {
|
||||
logger.Errorf("remove old dist directory failed: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
if err := mkdir("./dist"); err != nil {
|
||||
if err := mkdir(BaseDir + "/dist"); err != nil {
|
||||
logger.Errorf("create dist directory failed: %v", err)
|
||||
return err
|
||||
}
|
||||
|
@ -415,8 +420,8 @@ func (o *Outter) clearDistDirectory() error {
|
|||
|
||||
// sourceCopy 资源拷贝 将主题的资源拷贝到目标文件夹中
|
||||
func (o *Outter) sourceCopy() error {
|
||||
sourcePath := slash(fmt.Sprintf("./themes/%s/", o.Config.Site.Theme))
|
||||
destPath := slash("./dist/" + o.SourceVersion + "/")
|
||||
sourcePath := slash(fmt.Sprintf(BaseDir+"/themes/%s/", o.Config.Site.Theme))
|
||||
destPath := slash(BaseDir + "/dist/" + o.SourceVersion + "/")
|
||||
// mkdir
|
||||
cssDir := fmt.Sprintf("%s/css", destPath)
|
||||
jsDir := fmt.Sprintf("%s/js", destPath)
|
||||
|
@ -478,7 +483,7 @@ func (o *Outter) generateIndex() error {
|
|||
logger.Errorf("generate index page failed: %v", err)
|
||||
return err
|
||||
}
|
||||
var filename = "./dist/index.html"
|
||||
var filename = BaseDir + "/dist/index.html"
|
||||
if err := os.WriteFile(filename, buffer.Bytes(), os.ModePerm); err != nil {
|
||||
logger.Errorf("write index file failed: %v", err)
|
||||
return err
|
||||
|
@ -515,18 +520,18 @@ func (o *Outter) generateIndex() error {
|
|||
// 第一页 主页
|
||||
if i == 0 {
|
||||
// 第一次的时候创建目录
|
||||
dir := "./dist/page"
|
||||
dir := BaseDir + "/dist/page"
|
||||
if err := o.createDir(dir); err != nil {
|
||||
logger.Errorf("create index page failed: %v", err)
|
||||
return err
|
||||
}
|
||||
var filename = "./dist/index.html"
|
||||
var filename = BaseDir + "/dist/index.html"
|
||||
if err := os.WriteFile(filename, buffer.Bytes(), os.ModePerm); err != nil {
|
||||
logger.Errorf("write index file failed: %v", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
fPage := fmt.Sprintf("./dist/page/%d.html", i+1)
|
||||
fPage := fmt.Sprintf(BaseDir+"/dist/page/%d.html", i+1)
|
||||
if err := os.WriteFile(fPage, buffer.Bytes(), os.ModePerm); err != nil {
|
||||
logger.Errorf("write index file failed: %v", err)
|
||||
return err
|
||||
|
@ -565,7 +570,7 @@ func (o *Outter) generatePost() {
|
|||
return
|
||||
}
|
||||
// buffer写文件
|
||||
var catDir = fmt.Sprintf("./dist/%s", post.Category)
|
||||
var catDir = fmt.Sprintf(BaseDir+"/dist/%s", post.Category)
|
||||
if !isExist(catDir) {
|
||||
if err := mkdir(catDir); err != nil {
|
||||
logger.Errorf("create directory failed: %v", err)
|
||||
|
@ -608,7 +613,7 @@ func (o *Outter) generateDraftPost() {
|
|||
return
|
||||
}
|
||||
// buffer写文件
|
||||
var catDir = "./dist/draft"
|
||||
var catDir = BaseDir + "/dist/draft"
|
||||
if !isExist(catDir) {
|
||||
if err := mkdir(catDir); err != nil {
|
||||
logger.Errorf("create directory failed: %v", err)
|
||||
|
@ -651,7 +656,7 @@ func (o *Outter) generatePage() {
|
|||
return
|
||||
}
|
||||
// buffer写文件
|
||||
var filename = fmt.Sprintf("./dist/%s.html", page.Link)
|
||||
var filename = fmt.Sprintf(BaseDir+"/dist/%s.html", page.Link)
|
||||
if err := os.WriteFile(filename, pageBuffer.Bytes(), os.ModePerm); err != nil {
|
||||
logger.Errorf("write page content failed: %v", err)
|
||||
return
|
||||
|
@ -711,7 +716,7 @@ func (o *Outter) generateArchives() {
|
|||
return
|
||||
}
|
||||
// buffer写文件
|
||||
var filename = fmt.Sprintf("./dist/%s.html", instance.Page.Link)
|
||||
var filename = fmt.Sprintf(BaseDir+"/dist/%s.html", instance.Page.Link)
|
||||
if err := os.WriteFile(filename, archiveBuffer.Bytes(), os.ModePerm); err != nil {
|
||||
logger.Errorf("write archive page failed: %v", err)
|
||||
return
|
||||
|
@ -782,7 +787,7 @@ func (o *Outter) generateTags() {
|
|||
return
|
||||
}
|
||||
// 创建tag文件夹
|
||||
var tagDir = "./dist/tags"
|
||||
var tagDir = BaseDir + "/dist/tags"
|
||||
if !isExist(tagDir) {
|
||||
if err := mkdir(tagDir); err != nil {
|
||||
logger.Errorf("create tag directory failed: %v", err)
|
||||
|
@ -860,7 +865,7 @@ func (o *Outter) generateCategories() {
|
|||
return
|
||||
}
|
||||
// 创建tag文件夹
|
||||
var tagDir = "./dist/category"
|
||||
var tagDir = BaseDir + "/dist/category"
|
||||
if !isExist(tagDir) {
|
||||
if err := mkdir(tagDir); err != nil {
|
||||
logger.Errorf("create tag directory failed: %v", err)
|
||||
|
|
34
go.mod
34
go.mod
|
@ -4,46 +4,46 @@ go 1.20
|
|||
|
||||
require (
|
||||
github.com/gin-gonic/gin v1.9.1
|
||||
github.com/guonaihong/gout v0.3.8
|
||||
github.com/guonaihong/gout v0.3.9
|
||||
github.com/radovskyb/watcher v1.0.7
|
||||
github.com/sirupsen/logrus v1.9.3
|
||||
github.com/spf13/cobra v1.7.0
|
||||
github.com/spf13/cobra v1.8.0
|
||||
github.com/yuin/goldmark v1.6.0
|
||||
github.com/yuin/goldmark-emoji v1.0.2
|
||||
github.com/yuin/goldmark-meta v1.1.0
|
||||
go.abhg.dev/goldmark/mermaid v0.4.0
|
||||
go.abhg.dev/goldmark/toc v0.7.0
|
||||
go.abhg.dev/goldmark/mermaid v0.5.0
|
||||
go.abhg.dev/goldmark/toc v0.9.0
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/andybalholm/brotli v1.0.6 // indirect
|
||||
github.com/andybalholm/brotli v1.1.0 // indirect
|
||||
github.com/bytedance/sonic v1.10.2 // indirect
|
||||
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
|
||||
github.com/chenzhuoyu/iasm v0.9.0 // indirect
|
||||
github.com/chenzhuoyu/iasm v0.9.1 // indirect
|
||||
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
|
||||
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||
github.com/go-playground/locales v0.14.1 // indirect
|
||||
github.com/go-playground/universal-translator v0.18.1 // indirect
|
||||
github.com/go-playground/validator/v10 v10.15.5 // indirect
|
||||
github.com/go-playground/validator/v10 v10.17.0 // indirect
|
||||
github.com/goccy/go-json v0.10.2 // indirect
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
|
||||
github.com/leodido/go-urn v1.2.4 // indirect
|
||||
github.com/klauspost/cpuid/v2 v2.2.6 // indirect
|
||||
github.com/leodido/go-urn v1.3.0 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.1.1 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/spf13/pflag v1.0.5 // indirect
|
||||
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
||||
github.com/ugorji/go/codec v1.2.11 // indirect
|
||||
golang.org/x/arch v0.5.0 // indirect
|
||||
golang.org/x/crypto v0.14.0 // indirect
|
||||
golang.org/x/net v0.17.0 // indirect
|
||||
golang.org/x/sys v0.13.0 // indirect
|
||||
golang.org/x/text v0.13.0 // indirect
|
||||
google.golang.org/protobuf v1.31.0 // indirect
|
||||
github.com/ugorji/go/codec v1.2.12 // indirect
|
||||
golang.org/x/arch v0.7.0 // indirect
|
||||
golang.org/x/crypto v0.18.0 // indirect
|
||||
golang.org/x/net v0.20.0 // indirect
|
||||
golang.org/x/sys v0.16.0 // indirect
|
||||
golang.org/x/text v0.14.0 // indirect
|
||||
google.golang.org/protobuf v1.32.0 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
)
|
||||
|
|
|
@ -27,7 +27,7 @@ func updateCmd() *cobra.Command {
|
|||
logger.Errorf("install: go install %s\nupdate failed: %v\n", url, err)
|
||||
return
|
||||
}
|
||||
logger.Info("mder %s update success", commit.Sha)
|
||||
logger.Infof("mder %s update success", commit.Sha)
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestTrim(t *testing.T) {
|
||||
var a = "/tmp/blog/"
|
||||
a = strings.TrimSuffix(a, "/")
|
||||
fmt.Println(a)
|
||||
}
|
7
utils.go
7
utils.go
|
@ -90,12 +90,15 @@ func goInstall(pkg string) error {
|
|||
return err
|
||||
}
|
||||
|
||||
func uploadToUpyun(auth string) error {
|
||||
func uploadToUpyun(auth, dir string) error {
|
||||
if strings.HasSuffix(dir, "/") {
|
||||
dir = strings.TrimSuffix(dir, "/")
|
||||
}
|
||||
_, err := exec.Command("upx", "--auth", auth, "rm", "-d", "-a", "/*").Output()
|
||||
if err != nil {
|
||||
return fmt.Errorf("remove old data failed: %v", err)
|
||||
}
|
||||
_, err = exec.Command("upx", "--auth", auth, "put", "./dist/.", "/").Output()
|
||||
_, err = exec.Command("upx", "--auth", auth, "put", dir+"/dist/.", "/").Output()
|
||||
if err != nil {
|
||||
return fmt.Errorf("deploy data failed: %v", err)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue