/ src / migrate.go
migrate.go
 1  package git_pages
 2  
 3  import (
 4  	"context"
 5  	"fmt"
 6  	"log"
 7  	"slices"
 8  	"strings"
 9  )
10  
11  func RunMigration(ctx context.Context, name string) error {
12  	switch name {
13  	case "create-domain-markers":
14  		return createDomainMarkers(ctx)
15  	default:
16  		return fmt.Errorf("unknown migration name (expected one of \"create-domain-markers\")")
17  	}
18  }
19  
20  func createDomainMarkers(ctx context.Context) error {
21  	if backend.HasFeature(ctx, FeatureCheckDomainMarker) {
22  		log.Print("store already has domain markers")
23  		return nil
24  	}
25  
26  	var manifests, domains []string
27  	manifests, err := backend.ListManifests(ctx)
28  	if err != nil {
29  		return fmt.Errorf("list manifests: %w", err)
30  	}
31  	slices.Sort(manifests)
32  	for _, manifest := range manifests {
33  		domain, _, _ := strings.Cut(manifest, "/")
34  		if len(domains) == 0 || domains[len(domains)-1] != domain {
35  			domains = append(domains, domain)
36  		}
37  	}
38  	for idx, domain := range domains {
39  		log.Printf("(%d / %d) creating domain %s", idx+1, len(domains), domain)
40  		if err := backend.CreateDomain(ctx, domain); err != nil {
41  			return fmt.Errorf("creating domain %s: %w", domain, err)
42  		}
43  	}
44  	if err := backend.EnableFeature(ctx, FeatureCheckDomainMarker); err != nil {
45  		return err
46  	}
47  	log.Printf("created markers for %d domains", len(domains))
48  	return nil
49  }