fix(cmd/build): populate date variable when not set through ldflags (#11316)

# Which Problems Are Solved

When building zitadel through `go build` or using an IDE debugging tool,
ldflags are not passed by dedault. In the past this was taken care of by
the `make compile` command, which got replaced by NX. The `nx
@zitadel/api:build` command does not set the ldflags either. Only the
`pack-platform` command does.

Because the ldflags aren't passed, the `date` and other variables remain
empty in the `cmd/build` package. During init of the package, if the
`version` is empty it defaults to the `date` variable. When the `date`
field was empty, the parsed `dateTime` would default to `time.Now()`,
but the `date` variable remained empty, resulting in a empty version.

A consistently empty version string prevents upgrades of projections on
dev systems, as the version from the last run is used.

# How the Problems Are Solved

If date failed to parse and `dateTime` is set to Now, use the formated
string of `dateTime` as `date`.

# Additional Context

- Blocks https://github.com/zitadel/zitadel/pull/11239
This commit is contained in:
Tim Möhlmann
2026-01-08 07:22:36 +01:00
committed by GitHub
parent 4b5d6e39e1
commit 686de99967
2 changed files with 10 additions and 2 deletions
@@ -9,6 +9,7 @@ import (
"google.golang.org/protobuf/types/known/timestamppb"
"github.com/zitadel/zitadel/backend/v3/domain"
"github.com/zitadel/zitadel/cmd/build"
filter_v2 "github.com/zitadel/zitadel/pkg/grpc/filter/v2"
filter_v2beta "github.com/zitadel/zitadel/pkg/grpc/filter/v2beta"
instance_v2 "github.com/zitadel/zitadel/pkg/grpc/instance/v2"
@@ -62,7 +63,7 @@ func TestDomainInstanceModelToGRPCBetaResponse(t *testing.T) {
ChangeDate: timestamppb.New(now),
CreationDate: timestamppb.New(yesterday),
Name: "Instance One",
Version: "",
Version: build.Version(),
Domains: []*instance_v2beta.Domain{
{
InstanceId: "instance-1",
@@ -150,7 +151,7 @@ func TestDomainInstanceModelToGRPCResponse(t *testing.T) {
CreationDate: timestamppb.New(yesterday),
State: instance_v2.State_STATE_RUNNING,
Name: "Instance One",
Version: "",
Version: build.Version(),
CustomDomains: []*instance_v2.CustomDomain{
{
InstanceId: "instance-1",
@@ -221,6 +222,7 @@ func TestDomainInstanceListModelToGRPCBetaResponse(t *testing.T) {
Name: "test-instance",
CreationDate: timestamppb.New(now),
ChangeDate: timestamppb.New(now),
Version: build.Version(),
Domains: []*instance_v2beta.Domain{},
},
},
@@ -257,6 +259,7 @@ func TestDomainInstanceListModelToGRPCBetaResponse(t *testing.T) {
Name: "test-instance-1",
CreationDate: timestamppb.New(now),
ChangeDate: timestamppb.New(now),
Version: build.Version(),
Domains: []*instance_v2beta.Domain{
{
InstanceId: "instance1",
@@ -272,6 +275,7 @@ func TestDomainInstanceListModelToGRPCBetaResponse(t *testing.T) {
Name: "test-instance-2",
CreationDate: timestamppb.New(now),
ChangeDate: timestamppb.New(now),
Version: build.Version(),
Domains: []*instance_v2beta.Domain{},
},
},
@@ -322,6 +326,7 @@ func TestDomainInstanceListModelToGRPCResponse(t *testing.T) {
CreationDate: timestamppb.New(now),
ChangeDate: timestamppb.New(now),
State: instance_v2.State_STATE_RUNNING,
Version: build.Version(),
CustomDomains: []*instance_v2.CustomDomain{},
},
},
@@ -359,6 +364,7 @@ func TestDomainInstanceListModelToGRPCResponse(t *testing.T) {
CreationDate: timestamppb.New(now),
ChangeDate: timestamppb.New(now),
State: instance_v2.State_STATE_RUNNING,
Version: build.Version(),
CustomDomains: []*instance_v2.CustomDomain{
{
InstanceId: "instance1",
@@ -375,6 +381,7 @@ func TestDomainInstanceListModelToGRPCResponse(t *testing.T) {
CreationDate: timestamppb.New(now),
ChangeDate: timestamppb.New(now),
State: instance_v2.State_STATE_RUNNING,
Version: build.Version(),
CustomDomains: []*instance_v2.CustomDomain{},
},
},
+1
View File
@@ -23,6 +23,7 @@ func init() {
if err != nil {
logging.WithError(err).Warn("could not parse build date, using current time instead")
dateTime = time.Now()
date = dateTime.Format(time.RFC3339)
}
if version == "" {
logging.Warn("no build version set, using timestamp as version")