diff --git a/tasks/task-buildah/0.2.0/README.md b/tasks/task-buildah/0.2.0/README.md new file mode 100644 index 00000000..8c0a41f0 --- /dev/null +++ b/tasks/task-buildah/0.2.0/README.md @@ -0,0 +1,76 @@ +`Buildah` Tekton Task +----------------------- + +# Abstract + +The `buildah` Task is meant to build [OCI][OCI] container images without the requirement of container runtime daemon like Docker daemon using [Buildah][Buildah], the Task results contain the image name and the SHA256 image digest. + +# Usage + +Please, consider the usage example below: + +```yaml +--- +apiVersion: tekton.dev/v1beta1 +kind: PipelineRun +metadata: {} +spec: + pipelineRef: + name: task-buildah + params: + - name: IMAGE + value: your-image-name + - name: TLS_VERIFY + value: true + - name: VERBOSE + value: false + workspaces: + - name: source + persistentVolumeClaim: + claimName: your-pvc-name +``` +You'll need to replace `your-image-name` with the actual name of the image you want to build, and `your-pvc-name` with the name of the PersistentVolumeClaim where your source code is stored. +In case the Container Registry requires authentication, please consider the [Tekton Pipelines documentation][tektonPipelineAuth]. In a nutshell, you need to create a Kubernetes Secret describing the following attributes: + +```bash +kubectl create secret docker-registry imagestreams \ + --docker-server="image-registry.openshift-image-registry.svc:5000" \ + --docker-username="${REGISTRY_USERNAME}" \ + --docker-password="${REGISTRY_TOKEN}" +``` + +Then make sure the Secret is linked with the Service-Account running the `TaskRun`/`PipelineRun`. + +## Workspace + +| Name | Optional | Description | +| :------------ | :------------------------: | :--------------------------- | +| `source` | `false` | Container build context, like for instnace a application source code followed by a `Containerfile`. | + + +## Params + +| Param | Type | Default | Description | +| :------------ | :------------------------: | :--------------------------- | :------------------------- | +| `IMAGE` | `string` | (required) | Fully qualified source container image name, including tag, to be built by buildah. | +| `CONTAINERFILE_PATH` | `string` | `Containerfile` | Path to the `Containerfile` (or `Dockerfile`) relative to the `source` workspace. | +| `TLS_VERIFY` | `string` | `true` | Sets the TLS verification flags, `true` is recommended. | +| `VERBOSE` | `string` | `false` | Shows a more verbose (debug) output. | +| `SUBDIRECTORY` | `string` | `.` | Relative subdirectory to the `source` Workspace for the build-context. | +| `STORAGE_DRIVER` | `string` | `overlay` | Set buildah storage driver to reflect the currrent cluster node's settings. | +| `BUILD_EXTRA_ARGS` | `string` | `` | Extra parameters passed for the build command when building images. | +| `PUSH_EXTRA_ARGS` | `string` | `` | Extra parameters passed for the push command when pushing images. | +| `SKIP_PUSH` | `string` | `false` | Skip pushing the image to the container registry. | + + +## Results + +| Result | Description | +| :------------ | :------------------------- | +| `IMAGE_URL` | Fully qualified image name. | +| `IMAGE_DIGEST` | SHA256 digest of the image just built. | + +[tektonPipelineAuth]: https://tekton.dev/docs/pipelines/auth/#configuring-docker-authentication-for-docker +[Buildah]: https://github.com/containers/buildah +[OCI]: https://opencontainers.org/ + diff --git a/tasks/task-buildah/0.2.0/task-buildah.yaml b/tasks/task-buildah/0.2.0/task-buildah.yaml new file mode 100644 index 00000000..1fe81947 --- /dev/null +++ b/tasks/task-buildah/0.2.0/task-buildah.yaml @@ -0,0 +1,152 @@ +--- +# Source: task-containers/templates/task-buildah.yaml +apiVersion: tekton.dev/v1beta1 +kind: Task +metadata: + name: buildah + labels: + app.kubernetes.io/version: 0.2.0 + annotations: + tekton.dev/categories: containers + tekton.dev/pipelines.minVersion: 0.41.0 + tekton.dev/tags: containers +spec: + description: | + Buildah task builds source into a container image and + then pushes it to a container registry. + + workspaces: + - name: source + optional: false + description: | + Container build context, like for instnace a application source code + followed by a `Dockerfile`. + - name: dockerconfig + description: >- + An optional workspace that allows providing a .docker/config.json file + for Buildah to access the container registry. + The file should be placed at the root of the Workspace with name config.json + or .dockerconfigjson. + optional: true + params: + - name: IMAGE + type: string + description: | + Fully qualified container image name to be built by buildah. + - name: DOCKERFILE + type: string + default: ./Dockerfile + description: | + Path to the `Dockerfile` (or `Containerfile`) relative to the `source` workspace. + - name: CONTEXT + type: string + default: "." + description: | + Path to the directory to use as context. + - name: STORAGE_DRIVER + type: string + default: vfs + description: | + Set buildah storage driver to reflect the currrent cluster node's + settings. + - name: FORMAT + description: The format of the built container, oci or docker + default: "oci" + - name: BUILD_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the build command when building images. + - name: PUSH_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the push command when pushing images. + - name: SKIP_PUSH + default: "false" + description: | + Skip pushing the image to the container registry. + - name: TLS_VERIFY + type: string + default: "true" + description: | + Sets the TLS verification flag, `true` is recommended. + - name: VERBOSE + type: string + default: "false" + description: | + Turns on verbose logging, all commands executed will be printed out. + + results: + - name: IMAGE_URL + description: | + Fully qualified image name. + - name: IMAGE_DIGEST + description: | + Digest of the image just built. + + stepTemplate: + env: + + - name: PARAMS_IMAGE + value: "$(params.IMAGE)" + - name: PARAMS_CONTEXT + value: "$(params.CONTEXT)" + - name: PARAMS_DOCKERFILE + value: "$(params.DOCKERFILE)" + - name: PARAMS_FORMAT + value: "$(params.FORMAT)" + - name: PARAMS_STORAGE_DRIVER + value: "$(params.STORAGE_DRIVER)" + - name: PARAMS_BUILD_EXTRA_ARGS + value: "$(params.BUILD_EXTRA_ARGS)" + - name: PARAMS_PUSH_EXTRA_ARGS + value: "$(params.PUSH_EXTRA_ARGS)" + - name: PARAMS_SKIP_PUSH + value: "$(params.SKIP_PUSH)" + - name: PARAMS_TLS_VERIFY + value: "$(params.TLS_VERIFY)" + - name: PARAMS_VERBOSE + value: "$(params.VERBOSE)" + - name: WORKSPACES_SOURCE_BOUND + value: "$(workspaces.source.bound)" + - name: WORKSPACES_SOURCE_PATH + value: "$(workspaces.source.path)" + - name: WORKSPACES_DOCKERCONFIG_BOUND + value: "$(workspaces.dockerconfig.bound)" + - name: WORKSPACES_DOCKERCONFIG_PATH + value: "$(workspaces.dockerconfig.path)" + - name: RESULTS_IMAGE_URL_PATH + value: "$(results.IMAGE_URL.path)" + - name: RESULTS_IMAGE_DIGEST_PATH + value: "$(results.IMAGE_DIGEST.path)" + + steps: + - name: load-scripts + image: registry.access.redhat.com/ubi8-minimal:8.9 + workingDir: /scripts + script: | + set -e + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgV3JhcHBlciBhcm91bmQgImJ1aWxkYWggYnVkIiB0byBidWlsZCBhbmQgcHVzaCBhIGNvbnRhaW5lciBpbWFnZSBiYXNlZCBvbiBhIERvY2tlcmZpbGUuCiMKCnNob3B0IC1zIGluaGVyaXRfZXJyZXhpdApzZXQgLWV1IC1vIHBpcGVmYWlsCgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvY29tbW9uLnNoIgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvYnVpbGRhaC1jb21tb24uc2giCgpmdW5jdGlvbiBfYnVpbGRhaCgpIHsKICAgIGJ1aWxkYWggXAogICAgICAgIC0tc3RvcmFnZS1kcml2ZXI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSfSIgXAogICAgICAgIC0tdGxzLXZlcmlmeT0iJHtQQVJBTVNfVExTX1ZFUklGWX0iIFwKICAgICAgICAkeyp9Cn0KCiMKIyBQcmVwYXJlCiMKCiMgbWFraW5nIHN1cmUgdGhlIHJlcXVpcmVkIHdvcmtzcGFjZSAic291cmNlIiBpcyBib3VuZGVkLCB3aGljaCBtZWFucyBpdHMgdm9sdW1lIGlzIGN1cnJlbnRseSBtb3VudGVkCiMgYW5kIHJlYWR5IHRvIHVzZQpwaGFzZSAiSW5zcGVjdGluZyBzb3VyY2Ugd29ya3NwYWNlICcke1dPUktTUEFDRVNfU09VUkNFX1BBVEh9JyAoUFdEPScke1BXRH0nKSIKW1sgIiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkR9IiAhPSAidHJ1ZSIgXV0gJiYKICAgIGZhaWwgIldvcmtzcGFjZSAnc291cmNlJyBpcyBub3QgYm91bmRlZCIKCnBoYXNlICJBc3NlcnRpbmcgdGhlIGRvY2tlcmZpbGUvY29udGFpbmVyZmlsZSAnJHtET0NLRVJGSUxFX0ZVTEx9JyBleGlzdHMiCltbICEgLWYgIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgIkRvY2tlcmZpbGUgbm90IGZvdW5kIGF0OiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCnBoYXNlICJJbnNwZWN0aW5nIGNvbnRleHQgJyR7UEFSQU1TX0NPTlRFWFR9JyIKW1sgISAtZCAiJHtQQVJBTVNfQ09OVEVYVH0iIF1dICYmCiAgICBmYWlsICJDT05URVhUIHBhcmFtIGlzIG5vdCBmb3VuZCBhdCAnJHtQQVJBTVNfQ09OVEVYVH0nLCBvbiBzb3VyY2Ugd29ya3NwYWNlIgoKIyBIYW5kbGUgb3B0aW9uYWwgZG9ja2VyY29uZmlnIHNlY3JldAppZiBbWyAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19CT1VORH0iID09ICJ0cnVlIiBdXTsgdGhlbgoKICAgICMgaWYgY29uZmlnLmpzb24gZXhpc3RzIGF0IHdvcmtzcGFjZSByb290LCB3ZSB1c2UgdGhhdAogICAgaWYgdGVzdCAtZiAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfS9jb25maWcuanNvbiI7IHRoZW4KICAgICAgICBleHBvcnQgRE9DS0VSX0NPTkZJRz0iJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfSIKCiAgICAgICAgIyBlbHNlIHdlIGxvb2sgZm9yIC5kb2NrZXJjb25maWdqc29uIGF0IHRoZSByb290CiAgICBlbGlmIHRlc3QgLWYgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iOyB0aGVuCiAgICAgICAgY3AgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iICIkSE9NRS8uZG9ja2VyL2NvbmZpZy5qc29uIgogICAgICAgIGV4cG9ydCBET0NLRVJfQ09ORklHPSIkSE9NRS8uZG9ja2VyIgoKICAgICAgICAjIG5lZWQgdG8gZXJyb3Igb3V0IGlmIG5laXRoZXIgZmlsZXMgYXJlIHByZXNlbnQKICAgIGVsc2UKICAgICAgICBlY2hvICJuZWl0aGVyICdjb25maWcuanNvbicgbm9yICcuZG9ja2VyY29uZmlnanNvbicgZm91bmQgYXQgd29ya3NwYWNlIHJvb3QiCiAgICAgICAgZXhpdCAxCiAgICBmaQpmaQoKIwojIEJ1aWxkCiMKCnBoYXNlICJCdWlsZGluZyAnJHtQQVJBTVNfSU1BR0V9JyBiYXNlZCBvbiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCltbIC1uICIke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX0JVSUxEX0VYVFJBX0FSR1N9JyIKCl9idWlsZGFoIGJ1ZCAke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSBcCiAgICAtLW5vLWNhY2hlIFwKICAgIC0tZmlsZT0iJHtET0NLRVJGSUxFX0ZVTEx9IiBcCiAgICAtLXRhZz0iJHtQQVJBTVNfSU1BR0V9IiBcCiAgICAke1BBUkFNU19DT05URVhUfQoKaWYgW1sgIiR7UEFSQU1TX1NLSVBfUFVTSH0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgcGhhc2UgIlNraXBwaW5nIHB1c2hpbmcgJyR7UEFSQU1TX0lNQUdFfScgdG8gdGhlIGNvbnRhaW5lciByZWdpc3RyeSEiCiAgICBleGl0IDAKZmkKCiMKIyBQdXNoCiMKCnBoYXNlICJQdXNoaW5nICcke1BBUkFNU19JTUFHRX0nIHRvIHRoZSBjb250YWluZXIgcmVnaXN0cnkiCgpbWyAtbiAiJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX1BVU0hfRVhUUkFfQVJHU30nIgoKIyB0ZW1wb3JhcnkgZmlsZSB0byBzdG9yZSB0aGUgaW1hZ2UgZGlnZXN0LCBpbmZvcm1hdGlvbiBvbmx5IG9idGFpbmVkIGFmdGVyIHB1c2hpbmcgdGhlIGltYWdlIHRvIHRoZQojIGNvbnRhaW5lciByZWdpc3RyeQpkZWNsYXJlIC1yIGRpZ2VzdF9maWxlPSIvdG1wL2J1aWxkYWgtZGlnZXN0LnR4dCIKCl9idWlsZGFoIHB1c2ggJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSBcCiAgICAtLWRpZ2VzdGZpbGU9IiR7ZGlnZXN0X2ZpbGV9IiBcCiAgICAke1BBUkFNU19JTUFHRX0gXAogICAgZG9ja2VyOi8vJHtQQVJBTVNfSU1BR0V9CgojCiMgUmVzdWx0cwojCgpwaGFzZSAiSW5zcGVjdGluZyBkaWdlc3QgcmVwb3J0ICgnJHtkaWdlc3RfZmlsZX0nKSIKCltbICEgLXIgIiR7ZGlnZXN0X2ZpbGV9IiBdXSAmJgogICAgZmFpbCAiVW5hYmxlIHRvIGZpbmQgZGlnZXN0LWZpbGUgYXQgJyR7ZGlnZXN0X2ZpbGV9JyIKCmRlY2xhcmUgLXIgZGlnZXN0X3N1bT0iJChjYXQgJHtkaWdlc3RfZmlsZX0pIgoKW1sgLXogIiR7ZGlnZXN0X3N1bX0iIF1dICYmCiAgICBmYWlsICJEaWdlc3QgZmlsZSAnJHtkaWdlc3RfZmlsZX0nIGlzIGVtcHR5ISIKCnBoYXNlICJTdWNjZXNzZnVseSBidWlsdCBjb250YWluZXIgaW1hZ2UgJyR7UEFSQU1TX0lNQUdFfScgKCcke2RpZ2VzdF9zdW19JykiCmVjaG8gLW4gIiR7UEFSQU1TX0lNQUdFfSIgfCB0ZWUgJHtSRVNVTFRTX0lNQUdFX1VSTF9QQVRIfQplY2hvIC1uICIke2RpZ2VzdF9zdW19IiB8IHRlZSAke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEh9Cg==" |base64 -d >buildah-bud.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKZGVjbGFyZSAtcnggUEFSQU1TX0lNQUdFPSIke1BBUkFNU19JTUFHRTotfSIKZGVjbGFyZSAtcnggUEFSQU1TX0RPQ0tFUkZJTEU9IiR7UEFSQU1TX0RPQ0tFUkZJTEU6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19DT05URVhUPSIke1BBUkFNU19DT05URVhUOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU1RPUkFHRV9EUklWRVI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfQlVJTERfRVhUUkFfQVJHUz0iJHtQQVJBTVNfQlVJTERfRVhUUkFfQVJHUzotfSIKZGVjbGFyZSAtcnggUEFSQU1TX1BVU0hfRVhUUkFfQVJHUz0iJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU0tJUF9QVVNIPSIke1BBUkFNU19TS0lQX1BVU0g6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19UTFNfVkVSSUZZPSIke1BBUkFNU19UTFNfVkVSSUZZOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfVkVSQk9TRT0iJHtQQVJBTVNfVkVSQk9TRTotfSIKCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfU09VUkNFX1BBVEg9IiR7V09SS1NQQUNFU19TT1VSQ0VfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ9IiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ6LX0iCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfRE9DS0VSQ09ORklHX1BBVEg9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ6LX0iCgpkZWNsYXJlIC1yeCBSRVNVTFRTX0lNQUdFX0RJR0VTVF9QQVRIPSIke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEg6LX0iCmRlY2xhcmUgLXJ4IFJFU1VMVFNfSU1BR0VfVVJMX1BBVEg9IiR7UkVTVUxUU19JTUFHRV9VUkxfUEFUSDotfSIKCiMKIyBEb2NrZXJmaWxlCiMKCiMgZXhwb3NpbmcgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGFpbmVyIGZpbGUsIHdoaWNoIGJ5IGRlZmF1bHQgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBwcmltYXJ5CiMgd29ya3NwYWNlLCB0byByZWNlaXZlIGEgZGlmZmVyZW50IGNvbnRhaW5lci1maWxlIGxvY2F0aW9uCmRlY2xhcmUgLXIgZG9ja2VyZmlsZV9vbl93cz0iJHtXT1JLU1BBQ0VTX1NPVVJDRV9QQVRIfS8ke1BBUkFNU19ET0NLRVJGSUxFfSIKZGVjbGFyZSAteCBET0NLRVJGSUxFX0ZVTEw9IiR7RE9DS0VSRklMRV9GVUxMOi0ke2RvY2tlcmZpbGVfb25fd3N9fSIKCiMKIyBBc3NlcnRpbmcgRW52aXJvbm1lbnQKIwoKW1sgLXogIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgInVuYWJsZSB0byBmaW5kIHRoZSBEb2NrZXJmaWxlLCBET0NLRVJGSUxFIG1heSBoYXZlIGFuIGluY29ycmVjdCBsb2NhdGlvbiIKCmV4cG9ydGVkX29yX2ZhaWwgXAogICAgV09SS1NQQUNFU19TT1VSQ0VfUEFUSCBcCiAgICBQQVJBTVNfSU1BR0UKCiMKIyBWZXJib3NlIE91dHB1dAojCgppZiBbWyAiJHtQQVJBTVNfVkVSQk9TRX0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgc2V0IC14CmZpCg==" |base64 -d >buildah-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + chmod +x buildah-*.sh + volumeMounts: + - name: scripts-dir + mountPath: /scripts + + - name: build + image: registry.access.redhat.com/ubi8/buildah:8.9 + workingDir: /workspace/source + command: + - /scripts/buildah-bud.sh + securityContext: + capabilities: + add: ["SETFCAP"] + volumeMounts: + - name: scripts-dir + mountPath: /scripts + + volumes: + - name: scripts-dir + emptyDir: {} diff --git a/tasks/task-s2i-dotnet/0.2.0/README.md b/tasks/task-s2i-dotnet/0.2.0/README.md new file mode 100644 index 00000000..b86765b3 --- /dev/null +++ b/tasks/task-s2i-dotnet/0.2.0/README.md @@ -0,0 +1,83 @@ +Source-to-Image Tekton Tasks (`s2i`) +------------------------------------ + +# Abstract + +Describes the Tekton Tasks supporting Source-to-Image for various ecosystems. + +# `s2i` Builder Images + +This section we explain each language ecosystem comes with a predefined set of builder images, supported by Red Hat. + +The `s2i` Task helps in building reproducible container images from source code i.e. task for supporting s2i functionality. + +The s2i Task has been customized with builder images specific to various languages and have been named appropriately as follows: + +| Task Name | Builder Image Used | +| ---------- | ---------------------------------------------------------------------- | +| s2i-python | http://registry.access.redhat.com/ubi8/python-39:latest | +| s2i-go | http://registry.access.redhat.com/ubi8/go-toolset:1.19.10-3 | +| s2i-java | http://registry.access.redhat.com/ubi8/openjdk-11:latest | +| s2i-dotnet | http://registry.access.redhat.com/ubi8/dotnet-60:6.0-37.20230802191230 | +| s2i-php | http://registry.access.redhat.com/ubi9/php-81:1-29 | +| s2i-nodejs | http://registry.access.redhat.com/ubi8/nodejs-18:latest | +| s2i-perl | http://registry.access.redhat.com/ubi9/perl-532:1-91 | +| s2i-ruby | http://registry.access.redhat.com/ubi9/ruby-31:1-50 | + +In case, the above builder images associated with the languages aren’t satisfactory for your source code, you can change it using appropriate parameter. + +# Usage + +Please, consider the usage example below: + +```yaml +--- +apiVersion: tekton.dev/v1beta1 +kind: TaskRun +metadata: {} +spec: + taskRef: + name: s2i-python + params: + - name: IMAGE + value: registry.registry.svc.cluster.local:32222/task-containers/task-s2i-python:latest +``` + +In case the Container Registry requires authentication, please consider the [Tekton Pipelines documentation][tektonPipelineAuth]. In a nutshell, you need to create a Kubernetes Secret describing the following attributes: + +```bash +kubectl create secret docker-registry imagestreams \ + --docker-server="image-registry.openshift-image-registry.svc:5000" \ + --docker-username="${REGISTRY_USERNAME}" \ + --docker-password="${REGISTRY_TOKEN}" +``` + +Then make sure the Secret is linked with the Service-Account running the `TaskRun`/`PipelineRun`. + +## Workspaces + +All of the s2i tasks use the `source` workspace which is meant to contain the Application source code, which acts as the build context for S2I workflow. + + +## Params + +| Param | Type | Default | Description | +| ----------------- | ------ | ------------------------ | ------------------------------------------------------------------------- | +| IMAGE | string | (required) | Fully qualified container image name to be built by s2i | +| IMAGE_SCRIPTS_URL | string | image:///usr/libexec/s2i | URL containing the default assemble and run scripts for the builder image | +| ENV_VARS | array | [] | Array containing string of Environment Variables as "KEY=VALUE” | +| SUBDIRECTORY | string | . | Relative subdirectory to the source Workspace for the build-context. | +| STORAGE_DRIVER | string | overlay | Set buildah storage driver to reflect the currrent cluster node's | +| settings. | +| BUILD_EXTRA_ARGS | string | | Extra parameters passed for the build command when building images. | +| PUSH_EXTRA_ARGS | string | | Extra parameters passed for the push command when pushing images. | +| SKIP_PUSH | string | false | Skip pushing the image to the container registry. | +| TLS_VERIFY | string | true | Sets the TLS verification flag, true is recommended. | +| VERBOSE | string | false | Turns on verbose logging, all commands executed will be printed out. | + +## Results + +| Result | Description | +| ------------ | ------------------------------- | +| IMAGE_URL | Fully qualified image name. | +| IMAGE_DIGEST | Digest of the image just built. | diff --git a/tasks/task-s2i-dotnet/0.2.0/task-s2i-dotnet.yaml b/tasks/task-s2i-dotnet/0.2.0/task-s2i-dotnet.yaml new file mode 100644 index 00000000..a736162b --- /dev/null +++ b/tasks/task-s2i-dotnet/0.2.0/task-s2i-dotnet.yaml @@ -0,0 +1,179 @@ +--- +# Source: task-containers/templates/task-s2i-dotnet.yaml +apiVersion: tekton.dev/v1beta1 +kind: Task +metadata: + name: s2i-dotnet + labels: + app.kubernetes.io/version: 0.2.0 + annotations: + tekton.dev/categories: containers + tekton.dev/pipelines.minVersion: 0.41.0 + tekton.dev/tags: containers +spec: + description: | + Builds the source code using the s2i's dotnet builder-image + "registry.access.redhat.com/ubi8/dotnet-60:6.0-37.20230802191230". + + + workspaces: + - name: source + optional: false + description: | + Application source code, the build context for S2I workflow. + + params: + - name: IMAGE + type: string + description: | + Fully qualified container image name to be built by s2i. + - name: IMAGE_SCRIPTS_URL + type: string + default: image:///usr/libexec/s2i + description: | + Specify a URL containing the default assemble and run scripts for the builder image + - name: ENV_VARS + type: array + default: [] + description: | + Array containing string of Environment Variables as "KEY=VALUE" + - name: CONTEXT + type: string + default: "." + description: | + Path to the directory to use as context. + - name: STORAGE_DRIVER + type: string + default: vfs + description: | + Set buildah storage driver to reflect the currrent cluster node's + settings. + - name: FORMAT + description: The format of the built container, oci or docker + default: "oci" + - name: BUILD_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the build command when building images. + - name: PUSH_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the push command when pushing images. + - name: SKIP_PUSH + default: "false" + description: | + Skip pushing the image to the container registry. + - name: TLS_VERIFY + type: string + default: "true" + description: | + Sets the TLS verification flag, `true` is recommended. + - name: VERBOSE + type: string + default: "false" + description: | + Turns on verbose logging, all commands executed will be printed out. + + results: + - name: IMAGE_URL + description: | + Fully qualified image name. + - name: IMAGE_DIGEST + description: | + Digest of the image just built. + + stepTemplate: + env: + + - name: PARAMS_IMAGE + value: "$(params.IMAGE)" + - name: PARAMS_IMAGE_SCRIPTS_URL + value: "$(params.IMAGE_SCRIPTS_URL)" + - name: PARAMS_CONTEXT + value: "$(params.CONTEXT)" + - name: PARAMS_FORMAT + value: "$(params.FORMAT)" + - name: PARAMS_STORAGE_DRIVER + value: "$(params.STORAGE_DRIVER)" + - name: PARAMS_BUILD_EXTRA_ARGS + value: "$(params.BUILD_EXTRA_ARGS)" + - name: PARAMS_PUSH_EXTRA_ARGS + value: "$(params.PUSH_EXTRA_ARGS)" + - name: PARAMS_SKIP_PUSH + value: "$(params.SKIP_PUSH)" + - name: PARAMS_TLS_VERIFY + value: "$(params.TLS_VERIFY)" + - name: PARAMS_VERBOSE + value: "$(params.VERBOSE)" + - name: WORKSPACES_SOURCE_BOUND + value: "$(workspaces.source.bound)" + - name: WORKSPACES_SOURCE_PATH + value: "$(workspaces.source.path)" + - name: WORKSPACES_DOCKERCONFIG_BOUND + value: "$(workspaces.dockerconfig.bound)" + - name: WORKSPACES_DOCKERCONFIG_PATH + value: "$(workspaces.dockerconfig.path)" + - name: RESULTS_IMAGE_URL_PATH + value: "$(results.IMAGE_URL.path)" + - name: RESULTS_IMAGE_DIGEST_PATH + value: "$(results.IMAGE_DIGEST.path)" + + steps: + - name: load-scripts + image: registry.access.redhat.com/ubi8-minimal:8.9 + workingDir: /scripts + script: | + set -e + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgV3JhcHBlciBhcm91bmQgImJ1aWxkYWggYnVkIiB0byBidWlsZCBhbmQgcHVzaCBhIGNvbnRhaW5lciBpbWFnZSBiYXNlZCBvbiBhIERvY2tlcmZpbGUuCiMKCnNob3B0IC1zIGluaGVyaXRfZXJyZXhpdApzZXQgLWV1IC1vIHBpcGVmYWlsCgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvY29tbW9uLnNoIgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvYnVpbGRhaC1jb21tb24uc2giCgpmdW5jdGlvbiBfYnVpbGRhaCgpIHsKICAgIGJ1aWxkYWggXAogICAgICAgIC0tc3RvcmFnZS1kcml2ZXI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSfSIgXAogICAgICAgIC0tdGxzLXZlcmlmeT0iJHtQQVJBTVNfVExTX1ZFUklGWX0iIFwKICAgICAgICAkeyp9Cn0KCiMKIyBQcmVwYXJlCiMKCiMgbWFraW5nIHN1cmUgdGhlIHJlcXVpcmVkIHdvcmtzcGFjZSAic291cmNlIiBpcyBib3VuZGVkLCB3aGljaCBtZWFucyBpdHMgdm9sdW1lIGlzIGN1cnJlbnRseSBtb3VudGVkCiMgYW5kIHJlYWR5IHRvIHVzZQpwaGFzZSAiSW5zcGVjdGluZyBzb3VyY2Ugd29ya3NwYWNlICcke1dPUktTUEFDRVNfU09VUkNFX1BBVEh9JyAoUFdEPScke1BXRH0nKSIKW1sgIiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkR9IiAhPSAidHJ1ZSIgXV0gJiYKICAgIGZhaWwgIldvcmtzcGFjZSAnc291cmNlJyBpcyBub3QgYm91bmRlZCIKCnBoYXNlICJBc3NlcnRpbmcgdGhlIGRvY2tlcmZpbGUvY29udGFpbmVyZmlsZSAnJHtET0NLRVJGSUxFX0ZVTEx9JyBleGlzdHMiCltbICEgLWYgIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgIkRvY2tlcmZpbGUgbm90IGZvdW5kIGF0OiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCnBoYXNlICJJbnNwZWN0aW5nIGNvbnRleHQgJyR7UEFSQU1TX0NPTlRFWFR9JyIKW1sgISAtZCAiJHtQQVJBTVNfQ09OVEVYVH0iIF1dICYmCiAgICBmYWlsICJDT05URVhUIHBhcmFtIGlzIG5vdCBmb3VuZCBhdCAnJHtQQVJBTVNfQ09OVEVYVH0nLCBvbiBzb3VyY2Ugd29ya3NwYWNlIgoKIyBIYW5kbGUgb3B0aW9uYWwgZG9ja2VyY29uZmlnIHNlY3JldAppZiBbWyAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19CT1VORH0iID09ICJ0cnVlIiBdXTsgdGhlbgoKICAgICMgaWYgY29uZmlnLmpzb24gZXhpc3RzIGF0IHdvcmtzcGFjZSByb290LCB3ZSB1c2UgdGhhdAogICAgaWYgdGVzdCAtZiAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfS9jb25maWcuanNvbiI7IHRoZW4KICAgICAgICBleHBvcnQgRE9DS0VSX0NPTkZJRz0iJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfSIKCiAgICAgICAgIyBlbHNlIHdlIGxvb2sgZm9yIC5kb2NrZXJjb25maWdqc29uIGF0IHRoZSByb290CiAgICBlbGlmIHRlc3QgLWYgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iOyB0aGVuCiAgICAgICAgY3AgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iICIkSE9NRS8uZG9ja2VyL2NvbmZpZy5qc29uIgogICAgICAgIGV4cG9ydCBET0NLRVJfQ09ORklHPSIkSE9NRS8uZG9ja2VyIgoKICAgICAgICAjIG5lZWQgdG8gZXJyb3Igb3V0IGlmIG5laXRoZXIgZmlsZXMgYXJlIHByZXNlbnQKICAgIGVsc2UKICAgICAgICBlY2hvICJuZWl0aGVyICdjb25maWcuanNvbicgbm9yICcuZG9ja2VyY29uZmlnanNvbicgZm91bmQgYXQgd29ya3NwYWNlIHJvb3QiCiAgICAgICAgZXhpdCAxCiAgICBmaQpmaQoKIwojIEJ1aWxkCiMKCnBoYXNlICJCdWlsZGluZyAnJHtQQVJBTVNfSU1BR0V9JyBiYXNlZCBvbiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCltbIC1uICIke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX0JVSUxEX0VYVFJBX0FSR1N9JyIKCl9idWlsZGFoIGJ1ZCAke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSBcCiAgICAtLW5vLWNhY2hlIFwKICAgIC0tZmlsZT0iJHtET0NLRVJGSUxFX0ZVTEx9IiBcCiAgICAtLXRhZz0iJHtQQVJBTVNfSU1BR0V9IiBcCiAgICAke1BBUkFNU19DT05URVhUfQoKaWYgW1sgIiR7UEFSQU1TX1NLSVBfUFVTSH0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgcGhhc2UgIlNraXBwaW5nIHB1c2hpbmcgJyR7UEFSQU1TX0lNQUdFfScgdG8gdGhlIGNvbnRhaW5lciByZWdpc3RyeSEiCiAgICBleGl0IDAKZmkKCiMKIyBQdXNoCiMKCnBoYXNlICJQdXNoaW5nICcke1BBUkFNU19JTUFHRX0nIHRvIHRoZSBjb250YWluZXIgcmVnaXN0cnkiCgpbWyAtbiAiJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX1BVU0hfRVhUUkFfQVJHU30nIgoKIyB0ZW1wb3JhcnkgZmlsZSB0byBzdG9yZSB0aGUgaW1hZ2UgZGlnZXN0LCBpbmZvcm1hdGlvbiBvbmx5IG9idGFpbmVkIGFmdGVyIHB1c2hpbmcgdGhlIGltYWdlIHRvIHRoZQojIGNvbnRhaW5lciByZWdpc3RyeQpkZWNsYXJlIC1yIGRpZ2VzdF9maWxlPSIvdG1wL2J1aWxkYWgtZGlnZXN0LnR4dCIKCl9idWlsZGFoIHB1c2ggJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSBcCiAgICAtLWRpZ2VzdGZpbGU9IiR7ZGlnZXN0X2ZpbGV9IiBcCiAgICAke1BBUkFNU19JTUFHRX0gXAogICAgZG9ja2VyOi8vJHtQQVJBTVNfSU1BR0V9CgojCiMgUmVzdWx0cwojCgpwaGFzZSAiSW5zcGVjdGluZyBkaWdlc3QgcmVwb3J0ICgnJHtkaWdlc3RfZmlsZX0nKSIKCltbICEgLXIgIiR7ZGlnZXN0X2ZpbGV9IiBdXSAmJgogICAgZmFpbCAiVW5hYmxlIHRvIGZpbmQgZGlnZXN0LWZpbGUgYXQgJyR7ZGlnZXN0X2ZpbGV9JyIKCmRlY2xhcmUgLXIgZGlnZXN0X3N1bT0iJChjYXQgJHtkaWdlc3RfZmlsZX0pIgoKW1sgLXogIiR7ZGlnZXN0X3N1bX0iIF1dICYmCiAgICBmYWlsICJEaWdlc3QgZmlsZSAnJHtkaWdlc3RfZmlsZX0nIGlzIGVtcHR5ISIKCnBoYXNlICJTdWNjZXNzZnVseSBidWlsdCBjb250YWluZXIgaW1hZ2UgJyR7UEFSQU1TX0lNQUdFfScgKCcke2RpZ2VzdF9zdW19JykiCmVjaG8gLW4gIiR7UEFSQU1TX0lNQUdFfSIgfCB0ZWUgJHtSRVNVTFRTX0lNQUdFX1VSTF9QQVRIfQplY2hvIC1uICIke2RpZ2VzdF9zdW19IiB8IHRlZSAke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEh9Cg==" |base64 -d >buildah-bud.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKZGVjbGFyZSAtcnggUEFSQU1TX0lNQUdFPSIke1BBUkFNU19JTUFHRTotfSIKZGVjbGFyZSAtcnggUEFSQU1TX0RPQ0tFUkZJTEU9IiR7UEFSQU1TX0RPQ0tFUkZJTEU6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19DT05URVhUPSIke1BBUkFNU19DT05URVhUOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU1RPUkFHRV9EUklWRVI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfQlVJTERfRVhUUkFfQVJHUz0iJHtQQVJBTVNfQlVJTERfRVhUUkFfQVJHUzotfSIKZGVjbGFyZSAtcnggUEFSQU1TX1BVU0hfRVhUUkFfQVJHUz0iJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU0tJUF9QVVNIPSIke1BBUkFNU19TS0lQX1BVU0g6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19UTFNfVkVSSUZZPSIke1BBUkFNU19UTFNfVkVSSUZZOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfVkVSQk9TRT0iJHtQQVJBTVNfVkVSQk9TRTotfSIKCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfU09VUkNFX1BBVEg9IiR7V09SS1NQQUNFU19TT1VSQ0VfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ9IiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ6LX0iCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfRE9DS0VSQ09ORklHX1BBVEg9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ6LX0iCgpkZWNsYXJlIC1yeCBSRVNVTFRTX0lNQUdFX0RJR0VTVF9QQVRIPSIke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEg6LX0iCmRlY2xhcmUgLXJ4IFJFU1VMVFNfSU1BR0VfVVJMX1BBVEg9IiR7UkVTVUxUU19JTUFHRV9VUkxfUEFUSDotfSIKCiMKIyBEb2NrZXJmaWxlCiMKCiMgZXhwb3NpbmcgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGFpbmVyIGZpbGUsIHdoaWNoIGJ5IGRlZmF1bHQgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBwcmltYXJ5CiMgd29ya3NwYWNlLCB0byByZWNlaXZlIGEgZGlmZmVyZW50IGNvbnRhaW5lci1maWxlIGxvY2F0aW9uCmRlY2xhcmUgLXIgZG9ja2VyZmlsZV9vbl93cz0iJHtXT1JLU1BBQ0VTX1NPVVJDRV9QQVRIfS8ke1BBUkFNU19ET0NLRVJGSUxFfSIKZGVjbGFyZSAteCBET0NLRVJGSUxFX0ZVTEw9IiR7RE9DS0VSRklMRV9GVUxMOi0ke2RvY2tlcmZpbGVfb25fd3N9fSIKCiMKIyBBc3NlcnRpbmcgRW52aXJvbm1lbnQKIwoKW1sgLXogIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgInVuYWJsZSB0byBmaW5kIHRoZSBEb2NrZXJmaWxlLCBET0NLRVJGSUxFIG1heSBoYXZlIGFuIGluY29ycmVjdCBsb2NhdGlvbiIKCmV4cG9ydGVkX29yX2ZhaWwgXAogICAgV09SS1NQQUNFU19TT1VSQ0VfUEFUSCBcCiAgICBQQVJBTVNfSU1BR0UKCiMKIyBWZXJib3NlIE91dHB1dAojCgppZiBbWyAiJHtQQVJBTVNfVkVSQk9TRX0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgc2V0IC14CmZpCg==" |base64 -d >buildah-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + chmod +x buildah-*.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgVXNlcyB0aGUgRG9ja2VyZmlsZSBnZW5lcmF0ZWQgYnkgczJpIHRvIGFzc2VtYmxlIGEgbmV3IGNvbnRhaW5lciBpbWFnZSB1c2luZyBidWlsZGFoLgojCgpzaG9wdCAtcyBpbmhlcml0X2VycmV4aXQKc2V0IC1ldSAtbyBwaXBlZmFpbAoKZGVjbGFyZSAtciBjdXJfZGlyPSIkKGRpcm5hbWUgJHtCQVNIX1NPVVJDRVswXX0pIgoKc291cmNlICIke2N1cl9kaXJ9L2NvbW1vbi5zaCIKc291cmNlICIke2N1cl9kaXJ9L3MyaS1jb21tb24uc2giCgojIGxvYWRpbmcgYnVpbGRhaCBzZXR0aW5ncyBvdmVyd3JpdHRpbmcgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGFpbmVyIGZpbGUKZGVjbGFyZSAteCBET0NLRVJGSUxFX0ZVTEw9IiR7UzJJX0RPQ0tFUkZJTEV9Igpzb3VyY2UgIiR7Y3VyX2Rpcn0vYnVpbGRhaC1jb21tb24uc2giCgpwaGFzZSAiQnVpbGRpbmcgdGhlIERvY2tlcmZpbGUgJyR7RE9DS0VSRklMRV9GVUxMfScgd2l0aCBidWlsZGFoIgpleGVjICR7Y3VyX2Rpcn0vYnVpbGRhaC1idWQuc2gK" |base64 -d >s2i-build.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0YXJnZXQgaW1hZ2UgbmFtZSAoZnVsbHkgcXVhbGlmaWVkKSB0byBiZSBidWlsZCB3aXRoIHMyaSwgcmVkZWNsYXJpbmcgdGhlIHNhbWUgcGFyYW1ldGVyIG5hbWUgdGhhbgojIGJ1aWxkYWggdGFzayB1c2VzCmRlY2xhcmUgLXggUEFSQU1TX0lNQUdFPSIke1BBUkFNU19JTUFHRTotfSIKIyBTcGVjaWZ5IGEgVVJMIGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgYXNzZW1ibGUgYW5kIHJ1biBzY3JpcHRzIGZvciB0aGUgYnVpbGRlciBpbWFnZQpkZWNsYXJlIC1yeCBQQVJBTVNfSU1BR0VfU0NSSVBUU19VUkw9IiR7UEFSQU1TX0lNQUdFX1NDUklQVFNfVVJMOi19IgoKIyB2b2x1bWUgbW91bnQgb3IgZGlyZWN0b3J5IHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIGZpbGVzIAojIGxpa2UgZW52LCBEb2NrZXJmaWxlIGFuZCBhbnkgb3RoZXJzIG5lZWRlZCB0byBzdXBwb3J0IHMyaQpkZWNsYXJlIC1yeCBTMklfR0VORVJBVEVfRElSRUNUT1JZPSIke1MySV9HRU5FUkFURV9ESVJFQ1RPUlk6LS9zMmktZ2VuZXJhdGV9IgoKIyBmdWxsIHBhdGggdG8gdGhlIGNvbnRhaW5lciBmaWxlIGdlbmVyYXRlZCBieSBzMmkKZGVjbGFyZSAtcnggUzJJX0RPQ0tFUkZJTEU9IiR7UzJJX0RPQ0tFUkZJTEU6LSR7UzJJX0dFTkVSQVRFX0RJUkVDVE9SWX0vRG9ja2VyZmlsZS5nZW59IgoKIyBmdWxsIHBhdGggdG8gdGhlIGVudiBmaWxlIHVzZWQgd2l0aCB0aGUgLS1lbnZpcm9ubWVudC1maWxlIHBhcmFtZXRlciBvZiBzMmkKZGVjbGFyZSAtcnggUzJJX0VOVklST05NRU5UX0ZJTEU9IiR7UzJJX0VOVklST05NRU5UX0ZJTEU6LSR7UzJJX0dFTkVSQVRFX0RJUkVDVE9SWX0vZW52fSIKCiMKIyBBc3NlcnRpbmcgRW52aXJvbm1lbnQKIwoKZXhwb3J0ZWRfb3JfZmFpbCBcCiAgICBXT1JLU1BBQ0VTX1NPVVJDRV9QQVRIIFwKICAgIFBBUkFNU19JTUFHRQoKIwojIFZlcmJvc2UgT3V0cHV0CiMKCmRlY2xhcmUgLXggUzJJX0xPR0xFVkVMPSIwIgoKaWYgW1sgIiR7UEFSQU1TX1ZFUkJPU0V9IiA9PSAidHJ1ZSIgXV07IHRoZW4KICAgIFMySV9MT0dMRVZFTD0iMiIKICAgIHNldCAteApmaQo=" |base64 -d >s2i-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgVXNlcyBzMmkgdG8gZ2VuZXJhdGUgdGhlIHJlcGVzY3RpdmUgQ29udGFpbmVyZmlsZSBiYXNlZCBvbiB0aGUgaW5mb21yZWQgYnVpbGRlci4gVGhlIENvbnRhaW5lcmZpbGUKIyBpcyBzdG9yZWQgb24gYSB0ZW1wb3JhcnkgbG9jYXRpb24uCiMKCnNob3B0IC1zIGluaGVyaXRfZXJyZXhpdApzZXQgLWV1IC1vIHBpcGVmYWlsCgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvY29tbW9uLnNoIgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvczJpLWNvbW1vbi5zaCIKCiMgczJpIGJ1aWxkZXIgaW1hZ2UgbmFtZSAoZnVsbHkgcXVhbGlmaWVkKQpkZWNsYXJlIC1yeCBTMklfQlVJTERFUl9JTUFHRT0iJHtTMklfQlVJTERFUl9JTUFHRTotfSIKCiMgdGFrZXMgdGhlIHZhbHVlcyBpbiBhcmd1bWVudCBFTlZfVkFSUyBhbmQgY3JlYXRlcyBhbiBhcnJheSB1c2luZyB0aG9zZSB2YWx1ZXMKZGVjbGFyZSAtcmEgRU5WX1ZBUlM9KCR7QH0pCgojIHJlLXVzaW5nIHRoZSBzYW1lIHBhcmFtZXRlcnMgdGhhbiBidWlsZGFoLCBzMmkgbmVlZHMgYnVpbGRhaCBhYmlsaXRpZXMgdG8gY3JlYXRlIHRoZSBmaW5hbAojIGNvbnRhaW5lciBpbWFnZSBiYXNlZCBvbiB3aGF0IHMyaSBnZW5lcmF0ZXMKc291cmNlICIkKGRpcm5hbWUgJHtCQVNIX1NPVVJDRVswXX0pL2J1aWxkYWgtY29tbW9uLnNoIgoKIwojIFByZXBhcmUKIwoKIyBtYWtpbmcgc3VyZSB0aGUgcmVxdWlyZWQgd29ya3NwYWNlICJzb3VyY2UiIGlzIGJvdW5kZWQsIHdoaWNoIG1lYW5zIGl0cyB2b2x1bWUgaXMgY3VycmVudGx5IG1vdW50ZWQKIyBhbmQgcmVhZHkgdG8gdXNlCnBoYXNlICJJbnNwZWN0aW5nIHNvdXJjZSB3b3Jrc3BhY2UgJyR7V09SS1NQQUNFU19TT1VSQ0VfUEFUSH0nIChQV0Q9JyR7UFdEfScpIgpbWyAiJHtXT1JLU1BBQ0VTX1NPVVJDRV9CT1VORH0iICE9ICJ0cnVlIiBdXSAmJgogICAgZmFpbCAiV29ya3NwYWNlICdzb3VyY2UnIGlzIG5vdCBib3VuZGVkIgoKcGhhc2UgIkluc3BlY3RpbmcgY29udGV4dCAnJHtQQVJBTVNfQ09OVEVYVH0nIgpbWyAhIC1kICIke1BBUkFNU19DT05URVhUfSIgXV0gJiYKICAgIGZhaWwgIkFwcGxpY2F0aW9uIHNvdXJjZSBjb2RlIGRpcmVjdG9yeSBub3QgZm91bmQgYXQgJyR7UEFSQU1TX0NPTlRFWFR9JyIKCnBoYXNlICJBZGRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byAnJHtTMklfRU5WSVJPTk1FTlRfRklMRX0nIgoKIyBhZGQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFyZSBzZW50IGFzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZnJvbSBFTlZfVkFSUyBwYXJhbWV0ZXIKdG91Y2ggIiR7UzJJX0VOVklST05NRU5UX0ZJTEV9IgppZiBbICR7I0VOVl9WQVJTW0BdfSAtZ3QgMCBdOyB0aGVuCiAgICBmb3IgZW52X3ZhciBpbiAiJHtFTlZfVkFSU1tAXX0iOyBkbwogICAgICAgIGVjaG8gIiR7ZW52X3Zhcn0iID4+ICIke1MySV9FTlZJUk9OTUVOVF9GSUxFfSIKICAgIGRvbmUKZmkKCiMKIyBTMkkgR2VuZXJhdGUKIwoKcGhhc2UgIkdlbmVyYXRpbmcgdGhlIERvY2tlcmZpbGUgZm9yIFMySSBidWlsZGVyIGltYWdlICcke1MySV9CVUlMREVSX0lNQUdFfSciCnMyaSAtLWxvZ2xldmVsICIke1MySV9MT0dMRVZFTH0iIFwKICAgIGJ1aWxkICIke1BBUkFNU19DT05URVhUfSIgIiR7UzJJX0JVSUxERVJfSU1BR0V9IiBcCiAgICAgICAgLS1pbWFnZS1zY3JpcHRzLXVybCAiJHtQQVJBTVNfSU1BR0VfU0NSSVBUU19VUkx9IiBcCiAgICAgICAgLS1hcy1kb2NrZXJmaWxlICIke1MySV9ET0NLRVJGSUxFfSIgXAogICAgICAgIC0tZW52aXJvbm1lbnQtZmlsZSAiJHtTMklfRU5WSVJPTk1FTlRfRklMRX0iCgpwaGFzZSAiSW5zcGVjdGluZyB0aGUgRG9ja2VyZmlsZSBnZW5lcmF0ZWQgYXQgJyR7UzJJX0RPQ0tFUkZJTEV9JyIKW1sgISAtZiAiJHtTMklfRE9DS0VSRklMRX0iIF1dICYmCiAgICBmYWlsICJHZW5lcmF0ZWQgRG9ja2VyZmlsZSBpcyBub3QgZm91bmQhIgoKc2V0ICt4CnBoYXNlICJHZW5lcmF0ZWQgRG9ja2VyZmlsZSBwYXlsb2FkIgplY2hvIC1lbiAiPj4+ICR7UzJJX0RPQ0tFUkZJTEV9XG4kKGNhdCAke1MySV9ET0NLRVJGSUxFfSlcbjw8PCBFT0ZcbiIK" |base64 -d >s2i-generate.sh + chmod +x s2i-*.sh + volumeMounts: + - name: scripts-dir + mountPath: /scripts + + - name: s2i-generate + image: registry.access.redhat.com/source-to-image/source-to-image-rhel8:v1.3.9-6 + workingDir: $(workspaces.source.path) + env: + - name: S2I_BUILDER_IMAGE + value: registry.access.redhat.com/ubi8/dotnet-60:6.0-37.20230802191230 + command: + - /scripts/s2i-generate.sh + args: + - "$(params.ENV_VARS[*])" + securityContext: + capabilities: + add: ["SETFCAP"] + volumeMounts: + - name: scripts-dir + mountPath: /scripts + - name: s2i-generate-dir + mountPath: /s2i-generate + + - name: s2i-build + image: registry.access.redhat.com/ubi8/buildah:8.9 + workingDir: /s2i-generate + command: + - /scripts/s2i-build.sh + securityContext: + capabilities: + add: ["SETFCAP"] + volumeMounts: + - name: scripts-dir + mountPath: /scripts + - name: s2i-generate-dir + mountPath: /s2i-generate + + volumes: + - name: scripts-dir + emptyDir: {} + - name: s2i-generate-dir + emptyDir: {} diff --git a/tasks/task-s2i-go/0.2.0/README.md b/tasks/task-s2i-go/0.2.0/README.md new file mode 100644 index 00000000..b86765b3 --- /dev/null +++ b/tasks/task-s2i-go/0.2.0/README.md @@ -0,0 +1,83 @@ +Source-to-Image Tekton Tasks (`s2i`) +------------------------------------ + +# Abstract + +Describes the Tekton Tasks supporting Source-to-Image for various ecosystems. + +# `s2i` Builder Images + +This section we explain each language ecosystem comes with a predefined set of builder images, supported by Red Hat. + +The `s2i` Task helps in building reproducible container images from source code i.e. task for supporting s2i functionality. + +The s2i Task has been customized with builder images specific to various languages and have been named appropriately as follows: + +| Task Name | Builder Image Used | +| ---------- | ---------------------------------------------------------------------- | +| s2i-python | http://registry.access.redhat.com/ubi8/python-39:latest | +| s2i-go | http://registry.access.redhat.com/ubi8/go-toolset:1.19.10-3 | +| s2i-java | http://registry.access.redhat.com/ubi8/openjdk-11:latest | +| s2i-dotnet | http://registry.access.redhat.com/ubi8/dotnet-60:6.0-37.20230802191230 | +| s2i-php | http://registry.access.redhat.com/ubi9/php-81:1-29 | +| s2i-nodejs | http://registry.access.redhat.com/ubi8/nodejs-18:latest | +| s2i-perl | http://registry.access.redhat.com/ubi9/perl-532:1-91 | +| s2i-ruby | http://registry.access.redhat.com/ubi9/ruby-31:1-50 | + +In case, the above builder images associated with the languages aren’t satisfactory for your source code, you can change it using appropriate parameter. + +# Usage + +Please, consider the usage example below: + +```yaml +--- +apiVersion: tekton.dev/v1beta1 +kind: TaskRun +metadata: {} +spec: + taskRef: + name: s2i-python + params: + - name: IMAGE + value: registry.registry.svc.cluster.local:32222/task-containers/task-s2i-python:latest +``` + +In case the Container Registry requires authentication, please consider the [Tekton Pipelines documentation][tektonPipelineAuth]. In a nutshell, you need to create a Kubernetes Secret describing the following attributes: + +```bash +kubectl create secret docker-registry imagestreams \ + --docker-server="image-registry.openshift-image-registry.svc:5000" \ + --docker-username="${REGISTRY_USERNAME}" \ + --docker-password="${REGISTRY_TOKEN}" +``` + +Then make sure the Secret is linked with the Service-Account running the `TaskRun`/`PipelineRun`. + +## Workspaces + +All of the s2i tasks use the `source` workspace which is meant to contain the Application source code, which acts as the build context for S2I workflow. + + +## Params + +| Param | Type | Default | Description | +| ----------------- | ------ | ------------------------ | ------------------------------------------------------------------------- | +| IMAGE | string | (required) | Fully qualified container image name to be built by s2i | +| IMAGE_SCRIPTS_URL | string | image:///usr/libexec/s2i | URL containing the default assemble and run scripts for the builder image | +| ENV_VARS | array | [] | Array containing string of Environment Variables as "KEY=VALUE” | +| SUBDIRECTORY | string | . | Relative subdirectory to the source Workspace for the build-context. | +| STORAGE_DRIVER | string | overlay | Set buildah storage driver to reflect the currrent cluster node's | +| settings. | +| BUILD_EXTRA_ARGS | string | | Extra parameters passed for the build command when building images. | +| PUSH_EXTRA_ARGS | string | | Extra parameters passed for the push command when pushing images. | +| SKIP_PUSH | string | false | Skip pushing the image to the container registry. | +| TLS_VERIFY | string | true | Sets the TLS verification flag, true is recommended. | +| VERBOSE | string | false | Turns on verbose logging, all commands executed will be printed out. | + +## Results + +| Result | Description | +| ------------ | ------------------------------- | +| IMAGE_URL | Fully qualified image name. | +| IMAGE_DIGEST | Digest of the image just built. | diff --git a/tasks/task-s2i-go/0.2.0/task-s2i-go.yaml b/tasks/task-s2i-go/0.2.0/task-s2i-go.yaml new file mode 100644 index 00000000..4f679b41 --- /dev/null +++ b/tasks/task-s2i-go/0.2.0/task-s2i-go.yaml @@ -0,0 +1,179 @@ +--- +# Source: task-containers/templates/task-s2i-go.yaml +apiVersion: tekton.dev/v1beta1 +kind: Task +metadata: + name: s2i-go + labels: + app.kubernetes.io/version: 0.2.0 + annotations: + tekton.dev/categories: containers + tekton.dev/pipelines.minVersion: 0.41.0 + tekton.dev/tags: containers +spec: + description: | + Builds the source code using the s2i's Golang builder-image + "registry.access.redhat.com/ubi8/go-toolset:1.19.10-3". + + + workspaces: + - name: source + optional: false + description: | + Application source code, the build context for S2I workflow. + + params: + - name: IMAGE + type: string + description: | + Fully qualified container image name to be built by s2i. + - name: IMAGE_SCRIPTS_URL + type: string + default: image:///usr/libexec/s2i + description: | + Specify a URL containing the default assemble and run scripts for the builder image + - name: ENV_VARS + type: array + default: [] + description: | + Array containing string of Environment Variables as "KEY=VALUE" + - name: CONTEXT + type: string + default: "." + description: | + Path to the directory to use as context. + - name: STORAGE_DRIVER + type: string + default: vfs + description: | + Set buildah storage driver to reflect the currrent cluster node's + settings. + - name: FORMAT + description: The format of the built container, oci or docker + default: "oci" + - name: BUILD_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the build command when building images. + - name: PUSH_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the push command when pushing images. + - name: SKIP_PUSH + default: "false" + description: | + Skip pushing the image to the container registry. + - name: TLS_VERIFY + type: string + default: "true" + description: | + Sets the TLS verification flag, `true` is recommended. + - name: VERBOSE + type: string + default: "false" + description: | + Turns on verbose logging, all commands executed will be printed out. + + results: + - name: IMAGE_URL + description: | + Fully qualified image name. + - name: IMAGE_DIGEST + description: | + Digest of the image just built. + + stepTemplate: + env: + + - name: PARAMS_IMAGE + value: "$(params.IMAGE)" + - name: PARAMS_IMAGE_SCRIPTS_URL + value: "$(params.IMAGE_SCRIPTS_URL)" + - name: PARAMS_CONTEXT + value: "$(params.CONTEXT)" + - name: PARAMS_FORMAT + value: "$(params.FORMAT)" + - name: PARAMS_STORAGE_DRIVER + value: "$(params.STORAGE_DRIVER)" + - name: PARAMS_BUILD_EXTRA_ARGS + value: "$(params.BUILD_EXTRA_ARGS)" + - name: PARAMS_PUSH_EXTRA_ARGS + value: "$(params.PUSH_EXTRA_ARGS)" + - name: PARAMS_SKIP_PUSH + value: "$(params.SKIP_PUSH)" + - name: PARAMS_TLS_VERIFY + value: "$(params.TLS_VERIFY)" + - name: PARAMS_VERBOSE + value: "$(params.VERBOSE)" + - name: WORKSPACES_SOURCE_BOUND + value: "$(workspaces.source.bound)" + - name: WORKSPACES_SOURCE_PATH + value: "$(workspaces.source.path)" + - name: WORKSPACES_DOCKERCONFIG_BOUND + value: "$(workspaces.dockerconfig.bound)" + - name: WORKSPACES_DOCKERCONFIG_PATH + value: "$(workspaces.dockerconfig.path)" + - name: RESULTS_IMAGE_URL_PATH + value: "$(results.IMAGE_URL.path)" + - name: RESULTS_IMAGE_DIGEST_PATH + value: "$(results.IMAGE_DIGEST.path)" + + steps: + - name: load-scripts + image: registry.access.redhat.com/ubi8-minimal:8.9 + workingDir: /scripts + script: | + set -e + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgV3JhcHBlciBhcm91bmQgImJ1aWxkYWggYnVkIiB0byBidWlsZCBhbmQgcHVzaCBhIGNvbnRhaW5lciBpbWFnZSBiYXNlZCBvbiBhIERvY2tlcmZpbGUuCiMKCnNob3B0IC1zIGluaGVyaXRfZXJyZXhpdApzZXQgLWV1IC1vIHBpcGVmYWlsCgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvY29tbW9uLnNoIgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvYnVpbGRhaC1jb21tb24uc2giCgpmdW5jdGlvbiBfYnVpbGRhaCgpIHsKICAgIGJ1aWxkYWggXAogICAgICAgIC0tc3RvcmFnZS1kcml2ZXI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSfSIgXAogICAgICAgIC0tdGxzLXZlcmlmeT0iJHtQQVJBTVNfVExTX1ZFUklGWX0iIFwKICAgICAgICAkeyp9Cn0KCiMKIyBQcmVwYXJlCiMKCiMgbWFraW5nIHN1cmUgdGhlIHJlcXVpcmVkIHdvcmtzcGFjZSAic291cmNlIiBpcyBib3VuZGVkLCB3aGljaCBtZWFucyBpdHMgdm9sdW1lIGlzIGN1cnJlbnRseSBtb3VudGVkCiMgYW5kIHJlYWR5IHRvIHVzZQpwaGFzZSAiSW5zcGVjdGluZyBzb3VyY2Ugd29ya3NwYWNlICcke1dPUktTUEFDRVNfU09VUkNFX1BBVEh9JyAoUFdEPScke1BXRH0nKSIKW1sgIiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkR9IiAhPSAidHJ1ZSIgXV0gJiYKICAgIGZhaWwgIldvcmtzcGFjZSAnc291cmNlJyBpcyBub3QgYm91bmRlZCIKCnBoYXNlICJBc3NlcnRpbmcgdGhlIGRvY2tlcmZpbGUvY29udGFpbmVyZmlsZSAnJHtET0NLRVJGSUxFX0ZVTEx9JyBleGlzdHMiCltbICEgLWYgIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgIkRvY2tlcmZpbGUgbm90IGZvdW5kIGF0OiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCnBoYXNlICJJbnNwZWN0aW5nIGNvbnRleHQgJyR7UEFSQU1TX0NPTlRFWFR9JyIKW1sgISAtZCAiJHtQQVJBTVNfQ09OVEVYVH0iIF1dICYmCiAgICBmYWlsICJDT05URVhUIHBhcmFtIGlzIG5vdCBmb3VuZCBhdCAnJHtQQVJBTVNfQ09OVEVYVH0nLCBvbiBzb3VyY2Ugd29ya3NwYWNlIgoKIyBIYW5kbGUgb3B0aW9uYWwgZG9ja2VyY29uZmlnIHNlY3JldAppZiBbWyAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19CT1VORH0iID09ICJ0cnVlIiBdXTsgdGhlbgoKICAgICMgaWYgY29uZmlnLmpzb24gZXhpc3RzIGF0IHdvcmtzcGFjZSByb290LCB3ZSB1c2UgdGhhdAogICAgaWYgdGVzdCAtZiAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfS9jb25maWcuanNvbiI7IHRoZW4KICAgICAgICBleHBvcnQgRE9DS0VSX0NPTkZJRz0iJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfSIKCiAgICAgICAgIyBlbHNlIHdlIGxvb2sgZm9yIC5kb2NrZXJjb25maWdqc29uIGF0IHRoZSByb290CiAgICBlbGlmIHRlc3QgLWYgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iOyB0aGVuCiAgICAgICAgY3AgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iICIkSE9NRS8uZG9ja2VyL2NvbmZpZy5qc29uIgogICAgICAgIGV4cG9ydCBET0NLRVJfQ09ORklHPSIkSE9NRS8uZG9ja2VyIgoKICAgICAgICAjIG5lZWQgdG8gZXJyb3Igb3V0IGlmIG5laXRoZXIgZmlsZXMgYXJlIHByZXNlbnQKICAgIGVsc2UKICAgICAgICBlY2hvICJuZWl0aGVyICdjb25maWcuanNvbicgbm9yICcuZG9ja2VyY29uZmlnanNvbicgZm91bmQgYXQgd29ya3NwYWNlIHJvb3QiCiAgICAgICAgZXhpdCAxCiAgICBmaQpmaQoKIwojIEJ1aWxkCiMKCnBoYXNlICJCdWlsZGluZyAnJHtQQVJBTVNfSU1BR0V9JyBiYXNlZCBvbiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCltbIC1uICIke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX0JVSUxEX0VYVFJBX0FSR1N9JyIKCl9idWlsZGFoIGJ1ZCAke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSBcCiAgICAtLW5vLWNhY2hlIFwKICAgIC0tZmlsZT0iJHtET0NLRVJGSUxFX0ZVTEx9IiBcCiAgICAtLXRhZz0iJHtQQVJBTVNfSU1BR0V9IiBcCiAgICAke1BBUkFNU19DT05URVhUfQoKaWYgW1sgIiR7UEFSQU1TX1NLSVBfUFVTSH0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgcGhhc2UgIlNraXBwaW5nIHB1c2hpbmcgJyR7UEFSQU1TX0lNQUdFfScgdG8gdGhlIGNvbnRhaW5lciByZWdpc3RyeSEiCiAgICBleGl0IDAKZmkKCiMKIyBQdXNoCiMKCnBoYXNlICJQdXNoaW5nICcke1BBUkFNU19JTUFHRX0nIHRvIHRoZSBjb250YWluZXIgcmVnaXN0cnkiCgpbWyAtbiAiJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX1BVU0hfRVhUUkFfQVJHU30nIgoKIyB0ZW1wb3JhcnkgZmlsZSB0byBzdG9yZSB0aGUgaW1hZ2UgZGlnZXN0LCBpbmZvcm1hdGlvbiBvbmx5IG9idGFpbmVkIGFmdGVyIHB1c2hpbmcgdGhlIGltYWdlIHRvIHRoZQojIGNvbnRhaW5lciByZWdpc3RyeQpkZWNsYXJlIC1yIGRpZ2VzdF9maWxlPSIvdG1wL2J1aWxkYWgtZGlnZXN0LnR4dCIKCl9idWlsZGFoIHB1c2ggJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSBcCiAgICAtLWRpZ2VzdGZpbGU9IiR7ZGlnZXN0X2ZpbGV9IiBcCiAgICAke1BBUkFNU19JTUFHRX0gXAogICAgZG9ja2VyOi8vJHtQQVJBTVNfSU1BR0V9CgojCiMgUmVzdWx0cwojCgpwaGFzZSAiSW5zcGVjdGluZyBkaWdlc3QgcmVwb3J0ICgnJHtkaWdlc3RfZmlsZX0nKSIKCltbICEgLXIgIiR7ZGlnZXN0X2ZpbGV9IiBdXSAmJgogICAgZmFpbCAiVW5hYmxlIHRvIGZpbmQgZGlnZXN0LWZpbGUgYXQgJyR7ZGlnZXN0X2ZpbGV9JyIKCmRlY2xhcmUgLXIgZGlnZXN0X3N1bT0iJChjYXQgJHtkaWdlc3RfZmlsZX0pIgoKW1sgLXogIiR7ZGlnZXN0X3N1bX0iIF1dICYmCiAgICBmYWlsICJEaWdlc3QgZmlsZSAnJHtkaWdlc3RfZmlsZX0nIGlzIGVtcHR5ISIKCnBoYXNlICJTdWNjZXNzZnVseSBidWlsdCBjb250YWluZXIgaW1hZ2UgJyR7UEFSQU1TX0lNQUdFfScgKCcke2RpZ2VzdF9zdW19JykiCmVjaG8gLW4gIiR7UEFSQU1TX0lNQUdFfSIgfCB0ZWUgJHtSRVNVTFRTX0lNQUdFX1VSTF9QQVRIfQplY2hvIC1uICIke2RpZ2VzdF9zdW19IiB8IHRlZSAke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEh9Cg==" |base64 -d >buildah-bud.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKZGVjbGFyZSAtcnggUEFSQU1TX0lNQUdFPSIke1BBUkFNU19JTUFHRTotfSIKZGVjbGFyZSAtcnggUEFSQU1TX0RPQ0tFUkZJTEU9IiR7UEFSQU1TX0RPQ0tFUkZJTEU6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19DT05URVhUPSIke1BBUkFNU19DT05URVhUOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU1RPUkFHRV9EUklWRVI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfQlVJTERfRVhUUkFfQVJHUz0iJHtQQVJBTVNfQlVJTERfRVhUUkFfQVJHUzotfSIKZGVjbGFyZSAtcnggUEFSQU1TX1BVU0hfRVhUUkFfQVJHUz0iJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU0tJUF9QVVNIPSIke1BBUkFNU19TS0lQX1BVU0g6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19UTFNfVkVSSUZZPSIke1BBUkFNU19UTFNfVkVSSUZZOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfVkVSQk9TRT0iJHtQQVJBTVNfVkVSQk9TRTotfSIKCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfU09VUkNFX1BBVEg9IiR7V09SS1NQQUNFU19TT1VSQ0VfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ9IiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ6LX0iCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfRE9DS0VSQ09ORklHX1BBVEg9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ6LX0iCgpkZWNsYXJlIC1yeCBSRVNVTFRTX0lNQUdFX0RJR0VTVF9QQVRIPSIke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEg6LX0iCmRlY2xhcmUgLXJ4IFJFU1VMVFNfSU1BR0VfVVJMX1BBVEg9IiR7UkVTVUxUU19JTUFHRV9VUkxfUEFUSDotfSIKCiMKIyBEb2NrZXJmaWxlCiMKCiMgZXhwb3NpbmcgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGFpbmVyIGZpbGUsIHdoaWNoIGJ5IGRlZmF1bHQgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBwcmltYXJ5CiMgd29ya3NwYWNlLCB0byByZWNlaXZlIGEgZGlmZmVyZW50IGNvbnRhaW5lci1maWxlIGxvY2F0aW9uCmRlY2xhcmUgLXIgZG9ja2VyZmlsZV9vbl93cz0iJHtXT1JLU1BBQ0VTX1NPVVJDRV9QQVRIfS8ke1BBUkFNU19ET0NLRVJGSUxFfSIKZGVjbGFyZSAteCBET0NLRVJGSUxFX0ZVTEw9IiR7RE9DS0VSRklMRV9GVUxMOi0ke2RvY2tlcmZpbGVfb25fd3N9fSIKCiMKIyBBc3NlcnRpbmcgRW52aXJvbm1lbnQKIwoKW1sgLXogIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgInVuYWJsZSB0byBmaW5kIHRoZSBEb2NrZXJmaWxlLCBET0NLRVJGSUxFIG1heSBoYXZlIGFuIGluY29ycmVjdCBsb2NhdGlvbiIKCmV4cG9ydGVkX29yX2ZhaWwgXAogICAgV09SS1NQQUNFU19TT1VSQ0VfUEFUSCBcCiAgICBQQVJBTVNfSU1BR0UKCiMKIyBWZXJib3NlIE91dHB1dAojCgppZiBbWyAiJHtQQVJBTVNfVkVSQk9TRX0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgc2V0IC14CmZpCg==" |base64 -d >buildah-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + chmod +x buildah-*.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgVXNlcyB0aGUgRG9ja2VyZmlsZSBnZW5lcmF0ZWQgYnkgczJpIHRvIGFzc2VtYmxlIGEgbmV3IGNvbnRhaW5lciBpbWFnZSB1c2luZyBidWlsZGFoLgojCgpzaG9wdCAtcyBpbmhlcml0X2VycmV4aXQKc2V0IC1ldSAtbyBwaXBlZmFpbAoKZGVjbGFyZSAtciBjdXJfZGlyPSIkKGRpcm5hbWUgJHtCQVNIX1NPVVJDRVswXX0pIgoKc291cmNlICIke2N1cl9kaXJ9L2NvbW1vbi5zaCIKc291cmNlICIke2N1cl9kaXJ9L3MyaS1jb21tb24uc2giCgojIGxvYWRpbmcgYnVpbGRhaCBzZXR0aW5ncyBvdmVyd3JpdHRpbmcgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGFpbmVyIGZpbGUKZGVjbGFyZSAteCBET0NLRVJGSUxFX0ZVTEw9IiR7UzJJX0RPQ0tFUkZJTEV9Igpzb3VyY2UgIiR7Y3VyX2Rpcn0vYnVpbGRhaC1jb21tb24uc2giCgpwaGFzZSAiQnVpbGRpbmcgdGhlIERvY2tlcmZpbGUgJyR7RE9DS0VSRklMRV9GVUxMfScgd2l0aCBidWlsZGFoIgpleGVjICR7Y3VyX2Rpcn0vYnVpbGRhaC1idWQuc2gK" |base64 -d >s2i-build.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0YXJnZXQgaW1hZ2UgbmFtZSAoZnVsbHkgcXVhbGlmaWVkKSB0byBiZSBidWlsZCB3aXRoIHMyaSwgcmVkZWNsYXJpbmcgdGhlIHNhbWUgcGFyYW1ldGVyIG5hbWUgdGhhbgojIGJ1aWxkYWggdGFzayB1c2VzCmRlY2xhcmUgLXggUEFSQU1TX0lNQUdFPSIke1BBUkFNU19JTUFHRTotfSIKIyBTcGVjaWZ5IGEgVVJMIGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgYXNzZW1ibGUgYW5kIHJ1biBzY3JpcHRzIGZvciB0aGUgYnVpbGRlciBpbWFnZQpkZWNsYXJlIC1yeCBQQVJBTVNfSU1BR0VfU0NSSVBUU19VUkw9IiR7UEFSQU1TX0lNQUdFX1NDUklQVFNfVVJMOi19IgoKIyB2b2x1bWUgbW91bnQgb3IgZGlyZWN0b3J5IHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIGZpbGVzIAojIGxpa2UgZW52LCBEb2NrZXJmaWxlIGFuZCBhbnkgb3RoZXJzIG5lZWRlZCB0byBzdXBwb3J0IHMyaQpkZWNsYXJlIC1yeCBTMklfR0VORVJBVEVfRElSRUNUT1JZPSIke1MySV9HRU5FUkFURV9ESVJFQ1RPUlk6LS9zMmktZ2VuZXJhdGV9IgoKIyBmdWxsIHBhdGggdG8gdGhlIGNvbnRhaW5lciBmaWxlIGdlbmVyYXRlZCBieSBzMmkKZGVjbGFyZSAtcnggUzJJX0RPQ0tFUkZJTEU9IiR7UzJJX0RPQ0tFUkZJTEU6LSR7UzJJX0dFTkVSQVRFX0RJUkVDVE9SWX0vRG9ja2VyZmlsZS5nZW59IgoKIyBmdWxsIHBhdGggdG8gdGhlIGVudiBmaWxlIHVzZWQgd2l0aCB0aGUgLS1lbnZpcm9ubWVudC1maWxlIHBhcmFtZXRlciBvZiBzMmkKZGVjbGFyZSAtcnggUzJJX0VOVklST05NRU5UX0ZJTEU9IiR7UzJJX0VOVklST05NRU5UX0ZJTEU6LSR7UzJJX0dFTkVSQVRFX0RJUkVDVE9SWX0vZW52fSIKCiMKIyBBc3NlcnRpbmcgRW52aXJvbm1lbnQKIwoKZXhwb3J0ZWRfb3JfZmFpbCBcCiAgICBXT1JLU1BBQ0VTX1NPVVJDRV9QQVRIIFwKICAgIFBBUkFNU19JTUFHRQoKIwojIFZlcmJvc2UgT3V0cHV0CiMKCmRlY2xhcmUgLXggUzJJX0xPR0xFVkVMPSIwIgoKaWYgW1sgIiR7UEFSQU1TX1ZFUkJPU0V9IiA9PSAidHJ1ZSIgXV07IHRoZW4KICAgIFMySV9MT0dMRVZFTD0iMiIKICAgIHNldCAteApmaQo=" |base64 -d >s2i-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgVXNlcyBzMmkgdG8gZ2VuZXJhdGUgdGhlIHJlcGVzY3RpdmUgQ29udGFpbmVyZmlsZSBiYXNlZCBvbiB0aGUgaW5mb21yZWQgYnVpbGRlci4gVGhlIENvbnRhaW5lcmZpbGUKIyBpcyBzdG9yZWQgb24gYSB0ZW1wb3JhcnkgbG9jYXRpb24uCiMKCnNob3B0IC1zIGluaGVyaXRfZXJyZXhpdApzZXQgLWV1IC1vIHBpcGVmYWlsCgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvY29tbW9uLnNoIgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvczJpLWNvbW1vbi5zaCIKCiMgczJpIGJ1aWxkZXIgaW1hZ2UgbmFtZSAoZnVsbHkgcXVhbGlmaWVkKQpkZWNsYXJlIC1yeCBTMklfQlVJTERFUl9JTUFHRT0iJHtTMklfQlVJTERFUl9JTUFHRTotfSIKCiMgdGFrZXMgdGhlIHZhbHVlcyBpbiBhcmd1bWVudCBFTlZfVkFSUyBhbmQgY3JlYXRlcyBhbiBhcnJheSB1c2luZyB0aG9zZSB2YWx1ZXMKZGVjbGFyZSAtcmEgRU5WX1ZBUlM9KCR7QH0pCgojIHJlLXVzaW5nIHRoZSBzYW1lIHBhcmFtZXRlcnMgdGhhbiBidWlsZGFoLCBzMmkgbmVlZHMgYnVpbGRhaCBhYmlsaXRpZXMgdG8gY3JlYXRlIHRoZSBmaW5hbAojIGNvbnRhaW5lciBpbWFnZSBiYXNlZCBvbiB3aGF0IHMyaSBnZW5lcmF0ZXMKc291cmNlICIkKGRpcm5hbWUgJHtCQVNIX1NPVVJDRVswXX0pL2J1aWxkYWgtY29tbW9uLnNoIgoKIwojIFByZXBhcmUKIwoKIyBtYWtpbmcgc3VyZSB0aGUgcmVxdWlyZWQgd29ya3NwYWNlICJzb3VyY2UiIGlzIGJvdW5kZWQsIHdoaWNoIG1lYW5zIGl0cyB2b2x1bWUgaXMgY3VycmVudGx5IG1vdW50ZWQKIyBhbmQgcmVhZHkgdG8gdXNlCnBoYXNlICJJbnNwZWN0aW5nIHNvdXJjZSB3b3Jrc3BhY2UgJyR7V09SS1NQQUNFU19TT1VSQ0VfUEFUSH0nIChQV0Q9JyR7UFdEfScpIgpbWyAiJHtXT1JLU1BBQ0VTX1NPVVJDRV9CT1VORH0iICE9ICJ0cnVlIiBdXSAmJgogICAgZmFpbCAiV29ya3NwYWNlICdzb3VyY2UnIGlzIG5vdCBib3VuZGVkIgoKcGhhc2UgIkluc3BlY3RpbmcgY29udGV4dCAnJHtQQVJBTVNfQ09OVEVYVH0nIgpbWyAhIC1kICIke1BBUkFNU19DT05URVhUfSIgXV0gJiYKICAgIGZhaWwgIkFwcGxpY2F0aW9uIHNvdXJjZSBjb2RlIGRpcmVjdG9yeSBub3QgZm91bmQgYXQgJyR7UEFSQU1TX0NPTlRFWFR9JyIKCnBoYXNlICJBZGRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byAnJHtTMklfRU5WSVJPTk1FTlRfRklMRX0nIgoKIyBhZGQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFyZSBzZW50IGFzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZnJvbSBFTlZfVkFSUyBwYXJhbWV0ZXIKdG91Y2ggIiR7UzJJX0VOVklST05NRU5UX0ZJTEV9IgppZiBbICR7I0VOVl9WQVJTW0BdfSAtZ3QgMCBdOyB0aGVuCiAgICBmb3IgZW52X3ZhciBpbiAiJHtFTlZfVkFSU1tAXX0iOyBkbwogICAgICAgIGVjaG8gIiR7ZW52X3Zhcn0iID4+ICIke1MySV9FTlZJUk9OTUVOVF9GSUxFfSIKICAgIGRvbmUKZmkKCiMKIyBTMkkgR2VuZXJhdGUKIwoKcGhhc2UgIkdlbmVyYXRpbmcgdGhlIERvY2tlcmZpbGUgZm9yIFMySSBidWlsZGVyIGltYWdlICcke1MySV9CVUlMREVSX0lNQUdFfSciCnMyaSAtLWxvZ2xldmVsICIke1MySV9MT0dMRVZFTH0iIFwKICAgIGJ1aWxkICIke1BBUkFNU19DT05URVhUfSIgIiR7UzJJX0JVSUxERVJfSU1BR0V9IiBcCiAgICAgICAgLS1pbWFnZS1zY3JpcHRzLXVybCAiJHtQQVJBTVNfSU1BR0VfU0NSSVBUU19VUkx9IiBcCiAgICAgICAgLS1hcy1kb2NrZXJmaWxlICIke1MySV9ET0NLRVJGSUxFfSIgXAogICAgICAgIC0tZW52aXJvbm1lbnQtZmlsZSAiJHtTMklfRU5WSVJPTk1FTlRfRklMRX0iCgpwaGFzZSAiSW5zcGVjdGluZyB0aGUgRG9ja2VyZmlsZSBnZW5lcmF0ZWQgYXQgJyR7UzJJX0RPQ0tFUkZJTEV9JyIKW1sgISAtZiAiJHtTMklfRE9DS0VSRklMRX0iIF1dICYmCiAgICBmYWlsICJHZW5lcmF0ZWQgRG9ja2VyZmlsZSBpcyBub3QgZm91bmQhIgoKc2V0ICt4CnBoYXNlICJHZW5lcmF0ZWQgRG9ja2VyZmlsZSBwYXlsb2FkIgplY2hvIC1lbiAiPj4+ICR7UzJJX0RPQ0tFUkZJTEV9XG4kKGNhdCAke1MySV9ET0NLRVJGSUxFfSlcbjw8PCBFT0ZcbiIK" |base64 -d >s2i-generate.sh + chmod +x s2i-*.sh + volumeMounts: + - name: scripts-dir + mountPath: /scripts + + - name: s2i-generate + image: registry.access.redhat.com/source-to-image/source-to-image-rhel8:v1.3.9-6 + workingDir: $(workspaces.source.path) + env: + - name: S2I_BUILDER_IMAGE + value: registry.access.redhat.com/ubi8/go-toolset:1.19.10-3 + command: + - /scripts/s2i-generate.sh + args: + - "$(params.ENV_VARS[*])" + securityContext: + capabilities: + add: ["SETFCAP"] + volumeMounts: + - name: scripts-dir + mountPath: /scripts + - name: s2i-generate-dir + mountPath: /s2i-generate + + - name: s2i-build + image: registry.access.redhat.com/ubi8/buildah:8.9 + workingDir: /s2i-generate + command: + - /scripts/s2i-build.sh + securityContext: + capabilities: + add: ["SETFCAP"] + volumeMounts: + - name: scripts-dir + mountPath: /scripts + - name: s2i-generate-dir + mountPath: /s2i-generate + + volumes: + - name: scripts-dir + emptyDir: {} + - name: s2i-generate-dir + emptyDir: {} diff --git a/tasks/task-s2i-java/0.2.0/README.md b/tasks/task-s2i-java/0.2.0/README.md new file mode 100644 index 00000000..b86765b3 --- /dev/null +++ b/tasks/task-s2i-java/0.2.0/README.md @@ -0,0 +1,83 @@ +Source-to-Image Tekton Tasks (`s2i`) +------------------------------------ + +# Abstract + +Describes the Tekton Tasks supporting Source-to-Image for various ecosystems. + +# `s2i` Builder Images + +This section we explain each language ecosystem comes with a predefined set of builder images, supported by Red Hat. + +The `s2i` Task helps in building reproducible container images from source code i.e. task for supporting s2i functionality. + +The s2i Task has been customized with builder images specific to various languages and have been named appropriately as follows: + +| Task Name | Builder Image Used | +| ---------- | ---------------------------------------------------------------------- | +| s2i-python | http://registry.access.redhat.com/ubi8/python-39:latest | +| s2i-go | http://registry.access.redhat.com/ubi8/go-toolset:1.19.10-3 | +| s2i-java | http://registry.access.redhat.com/ubi8/openjdk-11:latest | +| s2i-dotnet | http://registry.access.redhat.com/ubi8/dotnet-60:6.0-37.20230802191230 | +| s2i-php | http://registry.access.redhat.com/ubi9/php-81:1-29 | +| s2i-nodejs | http://registry.access.redhat.com/ubi8/nodejs-18:latest | +| s2i-perl | http://registry.access.redhat.com/ubi9/perl-532:1-91 | +| s2i-ruby | http://registry.access.redhat.com/ubi9/ruby-31:1-50 | + +In case, the above builder images associated with the languages aren’t satisfactory for your source code, you can change it using appropriate parameter. + +# Usage + +Please, consider the usage example below: + +```yaml +--- +apiVersion: tekton.dev/v1beta1 +kind: TaskRun +metadata: {} +spec: + taskRef: + name: s2i-python + params: + - name: IMAGE + value: registry.registry.svc.cluster.local:32222/task-containers/task-s2i-python:latest +``` + +In case the Container Registry requires authentication, please consider the [Tekton Pipelines documentation][tektonPipelineAuth]. In a nutshell, you need to create a Kubernetes Secret describing the following attributes: + +```bash +kubectl create secret docker-registry imagestreams \ + --docker-server="image-registry.openshift-image-registry.svc:5000" \ + --docker-username="${REGISTRY_USERNAME}" \ + --docker-password="${REGISTRY_TOKEN}" +``` + +Then make sure the Secret is linked with the Service-Account running the `TaskRun`/`PipelineRun`. + +## Workspaces + +All of the s2i tasks use the `source` workspace which is meant to contain the Application source code, which acts as the build context for S2I workflow. + + +## Params + +| Param | Type | Default | Description | +| ----------------- | ------ | ------------------------ | ------------------------------------------------------------------------- | +| IMAGE | string | (required) | Fully qualified container image name to be built by s2i | +| IMAGE_SCRIPTS_URL | string | image:///usr/libexec/s2i | URL containing the default assemble and run scripts for the builder image | +| ENV_VARS | array | [] | Array containing string of Environment Variables as "KEY=VALUE” | +| SUBDIRECTORY | string | . | Relative subdirectory to the source Workspace for the build-context. | +| STORAGE_DRIVER | string | overlay | Set buildah storage driver to reflect the currrent cluster node's | +| settings. | +| BUILD_EXTRA_ARGS | string | | Extra parameters passed for the build command when building images. | +| PUSH_EXTRA_ARGS | string | | Extra parameters passed for the push command when pushing images. | +| SKIP_PUSH | string | false | Skip pushing the image to the container registry. | +| TLS_VERIFY | string | true | Sets the TLS verification flag, true is recommended. | +| VERBOSE | string | false | Turns on verbose logging, all commands executed will be printed out. | + +## Results + +| Result | Description | +| ------------ | ------------------------------- | +| IMAGE_URL | Fully qualified image name. | +| IMAGE_DIGEST | Digest of the image just built. | diff --git a/tasks/task-s2i-java/0.2.0/task-s2i-java.yaml b/tasks/task-s2i-java/0.2.0/task-s2i-java.yaml new file mode 100644 index 00000000..a5ca8ab2 --- /dev/null +++ b/tasks/task-s2i-java/0.2.0/task-s2i-java.yaml @@ -0,0 +1,179 @@ +--- +# Source: task-containers/templates/task-s2i-java.yaml +apiVersion: tekton.dev/v1beta1 +kind: Task +metadata: + name: s2i-java + labels: + app.kubernetes.io/version: 0.2.0 + annotations: + tekton.dev/categories: containers + tekton.dev/pipelines.minVersion: 0.41.0 + tekton.dev/tags: containers +spec: + description: | + Builds the source code using the s2i's Java builder-image + "registry.access.redhat.com/ubi8/openjdk-11:latest". + + + workspaces: + - name: source + optional: false + description: | + Application source code, the build context for S2I workflow. + + params: + - name: IMAGE + type: string + description: | + Fully qualified container image name to be built by s2i. + - name: IMAGE_SCRIPTS_URL + type: string + default: image:///usr/libexec/s2i + description: | + Specify a URL containing the default assemble and run scripts for the builder image + - name: ENV_VARS + type: array + default: [] + description: | + Array containing string of Environment Variables as "KEY=VALUE" + - name: CONTEXT + type: string + default: "." + description: | + Path to the directory to use as context. + - name: STORAGE_DRIVER + type: string + default: vfs + description: | + Set buildah storage driver to reflect the currrent cluster node's + settings. + - name: FORMAT + description: The format of the built container, oci or docker + default: "oci" + - name: BUILD_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the build command when building images. + - name: PUSH_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the push command when pushing images. + - name: SKIP_PUSH + default: "false" + description: | + Skip pushing the image to the container registry. + - name: TLS_VERIFY + type: string + default: "true" + description: | + Sets the TLS verification flag, `true` is recommended. + - name: VERBOSE + type: string + default: "false" + description: | + Turns on verbose logging, all commands executed will be printed out. + + results: + - name: IMAGE_URL + description: | + Fully qualified image name. + - name: IMAGE_DIGEST + description: | + Digest of the image just built. + + stepTemplate: + env: + + - name: PARAMS_IMAGE + value: "$(params.IMAGE)" + - name: PARAMS_IMAGE_SCRIPTS_URL + value: "$(params.IMAGE_SCRIPTS_URL)" + - name: PARAMS_CONTEXT + value: "$(params.CONTEXT)" + - name: PARAMS_FORMAT + value: "$(params.FORMAT)" + - name: PARAMS_STORAGE_DRIVER + value: "$(params.STORAGE_DRIVER)" + - name: PARAMS_BUILD_EXTRA_ARGS + value: "$(params.BUILD_EXTRA_ARGS)" + - name: PARAMS_PUSH_EXTRA_ARGS + value: "$(params.PUSH_EXTRA_ARGS)" + - name: PARAMS_SKIP_PUSH + value: "$(params.SKIP_PUSH)" + - name: PARAMS_TLS_VERIFY + value: "$(params.TLS_VERIFY)" + - name: PARAMS_VERBOSE + value: "$(params.VERBOSE)" + - name: WORKSPACES_SOURCE_BOUND + value: "$(workspaces.source.bound)" + - name: WORKSPACES_SOURCE_PATH + value: "$(workspaces.source.path)" + - name: WORKSPACES_DOCKERCONFIG_BOUND + value: "$(workspaces.dockerconfig.bound)" + - name: WORKSPACES_DOCKERCONFIG_PATH + value: "$(workspaces.dockerconfig.path)" + - name: RESULTS_IMAGE_URL_PATH + value: "$(results.IMAGE_URL.path)" + - name: RESULTS_IMAGE_DIGEST_PATH + value: "$(results.IMAGE_DIGEST.path)" + + steps: + - name: load-scripts + image: registry.access.redhat.com/ubi8-minimal:8.9 + workingDir: /scripts + script: | + set -e + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgV3JhcHBlciBhcm91bmQgImJ1aWxkYWggYnVkIiB0byBidWlsZCBhbmQgcHVzaCBhIGNvbnRhaW5lciBpbWFnZSBiYXNlZCBvbiBhIERvY2tlcmZpbGUuCiMKCnNob3B0IC1zIGluaGVyaXRfZXJyZXhpdApzZXQgLWV1IC1vIHBpcGVmYWlsCgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvY29tbW9uLnNoIgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvYnVpbGRhaC1jb21tb24uc2giCgpmdW5jdGlvbiBfYnVpbGRhaCgpIHsKICAgIGJ1aWxkYWggXAogICAgICAgIC0tc3RvcmFnZS1kcml2ZXI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSfSIgXAogICAgICAgIC0tdGxzLXZlcmlmeT0iJHtQQVJBTVNfVExTX1ZFUklGWX0iIFwKICAgICAgICAkeyp9Cn0KCiMKIyBQcmVwYXJlCiMKCiMgbWFraW5nIHN1cmUgdGhlIHJlcXVpcmVkIHdvcmtzcGFjZSAic291cmNlIiBpcyBib3VuZGVkLCB3aGljaCBtZWFucyBpdHMgdm9sdW1lIGlzIGN1cnJlbnRseSBtb3VudGVkCiMgYW5kIHJlYWR5IHRvIHVzZQpwaGFzZSAiSW5zcGVjdGluZyBzb3VyY2Ugd29ya3NwYWNlICcke1dPUktTUEFDRVNfU09VUkNFX1BBVEh9JyAoUFdEPScke1BXRH0nKSIKW1sgIiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkR9IiAhPSAidHJ1ZSIgXV0gJiYKICAgIGZhaWwgIldvcmtzcGFjZSAnc291cmNlJyBpcyBub3QgYm91bmRlZCIKCnBoYXNlICJBc3NlcnRpbmcgdGhlIGRvY2tlcmZpbGUvY29udGFpbmVyZmlsZSAnJHtET0NLRVJGSUxFX0ZVTEx9JyBleGlzdHMiCltbICEgLWYgIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgIkRvY2tlcmZpbGUgbm90IGZvdW5kIGF0OiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCnBoYXNlICJJbnNwZWN0aW5nIGNvbnRleHQgJyR7UEFSQU1TX0NPTlRFWFR9JyIKW1sgISAtZCAiJHtQQVJBTVNfQ09OVEVYVH0iIF1dICYmCiAgICBmYWlsICJDT05URVhUIHBhcmFtIGlzIG5vdCBmb3VuZCBhdCAnJHtQQVJBTVNfQ09OVEVYVH0nLCBvbiBzb3VyY2Ugd29ya3NwYWNlIgoKIyBIYW5kbGUgb3B0aW9uYWwgZG9ja2VyY29uZmlnIHNlY3JldAppZiBbWyAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19CT1VORH0iID09ICJ0cnVlIiBdXTsgdGhlbgoKICAgICMgaWYgY29uZmlnLmpzb24gZXhpc3RzIGF0IHdvcmtzcGFjZSByb290LCB3ZSB1c2UgdGhhdAogICAgaWYgdGVzdCAtZiAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfS9jb25maWcuanNvbiI7IHRoZW4KICAgICAgICBleHBvcnQgRE9DS0VSX0NPTkZJRz0iJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfSIKCiAgICAgICAgIyBlbHNlIHdlIGxvb2sgZm9yIC5kb2NrZXJjb25maWdqc29uIGF0IHRoZSByb290CiAgICBlbGlmIHRlc3QgLWYgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iOyB0aGVuCiAgICAgICAgY3AgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iICIkSE9NRS8uZG9ja2VyL2NvbmZpZy5qc29uIgogICAgICAgIGV4cG9ydCBET0NLRVJfQ09ORklHPSIkSE9NRS8uZG9ja2VyIgoKICAgICAgICAjIG5lZWQgdG8gZXJyb3Igb3V0IGlmIG5laXRoZXIgZmlsZXMgYXJlIHByZXNlbnQKICAgIGVsc2UKICAgICAgICBlY2hvICJuZWl0aGVyICdjb25maWcuanNvbicgbm9yICcuZG9ja2VyY29uZmlnanNvbicgZm91bmQgYXQgd29ya3NwYWNlIHJvb3QiCiAgICAgICAgZXhpdCAxCiAgICBmaQpmaQoKIwojIEJ1aWxkCiMKCnBoYXNlICJCdWlsZGluZyAnJHtQQVJBTVNfSU1BR0V9JyBiYXNlZCBvbiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCltbIC1uICIke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX0JVSUxEX0VYVFJBX0FSR1N9JyIKCl9idWlsZGFoIGJ1ZCAke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSBcCiAgICAtLW5vLWNhY2hlIFwKICAgIC0tZmlsZT0iJHtET0NLRVJGSUxFX0ZVTEx9IiBcCiAgICAtLXRhZz0iJHtQQVJBTVNfSU1BR0V9IiBcCiAgICAke1BBUkFNU19DT05URVhUfQoKaWYgW1sgIiR7UEFSQU1TX1NLSVBfUFVTSH0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgcGhhc2UgIlNraXBwaW5nIHB1c2hpbmcgJyR7UEFSQU1TX0lNQUdFfScgdG8gdGhlIGNvbnRhaW5lciByZWdpc3RyeSEiCiAgICBleGl0IDAKZmkKCiMKIyBQdXNoCiMKCnBoYXNlICJQdXNoaW5nICcke1BBUkFNU19JTUFHRX0nIHRvIHRoZSBjb250YWluZXIgcmVnaXN0cnkiCgpbWyAtbiAiJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX1BVU0hfRVhUUkFfQVJHU30nIgoKIyB0ZW1wb3JhcnkgZmlsZSB0byBzdG9yZSB0aGUgaW1hZ2UgZGlnZXN0LCBpbmZvcm1hdGlvbiBvbmx5IG9idGFpbmVkIGFmdGVyIHB1c2hpbmcgdGhlIGltYWdlIHRvIHRoZQojIGNvbnRhaW5lciByZWdpc3RyeQpkZWNsYXJlIC1yIGRpZ2VzdF9maWxlPSIvdG1wL2J1aWxkYWgtZGlnZXN0LnR4dCIKCl9idWlsZGFoIHB1c2ggJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSBcCiAgICAtLWRpZ2VzdGZpbGU9IiR7ZGlnZXN0X2ZpbGV9IiBcCiAgICAke1BBUkFNU19JTUFHRX0gXAogICAgZG9ja2VyOi8vJHtQQVJBTVNfSU1BR0V9CgojCiMgUmVzdWx0cwojCgpwaGFzZSAiSW5zcGVjdGluZyBkaWdlc3QgcmVwb3J0ICgnJHtkaWdlc3RfZmlsZX0nKSIKCltbICEgLXIgIiR7ZGlnZXN0X2ZpbGV9IiBdXSAmJgogICAgZmFpbCAiVW5hYmxlIHRvIGZpbmQgZGlnZXN0LWZpbGUgYXQgJyR7ZGlnZXN0X2ZpbGV9JyIKCmRlY2xhcmUgLXIgZGlnZXN0X3N1bT0iJChjYXQgJHtkaWdlc3RfZmlsZX0pIgoKW1sgLXogIiR7ZGlnZXN0X3N1bX0iIF1dICYmCiAgICBmYWlsICJEaWdlc3QgZmlsZSAnJHtkaWdlc3RfZmlsZX0nIGlzIGVtcHR5ISIKCnBoYXNlICJTdWNjZXNzZnVseSBidWlsdCBjb250YWluZXIgaW1hZ2UgJyR7UEFSQU1TX0lNQUdFfScgKCcke2RpZ2VzdF9zdW19JykiCmVjaG8gLW4gIiR7UEFSQU1TX0lNQUdFfSIgfCB0ZWUgJHtSRVNVTFRTX0lNQUdFX1VSTF9QQVRIfQplY2hvIC1uICIke2RpZ2VzdF9zdW19IiB8IHRlZSAke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEh9Cg==" |base64 -d >buildah-bud.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKZGVjbGFyZSAtcnggUEFSQU1TX0lNQUdFPSIke1BBUkFNU19JTUFHRTotfSIKZGVjbGFyZSAtcnggUEFSQU1TX0RPQ0tFUkZJTEU9IiR7UEFSQU1TX0RPQ0tFUkZJTEU6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19DT05URVhUPSIke1BBUkFNU19DT05URVhUOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU1RPUkFHRV9EUklWRVI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfQlVJTERfRVhUUkFfQVJHUz0iJHtQQVJBTVNfQlVJTERfRVhUUkFfQVJHUzotfSIKZGVjbGFyZSAtcnggUEFSQU1TX1BVU0hfRVhUUkFfQVJHUz0iJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU0tJUF9QVVNIPSIke1BBUkFNU19TS0lQX1BVU0g6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19UTFNfVkVSSUZZPSIke1BBUkFNU19UTFNfVkVSSUZZOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfVkVSQk9TRT0iJHtQQVJBTVNfVkVSQk9TRTotfSIKCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfU09VUkNFX1BBVEg9IiR7V09SS1NQQUNFU19TT1VSQ0VfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ9IiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ6LX0iCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfRE9DS0VSQ09ORklHX1BBVEg9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ6LX0iCgpkZWNsYXJlIC1yeCBSRVNVTFRTX0lNQUdFX0RJR0VTVF9QQVRIPSIke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEg6LX0iCmRlY2xhcmUgLXJ4IFJFU1VMVFNfSU1BR0VfVVJMX1BBVEg9IiR7UkVTVUxUU19JTUFHRV9VUkxfUEFUSDotfSIKCiMKIyBEb2NrZXJmaWxlCiMKCiMgZXhwb3NpbmcgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGFpbmVyIGZpbGUsIHdoaWNoIGJ5IGRlZmF1bHQgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBwcmltYXJ5CiMgd29ya3NwYWNlLCB0byByZWNlaXZlIGEgZGlmZmVyZW50IGNvbnRhaW5lci1maWxlIGxvY2F0aW9uCmRlY2xhcmUgLXIgZG9ja2VyZmlsZV9vbl93cz0iJHtXT1JLU1BBQ0VTX1NPVVJDRV9QQVRIfS8ke1BBUkFNU19ET0NLRVJGSUxFfSIKZGVjbGFyZSAteCBET0NLRVJGSUxFX0ZVTEw9IiR7RE9DS0VSRklMRV9GVUxMOi0ke2RvY2tlcmZpbGVfb25fd3N9fSIKCiMKIyBBc3NlcnRpbmcgRW52aXJvbm1lbnQKIwoKW1sgLXogIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgInVuYWJsZSB0byBmaW5kIHRoZSBEb2NrZXJmaWxlLCBET0NLRVJGSUxFIG1heSBoYXZlIGFuIGluY29ycmVjdCBsb2NhdGlvbiIKCmV4cG9ydGVkX29yX2ZhaWwgXAogICAgV09SS1NQQUNFU19TT1VSQ0VfUEFUSCBcCiAgICBQQVJBTVNfSU1BR0UKCiMKIyBWZXJib3NlIE91dHB1dAojCgppZiBbWyAiJHtQQVJBTVNfVkVSQk9TRX0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgc2V0IC14CmZpCg==" |base64 -d >buildah-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + chmod +x buildah-*.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgVXNlcyB0aGUgRG9ja2VyZmlsZSBnZW5lcmF0ZWQgYnkgczJpIHRvIGFzc2VtYmxlIGEgbmV3IGNvbnRhaW5lciBpbWFnZSB1c2luZyBidWlsZGFoLgojCgpzaG9wdCAtcyBpbmhlcml0X2VycmV4aXQKc2V0IC1ldSAtbyBwaXBlZmFpbAoKZGVjbGFyZSAtciBjdXJfZGlyPSIkKGRpcm5hbWUgJHtCQVNIX1NPVVJDRVswXX0pIgoKc291cmNlICIke2N1cl9kaXJ9L2NvbW1vbi5zaCIKc291cmNlICIke2N1cl9kaXJ9L3MyaS1jb21tb24uc2giCgojIGxvYWRpbmcgYnVpbGRhaCBzZXR0aW5ncyBvdmVyd3JpdHRpbmcgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGFpbmVyIGZpbGUKZGVjbGFyZSAteCBET0NLRVJGSUxFX0ZVTEw9IiR7UzJJX0RPQ0tFUkZJTEV9Igpzb3VyY2UgIiR7Y3VyX2Rpcn0vYnVpbGRhaC1jb21tb24uc2giCgpwaGFzZSAiQnVpbGRpbmcgdGhlIERvY2tlcmZpbGUgJyR7RE9DS0VSRklMRV9GVUxMfScgd2l0aCBidWlsZGFoIgpleGVjICR7Y3VyX2Rpcn0vYnVpbGRhaC1idWQuc2gK" |base64 -d >s2i-build.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0YXJnZXQgaW1hZ2UgbmFtZSAoZnVsbHkgcXVhbGlmaWVkKSB0byBiZSBidWlsZCB3aXRoIHMyaSwgcmVkZWNsYXJpbmcgdGhlIHNhbWUgcGFyYW1ldGVyIG5hbWUgdGhhbgojIGJ1aWxkYWggdGFzayB1c2VzCmRlY2xhcmUgLXggUEFSQU1TX0lNQUdFPSIke1BBUkFNU19JTUFHRTotfSIKIyBTcGVjaWZ5IGEgVVJMIGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgYXNzZW1ibGUgYW5kIHJ1biBzY3JpcHRzIGZvciB0aGUgYnVpbGRlciBpbWFnZQpkZWNsYXJlIC1yeCBQQVJBTVNfSU1BR0VfU0NSSVBUU19VUkw9IiR7UEFSQU1TX0lNQUdFX1NDUklQVFNfVVJMOi19IgoKIyB2b2x1bWUgbW91bnQgb3IgZGlyZWN0b3J5IHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIGZpbGVzIAojIGxpa2UgZW52LCBEb2NrZXJmaWxlIGFuZCBhbnkgb3RoZXJzIG5lZWRlZCB0byBzdXBwb3J0IHMyaQpkZWNsYXJlIC1yeCBTMklfR0VORVJBVEVfRElSRUNUT1JZPSIke1MySV9HRU5FUkFURV9ESVJFQ1RPUlk6LS9zMmktZ2VuZXJhdGV9IgoKIyBmdWxsIHBhdGggdG8gdGhlIGNvbnRhaW5lciBmaWxlIGdlbmVyYXRlZCBieSBzMmkKZGVjbGFyZSAtcnggUzJJX0RPQ0tFUkZJTEU9IiR7UzJJX0RPQ0tFUkZJTEU6LSR7UzJJX0dFTkVSQVRFX0RJUkVDVE9SWX0vRG9ja2VyZmlsZS5nZW59IgoKIyBmdWxsIHBhdGggdG8gdGhlIGVudiBmaWxlIHVzZWQgd2l0aCB0aGUgLS1lbnZpcm9ubWVudC1maWxlIHBhcmFtZXRlciBvZiBzMmkKZGVjbGFyZSAtcnggUzJJX0VOVklST05NRU5UX0ZJTEU9IiR7UzJJX0VOVklST05NRU5UX0ZJTEU6LSR7UzJJX0dFTkVSQVRFX0RJUkVDVE9SWX0vZW52fSIKCiMKIyBBc3NlcnRpbmcgRW52aXJvbm1lbnQKIwoKZXhwb3J0ZWRfb3JfZmFpbCBcCiAgICBXT1JLU1BBQ0VTX1NPVVJDRV9QQVRIIFwKICAgIFBBUkFNU19JTUFHRQoKIwojIFZlcmJvc2UgT3V0cHV0CiMKCmRlY2xhcmUgLXggUzJJX0xPR0xFVkVMPSIwIgoKaWYgW1sgIiR7UEFSQU1TX1ZFUkJPU0V9IiA9PSAidHJ1ZSIgXV07IHRoZW4KICAgIFMySV9MT0dMRVZFTD0iMiIKICAgIHNldCAteApmaQo=" |base64 -d >s2i-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgVXNlcyBzMmkgdG8gZ2VuZXJhdGUgdGhlIHJlcGVzY3RpdmUgQ29udGFpbmVyZmlsZSBiYXNlZCBvbiB0aGUgaW5mb21yZWQgYnVpbGRlci4gVGhlIENvbnRhaW5lcmZpbGUKIyBpcyBzdG9yZWQgb24gYSB0ZW1wb3JhcnkgbG9jYXRpb24uCiMKCnNob3B0IC1zIGluaGVyaXRfZXJyZXhpdApzZXQgLWV1IC1vIHBpcGVmYWlsCgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvY29tbW9uLnNoIgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvczJpLWNvbW1vbi5zaCIKCiMgczJpIGJ1aWxkZXIgaW1hZ2UgbmFtZSAoZnVsbHkgcXVhbGlmaWVkKQpkZWNsYXJlIC1yeCBTMklfQlVJTERFUl9JTUFHRT0iJHtTMklfQlVJTERFUl9JTUFHRTotfSIKCiMgdGFrZXMgdGhlIHZhbHVlcyBpbiBhcmd1bWVudCBFTlZfVkFSUyBhbmQgY3JlYXRlcyBhbiBhcnJheSB1c2luZyB0aG9zZSB2YWx1ZXMKZGVjbGFyZSAtcmEgRU5WX1ZBUlM9KCR7QH0pCgojIHJlLXVzaW5nIHRoZSBzYW1lIHBhcmFtZXRlcnMgdGhhbiBidWlsZGFoLCBzMmkgbmVlZHMgYnVpbGRhaCBhYmlsaXRpZXMgdG8gY3JlYXRlIHRoZSBmaW5hbAojIGNvbnRhaW5lciBpbWFnZSBiYXNlZCBvbiB3aGF0IHMyaSBnZW5lcmF0ZXMKc291cmNlICIkKGRpcm5hbWUgJHtCQVNIX1NPVVJDRVswXX0pL2J1aWxkYWgtY29tbW9uLnNoIgoKIwojIFByZXBhcmUKIwoKIyBtYWtpbmcgc3VyZSB0aGUgcmVxdWlyZWQgd29ya3NwYWNlICJzb3VyY2UiIGlzIGJvdW5kZWQsIHdoaWNoIG1lYW5zIGl0cyB2b2x1bWUgaXMgY3VycmVudGx5IG1vdW50ZWQKIyBhbmQgcmVhZHkgdG8gdXNlCnBoYXNlICJJbnNwZWN0aW5nIHNvdXJjZSB3b3Jrc3BhY2UgJyR7V09SS1NQQUNFU19TT1VSQ0VfUEFUSH0nIChQV0Q9JyR7UFdEfScpIgpbWyAiJHtXT1JLU1BBQ0VTX1NPVVJDRV9CT1VORH0iICE9ICJ0cnVlIiBdXSAmJgogICAgZmFpbCAiV29ya3NwYWNlICdzb3VyY2UnIGlzIG5vdCBib3VuZGVkIgoKcGhhc2UgIkluc3BlY3RpbmcgY29udGV4dCAnJHtQQVJBTVNfQ09OVEVYVH0nIgpbWyAhIC1kICIke1BBUkFNU19DT05URVhUfSIgXV0gJiYKICAgIGZhaWwgIkFwcGxpY2F0aW9uIHNvdXJjZSBjb2RlIGRpcmVjdG9yeSBub3QgZm91bmQgYXQgJyR7UEFSQU1TX0NPTlRFWFR9JyIKCnBoYXNlICJBZGRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byAnJHtTMklfRU5WSVJPTk1FTlRfRklMRX0nIgoKIyBhZGQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFyZSBzZW50IGFzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZnJvbSBFTlZfVkFSUyBwYXJhbWV0ZXIKdG91Y2ggIiR7UzJJX0VOVklST05NRU5UX0ZJTEV9IgppZiBbICR7I0VOVl9WQVJTW0BdfSAtZ3QgMCBdOyB0aGVuCiAgICBmb3IgZW52X3ZhciBpbiAiJHtFTlZfVkFSU1tAXX0iOyBkbwogICAgICAgIGVjaG8gIiR7ZW52X3Zhcn0iID4+ICIke1MySV9FTlZJUk9OTUVOVF9GSUxFfSIKICAgIGRvbmUKZmkKCiMKIyBTMkkgR2VuZXJhdGUKIwoKcGhhc2UgIkdlbmVyYXRpbmcgdGhlIERvY2tlcmZpbGUgZm9yIFMySSBidWlsZGVyIGltYWdlICcke1MySV9CVUlMREVSX0lNQUdFfSciCnMyaSAtLWxvZ2xldmVsICIke1MySV9MT0dMRVZFTH0iIFwKICAgIGJ1aWxkICIke1BBUkFNU19DT05URVhUfSIgIiR7UzJJX0JVSUxERVJfSU1BR0V9IiBcCiAgICAgICAgLS1pbWFnZS1zY3JpcHRzLXVybCAiJHtQQVJBTVNfSU1BR0VfU0NSSVBUU19VUkx9IiBcCiAgICAgICAgLS1hcy1kb2NrZXJmaWxlICIke1MySV9ET0NLRVJGSUxFfSIgXAogICAgICAgIC0tZW52aXJvbm1lbnQtZmlsZSAiJHtTMklfRU5WSVJPTk1FTlRfRklMRX0iCgpwaGFzZSAiSW5zcGVjdGluZyB0aGUgRG9ja2VyZmlsZSBnZW5lcmF0ZWQgYXQgJyR7UzJJX0RPQ0tFUkZJTEV9JyIKW1sgISAtZiAiJHtTMklfRE9DS0VSRklMRX0iIF1dICYmCiAgICBmYWlsICJHZW5lcmF0ZWQgRG9ja2VyZmlsZSBpcyBub3QgZm91bmQhIgoKc2V0ICt4CnBoYXNlICJHZW5lcmF0ZWQgRG9ja2VyZmlsZSBwYXlsb2FkIgplY2hvIC1lbiAiPj4+ICR7UzJJX0RPQ0tFUkZJTEV9XG4kKGNhdCAke1MySV9ET0NLRVJGSUxFfSlcbjw8PCBFT0ZcbiIK" |base64 -d >s2i-generate.sh + chmod +x s2i-*.sh + volumeMounts: + - name: scripts-dir + mountPath: /scripts + + - name: s2i-generate + image: registry.access.redhat.com/source-to-image/source-to-image-rhel8:v1.3.9-6 + workingDir: $(workspaces.source.path) + env: + - name: S2I_BUILDER_IMAGE + value: registry.access.redhat.com/ubi8/openjdk-11:latest + command: + - /scripts/s2i-generate.sh + args: + - "$(params.ENV_VARS[*])" + securityContext: + capabilities: + add: ["SETFCAP"] + volumeMounts: + - name: scripts-dir + mountPath: /scripts + - name: s2i-generate-dir + mountPath: /s2i-generate + + - name: s2i-build + image: registry.access.redhat.com/ubi8/buildah:8.9 + workingDir: /s2i-generate + command: + - /scripts/s2i-build.sh + securityContext: + capabilities: + add: ["SETFCAP"] + volumeMounts: + - name: scripts-dir + mountPath: /scripts + - name: s2i-generate-dir + mountPath: /s2i-generate + + volumes: + - name: scripts-dir + emptyDir: {} + - name: s2i-generate-dir + emptyDir: {} diff --git a/tasks/task-s2i-nodejs/0.2.0/README.md b/tasks/task-s2i-nodejs/0.2.0/README.md new file mode 100644 index 00000000..b86765b3 --- /dev/null +++ b/tasks/task-s2i-nodejs/0.2.0/README.md @@ -0,0 +1,83 @@ +Source-to-Image Tekton Tasks (`s2i`) +------------------------------------ + +# Abstract + +Describes the Tekton Tasks supporting Source-to-Image for various ecosystems. + +# `s2i` Builder Images + +This section we explain each language ecosystem comes with a predefined set of builder images, supported by Red Hat. + +The `s2i` Task helps in building reproducible container images from source code i.e. task for supporting s2i functionality. + +The s2i Task has been customized with builder images specific to various languages and have been named appropriately as follows: + +| Task Name | Builder Image Used | +| ---------- | ---------------------------------------------------------------------- | +| s2i-python | http://registry.access.redhat.com/ubi8/python-39:latest | +| s2i-go | http://registry.access.redhat.com/ubi8/go-toolset:1.19.10-3 | +| s2i-java | http://registry.access.redhat.com/ubi8/openjdk-11:latest | +| s2i-dotnet | http://registry.access.redhat.com/ubi8/dotnet-60:6.0-37.20230802191230 | +| s2i-php | http://registry.access.redhat.com/ubi9/php-81:1-29 | +| s2i-nodejs | http://registry.access.redhat.com/ubi8/nodejs-18:latest | +| s2i-perl | http://registry.access.redhat.com/ubi9/perl-532:1-91 | +| s2i-ruby | http://registry.access.redhat.com/ubi9/ruby-31:1-50 | + +In case, the above builder images associated with the languages aren’t satisfactory for your source code, you can change it using appropriate parameter. + +# Usage + +Please, consider the usage example below: + +```yaml +--- +apiVersion: tekton.dev/v1beta1 +kind: TaskRun +metadata: {} +spec: + taskRef: + name: s2i-python + params: + - name: IMAGE + value: registry.registry.svc.cluster.local:32222/task-containers/task-s2i-python:latest +``` + +In case the Container Registry requires authentication, please consider the [Tekton Pipelines documentation][tektonPipelineAuth]. In a nutshell, you need to create a Kubernetes Secret describing the following attributes: + +```bash +kubectl create secret docker-registry imagestreams \ + --docker-server="image-registry.openshift-image-registry.svc:5000" \ + --docker-username="${REGISTRY_USERNAME}" \ + --docker-password="${REGISTRY_TOKEN}" +``` + +Then make sure the Secret is linked with the Service-Account running the `TaskRun`/`PipelineRun`. + +## Workspaces + +All of the s2i tasks use the `source` workspace which is meant to contain the Application source code, which acts as the build context for S2I workflow. + + +## Params + +| Param | Type | Default | Description | +| ----------------- | ------ | ------------------------ | ------------------------------------------------------------------------- | +| IMAGE | string | (required) | Fully qualified container image name to be built by s2i | +| IMAGE_SCRIPTS_URL | string | image:///usr/libexec/s2i | URL containing the default assemble and run scripts for the builder image | +| ENV_VARS | array | [] | Array containing string of Environment Variables as "KEY=VALUE” | +| SUBDIRECTORY | string | . | Relative subdirectory to the source Workspace for the build-context. | +| STORAGE_DRIVER | string | overlay | Set buildah storage driver to reflect the currrent cluster node's | +| settings. | +| BUILD_EXTRA_ARGS | string | | Extra parameters passed for the build command when building images. | +| PUSH_EXTRA_ARGS | string | | Extra parameters passed for the push command when pushing images. | +| SKIP_PUSH | string | false | Skip pushing the image to the container registry. | +| TLS_VERIFY | string | true | Sets the TLS verification flag, true is recommended. | +| VERBOSE | string | false | Turns on verbose logging, all commands executed will be printed out. | + +## Results + +| Result | Description | +| ------------ | ------------------------------- | +| IMAGE_URL | Fully qualified image name. | +| IMAGE_DIGEST | Digest of the image just built. | diff --git a/tasks/task-s2i-nodejs/0.2.0/task-s2i-nodejs.yaml b/tasks/task-s2i-nodejs/0.2.0/task-s2i-nodejs.yaml new file mode 100644 index 00000000..0ace6050 --- /dev/null +++ b/tasks/task-s2i-nodejs/0.2.0/task-s2i-nodejs.yaml @@ -0,0 +1,179 @@ +--- +# Source: task-containers/templates/task-s2i-nodejs.yaml +apiVersion: tekton.dev/v1beta1 +kind: Task +metadata: + name: s2i-nodejs + labels: + app.kubernetes.io/version: 0.2.0 + annotations: + tekton.dev/categories: containers + tekton.dev/pipelines.minVersion: 0.41.0 + tekton.dev/tags: containers +spec: + description: | + Builds the source code using the s2i's Nodejs builder-image + "registry.access.redhat.com/ubi8/nodejs-18:latest". + + + workspaces: + - name: source + optional: false + description: | + Application source code, the build context for S2I workflow. + + params: + - name: IMAGE + type: string + description: | + Fully qualified container image name to be built by s2i. + - name: IMAGE_SCRIPTS_URL + type: string + default: image:///usr/libexec/s2i + description: | + Specify a URL containing the default assemble and run scripts for the builder image + - name: ENV_VARS + type: array + default: [] + description: | + Array containing string of Environment Variables as "KEY=VALUE" + - name: CONTEXT + type: string + default: "." + description: | + Path to the directory to use as context. + - name: STORAGE_DRIVER + type: string + default: vfs + description: | + Set buildah storage driver to reflect the currrent cluster node's + settings. + - name: FORMAT + description: The format of the built container, oci or docker + default: "oci" + - name: BUILD_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the build command when building images. + - name: PUSH_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the push command when pushing images. + - name: SKIP_PUSH + default: "false" + description: | + Skip pushing the image to the container registry. + - name: TLS_VERIFY + type: string + default: "true" + description: | + Sets the TLS verification flag, `true` is recommended. + - name: VERBOSE + type: string + default: "false" + description: | + Turns on verbose logging, all commands executed will be printed out. + + results: + - name: IMAGE_URL + description: | + Fully qualified image name. + - name: IMAGE_DIGEST + description: | + Digest of the image just built. + + stepTemplate: + env: + + - name: PARAMS_IMAGE + value: "$(params.IMAGE)" + - name: PARAMS_IMAGE_SCRIPTS_URL + value: "$(params.IMAGE_SCRIPTS_URL)" + - name: PARAMS_CONTEXT + value: "$(params.CONTEXT)" + - name: PARAMS_FORMAT + value: "$(params.FORMAT)" + - name: PARAMS_STORAGE_DRIVER + value: "$(params.STORAGE_DRIVER)" + - name: PARAMS_BUILD_EXTRA_ARGS + value: "$(params.BUILD_EXTRA_ARGS)" + - name: PARAMS_PUSH_EXTRA_ARGS + value: "$(params.PUSH_EXTRA_ARGS)" + - name: PARAMS_SKIP_PUSH + value: "$(params.SKIP_PUSH)" + - name: PARAMS_TLS_VERIFY + value: "$(params.TLS_VERIFY)" + - name: PARAMS_VERBOSE + value: "$(params.VERBOSE)" + - name: WORKSPACES_SOURCE_BOUND + value: "$(workspaces.source.bound)" + - name: WORKSPACES_SOURCE_PATH + value: "$(workspaces.source.path)" + - name: WORKSPACES_DOCKERCONFIG_BOUND + value: "$(workspaces.dockerconfig.bound)" + - name: WORKSPACES_DOCKERCONFIG_PATH + value: "$(workspaces.dockerconfig.path)" + - name: RESULTS_IMAGE_URL_PATH + value: "$(results.IMAGE_URL.path)" + - name: RESULTS_IMAGE_DIGEST_PATH + value: "$(results.IMAGE_DIGEST.path)" + + steps: + - name: load-scripts + image: registry.access.redhat.com/ubi8-minimal:8.9 + workingDir: /scripts + script: | + set -e + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgV3JhcHBlciBhcm91bmQgImJ1aWxkYWggYnVkIiB0byBidWlsZCBhbmQgcHVzaCBhIGNvbnRhaW5lciBpbWFnZSBiYXNlZCBvbiBhIERvY2tlcmZpbGUuCiMKCnNob3B0IC1zIGluaGVyaXRfZXJyZXhpdApzZXQgLWV1IC1vIHBpcGVmYWlsCgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvY29tbW9uLnNoIgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvYnVpbGRhaC1jb21tb24uc2giCgpmdW5jdGlvbiBfYnVpbGRhaCgpIHsKICAgIGJ1aWxkYWggXAogICAgICAgIC0tc3RvcmFnZS1kcml2ZXI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSfSIgXAogICAgICAgIC0tdGxzLXZlcmlmeT0iJHtQQVJBTVNfVExTX1ZFUklGWX0iIFwKICAgICAgICAkeyp9Cn0KCiMKIyBQcmVwYXJlCiMKCiMgbWFraW5nIHN1cmUgdGhlIHJlcXVpcmVkIHdvcmtzcGFjZSAic291cmNlIiBpcyBib3VuZGVkLCB3aGljaCBtZWFucyBpdHMgdm9sdW1lIGlzIGN1cnJlbnRseSBtb3VudGVkCiMgYW5kIHJlYWR5IHRvIHVzZQpwaGFzZSAiSW5zcGVjdGluZyBzb3VyY2Ugd29ya3NwYWNlICcke1dPUktTUEFDRVNfU09VUkNFX1BBVEh9JyAoUFdEPScke1BXRH0nKSIKW1sgIiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkR9IiAhPSAidHJ1ZSIgXV0gJiYKICAgIGZhaWwgIldvcmtzcGFjZSAnc291cmNlJyBpcyBub3QgYm91bmRlZCIKCnBoYXNlICJBc3NlcnRpbmcgdGhlIGRvY2tlcmZpbGUvY29udGFpbmVyZmlsZSAnJHtET0NLRVJGSUxFX0ZVTEx9JyBleGlzdHMiCltbICEgLWYgIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgIkRvY2tlcmZpbGUgbm90IGZvdW5kIGF0OiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCnBoYXNlICJJbnNwZWN0aW5nIGNvbnRleHQgJyR7UEFSQU1TX0NPTlRFWFR9JyIKW1sgISAtZCAiJHtQQVJBTVNfQ09OVEVYVH0iIF1dICYmCiAgICBmYWlsICJDT05URVhUIHBhcmFtIGlzIG5vdCBmb3VuZCBhdCAnJHtQQVJBTVNfQ09OVEVYVH0nLCBvbiBzb3VyY2Ugd29ya3NwYWNlIgoKIyBIYW5kbGUgb3B0aW9uYWwgZG9ja2VyY29uZmlnIHNlY3JldAppZiBbWyAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19CT1VORH0iID09ICJ0cnVlIiBdXTsgdGhlbgoKICAgICMgaWYgY29uZmlnLmpzb24gZXhpc3RzIGF0IHdvcmtzcGFjZSByb290LCB3ZSB1c2UgdGhhdAogICAgaWYgdGVzdCAtZiAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfS9jb25maWcuanNvbiI7IHRoZW4KICAgICAgICBleHBvcnQgRE9DS0VSX0NPTkZJRz0iJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfSIKCiAgICAgICAgIyBlbHNlIHdlIGxvb2sgZm9yIC5kb2NrZXJjb25maWdqc29uIGF0IHRoZSByb290CiAgICBlbGlmIHRlc3QgLWYgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iOyB0aGVuCiAgICAgICAgY3AgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iICIkSE9NRS8uZG9ja2VyL2NvbmZpZy5qc29uIgogICAgICAgIGV4cG9ydCBET0NLRVJfQ09ORklHPSIkSE9NRS8uZG9ja2VyIgoKICAgICAgICAjIG5lZWQgdG8gZXJyb3Igb3V0IGlmIG5laXRoZXIgZmlsZXMgYXJlIHByZXNlbnQKICAgIGVsc2UKICAgICAgICBlY2hvICJuZWl0aGVyICdjb25maWcuanNvbicgbm9yICcuZG9ja2VyY29uZmlnanNvbicgZm91bmQgYXQgd29ya3NwYWNlIHJvb3QiCiAgICAgICAgZXhpdCAxCiAgICBmaQpmaQoKIwojIEJ1aWxkCiMKCnBoYXNlICJCdWlsZGluZyAnJHtQQVJBTVNfSU1BR0V9JyBiYXNlZCBvbiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCltbIC1uICIke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX0JVSUxEX0VYVFJBX0FSR1N9JyIKCl9idWlsZGFoIGJ1ZCAke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSBcCiAgICAtLW5vLWNhY2hlIFwKICAgIC0tZmlsZT0iJHtET0NLRVJGSUxFX0ZVTEx9IiBcCiAgICAtLXRhZz0iJHtQQVJBTVNfSU1BR0V9IiBcCiAgICAke1BBUkFNU19DT05URVhUfQoKaWYgW1sgIiR7UEFSQU1TX1NLSVBfUFVTSH0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgcGhhc2UgIlNraXBwaW5nIHB1c2hpbmcgJyR7UEFSQU1TX0lNQUdFfScgdG8gdGhlIGNvbnRhaW5lciByZWdpc3RyeSEiCiAgICBleGl0IDAKZmkKCiMKIyBQdXNoCiMKCnBoYXNlICJQdXNoaW5nICcke1BBUkFNU19JTUFHRX0nIHRvIHRoZSBjb250YWluZXIgcmVnaXN0cnkiCgpbWyAtbiAiJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX1BVU0hfRVhUUkFfQVJHU30nIgoKIyB0ZW1wb3JhcnkgZmlsZSB0byBzdG9yZSB0aGUgaW1hZ2UgZGlnZXN0LCBpbmZvcm1hdGlvbiBvbmx5IG9idGFpbmVkIGFmdGVyIHB1c2hpbmcgdGhlIGltYWdlIHRvIHRoZQojIGNvbnRhaW5lciByZWdpc3RyeQpkZWNsYXJlIC1yIGRpZ2VzdF9maWxlPSIvdG1wL2J1aWxkYWgtZGlnZXN0LnR4dCIKCl9idWlsZGFoIHB1c2ggJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSBcCiAgICAtLWRpZ2VzdGZpbGU9IiR7ZGlnZXN0X2ZpbGV9IiBcCiAgICAke1BBUkFNU19JTUFHRX0gXAogICAgZG9ja2VyOi8vJHtQQVJBTVNfSU1BR0V9CgojCiMgUmVzdWx0cwojCgpwaGFzZSAiSW5zcGVjdGluZyBkaWdlc3QgcmVwb3J0ICgnJHtkaWdlc3RfZmlsZX0nKSIKCltbICEgLXIgIiR7ZGlnZXN0X2ZpbGV9IiBdXSAmJgogICAgZmFpbCAiVW5hYmxlIHRvIGZpbmQgZGlnZXN0LWZpbGUgYXQgJyR7ZGlnZXN0X2ZpbGV9JyIKCmRlY2xhcmUgLXIgZGlnZXN0X3N1bT0iJChjYXQgJHtkaWdlc3RfZmlsZX0pIgoKW1sgLXogIiR7ZGlnZXN0X3N1bX0iIF1dICYmCiAgICBmYWlsICJEaWdlc3QgZmlsZSAnJHtkaWdlc3RfZmlsZX0nIGlzIGVtcHR5ISIKCnBoYXNlICJTdWNjZXNzZnVseSBidWlsdCBjb250YWluZXIgaW1hZ2UgJyR7UEFSQU1TX0lNQUdFfScgKCcke2RpZ2VzdF9zdW19JykiCmVjaG8gLW4gIiR7UEFSQU1TX0lNQUdFfSIgfCB0ZWUgJHtSRVNVTFRTX0lNQUdFX1VSTF9QQVRIfQplY2hvIC1uICIke2RpZ2VzdF9zdW19IiB8IHRlZSAke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEh9Cg==" |base64 -d >buildah-bud.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKZGVjbGFyZSAtcnggUEFSQU1TX0lNQUdFPSIke1BBUkFNU19JTUFHRTotfSIKZGVjbGFyZSAtcnggUEFSQU1TX0RPQ0tFUkZJTEU9IiR7UEFSQU1TX0RPQ0tFUkZJTEU6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19DT05URVhUPSIke1BBUkFNU19DT05URVhUOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU1RPUkFHRV9EUklWRVI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfQlVJTERfRVhUUkFfQVJHUz0iJHtQQVJBTVNfQlVJTERfRVhUUkFfQVJHUzotfSIKZGVjbGFyZSAtcnggUEFSQU1TX1BVU0hfRVhUUkFfQVJHUz0iJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU0tJUF9QVVNIPSIke1BBUkFNU19TS0lQX1BVU0g6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19UTFNfVkVSSUZZPSIke1BBUkFNU19UTFNfVkVSSUZZOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfVkVSQk9TRT0iJHtQQVJBTVNfVkVSQk9TRTotfSIKCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfU09VUkNFX1BBVEg9IiR7V09SS1NQQUNFU19TT1VSQ0VfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ9IiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ6LX0iCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfRE9DS0VSQ09ORklHX1BBVEg9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ6LX0iCgpkZWNsYXJlIC1yeCBSRVNVTFRTX0lNQUdFX0RJR0VTVF9QQVRIPSIke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEg6LX0iCmRlY2xhcmUgLXJ4IFJFU1VMVFNfSU1BR0VfVVJMX1BBVEg9IiR7UkVTVUxUU19JTUFHRV9VUkxfUEFUSDotfSIKCiMKIyBEb2NrZXJmaWxlCiMKCiMgZXhwb3NpbmcgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGFpbmVyIGZpbGUsIHdoaWNoIGJ5IGRlZmF1bHQgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBwcmltYXJ5CiMgd29ya3NwYWNlLCB0byByZWNlaXZlIGEgZGlmZmVyZW50IGNvbnRhaW5lci1maWxlIGxvY2F0aW9uCmRlY2xhcmUgLXIgZG9ja2VyZmlsZV9vbl93cz0iJHtXT1JLU1BBQ0VTX1NPVVJDRV9QQVRIfS8ke1BBUkFNU19ET0NLRVJGSUxFfSIKZGVjbGFyZSAteCBET0NLRVJGSUxFX0ZVTEw9IiR7RE9DS0VSRklMRV9GVUxMOi0ke2RvY2tlcmZpbGVfb25fd3N9fSIKCiMKIyBBc3NlcnRpbmcgRW52aXJvbm1lbnQKIwoKW1sgLXogIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgInVuYWJsZSB0byBmaW5kIHRoZSBEb2NrZXJmaWxlLCBET0NLRVJGSUxFIG1heSBoYXZlIGFuIGluY29ycmVjdCBsb2NhdGlvbiIKCmV4cG9ydGVkX29yX2ZhaWwgXAogICAgV09SS1NQQUNFU19TT1VSQ0VfUEFUSCBcCiAgICBQQVJBTVNfSU1BR0UKCiMKIyBWZXJib3NlIE91dHB1dAojCgppZiBbWyAiJHtQQVJBTVNfVkVSQk9TRX0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgc2V0IC14CmZpCg==" |base64 -d >buildah-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + chmod +x buildah-*.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgVXNlcyB0aGUgRG9ja2VyZmlsZSBnZW5lcmF0ZWQgYnkgczJpIHRvIGFzc2VtYmxlIGEgbmV3IGNvbnRhaW5lciBpbWFnZSB1c2luZyBidWlsZGFoLgojCgpzaG9wdCAtcyBpbmhlcml0X2VycmV4aXQKc2V0IC1ldSAtbyBwaXBlZmFpbAoKZGVjbGFyZSAtciBjdXJfZGlyPSIkKGRpcm5hbWUgJHtCQVNIX1NPVVJDRVswXX0pIgoKc291cmNlICIke2N1cl9kaXJ9L2NvbW1vbi5zaCIKc291cmNlICIke2N1cl9kaXJ9L3MyaS1jb21tb24uc2giCgojIGxvYWRpbmcgYnVpbGRhaCBzZXR0aW5ncyBvdmVyd3JpdHRpbmcgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGFpbmVyIGZpbGUKZGVjbGFyZSAteCBET0NLRVJGSUxFX0ZVTEw9IiR7UzJJX0RPQ0tFUkZJTEV9Igpzb3VyY2UgIiR7Y3VyX2Rpcn0vYnVpbGRhaC1jb21tb24uc2giCgpwaGFzZSAiQnVpbGRpbmcgdGhlIERvY2tlcmZpbGUgJyR7RE9DS0VSRklMRV9GVUxMfScgd2l0aCBidWlsZGFoIgpleGVjICR7Y3VyX2Rpcn0vYnVpbGRhaC1idWQuc2gK" |base64 -d >s2i-build.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0YXJnZXQgaW1hZ2UgbmFtZSAoZnVsbHkgcXVhbGlmaWVkKSB0byBiZSBidWlsZCB3aXRoIHMyaSwgcmVkZWNsYXJpbmcgdGhlIHNhbWUgcGFyYW1ldGVyIG5hbWUgdGhhbgojIGJ1aWxkYWggdGFzayB1c2VzCmRlY2xhcmUgLXggUEFSQU1TX0lNQUdFPSIke1BBUkFNU19JTUFHRTotfSIKIyBTcGVjaWZ5IGEgVVJMIGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgYXNzZW1ibGUgYW5kIHJ1biBzY3JpcHRzIGZvciB0aGUgYnVpbGRlciBpbWFnZQpkZWNsYXJlIC1yeCBQQVJBTVNfSU1BR0VfU0NSSVBUU19VUkw9IiR7UEFSQU1TX0lNQUdFX1NDUklQVFNfVVJMOi19IgoKIyB2b2x1bWUgbW91bnQgb3IgZGlyZWN0b3J5IHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIGZpbGVzIAojIGxpa2UgZW52LCBEb2NrZXJmaWxlIGFuZCBhbnkgb3RoZXJzIG5lZWRlZCB0byBzdXBwb3J0IHMyaQpkZWNsYXJlIC1yeCBTMklfR0VORVJBVEVfRElSRUNUT1JZPSIke1MySV9HRU5FUkFURV9ESVJFQ1RPUlk6LS9zMmktZ2VuZXJhdGV9IgoKIyBmdWxsIHBhdGggdG8gdGhlIGNvbnRhaW5lciBmaWxlIGdlbmVyYXRlZCBieSBzMmkKZGVjbGFyZSAtcnggUzJJX0RPQ0tFUkZJTEU9IiR7UzJJX0RPQ0tFUkZJTEU6LSR7UzJJX0dFTkVSQVRFX0RJUkVDVE9SWX0vRG9ja2VyZmlsZS5nZW59IgoKIyBmdWxsIHBhdGggdG8gdGhlIGVudiBmaWxlIHVzZWQgd2l0aCB0aGUgLS1lbnZpcm9ubWVudC1maWxlIHBhcmFtZXRlciBvZiBzMmkKZGVjbGFyZSAtcnggUzJJX0VOVklST05NRU5UX0ZJTEU9IiR7UzJJX0VOVklST05NRU5UX0ZJTEU6LSR7UzJJX0dFTkVSQVRFX0RJUkVDVE9SWX0vZW52fSIKCiMKIyBBc3NlcnRpbmcgRW52aXJvbm1lbnQKIwoKZXhwb3J0ZWRfb3JfZmFpbCBcCiAgICBXT1JLU1BBQ0VTX1NPVVJDRV9QQVRIIFwKICAgIFBBUkFNU19JTUFHRQoKIwojIFZlcmJvc2UgT3V0cHV0CiMKCmRlY2xhcmUgLXggUzJJX0xPR0xFVkVMPSIwIgoKaWYgW1sgIiR7UEFSQU1TX1ZFUkJPU0V9IiA9PSAidHJ1ZSIgXV07IHRoZW4KICAgIFMySV9MT0dMRVZFTD0iMiIKICAgIHNldCAteApmaQo=" |base64 -d >s2i-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgVXNlcyBzMmkgdG8gZ2VuZXJhdGUgdGhlIHJlcGVzY3RpdmUgQ29udGFpbmVyZmlsZSBiYXNlZCBvbiB0aGUgaW5mb21yZWQgYnVpbGRlci4gVGhlIENvbnRhaW5lcmZpbGUKIyBpcyBzdG9yZWQgb24gYSB0ZW1wb3JhcnkgbG9jYXRpb24uCiMKCnNob3B0IC1zIGluaGVyaXRfZXJyZXhpdApzZXQgLWV1IC1vIHBpcGVmYWlsCgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvY29tbW9uLnNoIgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvczJpLWNvbW1vbi5zaCIKCiMgczJpIGJ1aWxkZXIgaW1hZ2UgbmFtZSAoZnVsbHkgcXVhbGlmaWVkKQpkZWNsYXJlIC1yeCBTMklfQlVJTERFUl9JTUFHRT0iJHtTMklfQlVJTERFUl9JTUFHRTotfSIKCiMgdGFrZXMgdGhlIHZhbHVlcyBpbiBhcmd1bWVudCBFTlZfVkFSUyBhbmQgY3JlYXRlcyBhbiBhcnJheSB1c2luZyB0aG9zZSB2YWx1ZXMKZGVjbGFyZSAtcmEgRU5WX1ZBUlM9KCR7QH0pCgojIHJlLXVzaW5nIHRoZSBzYW1lIHBhcmFtZXRlcnMgdGhhbiBidWlsZGFoLCBzMmkgbmVlZHMgYnVpbGRhaCBhYmlsaXRpZXMgdG8gY3JlYXRlIHRoZSBmaW5hbAojIGNvbnRhaW5lciBpbWFnZSBiYXNlZCBvbiB3aGF0IHMyaSBnZW5lcmF0ZXMKc291cmNlICIkKGRpcm5hbWUgJHtCQVNIX1NPVVJDRVswXX0pL2J1aWxkYWgtY29tbW9uLnNoIgoKIwojIFByZXBhcmUKIwoKIyBtYWtpbmcgc3VyZSB0aGUgcmVxdWlyZWQgd29ya3NwYWNlICJzb3VyY2UiIGlzIGJvdW5kZWQsIHdoaWNoIG1lYW5zIGl0cyB2b2x1bWUgaXMgY3VycmVudGx5IG1vdW50ZWQKIyBhbmQgcmVhZHkgdG8gdXNlCnBoYXNlICJJbnNwZWN0aW5nIHNvdXJjZSB3b3Jrc3BhY2UgJyR7V09SS1NQQUNFU19TT1VSQ0VfUEFUSH0nIChQV0Q9JyR7UFdEfScpIgpbWyAiJHtXT1JLU1BBQ0VTX1NPVVJDRV9CT1VORH0iICE9ICJ0cnVlIiBdXSAmJgogICAgZmFpbCAiV29ya3NwYWNlICdzb3VyY2UnIGlzIG5vdCBib3VuZGVkIgoKcGhhc2UgIkluc3BlY3RpbmcgY29udGV4dCAnJHtQQVJBTVNfQ09OVEVYVH0nIgpbWyAhIC1kICIke1BBUkFNU19DT05URVhUfSIgXV0gJiYKICAgIGZhaWwgIkFwcGxpY2F0aW9uIHNvdXJjZSBjb2RlIGRpcmVjdG9yeSBub3QgZm91bmQgYXQgJyR7UEFSQU1TX0NPTlRFWFR9JyIKCnBoYXNlICJBZGRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byAnJHtTMklfRU5WSVJPTk1FTlRfRklMRX0nIgoKIyBhZGQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFyZSBzZW50IGFzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZnJvbSBFTlZfVkFSUyBwYXJhbWV0ZXIKdG91Y2ggIiR7UzJJX0VOVklST05NRU5UX0ZJTEV9IgppZiBbICR7I0VOVl9WQVJTW0BdfSAtZ3QgMCBdOyB0aGVuCiAgICBmb3IgZW52X3ZhciBpbiAiJHtFTlZfVkFSU1tAXX0iOyBkbwogICAgICAgIGVjaG8gIiR7ZW52X3Zhcn0iID4+ICIke1MySV9FTlZJUk9OTUVOVF9GSUxFfSIKICAgIGRvbmUKZmkKCiMKIyBTMkkgR2VuZXJhdGUKIwoKcGhhc2UgIkdlbmVyYXRpbmcgdGhlIERvY2tlcmZpbGUgZm9yIFMySSBidWlsZGVyIGltYWdlICcke1MySV9CVUlMREVSX0lNQUdFfSciCnMyaSAtLWxvZ2xldmVsICIke1MySV9MT0dMRVZFTH0iIFwKICAgIGJ1aWxkICIke1BBUkFNU19DT05URVhUfSIgIiR7UzJJX0JVSUxERVJfSU1BR0V9IiBcCiAgICAgICAgLS1pbWFnZS1zY3JpcHRzLXVybCAiJHtQQVJBTVNfSU1BR0VfU0NSSVBUU19VUkx9IiBcCiAgICAgICAgLS1hcy1kb2NrZXJmaWxlICIke1MySV9ET0NLRVJGSUxFfSIgXAogICAgICAgIC0tZW52aXJvbm1lbnQtZmlsZSAiJHtTMklfRU5WSVJPTk1FTlRfRklMRX0iCgpwaGFzZSAiSW5zcGVjdGluZyB0aGUgRG9ja2VyZmlsZSBnZW5lcmF0ZWQgYXQgJyR7UzJJX0RPQ0tFUkZJTEV9JyIKW1sgISAtZiAiJHtTMklfRE9DS0VSRklMRX0iIF1dICYmCiAgICBmYWlsICJHZW5lcmF0ZWQgRG9ja2VyZmlsZSBpcyBub3QgZm91bmQhIgoKc2V0ICt4CnBoYXNlICJHZW5lcmF0ZWQgRG9ja2VyZmlsZSBwYXlsb2FkIgplY2hvIC1lbiAiPj4+ICR7UzJJX0RPQ0tFUkZJTEV9XG4kKGNhdCAke1MySV9ET0NLRVJGSUxFfSlcbjw8PCBFT0ZcbiIK" |base64 -d >s2i-generate.sh + chmod +x s2i-*.sh + volumeMounts: + - name: scripts-dir + mountPath: /scripts + + - name: s2i-generate + image: registry.access.redhat.com/source-to-image/source-to-image-rhel8:v1.3.9-6 + workingDir: $(workspaces.source.path) + env: + - name: S2I_BUILDER_IMAGE + value: registry.access.redhat.com/ubi8/nodejs-18:latest + command: + - /scripts/s2i-generate.sh + args: + - "$(params.ENV_VARS[*])" + securityContext: + capabilities: + add: ["SETFCAP"] + volumeMounts: + - name: scripts-dir + mountPath: /scripts + - name: s2i-generate-dir + mountPath: /s2i-generate + + - name: s2i-build + image: registry.access.redhat.com/ubi8/buildah:8.9 + workingDir: /s2i-generate + command: + - /scripts/s2i-build.sh + securityContext: + capabilities: + add: ["SETFCAP"] + volumeMounts: + - name: scripts-dir + mountPath: /scripts + - name: s2i-generate-dir + mountPath: /s2i-generate + + volumes: + - name: scripts-dir + emptyDir: {} + - name: s2i-generate-dir + emptyDir: {} diff --git a/tasks/task-s2i-perl/0.2.0/README.md b/tasks/task-s2i-perl/0.2.0/README.md new file mode 100644 index 00000000..b86765b3 --- /dev/null +++ b/tasks/task-s2i-perl/0.2.0/README.md @@ -0,0 +1,83 @@ +Source-to-Image Tekton Tasks (`s2i`) +------------------------------------ + +# Abstract + +Describes the Tekton Tasks supporting Source-to-Image for various ecosystems. + +# `s2i` Builder Images + +This section we explain each language ecosystem comes with a predefined set of builder images, supported by Red Hat. + +The `s2i` Task helps in building reproducible container images from source code i.e. task for supporting s2i functionality. + +The s2i Task has been customized with builder images specific to various languages and have been named appropriately as follows: + +| Task Name | Builder Image Used | +| ---------- | ---------------------------------------------------------------------- | +| s2i-python | http://registry.access.redhat.com/ubi8/python-39:latest | +| s2i-go | http://registry.access.redhat.com/ubi8/go-toolset:1.19.10-3 | +| s2i-java | http://registry.access.redhat.com/ubi8/openjdk-11:latest | +| s2i-dotnet | http://registry.access.redhat.com/ubi8/dotnet-60:6.0-37.20230802191230 | +| s2i-php | http://registry.access.redhat.com/ubi9/php-81:1-29 | +| s2i-nodejs | http://registry.access.redhat.com/ubi8/nodejs-18:latest | +| s2i-perl | http://registry.access.redhat.com/ubi9/perl-532:1-91 | +| s2i-ruby | http://registry.access.redhat.com/ubi9/ruby-31:1-50 | + +In case, the above builder images associated with the languages aren’t satisfactory for your source code, you can change it using appropriate parameter. + +# Usage + +Please, consider the usage example below: + +```yaml +--- +apiVersion: tekton.dev/v1beta1 +kind: TaskRun +metadata: {} +spec: + taskRef: + name: s2i-python + params: + - name: IMAGE + value: registry.registry.svc.cluster.local:32222/task-containers/task-s2i-python:latest +``` + +In case the Container Registry requires authentication, please consider the [Tekton Pipelines documentation][tektonPipelineAuth]. In a nutshell, you need to create a Kubernetes Secret describing the following attributes: + +```bash +kubectl create secret docker-registry imagestreams \ + --docker-server="image-registry.openshift-image-registry.svc:5000" \ + --docker-username="${REGISTRY_USERNAME}" \ + --docker-password="${REGISTRY_TOKEN}" +``` + +Then make sure the Secret is linked with the Service-Account running the `TaskRun`/`PipelineRun`. + +## Workspaces + +All of the s2i tasks use the `source` workspace which is meant to contain the Application source code, which acts as the build context for S2I workflow. + + +## Params + +| Param | Type | Default | Description | +| ----------------- | ------ | ------------------------ | ------------------------------------------------------------------------- | +| IMAGE | string | (required) | Fully qualified container image name to be built by s2i | +| IMAGE_SCRIPTS_URL | string | image:///usr/libexec/s2i | URL containing the default assemble and run scripts for the builder image | +| ENV_VARS | array | [] | Array containing string of Environment Variables as "KEY=VALUE” | +| SUBDIRECTORY | string | . | Relative subdirectory to the source Workspace for the build-context. | +| STORAGE_DRIVER | string | overlay | Set buildah storage driver to reflect the currrent cluster node's | +| settings. | +| BUILD_EXTRA_ARGS | string | | Extra parameters passed for the build command when building images. | +| PUSH_EXTRA_ARGS | string | | Extra parameters passed for the push command when pushing images. | +| SKIP_PUSH | string | false | Skip pushing the image to the container registry. | +| TLS_VERIFY | string | true | Sets the TLS verification flag, true is recommended. | +| VERBOSE | string | false | Turns on verbose logging, all commands executed will be printed out. | + +## Results + +| Result | Description | +| ------------ | ------------------------------- | +| IMAGE_URL | Fully qualified image name. | +| IMAGE_DIGEST | Digest of the image just built. | diff --git a/tasks/task-s2i-perl/0.2.0/task-s2i-perl.yaml b/tasks/task-s2i-perl/0.2.0/task-s2i-perl.yaml new file mode 100644 index 00000000..a1fdfa82 --- /dev/null +++ b/tasks/task-s2i-perl/0.2.0/task-s2i-perl.yaml @@ -0,0 +1,179 @@ +--- +# Source: task-containers/templates/task-s2i-perl.yaml +apiVersion: tekton.dev/v1beta1 +kind: Task +metadata: + name: s2i-perl + labels: + app.kubernetes.io/version: 0.2.0 + annotations: + tekton.dev/categories: containers + tekton.dev/pipelines.minVersion: 0.41.0 + tekton.dev/tags: containers +spec: + description: | + Builds the source code using the s2i's Perl builder-image + "registry.access.redhat.com/ubi9/perl-532:1-91". + + + workspaces: + - name: source + optional: false + description: | + Application source code, the build context for S2I workflow. + + params: + - name: IMAGE + type: string + description: | + Fully qualified container image name to be built by s2i. + - name: IMAGE_SCRIPTS_URL + type: string + default: image:///usr/libexec/s2i + description: | + Specify a URL containing the default assemble and run scripts for the builder image + - name: ENV_VARS + type: array + default: [] + description: | + Array containing string of Environment Variables as "KEY=VALUE" + - name: CONTEXT + type: string + default: "." + description: | + Path to the directory to use as context. + - name: STORAGE_DRIVER + type: string + default: vfs + description: | + Set buildah storage driver to reflect the currrent cluster node's + settings. + - name: FORMAT + description: The format of the built container, oci or docker + default: "oci" + - name: BUILD_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the build command when building images. + - name: PUSH_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the push command when pushing images. + - name: SKIP_PUSH + default: "false" + description: | + Skip pushing the image to the container registry. + - name: TLS_VERIFY + type: string + default: "true" + description: | + Sets the TLS verification flag, `true` is recommended. + - name: VERBOSE + type: string + default: "false" + description: | + Turns on verbose logging, all commands executed will be printed out. + + results: + - name: IMAGE_URL + description: | + Fully qualified image name. + - name: IMAGE_DIGEST + description: | + Digest of the image just built. + + stepTemplate: + env: + + - name: PARAMS_IMAGE + value: "$(params.IMAGE)" + - name: PARAMS_IMAGE_SCRIPTS_URL + value: "$(params.IMAGE_SCRIPTS_URL)" + - name: PARAMS_CONTEXT + value: "$(params.CONTEXT)" + - name: PARAMS_FORMAT + value: "$(params.FORMAT)" + - name: PARAMS_STORAGE_DRIVER + value: "$(params.STORAGE_DRIVER)" + - name: PARAMS_BUILD_EXTRA_ARGS + value: "$(params.BUILD_EXTRA_ARGS)" + - name: PARAMS_PUSH_EXTRA_ARGS + value: "$(params.PUSH_EXTRA_ARGS)" + - name: PARAMS_SKIP_PUSH + value: "$(params.SKIP_PUSH)" + - name: PARAMS_TLS_VERIFY + value: "$(params.TLS_VERIFY)" + - name: PARAMS_VERBOSE + value: "$(params.VERBOSE)" + - name: WORKSPACES_SOURCE_BOUND + value: "$(workspaces.source.bound)" + - name: WORKSPACES_SOURCE_PATH + value: "$(workspaces.source.path)" + - name: WORKSPACES_DOCKERCONFIG_BOUND + value: "$(workspaces.dockerconfig.bound)" + - name: WORKSPACES_DOCKERCONFIG_PATH + value: "$(workspaces.dockerconfig.path)" + - name: RESULTS_IMAGE_URL_PATH + value: "$(results.IMAGE_URL.path)" + - name: RESULTS_IMAGE_DIGEST_PATH + value: "$(results.IMAGE_DIGEST.path)" + + steps: + - name: load-scripts + image: registry.access.redhat.com/ubi8-minimal:8.9 + workingDir: /scripts + script: | + set -e + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgV3JhcHBlciBhcm91bmQgImJ1aWxkYWggYnVkIiB0byBidWlsZCBhbmQgcHVzaCBhIGNvbnRhaW5lciBpbWFnZSBiYXNlZCBvbiBhIERvY2tlcmZpbGUuCiMKCnNob3B0IC1zIGluaGVyaXRfZXJyZXhpdApzZXQgLWV1IC1vIHBpcGVmYWlsCgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvY29tbW9uLnNoIgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvYnVpbGRhaC1jb21tb24uc2giCgpmdW5jdGlvbiBfYnVpbGRhaCgpIHsKICAgIGJ1aWxkYWggXAogICAgICAgIC0tc3RvcmFnZS1kcml2ZXI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSfSIgXAogICAgICAgIC0tdGxzLXZlcmlmeT0iJHtQQVJBTVNfVExTX1ZFUklGWX0iIFwKICAgICAgICAkeyp9Cn0KCiMKIyBQcmVwYXJlCiMKCiMgbWFraW5nIHN1cmUgdGhlIHJlcXVpcmVkIHdvcmtzcGFjZSAic291cmNlIiBpcyBib3VuZGVkLCB3aGljaCBtZWFucyBpdHMgdm9sdW1lIGlzIGN1cnJlbnRseSBtb3VudGVkCiMgYW5kIHJlYWR5IHRvIHVzZQpwaGFzZSAiSW5zcGVjdGluZyBzb3VyY2Ugd29ya3NwYWNlICcke1dPUktTUEFDRVNfU09VUkNFX1BBVEh9JyAoUFdEPScke1BXRH0nKSIKW1sgIiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkR9IiAhPSAidHJ1ZSIgXV0gJiYKICAgIGZhaWwgIldvcmtzcGFjZSAnc291cmNlJyBpcyBub3QgYm91bmRlZCIKCnBoYXNlICJBc3NlcnRpbmcgdGhlIGRvY2tlcmZpbGUvY29udGFpbmVyZmlsZSAnJHtET0NLRVJGSUxFX0ZVTEx9JyBleGlzdHMiCltbICEgLWYgIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgIkRvY2tlcmZpbGUgbm90IGZvdW5kIGF0OiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCnBoYXNlICJJbnNwZWN0aW5nIGNvbnRleHQgJyR7UEFSQU1TX0NPTlRFWFR9JyIKW1sgISAtZCAiJHtQQVJBTVNfQ09OVEVYVH0iIF1dICYmCiAgICBmYWlsICJDT05URVhUIHBhcmFtIGlzIG5vdCBmb3VuZCBhdCAnJHtQQVJBTVNfQ09OVEVYVH0nLCBvbiBzb3VyY2Ugd29ya3NwYWNlIgoKIyBIYW5kbGUgb3B0aW9uYWwgZG9ja2VyY29uZmlnIHNlY3JldAppZiBbWyAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19CT1VORH0iID09ICJ0cnVlIiBdXTsgdGhlbgoKICAgICMgaWYgY29uZmlnLmpzb24gZXhpc3RzIGF0IHdvcmtzcGFjZSByb290LCB3ZSB1c2UgdGhhdAogICAgaWYgdGVzdCAtZiAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfS9jb25maWcuanNvbiI7IHRoZW4KICAgICAgICBleHBvcnQgRE9DS0VSX0NPTkZJRz0iJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfSIKCiAgICAgICAgIyBlbHNlIHdlIGxvb2sgZm9yIC5kb2NrZXJjb25maWdqc29uIGF0IHRoZSByb290CiAgICBlbGlmIHRlc3QgLWYgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iOyB0aGVuCiAgICAgICAgY3AgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iICIkSE9NRS8uZG9ja2VyL2NvbmZpZy5qc29uIgogICAgICAgIGV4cG9ydCBET0NLRVJfQ09ORklHPSIkSE9NRS8uZG9ja2VyIgoKICAgICAgICAjIG5lZWQgdG8gZXJyb3Igb3V0IGlmIG5laXRoZXIgZmlsZXMgYXJlIHByZXNlbnQKICAgIGVsc2UKICAgICAgICBlY2hvICJuZWl0aGVyICdjb25maWcuanNvbicgbm9yICcuZG9ja2VyY29uZmlnanNvbicgZm91bmQgYXQgd29ya3NwYWNlIHJvb3QiCiAgICAgICAgZXhpdCAxCiAgICBmaQpmaQoKIwojIEJ1aWxkCiMKCnBoYXNlICJCdWlsZGluZyAnJHtQQVJBTVNfSU1BR0V9JyBiYXNlZCBvbiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCltbIC1uICIke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX0JVSUxEX0VYVFJBX0FSR1N9JyIKCl9idWlsZGFoIGJ1ZCAke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSBcCiAgICAtLW5vLWNhY2hlIFwKICAgIC0tZmlsZT0iJHtET0NLRVJGSUxFX0ZVTEx9IiBcCiAgICAtLXRhZz0iJHtQQVJBTVNfSU1BR0V9IiBcCiAgICAke1BBUkFNU19DT05URVhUfQoKaWYgW1sgIiR7UEFSQU1TX1NLSVBfUFVTSH0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgcGhhc2UgIlNraXBwaW5nIHB1c2hpbmcgJyR7UEFSQU1TX0lNQUdFfScgdG8gdGhlIGNvbnRhaW5lciByZWdpc3RyeSEiCiAgICBleGl0IDAKZmkKCiMKIyBQdXNoCiMKCnBoYXNlICJQdXNoaW5nICcke1BBUkFNU19JTUFHRX0nIHRvIHRoZSBjb250YWluZXIgcmVnaXN0cnkiCgpbWyAtbiAiJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX1BVU0hfRVhUUkFfQVJHU30nIgoKIyB0ZW1wb3JhcnkgZmlsZSB0byBzdG9yZSB0aGUgaW1hZ2UgZGlnZXN0LCBpbmZvcm1hdGlvbiBvbmx5IG9idGFpbmVkIGFmdGVyIHB1c2hpbmcgdGhlIGltYWdlIHRvIHRoZQojIGNvbnRhaW5lciByZWdpc3RyeQpkZWNsYXJlIC1yIGRpZ2VzdF9maWxlPSIvdG1wL2J1aWxkYWgtZGlnZXN0LnR4dCIKCl9idWlsZGFoIHB1c2ggJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSBcCiAgICAtLWRpZ2VzdGZpbGU9IiR7ZGlnZXN0X2ZpbGV9IiBcCiAgICAke1BBUkFNU19JTUFHRX0gXAogICAgZG9ja2VyOi8vJHtQQVJBTVNfSU1BR0V9CgojCiMgUmVzdWx0cwojCgpwaGFzZSAiSW5zcGVjdGluZyBkaWdlc3QgcmVwb3J0ICgnJHtkaWdlc3RfZmlsZX0nKSIKCltbICEgLXIgIiR7ZGlnZXN0X2ZpbGV9IiBdXSAmJgogICAgZmFpbCAiVW5hYmxlIHRvIGZpbmQgZGlnZXN0LWZpbGUgYXQgJyR7ZGlnZXN0X2ZpbGV9JyIKCmRlY2xhcmUgLXIgZGlnZXN0X3N1bT0iJChjYXQgJHtkaWdlc3RfZmlsZX0pIgoKW1sgLXogIiR7ZGlnZXN0X3N1bX0iIF1dICYmCiAgICBmYWlsICJEaWdlc3QgZmlsZSAnJHtkaWdlc3RfZmlsZX0nIGlzIGVtcHR5ISIKCnBoYXNlICJTdWNjZXNzZnVseSBidWlsdCBjb250YWluZXIgaW1hZ2UgJyR7UEFSQU1TX0lNQUdFfScgKCcke2RpZ2VzdF9zdW19JykiCmVjaG8gLW4gIiR7UEFSQU1TX0lNQUdFfSIgfCB0ZWUgJHtSRVNVTFRTX0lNQUdFX1VSTF9QQVRIfQplY2hvIC1uICIke2RpZ2VzdF9zdW19IiB8IHRlZSAke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEh9Cg==" |base64 -d >buildah-bud.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKZGVjbGFyZSAtcnggUEFSQU1TX0lNQUdFPSIke1BBUkFNU19JTUFHRTotfSIKZGVjbGFyZSAtcnggUEFSQU1TX0RPQ0tFUkZJTEU9IiR7UEFSQU1TX0RPQ0tFUkZJTEU6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19DT05URVhUPSIke1BBUkFNU19DT05URVhUOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU1RPUkFHRV9EUklWRVI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfQlVJTERfRVhUUkFfQVJHUz0iJHtQQVJBTVNfQlVJTERfRVhUUkFfQVJHUzotfSIKZGVjbGFyZSAtcnggUEFSQU1TX1BVU0hfRVhUUkFfQVJHUz0iJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU0tJUF9QVVNIPSIke1BBUkFNU19TS0lQX1BVU0g6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19UTFNfVkVSSUZZPSIke1BBUkFNU19UTFNfVkVSSUZZOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfVkVSQk9TRT0iJHtQQVJBTVNfVkVSQk9TRTotfSIKCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfU09VUkNFX1BBVEg9IiR7V09SS1NQQUNFU19TT1VSQ0VfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ9IiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ6LX0iCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfRE9DS0VSQ09ORklHX1BBVEg9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ6LX0iCgpkZWNsYXJlIC1yeCBSRVNVTFRTX0lNQUdFX0RJR0VTVF9QQVRIPSIke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEg6LX0iCmRlY2xhcmUgLXJ4IFJFU1VMVFNfSU1BR0VfVVJMX1BBVEg9IiR7UkVTVUxUU19JTUFHRV9VUkxfUEFUSDotfSIKCiMKIyBEb2NrZXJmaWxlCiMKCiMgZXhwb3NpbmcgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGFpbmVyIGZpbGUsIHdoaWNoIGJ5IGRlZmF1bHQgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBwcmltYXJ5CiMgd29ya3NwYWNlLCB0byByZWNlaXZlIGEgZGlmZmVyZW50IGNvbnRhaW5lci1maWxlIGxvY2F0aW9uCmRlY2xhcmUgLXIgZG9ja2VyZmlsZV9vbl93cz0iJHtXT1JLU1BBQ0VTX1NPVVJDRV9QQVRIfS8ke1BBUkFNU19ET0NLRVJGSUxFfSIKZGVjbGFyZSAteCBET0NLRVJGSUxFX0ZVTEw9IiR7RE9DS0VSRklMRV9GVUxMOi0ke2RvY2tlcmZpbGVfb25fd3N9fSIKCiMKIyBBc3NlcnRpbmcgRW52aXJvbm1lbnQKIwoKW1sgLXogIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgInVuYWJsZSB0byBmaW5kIHRoZSBEb2NrZXJmaWxlLCBET0NLRVJGSUxFIG1heSBoYXZlIGFuIGluY29ycmVjdCBsb2NhdGlvbiIKCmV4cG9ydGVkX29yX2ZhaWwgXAogICAgV09SS1NQQUNFU19TT1VSQ0VfUEFUSCBcCiAgICBQQVJBTVNfSU1BR0UKCiMKIyBWZXJib3NlIE91dHB1dAojCgppZiBbWyAiJHtQQVJBTVNfVkVSQk9TRX0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgc2V0IC14CmZpCg==" |base64 -d >buildah-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + chmod +x buildah-*.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgVXNlcyB0aGUgRG9ja2VyZmlsZSBnZW5lcmF0ZWQgYnkgczJpIHRvIGFzc2VtYmxlIGEgbmV3IGNvbnRhaW5lciBpbWFnZSB1c2luZyBidWlsZGFoLgojCgpzaG9wdCAtcyBpbmhlcml0X2VycmV4aXQKc2V0IC1ldSAtbyBwaXBlZmFpbAoKZGVjbGFyZSAtciBjdXJfZGlyPSIkKGRpcm5hbWUgJHtCQVNIX1NPVVJDRVswXX0pIgoKc291cmNlICIke2N1cl9kaXJ9L2NvbW1vbi5zaCIKc291cmNlICIke2N1cl9kaXJ9L3MyaS1jb21tb24uc2giCgojIGxvYWRpbmcgYnVpbGRhaCBzZXR0aW5ncyBvdmVyd3JpdHRpbmcgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGFpbmVyIGZpbGUKZGVjbGFyZSAteCBET0NLRVJGSUxFX0ZVTEw9IiR7UzJJX0RPQ0tFUkZJTEV9Igpzb3VyY2UgIiR7Y3VyX2Rpcn0vYnVpbGRhaC1jb21tb24uc2giCgpwaGFzZSAiQnVpbGRpbmcgdGhlIERvY2tlcmZpbGUgJyR7RE9DS0VSRklMRV9GVUxMfScgd2l0aCBidWlsZGFoIgpleGVjICR7Y3VyX2Rpcn0vYnVpbGRhaC1idWQuc2gK" |base64 -d >s2i-build.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0YXJnZXQgaW1hZ2UgbmFtZSAoZnVsbHkgcXVhbGlmaWVkKSB0byBiZSBidWlsZCB3aXRoIHMyaSwgcmVkZWNsYXJpbmcgdGhlIHNhbWUgcGFyYW1ldGVyIG5hbWUgdGhhbgojIGJ1aWxkYWggdGFzayB1c2VzCmRlY2xhcmUgLXggUEFSQU1TX0lNQUdFPSIke1BBUkFNU19JTUFHRTotfSIKIyBTcGVjaWZ5IGEgVVJMIGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgYXNzZW1ibGUgYW5kIHJ1biBzY3JpcHRzIGZvciB0aGUgYnVpbGRlciBpbWFnZQpkZWNsYXJlIC1yeCBQQVJBTVNfSU1BR0VfU0NSSVBUU19VUkw9IiR7UEFSQU1TX0lNQUdFX1NDUklQVFNfVVJMOi19IgoKIyB2b2x1bWUgbW91bnQgb3IgZGlyZWN0b3J5IHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIGZpbGVzIAojIGxpa2UgZW52LCBEb2NrZXJmaWxlIGFuZCBhbnkgb3RoZXJzIG5lZWRlZCB0byBzdXBwb3J0IHMyaQpkZWNsYXJlIC1yeCBTMklfR0VORVJBVEVfRElSRUNUT1JZPSIke1MySV9HRU5FUkFURV9ESVJFQ1RPUlk6LS9zMmktZ2VuZXJhdGV9IgoKIyBmdWxsIHBhdGggdG8gdGhlIGNvbnRhaW5lciBmaWxlIGdlbmVyYXRlZCBieSBzMmkKZGVjbGFyZSAtcnggUzJJX0RPQ0tFUkZJTEU9IiR7UzJJX0RPQ0tFUkZJTEU6LSR7UzJJX0dFTkVSQVRFX0RJUkVDVE9SWX0vRG9ja2VyZmlsZS5nZW59IgoKIyBmdWxsIHBhdGggdG8gdGhlIGVudiBmaWxlIHVzZWQgd2l0aCB0aGUgLS1lbnZpcm9ubWVudC1maWxlIHBhcmFtZXRlciBvZiBzMmkKZGVjbGFyZSAtcnggUzJJX0VOVklST05NRU5UX0ZJTEU9IiR7UzJJX0VOVklST05NRU5UX0ZJTEU6LSR7UzJJX0dFTkVSQVRFX0RJUkVDVE9SWX0vZW52fSIKCiMKIyBBc3NlcnRpbmcgRW52aXJvbm1lbnQKIwoKZXhwb3J0ZWRfb3JfZmFpbCBcCiAgICBXT1JLU1BBQ0VTX1NPVVJDRV9QQVRIIFwKICAgIFBBUkFNU19JTUFHRQoKIwojIFZlcmJvc2UgT3V0cHV0CiMKCmRlY2xhcmUgLXggUzJJX0xPR0xFVkVMPSIwIgoKaWYgW1sgIiR7UEFSQU1TX1ZFUkJPU0V9IiA9PSAidHJ1ZSIgXV07IHRoZW4KICAgIFMySV9MT0dMRVZFTD0iMiIKICAgIHNldCAteApmaQo=" |base64 -d >s2i-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgVXNlcyBzMmkgdG8gZ2VuZXJhdGUgdGhlIHJlcGVzY3RpdmUgQ29udGFpbmVyZmlsZSBiYXNlZCBvbiB0aGUgaW5mb21yZWQgYnVpbGRlci4gVGhlIENvbnRhaW5lcmZpbGUKIyBpcyBzdG9yZWQgb24gYSB0ZW1wb3JhcnkgbG9jYXRpb24uCiMKCnNob3B0IC1zIGluaGVyaXRfZXJyZXhpdApzZXQgLWV1IC1vIHBpcGVmYWlsCgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvY29tbW9uLnNoIgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvczJpLWNvbW1vbi5zaCIKCiMgczJpIGJ1aWxkZXIgaW1hZ2UgbmFtZSAoZnVsbHkgcXVhbGlmaWVkKQpkZWNsYXJlIC1yeCBTMklfQlVJTERFUl9JTUFHRT0iJHtTMklfQlVJTERFUl9JTUFHRTotfSIKCiMgdGFrZXMgdGhlIHZhbHVlcyBpbiBhcmd1bWVudCBFTlZfVkFSUyBhbmQgY3JlYXRlcyBhbiBhcnJheSB1c2luZyB0aG9zZSB2YWx1ZXMKZGVjbGFyZSAtcmEgRU5WX1ZBUlM9KCR7QH0pCgojIHJlLXVzaW5nIHRoZSBzYW1lIHBhcmFtZXRlcnMgdGhhbiBidWlsZGFoLCBzMmkgbmVlZHMgYnVpbGRhaCBhYmlsaXRpZXMgdG8gY3JlYXRlIHRoZSBmaW5hbAojIGNvbnRhaW5lciBpbWFnZSBiYXNlZCBvbiB3aGF0IHMyaSBnZW5lcmF0ZXMKc291cmNlICIkKGRpcm5hbWUgJHtCQVNIX1NPVVJDRVswXX0pL2J1aWxkYWgtY29tbW9uLnNoIgoKIwojIFByZXBhcmUKIwoKIyBtYWtpbmcgc3VyZSB0aGUgcmVxdWlyZWQgd29ya3NwYWNlICJzb3VyY2UiIGlzIGJvdW5kZWQsIHdoaWNoIG1lYW5zIGl0cyB2b2x1bWUgaXMgY3VycmVudGx5IG1vdW50ZWQKIyBhbmQgcmVhZHkgdG8gdXNlCnBoYXNlICJJbnNwZWN0aW5nIHNvdXJjZSB3b3Jrc3BhY2UgJyR7V09SS1NQQUNFU19TT1VSQ0VfUEFUSH0nIChQV0Q9JyR7UFdEfScpIgpbWyAiJHtXT1JLU1BBQ0VTX1NPVVJDRV9CT1VORH0iICE9ICJ0cnVlIiBdXSAmJgogICAgZmFpbCAiV29ya3NwYWNlICdzb3VyY2UnIGlzIG5vdCBib3VuZGVkIgoKcGhhc2UgIkluc3BlY3RpbmcgY29udGV4dCAnJHtQQVJBTVNfQ09OVEVYVH0nIgpbWyAhIC1kICIke1BBUkFNU19DT05URVhUfSIgXV0gJiYKICAgIGZhaWwgIkFwcGxpY2F0aW9uIHNvdXJjZSBjb2RlIGRpcmVjdG9yeSBub3QgZm91bmQgYXQgJyR7UEFSQU1TX0NPTlRFWFR9JyIKCnBoYXNlICJBZGRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byAnJHtTMklfRU5WSVJPTk1FTlRfRklMRX0nIgoKIyBhZGQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFyZSBzZW50IGFzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZnJvbSBFTlZfVkFSUyBwYXJhbWV0ZXIKdG91Y2ggIiR7UzJJX0VOVklST05NRU5UX0ZJTEV9IgppZiBbICR7I0VOVl9WQVJTW0BdfSAtZ3QgMCBdOyB0aGVuCiAgICBmb3IgZW52X3ZhciBpbiAiJHtFTlZfVkFSU1tAXX0iOyBkbwogICAgICAgIGVjaG8gIiR7ZW52X3Zhcn0iID4+ICIke1MySV9FTlZJUk9OTUVOVF9GSUxFfSIKICAgIGRvbmUKZmkKCiMKIyBTMkkgR2VuZXJhdGUKIwoKcGhhc2UgIkdlbmVyYXRpbmcgdGhlIERvY2tlcmZpbGUgZm9yIFMySSBidWlsZGVyIGltYWdlICcke1MySV9CVUlMREVSX0lNQUdFfSciCnMyaSAtLWxvZ2xldmVsICIke1MySV9MT0dMRVZFTH0iIFwKICAgIGJ1aWxkICIke1BBUkFNU19DT05URVhUfSIgIiR7UzJJX0JVSUxERVJfSU1BR0V9IiBcCiAgICAgICAgLS1pbWFnZS1zY3JpcHRzLXVybCAiJHtQQVJBTVNfSU1BR0VfU0NSSVBUU19VUkx9IiBcCiAgICAgICAgLS1hcy1kb2NrZXJmaWxlICIke1MySV9ET0NLRVJGSUxFfSIgXAogICAgICAgIC0tZW52aXJvbm1lbnQtZmlsZSAiJHtTMklfRU5WSVJPTk1FTlRfRklMRX0iCgpwaGFzZSAiSW5zcGVjdGluZyB0aGUgRG9ja2VyZmlsZSBnZW5lcmF0ZWQgYXQgJyR7UzJJX0RPQ0tFUkZJTEV9JyIKW1sgISAtZiAiJHtTMklfRE9DS0VSRklMRX0iIF1dICYmCiAgICBmYWlsICJHZW5lcmF0ZWQgRG9ja2VyZmlsZSBpcyBub3QgZm91bmQhIgoKc2V0ICt4CnBoYXNlICJHZW5lcmF0ZWQgRG9ja2VyZmlsZSBwYXlsb2FkIgplY2hvIC1lbiAiPj4+ICR7UzJJX0RPQ0tFUkZJTEV9XG4kKGNhdCAke1MySV9ET0NLRVJGSUxFfSlcbjw8PCBFT0ZcbiIK" |base64 -d >s2i-generate.sh + chmod +x s2i-*.sh + volumeMounts: + - name: scripts-dir + mountPath: /scripts + + - name: s2i-generate + image: registry.access.redhat.com/source-to-image/source-to-image-rhel8:v1.3.9-6 + workingDir: $(workspaces.source.path) + env: + - name: S2I_BUILDER_IMAGE + value: registry.access.redhat.com/ubi9/perl-532:1-91 + command: + - /scripts/s2i-generate.sh + args: + - "$(params.ENV_VARS[*])" + securityContext: + capabilities: + add: ["SETFCAP"] + volumeMounts: + - name: scripts-dir + mountPath: /scripts + - name: s2i-generate-dir + mountPath: /s2i-generate + + - name: s2i-build + image: registry.access.redhat.com/ubi8/buildah:8.9 + workingDir: /s2i-generate + command: + - /scripts/s2i-build.sh + securityContext: + capabilities: + add: ["SETFCAP"] + volumeMounts: + - name: scripts-dir + mountPath: /scripts + - name: s2i-generate-dir + mountPath: /s2i-generate + + volumes: + - name: scripts-dir + emptyDir: {} + - name: s2i-generate-dir + emptyDir: {} diff --git a/tasks/task-s2i-php/0.2.0/README.md b/tasks/task-s2i-php/0.2.0/README.md new file mode 100644 index 00000000..b86765b3 --- /dev/null +++ b/tasks/task-s2i-php/0.2.0/README.md @@ -0,0 +1,83 @@ +Source-to-Image Tekton Tasks (`s2i`) +------------------------------------ + +# Abstract + +Describes the Tekton Tasks supporting Source-to-Image for various ecosystems. + +# `s2i` Builder Images + +This section we explain each language ecosystem comes with a predefined set of builder images, supported by Red Hat. + +The `s2i` Task helps in building reproducible container images from source code i.e. task for supporting s2i functionality. + +The s2i Task has been customized with builder images specific to various languages and have been named appropriately as follows: + +| Task Name | Builder Image Used | +| ---------- | ---------------------------------------------------------------------- | +| s2i-python | http://registry.access.redhat.com/ubi8/python-39:latest | +| s2i-go | http://registry.access.redhat.com/ubi8/go-toolset:1.19.10-3 | +| s2i-java | http://registry.access.redhat.com/ubi8/openjdk-11:latest | +| s2i-dotnet | http://registry.access.redhat.com/ubi8/dotnet-60:6.0-37.20230802191230 | +| s2i-php | http://registry.access.redhat.com/ubi9/php-81:1-29 | +| s2i-nodejs | http://registry.access.redhat.com/ubi8/nodejs-18:latest | +| s2i-perl | http://registry.access.redhat.com/ubi9/perl-532:1-91 | +| s2i-ruby | http://registry.access.redhat.com/ubi9/ruby-31:1-50 | + +In case, the above builder images associated with the languages aren’t satisfactory for your source code, you can change it using appropriate parameter. + +# Usage + +Please, consider the usage example below: + +```yaml +--- +apiVersion: tekton.dev/v1beta1 +kind: TaskRun +metadata: {} +spec: + taskRef: + name: s2i-python + params: + - name: IMAGE + value: registry.registry.svc.cluster.local:32222/task-containers/task-s2i-python:latest +``` + +In case the Container Registry requires authentication, please consider the [Tekton Pipelines documentation][tektonPipelineAuth]. In a nutshell, you need to create a Kubernetes Secret describing the following attributes: + +```bash +kubectl create secret docker-registry imagestreams \ + --docker-server="image-registry.openshift-image-registry.svc:5000" \ + --docker-username="${REGISTRY_USERNAME}" \ + --docker-password="${REGISTRY_TOKEN}" +``` + +Then make sure the Secret is linked with the Service-Account running the `TaskRun`/`PipelineRun`. + +## Workspaces + +All of the s2i tasks use the `source` workspace which is meant to contain the Application source code, which acts as the build context for S2I workflow. + + +## Params + +| Param | Type | Default | Description | +| ----------------- | ------ | ------------------------ | ------------------------------------------------------------------------- | +| IMAGE | string | (required) | Fully qualified container image name to be built by s2i | +| IMAGE_SCRIPTS_URL | string | image:///usr/libexec/s2i | URL containing the default assemble and run scripts for the builder image | +| ENV_VARS | array | [] | Array containing string of Environment Variables as "KEY=VALUE” | +| SUBDIRECTORY | string | . | Relative subdirectory to the source Workspace for the build-context. | +| STORAGE_DRIVER | string | overlay | Set buildah storage driver to reflect the currrent cluster node's | +| settings. | +| BUILD_EXTRA_ARGS | string | | Extra parameters passed for the build command when building images. | +| PUSH_EXTRA_ARGS | string | | Extra parameters passed for the push command when pushing images. | +| SKIP_PUSH | string | false | Skip pushing the image to the container registry. | +| TLS_VERIFY | string | true | Sets the TLS verification flag, true is recommended. | +| VERBOSE | string | false | Turns on verbose logging, all commands executed will be printed out. | + +## Results + +| Result | Description | +| ------------ | ------------------------------- | +| IMAGE_URL | Fully qualified image name. | +| IMAGE_DIGEST | Digest of the image just built. | diff --git a/tasks/task-s2i-php/0.2.0/task-s2i-php.yaml b/tasks/task-s2i-php/0.2.0/task-s2i-php.yaml new file mode 100644 index 00000000..87008d3f --- /dev/null +++ b/tasks/task-s2i-php/0.2.0/task-s2i-php.yaml @@ -0,0 +1,179 @@ +--- +# Source: task-containers/templates/task-s2i-php.yaml +apiVersion: tekton.dev/v1beta1 +kind: Task +metadata: + name: s2i-php + labels: + app.kubernetes.io/version: 0.2.0 + annotations: + tekton.dev/categories: containers + tekton.dev/pipelines.minVersion: 0.41.0 + tekton.dev/tags: containers +spec: + description: | + Builds the source code using the s2i's php builder-image + "registry.access.redhat.com/ubi9/php-81:1-29". + + + workspaces: + - name: source + optional: false + description: | + Application source code, the build context for S2I workflow. + + params: + - name: IMAGE + type: string + description: | + Fully qualified container image name to be built by s2i. + - name: IMAGE_SCRIPTS_URL + type: string + default: image:///usr/libexec/s2i + description: | + Specify a URL containing the default assemble and run scripts for the builder image + - name: ENV_VARS + type: array + default: [] + description: | + Array containing string of Environment Variables as "KEY=VALUE" + - name: CONTEXT + type: string + default: "." + description: | + Path to the directory to use as context. + - name: STORAGE_DRIVER + type: string + default: vfs + description: | + Set buildah storage driver to reflect the currrent cluster node's + settings. + - name: FORMAT + description: The format of the built container, oci or docker + default: "oci" + - name: BUILD_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the build command when building images. + - name: PUSH_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the push command when pushing images. + - name: SKIP_PUSH + default: "false" + description: | + Skip pushing the image to the container registry. + - name: TLS_VERIFY + type: string + default: "true" + description: | + Sets the TLS verification flag, `true` is recommended. + - name: VERBOSE + type: string + default: "false" + description: | + Turns on verbose logging, all commands executed will be printed out. + + results: + - name: IMAGE_URL + description: | + Fully qualified image name. + - name: IMAGE_DIGEST + description: | + Digest of the image just built. + + stepTemplate: + env: + + - name: PARAMS_IMAGE + value: "$(params.IMAGE)" + - name: PARAMS_IMAGE_SCRIPTS_URL + value: "$(params.IMAGE_SCRIPTS_URL)" + - name: PARAMS_CONTEXT + value: "$(params.CONTEXT)" + - name: PARAMS_FORMAT + value: "$(params.FORMAT)" + - name: PARAMS_STORAGE_DRIVER + value: "$(params.STORAGE_DRIVER)" + - name: PARAMS_BUILD_EXTRA_ARGS + value: "$(params.BUILD_EXTRA_ARGS)" + - name: PARAMS_PUSH_EXTRA_ARGS + value: "$(params.PUSH_EXTRA_ARGS)" + - name: PARAMS_SKIP_PUSH + value: "$(params.SKIP_PUSH)" + - name: PARAMS_TLS_VERIFY + value: "$(params.TLS_VERIFY)" + - name: PARAMS_VERBOSE + value: "$(params.VERBOSE)" + - name: WORKSPACES_SOURCE_BOUND + value: "$(workspaces.source.bound)" + - name: WORKSPACES_SOURCE_PATH + value: "$(workspaces.source.path)" + - name: WORKSPACES_DOCKERCONFIG_BOUND + value: "$(workspaces.dockerconfig.bound)" + - name: WORKSPACES_DOCKERCONFIG_PATH + value: "$(workspaces.dockerconfig.path)" + - name: RESULTS_IMAGE_URL_PATH + value: "$(results.IMAGE_URL.path)" + - name: RESULTS_IMAGE_DIGEST_PATH + value: "$(results.IMAGE_DIGEST.path)" + + steps: + - name: load-scripts + image: registry.access.redhat.com/ubi8-minimal:8.9 + workingDir: /scripts + script: | + set -e + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgV3JhcHBlciBhcm91bmQgImJ1aWxkYWggYnVkIiB0byBidWlsZCBhbmQgcHVzaCBhIGNvbnRhaW5lciBpbWFnZSBiYXNlZCBvbiBhIERvY2tlcmZpbGUuCiMKCnNob3B0IC1zIGluaGVyaXRfZXJyZXhpdApzZXQgLWV1IC1vIHBpcGVmYWlsCgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvY29tbW9uLnNoIgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvYnVpbGRhaC1jb21tb24uc2giCgpmdW5jdGlvbiBfYnVpbGRhaCgpIHsKICAgIGJ1aWxkYWggXAogICAgICAgIC0tc3RvcmFnZS1kcml2ZXI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSfSIgXAogICAgICAgIC0tdGxzLXZlcmlmeT0iJHtQQVJBTVNfVExTX1ZFUklGWX0iIFwKICAgICAgICAkeyp9Cn0KCiMKIyBQcmVwYXJlCiMKCiMgbWFraW5nIHN1cmUgdGhlIHJlcXVpcmVkIHdvcmtzcGFjZSAic291cmNlIiBpcyBib3VuZGVkLCB3aGljaCBtZWFucyBpdHMgdm9sdW1lIGlzIGN1cnJlbnRseSBtb3VudGVkCiMgYW5kIHJlYWR5IHRvIHVzZQpwaGFzZSAiSW5zcGVjdGluZyBzb3VyY2Ugd29ya3NwYWNlICcke1dPUktTUEFDRVNfU09VUkNFX1BBVEh9JyAoUFdEPScke1BXRH0nKSIKW1sgIiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkR9IiAhPSAidHJ1ZSIgXV0gJiYKICAgIGZhaWwgIldvcmtzcGFjZSAnc291cmNlJyBpcyBub3QgYm91bmRlZCIKCnBoYXNlICJBc3NlcnRpbmcgdGhlIGRvY2tlcmZpbGUvY29udGFpbmVyZmlsZSAnJHtET0NLRVJGSUxFX0ZVTEx9JyBleGlzdHMiCltbICEgLWYgIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgIkRvY2tlcmZpbGUgbm90IGZvdW5kIGF0OiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCnBoYXNlICJJbnNwZWN0aW5nIGNvbnRleHQgJyR7UEFSQU1TX0NPTlRFWFR9JyIKW1sgISAtZCAiJHtQQVJBTVNfQ09OVEVYVH0iIF1dICYmCiAgICBmYWlsICJDT05URVhUIHBhcmFtIGlzIG5vdCBmb3VuZCBhdCAnJHtQQVJBTVNfQ09OVEVYVH0nLCBvbiBzb3VyY2Ugd29ya3NwYWNlIgoKIyBIYW5kbGUgb3B0aW9uYWwgZG9ja2VyY29uZmlnIHNlY3JldAppZiBbWyAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19CT1VORH0iID09ICJ0cnVlIiBdXTsgdGhlbgoKICAgICMgaWYgY29uZmlnLmpzb24gZXhpc3RzIGF0IHdvcmtzcGFjZSByb290LCB3ZSB1c2UgdGhhdAogICAgaWYgdGVzdCAtZiAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfS9jb25maWcuanNvbiI7IHRoZW4KICAgICAgICBleHBvcnQgRE9DS0VSX0NPTkZJRz0iJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfSIKCiAgICAgICAgIyBlbHNlIHdlIGxvb2sgZm9yIC5kb2NrZXJjb25maWdqc29uIGF0IHRoZSByb290CiAgICBlbGlmIHRlc3QgLWYgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iOyB0aGVuCiAgICAgICAgY3AgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iICIkSE9NRS8uZG9ja2VyL2NvbmZpZy5qc29uIgogICAgICAgIGV4cG9ydCBET0NLRVJfQ09ORklHPSIkSE9NRS8uZG9ja2VyIgoKICAgICAgICAjIG5lZWQgdG8gZXJyb3Igb3V0IGlmIG5laXRoZXIgZmlsZXMgYXJlIHByZXNlbnQKICAgIGVsc2UKICAgICAgICBlY2hvICJuZWl0aGVyICdjb25maWcuanNvbicgbm9yICcuZG9ja2VyY29uZmlnanNvbicgZm91bmQgYXQgd29ya3NwYWNlIHJvb3QiCiAgICAgICAgZXhpdCAxCiAgICBmaQpmaQoKIwojIEJ1aWxkCiMKCnBoYXNlICJCdWlsZGluZyAnJHtQQVJBTVNfSU1BR0V9JyBiYXNlZCBvbiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCltbIC1uICIke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX0JVSUxEX0VYVFJBX0FSR1N9JyIKCl9idWlsZGFoIGJ1ZCAke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSBcCiAgICAtLW5vLWNhY2hlIFwKICAgIC0tZmlsZT0iJHtET0NLRVJGSUxFX0ZVTEx9IiBcCiAgICAtLXRhZz0iJHtQQVJBTVNfSU1BR0V9IiBcCiAgICAke1BBUkFNU19DT05URVhUfQoKaWYgW1sgIiR7UEFSQU1TX1NLSVBfUFVTSH0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgcGhhc2UgIlNraXBwaW5nIHB1c2hpbmcgJyR7UEFSQU1TX0lNQUdFfScgdG8gdGhlIGNvbnRhaW5lciByZWdpc3RyeSEiCiAgICBleGl0IDAKZmkKCiMKIyBQdXNoCiMKCnBoYXNlICJQdXNoaW5nICcke1BBUkFNU19JTUFHRX0nIHRvIHRoZSBjb250YWluZXIgcmVnaXN0cnkiCgpbWyAtbiAiJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX1BVU0hfRVhUUkFfQVJHU30nIgoKIyB0ZW1wb3JhcnkgZmlsZSB0byBzdG9yZSB0aGUgaW1hZ2UgZGlnZXN0LCBpbmZvcm1hdGlvbiBvbmx5IG9idGFpbmVkIGFmdGVyIHB1c2hpbmcgdGhlIGltYWdlIHRvIHRoZQojIGNvbnRhaW5lciByZWdpc3RyeQpkZWNsYXJlIC1yIGRpZ2VzdF9maWxlPSIvdG1wL2J1aWxkYWgtZGlnZXN0LnR4dCIKCl9idWlsZGFoIHB1c2ggJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSBcCiAgICAtLWRpZ2VzdGZpbGU9IiR7ZGlnZXN0X2ZpbGV9IiBcCiAgICAke1BBUkFNU19JTUFHRX0gXAogICAgZG9ja2VyOi8vJHtQQVJBTVNfSU1BR0V9CgojCiMgUmVzdWx0cwojCgpwaGFzZSAiSW5zcGVjdGluZyBkaWdlc3QgcmVwb3J0ICgnJHtkaWdlc3RfZmlsZX0nKSIKCltbICEgLXIgIiR7ZGlnZXN0X2ZpbGV9IiBdXSAmJgogICAgZmFpbCAiVW5hYmxlIHRvIGZpbmQgZGlnZXN0LWZpbGUgYXQgJyR7ZGlnZXN0X2ZpbGV9JyIKCmRlY2xhcmUgLXIgZGlnZXN0X3N1bT0iJChjYXQgJHtkaWdlc3RfZmlsZX0pIgoKW1sgLXogIiR7ZGlnZXN0X3N1bX0iIF1dICYmCiAgICBmYWlsICJEaWdlc3QgZmlsZSAnJHtkaWdlc3RfZmlsZX0nIGlzIGVtcHR5ISIKCnBoYXNlICJTdWNjZXNzZnVseSBidWlsdCBjb250YWluZXIgaW1hZ2UgJyR7UEFSQU1TX0lNQUdFfScgKCcke2RpZ2VzdF9zdW19JykiCmVjaG8gLW4gIiR7UEFSQU1TX0lNQUdFfSIgfCB0ZWUgJHtSRVNVTFRTX0lNQUdFX1VSTF9QQVRIfQplY2hvIC1uICIke2RpZ2VzdF9zdW19IiB8IHRlZSAke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEh9Cg==" |base64 -d >buildah-bud.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKZGVjbGFyZSAtcnggUEFSQU1TX0lNQUdFPSIke1BBUkFNU19JTUFHRTotfSIKZGVjbGFyZSAtcnggUEFSQU1TX0RPQ0tFUkZJTEU9IiR7UEFSQU1TX0RPQ0tFUkZJTEU6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19DT05URVhUPSIke1BBUkFNU19DT05URVhUOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU1RPUkFHRV9EUklWRVI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfQlVJTERfRVhUUkFfQVJHUz0iJHtQQVJBTVNfQlVJTERfRVhUUkFfQVJHUzotfSIKZGVjbGFyZSAtcnggUEFSQU1TX1BVU0hfRVhUUkFfQVJHUz0iJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU0tJUF9QVVNIPSIke1BBUkFNU19TS0lQX1BVU0g6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19UTFNfVkVSSUZZPSIke1BBUkFNU19UTFNfVkVSSUZZOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfVkVSQk9TRT0iJHtQQVJBTVNfVkVSQk9TRTotfSIKCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfU09VUkNFX1BBVEg9IiR7V09SS1NQQUNFU19TT1VSQ0VfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ9IiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ6LX0iCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfRE9DS0VSQ09ORklHX1BBVEg9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ6LX0iCgpkZWNsYXJlIC1yeCBSRVNVTFRTX0lNQUdFX0RJR0VTVF9QQVRIPSIke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEg6LX0iCmRlY2xhcmUgLXJ4IFJFU1VMVFNfSU1BR0VfVVJMX1BBVEg9IiR7UkVTVUxUU19JTUFHRV9VUkxfUEFUSDotfSIKCiMKIyBEb2NrZXJmaWxlCiMKCiMgZXhwb3NpbmcgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGFpbmVyIGZpbGUsIHdoaWNoIGJ5IGRlZmF1bHQgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBwcmltYXJ5CiMgd29ya3NwYWNlLCB0byByZWNlaXZlIGEgZGlmZmVyZW50IGNvbnRhaW5lci1maWxlIGxvY2F0aW9uCmRlY2xhcmUgLXIgZG9ja2VyZmlsZV9vbl93cz0iJHtXT1JLU1BBQ0VTX1NPVVJDRV9QQVRIfS8ke1BBUkFNU19ET0NLRVJGSUxFfSIKZGVjbGFyZSAteCBET0NLRVJGSUxFX0ZVTEw9IiR7RE9DS0VSRklMRV9GVUxMOi0ke2RvY2tlcmZpbGVfb25fd3N9fSIKCiMKIyBBc3NlcnRpbmcgRW52aXJvbm1lbnQKIwoKW1sgLXogIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgInVuYWJsZSB0byBmaW5kIHRoZSBEb2NrZXJmaWxlLCBET0NLRVJGSUxFIG1heSBoYXZlIGFuIGluY29ycmVjdCBsb2NhdGlvbiIKCmV4cG9ydGVkX29yX2ZhaWwgXAogICAgV09SS1NQQUNFU19TT1VSQ0VfUEFUSCBcCiAgICBQQVJBTVNfSU1BR0UKCiMKIyBWZXJib3NlIE91dHB1dAojCgppZiBbWyAiJHtQQVJBTVNfVkVSQk9TRX0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgc2V0IC14CmZpCg==" |base64 -d >buildah-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + chmod +x buildah-*.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgVXNlcyB0aGUgRG9ja2VyZmlsZSBnZW5lcmF0ZWQgYnkgczJpIHRvIGFzc2VtYmxlIGEgbmV3IGNvbnRhaW5lciBpbWFnZSB1c2luZyBidWlsZGFoLgojCgpzaG9wdCAtcyBpbmhlcml0X2VycmV4aXQKc2V0IC1ldSAtbyBwaXBlZmFpbAoKZGVjbGFyZSAtciBjdXJfZGlyPSIkKGRpcm5hbWUgJHtCQVNIX1NPVVJDRVswXX0pIgoKc291cmNlICIke2N1cl9kaXJ9L2NvbW1vbi5zaCIKc291cmNlICIke2N1cl9kaXJ9L3MyaS1jb21tb24uc2giCgojIGxvYWRpbmcgYnVpbGRhaCBzZXR0aW5ncyBvdmVyd3JpdHRpbmcgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGFpbmVyIGZpbGUKZGVjbGFyZSAteCBET0NLRVJGSUxFX0ZVTEw9IiR7UzJJX0RPQ0tFUkZJTEV9Igpzb3VyY2UgIiR7Y3VyX2Rpcn0vYnVpbGRhaC1jb21tb24uc2giCgpwaGFzZSAiQnVpbGRpbmcgdGhlIERvY2tlcmZpbGUgJyR7RE9DS0VSRklMRV9GVUxMfScgd2l0aCBidWlsZGFoIgpleGVjICR7Y3VyX2Rpcn0vYnVpbGRhaC1idWQuc2gK" |base64 -d >s2i-build.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0YXJnZXQgaW1hZ2UgbmFtZSAoZnVsbHkgcXVhbGlmaWVkKSB0byBiZSBidWlsZCB3aXRoIHMyaSwgcmVkZWNsYXJpbmcgdGhlIHNhbWUgcGFyYW1ldGVyIG5hbWUgdGhhbgojIGJ1aWxkYWggdGFzayB1c2VzCmRlY2xhcmUgLXggUEFSQU1TX0lNQUdFPSIke1BBUkFNU19JTUFHRTotfSIKIyBTcGVjaWZ5IGEgVVJMIGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgYXNzZW1ibGUgYW5kIHJ1biBzY3JpcHRzIGZvciB0aGUgYnVpbGRlciBpbWFnZQpkZWNsYXJlIC1yeCBQQVJBTVNfSU1BR0VfU0NSSVBUU19VUkw9IiR7UEFSQU1TX0lNQUdFX1NDUklQVFNfVVJMOi19IgoKIyB2b2x1bWUgbW91bnQgb3IgZGlyZWN0b3J5IHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIGZpbGVzIAojIGxpa2UgZW52LCBEb2NrZXJmaWxlIGFuZCBhbnkgb3RoZXJzIG5lZWRlZCB0byBzdXBwb3J0IHMyaQpkZWNsYXJlIC1yeCBTMklfR0VORVJBVEVfRElSRUNUT1JZPSIke1MySV9HRU5FUkFURV9ESVJFQ1RPUlk6LS9zMmktZ2VuZXJhdGV9IgoKIyBmdWxsIHBhdGggdG8gdGhlIGNvbnRhaW5lciBmaWxlIGdlbmVyYXRlZCBieSBzMmkKZGVjbGFyZSAtcnggUzJJX0RPQ0tFUkZJTEU9IiR7UzJJX0RPQ0tFUkZJTEU6LSR7UzJJX0dFTkVSQVRFX0RJUkVDVE9SWX0vRG9ja2VyZmlsZS5nZW59IgoKIyBmdWxsIHBhdGggdG8gdGhlIGVudiBmaWxlIHVzZWQgd2l0aCB0aGUgLS1lbnZpcm9ubWVudC1maWxlIHBhcmFtZXRlciBvZiBzMmkKZGVjbGFyZSAtcnggUzJJX0VOVklST05NRU5UX0ZJTEU9IiR7UzJJX0VOVklST05NRU5UX0ZJTEU6LSR7UzJJX0dFTkVSQVRFX0RJUkVDVE9SWX0vZW52fSIKCiMKIyBBc3NlcnRpbmcgRW52aXJvbm1lbnQKIwoKZXhwb3J0ZWRfb3JfZmFpbCBcCiAgICBXT1JLU1BBQ0VTX1NPVVJDRV9QQVRIIFwKICAgIFBBUkFNU19JTUFHRQoKIwojIFZlcmJvc2UgT3V0cHV0CiMKCmRlY2xhcmUgLXggUzJJX0xPR0xFVkVMPSIwIgoKaWYgW1sgIiR7UEFSQU1TX1ZFUkJPU0V9IiA9PSAidHJ1ZSIgXV07IHRoZW4KICAgIFMySV9MT0dMRVZFTD0iMiIKICAgIHNldCAteApmaQo=" |base64 -d >s2i-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgVXNlcyBzMmkgdG8gZ2VuZXJhdGUgdGhlIHJlcGVzY3RpdmUgQ29udGFpbmVyZmlsZSBiYXNlZCBvbiB0aGUgaW5mb21yZWQgYnVpbGRlci4gVGhlIENvbnRhaW5lcmZpbGUKIyBpcyBzdG9yZWQgb24gYSB0ZW1wb3JhcnkgbG9jYXRpb24uCiMKCnNob3B0IC1zIGluaGVyaXRfZXJyZXhpdApzZXQgLWV1IC1vIHBpcGVmYWlsCgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvY29tbW9uLnNoIgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvczJpLWNvbW1vbi5zaCIKCiMgczJpIGJ1aWxkZXIgaW1hZ2UgbmFtZSAoZnVsbHkgcXVhbGlmaWVkKQpkZWNsYXJlIC1yeCBTMklfQlVJTERFUl9JTUFHRT0iJHtTMklfQlVJTERFUl9JTUFHRTotfSIKCiMgdGFrZXMgdGhlIHZhbHVlcyBpbiBhcmd1bWVudCBFTlZfVkFSUyBhbmQgY3JlYXRlcyBhbiBhcnJheSB1c2luZyB0aG9zZSB2YWx1ZXMKZGVjbGFyZSAtcmEgRU5WX1ZBUlM9KCR7QH0pCgojIHJlLXVzaW5nIHRoZSBzYW1lIHBhcmFtZXRlcnMgdGhhbiBidWlsZGFoLCBzMmkgbmVlZHMgYnVpbGRhaCBhYmlsaXRpZXMgdG8gY3JlYXRlIHRoZSBmaW5hbAojIGNvbnRhaW5lciBpbWFnZSBiYXNlZCBvbiB3aGF0IHMyaSBnZW5lcmF0ZXMKc291cmNlICIkKGRpcm5hbWUgJHtCQVNIX1NPVVJDRVswXX0pL2J1aWxkYWgtY29tbW9uLnNoIgoKIwojIFByZXBhcmUKIwoKIyBtYWtpbmcgc3VyZSB0aGUgcmVxdWlyZWQgd29ya3NwYWNlICJzb3VyY2UiIGlzIGJvdW5kZWQsIHdoaWNoIG1lYW5zIGl0cyB2b2x1bWUgaXMgY3VycmVudGx5IG1vdW50ZWQKIyBhbmQgcmVhZHkgdG8gdXNlCnBoYXNlICJJbnNwZWN0aW5nIHNvdXJjZSB3b3Jrc3BhY2UgJyR7V09SS1NQQUNFU19TT1VSQ0VfUEFUSH0nIChQV0Q9JyR7UFdEfScpIgpbWyAiJHtXT1JLU1BBQ0VTX1NPVVJDRV9CT1VORH0iICE9ICJ0cnVlIiBdXSAmJgogICAgZmFpbCAiV29ya3NwYWNlICdzb3VyY2UnIGlzIG5vdCBib3VuZGVkIgoKcGhhc2UgIkluc3BlY3RpbmcgY29udGV4dCAnJHtQQVJBTVNfQ09OVEVYVH0nIgpbWyAhIC1kICIke1BBUkFNU19DT05URVhUfSIgXV0gJiYKICAgIGZhaWwgIkFwcGxpY2F0aW9uIHNvdXJjZSBjb2RlIGRpcmVjdG9yeSBub3QgZm91bmQgYXQgJyR7UEFSQU1TX0NPTlRFWFR9JyIKCnBoYXNlICJBZGRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byAnJHtTMklfRU5WSVJPTk1FTlRfRklMRX0nIgoKIyBhZGQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFyZSBzZW50IGFzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZnJvbSBFTlZfVkFSUyBwYXJhbWV0ZXIKdG91Y2ggIiR7UzJJX0VOVklST05NRU5UX0ZJTEV9IgppZiBbICR7I0VOVl9WQVJTW0BdfSAtZ3QgMCBdOyB0aGVuCiAgICBmb3IgZW52X3ZhciBpbiAiJHtFTlZfVkFSU1tAXX0iOyBkbwogICAgICAgIGVjaG8gIiR7ZW52X3Zhcn0iID4+ICIke1MySV9FTlZJUk9OTUVOVF9GSUxFfSIKICAgIGRvbmUKZmkKCiMKIyBTMkkgR2VuZXJhdGUKIwoKcGhhc2UgIkdlbmVyYXRpbmcgdGhlIERvY2tlcmZpbGUgZm9yIFMySSBidWlsZGVyIGltYWdlICcke1MySV9CVUlMREVSX0lNQUdFfSciCnMyaSAtLWxvZ2xldmVsICIke1MySV9MT0dMRVZFTH0iIFwKICAgIGJ1aWxkICIke1BBUkFNU19DT05URVhUfSIgIiR7UzJJX0JVSUxERVJfSU1BR0V9IiBcCiAgICAgICAgLS1pbWFnZS1zY3JpcHRzLXVybCAiJHtQQVJBTVNfSU1BR0VfU0NSSVBUU19VUkx9IiBcCiAgICAgICAgLS1hcy1kb2NrZXJmaWxlICIke1MySV9ET0NLRVJGSUxFfSIgXAogICAgICAgIC0tZW52aXJvbm1lbnQtZmlsZSAiJHtTMklfRU5WSVJPTk1FTlRfRklMRX0iCgpwaGFzZSAiSW5zcGVjdGluZyB0aGUgRG9ja2VyZmlsZSBnZW5lcmF0ZWQgYXQgJyR7UzJJX0RPQ0tFUkZJTEV9JyIKW1sgISAtZiAiJHtTMklfRE9DS0VSRklMRX0iIF1dICYmCiAgICBmYWlsICJHZW5lcmF0ZWQgRG9ja2VyZmlsZSBpcyBub3QgZm91bmQhIgoKc2V0ICt4CnBoYXNlICJHZW5lcmF0ZWQgRG9ja2VyZmlsZSBwYXlsb2FkIgplY2hvIC1lbiAiPj4+ICR7UzJJX0RPQ0tFUkZJTEV9XG4kKGNhdCAke1MySV9ET0NLRVJGSUxFfSlcbjw8PCBFT0ZcbiIK" |base64 -d >s2i-generate.sh + chmod +x s2i-*.sh + volumeMounts: + - name: scripts-dir + mountPath: /scripts + + - name: s2i-generate + image: registry.access.redhat.com/source-to-image/source-to-image-rhel8:v1.3.9-6 + workingDir: $(workspaces.source.path) + env: + - name: S2I_BUILDER_IMAGE + value: registry.access.redhat.com/ubi9/php-81:1-29 + command: + - /scripts/s2i-generate.sh + args: + - "$(params.ENV_VARS[*])" + securityContext: + capabilities: + add: ["SETFCAP"] + volumeMounts: + - name: scripts-dir + mountPath: /scripts + - name: s2i-generate-dir + mountPath: /s2i-generate + + - name: s2i-build + image: registry.access.redhat.com/ubi8/buildah:8.9 + workingDir: /s2i-generate + command: + - /scripts/s2i-build.sh + securityContext: + capabilities: + add: ["SETFCAP"] + volumeMounts: + - name: scripts-dir + mountPath: /scripts + - name: s2i-generate-dir + mountPath: /s2i-generate + + volumes: + - name: scripts-dir + emptyDir: {} + - name: s2i-generate-dir + emptyDir: {} diff --git a/tasks/task-s2i-python/0.2.0/README.md b/tasks/task-s2i-python/0.2.0/README.md new file mode 100644 index 00000000..b86765b3 --- /dev/null +++ b/tasks/task-s2i-python/0.2.0/README.md @@ -0,0 +1,83 @@ +Source-to-Image Tekton Tasks (`s2i`) +------------------------------------ + +# Abstract + +Describes the Tekton Tasks supporting Source-to-Image for various ecosystems. + +# `s2i` Builder Images + +This section we explain each language ecosystem comes with a predefined set of builder images, supported by Red Hat. + +The `s2i` Task helps in building reproducible container images from source code i.e. task for supporting s2i functionality. + +The s2i Task has been customized with builder images specific to various languages and have been named appropriately as follows: + +| Task Name | Builder Image Used | +| ---------- | ---------------------------------------------------------------------- | +| s2i-python | http://registry.access.redhat.com/ubi8/python-39:latest | +| s2i-go | http://registry.access.redhat.com/ubi8/go-toolset:1.19.10-3 | +| s2i-java | http://registry.access.redhat.com/ubi8/openjdk-11:latest | +| s2i-dotnet | http://registry.access.redhat.com/ubi8/dotnet-60:6.0-37.20230802191230 | +| s2i-php | http://registry.access.redhat.com/ubi9/php-81:1-29 | +| s2i-nodejs | http://registry.access.redhat.com/ubi8/nodejs-18:latest | +| s2i-perl | http://registry.access.redhat.com/ubi9/perl-532:1-91 | +| s2i-ruby | http://registry.access.redhat.com/ubi9/ruby-31:1-50 | + +In case, the above builder images associated with the languages aren’t satisfactory for your source code, you can change it using appropriate parameter. + +# Usage + +Please, consider the usage example below: + +```yaml +--- +apiVersion: tekton.dev/v1beta1 +kind: TaskRun +metadata: {} +spec: + taskRef: + name: s2i-python + params: + - name: IMAGE + value: registry.registry.svc.cluster.local:32222/task-containers/task-s2i-python:latest +``` + +In case the Container Registry requires authentication, please consider the [Tekton Pipelines documentation][tektonPipelineAuth]. In a nutshell, you need to create a Kubernetes Secret describing the following attributes: + +```bash +kubectl create secret docker-registry imagestreams \ + --docker-server="image-registry.openshift-image-registry.svc:5000" \ + --docker-username="${REGISTRY_USERNAME}" \ + --docker-password="${REGISTRY_TOKEN}" +``` + +Then make sure the Secret is linked with the Service-Account running the `TaskRun`/`PipelineRun`. + +## Workspaces + +All of the s2i tasks use the `source` workspace which is meant to contain the Application source code, which acts as the build context for S2I workflow. + + +## Params + +| Param | Type | Default | Description | +| ----------------- | ------ | ------------------------ | ------------------------------------------------------------------------- | +| IMAGE | string | (required) | Fully qualified container image name to be built by s2i | +| IMAGE_SCRIPTS_URL | string | image:///usr/libexec/s2i | URL containing the default assemble and run scripts for the builder image | +| ENV_VARS | array | [] | Array containing string of Environment Variables as "KEY=VALUE” | +| SUBDIRECTORY | string | . | Relative subdirectory to the source Workspace for the build-context. | +| STORAGE_DRIVER | string | overlay | Set buildah storage driver to reflect the currrent cluster node's | +| settings. | +| BUILD_EXTRA_ARGS | string | | Extra parameters passed for the build command when building images. | +| PUSH_EXTRA_ARGS | string | | Extra parameters passed for the push command when pushing images. | +| SKIP_PUSH | string | false | Skip pushing the image to the container registry. | +| TLS_VERIFY | string | true | Sets the TLS verification flag, true is recommended. | +| VERBOSE | string | false | Turns on verbose logging, all commands executed will be printed out. | + +## Results + +| Result | Description | +| ------------ | ------------------------------- | +| IMAGE_URL | Fully qualified image name. | +| IMAGE_DIGEST | Digest of the image just built. | diff --git a/tasks/task-s2i-python/0.2.0/task-s2i-python.yaml b/tasks/task-s2i-python/0.2.0/task-s2i-python.yaml new file mode 100644 index 00000000..b9aa00d7 --- /dev/null +++ b/tasks/task-s2i-python/0.2.0/task-s2i-python.yaml @@ -0,0 +1,179 @@ +--- +# Source: task-containers/templates/task-s2i-python.yaml +apiVersion: tekton.dev/v1beta1 +kind: Task +metadata: + name: s2i-python + labels: + app.kubernetes.io/version: 0.2.0 + annotations: + tekton.dev/categories: containers + tekton.dev/pipelines.minVersion: 0.41.0 + tekton.dev/tags: containers +spec: + description: | + Builds the source code using the s2i's Python builder-image + "registry.access.redhat.com/ubi8/python-39:latest". + + + workspaces: + - name: source + optional: false + description: | + Application source code, the build context for S2I workflow. + + params: + - name: IMAGE + type: string + description: | + Fully qualified container image name to be built by s2i. + - name: IMAGE_SCRIPTS_URL + type: string + default: image:///usr/libexec/s2i + description: | + Specify a URL containing the default assemble and run scripts for the builder image + - name: ENV_VARS + type: array + default: [] + description: | + Array containing string of Environment Variables as "KEY=VALUE" + - name: CONTEXT + type: string + default: "." + description: | + Path to the directory to use as context. + - name: STORAGE_DRIVER + type: string + default: vfs + description: | + Set buildah storage driver to reflect the currrent cluster node's + settings. + - name: FORMAT + description: The format of the built container, oci or docker + default: "oci" + - name: BUILD_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the build command when building images. + - name: PUSH_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the push command when pushing images. + - name: SKIP_PUSH + default: "false" + description: | + Skip pushing the image to the container registry. + - name: TLS_VERIFY + type: string + default: "true" + description: | + Sets the TLS verification flag, `true` is recommended. + - name: VERBOSE + type: string + default: "false" + description: | + Turns on verbose logging, all commands executed will be printed out. + + results: + - name: IMAGE_URL + description: | + Fully qualified image name. + - name: IMAGE_DIGEST + description: | + Digest of the image just built. + + stepTemplate: + env: + + - name: PARAMS_IMAGE + value: "$(params.IMAGE)" + - name: PARAMS_IMAGE_SCRIPTS_URL + value: "$(params.IMAGE_SCRIPTS_URL)" + - name: PARAMS_CONTEXT + value: "$(params.CONTEXT)" + - name: PARAMS_FORMAT + value: "$(params.FORMAT)" + - name: PARAMS_STORAGE_DRIVER + value: "$(params.STORAGE_DRIVER)" + - name: PARAMS_BUILD_EXTRA_ARGS + value: "$(params.BUILD_EXTRA_ARGS)" + - name: PARAMS_PUSH_EXTRA_ARGS + value: "$(params.PUSH_EXTRA_ARGS)" + - name: PARAMS_SKIP_PUSH + value: "$(params.SKIP_PUSH)" + - name: PARAMS_TLS_VERIFY + value: "$(params.TLS_VERIFY)" + - name: PARAMS_VERBOSE + value: "$(params.VERBOSE)" + - name: WORKSPACES_SOURCE_BOUND + value: "$(workspaces.source.bound)" + - name: WORKSPACES_SOURCE_PATH + value: "$(workspaces.source.path)" + - name: WORKSPACES_DOCKERCONFIG_BOUND + value: "$(workspaces.dockerconfig.bound)" + - name: WORKSPACES_DOCKERCONFIG_PATH + value: "$(workspaces.dockerconfig.path)" + - name: RESULTS_IMAGE_URL_PATH + value: "$(results.IMAGE_URL.path)" + - name: RESULTS_IMAGE_DIGEST_PATH + value: "$(results.IMAGE_DIGEST.path)" + + steps: + - name: load-scripts + image: registry.access.redhat.com/ubi8-minimal:8.9 + workingDir: /scripts + script: | + set -e + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgV3JhcHBlciBhcm91bmQgImJ1aWxkYWggYnVkIiB0byBidWlsZCBhbmQgcHVzaCBhIGNvbnRhaW5lciBpbWFnZSBiYXNlZCBvbiBhIERvY2tlcmZpbGUuCiMKCnNob3B0IC1zIGluaGVyaXRfZXJyZXhpdApzZXQgLWV1IC1vIHBpcGVmYWlsCgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvY29tbW9uLnNoIgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvYnVpbGRhaC1jb21tb24uc2giCgpmdW5jdGlvbiBfYnVpbGRhaCgpIHsKICAgIGJ1aWxkYWggXAogICAgICAgIC0tc3RvcmFnZS1kcml2ZXI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSfSIgXAogICAgICAgIC0tdGxzLXZlcmlmeT0iJHtQQVJBTVNfVExTX1ZFUklGWX0iIFwKICAgICAgICAkeyp9Cn0KCiMKIyBQcmVwYXJlCiMKCiMgbWFraW5nIHN1cmUgdGhlIHJlcXVpcmVkIHdvcmtzcGFjZSAic291cmNlIiBpcyBib3VuZGVkLCB3aGljaCBtZWFucyBpdHMgdm9sdW1lIGlzIGN1cnJlbnRseSBtb3VudGVkCiMgYW5kIHJlYWR5IHRvIHVzZQpwaGFzZSAiSW5zcGVjdGluZyBzb3VyY2Ugd29ya3NwYWNlICcke1dPUktTUEFDRVNfU09VUkNFX1BBVEh9JyAoUFdEPScke1BXRH0nKSIKW1sgIiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkR9IiAhPSAidHJ1ZSIgXV0gJiYKICAgIGZhaWwgIldvcmtzcGFjZSAnc291cmNlJyBpcyBub3QgYm91bmRlZCIKCnBoYXNlICJBc3NlcnRpbmcgdGhlIGRvY2tlcmZpbGUvY29udGFpbmVyZmlsZSAnJHtET0NLRVJGSUxFX0ZVTEx9JyBleGlzdHMiCltbICEgLWYgIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgIkRvY2tlcmZpbGUgbm90IGZvdW5kIGF0OiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCnBoYXNlICJJbnNwZWN0aW5nIGNvbnRleHQgJyR7UEFSQU1TX0NPTlRFWFR9JyIKW1sgISAtZCAiJHtQQVJBTVNfQ09OVEVYVH0iIF1dICYmCiAgICBmYWlsICJDT05URVhUIHBhcmFtIGlzIG5vdCBmb3VuZCBhdCAnJHtQQVJBTVNfQ09OVEVYVH0nLCBvbiBzb3VyY2Ugd29ya3NwYWNlIgoKIyBIYW5kbGUgb3B0aW9uYWwgZG9ja2VyY29uZmlnIHNlY3JldAppZiBbWyAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19CT1VORH0iID09ICJ0cnVlIiBdXTsgdGhlbgoKICAgICMgaWYgY29uZmlnLmpzb24gZXhpc3RzIGF0IHdvcmtzcGFjZSByb290LCB3ZSB1c2UgdGhhdAogICAgaWYgdGVzdCAtZiAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfS9jb25maWcuanNvbiI7IHRoZW4KICAgICAgICBleHBvcnQgRE9DS0VSX0NPTkZJRz0iJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfSIKCiAgICAgICAgIyBlbHNlIHdlIGxvb2sgZm9yIC5kb2NrZXJjb25maWdqc29uIGF0IHRoZSByb290CiAgICBlbGlmIHRlc3QgLWYgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iOyB0aGVuCiAgICAgICAgY3AgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iICIkSE9NRS8uZG9ja2VyL2NvbmZpZy5qc29uIgogICAgICAgIGV4cG9ydCBET0NLRVJfQ09ORklHPSIkSE9NRS8uZG9ja2VyIgoKICAgICAgICAjIG5lZWQgdG8gZXJyb3Igb3V0IGlmIG5laXRoZXIgZmlsZXMgYXJlIHByZXNlbnQKICAgIGVsc2UKICAgICAgICBlY2hvICJuZWl0aGVyICdjb25maWcuanNvbicgbm9yICcuZG9ja2VyY29uZmlnanNvbicgZm91bmQgYXQgd29ya3NwYWNlIHJvb3QiCiAgICAgICAgZXhpdCAxCiAgICBmaQpmaQoKIwojIEJ1aWxkCiMKCnBoYXNlICJCdWlsZGluZyAnJHtQQVJBTVNfSU1BR0V9JyBiYXNlZCBvbiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCltbIC1uICIke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX0JVSUxEX0VYVFJBX0FSR1N9JyIKCl9idWlsZGFoIGJ1ZCAke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSBcCiAgICAtLW5vLWNhY2hlIFwKICAgIC0tZmlsZT0iJHtET0NLRVJGSUxFX0ZVTEx9IiBcCiAgICAtLXRhZz0iJHtQQVJBTVNfSU1BR0V9IiBcCiAgICAke1BBUkFNU19DT05URVhUfQoKaWYgW1sgIiR7UEFSQU1TX1NLSVBfUFVTSH0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgcGhhc2UgIlNraXBwaW5nIHB1c2hpbmcgJyR7UEFSQU1TX0lNQUdFfScgdG8gdGhlIGNvbnRhaW5lciByZWdpc3RyeSEiCiAgICBleGl0IDAKZmkKCiMKIyBQdXNoCiMKCnBoYXNlICJQdXNoaW5nICcke1BBUkFNU19JTUFHRX0nIHRvIHRoZSBjb250YWluZXIgcmVnaXN0cnkiCgpbWyAtbiAiJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX1BVU0hfRVhUUkFfQVJHU30nIgoKIyB0ZW1wb3JhcnkgZmlsZSB0byBzdG9yZSB0aGUgaW1hZ2UgZGlnZXN0LCBpbmZvcm1hdGlvbiBvbmx5IG9idGFpbmVkIGFmdGVyIHB1c2hpbmcgdGhlIGltYWdlIHRvIHRoZQojIGNvbnRhaW5lciByZWdpc3RyeQpkZWNsYXJlIC1yIGRpZ2VzdF9maWxlPSIvdG1wL2J1aWxkYWgtZGlnZXN0LnR4dCIKCl9idWlsZGFoIHB1c2ggJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSBcCiAgICAtLWRpZ2VzdGZpbGU9IiR7ZGlnZXN0X2ZpbGV9IiBcCiAgICAke1BBUkFNU19JTUFHRX0gXAogICAgZG9ja2VyOi8vJHtQQVJBTVNfSU1BR0V9CgojCiMgUmVzdWx0cwojCgpwaGFzZSAiSW5zcGVjdGluZyBkaWdlc3QgcmVwb3J0ICgnJHtkaWdlc3RfZmlsZX0nKSIKCltbICEgLXIgIiR7ZGlnZXN0X2ZpbGV9IiBdXSAmJgogICAgZmFpbCAiVW5hYmxlIHRvIGZpbmQgZGlnZXN0LWZpbGUgYXQgJyR7ZGlnZXN0X2ZpbGV9JyIKCmRlY2xhcmUgLXIgZGlnZXN0X3N1bT0iJChjYXQgJHtkaWdlc3RfZmlsZX0pIgoKW1sgLXogIiR7ZGlnZXN0X3N1bX0iIF1dICYmCiAgICBmYWlsICJEaWdlc3QgZmlsZSAnJHtkaWdlc3RfZmlsZX0nIGlzIGVtcHR5ISIKCnBoYXNlICJTdWNjZXNzZnVseSBidWlsdCBjb250YWluZXIgaW1hZ2UgJyR7UEFSQU1TX0lNQUdFfScgKCcke2RpZ2VzdF9zdW19JykiCmVjaG8gLW4gIiR7UEFSQU1TX0lNQUdFfSIgfCB0ZWUgJHtSRVNVTFRTX0lNQUdFX1VSTF9QQVRIfQplY2hvIC1uICIke2RpZ2VzdF9zdW19IiB8IHRlZSAke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEh9Cg==" |base64 -d >buildah-bud.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKZGVjbGFyZSAtcnggUEFSQU1TX0lNQUdFPSIke1BBUkFNU19JTUFHRTotfSIKZGVjbGFyZSAtcnggUEFSQU1TX0RPQ0tFUkZJTEU9IiR7UEFSQU1TX0RPQ0tFUkZJTEU6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19DT05URVhUPSIke1BBUkFNU19DT05URVhUOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU1RPUkFHRV9EUklWRVI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfQlVJTERfRVhUUkFfQVJHUz0iJHtQQVJBTVNfQlVJTERfRVhUUkFfQVJHUzotfSIKZGVjbGFyZSAtcnggUEFSQU1TX1BVU0hfRVhUUkFfQVJHUz0iJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU0tJUF9QVVNIPSIke1BBUkFNU19TS0lQX1BVU0g6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19UTFNfVkVSSUZZPSIke1BBUkFNU19UTFNfVkVSSUZZOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfVkVSQk9TRT0iJHtQQVJBTVNfVkVSQk9TRTotfSIKCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfU09VUkNFX1BBVEg9IiR7V09SS1NQQUNFU19TT1VSQ0VfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ9IiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ6LX0iCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfRE9DS0VSQ09ORklHX1BBVEg9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ6LX0iCgpkZWNsYXJlIC1yeCBSRVNVTFRTX0lNQUdFX0RJR0VTVF9QQVRIPSIke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEg6LX0iCmRlY2xhcmUgLXJ4IFJFU1VMVFNfSU1BR0VfVVJMX1BBVEg9IiR7UkVTVUxUU19JTUFHRV9VUkxfUEFUSDotfSIKCiMKIyBEb2NrZXJmaWxlCiMKCiMgZXhwb3NpbmcgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGFpbmVyIGZpbGUsIHdoaWNoIGJ5IGRlZmF1bHQgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBwcmltYXJ5CiMgd29ya3NwYWNlLCB0byByZWNlaXZlIGEgZGlmZmVyZW50IGNvbnRhaW5lci1maWxlIGxvY2F0aW9uCmRlY2xhcmUgLXIgZG9ja2VyZmlsZV9vbl93cz0iJHtXT1JLU1BBQ0VTX1NPVVJDRV9QQVRIfS8ke1BBUkFNU19ET0NLRVJGSUxFfSIKZGVjbGFyZSAteCBET0NLRVJGSUxFX0ZVTEw9IiR7RE9DS0VSRklMRV9GVUxMOi0ke2RvY2tlcmZpbGVfb25fd3N9fSIKCiMKIyBBc3NlcnRpbmcgRW52aXJvbm1lbnQKIwoKW1sgLXogIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgInVuYWJsZSB0byBmaW5kIHRoZSBEb2NrZXJmaWxlLCBET0NLRVJGSUxFIG1heSBoYXZlIGFuIGluY29ycmVjdCBsb2NhdGlvbiIKCmV4cG9ydGVkX29yX2ZhaWwgXAogICAgV09SS1NQQUNFU19TT1VSQ0VfUEFUSCBcCiAgICBQQVJBTVNfSU1BR0UKCiMKIyBWZXJib3NlIE91dHB1dAojCgppZiBbWyAiJHtQQVJBTVNfVkVSQk9TRX0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgc2V0IC14CmZpCg==" |base64 -d >buildah-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + chmod +x buildah-*.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgVXNlcyB0aGUgRG9ja2VyZmlsZSBnZW5lcmF0ZWQgYnkgczJpIHRvIGFzc2VtYmxlIGEgbmV3IGNvbnRhaW5lciBpbWFnZSB1c2luZyBidWlsZGFoLgojCgpzaG9wdCAtcyBpbmhlcml0X2VycmV4aXQKc2V0IC1ldSAtbyBwaXBlZmFpbAoKZGVjbGFyZSAtciBjdXJfZGlyPSIkKGRpcm5hbWUgJHtCQVNIX1NPVVJDRVswXX0pIgoKc291cmNlICIke2N1cl9kaXJ9L2NvbW1vbi5zaCIKc291cmNlICIke2N1cl9kaXJ9L3MyaS1jb21tb24uc2giCgojIGxvYWRpbmcgYnVpbGRhaCBzZXR0aW5ncyBvdmVyd3JpdHRpbmcgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGFpbmVyIGZpbGUKZGVjbGFyZSAteCBET0NLRVJGSUxFX0ZVTEw9IiR7UzJJX0RPQ0tFUkZJTEV9Igpzb3VyY2UgIiR7Y3VyX2Rpcn0vYnVpbGRhaC1jb21tb24uc2giCgpwaGFzZSAiQnVpbGRpbmcgdGhlIERvY2tlcmZpbGUgJyR7RE9DS0VSRklMRV9GVUxMfScgd2l0aCBidWlsZGFoIgpleGVjICR7Y3VyX2Rpcn0vYnVpbGRhaC1idWQuc2gK" |base64 -d >s2i-build.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0YXJnZXQgaW1hZ2UgbmFtZSAoZnVsbHkgcXVhbGlmaWVkKSB0byBiZSBidWlsZCB3aXRoIHMyaSwgcmVkZWNsYXJpbmcgdGhlIHNhbWUgcGFyYW1ldGVyIG5hbWUgdGhhbgojIGJ1aWxkYWggdGFzayB1c2VzCmRlY2xhcmUgLXggUEFSQU1TX0lNQUdFPSIke1BBUkFNU19JTUFHRTotfSIKIyBTcGVjaWZ5IGEgVVJMIGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgYXNzZW1ibGUgYW5kIHJ1biBzY3JpcHRzIGZvciB0aGUgYnVpbGRlciBpbWFnZQpkZWNsYXJlIC1yeCBQQVJBTVNfSU1BR0VfU0NSSVBUU19VUkw9IiR7UEFSQU1TX0lNQUdFX1NDUklQVFNfVVJMOi19IgoKIyB2b2x1bWUgbW91bnQgb3IgZGlyZWN0b3J5IHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIGZpbGVzIAojIGxpa2UgZW52LCBEb2NrZXJmaWxlIGFuZCBhbnkgb3RoZXJzIG5lZWRlZCB0byBzdXBwb3J0IHMyaQpkZWNsYXJlIC1yeCBTMklfR0VORVJBVEVfRElSRUNUT1JZPSIke1MySV9HRU5FUkFURV9ESVJFQ1RPUlk6LS9zMmktZ2VuZXJhdGV9IgoKIyBmdWxsIHBhdGggdG8gdGhlIGNvbnRhaW5lciBmaWxlIGdlbmVyYXRlZCBieSBzMmkKZGVjbGFyZSAtcnggUzJJX0RPQ0tFUkZJTEU9IiR7UzJJX0RPQ0tFUkZJTEU6LSR7UzJJX0dFTkVSQVRFX0RJUkVDVE9SWX0vRG9ja2VyZmlsZS5nZW59IgoKIyBmdWxsIHBhdGggdG8gdGhlIGVudiBmaWxlIHVzZWQgd2l0aCB0aGUgLS1lbnZpcm9ubWVudC1maWxlIHBhcmFtZXRlciBvZiBzMmkKZGVjbGFyZSAtcnggUzJJX0VOVklST05NRU5UX0ZJTEU9IiR7UzJJX0VOVklST05NRU5UX0ZJTEU6LSR7UzJJX0dFTkVSQVRFX0RJUkVDVE9SWX0vZW52fSIKCiMKIyBBc3NlcnRpbmcgRW52aXJvbm1lbnQKIwoKZXhwb3J0ZWRfb3JfZmFpbCBcCiAgICBXT1JLU1BBQ0VTX1NPVVJDRV9QQVRIIFwKICAgIFBBUkFNU19JTUFHRQoKIwojIFZlcmJvc2UgT3V0cHV0CiMKCmRlY2xhcmUgLXggUzJJX0xPR0xFVkVMPSIwIgoKaWYgW1sgIiR7UEFSQU1TX1ZFUkJPU0V9IiA9PSAidHJ1ZSIgXV07IHRoZW4KICAgIFMySV9MT0dMRVZFTD0iMiIKICAgIHNldCAteApmaQo=" |base64 -d >s2i-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgVXNlcyBzMmkgdG8gZ2VuZXJhdGUgdGhlIHJlcGVzY3RpdmUgQ29udGFpbmVyZmlsZSBiYXNlZCBvbiB0aGUgaW5mb21yZWQgYnVpbGRlci4gVGhlIENvbnRhaW5lcmZpbGUKIyBpcyBzdG9yZWQgb24gYSB0ZW1wb3JhcnkgbG9jYXRpb24uCiMKCnNob3B0IC1zIGluaGVyaXRfZXJyZXhpdApzZXQgLWV1IC1vIHBpcGVmYWlsCgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvY29tbW9uLnNoIgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvczJpLWNvbW1vbi5zaCIKCiMgczJpIGJ1aWxkZXIgaW1hZ2UgbmFtZSAoZnVsbHkgcXVhbGlmaWVkKQpkZWNsYXJlIC1yeCBTMklfQlVJTERFUl9JTUFHRT0iJHtTMklfQlVJTERFUl9JTUFHRTotfSIKCiMgdGFrZXMgdGhlIHZhbHVlcyBpbiBhcmd1bWVudCBFTlZfVkFSUyBhbmQgY3JlYXRlcyBhbiBhcnJheSB1c2luZyB0aG9zZSB2YWx1ZXMKZGVjbGFyZSAtcmEgRU5WX1ZBUlM9KCR7QH0pCgojIHJlLXVzaW5nIHRoZSBzYW1lIHBhcmFtZXRlcnMgdGhhbiBidWlsZGFoLCBzMmkgbmVlZHMgYnVpbGRhaCBhYmlsaXRpZXMgdG8gY3JlYXRlIHRoZSBmaW5hbAojIGNvbnRhaW5lciBpbWFnZSBiYXNlZCBvbiB3aGF0IHMyaSBnZW5lcmF0ZXMKc291cmNlICIkKGRpcm5hbWUgJHtCQVNIX1NPVVJDRVswXX0pL2J1aWxkYWgtY29tbW9uLnNoIgoKIwojIFByZXBhcmUKIwoKIyBtYWtpbmcgc3VyZSB0aGUgcmVxdWlyZWQgd29ya3NwYWNlICJzb3VyY2UiIGlzIGJvdW5kZWQsIHdoaWNoIG1lYW5zIGl0cyB2b2x1bWUgaXMgY3VycmVudGx5IG1vdW50ZWQKIyBhbmQgcmVhZHkgdG8gdXNlCnBoYXNlICJJbnNwZWN0aW5nIHNvdXJjZSB3b3Jrc3BhY2UgJyR7V09SS1NQQUNFU19TT1VSQ0VfUEFUSH0nIChQV0Q9JyR7UFdEfScpIgpbWyAiJHtXT1JLU1BBQ0VTX1NPVVJDRV9CT1VORH0iICE9ICJ0cnVlIiBdXSAmJgogICAgZmFpbCAiV29ya3NwYWNlICdzb3VyY2UnIGlzIG5vdCBib3VuZGVkIgoKcGhhc2UgIkluc3BlY3RpbmcgY29udGV4dCAnJHtQQVJBTVNfQ09OVEVYVH0nIgpbWyAhIC1kICIke1BBUkFNU19DT05URVhUfSIgXV0gJiYKICAgIGZhaWwgIkFwcGxpY2F0aW9uIHNvdXJjZSBjb2RlIGRpcmVjdG9yeSBub3QgZm91bmQgYXQgJyR7UEFSQU1TX0NPTlRFWFR9JyIKCnBoYXNlICJBZGRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byAnJHtTMklfRU5WSVJPTk1FTlRfRklMRX0nIgoKIyBhZGQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFyZSBzZW50IGFzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZnJvbSBFTlZfVkFSUyBwYXJhbWV0ZXIKdG91Y2ggIiR7UzJJX0VOVklST05NRU5UX0ZJTEV9IgppZiBbICR7I0VOVl9WQVJTW0BdfSAtZ3QgMCBdOyB0aGVuCiAgICBmb3IgZW52X3ZhciBpbiAiJHtFTlZfVkFSU1tAXX0iOyBkbwogICAgICAgIGVjaG8gIiR7ZW52X3Zhcn0iID4+ICIke1MySV9FTlZJUk9OTUVOVF9GSUxFfSIKICAgIGRvbmUKZmkKCiMKIyBTMkkgR2VuZXJhdGUKIwoKcGhhc2UgIkdlbmVyYXRpbmcgdGhlIERvY2tlcmZpbGUgZm9yIFMySSBidWlsZGVyIGltYWdlICcke1MySV9CVUlMREVSX0lNQUdFfSciCnMyaSAtLWxvZ2xldmVsICIke1MySV9MT0dMRVZFTH0iIFwKICAgIGJ1aWxkICIke1BBUkFNU19DT05URVhUfSIgIiR7UzJJX0JVSUxERVJfSU1BR0V9IiBcCiAgICAgICAgLS1pbWFnZS1zY3JpcHRzLXVybCAiJHtQQVJBTVNfSU1BR0VfU0NSSVBUU19VUkx9IiBcCiAgICAgICAgLS1hcy1kb2NrZXJmaWxlICIke1MySV9ET0NLRVJGSUxFfSIgXAogICAgICAgIC0tZW52aXJvbm1lbnQtZmlsZSAiJHtTMklfRU5WSVJPTk1FTlRfRklMRX0iCgpwaGFzZSAiSW5zcGVjdGluZyB0aGUgRG9ja2VyZmlsZSBnZW5lcmF0ZWQgYXQgJyR7UzJJX0RPQ0tFUkZJTEV9JyIKW1sgISAtZiAiJHtTMklfRE9DS0VSRklMRX0iIF1dICYmCiAgICBmYWlsICJHZW5lcmF0ZWQgRG9ja2VyZmlsZSBpcyBub3QgZm91bmQhIgoKc2V0ICt4CnBoYXNlICJHZW5lcmF0ZWQgRG9ja2VyZmlsZSBwYXlsb2FkIgplY2hvIC1lbiAiPj4+ICR7UzJJX0RPQ0tFUkZJTEV9XG4kKGNhdCAke1MySV9ET0NLRVJGSUxFfSlcbjw8PCBFT0ZcbiIK" |base64 -d >s2i-generate.sh + chmod +x s2i-*.sh + volumeMounts: + - name: scripts-dir + mountPath: /scripts + + - name: s2i-generate + image: registry.access.redhat.com/source-to-image/source-to-image-rhel8:v1.3.9-6 + workingDir: $(workspaces.source.path) + env: + - name: S2I_BUILDER_IMAGE + value: registry.access.redhat.com/ubi8/python-39:latest + command: + - /scripts/s2i-generate.sh + args: + - "$(params.ENV_VARS[*])" + securityContext: + capabilities: + add: ["SETFCAP"] + volumeMounts: + - name: scripts-dir + mountPath: /scripts + - name: s2i-generate-dir + mountPath: /s2i-generate + + - name: s2i-build + image: registry.access.redhat.com/ubi8/buildah:8.9 + workingDir: /s2i-generate + command: + - /scripts/s2i-build.sh + securityContext: + capabilities: + add: ["SETFCAP"] + volumeMounts: + - name: scripts-dir + mountPath: /scripts + - name: s2i-generate-dir + mountPath: /s2i-generate + + volumes: + - name: scripts-dir + emptyDir: {} + - name: s2i-generate-dir + emptyDir: {} diff --git a/tasks/task-s2i-ruby/0.2.0/README.md b/tasks/task-s2i-ruby/0.2.0/README.md new file mode 100644 index 00000000..b86765b3 --- /dev/null +++ b/tasks/task-s2i-ruby/0.2.0/README.md @@ -0,0 +1,83 @@ +Source-to-Image Tekton Tasks (`s2i`) +------------------------------------ + +# Abstract + +Describes the Tekton Tasks supporting Source-to-Image for various ecosystems. + +# `s2i` Builder Images + +This section we explain each language ecosystem comes with a predefined set of builder images, supported by Red Hat. + +The `s2i` Task helps in building reproducible container images from source code i.e. task for supporting s2i functionality. + +The s2i Task has been customized with builder images specific to various languages and have been named appropriately as follows: + +| Task Name | Builder Image Used | +| ---------- | ---------------------------------------------------------------------- | +| s2i-python | http://registry.access.redhat.com/ubi8/python-39:latest | +| s2i-go | http://registry.access.redhat.com/ubi8/go-toolset:1.19.10-3 | +| s2i-java | http://registry.access.redhat.com/ubi8/openjdk-11:latest | +| s2i-dotnet | http://registry.access.redhat.com/ubi8/dotnet-60:6.0-37.20230802191230 | +| s2i-php | http://registry.access.redhat.com/ubi9/php-81:1-29 | +| s2i-nodejs | http://registry.access.redhat.com/ubi8/nodejs-18:latest | +| s2i-perl | http://registry.access.redhat.com/ubi9/perl-532:1-91 | +| s2i-ruby | http://registry.access.redhat.com/ubi9/ruby-31:1-50 | + +In case, the above builder images associated with the languages aren’t satisfactory for your source code, you can change it using appropriate parameter. + +# Usage + +Please, consider the usage example below: + +```yaml +--- +apiVersion: tekton.dev/v1beta1 +kind: TaskRun +metadata: {} +spec: + taskRef: + name: s2i-python + params: + - name: IMAGE + value: registry.registry.svc.cluster.local:32222/task-containers/task-s2i-python:latest +``` + +In case the Container Registry requires authentication, please consider the [Tekton Pipelines documentation][tektonPipelineAuth]. In a nutshell, you need to create a Kubernetes Secret describing the following attributes: + +```bash +kubectl create secret docker-registry imagestreams \ + --docker-server="image-registry.openshift-image-registry.svc:5000" \ + --docker-username="${REGISTRY_USERNAME}" \ + --docker-password="${REGISTRY_TOKEN}" +``` + +Then make sure the Secret is linked with the Service-Account running the `TaskRun`/`PipelineRun`. + +## Workspaces + +All of the s2i tasks use the `source` workspace which is meant to contain the Application source code, which acts as the build context for S2I workflow. + + +## Params + +| Param | Type | Default | Description | +| ----------------- | ------ | ------------------------ | ------------------------------------------------------------------------- | +| IMAGE | string | (required) | Fully qualified container image name to be built by s2i | +| IMAGE_SCRIPTS_URL | string | image:///usr/libexec/s2i | URL containing the default assemble and run scripts for the builder image | +| ENV_VARS | array | [] | Array containing string of Environment Variables as "KEY=VALUE” | +| SUBDIRECTORY | string | . | Relative subdirectory to the source Workspace for the build-context. | +| STORAGE_DRIVER | string | overlay | Set buildah storage driver to reflect the currrent cluster node's | +| settings. | +| BUILD_EXTRA_ARGS | string | | Extra parameters passed for the build command when building images. | +| PUSH_EXTRA_ARGS | string | | Extra parameters passed for the push command when pushing images. | +| SKIP_PUSH | string | false | Skip pushing the image to the container registry. | +| TLS_VERIFY | string | true | Sets the TLS verification flag, true is recommended. | +| VERBOSE | string | false | Turns on verbose logging, all commands executed will be printed out. | + +## Results + +| Result | Description | +| ------------ | ------------------------------- | +| IMAGE_URL | Fully qualified image name. | +| IMAGE_DIGEST | Digest of the image just built. | diff --git a/tasks/task-s2i-ruby/0.2.0/task-s2i-ruby.yaml b/tasks/task-s2i-ruby/0.2.0/task-s2i-ruby.yaml new file mode 100644 index 00000000..c81f734f --- /dev/null +++ b/tasks/task-s2i-ruby/0.2.0/task-s2i-ruby.yaml @@ -0,0 +1,179 @@ +--- +# Source: task-containers/templates/task-s2i-ruby.yaml +apiVersion: tekton.dev/v1beta1 +kind: Task +metadata: + name: s2i-ruby + labels: + app.kubernetes.io/version: 0.2.0 + annotations: + tekton.dev/categories: containers + tekton.dev/pipelines.minVersion: 0.41.0 + tekton.dev/tags: containers +spec: + description: | + Builds the source code using the s2i's Ruby builder-image + "registry.access.redhat.com/ubi9/ruby-31:1-50". + + + workspaces: + - name: source + optional: false + description: | + Application source code, the build context for S2I workflow. + + params: + - name: IMAGE + type: string + description: | + Fully qualified container image name to be built by s2i. + - name: IMAGE_SCRIPTS_URL + type: string + default: image:///usr/libexec/s2i + description: | + Specify a URL containing the default assemble and run scripts for the builder image + - name: ENV_VARS + type: array + default: [] + description: | + Array containing string of Environment Variables as "KEY=VALUE" + - name: CONTEXT + type: string + default: "." + description: | + Path to the directory to use as context. + - name: STORAGE_DRIVER + type: string + default: vfs + description: | + Set buildah storage driver to reflect the currrent cluster node's + settings. + - name: FORMAT + description: The format of the built container, oci or docker + default: "oci" + - name: BUILD_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the build command when building images. + - name: PUSH_EXTRA_ARGS + type: string + default: "" + description: | + Extra parameters passed for the push command when pushing images. + - name: SKIP_PUSH + default: "false" + description: | + Skip pushing the image to the container registry. + - name: TLS_VERIFY + type: string + default: "true" + description: | + Sets the TLS verification flag, `true` is recommended. + - name: VERBOSE + type: string + default: "false" + description: | + Turns on verbose logging, all commands executed will be printed out. + + results: + - name: IMAGE_URL + description: | + Fully qualified image name. + - name: IMAGE_DIGEST + description: | + Digest of the image just built. + + stepTemplate: + env: + + - name: PARAMS_IMAGE + value: "$(params.IMAGE)" + - name: PARAMS_IMAGE_SCRIPTS_URL + value: "$(params.IMAGE_SCRIPTS_URL)" + - name: PARAMS_CONTEXT + value: "$(params.CONTEXT)" + - name: PARAMS_FORMAT + value: "$(params.FORMAT)" + - name: PARAMS_STORAGE_DRIVER + value: "$(params.STORAGE_DRIVER)" + - name: PARAMS_BUILD_EXTRA_ARGS + value: "$(params.BUILD_EXTRA_ARGS)" + - name: PARAMS_PUSH_EXTRA_ARGS + value: "$(params.PUSH_EXTRA_ARGS)" + - name: PARAMS_SKIP_PUSH + value: "$(params.SKIP_PUSH)" + - name: PARAMS_TLS_VERIFY + value: "$(params.TLS_VERIFY)" + - name: PARAMS_VERBOSE + value: "$(params.VERBOSE)" + - name: WORKSPACES_SOURCE_BOUND + value: "$(workspaces.source.bound)" + - name: WORKSPACES_SOURCE_PATH + value: "$(workspaces.source.path)" + - name: WORKSPACES_DOCKERCONFIG_BOUND + value: "$(workspaces.dockerconfig.bound)" + - name: WORKSPACES_DOCKERCONFIG_PATH + value: "$(workspaces.dockerconfig.path)" + - name: RESULTS_IMAGE_URL_PATH + value: "$(results.IMAGE_URL.path)" + - name: RESULTS_IMAGE_DIGEST_PATH + value: "$(results.IMAGE_DIGEST.path)" + + steps: + - name: load-scripts + image: registry.access.redhat.com/ubi8-minimal:8.9 + workingDir: /scripts + script: | + set -e + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgV3JhcHBlciBhcm91bmQgImJ1aWxkYWggYnVkIiB0byBidWlsZCBhbmQgcHVzaCBhIGNvbnRhaW5lciBpbWFnZSBiYXNlZCBvbiBhIERvY2tlcmZpbGUuCiMKCnNob3B0IC1zIGluaGVyaXRfZXJyZXhpdApzZXQgLWV1IC1vIHBpcGVmYWlsCgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvY29tbW9uLnNoIgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvYnVpbGRhaC1jb21tb24uc2giCgpmdW5jdGlvbiBfYnVpbGRhaCgpIHsKICAgIGJ1aWxkYWggXAogICAgICAgIC0tc3RvcmFnZS1kcml2ZXI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSfSIgXAogICAgICAgIC0tdGxzLXZlcmlmeT0iJHtQQVJBTVNfVExTX1ZFUklGWX0iIFwKICAgICAgICAkeyp9Cn0KCiMKIyBQcmVwYXJlCiMKCiMgbWFraW5nIHN1cmUgdGhlIHJlcXVpcmVkIHdvcmtzcGFjZSAic291cmNlIiBpcyBib3VuZGVkLCB3aGljaCBtZWFucyBpdHMgdm9sdW1lIGlzIGN1cnJlbnRseSBtb3VudGVkCiMgYW5kIHJlYWR5IHRvIHVzZQpwaGFzZSAiSW5zcGVjdGluZyBzb3VyY2Ugd29ya3NwYWNlICcke1dPUktTUEFDRVNfU09VUkNFX1BBVEh9JyAoUFdEPScke1BXRH0nKSIKW1sgIiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkR9IiAhPSAidHJ1ZSIgXV0gJiYKICAgIGZhaWwgIldvcmtzcGFjZSAnc291cmNlJyBpcyBub3QgYm91bmRlZCIKCnBoYXNlICJBc3NlcnRpbmcgdGhlIGRvY2tlcmZpbGUvY29udGFpbmVyZmlsZSAnJHtET0NLRVJGSUxFX0ZVTEx9JyBleGlzdHMiCltbICEgLWYgIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgIkRvY2tlcmZpbGUgbm90IGZvdW5kIGF0OiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCnBoYXNlICJJbnNwZWN0aW5nIGNvbnRleHQgJyR7UEFSQU1TX0NPTlRFWFR9JyIKW1sgISAtZCAiJHtQQVJBTVNfQ09OVEVYVH0iIF1dICYmCiAgICBmYWlsICJDT05URVhUIHBhcmFtIGlzIG5vdCBmb3VuZCBhdCAnJHtQQVJBTVNfQ09OVEVYVH0nLCBvbiBzb3VyY2Ugd29ya3NwYWNlIgoKIyBIYW5kbGUgb3B0aW9uYWwgZG9ja2VyY29uZmlnIHNlY3JldAppZiBbWyAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19CT1VORH0iID09ICJ0cnVlIiBdXTsgdGhlbgoKICAgICMgaWYgY29uZmlnLmpzb24gZXhpc3RzIGF0IHdvcmtzcGFjZSByb290LCB3ZSB1c2UgdGhhdAogICAgaWYgdGVzdCAtZiAiJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfS9jb25maWcuanNvbiI7IHRoZW4KICAgICAgICBleHBvcnQgRE9DS0VSX0NPTkZJRz0iJHtXT1JLU1BBQ0VTX0RPQ0tFUkNPTkZJR19QQVRIfSIKCiAgICAgICAgIyBlbHNlIHdlIGxvb2sgZm9yIC5kb2NrZXJjb25maWdqc29uIGF0IHRoZSByb290CiAgICBlbGlmIHRlc3QgLWYgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iOyB0aGVuCiAgICAgICAgY3AgIiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSH0vLmRvY2tlcmNvbmZpZ2pzb24iICIkSE9NRS8uZG9ja2VyL2NvbmZpZy5qc29uIgogICAgICAgIGV4cG9ydCBET0NLRVJfQ09ORklHPSIkSE9NRS8uZG9ja2VyIgoKICAgICAgICAjIG5lZWQgdG8gZXJyb3Igb3V0IGlmIG5laXRoZXIgZmlsZXMgYXJlIHByZXNlbnQKICAgIGVsc2UKICAgICAgICBlY2hvICJuZWl0aGVyICdjb25maWcuanNvbicgbm9yICcuZG9ja2VyY29uZmlnanNvbicgZm91bmQgYXQgd29ya3NwYWNlIHJvb3QiCiAgICAgICAgZXhpdCAxCiAgICBmaQpmaQoKIwojIEJ1aWxkCiMKCnBoYXNlICJCdWlsZGluZyAnJHtQQVJBTVNfSU1BR0V9JyBiYXNlZCBvbiAnJHtET0NLRVJGSUxFX0ZVTEx9JyIKCltbIC1uICIke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX0JVSUxEX0VYVFJBX0FSR1N9JyIKCl9idWlsZGFoIGJ1ZCAke1BBUkFNU19CVUlMRF9FWFRSQV9BUkdTfSBcCiAgICAtLW5vLWNhY2hlIFwKICAgIC0tZmlsZT0iJHtET0NLRVJGSUxFX0ZVTEx9IiBcCiAgICAtLXRhZz0iJHtQQVJBTVNfSU1BR0V9IiBcCiAgICAke1BBUkFNU19DT05URVhUfQoKaWYgW1sgIiR7UEFSQU1TX1NLSVBfUFVTSH0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgcGhhc2UgIlNraXBwaW5nIHB1c2hpbmcgJyR7UEFSQU1TX0lNQUdFfScgdG8gdGhlIGNvbnRhaW5lciByZWdpc3RyeSEiCiAgICBleGl0IDAKZmkKCiMKIyBQdXNoCiMKCnBoYXNlICJQdXNoaW5nICcke1BBUkFNU19JTUFHRX0nIHRvIHRoZSBjb250YWluZXIgcmVnaXN0cnkiCgpbWyAtbiAiJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSIgXV0gJiYKICAgIHBoYXNlICJFeHRyYSAnYnVpbGRhaCBidWQnIGFyZ3VtZW50cyBpbmZvcm1lZDogJyR7UEFSQU1TX1BVU0hfRVhUUkFfQVJHU30nIgoKIyB0ZW1wb3JhcnkgZmlsZSB0byBzdG9yZSB0aGUgaW1hZ2UgZGlnZXN0LCBpbmZvcm1hdGlvbiBvbmx5IG9idGFpbmVkIGFmdGVyIHB1c2hpbmcgdGhlIGltYWdlIHRvIHRoZQojIGNvbnRhaW5lciByZWdpc3RyeQpkZWNsYXJlIC1yIGRpZ2VzdF9maWxlPSIvdG1wL2J1aWxkYWgtZGlnZXN0LnR4dCIKCl9idWlsZGFoIHB1c2ggJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTfSBcCiAgICAtLWRpZ2VzdGZpbGU9IiR7ZGlnZXN0X2ZpbGV9IiBcCiAgICAke1BBUkFNU19JTUFHRX0gXAogICAgZG9ja2VyOi8vJHtQQVJBTVNfSU1BR0V9CgojCiMgUmVzdWx0cwojCgpwaGFzZSAiSW5zcGVjdGluZyBkaWdlc3QgcmVwb3J0ICgnJHtkaWdlc3RfZmlsZX0nKSIKCltbICEgLXIgIiR7ZGlnZXN0X2ZpbGV9IiBdXSAmJgogICAgZmFpbCAiVW5hYmxlIHRvIGZpbmQgZGlnZXN0LWZpbGUgYXQgJyR7ZGlnZXN0X2ZpbGV9JyIKCmRlY2xhcmUgLXIgZGlnZXN0X3N1bT0iJChjYXQgJHtkaWdlc3RfZmlsZX0pIgoKW1sgLXogIiR7ZGlnZXN0X3N1bX0iIF1dICYmCiAgICBmYWlsICJEaWdlc3QgZmlsZSAnJHtkaWdlc3RfZmlsZX0nIGlzIGVtcHR5ISIKCnBoYXNlICJTdWNjZXNzZnVseSBidWlsdCBjb250YWluZXIgaW1hZ2UgJyR7UEFSQU1TX0lNQUdFfScgKCcke2RpZ2VzdF9zdW19JykiCmVjaG8gLW4gIiR7UEFSQU1TX0lNQUdFfSIgfCB0ZWUgJHtSRVNVTFRTX0lNQUdFX1VSTF9QQVRIfQplY2hvIC1uICIke2RpZ2VzdF9zdW19IiB8IHRlZSAke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEh9Cg==" |base64 -d >buildah-bud.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKZGVjbGFyZSAtcnggUEFSQU1TX0lNQUdFPSIke1BBUkFNU19JTUFHRTotfSIKZGVjbGFyZSAtcnggUEFSQU1TX0RPQ0tFUkZJTEU9IiR7UEFSQU1TX0RPQ0tFUkZJTEU6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19DT05URVhUPSIke1BBUkFNU19DT05URVhUOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU1RPUkFHRV9EUklWRVI9IiR7UEFSQU1TX1NUT1JBR0VfRFJJVkVSOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfQlVJTERfRVhUUkFfQVJHUz0iJHtQQVJBTVNfQlVJTERfRVhUUkFfQVJHUzotfSIKZGVjbGFyZSAtcnggUEFSQU1TX1BVU0hfRVhUUkFfQVJHUz0iJHtQQVJBTVNfUFVTSF9FWFRSQV9BUkdTOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfU0tJUF9QVVNIPSIke1BBUkFNU19TS0lQX1BVU0g6LX0iCmRlY2xhcmUgLXJ4IFBBUkFNU19UTFNfVkVSSUZZPSIke1BBUkFNU19UTFNfVkVSSUZZOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfVkVSQk9TRT0iJHtQQVJBTVNfVkVSQk9TRTotfSIKCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfU09VUkNFX1BBVEg9IiR7V09SS1NQQUNFU19TT1VSQ0VfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ9IiR7V09SS1NQQUNFU19TT1VSQ0VfQk9VTkQ6LX0iCmRlY2xhcmUgLXJ4IFdPUktTUEFDRVNfRE9DS0VSQ09ORklHX1BBVEg9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfUEFUSDotfSIKZGVjbGFyZSAtcnggV09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ9IiR7V09SS1NQQUNFU19ET0NLRVJDT05GSUdfQk9VTkQ6LX0iCgpkZWNsYXJlIC1yeCBSRVNVTFRTX0lNQUdFX0RJR0VTVF9QQVRIPSIke1JFU1VMVFNfSU1BR0VfRElHRVNUX1BBVEg6LX0iCmRlY2xhcmUgLXJ4IFJFU1VMVFNfSU1BR0VfVVJMX1BBVEg9IiR7UkVTVUxUU19JTUFHRV9VUkxfUEFUSDotfSIKCiMKIyBEb2NrZXJmaWxlCiMKCiMgZXhwb3NpbmcgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGFpbmVyIGZpbGUsIHdoaWNoIGJ5IGRlZmF1bHQgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBwcmltYXJ5CiMgd29ya3NwYWNlLCB0byByZWNlaXZlIGEgZGlmZmVyZW50IGNvbnRhaW5lci1maWxlIGxvY2F0aW9uCmRlY2xhcmUgLXIgZG9ja2VyZmlsZV9vbl93cz0iJHtXT1JLU1BBQ0VTX1NPVVJDRV9QQVRIfS8ke1BBUkFNU19ET0NLRVJGSUxFfSIKZGVjbGFyZSAteCBET0NLRVJGSUxFX0ZVTEw9IiR7RE9DS0VSRklMRV9GVUxMOi0ke2RvY2tlcmZpbGVfb25fd3N9fSIKCiMKIyBBc3NlcnRpbmcgRW52aXJvbm1lbnQKIwoKW1sgLXogIiR7RE9DS0VSRklMRV9GVUxMfSIgXV0gJiYKICAgIGZhaWwgInVuYWJsZSB0byBmaW5kIHRoZSBEb2NrZXJmaWxlLCBET0NLRVJGSUxFIG1heSBoYXZlIGFuIGluY29ycmVjdCBsb2NhdGlvbiIKCmV4cG9ydGVkX29yX2ZhaWwgXAogICAgV09SS1NQQUNFU19TT1VSQ0VfUEFUSCBcCiAgICBQQVJBTVNfSU1BR0UKCiMKIyBWZXJib3NlIE91dHB1dAojCgppZiBbWyAiJHtQQVJBTVNfVkVSQk9TRX0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgc2V0IC14CmZpCg==" |base64 -d >buildah-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + chmod +x buildah-*.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgVXNlcyB0aGUgRG9ja2VyZmlsZSBnZW5lcmF0ZWQgYnkgczJpIHRvIGFzc2VtYmxlIGEgbmV3IGNvbnRhaW5lciBpbWFnZSB1c2luZyBidWlsZGFoLgojCgpzaG9wdCAtcyBpbmhlcml0X2VycmV4aXQKc2V0IC1ldSAtbyBwaXBlZmFpbAoKZGVjbGFyZSAtciBjdXJfZGlyPSIkKGRpcm5hbWUgJHtCQVNIX1NPVVJDRVswXX0pIgoKc291cmNlICIke2N1cl9kaXJ9L2NvbW1vbi5zaCIKc291cmNlICIke2N1cl9kaXJ9L3MyaS1jb21tb24uc2giCgojIGxvYWRpbmcgYnVpbGRhaCBzZXR0aW5ncyBvdmVyd3JpdHRpbmcgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGFpbmVyIGZpbGUKZGVjbGFyZSAteCBET0NLRVJGSUxFX0ZVTEw9IiR7UzJJX0RPQ0tFUkZJTEV9Igpzb3VyY2UgIiR7Y3VyX2Rpcn0vYnVpbGRhaC1jb21tb24uc2giCgpwaGFzZSAiQnVpbGRpbmcgdGhlIERvY2tlcmZpbGUgJyR7RE9DS0VSRklMRV9GVUxMfScgd2l0aCBidWlsZGFoIgpleGVjICR7Y3VyX2Rpcn0vYnVpbGRhaC1idWQuc2gK" |base64 -d >s2i-build.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0YXJnZXQgaW1hZ2UgbmFtZSAoZnVsbHkgcXVhbGlmaWVkKSB0byBiZSBidWlsZCB3aXRoIHMyaSwgcmVkZWNsYXJpbmcgdGhlIHNhbWUgcGFyYW1ldGVyIG5hbWUgdGhhbgojIGJ1aWxkYWggdGFzayB1c2VzCmRlY2xhcmUgLXggUEFSQU1TX0lNQUdFPSIke1BBUkFNU19JTUFHRTotfSIKIyBTcGVjaWZ5IGEgVVJMIGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgYXNzZW1ibGUgYW5kIHJ1biBzY3JpcHRzIGZvciB0aGUgYnVpbGRlciBpbWFnZQpkZWNsYXJlIC1yeCBQQVJBTVNfSU1BR0VfU0NSSVBUU19VUkw9IiR7UEFSQU1TX0lNQUdFX1NDUklQVFNfVVJMOi19IgoKIyB2b2x1bWUgbW91bnQgb3IgZGlyZWN0b3J5IHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIGZpbGVzIAojIGxpa2UgZW52LCBEb2NrZXJmaWxlIGFuZCBhbnkgb3RoZXJzIG5lZWRlZCB0byBzdXBwb3J0IHMyaQpkZWNsYXJlIC1yeCBTMklfR0VORVJBVEVfRElSRUNUT1JZPSIke1MySV9HRU5FUkFURV9ESVJFQ1RPUlk6LS9zMmktZ2VuZXJhdGV9IgoKIyBmdWxsIHBhdGggdG8gdGhlIGNvbnRhaW5lciBmaWxlIGdlbmVyYXRlZCBieSBzMmkKZGVjbGFyZSAtcnggUzJJX0RPQ0tFUkZJTEU9IiR7UzJJX0RPQ0tFUkZJTEU6LSR7UzJJX0dFTkVSQVRFX0RJUkVDVE9SWX0vRG9ja2VyZmlsZS5nZW59IgoKIyBmdWxsIHBhdGggdG8gdGhlIGVudiBmaWxlIHVzZWQgd2l0aCB0aGUgLS1lbnZpcm9ubWVudC1maWxlIHBhcmFtZXRlciBvZiBzMmkKZGVjbGFyZSAtcnggUzJJX0VOVklST05NRU5UX0ZJTEU9IiR7UzJJX0VOVklST05NRU5UX0ZJTEU6LSR7UzJJX0dFTkVSQVRFX0RJUkVDVE9SWX0vZW52fSIKCiMKIyBBc3NlcnRpbmcgRW52aXJvbm1lbnQKIwoKZXhwb3J0ZWRfb3JfZmFpbCBcCiAgICBXT1JLU1BBQ0VTX1NPVVJDRV9QQVRIIFwKICAgIFBBUkFNU19JTUFHRQoKIwojIFZlcmJvc2UgT3V0cHV0CiMKCmRlY2xhcmUgLXggUzJJX0xPR0xFVkVMPSIwIgoKaWYgW1sgIiR7UEFSQU1TX1ZFUkJPU0V9IiA9PSAidHJ1ZSIgXV07IHRoZW4KICAgIFMySV9MT0dMRVZFTD0iMiIKICAgIHNldCAteApmaQo=" |base64 -d >s2i-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgVXNlcyBzMmkgdG8gZ2VuZXJhdGUgdGhlIHJlcGVzY3RpdmUgQ29udGFpbmVyZmlsZSBiYXNlZCBvbiB0aGUgaW5mb21yZWQgYnVpbGRlci4gVGhlIENvbnRhaW5lcmZpbGUKIyBpcyBzdG9yZWQgb24gYSB0ZW1wb3JhcnkgbG9jYXRpb24uCiMKCnNob3B0IC1zIGluaGVyaXRfZXJyZXhpdApzZXQgLWV1IC1vIHBpcGVmYWlsCgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvY29tbW9uLnNoIgpzb3VyY2UgIiQoZGlybmFtZSAke0JBU0hfU09VUkNFWzBdfSkvczJpLWNvbW1vbi5zaCIKCiMgczJpIGJ1aWxkZXIgaW1hZ2UgbmFtZSAoZnVsbHkgcXVhbGlmaWVkKQpkZWNsYXJlIC1yeCBTMklfQlVJTERFUl9JTUFHRT0iJHtTMklfQlVJTERFUl9JTUFHRTotfSIKCiMgdGFrZXMgdGhlIHZhbHVlcyBpbiBhcmd1bWVudCBFTlZfVkFSUyBhbmQgY3JlYXRlcyBhbiBhcnJheSB1c2luZyB0aG9zZSB2YWx1ZXMKZGVjbGFyZSAtcmEgRU5WX1ZBUlM9KCR7QH0pCgojIHJlLXVzaW5nIHRoZSBzYW1lIHBhcmFtZXRlcnMgdGhhbiBidWlsZGFoLCBzMmkgbmVlZHMgYnVpbGRhaCBhYmlsaXRpZXMgdG8gY3JlYXRlIHRoZSBmaW5hbAojIGNvbnRhaW5lciBpbWFnZSBiYXNlZCBvbiB3aGF0IHMyaSBnZW5lcmF0ZXMKc291cmNlICIkKGRpcm5hbWUgJHtCQVNIX1NPVVJDRVswXX0pL2J1aWxkYWgtY29tbW9uLnNoIgoKIwojIFByZXBhcmUKIwoKIyBtYWtpbmcgc3VyZSB0aGUgcmVxdWlyZWQgd29ya3NwYWNlICJzb3VyY2UiIGlzIGJvdW5kZWQsIHdoaWNoIG1lYW5zIGl0cyB2b2x1bWUgaXMgY3VycmVudGx5IG1vdW50ZWQKIyBhbmQgcmVhZHkgdG8gdXNlCnBoYXNlICJJbnNwZWN0aW5nIHNvdXJjZSB3b3Jrc3BhY2UgJyR7V09SS1NQQUNFU19TT1VSQ0VfUEFUSH0nIChQV0Q9JyR7UFdEfScpIgpbWyAiJHtXT1JLU1BBQ0VTX1NPVVJDRV9CT1VORH0iICE9ICJ0cnVlIiBdXSAmJgogICAgZmFpbCAiV29ya3NwYWNlICdzb3VyY2UnIGlzIG5vdCBib3VuZGVkIgoKcGhhc2UgIkluc3BlY3RpbmcgY29udGV4dCAnJHtQQVJBTVNfQ09OVEVYVH0nIgpbWyAhIC1kICIke1BBUkFNU19DT05URVhUfSIgXV0gJiYKICAgIGZhaWwgIkFwcGxpY2F0aW9uIHNvdXJjZSBjb2RlIGRpcmVjdG9yeSBub3QgZm91bmQgYXQgJyR7UEFSQU1TX0NPTlRFWFR9JyIKCnBoYXNlICJBZGRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byAnJHtTMklfRU5WSVJPTk1FTlRfRklMRX0nIgoKIyBhZGQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFyZSBzZW50IGFzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZnJvbSBFTlZfVkFSUyBwYXJhbWV0ZXIKdG91Y2ggIiR7UzJJX0VOVklST05NRU5UX0ZJTEV9IgppZiBbICR7I0VOVl9WQVJTW0BdfSAtZ3QgMCBdOyB0aGVuCiAgICBmb3IgZW52X3ZhciBpbiAiJHtFTlZfVkFSU1tAXX0iOyBkbwogICAgICAgIGVjaG8gIiR7ZW52X3Zhcn0iID4+ICIke1MySV9FTlZJUk9OTUVOVF9GSUxFfSIKICAgIGRvbmUKZmkKCiMKIyBTMkkgR2VuZXJhdGUKIwoKcGhhc2UgIkdlbmVyYXRpbmcgdGhlIERvY2tlcmZpbGUgZm9yIFMySSBidWlsZGVyIGltYWdlICcke1MySV9CVUlMREVSX0lNQUdFfSciCnMyaSAtLWxvZ2xldmVsICIke1MySV9MT0dMRVZFTH0iIFwKICAgIGJ1aWxkICIke1BBUkFNU19DT05URVhUfSIgIiR7UzJJX0JVSUxERVJfSU1BR0V9IiBcCiAgICAgICAgLS1pbWFnZS1zY3JpcHRzLXVybCAiJHtQQVJBTVNfSU1BR0VfU0NSSVBUU19VUkx9IiBcCiAgICAgICAgLS1hcy1kb2NrZXJmaWxlICIke1MySV9ET0NLRVJGSUxFfSIgXAogICAgICAgIC0tZW52aXJvbm1lbnQtZmlsZSAiJHtTMklfRU5WSVJPTk1FTlRfRklMRX0iCgpwaGFzZSAiSW5zcGVjdGluZyB0aGUgRG9ja2VyZmlsZSBnZW5lcmF0ZWQgYXQgJyR7UzJJX0RPQ0tFUkZJTEV9JyIKW1sgISAtZiAiJHtTMklfRE9DS0VSRklMRX0iIF1dICYmCiAgICBmYWlsICJHZW5lcmF0ZWQgRG9ja2VyZmlsZSBpcyBub3QgZm91bmQhIgoKc2V0ICt4CnBoYXNlICJHZW5lcmF0ZWQgRG9ja2VyZmlsZSBwYXlsb2FkIgplY2hvIC1lbiAiPj4+ICR7UzJJX0RPQ0tFUkZJTEV9XG4kKGNhdCAke1MySV9ET0NLRVJGSUxFfSlcbjw8PCBFT0ZcbiIK" |base64 -d >s2i-generate.sh + chmod +x s2i-*.sh + volumeMounts: + - name: scripts-dir + mountPath: /scripts + + - name: s2i-generate + image: registry.access.redhat.com/source-to-image/source-to-image-rhel8:v1.3.9-6 + workingDir: $(workspaces.source.path) + env: + - name: S2I_BUILDER_IMAGE + value: registry.access.redhat.com/ubi9/ruby-31:1-50 + command: + - /scripts/s2i-generate.sh + args: + - "$(params.ENV_VARS[*])" + securityContext: + capabilities: + add: ["SETFCAP"] + volumeMounts: + - name: scripts-dir + mountPath: /scripts + - name: s2i-generate-dir + mountPath: /s2i-generate + + - name: s2i-build + image: registry.access.redhat.com/ubi8/buildah:8.9 + workingDir: /s2i-generate + command: + - /scripts/s2i-build.sh + securityContext: + capabilities: + add: ["SETFCAP"] + volumeMounts: + - name: scripts-dir + mountPath: /scripts + - name: s2i-generate-dir + mountPath: /s2i-generate + + volumes: + - name: scripts-dir + emptyDir: {} + - name: s2i-generate-dir + emptyDir: {} diff --git a/tasks/task-skopeo-copy/0.2.0/README.md b/tasks/task-skopeo-copy/0.2.0/README.md new file mode 100644 index 00000000..ee6fa59d --- /dev/null +++ b/tasks/task-skopeo-copy/0.2.0/README.md @@ -0,0 +1,59 @@ +Containers Tekton Tasks +----------------------- + +# Abstract + +Describes the Tekton Tasks supporting Skopeo-Copy + +# `skopeo-copy` Tekton Task + +The `skopeo-copy` Task is meant to replicate a container image from the `SOURCE` registry to the `DESTINATION` using [Skopeo][containersSkopeo], the Task results contain the SHA256 digests. + +# Usage + +Please, consider the usage example below: + +```yaml +--- +apiVersion: tekton.dev/v1beta1 +kind: TaskRun +metadata: {} +spec: + taskRef: + name: skopeo-copy + params: + - name: SOURCE + value: docker://docker.io/busybox:latest + - name: DESTINATION + value: docker://image-registry.openshift-image-registry.svc:5000/task-containers/busybox:latest +``` + +In case the Container Registry requires authentication, please consider the [Tekton Pipelines documentation][tektonPipelineAuth]. In a nutshell, you need to create a Kubernetes Secret describing the following attributes: + +```bash +kubectl create secret docker-registry imagestreams \ + --docker-server="image-registry.openshift-image-registry.svc:5000" \ + --docker-username="${REGISTRY_USERNAME}" \ + --docker-password="${REGISTRY_TOKEN}" +``` + +Then make sure the Secret is linked with the Service-Account running the `TaskRun`/`PipelineRun`. + +## Params + +| Param | Type | Default | Description | +| :------------ | :------------------------: | :--------------------------- | :------------------------- | +| `SOURCE` | `string` | (required) | Fully qualified source container image name, including tag, to be copied into `DESTINATION` param. | +| `DESTINATION` | `string` | (required) | Fully qualified destination container image name, including tag. | +| `TLS_VERIFY` | `string` | `true` | Sets the TLS verification flags, `true` is recommended. | +| `VERBOSE` | `string` | `false` | Shows a more verbose (debug) output. | + +## Results + +| Result | Description | +| :------------ | :------------------------- | +| `SOURCE_DIGEST` | Source image SHA256 digest. | +| `DESTINATION_DIGEST` | Destination image SHA256 digest. | + +[tektonPipelineAuth]: https://tekton.dev/docs/pipelines/auth/#configuring-docker-authentication-for-docker +[containersSkopeo]: https://github.com/containers/skopeo diff --git a/tasks/task-skopeo-copy/0.2.0/task-skopeo-copy.yaml b/tasks/task-skopeo-copy/0.2.0/task-skopeo-copy.yaml new file mode 100644 index 00000000..3366c771 --- /dev/null +++ b/tasks/task-skopeo-copy/0.2.0/task-skopeo-copy.yaml @@ -0,0 +1,99 @@ +--- +# Source: task-containers/templates/task-skopeo-copy.yaml +apiVersion: tekton.dev/v1beta1 +kind: Task +metadata: + name: skopeo-copy + labels: + app.kubernetes.io/version: 0.2.0 + annotations: + tekton.dev/categories: containers + tekton.dev/pipelines.minVersion: 0.41.0 + tekton.dev/tags: containers +spec: + description: | + Uses `skopeo copy` to replicate the `SOURCE` (param) container image into + `DESTINATION`. After copying the source and destination images SHA256 digest + is stored as results. + + params: + - name: SOURCE + type: string + description: | + Fully qualified source container image name, including tag, to be copied + into `DESTINATION` param. + - name: DESTINATION + type: string + description: | + Fully qualified destination container image name, including tag. + - name: TLS_VERIFY + type: string + default: "true" + description: | + Sets the TLS verification flags, `true` is recommended. + - name: VERBOSE + type: string + default: "false" + description: | + Shows a more verbose (debug) output. + + results: + - name: SOURCE_DIGEST + type: string + description: | + Source image SHA256 digest. + - name: DESTINATION_DIGEST + type: string + description: | + Destination image SHA256 digest. + + volumes: + - name: scripts-dir + emptyDir: {} + + stepTemplate: + env: + + - name: PARAMS_SOURCE + value: "$(params.SOURCE)" + - name: PARAMS_DESTINATION + value: "$(params.DESTINATION)" + - name: PARAMS_TLS_VERIFY + value: "$(params.TLS_VERIFY)" + - name: PARAMS_VERBOSE + value: "$(params.VERBOSE)" + - name: RESULTS_SOURCE_DIGEST_PATH + value: "$(results.SOURCE_DIGEST.path)" + - name: RESULTS_DESTINATION_DIGEST_PATH + value: "$(results.DESTINATION_DIGEST.path)" + + steps: + - name: load-scripts + image: registry.access.redhat.com/ubi8-minimal:8.9 + workingDir: /scripts + script: | + set -e + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyB0ZWt0b24ncyBob21lIGRpcmVjdG9yeQpkZWNsYXJlIC1yeCBURUtUT05fSE9NRT0iJHtURUtUT05fSE9NRTotL3Rla3Rvbi9ob21lfSIKCiMKIyBGdW5jdGlvbnMKIwoKZnVuY3Rpb24gZmFpbCgpIHsKICAgIGVjaG8gIkVSUk9SOiAkeyp9IiAyPiYxCiAgICBleGl0IDEKfQoKZnVuY3Rpb24gcGhhc2UoKSB7CiAgICBlY2hvICItLS0+IFBoYXNlOiAkeyp9Li4uIgp9CgojIGFzc2VydCBsb2NhbCB2YXJpYWJsZXMgYXJlIGV4cG9yZXRlZCBvbiB0aGUgZW52aXJvbm1lbnQKZnVuY3Rpb24gZXhwb3J0ZWRfb3JfZmFpbCgpIHsKICAgIGRlY2xhcmUgLWEgX3JlcXVpcmVkX3ZhcnM9IiR7QH0iCgogICAgZm9yIHYgaW4gJHtfcmVxdWlyZWRfdmFyc1tAXX07IGRvCiAgICAgICAgW1sgLXogIiR7IXZ9IiBdXSAmJgogICAgICAgICAgICBmYWlsICInJHt2fScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCEiCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQo=" |base64 -d >common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKZGVjbGFyZSAtcnggUEFSQU1TX1NPVVJDRT0iJHtQQVJBTVNfU09VUkNFOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfREVTVElOQVRJT049IiR7UEFSQU1TX0RFU1RJTkFUSU9OOi19IgpkZWNsYXJlIC1yeCBQQVJBTVNfVExTX1ZFUklGWT0iJHtQQVJBTVNfVExTX1ZFUklGWTotfSIKZGVjbGFyZSAtcnggUEFSQU1TX1ZFUkJPU0U9IiR7UEFSQU1TX1ZFUkJPU0U6LX0iCgpkZWNsYXJlIC1yeCBSRVNVTFRTX1NPVVJDRV9ESUdFU1RfUEFUSD0iJHtSRVNVTFRTX1NPVVJDRV9ESUdFU1RfUEFUSDotfSIKZGVjbGFyZSAtcnggUkVTVUxUU19ERVNUSU5BVElPTl9ESUdFU1RfUEFUSD0iJHtSRVNVTFRTX0RFU1RJTkFUSU9OX0RJR0VTVF9QQVRIOi19IgoKIwojIEFzc2VydGluZyBFbnZpcm9ubWVudAojCgpleHBvcnRlZF9vcl9mYWlsIFwKICAgIFBBUkFNU19TT1VSQ0UgXAogICAgUEFSQU1TX0RFU1RJTkFUSU9OIFwKICAgIFJFU1VMVFNfU09VUkNFX0RJR0VTVF9QQVRIIFwKICAgIFJFU1VMVFNfREVTVElOQVRJT05fRElHRVNUX1BBVEgKCiMKIyBTa29wZW8gQXV0aGVudGljYXRpb24KIwoKZGVjbGFyZSAteCBSRUdJU1RSWV9BVVRIX0ZJTEU9IiIKCmRvY2tlcl9jb25maWc9IiR7SE9NRX0vLmRvY2tlci9jb25maWcuanNvbiIKaWYgW1sgLWYgIiR7ZG9ja2VyX2NvbmZpZ30iIF1dOyB0aGVuCiAgICBwaGFzZSAiU2V0dGluZyBSRUdJU1RSWV9BVVRIX0ZJTEUgdG8gJyR7ZG9ja2VyX2NvbmZpZ30nIgogICAgUkVHSVNUUllfQVVUSF9GSUxFPSR7ZG9ja2VyX2NvbmZpZ30KZmkKCiMKIyBWZXJib3NlIE91dHB1dAojCgpkZWNsYXJlIC14IFNLT1BFT19ERUJVR19GTEFHPSIiCgppZiBbWyAiJHtQQVJBTVNfVkVSQk9TRX0iID09ICJ0cnVlIiBdXTsgdGhlbgogICAgU0tPUEVPX0RFQlVHX0ZMQUc9Ii0tZGVidWciCiAgICBzZXQgLXgKZmkK" |base64 -d >skopeo-common.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKc2hvcHQgLXMgaW5oZXJpdF9lcnJleGl0CnNldCAtZXUgLW8gcGlwZWZhaWwKCnNvdXJjZSAiJChkaXJuYW1lICR7QkFTSF9TT1VSQ0VbMF19KS9jb21tb24uc2giCnNvdXJjZSAiJChkaXJuYW1lICR7QkFTSF9TT1VSQ0VbMF19KS9za29wZW8tY29tbW9uLnNoIgoKcGhhc2UgIkNvcHlpbmcgJyR7UEFSQU1TX1NPVVJDRX0nIGludG8gJyR7UEFSQU1TX0RFU1RJTkFUSU9OfSciCgpzZXQgLXgKZXhlYyBza29wZW8gY29weSAke1NLT1BFT19ERUJVR19GTEFHfSBcCiAgICAtLXNyYy10bHMtdmVyaWZ5PSR7UEFSQU1TX1RMU19WRVJJRll9IFwKICAgIC0tZGVzdC10bHMtdmVyaWZ5PSR7UEFSQU1TX1RMU19WRVJJRll9IFwKICAgICR7UEFSQU1TX1NPVVJDRX0gXAogICAgJHtQQVJBTVNfREVTVElOQVRJT059Cg==" |base64 -d >skopeo-copy.sh + printf '%s' "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKc2hvcHQgLXMgaW5oZXJpdF9lcnJleGl0CnNldCAtZXUgLW8gcGlwZWZhaWwKCnNvdXJjZSAiJChkaXJuYW1lICR7QkFTSF9TT1VSQ0VbMF19KS9jb21tb24uc2giCnNvdXJjZSAiJChkaXJuYW1lICR7QkFTSF9TT1VSQ0VbMF19KS9za29wZW8tY29tbW9uLnNoIgoKZnVuY3Rpb24gc2tvcGVvX2luc3BlY3QoKSB7CiAgICBza29wZW8gaW5zcGVjdCAke1NLT1BFT19ERUJVR19GTEFHfSBcCiAgICAgICAgLS10bHMtdmVyaWZ5PSR7UEFSQU1TX1RMU19WRVJJRll9IFwKICAgICAgICAtLWZvcm1hdD0ne3sgLkRpZ2VzdCB9fScgXAogICAgICAgICR7MX0KfQoKcGhhc2UgIkV4dHJhY3RpbmcgJyR7UEFSQU1TX1NPVVJDRX0nIHNvdXJjZSBpbWFnZSBkaWdlc3QiCnNvdXJjZV9kaWdlc3Q9IiQoc2tvcGVvX2luc3BlY3QgJHtQQVJBTVNfU09VUkNFfSkiCnBoYXNlICJTb3VyY2UgaW1hZ2UgZGlnZXN0ICcke3NvdXJjZV9kaWdlc3R9JyIKCnBoYXNlICJFeHRyYWN0aW5nICcke1BBUkFNU19ERVNUSU5BVElPTn0nIGRlc3RpbmF0aW9uIGltYWdlIGRpZ2VzdCIKZGVzdGluYXRpb25fZGlnZXN0PSIkKHNrb3Blb19pbnNwZWN0ICR7UEFSQU1TX0RFU1RJTkFUSU9OfSkiCnBoYXNlICJEZXN0aW5hdGlvbiBpbWFnZSBkaWdlc3QgJyR7ZGVzdGluYXRpb25fZGlnZXN0fSciCgpwcmludGYgIiVzIiAke3NvdXJjZV9kaWdlc3R9ID4ke1JFU1VMVFNfU09VUkNFX0RJR0VTVF9QQVRIfQpwcmludGYgIiVzIiAke2Rlc3RpbmF0aW9uX2RpZ2VzdH0gPiR7UkVTVUxUU19ERVNUSU5BVElPTl9ESUdFU1RfUEFUSH0K" |base64 -d >skopeo-results.sh + chmod +x skopeo-*.sh + volumeMounts: + - name: scripts-dir + mountPath: /scripts + + - name: skopeo-copy + image: registry.access.redhat.com/ubi8/skopeo:8.9 + command: + - /scripts/skopeo-copy.sh + volumeMounts: + - name: scripts-dir + mountPath: /scripts + + - name: skopeo-results + image: registry.access.redhat.com/ubi8/skopeo:8.9 + command: + - /scripts/skopeo-results.sh + volumeMounts: + - name: scripts-dir + mountPath: /scripts