Skip to content

Release 0.0.3#34

Open
Kampi wants to merge 6 commits intomainfrom
0.0.3_Dev
Open

Release 0.0.3#34
Kampi wants to merge 6 commits intomainfrom
0.0.3_Dev

Conversation

@Kampi
Copy link
Copy Markdown
Owner

@Kampi Kampi commented Feb 5, 2026

Summary by CodeRabbit

  • Documentation

    • Added a comprehensive contributor and coding guidelines document.
    • Added an ecosystem registry badge to the README.
  • Chores

    • Moved changelog to repository root and updated validation messaging; broadened workflow triggers.
    • Simplified documentation deployment to GitHub Pages and removed nightly release artifacts.
    • Reworked release automation to use explicit versioning, tagging, and CLI-driven release notes.
  • Refactor

    • Minor code modernizations and comment/style cleanups with no behavioral changes.

@Kampi Kampi self-assigned this Feb 5, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Feb 5, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a comprehensive Copilot/AI guidance doc, updates multiple GitHub Actions workflows (astyle, changelog-check, documentation, release) to simplify triggers and refactor release/version handling, adds an ESP Registry badge to README, and replaces three reinterpret_cast with static_cast in VoSPI initialization.

Changes

Cohort / File(s) Summary
AI / Copilot Guidelines
​.github/copilot-instructions.md
New comprehensive coding/doc guidelines for ESP32‑Lepton covering style, naming, file layout, Doxygen/docs rules, ESP‑IDF conventions, hardware interfaces, testing/debugging, examples, and metadata.
Workflows — astyle
​.github/workflows/astyle.yaml
Removed master_branch env declaration.
Workflows — changelog validation
​.github/workflows/changelog-check.yaml
Target changelog moved from hardware/CHANGELOG.md to CHANGELOG.md; removed path filters, added branch filters, and updated validation messages/context.
Workflows — documentation
​.github/workflows/documentation.yaml
Dropped push path filtering and master_branch env; simplified deploy condition to main/master; removed release tarball/release upload steps; renamed deploy to GitHub Pages; adjusted step names.
Workflows — release
​.github/workflows/release.yaml
Reworked version extraction (strip _Dev, split MAJOR/MINOR/BUILD), update CMake/idf component version vars, replace auto-action commits with explicit git commands, add tag checks/wait, and switch release creation to GitHub CLI using CHANGELOG.md notes.
README badges
README.md
Added ESP Registry badge to README header badges.
VoSPI — casts & docs
src/VoSPI/vospi.cpp, include/VoSPI/vospi.h
Replaced three reinterpret_cast uses with static_cast for heap_caps_malloc allocations; added Doxygen comment for VOSPI_RESYNC_MS.
CCI — comments & formatting
src/CCI/cci.cpp
Converted inline // comments to Doxygen/block comments in register and buffer sections; standardized comment formatting and minor spacing adjustments.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • Kampi/fix changelog check #36 — Overlapping additions of .github/copilot-instructions.md and similar workflow updates.
  • Issue #29 #30 — Related changes introducing copilot documentation and workflow modifications.
  • Release 0.0.2 #16 — Related edits to the release workflow and branch/version handling.

Suggested labels

documentation

🚥 Pre-merge checks | ✅ 1
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

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


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

❤️ Share

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

Copy link
Copy Markdown

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

