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