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  }