mirror of https://github.com/harness/drone.git
96 lines
2.3 KiB
Go
96 lines
2.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 converter
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
|
|
"github.com/harness/gitness/app/pipeline/converter/jsonnet"
|
|
"github.com/harness/gitness/app/pipeline/converter/starlark"
|
|
"github.com/harness/gitness/app/pipeline/file"
|
|
"github.com/harness/gitness/app/services/publicaccess"
|
|
"github.com/harness/gitness/types/enum"
|
|
)
|
|
|
|
const (
|
|
jsonnetImportLimit = 1000
|
|
starlarkStepLimit = 50000
|
|
starlarkSizeLimit = 1000000
|
|
)
|
|
|
|
type converter struct {
|
|
fileService file.Service
|
|
publicAccess publicaccess.Service
|
|
}
|
|
|
|
func newConverter(fileService file.Service, publicAccess publicaccess.Service) Service {
|
|
return &converter{
|
|
fileService: fileService,
|
|
publicAccess: publicAccess,
|
|
}
|
|
}
|
|
|
|
func (c *converter) Convert(ctx context.Context, args *ConvertArgs) (*file.File, error) {
|
|
path := args.Pipeline.ConfigPath
|
|
|
|
// get public access visibility of the repo
|
|
repoIsPublic, err := c.publicAccess.Get(ctx, enum.PublicResourceTypeRepo, args.Repo.Path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if isJSONNet(path) {
|
|
str, err := jsonnet.Parse(
|
|
args.Repo,
|
|
repoIsPublic,
|
|
args.Pipeline,
|
|
args.Execution,
|
|
args.File,
|
|
c.fileService,
|
|
jsonnetImportLimit,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &file.File{Data: []byte(str)}, nil
|
|
} else if isStarlark(path) {
|
|
str, err := starlark.Parse(
|
|
args.Repo,
|
|
repoIsPublic,
|
|
args.Pipeline,
|
|
args.Execution,
|
|
args.File,
|
|
starlarkStepLimit,
|
|
starlarkSizeLimit,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &file.File{Data: []byte(str)}, nil
|
|
}
|
|
return args.File, nil
|
|
}
|
|
|
|
func isJSONNet(path string) bool {
|
|
return strings.HasSuffix(path, ".drone.jsonnet")
|
|
}
|
|
|
|
func isStarlark(path string) bool {
|
|
return strings.HasSuffix(path, ".drone.script") ||
|
|
strings.HasSuffix(path, ".drone.star") ||
|
|
strings.HasSuffix(path, ".drone.starlark")
|
|
}
|