CI/CD

GitHub Actions for 3GPP conformance

Run TTCN-3 conformance campaigns from GitHub Actions: workflow file, secrets, PR gating, JUnit annotations, and artifact upload.

6 min read

Because the tester is a service, conformance testing becomes a normal CI step. No self-hosted runner in a lab, no hardware reservation spreadsheet.

Workflow

.github/workflows/conformance.yamlyaml
name: conformance
on: [pull_request]

jobs:
  smoke:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install AEON CLI
        run: curl -fsSL https://get.aeon.cloud | AEON_VERSION=1.12.3 bash

      - name: Push build
        env: { AEON_TOKEN: "${{ secrets.AEON_TOKEN }}" }
        run: |
          make ue-bundle
          aeon builds push ./dist/ue.tar.gz --tag "$GITHUB_SHA" --commit "$GITHUB_SHA"

      - name: Run smoke campaign
        env: { AEON_TOKEN: "${{ secrets.AEON_TOKEN }}" }
        run: aeon exec run --campaign smoke --build "$GITHUB_SHA" --wait --exit-code --quiet

      - name: Export JUnit
        if: always()
        env: { AEON_TOKEN: "${{ secrets.AEON_TOKEN }}" }
        run: aeon reports get --build "$GITHUB_SHA" --format junit --output junit.xml

      - uses: actions/upload-artifact@v4
        if: always()
        with: { name: conformance-evidence, path: junit.xml }

Gate policy

  • Pull requests: smoke campaign, under 20 minutes, blocking.
  • Merge to main: regression campaign, non-blocking notification.
  • Nightly schedule: full applicable set with 8-12 lanes.
  • Release tags: certification campaign producing a signed PDF.

noteUse --exit-code so a fail verdict fails the job. Without it the step succeeds regardless of verdict.

Run this against a real SDR lane

The tester is a service, not a box. Push a build, reserve a lane, get a verdict.