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.

fixture_generation.go 1.8KB

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