tkn-autogenerate

command module
v0.0.0-...-3230365 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 1, 2023 License: Apache-2.0 Imports: 5 Imported by: 0

README

tkn autogenerate - Generate PipelineRun for Pipelines-as-Code automagically 🪄

Description

tkn-autogenerate will inspect a repository and try to guess which tasks to add and generate a pipelinerun suitable for Pipelines-as-Code.

It uses GitHub API to get the languages associated to a repository and some files heuristics pattern for other rules detections.

This tools should be suitable to an automated system or to be plugged with soon to be released Pipelines-as-Code pluggable tekton directory resolver to get a fully automated system.

Installation

go install github.com/chmouel/tkn-autogenerate@latest

Usage

tkn-autogenerate org/repositoryname

This will query GitHub for the programming language on the REPOSITORY belong to ORG and automatically generate aPipelineRun with the tasks added according to the detected programming language.

You can specify a GitHub token with the flag --token (or GITHUB_TOKEN environment variable) for private repos or don't get rate limited.

Customization

Detect Language to Tekton hub mapping

The file tknautogenerate.yaml specify the mapping between the detected programming language and the task we want to apply into it.

For example:

python:
  tasks:
    - name: pylint

Will add the task pylint to the PipelineRun if one of the detected programming language is python. It will add the Pipelines as Code remote task annotation to have the Pipeline as Code added to the PipelineRun.

You can add a name parameter to the task to customize the name of the task instead of using the detected language.

python:
  name: cobra
  tasks:
    - name: pylint
Passing Parameters

You can add params to the task to add parameters to be passed to the task

python:
  tasks:
    - name: pylint
      params:
        - name: path
          value: ./package
Passing Workspace

A workspace is automatically to the task unless you don't want it added and then you can add the workspace.disabled = true to the task

python:
  tasks:
    - name: pylint
      params:
        - name: path
          value: ./package
          workspace:
            disabled: true

If the task is expecting another name than source (the default name we use) you can specify a name for this:

python:
  tasks:
    - name: pylint
      params:
        - name: path
          value: ./package
          workspace:
            name: repo
Task dependencies

You can add a optional runAfter parameter to the task to chain dependencies between tasks which will be passed to the generated PipelineRun.

python:
  tasks:
    - name: pylint
      runAfter: [fetch-repository]
Add task matching using patterns to match file repositories

You can also add tasks according to file patterns, for example:

containerbuild:
  pattern: "(Docker|Container)file$"
  tasks:
    - name: buildah
      workspace: true
      params:
        - name: IMAGE
          value: "image-registry.openshift-image-registry.svc:5000/$(context.pipelineRun.namespace)/$(context.pipelineRun.name)"

If you have a configuration containing the pattern keyword it will try to match it against all the files in the repository, it will be queried using the API on the default_branch of the repository unless you pass the flag --target-ref to another reference or SHA.

PipelineRun default template

The file pipelinerun.yaml.go.tmpl is the actual PipelineRun which can be customized according to the go templating system.

Using a specific PipelineRun for a detected language or file pattern

You can specify a specific PipelineRun for a detected language or file pattern, for example:

java:
    pipelinerun: "java"

will use the file in ./pkg/tknautogenerate/templates/languages/java.yaml.go.tmpl to generate the pipelinerun unless you define the flag on the CLI argument --templates-language-dir=mytemplates/ and then it will be expanded to ./mytemplates/$LANGUAGE.yaml.go.tmpl (where language is the detected language).

You can combine this with file pattern too:

java:
    pattern: "^pom.xml$"
    pipelinerun: "java"

and you can add extra tasks to add if you want to (altho it probably better to have this in your specific template) directly:

java:
    pattern: "^pom.xml$"
    pipelinerun: "java"
    tasks:
    - name: sbom

If multiple language have multiple pipelinerun then the first one will win.

no other language detection will be passed to the templates, it's really a static pipelinerun generated out of file pattern or programming language detection.

(TODO: make the language that has most amount of percentage in a repo wins)

Apache-2.0

Authors

Chmouel Boudjnah

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL