Fix build and versioning (borrowed from yarn)
This commit is contained in:
parent
c727404d91
commit
07d888c2c6
6 changed files with 78 additions and 20 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -5,8 +5,9 @@
|
|||
|
||||
/dist
|
||||
/tube
|
||||
tube
|
||||
/.DS_Store
|
||||
/cmd/tube/tube
|
||||
|
||||
**/.DS_Store
|
||||
|
||||
videos/*
|
||||
!videos/README.md
|
||||
|
|
|
@ -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
|
||||
|
|
36
Makefile
36
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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
2
doc.go
Normal file
2
doc.go
Normal file
|
@ -0,0 +1,2 @@
|
|||
// Package tube is a Youtube-like (without censorship and features you don't need!) Video Sharing App
|
||||
package tube
|
46
version.go
46
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()
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue