charts/pipelines-library/templates/tasks/python.yaml (124 lines of code) (raw):

{{ if .Values.pipelines.deployableResources.tasks }} apiVersion: tekton.dev/v1 kind: Task metadata: name: python labels: app.kubernetes.io/version: "0.1" annotations: tekton.dev/pipelines.minVersion: "0.17.0" tekton.dev/categories: Build Tools tekton.dev/tags: build-tool tekton.dev/platforms: "linux/amd64,linux/s390x,linux/ppc64le" spec: description: >- This task can be used to run python goals on a project. It utilizes default PIP and Twine environment variables. Twine logs in to nexus using environment variables to upload packages. PIP does not support username and password environment variables yet. Thus, we use the ~/.netrc file for PIP to download packages. The ~/.config/pip/pip.conf file can also be used along with ~/.netrc. workspaces: - name: source params: - name: PATH_CONTEXT type: string default: "source" description: The path where package.json of the project is defined. - name: TWINE_REPOSITORY_URL type: string default: "" description: Nexus Repository URL Twine uploads to. - name: TWINE_NON_INTERACTIVE type: string default: "1" description: Do not interactively prompt for credentials if they are missing. - name: EXTRA_COMMANDS type: string - name: BASE_IMAGE type: string default: "{{ include "edp-tekton.registry" . }}/python:3.8-slim" description: The python image you want to use. - name: ci-nexus type: string description: name of the secret for the Nexus integration default: ci-nexus - name: PIP_CACHE_DIR type: string description: Cache directory of the pip default: "$(workspaces.source.path)/cache/.cache/pip" steps: - name: python image: $(params.BASE_IMAGE) workingDir: $(workspaces.source.path)/$(params.PATH_CONTEXT) env: - name: HOME value: $(workspaces.source.path) - name: PIP_CACHE_DIR value: $(params.PIP_CACHE_DIR) - name: TWINE_REPOSITORY_URL value: $(params.TWINE_REPOSITORY_URL) - name: TWINE_NON_INTERACTIVE value: $(params.TWINE_NON_INTERACTIVE) - name: TWINE_USERNAME valueFrom: secretKeyRef: name: $(params.ci-nexus) key: username - name: TWINE_PASSWORD valueFrom: secretKeyRef: name: $(params.ci-nexus) key: password - name: NEXUS_HOST_URL valueFrom: secretKeyRef: name: $(params.ci-nexus) key: url - name: PIP_INDEX_PATH valueFrom: configMapKeyRef: name: custom-python-settings key: PIP_INDEX_PATH optional: true - name: PIP_INDEX_URL_PATH valueFrom: configMapKeyRef: name: custom-python-settings key: PIP_INDEX_URL_PATH - name: REPOSITORY_SNAPSHOTS_PATH valueFrom: configMapKeyRef: name: custom-python-settings key: REPOSITORY_SNAPSHOTS_PATH - name: REPOSITORY_RELEASES_PATH valueFrom: configMapKeyRef: name: custom-python-settings key: REPOSITORY_RELEASES_PATH script: | #!/usr/bin/env sh set -ex export PATH=$PATH:$HOME/.local/bin # Artifact Storage Repository host PIP connects to via HTTP. e.g. 'nexus' export PIP_TRUSTED_HOST=$(echo "${NEXUS_HOST_URL}" | cut -d '/' -f 3 | cut -d ':' -f 1) # Concatenate the base URL with the specific paths from the ConfigMap export PIP_INDEX="${NEXUS_HOST_URL}${PIP_INDEX_PATH}" export PIP_INDEX_URL="${NEXUS_HOST_URL}${PIP_INDEX_URL_PATH}" export REPOSITORY_URL_SNAPSHOTS="${NEXUS_HOST_URL}${REPOSITORY_SNAPSHOTS_PATH}" export REPOSITORY_URL_RELEASES="${NEXUS_HOST_URL}${REPOSITORY_RELEASES_PATH}" echo "[TEKTON][INFO] NEXUS_HOST_URL contains ${NEXUS_HOST_URL}" echo "[TEKTON][INFO] PIP_INDEX contains ${PIP_INDEX}" echo "[TEKTON][INFO] PIP_INDEX_URL contains ${PIP_INDEX_URL}" echo "[TEKTON][INFO] PIP_TRUSTED_HOST contains ${PIP_TRUSTED_HOST}" echo "[TEKTON][INFO] REPOSITORY_URL_SNAPSHOTS contains ${REPOSITORY_URL_SNAPSHOTS}" echo "[TEKTON][INFO] REPOSITORY_URL_RELEASES contains ${REPOSITORY_URL_RELEASES}" netcr_file="$HOME/.netrc" if [ ! -f "${netcr_file}" ]; then cat <<-EOF > "${netcr_file}" machine ${PIP_TRUSTED_HOST} login ${TWINE_USERNAME} password ${TWINE_PASSWORD} EOF chmod 0600 "${netcr_file}" fi $(params.EXTRA_COMMANDS) {{- include "resources" . | nindent 6 }} {{ end }}