Conversation
7ad51f4 to
8a6cc8b
Compare
8a6cc8b to
db264ae
Compare
b249d80 to
fc95161
Compare
- Extracts valid labels from release.yml using github-script - Requires at least one changelog label on PRs - Runs on label changes (labeled/unlabeled events)
fc95161 to
47556ee
Compare
- yq is pre-installed on GitHub runners - no need to install dependencies on every run
|
@claude please review this PR |
|
@claude review |
|
lib seems to be accidentally committed |
- Remove lib/commonjs/, lib/module/, lib/typescript/ from git tracking - Add lib/ to .gitignore - Remove bob build and git add lib from pre-commit hook (lib/ is built at publish time via react-native-builder-bob, not needed in repo) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
WalkthroughThis pull request removes the compiled library code from the repository, including all CommonJS and ES module implementations in Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (2)
.github/workflows/pr-labels.yml (1)
3-5: Consider removingsynchronizetrigger.Label checks don't need to re-run on every push—only when labels change (
labeled,unlabeled) or PR opens/reopens. Thesynchronizetrigger causes unnecessary workflow runs on each commit.⚡ Reduce workflow runs
on: pull_request: - types: [opened, synchronize, reopened, labeled, unlabeled] + types: [opened, reopened, labeled, unlabeled]🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.github/workflows/pr-labels.yml around lines 3 - 5, The pull_request trigger currently includes "synchronize", causing runs on every push; remove "synchronize" from the types array in the workflow so it only triggers on "opened", "reopened", "labeled", and "unlabeled" (update the types list in the top-level `on: pull_request:` block to exclude "synchronize").CONTRIBUTING.md (1)
91-102: Clarify that labels categorize release notes, not auto-bump versions.Lines 95-97 state labels trigger "major/minor/patch version bump," but these labels only categorize release notes—they don't automatically bump semver. The maintainer still chooses the version during
yarn release. Consider rewording to avoid confusion.📝 Suggested rewording
Release notes are automatically generated from merged pull requests. Please label your PRs with: -- `breaking`: Breaking changes (major version bump) -- `enhancement`: New features (minor version bump) -- `bug`: Bug fixes (patch version bump) +- `breaking`: Breaking changes +- `enhancement`: New features +- `bug`: Bug fixes - `documentation`: Documentation updates🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@CONTRIBUTING.md` around lines 91 - 102, Update the "Changelog and Release Notes" section so it's clear that PR labels (`breaking`, `enhancement`, `bug`, `documentation`, `dependencies`) are used only to categorize release notes and do not automatically bump semver; explicitly state that the maintainer selects the version during the release process (e.g., when running `yarn release`) and that `.github/release.yml` controls note organization, not automatic versioning.
🤖 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/pr-labels.yml:
- Around line 7-27: The check-labels job currently enforces labels for all PRs
and will block Dependabot PRs; update the workflow to skip this job or the
"Extract valid labels from release.yml" step when the actor is Dependabot by
adding an if condition that checks github.actor != 'dependabot[bot]' (reference
the job name check-labels and the step id extract-labels), so Dependabot PRs
bypass the labels requirement; alternatively, if you prefer allowing Dependabot
to be validated, include 'dependencies' in the labels set, but the recommended
quick fix is to add the if guard to skip the job/step for Dependabot.
In `@package.json`:
- Around line 116-119: The package.json is missing a "prepare" script so
release-it's npm publish may run without building lib/; add a "prepare" script
that runs the bob build step (e.g., set "prepare": "bob build") to ensure
react-native-builder-bob generates the lib/ directory before publishing—update
package.json's scripts section to include the prepare entry so the package is
built prior to npm publish triggered by the "github" / release-it configuration.
---
Nitpick comments:
In @.github/workflows/pr-labels.yml:
- Around line 3-5: The pull_request trigger currently includes "synchronize",
causing runs on every push; remove "synchronize" from the types array in the
workflow so it only triggers on "opened", "reopened", "labeled", and "unlabeled"
(update the types list in the top-level `on: pull_request:` block to exclude
"synchronize").
In `@CONTRIBUTING.md`:
- Around line 91-102: Update the "Changelog and Release Notes" section so it's
clear that PR labels (`breaking`, `enhancement`, `bug`, `documentation`,
`dependencies`) are used only to categorize release notes and do not
automatically bump semver; explicitly state that the maintainer selects the
version during the release process (e.g., when running `yarn release`) and that
`.github/release.yml` controls note organization, not automatic versioning.
🪄 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: CHILL
Plan: Pro
Run ID: ee2e1582-fb27-407e-8396-8be57e3d0def
⛔ Files ignored due to path filters (27)
lib/commonjs/ReactNativeZoomableView.js.mapis excluded by!**/*.maplib/commonjs/animations/index.js.mapis excluded by!**/*.maplib/commonjs/assets/pin.pngis excluded by!**/*.png,!**/*.pnglib/commonjs/components/AnimatedTouchFeedback.js.mapis excluded by!**/*.maplib/commonjs/components/StaticPin.js.mapis excluded by!**/*.maplib/commonjs/components/index.js.mapis excluded by!**/*.maplib/commonjs/debugHelper/index.js.mapis excluded by!**/*.maplib/commonjs/helper/applyPanBoundariesToOffset.js.mapis excluded by!**/*.maplib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js.mapis excluded by!**/*.maplib/commonjs/helper/coordinateConversion.js.mapis excluded by!**/*.maplib/commonjs/helper/index.js.mapis excluded by!**/*.maplib/commonjs/index.js.mapis excluded by!**/*.maplib/commonjs/typings/index.js.mapis excluded by!**/*.maplib/module/ReactNativeZoomableView.js.mapis excluded by!**/*.maplib/module/animations/index.js.mapis excluded by!**/*.maplib/module/assets/pin.pngis excluded by!**/*.png,!**/*.pnglib/module/components/AnimatedTouchFeedback.js.mapis excluded by!**/*.maplib/module/components/StaticPin.js.mapis excluded by!**/*.maplib/module/components/index.js.mapis excluded by!**/*.maplib/module/debugHelper/index.js.mapis excluded by!**/*.maplib/module/helper/applyPanBoundariesToOffset.js.mapis excluded by!**/*.maplib/module/helper/calcNewScaledOffsetForZoomCentering.js.mapis excluded by!**/*.maplib/module/helper/coordinateConversion.js.mapis excluded by!**/*.maplib/module/helper/index.js.mapis excluded by!**/*.maplib/module/index.js.mapis excluded by!**/*.maplib/module/typings/index.js.mapis excluded by!**/*.mapyarn.lockis excluded by!**/yarn.lock,!**/*.lock,!**/yarn.lock
📒 Files selected for processing (43)
.github/release.yml.github/workflows/pr-labels.yml.gitignoreCONTRIBUTING.mdREADME.mdlib/commonjs/ReactNativeZoomableView.jslib/commonjs/animations/index.jslib/commonjs/components/AnimatedTouchFeedback.jslib/commonjs/components/StaticPin.jslib/commonjs/components/index.jslib/commonjs/debugHelper/index.jslib/commonjs/helper/applyPanBoundariesToOffset.jslib/commonjs/helper/calcNewScaledOffsetForZoomCentering.jslib/commonjs/helper/coordinateConversion.jslib/commonjs/helper/index.jslib/commonjs/index.jslib/commonjs/typings/index.jslib/module/ReactNativeZoomableView.jslib/module/animations/index.jslib/module/components/AnimatedTouchFeedback.jslib/module/components/StaticPin.jslib/module/components/index.jslib/module/debugHelper/index.jslib/module/helper/applyPanBoundariesToOffset.jslib/module/helper/calcNewScaledOffsetForZoomCentering.jslib/module/helper/coordinateConversion.jslib/module/helper/index.jslib/module/index.jslib/module/typings/index.jslib/typescript/ReactNativeZoomableView.d.tslib/typescript/__tests__/index.test.d.tslib/typescript/animations/index.d.tslib/typescript/components/AnimatedTouchFeedback.d.tslib/typescript/components/StaticPin.d.tslib/typescript/components/index.d.tslib/typescript/debugHelper/index.d.tslib/typescript/helper/applyPanBoundariesToOffset.d.tslib/typescript/helper/calcNewScaledOffsetForZoomCentering.d.tslib/typescript/helper/coordinateConversion.d.tslib/typescript/helper/index.d.tslib/typescript/index.d.tslib/typescript/typings/index.d.tspackage.json
💤 Files with no reviewable changes (36)
- lib/module/components/index.js
- lib/commonjs/components/index.js
- lib/typescript/components/AnimatedTouchFeedback.d.ts
- lib/typescript/helper/applyPanBoundariesToOffset.d.ts
- lib/module/animations/index.js
- lib/commonjs/typings/index.js
- lib/typescript/index.d.ts
- lib/typescript/helper/index.d.ts
- lib/commonjs/helper/applyPanBoundariesToOffset.js
- lib/commonjs/index.js
- lib/commonjs/animations/index.js
- lib/typescript/helper/calcNewScaledOffsetForZoomCentering.d.ts
- lib/module/components/AnimatedTouchFeedback.js
- lib/commonjs/debugHelper/index.js
- lib/module/components/StaticPin.js
- lib/module/ReactNativeZoomableView.js
- lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js
- lib/module/helper/index.js
- lib/commonjs/components/AnimatedTouchFeedback.js
- lib/commonjs/helper/index.js
- lib/commonjs/components/StaticPin.js
- lib/typescript/typings/index.d.ts
- lib/module/index.js
- lib/typescript/ReactNativeZoomableView.d.ts
- lib/module/helper/coordinateConversion.js
- lib/typescript/components/index.d.ts
- lib/typescript/helper/coordinateConversion.d.ts
- lib/typescript/components/StaticPin.d.ts
- lib/commonjs/helper/coordinateConversion.js
- lib/typescript/debugHelper/index.d.ts
- lib/module/typings/index.js
- lib/module/debugHelper/index.js
- lib/typescript/animations/index.d.ts
- lib/commonjs/ReactNativeZoomableView.js
- lib/module/helper/calcNewScaledOffsetForZoomCentering.js
- lib/module/helper/applyPanBoundariesToOffset.js
- Add prepare script (bob build) so lib/ is built before npm publish - Skip pr-labels check for dependabot[bot] actor Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ependabot" This reverts commit db49218.
This reverts commit ae88a40.
Dependabot PRs are excluded from release notes via release.yml authors field, so they don't need changelog labels. Without this, Dependabot PRs would be blocked by the required-labels check. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
# Conflicts: # lib/commonjs/ReactNativeZoomableView.js # lib/commonjs/ReactNativeZoomableView.js.map # lib/commonjs/animations/index.js # lib/commonjs/animations/index.js.map # lib/commonjs/components/AnimatedTouchFeedback.js # lib/commonjs/components/AnimatedTouchFeedback.js.map # lib/commonjs/components/StaticPin.js # lib/commonjs/components/StaticPin.js.map # lib/commonjs/components/index.js # lib/commonjs/components/index.js.map # lib/commonjs/debugHelper/index.js # lib/commonjs/debugHelper/index.js.map # lib/commonjs/helper/applyPanBoundariesToOffset.js # lib/commonjs/helper/applyPanBoundariesToOffset.js.map # lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js # lib/commonjs/helper/calcNewScaledOffsetForZoomCentering.js.map # lib/commonjs/helper/coordinateConversion.js # lib/commonjs/helper/coordinateConversion.js.map # lib/commonjs/helper/index.js # lib/commonjs/helper/index.js.map # lib/commonjs/index.js # lib/commonjs/index.js.map # lib/commonjs/typings/index.js # lib/commonjs/typings/index.js.map # lib/module/ReactNativeZoomableView.js # lib/module/ReactNativeZoomableView.js.map # lib/module/animations/index.js # lib/module/animations/index.js.map # lib/module/components/AnimatedTouchFeedback.js # lib/module/components/AnimatedTouchFeedback.js.map # lib/module/components/StaticPin.js # lib/module/components/StaticPin.js.map # lib/module/components/index.js # lib/module/components/index.js.map # lib/module/debugHelper/index.js # lib/module/debugHelper/index.js.map # lib/module/helper/applyPanBoundariesToOffset.js # lib/module/helper/applyPanBoundariesToOffset.js.map # lib/module/helper/calcNewScaledOffsetForZoomCentering.js # lib/module/helper/calcNewScaledOffsetForZoomCentering.js.map # lib/module/helper/coordinateConversion.js # lib/module/helper/coordinateConversion.js.map # lib/module/helper/index.js # lib/module/helper/index.js.map # lib/module/index.js # lib/module/index.js.map # lib/module/typings/index.js # lib/module/typings/index.js.map # lib/typescript/ReactNativeZoomableView.d.ts # lib/typescript/animations/index.d.ts # lib/typescript/components/AnimatedTouchFeedback.d.ts # lib/typescript/components/StaticPin.d.ts # lib/typescript/components/index.d.ts # lib/typescript/debugHelper/index.d.ts # lib/typescript/helper/applyPanBoundariesToOffset.d.ts # lib/typescript/helper/calcNewScaledOffsetForZoomCentering.d.ts # lib/typescript/helper/coordinateConversion.d.ts # lib/typescript/helper/index.d.ts # lib/typescript/index.d.ts # lib/typescript/typings/index.d.ts
PR #158 removed checked-in lib/ and added it to .gitignore. These remaining tracked files are now redundant.
|
@claude review |
…exclude labels in PR check - Upgrade release-it from ^14.2.2 to ^15.0.0 so the autoGenerate option is recognized and passes generate_release_notes to the GitHub API - Extract exclude labels (ignore-for-release, dependencies) in pr-labels workflow so PRs with those labels pass the required-labels check Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
LGTM — the two functional issues from the previous review (release-it version, label extraction) have been addressed. The remaining inline comments are documentation nits.
Extended reasoning...
Overview
This PR sets up automatic changelog generation via GitHub Releases' native PR-based notes, adds a required-labels workflow for PRs, upgrades release-it from v14 to v15, and removes the now-redundant @release-it/conventional-changelog plugin. Changes touch .github/release.yml, .github/workflows/pr-labels.yml, package.json, CONTRIBUTING.md, and README.md.
Security risks
None. This is a CI/CD configuration change with no auth, crypto, or permissions-sensitive code.
Level of scrutiny
Low-to-medium. The changes are CI infrastructure — workflow files and tooling config. The logic is straightforward and the critical correctness issues (version compatibility, label coverage) have been resolved in prior iterations.
Other factors
Both bugs I flagged in the previous review were promptly addressed: release-it was upgraded to ^15.0.0 (so autoGenerate: true is now recognized) and the label-extraction script was updated to include exclude labels. The outstanding inline comments in this pass are documentation nits in CONTRIBUTING.md with no functional impact.
…sion bumps - Remove parenthetical version bump claims from label descriptions since version is chosen interactively by maintainer during yarn release - Add ignore-for-release to the list of excluded labels alongside dependencies Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
| "react": "17.0.2", | ||
| "react-native": "0.79.7", | ||
| "react-native-builder-bob": "^0.30.0", | ||
| "release-it": "^14.2.2", | ||
| "release-it": "^15.0.0", |
There was a problem hiding this comment.
🔴 This PR gitignores lib/ but never adds a prepare script to package.json, so direct git URL installs (e.g. npm install github:openspacelabs/react-native-zoomable-view) will succeed but produce a broken package — lib/ is never built, causing require('@openspacelabs/react-native-zoomable-view') to fail since main/module/types all point into lib/. Fix by adding "prepare": "bob build" to the scripts section; prepublishOnly only runs during npm publish, not git installs.
Extended reasoning...
What the bug is
This PR removes lib/ from version control by adding it to .gitignore (the PR description confirms: "Removed build artifacts from version control"). However, the package.json scripts section contains only prepublishOnly: yarn build and no prepare script. The scripts section is: prepublishOnly, test, typescript, lint, build, release, example, pods, bootstrap — no prepare entry.
The specific code path that triggers it
When a developer installs directly from a git URL — npm install github:openspacelabs/react-native-zoomable-view — npm clones the repo, then runs the prepare lifecycle hook before completing installation. Because prepare is absent, no build runs, lib/ is never created, and the installed package is non-functional. The main field points to lib/commonjs/index, module to lib/module/index, and types to lib/typescript/index.d.ts — none of which exist.
Why existing code doesn't prevent it
prepublishOnly fires only during npm publish (and npm pack), not during git URL installs. The CI release workflow correctly relies on prepublishOnly for registry publishes, so those are unaffected. But the npm lifecycle hook for git installs is specifically prepare, which is missing.
Before this PR: lib/ was committed to git, so it was present after cloning — git installs worked. After this PR: lib/ is gitignored, cloning gives no lib/, no prepare hook builds it, and the install silently succeeds with a broken package.
The claimed fix was never applied
CodeRabbit flagged this as Critical (comment id 3019192531 on package.json line 121). The PR author thomasttvo responded: "Fixed — added prepare: bob build script to package.json". However, examining the actual package.json in this PR, the scripts section has no prepare entry. The fix was acknowledged in the timeline but never committed to the code.
Step-by-step proof
- Developer runs:
npm install github:openspacelabs/react-native-zoomable-view - npm clones the repo —
lib/is absent (gitignored, not committed) - npm runs lifecycle hooks:
preinstall→install→postinstall→prepare prepareis undefined in package.json — no build runs- Installation exits 0 (success), but
lib/does not exist - Consumer calls
require('@openspacelabs/react-native-zoomable-view') - Node resolves
main: "lib/commonjs/index"→ MODULE_NOT_FOUND error
Fix: Add "prepare": "bob build" to the scripts section of package.json.
🔬 also observed by 3019192531
| authors: | ||
| - dependabot |
There was a problem hiding this comment.
🟡 The authors exclude filter in .github/release.yml lists 'dependabot' but the GitHub bot's actual login is 'dependabot[bot]' (with the [bot] suffix), making the filter technically ineffective — though in practice Dependabot PRs are still excluded via the 'dependencies' label in exclude.labels.
Extended reasoning...
What the bug is
The authors field at line 7 of .github/release.yml lists '- dependabot', but GitHub bot accounts use the login format 'dependabot[bot]' (with the [bot] suffix). GitHub's release notes generator matches authors by exact login, so this filter would never match any real PR author.
The specific code path
When a Dependabot PR is merged and a new GitHub release is created, the automatic release notes generator reads .github/release.yml to determine which PRs to include/exclude. The exclude.authors field is matched against the PR author's GitHub login. Dependabot's actual login is 'dependabot[bot]', not 'dependabot', so the filter never fires.
Why existing code doesn't fully prevent it
The same PR correctly uses 'dependabot[bot]' in pr-labels.yml line 10: 'if: github.actor != dependabot[bot]'. The inconsistency is evident when comparing the two files in this PR. Three refutations raised the argument that GitHub's release.yml documentation may show 'dependabot' (without [bot]) as the canonical format — this is a valid counter-argument since the release notes generator is a different system from GitHub Actions context variables. However, all confirming verifiers agree that the GitHub login for the Dependabot app is 'dependabot[bot]', and the sister file in this very PR proves the author knows the correct format.
What the impact would be
The practical impact is nil. Dependabot PRs automatically receive the 'dependencies' label from GitHub, and 'dependencies' is already listed under exclude.labels. So Dependabot PRs are excluded from release notes via the label filter regardless of whether the authors filter works. The broken authors filter is dead code. Step-by-step: (1) Dependabot opens a dependency update PR; (2) GitHub auto-applies the 'dependencies' label; (3) release notes generator checks labels — the PR matches exclude.labels: [dependencies]; (4) the PR is excluded from release notes. The authors filter adds nothing.
How to fix
Change '- dependabot' to '- dependabot[bot]' in .github/release.yml line 7. This makes the filter consistent with the correct login format used in pr-labels.yml and aligns with the actual GitHub bot login. The fix is cosmetic — the label-based exclusion already works — but removes confusing dead code.
Summary by CodeRabbit
Documentation
Chores