Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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