Skip to content

Add LVGL submodule to unix port and tidy up actions#1

Merged
minyiky merged 16 commits into
masterfrom
minyiky/add-lvgl
Sep 13, 2025
Merged

Add LVGL submodule to unix port and tidy up actions#1
minyiky merged 16 commits into
masterfrom
minyiky/add-lvgl

Conversation

@minyiky

@minyiky minyiky commented Aug 17, 2025

Copy link
Copy Markdown
Owner

Summary

I have added in the lv_micropython_bindings as a new submodule under user_modules to allow firmware built this way to be used in the unix simulator.

Additionally I have updated some actions with the following changes

  • Removed unneeded actions
  • Added PR Hygiene actions
  • Added a container build action
  • Added auto tagging of the repo (may change later to follow mp versioning)

@github-actions

Copy link
Copy Markdown

Code size report:

   bare-arm:    +0 +0.000% 
minimal x86:    +0 +0.000% 
   unix x64:    +0 +0.000% standard
      stm32:    +0 +0.000% PYBV10
     mimxrt:    +0 +0.000% TEENSY40
        rp2:    +0 +0.000% RPI_PICO_W
       samd:    +0 +0.000% ADAFRUIT_ITSYBITSY_M4_EXPRESS
  qemu rv32:    +0 +0.000% VIRT_RV32

@minyiky

minyiky commented Aug 17, 2025

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 17, 2025

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

This comment was marked as off-topic.

@minyiky

minyiky commented Aug 17, 2025

Copy link
Copy Markdown
Owner Author

https://github.com/coderabbitai review

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 9

🔭 Outside diff range comments (2)
.github/workflows/ports_unix.yml (1)

8-18: Include user_modules/ in PR path filters so LVGL submodule changes trigger unix CI**

Given the new LVGL submodule under user_modules/, PRs updating that pointer won’t trigger this workflow. Add the path to ensure coverage.

   pull_request:
     paths:
       - '.github/workflows/*.yml'
       - 'tools/**'
       - 'py/**'
       - 'extmod/**'
       - 'shared/**'
       - 'lib/**'
+      - 'user_modules/**'
       - 'examples/**'
       - 'mpy-cross/**'
       - 'ports/unix/**'
       - 'tests/**'
.github/workflows/ruff.yml (1)

20-20: Formatting step won’t fail CI on unformatted files

'ruff format --diff' prints a diff but exits zero; use '--check' to fail when changes are needed.

Apply this diff:

-    - run: ruff format --diff .
+    - run: ruff format --check .
🧹 Nitpick comments (29)
.github/dependabot.yml (1)

7-7: Weekly cadence looks good; consider pinning day/time and grouping to reduce PR noise

Weekly is a sensible interval for GitHub Actions. For predictability and lower noise, consider setting a specific day/time/timezone and grouping all actions into a single weekly PR, plus adding labels and a cap on concurrent PRs.

   - package-ecosystem: "github-actions"
     directory: "/"
     schedule:
-      interval: "weekly"
+      interval: "weekly"
+      day: "monday"
+      time: "04:00"
+      timezone: "UTC"
+    open-pull-requests-limit: 5
+    labels: ["dependencies", "github-actions"]
+    groups:
+      actions:
+        patterns:
+          - "*"
.github/workflows/ports_webassembly.yml (1)

5-6: Add user_modules/ to PR path filters so LVGL submodule changes trigger builds.**
Right now, this workflow won’t run on PRs that only bump the LVGL submodule (user_modules/lv_binding_micropython) because that path isn’t included in pull_request.paths. Recommend adding it if you want WebAssembly CI to validate such changes.

Example:

pull_request:
  paths:
    - '...'
    - 'user_modules/**'
.github/workflows/ports_rp2.yml (1)

5-6: Ensure LVGL submodule changes can trigger this workflow when relevant.
If you expect RP2 CI to validate changes to user_modules/lv_binding_micropython (e.g., when updating bindings used in examples or shared code), include that path in pull_request.paths. Otherwise PRs that only adjust the submodule pointer won’t trigger this workflow.

Example:

pull_request:
  paths:
    - '...'
    - 'user_modules/**'
user_modules/lv_binding_micropython (2)

1-1: Optional: speed up CI by using shallow submodule checkout

For large CI matrices, consider shallow submodule clones to reduce checkout time, unless you rely on submodule history/tags.

Add in your actions/checkout steps:

- uses: actions/checkout@v4
  with:
    submodules: recursive
    fetch-depth: 0         # keep 0 if your build needs tags/describe; otherwise consider 1
    # For shallow submodules (supported by Git >=2.9):
    # set in .gitmodules per submodule:
    #   [submodule "user_modules/lv_binding_micropython"]
    #     shallow = true

1-1: Optional: document update policy for the submodule

You’re pinned to a commit, which is good for determinism. To ease maintenance, document how/when you’ll bump this pointer (e.g., align with MicroPython versioning or LVGL releases), and consider adding a lightweight check in CI that reminds when upstream tags advance.

Example maintenance note for CONTRIBUTING.md:

  • We track lv_binding_micropython by pinned commit.
  • To update: git submodule update --remote -- user_modules/lv_binding_micropython; validate build; then commit the new gitlink.
  • We avoid tracking a moving branch to keep builds reproducible.
.github/workflows/docs.yml (1)

27-29: Pin the Python version for reproducible doc builds

Unpinned Python can introduce churn as ubuntu-latest advances. Consider pinning a stable 3.x.

Apply:

-    - uses: actions/setup-python@v5
+    - uses: actions/setup-python@v5
+      with:
+        python-version: '3.11'
.github/workflows/ports_unix.yml (1)

28-28: If/when building LVGL unix variants here, ensure submodules are fetched

actions/checkout doesn’t fetch submodules by default. If a future job in this workflow builds with user_modules content (e.g., LVGL), add submodules: recursive.

-    - uses: actions/checkout@v4
+    - uses: actions/checkout@v4
+      with:
+        submodules: recursive

Repeat for any jobs that depend on user_modules.

.github/workflows/code_size.yml (1)

27-27: Runner uplift to ubuntu-latest: double-check toolchain compatibility

Some size builds pull older toolchains/libs; ubuntu-latest (currently 24.04) can surface incompatibilities (e.g., Python 3.12 defaults, libffi variants). If flakiness appears, pin to 22.04.

Optionally pin:

-    runs-on: ubuntu-latest
+    runs-on: ubuntu-22.04
.github/workflows/ports_stm32.yml (1)

5-6: Push restricted to master — confirm default branch and consider tag/manual triggers

If the repo’s default branch is not named “master”, this workflow won’t run on pushes. Also, consider running on tags for releases and allowing manual dispatch.

Proposed update:

 on:
   push:
     branches:
       - master
+    tags:
+      - 'v*'
+  workflow_dispatch:
   pull_request:
     paths:
       - '.github/workflows/*.yml'
.github/workflows/ports.yml (1)

5-6: Limit to master is fine; consider tags/manual runs for releases and hotfixes

As above, add tag and manual dispatch triggers if you want this to run for version tags or ad-hoc runs.

Proposed update:

 on:
   push:
     branches:
       - master
+    tags:
+      - 'v*'
+  workflow_dispatch:
   pull_request:
     paths:
       - '.github/workflows/*.yml'
ports/unix/variants/lvgl/mpconfigvariant.mk (1)

1-4: Tighten comment accuracy and make variable style consistent

Clarify the variant comment (this isn’t the default) and prefer $(TOP) for consistency with the rest of the build system.

Apply this diff:

-# This is the default variant when you `make` the Unix port.
+# LVGL-specific variant configuration for the Unix port.

 FROZEN_MANIFEST ?= $(VARIANT_DIR)/manifest.py
-USER_C_MODULES ?= ${TOP}/user_modules
+USER_C_MODULES ?= $(TOP)/user_modules
.github/workflows/codespell.yml (2)

3-7: Fix trailing spaces to satisfy yamllint

YAMLlint flagged trailing spaces on Line 3 and Line 5.

-on: 
+on:
   push:
-    branches: 
+    branches:
       - master

13-16: Ensure Python toolchain is available and avoid PATH issues with pip --user

Using pip with --user can place binaries outside PATH in GitHub runners. Also, pinning a Python version improves reproducibility. Recommend adding setup-python and installing without --user. While here, exclude the auto-generated lextab.py from codespell to reduce noise.

     steps:
     - uses: actions/checkout@v4
+    - uses: actions/setup-python@v5
+      with:
+        python-version: '3.11'
     # codespell version should be kept in sync with .pre-commit-config.yml
-    - run: pip install --user codespell==2.4.1 tomli
-    - run: codespell
+    - run: python -m pip install --upgrade pip && python -m pip install codespell==2.4.1 tomli
+    - run: codespell -S "ports/unix/lextab.py"
examples/lvgl.py (1)

22-23: Reduce sleep interval to keep the UI responsive

Sleeping for 100 seconds can make the process sluggish to interrupt and less responsive. A shorter interval maintains liveness without busy-waiting.

-while True:
-    time.sleep(100)
+while True:
+    time.sleep(1)
.github/workflows/code_formatting.yml (2)

