Files
git-pages/src/migrate.go
Catherine ed2d853cbe Add EnumerateManifests API and -list-manifests option.
The new API replaces the `ListManifests` API.

This also adds `Name` and `Size` to manifest metadata.
2025-12-06 00:10:04 +00:00

52 lines
1.3 KiB
Go

package git_pages
import (
"context"
"fmt"
"slices"
"strings"
)
func RunMigration(ctx context.Context, name string) error {
switch name {
case "create-domain-markers":
return createDomainMarkers(ctx)
default:
return fmt.Errorf("unknown migration name (expected one of \"create-domain-markers\")")
}
}
func createDomainMarkers(ctx context.Context) error {
if backend.HasFeature(ctx, FeatureCheckDomainMarker) {
logc.Print(ctx, "store already has domain markers")
return nil
}
var manifests []string
for metadata, err := range backend.EnumerateManifests(ctx) {
if err != nil {
return fmt.Errorf("enum manifests: %w", err)
}
manifests = append(manifests, metadata.Name)
}
slices.Sort(manifests)
var domains []string
for _, manifest := range manifests {
domain, _, _ := strings.Cut(manifest, "/")
if len(domains) == 0 || domains[len(domains)-1] != domain {
domains = append(domains, domain)
}
}
for idx, domain := range domains {
logc.Printf(ctx, "(%d / %d) creating domain %s", idx+1, len(domains), domain)
if err := backend.CreateDomain(ctx, domain); err != nil {
return fmt.Errorf("creating domain %s: %w", domain, err)
}
}
if err := backend.EnableFeature(ctx, FeatureCheckDomainMarker); err != nil {
return err
}
logc.Printf(ctx, "created markers for %d domains", len(domains))
return nil
}