Skip to content
3 changes: 3 additions & 0 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ jobs:
GIT_HASH: ${{ github.event.pull_request.head.sha }}
run: ./build_system.sh

- name: Build userdata
run: ./scripts/build_userdata.sh

- name: Statistics
id: stats
run: |
Expand Down
49 changes: 31 additions & 18 deletions scripts/build_userdata.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,36 +6,49 @@ ROOT=$DIR/..
OUTPUT_DIR=$DIR/../output
GIT_BRANCH=release3-staging

WORKDIR=$(mktemp -d)
MNTDIR=$WORKDIR/mnt
USERDATA_IMAGE=$WORKDIR/raw.img

export DOCKER_BUILDKIT=1
docker build -f $ROOT/Dockerfile.builder -t agnos-meta-builder $DIR \
docker buildx build --load -f $ROOT/Dockerfile.builder -t agnos-meta-builder $DIR \
--build-arg UNAME=$(id -nu) \
--build-arg UID=$(id -u) \
--build-arg GID=$(id -g)
MOUNT_CONTAINER_ID=$(docker run -d --privileged -v $WORKDIR:$WORKDIR -v $ROOT:$ROOT agnos-meta-builder)

trap "echo \"Cleaning up containers:\"; \
docker container rm -f $MOUNT_CONTAINER_ID" EXIT

exec_as_user() {
docker exec -u $(id -nu) $MOUNT_CONTAINER_ID "$@"
}

exec_as_root() {
docker exec $MOUNT_CONTAINER_ID "$@"
}

function create_image() {
IMAGE_SIZE=$1

WORKDIR=$(mktemp -d)
MNTDIR=$WORKDIR/mnt
USERDATA_IMAGE=$WORKDIR/raw.img

sudo umount $MNTDIR 2> /dev/null || true
rm -rf $WORKDIR
mkdir $WORKDIR
cd $WORKDIR
exec_as_root umount $MNTDIR 2> /dev/null || true
exec_as_root rm -rf $WORKDIR/*

fallocate -l $IMAGE_SIZE $USERDATA_IMAGE
mkfs.ext4 $USERDATA_IMAGE
exec_as_root truncate -s $IMAGE_SIZE $USERDATA_IMAGE
exec_as_root mkfs.ext4 $USERDATA_IMAGE

mkdir $MNTDIR
sudo mount $USERDATA_IMAGE $MNTDIR
sudo git clone --branch=$GIT_BRANCH --depth=1 https://github.com/commaai/openpilot.git $MNTDIR/openpilot.cache
echo "clone done for $(sudo cat $MNTDIR/openpilot.cache/common/version.h)"
sudo umount $MNTDIR
exec_as_root mkdir $MNTDIR
exec_as_root mount $USERDATA_IMAGE $MNTDIR
sudo git clone --branch=$GIT_BRANCH --depth=1 https://github.com/commaai/openpilot.git $WORKDIR/openpilot.cache
echo "clone done for $(sudo cat $WORKDIR/openpilot.cache/common/version.h)"
exec_as_root mv $WORKDIR/openpilot.cache $MNTDIR/
exec_as_root chown -R $(id -nu):$(id -nu) $MNTDIR
exec_as_root umount $MNTDIR

echo "Sparsify"
docker run --rm -u $(id -nu) --entrypoint img2simg -v $WORKDIR:$WORKDIR -v $ROOT:$ROOT -w $DIR agnos-meta-builder $USERDATA_IMAGE $OUTPUT_DIR/userdata_${sz}.img
rm -rf $WORKDIR
mkdir $OUTPUT_DIR 2> /dev/null || true
exec_as_user img2simg $USERDATA_IMAGE $OUTPUT_DIR/userdata_${sz}.img
exec_as_root rm -rf $WORKDIR/*
}

for sz in 30 89 90; do
Expand Down