# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements; and to You under the Apache License, Version 2.0.
apiVersion: build.knative.dev/v1alpha1
kind: BuildTemplate
metadata:
  name: openwhisk-nodejs-runtime
spec:
  parameters:
  - name: TARGET_IMAGE_NAME
    description: name of the image to be tagged and pushed
  - name: TARGET_IMAGE_TAG
    description: tag the image before pushing
    default: "latest"
  - name: DOCKERFILE
    description: name of the dockerfile
  - name: OW_RUNTIME_DEBUG
    description: flag to indicate debug mode should be on/off
    default: "false"
  - name: OW_RUNTIME_PLATFORM
    description: flag to indicate the platform, one of ["openwhisk", "knative", ... ]
    default: "knative"
  - name: OW_ACTION_NAME
    description: name of the action
    default: ""
  - name: OW_ACTION_CODE
    description: JavaScript source code to be evaluated
    default: ""
  - name: OW_ACTION_MAIN
    description: name of the function in the "__OW_ACTION_CODE" to call as the action handler
    default: "main"
  - name: OW_ACTION_BINARY
    description: flag to indicate zip function, for zip actions, "__OW_ACTION_CODE" must be base64 encoded string
    default: "false"
  - name: OW_HTTP_METHODS
    description: list of HTTP methods, any combination of [GET, POST, PUT, and DELETE], default is [POST]
    default: "[POST]"
  steps:
  - name: add-ow-env-to-dockerfile
    image: "gcr.io/kaniko-project/executor:debug"
    command:
    - /busybox/sh
    args:
    - -c
    - |
      cat <<EOF >> ${DOCKERFILE}
        ENV __OW_RUNTIME_DEBUG "${OW_RUNTIME_DEBUG}"
        ENV __OW_RUNTIME_PLATFORM "${OW_RUNTIME_PLATFORM}"
        ENV __OW_ACTION_NAME "${OW_ACTION_NAME}"
        ENV __OW_ACTION_CODE "${OW_ACTION_CODE}"
        ENV __OW_ACTION_MAIN "${OW_ACTION_MAIN}"
        ENV __OW_ACTION_BINARY "${OW_ACTION_BINARY}"
        ENV __OW_HTTP_METHODS "${OW_HTTP_METHODS}"
      EOF
  - name: build-openwhisk-nodejs-runtime
    image: "gcr.io/kaniko-project/executor:latest"
    args: ["--destination=${TARGET_IMAGE_NAME}:${TARGET_IMAGE_TAG}", "--dockerfile=${DOCKERFILE}"]
