diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 58fd978..e30f8ae 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -6,7 +6,7 @@ }, "metadata": { "description": "JFrog Platform plugins for Cursor", - "version": "0.5.4", + "version": "0.5.6", "pluginRoot": "plugins" }, "plugins": [ diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..9a08dd1 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,62 @@ +# Copyright (c) JFrog Ltd. 2026 +name: Release + +on: + push: + branches: [main] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: false + +permissions: + contents: write + +jobs: + release: + runs-on: ubuntu-latest + steps: + # Check out the repository with a token so the workflow can push tags + - uses: actions/checkout@v5 + with: + token: ${{ secrets.GITHUB_TOKEN }} + + # Parse the commit message for a [major], [minor], or [patch] tag + - name: Detect release tag in commit message + id: detect + run: | + MSG="${{ github.event.head_commit.message }}" + if echo "$MSG" | grep -qE '\[(major|minor|patch)\]'; then + echo "triggered=true" >> "$GITHUB_OUTPUT" + else + echo "triggered=false" >> "$GITHUB_OUTPUT" + fi + + # Read the current version from the VERSION file + - name: Read version + if: steps.detect.outputs.triggered == 'true' + id: version + run: echo "version=$(cat VERSION)" >> "$GITHUB_OUTPUT" + + # Create a git tag for the version and push it to origin + - name: Create and push tag + if: steps.detect.outputs.triggered == 'true' + run: | + git tag "v${{ steps.version.outputs.version }}" + git push origin "v${{ steps.version.outputs.version }}" + + # Bundle the plugin directory into a zip file for the GitHub Release + - name: Package release artifact + if: steps.detect.outputs.triggered == 'true' + run: zip -r release.zip . --exclude ".git/*" --exclude ".github/*" + + # Publish the GitHub Release with the zip artifact and auto-generated notes + - name: Create GitHub Release + if: steps.detect.outputs.triggered == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release create "v${{ steps.version.outputs.version }}" \ + release.zip \ + --title "Release v${{ steps.version.outputs.version }}" \ + --generate-notes diff --git a/.github/workflows/validate-version.yml b/.github/workflows/validate-version.yml new file mode 100644 index 0000000..bab3303 --- /dev/null +++ b/.github/workflows/validate-version.yml @@ -0,0 +1,32 @@ +# Copyright (c) JFrog Ltd. 2026 +name: Validate version + +on: + pull_request: + branches: [main] + +jobs: + validate: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + + - name: Check version consistency + run: | + VERSION=$(cat VERSION) + FAILED=0 + + PLUGIN_VERSION=$(jq -r '.version' plugins/jfrog/.cursor-plugin/plugin.json) + if [ "$VERSION" != "$PLUGIN_VERSION" ]; then + echo "::error::Version mismatch: VERSION=$VERSION but plugins/jfrog/.cursor-plugin/plugin.json.version=$PLUGIN_VERSION" + FAILED=1 + fi + + MARKET_VERSION=$(jq -r '.metadata.version' .cursor-plugin/marketplace.json) + if [ "$VERSION" != "$MARKET_VERSION" ]; then + echo "::error::Version mismatch: VERSION=$VERSION but .cursor-plugin/marketplace.json.metadata.version=$MARKET_VERSION" + FAILED=1 + fi + + [ "$FAILED" -eq 0 ] && echo "All versions consistent: $VERSION" + exit $FAILED diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1b11640..c040477 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -36,6 +36,15 @@ The `skills/` tree is vendored from [`jfrog/jfrog-skills`](https://github.com/jf See [`VENDOR.md`](VENDOR.md) for the full picture. +## Releasing + +To cut a release: + +1. In your PR, bump `VERSION` and sync both `plugins/jfrog/.cursor-plugin/plugin.json` `.version` and `.cursor-plugin/marketplace.json` `.metadata.version` to match. The `validate-version` PR check enforces this. +2. Merge to `main` with `[major]`, `[minor]`, or `[patch]` anywhere in the commit message. + +The release workflow reads `VERSION`, creates a `vX.Y.Z` git tag, and publishes a GitHub Release with a repo zip attached. No bot push to `main` — the version bump is part of the PR itself. + ## Reporting Issues Open a [GitHub issue](https://github.com/jfrog/cursor-plugin/issues) with: diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..b49b253 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.5.6 diff --git a/plugins/jfrog/.cursor-plugin/plugin.json b/plugins/jfrog/.cursor-plugin/plugin.json index e24c846..3aa316a 100644 --- a/plugins/jfrog/.cursor-plugin/plugin.json +++ b/plugins/jfrog/.cursor-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "jfrog", "displayName": "JFrog Platform", - "version": "0.5.4", + "version": "0.5.6", "description": "JFrog Platform integration with MCP, security skills, supply-chain best practices, and JFrog Agent Guard governance for adding, removing, and listing MCP servers.", "author": { "name": "JFrog", @@ -23,6 +23,7 @@ "logo": "assets/logo.svg", "skills": [ "skills/jfrog/SKILL.md", + "skills/jfrog-ai-catalog-skills/SKILL.md", "skills/jfrog-package-safety-and-download/SKILL.md" ], "hooks": "hooks/hooks.json"