Skip to content

Commit

Permalink
ci: automatically run Larva tests as part of CI workflows (#479)
Browse files Browse the repository at this point in the history
[skip ci]
* ci: add larva autorun workflow

* add temp workflow

* check ci change

* move ci in order

* docker instead of compose

* reuse docker compose from ci

* retry docker-compose

* increase timeout

* refactor: set version to latest

* remove excess file

* change ci order

* undo stage change

* attempt failed test trigger

* add more failed tests

* force logging

* force more test failures

* force another failure

* change startup

* change order

* force log

* set proper command and version

* rebuild

* keep only zaakbrug

* add logging

* undo logging

* reset to base state

* Revert "force log"

This reverts commit 4805710.

* Revert "force another failure"

This reverts commit 4f1cd85.

* Revert "force more test failures"

This reverts commit a971abb.

* Revert "add more failed tests"

This reverts commit f312b8b.

* Revert "attempt failed test trigger"

This reverts commit f0623b4.

* use image-id instead for reliability

* increase timeout and fix container-id reference

* fix container-id setter

* generate larva result as github summary

* filter results 1

* filters results 2

* filter result 3

* filter results 4

* give up on filtering result

* run larva before soapui for fail fast

* add larva to release workflow too

---------

Co-authored-by: MLenterman <marcellenterman@hotmail.com>
  • Loading branch information
DelanoWAF and MLenterman authored Dec 20, 2024
1 parent b0104d9 commit 2f18e2d
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 1 deletion.
11 changes: 10 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,20 @@ jobs:
upload-sarif-to-security: false
run-frank-till-healthy-enabled: false

run-larva-scenarios:
uses: ./.github/workflows/run-larva-scenarios.yml
needs:
- version-next
- ci
with:
image-id: ${{ needs.ci.outputs.image-id }}

run-soapui-tests:
runs-on: ubuntu-latest
needs:
- version-next
- ci
- run-larva-scenarios
steps:
- uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
Expand Down Expand Up @@ -108,4 +117,4 @@ jobs:
if: always()
with:
name: reports-soapui-testreports
path: ./*/reports
path: ./*/reports
9 changes: 9 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,20 @@ jobs:
upload-sarif-to-security: false
run-frank-till-healthy-enabled: false

run-larva-scenarios:
uses: ./.github/workflows/run-larva-scenarios.yml
needs:
- version-next
- ci
with:
image-id: ${{ needs.ci.outputs.image-id }}

run-soapui-tests:
runs-on: ubuntu-latest
needs:
- analyze-commits
- ci
- run-larva-scenarios
steps:
- uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
Expand Down
103 changes: 103 additions & 0 deletions .github/workflows/run-larva-scenarios.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
name: Run Larva Scenarios

on:
workflow_call:
inputs:
image-id:
type: string
description: >
Docker image id of the loaded image to use.
Note that the Docker image needs to be available to the Docker runtime already.
required: false
docker-image-tag:
type: string
description: >
Docker image tag of the loaded image to use. For example: 'wearefrank/zaakbrug:1.2.0'.
Note that the Docker image needs to be available to the Docker runtime already.
required: false

jobs:
run-larva-scenarios:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 #4.1.7

- name: Download Docker tar
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 #4.1.8
with:
name: build-docker-image

- name: Load Docker tar
shell: bash
run: |
docker load --input image.tar
docker image ls -a
- name: Start Application
id: docker-run
shell: bash
run: |
echo "container-id=$(docker run -d -p 8080:8080 -e dtap.stage=LOC ${{ inputs.image-id || inputs.docker-image-tag }})" >> "$GITHUB_OUTPUT"
timeout-minutes: 2

- name: Wait for Application to be Healthy
shell: bash
run: |
start_time=$(date +%s)
timeout=300
while true; do
if [ "$(docker inspect --format='{{json .State.Health.Status}}' ${{steps.docker-run.outputs.container-id}})" = '"healthy"' ]; then
echo "Application is healthy."
break
fi
current_time=$(date +%s)
elapsed_time=$((current_time - start_time))
if [ $elapsed_time -ge $timeout ]; then
echo "Application did not become healthy within $timeout seconds. Failing the job."
exit 1
fi
echo "Waiting for application to be healthy..."
sleep 5
done
timeout-minutes: 6

- name: Trigger Larva Tool
shell: bash
run: |
curl -X POST 'http://localhost:8080/iaf/larva/index.jsp' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'scenariosrootdirectory=/opt/frank/testtool' \
--data-urlencode 'waitbeforecleanup=100' \
--data-urlencode 'loglevel=WRONG_PIPELINE_MESSAGES_PREPARED_FOR_DIFF' \
--data-urlencode 'execute=/opt/frank/testtool' \
--data-urlencode 'submit=start' > results.html
- name: Check if all scenarios passed
shell: bash
run: |
if ! grep -q 'All scenarios passed' results.html; then
echo "Not all scenarios passed. Failing the job."
exit 1
fi
- name: Generate Result in Markdown
uses: docker://pandoc/core:3.5
if: ${{ always() }}
with:
args: -s results.html --from html -o results.md --to gfm --standalone

- name: Add Larva Result To GitHub Actions Summary
shell: bash
if: ${{ always() }}
run: |
cat results.md >> $GITHUB_STEP_SUMMARY
- name: Cleanup
shell: bash
if: ${{ always() }}
run: |
docker stop ${{ steps.docker-run.outputs.container-id }}
docker rm --volumes ${{ steps.docker-run.outputs.container-id }}

0 comments on commit 2f18e2d

Please sign in to comment.