Skip to content

Conversation

@raptorsun
Copy link
Contributor

@raptorsun raptorsun commented Nov 26, 2025

Summary by CodeRabbit

  • New Features

    • Added ARM64 (linux-mxlarge/arm64) as a build target; builds now produce multi-architecture artifacts for x86_64 and aarch64.
  • Chores

    • Split the single pinned dependency manifest into separate architecture-specific manifests (x86_64 and aarch64).
    • Added a Make target to regenerate both platform-specific dependency lists.
  • Documentation

    • Added docs describing hermetic, platform-specific dependency files and regeneration instructions.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Nov 26, 2025

Note

.coderabbit.yaml has unrecognized properties

CodeRabbit is using all valid settings from your configuration. Unrecognized properties (listed below) have been ignored and may indicate typos or deprecated fields that can be removed.

⚠️ Parsing warnings (1)
Validation error: Unrecognized key(s) in object: 'profile'
⚙️ Configuration instructions
  • Please see the configuration documentation for more information.
  • You can also validate your configuration using the online YAML validator.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Walkthrough

Adds multi-arch support by introducing architecture-specific pinned Python requirements (requirements.x86_64.txt, requirements.aarch64.txt), removes the previous requirements.txt, updates the Containerfile to install per-arch requirements, adds a Makefile target to generate them, and enables arm64 in Tekton build-platforms and prefetch inputs.

Changes

Cohort / File(s) Summary
Tekton CI/CD configuration
'.tekton/dataverse-exporter-pull-request.yaml', '.tekton/dataverse-exporter-push.yaml', '.tekton/lightspeed-to-dataverse-exporter-pull-request.yaml', '.tekton/lightspeed-to-dataverse-exporter-push.yaml'
Add linux-mxlarge/arm64 (and linux/x86_64) to build-platforms; change prefetch-input to reference requirements.x86_64.txt and requirements.aarch64.txt instead of requirements.txt.
Container build configuration
Containerfile
COPY now includes requirements.*.txt; pip install uses -r requirements.$(uname -m).txt to select architecture-specific requirements.
Dependency manifests
requirements.x86_64.txt, requirements.aarch64.txt, requirements.txt
Add autogenerated, pinned per-architecture manifests requirements.x86_64.txt and requirements.aarch64.txt; remove the previous requirements.txt.
Build tooling & docs
Makefile, README.md
Add requirements Make target that generates per-arch requirements via uv pip compile; update README with hermetic build / per-arch requirements documentation.

Possibly related PRs

Suggested reviewers

  • matysek

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title clearly and specifically describes the main change: enabling ARM builds in Konflux by adding linux-mxlarge/arm64 platform support across all build configuration files.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Tip

📝 Customizable high-level summaries are now available in beta!

You can now customize how CodeRabbit generates the high-level summary in your pull requests — including its content, structure, tone, and formatting.

  • Provide your own instructions using the high_level_summary_instructions setting.
  • Format the summary however you like (bullet lists, tables, multi-section layouts, contributor stats, etc.).
  • Use high_level_summary_in_walkthrough to move the summary from the description to the walkthrough section.

Example instruction:

"Divide the high-level summary into five sections:

  1. 📝 Description — Summarize the main change in 50–60 words, explaining what was done.
  2. 📓 References — List relevant issues, discussions, documentation, or related PRs.
  3. 📦 Dependencies & Requirements — Mention any new/updated dependencies, environment variable changes, or configuration updates.
  4. 📊 Contributor Summary — Include a Markdown table showing contributions:
    | Contributor | Lines Added | Lines Removed | Files Changed |
  5. ✔️ Additional Notes — Add any extra reviewer context.
    Keep each section concise (under 200 words) and use bullet or numbered lists for clarity."

Note: This feature is currently in beta for Pro-tier users, and pricing will be announced later.


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

@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)
requirements.x86_64.txt (1)

1-205: Autogenerated lockfile looks consistent; keep it tool-managed

The uv header plus fully hashed pins look good. Just keep treating this as generated output (no manual edits) and re-run uv pip compile when pyproject.toml changes so x86_64 stays in sync with the aarch64 lockfile.

requirements.aarch64.txt (1)

1-431: Cross-arch dependency versions are skewed; decide if that’s intentional

The aarch64 lockfile is well-formed, but it doesn’t match x86_64 for several key packages (examples: kubernetes 34.1.0 vs 33.1.0, requests 2.32.5 vs 2.32.4, pydantic 2.12.5 vs 2.11.7, rich 14.2.0 vs 14.1.0, urllib3 2.3.0 vs 2.5.0).

If you want identical behavior across architectures, consider re-running uv pip compile for both platforms in a single sweep so they converge on the same versions where possible; otherwise, it’s worth explicitly acknowledging that aarch64 may be running slightly different dependency stacks than x86_64.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 92fe242 and 0d5b67a.