3-7: Remove trailing space to appease yamllint

YAMLlint flagged trailing spaces on Line 5.

 on:
   push:
-    branches: 
+    branches:
       - master

18-24: Pin Python version and ensure Bash shell for sourced scripts

Pinning Python stabilises tooling, and explicitly using Bash avoids shells that don't support source.

     - uses: actions/setup-python@v5
+      with:
+        python-version: '3.11'
     - name: Install packages
-      run: source tools/ci.sh && ci_c_code_formatting_setup
+      shell: bash
+      run: source tools/ci.sh && ci_c_code_formatting_setup
     - name: Run code formatting
-      run: source tools/ci.sh && ci_c_code_formatting_run
+      shell: bash
+      run: source tools/ci.sh && ci_c_code_formatting_run
ports/unix/lextab.py (1)

1-3: Exclude auto-generated lextab.py from spell checks/formatters

Auto-generated files are noisy for linters/formatters. Consider excluding ports/unix/lextab.py in codespell and any formatting tools to avoid churn.

If you agree, the earlier codespell.yml suggestion already excludes it:

  • Change: codespell -> codespell -S "ports/unix/lextab.py"
.github/workflows/pr_hygene.yml (2)

1-11: File name typo: prefer pr_hygiene.yml for consistency and discoverability

The workflow name uses “Hygiene”, but the filename is “pr_hygene.yml”. Consider renaming the file to “.github/workflows/pr_hygiene.yml”.


9-11: Ensure the version check has the context it needs

The Makefile’s check runs a remote tags comparison. It should work as-is, but to be robust on forks and shallow clones, consider explicitly fetching tags or asserting the remote exists before the check.

Apply this minimal hardening:

   - uses: actions/checkout@v4
   - name: Check the version has been updated
-    run: make check-version-update
+    run: |
+      git remote -v
+      make check-version-update
.dockerignore (2)

29-29: Ignoring user_modules blocks copying submodule content into build context (intentional?)

Given the Dockerfile runs “git submodule update …” inside the build, excluding user_modules is fine. If you ever want offline builds or to use pre-populated submodules in context, remove this ignore or narrow it (e.g., ignore everything except lv_binding_micropython).

Possible selective allow-list:

 user_modules/
+!user_modules/lv_binding_micropython

17-28: Nit: duplicate glob sections (docs/, examples/, tests/, scripts/)

Both “dir/” and “**/dir/” are listed. Keeping just the recursive pattern is sufficient.

Apply this cleanup:

-docs/
-**/docs/
-
-examples/
-**/examples/
-
-tests/
-**/tests/
-
-scripts/
-**/scripts/
+**/docs/
+**/examples/
+**/tests/
+**/scripts/
Dockerfile (3)

1-1: Pin base image for reproducibility

Using “ubuntu” pulls a moving target. Pin to a specific LTS (e.g., 22.04 or 24.04) to avoid surprise breakages.

Apply this diff:

-FROM ubuntu AS builder
+FROM ubuntu:22.04 AS builder
@@
-FROM ubuntu AS runner
+FROM ubuntu:22.04 AS runner

7-10: Reduce image size and layers; use --no-install-recommends and clean apt cache

Combine apt commands, avoid recommended packages, and clean apt lists to shrink layers and improve cacheability.

Apply this diff:

