[mirror] Scalable static site server for Git forges (like GitHub Pages)
at v0.1.0 1.3 kB view raw
1package git_pages 2 3import ( 4 "context" 5 "fmt" 6 "log" 7 "slices" 8 "strings" 9) 10 11func 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 20func 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}