diff --git a/.github/workflows/conan.yml b/.github/workflows/conan.yml new file mode 100644 index 000000000..827b19033 --- /dev/null +++ b/.github/workflows/conan.yml @@ -0,0 +1,187 @@ +name: Test conan packages + +on: + # Run weekdays at 11:15pm UTC, and specify below to only run if there's been new commits + schedule: + - cron: "15 11 * * 1-5" + workflow_dispatch: + +jobs: + prepare: + if: github.repository_owner == 'viamrobotics' + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Get new commit count + id: new_commit_count + shell: bash + run: echo "commit_count=$(git log --oneline --since '24 hours ago' | wc -l)" >> $GITHUB_OUTPUT + + - name: Cancelling scheduled build with no new commits + uses: andymckay/cancel-action@0.2 + if: | + steps.new_commit_count.outputs.commit_count == '0' && + github.event_name == 'schedule' + + build_macos: + if: github.repository_owner == 'viamrobotics' + needs: [prepare] + runs-on: macos-latest + strategy: + fail-fast: false + matrix: + include: + - target: aarch64-apple-darwin + platform: macosx_arm64 + - target: x86_64-apple-darwin + platform: macosx_x86_64 + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + brew install cmake + brew install python ninja buf + python -m pip install conan + + - name: Build + run: | + # `buf` tries to read a CLI config file that we don't actually use located at + # ~/.config/buf/config.yaml. We don't always have permission to access this + # directory in CI, so we set the `BUF_CONFIG_DIR` to some other value that we + # do have permissions for. See https://github.com/bufbuild/buf/issues/2698 for + # more details. + export BUF_CONFIG_DIR=$(mktemp -d) + conan profile detect + conan create . --build=missing + + build_linux_ubuntu_jammy: + if: github.repository_owner == 'viamrobotics' + needs: [prepare] + runs-on: ${{ matrix.runs_on }} + container: + image: ${{ matrix.image }} + strategy: + fail-fast: false + matrix: + include: + - target: aarch64-ubuntu-jammy-gnu + platform: linux_aarch64-ubuntu-jammy + image: ubuntu:22.04 + runs_on: buildjet-8vcpu-ubuntu-2204-arm + - target: x86_64-ubuntu-jammy-gnu + platform: linux_x86_64-ubuntu-jammy + image: ubuntu:22.04 + runs_on: buildjet-8vcpu-ubuntu-2204 + + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + apt-get update + apt-get -y dist-upgrade + DEBIAN_FRONTEND=noninteractive apt-get -y --no-install-recommends install \ + build-essential \ + ca-certificates \ + curl \ + doxygen \ + g++ \ + gdb \ + gnupg \ + gpg \ + less \ + ninja-build \ + python3 \ + python3-pip \ + software-properties-common \ + sudo \ + wget \ + + sudo wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo gpg --dearmor - | sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null + sudo echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ jammy main' | sudo tee /etc/apt/sources.list.d/kitware.list >/dev/null + + apt-get update + apt-get -y install cmake + + pip install conan + + - name: Create package + shell: bash + run: | + conan profile detect + conan create . --build=missing + + build_linux_debian: + if: github.repository_owner == 'viamrobotics' + needs: [prepare] + runs-on: ${{ matrix.runs_on }} + container: + image: ${{ matrix.image }} + strategy: + fail-fast: false + matrix: + include: + - target: aarch64-debian-bullseye + platform: linux_aarch64-debian-bullseye + image: debian:bullseye + runs_on: buildjet-8vcpu-ubuntu-2204-arm + - target: x86_64-debian-bullseye + platform: linux_x86_64-debian-bullseye + image: debian:bullseye + runs_on: buildjet-8vcpu-ubuntu-2204 + - target: aarch64-debian-bookworm + platform: linux_aarch64-debian-bookworm + image: debian:bookworm + runs_on: buildjet-8vcpu-ubuntu-2204-arm + - target: x86_64-debian-bookworm + platform: linux_x86_64-debian-bookworm + image: debian:bookworm + runs_on: buildjet-8vcpu-ubuntu-2204 + + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + apt-get update + apt-get -y dist-upgrade + DEBIAN_FRONTEND=noninteractive apt-get -y --no-install-recommends install \ + build-essential \ + ca-certificates \ + cmake \ + curl \ + g++ \ + gdb \ + gnupg \ + gpg \ + less \ + ninja-build \ + python3 \ + python3-pip \ + software-properties-common \ + sudo \ + wget + + pip install conan + + - name: Update CMake for bullseye + if: ${{ matrix.image == 'debian:bullseye' }} + run: | + apt-add-repository -y 'deb http://deb.debian.org/debian bullseye-backports main' + + apt-get update + apt-get -y install cmake + + apt-get -y --no-install-recommends install -t bullseye-backports cmake + + - name: Create package + shell: bash + run: | + conan profile detect + conan create . --build=missing