diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 31147fc..895b6df 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -27,30 +27,16 @@ clear-old-images: build-app: extends: .build_template variables: - DOCKER_BUILD_PATH: "./Dockerfile" + DOCKER_BUILD_PATH: "build/Dockerfile" + PRODUCTION_BRANCH: main STAGING_BRANCH: "main" - PRODUCTION_BRANCH: "main" - before_script: - - echo PRODUCTION_BRANCH = $PRODUCTION_BRANCH - - echo STAGING_BRANCH = $STAGING_BRANCH - - echo CI_REGISTRY = $CI_REGISTRY - - echo CI_REGISTRY_USER = $CI_REGISTRY_USER - - echo CI_PROJECT_DIR = $CI_PROJECT_DIR - - echo REGISTRY_USER = $REGISTRY_USER - - echo REGISTRY_TOKEN = $REGISTRY_TOKEN - - echo CI_REGISTRY_IMAGE = $CI_REGISTRY_IMAGE - - echo CI_COMMIT_REF_SLUG = $CI_COMMIT_REF_SLUG - - echo DOCKER_BUILD_PATH = $DOCKER_BUILD_PATH - - echo CI_PIPELINE_ID = $CI_PIPELINE_ID - - env + rules: + - if: $CI_COMMIT_BRANCH == $PRODUCTION_BRANCH || $CI_COMMIT_BRANCH == $STAGING_BRANCH + script: - - mkdir -p /kaniko/.docker - - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json - - | - /kaniko/executor --context $CI_PROJECT_DIR \ - --cache=true --cache-repo=$CI_REGISTRY_IMAGE --build-arg GITLAB_TOKEN=$GITLAB_TOKEN \ - --dockerfile $CI_PROJECT_DIR/$DOCKER_BUILD_PATH --use-new-run --snapshotMode=redo \ - --destination $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID + - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID --build-arg GITLAB_TOKEN=$GITLAB_TOKEN $CI_PROJECT_DIR + - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID + deploy-to-staging: extends: .deploy_template diff --git a/internal/app/app_feedback.go b/internal/app/app_feedback.go index b13c606..3fd74e0 100644 --- a/internal/app/app_feedback.go +++ b/internal/app/app_feedback.go @@ -1,11 +1,13 @@ package app import ( + "context" + "time" + tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" "go.etcd.io/bbolt" "go.uber.org/zap" "go.uber.org/zap/zapcore" - "log" "penahub.gitlab.yandexcloud.net/backend/templategen_feedback/internal/config" "penahub.gitlab.yandexcloud.net/backend/templategen_feedback/internal/initialize" "penahub.gitlab.yandexcloud.net/backend/templategen_feedback/internal/server" @@ -16,6 +18,9 @@ func Run(cfg *config.Config) { cfgLogger.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder cfgLogger.EncoderConfig.ConsoleSeparator = " " + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + logger, err := cfgLogger.Build() if err != nil { panic(err) @@ -25,17 +30,20 @@ func Run(cfg *config.Config) { db, err := bbolt.Open("bolt.db", 0666, nil) if err != nil { - logger.Fatal("BoltDB", zap.Error(err)) + logger.Error("BoltDB", zap.Error(err)) + return } bot, err := tgbotapi.NewBotAPI(cfg.TelegramToken) if err != nil { - logger.Fatal("TelegramBotApi", zap.Error(err)) + logger.Error("TelegramBotApi", zap.Error(err)) + return } repositories, err := initialize.NewRepositories(logger, db) if err != nil { - logger.Fatal("BoltDB", zap.Error(err)) + logger.Error("BoltDB", zap.Error(err)) + return } clients := initialize.NewClients(logger, bot, cfg.TelegramChannelID, cfg.TemplatePath) @@ -48,15 +56,40 @@ func Run(cfg *config.Config) { }) err = clients.Telegram.SendMessage("Bot started") - if err != nil { - logger.Fatal("TelegramBot", zap.Error(err)) + logger.Error("TelegramBot", zap.Error(err)) + return } + + // Send alive message + now := time.Now() + alarm := time.Date(now.Year(), now.Month(), now.Day(), 23, 59, 59, 0, now.Location()) + timer := time.NewTimer(time.Until(alarm)) + go func() { + for { + select { + case now = <-timer.C: + err = clients.Telegram.SendMessage("Я пока еще не сдох!") + if err != nil { + logger.Error("TelegramBot", zap.Error(err)) + return + } + + alarm = now.AddDate(0, 0, 1) + timer.Reset(time.Until(alarm)) + case <-ctx.Done(): + timer.Stop() + return + } + } + + }() controllers := initialize.NewControllers(logger, repositories.Feedback, clients.Telegram) if err = controllers.Feedback.WarmUpService(); err != nil { - log.Fatal("Controllers.Feedback", zap.Error(err)) + logger.Error("Controllers.Feedback", zap.Error(err)) + return } logger.Info("Feedback service", zap.String("status", "warmed up")) @@ -70,7 +103,8 @@ func Run(cfg *config.Config) { go func() { err := httpSrv.Start() if err != nil { - logger.Fatal("CanNotServe", zap.Error(err)) + logger.Error("CanNotServe", zap.Error(err)) + return } }() diff --git a/internal/controller/feedback.go b/internal/controller/feedback.go index 33256ff..1dc52e7 100644 --- a/internal/controller/feedback.go +++ b/internal/controller/feedback.go @@ -1,6 +1,7 @@ package controller import ( + "time" "github.com/gofiber/fiber/v2" "go.uber.org/zap" "penahub.gitlab.yandexcloud.net/backend/templategen_feedback/internal/client" @@ -119,7 +120,7 @@ func (r *FeedbackController) RunService() { case <-r.interrupter: break default: - continue + time.Sleep(time.Second) } } }