diff --git a/Makefile b/Makefile index 68fa3f7..58d3a6a 100644 --- a/Makefile +++ b/Makefile @@ -88,7 +88,7 @@ i18n: bash scripts/i18n-badge.sh test-coverage: - go test ./... -v -coverpkg=./... -coverprofile=coverage.out + go test -tags=test ./... -v -coverpkg=./... -coverprofile=coverage.out bash scripts/coverage-badge.sh update-deps-cve: diff --git a/pkg/dlcache/dlcache.go b/pkg/dlcache/dlcache.go index 1a1cbb0..4a775de 100644 --- a/pkg/dlcache/dlcache.go +++ b/pkg/dlcache/dlcache.go @@ -25,7 +25,6 @@ import ( "path/filepath" "gitea.plemya-x.ru/Plemya-x/ALR/internal/config" - "gitea.plemya-x.ru/Plemya-x/ALR/internal/utils" ) type Config interface { @@ -62,8 +61,8 @@ func (dc *DownloadCache) New(ctx context.Context, id string) (string, error) { } } - // Используем специальную функцию для создания каталогов с setgid битом - err = utils.EnsureTempDirWithRootOwner(itemPath, 0o2775) + // Создаем директорию с правильными правами (различается для prod и тестов) + err = createDir(itemPath, 0o2775) if err != nil { return "", err } diff --git a/pkg/dlcache/dlcache_prod.go b/pkg/dlcache/dlcache_prod.go new file mode 100644 index 0000000..3040761 --- /dev/null +++ b/pkg/dlcache/dlcache_prod.go @@ -0,0 +1,37 @@ +//go:build !test + +// ALR - Any Linux Repository +// Copyright (C) 2025 The ALR Authors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +package dlcache + +import ( + "os" + "strings" + + "gitea.plemya-x.ru/Plemya-x/ALR/internal/utils" +) + +// createDir создает директорию с правильными правами для production +func createDir(itemPath string, mode os.FileMode) error { + // Используем специальную функцию для создания каталогов с setgid битом только для /tmp/alr + // В остальных случаях используем обычное создание директории + if strings.HasPrefix(itemPath, "/tmp/alr") { + return utils.EnsureTempDirWithRootOwner(itemPath, mode) + } else { + return os.MkdirAll(itemPath, mode) + } +} \ No newline at end of file diff --git a/pkg/dlcache/dlcache_test.go b/pkg/dlcache/dlcache_test.go index b10bbd1..532450e 100644 --- a/pkg/dlcache/dlcache_test.go +++ b/pkg/dlcache/dlcache_test.go @@ -26,7 +26,6 @@ import ( "io" "os" "path/filepath" - "strings" "testing" "gitea.plemya-x.ru/Plemya-x/ALR/internal/config" diff --git a/pkg/dlcache/dlcache_test_impl.go b/pkg/dlcache/dlcache_test_impl.go new file mode 100644 index 0000000..2e8581b --- /dev/null +++ b/pkg/dlcache/dlcache_test_impl.go @@ -0,0 +1,28 @@ +//go:build test + +// ALR - Any Linux Repository +// Copyright (C) 2025 The ALR Authors +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +package dlcache + +import ( + "os" +) + +// createDir создает директорию с обычными правами для тестирования +func createDir(itemPath string, mode os.FileMode) error { + return os.MkdirAll(itemPath, mode) +} \ No newline at end of file