mirror of https://github.com/h44z/wg-portal.git
				
				
				
			
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"log"
 | 
						|
	"os"
 | 
						|
	"path/filepath"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"github.com/sirupsen/logrus"
 | 
						|
	"github.com/swaggo/swag"
 | 
						|
	"github.com/swaggo/swag/gen"
 | 
						|
)
 | 
						|
 | 
						|
// this replaces the call to: swag init --propertyStrategy pascalcase --parseDependency --parseInternal --generalInfo base.go
 | 
						|
func main() {
 | 
						|
	wd, err := os.Getwd() // should be the project root
 | 
						|
	if err != nil {
 | 
						|
		panic(err)
 | 
						|
	}
 | 
						|
 | 
						|
	apiBasePath := filepath.Join(wd, "/internal/app/api")
 | 
						|
	apis := []string{"v0"}
 | 
						|
 | 
						|
	hasError := false
 | 
						|
	for _, apiVersion := range apis {
 | 
						|
		apiPath := filepath.Join(apiBasePath, apiVersion, "handlers")
 | 
						|
 | 
						|
		apiVersion = strings.TrimLeft(apiVersion, "api-")
 | 
						|
		log.Println("")
 | 
						|
		log.Println("Generate swagger docs for API", apiVersion)
 | 
						|
		log.Println("Api path:", apiPath)
 | 
						|
 | 
						|
		err := generateApi(apiBasePath, apiPath, apiVersion)
 | 
						|
		if err != nil {
 | 
						|
			hasError = true
 | 
						|
			logrus.Errorf("failed to generate API docs for %s: %v", apiVersion, err)
 | 
						|
		}
 | 
						|
 | 
						|
		log.Println("Generated swagger docs for API", apiVersion)
 | 
						|
	}
 | 
						|
 | 
						|
	if hasError {
 | 
						|
		os.Exit(1)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func generateApi(basePath, apiPath, version string) error {
 | 
						|
	err := gen.New().Build(&gen.Config{
 | 
						|
		SearchDir:           apiPath,
 | 
						|
		Excludes:            "",
 | 
						|
		MainAPIFile:         "base.go",
 | 
						|
		PropNamingStrategy:  swag.PascalCase,
 | 
						|
		OutputDir:           filepath.Join(basePath, "core/assets/doc"),
 | 
						|
		OutputTypes:         []string{"json", "yaml"},
 | 
						|
		ParseVendor:         false,
 | 
						|
		ParseDependency:     3,
 | 
						|
		MarkdownFilesDir:    "",
 | 
						|
		ParseInternal:       true,
 | 
						|
		GeneratedTime:       false,
 | 
						|
		CodeExampleFilesDir: "",
 | 
						|
		ParseDepth:          3,
 | 
						|
		InstanceName:        version,
 | 
						|
	})
 | 
						|
	if err != nil {
 | 
						|
		return fmt.Errorf("swag failed: %w", err)
 | 
						|
	}
 | 
						|
 | 
						|
	return nil
 | 
						|
}
 |