No description
  • Shell 83.6%
  • Dockerfile 16.4%
Find a file
Steffen Deusch 172ec72d46
All checks were successful
build-systemimage / build-builder-image (push) Successful in 22s
build-systemimage / systemimage (push) Successful in 5m16s
pulse-aidl (#4)
Use patched pulseaudio-modules-droid instead of minimal https://git.deusch.me/ubports/pulseaudio-module-droid-aidl.

Reviewed-on: #4
2026-05-17 13:21:55 +02:00
.forgejo/workflows try forgejo registry 2026-05-10 15:35:43 +02:00
manifests pulse-aidl (#4) 2026-05-17 13:21:55 +02:00
scripts only apply patches if changed 2026-05-10 13:17:34 +02:00
Dockerfile setup hybris build (#3) 2026-05-09 11:32:30 +02:00
README.md setup hybris build (#3) 2026-05-09 11:32:30 +02:00

halium-build

This repository is a thin control repo for building the Halium systemimage target for tegu in Forgejo. It does not store the Android source tree. The workflow bootstraps and updates a persistent repo checkout under /shared/src/halium-build, publishes a reusable builder image, and then builds in the normal in-tree out/ directory.

What it builds

  • Base manifest: https://github.com/LineageOS/android.git
  • Branch: lineage-23.2
  • Lunch target: lineage_halium_arm64-bp4a-userdebug
  • Build command: mka systemimage

Repository layout

  • .forgejo/workflows/build-systemimage.yml: Forgejo workflow entrypoint
  • Dockerfile: halium-systemimage-builder container image definition
  • manifests/*.xml: local manifests layered on top of LineageOS
  • scripts/run-docker-build.sh: host-side wrapper that builds and runs the container with the right mounts
  • scripts/bootstrap-tree.sh: repo init and repo sync
  • scripts/build-systemimage.sh: actual Android build step
  • scripts/build-libhybris-update.sh: glibc-side libhybris update archive build step

Runner requirements

  • A Forgejo runner label that can execute Docker commands. If your runner does not use ubuntu-latest, change runs-on in the workflow.
  • A host path at /shared. The workflow creates /shared/src/halium-build and uses it for the persistent source checkout.
  • SSH access from the runner to git.deusch.me:222.
  • A repository secret named REGISTRY_TOKEN with access to the Forgejo container registry.

SSH configuration

The workflow supports two ways to reach the private upstream repos:

  • Preferred for CI: set the repository secret SSH_KEY.
  • Fallback: let the runner user already have a usable ~/.ssh directory.

In both cases the wrapper script refreshes known_hosts for git.deusch.me port 222 before it runs repo sync.

Builder image publishing

The workflow publishes the builder image to git.deusch.me/ubports/halium-systemimage-builder.

  • latest is updated on main and master
  • a sanitized branch tag is published on other branches
  • a short commit tag is published on every run

The systemimage job pulls the commit-specific builder image created earlier in the same workflow.

Libhybris Update Archive

The workflow also builds libhybris-16-update.tar.xz from the same repo-synced Android tree. It extracts headers from ${HALIUM_SOURCE_DIR}, cross-builds ${HALIUM_SOURCE_DIR}/vendor/halium/libhybris/hybris for arm64, stages the install under ${HALIUM_SOURCE_DIR}/out/libhybris-update/install, and uploads ${HALIUM_SOURCE_DIR}/out/libhybris-update/libhybris-16-update.tar.xz.

LIBHYBRIS_ANDROID_VERSION must be set to a full MAJOR.MINOR.PATCH version for extract-headers.sh; the Forgejo workflow sets this to 16.0.0.

Set SKIP_LIBHYBRIS_UPDATE=1 to build only system.img.