improve discord notifications #1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
on: | ||
workflow_call: | ||
inputs: | ||
config: | ||
type: string | ||
description: "The test configuration in json format." | ||
required: true | ||
send_notification: | ||
type: string | ||
description: "Send discord notification on test failure (default: false)." | ||
default: "false" | ||
secrets: | ||
RANCHER_TOKEN: | ||
description: "The rancher token to login to the rancher server." | ||
RANCHER_URL: | ||
description: "The rancher url to login to the rancher server." | ||
DISCORD_HOOK: | ||
description: 'Discord hook' | ||
required: false | ||
GITHUB_TOKEN: | ||
description: 'Github hook' | ||
required: false | ||
jobs: | ||
get_test: | ||
name: "Prepare Test" | ||
runs-on: ubuntu-latest | ||
outputs: | ||
id: ${{ steps.config.outputs.id }} | ||
name: ${{ steps.config.outputs.name }} | ||
clients: ${{ steps.config.outputs.clients }} | ||
kurtosis: ${{ steps.config.outputs.kurtosis }} | ||
kurtosis_branch: ${{ steps.config.outputs.kurtosis_branch }} | ||
worker: ${{ steps.config.outputs.worker }} | ||
backend: ${{ steps.config.outputs.backend }} | ||
pairs: ${{ steps.config.outputs.pairs }} | ||
pairsidx: ${{ steps.config.outputs.pairsidx }} | ||
assertoor_tests: ${{ steps.config.outputs.assertoor_tests }} | ||
kubernetes_cluster: ${{ steps.config.outputs.kubernetes_cluster }} | ||
kubernetes_storageclass: ${{ steps.config.outputs.kubernetes_storageclass }} | ||
kubeconfig: ${{ steps.kubeconfig.outputs.kubeconfig }} | ||
steps: | ||
- name: "Parse test configuration" | ||
id: config | ||
shell: bash | ||
run: | | ||
testcfg=$( | ||
cat <<"EOF" | ||
${{ inputs.config }} | ||
EOF | ||
) | ||
id="$(echo "$testcfg" | jq -r .id)" | ||
name="$(echo "$testcfg" | jq -r .name)" | ||
clients="$(echo "$testcfg" | jq -r .clients)" | ||
kurtosis="$(echo "$testcfg" | jq -r .kurtosis)" | ||
kurtosis_branch="$(echo "$testcfg" | jq -r '.kurtosis_branch // ""')" | ||
worker="$(echo "$testcfg" | jq -c .worker)" | ||
backend="$(echo "$testcfg" | jq -r .backend)" | ||
kubernetes_cluster="$(echo "$testcfg" | jq -r .kubernetes.cluster)" | ||
kubernetes_storageclass="$(echo "$testcfg" | jq -r .kubernetes.storageClass)" | ||
pairs="$(echo "$testcfg" | jq -c .clientPairs)" | ||
assertoor_tests="$(echo "$testcfg" | jq -c .assertoorTests)" | ||
echo "ID: $id" | ||
echo "id=$(echo "$id")" >> $GITHUB_OUTPUT | ||
echo "Name: $name" | ||
echo "name=$(echo "$name")" >> $GITHUB_OUTPUT | ||
echo "Clients yaml: $clients" | ||
echo "clients=$(echo "$clients")" >> $GITHUB_OUTPUT | ||
echo "Kurtosis yaml: $kurtosis" | ||
echo "kurtosis=$(echo "$kurtosis")" >> $GITHUB_OUTPUT | ||
echo "Kurtosis package branch: $kurtosis_branch" | ||
echo "kurtosis_branch=$(echo "$kurtosis_branch")" >> $GITHUB_OUTPUT | ||
echo "Worker: $worker" | ||
echo "worker=$(echo "$worker")" >> $GITHUB_OUTPUT | ||
echo "Backend: $backend" | ||
echo "backend=$(echo "$backend")" >> $GITHUB_OUTPUT | ||
if [ "$backend" == "kubernetes" ]; then | ||
echo "Kubernetes Cluster: $kubernetes_cluster" | ||
echo "kubernetes_cluster=$(echo "$kubernetes_cluster")" >> $GITHUB_OUTPUT | ||
echo "Kubernetes Storage Class: $kubernetes_storageclass" | ||
echo "kubernetes_storageclass=$(echo "$kubernetes_storageclass")" >> $GITHUB_OUTPUT | ||
else | ||
echo "kubernetes_cluster=" >> $GITHUB_OUTPUT | ||
echo "kubernetes_storageclass=" >> $GITHUB_OUTPUT | ||
fi | ||
echo "Client Pairs:" | ||
echo "$pairs" | yq -P | ||
echo "pairs=$(echo "$pairs" | jq -c 'to_entries | map({pairs:.value, index:.key})')" >> $GITHUB_OUTPUT | ||
echo "pairsidx=$(echo "$pairs" | jq -c 'to_entries | map(.key)')" >> $GITHUB_OUTPUT | ||
echo "Assertoor Tests:" | ||
echo "$assertoor_tests" | yq -P | ||
echo "assertoor_tests=$(echo "$assertoor_tests")" >> $GITHUB_OUTPUT | ||
# Generate kubeconfig for kubernetes backend | ||
- name: "Install rancher CLI" | ||
if: ${{ steps.config.outputs.backend == 'kubernetes' }} | ||
shell: bash | ||
run: | | ||
curl -L https://github.com/rancher/cli/releases/download/v2.8.0/rancher-linux-amd64-v2.8.0.tar.gz | tar xvz | ||
mv ./rancher-v2.8.0/rancher /usr/local/bin/rancher | ||
- name: Login to rancher | ||
if: ${{ steps.config.outputs.backend == 'kubernetes' }} | ||
shell: bash | ||
run: | | ||
rancher login --token "${{ secrets.RANCHER_TOKEN }}" "${{ secrets.RANCHER_URL }}" --context c-m-2m5z22jp:p-8vpkn | ||
- name: Login to kubernetes cluster | ||
if: ${{ steps.config.outputs.backend == 'kubernetes' }} | ||
shell: bash | ||
run: | | ||
rancher kubectl config use-context "${{ steps.config.outputs.kubernetes_cluster }}" | ||
- name: Generate kubeconfig | ||
if: ${{ steps.config.outputs.backend == 'kubernetes' }} | ||
id: kubeconfig | ||
shell: bash | ||
run: | | ||
rancher kubectl config view --raw > kubeconfig | ||
echo "kubeconfig=$(cat kubeconfig | base64 -w 0)" >> $GITHUB_OUTPUT | ||
run_test: | ||
needs: get_test | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
index: ${{ fromJson(needs.get_test.outputs.pairsidx) }} | ||
include: ${{ fromJson(needs.get_test.outputs.pairs) }} | ||
name: "run" | ||
uses: ./.github/workflows/_shared-run-test.yaml | ||
with: | ||
id: "${{ needs.get_test.outputs.id }}-${{ matrix.index }}" | ||
name: "${{ needs.get_test.outputs.name }}" | ||
pairs: ${{ matrix.pairs }} | ||
worker: ${{ needs.get_test.outputs.worker }} | ||
kurtosis: ${{ needs.get_test.outputs.kurtosis }} | ||
kurtosis_branch: ${{ needs.get_test.outputs.kurtosis_branch }} | ||
backend: ${{ needs.get_test.outputs.backend }} | ||
kubeCluster: ${{ needs.get_test.outputs.kubernetes_cluster }} | ||
kubeStorageClass: ${{ needs.get_test.outputs.kubernetes_storageclass }} | ||
clients: ${{ needs.get_test.outputs.clients }} | ||
assertoor_tests: ${{ needs.get_test.outputs.assertoor_tests }} | ||
send_notification: ${{ inputs.send_notification }} | ||
secrets: | ||
KUBECONFIG: ${{ needs.get_test.outputs.kubeconfig }} | ||
DISCORD_HOOK: ${{ secrets.DISCORD_HOOK }} | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |