| # 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' |
| |
| dotenv: |
| - .env |
| |
| vars: |
| BASETAG: 2.0.0-incubating |
| TAG: |
| sh: git describe --tags --abbrev=0 2>/dev/null || git rev-parse --short HEAD |
| GHUSER: |
| sh: echo "${GITHUB_USER:-apache}" |
| WORKSPACE_ROOT: |
| sh: git rev-parse --show-superproject-working-tree 2>/dev/null || git rev-parse --show-toplevel |
| BUILD_CONTAINER_IMAGE: openserverless-build-devcontainer:local |
| BUN: |
| sh: | |
| if command -v bun >/dev/null 2>&1; then |
| command -v bun |
| exit 0 |
| fi |
| os="$(uname -s | tr A-Z a-z)" |
| arch="$(uname -m)" |
| case "$arch" in |
| x86_64) arch=amd64 ;; |
| aarch64|arm64) arch=arm64 ;; |
| esac |
| if test -x "$HOME/.ops/${os}-${arch}/bin/bun"; then |
| echo "$HOME/.ops/${os}-${arch}/bin/bun" |
| else |
| echo bun |
| fi |
| OPSROOT_JSON: |
| sh: echo "$HOME/.ops/0.1.0/olaris/opsroot.json" |
| KIND_NODE: nuvolaris-control-plane |
| KUBE_NAMESPACE: nuvolaris |
| DOCKER_REGISTRY: registry.hub.docker.com/apache |
| DIST_DOCKER_REGISTRY: "" |
| DIST_DOCKER_REGISTRY_ARG: |
| sh: | |
| if test -n "{{.DIST_DOCKER_REGISTRY}}"; then |
| echo "-PdockerRegistry={{.DIST_DOCKER_REGISTRY}}" |
| fi |
| CONTROLLER_IMAGE: openserverless-wsk-controller |
| INVOKER_IMAGE: openserverless-wsk-invoker |
| SCHEDULER_IMAGE: openserverless-wsk-scheduler |
| STANDALONE_IMAGE: openserverless-wsk-standalone |
| COMMON_IMAGE: openserverless-wsk-scala |
| ACT: "nothing" |
| S: "" |
| |
| tasks: |
| |
| default: |
| - task --list-all |
| setup: |
| silent: true |
| |
| image-tag: |
| - git tag -d $(git tag) |
| - git tag -f {{.BASETAG}}.$(date +%y%m%d%H%M){{.S}} |
| - task show |
| |
| show: |
| silent: true |
| cmds: |
| - echo "tag:" {{.TAG}} |
| - echo "scala:" {{.COMMON_IMAGE}}:{{.TAG}} |
| - echo "controller:" ${MY_CONTROLLER_IMAGE:-{{.CONTROLLER_IMAGE}}}:{{.TAG}} |
| - echo "invoker:" ${MY_INVOKER_IMAGE:-{{.INVOKER_IMAGE}}}:{{.TAG}} |
| - echo "scheduler:" ${MY_SCHEDULER_IMAGE:-{{.INVOKER_IMAGE}}}:{{.TAG}} |
| - echo "standalone:" ${MY_STANDALONE_IMAGE:-{{.STANDALONE_IMAGE}}}:{{.TAG}} |
| |
| compile:controller: |
| dir: openwhisk |
| cmds: |
| - ./gradlew :core:controller:distTar |
| status: |
| - test -f core/controller/build/distributions/controller.tar |
| |
| compile:invoker: |
| dir: openwhisk |
| cmds: |
| - ./gradlew :core:invoker:distTar |
| status: |
| - test -f core/invoker/build/distributions/invoker.tar |
| |
| compile:scheduler: |
| dir: openwhisk |
| cmds: |
| - ./gradlew :core:scheduler:distTar |
| status: |
| - test -f core/scheduler/build/distributions/scheduler.tar |
| |
| compile:standalone: |
| dir: openwhisk |
| cmds: |
| - ./gradlew :core:standalone:build |
| - mkdir -p ../standalone/lib |
| - cp bin/openwhisk-standalone.jar ../standalone/lib/ |
| status: |
| - test -f ../standalone/lib/openwhisk-standalone.jar |
| |
| native:standalone-libs: |
| deps: |
| - compile:standalone |
| dir: openwhisk |
| cmds: |
| - ./gradlew core:standalone:copyRuntimeLibs |
| |
| native:standalone-build: |
| deps: |
| - native:standalone-libs |
| dir: openwhisk/core/standalone |
| cmds: |
| - native-image |
| --initialize-at-run-time=io.netty,akka.protobufv3.internal.UnsafeUtil |
| --no-fallback --report-unsupported-elements-at-runtime |
| --trace-object-instantiation=ch.qos.logback.classic.Logger |
| --enable-url-protocols=http,https |
| -march=native |
| -cp build/classes/scala/main:build/resources/main:build/dependency-libs/* |
| -H:ConfigurationFileDirectories=$PWD/../../../standalone/graal-config |
| -o $PWD/../../../standalone/dist/{{.EXEC_NAME}} |
| org.apache.openwhisk.standalone.StandaloneOpenWhisk |
| vars: |
| EXEC_NAME: "${NATIVE_IMAGE_NAME:-openwhisk-standalone}" |
| |
| native:standalone-run: |
| dir: standalone/dist |
| cmds: |
| - ./openwhisk-standalone -Xmx2g -Dwhisk.standalone.host.name="0.0.0.0" -Dwhisk.standalone.host.internal="$(hostname -f)" -Dkamon.auto-start=no --no-browser |
| env: |
| KAMON_ENABLED: false |
| |
| native:standalone-config: |
| deps: |
| - compile:standalone |
| dir: openwhisk/core/standalone |
| cmds: |
| - java -agentlib:native-image-agent=config-output-dir=../../../standalone/graal-config |
| -cp build/classes/scala/main:build/resources/main:build/dependency-libs/* |
| -Dwhisk.standalone.host.name="0.0.0.0" |
| -Dwhisk.standalone.host.internal="$(hostname -f)" |
| org.apache.openwhisk.standalone.StandaloneOpenWhisk |
| |
| clean: |
| ignore_error: true |
| cmds: |
| - rm standalone/lib/openwhisk-standalone.jar |
| - rm openwhisk/core/invoker/build/distributions/invoker.tar |
| - rm openwhisk/core/controller/build/distributions/controller.tar |
| - rm openwhisk/core/scheduler/build/distributions/scheduler.tar |
| - docker buildx rm openserverless |
| |
| compile: |
| - task: compile:controller |
| - task: compile:invoker |
| - task: compile:scheduler |
| - task: compile:standalone |
| |
| docker-setup: |
| - docker run -it --rm --userns=host --privileged tonistiigi/binfmt --install all |
| - docker buildx create --name openserverless |
| - docker buildx use openserverless |
| |
| docker-login: > |
| echo $GITHUB_TOKEN | docker login ghcr.io -u $GITHUB_USER --password-stdin |
| |
| # this requires ACT IMG and DIR parameters to be passed |
| docker-build: |
| silent: true |
| cmds: |
| - |- |
| echo "***" {{.ACT}} for {{.IMG}} in {{.DIR}} |
| case "{{.ACT}}" in |
| (build) |
| docker build {{.DIR}} -t {{.IMG}} --build-arg BASE={{.BASE}} |
| ;; |
| (buildx) |
| docker buildx build --platform linux/amd64,linux/arm64 --build-arg BASE={{.BASE}} -t {{.IMG}} {{.DIR}} |
| ;; |
| (buildx-push) |
| docker buildx build --platform linux/amd64,linux/arm64 --build-arg BASE={{.BASE}} -t {{.IMG}} {{.DIR}} --push |
| ;; |
| (*) echo ACT must be "build|buildx|buildx-push" |
| esac |
| |
| # this requires ACT IMG OPENWHISK_JAR and DIR parameters to be passed |
| docker-build-standalone: |
| silent: true |
| cmds: |
| - |- |
| echo "***" {{.ACT}} for {{.IMG}} in {{.DIR}} |
| case "{{.ACT}}" in |
| (build) |
| docker build {{.DIR}} -t {{.IMG}} --build-arg BASE={{.BASE}} --build-arg OPENWHISK_JAR={{.OPENWHISK_JAR}} |
| ;; |
| (buildx) |
| docker buildx build --platform linux/amd64,linux/arm64 --build-arg BASE={{.BASE}} --build-arg OPENWHISK_JAR={{.OPENWHISK_JAR}} -t {{.IMG}} {{.DIR}} |
| ;; |
| (buildx-push) |
| docker buildx build --platform linux/amd64,linux/arm64 --build-arg BASE={{.BASE}} --build-arg OPENWHISK_JAR={{.OPENWHISK_JAR}} -t {{.IMG}} {{.DIR}} --push |
| ;; |
| (*) echo ACT must be "build|buildx|buildx-push" |
| esac |
| |
| build:scala: |
| cmds: |
| - task: docker-build |
| vars: |
| DIR: openwhisk/common/scala |
| IMG: "{{.DOCKER_REGISTRY}}/{{.COMMON_IMAGE}}:{{.TAG}}" |
| ACT: '{{.ACT}}' |
| |
| build:controller: |
| deps: |
| - compile:controller |
| cmds: |
| - task: docker-build |
| vars: |
| DIR: openwhisk/core/controller |
| IMG: "{{.DOCKER_REGISTRY}}/${MY_CONTROLLER_IMAGE:-{{.CONTROLLER_IMAGE}}}:{{.TAG}}" |
| ACT: '{{.ACT}}' |
| BASE: "{{.DOCKER_REGISTRY}}/{{.COMMON_IMAGE}}:{{.TAG}}" |
| |
| build:invoker: |
| deps: |
| - compile:invoker |
| cmds: |
| - task: docker-build |
| vars: |
| DIR: openwhisk/core/invoker |
| IMG: "{{.DOCKER_REGISTRY}}/${MY_INVOKER_IMAGE:-{{.INVOKER_IMAGE}}}:{{.TAG}}" |
| ACT: '{{.ACT}}' |
| BASE: "{{.DOCKER_REGISTRY}}/{{.COMMON_IMAGE}}:{{.TAG}}" |
| |
| build:scheduler: |
| deps: |
| - compile:scheduler |
| cmds: |
| - task: docker-build |
| vars: |
| DIR: openwhisk/core/scheduler |
| IMG: "{{.DOCKER_REGISTRY}}/${MY_SCHEDULER_IMAGE:-{{.SCHEDULER_IMAGE}}}:{{.TAG}}" |
| ACT: '{{.ACT}}' |
| BASE: "{{.DOCKER_REGISTRY}}/{{.COMMON_IMAGE}}:{{.TAG}}" |
| |
| build:standalone: |
| deps: |
| - compile:standalone |
| cmds: |
| - task: docker-build-standalone |
| vars: |
| DIR: openwhisk/core/standalone |
| IMG: "{{.DOCKER_REGISTRY}}/${MY_STANDALONE_IMAGE:-{{.STANDALONE_IMAGE}}}:{{.TAG}}" |
| ACT: '{{.ACT}}' |
| BASE: "{{.DOCKER_REGISTRY}}/{{.COMMON_IMAGE}}:{{.TAG}}" |
| OPENWHISK_JAR: "build/libs/openwhisk-standalone-1.0.0-SNAPSHOT.jar" |
| |
| build-all: |
| cmds: |
| - | |
| if test "${OPENWHISK_BUILDCONTAINER:-}" = "1"; then |
| task build-all:local |
| else |
| if ! docker image inspect "{{.BUILD_CONTAINER_IMAGE}}" >/dev/null 2>&1; then |
| docker build -t "{{.BUILD_CONTAINER_IMAGE}}" .devcontainer |
| fi |
| docker run --rm --entrypoint bash \ |
| -e OPENWHISK_BUILDCONTAINER=1 \ |
| -v "{{.WORKSPACE_ROOT}}:/workspace" \ |
| -v /var/run/docker.sock:/var/run/docker.sock \ |
| -w /workspace/build \ |
| "{{.BUILD_CONTAINER_IMAGE}}" \ |
| -lc 'git config --global --add safe.directory /workspace && git config --global --add safe.directory /workspace/build && git config --global --add safe.directory /workspace/build/openwhisk && task build-all:local' |
| fi |
| |
| build-all:local: |
| cmds: |
| - task: build:scala |
| vars: |
| ACT: "build" |
| - task: build:controller |
| vars: |
| ACT: "build" |
| - task: build:invoker |
| vars: |
| ACT: "build" |
| - task: build:scheduler |
| vars: |
| ACT: "build" |
| - task: build:standalone |
| vars: |
| ACT: "build" |
| |
| deploy-kind-local: |
| desc: build local OpenWhisk images, update OPS root, load kind, and roll out controller |
| deps: |
| - build-all |
| cmds: |
| - task: kind:deploy |
| |
| opsroot:update: |
| desc: update installed OPS root with local OpenWhisk image tags |
| silent: true |
| cmds: |
| - "{{.BUN}} scripts/kind-local.ts update-opsroot" |
| env: |
| TAG: "{{.TAG}}" |
| DOCKER_REGISTRY: "{{.DOCKER_REGISTRY}}" |
| CONTROLLER_IMAGE: "{{.CONTROLLER_IMAGE}}" |
| INVOKER_IMAGE: "{{.INVOKER_IMAGE}}" |
| STANDALONE_IMAGE: "{{.STANDALONE_IMAGE}}" |
| OPSROOT_JSON: "{{.OPSROOT_JSON}}" |
| |
| kind:load: |
| desc: load local OpenWhisk images into the kind node |
| silent: true |
| cmds: |
| - "{{.BUN}} scripts/kind-local.ts load-kind" |
| env: |
| TAG: "{{.TAG}}" |
| DOCKER_REGISTRY: "{{.DOCKER_REGISTRY}}" |
| CONTROLLER_IMAGE: "{{.CONTROLLER_IMAGE}}" |
| INVOKER_IMAGE: "{{.INVOKER_IMAGE}}" |
| STANDALONE_IMAGE: "{{.STANDALONE_IMAGE}}" |
| KIND_NODE: "{{.KIND_NODE}}" |
| |
| kind:rollout: |
| desc: update local kind OpenWhisk workloads to the local images |
| silent: true |
| cmds: |
| - "{{.BUN}} scripts/kind-local.ts rollout" |
| env: |
| TAG: "{{.TAG}}" |
| DOCKER_REGISTRY: "{{.DOCKER_REGISTRY}}" |
| CONTROLLER_IMAGE: "{{.CONTROLLER_IMAGE}}" |
| INVOKER_IMAGE: "{{.INVOKER_IMAGE}}" |
| STANDALONE_IMAGE: "{{.STANDALONE_IMAGE}}" |
| KUBE_NAMESPACE: "{{.KUBE_NAMESPACE}}" |
| |
| kind:status: |
| desc: show local image, kind image, and pod image status |
| silent: true |
| cmds: |
| - "{{.BUN}} scripts/kind-local.ts status" |
| env: |
| TAG: "{{.TAG}}" |
| DOCKER_REGISTRY: "{{.DOCKER_REGISTRY}}" |
| CONTROLLER_IMAGE: "{{.CONTROLLER_IMAGE}}" |
| INVOKER_IMAGE: "{{.INVOKER_IMAGE}}" |
| STANDALONE_IMAGE: "{{.STANDALONE_IMAGE}}" |
| KIND_NODE: "{{.KIND_NODE}}" |
| KUBE_NAMESPACE: "{{.KUBE_NAMESPACE}}" |
| |
| kind:deploy: |
| desc: update OPS root, load local images into kind, and roll out OpenWhisk |
| silent: true |
| cmds: |
| - "{{.BUN}} scripts/kind-local.ts deploy-kind" |
| env: |
| TAG: "{{.TAG}}" |
| DOCKER_REGISTRY: "{{.DOCKER_REGISTRY}}" |
| CONTROLLER_IMAGE: "{{.CONTROLLER_IMAGE}}" |
| INVOKER_IMAGE: "{{.INVOKER_IMAGE}}" |
| STANDALONE_IMAGE: "{{.STANDALONE_IMAGE}}" |
| OPSROOT_JSON: "{{.OPSROOT_JSON}}" |
| KIND_NODE: "{{.KIND_NODE}}" |
| KUBE_NAMESPACE: "{{.KUBE_NAMESPACE}}" |
| |
| buildx-and-push: |
| - task: build:scala |
| vars: |
| ACT: "buildx-push" |
| - task: build:controller |
| vars: |
| ACT: "buildx-push" |
| - task: build:invoker |
| vars: |
| ACT: "buildx-push" |
| - task: build:scheduler |
| vars: |
| ACT: "buildx-push" |
| - task: build:standalone |
| vars: |
| ACT: "buildx-push" |
| |
| distdocker: |
| cmds: |
| - | |
| if test "${OPENWHISK_BUILDCONTAINER:-}" = "1"; then |
| task distdocker:local |
| else |
| if ! docker image inspect "{{.BUILD_CONTAINER_IMAGE}}" >/dev/null 2>&1; then |
| docker build -t "{{.BUILD_CONTAINER_IMAGE}}" .devcontainer |
| fi |
| docker run --rm --entrypoint bash \ |
| -e OPENWHISK_BUILDCONTAINER=1 \ |
| -v "{{.WORKSPACE_ROOT}}:/workspace" \ |
| -v /var/run/docker.sock:/var/run/docker.sock \ |
| -w /workspace/build \ |
| "{{.BUILD_CONTAINER_IMAGE}}" \ |
| -lc 'git config --global --add safe.directory /workspace && git config --global --add safe.directory /workspace/build && git config --global --add safe.directory /workspace/build/openwhisk && task distdocker:local' |
| fi |
| |
| distdocker:local: |
| dir: openwhisk |
| cmds: |
| - ./gradlew distDocker -PdockerMultiArchBuild=true {{.DIST_DOCKER_REGISTRY_ARG}} -PdockerImagePrefix=openwhisk2 -PdockerImageTag={{.TAG}} |
| |
| run:standalone-docker: |
| cmds: |
| - > |
| docker run -ti |
| -p 3232:3232 -p 3233:3233 |
| -v /var/run/docker.sock:/var/run/docker.sock |
| {{.DOCKER_REGISTRY}}/openwhisk2/standalone:{{.TAG}} |
| interactive: true |
| |
| run:standalone: |
| deps: |
| - native:standalone-libs |
| dir: openwhisk/core/standalone |
| cmds: |
| - java -cp build/classes/scala/main:build/resources/main:build/dependency-libs/* |
| -Dwhisk.standalone.host.name="0.0.0.0" |
| -Dwhisk.standalone.host.internal="$(hostname -f)" |
| org.apache.openwhisk.standalone.StandaloneOpenWhisk --no-browser |