diff --git a/.dockerignore b/.dockerignore index f1914ae..cb1343b 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,4 @@ .git app.db -uploads \ No newline at end of file +uploads +Dockerfile \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index b3fa0b2..0e2f0ff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,5 +11,11 @@ RUN go build -o aides-repo-api ./cmd/aides-repo-api/main.go # Второй этап: создание финального образа FROM registry.altlinux.org/alt/alt:sisyphus +RUN \ + apt-get update && \ + apt-get install apt-repo-tools && \ + rm -f /var/lib/apt/lists/*.* && \ + rm -f /var/cache/apt/*.bin + COPY --from=builder /app/aides-repo-api /bin/aides-repo-api ENTRYPOINT ["/bin/aides-repo-api"] \ No newline at end of file diff --git a/go.mod b/go.mod index 78aa012..e9427b5 100644 --- a/go.mod +++ b/go.mod @@ -12,13 +12,20 @@ require ( github.com/ajg/form v1.5.1 // indirect github.com/go-co-op/gocron/v2 v2.13.0 // indirect github.com/google/uuid v1.6.0 // indirect + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect + github.com/jackc/pgx/v5 v5.7.1 // indirect + github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/jonboulle/clockwork v0.4.0 // indirect github.com/mattn/go-sqlite3 v1.14.24 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect + golang.org/x/crypto v0.31.0 // indirect golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect + golang.org/x/sync v0.10.0 // indirect golang.org/x/text v0.21.0 // indirect + gorm.io/driver/postgres v1.5.11 // indirect gorm.io/driver/sqlite v1.5.7 // indirect gorm.io/gorm v1.25.12 // indirect ) diff --git a/go.sum b/go.sum index 1c90d0d..a7284fa 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,7 @@ github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/caarlos0/env/v11 v11.2.2 h1:95fApNrUyueipoZN/EhA8mMxiNxrBwDa+oAZrMWl3Kg= github.com/caarlos0/env/v11 v11.2.2/go.mod h1:JBfcdeQiBoI3Zh1QRAWfe+tpiNTmDtcCj/hHHHMx0vc= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw= github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-chi/render v1.0.3 h1:AsXqd2a1/INaIfUSKq3G5uA8weYx20FOsM7uSoCyyt4= @@ -10,6 +11,14 @@ github.com/go-co-op/gocron/v2 v2.13.0 h1:iGU/RoZvf4GF5hIZUkDSFvvajk9K3W4YgocarBo github.com/go-co-op/gocron/v2 v2.13.0/go.mod h1:ZF70ZwEqz0OO4RBXE1sNxnANy/zvwLcattWEFsqpKig= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.7.1 h1:x7SYsPBYDkHDksogeSmZZ5xzThcTgRz++I5E+ePFUcs= +github.com/jackc/pgx/v5 v5.7.1/go.mod h1:e7O26IywZZ+naJtWWos6i6fvWK+29etgITqrqHLfoZA= +github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= +github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= @@ -18,12 +27,24 @@ github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc= github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM= github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/driver/postgres v1.5.11 h1:ubBVAfbKEUld/twyKZ0IYn9rSQh448EdelLYk9Mv314= +gorm.io/driver/postgres v1.5.11/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI= gorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I= gorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4= gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= diff --git a/internal/app/app.go b/internal/app/app.go index 6f9878a..0b8d304 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -1,9 +1,11 @@ package app import ( + "fmt" + "code.alt-gnome.ru/aides-infra/aides-repo-api/internal/config" "code.alt-gnome.ru/aides-infra/aides-repo-api/internal/models" - "gorm.io/driver/sqlite" + "gorm.io/driver/postgres" "gorm.io/gorm" ) @@ -13,7 +15,10 @@ type App struct { } func New() (*App, error) { - db, err := gorm.Open(sqlite.Open("app.db"), &gorm.Config{}) + cfg := config.New() + dsn := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=disable", + cfg.DBHost, cfg.DBPort, cfg.DBUser, cfg.DBPassword, cfg.DBName) + db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { return nil, err } @@ -25,7 +30,7 @@ func New() (*App, error) { }) return &App{ - Config: config.New(), + Config: cfg, Db: db, }, nil } diff --git a/internal/config/config.go b/internal/config/config.go index 36a30ab..08ee12d 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -11,6 +11,12 @@ type Config struct { UploadDir string `env:"UPLOAD_DIR" envDefault:"./uploads"` Port string `env:"PORT" envDefault:"8080"` MaxSizeUpload int64 `env:"MAX_SIZE_UPLOAD" envDefault:"104857600"` //100 MB + + DBHost string `env:"DB_HOST" envDefault:"localhost"` + DBPort string `env:"DB_PORT" envDefault:"5432"` + DBUser string `env:"DB_USER" envDefault:"user"` + DBPassword string `env:"DB_PASSWORD" envDefault:"password"` + DBName string `env:"DB_NAME" envDefault:"app_db"` } func New() *Config { diff --git a/internal/models/db.go b/internal/models/db.go index 46a995a..0def57a 100644 --- a/internal/models/db.go +++ b/internal/models/db.go @@ -69,9 +69,9 @@ type GitRepoAltRepoTask struct { ALTRepoID uint `gorm:"uniqueIndex:idx_gr_ar_gitaltrepotask"` ALTRepo *ALTRepo - LastTaskID uint + LastTaskID *uint LastTask *Task - CurrentTaskID uint - CurrentTask Task + CurrentTaskID *uint + CurrentTask *Task } diff --git a/internal/services/reposervice/service.go b/internal/services/reposervice/service.go index 311bfce..fa48962 100644 --- a/internal/services/reposervice/service.go +++ b/internal/services/reposervice/service.go @@ -151,4 +151,6 @@ func (s *Service) ForceUpdate() { if err := os.RemoveAll(cPath); err != nil { } + + os.RemoveAll(path.Join(s.app.Config.UploadDir, "future_repo")) } diff --git a/internal/services/taskservice/service.go b/internal/services/taskservice/service.go index 68d9511..7191eef 100644 --- a/internal/services/taskservice/service.go +++ b/internal/services/taskservice/service.go @@ -32,7 +32,7 @@ func (s *Service) onTaskComplete(task *models.Task) error { Where(&grart). FirstOrCreate(&grart) - grart.LastTaskID = task.ID + grart.LastTaskID = &task.ID if err := s.app.Db.Save(&grart).Error; err != nil { return err @@ -45,11 +45,11 @@ func (s *Service) onTaskComplete(task *models.Task) error { func (s *Service) tasksCleanup(r *models.GitRepoAltRepoTask, N int) { excludedTaskIDs := []uint{} - if r.CurrentTaskID != 0 { - excludedTaskIDs = append(excludedTaskIDs, r.CurrentTaskID) + if r.CurrentTaskID != nil { + excludedTaskIDs = append(excludedTaskIDs, *r.CurrentTaskID) } - if r.LastTaskID != 0 { - excludedTaskIDs = append(excludedTaskIDs, r.LastTaskID) + if r.LastTaskID != nil { + excludedTaskIDs = append(excludedTaskIDs, *r.LastTaskID) } var lastNTaskIDs []uint