forked from
whitequark.org/git-pages
fork of whitequark.org/git-pages with mods for tangled
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, domains []string
26 manifests, err := backend.ListManifests(ctx)
27 if err != nil {
28 return fmt.Errorf("list manifests: %w", err)
29 }
30 slices.Sort(manifests)
31 for _, manifest := range manifests {
32 domain, _, _ := strings.Cut(manifest, "/")
33 if len(domains) == 0 || domains[len(domains)-1] != domain {
34 domains = append(domains, domain)
35 }
36 }
37 for idx, domain := range domains {
38 logc.Printf(ctx, "(%d / %d) creating domain %s", idx+1, len(domains), domain)
39 if err := backend.CreateDomain(ctx, domain); err != nil {
40 return fmt.Errorf("creating domain %s: %w", domain, err)
41 }
42 }
43 if err := backend.EnableFeature(ctx, FeatureCheckDomainMarker); err != nil {
44 return err
45 }
46 logc.Printf(ctx, "created markers for %d domains", len(domains))
47 return nil
48}