-RUN apt-get update && apt-get install -y git libsdl2-dev parallel libfreetype-dev librlottie-dev libavformat-dev libavcodec-dev libswscale-dev libavutil-dev
-
-RUN apt-get install -y build-essential
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+    git build-essential \
+    libsdl2-dev libfreetype-dev librlottie-dev \
+    libavformat-dev libavcodec-dev libswscale-dev libavutil-dev \
+ && rm -rf /var/lib/apt/lists/*

23-27: Trim runtime deps; parallel isn’t needed at runtime; clean apt cache

“parallel” is a build-time aid; it’s unnecessary in the runner. Also, clean apt lists.

Apply this diff:

-RUN apt-get update && apt-get install -y libsdl2-dev parallel libfreetype-dev librlottie-dev libavformat-dev libavcodec-dev libswscale-dev libavutil-dev
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+    libsdl2-dev libfreetype-dev librlottie-dev \
+    libavformat-dev libavcodec-dev libswscale-dev libavutil-dev \
+ && rm -rf /var/lib/apt/lists/*
.github/workflows/release_actions.yml (1)

45-53: Tagging step is brittle if tag exists; quote GITHUB_OUTPUT usage; ensure newline at EOF

  • If the tag already exists, git tag will fail. Guard or force-update.
  • Quote $GITHUB_OUTPUT path.
  • Ensure file ends with a newline.

Apply this diff:

-        run: echo "VERSION=$(make version)" >> $GITHUB_OUTPUT
+        run: echo "VERSION=$(make version)" >> "$GITHUB_OUTPUT"
@@
-          git tag ${{ steps.get_version.outputs.VERSION }}
-          git push origin ${{ steps.get_version.outputs.VERSION }}
+          VERSION="${{ steps.get_version.outputs.VERSION }}"
+          if git rev-parse -q --verify "refs/tags/${VERSION}" >/dev/null; then
+            echo "Tag ${VERSION} already exists, skipping."
+          else
+            git tag "${VERSION}"
+            git push origin "refs/tags/${VERSION}"
+          fi
Makefile (4)

1-1: Declare all relevant phony targets

Add all non-file-producing targets to .PHONY.

Apply this diff:

-.PHONY: run docker-build
+.PHONY: run run-with-file docker-build version check-version-update

5-9: Version discovery may misorder “vX.Y.Z” tags; normalise or filter

If your tags are prefixed with “v”, sort -V may not compare as intended against bare numeric VERSION. Consider stripping a leading “v”.

Apply this diff:

 LATEST_TAG = $(eval LATEST_TAG := $(shell \
     git ls-remote --tags origin \
-    | awk -F/ '{print $$3}' \
+    | awk -F/ '{print $$3}' \
+    | sed -E 's/^v//' \
     | sort -V \
     | tail -n 1))$(LATEST_TAG)

17-18: Simplify and harden version bump check; clearer intent and messages

Current condition is a bit dense. This form reads easier and avoids echo -e portability pitfalls.

Apply this diff:

 check-version-update:
-	@if [ "$(VERSION)" = "$(LATEST_TAG)" ] || [ "$(VERSION)" != "$$(echo -e "$(LATEST_TAG)\n$(VERSION)" | sort -V | tail -n 1)" ]; then echo "Version $(VERSION) has not been updated"; exit 1; fi
+	@latest="$(LATEST_TAG)"; \
+	if [ -z "$$latest" ]; then \
+	  echo "No existing tags found. Proceeding with VERSION $(VERSION)"; exit 0; \
+	fi; \
+	if [ "$(VERSION)" = "$$latest" ]; then \
+	  echo "Version $(VERSION) has not been updated (matches latest tag $$latest)"; exit 1; \
+	fi; \
+	top="$$(printf '%s\n%s\n' "$$latest" "$(VERSION)" | sort -V | tail -n 1)"; \
+	if [ "$$top" != "$(VERSION)" ]; then \
+	  echo "Version $(VERSION) is not greater than latest tag $$latest"; exit 1; \
+	fi

21-24: Document X11 requirements or provide a helper to set xhost permissions

Run commands assume X server access. A brief README note or a helper target to run xhost +si:localuser:root improves UX.

Would you like me to add a short README snippet and an optional make target that runs xhost safely for local testing?

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between afa7265 and b0ace0b.

📒 Files selected for processing (41)
  • .dockerignore (1 hunks)
  • .github/FUNDING.yml (0 hunks)
  • .github/dependabot.yml (1 hunks)
  • .github/workflows/biome.yml (0 hunks)
  • .github/workflows/code_formatting.yml (1 hunks)
  • .github/workflows/code_size.yml (2 hunks)
  • .github/workflows/codespell.yml (1 hunks)
  • .github/workflows/commit_formatting.yml (0 hunks)
  • .github/workflows/docs.yml (1 hunks)
  • .github/workflows/examples.yml (0 hunks)
  • .github/workflows/mpremote.yml (0 hunks)
  • .github/workflows/mpy_format.yml (1 hunks)
  • .github/workflows/ports.yml (1 hunks)
  • .github/workflows/ports_alif.yml (0 hunks)
  • .github/workflows/ports_cc3200.yml (0 hunks)
  • .github/workflows/ports_esp32.yml (1 hunks)
  • .github/workflows/ports_esp8266.yml (0 hunks)
  • .github/workflows/ports_mimxrt.yml (0 hunks)
  • .github/workflows/ports_nrf.yml (0 hunks)
  • .github/workflows/ports_powerpc.yml (0 hunks)
  • .github/workflows/ports_qemu.yml (0 hunks)
  • .github/workflows/ports_renesas-ra.yml (0 hunks)
  • .github/workflows/ports_rp2.yml (1 hunks)
  • .github/workflows/ports_samd.yml (0 hunks)
  • .github/workflows/ports_stm32.yml (1 hunks)
  • .github/workflows/ports_unix.yml (1 hunks)
  • .github/workflows/ports_webassembly.yml (1 hunks)
  • .github/workflows/ports_windows.yml (0 hunks)
  • .github/workflows/ports_zephyr.yml (0 hunks)
  • .github/workflows/pr_hygene.yml (1 hunks)
  • .github/workflows/release_actions.yml (1 hunks)
  • .github/workflows/ruff.yml (1 hunks)
  • .gitmodules (1 hunks)
  • Dockerfile (1 hunks)
  • Makefile (1 hunks)
  • examples/lvgl.py (1 hunks)
  • ports/unix/lextab.py (1 hunks)
  • ports/unix/variants/lvgl/manifest.py (1 hunks)
  • ports/unix/variants/lvgl/mpconfigvariant.h (1 hunks)
  • ports/unix/variants/lvgl/mpconfigvariant.mk (1 hunks)
  • user_modules/lv_binding_micropython (1 hunks)
💤 Files with no reviewable changes (16)
  • .github/workflows/mpremote.yml
  • .github/workflows/ports_cc3200.yml
  • .github/workflows/commit_formatting.yml
  • .github/workflows/biome.yml
  • .github/workflows/ports_renesas-ra.yml
  • .github/workflows/examples.yml
  • .github/FUNDING.yml
  • .github/workflows/ports_samd.yml
  • .github/workflows/ports_nrf.yml
  • .github/workflows/ports_esp8266.yml
  • .github/workflows/ports_powerpc.yml
  • .github/workflows/ports_qemu.yml
  • .github/workflows/ports_mimxrt.yml
  • .github/workflows/ports_alif.yml
  • .github/workflows/ports_windows.yml
  • .github/workflows/ports_zephyr.yml
🧰 Additional context used
🧬 Code Graph Analysis (1)
ports/unix/variants/lvgl/manifest.py (1)
tools/manifestfile.py (1)
  • include (337-401)
🪛 actionlint (1.7.7)
.github/workflows/release_actions.yml

15-15: the runner of "actions/checkout@v2" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


22-22: the runner of "docker/login-action@v1" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


29-29: the runner of "docker/build-push-action@v2" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


42-42: the runner of "actions/checkout@v2" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

🪛 YAMLlint (1.37.1)
.github/workflows/release_actions.yml

[error] 33-33: trailing spaces

(trailing-spaces)


[error] 53-53: no new line character at the end of file

(new-line-at-end-of-file)

.github/workflows/code_formatting.yml

[error] 5-5: trailing spaces

(trailing-spaces)

.github/workflows/codespell.yml

[error] 3-3: trailing spaces

(trailing-spaces)


[error] 5-5: trailing spaces

(trailing-spaces)

🪛 checkmake (0.2.2)
Makefile

[warning] 1-1: Missing required phony target "all"

(minphony)


[warning] 1-1: Missing required phony target "clean"

(minphony)


[warning] 1-1: Missing required phony target "test"

(minphony)


[warning] 4-4: Target "VERSION" should be declared PHONY.

(phonydeclared)

🔇 Additional comments (17)
.github/workflows/ports_webassembly.yml (2)

5-6: Gating push triggers to master reduces CI noise — looks good.
This aligns with the repo pattern and keeps CI focused on the default branch.


5-6: Confirm branch naming and release/hotfix needs.
If you ever switch default branch naming (e.g., to main) or want CI on release/hotfix branches, this filter will block those push-triggered runs. PRs are still covered.

.github/workflows/ports_rp2.yml (1)

5-6: Master-only push gating is fine here.
Keeps push-triggered runs constrained to the default branch; PR coverage remains unchanged.

.gitmodules (2)

77-79: Submodule addition LGTM.
URL and path look correct for lv_binding_micropython.


77-79: Double-check naming consistency across docs/scripts.
PR text mentions “lv_micropython_bindings” but the submodule is “lv_binding_micropython”. Ensure all build scripts, manifests, and docs reference the actual path used here.

user_modules/lv_binding_micropython (1)

1-1: Submodule pin looks good for reproducible builds

Pinning lv_binding_micropython to a specific commit ensures deterministic builds and aligns well with CI and release workflows.

.github/workflows/ports_esp32.yml (1)

5-6: Verify branch-name consistency across workflows

The initial grep didn’t surface any branch filters—likely due to inline lists or alternate YAML syntax—so please manually audit all your workflows to confirm that push triggers use the same branch name. A mismatch (some using master, others main) will cause unexpected CI gaps on pushes. In particular:

  • .github/workflows/ports_esp32.yml specifies branches: [master]
  • Review every .github/workflows/*.yml that uses on: push (including inline notation) and ensure they all reference the same branch.
.github/workflows/docs.yml (1)

5-10: Good gating and path scoping for doc builds

Limiting push runs to master and scoping to docs/py/tests paths is sensible and reduces unnecessary CI load.

.github/workflows/ports_unix.yml (1)

5-6: Restricting push runs to master looks fine; verify branch-name consistency across workflows

Ensure all workflows agree on the default branch (master vs main) to avoid missing push-triggered runs.

You can reuse the audit script provided in the esp32 workflow comment to check for inconsistencies.

.github/workflows/code_size.yml (1)

10-10: Nice: include user_modules/ to capture LVGL submodule changes in code-size reports**

This ensures code-size diffs reflect updates to the LVGL binding submodule.

.github/workflows/mpy_format.yml (1)

5-6: Restricting push runs to master looks fine; verify branch-name consistency across workflows

As with other workflows, confirm the repository’s default branch naming is uniform to avoid missed runs.

Use the branch-audit script from the esp32 workflow comment to standardise master/main usage across all workflows.

ports/unix/variants/lvgl/manifest.py (1)

1-3: LVGL unix variant manifest looks correct

Includes are ordered sensibly (base variant, asyncio, then LVGL bindings). This should pick up the submodule’s unix manifest as intended.

examples/lvgl.py (1)

17-20: Confirm SDL helper APIs in lv_binding_micropython submodule

I didn’t find any definitions for lv.sdl_window_create, lv.sdl_mouse_create, lv.sdl_keyboard_create or keyboard.set_group in the checked repository. Please verify that the pinned lv_binding_micropython submodule commit includes these SDL helper APIs.

• Check the submodule’s bindings/… directory for implementations of the SDL helper functions
• Ensure the Micropython LVGL bindings expose sdl_window_create, sdl_mouse_create, sdl_keyboard_create and support keyboard.set_group() at the chosen commit

ports/unix/variants/lvgl/mpconfigvariant.h (1)

27-36: LGTM: sensible feature toggles for the LVGL variant

The ROM level, scheduler enable, and builtin init settings look appropriate for LVGL on unix. Include path to mpconfigvariant_common.h also looks correct.

ports/unix/lextab.py (1)

1-3: Confirmed single lextab.py in repo; no duplicate or import references detected
The script only found one instance of lextab.py (ports/unix/lextab.py) and no static import lextab or from … import lextab usages in the codebase. This autogenerated file won’t be shadowed by another copy within this repository.

Dockerfile (1)

11-15: Git submodule update relies on .git being present in build context

This works since .dockerignore doesn’t exclude .git. Keep this in mind if you later exclude .git for smaller contexts; you’d then need to fetch the submodule via a full clone in the Dockerfile (git clone …) or pass submodules in context.

Would you like me to provide an alternative Dockerfile pattern that does a shallow clone with submodules to avoid sending .git in the context?

Makefile (1)

11-13: docker-build context relies on Dockerfile not being ignored

This target will fail if the Dockerfile remains ignored in .dockerignore. Please remove Dockerfile from .dockerignore as suggested above.

Comment thread .dockerignore Outdated
Comment thread .github/workflows/release_actions.yml
Comment thread .github/workflows/release_actions.yml Outdated
Comment thread .github/workflows/release_actions.yml Outdated
Comment thread .github/workflows/release_actions.yml Outdated
Comment thread .github/workflows/release_actions.yml Outdated
Comment thread .github/workflows/ruff.yml Outdated
Comment thread .gitmodules
Comment thread user_modules/lv_binding_micropython

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

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/ports_unix.yml (1)

28-29: Enable recursive submodules checkout for LVGL bindings

The CI script initialises a fixed set of submodules (via $SUBMODULES) but does not include user_modules/lv_micropython_bindings. To ensure the LVGL submodule is fetched without further CI changes, enable recursive submodule checkout in your workflow:

• File: .github/workflows/ports_unix.yml
Lines: 28–29

-    - uses: actions/checkout@v4
+    - uses: actions/checkout@v4
+      with:
+        submodules: recursive

This ensures all submodules— including user_modules/lv_micropython_bindings—are cloned before tools/ci.sh runs.

🧹 Nitpick comments (3)
.github/workflows/ports_unix.yml (3)

3-9: Broaden triggers: run on tags and allow manual dispatch

With automatic tagging introduced in this PR, it’s useful to run this workflow on tags as well. Adding a manual trigger helps when diagnosing CI or testing changes that don’t touch filtered paths.

Apply this diff:

 on:
   push:
     branches:
       - master
+    tags:
+      - 'v*'
+      - 'release-*'
+  workflow_dispatch:
   pull_request:

8-18: Ensure PRs touching submodules or user modules trigger the workflow

You’ve added an LVGL submodule under user_modules. As currently written, PRs that only bump the submodule (or only touch .gitmodules/user_modules) won’t run this workflow due to the path filter. Consider adding entries for .gitmodules and user_modules to avoid silent skips.

Apply this diff:

   pull_request:
     paths:
       - '.github/workflows/*.yml'
+      - '.gitmodules'
       - 'tools/**'
       - 'py/**'
       - 'extmod/**'
       - 'shared/**'
       - 'lib/**'
+      - 'user_modules/**'
       - 'examples/**'
       - 'mpy-cross/**'
       - 'ports/unix/**'
       - 'tests/**'

If you prefer to limit scope further, use the specific submodule path:

  • user_modules/lv_micropython_bindings/**

20-23: Set minimal GITHUB_TOKEN permissions

For hardening, explicitly set minimal permissions. Most build-and-test workflows only need contents: read.

You can add:

 concurrency:
   group: ${{ github.workflow }}-${{ github.ref }}
   cancel-in-progress: true
+
+permissions:
+  contents: read
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between b0ace0b and 34fe3e0.

📒 Files selected for processing (1)
  • .github/workflows/ports_unix.yml (1 hunks)
⏰ 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). (20)
  • GitHub Check: qemu_riscv64
  • GitHub Check: qemu_arm
  • GitHub Check: macos
  • GitHub Check: stackless_clang
  • GitHub Check: standard_v2
  • GitHub Check: settrace_stackless
  • GitHub Check: coverage_32bit
  • GitHub Check: gil_enabled
  • GitHub Check: nanbox
  • GitHub Check: longlong
  • GitHub Check: build_stm32 (stm32_misc_build)
  • GitHub Check: build_stm32 (stm32_nucleo_build)
  • GitHub Check: standard
  • GitHub Check: build_stm32 (stm32_pyb_build)
  • GitHub Check: build
  • GitHub Check: build
  • GitHub Check: build
  • GitHub Check: build_idf (esp32_build_cmod_spiram_s2)
  • GitHub Check: build_idf (esp32_build_s3_c3)
  • GitHub Check: build_idf (esp32_build_c2_c6)

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 34fe3e0 and faa998a.

📒 Files selected for processing (1)
  • .gitignore (1 hunks)
⏰ 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). (20)
  • GitHub Check: build_stm32 (stm32_pyb_build)
  • GitHub Check: build_stm32 (stm32_nucleo_build)
  • GitHub Check: build
  • GitHub Check: sanitize_address
  • GitHub Check: sanitize_undefined
  • GitHub Check: qemu_riscv64
  • GitHub Check: stackless_clang
  • GitHub Check: float_clang
  • GitHub Check: settrace_stackless
  • GitHub Check: coverage_32bit
  • GitHub Check: gil_enabled
  • GitHub Check: standard_v2
  • GitHub Check: nanbox
  • GitHub Check: longlong
  • GitHub Check: standard
  • GitHub Check: build
  • GitHub Check: build
  • GitHub Check: build_idf (esp32_build_c2_c6)
  • GitHub Check: build_idf (esp32_build_s3_c3)
  • GitHub Check: build_idf (esp32_build_cmod_spiram_s2)

Comment thread .gitignore Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

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 (8)
.github/workflows/release_actions.yml (8)

10-12: Remove trailing spaces in permissions block (YAML lint errors)

These lines have trailing spaces flagged by yamllint. Clean them to avoid CI lint noise.

-    permissions:  
-      contents: read  
-      packages: write 
+    permissions:
+      contents: read
+      packages: write

41-42: Trailing spaces in second job’s permissions block

Same lint issue here; remove trailing spaces.

-    permissions:  
-      contents: write 
+    permissions:
+      contents: write

58-58: Add a newline at end of file

YAML/style linters typically require a trailing newline.

-          git push origin ${{ steps.get_version.outputs.VERSION }}
+          git push origin ${{ steps.get_version.outputs.VERSION }}
+

20-22: Normalise version for Docker tag safety and robustness

If make version returns characters invalid for Docker tags (e.g., + or uppercase), the push will fail. Emit both raw VERSION and a Docker-safe DOCKER_VERSION output.

-      - name: Get version
-        id: get_version
-        run: echo "VERSION=$(make version)" >> $GITHUB_OUTPUT
+      - name: Get version
+        id: get_version
+        run: |
+          VERSION="$(make version)"
+          echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT"
+          # Docker tag safe: lower-case and restrict to [a-z0-9_.-]
+          DOCKER_VERSION="$(printf '%s' "$VERSION" \
+            | tr '[:upper:]' '[:lower:]' \
+            | sed -E 's/[^a-z0-9_.-]+/-/g' \
+            | sed -E 's/^-+|-+$//g')"
+          echo "DOCKER_VERSION=$DOCKER_VERSION" >> "$GITHUB_OUTPUT"

31-38: Use Docker-safe tag output and enable BuildKit cache to speed builds

  • Use DOCKER_VERSION from the previous step to avoid invalid tags.
  • Add GitHub Actions cache for faster subsequent builds.
       - name: Build and push
         uses: docker/build-push-action@v5
         with:
           context: .
           push: true
+          cache-from: type=gha
+          cache-to: type=gha,mode=max
           tags:
             ${{ env.IMAGE_NAME }}:latest
-            ${{ env.IMAGE_NAME }}:${{ steps.get_version.outputs.VERSION }}
+            ${{ env.IMAGE_NAME }}:${{ steps.get_version.outputs.DOCKER_VERSION }}

46-48: Fetch full history for safe tag operations

Fetching with full depth ensures tags can be discovered/compared if needed by later steps.

       - name: Checkout code
-        uses: actions/checkout@v4
+        uses: actions/checkout@v4
+        with:
+          fetch-depth: 0

53-58: Make tag push idempotent and scope git config locally

  • Avoid using --global; set repo-local config.
  • Fetch tags and skip creation if tag already exists. Prevents failures on reruns.
       - name: Create and push tag
         run: |
-          git config --global user.email "github-actions[bot]@users.noreply.github.com"
-          git config --global user.name "github-actions[bot]"
-          git tag ${{ steps.get_version.outputs.VERSION }}
-          git push origin ${{ steps.get_version.outputs.VERSION }}
+          git config user.email "github-actions[bot]@users.noreply.github.com"
+          git config user.name "github-actions[bot]"
+          git fetch --tags --force
+          if git rev-parse -q --verify "refs/tags/${{ steps.get_version.outputs.VERSION }}"; then
+            echo "Tag ${{ steps.get_version.outputs.VERSION }} already exists; skipping."
+          else
+            git tag ${{ steps.get_version.outputs.VERSION }}
+            git push origin ${{ steps.get_version.outputs.VERSION }}
+          fi

49-51: Mirror the Docker-safe version output here too

Keep the second job in sync with the first job’s outputs to avoid Docker tag issues if you later reuse the value.

       - name: Get version
         id: get_version
-        run: echo "VERSION=$(make version)" >> $GITHUB_OUTPUT
+        run: |
+          VERSION="$(make version)"
+          echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT"
+          DOCKER_VERSION="$(printf '%s' "$VERSION" \
+            | tr '[:upper:]' '[:lower:]' \
+            | sed -E 's/[^a-z0-9_.-]+/-/g' \
+            | sed -E 's/^-+|-+$//g')"
+          echo "DOCKER_VERSION=$DOCKER_VERSION" >> "$GITHUB_OUTPUT"
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between e86b566 and 54ceec7.

📒 Files selected for processing (4)
  • .dockerignore (1 hunks)
  • .github/workflows/release_actions.yml (1 hunks)
  • .github/workflows/ruff.yml (1 hunks)
  • .gitignore (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • .gitignore
🚧 Files skipped from review as they are similar to previous changes (2)
  • .github/workflows/ruff.yml
  • .dockerignore
🧰 Additional context used
🪛 YAMLlint (1.37.1)
.github/workflows/release_actions.yml

[error] 10-10: trailing spaces

(trailing-spaces)


[error] 11-11: trailing spaces

(trailing-spaces)


[error] 12-12: trailing spaces

(trailing-spaces)


[error] 41-41: trailing spaces

(trailing-spaces)


[error] 42-42: trailing spaces

(trailing-spaces)


[error] 58-58: no new line character at the end of file

(new-line-at-end-of-file)

⏰ 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). (20)
  • GitHub Check: qemu_arm
  • GitHub Check: macos
  • GitHub Check: float_clang
  • GitHub Check: qemu_riscv64
  • GitHub Check: stackless_clang
  • GitHub Check: qemu_mips
  • GitHub Check: gil_enabled
  • GitHub Check: coverage_32bit
  • GitHub Check: longlong
  • GitHub Check: standard_v2
  • GitHub Check: standard
  • GitHub Check: build_idf (esp32_build_cmod_spiram_s2)
  • GitHub Check: build_idf (esp32_build_s3_c3)
  • GitHub Check: build
  • GitHub Check: build_idf (esp32_build_c2_c6)
  • GitHub Check: build
  • GitHub Check: build
  • GitHub Check: build_stm32 (stm32_nucleo_build)
  • GitHub Check: build_stm32 (stm32_pyb_build)
  • GitHub Check: build_stm32 (stm32_misc_build)
🔇 Additional comments (1)
.github/workflows/release_actions.yml (1)

24-29: Solid GHCR login and build/publish setup; versions and interpolation look correct

  • docker/login-action@v3 and docker/build-push-action@v5 are current.
  • IMAGE_NAME uses proper Actions interpolation.
  • Double-tagging latest and version is correct.

Also applies to: 31-38

@minyiky

minyiky commented Aug 17, 2025

Copy link
Copy Markdown
Owner Author

@coderabbitai Please apply your nitpicks as full comments

@coderabbitai

coderabbitai Bot commented Aug 17, 2025

Copy link
Copy Markdown

@minyiky I'll provide a comprehensive review with detailed, full comments on all the changes in this PR. Let me conduct a thorough analysis of the LVGL submodule addition and GitHub Actions cleanup.

✅ Actions performed

Full review triggered.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

♻️ Duplicate comments (2)
.gitmodules (1)

77-79: LVGL submodule addition looks good; remember recursive checkout where it’s actually needed

  • Declaration/path/URL are correct and consistent with the repo layout and usage in manifests/Docker builds.
  • When building LVGL variants (e.g., unix LVGL or Docker builder stage), ensure CI uses recursive submodule checkout because lv_binding_micropython has nested submodules.

Given your preference to avoid CI overhead unless required, only update the specific workflows that build/test the LVGL variant. When you do, add:

- uses: actions/checkout@v4
  with:
    submodules: recursive

If you want, I can scan the workflows you intend to use for LVGL and open a small PR to add this only there.

user_modules/lv_binding_micropython (1)

1-1: Ensure recursive init where LVGL is built (lv_binding_micropython has nested submodules)

lv_binding_micropython itself uses nested submodules (e.g., lvgl, SDL backends). Builds that compile the Unix LVGL variant must run a recursive submodule init, either via actions/checkout with submodules: recursive or an explicit git submodule update --init --recursive user_modules/lv_binding_micropython. Noting your preference to avoid blanket recursive submodule fetches, limit this to the workflows/paths that actually build the LVGL Unix variant and release images; Docker already appears to handle this.

Run this script to verify checkout steps for submodules in workflows that likely build ports/unix or images, and confirm Docker/Make paths explicitly init recursively:

#!/bin/bash
set -euo pipefail

echo "1) Identify workflow files:"
fd -H -t f -p '.github/workflows' -e yml -e yaml || true

echo
echo "2) Checkout steps and submodule flags in those workflows:"
rg -n -C2 -g '.github/workflows/*.{yml,yaml}' 'uses:\s*actions/checkout@' || echo "No checkout steps found"
rg -n -C2 -g '.github/workflows/*.{yml,yaml}' 'submodules:\s*(true|recursive)' || echo "No workflows enable submodules"

echo
echo "3) Find workflows that build unix/variants/lvgl or produce images (heuristic):"
rg -n -C2 -g '.github/workflows/*.{yml,yaml}' -e 'ports.*unix' -e 'lvgl' -e 'docker build|buildx' || true

echo
echo "4) Search Dockerfiles/Makefiles for recursive submodule init:"
fd -H -t f -e Dockerfile -e dockerfile -e mk -e makefile | while read -r f; do
  echo "--- $f"
  rg -n -C1 -e 'git submodule update --init --recursive' -e '--recurse-submodules' "$f" || true
done

echo
echo "5) Confirm .gitmodules entry exists and is correct:"
if [[ -f .gitmodules ]]; then
  git config -f .gitmodules --get-regexp 'submodule\..*lv_binding_micropython\..*' || true
else
  echo ".gitmodules not found"
fi
🧹 Nitpick comments (29)
.github/dependabot.yml (1)

7-7: Optional: pin scheduling details and consider grouping + Docker updates

To make updates more predictable and reduce PR noise further:

  • Add day/time/timezone so updates land in a defined off-hours window.
  • Use groups to bundle Actions updates into a single PR.
  • Set an open PR limit to avoid backlog.
  • Since this repo now has a Dockerfile, consider adding a Docker ecosystem entry so base images are kept current.

Example configuration (for reference):

version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"
      day: "sunday"
      time: "02:00"
      timezone: "UTC"
    groups:
      gha-deps:
        patterns:
          - "*"
    open-pull-requests-limit: 5
    labels:
      - dependencies
      - github-actions

  - package-ecosystem: "docker"
    directory: "/"
    schedule:
      interval: "weekly"
      day: "sunday"
      time: "02:00"
      timezone: "UTC"
    groups:
      base-image:
        patterns:
          - "*"
    labels:
      - dependencies
      - docker
.github/workflows/ports_webassembly.yml (1)

5-6: Master-only push gating: OK; consider running on tags as well

Restricting pushes to master is reasonable. If you plan to run CI on release tags (you mentioned adding automatic tagging), consider including tags to avoid missing release builds/tests.

Proposed change:

 on:
   push:
     branches:
       - master
+    tags:
+      - 'v*'

Would you like the same tag trigger added to the other gated workflows for consistency?

.github/workflows/mpy_format.yml (1)

5-6: Gating push runs to master is fine; optionally add tag trigger for releases

This keeps CI quiet on branch pushes, relying on PR runs. If tools should be verified on release tags, include a tag trigger.

Suggested tweak:

 on:
   push:
     branches:
       - master
+    tags:
+      - 'v*'

Confirm your default branch is “master”; if it ever changes to “main”, this gate will suppress push runs unexpectedly. Want me to add a brief note in CONTRIBUTING or migrate these to a shared workflow with an input-driven branch?

.github/workflows/ports_rp2.yml (1)

5-6: Push gated to master: consistent; add tags if release builds are desired

Looks consistent with the broader CI tidy-up. If rp2 artefacts or tests should run on release tags, include a tag filter.

Proposed addition:

 on:
   push:
     branches:
       - master
+    tags:
+      - 'v*'

Also, please confirm the repository’s default branch is indeed “master”; otherwise pushes won’t trigger this workflow.

user_modules/lv_binding_micropython (2)

1-1: Optional: consider shallow submodule to speed CI clones

If CI clone time becomes a concern, you can mark this submodule as shallow to avoid fetching full history:

Add to .gitmodules (adjust name if different):

[submodule "user_modules/lv_binding_micropython"]
    path = user_modules/lv_binding_micropython
    url = https://github.com/lvgl/lv_binding_micropython.git
    shallow = true

Then run:

  • git submodule sync --recursive
  • git submodule update --init --recursive --depth=1

1-1: Document/update strategy for the submodule

Decide whether you want to:

  • Pin to specific commits and bump manually (current approach, safest), or
  • Track a stabilised branch/tag via .gitmodules (e.g., branch = release/vX) and periodically update.

Whichever you choose, a short note in CONTRIBUTING.md or the Unix LVGL variant README avoids confusion for future bump PRs.

.github/workflows/docs.yml (1)

5-10: Include tools changes in push path filter to catch ci.sh edits used by this job

This workflow calls tools/ci.sh (step “Build unix port”). Changes to tools/** won’t currently trigger the docs build on push. Add tools/** to the push path filter.

Apply this diff within the push.paths block:

   push:
     branches:
       - master
     paths:
       - docs/**
       - py/**
       - tests/cpydiff/**
+      - tools/**

Additionally, consider mirroring this in the pull_request paths for parity (YAML snippet for reference):

pull_request:
  paths:
    - docs/**
    - py/**
    - tests/cpydiff/**
    - tools/**
.gitignore (1)

21-23: Keep .gitignore minimal as per header; consider moving IDE excludes to local excludes

The file header recommends avoiding repo-specific IDE rules. Either move this to your global gitignore or .git/info/exclude, or keep it if you prefer the convenience for collaborators.

Apply this diff only if you want to strictly follow the stated policy:

-# IDE settings
-.vscode/
-
.github/workflows/code_size.yml (1)

29-32: Checkout submodules for future-proofing when paths include user_modules/

If the build ever reads code from submodules (e.g. user_modules), ensure they’re available in the workspace.

     - uses: actions/checkout@v4
       with:
-        fetch-depth: 100
+        fetch-depth: 100
+        submodules: recursive
.github/workflows/codespell.yml (1)

3-7: Clean up trailing spaces flagged by yamllint

Harmless at runtime but noisy for linters.

-on: 
+on:
   push:
-    branches: 
+    branches:
       - master
   pull_request:
.github/workflows/code_formatting.yml (3)

5-5: Remove trailing whitespace to satisfy YAML linters

There’s a trailing space after "branches:" which YAMLlint flagged. It’s harmless to execution but noisy in CI.

-    branches: 
+    branches:

18-18: Pin the Python version to avoid CI drift

actions/setup-python without an explicit version can lead to non-repeatable builds when ubuntu-latest updates. Pin a version (adjust as needed for the repo).

-    - uses: actions/setup-python@v5
+    - uses: actions/setup-python@v5
+      with:
+        python-version: '3.11'

20-24: Enable bash strict mode for clearer failures

Add set -euo pipefail so the job fails fast on any error instead of continuing with partial state.

-    - name: Install packages
-      run: source tools/ci.sh && ci_c_code_formatting_setup
+    - name: Install packages
+      run: |
+        set -euo pipefail
+        source tools/ci.sh
+        ci_c_code_formatting_setup
-    - name: Run code formatting
-      run: source tools/ci.sh && ci_c_code_formatting_run
+    - name: Run code formatting
+      run: |
+        set -euo pipefail
+        source tools/ci.sh
+        ci_c_code_formatting_run
Makefile (4)

1-1: Declare all recipe-only targets as PHONY

Avoid accidental clashes with files/directories named like the targets.

-.PHONY: run docker-build
+.PHONY: run run-with-file docker-build version check-version-update

5-9: Simplify and stabilise LATEST_TAG evaluation

The current $(eval …) pattern re-evaluates on each expansion and may pick annotated tag dereferences (^{}). Use a simple, one-time assignment, filter out derefs, and normalise a leading v.

-LATEST_TAG = $(eval LATEST_TAG := $(shell \
-    git ls-remote --tags origin \
-    | awk -F/ '{print $$3}' \
-    | sort -V \
-    | tail -n 1))$(LATEST_TAG)
+LATEST_TAG := $(shell \
+    git ls-remote --tags --refs origin \
+    | awk -F/ '{print $$3}' \
+    | sed -E 's/\^\{\}//; s/^v//' \
+    | sort -V \
+    | tail -n 1)

17-18: Harden version bump check (normalise tags, avoid echo -e, handle no tags)

  • Normalise leading v on both sides to prevent false negatives.
  • Prefer printf to avoid echo -e portability pitfalls.
  • Treat no tags as 0.0.0 so initial releases pass.
-check-version-update:
-	@if [ "$(VERSION)" = "$(LATEST_TAG)" ] || [ "$(VERSION)" != "$$(echo -e "$(LATEST_TAG)\n$(VERSION)" | sort -V | tail -n 1)" ]; then echo "Version $(VERSION) has not been updated"; exit 1; fi
+check-version-update:
+	@latest="$(LATEST_TAG)"; latest="$${latest:-0.0.0}"; \
+	version="$(VERSION)"; \
+	latest_stripped="$${latest#v}"; version_stripped="$${version#v}"; \
+	if [ "$$version_stripped" = "$$latest_stripped" ] || \
+	   [ "$$version_stripped" != "$$(printf '%s\n' "$$latest_stripped" "$$version_stripped" | sort -V | tail -n 1)" ]; then \
+	  echo "Version $(VERSION) has not been updated"; exit 1; \
+	fi

23-24: Quote paths in run-with-file to handle spaces and special chars

This prevents breakage when $(FILE) or the working directory contains spaces.

run-with-file:
-	@docker run -it --rm -e DISPLAY=$(DISPLAY) -v /tmp/.X11-unix:/tmp/.X11-unix:ro -v $$(pwd)/$(FILE):/$(FILE) micropython /$(FILE)
+	@docker run -it --rm -e DISPLAY=$(DISPLAY) \
+	  -v /tmp/.X11-unix:/tmp/.X11-unix:ro \
+	  -v "$$(pwd)/$(FILE):/$(FILE)" \
+	  micropython "/$(FILE)"
.github/workflows/pr_hygene.yml (2)

1-1: Rename file to pr_hygiene.yml (spelling fix)

The workflow name is “PR Hygiene”, but the filename is misspelt as pr_hygene.yml. Renaming improves clarity and avoids future confusion.


2-12: Add minimal permissions and concurrency to avoid redundant/over-privileged runs

Tighten the token permissions and cancel superseded runs on the same PR.

 name: PR Hygiene
 on:
   pull_request:
 
+permissions:
+  contents: read
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: true
+
 jobs:
   check-version-update:
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v4
       - name: Check the version has been updated
         run: make check-version-update
ports/unix/variants/lvgl/mpconfigvariant.mk (2)

1-1: Fix misleading comment about default variant

This file defines the LVGL variant, not the default Unix variant. Suggest updating the comment to avoid confusion.

-# This is the default variant when you `make` the Unix port.
+# LVGL variant configuration for the Unix port.

4-4: Use $(TOP) for consistency with other Make variables

Minor consistency improvement; both forms work, but the rest of the file uses $(…).

-USER_C_MODULES ?= ${TOP}/user_modules
+USER_C_MODULES ?= $(TOP)/user_modules
Dockerfile (4)

7-10: Reduce layers, pin base image, and clean up apt caches for smaller, more reproducible images

Combine apt installs, use --no-install-recommends, and clean apt lists in the same layer. Also consider pinning the Ubuntu base for reproducibility.

Apply this diff:

-FROM ubuntu AS builder
+FROM ubuntu:24.04 AS builder
@@
-RUN apt-get update && apt-get install -y git libsdl2-dev parallel libfreetype-dev librlottie-dev libavformat-dev libavcodec-dev libswscale-dev libavutil-dev
-
-RUN apt-get install -y build-essential
+RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+    git build-essential pkg-config ca-certificates \
+    libsdl2-dev libfreetype-dev librlottie-dev \
+    libavformat-dev libavcodec-dev libswscale-dev libavutil-dev \
+  && rm -rf /var/lib/apt/lists/*

Optional (verify necessity before adding): the unix port often needs python3 and libffi-dev at build-time. If your build occasionally fails or picks up fewer features, consider adding:

  • python3, python3-venv, python3-setuptools
  • libffi-dev

I can generate a variant including these if you want.


11-14: Docker build depends on .git presence; ensure .dockerignore doesn’t exclude it, or avoid relying on repo metadata

This step will fail if the Docker build context excludes the .git directory (common in .dockerignore), or when building from a tarball. It also makes the build sensitive to the host checkout configuration.

Two robust alternatives:

  • Ensure actions/checkout includes submodules and do not exclude .git in .dockerignore (works only in CI).
  • Or, avoid repository metadata in the image and fetch the submodule inside the container by URL (works everywhere). For example:
-COPY . /src
-
-RUN git submodule update --init --recursive user_modules/lv_binding_micropython
+COPY . /src
+# Ensure lv_binding_micropython is present even if .git is not available
+RUN test -d user_modules/lv_binding_micropython/.git || { \
+      rm -rf user_modules/lv_binding_micropython && \
+      git clone --recurse-submodules https://github.com/lvgl/lv_binding_micropython.git user_modules/lv_binding_micropython; \
+    }

If you prefer to rely on CI checkout, add this to the checkout step in your workflow:

  • submodules: recursive
  • fetch-depth: 0

Would you like me to adjust the workflow accordingly?


19-19: Parameterise DEBUG and parallelism for flexibility

Hardcoding DEBUG=1 forces a debug build in all images. Consider ARGs so callers can choose.

- RUN make -B -j $(nproc) -C ports/unix DEBUG=1 VARIANT=lvgl
+ ARG DEBUG=0
+ ARG JOBS
+ RUN make -B ${JOBS:+-j ${JOBS}} -C ports/unix DEBUG=${DEBUG} VARIANT=lvgl

Callers can pass --build-arg DEBUG=1 and optionally JOBS to override.


21-27: Use runtime libraries in the final image (avoid -dev packages) and clean apt lists

The runner installs -dev packages, inflating the image. Prefer runtime libs (e.g., libsdl2-2.0-0, libfreetype6, librlottie0, libav* runtime libs) and clean apt lists.

Example (verify package names for your chosen Ubuntu release):

-FROM ubuntu AS runner
+FROM ubuntu:24.04 AS runner
@@
-RUN apt-get update && apt-get install -y libsdl2-dev parallel libfreetype-dev librlottie-dev libavformat-dev libavcodec-dev libswscale-dev libavutil-dev
+RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+    libsdl2-2.0-0 libfreetype6 librlottie0 \
+    libavformat60 libavcodec60 libswscale7 libavutil58 \
+  && rm -rf /var/lib/apt/lists/*

If parallel isn’t required at runtime, omit it.

examples/lvgl.py (1)

12-22: Minor ordering and exit handling: create drivers before event loop; trap KeyboardInterrupt

Creating the display/inputs before the event loop is a common pattern, and trapping Ctrl+C avoids docker/terminal hangs.

-el = event_loop()
-
-WIDTH = 480
-HEIGHT = 320
-
-disp_drv = lv.sdl_window_create(WIDTH, HEIGHT)
-mouse = lv.sdl_mouse_create()
-keyboard = lv.sdl_keyboard_create()
-keyboard.set_group(lv.group_create())
+WIDTH = 480
+HEIGHT = 320
+
+disp_drv = lv.sdl_window_create(WIDTH, HEIGHT)
+mouse = lv.sdl_mouse_create()
+keyboard = lv.sdl_keyboard_create()
+keyboard.set_group(lv.group_create())
+
+el = event_loop()
@@
-while True:
-    time.sleep(100)
+try:
+    while True:
+        time.sleep(1)
+except KeyboardInterrupt:
+    pass
.github/workflows/release_actions.yml (3)

10-12: Remove trailing spaces and add newline at EOF

YAMLlint flags trailing spaces on Lines 10–12 and 41–42, and a missing newline at EOF.

Apply this diff:

-    permissions:  
-      contents: read  
-      packages: write 
+    permissions:
+      contents: read
+      packages: write
@@
-    permissions:  
-      contents: write 
+    permissions:
+      contents: write
@@
-          git push origin ${{ steps.get_version.outputs.VERSION }}
+          git push origin ${{ steps.get_version.outputs.VERSION }}
+ 

Also applies to: 41-42, 58-58


53-58: Make tagging idempotent to avoid failures if the tag already exists

If the version already exists as a tag, the job will fail. Guard against this.

-      - name: Create and push tag
-        run: |
-          git config --global user.email "github-actions[bot]@users.noreply.github.com"
-          git config --global user.name "github-actions[bot]"
-          git tag ${{ steps.get_version.outputs.VERSION }}
-          git push origin ${{ steps.get_version.outputs.VERSION }}
+      - name: Create and push tag
+        run: |
+          set -euo pipefail
+          git config --global user.email "github-actions[bot]@users.noreply.github.com"
+          git config --global user.name "github-actions[bot]"
+          VERSION="${{ steps.get_version.outputs.VERSION }}"
+          if git rev-parse -q --verify "refs/tags/${VERSION}" >/dev/null; then
+            echo "Tag ${VERSION} already exists; skipping."
+            exit 0
+          fi
+          git tag "${VERSION}"
+          git push origin "${VERSION}"

31-38: Optional: speed up builds with Docker layer cache (GHA cache backend)

Caching significantly reduces build times for frequent pushes.

       - name: Build and push
         uses: docker/build-push-action@v5
         with:
           context: .
           push: true
+          cache-from: type=gha
+          cache-to: type=gha,mode=max
           tags: |
             ${{ env.IMAGE_NAME }}:latest
             ${{ env.IMAGE_NAME }}:${{ steps.get_version.outputs.VERSION }}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between afa7265 and 54ceec7.

📒 Files selected for processing (41)
  • .dockerignore (1 hunks)
  • .github/FUNDING.yml (0 hunks)
  • .github/dependabot.yml (1 hunks)
  • .github/workflows/biome.yml (0 hunks)
  • .github/workflows/code_formatting.yml (1 hunks)
  • .github/workflows/code_size.yml (2 hunks)
  • .github/workflows/codespell.yml (1 hunks)
  • .github/workflows/commit_formatting.yml (0 hunks)
  • .github/workflows/docs.yml (1 hunks)
  • .github/workflows/examples.yml (0 hunks)
  • .github/workflows/mpremote.yml (0 hunks)
  • .github/workflows/mpy_format.yml (1 hunks)
  • .github/workflows/ports.yml (1 hunks)
  • .github/workflows/ports_alif.yml (0 hunks)
  • .github/workflows/ports_cc3200.yml (0 hunks)
  • .github/workflows/ports_esp32.yml (1 hunks)
  • .github/workflows/ports_esp8266.yml (0 hunks)
  • .github/workflows/ports_mimxrt.yml (0 hunks)
  • .github/workflows/ports_nrf.yml (0 hunks)
  • .github/workflows/ports_powerpc.yml (0 hunks)
  • .github/workflows/ports_qemu.yml (0 hunks)
  • .github/workflows/ports_renesas-ra.yml (0 hunks)
  • .github/workflows/ports_rp2.yml (1 hunks)
  • .github/workflows/ports_samd.yml (0 hunks)
  • .github/workflows/ports_stm32.yml (1 hunks)
  • .github/workflows/ports_unix.yml (1 hunks)
  • .github/workflows/ports_webassembly.yml (1 hunks)
  • .github/workflows/ports_windows.yml (0 hunks)
  • .github/workflows/ports_zephyr.yml (0 hunks)
  • .github/workflows/pr_hygene.yml (1 hunks)
  • .github/workflows/release_actions.yml (1 hunks)
  • .github/workflows/ruff.yml (1 hunks)
  • .gitignore (1 hunks)
  • .gitmodules (1 hunks)
  • Dockerfile (1 hunks)
  • Makefile (1 hunks)
  • examples/lvgl.py (1 hunks)
  • ports/unix/variants/lvgl/manifest.py (1 hunks)
  • ports/unix/variants/lvgl/mpconfigvariant.h (1 hunks)
  • ports/unix/variants/lvgl/mpconfigvariant.mk (1 hunks)
  • user_modules/lv_binding_micropython (1 hunks)
💤 Files with no reviewable changes (16)
  • .github/workflows/commit_formatting.yml
  • .github/workflows/ports_samd.yml
  • .github/workflows/biome.yml
  • .github/workflows/mpremote.yml
  • .github/workflows/ports_qemu.yml
  • .github/workflows/ports_windows.yml
  • .github/workflows/ports_renesas-ra.yml
  • .github/workflows/ports_nrf.yml
  • .github/workflows/examples.yml
  • .github/workflows/ports_powerpc.yml
  • .github/FUNDING.yml
  • .github/workflows/ports_alif.yml
  • .github/workflows/ports_cc3200.yml
  • .github/workflows/ports_zephyr.yml
  • .github/workflows/ports_esp8266.yml
  • .github/workflows/ports_mimxrt.yml
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-17T19:58:45.970Z
Learnt from: minyiky
PR: minyiky/pydive-micropython#1
File: .gitmodules:77-79
Timestamp: 2025-08-17T19:58:45.970Z
Learning: User minyiky prefers not to implement recursive submodule fetching in GitHub Actions workflows until actually needed, to avoid unnecessary CI overhead for workflows that don't require the submodules.

Applied to files:

  • user_modules/lv_binding_micropython
  • .gitmodules
🧬 Code Graph Analysis (1)
ports/unix/variants/lvgl/manifest.py (1)
tools/manifestfile.py (1)
  • include (337-401)
🪛 YAMLlint (1.37.1)
.github/workflows/codespell.yml

[error] 3-3: trailing spaces

(trailing-spaces)


[error] 5-5: trailing spaces

(trailing-spaces)

.github/workflows/release_actions.yml

[error] 10-10: trailing spaces

(trailing-spaces)


[error] 11-11: trailing spaces

(trailing-spaces)


[error] 12-12: trailing spaces

(trailing-spaces)


[error] 41-41: trailing spaces

(trailing-spaces)


[error] 42-42: trailing spaces

(trailing-spaces)


[error] 58-58: no new line character at the end of file

(new-line-at-end-of-file)

.github/workflows/code_formatting.yml

[error] 5-5: trailing spaces

(trailing-spaces)

🪛 checkmake (0.2.2)
Makefile

[warning] 1-1: Missing required phony target "all"

(minphony)


[warning] 1-1: Missing required phony target "clean"

(minphony)


[warning] 1-1: Missing required phony target "test"

(minphony)


[warning] 4-4: Target "VERSION" should be declared PHONY.

(phonydeclared)

🔇 Additional comments (10)
.github/dependabot.yml (1)

7-7: LGTM: reduce Dependabot noise to weekly for Actions

Weekly checks for GitHub Actions are reasonable and will cut PR churn while still keeping workflows reasonably fresh.

user_modules/lv_binding_micropython (1)

1-1: Pinned submodule commit is good for reproducibility

Locking the submodule to a specific commit ensures deterministic builds. No issues with the pointer itself.

.github/workflows/ports_esp32.yml (1)

5-6: No changes required: workflow branches filter matches default branch

The repository’s default branch is master, so the push-trigger filter is correctly configured.

.github/workflows/ports_stm32.yml (1)

5-6: Branches filter matches default branch
Verified that the repository’s default branch is master, so the workflow’s branch filter aligns and no changes are needed.

.github/workflows/ports.yml (1)

5-6: Master-only push gating validated
Confirmed the repository’s default branch is master, so the branches: - master filter in .github/workflows/ports.yml correctly captures push events. If restricting metadata builds to master is the intended policy, no further changes are needed.

.github/workflows/ruff.yml (1)

3-10: LGTM: Explicit triggers and correct recursive Python path filter

Good move to explicit on mapping, master-only push gating, and **/*.py for PRs. This resolves the earlier path-filter limitation for nested Python files.

