blob: b83713735f4793de386b41c59a83e8d933bca4ad [file]
# 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: |
if test -n "${TAG:-}"; then
echo "$TAG"
else
git describe --tags --abbrev=0 2>/dev/null || git rev-parse --short HEAD
fi
GHUSER:
sh: echo "${GITHUB_USER:-apache}"
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
LOCAL_DOCKER_REGISTRY:
sh: echo "${LOCAL_DOCKER_REGISTRY:-localhost:5000/apache}"
LOCAL_REGISTRY_CONTAINER:
sh: echo "${LOCAL_REGISTRY_CONTAINER:-openserverless-registry}"
BUILDX_BUILDER: openserverless-buildx
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
ensure-openwhisk:
silent: true
cmds:
- |
if ! test -d openwhisk/common/scala; then
echo "ERROR: openwhisk directory is missing or incomplete."
echo "This branch vendors openwhisk as a regular directory, not as a submodule."
echo "Refresh the build checkout and make sure the build-local branch includes openwhisk/common/scala."
exit 1
fi
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 {{.BUILDX_BUILDER}}
compile:
- task: compile:controller
- task: compile:invoker
- task: compile:scheduler
- task: compile:standalone
docker-setup:
- docker run --rm --privileged tonistiigi/binfmt --install all
- docker buildx inspect {{.BUILDX_BUILDER}} >/dev/null 2>&1 || docker buildx create --name {{.BUILDX_BUILDER}} --driver docker-container --driver-opt network=host
- docker buildx use {{.BUILDX_BUILDER}}
- docker buildx inspect --bootstrap
docker-local-registry:
silent: true
cmds:
- |
if docker container inspect {{.LOCAL_REGISTRY_CONTAINER}} >/dev/null 2>&1; then
docker start {{.LOCAL_REGISTRY_CONTAINER}} >/dev/null
else
docker run -d --restart=always -p 5000:5000 --name {{.LOCAL_REGISTRY_CONTAINER}} registry:2 >/dev/null
fi
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-local)
docker buildx build --platform linux/amd64,linux/arm64 --build-arg BASE={{.BASE}} -t {{.IMG}} {{.DIR}} --push
;;
(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-local|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-local)
docker buildx build --platform linux/amd64,linux/arm64 --build-arg BASE={{.BASE}} --build-arg OPENWHISK_JAR={{.OPENWHISK_JAR}} -t {{.IMG}} {{.DIR}} --push
;;
(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-local|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
printf '%s\n' 'mkdir -p /tmp/openserverless-docker-config && printf "{}\n" >/tmp/openserverless-docker-config/config.json && OPENWHISK_BUILDCONTAINER=1 DOCKER_CONFIG=/tmp/openserverless-docker-config TAG="{{.TAG}}" task build-all:local' | ops ide devcontainer
fi
build-all:local:
cmds:
- task: ensure-openwhisk
- 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"
buildx-all:
desc: build multi-arch OpenWhisk images into a local registry without pushing to DockerHub
cmds:
- |
if test "${OPENWHISK_BUILDCONTAINER:-}" = "1"; then
task buildx-all:local
else
printf '%s\n' 'mkdir -p /tmp/openserverless-docker-config && printf "{}\n" >/tmp/openserverless-docker-config/config.json && OPENWHISK_BUILDCONTAINER=1 DOCKER_CONFIG=/tmp/openserverless-docker-config TAG="{{.TAG}}" task buildx-all:local' | ops ide devcontainer
fi
buildx-all:local:
cmds:
- task: docker-setup
- task: docker-local-registry
- task: ensure-openwhisk
- task: build:scala
vars:
ACT: "buildx-local"
DOCKER_REGISTRY: "{{.LOCAL_DOCKER_REGISTRY}}"
- task: build:controller
vars:
ACT: "buildx-local"
DOCKER_REGISTRY: "{{.LOCAL_DOCKER_REGISTRY}}"
- task: build:invoker
vars:
ACT: "buildx-local"
DOCKER_REGISTRY: "{{.LOCAL_DOCKER_REGISTRY}}"
- task: build:scheduler
vars:
ACT: "buildx-local"
DOCKER_REGISTRY: "{{.LOCAL_DOCKER_REGISTRY}}"
- task: build:standalone
vars:
ACT: "buildx-local"
DOCKER_REGISTRY: "{{.LOCAL_DOCKER_REGISTRY}}"
build:
desc: build local OpenWhisk images, update OPS root, load kind, and roll out controller
cmds:
- task: deploy-kind-local
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: docker-setup
- 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
printf '%s\n' 'mkdir -p /tmp/openserverless-docker-config && printf "{}\n" >/tmp/openserverless-docker-config/config.json && OPENWHISK_BUILDCONTAINER=1 DOCKER_CONFIG=/tmp/openserverless-docker-config TAG="{{.TAG}}" task distdocker:local' | ops ide devcontainer
fi
distdocker:local:
deps:
- ensure-openwhisk
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