Skip to content

Conversation

ausias-armesto
Copy link
Contributor

Improve workflows to be able to create OS packages for debian, redhat and alpine

@Copilot Copilot AI review requested due to automatic review settings June 17, 2025 15:49
Copy link
Contributor

coderabbitai bot commented Jun 17, 2025

Warning

Rate limit exceeded

@ausias-armesto has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 21 minutes and 13 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between ac53cb8 and 2237ed3.

📒 Files selected for processing (1)
  • .github/workflows/build.yaml (1 hunks)
📝 Walkthrough
## Walkthrough

This update introduces a comprehensive packaging and release automation system for the project. It adds new GitHub Actions workflows for packaging binaries and creating releases, along with scripts and configuration files for building Linux packages (deb, rpm, apk), service management, and post-installation setup. Several existing CI jobs are disabled or replaced, and supporting scripts and shell environments are updated accordingly.

## Changes

| File(s)                                                                                                      | Change Summary                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
|--------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| .github/workflows/build.yaml                                                                                 | Added a new matrix-based `package` job invoking `.github/workflows/package.yaml` for multiple Linux targets; no other jobs removed or modified.                                                                                                                                                                                                                                                                                                                                                                            |
| .github/workflows/package.yaml                                                                               | Added: New workflow for packaging binaries for specified targets, including artifact download, Nix and Cachix setup, packaging with `just`, and uploading Debian, RPM, and Alpine package artifacts.                                                                                                                                                                                                                                                                                                                        |
| .github/workflows/create-release.yaml                                                                        | Added: New workflow for automated GitHub release creation with concurrency control, version detection, changelog generation, Docker image tagging and pushing, release creation and asset upload, milestone closing, and Zulip notification.                                                                                                                                                                                                                                                                                 |
| .github/workflows/merge.yaml                                                                                  | Refactored `create_release` job to use reusable workflow `.github/workflows/create-release.yaml` with inherited secrets; removed detailed inline steps and explicit runner specification. Enabled `bencher` job with condition and reusable workflow call.                                                                                                                                                                                                                                                                  |
| .github/workflows/build-binaries.yaml                                                                         | Modified artifact upload step to restrict uploaded files to a specific binary instead of all files in the `bin` directory.                                                                                                                                                                                                                                                                                                                                                                                                    |
| .github/workflows/build-dappnode.yaml                                                                         | Changed event triggers and conditionals from `pull_request` to `pull_request_target` to align workflow triggering and environment setup.                                                                                                                                                                                                                                                                                                                                                                                     |
| deploy/nfpm/nfpm.yaml<br>deploy/nfpm/hoprd.service<br>deploy/nfpm/hoprd.initd<br>deploy/nfpm/hoprd-sample.cfg.yaml | Added: nfpm package configuration for "hoprd" with metadata, dependencies, contents, and lifecycle scripts; systemd and OpenRC service unit files for hoprd; sample configuration defining service parameters and strategies.                                                                                                                                                                                                                                                                                              |
| deploy/nfpm/package-post-install.sh<br>deploy/nfpm/package-pre-uninstall.sh                                   | Added: Post-installation script for environment setup, user/group creation, service enablement, startup verification, and node identity generation; pre-uninstall script for stopping service, removing user/group, and cleaning configuration and data directories.                                                                                                                                                                                                                                                     |
| justfile                                                                                                     | Added: `package-packager` and `package` recipes to build deb, rpm, and apk packages using nfpm with environment variable substitution.                                                                                                                                                                                                                                                                                                                                                                                     |
| scripts/download-workflow-binaries.sh                                                                        | Changed: Downloaded artifacts are extracted into structured directories (`dist/zip`, `dist/bin`, `dist/packages`), platform-specific binaries are zipped, and artifacts are organized by platform.                                                                                                                                                                                                                                                                                                                       |
| scripts/get-current-version.sh                                                                                 | Improved: Default parameter value added for version type; simplified version extraction using `grep` and `awk`.                                                                                                                                                                                                                                                                                                                                                                                                              |
| nix/ciShell.nix<br>flake.nix                                                                                  | Added: `nfpm` and `envsubst` packages included in development shell environments via `extraPackages`.                                                                                                                                                                                                                                                                                                                                                                                                                        |
| .gitignore                                                                                                    | Added: Ignore pattern for generated nfpm config file `deploy/nfpm/nfpm.generated.yaml`.                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| deploy/nfpm/logrotate.conf                                                                                    | Added: Logrotate configuration for hoprd service logs with daily rotation, compression, retention, and permissions setup.                                                                                                                                                                                                                                                                                                                                                                                                    |
| README.md                                                                                                    | Added: Installation instructions for hoprd via Debian, Red Hat, and Alpine package managers, including architecture detection, download, install, and uninstall commands.                                                                                                                                                                                                                                                                                                                                                   |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant Developer
    participant GitHub Actions
    participant Nix/Cachix
    participant Artifact Storage
    participant Systemd/OpenRC

    Developer->>GitHub Actions: Push PR / Merge to main
    GitHub Actions->>GitHub Actions: build-binaries job
    GitHub Actions->>Artifact Storage: Upload built binaries
    GitHub Actions->>GitHub Actions: package job (matrix: 3 targets)
    GitHub Actions->>Artifact Storage: Download binaries
    GitHub Actions->>Nix/Cachix: Setup Nix and authenticate Cachix
    GitHub Actions->>GitHub Actions: Run packaging scripts (deb, rpm, apk)
    GitHub Actions->>Artifact Storage: Upload package artifacts
    GitHub Actions->>GitHub Actions: create-release workflow
    GitHub Actions->>Artifact Storage: Download assets
    GitHub Actions->>GitHub Actions: Generate changelog and create release
    GitHub Actions->>Artifact Storage: Upload release assets
    GitHub Actions->>Systemd/OpenRC: (On install) Run post-install script, enable/start service

Possibly related PRs

  • Adding more info to build dappNode #6687: Adds environment variable logic and output enhancements in the build-dappnode.yaml workflow, related to event handling changes in this PR.
  • Fix workflows #6769: Modifies .github/workflows/merge.yaml by disabling jobs; related due to changes in merge workflow structure and job enabling in this PR.

