mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-12-29 11:50:37 +00:00
fdfabe6368
Co-authored-by: Patrick Schratz <patrick.schratz@gmail.com>
141 lines
3.7 KiB
Go
141 lines
3.7 KiB
Go
// 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 stepbuilder
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
"strings"
|
|
|
|
"go.woodpecker-ci.org/woodpecker/v3/pipeline/frontend/metadata"
|
|
"go.woodpecker-ci.org/woodpecker/v3/server/model"
|
|
"go.woodpecker-ci.org/woodpecker/v3/version"
|
|
)
|
|
|
|
// MetadataFromStruct return the metadata from a pipeline will run with.
|
|
func MetadataFromStruct(forge metadata.ServerForge, repo *model.Repo, pipeline, prev *model.Pipeline, workflow *model.Workflow, sysURL string) metadata.Metadata {
|
|
host := sysURL
|
|
uri, err := url.Parse(sysURL)
|
|
if err == nil {
|
|
host = uri.Host
|
|
}
|
|
|
|
fForge := metadata.Forge{}
|
|
if forge != nil {
|
|
fForge = metadata.Forge{
|
|
Type: forge.Name(),
|
|
URL: forge.URL(),
|
|
}
|
|
}
|
|
|
|
fRepo := metadata.Repo{}
|
|
if repo != nil {
|
|
fRepo = metadata.Repo{
|
|
ID: repo.ID,
|
|
Name: repo.Name,
|
|
Owner: repo.Owner,
|
|
RemoteID: fmt.Sprint(repo.ForgeRemoteID),
|
|
ForgeURL: repo.ForgeURL,
|
|
CloneURL: repo.Clone,
|
|
CloneSSHURL: repo.CloneSSH,
|
|
Private: repo.IsSCMPrivate,
|
|
Branch: repo.Branch,
|
|
Trusted: metadata.TrustedConfiguration{
|
|
Network: repo.Trusted.Network,
|
|
Volumes: repo.Trusted.Volumes,
|
|
Security: repo.Trusted.Security,
|
|
},
|
|
}
|
|
|
|
if idx := strings.LastIndex(repo.FullName, "/"); idx != -1 {
|
|
if fRepo.Name == "" && repo.FullName != "" {
|
|
fRepo.Name = repo.FullName[idx+1:]
|
|
}
|
|
if fRepo.Owner == "" && repo.FullName != "" {
|
|
fRepo.Owner = repo.FullName[:idx]
|
|
}
|
|
}
|
|
}
|
|
|
|
fWorkflow := metadata.Workflow{}
|
|
if workflow != nil {
|
|
fWorkflow = metadata.Workflow{
|
|
Name: workflow.Name,
|
|
Number: workflow.PID,
|
|
Matrix: workflow.Environ,
|
|
}
|
|
}
|
|
|
|
return metadata.Metadata{
|
|
Repo: fRepo,
|
|
Curr: metadataPipelineFromModelPipeline(pipeline, true),
|
|
Prev: metadataPipelineFromModelPipeline(prev, false),
|
|
Workflow: fWorkflow,
|
|
Step: metadata.Step{},
|
|
Sys: metadata.System{
|
|
Name: "woodpecker",
|
|
URL: sysURL,
|
|
Host: host,
|
|
Platform: "", // will be set by pipeline platform option or by agent
|
|
Version: version.Version,
|
|
},
|
|
Forge: fForge,
|
|
}
|
|
}
|
|
|
|
func metadataPipelineFromModelPipeline(pipeline *model.Pipeline, includeParent bool) metadata.Pipeline {
|
|
if pipeline == nil {
|
|
return metadata.Pipeline{}
|
|
}
|
|
|
|
cron := ""
|
|
if pipeline.Event == model.EventCron {
|
|
cron = pipeline.Sender
|
|
}
|
|
|
|
parent := int64(0)
|
|
if includeParent {
|
|
parent = pipeline.Parent
|
|
}
|
|
|
|
return metadata.Pipeline{
|
|
Number: pipeline.Number,
|
|
Parent: parent,
|
|
Created: pipeline.Created,
|
|
Started: pipeline.Started,
|
|
Finished: pipeline.Finished,
|
|
Status: string(pipeline.Status),
|
|
Event: string(pipeline.Event),
|
|
ForgeURL: pipeline.ForgeURL,
|
|
DeployTo: pipeline.DeployTo,
|
|
DeployTask: pipeline.DeployTask,
|
|
Commit: metadata.Commit{
|
|
Sha: pipeline.Commit,
|
|
Ref: pipeline.Ref,
|
|
Refspec: pipeline.Refspec,
|
|
Branch: pipeline.Branch,
|
|
Message: pipeline.Message,
|
|
Author: metadata.Author{
|
|
Name: pipeline.Author,
|
|
Email: pipeline.Email,
|
|
Avatar: pipeline.Avatar,
|
|
},
|
|
ChangedFiles: pipeline.ChangedFiles,
|
|
PullRequestLabels: pipeline.PullRequestLabels,
|
|
IsPrerelease: pipeline.IsPrerelease,
|
|
},
|
|
Cron: cron,
|
|
}
|
|
}
|