Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ jobs:
file: score-k8s
version: latest
token: ${{ secrets.GITHUB_TOKEN }}
- name: setup-kind-cluster
run: |
.scripts/setup-kind-cluster.sh
- name: test-provisioners
run: |
.scripts/test-score-files.sh
13 changes: 9 additions & 4 deletions .scripts/test-score-files.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,15 @@ do
do
echo "#### For ${feature}:"
cd $feature
score-compose init --no-sample
score-compose generate score.yaml
score-k8s init --no-sample
score-k8s generate score.yaml
if [[ "$category" = "samples/" ]]; then
make compose-test
make k8s-test
else
score-compose init --no-sample
score-compose generate score.yaml
score-k8s init --no-sample
score-k8s generate score.yaml
fi
cd ..
done
cd ..
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
# Score examples

- [Specification](./specification/)
- [Resources](./resources/)
- [Resources](./resources/)
- [Samples](./samples/)
- [OnlineBoutique](./samples/onlineboutique/)
113 changes: 113 additions & 0 deletions samples/onlineboutique/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# Disable all the default make stuff
MAKEFLAGS += --no-builtin-rules
.SUFFIXES:

## Display a list of the documented make targets
.PHONY: help
help:
@echo Documented Make targets:
@perl -e 'undef $$/; while (<>) { while ($$_ =~ /## (.*?)(?:\n# .*)*\n.PHONY:\s+(\S+).*/mg) { printf "\033[36m%-30s\033[0m %s\n", $$2, $$1 } }' $(MAKEFILE_LIST) | sort

.PHONY: .FORCE
.FORCE:

.score-compose/state.yaml:
score-compose init \
--no-sample \
--provisioners https://raw.githubusercontent.com/score-spec/community-provisioners/refs/heads/main/service/score-compose/10-service.provisioners.yaml \
--patch-templates https://raw.githubusercontent.com/score-spec/community-patchers/refs/heads/main/score-compose/unprivileged.tpl

compose.yaml: ad/score.yaml cart/score.yaml currency/score.yaml email/score.yaml payment/score.yaml productcatalog/score.yaml recommendation/score.yaml shipping/score.yaml checkout/score.yaml frontend/score.yaml loadgenerator/score.yaml .score-compose/state.yaml Makefile
score-compose generate \
ad/score.yaml \
cart/score.yaml \
currency/score.yaml \
email/score.yaml \
payment/score.yaml \
productcatalog/score.yaml \
recommendation/score.yaml \
shipping/score.yaml \
checkout/score.yaml
score-compose generate \
frontend/score.yaml \
--override-property containers.frontend.variables.FRONTEND_MESSAGE="Hello, Score Compose!"
score-compose generate \
loadgenerator/score.yaml

## Generate a compose.yaml file from the score spec and launch it.
.PHONY: compose-up
compose-up: compose.yaml
docker compose up --build -d --remove-orphans
sleep 5

