Skip to content

Commit

Permalink
Run benchmark workflow (#347)
Browse files Browse the repository at this point in the history
Co-authored-by: Kamesh Akella <[email protected]>
  • Loading branch information
stianst and kami619 committed May 30, 2023
1 parent 1b4e279 commit 9ee93ed
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 2 deletions.
10 changes: 10 additions & 0 deletions .github/actions/task-setup/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: Setup Go Task
description: Installs Go Task

runs:
using: composite
steps:
- id: install-task
name: Install Go Task
shell: bash
run: bash -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /usr/local/bin/
2 changes: 2 additions & 0 deletions .github/workflows/rosa-cluster-create.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,15 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Setup ROSA CLI
uses: ./.github/actions/rosa-cli-setup
with:
aws-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-default-region: ${{ vars.AWS_DEFAULT_REGION }}
rosa-token: ${{ secrets.ROSA_TOKEN }}

- name: Create ROSA Cluster
run: ./rosa_create_cluster.sh
working-directory: provision/aws
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/rosa-cluster-delete.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,15 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Setup ROSA CLI
uses: ./.github/actions/rosa-cli-setup
with:
aws-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-default-region: ${{ vars.AWS_DEFAULT_REGION }}
rosa-token: ${{ secrets.ROSA_TOKEN }}

- name: Delete ROSA Cluster
run: ./rosa_delete_cluster.sh
working-directory: provision/aws
Expand Down
84 changes: 84 additions & 0 deletions .github/workflows/rosa-run-benchmark.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
name: ROSA Cluster - Run Benchmark

on:
workflow_dispatch:

concurrency: shared_cluster

jobs:

delete:
name: Run Benchmark
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Set up JDK
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '11'
cache: 'maven'

- name: Cache Maven Wrapper
uses: actions/cache@v3
with:
path: |
.mvn/wrapper/maven-wrapper.jar
key: ${{ runner.os }}-maven-wrapper-${{ hashFiles('**/maven-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-maven-wrapper-
- name: Setup ROSA CLI
uses: ./.github/actions/rosa-cli-setup
with:
aws-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-default-region: ${{ vars.AWS_DEFAULT_REGION }}
rosa-token: ${{ secrets.ROSA_TOKEN }}

- name: Setup Go Task
uses: ./.github/actions/task-setup

- name: Login to OpenShift cluster
run: ./rosa_oc_login.sh
working-directory: provision/aws

- name: Build with Maven
run: |
./mvnw -B clean install -DskipTests
tar xfvz benchmark/target/keycloak-benchmark-*.tar.gz
mv keycloak-benchmark-* keycloak-benchmark
- name: Install Keycloak
run: task KC_NAMESPACE_PREFIX=""
working-directory: provision/openshift

- name: Get URLs
run: |
KEYCLOAK_URL=https://$(oc get routes -n keycloak | grep keycloak-service | awk '{ print $2 }')
echo "KEYCLOAK_URL=$KEYCLOAK_URL" >> "$GITHUB_ENV"
- name: Create dataset
run: |
./dataset-import.sh -a create-realms -r 1 -c 1 -u 100 -l ${{ env.KEYCLOAK_URL }}/realms/master/dataset
STATUS_CMD="./dataset-import.sh -a status -l ${{ env.KEYCLOAK_URL }}/realms/master/dataset"
echo -n 'Waiting for dataset to be created: '
for i in {1..30}; do $STATUS_CMD | grep 'No task in progress' &>/dev/null && break || echo -n '.' && sleep 10; done
echo ' done'
working-directory: dataset

- name: Run Authorization Code scenario
run: bin/kcb.sh --scenario=keycloak.scenario.authentication.AuthorizationCode --server-url=${{ env.KEYCLOAK_URL }} --realm-name=realm-0
working-directory: keycloak-benchmark

- name: Archive Gatling reports
uses: actions/upload-artifact@v3
with:
name: gatling-results
path: keycloak-benchmark/results
retention-days: 5

- name: Delete Keycloak project
run: oc delete project keycloak
4 changes: 3 additions & 1 deletion dataset/dataset-import.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ set_environment_variables () {
EVENTS_COUNT="100"
SESSIONS_COUNT="100"
HASH_ITERATIONS="20000"
KEYCLOAK_URI="https://keycloak-keycloak.$(minikube ip || echo 'unknown').nip.io/realms/master/dataset"
if ( minikube version &>/dev/null ); then
KEYCLOAK_URI="https://keycloak-keycloak.$(minikube ip || echo 'unknown').nip.io/realms/master/dataset"
fi
REALM_PREFIX="realm"
STATUS_TIMEOUT="120"

Expand Down
16 changes: 16 additions & 0 deletions provision/aws/rosa_oc_login.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/bash
set -e

if [ -f ./.env ]; then
source ./.env
fi

CLUSTER_NAME=${CLUSTER_NAME:-$(whoami)}
KEYCLOAK_MASTER_PASSWORD_SECRET_NAME=${KEYCLOAK_MASTER_PASSWORD_SECRET_NAME:-"keycloak-master-password"}
# Force eu-central-1 region for secrets manager so we all work with the same secret
SECRET_MANAGER_REGION="eu-central-1"

API_URL=$(rosa describe cluster -c shared | grep 'API URL' | awk '{ print $3 }')
ADMIN_PASSWORD=$(aws secretsmanager get-secret-value --region $SECRET_MANAGER_REGION --secret-id $KEYCLOAK_MASTER_PASSWORD_SECRET_NAME --query SecretString --output text --no-cli-pager)

oc login $API_URL --username cluster-admin --password $ADMIN_PASSWORD --insecure-skip-tls-verify
4 changes: 3 additions & 1 deletion provision/openshift/isup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
KC_NAMESPACE_PREFIX=$(cat .task/var-KC_NAMESPACE_PREFIX)
KC_HOSTNAME_SUFFIX=$(cat .task/var-KC_HOSTNAME_SUFFIX)

source .env
if [ -f ./.env ]; then
source ./.env
fi

# kill all CrashLoopBackOff and ImagePullBackOff pods to trigger a fast restart and not wait Kubernetes
kubectl get pods -n "${KC_NAMESPACE_PREFIX}keycloak" | grep -E "(BackOff|Error)" | tr -s " " | cut -d" " -f1 | xargs -r -L 1 kubectl delete pod -n keycloak
Expand Down

0 comments on commit 9ee93ed

Please sign in to comment.