blob: f604fb41cbba7d989784b099744a46331f16d2c8 [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'
vars:
BASETAG: 0.9.1-incubating
COMMIT_ID:
sh: git rev-parse --short HEAD
TAG:
sh: git describe --tags --abbrev=0 2>/dev/null || echo latest
dotenv:
- .env
includes:
builder:
taskfile: TaskfileBuilder.yml
dev:
taskfile: TaskfileDev.yml
tasks:
docker-login-ghcr: >
silent: true
cmds:
- |
echo "Logging in to ghcr.io as $GITHUB_USER"
echo $GITHUB_TOKEN | docker login ghcr.io -u $GITHUB_USER --password-stdin
docker-login-dockerhub:
silent: true
cmds:
- |
echo "Logging in to dockerhub as $DOCKERHUB_USER"
echo $DOCKERHUB_TOKEN | docker login -u $DOCKERHUB_USER --password-stdin
docker-login:
desc: |
Login to the docker registry. Set REGISTRY=ghcr or REGISTRY=dockerhub in .env
to use the respective registry.
silent: true
cmds:
- |
if [ -z "$REGISTRY" ]; then
echo "Error: REGISTRY variable is not set in .env"
exit 1
fi
task docker-login-$REGISTRY
image-tag:
silent: true
desc: |
Create a new tag for the current git commit.
cmds:
- git tag -d $(git tag)
- git tag -f {{.BASETAG}}.$(date +%y%m%d%H%M)
- env PAGER= git tag
base-image-name:
silent: true
cmds:
- |
if [ -n "$REGISTRY" ] && [ -z "$NAMESPACE" ]; then
echo "Error: NAMESPACE variable is not set in .env"
exit 1
fi
if [ "$REGISTRY" = "ghcr" ]; then
echo "ghcr.io/$NAMESPACE/openserverless-admin-api"
elif [ "$REGISTRY" = "dockerhub" ]; then
echo "docker.io/$NAMESPACE/openserverless-admin-api"
elif [ "$REGISTRY" = "apache" ]; then
echo "docker.io/apache/openserverless-admin-api"
else
echo "openserverless-admin-api"
fi
buildx:
desc: |
Build the docker image using buildx. Set PUSH=1 to push the image to the registry.
silent: true
cmds:
- |
BASEIMG=$(task base-image-name)
IMG="$BASEIMG:{{.TAG}}"
if [ -n "{{.PUSH}}" ]; then
if [ -z "$REGISTRY" ]; then
echo "Error: REGISTRY variable must be set in .env to push the image"
exit 1
fi
{{.DRY}} docker buildx build -t $IMG --platform linux/amd64,linux/arm64 . --push
else
{{.DRY}} docker buildx build -t $IMG . --load
fi
build:
silent: true
desc: Build the image locally
cmds:
- uv lock --upgrade
- |
BASEIMG=$(task base-image-name)
IMG="$BASEIMG:{{.TAG}}"
docker build . -t $IMG --load
build-and-load:
silent: true
desc: Build the image and loads it to the local Kind, k3s, microk8s cluster
vars:
KUB_TYPE:
sh: "ops debug kube detect"
cmds:
- task: build
- |
BASEIMG=$(task base-image-name)
IMG="$BASEIMG:{{.TAG}}"
if [ "{{.KUB_TYPE}}" = "kind" ]; then
echo "Loading image to kind"
kind load docker-image $IMG --name=nuvolaris
elif [ "{{.KUB_TYPE}}" = "k3s" ]; then
echo "Loading image to k3s"
docker save $IMG | sudo k3s ctr images import -
elif [ "{{.KUB_TYPE}}" = "microk8s" ]; then
echo "Loading image to microk8s"
docker save $IMG | microk8s ctr images import -
else
echo "Error: unsupported KUB_TYPE '{{.KUB_TYPE}}' for loading images"
exit 1
fi
utest:
cmds:
- |
for test in openserverless/common/{{.T}}*.py
do echo "*** [{{.KUBE}}] $test"
uv run python3 -m doctest -o ELLIPSIS $test {{.CLI_ARGS}}
done
silent: true
itest:
desc: Run integration tests (Flask routes, with external services mocked)
cmds:
- uv run python3 -m unittest discover -s tests -p "test_{{.T}}*.py" -v {{.CLI_ARGS}}
silent: true
test:
desc: Run all tests
silent: true
cmds:
- task: utest
- task: itest
coverage:
desc: Run all tests (utest doctests + itest pytest) with a combined coverage report
silent: true
cmds:
- uv run coverage erase
- PYTHONPATH=. uv run coverage run --source=openserverless -m pytest tests/
- |
for test in openserverless/common/{{.T}}*.py
do PYTHONPATH=. uv run coverage run --source=openserverless -a -m doctest -o ELLIPSIS $test
done
- uv run coverage report -m {{.CLI_ARGS}}