Suggested labels

docker-production-build

Suggested reviewers

  • tolbrino
  • Teebor-Choka

</details>

<!-- walkthrough_end -->
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- tips_start -->

---

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.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=hoprnet/hoprnet&utm_content=7251):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Explain this complex logic.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai explain this code block.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and explain its main purpose.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->

@ausias-armesto ausias-armesto self-assigned this Jun 17, 2025
@github-actions github-actions bot added the toolchain Developer and product happiness label Jun 17, 2025
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR enhances the packaging workflows and scripts to produce OS packages (DEB, RPM, APK) for the hoprd binaries.

  • Refactors version extraction in get-current-version.sh and adds a default type.
  • Adds nfpm to the Nix dev shell and just tasks for packaging.
  • Introduces NFPM config, install/uninstall scripts, systemd unit, and CI packaging workflows.

Reviewed Changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
scripts/get-current-version.sh Use awk for version parsing and default version_type fallback
nix/ciShell.nix Added nfpm to development environment
justfile New package and package-all recipes to build OS packages
deploy/nfpm/uninstall.sh Uninstall hook to stop and disable the systemd service
deploy/nfpm/nfpm.yaml Core NFPM package definition for hoprd
deploy/nfpm/install.sh Install hook generating config, creating identity, and starting svc
deploy/nfpm/hoprd.service Systemd unit file for the hoprd service
deploy/nfpm/hoprd-template.cfg.yaml Template YAML config with placeholders for environment variables
.github/workflows/package.yaml New reusable workflow for packaging artifacts
.github/workflows/build.yaml Updated build job naming and added package job
Comments suppressed due to low confidence (1)

.github/workflows/build.yaml:68

  • This step is missing a leading - to denote a new entry in the steps list, which will cause invalid YAML.
    name: build-${{ matrix.binary }}-${{ matrix.target.name }}

Copy link
Contributor

@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: 7

♻️ Duplicate comments (4)
scripts/get-current-version.sh (1)

25-25: Use robust default fallback for version_type
version_type=${1-semver} only defaults when $1 is unset, not empty. Prefer ${1:-semver} to cover both cases.

Apply this diff:

-version_type=${1-semver}
+version_type=${1:-semver}
deploy/nfpm/hoprd.service (1)

8-8: Run service under a non-root user
Running hoprd as root increases risk. Create a dedicated hoprd user and update the unit:

-User=root
+User=hoprd
+Group=hoprd

Also ensure the hoprd user exists and owns relevant directories.

justfile (1)

30-33: Backup restoration path is still wrong

sed creates the backup as deploy/nfpm/nfpm.yaml.bak, but the mv command tries to restore from nfpm/nfpm.yaml.bak, which doesn’t exist. The same issue was raised previously.

-    mv nfpm/nfpm.yaml.bak nfpm/nfpm.yaml
+    mv deploy/nfpm/nfpm.yaml.bak deploy/nfpm/nfpm.yaml
deploy/nfpm/install.sh (1)

18-23: Public-IP lookup over plain HTTP

Fetching the node’s IP via http://checkip.amazonaws.com is vulnerable to MITM.
Switch to HTTPS:

