drone/app/pipeline/runner/runner.go
Patrick Wolf d789e5775e feat: [CODE-2402] : Update all occurences of 'gitness' to 'harness' within comments and markdown. Updated the logo reference (did not delete the Gitness logo directory yet). No active code changes except display strings. (#2684)
* Apply suggestion from code review
* updating images for signin and register page.
* fix: lint
* fix: logo update
* revert golangci
* Adding more strings and updated the logo. Still need to update the signin page images
* Apply suggestion from code review

Updating harness logo to use Open Source logo
* Update all occurences of 'gitness' to 'harness' within comments and markdown. Updated the logo reference (did not delete the Gitness logo directory yet).  No active code changes except display strings.
2024-09-25 00:13:28 +00:00

137 lines
4.3 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 runner
import (
goruntime "runtime"
"github.com/harness/gitness/app/pipeline/resolver"
"github.com/harness/gitness/types"
dockerclient "github.com/docker/docker/client"
"github.com/drone-runners/drone-runner-docker/engine"
"github.com/drone-runners/drone-runner-docker/engine/compiler"
"github.com/drone-runners/drone-runner-docker/engine/linter"
"github.com/drone-runners/drone-runner-docker/engine/resource"
compiler2 "github.com/drone-runners/drone-runner-docker/engine2/compiler"
engine2 "github.com/drone-runners/drone-runner-docker/engine2/engine"
runtime2 "github.com/drone-runners/drone-runner-docker/engine2/runtime"
"github.com/drone/drone-go/drone"
runnerclient "github.com/drone/runner-go/client"
"github.com/drone/runner-go/environ/provider"
"github.com/drone/runner-go/pipeline/reporter/history"
"github.com/drone/runner-go/pipeline/reporter/remote"
"github.com/drone/runner-go/pipeline/runtime"
"github.com/drone/runner-go/pipeline/uploader"
"github.com/drone/runner-go/registry"
"github.com/drone/runner-go/secret"
)
// Privileged provides a list of plugins that execute
// with privileged capabilities in order to run Docker
// in Docker.
var Privileged = []string{
"plugins/docker",
"plugins/acr",
"plugins/ecr",
"plugins/gcr",
"plugins/heroku",
}
// dockerOpts returns back the options to be overridden from docker options set
// in the environment. If values are specified in Harness, they get preference.
func dockerOpts(config *types.Config) []dockerclient.Opt {
var overrides []dockerclient.Opt
if config.Docker.Host != "" {
overrides = append(overrides, dockerclient.WithHost(config.Docker.Host))
}
if config.Docker.APIVersion != "" {
overrides = append(overrides, dockerclient.WithVersion(config.Docker.APIVersion))
}
return overrides
}
func NewExecutionRunner(
config *types.Config,
client runnerclient.Client,
resolver *resolver.Manager,
) (*runtime2.Runner, error) {
// For linux/windows, containers need to have extra hosts set in order to interact with
// Harness. For docker desktop for mac, this is built in and not needed.
extraHosts := []string{}
if goruntime.GOOS != "darwin" {
extraHosts = []string{"host.docker.internal:host-gateway"}
}
compiler := &compiler.Compiler{
Environ: provider.Static(map[string]string{}),
Registry: registry.Static([]*drone.Registry{}),
Secret: secret.Encrypted(),
ExtraHosts: extraHosts,
Privileged: Privileged,
Networks: config.CI.ContainerNetworks,
}
remote := remote.New(client)
upload := uploader.New(client)
tracer := history.New(remote)
engine, err := engine.NewEnv(engine.Opts{}, dockerOpts(config)...)
if err != nil {
return nil, err
}
exec := runtime.NewExecer(tracer, remote, upload,
engine, int64(config.CI.ParallelWorkers))
legacyRunner := &runtime.Runner{
Machine: config.InstanceID,
Client: client,
Reporter: tracer,
Lookup: resource.Lookup,
Lint: linter.New().Lint,
Compiler: compiler,
Exec: exec.Exec,
}
engine2, err := engine2.NewEnv(engine2.Opts{}, dockerOpts(config)...)
if err != nil {
return nil, err
}
exec2 := runtime2.NewExecer(tracer, remote, upload, engine2, int64(config.CI.ParallelWorkers))
compiler2 := &compiler2.CompilerImpl{
Environ: provider.Static(map[string]string{}),
Registry: registry.Static([]*drone.Registry{}),
Secret: secret.Encrypted(),
ExtraHosts: extraHosts,
Privileged: Privileged,
Networks: config.CI.ContainerNetworks,
}
runner := &runtime2.Runner{
Machine: config.InstanceID,
Client: client,
Resolver: resolver.GetLookupFn(),
Reporter: tracer,
Compiler: compiler2,
Exec: exec2.Exec,
LegacyRunner: legacyRunner,
}
return runner, nil
}