Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
487b77d9d6 | ||
|
|
5168db69d9 |
+2
-10
@@ -117,13 +117,11 @@ import (
|
||||
var (
|
||||
Appname string = "CHANGEME"
|
||||
Version string
|
||||
Buildarch string
|
||||
)
|
||||
|
||||
func main() {
|
||||
globals.Appname = Appname
|
||||
globals.Version = Version
|
||||
globals.Buildarch = Buildarch
|
||||
|
||||
fx.New(
|
||||
fx.Provide(
|
||||
@@ -823,7 +821,7 @@ func (l *Logger) Identify() {
|
||||
l.log.Info("starting",
|
||||
"appname", l.params.Globals.Appname,
|
||||
"version", l.params.Globals.Version,
|
||||
"buildarch", l.params.Globals.Buildarch,
|
||||
"arch", runtime.GOARCH,
|
||||
)
|
||||
}
|
||||
```
|
||||
@@ -945,20 +943,17 @@ import "go.uber.org/fx"
|
||||
var (
|
||||
Appname string
|
||||
Version string
|
||||
Buildarch string
|
||||
)
|
||||
|
||||
// Struct for DI
|
||||
type Globals struct {
|
||||
Appname string
|
||||
Version string
|
||||
Buildarch string
|
||||
}
|
||||
|
||||
func New(lc fx.Lifecycle) (*Globals, error) {
|
||||
n := &Globals{
|
||||
Appname: Appname,
|
||||
Buildarch: Buildarch,
|
||||
Version: Version,
|
||||
}
|
||||
return n, nil
|
||||
@@ -972,13 +967,11 @@ func New(lc fx.Lifecycle) (*Globals, error) {
|
||||
var (
|
||||
Appname string = "CHANGEME" // Default, overridden by build
|
||||
Version string // Set at build time
|
||||
Buildarch string // Set at build time
|
||||
)
|
||||
|
||||
func main() {
|
||||
globals.Appname = Appname
|
||||
globals.Version = Version
|
||||
globals.Buildarch = Buildarch
|
||||
// ...
|
||||
}
|
||||
```
|
||||
@@ -989,10 +982,9 @@ Use ldflags to inject version information at build time:
|
||||
|
||||
```makefile
|
||||
VERSION := $(shell git describe --tags --always)
|
||||
BUILDARCH := $(shell go env GOARCH)
|
||||
|
||||
build:
|
||||
go build -ldflags "-X main.Version=$(VERSION) -X main.Buildarch=$(BUILDARCH)" ./cmd/httpd
|
||||
go build -ldflags "-X main.Version=$(VERSION)" ./cmd/httpd
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
|
||||
BINARY := upaasd
|
||||
VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
|
||||
BUILDARCH := $(shell go env GOARCH)
|
||||
LDFLAGS := -X main.Version=$(VERSION) -X main.Buildarch=$(BUILDARCH)
|
||||
LDFLAGS := -X main.Version=$(VERSION)
|
||||
|
||||
all: check build
|
||||
|
||||
|
||||
@@ -21,10 +21,16 @@ regress.
|
||||
# Completed Steps
|
||||
|
||||
- 2026-10-02: App names may contain dots, such as `sneak.berlin`: lowercase
|
||||
letters and numbers joined by single dots or by hyphens, 2 to 63 characters,
|
||||
which is Docker's rule for the image name `upaas-<name>`. The new and edit app
|
||||
forms check the same rule; browsers ignored their old pattern, which was not a
|
||||
valid regular expression there (#260).
|
||||
letters and numbers joined by single dots or by hyphens, 2 to 63 characters.
|
||||
Docker accepts every such name in the image name `upaas-<name>`; a dot needs a
|
||||
letter or number on both sides because Docker requires it. The new and edit
|
||||
app forms check the same rule; browsers ignored their old pattern, which was
|
||||
not a valid regular expression there (#260).
|
||||
|
||||
- 2026-10-02: The build no longer passes the CPU architecture in: upaas reads it
|
||||
from Go's `runtime.GOARCH` when it runs, and the startup log line reports it
|
||||
as `arch`. `CONVENTIONS.md` follows the updated conventions in `sneak/prompts`
|
||||
(#259).
|
||||
|
||||
- 2026-10-01: Built images are tagged `upaas-<app>:<short hash>`, git's short
|
||||
form of the commit built, instead of the deployment number. A redeploy of a
|
||||
|
||||
@@ -27,13 +27,11 @@ import (
|
||||
var (
|
||||
Appname = "upaas" //nolint:gochecknoglobals // build-time variable
|
||||
Version string //nolint:gochecknoglobals // build-time variable
|
||||
Buildarch string //nolint:gochecknoglobals // build-time variable
|
||||
)
|
||||
|
||||
func main() {
|
||||
globals.SetAppname(Appname)
|
||||
globals.SetVersion(Version)
|
||||
globals.SetBuildarch(Buildarch)
|
||||
|
||||
fx.New(
|
||||
fx.Provide(
|
||||
|
||||
@@ -15,14 +15,12 @@ var (
|
||||
mu sync.RWMutex
|
||||
appname string
|
||||
version string
|
||||
buildarch string
|
||||
)
|
||||
|
||||
// Globals holds build-time variables for dependency injection.
|
||||
type Globals struct {
|
||||
Appname string
|
||||
Version string
|
||||
Buildarch string
|
||||
}
|
||||
|
||||
// New creates a new Globals instance from package-level variables.
|
||||
@@ -33,7 +31,6 @@ func New(_ fx.Lifecycle) (*Globals, error) {
|
||||
return &Globals{
|
||||
Appname: appname,
|
||||
Version: version,
|
||||
Buildarch: buildarch,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -52,11 +49,3 @@ func SetVersion(ver string) {
|
||||
|
||||
version = ver
|
||||
}
|
||||
|
||||
// SetBuildarch sets the build architecture (used for testing and main init).
|
||||
func SetBuildarch(arch string) {
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
|
||||
buildarch = arch
|
||||
}
|
||||
|
||||
@@ -14,8 +14,9 @@ const (
|
||||
)
|
||||
|
||||
// validAppNameRe matches runs of lowercase letters and digits joined by
|
||||
// single dots or by hyphens, such as "my-app" or "sneak.berlin". This is
|
||||
// Docker's rule for an image name, and the app's image is upaas-<name>.
|
||||
// single dots or by hyphens, such as "my-app" or "sneak.berlin". Docker
|
||||
// accepts every name it allows as the app's image name, upaas-<name>; a
|
||||
// dot needs a letter or digit on both sides because Docker requires it.
|
||||
// It also keeps the name from being "." or ".." or starting or ending
|
||||
// with a dot, so it is safe as a directory and file name. The pattern
|
||||
// attribute of the name field on the new and edit app forms is the same.
|
||||
|
||||
@@ -4,6 +4,7 @@ package logger
|
||||
import (
|
||||
"log/slog"
|
||||
"os"
|
||||
"runtime"
|
||||
|
||||
"go.uber.org/fx"
|
||||
|
||||
@@ -81,6 +82,6 @@ func (l *Logger) Identify() {
|
||||
l.log.Info("starting",
|
||||
"appname", l.params.Globals.Appname,
|
||||
"version", l.params.Globals.Version,
|
||||
"buildarch", l.params.Globals.Buildarch,
|
||||
"arch", runtime.GOARCH,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package logger //nolint:testpackage // sets the unexported log and params fields
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"log/slog"
|
||||
"runtime"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"sneak.berlin/go/upaas/internal/globals"
|
||||
)
|
||||
|
||||
func TestIdentifyLogsArchitectureFromRuntime(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var buf bytes.Buffer
|
||||
|
||||
l := &Logger{
|
||||
log: slog.New(slog.NewJSONHandler(&buf, nil)),
|
||||
params: Params{
|
||||
Globals: &globals.Globals{Appname: "upaas-test", Version: "test"},
|
||||
},
|
||||
}
|
||||
|
||||
l.Identify()
|
||||
|
||||
var line map[string]any
|
||||
|
||||
require.NoError(t, json.Unmarshal(buf.Bytes(), &line))
|
||||
assert.Equal(t, runtime.GOARCH, line["arch"])
|
||||
}
|
||||
Reference in New Issue
Block a user