wikipress/main.go
kekskurse db1c7eacc5
All checks were successful
ci/woodpecker/push/commit Pipeline was successful
remove out folder if exists and add some logging
2025-07-06 17:12:49 +02:00

110 lines
2.6 KiB
Go

package main
import (
"context"
"embed"
"errors"
"fmt"
"os"
"git.keks.cloud/kekskurse/wikipress/pkg/wikipress"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"github.com/urfave/cli/v3"
)
//go:embed layout/output.css
var outputcss string
//go:embed layout/src/*.html
var layout embed.FS
func main() {
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
log.Info().Str("foo", "bar").Msg("Hello world")
cmd := &cli.Command{
Name: "generate",
Usage: "generate html from git folder",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "path",
Value: "content",
Usage: "Path to the content git repro",
},
&cli.StringFlag{
Name: "out",
Value: "./public",
Usage: "Path to the content git repro",
},
&cli.BoolFlag{
Name: "no-git",
Value: false,
Usage: "dont use git, just current state",
},
},
Action: action,
}
if err := cmd.Run(context.Background(), os.Args); err != nil {
log.Fatal().Err(err).Msg("Error wile generate Page")
}
}
func action(ctx context.Context, cmd *cli.Command) error {
if _, err := os.Stat(cmd.String("out")); !os.IsNotExist(err) {
log.Warn().Msg("Remove out folder")
os.RemoveAll(cmd.String("out"))
}
os.MkdirAll(cmd.String("path"), 0755)
var files []wikipress.File
var err error
if cmd.Bool("no-git") {
files, err = wikipress.ListFilesFromHDD(cmd.String("path"))
if err != nil {
return err
}
} else {
files, err = wikipress.ListFilesFromGitRepro(cmd.String("path"))
if err != nil {
return err
}
}
menu := wikipress.GenerateMenu(files)
for _, file := range files {
log.Debug().Str("file", file.Name).Msg("Generate Page")
// Copy not mark down files
if file.GetExtension() != "md" {
err = wikipress.CreateFilePageAndCopyContent(file, cmd.String("out"))
if err != nil {
return fmt.Errorf("%w: %s", errors.New("cant create file page and copy content"), err)
}
err = os.Symlink(fmt.Sprintf("./%v_%v.%v", file.GetName(), file.GetLastVersion().Hash, file.GetExtension()), fmt.Sprintf("%v/%v/%v.%v", cmd.String("out"), file.GetFolder(), file.GetName(), file.GetExtension()))
if err != nil {
return err
}
// TODO: Copy and create media page
continue
}
err = wikipress.GenerateHTMLPageForMarkedown(file, menu, cmd.String("out"), layout)
if err != nil {
return err
}
err = os.Symlink(fmt.Sprintf("./%v_%v.html", file.GetName(), file.GetLastVersion().Hash), fmt.Sprintf("%v/%v/%v.html", cmd.String("out"), file.GetFolder(), file.GetName()))
if err != nil {
return err
}
}
err = os.WriteFile(cmd.String("out")+"/output.css", []byte(outputcss), 0644)
if err != nil {
return err
}
return nil
}