code.gitea.io/gitea@v1.22.3/contrib/fixtures/fixture_generation.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 //nolint:forbidigo 5 package main 6 7 import ( 8 "context" 9 "fmt" 10 "os" 11 "path/filepath" 12 13 "code.gitea.io/gitea/models" 14 "code.gitea.io/gitea/models/unittest" 15 ) 16 17 // To generate derivative fixtures, execute the following from Gitea's repository base dir: 18 // go run -tags 'sqlite sqlite_unlock_notify' contrib/fixtures/fixture_generation.go [fixture...] 19 20 var ( 21 generators = []struct { 22 gen func(ctx context.Context) (string, error) 23 name string 24 }{ 25 { 26 models.GetYamlFixturesAccess, "access", 27 }, 28 } 29 fixturesDir string 30 ) 31 32 func main() { 33 pathToGiteaRoot := "." 34 fixturesDir = filepath.Join(pathToGiteaRoot, "models", "fixtures") 35 if err := unittest.CreateTestEngine(unittest.FixturesOptions{ 36 Dir: fixturesDir, 37 }); err != nil { 38 fmt.Printf("CreateTestEngine: %+v", err) 39 os.Exit(1) 40 } 41 if err := unittest.PrepareTestDatabase(); err != nil { 42 fmt.Printf("PrepareTestDatabase: %+v\n", err) 43 os.Exit(1) 44 } 45 ctx := context.Background() 46 if len(os.Args) == 0 { 47 for _, r := range os.Args { 48 if err := generate(ctx, r); err != nil { 49 fmt.Printf("generate '%s': %+v\n", r, err) 50 os.Exit(1) 51 } 52 } 53 } else { 54 for _, g := range generators { 55 if err := generate(ctx, g.name); err != nil { 56 fmt.Printf("generate '%s': %+v\n", g.name, err) 57 os.Exit(1) 58 } 59 } 60 } 61 } 62 63 func generate(ctx context.Context, name string) error { 64 for _, g := range generators { 65 if g.name == name { 66 data, err := g.gen(ctx) 67 if err != nil { 68 return err 69 } 70 path := filepath.Join(fixturesDir, name+".yml") 71 if err := os.WriteFile(path, []byte(data), 0o644); err != nil { 72 return fmt.Errorf("%s: %+v", path, err) 73 } 74 fmt.Printf("%s created.\n", path) 75 return nil 76 } 77 } 78 79 return fmt.Errorf("generator not found") 80 }