Skip to content

CI

CI #3953

Workflow file for this run

# Copyright (c) 2020, Massachusetts Institute of Technology.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# * Neither the name of the copyright holder nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
---
name: CI
on:
pull_request:
types:
- opened
- reopened
- synchronize
push:
branches:
- master
schedule:
- cron: '0 8 * * *'
jobs:
noble:
name: ubuntu 24.04 noble
runs-on: ubuntu-24.04
container: ubuntu:24.04
steps:
- name: pre-checkout setup
run: |
export APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 DEBIAN_FRONTEND=noninteractive
apt-get update -o APT::Acquire::Retries=4 -qq
apt-get install -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 -qy --no-install-recommends ca-certificates gnupg sudo
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E1DD270288B4E6030699E45FA1715D88E1DF1F24
echo 'deb http://ppa.launchpad.net/git-core/ppa/ubuntu noble main' > /etc/apt/sources.list.d/git.list
apt-get update -o APT::Acquire::Retries=4 -qq
apt-get install -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 -qy --no-install-recommends git
# Create non-root user for bazel bzlmod compatibility
useradd -m -s /bin/bash runner
echo 'runner ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
rm -rf /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin /var/lib/apt/lists/* /var/log/apt/*
shell: bash
- name: checkout
uses: actions/checkout@v2
- name: fix ownership and run as non-root user
run: |
# Fix ownership of the workspace
chown -R runner:runner .
# Switch to runner user for remaining commands
sudo -u runner ./setup/submodule_checkout
# Install system packages as root, but avoid running bazel as root
./setup/ubuntu/24.04/install_prereqs.sh
apt-get install -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 -qy --no-install-recommends xvfb
rm -rf /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin /var/lib/apt/lists/* /var/log/apt/*
# Now run bazel operations as non-root user (Python 3.12 via .bazelrc linux config)
sudo -u runner bazel fetch //...
shell: bash
- name: test
run: sudo -u runner ./book/htmlbook/workflows/ci/noble/test
shell: bash
sonoma:
name: macos sonoma 14
runs-on: macos-14
steps:
- name: checkout
uses: actions/checkout@v2
- name: submodule checkout
run: ./setup/submodule_checkout
shell: zsh -efuo pipefail {0}
- name: setup
run: |
./book/htmlbook/workflows/ci/sonoma/setup
bazel fetch //...
shell: zsh -efuo pipefail {0}
- name: test
run: ./book/htmlbook/workflows/ci/sonoma/test
shell: zsh -efuo pipefail {0}
lint:
runs-on: ubuntu-latest
steps:
- name: checkout repo
uses: actions/checkout@v4
- name: setup python
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: black
uses: psf/black@stable
with:
version: 24.10.0
jupyter: true
- name: isort
uses: isort/isort-action@master
with:
configuration: "--profile black --check-only"
isort-version: 5.12.0
- name: autoflake
uses: creyD/autoflake_action@master
with:
options: --remove-all-unused-imports --in-place
# Pegging version s.t. https://github.com/creyD/autoflake_action/issues/1
- name: Install and configure Poetry
uses: snok/install-poetry@v1
with:
version: 2.1.4
virtualenvs-create: true
virtualenvs-in-project: true
- name: build the docs
run: |
poetry install --only docs
source .venv/bin/activate
sphinx-build -M html underactuated book/python
shell: bash
- name: Test full poetry install
run: poetry install
# The following jobs rely on the pip wheels being up to date. They can be disabled for a PR by adding the "requires new pip wheels" label.
# docker:
# name: dockerfile
# runs-on: ubuntu-latest
# if: ${{ !contains(github.event.pull_request.labels.*.name, 'requires new pip wheels') }}
# container: russtedrake/underactuated:latest
# steps:
# - name: checkout
# uses: actions/checkout@v4
# - name: submodule checkout
# run: ./setup/submodule_checkout
# shell: bash
# - name: post-checkout setup
# # Force bazel to use user pip instead of re-downloading everything to
# # be hermetic:
# run: |
# apt remove -y python3-matplotlib # due to mpl_toolkits.mplot3d woes
# pip install underactuated[all] -U --extra-index-url https://drake-packages.csail.mit.edu/whl/nightly/
# truncate -s0 requirements*.txt
# sed -i '/PYTHONNOUSERSITE/d' .bazelrc
# shell: bash
# - name: test
# run: |
# EXCLUDE_TESTS="(//book/htmlbook/... + attr(name, .*_linktest$, //...))" \
# DRAKE_RESOURCE_ROOT=`python3 -c \
# "from pathlib import Path; from pydrake.all import GetDrakePath; \
# print(Path(GetDrakePath()).parent)"` \
# UNDERACTUATED_DATA_DIR="`pwd`/book/data" \
# BAZEL_TEST_FLAGS="--define=use_dependencies=none" \
# ./book/htmlbook/workflows/ci/noble/test
# shell: bash
noble-pip-core:
# This should emulate a student's experience if they are doing exercises
# via pip install underactuated.
name: pip notebooks on noble
runs-on: ubuntu-24.04
if: ${{ !contains(github.event.pull_request.labels.*.name, 'requires new pip wheels') }}
container: ubuntu:24.04
steps:
- name: pre-checkout setup
run: |
apt-get update -o APT::Acquire::Retries=4 -qq
apt-get install -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 -qy --no-install-recommends python3-pip git xvfb sudo
# Create non-root user
useradd -m -s /bin/bash runner
echo 'runner ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
shell: bash
- name: checkout
uses: actions/checkout@v2
- name: test pip installation and exercises
run: |
# Fix ownership of the workspace
chown -R runner:runner .
# Switch to runner user for remaining commands
sudo -u runner ./setup/submodule_checkout
# Install system dependencies for Drake
./setup/ubuntu/24.04/install_prereqs.sh
# Install underactuated via pip (to mimic student experience)
sudo -u runner pip install underactuated jupyter nbconvert ipykernel --extra-index-url https://drake-packages.csail.mit.edu/whl/nightly/ --break-system-packages
shell: bash
- name: test
run: |
# The underactuated library needs be robust against partial
# installations, but the examples will assume a full installation. So
# we test only the underactuated library here.
sudo -u runner ./book/htmlbook/workflows/ci/noble/test_wheels --core-library-only
shell: bash
noble-pip-extra:
# This should emulate a student's experience if they are doing exercises
# via pip install underactuated[all].
name: pip extra on noble
runs-on: ubuntu-24.04
if: ${{ !contains(github.event.pull_request.labels.*.name, 'requires new pip wheels') }}
container: ubuntu:24.04
steps:
- name: pre-checkout setup
run: |
apt-get update -o APT::Acquire::Retries=4 -qq
apt-get install -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 -qy --no-install-recommends python3-pip git xvfb sudo
# Create non-root user
useradd -m -s /bin/bash runner
echo 'runner ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
shell: bash
- name: checkout
uses: actions/checkout@v2
- name: test pip installation and exercises
run: |
# Fix ownership of the workspace
chown -R runner:runner .
# Switch to runner user for remaining commands
sudo -u runner ./setup/submodule_checkout
# Install system dependencies for Drake
./setup/ubuntu/24.04/install_prereqs.sh
# Install underactuated via pip (to mimic student experience)
sudo -u runner pip install underactuated[all] jupyter nbconvert ipykernel --extra-index-url https://drake-packages.csail.mit.edu/whl/nightly/ --break-system-packages
shell: bash
- name: test
run: |
sudo -u runner ./book/htmlbook/workflows/ci/noble/test_wheels
shell: bash