Sync Cargo lockfiles #40
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Sync Cargo lockfiles | |
on: | |
schedule: | |
- cron: "0 0 * * *" # At the end of every day | |
workflow_dispatch: | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
fetch: | |
name: Fetch Zenoh's lockfile | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Zenoh | |
uses: actions/checkout@v4 | |
with: | |
repository: eclipse-zenoh/zenoh | |
- name: Upload lockfile | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Cargo.lock | |
path: Cargo.lock | |
sync: | |
name: Sync Cargo lockfile with ${{ matrix.dependant }} | |
needs: fetch | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
dependant: | |
- zenoh-c | |
- zenoh-python | |
- zenoh-java | |
- zenoh-kotlin | |
- zenoh-plugin-dds | |
- zenoh-plugin-mqtt | |
- zenoh-plugin-ros1 | |
- zenoh-plugin-ros2dds | |
- zenoh-plugin-webserver | |
- zenoh-backend-filesystem | |
- zenoh-backend-influxdb | |
- zenoh-backend-rocksdb | |
- zenoh-backend-s3 | |
steps: | |
- name: Checkout ${{ matrix.dependant }} | |
uses: actions/checkout@v4 | |
with: | |
repository: eclipse-zenoh/${{ matrix.dependant }} | |
submodules: true | |
token: ${{ secrets.BOT_TOKEN_WORKFLOW }} | |
- name: Install Rust toolchain | |
# NOTE: Showing the active Rust toolchain (defined by the rust-toolchain.toml file) | |
# will have the side effect of installing it; if it's not installed already. | |
run: rustup show | |
# NOTE: Not all Zenoh dependants have their Cargo manifest and lockfile | |
# at the repository's toplevel. The only exception being zenoh-kotlin and | |
# zenoh-java. Thus the need for this ugly workaround. | |
- name: Compute crate path of ${{ matrix.dependant }} | |
id: crate-path | |
run: | | |
if [[ "${{ matrix.dependant }}" =~ zenoh-(java|kotlin) ]]; then | |
echo "value=zenoh-jni" >> $GITHUB_OUTPUT | |
else | |
echo "value=." >> $GITHUB_OUTPUT | |
fi | |
- name: Override ${{ matrix.dependant }} lockfile with Zenoh's | |
uses: actions/download-artifact@v3 | |
with: | |
name: Cargo.lock | |
path: ${{ steps.crate-path.outputs.value }} | |
- name: Rectify lockfile | |
# NOTE: Checking the package for errors will rectify the Cargo.lock while preserving | |
# the dependency versions fetched from source. | |
run: cargo check --manifest-path ${{ steps.crate-path.outputs.value }}/Cargo.toml | |
- name: Create/Update a pull request if the lockfile changed | |
id: cpr | |
# NOTE: If there is a pending PR, this action will simply update it with a forced push. | |
uses: peter-evans/create-pull-request@v5 | |
with: | |
title: Sync lockfile with Zenoh's | |
body: Automated synchronization of the Cargo lockfile with Zenoh. This is done to ensure plugin ABI compatibility. | |
commit-message: "chore: Sync Cargo lockfile with Zenoh's" | |
committer: eclipse-zenoh-bot <[email protected]> | |
author: eclipse-zenoh-bot <[email protected]> | |
branch: eclipse-zenoh-bot/sync-lockfile | |
delete-branch: true | |
labels: dependencies | |
token: ${{ secrets.BOT_TOKEN_WORKFLOW }} | |
- name: Enable auto merge for the pull request | |
if: steps.cpr.outputs.pull-request-operation == 'created' | |
run: gh pr merge -R "eclipse-zenoh/${{ matrix.dependant }}" --merge --auto "${{ steps.cpr.outputs.pull-request-number }}" | |
env: | |
GH_TOKEN: ${{ secrets.BOT_TOKEN_WORKFLOW }} |