102 lines
2.8 KiB
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
|
|
}
|