tekton-hub/tasks/git/task.yaml
2025-04-08 14:56:51 +00:00

126 lines
4.1 KiB
YAML

---
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: git
labels:
app.kubernetes.io/version: "0.4"
annotations:
tekton.dev/pipelines.minVersion: "0.21.0"
tekton.dev/categories: Git
tekton.dev/tags: git
tekton.dev/displayName: "git"
tekton.dev/platforms: "linux/amd64,linux/s390x,linux/ppc64le"
spec:
description: >-
This task can be used to perform git operations.
Git command that needs to be run can be passed as a script to
the task. This task needs authentication to git in order to push
after the git operation.
workspaces:
- name: source
description: A workspace that contains the fetched git repository.
- name: input
optional: true
description: |
An optional workspace that contains the files that need to be added to git. You can
access the workspace from your script using `$(workspaces.input.path)`, for instance:
cp $(workspaces.input.path)/file_that_i_want .
git add file_that_i_want
# etc
- name: ssh-directory
optional: true
description: |
A .ssh directory with private key, known_hosts, config, etc. Copied to
the user's home before git commands are executed. Used to authenticate
with the git remote when performing the clone. Binding a Secret to this
Workspace is strongly recommended over other volume types.
- name: basic-auth
optional: true
description: |
A Workspace containing a .gitconfig and .git-credentials file. These
will be copied to the user's home before any git commands are run. Any
other files in this Workspace are ignored. It is strongly recommended
to use ssh-directory over basic-auth whenever possible and to bind a
Secret to this Workspace over other volume types.
params:
- name: BASE_IMAGE
description: |
The base image for the task.
type: string
default: alpine/git:2.47.2
- name: GIT_USER_NAME
type: string
description: |
Git user name for performing git operation.
default: ""
- name: GIT_USER_EMAIL
type: string
description: |
Git user email for performing git operation.
default: ""
- name: GIT_SCRIPT
description: The git script to run.
type: string
default: |
git help
- name: USER_HOME
description: |
Absolute path to the user's home directory. Set this explicitly if you are running the image as a non-root user or have overridden
the gitInitImage param with an image containing custom user configuration.
type: string
default: "/root"
- name: VERBOSE
description: Log the commands that are executed during `git-clone`'s operation.
type: string
default: "true"
results:
- name: commit
description: The precise commit SHA after the git operation.
steps:
- name: git
image: $(params.BASE_IMAGE)
workingDir: $(workspaces.source.path)
script: |
#!/usr/bin/env sh
set -eu
if [ "$(params.VERBOSE)" = "true" ]; then
set -x
fi
if [ -f "$(workspaces.basic-auth.path)/.git-credentials" ]; then
cp "$(workspaces.basic-auth.path)/.git-credentials" "$(params.USER_HOME)/.git-credentials"
cp "$(workspaces.basic-auth.path)/.gitconfig" "$(params.USER_HOME)/.gitconfig"
chmod 400 "$(params.USER_HOME)/.git-credentials"
chmod 400 "$(params.USER_HOME)/.gitconfig"
fi
if [ -d "$(workspaces.ssh-directory.path)" ]; then
cp -R "$(workspaces.ssh-directory.path)" "$(params.USER_HOME)/.ssh"
chmod 700 "$(params.USER_HOME)/.ssh"
chmod -R 400 "$(params.USER_HOME)/.ssh/*"
fi
if [ -n "$(params.GIT_USER_NAME)" ] && [ -n "$(params.GIT_USER_EMAIL)" ]; then
git config --global user.name "$(params.GIT_USER_NAME)"
git config --global user.email "$(params.GIT_USER_EMAIL)"
fi
eval '$(params.GIT_SCRIPT)'
RESULT_SHA="$(git rev-parse HEAD | tr -d '\n')"
printf "%s" "$RESULT_SHA" > "$(results.commit.path)"