diff --git a/.github/workflows/conan-publish.yml b/.github/workflows/conan-publish.yml new file mode 100644 index 000000000..37c3a7bfd --- /dev/null +++ b/.github/workflows/conan-publish.yml @@ -0,0 +1,148 @@ +name: Publish conan packages + +on: + workflow_dispatch: + inputs: + ref: + required: true + type: string + description: Version number (eg v0.20.1) + upload_deps: + required: true + type: boolean + default: false + description: If true, publish slow-building deps as well + +jobs: + build_macos: + # Not sure if we actually need x64 macos-latest + runs-on: macos-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: releases/${{ inputs.ref }} + + + - name: Install dependencies + run: | + cmake --version + python --version + ninja --version + brew install buf + python -m pip install conan + + - name: Set up python/conan + env: + CONAN_REMOTE_URL: ${{ secrets.conanRemote }} + CONAN_LOGIN_USERNAME_VIAMCONAN: ${{ secrets.conanUsername}} + CONAN_PASSWORD_VIAMCONAN: ${{ secrets.conanPassword }} + run: | + conan profile detect + conan remote add viamconan $CONAN_REMOTE_URL + conan remote auth -cc core:non_interactive=True viamconan + + - name: Create and upload package + 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 -s:a compiler.cppstd=17 -s:a "&:shared=False" + conan upload "viam-cpp-sdk/*" -r viamconan + + - name: Upload additional deps + if: inputs.upload_deps + run: | + conan upload "boost/*" -r viamconan + conan upload "grpc/*" -r viamconan + conan upload "protobuf/*" -r viamconan + + + build_linux: + runs-on: ${{ matrix.runs_on }} + container: + image: ${{ matrix.image }} + strategy: + matrix: + - runs_on: [buildjet-8vcpu-ubuntu-2204, buildjet-8vcpu-ubuntu-2204-arm] + - image: [ubuntu:22.04, debian:bookworm] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: releases/${{ inputs.ref }} + + - name: Show platform info + run: | + uname -a + cat /etc/os-release + + - name: Install common deps + run: | + apt-get update + apt-get -y dist-upgrade + DEBIAN_FRONTEND=noninteractive apt-get -y --no-install-recommends install \ + autoconf \ + automake \ + build-essential \ + ca-certificates \ + curl \ + doxygen \ + g++ \ + gdb \ + gnupg \ + gpg \ + less \ + ninja-build \ + python3 \ + python3-pip \ + python3-venv \ + software-properties-common \ + sudo \ + wget \ + + - name: Install cmake (jammy) + if: matrix.image == ubuntu:22.04 + run: | + 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=3.25.2-0kitware1ubuntu22.04.1 cmake-data=3.25.2-0kitware1ubuntu22.04.1 + + - name: Install cmake (bookworm) + if: matrix.image == debian:bookworm + run: DEBIAN_FRONTEND=noninteractive apt-get -y --no-install-recommends install cmake + + - name: Set up python/conan + env: + CONAN_REMOTE_URL: ${{ secrets.conanRemote }} + CONAN_LOGIN_USERNAME_VIAMCONAN: ${{ secrets.conanUsername}} + CONAN_PASSWORD_VIAMCONAN: ${{ secrets.conanPassword }} + run: | + python3 -m venv ./conan_venv + . ./conan_venv/bin/activate + + conan profile detect + conan remote add viamconan $CONAN_REMOTE_URL + conan remote auth -cc core:non_interactive=True viamconan + + - name: Create and upload package + run: | + . ./conan_venv/bin/activate + + conan create . --build=missing -s:a compiler.cppstd=17 -s:a "&:shared=False" + conan upload "viam-cpp-sdk/*" -r viamconan + + - name: Upload additional deps + if: inputs.upload_deps + run: | + conan upload "boost/*" -r viamconan + conan upload "grpc/*" -r viamconan + conan upload "protobuf/*" -r viamconan diff --git a/.github/workflows/conan.yml b/.github/workflows/conan.yml index 6192b4c6b..3163ead37 100644 --- a/.github/workflows/conan.yml +++ b/.github/workflows/conan.yml @@ -5,7 +5,8 @@ on: # Additional logic in the prepare job below makes it so scheduled builds only run # on new commits. schedule: - - cron: "15 11 * * 1-5" + - cron: '0 10 * * *' # 10 AM UTC daily (6 AM EDT / 5 AM EST) + - cron: '0 10 * * 0' # 10 AM UTC every Sunday (weekly unconditional run) workflow_dispatch: pull_request: paths: @@ -38,7 +39,8 @@ jobs: uses: andymckay/cancel-action@0.2 if: | github.event_name == 'schedule' && - steps.git_info.outputs.current_commit == steps.last_successful_commit.outputs.commit-hash + steps.git_info.outputs.current_commit == steps.last_successful_commit.outputs.commit-hash && + github.event.schedule != '0 10 * * 0' build_macos: if: github.repository_owner == 'viamrobotics'