Skip to content

Commit

Permalink
Add versioning in docker build
Browse files Browse the repository at this point in the history
  • Loading branch information
urvisavla committed May 31, 2024
1 parent 98fdbb9 commit eb8f17b
Show file tree
Hide file tree
Showing 7 changed files with 19 additions and 36 deletions.
3 changes: 2 additions & 1 deletion exp/services/ledgerexporter/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down
1 change: 1 addition & 0 deletions exp/services/ledgerexporter/docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
17 changes: 5 additions & 12 deletions exp/services/ledgerexporter/internal/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down
8 changes: 2 additions & 6 deletions exp/services/ledgerexporter/internal/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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
}
Expand Down
18 changes: 6 additions & 12 deletions exp/services/ledgerexporter/internal/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -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")
}

Expand Down Expand Up @@ -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 != "" {
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit eb8f17b

Please sign in to comment.