# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

version: 3

vars:

  BASE_IMG: "docker.io/apache"
  RELEASE_FROM_DIR: '{{ if regexMatch "v[0-9][^/]+$" (base .TASKFILE_DIR) }}{{ regexFind "v[0-9][^/]+$" (base .TASKFILE_DIR) }}{{ else }}snapshot{{ end }}'
  RELEASE:
    sh: |
        if test -e .git
        then git -C oplugins-op rev-parse --short HEAD
        else
          if test -e RELEASE
          then cat RELEASE
          else echo {{.RELEASE_FROM_DIR}} | tee RELEASE
          fi
        fi

  OPERATOR_TAG: "{{.RELEASE}}"

  OPERATOR_IMG:
    sh: awk -F= '/ARG OPERATOR_IMAGE_DEFAULT=/ { print $2 ; exit }' oplugins-op/Dockerfile
  OPERATOR_SRC: "{{.OPERATOR_IMG}}:{{.OPERATOR_TAG}}"

  STREAMER_TAG: "{{.OPERATOR_TAG}}"
  STREAMER_SRC: "docker.io/apache/openserverless-streamer:{{.STREAMER_TAG}}"

  ADMIN_API_TAG: "{{.OPERATOR_TAG}}"

  ADMIN_API_SRC: "docker.io/apache/openserverless-admin-api:{{.ADMIN_API_TAG}}"

  RUNTIMES_TAG: "all_{{.OPERATOR_TAG}}"

  OPENWHISK_TAG: "{{.OPERATOR_TAG}}"

  CONTROLLER_SRC: "docker.io/apache/openserverless-wsk-controller:{{.OPENWHISK_TAG}}"
  INVOKER_SRC: "docker.io/apache/openserverless-wsk-invoker:{{.OPENWHISK_TAG}}"

  DEVCONTAINER_TAG: "{{.OPERATOR_TAG}}"
  DEVCONTAINER_SRC: "docker.io/apache/openserverless-devcontainer:{{.DEVCONTAINER_TAG}}"

  OPS_BRANCH: "{{.OPERATOR_TAG}}"

  CMD: "check"
  TEST_TYPE: "kind"