-  public_ip=$(curl -s http://checkip.amazonaws.com)
+  public_ip=$(curl -s https://checkip.amazonaws.com)
🧹 Nitpick comments (4)
scripts/get-current-version.sh (1)

26-26: Quote path in grep invocation
Wrap the file path in quotes to avoid word-splitting or globbing issues.

-current_version=$(grep -E '^version\s*=' ${mydir}/../hopr/hopr-lib/Cargo.toml | awk -F\" '{print $2}')
+current_version=$(grep -E '^version\s*=' "${mydir}/../hopr/hopr-lib/Cargo.toml" | awk -F\" '{print $2}')
deploy/nfpm/uninstall.sh (1)

3-6: Make uninstall script idempotent
Failing systemctl commands (e.g., if the service is already stopped) will abort package removal. Append || true to ensure uninstall proceeds.

-systemctl disable hoprd.service
-systemctl stop hoprd.service
-systemctl daemon-reexec
-systemctl daemon-reload
+systemctl disable hoprd.service || true
+systemctl stop hoprd.service || true
+systemctl daemon-reexec || true
+systemctl daemon-reload || true
justfile (1)

31-32: Potential over-match in sed for the arch field

Blindly replacing the first arch: occurrence may mangle other YAML blocks if they are added later (e.g., a files list containing the word arch).
Use an anchored match to the begin­ning of the line to make the edit safer:

-    sed -i.bak "s/arch:.*/arch: \"{{arch}}\"/" deploy/nfpm/nfpm.yaml
+    sed -i.bak "s/^arch:.*/arch: \"{{arch}}\"/" deploy/nfpm/nfpm.yaml
deploy/nfpm/install.sh (1)

108-113: ** /etc/hoprd may not exist – envsubst will fail**

Add a guard before writing the config:

mkdir -p /etc/hoprd
envsubst < "$HOPRD_TEMPLATE_CONFIG_FILE" > "$HOPRD_CONFIG_FILE"
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d39d350 and c93cb1c.

📒 Files selected for processing (10)
  • .github/workflows/build.yaml (2 hunks)
  • .github/workflows/package.yaml (1 hunks)
  • deploy/nfpm/hoprd-template.cfg.yaml (1 hunks)
  • deploy/nfpm/hoprd.service (1 hunks)
  • deploy/nfpm/install.sh (1 hunks)
  • deploy/nfpm/nfpm.yaml (1 hunks)
  • deploy/nfpm/uninstall.sh (1 hunks)
  • justfile (1 hunks)
  • nix/ciShell.nix (1 hunks)
  • scripts/get-current-version.sh (1 hunks)
🧰 Additional context used
🪛 Shellcheck (0.10.0)
deploy/nfpm/install.sh

[warning] 31-31: In POSIX sh, 'local' is undefined.

(SC3043)


[warning] 32-32: In POSIX sh, 'local' is undefined.

(SC3043)


[warning] 36-36: In POSIX sh, 'local' is undefined.

(SC3043)


[warning] 39-39: In POSIX sh, 'local' is undefined.

(SC3043)


[warning] 62-62: HOPRD_HOST_ADDRESS appears unused. Verify use (or export if used externally).

(SC2034)


[warning] 63-63: HOPRD_HOST_PORT appears unused. Verify use (or export if used externally).

(SC2034)


[warning] 76-76: In POSIX sh, read -p is undefined.

(SC3045)


[warning] 87-87: In POSIX sh, read -p is undefined.

(SC3045)


[warning] 99-99: In POSIX sh, read -p is undefined.

(SC3045)

🪛 actionlint (1.7.7)
.github/workflows/package.yaml

22-22: label "self-hosted-hoprnet-small" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "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", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "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)


31-31: the runner of "actions/download-artifact@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


37-37: the runner of "actions/download-artifact@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


56-56: shellcheck reported issue in this script: SC1083:warning:1:18: This { is literal. Check expression (missing ;/\n?) or quote it

(shellcheck)


56-56: shellcheck reported issue in this script: SC1083:warning:1:19: This { is literal. Check expression (missing ;/\n?) or quote it

(shellcheck)


56-56: shellcheck reported issue in this script: SC1083:warning:1:35: This } is literal. Check expression (missing ;/\n?) or quote it

(shellcheck)


56-56: shellcheck reported issue in this script: SC1083:warning:1:36: This } is literal. Check expression (missing ;/\n?) or quote it

(shellcheck)

⏰ Context from checks skipped due to timeout of 90000ms (8)
  • GitHub Check: hopli / docker
  • GitHub Check: hoprd / docker
  • GitHub Check: Build Candidate Binaries (hopli)
  • GitHub Check: zizmor
  • GitHub Check: tests-unit-nightly
  • GitHub Check: Build Candidate Binaries (hoprd)
  • GitHub Check: Linter
  • GitHub Check: Cargo Audit
🔇 Additional comments (3)
nix/ciShell.nix (1)

18-18: Add nfpm to development shell
Including nfpm in the packages array ensures developers can locally build and test OS packages.

deploy/nfpm/hoprd-template.cfg.yaml (1)

1-40: No issues found in the configuration template; it aligns with the intended templating and environment substitution workflow.

deploy/nfpm/install.sh (1)

66-69: Missing runtime dependencies (openssl, netcat)

The script invokes openssl rand and nc. They are not listed in depends: of nfpm.yaml, so the package may work on the maintainer’s system but fail on vanilla servers.
Add at least openssl and netcat-openbsd (or BusyBox) to the dependency list.

Copy link
Contributor

@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

♻️ Duplicate comments (1)
.github/workflows/package.yaml (1)

62-62: Wrong interpolation – braces need the $ prefix
{{ matrix.target }} is passed literally to the shell, breaking the command.

-          just package-all {{ matrix.target }}
+          just package-all "${{ matrix.target }}"
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c93cb1c and a264d60.

📒 Files selected for processing (6)
  • .github/workflows/build-binaries.yaml (1 hunks)
  • .github/workflows/build.yaml (2 hunks)
  • .github/workflows/package.yaml (1 hunks)
  • deploy/nfpm/nfpm.yaml (1 hunks)
  • flake.nix (1 hunks)
  • justfile (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • .github/workflows/build-binaries.yaml
🚧 Files skipped from review as they are similar to previous changes (3)
  • deploy/nfpm/nfpm.yaml
  • justfile
  • .github/workflows/build.yaml
🧰 Additional context used
🪛 actionlint (1.7.7)
.github/workflows/package.yaml

22-22: label "self-hosted-hoprnet-small" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "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", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "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)

⏰ Context from checks skipped due to timeout of 90000ms (7)
  • GitHub Check: package-aarch64-linux / Package binaries (aarch64-linux)
  • GitHub Check: build-hopli-x86_64-linux / binary
  • GitHub Check: hoprd / docker
  • GitHub Check: build-hoprd-x86_64-linux / binary
  • GitHub Check: hopli / docker
  • GitHub Check: zizmor
  • GitHub Check: Cargo Audit
🔇 Additional comments (2)
flake.nix (1)

659-661: nfpm addition looks correct but remember CI parity

Including nfpm in the interactive dev shell is great, yet the CI (ciShell) and GitHub Actions packaging job rely on the same binary.
Double-check that nfpm is available to those environments (currently only the dev shell is amended). If not, replicate this extraPackages stanza in ciShell.nix or invoke nix develop inside the workflow before running just package-all.

.github/workflows/package.yaml (1)

15-29: Input vs. matrix mismatch may cause concurrency collisions

concurrency.group keys off inputs.target, but the job itself builds a fixed matrix of three targets, ignoring the input.
If callers supply a single target, you’ll get three jobs whose concurrency group is identical, leading to cancelled runs or serialisation surprises.

Either:

  • drop the target input entirely and rely solely on the matrix, or
  • populate the matrix from ${{ inputs.target }}.

Copy link
Contributor

@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

♻️ Duplicate comments (3)
.github/workflows/package.yaml (3)

30-40: Re-enable artifact download steps to use real binaries.

Commented-out actions/download-artifact steps mean you’re packaging dummy files. Restore those steps and remove temporary echo commands once real artifacts are present.


57-60: Remove dummy binary creation – use downloaded artifacts instead.

Creating placeholders undermines packaging validity. Delete these echo lines after re-enabling artifact retrieval.


61-61: Fix variable interpolation in the shell command.

Bash needs the GitHub expression syntax ${{ matrix.target }} inside quotes, not {{ matrix.target }}.

Apply:

-          nix develop -c just package-all {{ matrix.target }}
+          nix develop -c just package-all "${{ matrix.target }}"
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a264d60 and 77ad669.

📒 Files selected for processing (1)
  • .github/workflows/package.yaml (1 hunks)
🧰 Additional context used
🪛 actionlint (1.7.7)
.github/workflows/package.yaml

22-22: label "self-hosted-hoprnet-small" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "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", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "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)

⏰ Context from checks skipped due to timeout of 90000ms (5)
  • GitHub Check: build-hoprd-x86_64-linux / binary
  • GitHub Check: build-hopli-x86_64-linux / binary
  • GitHub Check: hoprd / docker
  • GitHub Check: hopli / docker
  • GitHub Check: zizmor
🔇 Additional comments (1)
.github/workflows/package.yaml (1)

22-22: Verify that the self-hosted runner label is valid.

The label self-hosted-hoprnet-small is not a default GitHub runner label. Confirm that this custom runner is registered and available, or switch to a known label.

Copy link
Contributor

@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: 4

♻️ Duplicate comments (5)
deploy/nfpm/install.sh (4)

12-15: Still fetching public IP over plain HTTP
This was flagged earlier; http://checkip.amazonaws.com is vulnerable to MITM.
Switch to a HTTPS endpoint (same host supports it).


25-34: local is not defined in POSIX sh
Persisting issue from the previous review – keeps the script from running on /bin/sh.


65-86: Interactive read -p prompts break non-interactive installs

Post-install scripts run under package managers that set DEBIAN_FRONTEND=noninteractive.
Replace prompts with:

  1. Pre-declare sensible defaults.
  2. Fail fast if required env-vars are absent.

1-1: Use Bash in shebang or drop Bash-only syntax

The script relies on local, read -p, $(( )), and [[ … ]]-style regexes, none of which are POSIX /bin/sh on Debian/Alpine (dash, busybox).
Either change the shebang:

-#!/bin/sh
+#!/usr/bin/env bash

or purge every Bash-ism.
Failing to do so aborts the post-install script and breaks package installation.

justfile (1)

34-40: Nested just calls still use literal braces

Earlier review pointed this out; ${{arch}} is expanded only once, so the inner recipe receives the literal string {{arch}} and always builds for the default arch.

Use positional parameters instead:

-just package-packager deb {{arch}}
-just package-packager rpm {{arch}}
-just package-packager apk {{arch}}
+just package-packager deb {{arch}}
+just package-packager rpm {{arch}}
+just package-packager apk {{arch}}

or rely on just’s template expansion within the called recipe (just package-packager deb {{arch}}). Verify behaviour – current form is fragile.

🧹 Nitpick comments (1)
deploy/nfpm/install.sh (1)

133-135: Missing trailing newline results in concatenated lines

Unlike the other vars, add_rpc_provider_var does not append “\n” after the provider line, producing:

HOPRD_PROVIDER=…HOPRD_API_HOST=…

Add the newline to keep the env file valid.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 77ad669 and cf74d95.

📒 Files selected for processing (10)
  • .github/workflows/build.yaml (2 hunks)
  • .github/workflows/package.yaml (1 hunks)
  • .gitignore (1 hunks)
  • deploy/nfpm/hoprd-sample.cfg.yaml (1 hunks)
  • deploy/nfpm/hoprd.initd (1 hunks)
  • deploy/nfpm/hoprd.service (1 hunks)
  • deploy/nfpm/install.sh (1 hunks)
  • deploy/nfpm/nfpm.yaml (1 hunks)
  • justfile (1 hunks)
  • scripts/download-workflow-binaries.sh (1 hunks)
✅ Files skipped from review due to trivial changes (3)
  • .gitignore
  • deploy/nfpm/hoprd.initd
  • deploy/nfpm/hoprd-sample.cfg.yaml
🚧 Files skipped from review as they are similar to previous changes (3)
  • deploy/nfpm/nfpm.yaml
  • deploy/nfpm/hoprd.service
  • .github/workflows/build.yaml
🧰 Additional context used
🪛 actionlint (1.7.7)
.github/workflows/package.yaml

24-24: label "self-hosted-hoprnet-small" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "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", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "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)

🪛 Shellcheck (0.10.0)
deploy/nfpm/install.sh

[warning] 26-26: In POSIX sh, 'local' is undefined.

(SC3043)


[warning] 27-27: In POSIX sh, 'local' is undefined.

(SC3043)


[warning] 31-31: In POSIX sh, 'local' is undefined.

(SC3043)


[warning] 34-34: In POSIX sh, 'local' is undefined.

(SC3043)


[warning] 68-68: In POSIX sh, read -p is undefined.

(SC3045)


[warning] 81-81: In POSIX sh, read -p is undefined.

(SC3045)


[warning] 95-95: In POSIX sh, read -p is undefined.

(SC3045)


[warning] 111-111: In POSIX sh, read -p is undefined.

(SC3045)


[warning] 127-127: In POSIX sh, read -p is undefined.

(SC3045)


[warning] 140-140: In POSIX sh, read -p is undefined.

(SC3045)


[warning] 155-155: In POSIX sh, read -p is undefined.

(SC3045)


[warning] 179-179: In POSIX sh, echo flags are undefined.

(SC3037)

⏰ Context from checks skipped due to timeout of 90000ms (6)
  • GitHub Check: build-hoprd-x86_64-linux / binary
  • GitHub Check: build-hopli-x86_64-linux / binary
  • GitHub Check: hopli / docker
  • GitHub Check: hoprd / docker
  • GitHub Check: zizmor
  • GitHub Check: Cargo Audit
🔇 Additional comments (3)
deploy/nfpm/install.sh (1)

168-176: /etc/hoprd may not exist – mkdir it before writing files

The script writes /etc/hoprd/hoprd.env without ensuring the directory exists.
Add mkdir -p /etc/hoprd right before the first write.

scripts/download-workflow-binaries.sh (1)

45-49: zip every platform assumes zip is installed on runner

Self-hosted machines occasionally lack zip.
Add a dependency check or install it (apt-get install -y zip / apk add zip) before use, otherwise the script aborts and the workflow fails.

.github/workflows/package.yaml (1)

58-66: Missing quotes around expression with spaces

just package ${{ inputs.target }} expands into just package armv7l-linux, i.e. two words; without quotes bash treats armv7l-linux as two args. Wrap in quotes:

run: nix develop -c just package "${{ inputs.target }}"

Copy link
Contributor

@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: 0

🧹 Nitpick comments (2)
.github/workflows/package.yaml (2)

33-44: Consider pinning download-artifact version
You’ve enabled actions/download-artifact@v3 to fetch real binaries, which fixes previous dummy-artifact issues. For consistency with other actions, you may want to pin this to a specific minor tag or commit (e.g. v3.4.0) to avoid surprises when v3.x ships breaking changes.


58-66: Clean up commented dummy-artifact lines
Now that real artifacts are downloaded, you can remove the leftover commented-out echo and ls lines to streamline the script.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cf74d95 and 046e813.

📒 Files selected for processing (2)
  • .github/workflows/build.yaml (1 hunks)
  • .github/workflows/package.yaml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/build.yaml
🧰 Additional context used
🪛 actionlint (1.7.7)
.github/workflows/package.yaml

24-24: label "self-hosted-hoprnet-small" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "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", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "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)


34-34: the runner of "actions/download-artifact@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


40-40: the runner of "actions/download-artifact@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

⏰ Context from checks skipped due to timeout of 90000ms (6)
  • GitHub Check: hoprd / docker
  • GitHub Check: hoprd-x86_64-linux / binary
  • GitHub Check: hopli / docker
  • GitHub Check: hopli-x86_64-linux / binary
  • GitHub Check: zizmor
  • GitHub Check: Cargo Audit
🔇 Additional comments (6)
.github/workflows/package.yaml (6)

18-21: Concurrency grouping looks solid
Using group: ${{ github.ref }}-package-${{ inputs.target }} prevents overlapping runs per branch & target.


23-25: Verify custom runner label
You’re using self-hosted-hoprnet-small, which actionlint flags as unknown. If this is a legitimate self-hosted label, please ensure it’s whitelisted in your actionlint.yaml or that no actionlint policy is blocking it.


27-31: Pinned checkout step is correct
Locking actions/checkout to a specific commit and disabling credential persistence for external repos is a best practice.


45-53: Nix installation step is well-configured
Pinning install-nix-action@v31 and setting nix_path ensures reproducible builds.


51-57: Cachix authentication step is good
Using a pinned cachix action and injecting CACHIX_AUTH_TOKEN covers cache security and performance.


67-83: Artifact upload steps are correct
Paths and artifact names match the target matrix and use pinned upload actions.

Copy link
Contributor

@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: 4

♻️ Duplicate comments (2)
deploy/nfpm/install.sh (2)

172-180: Include all required environment variables

generate_env_file only invokes host, password, API token, safe address, and module address functions. It must also call add_rpc_provider_var, add_hoprd_api_host_var, and add_hoprd_api_port_var before writing out the file to cover all mandatory settings.

     add_module_address_var
+    add_rpc_provider_var
+    add_hoprd_api_host_var
+    add_hoprd_api_port_var

1-4: Switch to Bash for POSIX-incompatible features

The script uses Bash-specific features (local, read -p, echo -e) but declares /bin/sh. Update the shebang to #!/usr/bin/env bash (or remove all Bashisms) to ensure compatibility and avoid “local: not found” on Debian/Alpine.

-#!/bin/sh
+#!/usr/bin/env bash
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 046e813 and 44a2eb9.

📒 Files selected for processing (4)
  • .github/workflows/package.yaml (1 hunks)
  • deploy/nfpm/hoprd.service (1 hunks)
  • deploy/nfpm/install.sh (1 hunks)
  • scripts/get-current-version.sh (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • scripts/get-current-version.sh
  • deploy/nfpm/hoprd.service
🧰 Additional context used
🪛 actionlint (1.7.7)
.github/workflows/package.yaml

24-24: label "self-hosted-hoprnet-small" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "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", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "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)


34-34: the runner of "actions/download-artifact@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


40-40: the runner of "actions/download-artifact@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

🪛 Shellcheck (0.10.0)
deploy/nfpm/install.sh

[warning] 26-26: In POSIX sh, 'local' is undefined.

(SC3043)


[warning] 27-27: In POSIX sh, 'local' is undefined.

(SC3043)


[warning] 31-31: In POSIX sh, 'local' is undefined.

(SC3043)


[warning] 34-34: In POSIX sh, 'local' is undefined.

(SC3043)


[warning] 68-68: In POSIX sh, read -p is undefined.

(SC3045)


[warning] 81-81: In POSIX sh, read -p is undefined.

(SC3045)


[warning] 95-95: In POSIX sh, read -p is undefined.

(SC3045)


[warning] 111-111: In POSIX sh, read -p is undefined.

(SC3045)


[warning] 127-127: In POSIX sh, read -p is undefined.

(SC3045)


[warning] 140-140: In POSIX sh, read -p is undefined.

(SC3045)


[warning] 155-155: In POSIX sh, read -p is undefined.

(SC3045)


[warning] 179-179: In POSIX sh, echo flags are undefined.

(SC3037)

⏰ Context from checks skipped due to timeout of 90000ms (10)
  • GitHub Check: hoprd-x86_64-linux / binary
  • GitHub Check: hoprd-armv7l-linux / binary
  • GitHub Check: hoprd-aarch64-linux / binary
  • GitHub Check: hopli-armv7l-linux / binary
  • GitHub Check: hopli-x86_64-linux / binary
  • GitHub Check: hopli-aarch64-linux / binary
  • GitHub Check: hoprd / docker
  • GitHub Check: hopli / docker
  • GitHub Check: zizmor
  • GitHub Check: Cargo Audit

Copy link
Contributor

@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: 0

🔭 Outside diff range comments (1)
.github/workflows/build-dappnode.yaml (1)

50-75: Missing GITHUB_REF_NAME output breaks later steps

steps.setup and the summary section expect steps.vars.outputs.GITHUB_REF_NAME,
but the vars step never exports that output. This leaves the variable empty and
causes:

  • incorrect branch inference in the Setup variables step (base_branch is
    empty, so the master/release/* logic is bypassed);
  • an empty “Branch:” line in the job summary.

Add the output once in each branch of the script:

-echo "source_branch=${{ github.ref_name }}" | tee -a $GITHUB_OUTPUT
+echo "source_branch=${{ github.ref_name }}" | tee -a $GITHUB_OUTPUT
+echo "GITHUB_REF_NAME=${{ github.ref_name }}" | tee -a $GITHUB_OUTPUT

(Repeat the same echo in the pull_request_target branch.)

Without this fix the version tagging and summary are silently wrong.

🧹 Nitpick comments (1)
.github/workflows/package.yaml (1)

39-46: Redundant mkdir -p invocation

./dist/bin is created twice (lines 39 and 45).
The second call is unnecessary and slightly clutters the script.

-  mkdir -p ./dist/bin
...
-  mkdir -p ./dist/bin
+  # ./dist/bin is already ensured above
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ff69f90 and ac53cb8.

📒 Files selected for processing (4)
  • .github/workflows/build-binaries.yaml (2 hunks)
  • .github/workflows/build-dappnode.yaml (3 hunks)
  • .github/workflows/build.yaml (2 hunks)
  • .github/workflows/package.yaml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • .github/workflows/build.yaml
  • .github/workflows/build-binaries.yaml
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: Teebor-Choka
PR: hoprnet/hoprnet#6886
File: nix/rust-package.nix:84-84
Timestamp: 2025-02-25T00:35:33.437Z
Learning: When transitioning from vendored dependencies to a private proxy registry in Rust projects, GitHub Actions workflows need to be refactored to accommodate the new update strategy, particularly workflows handling dependency updates like renovate-cargo-update.yaml.
Learnt from: tolbrino
PR: hoprnet/hoprnet#6502
File: flake.nix:12-14
Timestamp: 2024-09-30T08:27:16.849Z
Learning: The project already has CI workflows that automatically check for compatibility issues when updating dependencies, including compiling smart contracts with new Solidity versions, running the test suite, checking for compiler warnings or deprecation notices, and reviewing changelogs for breaking changes.
Learnt from: tolbrino
PR: hoprnet/hoprnet#6502
File: flake.nix:12-14
Timestamp: 2024-10-09T06:16:18.170Z
Learning: The project already has CI workflows that automatically check for compatibility issues when updating dependencies, including compiling smart contracts with new Solidity versions, running the test suite, checking for compiler warnings or deprecation notices, and reviewing changelogs for breaking changes.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7251
File: .github/workflows/package.yaml:66-68
Timestamp: 2025-06-19T10:10:00.368Z
Learning: In the HOPR packaging workflow (.github/workflows/package.yaml), the `just package` command creates a single distribution package that includes all binaries (hoprd and hopli) for the target architecture. The workflow downloads both hoprd and hopli artifacts, extracts them to ./dist/bin, and nfpm packages both binaries together into one .deb, .rpm, or .apk file per target.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7251
File: .github/workflows/package.yaml:0-0
Timestamp: 2025-06-19T11:37:27.410Z
Learning: In the HOPR packaging workflow (.github/workflows/package.yaml), both hoprd and hopli binaries are downloaded and used together in a single package creation process. The `just package` command creates one distribution package (.deb, .rpm, or .apk) per target that contains both binaries, which is why the workflow only uploads one package per format rather than separate packages for each binary.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#6681
File: .github/workflows/build-binaries.yaml:61-97
Timestamp: 2024-11-26T17:47:32.384Z
Learning: The code in the 'Set environment variables' step in `.github/workflows/build-binaries.yaml` is obsolete and should not be reviewed in future code reviews.
.github/workflows/build-dappnode.yaml (13)
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7191
File: .github/workflows/build-dappnode.yaml:40-40
Timestamp: 2025-05-27T16:23:08.868Z
Learning: In the hoprnet repository's GitHub workflows, labels are passed from build.yaml to build-dappnode.yaml with a trailing comma using `format('{0},', join(github.event.pull_request.labels.*.name, ','))`. Therefore, the condition checks in build-dappnode.yaml correctly use `format('package:{0},', inputs.dappnode_repository)` with a trailing comma to match the exact label format and prevent false positives.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7251
File: .github/workflows/package.yaml:28-28
Timestamp: 2025-06-19T10:07:29.649Z
Learning: In GitHub Actions reusable workflows, the github.event_name context may inherit from the parent workflow rather than being set to 'workflow_call', allowing conditions like 'github.event_name == 'pull_request'' to work correctly when the parent workflow was triggered by a pull_request event.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#6635
File: .github/workflows/build-dappnode.yaml:51-52
Timestamp: 2024-11-14T17:33:28.735Z
Learning: In the `.github/workflows/build-dappnode.yaml` file, explicit error handling for GitHub API calls is not required.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7251
File: .github/workflows/package.yaml:28-28
Timestamp: 2025-06-19T10:08:43.091Z
Learning: In GitHub Actions reusable workflows, the github context from the caller workflow is inherited by the called workflow, so github.event_name reflects the original triggering event (e.g., 'pull_request') rather than being set to 'workflow_call'. Conditions like 'github.event_name == 'pull_request'' work correctly in reusable workflows when the parent workflow was triggered by that event type.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7251
File: .github/workflows/package.yaml:28-28
Timestamp: 2025-06-19T10:07:29.649Z
Learning: In GitHub Actions reusable workflows, the github context from the caller workflow is inherited by the called workflow, so github.event_name reflects the original triggering event (e.g., 'pull_request') rather than being set to 'workflow_call'. Conditions like 'github.event_name == 'pull_request'' work correctly in reusable workflows when the parent workflow was triggered by that event type.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7251
File: .github/workflows/package.yaml:28-28
Timestamp: 2025-06-19T10:08:43.091Z
Learning: In GitHub Actions reusable workflows, the github context from the caller workflow is inherited by the called workflow, so github.event_name reflects the original triggering event (e.g., 'pull_request') rather than being set to 'workflow_call'. Conditions like 'github.event_name == 'pull_request'' work correctly in reusable workflows when the parent workflow was triggered by that event type.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#6681
File: .github/workflows/build-binaries.yaml:61-97
Timestamp: 2024-11-26T17:47:32.384Z
Learning: The code in the 'Set environment variables' step in `.github/workflows/build-binaries.yaml` is obsolete and should not be reviewed in future code reviews.
Learnt from: Teebor-Choka
PR: hoprnet/hoprnet#6886
File: nix/rust-package.nix:84-84
Timestamp: 2025-02-25T00:35:33.437Z
Learning: When transitioning from vendored dependencies to a private proxy registry in Rust projects, GitHub Actions workflows need to be refactored to accommodate the new update strategy, particularly workflows handling dependency updates like renovate-cargo-update.yaml.
Learnt from: tolbrino
PR: hoprnet/hoprnet#6502
File: flake.nix:12-14
Timestamp: 2024-10-09T06:16:18.170Z
Learning: The project already has CI workflows that automatically check for compatibility issues when updating dependencies, including compiling smart contracts with new Solidity versions, running the test suite, checking for compiler warnings or deprecation notices, and reviewing changelogs for breaking changes.
Learnt from: tolbrino
PR: hoprnet/hoprnet#6502
File: flake.nix:12-14
Timestamp: 2024-09-30T08:27:16.849Z
Learning: The project already has CI workflows that automatically check for compatibility issues when updating dependencies, including compiling smart contracts with new Solidity versions, running the test suite, checking for compiler warnings or deprecation notices, and reviewing changelogs for breaking changes.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#6640
File: .github/workflows/load-tests.yaml:13-15
Timestamp: 2024-11-18T10:01:11.871Z
Learning: In GitHub Actions workflows, inputs under `workflow_call` do not support the `enum` property; this property is only available under `workflow_dispatch`.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#6681
File: .github/workflows/build-binaries.yaml:0-0
Timestamp: 2024-11-26T17:47:21.777Z
Learning: In `.github/workflows/build-binaries.yaml`, when writing shell scripts in GitHub Actions workflows, the user prefers to set environment variables individually rather than grouping them together.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7191
File: .github/workflows/add-labels.yaml:49-57
Timestamp: 2025-05-27T16:21:03.705Z
Learning: GitHub CLI (gh) accepts GITHUB_TOKEN as an environment variable for authentication in GitHub Actions workflows, not just GH_TOKEN. The environment variable GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} works correctly with gh commands like "gh pr edit".
.github/workflows/package.yaml (26)
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7251
File: .github/workflows/package.yaml:66-68
Timestamp: 2025-06-19T10:10:00.368Z
Learning: In the HOPR packaging workflow (.github/workflows/package.yaml), the `just package` command creates a single distribution package that includes all binaries (hoprd and hopli) for the target architecture. The workflow downloads both hoprd and hopli artifacts, extracts them to ./dist/bin, and nfpm packages both binaries together into one .deb, .rpm, or .apk file per target.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7251
File: .github/workflows/package.yaml:0-0
Timestamp: 2025-06-19T11:37:27.410Z
Learning: In the HOPR packaging workflow (.github/workflows/package.yaml), both hoprd and hopli binaries are downloaded and used together in a single package creation process. The `just package` command creates one distribution package (.deb, .rpm, or .apk) per target that contains both binaries, which is why the workflow only uploads one package per format rather than separate packages for each binary.
Learnt from: Teebor-Choka
PR: hoprnet/hoprnet#6886
File: nix/rust-package.nix:84-84
Timestamp: 2025-02-25T00:35:33.437Z
Learning: When transitioning from vendored dependencies to a private proxy registry in Rust projects, GitHub Actions workflows need to be refactored to accommodate the new update strategy, particularly workflows handling dependency updates like renovate-cargo-update.yaml.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7251
File: .github/workflows/package.yaml:28-28
Timestamp: 2025-06-19T10:07:29.649Z
Learning: In GitHub Actions reusable workflows, the github.event_name context may inherit from the parent workflow rather than being set to 'workflow_call', allowing conditions like 'github.event_name == 'pull_request'' to work correctly when the parent workflow was triggered by a pull_request event.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7191
File: .github/workflows/build-dappnode.yaml:40-40
Timestamp: 2025-05-27T16:23:08.868Z
Learning: In the hoprnet repository's GitHub workflows, labels are passed from build.yaml to build-dappnode.yaml with a trailing comma using `format('{0},', join(github.event.pull_request.labels.*.name, ','))`. Therefore, the condition checks in build-dappnode.yaml correctly use `format('package:{0},', inputs.dappnode_repository)` with a trailing comma to match the exact label format and prevent false positives.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7191
File: .github/workflows/open-pr.yaml:83-95
Timestamp: 2025-06-30T08:36:01.702Z
Learning: The self-hosted-hoprnet-small runners in the hoprnet repository have GitHub CLI (gh) pre-installed and available for use in workflows.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#6681
File: .github/workflows/build-binaries.yaml:61-97
Timestamp: 2024-11-26T17:47:32.384Z
Learning: The code in the 'Set environment variables' step in `.github/workflows/build-binaries.yaml` is obsolete and should not be reviewed in future code reviews.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#6681
File: .github/workflows/build-binaries.yaml:0-0
Timestamp: 2024-11-26T17:47:21.777Z
Learning: In `.github/workflows/build-binaries.yaml`, when writing shell scripts in GitHub Actions workflows, the user prefers to set environment variables individually rather than grouping them together.
Learnt from: tolbrino
PR: hoprnet/hoprnet#6502
File: flake.nix:12-14
Timestamp: 2024-09-30T08:27:16.849Z
Learning: The project already has CI workflows that automatically check for compatibility issues when updating dependencies, including compiling smart contracts with new Solidity versions, running the test suite, checking for compiler warnings or deprecation notices, and reviewing changelogs for breaking changes.
Learnt from: tolbrino
PR: hoprnet/hoprnet#6502
File: flake.nix:12-14
Timestamp: 2024-10-09T06:16:18.170Z
Learning: The project already has CI workflows that automatically check for compatibility issues when updating dependencies, including compiling smart contracts with new Solidity versions, running the test suite, checking for compiler warnings or deprecation notices, and reviewing changelogs for breaking changes.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7191
File: .github/workflows/open-pr.yaml:34-43
Timestamp: 2025-06-30T08:33:20.974Z
Learning: In the hoprnet repository, the maintainer ausias-armesto prefers to add commit types to the semantic PR validation workflow incrementally as needed, rather than preemptively adding all possible types. This conservative approach keeps the workflow configuration lean.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#6635
File: .github/workflows/build-dappnode.yaml:51-52
Timestamp: 2024-11-14T17:33:28.735Z
Learning: In the `.github/workflows/build-dappnode.yaml` file, explicit error handling for GitHub API calls is not required.
Learnt from: tolbrino
PR: hoprnet/hoprnet#7070
File: nix/testShell.nix:22-23
Timestamp: 2025-04-15T19:24:23.570Z
Learning: In the HOPR project, the `autoPatchelf` command from Nix can handle the case where the target directory (like ./.venv) doesn't exist, so no additional directory existence check is needed before running it.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7251
File: .github/workflows/package.yaml:28-28
Timestamp: 2025-06-19T10:07:29.649Z
Learning: In GitHub Actions reusable workflows, the github context from the caller workflow is inherited by the called workflow, so github.event_name reflects the original triggering event (e.g., 'pull_request') rather than being set to 'workflow_call'. Conditions like 'github.event_name == 'pull_request'' work correctly in reusable workflows when the parent workflow was triggered by that event type.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7251
File: .github/workflows/package.yaml:28-28
Timestamp: 2025-06-19T10:08:43.091Z
Learning: In GitHub Actions reusable workflows, the github context from the caller workflow is inherited by the called workflow, so github.event_name reflects the original triggering event (e.g., 'pull_request') rather than being set to 'workflow_call'. Conditions like 'github.event_name == 'pull_request'' work correctly in reusable workflows when the parent workflow was triggered by that event type.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7251
File: .github/workflows/package.yaml:28-28
Timestamp: 2025-06-19T10:08:43.091Z
Learning: In GitHub Actions reusable workflows, the github context from the caller workflow is inherited by the called workflow, so github.event_name reflects the original triggering event (e.g., 'pull_request') rather than being set to 'workflow_call'. Conditions like 'github.event_name == 'pull_request'' work correctly in reusable workflows when the parent workflow was triggered by that event type.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#6640
File: .github/workflows/load-tests.yaml:13-15
Timestamp: 2024-11-18T10:01:11.871Z
Learning: In GitHub Actions workflows, inputs under `workflow_call` do not support the `enum` property; this property is only available under `workflow_dispatch`.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7191
File: .github/workflows/add-labels.yaml:49-57
Timestamp: 2025-05-27T16:21:03.705Z
Learning: GitHub CLI (gh) accepts GITHUB_TOKEN as an environment variable for authentication in GitHub Actions workflows, not just GH_TOKEN. The environment variable GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} works correctly with gh commands like "gh pr edit".
Learnt from: Teebor-Choka
PR: hoprnet/hoprnet#6972
File: .github/workflows/audit-pr.yaml:25-32
Timestamp: 2025-04-02T11:36:56.281Z
Learning: For HOPR projects, auditing tools like cargo-audit should be managed through the Nix environment rather than installed separately to ensure consistency and reproducibility.
Learnt from: Teebor-Choka
PR: hoprnet/hoprnet#7142
File: .github/labeler.yml:95-106
Timestamp: 2025-05-26T22:04:22.750Z
Learning: In .github/labeler.yml, both legacy crate labels (like hopr-path, hopr-platform) and new crate labels (like hopr-chain-actions, hopr-chain-api) can coexist in the same file. When new crate labels are added, it doesn't necessarily mean old ones are deprecated or should be removed.
Learnt from: Teebor-Choka
PR: hoprnet/hoprnet#6545
File: transport/p2p/src/swarm.rs:491-494
Timestamp: 2024-10-11T10:43:34.869Z
Learning: When reviewing revert pull requests in the `hoprnet/hoprnet` repository, avoid making code recommendations or suggestions.
Learnt from: mjadach-iv
PR: hoprnet/hoprnet#6663
File: deploy/compose/.env.sample:57-57
Timestamp: 2024-11-21T13:58:22.345Z
Learning: In code reviews for this project, focus comments on the changes made in the PR, and avoid discussing unrelated code.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7251
File: deploy/nfpm/install.sh:68-68
Timestamp: 2025-06-19T10:11:36.259Z
Learning: In the HOPR project, the user ausias-armesto prefers interactive installation prompts that give users full control over configuration rather than automated defaults, especially for initial versions of installation scripts.
Learnt from: ausias-armesto
PR: hoprnet/hoprnet#7251
File: README.md:166-171
Timestamp: 2025-06-30T10:14:33.643Z
Learning: The maintainer ausias-armesto prefers to keep environment variable configuration steps directly within installation instructions rather than separating them into different sections, as demonstrated with the Alpine package manager installation section in the README.md.
Learnt from: tolbrino
PR: hoprnet/hoprnet#6399
File: common/primitive-types/Cargo.toml:24-24
Timestamp: 2024-11-01T09:32:55.651Z
Learning: In the hoprnet project, dependency versions are defined in the workspace Cargo.toml, so it's not necessary to specify them in individual package Cargo.toml files.
Learnt from: tolbrino
PR: hoprnet/hoprnet#6399
File: db/entity/Cargo.toml:4-4
Timestamp: 2024-10-21T14:58:45.665Z
Learning: In the HOPR project, crate versions are intentionally kept separate and do not need to be aligned across related packages.
🪛 actionlint (1.7.7)
.github/workflows/package.yaml

26-26: label "self-hosted-hoprnet-small" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "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", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "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)

⏰ Context from checks skipped due to timeout of 90000ms (8)
  • GitHub Check: tests-unit-nightly
  • GitHub Check: tests-unit
  • GitHub Check: hoprd / docker
  • GitHub Check: hopli / docker
  • GitHub Check: Docs / Rust
  • GitHub Check: Audit / Audit
  • GitHub Check: Zizmor / Zizmor
  • GitHub Check: Lint / Lint
🔇 Additional comments (1)
.github/workflows/package.yaml (1)

36-68: jq/unzip may be missing on the self-hosted runner

The download step relies on both jq and unzip, but the custom runner
self-hosted-hoprnet-small isn’t guaranteed to have them.
A missing binary will surface as a cryptic “command not found” failure.

Consider installing them defensively:

- run: |
    set -euo pipefail
+   command -v jq >/dev/null 2>&1 || sudo apt-get update && sudo apt-get install -y jq
+   command -v unzip >/dev/null 2>&1 || sudo apt-get update && sudo apt-get install -y unzip
    mkdir -p ./dist/bin
    

Alternatively, document the requirement in the runner bootstrap script.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
binary:x86_64-linux Build x86_64-linux binary toolchain Developer and product happiness
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Create OS packages for publishing and distributing hoprnet
2 participants