Skip to content

ci: add riscv64 to release targets#1

Open
gounthar wants to merge 16 commits intomasterfrom
feat/release-riscv64
Open

ci: add riscv64 to release targets#1
gounthar wants to merge 16 commits intomasterfrom
feat/release-riscv64

Conversation

@gounthar
Copy link
Copy Markdown
Owner

@gounthar gounthar commented Apr 5, 2026

Intra-fork PR to validate CI on RISE riscv64 runners before upstream dalance#894 is reviewed. Upstream is waiting on RISE app installation.

Summary by CodeRabbit

  • New Features

    • Added RISC-V 64-bit Linux build and release artifact support
  • Chores

    • Updated dependencies: clap_mangen (0.2→0.3), tokio (1.50→1.51), toml (1.0→1.1)
    • Expanded CI/CD matrix to include RISC-V; CI now conditionally runs tests vs. build-only for matrix entries
    • Added a release target to produce RISC-V release packages

dependabot Bot and others added 15 commits March 23, 2026 20:02
Bumps [toml](https://github.com/toml-rs/toml) from 1.0.7+spec-1.1.0 to 1.1.0+spec-1.1.0.
- [Commits](toml-rs/toml@toml-v1.0.7...toml-v1.1.0)

---
updated-dependencies:
- dependency-name: toml
  dependency-version: 1.1.0+spec-1.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
….0spec-1.1.0

build(deps): bump toml from 1.0.7+spec-1.1.0 to 1.1.0+spec-1.1.0
Bumps [clap_mangen](https://github.com/clap-rs/clap) from 0.2.33 to 0.3.0.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)
- [Commits](clap-rs/clap@clap_mangen-v0.2.33...clap_mangen-v0.3.0)

---
updated-dependencies:
- dependency-name: clap_mangen
  dependency-version: 0.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
…gen-0.3.0

build(deps): bump clap_mangen from 0.2.33 to 0.3.0
Add ubuntu-24.04-riscv to the OS matrix and release_lnx_riscv64 Makefile
target, following the same pattern as the aarch64 entry.

Signed-off-by: Bruno Verachten <gounthar@gmail.com>
Bumps [toml](https://github.com/toml-rs/toml) from 1.1.0+spec-1.1.0 to 1.1.1+spec-1.1.0.
- [Commits](toml-rs/toml@toml-v1.1.0...toml-v1.1.1)

---
updated-dependencies:
- dependency-name: toml
  dependency-version: 1.1.1+spec-1.1.0
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
….1spec-1.1.0

build(deps): bump toml from 1.1.0+spec-1.1.0 to 1.1.1+spec-1.1.0
Bumps [toml](https://github.com/toml-rs/toml) from 1.1.1+spec-1.1.0 to 1.1.2+spec-1.1.0.
- [Commits](toml-rs/toml@toml-v1.1.1...toml-v1.1.2)

---
updated-dependencies:
- dependency-name: toml
  dependency-version: 1.1.2+spec-1.1.0
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
….2spec-1.1.0

build(deps): bump toml from 1.1.1+spec-1.1.0 to 1.1.2+spec-1.1.0
Bumps [libc](https://github.com/rust-lang/libc) from 0.2.183 to 0.2.184.
- [Release notes](https://github.com/rust-lang/libc/releases)
- [Changelog](https://github.com/rust-lang/libc/blob/0.2.184/CHANGELOG.md)
- [Commits](rust-lang/libc@0.2.183...0.2.184)

---
updated-dependencies:
- dependency-name: libc
  dependency-version: 0.2.184
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
….184

build(deps): bump libc from 0.2.183 to 0.2.184
Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.50.0 to 1.51.0.
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](tokio-rs/tokio@tokio-1.50.0...tokio-1.51.0)

---
updated-dependencies:
- dependency-name: tokio
  dependency-version: 1.51.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
…51.0

build(deps): bump tokio from 1.50.0 to 1.51.0
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 5, 2026

📝 Walkthrough

Walkthrough

This PR adds RISC-V support to CI and release flows (new ubuntu-24.04-riscv matrix entry), introduces a Makefile target to produce riscv64 release artifacts, and updates three Cargo dependency versions.

Changes

Cohort / File(s) Summary
CI Workflows
.github/workflows/regression.yml, .github/workflows/release.yml
Added ubuntu-24.04-riscv matrix entry. Regression workflow conditionalizes build vs test using a run_tests flag; release workflow adds a conditional step that runs make release_lnx_riscv64 for the RISC-V matrix item.
Release Makefile
Makefile
Added release_lnx_riscv64 target that runs a release build and packages target/release/${BIN_NAME} into procs-v${VERSION}-riscv64-linux.zip.
Cargo manifest
Cargo.toml
Bumped dependency versions: clap_mangen 0.2→0.3, tokio 1.50→1.51 (optional, feature "rt"), and toml 1.0→1.1.

Sequence Diagram(s)

sequenceDiagram
  participant Dev as "Developer (push/PR)"
  participant GH as "GitHub Actions"
  participant Matrix as "Job Matrix"
  participant Runner as "Runner (ubuntu-24.04-riscv / others)"
  participant Build as "Cargo / Make"
  participant Store as "Artifact Upload"

  Dev->>GH: push / open PR
  GH->>Matrix: evaluate matrix (includes ubuntu-24.04-riscv)
  Matrix->>Runner: start job
  Runner->>Build: if matrix.run_tests == false\n-> cargo build --locked --target riscv64...
  Runner->>Build: if matrix.run_tests == true\n-> cargo test (with/without default features)
  alt RISC-V release job (release.yml)
    Runner->>Build: run `make release_lnx_riscv64`
  end
  Build->>Store: upload artifacts
  Store-->>GH: artifact stored
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

🐰 I nibble code and push a branch so spry,
RISC‑V hops in, beneath the CI sky,
Binaries bundled, dependencies tuned just right,
A carrot-shaped release leaps into the night! 🥕

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'ci: add riscv64 to release targets' accurately and concisely summarizes the main changes in the pull request, which adds RISC-V (riscv64) support to the CI/CD workflows and release targets.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/release-riscv64

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates several dependencies, including tokio, toml, and clap_mangen, and adds a new RISC-V 64-bit Linux release target to the Makefile. Feedback was provided regarding the new Makefile target, noting that it is inconsistent with other Linux targets because it lacks an explicit target triple and uses a different output directory structure.

Comment thread Makefile
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
Makefile (1)

10-10: Add release_lnx_riscv64 to .PHONY declaration.

The new target should be added to the .PHONY line for consistency with other release targets. While not strictly necessary since there's no matching file, it documents that this is a phony target.

Proposed fix
-.PHONY: all test clean release_lnx release_win release_mac
+.PHONY: all test clean release_lnx release_lnx_aarch64 release_lnx_riscv64 release_win release_mac
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Makefile` at line 10, Update the .PHONY declaration in the Makefile to
include the new phony target name: add release_lnx_riscv64 to the existing
.PHONY line (which currently lists all test/clean/release_* targets) so the
Makefile's .PHONY symbol accurately documents the new release_lnx_riscv64
target.
.github/workflows/regression.yml (1)

20-22: Optional: Add actionlint configuration for self-hosted runner label.

To ensure actionlint properly recognizes the ubuntu-24.04-riscv self-hosted runner label if linting is enabled, create .github/actionlint.yaml:

self-hosted-runner:
  labels:
    - ubuntu-24.04-riscv

This prevents actionlint from flagging the custom runner label as unknown.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/regression.yml around lines 20 - 22, Add an actionlint
config so the custom self-hosted runner label is recognized: create the file
.github/actionlint.yaml and define a top-level key self-hosted-runner with a
labels array that includes "ubuntu-24.04-riscv" (the exact label used in
regression.yml), so actionlint won't flag the custom runner label as unknown.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/release.yml:
- Line 13: The workflow includes the self-hosted runner label
"ubuntu-24.04-riscv" in the matrix 'os' which triggers actionlint warnings;
update the repository-level actionlint configuration like you did for
regression.yml so this label is accepted. Add the same rule/allow-list entry to
actionlint.yaml (the previously suggested configuration) so actionlint
recognizes "ubuntu-24.04-riscv" as a valid runner label for the 'os' matrix in
release.yml and re-run validation.

---

Nitpick comments:
In @.github/workflows/regression.yml:
- Around line 20-22: Add an actionlint config so the custom self-hosted runner
label is recognized: create the file .github/actionlint.yaml and define a
top-level key self-hosted-runner with a labels array that includes
"ubuntu-24.04-riscv" (the exact label used in regression.yml), so actionlint
won't flag the custom runner label as unknown.

In `@Makefile`:
- Line 10: Update the .PHONY declaration in the Makefile to include the new
phony target name: add release_lnx_riscv64 to the existing .PHONY line (which
currently lists all test/clean/release_* targets) so the Makefile's .PHONY
symbol accurately documents the new release_lnx_riscv64 target.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 40f31530-ab9b-4a76-a34c-eda65ed80ac4

📥 Commits

Reviewing files that changed from the base of the PR and between 9cf0591 and ef5fe48.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • .github/workflows/regression.yml
  • .github/workflows/release.yml
  • Cargo.toml
  • Makefile

strategy:
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm, macOS-latest, windows-latest]
os: [ubuntu-latest, ubuntu-24.04-arm, ubuntu-24.04-riscv, macOS-latest, windows-latest]
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Same self-hosted runner label issue as regression.yml.

The ubuntu-24.04-riscv label triggers the same actionlint warning. The recommended actionlint.yaml configuration (suggested in the regression.yml review) will resolve this for both workflow files.

🧰 Tools
🪛 actionlint (1.7.12)

[error] 13-13: label "ubuntu-24.04-riscv" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2025-vs2026", "windows-2022", "windows-11-arm", "ubuntu-slim", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "macos-latest", "macos-latest-xlarge", "macos-latest-large", "macos-26-intel", "macos-26-xlarge", "macos-26-large", "macos-26", "macos-15-intel", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xlarge", "macos-14-large", "macos-14", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file

(runner-label)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/release.yml at line 13, The workflow includes the
self-hosted runner label "ubuntu-24.04-riscv" in the matrix 'os' which triggers
actionlint warnings; update the repository-level actionlint configuration like
you did for regression.yml so this label is accepted. Add the same
rule/allow-list entry to actionlint.yaml (the previously suggested
configuration) so actionlint recognizes "ubuntu-24.04-riscv" as a valid runner
label for the 'os' matrix in release.yml and re-run validation.

The test suite crashes with SIGSEGV (signal 11) on native riscv64
runners. Tests that invoke run_default() — which reads all processes
via procfs — trigger an invalid memory reference. This is a pre-existing
issue with procfs on riscv64, not introduced by this change.

Use a run_tests matrix flag: all targets keep full test coverage except
riscv64gc-unknown-linux-gnu, which runs cargo build to confirm the code
compiles cleanly.

Signed-off-by: Bruno Verachten <gounthar@gmail.com>
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/regression.yml:
- Around line 22-25: The workflow uses a non-standard self-hosted runner label
"ubuntu-24.04-riscv" in regression.yml and release.yml which will fail to
schedule on forks or repos without that runner; update the repo by adding a
short note in CONTRIBUTING.md (or .github/RUNNER_SETUP.md) describing the
self-hosted runner requirement and the expected label, and modify the workflows
to guard the RISC-V job so it doesn't run on repos without the runner (for
example add a conditional check to the RISC-V job that skips it unless running
in the canonical repo or unless the runner label is available, e.g. using an if:
condition like github.repository == 'gounthar/procs' or another suitable guard)
so external contributors/forks won't have unschedulable job legs.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 17b0a3e6-a869-4144-84e1-5fe171471b04

📥 Commits

Reviewing files that changed from the base of the PR and between ef5fe48 and 1ffe3b8.

📒 Files selected for processing (1)
  • .github/workflows/regression.yml

Comment on lines +22 to +25
- os: ubuntu-24.04-riscv
rust: stable
target: riscv64gc-unknown-linux-gnu
run_tests: false
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo="$(gh repo view --json nameWithOwner -q .nameWithOwner)"
echo "Repository: ${repo}"

echo "== Self-hosted runners and labels =="
gh api "repos/${repo}/actions/runners?per_page=100" \
  | jq -r '.runners[] | .name as $n | .labels[].name | [$n, .] | `@tsv`' \
  | sort -u || true

echo "== Check required label: ubuntu-24.04-riscv =="
if gh api "repos/${repo}/actions/runners?per_page=100" \
  | jq -e '.runners[].labels[].name | select(.=="ubuntu-24.04-riscv")' >/dev/null; then
  echo "FOUND: ubuntu-24.04-riscv"
else
  echo "MISSING: ubuntu-24.04-riscv"
fi

echo "== actionlint config (if custom label is intentional) =="
fd -i 'actionlint\.ya?ml' -a || true
fd -i 'actionlint\.ya?ml' -a --exec sed -n '1,200p' {} || true

Repository: gounthar/procs

Length of output: 156


🏁 Script executed:

# Check the workflow file and surrounding context
cat -n .github/workflows/regression.yml | head -50

Repository: gounthar/procs

Length of output: 1787


🏁 Script executed:

# Look for actionlint configuration
find .github -type f -name "*actionlint*" -o -name ".actionlintrc*"

Repository: gounthar/procs

Length of output: 40


🏁 Script executed:

# Search for self-hosted runner references in workflows
rg -i "self-hosted" .github/workflows/

Repository: gounthar/procs

Length of output: 40


🏁 Script executed:

# Check if there are other workflow files that might reference ubuntu-24.04-riscv
rg "ubuntu-24.04-riscv" .github/

Repository: gounthar/procs

Length of output: 325


🏁 Script executed:

# Look for any documentation about runners or CI setup
fd -i readme .github/ -o -i readme . --max-depth 2 --exec cat {} \;

Repository: gounthar/procs

Length of output: 174


🏁 Script executed:

# Check release.yml to see how ubuntu-24.04-riscv is used
cat -n .github/workflows/release.yml | head -100

Repository: gounthar/procs

Length of output: 2304


Non-standard runner label will not schedule without self-hosted runners configured

Lines 22-25 use ubuntu-24.04-riscv, which is neither a GitHub-hosted runner label nor a documented self-hosted label within this repository. This label appears intentionally in both regression.yml (line 22) and release.yml (line 13), with conditional build steps, but without visible self-hosted runner infrastructure in the repo, these job legs will fail to schedule on GitHub Actions.

This creates a portability issue: external contributors or forks cannot run these workflows without separately setting up self-hosted runners with the ubuntu-24.04-riscv label, which is not transparent from the workflow files alone.

Recommended action:

  • Document the self-hosted runner requirement in the repository (e.g., in CONTRIBUTING.md or a .github/RUNNER_SETUP.md)
  • Alternatively, make the RISC-V job conditional (e.g., if: github.repository == 'gounthar/procs') to prevent failures in forks, or conditionally skip it if runners are not available
🧰 Tools
🪛 actionlint (1.7.12)

[error] 22-22: label "ubuntu-24.04-riscv" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2025-vs2026", "windows-2022", "windows-11-arm", "ubuntu-slim", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "macos-latest", "macos-latest-xlarge", "macos-latest-large", "macos-26-intel", "macos-26-xlarge", "macos-26-large", "macos-26", "macos-15-intel", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xlarge", "macos-14-large", "macos-14", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file

(runner-label)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/regression.yml around lines 22 - 25, The workflow uses a
non-standard self-hosted runner label "ubuntu-24.04-riscv" in regression.yml and
release.yml which will fail to schedule on forks or repos without that runner;
update the repo by adding a short note in CONTRIBUTING.md (or
.github/RUNNER_SETUP.md) describing the self-hosted runner requirement and the
expected label, and modify the workflows to guard the RISC-V job so it doesn't
run on repos without the runner (for example add a conditional check to the
RISC-V job that skips it unless running in the canonical repo or unless the
runner label is available, e.g. using an if: condition like github.repository ==
'gounthar/procs' or another suitable guard) so external contributors/forks won't
have unschedulable job legs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants