diff --git a/Makefile b/Makefile index 94d56a4..4acaded 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,9 @@ BINARY_NAME=pixivfe TARGETOS ?= $(shell go env GOOS) TARGETARCH ?= $(shell go env GOARCH) -GIT_COMMIT := $(shell git describe --always 2>/dev/null) +GIT_COMMIT_DATE := $(shell git show -s --format=%cd --date=format:"%Y.%m.%d") +GIT_COMMIT_HASH := $(shell git rev-parse --short HEAD) +REVISION := $(GIT_COMMIT_DATE)-$(GIT_COMMIT_HASH) # Include environment variables from .env if it exists -include .env @@ -20,7 +22,7 @@ fmt: build: @echo "Building $(BINARY_NAME)..." go mod download - CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -v -ldflags="-extldflags=-static -X codeberg.org/vnpower/pixivfe/v2/config.REVISION=$(GIT_COMMIT)" -tags netgo -o $(BINARY_NAME) + CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -v -ldflags="-extldflags=-static -X codeberg.org/vnpower/pixivfe/v2/config.REVISION=$(REVISION)" -tags netgo -o $(BINARY_NAME) test: @echo "Running tests..." diff --git a/assets/views/about.jet.html b/assets/views/about.jet.html index 977489b..6f4cc73 100644 --- a/assets/views/about.jet.html +++ b/assets/views/about.jet.html @@ -13,7 +13,7 @@ {{- if .Revision != "" }}
  • Revision: - {{ .Revision }}
    + {{ .Revision }}
    PixivFE's source code revision
  • {{- end }} diff --git a/config/config.go b/config/config.go index 43f338a..db49d12 100644 --- a/config/config.go +++ b/config/config.go @@ -15,11 +15,20 @@ import ( ) var GlobalConfig ServerConfig + +// REVISION stores the current version's revision information var REVISION string = "" +const ( + unknownRevision = "unknown" + revisionFormat = "date-hash" +) + type ServerConfig struct { Version string Revision string + RevisionDate string + RevisionHash string StartingTime string // used in /about page Host string `env:"PIXIVFE_HOST"` @@ -54,10 +63,31 @@ type ServerConfig struct { ResponseSaveLocation string `env:"PIXIVFE_RESPONSE_SAVE_LOCATION,overwrite"` } +// parseRevision extracts date and hash from the revision string +func parseRevision(revision string) (date, hash string) { + if revision == "" { + return unknownRevision, unknownRevision + } + parts := strings.Split(revision, "-") + if len(parts) == 2 { + return parts[0], parts[1] + } + return unknownRevision, revision +} + func (s *ServerConfig) LoadConfig() error { s.Version = "v2.9" s.Revision = REVISION - log.Printf("PixivFE %s %s\n", s.Version, s.Revision) + + s.RevisionDate, s.RevisionHash = parseRevision(REVISION) + + if REVISION == "" { + log.Printf("[WARNING] REVISION is not set. Continuing with unknown revision information.\n") + } else if s.RevisionDate == unknownRevision { + log.Printf("[WARNING] REVISION format is invalid: %s. Expected format '%s'. Continuing with full revision as hash.\n", REVISION, revisionFormat) + } + + log.Printf("PixivFE %s, revision %s\n", s.Version, s.Revision) s.StartingTime = time.Now().UTC().Format("2006-01-02 15:04") diff --git a/server/routes/about.go b/server/routes/about.go index ab21061..901682f 100644 --- a/server/routes/about.go +++ b/server/routes/about.go @@ -10,6 +10,7 @@ func AboutPage(w http.ResponseWriter, r *http.Request) error { Time: config.GlobalConfig.StartingTime, Version: config.GlobalConfig.Version, Revision: config.GlobalConfig.Revision, + RevisionHash: config.GlobalConfig.RevisionHash, ImageProxy: config.GlobalConfig.ProxyServer.String(), AcceptLanguage: config.GlobalConfig.AcceptLanguage, }) diff --git a/server/routes/types.go b/server/routes/types.go index a89a2bd..ecb2f7f 100644 --- a/server/routes/types.go +++ b/server/routes/types.go @@ -22,6 +22,7 @@ type Data_about struct { Time string Version string Revision string + RevisionHash string ImageProxy string AcceptLanguage string }