Add bbsim-tests action

This is for the initial action. Workflow to follow.

Signed-off-by: Eric Ball <eball@linuxfoundation.org>
Change-Id: I70f46f6e8933a2a8a465c7b6b96767e8ee618c97
diff --git a/.github/actions/bbsim-tests/example-workflow.yaml b/.github/actions/bbsim-tests/example-workflow.yaml
new file mode 100644
index 0000000..3654bb6
--- /dev/null
+++ b/.github/actions/bbsim-tests/example-workflow.yaml
@@ -0,0 +1,362 @@
+---
+# SPDX-License-Identifier: Apache-2.0
+# SPDX-FileCopyrightText: 2025 Open Networking Foundation Contributors
+
+name: BBSim Tests Example
+
+on:
+  # Run on push to main branches
+  push:
+    branches:
+      - master
+      - "voltha-*"
+
+  # Run on pull requests
+  pull_request:
+    branches:
+      - master
+      - "voltha-*"
+
+  # Allow manual triggering with custom parameters
+  workflow_dispatch:
+    inputs:
+      branch:
+        description: "Branch to test"
+        required: true
+        default: "master"
+        type: choice
+        options:
+          - master
+          - voltha-2.15
+      workflow_type:
+        description: "Workflow to test"
+        required: true
+        default: "all"
+        type: choice
+        options:
+          - all
+          - dt
+          - att
+          - tt
+      log_level:
+        description: "Log level"
+        required: false
+        default: "WARN"
+        type: choice
+        options:
+          - DEBUG
+          - INFO
+          - WARN
+          - ERROR
+      with_monitoring:
+        description: "Enable monitoring"
+        required: false
+        default: false
+        type: boolean
+
+  # Run nightly
+  schedule:
+    - cron: "0 2 * * *" # 2 AM UTC daily
+
+jobs:
+  # -----------------------------------------------------------------------
+  # Job: DT Workflow Tests
+  # -----------------------------------------------------------------------
+  dt-tests:
+    name: DT Workflow Tests
+    runs-on: ubuntu-latest
+    timeout-minutes: 240
+    if: |
+      github.event_name == 'schedule' ||
+      (github.event_name == 'workflow_dispatch' &&
+       (github.event.inputs.workflow_type == 'dt' || github.event.inputs.workflow_type == 'all')) ||
+      github.event_name == 'push' ||
+      github.event_name == 'pull_request'
+
+    steps:
+      - name: Free up disk space
+        run: |
+          echo "Disk space before cleanup:"
+          df -h
+
+          # Remove unnecessary software
+          sudo rm -rf /usr/share/dotnet
+          sudo rm -rf /opt/ghc
+          sudo rm -rf /usr/local/share/boost
+          sudo rm -rf "$AGENT_TOOLSDIRECTORY"
+
+          echo "Disk space after cleanup:"
+          df -h
+
+      - name: Run DT BBSim Tests
+        uses: opencord/shared-workflows/.github/actions/bbsim-tests@main
+        with:
+          branch: ${{ github.event.inputs.branch || 'master' }}
+          log-level: ${{ github.event.inputs.log_level || 'WARN' }}
+          with-monitoring: ${{ github.event.inputs.with_monitoring || false }}
+          test-targets: |
+            - target: functional-single-kind-dt
+              workflow: dt
+              flags: ""
+              teardown: true
+              logging: true
+              vgcEnabled: false
+
+      - name: Upload test results
+        if: always()
+        uses: actions/upload-artifact@v4
+        with:
+          name: dt-test-results-${{ github.run_id }}
+          path: logs/
+          retention-days: 30
+
+  # -----------------------------------------------------------------------
+  # Job: ATT Workflow Tests
+  # -----------------------------------------------------------------------
+  att-tests:
+    name: ATT Workflow Tests
+    runs-on: ubuntu-latest
+    timeout-minutes: 240
+    if: |
+      github.event_name == 'schedule' ||
+      (github.event_name == 'workflow_dispatch' &&
+       (github.event.inputs.workflow_type == 'att' || github.event.inputs.workflow_type == 'all'))
+
+    steps:
+      - name: Free up disk space
+        run: |
+          echo "Disk space before cleanup:"
+          df -h
+
+          sudo rm -rf /usr/share/dotnet
+          sudo rm -rf /opt/ghc
+          sudo rm -rf /usr/local/share/boost
+          sudo rm -rf "$AGENT_TOOLSDIRECTORY"
+
+          echo "Disk space after cleanup:"
+          df -h
+
+      - name: Run ATT BBSim Tests
+        uses: opencord/shared-workflows/.github/actions/bbsim-tests@main
+        with:
+          branch: ${{ github.event.inputs.branch || 'master' }}
+          log-level: ${{ github.event.inputs.log_level || 'WARN' }}
+          with-monitoring: ${{ github.event.inputs.with_monitoring || false }}
+          test-targets: |
+            - target: functional-single-kind-att
+              workflow: att
+              flags: ""
+              teardown: true
+              logging: true
+              vgcEnabled: false
+
+      - name: Upload test results
+        if: always()
+        uses: actions/upload-artifact@v4
+        with:
+          name: att-test-results-${{ github.run_id }}
+          path: logs/
+          retention-days: 30
+
+  # -----------------------------------------------------------------------
+  # Job: TT Workflow Tests
+  # -----------------------------------------------------------------------
+  tt-tests:
+    name: TT Workflow Tests
+    runs-on: ubuntu-latest
+    timeout-minutes: 240
+    if: |
+      github.event_name == 'schedule' ||
+      (github.event_name == 'workflow_dispatch' &&
+       (github.event.inputs.workflow_type == 'tt' || github.event.inputs.workflow_type == 'all'))
+
+    steps:
+      - name: Free up disk space
+        run: |
+          echo "Disk space before cleanup:"
+          df -h
+
+          sudo rm -rf /usr/share/dotnet
+          sudo rm -rf /opt/ghc
+          sudo rm -rf /usr/local/share/boost
+          sudo rm -rf "$AGENT_TOOLSDIRECTORY"
+
+          echo "Disk space after cleanup:"
+          df -h
+
+      - name: Run TT BBSim Tests
+        uses: opencord/shared-workflows/.github/actions/bbsim-tests@main
+        with:
+          branch: ${{ github.event.inputs.branch || 'master' }}
+          log-level: ${{ github.event.inputs.log_level || 'WARN' }}
+          with-monitoring: ${{ github.event.inputs.with_monitoring || false }}
+          test-targets: |
+            - target: functional-single-kind-tt
+              workflow: tt
+              flags: ""
+              teardown: true
+              logging: true
+              vgcEnabled: false
+
+      - name: Upload test results
+        if: always()
+        uses: actions/upload-artifact@v4
+        with:
+          name: tt-test-results-${{ github.run_id }}
+          path: logs/
+          retention-days: 30
+
+  # -----------------------------------------------------------------------
+  # Job: Multi-workflow Tests (run multiple workflows in sequence)
+  # -----------------------------------------------------------------------
+  multi-workflow-tests:
+    name: Multi-Workflow Tests
+    runs-on: ubuntu-latest
+    timeout-minutes: 480
+    if: github.event_name == 'workflow_dispatch' && github.event.inputs.workflow_type == 'all'
+
+    steps:
+      - name: Free up disk space
+        run: |
+          echo "Disk space before cleanup:"
+          df -h
+
+          sudo rm -rf /usr/share/dotnet
+          sudo rm -rf /opt/ghc
+          sudo rm -rf /usr/local/share/boost
+          sudo rm -rf "$AGENT_TOOLSDIRECTORY"
+
+          echo "Disk space after cleanup:"
+          df -h
+
+      - name: Run All Workflow Tests
+        uses: opencord/shared-workflows/.github/actions/bbsim-tests@main
+        with:
+          branch: ${{ github.event.inputs.branch || 'master' }}
+          log-level: ${{ github.event.inputs.log_level || 'INFO' }}
+          with-monitoring: true
+          olts: "2"
+          test-targets: |
+            - target: sanity-single-kind
+              workflow: dt
+              flags: ""
+              teardown: true
+              logging: true
+              vgcEnabled: false
+            - target: functional-single-kind-dt
+              workflow: dt
+              flags: ""
+              teardown: true
+              logging: true
+              vgcEnabled: false
+            - target: functional-single-kind-att
+              workflow: att
+              flags: ""
+              teardown: true
+              logging: true
+              vgcEnabled: false
+            - target: functional-single-kind-tt
+              workflow: tt
+              flags: ""
+              teardown: true
+              logging: true
+              vgcEnabled: false
+
+      - name: Upload test results
+        if: always()
+        uses: actions/upload-artifact@v4
+        with:
+          name: multi-workflow-test-results-${{ github.run_id }}
+          path: logs/
+          retention-days: 30
+
+  # -----------------------------------------------------------------------
+  # Job: Test Gerrit Patch
+  # -----------------------------------------------------------------------
+  test-patch:
+    name: Test Gerrit Patch
+    runs-on: ubuntu-latest
+    timeout-minutes: 240
+    # Only run when triggered manually with patch information
+    if: |
+      github.event_name == 'workflow_dispatch' &&
+      github.event.inputs.gerrit_project != '' &&
+      github.event.inputs.gerrit_refspec != ''
+
+    steps:
+      - name: Free up disk space
+        run: |
+          sudo rm -rf /usr/share/dotnet
+          sudo rm -rf /opt/ghc
+          sudo rm -rf /usr/local/share/boost
+          sudo rm -rf "$AGENT_TOOLSDIRECTORY"
+
+      - name: Test Patch with BBSim
+        uses: opencord/shared-workflows/.github/actions/bbsim-tests@main
+        with:
+          branch: ${{ github.event.inputs.branch || 'master' }}
+          gerrit-project: ${{ github.event.inputs.gerrit_project }}
+          gerrit-refspec: ${{ github.event.inputs.gerrit_refspec }}
+          log-level: DEBUG
+          test-targets: |
+            - target: sanity-single-kind
+              workflow: dt
+              flags: ""
+              teardown: true
+              logging: true
+              vgcEnabled: false
+
+      - name: Upload test results
+        if: always()
+        uses: actions/upload-artifact@v4
+        with:
+          name: patch-test-results-${{ github.run_id }}
+          path: logs/
+          retention-days: 30
+
+  # -----------------------------------------------------------------------
+  # Job: Report Results
+  # -----------------------------------------------------------------------
+  report:
+    name: Test Results Summary
+    runs-on: ubuntu-latest
+    needs: [dt-tests, att-tests, tt-tests]
+    if: always()
+
+    steps:
+      - name: Download all artifacts
+        uses: actions/download-artifact@v4
+        with:
+          path: all-results
+
+      - name: Generate summary report
+        run: |
+          echo "# BBSim Test Results Summary" >> $GITHUB_STEP_SUMMARY
+          echo "" >> $GITHUB_STEP_SUMMARY
+          echo "## Test Execution" >> $GITHUB_STEP_SUMMARY
+          echo "" >> $GITHUB_STEP_SUMMARY
+          echo "| Job | Status |" >> $GITHUB_STEP_SUMMARY
+          echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY
+          echo "| DT Tests | ${{ needs.dt-tests.result }} |" >> $GITHUB_STEP_SUMMARY
+          echo "| ATT Tests | ${{ needs.att-tests.result }} |" >> $GITHUB_STEP_SUMMARY
+          echo "| TT Tests | ${{ needs.tt-tests.result }} |" >> $GITHUB_STEP_SUMMARY
+          echo "" >> $GITHUB_STEP_SUMMARY
+
+          # List available artifacts
+          echo "## Artifacts" >> $GITHUB_STEP_SUMMARY
+          echo "" >> $GITHUB_STEP_SUMMARY
+          if [ -d "all-results" ]; then
+            find all-results -type f -name "*.html" | while read file; do
+              echo "- $(basename $file)" >> $GITHUB_STEP_SUMMARY
+            done
+          fi
+
+      - name: Check overall status
+        run: |
+          if [[ "${{ needs.dt-tests.result }}" != "success" ]] || \
+             [[ "${{ needs.att-tests.result }}" != "success" && "${{ needs.att-tests.result }}" != "skipped" ]] || \
+             [[ "${{ needs.tt-tests.result }}" != "success" && "${{ needs.tt-tests.result }}" != "skipped" ]]; then
+            echo "One or more test jobs failed"
+            exit 1
+          fi
+          echo "All executed tests passed successfully"