func()

in providers/heroku/app.go [54:146]


func (g *AppGenerator) InitResources() error {
	svc := g.generateService()
	ctx := context.Background()
	team := g.GetArgs()["team"].(string)

	var output []heroku.App
	var hasRequiredFilter bool

	if len(g.Filter) > 0 {
		for _, filter := range g.Filter {
			if filter.IsApplicable("app") {
				hasRequiredFilter = true
				for _, appID := range filter.AcceptableValues {
					app, err := svc.AppInfo(ctx, appID)
					if err != nil {
						return fmt.Errorf("Error filtering apps by app '%s': %w", appID, err)
					}
					output = append(output, *app)
				}
			}
		}
	}

	if team != "" {
		hasRequiredFilter = true
		teamApps, err := svc.TeamAppListByTeam(ctx, team, &heroku.ListRange{Field: "id", Max: 1000})
		if err != nil {
			return fmt.Errorf("Error querying apps by team '%s': %w", team, err)
		}
		for _, app := range teamApps {
			output = append(output, heroku.App{ID: app.ID, Name: app.Name})
		}
	}

	if !hasRequiredFilter {
		return fmt.Errorf("Heroku Apps must be scoped by team or filtered by app: --team=<name> or --filter=app=<ID>")
	}

	resources, err := g.createResources(output)
	if err != nil {
		return fmt.Errorf("Error creating app resources: %w", err)
	}
	g.Resources = resources

	for _, app := range output {
		appFeatures, err := g.createAppFeatureResources(ctx, svc, app)
		if err != nil {
			return fmt.Errorf("Error creating app feature resources: %w", err)
		}
		g.Resources = append(g.Resources, appFeatures...)

		addons, err := g.createAddonResources(ctx, svc, app)
		if err != nil {
			return fmt.Errorf("Error creating app addon resources: %w", err)
		}
		g.Resources = append(g.Resources, addons...)

		addonAttachments, err := g.createAddonAttachmentResources(ctx, svc, app)
		if err != nil {
			return fmt.Errorf("Error creating app addon attachment resources: %w", err)
		}
		g.Resources = append(g.Resources, addonAttachments...)

		appWebooks, err := g.createAppWebhookResources(ctx, svc, app)
		if err != nil {
			return fmt.Errorf("Error creating app webhook resources: %w", err)
		}
		g.Resources = append(g.Resources, appWebooks...)

		ssls, err := g.createSslResources(ctx, svc, app)
		if err != nil {
			return fmt.Errorf("Error creating SSL resources: %w", err)
		}
		g.Resources = append(g.Resources, ssls...)

		domains, err := g.createDomainResources(ctx, svc, app)
		if err != nil {
			return fmt.Errorf("Error creating domain resources: %w", err)
		}
		g.Resources = append(g.Resources, domains...)

		drains := g.createDrainResources(ctx, svc, app)
		g.Resources = append(g.Resources, drains...)

		formations, err := g.createFormationResources(ctx, svc, app)
		if err != nil {
			return fmt.Errorf("Error creating formation resources: %w", err)
		}
		g.Resources = append(g.Resources, formations...)
	}

	return nil
}