summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore5
-rw-r--r--Dockerfile3
-rw-r--r--Makefile36
-rw-r--r--cmd/tube/main.go (renamed from main.go)6
-rw-r--r--doc.go2
-rw-r--r--version.go46
6 files changed, 78 insertions, 20 deletions
diff --git a/.gitignore b/.gitignore
index 1c7bf4f..655edde 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,8 +5,9 @@
/dist
/tube
-tube
-/.DS_Store
+/cmd/tube/tube
+
+**/.DS_Store
videos/*
!videos/README.md
diff --git a/Dockerfile b/Dockerfile
index e581d4e..513c7fd 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -39,9 +39,10 @@ COPY ./utils/*.go ./utils/
# COMMIT value to change.
ARG VERSION="0.0.0"
ARG COMMIT="HEAD"
+ARG BUILD=""
# Build server binary
-RUN make server VERSION=$VERSION COMMIT=$COMMIT
+RUN make server VERSION=$VERSION COMMIT=$COMMIT BUILD=$BUILD
# Runtime
FROM alpine:latest
diff --git a/Makefile b/Makefile
index 14952b6..750c0b3 100644
--- a/Makefile
+++ b/Makefile
@@ -2,9 +2,10 @@
.PHONY: help deps dev build install image release test clean clean-all
export CGO_ENABLED=0
-VERSION=$(shell git describe --abbrev=0 --tags 2>/dev/null || echo "0.0.0")
-COMMIT=$(shell git rev-parse --short HEAD || echo "HEAD")
+VERSION=$(shell git describe --abbrev=0 --tags 2>/dev/null || echo "$VERSION")
+COMMIT=$(shell git rev-parse --short HEAD || echo "$COMMIT")
BRANCH=$(shell git rev-parse --abbrev-ref HEAD)
+BUILD=$(shell git show -s --pretty=format:%cI)
GOCMD=go
GOVER=$(shell go version | grep -o -E 'go1\.17\.[0-9]+')
@@ -35,12 +36,23 @@ dev : DEBUG=1
dev : server ## Build debug version of tube
@./tube
-server: generate ## Build the tube server
- @$(GOCMD) build -tags "embed static_build" \
+server: generate ## Build the yarnd server
+ifeq ($(DEBUG), 1)
+ @echo "Building in debug mode..."
+ @$(GOCMD) build $(FLAGS) -tags "netgo static_build" -installsuffix netgo \
+ -ldflags "\
+ -X $(shell go list).Version=$(VERSION) \
+ -X $(shell go list).Commit=$(COMMIT) \
+ -X $(shell go list).Build=$(BUILD)" \
+ ./cmd/tube/...
+else
+ @$(GOCMD) build $(FLAGS) -tags "netgo static_build" -installsuffix netgo \
-ldflags "-w \
-X $(shell go list).Version=$(VERSION) \
- -X $(shell go list).Commit=$(COMMIT)" \
- .
+ -X $(shell go list).Commit=$(COMMIT) \
+ -X $(shell go list).Build=$(BUILD)" \
+ ./cmd/tube/...
+endif
build: server ## Build the server
@@ -54,10 +66,18 @@ install: build ## Install tube to $DESTDIR
ifeq ($(PUBLISH), 1)
image: generate ## Build the Docker image
- @docker buildx build --push --platform linux/arm64,linux/amd64 --tag $(IMAGE):$(TAG) --build-arg VERSION="$(VERSION)" --build-arg COMMIT="$(COMMIT)" .
+ @docker buildx build \
+ --build-arg VERSION="$(VERSION)" \
+ --build-arg COMMIT="$(COMMIT)" \
+ --build-arg BUILD="$(BUILD)" \
+ --platform linux/amd64,linux/arm64 --push -t $(IMAGE):$(TAG) .
else
image: generate
- @docker buildx build --platform linux/arm64,linux/amd64 --tag $(IMAGE):$(TAG) --build-arg VERSION="$(VERSION)" --build-arg COMMIT="$(COMMIT)" .
+ @docker build \
+ --build-arg VERSION="$(VERSION)" \
+ --build-arg COMMIT="$(COMMIT)" \
+ --build-arg BUILD="$(BUILD)" \
+ -t $(IMAGE):$(TAG) .
endif
release: generate ## Release a new version to Gitea
diff --git a/main.go b/cmd/tube/main.go
index d18e7dc..cc3bfd2 100644
--- a/main.go
+++ b/cmd/tube/main.go
@@ -4,9 +4,11 @@ import (
"fmt"
"os"
- "git.mills.io/prologic/tube/app"
log "github.com/sirupsen/logrus"
flag "github.com/spf13/pflag"
+
+ "git.mills.io/prologic/tube"
+ "git.mills.io/prologic/tube/app"
)
var (
@@ -36,7 +38,7 @@ func main() {
}
if version {
- fmt.Printf("tube version %s", FullVersion())
+ fmt.Printf("tube version %s", tube.FullVersion())
os.Exit(0)
}
diff --git a/doc.go b/doc.go
new file mode 100644
index 0000000..a2ecf83
--- /dev/null
+++ b/doc.go
@@ -0,0 +1,2 @@
+// Package tube is a Youtube-like (without censorship and features you don't need!) Video Sharing App
+package tube
diff --git a/version.go b/version.go
index 86587e6..d4f60a9 100644
--- a/version.go
+++ b/version.go
@@ -1,18 +1,50 @@
-package main
+package tube
import (
"fmt"
+ runtime "runtime/debug"
+ "strings"
+)
+
+const (
+ defaultVersion = "0.0.0"
+ defaultCommit = "HEAD"
+ defaultBuild = "0000-01-01:00:00+00:00"
)
var (
- // Version release version
- Version = "0.0.1"
+ // Version is the tagged release version in the form <major>.<minor>.<patch>
+ // following semantic versioning and is overwritten by the build system.
+ Version = defaultVersion
- // Commit will be overwritten automatically by the build system
- Commit = "HEAD"
+ // Commit is the commit sha of the build (normally from Git) and is overwritten
+ // by the build system.
+ Commit = defaultCommit
+
+ // Build is the date and time of the build as an RFC3339 formatted string
+ // and is overwritten by the build system.
+ Build = defaultBuild
)
-// FullVersion returns the full version and commit hash
+// FullVersion display the full version and build
func FullVersion() string {
- return fmt.Sprintf("%s@%s", Version, Commit)
+ var sb strings.Builder
+
+ isDefault := Version == defaultVersion && Commit == defaultCommit && Build == defaultBuild
+
+ if !isDefault {
+ sb.WriteString(fmt.Sprintf("%s@%s %s", Version, Commit, Build))
+ }
+
+ if info, ok := runtime.ReadBuildInfo(); ok {
+ if isDefault {
+ sb.WriteString(fmt.Sprintf(" %s", info.Main.Version))
+ }
+ sb.WriteString(fmt.Sprintf(" %s", info.GoVersion))
+ if info.Main.Sum != "" {
+ sb.WriteString(fmt.Sprintf(" %s", info.Main.Sum))
+ }
+ }
+
+ return sb.String()
}