mirror of https://github.com/harness/drone.git
121 lines
4.8 KiB
Go
121 lines
4.8 KiB
Go
// Copyright 2023 Harness, Inc.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package docker
|
|
|
|
import (
|
|
"github.com/harness/gitness/app/auth/authz"
|
|
gitnessstore "github.com/harness/gitness/app/store"
|
|
storagedriver "github.com/harness/gitness/registry/app/driver"
|
|
"github.com/harness/gitness/registry/app/event"
|
|
"github.com/harness/gitness/registry/app/manifest/manifestlist"
|
|
"github.com/harness/gitness/registry/app/manifest/schema2"
|
|
"github.com/harness/gitness/registry/app/pkg"
|
|
proxy2 "github.com/harness/gitness/registry/app/remote/controller/proxy"
|
|
"github.com/harness/gitness/registry/app/storage"
|
|
"github.com/harness/gitness/registry/app/store"
|
|
"github.com/harness/gitness/registry/gc"
|
|
"github.com/harness/gitness/secret"
|
|
"github.com/harness/gitness/store/database/dbtx"
|
|
"github.com/harness/gitness/types"
|
|
|
|
"github.com/google/wire"
|
|
v1 "github.com/opencontainers/image-spec/specs-go/v1"
|
|
)
|
|
|
|
func LocalRegistryProvider(
|
|
app *App, ms ManifestService, blobRepo store.BlobRepository,
|
|
registryDao store.RegistryRepository, manifestDao store.ManifestRepository,
|
|
registryBlobDao store.RegistryBlobRepository,
|
|
mtRepository store.MediaTypesRepository,
|
|
tagDao store.TagRepository, imageDao store.ImageRepository, artifactDao store.ArtifactRepository,
|
|
bandwidthStatDao store.BandwidthStatRepository, downloadStatDao store.DownloadStatRepository,
|
|
gcService gc.Service, tx dbtx.Transactor,
|
|
) *LocalRegistry {
|
|
return NewLocalRegistry(
|
|
app, ms, manifestDao, registryDao, registryBlobDao, blobRepo,
|
|
mtRepository, tagDao, imageDao, artifactDao, bandwidthStatDao, downloadStatDao, gcService, tx,
|
|
).(*LocalRegistry)
|
|
}
|
|
|
|
func ManifestServiceProvider(
|
|
registryDao store.RegistryRepository,
|
|
manifestDao store.ManifestRepository, blobRepo store.BlobRepository, mtRepository store.MediaTypesRepository,
|
|
manifestRefDao store.ManifestReferenceRepository, tagDao store.TagRepository, imageDao store.ImageRepository,
|
|
artifactDao store.ArtifactRepository, layerDao store.LayerRepository,
|
|
gcService gc.Service, tx dbtx.Transactor, reporter event.Reporter, spacePathStore gitnessstore.SpacePathStore,
|
|
ociImageIndexMappingDao store.OCIImageIndexMappingRepository,
|
|
) ManifestService {
|
|
return NewManifestService(
|
|
registryDao, manifestDao, blobRepo, mtRepository, tagDao, imageDao,
|
|
artifactDao, layerDao, manifestRefDao, tx, gcService, reporter, spacePathStore,
|
|
ociImageIndexMappingDao,
|
|
)
|
|
}
|
|
|
|
func RemoteRegistryProvider(
|
|
local *LocalRegistry, app *App, upstreamProxyConfigRepo store.UpstreamProxyConfigRepository,
|
|
spacePathStore gitnessstore.SpacePathStore, secretService secret.Service, proxyCtrl proxy2.Controller,
|
|
) *RemoteRegistry {
|
|
return NewRemoteRegistry(local, app, upstreamProxyConfigRepo, spacePathStore, secretService,
|
|
proxyCtrl).(*RemoteRegistry)
|
|
}
|
|
|
|
func ControllerProvider(
|
|
local *LocalRegistry,
|
|
remote *RemoteRegistry,
|
|
controller *pkg.CoreController,
|
|
spaceStore gitnessstore.SpaceStore,
|
|
authorizer authz.Authorizer,
|
|
) *Controller {
|
|
return NewController(local, remote, controller, spaceStore, authorizer)
|
|
}
|
|
|
|
func StorageServiceProvider(cfg *types.Config, driver storagedriver.StorageDriver) *storage.Service {
|
|
return GetStorageService(cfg, driver)
|
|
}
|
|
|
|
func ProvideReporter() event.Reporter {
|
|
return &event.Noop{}
|
|
}
|
|
|
|
func ProvideProxyController(
|
|
registry *LocalRegistry, ms ManifestService, secretService secret.Service,
|
|
spacePathStore gitnessstore.SpacePathStore,
|
|
) proxy2.Controller {
|
|
manifestCacheHandler := getManifestCacheHandler(registry, ms)
|
|
return proxy2.NewProxyController(registry, ms, secretService, spacePathStore, manifestCacheHandler)
|
|
}
|
|
|
|
func getManifestCacheHandler(
|
|
registry *LocalRegistry, ms ManifestService,
|
|
) map[string]proxy2.ManifestCacheHandler {
|
|
cache := proxy2.GetManifestCache(registry, ms)
|
|
listCache := proxy2.GetManifestListCache(registry)
|
|
|
|
return map[string]proxy2.ManifestCacheHandler{
|
|
manifestlist.MediaTypeManifestList: listCache,
|
|
v1.MediaTypeImageIndex: listCache,
|
|
schema2.MediaTypeManifest: cache,
|
|
proxy2.DefaultHandler: cache,
|
|
}
|
|
}
|
|
|
|
var ControllerSet = wire.NewSet(ControllerProvider)
|
|
var RegistrySet = wire.NewSet(LocalRegistryProvider, ManifestServiceProvider, RemoteRegistryProvider)
|
|
var ProxySet = wire.NewSet(ProvideProxyController)
|
|
var StorageServiceSet = wire.NewSet(StorageServiceProvider)
|
|
var AppSet = wire.NewSet(NewApp)
|
|
var WireSet = wire.NewSet(ControllerSet, RegistrySet, StorageServiceSet, AppSet, ProxySet)
|