Copilot commented on code in PR #517:
URL: https://github.com/apache/casbin-jcasbin/pull/517#discussion_r3141735842


##########
.github/workflows/source-snapshot.yml:
##########
@@ -0,0 +1,139 @@
+name: Build Source Snapshot
+
+on:
+  workflow_run:
+    workflows:
+      - build
+    types:
+      - completed
+    branches:
+      - master
+  workflow_dispatch:
+
+permissions:
+  contents: write
+
+jobs:
+  build-source-snapshot:
+    if: ${{ github.repository == 'apache/casbin-jcasbin' && (github.event_name 
== 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success') }}
+    runs-on: ubuntu-latest

Review Comment:
   Snapshot numbering is derived from existing tags (`LAST_SNAPSHOT_NUMBER + 
1`). If multiple runs execute concurrently (e.g., several merges close 
together), they can compute the same next number and then race to create the 
same tag, causing one run to fail. Consider adding a `concurrency` group (and 
optionally `cancel-in-progress: false`) to serialize snapshot-release creation 
on `master`.



##########
.github/workflows/source-snapshot.yml:
##########
@@ -0,0 +1,139 @@
+name: Build Source Snapshot
+
+on:
+  workflow_run:
+    workflows:
+      - build
+    types:
+      - completed
+    branches:
+      - master
+  workflow_dispatch:
+
+permissions:
+  contents: write
+
+jobs:
+  build-source-snapshot:
+    if: ${{ github.repository == 'apache/casbin-jcasbin' && (github.event_name 
== 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success') }}
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v4
+        with:
+          fetch-depth: 0
+          ref: ${{ github.event.workflow_run.head_sha || github.sha }}
+
+      - name: Compute snapshot metadata
+        id: snapshot
+        run: |
+          LATEST_RELEASE_TAG="$(
+            git tag --list 'v*' |
+              grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' |
+              sort -V |
+              tail -n 1
+          )"
+
+          if [ -z "${LATEST_RELEASE_TAG}" ]; then
+            BASE_VERSION="0.1.0"
+          else
+            RELEASE_VERSION="${LATEST_RELEASE_TAG#v}"
+            MAJOR="${RELEASE_VERSION%%.*}"
+            REST="${RELEASE_VERSION#*.}"
+            MINOR="${REST%%.*}"
+            NEXT_MINOR="$((MINOR + 1))"
+            BASE_VERSION="${MAJOR}.${NEXT_MINOR}.0"
+          fi
+
+          ESCAPED_BASE_VERSION="${BASE_VERSION//./\\.}"
+          LAST_SNAPSHOT_NUMBER="$(
+            git tag --list "v${BASE_VERSION}-snapshot.*" |
+              sed -nE "s/^v${ESCAPED_BASE_VERSION}-snapshot\\.([0-9]+)$/\\1/p" 
|
+              sort -n |
+              tail -n 1
+          )"
+          LAST_SNAPSHOT_NUMBER="${LAST_SNAPSHOT_NUMBER:-0}"
+          NEXT_SNAPSHOT_NUMBER="$((LAST_SNAPSHOT_NUMBER + 1))"
+          SNAPSHOT_VERSION="v${BASE_VERSION}-snapshot.${NEXT_SNAPSHOT_NUMBER}"
+          BASENAME="jcasbin-${SNAPSHOT_VERSION#v}-src"
+
+          echo "latest_release_tag=${LATEST_RELEASE_TAG}" >> "${GITHUB_OUTPUT}"
+          echo "base_version=${BASE_VERSION}" >> "${GITHUB_OUTPUT}"
+          echo "number=${NEXT_SNAPSHOT_NUMBER}" >> "${GITHUB_OUTPUT}"
+          echo "version=${SNAPSHOT_VERSION}" >> "${GITHUB_OUTPUT}"
+          echo "basename=${BASENAME}" >> "${GITHUB_OUTPUT}"
+          if [ -n "${LAST_SNAPSHOT_NUMBER}" ] && [ "${LAST_SNAPSHOT_NUMBER}" 
-gt 0 ]; then
+            echo 
"previous_tag=v${BASE_VERSION}-snapshot.${LAST_SNAPSHOT_NUMBER}" >> 
"${GITHUB_OUTPUT}"
+          else
+            echo "previous_tag=${LATEST_RELEASE_TAG}" >> "${GITHUB_OUTPUT}"
+          fi
+
+      - name: Generate snapshot release notes
+        run: |
+          PREVIOUS_TAG="${{ steps.snapshot.outputs.previous_tag }}"
+          CURRENT_TAG="${{ steps.snapshot.outputs.version }}"
+          CURRENT_VERSION="${CURRENT_TAG#v}"
+          RELEASE_DATE="$(date -u +%F)"
+          RANGE="HEAD"
+
+          if [ -n "${PREVIOUS_TAG}" ]; then
+            RANGE="${PREVIOUS_TAG}..HEAD"
+          fi
+
+          FEATURES="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep -Ei 
'^(feat)(\(.+\))?: ' || true)"
+          FIXES="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep -Ei 
'^(fix)(\(.+\))?: ' || true)"
+          DOCS="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep -Ei 
'^(docs?|doc)(\(.+\))?: ' || true)"

Review Comment:
   The release-notes regexes don’t match Conventional Commits that include 
breaking-change markers (e.g. `feat!:` / `fix(scope)!:`). Since 
semantic-release previously relied on Conventional Commits, this will cause 
some commits to be omitted from snapshot notes. Consider updating the patterns 
to allow an optional `!` before the colon.
   ```suggestion
             FEATURES="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep 
-Ei '^(feat)(\(.+\))?!?: ' || true)"
             FIXES="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep -Ei 
'^(fix)(\(.+\))?!?: ' || true)"
             DOCS="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep -Ei 
'^(docs?|doc)(\(.+\))?!?: ' || true)"
   ```



##########
.github/workflows/maven-snapshot.yml:
##########
@@ -0,0 +1,70 @@
+name: Publish Maven Snapshot
+
+on:
+  workflow_run:
+    workflows:
+      - build
+    types:
+      - completed
+    branches:
+      - master
+  workflow_dispatch:
+
+permissions:
+  contents: read
+
+jobs:
+  publish-maven-snapshot:
+    if: ${{ github.repository == 'apache/casbin-jcasbin' && (github.event_name 
== 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success') }}

Review Comment:
   `workflow_dispatch` can be run from any branch/ref, but the job `if:` 
currently allows publishing a snapshot whenever the workflow is manually 
dispatched. That makes it easy to accidentally deploy snapshots built from 
non-`master` code. Consider tightening the condition to only allow 
`workflow_dispatch` when `github.ref == 'refs/heads/master'` (or otherwise 
enforce the intended ref).
   ```suggestion
       if: ${{ github.repository == 'apache/casbin-jcasbin' && 
((github.event_name == 'workflow_dispatch' && github.ref == 
'refs/heads/master') || github.event.workflow_run.conclusion == 'success') }}
   ```



##########
.github/workflows/source-snapshot.yml:
##########
@@ -0,0 +1,139 @@
+name: Build Source Snapshot
+
+on:
+  workflow_run:
+    workflows:
+      - build
+    types:
+      - completed
+    branches:
+      - master
+  workflow_dispatch:
+
+permissions:
+  contents: write
+
+jobs:
+  build-source-snapshot:
+    if: ${{ github.repository == 'apache/casbin-jcasbin' && (github.event_name 
== 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success') }}

Review Comment:
   `workflow_dispatch` can be run from any branch/ref, but the job `if:` 
currently allows creating snapshot tags/releases whenever the workflow is 
manually dispatched. This can create prereleases from non-`master` code and 
pollute the tag namespace. Consider restricting manual dispatch to `master` 
(e.g., by adding a `github.ref` guard in the job `if:`).
   ```suggestion
       if: ${{ github.repository == 'apache/casbin-jcasbin' && 
((github.event_name == 'workflow_dispatch' && github.ref == 
'refs/heads/master') || github.event.workflow_run.conclusion == 'success') }}
   ```



##########
.github/workflows/source-release-draft.yml:
##########
@@ -0,0 +1,125 @@
+name: Build Source Release Draft
+
+on:
+  push:
+    tags:
+      - "v*"
+
+permissions:
+  contents: write
+
+jobs:
+  build-source-release-draft:
+    if: ${{ github.repository == 'apache/casbin-jcasbin' && 
!contains(github.ref_name, '-') }}
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v4
+        with:
+          fetch-depth: 0
+
+      - name: Compute release metadata
+        id: release
+        run: |
+          TAG_NAME="${GITHUB_REF_NAME}"
+          if ! [[ "${TAG_NAME}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
+            echo "Unsupported release tag: ${TAG_NAME}" >&2
+            exit 1
+          fi
+
+          VERSION="${TAG_NAME#v}"
+          BASENAME="jcasbin-${VERSION}-src"
+          PREVIOUS_TAG="$(
+            git tag --list 'v*' |
+              grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' |
+              sort -V |
+              awk -v current="${TAG_NAME}" '
+                $0 == current {
+                  print previous
+                  exit
+                }
+                {
+                  previous = $0
+                }
+              '
+          )"
+
+          echo "tag=${TAG_NAME}" >> "${GITHUB_OUTPUT}"
+          echo "version=${VERSION}" >> "${GITHUB_OUTPUT}"
+          echo "basename=${BASENAME}" >> "${GITHUB_OUTPUT}"
+          echo "previous_tag=${PREVIOUS_TAG}" >> "${GITHUB_OUTPUT}"
+
+      - name: Generate release notes
+        run: |
+          CURRENT_TAG="${{ steps.release.outputs.tag }}"
+          CURRENT_VERSION="${{ steps.release.outputs.version }}"
+          PREVIOUS_TAG="${{ steps.release.outputs.previous_tag }}"
+          RELEASE_DATE="$(date -u +%F)"
+          RANGE="${CURRENT_TAG}"
+
+          if [ -n "${PREVIOUS_TAG}" ]; then
+            RANGE="${PREVIOUS_TAG}..${CURRENT_TAG}"
+          fi
+
+          FEATURES="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep -Ei 
'^(feat)(\(.+\))?: ' || true)"
+          FIXES="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep -Ei 
'^(fix)(\(.+\))?: ' || true)"
+          DOCS="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep -Ei 
'^(docs?|doc)(\(.+\))?: ' || true)"

Review Comment:
   The release-notes regexes don’t match Conventional Commits that include 
breaking-change markers (e.g. `feat!:` / `fix(scope)!:`), so those commits 
won’t appear in the drafted release notes. Consider updating the patterns to 
allow an optional `!` before the colon.
   ```suggestion
             FEATURES="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep 
-Ei '^(feat)(\(.+\))?!?: ' || true)"
             FIXES="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep -Ei 
'^(fix)(\(.+\))?!?: ' || true)"
             DOCS="$(git log --pretty=format:'%s (%h)' "${RANGE}" | grep -Ei 
'^(docs?|doc)(\(.+\))?!?: ' || true)"
   ```



##########
.github/workflows/maven-ci.yml:
##########
@@ -35,19 +30,3 @@ jobs:
         uses: codecov/codecov-action@v1

Review Comment:
   `codecov/codecov-action@v1` is an older major; consider upgrading to a 
currently supported major (and adjusting config if needed) to avoid 
deprecation/security issues.
   ```suggestion
           uses: codecov/codecov-action@v4
   ```



##########
.github/workflows/maven-ci.yml:
##########
@@ -22,11 +22,6 @@ jobs:
         uses: actions/setup-java@v1

Review Comment:
   `actions/setup-java@v1` is an older major. Consider upgrading to 
`actions/setup-java@v4` (it supports Java 8) to avoid deprecations and pick up 
security fixes.
   ```suggestion
           uses: actions/setup-java@v4
   ```



-- 
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]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to