go_study/fabric-main/vendor/github.com/mmcloughlin/addchain/meta/meta.go

102 lines
2.8 KiB
Go

// Package meta defines properties about this project.
package meta
import (
"fmt"
"path"
"time"
)
// VersionTagPrefix is the prefix used on Git tags corresponding to semantic
// version releases.
const VersionTagPrefix = "v"
// Properties about this software package.
type Properties struct {
// Name is the project name.
Name string
// FullName is the "owner/name" identifier for the project.
FullName string
// Description is the concise project headline.
Description string
// BuildVersion is the version that was built. Typically populated at build
// time and will typically be empty for non-release builds.
BuildVersion string
// ReleaseVersion is the version of the most recent release.
ReleaseVersion string
// ReleaseDate is the date of the most recent release. (RFC3339 date format.)
ReleaseDate string
// ConceptDOI is the DOI for all versions.
ConceptDOI string
// DOI for the most recent release.
DOI string
// ZenodoID is the Zenodo deposit ID for the most recent release.
ZenodoID string
}
// Meta defines specific properties for the current version of this software.
var Meta = &Properties{
Name: "addchain",
FullName: "mmcloughlin/addchain",
Description: "Cryptographic Addition Chain Generation in Go",
BuildVersion: buildversion,
ReleaseVersion: releaseversion,
ReleaseDate: releasedate,
ConceptDOI: conceptdoi,
DOI: doi,
ZenodoID: zenodoid,
}
// Title is a full project title, suitable for a citation.
func (p *Properties) Title() string {
return fmt.Sprintf("%s: %s", p.Name, p.Description)
}
// IsRelease reports whether the built version is a release.
func (p *Properties) IsRelease() bool {
return p.BuildVersion == p.ReleaseVersion
}
// ReleaseTag returns the release tag corresponding to the most recent release.
func (p *Properties) ReleaseTag() string {
return VersionTagPrefix + p.ReleaseVersion
}
// Module returns the Go module path.
func (p *Properties) Module() string {
return path.Join("github.com", p.FullName)
}
// RepositoryURL returns a URL to the hosted repository.
func (p *Properties) RepositoryURL() string {
return "https://" + p.Module()
}
// ReleaseURL returns the URL to the release page.
func (p *Properties) ReleaseURL() string {
return fmt.Sprintf("%s/releases/tag/%s", p.RepositoryURL(), p.ReleaseTag())
}
// ReleaseTime returns the release date as a time object.
func (p *Properties) ReleaseTime() (time.Time, error) {
return time.Parse("2006-01-02", p.ReleaseDate)
}
// DOIURL returns the DOI URL corresponding to the most recent release.
func (p *Properties) DOIURL() string { return doiurl(p.DOI) }
// ConceptDOIURL returns the DOI URL corresponding to the most recent release.
func (p *Properties) ConceptDOIURL() string { return doiurl(p.ConceptDOI) }
func doiurl(doi string) string {
return "https://doi.org/" + doi
}