tasks:

    default:
      -  task -l
      - echo release '{{.RELEASE}}'

    clean:
      desc: clean the intermediate artifacts
      cmds:
      - rm -vf ./ops ~/.ops/{{OS}}-{{ARCH}}/images/kind/*
      - rm -vf ./ops

    image-save:
      desc: save an a SRC image in the TGT file
      requires: { vars: [SRC]}
      env:
        TGT:
          sh: |
              B64="$(echo -n {{.SRC}} | /usr/bin/base64 -w0)"
              echo ~/.ops/{{OS}}-{{ARCH}}/images/kind/$B64
      cmds:
      - echo Saving {{.SRC}} in "$TGT"
      - mkdir -p  "$(dirname $TGT)"
      - docker save {{.SRC}} -o  "$TGT"
      status:
      - ! test -e "$TGT"

    cli:
      desc: build the cli
      dir: cli
      cmds:
      - go build -o ../ops cmd/ops/main.go
      status:
      - ! test -e ../ops


    operator:
      desc: build the operator
      deps:
      - cli
      dir: oplugins-op
      cmds:
      - echo Building {{.OPERATOR_SRC}}
      - git tag -d $(git tag) && git tag {{.OPERATOR_TAG}}
      - task b:build
      - task: image-save
        vars:
          SRC: "{{.OPERATOR_SRC}}"

    streamer:
      desc: build the streamer
      deps:
      - cli
      dir: streamer
      cmds:
      - echo Building {{.STREAMER_SRC}}
      - git tag -d $(git tag) && git tag {{.STREAMER_TAG}}
      - echo -e "NAMESPACE=apache\nREGISTRY=dockerhub\n" >.env
      - task buildx
      - task: image-save
        vars:
          SRC: "{{.STREAMER_SRC}}"

    admin-api:
      desc: build the admin-api
      deps:
      - cli
      dir: admin-api
      cmds:
      - echo Building {{.ADMIN_API_SRC}}
      - git tag -d $(git tag) && git tag {{.STREAMER_TAG}}
      - echo -e "NAMESPACE=apache\nREGISTRY=dockerhub\n" >.env
      - task buildx
      - task: image-save
        vars:
          SRC: "{{.ADMIN_API_SRC}}"

    openwhisk:
      desc: build openwhisk
      dir: build
      env:
        PATH: "{{.TASKFILE_DIR}}:$PATH"
        OPS_ROOT: "{{.TASKFILE_DIR}}"
      cmds:
      - echo Building  OpenServerless
      - git tag -d $(git tag) && git tag {{.OPENWHISK_TAG}}
      - |
        export PATH="{{.TASKFILE_DIR}}:$PATH"
        export OPS_ROOT="{{.TASKFILE_DIR}}/oplugins"
        task build-all
      - task: image-save
        vars:
          SRC: "{{.CONTROLLER_SRC}}"
      - task: image-save
        vars:
          SRC: "{{.INVOKER_SRC}}"

    runtimes:
      desc: build current runtimes.json
      dir: runtimes
      cmds:
      - git tag -d $(git tag) && git tag {{.RUNTIMES_TAG}}
      - task build
      - task render-runtimes
      - cp runtimes.json ../oplugins/runtimes.json
      - task: runtimes-save

    runtimes-save:
      desc: save runtimes images
      dir: runtimes
      vars:
        IMAGES:
          sh: jq -r '.runtimes[][] | select(.default == true or .kind == "python:sys")  | "\(.image.prefix)/\(.image.name):\(.image.tag)"'   runtimes.json | grep -v php
      cmds:
      - for: { var: IMAGES, split: "\n", as: IMG }
        task: image-save
        vars:
          SRC: "{{.IMG}}"
          TGT:
            sh: echo ~/.ops/{{OS}}-{{ARCH}}/images/kind/$(echo {{.IMG}} | /usr/bin/base64 -w0)

    opsroot:
      desc: build current opsroot.json
      dir: oplugins
      cmds:
      - test -e opsroot.orig || jq . <opsroot.json >opsroot.orig
      - >
        jq <opsroot.orig >opsroot.json  '
          .config.images.operator   = "{{.OPERATOR_SRC}}"         |
          .config.images.streamer   = "{{.STREAMER_SRC}}"         |
          .config.images.systemapi  = "{{.ADMIN_API_SRC}}"        |
          .config.images.controller = "{{.CONTROLLER_SRC}}"       |
          .config.images.invoker    = "{{.INVOKER_SRC}}"          |
          .config.images.devcontainer  = "{{.DEVCONTAINER_SRC}}"
        '
      - diff opsroot.orig opsroot.json || true

    opslink:
      desc: link ops
      cmds:
      - task: cli
      - mkdir -p ~/.local/bin ~/.ops/{{.OPS_BRANCH}}
      - ln -sf $(pwd)/ops ~/.local/bin/ops
      - test -d ~/.ops/{{.OPS_BRANCH}}/oplugins || ln -sf $(pwd)/oplugins ~/.ops/{{.OPS_BRANCH}}/oplugins
      - touch ~/.profile
      - |
        if ! grep -q OPS_BRANCH= ~/.profile
        then echo export OPS_BRANCH={{.OPS_BRANCH}} >>~/.profile
        fi
      - |
        if ! grep -q 'PATH=~/.local/bin' ~/.profile
        then echo 'export PATH=~/.local/bin:"$PATH"' >>~/.profile
        fi

    gitinit:
      desc: initialize git if missing
      cmds:
      - |
        for i in build cli oplugins-op runtimes streamer admin-api
        do
          cd "$i"
          if ! test -e .git
          then git init 2>/dev/null
              git commit -m "init" --allow-empty
          fi
          cd ..
        done

    build:
      desc: build all
      cmds:
      - task: gitinit
      - task: opslink
      - task: openwhisk
      - task: operator
      - task: runtimes
      - task: streamer
      - task: admin-api
      - task: opsroot

    test:
      desc: execute all the tests
      dir: testing/tests
      cmds:
        - |
          export PATH="{{.TASKFILE_DIR}}:$PATH"
          export OPS_ROOT="{{.TASKFILE_DIR}}/oplugins"
          export OPS_BRANCH="{{.OPS_BRANCH}}"
          which ops
          ops -info
          ops setup docker delete || true
          touch .secrets
          ./all.sh {{.TEST_TYPE}}

    test-one:
      desc: execute one test specified by TEST, empty valure to list tests
      requires: { vars: [TEST] }
      dir: testing/tests
      cmds:
        - |
          export PATH="{{.TASKFILE_DIR}}:$PATH"
          export OPS_ROOT="{{.TASKFILE_DIR}}/oplugins"
          export OPS_BRANCH="{{.OPS_BRANCH}}"
          which ops
          ops -info
          if test -e '{{.TEST}}'
          then echo "Running {{.TEST}}"
              if ./{{.TEST}} {{.TEST_TYPE}}
              then echo SUCCESS
              else echo FAIL
              fi
          else echo test not found, tests are
               ls *-*.sh | awk '{ print "- "  $1 }'
          fi


    license:
      silent: true
      desc: check license headers
      cmds:
      - |
        license-eye header {{.CMD}}
        for i in */.licenserc.yaml
        do
            DIR="$(dirname $i)"
            echo "*** Checking license headers in $DIR"
            cd $DIR
            license-eye header {{.CMD}}
            cd {{.TASKFILE_DIR}}
        done

    sync-images:
      desc: synchronize runtimes.json and opsroot.json with published images, use WRITE=y to actuallyt write, GHUSER=github-user for a non apache user on ghcr.io
      cmds:
        - python syncimages.py --write={{.WRITE}} "{{.GHUSER}}"

    release:
      desc: release - the source must be in version folder and you need a gpg key to sign
      requires:
        vars: [ VER, KEY ]
      cmds:
      - test -d ../../{{.VER}}/openserverless || { echo "parent dir does not match with version" ; exit 1; }
      - gpg --list-secret-keys | grep  "{{or .KEY "missing" }}" || { echo "key not found in gpg" ;   exit 1; }
      - rm -f -v ../openserverless-* || true
      - task license
      - git tag -d $(git tag) || true
      - git tag "v{{.VER}}"
      - >
          {{if eq OS "darwin"}}gtar{{else}}tar{{end}}
          -C .. --exclude='.git'
          --transform 's,^openserverless,openserverless-{{.VER}},'
          -czvf ../openserverless-{{.VER}}-src.tar.gz
          openserverless
      - gpg --armor --detach-sign --local-user {{.KEY}} ../openserverless-{{.VER}}-src.tar.gz
      - cd .. && shasum -a 512 openserverless-{{.VER}}-src.tar.gz >openserverless-{{.VER}}-src.tar.gz.sha512
      - python3 releasing.py {{.VER}} >../../{{.VER}}.txt
      - echo 'Next steps are svn push, git push --tags and send email'


