diff --git a/internal/game.go b/internal/game.go index 105f0b9..c42a659 100644 --- a/internal/game.go +++ b/internal/game.go @@ -11,6 +11,7 @@ import ( "git.wisellama.rocks/Project-Ely/project-ely/internal/entity" "git.wisellama.rocks/Project-Ely/project-ely/internal/player" "git.wisellama.rocks/Project-Ely/project-ely/internal/sprite" + "git.wisellama.rocks/Project-Ely/project-ely/internal/version" "git.wisellama.rocks/Wisellama/gosimpleconf" rl "github.com/gen2brain/raylib-go/raylib" ) @@ -35,9 +36,15 @@ func Run(ctx context.Context, configMap gosimpleconf.ConfigMap) error { framerate64 := gosimpleconf.Int64(configMap["game.framerate"]) framerate := int32(framerate64) + windowTitle := fmt.Sprintf("%s - %s (%s)", + configMap["game.title"], + version.Version, + version.CommitHash, + ) + // Initialize the RayLib window channels.RL.Do(func() { - rl.InitWindow(800, 600, configMap["game.title"]) + rl.InitWindow(800, 600, windowTitle) rl.SetTargetFPS(framerate) }) defer func() { diff --git a/internal/version/version.go b/internal/version/version.go new file mode 100644 index 0000000..e8d32da --- /dev/null +++ b/internal/version/version.go @@ -0,0 +1,18 @@ +package version + +import "fmt" + +// Thanks to the following blog post for how to use the linker flags +// to pass in build-time variables. +// +// https://belief-driven-design.com/build-time-variables-in-go-51439b26ef9/ + +var ( + Version = "dev" + CommitHash = "n/a" + BuildTimestamp = "n/a" +) + +func BuildVersion() string { + return fmt.Sprintf("%s %s %s", Version, CommitHash, BuildTimestamp) +} diff --git a/scripts/build-unix.sh b/scripts/build-unix.sh new file mode 100755 index 0000000..df42698 --- /dev/null +++ b/scripts/build-unix.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env sh + +d=$(cd $(dirname $0) && pwd -P) + +. "${d}/common-release-build.sh" + +build $(uname) $(uname -m) diff --git a/scripts/build-windows-386.sh b/scripts/build-windows-386.sh index 97e07b3..37dbb8f 100644 --- a/scripts/build-windows-386.sh +++ b/scripts/build-windows-386.sh @@ -1,5 +1,7 @@ #!/usr/bin/env sh -. common-build-windows.sh +d=$(cd $(dirname $0) && pwd -P) + +. "${d}/common-release-build.sh" build windows 386 diff --git a/scripts/build-windows-am64.sh b/scripts/build-windows-am64.sh deleted file mode 100644 index b4da736..0000000 --- a/scripts/build-windows-am64.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env sh - -. common-release-build.sh - -build windows amd64 diff --git a/scripts/build-windows-amd64.sh b/scripts/build-windows-amd64.sh new file mode 100644 index 0000000..596adf7 --- /dev/null +++ b/scripts/build-windows-amd64.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env sh + +d=$(cd $(dirname $0) && pwd -P) + +. "${d}/common-release-build.sh" + +build windows amd64 diff --git a/scripts/common-release-build.sh b/scripts/common-release-build.sh index 9b79d09..285bb4c 100644 --- a/scripts/common-release-build.sh +++ b/scripts/common-release-build.sh @@ -5,25 +5,38 @@ build(){ OS=$1 ARCH=$2 - if [ -z $NAME ] - then - NAME=output - fi + # Lowercase + OS=$(echo "$OS" | awk '{ print tolower($0) }') + ARCH=$(echo "$ARCH" | awk '{ print tolower($0) }') if [ -z "${CC}" ] then export CC=gcc fi - LDFLAGS_WIN="" + # Add .exe to Windows output EXE="" - if [ "${OS}" == "windows" ] + if [ "${OS}" = "windows" ] then - LDFLAGS_WIN="-H windowsgui" EXE=".exe" fi - OUTPUT="${NAME}-${OS}-${ARCH}${EXE}" + if [ "${ARCH}" = "x86_64" ] + then + ARCH="amd64" + fi + + PACKAGE="$(grep module go.mod | awk '{print $2}')" + TAG="$(git describe --tags --abbrev=0)" + VERSION="$(echo ${TAG} | awk -F '-' '{print $NF}')" + COMMIT_HASH="$(git rev-parse --short HEAD)" + BUILD_TIMESTAMP="$(date -u '+%Y-%m-%dT%H:%M:%SZ')" + + OUTPUT="${TAG}-${OS}-${ARCH}${EXE}" + + LDFLAGS="${LDFLAGS} -X '${PACKAGE}/internal/version.Version=${VERSION}'" + LDFLAGS="${LDFLAGS} -X '${PACKAGE}/internal/version.CommitHash=${COMMIT_HASH}'" + LDFLAGS="${LDFLAGS} -X '${PACKAGE}/internal/version.BuildTimestamp=${BUILD_TIMESTAMP}'" export CGO_ENABLED=1 export CC="${CC}" @@ -31,7 +44,6 @@ build(){ export GOARCH=$ARCH go build -x -v \ -trimpath \ - -tags static \ - -ldflags="-s -w ${LDFLAGS_WIN}" \ + -ldflags="-s -w ${LDFLAGS}" \ -o "${OUTPUT}" }