.github/workflows/code_size.yml (1)

27-27: Switching to ubuntu-latest may change toolchains and skew size deltas

Code-size can vary with compiler/toolchain versions. If you rely on stable size baselines, consider pinning the runner or verifying size variance after this change.

.github/workflows/ports_unix.yml (1)

5-6: Restricting push triggers to master looks good

Matches common practice and reduces unnecessary CI on feature branches.

.github/workflows/code_formatting.yml (1)

19-22: Required CI functions verified in tools/ci.sh
The functions ci_c_code_formatting_setup (line 39) and ci_c_code_formatting_run (line 45) are defined in tools/ci.sh, so the workflow steps will execute as expected.

ports/unix/variants/lvgl/mpconfigvariant.h (1)

27-36: LGTM: sensible defaults for the LVGL variant

ROM feature level, inclusion of the common unix variant header, and enabling the scheduler and builtin module init look correct for LVGL on unix. Disabling sys.settrace is standard.

Comment thread .dockerignore Outdated
Comment thread .github/workflows/release_actions.yml Outdated
Comment thread ports/unix/variants/lvgl/manifest.py

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

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 (3)
.github/workflows/code_formatting.yml (3)

3-12: Optionally mirror the paths filter for PRs to cut CI noise.

Unless you want formatting to run for every PR change, add the same paths filter under pull_request.

 on:
   push:
     branches:
       - master
     paths:
       - "**/*.c"
       - "**/*.cpp"
       - "**/*.h"
       - "**/*.hpp"
