Release v0.0.9#56
Conversation
|
Warning Rate limit exceeded
Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 44 minutes and 51 seconds. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughVersion 0.0.9 release documentation: CHANGELOG.md is updated to record new features (exclusion pattern syntax, right-click directory actions, minimum IDE build requirement) and past versions are reformatted with structured subsections. gradle.properties version incremented from 0.0.8 to 0.0.9. Changes
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~3 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 5
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.buildkite/pipeline.qodana.yml:
- Around line 16-18: CHANGED is populated using a two-commit diff which can miss
earlier PR changes; replace the git diff invocation with a full PR diff (e.g.,
use git diff --name-only origin/main...HEAD or equivalent so CHANGED covers the
whole PR) and make the grep pipeline that builds NON_DOC safe under set -e by
appending "|| true" to each grep or by running grep against CHANGED via a
here-string/printf and using "|| true" (e.g., NON_DOC="$(printf '%s\n'
"$CHANGED" | grep -vE '^(CHANGELOG|CONTRIBUTING|CODE_OF_CONDUCT|README)\.md$' |
grep -v '^img/' || true)"); keep the existing downstream if [ -z "$NON_DOC" ];
then logic so the script correctly skips when no non-doc files remain.
In @.buildkite/pipeline.release.yml:
- Around line 13-20: Update the Docker step configuration so the release
container has the GitHub CLI and receives GITHUB_TOKEN: change the docker image
value from "gradle:8-jdk21" to "gradle:9-jdk21" and add GITHUB_TOKEN to the
docker plugin environment list (alongside PUBLISH_TOKEN, CERTIFICATE_CHAIN,
PRIVATE_KEY, PRIVATE_KEY_PASSWORD), and if the chosen image still lacks gh,
install the GitHub CLI in a setup command executed before the gh invocations or
replace the docker-wrapped step with a non-docker step for the gh-based
release/PR operations; ensure this fixes the gh calls referenced in the pipeline
(the gh invocations on the steps around lines 25, 36, 47, 51).
In @.buildkite/pipeline.ui-tests.yml:
- Around line 18-28: The IDE readiness loops currently fall through to running
./gradlew test even after 15 failed probes; update each readiness loop (the bash
loop using for i in $$(seq 1 15) with curl -sf http://127.0.0.1:8082 and the
equivalent macOS block) to detect timeout and exit with a non‑zero status (e.g.,
after the loop completes without a successful curl, call exit 1) so the pipeline
fails fast; for the Windows block implement the suggested READY flag (set
READY=0 before the loop, set READY=1 on success, and after the :ready label
check if READY is still 0 then call exit /b 1) so tests never run when the IDE
never becomes ready.
In @.buildkite/pipeline.yml:
- Around line 49-51: The pipeline currently deletes every draft release by
selecting all items with .draft == true; instead restrict deletion to the draft
that matches the release tag/version being created. Update the gh api jq filter
used in the two gh api calls (the pipeline commands that pipe through --jq '.[]
| select(.draft == true) | .id') to also match .tag_name (or .name) against the
pipeline's release variable (e.g., RELEASE_TAG, VERSION, or BUILDKITE_TAG) so
only the draft for the current tag is removed; ensure the selection becomes
something like select(.draft == true and .tag_name == env.RELEASE_TAG) so
unrelated draft releases are preserved.
- Around line 45-56: The CHANGELOG extraction uses gradle getChangelog with the
--unreleased flag, which returns the empty Unreleased section; update the
CHANGELOG assignment (symbol CHANGELOG and the gradle invocation) to call gradle
getChangelog without the --unreleased option so it defaults to the project
VERSION (e.g., 0.0.9), ensuring gh release create uses the populated notes;
leave PROPERTIES and VERSION extraction as-is and only remove the --unreleased
token from the getChangelog invocation.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 57e440f5-55bd-4149-bcbc-9dcfe4056584
📒 Files selected for processing (7)
.buildkite/pipeline.qodana.yml.buildkite/pipeline.release.yml.buildkite/pipeline.ui-tests.yml.buildkite/pipeline.ymlCHANGELOG.mdbuild.gradle.ktsgradle.properties
💤 Files with no reviewable changes (1)
- build.gradle.kts
| CHANGED="$$(git diff --name-only HEAD~1 HEAD 2>/dev/null || git diff --name-only origin/main...HEAD)" | ||
| NON_DOC="$$(echo "$$CHANGED" | grep -vE '^(CHANGELOG|CONTRIBUTING|CODE_OF_CONDUCT|README)\.md$$' | grep -v '^img/')" | ||
| if [ -z "$$NON_DOC" ]; then |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
cat -n .buildkite/pipeline.qodana.yml | head -40Repository: z8dn/advanced-android-project-view
Length of output: 1694
🏁 Script executed:
# Check if there are any set -e or errexit settings at the top of the file or in Buildkite config
head -20 .buildkite/pipeline.qodana.yml && echo "---" && grep -r "set -e\|set -o errexit\|bash -e" .buildkite/ 2>/dev/null || trueRepository: z8dn/advanced-android-project-view
Length of output: 967
🏁 Script executed:
# Check if there are Buildkite configuration files that might set errexit
find .buildkite -name "*.yml" -o -name "*.yaml" | xargs grep -l "shell\|bash" 2>/dev/null || trueRepository: z8dn/advanced-android-project-view
Length of output: 60
🏁 Script executed:
# Let's trace through the git diff behavior logic
# Test what happens with git diff in different scenarios
git log --oneline -5 2>/dev/null || echo "Not a git repo in sandbox" && \
git diff --name-only HEAD~1 HEAD 2>&1 | head -5 || echo "No HEAD~1" && \
echo "---" && \
git diff --name-only origin/main...HEAD 2>&1 | head -5 || echo "No origin/main"Repository: z8dn/advanced-android-project-view
Length of output: 367
🏁 Script executed:
# Check Buildkite documentation patterns and common CI shell behavior
# Let's also check if there's any shell configuration in the repo
find .buildkite -type f -exec cat {} \; | head -100Repository: z8dn/advanced-android-project-view
Length of output: 3707
🏁 Script executed:
# Simulate the grep pipeline behavior with empty vs non-empty input
echo "=== Simulating grep behavior ===" && \
echo "With non-empty input:" && \
echo "file1.md
src/main.kt" | grep -vE '^(CHANGELOG|CONTRIBUTING|CODE_OF_CONDUCT|README)\.md$$' | grep -v '^img/' && echo "Exit code: $?" || echo "Exit code: $?" && \
echo "---" && \
echo "With empty input (only matching docs):" && \
(echo "README.md
CHANGELOG.md" | grep -vE '^(CHANGELOG|CONTRIBUTING|CODE_OF_CONDUCT|README)\.md$$' | grep -v '^img/' && echo "Exit code: $?") || echo "Exit code: $?"Repository: z8dn/advanced-android-project-view
Length of output: 222
🏁 Script executed:
# Check Buildkite default shell behavior and documentation patterns
# Let's look for any shell configuration or buildkite agent settings
find . -name "buildkite.yml" -o -name "buildkite-agent.cfg" 2>/dev/null || echo "No agent config found"Repository: z8dn/advanced-android-project-view
Length of output: 60
🏁 Script executed:
# Test the actual issue: when grep exits with 1 in a command substitution
# Does it break subsequent lines?
bash -c '
set -e
echo "Testing command substitution with failing grep:"
RESULT="$(echo "README.md" | grep -vE "^README" 2>/dev/null || true)"
echo "After grep with || true: Result is: [$RESULT]"
' && echo "Script succeeded" || echo "Script failed"Repository: z8dn/advanced-android-project-view
Length of output: 181
🏁 Script executed:
# Now test WITHOUT the || true to show the issue
bash -c '
set -e
echo "Testing command substitution with failing grep (no || true):"
RESULT="$(echo "README.md" | grep -vE "^README" 2>/dev/null)"
echo "This line should not print"
' && echo "Script succeeded" || echo "Script failed (as expected)"Repository: z8dn/advanced-android-project-view
Length of output: 166
Use full PR diff instead of just the last commit, and add errexit-safe guards to the grep pipeline.
Line 16 prefers HEAD~1 HEAD when it exists (true in multi-commit PRs), preventing the fallback to origin/main...HEAD. This means a PR with code changes in an earlier commit followed by a docs-only final commit will incorrectly skip Qodana. Additionally, the grep pipeline on Line 17 exits with status 1 when all files are filtered out, which causes the script to fail under set -e (standard in Buildkite).
🛠️ Proposed fix
- CHANGED="$$(git diff --name-only HEAD~1 HEAD 2>/dev/null || git diff --name-only origin/main...HEAD)"
- NON_DOC="$$(echo "$$CHANGED" | grep -vE '^(CHANGELOG|CONTRIBUTING|CODE_OF_CONDUCT|README)\.md$$' | grep -v '^img/')"
+ if [ "$${BUILDKITE_PULL_REQUEST:-false}" != "false" ]; then
+ git fetch origin main --depth=1
+ CHANGED="$$(git diff --name-only origin/main...HEAD)"
+ else
+ CHANGED="$$(git diff --name-only HEAD~1 HEAD 2>/dev/null || true)"
+ fi
+ NON_DOC="$$(printf '%s\n' "$$CHANGED" | grep -vE '^(CHANGELOG|CONTRIBUTING|CODE_OF_CONDUCT|README)\.md$$' | grep -v '^img/' || true)"📝 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.
| CHANGED="$$(git diff --name-only HEAD~1 HEAD 2>/dev/null || git diff --name-only origin/main...HEAD)" | |
| NON_DOC="$$(echo "$$CHANGED" | grep -vE '^(CHANGELOG|CONTRIBUTING|CODE_OF_CONDUCT|README)\.md$$' | grep -v '^img/')" | |
| if [ -z "$$NON_DOC" ]; then | |
| if [ "$${BUILDKITE_PULL_REQUEST:-false}" != "false" ]; then | |
| git fetch origin main --depth=1 | |
| CHANGED="$$(git diff --name-only origin/main...HEAD)" | |
| else | |
| CHANGED="$$(git diff --name-only HEAD~1 HEAD 2>/dev/null || true)" | |
| fi | |
| NON_DOC="$$(printf '%s\n' "$$CHANGED" | grep -vE '^(CHANGELOG|CONTRIBUTING|CODE_OF_CONDUCT|README)\.md$$' | grep -v '^img/' || true)" | |
| if [ -z "$$NON_DOC" ]; then |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.buildkite/pipeline.qodana.yml around lines 16 - 18, CHANGED is populated
using a two-commit diff which can miss earlier PR changes; replace the git diff
invocation with a full PR diff (e.g., use git diff --name-only
origin/main...HEAD or equivalent so CHANGED covers the whole PR) and make the
grep pipeline that builds NON_DOC safe under set -e by appending "|| true" to
each grep or by running grep against CHANGED via a here-string/printf and using
"|| true" (e.g., NON_DOC="$(printf '%s\n' "$CHANGED" | grep -vE
'^(CHANGELOG|CONTRIBUTING|CODE_OF_CONDUCT|README)\.md$' | grep -v '^img/' ||
true)"); keep the existing downstream if [ -z "$NON_DOC" ]; then logic so the
script correctly skips when no non-doc files remain.
| - docker#v5.12.0: | ||
| image: "gradle:8-jdk21" | ||
| environment: | ||
| - PUBLISH_TOKEN | ||
| - CERTIFICATE_CHAIN | ||
| - PRIVATE_KEY | ||
| - PRIVATE_KEY_PASSWORD | ||
| commands: |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# Check the release pipeline file
cat -n .buildkite/pipeline.release.yml | head -60Repository: z8dn/advanced-android-project-view
Length of output: 2321
🏁 Script executed:
# Check other buildkite pipelines to compare gradle versions
find .buildkite -name "*.yml" -o -name "*.yaml" | head -20Repository: z8dn/advanced-android-project-view
Length of output: 197
🏁 Script executed:
# Search for gh command usage in the release pipeline
rg "gh " .buildkite/pipeline.release.yml -A 2 -B 2Repository: z8dn/advanced-android-project-view
Length of output: 732
🏁 Script executed:
# Check main CI pipeline for gradle version
cat -n .buildkite/pipeline.yml | grep -A 5 -B 5 "gradle" | head -40Repository: z8dn/advanced-android-project-view
Length of output: 1418
🏁 Script executed:
# Check other pipelines for docker/gradle config
rg "image.*gradle" .buildkite/ -A 2 -B 2Repository: z8dn/advanced-android-project-view
Length of output: 1116
🌐 Web query:
gradle:8-jdk21 docker image gh CLI github
💡 Result:
The official Docker image gradle:8-jdk21 (latest Gradle 8.x with JDK 21) is available on Docker Hub. It comes pre-installed with git, curl, wget, and other tools useful for builds, but does not include the GitHub CLI (gh). To use it for Gradle builds: docker run --rm -u gradle -v "$PWD":/home/gradle/project -w /home/gradle/project gradle:8-jdk21 gradle build Variants include gradle:8-jdk21-noble (Ubuntu 24.04), gradle:8-jdk21-jammy (Ubuntu 22.04), gradle:8-jdk21-alpine. To add GitHub CLI (gh), extend the image in a Dockerfile. For Ubuntu-based (e.g., gradle:8-jdk21-noble): FROM gradle:8-jdk21-noble USER root RUN apt-get update && apt-get install -y curl gpg \ && curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | gpg --dearmor -o /usr/share/keyrings/githubcli-archive-keyring.gpg \ && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list > /dev/null \ && apt-get update \ && apt-get install -y gh \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* USER gradle For Alpine-based: Use the binary download method from gh releases, as APT is not available. In GitHub Actions, use gradle:8-jdk21 directly or with actions/setup-gh-cli if needed, but gh is pre-installed on GitHub runners. Current version as of 2026-04-20: Gradle 8.14.4-jdk21 (8 tag points to latest 8.x).
Citations:
- 1: https://hub.docker.com/_/gradle
- 2: https://github.com/gradle/docker-gradle
- 3: https://github.com/docker-library/official-images/blob/master/library/gradle
- 4: https://github.com/keeganwitt/docker-gradle
- 5: https://github.com/cli/cli/
- 6: https://www.dolpa.me/the-complete-step-by-step-guide-to-installing-github-cli-gh-on-any-operating-system/
- 7: https://github.com/cli/cli/blob/trunk/docs/install_linux.md
- 8: https://stackoverflow.com/questions/69468265/is-there-a-docker-image-with-github-cli-preinstalled
🌐 Web query:
Buildkite docker plugin environment variable forwarding how it works
💡 Result:
The Buildkite Docker plugin forwards environment variables to the Docker container through three main mechanisms: 1. Explicit environment array: Specify additional env vars as KEY or KEY=value. These map to Docker CLI --env flags and pass values from the host environment. Example: plugins: docker#v5.13.0: environment: - "MY_SECRET_KEY" - "PUBLIC_VAR=kittens" 2. propagate-environment: true (optional, default false): Automatically propagates all pipeline environment variables (from
Citations:
- 1: https://github.com/buildkite-plugins/docker-buildkite-plugin
- 2:
env-propagation-list: programmatically propagate envvars to the container buildkite-plugins/docker-buildkite-plugin#238 - 3: https://buildkite.com/resources/blog/buildkite-plugins-docker-and-shared-environment-variables/
- 4: https://buildkite.com/resources/plugins/buildkite-plugins/docker-buildkite-plugin/
Release container must include GitHub CLI and forward GITHUB_TOKEN.
The gradle:8-jdk21 image does not include the gh CLI tool, and GITHUB_TOKEN is not forwarded to the docker environment. The script calls gh on lines 25, 36, 47, and 51, so this will fail at runtime. Use gradle:9-jdk21 to match CI and add GITHUB_TOKEN to the docker plugin environment list. Additionally, verify the image includes gh or extend it with a custom Dockerfile that installs GitHub CLI before lines 21–56 execute.
🛠️ Required configuration fixes
- docker#v5.12.0:
- image: "gradle:8-jdk21"
+ image: "gradle:9-jdk21"
environment:
- PUBLISH_TOKEN
- CERTIFICATE_CHAIN
- PRIVATE_KEY
- PRIVATE_KEY_PASSWORD
+ - GITHUB_TOKENIf the image still lacks gh, either install it in a setup command before the gh calls or move GitHub release/PR operations into a step without docker wrapping.
📝 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.
| - docker#v5.12.0: | |
| image: "gradle:8-jdk21" | |
| environment: | |
| - PUBLISH_TOKEN | |
| - CERTIFICATE_CHAIN | |
| - PRIVATE_KEY | |
| - PRIVATE_KEY_PASSWORD | |
| commands: | |
| - docker#v5.12.0: | |
| image: "gradle:9-jdk21" | |
| environment: | |
| - PUBLISH_TOKEN | |
| - CERTIFICATE_CHAIN | |
| - PRIVATE_KEY | |
| - PRIVATE_KEY_PASSWORD | |
| - GITHUB_TOKEN | |
| commands: |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.buildkite/pipeline.release.yml around lines 13 - 20, Update the Docker step
configuration so the release container has the GitHub CLI and receives
GITHUB_TOKEN: change the docker image value from "gradle:8-jdk21" to
"gradle:9-jdk21" and add GITHUB_TOKEN to the docker plugin environment list
(alongside PUBLISH_TOKEN, CERTIFICATE_CHAIN, PRIVATE_KEY, PRIVATE_KEY_PASSWORD),
and if the chosen image still lacks gh, install the GitHub CLI in a setup
command executed before the gh invocations or replace the docker-wrapped step
with a non-docker step for the gh-based release/PR operations; ensure this fixes
the gh calls referenced in the pipeline (the gh invocations on the steps around
lines 25, 36, 47, 51).
| - | | ||
| # Wait for IDE to be ready (equivalent to url-health-check-action) | ||
| for i in $$(seq 1 15); do | ||
| if curl -sf http://127.0.0.1:8082 > /dev/null 2>&1; then | ||
| echo "IDE is ready" | ||
| break | ||
| fi | ||
| echo "Attempt $$i/15 — waiting 30s..." | ||
| sleep 30 | ||
| done | ||
| - ./gradlew test |
There was a problem hiding this comment.
Fail fast when the IDE readiness check times out.
All three loops continue to the test command after 15 failed probes. Exit non-zero on timeout so the UI-test failure points to IDE startup instead of producing misleading test results.
🛠️ Proposed fix pattern
+ READY=0
for i in $$(seq 1 15); do
if curl -sf http://127.0.0.1:8082 > /dev/null 2>&1; then
echo "IDE is ready"
+ READY=1
break
fi
echo "Attempt $$i/15 — waiting 30s..."
sleep 30
done
+ if [ "$$READY" -ne 1 ]; then
+ echo "IDE did not become ready after 15 attempts"
+ exit 1
+ fiApply the same guard to the macOS block. For Windows, set a READY variable before the loop and exit /b 1 after :ready when it remains 0.
Also applies to: 42-51, 65-72
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.buildkite/pipeline.ui-tests.yml around lines 18 - 28, The IDE readiness
loops currently fall through to running ./gradlew test even after 15 failed
probes; update each readiness loop (the bash loop using for i in $$(seq 1 15)
with curl -sf http://127.0.0.1:8082 and the equivalent macOS block) to detect
timeout and exit with a non‑zero status (e.g., after the loop completes without
a successful curl, call exit 1) so the pipeline fails fast; for the Windows
block implement the suggested READY flag (set READY=0 before the loop, set
READY=1 on success, and after the :ready label check if READY is still 0 then
call exit /b 1) so tests never run when the IDE never becomes ready.
| PROPERTIES="$$(gradle properties --console=plain -q)" | ||
| VERSION="$$(echo "$$PROPERTIES" | grep "^version:" | cut -f2- -d ' ')" | ||
| CHANGELOG="$$(gradle getChangelog --unreleased --no-header --console=plain -q)" | ||
|
|
||
| gh api repos/{owner}/{repo}/releases \ | ||
| --jq '.[] | select(.draft == true) | .id' \ | ||
| | xargs -I '{}' gh api -X DELETE repos/{owner}/{repo}/releases/{} | ||
|
|
||
| gh release create "v$$VERSION" \ | ||
| --draft \ | ||
| --title "v$$VERSION" \ | ||
| --notes "$$CHANGELOG" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# First, check if the file exists and read the relevant section
if [ -f .buildkite/pipeline.yml ]; then
echo "=== .buildkite/pipeline.yml lines 45-56 ==="
sed -n '45,56p' .buildkite/pipeline.yml
fiRepository: z8dn/advanced-android-project-view
Length of output: 655
🏁 Script executed:
# Check CHANGELOG.md structure
if [ -f CHANGELOG.md ]; then
echo "=== CHANGELOG.md structure (first 100 lines) ==="
head -n 100 CHANGELOG.md
fiRepository: z8dn/advanced-android-project-view
Length of output: 6787
🏁 Script executed:
# Look for Gradle Changelog Plugin version in build configuration
echo "=== Gradle Changelog Plugin configuration ==="
find . -name "build.gradle*" -o -name "gradle.properties" -o -name "settings.gradle*" | head -5 | xargs grep -l "changelog" 2>/dev/null || echo "Searching for changelog plugin configuration..."Repository: z8dn/advanced-android-project-view
Length of output: 142
🏁 Script executed:
# Search for gradle getChangelog usage in the codebase
echo "=== Searching for gradle getChangelog usage ==="
rg "getChangelog" --type yaml --type gradle -B 2 -A 2Repository: z8dn/advanced-android-project-view
Length of output: 125
🏁 Script executed:
# Check build.gradle.kts for Gradle Changelog Plugin configuration
echo "=== build.gradle.kts content ==="
cat -n build.gradle.kts | head -80Repository: z8dn/advanced-android-project-view
Length of output: 3737
🏁 Script executed:
# Search for changelog plugin version and configuration
echo "=== Searching for changelog plugin in build files ==="
rg "changelog|getChangelog" build.gradle.kts -B 2 -A 2Repository: z8dn/advanced-android-project-view
Length of output: 1154
🏁 Script executed:
# Check if there's a gradle.properties with version info
echo "=== gradle.properties ==="
if [ -f gradle.properties ]; then
cat gradle.properties
fiRepository: z8dn/advanced-android-project-view
Length of output: 1731
🏁 Script executed:
# Check the Gradle Changelog Plugin documentation and behavior
echo "=== Checking for gradle task definitions ==="
rg "getChangelog|task.*changelog" build.gradle.kts -B 2 -A 2Repository: z8dn/advanced-android-project-view
Length of output: 122
🏁 Script executed:
# Look at the full changelog configuration in build.gradle.kts
echo "=== Full changelog configuration ==="
rg "changelog" build.gradle.kts -B 3 -A 3 | head -50Repository: z8dn/advanced-android-project-view
Length of output: 1241
🌐 Web query:
Gradle Changelog Plugin getChangelog task behavior --unreleased flag
💡 Result:
The --unreleased flag for the getChangelog task in the JetBrains Gradle Changelog Plugin (org.jetbrains.changelog) instructs the task to return change notes specifically from the unreleased section of the changelog file (typically the [Unreleased] section at the top of CHANGELOG.md). By default, --unreleased is false, so the task retrieves changelog for the specified project version (via --project-version or project version). When set to true, it outputs only the unreleased content. Example usage: ./gradlew getChangelog --console=plain -q --unreleased This prints the unreleased changelog to console, respecting other flags like --no-header, --no-summary, --no-links, --no-empty-sections. The plugin's latest version is 2.5.0 (as of November 2025), and this flag has been available since version 0.3.1.
Citations:
- 1: https://github.com/JetBrains/gradle-changelog-plugin
- 2: https://plugins.gradle.org/plugin/org.jetbrains.changelog
- 3: https://github.com/JetBrains/gradle-changelog-plugin/blob/main/CHANGELOG.md
Remove --unreleased flag to include release notes for v0.0.9.
The CHANGELOG.md has an empty [Unreleased] section and populated [0.0.9] section. Line 47 uses --unreleased, which reads only the unreleased section, resulting in blank draft release notes. The plugin defaults to the project version (0.0.9) without this flag, so the fix below will include the actual release notes:
🛠️ Proposed fix
- CHANGELOG="$$(gradle getChangelog --unreleased --no-header --console=plain -q)"
+ CHANGELOG="$$(gradle getChangelog --no-header --console=plain -q)"📝 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.
| PROPERTIES="$$(gradle properties --console=plain -q)" | |
| VERSION="$$(echo "$$PROPERTIES" | grep "^version:" | cut -f2- -d ' ')" | |
| CHANGELOG="$$(gradle getChangelog --unreleased --no-header --console=plain -q)" | |
| gh api repos/{owner}/{repo}/releases \ | |
| --jq '.[] | select(.draft == true) | .id' \ | |
| | xargs -I '{}' gh api -X DELETE repos/{owner}/{repo}/releases/{} | |
| gh release create "v$$VERSION" \ | |
| --draft \ | |
| --title "v$$VERSION" \ | |
| --notes "$$CHANGELOG" | |
| PROPERTIES="$$(gradle properties --console=plain -q)" | |
| VERSION="$$(echo "$$PROPERTIES" | grep "^version:" | cut -f2- -d ' ')" | |
| CHANGELOG="$$(gradle getChangelog --no-header --console=plain -q)" | |
| gh api repos/{owner}/{repo}/releases \ | |
| --jq '.[] | select(.draft == true) | .id' \ | |
| | xargs -I '{}' gh api -X DELETE repos/{owner}/{repo}/releases/{} | |
| gh release create "v$$VERSION" \ | |
| --draft \ | |
| --title "v$$VERSION" \ | |
| --notes "$$CHANGELOG" |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.buildkite/pipeline.yml around lines 45 - 56, The CHANGELOG extraction uses
gradle getChangelog with the --unreleased flag, which returns the empty
Unreleased section; update the CHANGELOG assignment (symbol CHANGELOG and the
gradle invocation) to call gradle getChangelog without the --unreleased option
so it defaults to the project VERSION (e.g., 0.0.9), ensuring gh release create
uses the populated notes; leave PROPERTIES and VERSION extraction as-is and only
remove the --unreleased token from the getChangelog invocation.
| gh api repos/{owner}/{repo}/releases \ | ||
| --jq '.[] | select(.draft == true) | .id' \ | ||
| | xargs -I '{}' gh api -X DELETE repos/{owner}/{repo}/releases/{} |
There was a problem hiding this comment.
Do not delete every draft release in the repository.
This deletes all draft releases before creating the new one. Filter to the current tag/version so unrelated in-progress release drafts are not destroyed.
🛡️ Proposed fix
gh api repos/{owner}/{repo}/releases \
- --jq '.[] | select(.draft == true) | .id' \
- | xargs -I '{}' gh api -X DELETE repos/{owner}/{repo}/releases/{}
+ --jq ".[] | select(.draft == true and .tag_name == \"v$$VERSION\") | .id" \
+ | while read -r release_id; do
+ [ -n "$$release_id" ] && gh api -X DELETE "repos/{owner}/{repo}/releases/$$release_id"
+ done🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.buildkite/pipeline.yml around lines 49 - 51, The pipeline currently deletes
every draft release by selecting all items with .draft == true; instead restrict
deletion to the draft that matches the release tag/version being created. Update
the gh api jq filter used in the two gh api calls (the pipeline commands that
pipe through --jq '.[] | select(.draft == true) | .id') to also match .tag_name
(or .name) against the pipeline's release variable (e.g., RELEASE_TAG, VERSION,
or BUILDKITE_TAG) so only the draft for the current tag is removed; ensure the
selection becomes something like select(.draft == true and .tag_name ==
env.RELEASE_TAG) so unrelated draft releases are preserved.
Qodana for JVMIt seems all right 👌 No new problems were found according to the checks applied ☁️ View the detailed Qodana report Contact Qodana teamContact us at qodana-support@jetbrains.com
|
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@CHANGELOG.md`:
- Around line 5-18: The changelog currently has the v0.0.9 release notes under
the "Unreleased" section; move the entries under "### Added" and "### Changed"
from the "## [Unreleased]" block into the "## [0.0.9] - 2026-04-20" section so
0.0.9 documents the same bullet points (preserve the three Added bullets and the
Changed bullet and their PR links), and leave the "Unreleased" header either
empty or with no release-specific bullets; locate the text by the headings "##
[Unreleased]", "### Added", "### Changed" and the "## [0.0.9] - 2026-04-20"
heading to perform the move.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: b3f876e5-1288-4652-9850-ce52f45366bc
📒 Files selected for processing (2)
CHANGELOG.mdgradle.properties
| ## [Unreleased] | ||
|
|
||
| ### Added | ||
|
|
||
| - File group patterns now support `!pattern` exclusion syntax — use `!*.generated.kt` to exclude files by name or `!docs/*.md` for path-relative globs ([#52](https://github.com/z8dn/advanced-android-project-view/pull/52)) | ||
| - Exclusion and path-based patterns now work in non-Gradle project folders (e.g. a top-level `docs/` or `config/` directory), not only inside Gradle modules ([#53](https://github.com/z8dn/advanced-android-project-view/pull/53)) | ||
| - Right-click any directory in the project tree to instantly add or exclude it from a file group — patterns are generated automatically ([#54](https://github.com/z8dn/advanced-android-project-view/pull/54)) | ||
|
|
||
| ### Changed | ||
|
|
||
| - Minimum supported IDE build bumped to 261 (Android Studio Quail / 2026.1) ([#51](https://github.com/z8dn/advanced-android-project-view/pull/51)) | ||
|
|
||
| ## [0.0.9] - 2026-04-20 | ||
|
|
There was a problem hiding this comment.
Move released notes from Unreleased into 0.0.9 section.
At Line 17, 0.0.9 is empty, while the actual v0.0.9 changes are currently under Unreleased (Lines 7–15). This does not satisfy the release objective of documenting 0.0.9 contents and will produce incorrect release notes.
Proposed fix
## [Unreleased]
-### Added
-
-- File group patterns now support `!pattern` exclusion syntax — use `!*.generated.kt` to exclude files by name or `!docs/*.md` for path-relative globs ([`#52`](https://github.com/z8dn/advanced-android-project-view/pull/52))
-- Exclusion and path-based patterns now work in non-Gradle project folders (e.g. a top-level `docs/` or `config/` directory), not only inside Gradle modules ([`#53`](https://github.com/z8dn/advanced-android-project-view/pull/53))
-- Right-click any directory in the project tree to instantly add or exclude it from a file group — patterns are generated automatically ([`#54`](https://github.com/z8dn/advanced-android-project-view/pull/54))
-
-### Changed
-
-- Minimum supported IDE build bumped to 261 (Android Studio Quail / 2026.1) ([`#51`](https://github.com/z8dn/advanced-android-project-view/pull/51))
-
## [0.0.9] - 2026-04-20
+
+### Added
+
+- File group patterns now support `!pattern` exclusion syntax — use `!*.generated.kt` to exclude files by name or `!docs/*.md` for path-relative globs ([`#52`](https://github.com/z8dn/advanced-android-project-view/pull/52))
+- Exclusion and path-based patterns now work in non-Gradle project folders (e.g. a top-level `docs/` or `config/` directory), not only inside Gradle modules ([`#53`](https://github.com/z8dn/advanced-android-project-view/pull/53))
+- Right-click any directory in the project tree to instantly add or exclude it from a file group — patterns are generated automatically ([`#54`](https://github.com/z8dn/advanced-android-project-view/pull/54))
+
+### Changed
+
+- Minimum supported IDE build bumped to 261 (Android Studio Quail / 2026.1) ([`#51`](https://github.com/z8dn/advanced-android-project-view/pull/51))📝 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.
| ## [Unreleased] | |
| ### Added | |
| - File group patterns now support `!pattern` exclusion syntax — use `!*.generated.kt` to exclude files by name or `!docs/*.md` for path-relative globs ([#52](https://github.com/z8dn/advanced-android-project-view/pull/52)) | |
| - Exclusion and path-based patterns now work in non-Gradle project folders (e.g. a top-level `docs/` or `config/` directory), not only inside Gradle modules ([#53](https://github.com/z8dn/advanced-android-project-view/pull/53)) | |
| - Right-click any directory in the project tree to instantly add or exclude it from a file group — patterns are generated automatically ([#54](https://github.com/z8dn/advanced-android-project-view/pull/54)) | |
| ### Changed | |
| - Minimum supported IDE build bumped to 261 (Android Studio Quail / 2026.1) ([#51](https://github.com/z8dn/advanced-android-project-view/pull/51)) | |
| ## [0.0.9] - 2026-04-20 | |
| ## [Unreleased] | |
| ## [0.0.9] - 2026-04-20 | |
| ### Added | |
| - File group patterns now support `!pattern` exclusion syntax — use `!*.generated.kt` to exclude files by name or `!docs/*.md` for path-relative globs ([`#52`](https://github.com/z8dn/advanced-android-project-view/pull/52)) | |
| - Exclusion and path-based patterns now work in non-Gradle project folders (e.g. a top-level `docs/` or `config/` directory), not only inside Gradle modules ([`#53`](https://github.com/z8dn/advanced-android-project-view/pull/53)) | |
| - Right-click any directory in the project tree to instantly add or exclude it from a file group — patterns are generated automatically ([`#54`](https://github.com/z8dn/advanced-android-project-view/pull/54)) | |
| ### Changed | |
| - Minimum supported IDE build bumped to 261 (Android Studio Quail / 2026.1) ([`#51`](https://github.com/z8dn/advanced-android-project-view/pull/51)) |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@CHANGELOG.md` around lines 5 - 18, The changelog currently has the v0.0.9
release notes under the "Unreleased" section; move the entries under "### Added"
and "### Changed" from the "## [Unreleased]" block into the "## [0.0.9] -
2026-04-20" section so 0.0.9 documents the same bullet points (preserve the
three Added bullets and the Changed bullet and their PR links), and leave the
"Unreleased" header either empty or with no release-specific bullets; locate the
text by the headings "## [Unreleased]", "### Added", "### Changed" and the "##
[0.0.9] - 2026-04-20" heading to perform the move.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Entire-Checkpoint: d5287274f255
Summary
pluginVersionto0.0.9ingradle.properties[0.0.9]changelog entry covering all changes since v0.0.8What's in v0.0.9
Test plan
./gradlew buildpasses0.0.9in plugin descriptor🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
!pattern) support for file groups.Chores