internal/render/manifest.go
raw ยท 2968 bytes
package render
import (
"path"
"strings"
"time"
"github.com/tgckpg/flatgit/internal/config"
)
type Manifest struct {
Schema string `json:"schema"`
Generator ManifestGenerator `json:"generator"`
Repository ManifestRepository `json:"repository"`
Human ManifestHumanRoutes `json:"human"`
Machine ManifestAPIRoutes `json:"machine"`
Capabilities ManifestCapabilities `json:"capabilities"`
GeneratedAt time.Time `json:"generated_at"`
}
type ManifestGenerator struct {
Name string `json:"name"`
Version string `json:"version"`
}
type ManifestRepository struct {
Name string `json:"name"`
FullName string `json:"fullname"`
Owner string `json:"owner,omitempty"`
Description string `json:"description,omitempty"`
DefaultBranch string `json:"default_branch"`
DefaultCommit string `json:"default_commit"`
DefaultRefSlug string `json:"default_ref_slug"`
SitePath string `json:"site_path"`
OwnerSitePath string `json:"owner_site_path"`
}
type ManifestHumanRoutes struct {
Index string `json:"index"`
Log string `json:"log"`
Refs string `json:"refs"`
}
type ManifestAPIRoutes struct {
Self string `json:"self"`
Refs string `json:"refs"`
Commits string `json:"commits"`
Tree string `json:"tree"`
Commit string `json:"commit"`
Blob string `json:"blob"`
Raw string `json:"raw"`
}
type ManifestCapabilities struct {
Refs bool `json:"refs"`
Commits bool `json:"commits"`
Trees bool `json:"trees"`
BlobMetadata bool `json:"blob_metadata"`
RawBlobs bool `json:"raw_blobs"`
Search bool `json:"search"`
Archive bool `json:"archive"`
}
func NewManifest(repo config.Repo, defaultBranch string, defaultCommit string) Manifest {
return Manifest{
Schema: "https://flatgit.dev/schema/repository.v1.json",
Generator: ManifestGenerator{
Name: "flatgit",
Version: "dev",
},
Repository: ManifestRepository{
Name: repo.Name,
FullName: repo.FullName(),
Owner: repo.Owner,
Description: repo.Description,
DefaultBranch: defaultBranch,
DefaultCommit: defaultCommit,
DefaultRefSlug: refSlug(repo.DefaultBranch),
SitePath: repo.RepoBase(),
OwnerSitePath: path.Dir(strings.TrimSuffix(repo.RepoBase(), "/")),
},
Human: ManifestHumanRoutes{
Index: "./index.html",
Log: "./log.html",
Refs: "./refs.html",
},
Machine: ManifestAPIRoutes{
Self: "./manifest.json",
Refs: "./refs.json",
Commits: "./commits.json",
Tree: "./tree/{ref}.json",
Commit: "./commit/{sha}.json",
Blob: "./blob/{ref}/{path}.json",
Raw: "./raw/{ref}/{path}",
},
Capabilities: ManifestCapabilities{
Refs: true,
Commits: true,
Trees: true,
BlobMetadata: false,
RawBlobs: true,
Search: false,
Archive: false,
},
GeneratedAt: time.Now(),
}
}