-  pull_request:
+  pull_request:
+    paths:
+      - "**/*.c"
+      - "**/*.cpp"
+      - "**/*.h"
+      - "**/*.hpp"

20-29: Make shell explicit and harden step execution.

Explicitly set the shell to bash and enable strict flags so source failures or partial pipeline errors don’t slip through.

 jobs:
   code-formatting:
     runs-on: ubuntu-latest
+    defaults:
+      run:
+        shell: bash -euo pipefail
     steps:
       - uses: actions/checkout@v4
       - uses: actions/setup-python@v5
       - name: Install packages
         run: source tools/ci.sh && ci_c_code_formatting_setup
       - name: Run code formatting
         run: source tools/ci.sh && ci_c_code_formatting_run
       - name: Check code formatting
         run: git diff --exit-code

18-21: Consider pinning the runner or validating toolchain on ubuntu-latest.

If your formatter toolchain is sensitive to OS image changes, pin to a specific image (e.g., ubuntu-22.04) or add a quick version probe in ci.sh.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 5106c45 and 34af142.

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

8-8: could not parse as YAML: yaml: line 8: did not find expected alphabetic or numeric character

(syntax-check)

🪛 YAMLlint (1.37.1)
.github/workflows/code_formatting.yml

[error] 8-8: syntax error: expected alphabetic or numeric character, but found '*'

