Thank you for your interest in contributing! This project is maintained by JFrog and licensed under the Apache License 2.0.
All contributors must sign the JFrog CLA before contributions can be merged. A CLA check runs automatically on every pull request — follow the prompts to sign if you haven't already.
- Fork the repository and create a feature branch from
main. - Make your changes, ensuring they follow the existing code style and project conventions.
- Test your changes locally by running the validation script:
node scripts/validate-template.mjs- Commit with a clear, descriptive message.
- Open a pull request against
mainwith a summary of what changed and why.
The skills/ tree is vendored from jfrog/jfrog-skills at the version pinned in .github/scripts/sync-skills-vendor.json. To pull a newer upstream release into this repo:
-
Bump
pinin.github/scripts/sync-skills-vendor.jsonto the new tag (e.g.v0.12.0). -
Run the sync script from the repo root:
node .github/scripts/sync-skills.mjs
It downloads the pinned tarball from
codeload.github.com, extracts it, and replaces the directories listed inpaths(today:skills/) underplugins/jfrog/. -
Bump
versioninplugins/jfrog/.cursor-plugin/plugin.jsonso users actually receive the update — Cursor skips installs whose resolved version hasn't changed. -
Commit the pin bump, the regenerated
plugins/jfrog/skills/tree, and the version bump together, and open a PR.
See VENDOR.md for the full picture.
To cut a release:
- In your PR, bump
.versioninplugins/jfrog/.cursor-plugin/plugin.jsonand sync.metadata.versionin.cursor-plugin/marketplace.jsonto match.plugin.jsonis canonical; thevalidate-versionPR check enforces that the two agree. - Merge to
mainwith[major],[minor], or[patch]in the commit subject - the first line. A marker further down in the body is ignored on purpose: this repo squash-merges, and GitHub pre-fills the squash body from the branch commits or the PR description, either of which may quote a marker while only documenting it.
The marker only decides whether to release; the version comes from the manifest either way, so the bump is reviewed in the PR that makes it. There is no bot push to main. Merging a marker without bumping the manifests fails the release rather than re-tagging a shipped version.
The workflow reads the version from plugin.json, confirms marketplace.json agrees, refuses to continue if that version is already tagged, runs the same marketplace-template check as the validate-template PR workflow, packages the tracked files at HEAD (minus .github/) into release.zip, and creates the vX.Y.Z tag as part of publishing the GitHub Release.
Two things to know before changing it:
- Validation runs inside the release job. Both
validate-template.ymlandvalidate-version.ymlonly run on pull requests, so neither one sees the merge commit the release is cut from. Re-running their checks in the release job is what actually gates the release on them. Keep it that way even if either workflow gains apushtrigger: a separate workflow is still independent of this one, and can be red while a release goes out. - The tag is created by the release, not before it.
gh release create --targetdoes both in one API call, so a failed run can't leave a tag behind with no release attached to it.
Open a GitHub issue with:
- A clear title and description of the problem.
- Steps to reproduce (if applicable).
- Expected vs. actual behavior.
- Keep changes focused — one logical change per PR.
- Follow existing patterns and naming conventions in the codebase.
- Do not commit secrets, credentials, or API keys.
- Add copyright headers to new source files:
// Copyright (c) JFrog Ltd. 2025
// Licensed under the Apache License, Version 2.0
// https://www.apache.org/licenses/LICENSE-2.0
Be respectful and constructive. We are committed to providing a welcoming and inclusive experience for everyone.
Reach out to the JFrog DevRel team at devrel@jfrog.com.