apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: git-clone labels: app.kubernetes.io/version: "0.2" annotations: tekton.dev/pipelines.minVersion: "0.12.1" tekton.dev/categories: Git tekton.dev/tags: git tekton.dev/displayName: "git clone" tekton.dev/platforms: "linux/amd64" spec: description: >- These Tasks are Git tasks to work with repositories used by other tasks in your Pipeline. The git-clone Task will clone a repo from the provided url into the output Workspace. By default the repo will be cloned into the root of your Workspace. You can clone into a subdirectory by setting this Task's subdirectory param. workspaces: - name: output description: The git repo will be cloned onto the volume backing this workspace params: - name: url description: git url to clone type: string - name: revision description: git revision to checkout (branch, tag, sha, ref…) type: string default: "" - name: refspec description: (optional) git refspec to fetch before checking out revision default: "" - name: submodules description: defines if the resource should initialize and fetch the submodules type: string default: "true" - name: depth description: performs a shallow clone where only the most recent commit(s) will be fetched type: string default: "1" - name: sslVerify description: defines if http.sslVerify should be set to true or false in the global git config type: string default: "true" - name: subdirectory description: subdirectory inside the "output" workspace to clone the git repo into type: string default: "" - name: deleteExisting description: clean out the contents of the repo's destination directory (if it already exists) before trying to clone the repo there type: string default: "true" - name: httpProxy description: git HTTP proxy server for non-SSL requests type: string default: "" - name: httpsProxy description: git HTTPS proxy server for SSL requests type: string default: "" - name: noProxy description: git no proxy - opt out of proxying HTTP/HTTPS requests type: string default: "" - name: verbose description: log the commands used during execution type: string default: "true" - name: gitInitImage description: the image used where the git-init binary is type: string default: "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.18.1" results: - name: commit description: The precise commit SHA that was fetched by this Task - name: url description: The precise URL that was fetched by this Task steps: - name: clone image: $(params.gitInitImage) env: - name: PARAM_URL value: $(params.url) - name: PARAM_REVISION value: $(params.revision) - name: PARAM_REFSPEC value: $(params.refspec) - name: PARAM_SUBMODULES value: $(params.submodules) - name: PARAM_DEPTH value: $(params.depth) - name: PARAM_SSL_VERIFY value: $(params.sslVerify) - name: PARAM_SUBDIRECTORY value: $(params.subdirectory) - name: PARAM_DELETE_EXISTING value: $(params.deleteExisting) - name: PARAM_HTTP_PROXY value: $(params.httpProxy) - name: PARAM_HTTPS_PROXY value: $(params.httpsProxy) - name: PARAM_NO_PROXY value: $(params.noProxy) - name: PARAM_VERBOSE value: $(params.verbose) - name: WORKSPACE_OUTPUT_PATH value: $(workspaces.output.path) script: | #!/bin/sh set -eu -o pipefail if [[ "${PARAM_VERBOSE}" == "true" ]] ; then set -x fi CHECKOUT_DIR="${WORKSPACE_OUTPUT_PATH}/${PARAM_SUBDIRECTORY}" cleandir() { # Delete any existing contents of the repo directory if it exists. # # We don't just "rm -rf $CHECKOUT_DIR" because $CHECKOUT_DIR might be "/" # or the root of a mounted volume. if [[ -d "$CHECKOUT_DIR" ]] ; then # Delete non-hidden files and directories rm -rf "$CHECKOUT_DIR"/* # Delete files and directories starting with . but excluding .. rm -rf "$CHECKOUT_DIR"/.[!.]* # Delete files and directories starting with .. plus any other character rm -rf "$CHECKOUT_DIR"/..?* fi } if [[ "${PARAM_DELETE_EXISTING}" == "true" ]] ; then cleandir fi test -z "${PARAM_HTTP_PROXY}" || export HTTP_PROXY="${PARAM_HTTP_PROXY}" test -z "${PARAM_HTTPS_PROXY}" || export HTTPS_PROXY="${PARAM_HTTPS_PROXY}" test -z "${PARAM_NO_PROXY}" || export NO_PROXY="${PARAM_NO_PROXY}" /ko-app/git-init \ -url "${PARAM_URL}" \ -revision "${PARAM_REVISION}" \ -refspec "${PARAM_REFSPEC}" \ -path "$CHECKOUT_DIR" \ -sslVerify="${PARAM_SSL_VERIFY}" \ -submodules="${PARAM_SUBMODULES}" \ -depth "${PARAM_DEPTH}" cd "$CHECKOUT_DIR" RESULT_SHA="$(git rev-parse HEAD)" EXIT_CODE="$?" if [ "$EXIT_CODE" != 0 ] ; then exit $EXIT_CODE fi # ensure we don't add a trailing newline to the result echo -n "$RESULT_SHA" > $(results.commit.path) echo -n "${PARAM_URL}" > $(results.url.path)