(syntax)

⏰ 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). (20)
  • GitHub Check: build_stm32 (stm32_nucleo_build)
  • GitHub Check: qemu_riscv64
  • GitHub Check: float_clang
  • GitHub Check: longlong
  • GitHub Check: qemu_mips
  • GitHub Check: nanbox
  • GitHub Check: sanitize_address
  • GitHub Check: qemu_arm
  • GitHub Check: macos
  • GitHub Check: settrace_stackless
  • GitHub Check: gil_enabled
  • GitHub Check: coverage_32bit
  • GitHub Check: standard
  • GitHub Check: standard_v2
  • GitHub Check: build_idf (esp32_build_s3_c3)
  • GitHub Check: build_idf (esp32_build_c2_c6)
  • GitHub Check: build_idf (esp32_build_cmod_spiram_s2)
  • GitHub Check: build
  • GitHub Check: build
  • GitHub Check: build

Comment thread .github/workflows/code_formatting.yml Outdated
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: minyiky <71966069+minyiky@users.noreply.github.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

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/code_formatting.yml (1)

10-14: Globs correctly quoted — YAML alias pitfall avoided.

The quoted patterns resolve the earlier parse error from unquoted *. Looks good.

🧹 Nitpick comments (1)
.github/workflows/code_formatting.yml (1)

