PalC engineers work at the system software level - optimising SONiC build pipelines, wiring HIL test frameworks into CI, designing artifact promotion workflows, and instrumented build dashboards for complex codebases.
Build Pipeline - SONiC NOS End-to-End CI
Modular NOS build pipeline with parallel stages
SONiC full build - kernel, SAI, sonic-buildimage - with parallel component jobs, ccache layer, and Debian package artifact publishing to internal registry.
# GitLab CI - SONiC NOS parallel build
stages: [prepare, build, test, package, publish]
build:kernel:
stage: build
script:
- make -j$(nproc) ARCH=x86_64 bzImage modules
- make modules_install INSTALL_MOD_PATH=./out
cache: {key: kernel-cache, paths: [.ccache/]}
build:platform:
stage: build
needs: []
script:
- ./build_platform.sh --target broadcom
# Total build time reduced 60% vs sequentialTargetSONiC / NOSParallelismDAG-based stagesCacheccache + layer cacheArtifactsDebian packages
Build Optimisation - ccache + Docker Layer Cache
Multi-layer caching for large C/C++ platform builds
ccache for compiler output reuse and Docker layer cache for dependency stages - measured cache hit rates per component, with dashboard tracking build time regressions per commit.
# Dockerfile - optimized layer order for cache
FROM ubuntu:22.04 AS builder
RUN apt-get install -y build-essential libssl-dev
COPY vendor.lock .
RUN ./install-vendor-deps.sh
COPY src/ ./src/
RUN CCACHE_DIR=/cache make -j$(nproc)
# Cache hit rate: 75% avg -> ~14min saved per build
Compiler Cacheccache / sccacheLayer CacheDocker / BuildKitDep CacheLockfile-keyedHit RateTracked / dashboarded
Test Automation - Hardware-in-Loop (HIL) Integration
Hardware topology tests wired into CI pipeline
HIL test orchestration integrated as a pipeline stage - build artifacts deployed to physical hardware topology, protocol tests executed, results parsed and reported back to CI as pass/fail with log artefacts.
# HIL test stage - topology deploy + run
test:hil-protocol:
stage: test
needs: [build:platform]
tags: [hil-runner]
script:
- ./deploy-to-topology.sh $CI_JOB_ID
- pytest tests/protocol/ -v --tb=short --junitxml=results/hil-results.xml
artifacts:
reports: {junit: results/hil-results.xml}Test TypeProtocol / HILFrameworkpytest / gtestReportingJUnit XML / HTMLTopologyPhysical + virtual
Release Pipeline - Controlled Multi-Environment Promotion
Artifact promotion with validation gates at each stage
Immutable build artifact promoted through dev → staging → pre-prod → production - each stage gated by automated validation and optional human approval for change-controlled environments.
# Release promotion pipeline - GitHub Actions
jobs:
promote-to-staging:
needs: [integration-tests]
environment: staging
steps:
- run: ./deploy.sh staging ${{ needs.build.outputs.artifact_tag }}
- run: make smoke-test ENV=staging
promote-to-production:
needs: [promote-to-staging]
environment:
name: production
# Human approval required for production gateStagesDev → Staging → ProdArtifactImmutable / taggedGateSmoke test + approvalRollbackRe-deploy prior tag