## Generate a compose.yaml file from the score spec, launch it and test (curl) the exposed frontend container.
.PHONY: compose-test
compose-test: compose-up
curl $$(score-compose resources get-outputs dns.default#frontend.dns --format '{{ .host }}:8080') | grep "Hello, Score Compose!"

## Delete the containers running via compose down.
.PHONY: compose-down
compose-down:
docker compose down -v --remove-orphans || true

.score-k8s/state.yaml:
score-k8s init \
--no-sample \
--provisioners https://raw.githubusercontent.com/score-spec/community-provisioners/refs/heads/main/service/score-k8s/10-service.provisioners.yaml \
--patch-templates https://raw.githubusercontent.com/score-spec/community-patchers/refs/heads/main/score-k8s/unprivileged.tpl

manifests.yaml: ad/score.yaml cart/score.yaml currency/score.yaml email/score.yaml payment/score.yaml productcatalog/score.yaml recommendation/score.yaml shipping/score.yaml checkout/score.yaml frontend/score.yaml loadgenerator/score.yaml .score-k8s/state.yaml Makefile
score-k8s generate \
ad/score.yaml \
cart/score.yaml \
currency/score.yaml \
email/score.yaml \
payment/score.yaml \
productcatalog/score.yaml \
recommendation/score.yaml \
shipping/score.yaml \
checkout/score.yaml
score-k8s generate \
frontend/score.yaml \
--override-property containers.frontend.variables.FRONTEND_MESSAGE="Hello, Score Kubernetes!"
score-k8s generate \
loadgenerator/score.yaml

## Create a local Kind cluster.
.PHONY: kind-create-cluster
kind-create-cluster:
./scripts/setup-kind-cluster.sh

## Load the local container image in the current Kind cluster.
.PHONY: kind-load-image
kind-load-image:
kind load docker-image ${CONTAINER_IMAGE}

NAMESPACE ?= default
## Generate a manifests.yaml file from the score spec, deploy it to Kubernetes and wait for the Pods to be Ready.
.PHONY: k8s-up
k8s-up: manifests.yaml
kubectl apply \
-f manifests.yaml \
-n ${NAMESPACE}
kubectl wait deployments/frontend \
-n ${NAMESPACE} \
--for condition=Available \
--timeout=90s
kubectl wait pods \
-n ${NAMESPACE} \
-l app.kubernetes.io/name=frontend \
--for condition=Ready \
--timeout=90s

## Test the expose frontend app
.PHONY: k8s-test
k8s-test: k8s-up
curl $$(score-k8s resources get-outputs dns.default#frontend.dns --format '{{ .host }}') | grep "Hello, Score Kubernetes!"

## Delete the deployment of the local container in Kubernetes.
.PHONY: k8s-down
k8s-down:
kubectl delete \
-f manifests.yaml \
-n ${NAMESPACE}
27 changes: 27 additions & 0 deletions samples/onlineboutique/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
```bash
score-compose init --no-sample \
--provisioners https://raw.githubusercontent.com/score-spec/community-provisioners/refs/heads/main/service/score-compose/10-service.provisioners.yaml
```

```bash
score-compose generate \
ad/score.yaml \
cart/score.yaml \
currency/score.yaml \
email/score.yaml \
payment/score.yaml \
productcatalog/score.yaml \
recommendation/score.yaml \
shipping/score.yaml \
checkout/score.yaml \
frontend/score.yaml \
loadgenerator/score.yaml
```

```bash
docker compose up --build -d --remove-orphans
```

```bash
curl $$(score-compose resources get-outputs dns.default#frontend.dns --format '{{ .host }}:8080')
```
22 changes: 22 additions & 0 deletions samples/onlineboutique/ad/score.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
apiVersion: score.dev/v1b1
metadata:
name: ad
annotations:
tags: "java,backend,grpc"
containers:
ad:
image: us-central1-docker.pkg.dev/google-samples/microservices-demo/adservice:v0.10.4
variables:
PORT: "9555"
resources:
limits:
memory: "150Mi"
cpu: "280m"
requests:
memory: "120Mi"
cpu: "250m"
service:
ports:
grpc:
port: 9555
targetPort: 9555
25 changes: 25 additions & 0 deletions samples/onlineboutique/cart/score.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
apiVersion: score.dev/v1b1
metadata:
name: cart
annotations:
tags: "dotnet,backend,grpc"
containers:
cart:
image: us-central1-docker.pkg.dev/google-samples/microservices-demo/cartservice:v0.10.4
variables:
REDIS_ADDR: "${resources.redis-cart.host}:${resources.redis-cart.port},user=${resources.redis-cart.username},password=${resources.redis-cart.password}"
resources:
limits:
memory: "90Mi"
cpu: "220m"
requests:
memory: "70Mi"
cpu: "200m"
resources:
redis-cart:
type: redis
service:
ports:
grpc:
port: 7070
targetPort: 7070
41 changes: 41 additions & 0 deletions samples/onlineboutique/checkout/score.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
apiVersion: score.dev/v1b1
metadata:
name: checkout
annotations:
tags: "golang,backend,grpc"
containers:
checkout:
image: us-central1-docker.pkg.dev/google-samples/microservices-demo/checkoutservice:v0.10.4
variables:
CART_SERVICE_ADDR: "${resources.cart.name}:7070"
CURRENCY_SERVICE_ADDR: "${resources.currency.name}:7000"
EMAIL_SERVICE_ADDR: "${resources.email.name}:5000"
PAYMENT_SERVICE_ADDR: "${resources.payment.name}:50051"
PORT: "5050"
PRODUCT_CATALOG_SERVICE_ADDR: "${resources.productcatalog.name}:3550"
SHIPPING_SERVICE_ADDR: "${resources.shipping.name}:50051"
resources:
limits:
memory: "80Mi"
cpu: "60m"
requests:
memory: "60Mi"
cpu: "40m"
resources:
cart:
type: service
currency:
type: service
email:
type: service
payment:
type: service
productcatalog:
type: service
shipping:
type: service
service:
ports:
grpc:
port: 5050
targetPort: 5050
23 changes: 23 additions & 0 deletions samples/onlineboutique/currency/score.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
apiVersion: score.dev/v1b1
metadata:
name: currency
annotations:
tags: "node,backend,grpc"
containers:
currency:
image: us-central1-docker.pkg.dev/google-samples/microservices-demo/currencyservice:v0.10.4
variables:
DISABLE_PROFILER: "1"
PORT: "7000"
resources:
limits:
memory: "90Mi"
cpu: "140m"
requests:
memory: "70Mi"
cpu: "120m"
service:
ports:
grpc:
port: 7000
targetPort: 7000
23 changes: 23 additions & 0 deletions samples/onlineboutique/email/score.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
apiVersion: score.dev/v1b1
metadata:
name: email
annotations:
tags: "python,backend,grpc"
containers:
email:
image: us-central1-docker.pkg.dev/google-samples/microservices-demo/emailservice:v0.10.4
variables:
DISABLE_PROFILER: "1"
PORT: "8080"
resources:
limits:
memory: "70Mi"
cpu: "130m"
requests:
memory: "50Mi"
cpu: "110m"
service:
ports:
grpc:
port: 5000
targetPort: 8080
Loading