23-23: runs-on: ubuntu-latest is fine; consider pinning for reproducibility.

Pin to ubuntu-24.04 (or a SHA-pinned runner image) to avoid surprise breakages when ubuntu-latest moves.

-    runs-on: ubuntu-latest
+    runs-on: ubuntu-24.04
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 34af142 and 71e764f.

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

3-3: could not parse as YAML: yaml: line 3: did not find expected key

(syntax-check)

🪛 YAMLlint (1.37.1)
.github/workflows/code_formatting.yml

[error] 7-7: syntax error: expected , but found ''

(syntax)

⏰ 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). (19)
  • GitHub Check: build_idf (esp32_build_c2_c6)
  • GitHub Check: qemu_arm
  • GitHub Check: qemu_mips
  • GitHub Check: macos
  • GitHub Check: sanitize_undefined
  • GitHub Check: sanitize_address
  • GitHub Check: gil_enabled
  • GitHub Check: settrace_stackless
  • GitHub Check: stackless_clang
  • GitHub Check: longlong
  • GitHub Check: nanbox
  • GitHub Check: coverage_32bit
  • GitHub Check: qemu_riscv64
  • GitHub Check: standard
  • GitHub Check: standard_v2
  • GitHub Check: build_stm32 (stm32_misc_build)
  • GitHub Check: build_stm32 (stm32_nucleo_build)
  • GitHub Check: build_stm32 (stm32_pyb_build)
  • GitHub Check: build

