diff --git a/.drone.yml b/.drone.yml index 63204f7..ef7dd77 100644 --- a/.drone.yml +++ b/.drone.yml @@ -19,7 +19,7 @@ steps: - echo "APP Version tags $APP_VERSION" - echo -n "$APP_VERSION" >> .tags - - name: buid web + - name: build web image: plugins/docker settings: build_args: @@ -31,17 +31,17 @@ steps: repo: artifactory.ravanertebat.ir/tm/web registry: artifactory.ravanertebat.ir - # - name: buid scraper - # image: plugins/docker - # settings: - # build_args: - # - BUILD_APP=scraper - # username: cicd - # password: - # from_secret: REGISTRY_PASSWORD - # dockerfile: Dockerfile-drone - # repo: artifactory.ravanertebat.ir/tm/scraper - # registry: artifactory.ravanertebat.ir + - name: build scraper + image: plugins/docker + settings: + build_args: + - BUILD_APP=scraper + username: cicd + password: + from_secret: REGISTRY_PASSWORD + dockerfile: ./cmd/scraper/Dockerfile + repo: artifactory.ravanertebat.ir/tm/scraper + registry: artifactory.ravanertebat.ir node: tag: aecde-docker-runner diff --git a/cmd/scraper/Dockerfile b/cmd/scraper/Dockerfile new file mode 100644 index 0000000..38cfc3d --- /dev/null +++ b/cmd/scraper/Dockerfile @@ -0,0 +1,22 @@ +ARG GO_VERSION=1.23 +ARG BASH_VERSION=5.0 + +FROM golang:${GO_VERSION} AS go-builder + +WORKDIR /go/src/company/tm_back + +COPY . . + +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -o scraper-build ./cmd/scraper/main.go + +FROM bash:${BASH_VERSION} +RUN apk --no-cache add busybox-suid curl rsync tzdata tcpdump tree ca-certificates s-nail \ + && ln -s /usr/bin/mail /usr/bin/s-nail \ + && mkdir -p /go/bin/media /go/bin/log /go/bin/config +WORKDIR /go/bin + +COPY --from=go-builder /go/src/company/tm_back/scraper-build . + +EXPOSE 8090 + +ENTRYPOINT /go/bin/scraper-build diff --git a/cmd/scraper/bootstrap.go b/cmd/scraper/bootstrap/bootstrap.go similarity index 92% rename from cmd/scraper/bootstrap.go rename to cmd/scraper/bootstrap/bootstrap.go index 4b56289..daa839f 100644 --- a/cmd/scraper/bootstrap.go +++ b/cmd/scraper/bootstrap/bootstrap.go @@ -1,4 +1,4 @@ -package main +package bootstrap import ( "context" @@ -15,17 +15,17 @@ import ( ) // Init Application Configuration -func initConfig() *Config { +func InitConfig() (*Config, error) { conf, err := config.LoadConfig(".", &Config{}) if err != nil { - panic(fmt.Sprintf("Failed to load config: %v", err)) + return nil, fmt.Errorf("failed to load config: %v", err) } - return conf + return conf, nil } // Init Logger Service -func initLogger(conf config.LoggingConfig) logger.Logger { +func InitLogger(conf config.LoggingConfig) logger.Logger { return logger.NewLogger(&logger.Config{ Level: conf.Level, Format: conf.Format, @@ -41,7 +41,7 @@ func initLogger(conf config.LoggingConfig) logger.Logger { } // Init MongoDB Connection Manager -func initMongoDB(conf config.MongoConfig, log logger.Logger) *mongo.ConnectionManager { +func InitMongoDB(conf config.MongoConfig, log logger.Logger) *mongo.ConnectionManager { // Convert infra.MongoConfig to mongo.ConnectionConfig connectionConfig := mongo.ConnectionConfig{ URI: conf.URI, @@ -74,7 +74,7 @@ func initMongoDB(conf config.MongoConfig, log logger.Logger) *mongo.ConnectionMa } // init TED scraper -func initTEDScraper(config Config, mongoManager *mongo.ConnectionManager, appLogger logger.Logger) { +func InitTEDScraper(config Config, mongoManager *mongo.ConnectionManager, appLogger logger.Logger) { // Initialize tender repository tenderRepo := tender.NewTenderRepository(mongoManager, appLogger) diff --git a/cmd/scraper/config.go b/cmd/scraper/bootstrap/config.go similarity index 98% rename from cmd/scraper/config.go rename to cmd/scraper/bootstrap/config.go index 1ddf836..8aa75a3 100644 --- a/cmd/scraper/config.go +++ b/cmd/scraper/bootstrap/config.go @@ -1,4 +1,4 @@ -package main +package bootstrap import ( "time" diff --git a/cmd/scraper/main.go b/cmd/scraper/main.go index 3ed5078..ecf08bf 100644 --- a/cmd/scraper/main.go +++ b/cmd/scraper/main.go @@ -2,25 +2,25 @@ package main import ( "context" - "log" "time" + "tm/cmd/scraper/bootstrap" ) func main() { // Load configuration - config, err := LoadConfig(".") + config, err := bootstrap.InitConfig() if err != nil { - log.Fatalf("Failed to load configuration: %v", err) + panic(err) } // Initialize logger - appLogger := initLogger(config.Logging) + appLogger := bootstrap.InitLogger(config.Logging) appLogger.Info("Starting TED scraper application", map[string]interface{}{ "version": "1.0.0", }) // Initialize MongoDB connection - mongoManager := initMongoDB(config.Database.MongoDB, appLogger) + mongoManager := bootstrap.InitMongoDB(config.Database.MongoDB, appLogger) defer func() { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() @@ -31,7 +31,7 @@ func main() { } }() - initTEDScraper(*config, mongoManager, appLogger) + bootstrap.InitTEDScraper(*config, mongoManager, appLogger) appLogger.Info("TED scraper application stopped", map[string]interface{}{}) }