|
66 | 66 | ssh_key:
|
67 | 67 | description: SSH public key to authorise on Ansible control host
|
68 | 68 | type: string
|
| 69 | + enable_slack_alert: |
| 70 | + description: Whether to send a Slack message to a channel if the job fails |
| 71 | + type: boolean |
| 72 | + default: false |
69 | 73 | secrets:
|
70 | 74 | KAYOBE_VAULT_PASSWORD_CI_MULTINODE:
|
71 | 75 | required: true
|
|
75 | 79 | required: true
|
76 | 80 | OS_APPLICATION_CREDENTIAL_SECRET:
|
77 | 81 | required: true
|
| 82 | + SLACK_WEBHOOK_URL: |
| 83 | + required: false |
78 | 84 |
|
79 | 85 | jobs:
|
80 | 86 | multinode:
|
|
93 | 99 | exit 1
|
94 | 100 | if: ${{ inputs.upgrade && inputs.stackhpc_kayobe_config_previous_version == '' }}
|
95 | 101 |
|
| 102 | + - name: Fail if no SSH key is provided for break_on |
| 103 | + run: | |
| 104 | + echo "break_on is set to ${{ inputs.break_on }} but an SSH public key has not been provided" |
| 105 | + exit 1 |
| 106 | + if: ${{ inputs.break_on != 'never' && inputs.ssh_key == '' }} |
| 107 | + |
96 | 108 | - name: Install Package
|
97 | 109 | uses: ConorMacBride/install-package@main
|
98 | 110 | with:
|
@@ -353,13 +365,47 @@ jobs:
|
353 | 365 | if: ${{ always() && steps.config_ach.outcome == 'success' }}
|
354 | 366 |
|
355 | 367 | - name: Upload test result artifacts
|
| 368 | + id: upload-results |
356 | 369 | uses: actions/upload-artifact@v4
|
357 | 370 | with:
|
358 | 371 | name: test-results-multinode-${{ inputs.os_distribution }}-${{ inputs.os_release }}-${{ inputs.neutron_plugin }}${{ inputs.upgrade && '-upgrade' || '' }}
|
359 | 372 | path: |
|
360 | 373 | ${{ github.workspace }}/logs/
|
361 | 374 | if: ${{ always() && steps.config_ach.outcome == 'success' }}
|
362 | 375 |
|
| 376 | + - name: Send message to Slack via Workflow Builder |
| 377 | + |
| 378 | + with: |
| 379 | + payload: | |
| 380 | + { |
| 381 | + "channel-id": "${{ env.SLACK_CHANNEL_ID }}", |
| 382 | + "inputs": "${{ env.INPUTS }}", |
| 383 | + "message": "${{ env.MESSAGE }}", |
| 384 | + "results-url": "${{ env.RESULTS_URL }}", |
| 385 | + "workflow-url": "${{ env.WORKFLOW_URL }}" |
| 386 | + } |
| 387 | + env: |
| 388 | + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} |
| 389 | + # #release-train-alerts |
| 390 | + SLACK_CHANNEL_ID: C03B28HRP53 |
| 391 | + INPUTS: >- |
| 392 | + name: ${{ inputs.multinode_name }}\n |
| 393 | + controllers: ${{ inputs.multinode_controller_count }}\n |
| 394 | + computes: ${{ inputs.multinode_compute_count }}\n |
| 395 | + storage: ${{ inputs.multinode_storage_count }}\n |
| 396 | + os_distribution: ${{ inputs.os_distribution }}\n |
| 397 | + os_release: ${{ inputs.os_release }}\n |
| 398 | + ssh_username: ${{ inputs.ssh_username }}\n |
| 399 | + neutron_plugin: ${{ inputs.neutron_plugin }}\n |
| 400 | + stackhpc_kayobe_config_version: ${{ inputs.stackhpc_kayobe_config_version }}\n |
| 401 | + stackhpc_kayobe_config_previous_version: ${{ inputs.stackhpc_kayobe_config_previous_version }}\n |
| 402 | + terraform_kayobe_multinode_version: ${{ inputs.terraform_kayobe_multinode_version }}\n |
| 403 | + upgrade: ${{ inputs.upgrade }}\n |
| 404 | + MESSAGE: "Multinode workflow failed :sob:" |
| 405 | + RESULTS_URL: "${{ steps.upload-results.outputs.artifact-url || 'N/A' }}" |
| 406 | + WORKFLOW_URL: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" |
| 407 | + if: ${{ failure() && inputs.enable_slack_alert }} |
| 408 | + |
363 | 409 | - name: Break on failure
|
364 | 410 | run: |
|
365 | 411 | sleep ${{ inputs.break_duration }}m
|
|
0 commit comments