Comment thread .github/workflows/code_formatting.yml

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

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)
.github/workflows/code_formatting.yml (1)

24-36: Normalise indentation under jobs (yamllint warnings).

Indent list items under steps: and keep 2-space nesting throughout to avoid lint noise.

 jobs:
   code-formatting:
-    runs-on: ubuntu-latest
-    steps:
-    - uses: actions/checkout@v4
-    - uses: actions/setup-python@v5
-    - name: Install packages
-      run: source tools/ci.sh && ci_c_code_formatting_setup
-    - name: Run code formatting
-      run: source tools/ci.sh && ci_c_code_formatting_run
-    - name: Check code formatting
-      run: git diff --exit-code
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4
+      - uses: actions/setup-python@v5
+      - name: Install packages
+        run: source tools/ci.sh && ci_c_code_formatting_setup
+      - name: Run code formatting
+        run: source tools/ci.sh && ci_c_code_formatting_run
+      - name: Check code formatting
+        run: git diff --exit-code
♻️ Duplicate comments (1)
.github/workflows/code_formatting.yml (1)

8-11: Globs correctly quoted — resolves YAML alias trap.

Good fix; the patterns are now strings instead of YAML aliases.

Also applies to: 14-17

🧹 Nitpick comments (2)
.github/workflows/code_formatting.yml (2)

20-23: Align concurrency block indentation.

Minor but keeps YAML consistent and silences linters.

-concurrency:
-  group: ${{ github.workflow }}-${{ github.ref }}
-  cancel-in-progress: true
+concurrency:
+  group: ${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: true

26-26: Runner choice is fine; consider pinning or documenting.

ubuntu-latest is OK. Optionally pin to a specific LTS (e.g., ubuntu-24.04) to avoid surprise image changes.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 71e764f and c8b9f36.

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

11-11: could not parse as YAML: yaml: line 11: did not find expected key

(syntax-check)

🪛 YAMLlint (1.37.1)
.github/workflows/code_formatting.yml

[warning] 5-5: wrong indentation: expected 6 but found 5

(indentation)


[warning] 6-6: wrong indentation: expected 8 but found 7

(indentation)


[warning] 8-8: wrong indentation: expected 8 but found 7

(indentation)


[error] 12-12: syntax error: expected , but found ''

(syntax)


[warning] 13-13: wrong indentation: expected 5 but found 6

(indentation)


[warning] 14-14: wrong indentation: expected 9 but found 7

(indentation)


[warning] 21-21: wrong indentation: expected 3 but found 2

(indentation)


[warning] 25-25: wrong indentation: expected 3 but found 2

(indentation)


[warning] 26-26: wrong indentation: expected 5 but found 4

(indentation)

⏰ 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). (20)
  • GitHub Check: build
  • GitHub Check: sanitize_undefined
  • GitHub Check: qemu_arm
  • GitHub Check: qemu_riscv64
  • GitHub Check: stackless_clang
  • GitHub Check: longlong
  • GitHub Check: gil_enabled
  • GitHub Check: standard_v2
  • GitHub Check: standard
  • GitHub Check: macos
  • GitHub Check: settrace_stackless
  • GitHub Check: coverage_32bit
  • GitHub Check: qemu_mips
  • GitHub Check: nanbox
  • GitHub Check: float_clang
  • GitHub Check: build_stm32 (stm32_misc_build)
  • GitHub Check: build_stm32 (stm32_nucleo_build)
  • GitHub Check: build_stm32 (stm32_pyb_build)
  • GitHub Check: build
  • GitHub Check: build

Comment thread .github/workflows/code_formatting.yml Outdated
@minyiky minyiky merged commit 0606d90 into master Sep 13, 2025
33 of 34 checks passed
@minyiky minyiky deleted the minyiky/add-lvgl branch September 13, 2025 14:52
minyiky added a commit that referenced this pull request Feb 9, 2026
I have added in the `lv_micropython_bindings` as a new submodule under
`user_modules` to allow firmware built this way to be used in the unix
simulator.

Additionally I have updated some actions with the following changes
 - Removed unneeded actions
 - Added PR Hygiene actions
 - Added a container build action
- Added auto tagging of the repo (may change later to follow mp
versioning)
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