func/pipelines/tekton/tasks.go

117 lines
3.4 KiB
Go

package tekton
import (
pplnv1beta1 "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1"
corev1 "k8s.io/api/core/v1"
)
func taskFetchRepository() pplnv1beta1.PipelineTask {
return pplnv1beta1.PipelineTask{
Name: "fetch-repository",
TaskRef: &pplnv1beta1.TaskRef{
Name: "git-clone",
},
Workspaces: []pplnv1beta1.WorkspacePipelineTaskBinding{{
Name: "output",
Workspace: "source-workspace",
}},
Params: []pplnv1beta1.Param{
{Name: "url", Value: *pplnv1beta1.NewArrayOrString("$(params.gitRepository)")},
{Name: "revision", Value: *pplnv1beta1.NewArrayOrString("$(params.gitRevision)")},
},
}
}
func taskBuild(runAfter string) pplnv1beta1.PipelineTask {
return pplnv1beta1.PipelineTask{
Name: "build",
TaskRef: &pplnv1beta1.TaskRef{
Name: "buildpacks",
},
RunAfter: []string{runAfter},
Workspaces: []pplnv1beta1.WorkspacePipelineTaskBinding{
{
Name: "source",
Workspace: "source-workspace",
},
{
Name: "cache",
Workspace: "cache-workspace",
}},
Params: []pplnv1beta1.Param{
{Name: "APP_IMAGE", Value: *pplnv1beta1.NewArrayOrString("$(params.imageName)")},
{Name: "SOURCE_SUBPATH", Value: *pplnv1beta1.NewArrayOrString("$(params.contextDir)")},
{Name: "BUILDER_IMAGE", Value: *pplnv1beta1.NewArrayOrString("$(params.builderImage)")},
},
}
}
// TODO this should be part of the future func-build Tekton Task as a post-build step
func taskImageDigest(runAfter string) pplnv1beta1.PipelineTask {
script := `#!/usr/bin/env bash
set -e
func_file="/workspace/source/func.yaml"
if [ "$(params.contextDir)" != "" ]; then
func_file="/workspace/source/$(params.contextDir)/func.yaml"
fi
sed -i "s|^image:.*$|image: $(params.image)|" "$func_file"
echo "Function image name: $(params.image)"
sed -i "s/^imageDigest:.*$/imageDigest: $(params.digest)/" "$func_file"
echo "Function image digest: $(params.digest)"
`
return pplnv1beta1.PipelineTask{
Name: "image-digest",
TaskSpec: &pplnv1beta1.EmbeddedTask{
TaskSpec: pplnv1beta1.TaskSpec{
Workspaces: []pplnv1beta1.WorkspaceDeclaration{
{Name: "source"},
},
Steps: []pplnv1beta1.Step{
{
Container: corev1.Container{
Image: "docker.io/library/bash:5.1.4@sha256:b208215a4655538be652b2769d82e576bc4d0a2bb132144c060efc5be8c3f5d6",
},
Script: script,
},
},
Params: []pplnv1beta1.ParamSpec{
{Name: "image"},
{Name: "digest"},
{Name: "contextDir"},
},
},
},
RunAfter: []string{runAfter},
Workspaces: []pplnv1beta1.WorkspacePipelineTaskBinding{{
Name: "source",
Workspace: "source-workspace",
}},
Params: []pplnv1beta1.Param{
{Name: "image", Value: *pplnv1beta1.NewArrayOrString("$(params.imageName)")},
{Name: "digest", Value: *pplnv1beta1.NewArrayOrString("$(tasks.build.results.APP_IMAGE_DIGEST)")},
{Name: "contextDir", Value: *pplnv1beta1.NewArrayOrString("$(params.contextDir)")},
},
}
}
func taskFuncDeploy(runAfter string) pplnv1beta1.PipelineTask {
return pplnv1beta1.PipelineTask{
Name: "deploy",
TaskRef: &pplnv1beta1.TaskRef{
Name: "func-deploy",
},
RunAfter: []string{runAfter},
Workspaces: []pplnv1beta1.WorkspacePipelineTaskBinding{{
Name: "source",
Workspace: "source-workspace",
}},
Params: []pplnv1beta1.Param{
{Name: "path", Value: *pplnv1beta1.NewArrayOrString("$(workspaces.source.path)/$(params.contextDir)")},
},
}
}