🤖 Fix all issues with AI agents
In @.github/copilot-instructions.md:
- Around line 81-105: The markdown fenced code blocks showing the
"ESP32-Lepton/" directory tree, the checklist block containing "☐ Code compiles
without errors", and the "docs/" directory tree are missing language
identifiers; update each triple-backtick fence to include a language tag (e.g.,
```text) so markdownlint MD040 is satisfied—locate the three blocks by their
contents ("ESP32-Lepton/" tree, the checklist line "☐ Code compiles without
errors", and the "docs/" tree) and prepend the chosen language identifier to
each opening ``` fence.

In `@README.md`:
- Line 8: The anchor for the ESP Registry badge currently points to the SVG
image URL
(https://components.espressif.com/components/kampi/esp32-lepton/badge.svg);
update the href so the link targets the component page instead (e.g.,
https://components.espressif.com/components/kampi/esp32-lepton) while keeping
the image src pointing to the SVG, so clicking the badge opens the registry
listing rather than the raw SVG.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (3)
.github/workflows/release.yaml (3)

162-171: Nit: VERSION env export on line 165 is redundant.

VERSION is already set in $GITHUB_ENV (line 55), so re-exporting it in the step's env block is unnecessary. Not harmful, but it adds noise.

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

In @.github/workflows/release.yaml around lines 162 - 171, Remove the redundant
VERSION environment export from the "Create Release" step's env block: the step
currently sets VERSION: ${{ env.VERSION }} even though VERSION is already
exported to $GITHUB_ENV earlier; edit the step named "Create Release" to delete
the VERSION entry under env while keeping GITHUB_TOKEN and the rest of the gh
release command intact.

139-144: Hardcoded sleep 5 is fragile for tag propagation.

Consider polling with a retry loop (e.g., git ls-remote --tags origin "$VERSION") instead of a fixed sleep, to avoid both unnecessary waits and intermittent failures.

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

In @.github/workflows/release.yaml around lines 139 - 144, Replace the fragile
fixed sleep in the "Wait for tag to be available" step with a polling/retry loop
that checks remote tag presence (use git ls-remote --tags origin "$VERSION")
until the tag is found or a timeout/attempt limit is reached; update the step
that currently runs echo/sleep/git fetch/git tag -l to instead repeatedly run
git ls-remote --tags origin "$VERSION" (with intermittent short sleeps), fail
the job if the tag is not observed within the timeout, and still run git fetch
--tags once the tag is confirmed to ensure local tag availability.

149-153: Awk pattern uses shell-expanded $VERSION instead of the declared awk variable version.

The -v version="$VERSION" awk variable is declared but unused; the pattern instead splices $VERSION via shell string concatenation. This is fragile — dots in the version are interpreted as regex wildcards, and it makes the -v declaration misleading dead code.

Use the awk variable consistently:

Proposed fix
-          awk -v version="$VERSION" '
-            /^## \['"$VERSION"'\]/ { found=1; next }
-            /^## \[/ { if(found) exit }
-            found { print }
-          ' CHANGELOG.md > RELEASE_NOTES.md
+          awk -v version="$VERSION" '
+            $0 ~ "^## \\[" version "\\]" { found=1; next }
+            /^## \[/ { if(found) exit }
+            found { print }
+          ' CHANGELOG.md > RELEASE_NOTES.md
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/release.yaml around lines 149 - 153, The awk invocation
declares -v version="$VERSION" but the regex uses the shell-expanded $VERSION
literal; update the awk script to use the awk variable version instead of shell
interpolation by replacing the first pattern /^## \['"$VERSION"'\]/ with an awk
regex test using version (for example: if ($0 ~ "^## \\[" version "\\]") {
found=1; next }) and keep the second check for any heading as-is (e.g. if ($0 ~
"^## \\[") { if(found) exit }) so dots in versions are treated literally and the
-v version variable is actually used.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/release.yaml:
- Line 100: The grep invocation checking for set(${REPO_NAME}_LIB_MAJOR) uses an
unescaped "(" which can be interpreted as a regex; change the check to use a
fixed-string match (e.g., grep -qF) and ensure the pattern is properly quoted so
the literal "set(${REPO_NAME}_LIB_MAJOR" is matched; update the line that
currently contains the grep call referencing REPO_NAME to use grep -qF and keep
the existing quoting to avoid regex interpretation.
- Around line 131-132: The current tag existence check uses git rev-parse
"$VERSION" which can match any ref (branches, etc.); change it to verify the tag
namespace specifically by checking refs/tags/$VERSION (for example using git
show-ref --tags or git rev-parse --verify refs/tags/$VERSION) so only an actual
tag will cause the "skip tag creation" path in the workflow.

---

Nitpick comments:
In @.github/workflows/release.yaml:
- Around line 162-171: Remove the redundant VERSION environment export from the
"Create Release" step's env block: the step currently sets VERSION: ${{
env.VERSION }} even though VERSION is already exported to $GITHUB_ENV earlier;
edit the step named "Create Release" to delete the VERSION entry under env while
keeping GITHUB_TOKEN and the rest of the gh release command intact.
- Around line 139-144: Replace the fragile fixed sleep in the "Wait for tag to
be available" step with a polling/retry loop that checks remote tag presence
(use git ls-remote --tags origin "$VERSION") until the tag is found or a
timeout/attempt limit is reached; update the step that currently runs
echo/sleep/git fetch/git tag -l to instead repeatedly run git ls-remote --tags
origin "$VERSION" (with intermittent short sleeps), fail the job if the tag is
not observed within the timeout, and still run git fetch --tags once the tag is
confirmed to ensure local tag availability.
- Around line 149-153: The awk invocation declares -v version="$VERSION" but the
regex uses the shell-expanded $VERSION literal; update the awk script to use the
awk variable version instead of shell interpolation by replacing the first
pattern /^## \['"$VERSION"'\]/ with an awk regex test using version (for
example: if ($0 ~ "^## \\[" version "\\]") { found=1; next }) and keep the
second check for any heading as-is (e.g. if ($0 ~ "^## \\[") { if(found) exit })
so dots in versions are treated literally and the -v version variable is
actually used.

