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.