Centralized build tooling, reusable GitHub workflows, and composite actions for the Qualcomm Linux Debian package ecosystem. This repository standardizes how pkg-* package repositories build, validate, promote, and release Debian packages for Qualcomm ARM64 platforms.
The Qualcomm Linux packaging system is composed of four main components:
βββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββ
β Upstream Repositories β β Package Repositories (pkg-*)β
β (source code) ββββββΆβ (Debian packaging + source) β
βββββββββββββββββββββββββββ ββββββββββββ¬ββββββββββββββββββββ
β
calls reusable β
workflows from β
βΌ
ββββββββββββββββββββββββ
β qcom-build-utils β
β (this repository) β
ββββββββββββ¬ββββββββββββ
β
βΌ
ββββββββββββββββββββββββ
β Build Infrastructure β
β GHCR Β· Staging Repo β
β ARM64 Runners Β· S3 β
βββββββββββββββββββββββββ
Upstream Repositories contain the project source code (e.g., qcom-example-package-source).
Package Repositories (prefixed pkg-) hold Debian packaging metadata, track upstream versions, and invoke the reusable workflows defined here. New package repos are created from the pkg-template.
A complete working example is available at pkg-example.
qcom-build-utils/
βββ .github/
β βββ actions/ # Composite GitHub Actions
β β βββ abi_checker/ # ABI compatibility checks
β β βββ build_package/ # Debian package build (gbp + sbuild)
β β βββ push_to_repo/ # Publish packages to staging APT repo
β βββ workflows/ # Reusable workflow definitions
β βββ qcom-build-pkg-reusable-workflow.yml
β βββ qcom-promote-upstream-reusable-workflow.yml
β βββ qcom-upstream-pr-pkg-build-reusable-workflow.yml
β βββ qcom-release-reusable-workflow.yml
β βββ qcom-preflight-checks.yml
βββ scripts/ # Python & shell build utilities
β βββ deb_abi_checker.py # ABI comparison tool (libabigail)
β βββ ppa_interface.py # APT repository interface
β βββ ppa_organizer.py # Build output organizer
β βββ create_promotion_pr.py # PR generation for promotions
β βββ merge_debian_packaging_upstream # Upstream merge script
β βββ helpers.py # Shared utility functions
βββ kernel/scripts/ # Kernel build scripts
β βββ build_kernel.sh # ARM64 kernel build
β βββ build-kernel-deb.sh # Kernel .deb packaging
β βββ build-dtb-image.sh # Device Tree Blob image builder
βββ bootloader/
β βββ build-efi-esp.sh # EFI System Partition builder
βββ rootfs/scripts/
β βββ build-rootfs.sh # Root filesystem image builder
βββ docs/ # Detailed documentation
Package repositories call these workflows from their own .github/workflows/ directory. Each workflow is invoked with uses: qualcomm-linux/qcom-build-utils/.github/workflows/<workflow>@main.
| Workflow | Purpose |
|---|---|
| qcom-build-pkg-reusable-workflow | Main Debian package build β used for both pre-merge (PR) and post-merge builds. Orchestrates build, ABI check, and repository push. |
| qcom-promote-upstream-reusable-workflow | Promotes a new upstream release into a package repo β merges upstream code, updates changelog, and creates a PR. |
| qcom-upstream-pr-pkg-build-reusable-workflow | Validates that PRs in an upstream repo won't break the Debian package build. Called from the upstream repo. |
| qcom-release-reusable-workflow | Triggers a formal release β finalizes the changelog, builds packages, uploads to S3, and notifies downstream consumers. |
| qcom-preflight-checks | Security and quality gates β runs repolinter, semgrep, license checks, and dependency review. |
| Action | Description |
|---|---|
| build_package | Builds Debian packages using git-buildpackage and sbuild. Supports native ARM64 builds and cross-compilation. |
| abi_checker | Compares ABI compatibility against the previously published version using libabigail. Returns a bitmask indicating compatibility status. |
| push_to_repo | Uploads built .deb / .ddeb packages to the pkg-oss-staging-repo APT repository with deduplication. |
- Use the pkg-template β click "Use this template" and name your repo with the
pkg-prefix (e.g.,pkg-mypackage). Enable "Include all branches". - Customize the
debian/directory on thedebian/qcom-nextbranch for your package. - Set repository variables:
UPSTREAM_REPO_GITHUB_NAMEβ in the package repo, points to the upstream source repo (e.g.,qualcomm-linux/qcom-example-package-source).PKG_REPO_GITHUB_NAMEβ in the upstream repo, points to the package repo (e.g.,qualcomm-linux/pkg-example).
- Configure branch protection for
debian/qcom-nextwithbuild / build-debian-packageas a required status check. - Copy
.github/TO_PASTE_IN_UPSTREAM_REPO/pkg-build-pr-check.ymlinto the upstream repo's.github/workflows/on its default branch.
See pkg-example for a complete working reference.
| Branch | Purpose |
|---|---|
main |
Workflows, docs, and boilerplate files |
debian/qcom-next |
Active Debian packaging branch (build target) |
debian/<version> |
Version-specific tags/branches (e.g., debian/1.1.0-1) |
upstream/latest |
Latest upstream source (non-native packages) |
upstream/<version> |
Tagged upstream versions |
Developer opens PR βββΆ pre-merge build βββΆ ABI check
β β
βΌ βΌ
PR merged into build passes βββΆ package pushed
debian/qcom-next and tagged to staging repo
β
βΌ
Release triggered βββΆ changelog finalized βββΆ upload to S3
- Pre-merge: A PR against
debian/qcom-nexttriggers a build and ABI compatibility check. - Post-merge: On merge, the package is built, pushed to the staging APT repo, and tagged
debian/<version>. - Upstream promotion: When the upstream project tags a new release, the promote workflow merges it into the packaging branch and opens a PR.
- Upstream PR validation: PRs in the upstream repo are validated against the package build to catch breakages early.
- Release: A manual dispatch finalizes the changelog, builds the package, uploads artifacts to S3, and notifies qcom-distro-images.
| Component | Details |
|---|---|
| Container images | ghcr.io/qualcomm-linux/pkg-builder:{arch}-{distro} β pre-built for arm64/amd64 across noble, questing, resolute, trixie, sid |
| Staging APT repo | pkg-oss-staging-repo served via GitHub Pages |
| Runners | Self-hosted ARM64 runners (lecore-prd-u2404-arm64-xlrg-od-ephem) |
| Artifact storage | S3 for release builds |
| Script | Description |
|---|---|
deb_abi_checker.py |
Compares ABI between package versions using libabigail. Return codes: 0 no diff, 1 compatible, 2 incompatible, 4 stripped, 8 not found, 16 PPA error. |
merge_debian_packaging_upstream |
Merges an upstream commitish into the debian/ branch, preserving debian/ and .github/ directories. |
ppa_interface.py |
Interfaces with APT repositories β download, list, and query package versions. |
ppa_organizer.py |
Organizes build output into APT pool structure. |
create_promotion_pr.py |
Generates PR title and body for upstream promotions. |
helpers.py |
Shared utilities for directory management, logging, and APT server setup. |
| Script | Description |
|---|---|
kernel/scripts/build_kernel.sh |
Builds the Linux kernel for ARM64 with Qualcomm defconfig. |
kernel/scripts/build-kernel-deb.sh |
Packages kernel artifacts into an Ubuntu-compliant .deb. |
kernel/scripts/build-dtb-image.sh |
Builds a FAT-formatted Device Tree Blob image for Qualcomm platforms. |
bootloader/build-efi-esp.sh |
Creates a deterministic EFI System Partition (efi.bin) for ARM64. |
rootfs/scripts/build-rootfs.sh |
Generates a bootable ext4 root filesystem image using debootstrap. |
For building packages locally outside of GitHub Actions, see the docker-pkg-build repository which provides containerized Debian package builds.
Detailed documentation is available in the docs/ directory:
- Workflow Architecture β system overview and component interactions
- Reusable Workflows β detailed reference for each workflow
- GitHub Actions β composite action reference and patterns
- Package Repository Integration β step-by-step setup guide
| Repository | Description |
|---|---|
| pkg-template | Template for creating new pkg-* package repositories |
| pkg-example | Complete working example of a package repository |
| qcom-example-package-source | Example upstream source repo with package build integration |
| docker-pkg-build | Containerized local Debian package builder |
| pkg-oss-staging-repo | Staging APT repository for built packages |
| qcom-distro-images | Distribution image configuration consuming released packages |
main: Primary development branch. Contributors should develop submissions based on this branch and submit pull requests to this branch.
See CONTRIBUTING.md for details on the branching strategy, pull request process, and DCO sign-off requirements.
qcom-build-utils is licensed under the BSD-3-Clause License. See LICENSE.txt for the full license text.