Git hook triggered via local commit or Gitea's one. It runs Hugo against its dedicated repository with Markdown files and related assets.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

70 lines
2.4 KiB

package main
import (
"os"
"path/filepath"
"strings"
)
func hookContext(hook *Hook, scannerTxt string) {
if scannerTxt == "" {
hook.Context = "PostCommit"
} else if strings.HasPrefix(scannerTxt, "sandpoints-ext") {
revs := strings.Fields(scannerTxt)
if revs[1] == "publish" {
hook.Publish = true
}
if revs[2] == "offline" {
hook.Offline = true
}
if revs[3] == "file" {
hook.Context = "SandpointsFileProtocol"
}
if revs[3] == "http" {
hook.Context = "SandpointsHTTPProtocol"
}
} else {
// it only handles gitea use case if not Local or sandpoints-ext
hook.Context = "PostReceive"
hook.Stdinput = scannerTxt
}
}
func cleanUpPublicHTML(hugo *Hugo, hook *Hook) {
if hook.Publish {
if _, err := os.Stat(filepath.Join(hook.PublicHTMLPath, hugo.PublicHTMLName)); err == nil {
err := os.RemoveAll(filepath.Join(hook.PublicHTMLPath, hugo.PublicHTMLName))
check(err)
err = os.MkdirAll(hook.PublicHTMLPath, 0755)
check(err)
}
} else if _, err := os.Lstat(filepath.Join(hook.PublicHTMLPath, hugo.PublicHTMLName, "_preview")); err == nil {
err := os.RemoveAll(filepath.Join(hook.PublicHTMLPath, hugo.PublicHTMLName, "_preview"))
check(err)
} else if _, err := os.Stat(filepath.Join(hook.PublicHTMLPath, hugo.PublicHTMLName, "_preview")); err == nil {
err := os.RemoveAll(filepath.Join(hook.PublicHTMLPath, hugo.PublicHTMLName, "_preview"))
check(err)
}
}
func copyToPublicHTML(hugo *Hugo, hook *Hook) {
if hook.Publish {
err := os.Rename(hugo.DestinationDir, filepath.Join(hook.PublicHTMLPath, hugo.PublicHTMLName))
check(err)
err = os.Symlink(filepath.Join(hook.PublicHTMLPath, hugo.PublicHTMLName), filepath.Join(hook.PublicHTMLPath, hugo.PublicHTMLName, "_preview"))
check(err)
if hugo.CatalogPrefix != "" && hugo.CatalogName != "" {
err = os.Symlink(filepath.Join(hook.PublicHTMLPath, "libraries", hugo.CatalogName), filepath.Join(hook.PublicHTMLPath, hugo.PublicHTMLName, hugo.CatalogPrefix))
check(err)
}
} else {
err := os.MkdirAll(filepath.Join(hook.PublicHTMLPath, hugo.PublicHTMLName), 0755)
check(err)
err = os.Rename(hugo.DestinationDir, filepath.Join(hook.PublicHTMLPath, hugo.PublicHTMLName, "_preview"))
check(err)
if hugo.CatalogPrefix != "" && hugo.CatalogName != "" {
err = os.Symlink(filepath.Join(hook.PublicHTMLPath, "libraries", hugo.CatalogName), filepath.Join(hook.PublicHTMLPath, hugo.PublicHTMLName, "_preview", hugo.CatalogPrefix))
check(err)
}
}
}