📒 Files selected for processing (6)
  • .tekton/dataverse-exporter-pull-request.yaml (1 hunks)
  • .tekton/dataverse-exporter-push.yaml (1 hunks)
  • Containerfile (1 hunks)
  • requirements.aarch64.txt (1 hunks)
  • requirements.txt (0 hunks)
  • requirements.x86_64.txt (1 hunks)
💤 Files with no reviewable changes (1)
  • requirements.txt
🧰 Additional context used
🪛 GitHub Actions: Build and validate image for PR
Containerfile

[error] 1-1: COPY pyproject.toml LICENSE README.md requirements.txt ./ failed: stat: '/requirements.txt' not found in build context. buildah exited with code 125.

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Konflux kflux-prd-rh02 / dataverse-exporter-on-pull-request
🔇 Additional comments (3)
.tekton/dataverse-exporter-pull-request.yaml (1)

30-38: Build platforms and prefetch-input wiring for ARM look consistent

Adding linux-mxlarge/arm64 to build-platforms and pointing prefetch-input at both requirements.x86_64.txt and requirements.aarch64.txt matches the new per-arch dependency layout. Just make sure your Konflux/multi-platform-controller setup actually has a linux-mxlarge/arm64 builder available so these matrix builds don’t get stuck waiting for capacity.

.tekton/dataverse-exporter-push.yaml (1)

27-35: Push pipeline ARM platform and prefetch configuration match PR pipeline

The push PipelineRun now mirrors the PR pipeline: linux-mxlarge/arm64 in build-platforms and prefetch configured with both per-arch requirements files. That keeps CI behavior consistent across PR and push.

Just as for the PR pipeline, please confirm that linux-mxlarge/arm64 is a valid platform in your Konflux setup so multi-arch builds actually run.

Containerfile (1)

20-27: I apologize, but I'm unable to proceed with verification due to persistent repository access issues. The repository lightspeed-core/lightspeed-to-dataverse-exporter cannot be cloned, and it's not publicly indexed, which prevents me from:

  • Examining the actual Containerfile content
  • Confirming the presence or absence of requirements.txt and per-arch requirements files
  • Verifying the build failure mentioned in the review
  • Validating whether the suggested fix is appropriate

To complete this verification, I would need one of the following:

  1. Repository access: Permission to clone the private repository
  2. Direct context: The pull request URL, commit hash, or build logs showing the actual failure
  3. File contents: You could paste the current Containerfile and list of files in the build context

Without this information, I cannot definitively verify whether the review comment is accurate or needs adjustment.

Signed-off-by: Haoyu Sun <[email protected]>
Copy link

@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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
Makefile (1)

1-1: Add requirements target to .PHONY declaration.

The new requirements target (lines 53–55) is not listed in the .PHONY declaration. This can cause issues if a file named requirements exists in the repo.

-.PHONY: help install install-dev format lint test test-cov check build run-container build-and-push deploy clean-deployment-stage
+.PHONY: help install install-dev format lint test test-cov check build run-container build-and-push deploy clean-deployment-stage requirements
🧹 Nitpick comments (1)
Makefile (1)

53-55: Clarify when the requirements target is invoked and document its integration.

This target generates architecture-specific pinned dependencies, which are referenced by the Tekton pipeline. Clarify:

  • Whether these files should be pre-generated and committed to the repo, or generated on-demand during the build
  • Whether the pipeline or pre-commit hooks should call this target
  • Whether developers need to run make requirements manually after updating pyproject.toml

Consider adding inline documentation in the Makefile or a note in CONTRIBUTING.md.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 75ce0cf and bf2fa6c.

📒 Files selected for processing (10)
  • .tekton/dataverse-exporter-pull-request.yaml (1 hunks)
  • .tekton/dataverse-exporter-push.yaml (1 hunks)
  • .tekton/lightspeed-to-dataverse-exporter-pull-request.yaml (1 hunks)
  • .tekton/lightspeed-to-dataverse-exporter-push.yaml (1 hunks)
  • Containerfile (1 hunks)
  • Makefile (1 hunks)
  • README.md (1 hunks)
  • requirements.aarch64.txt (1 hunks)
  • requirements.txt (0 hunks)
  • requirements.x86_64.txt (1 hunks)
💤 Files with no reviewable changes (1)
  • requirements.txt
✅ Files skipped from review due to trivial changes (2)
  • requirements.aarch64.txt
  • README.md
🚧 Files skipped from review as they are similar to previous changes (5)
  • .tekton/dataverse-exporter-pull-request.yaml
  • .tekton/lightspeed-to-dataverse-exporter-push.yaml
  • Containerfile
  • requirements.x86_64.txt
  • .tekton/dataverse-exporter-push.yaml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Red Hat Konflux / lightspeed-to-dataverse-exporter-on-pull-request
  • GitHub Check: Konflux kflux-prd-rh02 / dataverse-exporter-on-pull-request
