code: func (g *Generator) Run(rootPath string, data Data) error {
  	// defer g.fmt(rootPath)
  	dd := Data{}
  	for k, v := range data {
  		dd[k] = v
  	}
  	for k, v := range g.Data {
  		dd[k] = v
  	}
  	ctx, cancel := context.WithCancel(context.Background())
  	defer cancel()
  	return chdir(rootPath, func() error {
  		if g.Should != nil {
  			b := g.Should(dd)
  			if !b {
  				return nil
  			}
  		}
  		err := os.MkdirAll(rootPath, 0755)
  		if err != nil {
  			return errors.WithStack(err)
  		}
  		err = os.Chdir(rootPath)
  		if err != nil {
  			return errors.WithStack(err)
  		}
  		for _, r := range g.Runners {
  			select {
  			case <-ctx.Done():
  				break
  			default:
  				err := r.Run(rootPath, dd)
  				if err != nil {
  					return errors.WithStack(err)
  				}
  			}
  		}
  		return nil
  	})
  }
docs: // Run all of the generators