Comment on lines +131 to +132
if git rev-parse "$VERSION" >/dev/null 2>&1; then
echo "Tag $VERSION already exists, skipping tag creation"
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Tag existence check is too broad — git rev-parse resolves any ref, not just tags.

If a branch or other ref happened to share the version name, this would incorrectly skip tag creation. Use a tag-specific check instead.

Proposed fix
-          if git rev-parse "$VERSION" >/dev/null 2>&1; then
+          if git tag -l "$VERSION" | grep -q "^$VERSION$"; then
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/release.yaml around lines 131 - 132, The current tag
existence check uses git rev-parse "$VERSION" which can match any ref (branches,
etc.); change it to verify the tag namespace specifically by checking
refs/tags/$VERSION (for example using git show-ref --tags or git rev-parse
--verify refs/tags/$VERSION) so only an actual tag will cause the "skip tag
creation" path in the workflow.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

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

156-160: Awk -v version is set but never used; pattern relies on shell interpolation instead.

The awk variable version is dead code — the regex pattern uses shell-expanded $VERSION directly. Additionally, dots in the version string act as regex wildcards (e.g., 0.0.3 matches 0X0Y3). Using the awk variable with index() for exact matching would be cleaner and more precise.

Proposed fix
-          awk -v version="$VERSION" '
-            /^## \['"$VERSION"'\]/ { found=1; next }
-            /^## \[/ { if(found) exit }
-            found { print }
-          ' CHANGELOG.md >> RELEASE_NOTES.md
+          awk -v version="$VERSION" '
+            /^## \[/ { if(found) exit; if(index($0, "## [" version "]")) { found=1; next } }
+            found { print }
+          ' CHANGELOG.md >> RELEASE_NOTES.md
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/release.yaml around lines 156 - 160, The awk command
defines -v version="$VERSION" but then ignores it and uses shell interpolation
in the regex (/^## \['"$VERSION"'\]/), which is both dead code and treats dots
as regex wildcards; change the awk script to use the passed-in variable and
exact matching (e.g., use index($0, "## [" version "]") to detect the heading)
so the version variable is actually used and dots are matched literally; update
the block that sets found, exits on the next heading (/^## \[/) and prints lines
when found to use this index-based check instead of the current interpolated
regex.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/release.yaml:
- Around line 202-211: The "Create Release" step currently runs gh release
create "$VERSION" which will fail if a release for that tag already exists;
update the step to first check for an existing release (e.g., call gh release
view "$VERSION" and only run gh release create if that check fails) or, if
overwriting is acceptable, add the --clobber flag to the gh release create
invocation; adjust the GitHub Actions step name "Create Release" and its run
block to implement one of these idempotency guards so repeated workflow runs
don't error.
- Around line 100-108: The sed insertion silently does nothing if
register_component() is not present, leaving set(${REPO_NAME}_LIB_MAJOR/
MINOR/BUILD unset; update the workflow to first test for the presence of
"register_component()" (e.g., with grep -q "register_component()") and if
missing either append the version variable block to the end of CMakeLists.txt or
emit a clear error/warning and exit non‑zero; modify the branch that currently
runs sed -i "/register_component()/i ..." to perform that existence check and
then use a fallback append or failure path so REPO_NAME_LIB_MAJOR,
REPO_NAME_LIB_MINOR and REPO_NAME_LIB_BUILD are always set or the job fails
visibly.
- Around line 139-144: The "Wait for tag to be available" step currently runs
`git tag -l "$VERSION"` but doesn't fail if the tag is missing; change the
commands to assert existence and fail the job when the tag isn't found—e.g.,
after `git fetch --tags` use a check such as `git rev-parse --verify
"refs/tags/$VERSION"` or test the output of `git tag -l "$VERSION"` and `exit 1`
when empty so the step named "Wait for tag to be available" reliably errors if
the tag isn't present.

---

Duplicate comments:
In @.github/workflows/release.yaml:
- Around line 99-100: The grep command checking for the CMake variable uses a
pattern with parentheses which can be interpreted as a regex; change the check
to use fixed-string matching (use grep -qF or grep -Fq) when searching for
"set(${REPO_NAME}_LIB_MAJOR" in CMakeLists.txt so the unescaped '(' isn't
treated specially — update the conditional that precedes register_component() to
use grep -qF for a robust match.
- Around line 129-137: The current tag existence check uses git rev-parse
"$VERSION" which can match any ref (branch, tag, etc.); change the check to use
a tag-specific verification by invoking git rev-parse --verify
"refs/tags/$VERSION" (or an equivalent tag-only command) so that the condition
accurately detects existing tags for VERSION before creating and pushing the tag
in the Create and push tag step.

---

Nitpick comments:
In @.github/workflows/release.yaml:
- Around line 156-160: The awk command defines -v version="$VERSION" but then
ignores it and uses shell interpolation in the regex (/^## \['"$VERSION"'\]/),
which is both dead code and treats dots as regex wildcards; change the awk
script to use the passed-in variable and exact matching (e.g., use index($0, "##
[" version "]") to detect the heading) so the version variable is actually used
and dots are matched literally; update the block that sets found, exits on the
next heading (/^## \[/) and prints lines when found to use this index-based
check instead of the current interpolated regex.

Comment on lines +139 to +144
- name: Wait for tag to be available
run: |
# Get the previous release tag (without v prefix)
PREVIOUS_TAG=$(git tag --sort=-v:refname | grep -E '^[0-9]+\.[0-9]+\.[0-9]+' | head -n 1 || true)

echo "RELEASE_NOTES<<EOF" >> $GITHUB_ENV

echo "Waiting for tag to be fully available..."
sleep 5
git fetch --tags
git tag -l "$VERSION"
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Tag availability is not actually verified.

git tag -l "$VERSION" prints the tag name (or nothing) but never fails, so this step always succeeds regardless of whether the tag is available. Add an assertion to make this step meaningful.

Proposed fix
           echo "Waiting for tag to be fully available..."
           sleep 5
           git fetch --tags
-          git tag -l "$VERSION"
+          if ! git tag -l "$VERSION" | grep -q "^${VERSION}$"; then
+            echo "::error::Tag $VERSION is not available after waiting"
+            exit 1
+          fi
+          echo "Tag $VERSION verified"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/release.yaml around lines 139 - 144, The "Wait for tag to
be available" step currently runs `git tag -l "$VERSION"` but doesn't fail if
the tag is missing; change the commands to assert existence and fail the job
when the tag isn't found—e.g., after `git fetch --tags` use a check such as `git
rev-parse --verify "refs/tags/$VERSION"` or test the output of `git tag -l
"$VERSION"` and `exit 1` when empty so the step named "Wait for tag to be
available" reliably errors if the tag isn't present.

Comment on lines +202 to +211
- name: Create Release
env:
GITHUB_TOKEN: ${{ github.token }}
VERSION: ${{ env.VERSION }}
run: |
# Create release using GitHub CLI
gh release create "$VERSION" \
--title "Release $VERSION" \
--notes-file RELEASE_NOTES.md \
--target ${{ github.ref_name }}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

No idempotency guard on release creation.

If this workflow is re-run (e.g., after a transient failure), gh release create will fail because the release already exists. Consider checking for an existing release first or using --clobber if intentional overwrites are acceptable.

Proposed fix
+          # Check if release already exists
+          if gh release view "$VERSION" >/dev/null 2>&1; then
+            echo "Release $VERSION already exists, skipping"
+            exit 0
+          fi
+
           # Create release using GitHub CLI
           gh release create "$VERSION" \
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: Create Release
env:
GITHUB_TOKEN: ${{ github.token }}
VERSION: ${{ env.VERSION }}
run: |
# Create release using GitHub CLI
gh release create "$VERSION" \
--title "Release $VERSION" \
--notes-file RELEASE_NOTES.md \
--target ${{ github.ref_name }}
- name: Create Release
env:
GITHUB_TOKEN: ${{ github.token }}
VERSION: ${{ env.VERSION }}
run: |
# Check if release already exists
if gh release view "$VERSION" >/dev/null 2>&1; then
echo "Release $VERSION already exists, skipping"
exit 0
fi
# Create release using GitHub CLI
gh release create "$VERSION" \
--title "Release $VERSION" \
--notes-file RELEASE_NOTES.md \
--target ${{ github.ref_name }}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/release.yaml around lines 202 - 211, The "Create Release"
step currently runs gh release create "$VERSION" which will fail if a release
for that tag already exists; update the step to first check for an existing
release (e.g., call gh release view "$VERSION" and only run gh release create if
that check fails) or, if overwriting is acceptable, add the --clobber flag to
the gh release create invocation; adjust the GitHub Actions step name "Create
Release" and its run block to implement one of these idempotency guards so
repeated workflow runs don't error.

@Kampi Kampi marked this pull request as ready for review February 23, 2026 12:46
Copilot AI review requested due to automatic review settings February 23, 2026 12:46
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Release automation and repository metadata updates for the 0.0.3 release, primarily improving GitHub Actions release notes generation and publishing to the ESP Component Registry.

Changes:

  • Fix README ESP Registry badge link target.
  • Expand release workflow to generate richer release notes (previous tag, commits, file change summary), target the triggering ref, and upload to the ESP Component Registry.
  • Tweak Copilot instructions markdown code fences to use explicit text blocks for non-code listings.

Reviewed changes

Copilot reviewed 6 out of 7 changed files in this pull request and generated 2 comments.

File Description
README.md Updates ESP Registry badge hyperlink to point to the component page instead of the badge asset.
.github/workflows/release.yaml Enhances automated release notes generation and adds component registry upload step.
.github/copilot-instructions.md Adjusts markdown fence language for directory/checklist/doc structure blocks.

Comment on lines +192 to 197
# Verify content was generated
if [ ! -s RELEASE_NOTES.md ]; then
echo "## Release $VERSION" > RELEASE_NOTES.md
echo "" >> RELEASE_NOTES.md
echo "See [CHANGELOG.md](CHANGELOG.md) for details." >> RELEASE_NOTES.md
fi
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

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

The "Verify content was generated" guard will never trigger because RELEASE_NOTES.md is always non-empty after the earlier "# Release $VERSION" header is written. If the awk extraction fails, you can still end up publishing essentially empty notes. Consider writing the extracted section to a temporary file (or having awk set a flag/exit code) and only appending it when non-empty, or checking that the file has more than just the header before deciding it's valid.

Copilot uses AI. Check for mistakes.
# Add file changes summary
echo "### File Changes" >> RELEASE_NOTES.md
echo "" >> RELEASE_NOTES.md
echo '```diff' >> RELEASE_NOTES.md
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

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

The "File Changes" section wraps git diff --stat output in a diff fenced block, but `--stat` isn't a unified diff and won't be highlighted correctly. Consider switching the fence to text (or omit the language), or output an actual patch diff if you want diff highlighting.

Suggested change
echo '```diff' >> RELEASE_NOTES.md
echo '```text' >> RELEASE_NOTES.md

Copilot uses AI. Check for mistakes.
Signed-off-by: Daniel Kampert <DanielKampert@kampis-elektroecke.de>
- Driver can now be used without PSRAM
- Update copilot instructions
- Use ESP32-S3 SIMD commands to accelerate min/max and palette application

Signed-off-by: Daniel Kampert <DanielKampert@kampis-elektroecke.de>
Kampi added 2 commits April 12, 2026 21:26
Signed-off-by: Daniel Kampert <DanielKampert@kampis-elektroecke.de>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants