diff --git a/.github/workflows/dev_container.yml b/.github/workflows/dev_container.yml new file mode 100644 index 000000000000..f4ac40476132 --- /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 000000000000..ce4b827ed13d --- /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 000000000000..1094587c1c2f --- /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 2beaddb297bf..2d2fa00c1e4c 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