From eb8f17bb92a3dabc7c09a503d7f4a588d2788fcc Mon Sep 17 00:00:00 2001 From: Urvi Date: Thu, 30 May 2024 23:27:54 -0700 Subject: [PATCH] Add versioning in docker build --- exp/services/ledgerexporter/Makefile | 3 ++- exp/services/ledgerexporter/docker/Dockerfile | 1 + exp/services/ledgerexporter/internal/app.go | 17 +++++------------ exp/services/ledgerexporter/internal/config.go | 8 ++------ .../ledgerexporter/internal/config_test.go | 18 ++++++------------ .../internal/ledger_meta_archive.go | 2 +- .../internal/ledger_meta_archive_test.go | 6 ++---- 7 files changed, 19 insertions(+), 36 deletions(-) diff --git a/exp/services/ledgerexporter/Makefile b/exp/services/ledgerexporter/Makefile index 5fee16f9d1..caace6c35e 100644 --- a/exp/services/ledgerexporter/Makefile +++ b/exp/services/ledgerexporter/Makefile @@ -2,12 +2,13 @@ SUDO := $(shell docker version >/dev/null 2>&1 || echo "sudo") # https://github.com/opencontainers/image-spec/blob/master/annotations.md BUILD_DATE := $(shell date -u +%FT%TZ) -VERSION ?= $(shell git rev-parse --short HEAD) +VERSION ?= 1.0.0-$(shell git rev-parse --short HEAD) DOCKER_IMAGE := stellar/ledger-exporter docker-build: cd ../../../ && \ $(SUDO) docker build --platform linux/amd64 --pull --label org.opencontainers.image.created="$(BUILD_DATE)" \ + --build-arg GOFLAGS="-ldflags=-X=github.com/stellar/go/exp/services/ledgerexporter/internal.version=$(VERSION)" \ --build-arg VERSION=$(VERSION) \ $(if $(STELLAR_CORE_VERSION), --build-arg STELLAR_CORE_VERSION=$(STELLAR_CORE_VERSION)) \ -f exp/services/ledgerexporter/docker/Dockerfile \ diff --git a/exp/services/ledgerexporter/docker/Dockerfile b/exp/services/ledgerexporter/docker/Dockerfile index a862306718..59e57030f3 100644 --- a/exp/services/ledgerexporter/docker/Dockerfile +++ b/exp/services/ledgerexporter/docker/Dockerfile @@ -9,6 +9,7 @@ RUN go mod download COPY . ./ +ARG GOFLAGS RUN go install github.com/stellar/go/exp/services/ledgerexporter FROM ubuntu:22.04 diff --git a/exp/services/ledgerexporter/internal/app.go b/exp/services/ledgerexporter/internal/app.go index 7a8c371611..c6adcd41a0 100644 --- a/exp/services/ledgerexporter/internal/app.go +++ b/exp/services/ledgerexporter/internal/app.go @@ -37,7 +37,8 @@ const ( ) var ( - logger = log.New().WithField("service", "ledger-exporter") + logger = log.New().WithField("service", "ledger-exporter") + version = "develop" ) func NewDataAlreadyExportedError(Start uint32, End uint32) *DataAlreadyExportedError { @@ -91,27 +92,19 @@ func NewApp(flags Flags) *App { return app } -// Version gets the version of the app from environment variable "LEXIE_VERSION" which is set during the build process. -// If the environment variable is not set, it defaults to "develop". -func Version() string { - version := os.Getenv("LEXIE_VERSION") - if version == "" { - version = "develop" - } - return version -} - func (a *App) init(ctx context.Context) error { var err error var archive historyarchive.ArchiveInterface + logger.Infof("Starting Ledger Exporter with version %s", version) + registry := prometheus.NewRegistry() registry.MustRegister( collectors.NewProcessCollector(collectors.ProcessCollectorOpts{Namespace: "ledger_exporter"}), collectors.NewGoCollector(), ) - if a.config, err = NewConfig(Version(), a.flags); err != nil { + if a.config, err = NewConfig(a.flags); err != nil { return errors.Wrap(err, "Could not load configuration") } if archive, err = datastore.CreateHistoryArchiveFromNetworkName(ctx, a.config.Network); err != nil { diff --git a/exp/services/ledgerexporter/internal/config.go b/exp/services/ledgerexporter/internal/config.go index c83ba9bc66..64f8e4de62 100644 --- a/exp/services/ledgerexporter/internal/config.go +++ b/exp/services/ledgerexporter/internal/config.go @@ -49,18 +49,15 @@ type Config struct { EndLedger uint32 Resume bool - // derived config - Version string // lexie version - CoreVersion string // stellar-core version + CoreVersion string } // This will generate the config based on commandline flags and toml // -// version - Ledger Exporter version // flags - command line flags // // return - *Config or an error if any range validation failed. -func NewConfig(version string, flags Flags) (*Config, error) { +func NewConfig(flags Flags) (*Config, error) { config := &Config{} config.StartLedger = uint32(flags.StartLedger) @@ -74,7 +71,6 @@ func NewConfig(version string, flags Flags) (*Config, error) { return nil, err } logger.Infof("Config: %v", *config) - config.Version = version return config, nil } diff --git a/exp/services/ledgerexporter/internal/config_test.go b/exp/services/ledgerexporter/internal/config_test.go index 7b601e4082..fe286bef57 100644 --- a/exp/services/ledgerexporter/internal/config_test.go +++ b/exp/services/ledgerexporter/internal/config_test.go @@ -19,8 +19,7 @@ func TestNewConfigResumeEnabled(t *testing.T) { mockArchive := &historyarchive.MockArchive{} mockArchive.On("GetRootHAS").Return(historyarchive.HistoryArchiveState{CurrentLedger: 5}, nil).Once() - config, err := NewConfig("v1.0", - Flags{StartLedger: 1, EndLedger: 2, ConfigFilePath: "test/test.toml", Resume: true}) + config, err := NewConfig(Flags{StartLedger: 1, EndLedger: 2, ConfigFilePath: "test/test.toml", Resume: true}) config.ValidateAndSetLedgerRange(ctx, mockArchive) require.NoError(t, err) require.Equal(t, config.DataStoreConfig.Type, "ABC") @@ -38,16 +37,14 @@ func TestNewConfigResumeDisabled(t *testing.T) { mockArchive.On("GetRootHAS").Return(historyarchive.HistoryArchiveState{CurrentLedger: 5}, nil).Once() // resume disabled by default - config, err := NewConfig("v1.0", - Flags{StartLedger: 1, EndLedger: 2, ConfigFilePath: "test/test.toml"}) + config, err := NewConfig(Flags{StartLedger: 1, EndLedger: 2, ConfigFilePath: "test/test.toml"}) require.NoError(t, err) require.False(t, config.Resume) } func TestInvalidTomlConfig(t *testing.T) { - _, err := NewConfig("v1.0", - Flags{StartLedger: 1, EndLedger: 2, ConfigFilePath: "test/no_network.toml", Resume: true}) + _, err := NewConfig(Flags{StartLedger: 1, EndLedger: 2, ConfigFilePath: "test/no_network.toml", Resume: true}) require.ErrorContains(t, err, "Invalid TOML config") } @@ -112,8 +109,7 @@ func TestValidateStartAndEndLedger(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - config, err := NewConfig("v1.0", - Flags{StartLedger: tt.startLedger, EndLedger: tt.endLedger, ConfigFilePath: "test/validate_start_end.toml"}) + config, err := NewConfig(Flags{StartLedger: tt.startLedger, EndLedger: tt.endLedger, ConfigFilePath: "test/validate_start_end.toml"}) require.NoError(t, err) err = config.ValidateAndSetLedgerRange(ctx, mockArchive) if tt.errMsg != "" { @@ -190,8 +186,7 @@ func TestAdjustedLedgerRangeBoundedMode(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - config, err := NewConfig("v1.0", - Flags{StartLedger: tt.start, EndLedger: tt.end, ConfigFilePath: tt.configFile}) + config, err := NewConfig(Flags{StartLedger: tt.start, EndLedger: tt.end, ConfigFilePath: tt.configFile}) require.NoError(t, err) err = config.ValidateAndSetLedgerRange(ctx, mockArchive) require.NoError(t, err) @@ -259,8 +254,7 @@ func TestAdjustedLedgerRangeUnBoundedMode(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - config, err := NewConfig("v1.0", - Flags{StartLedger: tt.start, EndLedger: tt.end, ConfigFilePath: tt.configFile}) + config, err := NewConfig(Flags{StartLedger: tt.start, EndLedger: tt.end, ConfigFilePath: tt.configFile}) require.NoError(t, err) err = config.ValidateAndSetLedgerRange(ctx, mockArchive) require.NoError(t, err) diff --git a/exp/services/ledgerexporter/internal/ledger_meta_archive.go b/exp/services/ledgerexporter/internal/ledger_meta_archive.go index f28706aec1..583f6a3ec4 100644 --- a/exp/services/ledgerexporter/internal/ledger_meta_archive.go +++ b/exp/services/ledgerexporter/internal/ledger_meta_archive.go @@ -37,7 +37,7 @@ func NewLedgerMetaArchiveFromXDR(config *Config, key string, data xdr.LedgerClos CompressionType: compressxdr.DefaultCompressor.Name(), ProtocolVersion: endLedger.ProtocolVersion(), CoreVersion: config.CoreVersion, - Version: config.Version, + Version: version, }, }, nil } diff --git a/exp/services/ledgerexporter/internal/ledger_meta_archive_test.go b/exp/services/ledgerexporter/internal/ledger_meta_archive_test.go index f2f4b629ce..3cf263d71b 100644 --- a/exp/services/ledgerexporter/internal/ledger_meta_archive_test.go +++ b/exp/services/ledgerexporter/internal/ledger_meta_archive_test.go @@ -13,9 +13,7 @@ func TestNewLedgerMetaArchiveFromXDR(t *testing.T) { config := &Config{ Network: "testnet", CoreVersion: "v1.2.3", - Version: "1.0.0", } - data := xdr.LedgerCloseMetaBatch{ StartSequence: 1234, EndSequence: 1234, @@ -39,7 +37,7 @@ func TestNewLedgerMetaArchiveFromXDR(t *testing.T) { CompressionType: "zstd", ProtocolVersion: 21, CoreVersion: "v1.2.3", - Version: "1.0.0", + Version: "develop", } require.Equal(t, expectedMetaData, archive.metaData) @@ -70,7 +68,7 @@ func TestNewLedgerMetaArchiveFromXDR(t *testing.T) { CompressionType: "zstd", ProtocolVersion: 21, CoreVersion: "v1.2.3", - Version: "1.0.0", + Version: "develop", } require.Equal(t, expectedMetaData, archive.metaData)