jamesfredley commented on code in PR #16025:
URL: https://github.com/apache/grails-core/pull/16025#discussion_r3677405547


##########
gradle/rat-root-config.gradle:
##########
@@ -20,6 +20,9 @@ apply plugin: 'org.nosphere.apache.rat'
 tasks.named('rat') {
     def allExcludes = [
             '.asf.yaml', // ASF metadata for github integration excluded from 
src zip
+            '.omo/**', // local agent work state excluded from src zip
+            '.claude/**', '.clinerules', '.cursorrules', '.windsurfrules', // 
local agent configuration excluded from src zip

Review Comment:
   Corrected. The important detail is that these are not untracked local files: 
`CLAUDE.md`, `GEMINI.md`, `.clinerules`, `.cursorrules`, and `.windsurfrules` 
are tracked symlinks to `AGENTS.md`, and `.claude/skills/*/SKILL.md` are 
tracked symlinks into `.agents/skills/`. Gitignoring them would be wrong, and 
excluding them from RAT was unnecessary because they resolve to files that 
already carry the license header.
   
   So the exclusions are now split by what each mechanism is actually for, and 
the comments say the true reason:
   
   - `.omo/**` and the new `.worktrees/**` - untracked local agent state and 
worktrees. Gitignored (that part of your comment was correct and is now done) 
and excluded from both RAT and the src zip.
   - `.claude/settings.json` - a real JSON file, and JSON cannot carry a 
license header, same rationale as the existing 
`spring-configuration-metadata.json` entry.
   - The symlinks - excluded from RAT only, and they ship in the src zip again 
per your other comment.
   
   On that last one: I first tried dropping the RAT exclusion entirely on the 
theory that RAT would follow the link to `AGENTS.md`. It does not, portably. 
`./gradlew rat` then failed with 8 unapproved licenses, because on a platform 
without symlink support git materializes each one as a plain text file 
containing the link target. The exclusion is kept with that written down as the 
reason rather than the previous, inaccurate "excluded from src zip".



##########
.github/workflows/vulnerability-scan.yml:
##########
@@ -36,9 +36,9 @@ jobs:
       contents: read
     steps:
       - name: "📥 Checkout repository"
-        uses: actions/checkout@v6
+        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 
v6.0.2

Review Comment:
   Agreed, reverted. Every `actions/*` reference this PR had pinned is back to 
its original version reference. `gradle.yml`, `vulnerability-scan.yml`, 
`release-close.yml`, and `release-publish-docs.yml` now show no diff at all 
against `8.0.x`.
   
   The validator was changed to match the policy rather than fight it: 
`RepositoryConventionsTask` now carries `EXEMPT_ACTION_OWNERS = ['actions', 
'apache']`, which skips both the 40-hex SHA requirement and the cross-file 
SHA-consistency check for those namespaces while still requiring a non-empty 
`@ref`. Third-party actions and Docker digests stay enforced. New specs cover 
the accept, reject, and trailing-`@` cases.



##########
.github/workflows/release.yml:
##########
@@ -690,7 +698,7 @@ jobs:
         # Runs on the JDK 21 pin, where settings.gradle auto-prunes the 
Micronaut island.
         run: ./gradlew grails-doc:build -PgithubBranch=${TARGET_BRANCH}
       - name: "🚀 Publish to GitHub Pages"
-        uses: apache/grails-github-actions/deploy-github-pages@asf
+        uses: 
apache/grails-github-actions/deploy-github-pages@fe90f651c47c5230cdd70b6fee0e0d250fea30ac
 # asf

Review Comment:
   Agreed, reverted. All `apache/grails-github-actions/*` references are back 
to `@asf`, and `RepositoryConventionsTask` now exempts the `apache` owner 
namespace from the SHA rule, so the gate no longer encodes the opposite of this 
decision. A reference with an empty ref is still a violation, but any version 
or branch ref is accepted.



##########
.github/workflows/release.yml:
##########
@@ -765,7 +773,7 @@ jobs:
           ref: ${{ env.TAG }}
           token: ${{ secrets.GITHUB_TOKEN }}
       - name: "⚙️ Run post-release"
-        uses: apache/grails-github-actions/post-release@asf
+        uses: 
apache/grails-github-actions/post-release@fe90f651c47c5230cdd70b6fee0e0d250fea30ac
 # asf

Review Comment:
   Agreed, reverted. All `apache/grails-github-actions/*` references are back 
to `@asf`, and `RepositoryConventionsTask` now exempts the `apache` owner 
namespace from the SHA rule, so the gate no longer encodes the opposite of this 
decision. A reference with an empty ref is still a violation, but any version 
or branch ref is accepted.



##########
.github/workflows/release.yml:
##########
@@ -373,11 +374,18 @@ jobs:
           find . -depth \( -type f -o -type d \) -exec touch -d 
"@${SOURCE_DATE_EPOCH}" {} +
       - name: "📦 Create source distribution ZIP"
         run: >
-          zip -r
+          zip -yr
           ${DIST_NAME}-${VERSION}-src.zip
           grails
           -x 'grails/.git/*'
           -x 'grails/.github/*'
+          -x 'grails/.omo/*'

Review Comment:
   You are right, and the premise was wrong on my side. These are tracked 
symlinks to `AGENTS.md` (and, under `.claude/skills/`, to `.agents/skills/`), 
so there is nothing to gitignore and nothing to decide about checking them in. 
They are already checked in deliberately.
   
   The zip exclusions for them are removed, so they ship again. What remains 
excluded from the zip is `.omo/*` and the new `.worktrees/*`, both genuinely 
local and untracked, plus `.asf.yaml` (see the separate thread below).
   
   `.gitignore` does now gain `.omo/` and `.worktrees/`, which is the part of 
your comment that was correct: those are the genuinely local, untracked ones.



##########
.github/workflows/release.yml:
##########
@@ -373,11 +374,18 @@ jobs:
           find . -depth \( -type f -o -type d \) -exec touch -d 
"@${SOURCE_DATE_EPOCH}" {} +
       - name: "📦 Create source distribution ZIP"
         run: >
-          zip -r
+          zip -yr
           ${DIST_NAME}-${VERSION}-src.zip
           grails
           -x 'grails/.git/*'
           -x 'grails/.github/*'
+          -x 'grails/.omo/*'
+          -x 'grails/.claude/*'
+          -x 'grails/.clinerules'
+          -x 'grails/.cursorrules'
+          -x 'grails/.windsurfrules'
+          -x 'grails/CLAUDE.md'

Review Comment:
   Agreed, and removed from the exclude list. `CLAUDE.md`, `GEMINI.md`, 
`.clinerules`, `.cursorrules`, `.windsurfrules`, and `.claude/**` all ship 
again.
   
   This works cleanly because the step keeps `zip -y`: they are symlinks, so 
they are stored as links pointing at `AGENTS.md` and `.agents/skills/**`, which 
are themselves inside the zip. No dangling links and no duplicated content.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to