🔇 Additional comments (3)
.tekton/lightspeed-to-dataverse-exporter-pull-request.yaml (2)

32-39: Clarify the build flow and timing of architecture-specific requirements files.

The pipeline references requirements.x86_64.txt and requirements.aarch64.txt, which are generated by the new requirements Makefile target. Ensure these files are generated before the pipeline runs (e.g., committed to the repo, generated in pipeline setup, or pre-generated locally). If they're generated during the pipeline, this dependency must be explicit in the task DAG.

Do the generated requirements*.txt files need to be committed to the repository, or are they generated as part of the build process (e.g., in a pipeline init task)?


33-33: I'll help you verify this review comment about the Tekton YAML file. Let me start by examining the file and searching for the relevant task definition.
<function_calls>

Tekton prefetch-dependencies task documentation requirements_files parameter

</function_calls>

Now let me examine the actual Tekton YAML file and search for the task definition:
<function_calls>

#!/bin/bash

First, find and examine the Tekton file

fd -t f "lightspeed-to-dataverse-exporter-pull-request.yaml" 2>/dev/null | head -5


</function_calls>

Makefile (1)

53-55: Verification confirms the code is correct — uv supports both flags and the platform identifiers.

uv pip compile explicitly supports --python-platform with Rust-style target triples (including x86_64-unknown-linux-gnu and aarch64-unknown-linux-gnu), and --generate-hashes works as expected for hermetic builds. Unlike standard pip-compile which expects PEP-425 platform tags, uv abstracts away this detail and accepts target triple notation directly.

Comment on lines +36 to +39
- name: build-platforms
value:
- linux/x86_64
- linux-mxlarge/arm64
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🌐 Web query:

Konflux build platforms ARM64 tekton pipeline valid identifiers

💡 Result:

Use the platform strings that Konflux’s Multi Platform Controller expects (the PLATFORM Task parameter). Common valid identifiers are the OS/ARCH form, for example:

  • linux/arm64
  • linux/amd64
  • linux/ppc64le
  • linux/s390x
  • darwin/arm64 (macOS Apple Silicon)

Examples from the Konflux docs show PLATFORM values like linux/arm64 and host entries using the same form; Konflux also appears in pipelines adding arm64 builds. [1][2]

References

  • Konflux Multi Platform Controller docs (platform examples and ConfigMap entries). [1]
  • OpenShift release notes mentioning Konflux arm64 builds in pipelines. [2]

🏁 Script executed:

# Search for other build-platforms configurations in the repository
fd -e yaml -e yml | xargs grep -l "build-platforms" | head -20

Repository: lightspeed-core/lightspeed-to-dataverse-exporter

Length of output: 240


🌐 Web query:

Konflux linux/x86_64 vs linux/amd64 platform identifier accepted formats

💡 Result:

Konflux expects OCI/Go-style platform identifiers (GOOS/GOARCH) — e.g. linux/amd64, linux/arm64, linux/ppc64le — in its platform/config fields. You will still see x86_64 in RPM/repo contexts (package metadata, lockfiles), but Konflux config examples and the multi-platform controller use linux/amd64 (not linux/x86_64). [1][2][3]

Sources:

  • Konflux multi-platform controller example (uses linux/amd64, linux/ppc64le). [1]
  • Konflux docs (architecture / add-ons) describing supported platforms (amd64, arm64). [2]
  • Konflux RPM lockfile docs (uses x86_64 in RPM paths/metadata). [3]

Correct the build-platforms identifiers to match Konflux's OCI/Go-style format.

The declared platforms do not conform to Konflux's platform identifier standard (GOOS/GOARCH):

  • linux/x86_64 should be linux/amd64
  • linux-mxlarge/arm64 should be linux/arm64

Konflux expects identifiers like linux/amd64, linux/arm64, linux/ppc64le, not x86_64 or descriptors like mxlarge.

  - name: build-platforms
    value:
    - linux/amd64
    - linux/arm64
🤖 Prompt for AI Agents
In .tekton/lightspeed-to-dataverse-exporter-pull-request.yaml around lines 36 to
39, the build-platforms values use non-standard identifiers (linux/x86_64 and
linux-mxlarge/arm64); replace them with Konflux/Go-style GOOS/GOARCH identifiers
by changing linux/x86_64 to linux/amd64 and linux-mxlarge/arm64 to linux/arm64
so the pipeline uses valid platform names.

@raptorsun
Copy link
Contributor Author

This PR is ready to review, completing the hermetic build on ARM platform, too.
@onmete Please have a look 🙋‍♂️

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.

1 participant