From 82ad562be80ce5b12f1acd76feb135a62ab856c8 Mon Sep 17 00:00:00 2001 From: Ramon Roche Date: Fri, 15 Nov 2024 11:36:03 -0800 Subject: [PATCH] Tools: build px4-dev container in CI with ubuntu 24.04 --- .github/workflows/dev_container.yml | 45 +++++++++++++++++++++++++++++ Tools/setup/Dockerfile | 31 ++++++++++++++++++++ Tools/setup/docker-entrypoint.sh | 33 +++++++++++++++++++++ Tools/setup/ubuntu.sh | 5 ---- 4 files changed, 109 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/dev_container.yml create mode 100644 Tools/setup/Dockerfile create mode 100755 Tools/setup/docker-entrypoint.sh diff --git a/.github/workflows/dev_container.yml b/.github/workflows/dev_container.yml new file mode 100644 index 0000000000..f4ac404761 --- /dev/null +++ b/.github/workflows/dev_container.yml @@ -0,0 +1,45 @@ + +name: Container build + +on: + push: + branches: + - 'main' + - 'stable' + - 'beta' + - 'release/**' + pull_request: + branches: + - '*' + +jobs: + build: + name: Build Container + runs-on: [runs-on,runner=8cpu-linux-x64,"image=ubuntu24-full-x64","run-id=${{ github.run_id }}"] + steps: + + - uses: actions/checkout@v4 + with: + fetch-tags: true + submodules: false + + - name: Build and load container image + uses: docker/build-push-action@v6 + with: + context: Tools/setup + tags: px4-dev:latest + platforms: | + linux/amd64 + load: true + push: false + + - name: make quick_check + uses: addnab/docker-run-action@v3 + with: + image: px4-dev:latest + options: -v ${{ github.workspace }}:/workspace + run: | + cd /workspace + git config --global --add safe.directory /workspace + make px4_sitl_default + make px4_fmu-v6x_default diff --git a/Tools/setup/Dockerfile b/Tools/setup/Dockerfile new file mode 100644 index 0000000000..ce4b827ed1 --- /dev/null +++ b/Tools/setup/Dockerfile @@ -0,0 +1,31 @@ +# PX4 base development environment +FROM ubuntu:24.04 +LABEL maintainer="Daniel Agar , Ramon Roche " + +ENV DEBIAN_FRONTEND=noninteractive +ENV LANG=C.UTF-8 +ENV LC_ALL=C.UTF-8 +ENV DISPLAY=:99 +ENV TERM=xterm +ENV TZ=UTC + +# SITL UDP PORTS +EXPOSE 14556/udp +EXPOSE 14557/udp + +COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh + +# Install PX4 Requirements +COPY requirements.txt /tmp/requirements.txt +COPY ubuntu.sh /tmp/ubuntu.sh +RUN touch /.dockerenv +RUN bash /tmp/ubuntu.sh + +RUN git config --global --add safe.directory '*' + +# create user with id 1001 (jenkins docker workflow default) +RUN useradd --shell /bin/bash -u 1001 -c "" -m user && usermod -a -G dialout user + +ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] + +CMD ["/bin/bash"] diff --git a/Tools/setup/docker-entrypoint.sh b/Tools/setup/docker-entrypoint.sh new file mode 100755 index 0000000000..1094587c1c --- /dev/null +++ b/Tools/setup/docker-entrypoint.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +echo "[docker-entrypoint.sh] Starting entrypoint" +# Start virtual X server in the background +# - DISPLAY default is :99, set in dockerfile +# - Users can override with `-e DISPLAY=` in `docker run` command to avoid +# running Xvfb and attach their screen +if [[ -x "$(command -v Xvfb)" && "$DISPLAY" == ":99" ]]; then + echo "[docker-entrypoint.sh] Starting Xvfb" + Xvfb :99 -screen 0 1600x1200x24+32 & +fi + +# Check if the ROS_DISTRO is passed and use it +# to source the ROS environment +if [ -n "${ROS_DISTRO}" ]; then + echo "[docker-entrypoint.sh] ROS: ${ROS_DISTRO}" + source "/opt/ros/$ROS_DISTRO/setup.bash" +fi + +echo "[docker-entrypoint.sh] Working Directory: ${pwd}" + +# Use the LOCAL_USER_ID if passed in at runtime +if [ -n "${LOCAL_USER_ID}" ]; then + echo "[docker-entrypoint.sh] Starting with: $LOCAL_USER_ID:user" + # modify existing user's id + usermod -u $LOCAL_USER_ID user + + # run as user + # exec gosu user "$@" + exec "$@" +else + exec "$@" +fi diff --git a/Tools/setup/ubuntu.sh b/Tools/setup/ubuntu.sh index 2beaddb297..2d2fa00c1e 100755 --- a/Tools/setup/ubuntu.sh +++ b/Tools/setup/ubuntu.sh @@ -229,8 +229,3 @@ if [[ $INSTALL_SIM == "true" ]]; then fi fi - -if [[ $INSTALL_NUTTX == "true" ]]; then - echo - echo "Relogin or reboot computer before attempting to build NuttX targets" -fi