// Copyright 2023 Woodpecker Authors // // 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 runtime import ( "context" "github.com/oklog/ulid/v2" "github.com/rs/zerolog" "github.com/rs/zerolog/log" backend "go.woodpecker-ci.org/woodpecker/v3/pipeline/backend/types" "go.woodpecker-ci.org/woodpecker/v3/pipeline/logging" "go.woodpecker-ci.org/woodpecker/v3/pipeline/tracing" ) // Runtime represents a workflow state executed by a specific backend. // Each workflow gets its own state configuration at runtime. type Runtime struct { err error spec *backend.Config engine backend.Backend started int64 // The context a workflow is being executed with. // All normal (non cleanup) operations must use this. // Cleanup operations should use the runnerCtx passed to Run() ctx context.Context tracer tracing.Tracer logger logging.Logger taskUUID string Description map[string]string // The runtime descriptors. } // New returns a new runtime using the specified runtime // configuration and runtime engine. func New(spec *backend.Config, opts ...Option) *Runtime { r := new(Runtime) r.Description = map[string]string{} r.spec = spec r.ctx = context.Background() r.taskUUID = ulid.Make().String() for _, opts := range opts { opts(r) } return r } func (r *Runtime) MakeLogger() zerolog.Logger { logCtx := log.With() for key, val := range r.Description { logCtx = logCtx.Str(key, val) } return logCtx.Logger() }