Skip to content

Commit 7610b9c

Browse files
Merge pull request #14 from Postman-Devrel/release/v1.3.0
Release v1.3.0
2 parents e4c75c7 + 57ba3fd commit 7610b9c

6 files changed

Lines changed: 141 additions & 2 deletions

File tree

.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "postman",
3-
"version": "1.2.0",
3+
"version": "1.3.0",
44
"description": "Full API lifecycle management for Claude Code. Sync collections, generate client code, discover APIs, run tests, create mocks, publish docs, and audit security. Powered by the Postman MCP Server.",
55
"author": {
66
"name": "Postman",

.github/.markdownlint.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"MD024": { "siblings_only": true },
23
"MD009": false,
34
"MD013": false,
45
"MD022": false,

.github/scripts/validate-structure.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def main():
7373
errors.append("agents/: Directory not found")
7474

7575
# 6. Check for stray markdown files in root (not README, CLAUDE, LICENSE, or examples)
76-
expected_root_md = {"README.md", "CLAUDE.md", "LICENSE", "token-optimization-findings.md"}
76+
expected_root_md = {"README.md", "CLAUDE.md", "CHANGELOG.md", "LICENSE", "token-optimization-findings.md"}
7777
for f in sorted(root.glob("*.md")):
7878
if f.name not in expected_root_md:
7979
errors.append(f"{f.name}: Unexpected markdown file in repo root")

.github/workflows/release.yml

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*"
7+
8+
permissions:
9+
contents: write
10+
11+
jobs:
12+
release:
13+
name: Publish Release
14+
runs-on: ubuntu-latest
15+
steps:
16+
- uses: actions/checkout@v4
17+
18+
- name: Verify tag matches plugin.json version
19+
run: |
20+
TAG="${GITHUB_REF_NAME#v}"
21+
PLUGIN_VERSION=$(python -c "import json; print(json.load(open('.claude-plugin/plugin.json'))['version'])")
22+
echo "Tag version: $TAG"
23+
echo "plugin.json: $PLUGIN_VERSION"
24+
if [ "$TAG" != "$PLUGIN_VERSION" ]; then
25+
echo "::error::Tag v$TAG does not match plugin.json version $PLUGIN_VERSION. Bump plugin.json before tagging."
26+
exit 1
27+
fi
28+
29+
- name: Extract release notes from CHANGELOG
30+
id: notes
31+
run: |
32+
TAG="${GITHUB_REF_NAME#v}"
33+
# Print the body of the "## [X.Y.Z]" section, stopping at the next "## " heading.
34+
awk -v ver="$TAG" '
35+
$0 ~ "^## \\[" ver "\\]" { grab=1; next }
36+
grab && /^## / { exit }
37+
grab { print }
38+
' CHANGELOG.md > release-notes.md
39+
if [ ! -s release-notes.md ]; then
40+
echo "::error::No CHANGELOG section found for version $TAG. Add a '## [$TAG]' entry."
41+
exit 1
42+
fi
43+
echo "Release notes:"
44+
cat release-notes.md
45+
46+
- name: Create GitHub Release
47+
env:
48+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
49+
run: |
50+
gh release create "$GITHUB_REF_NAME" \
51+
--title "$GITHUB_REF_NAME" \
52+
--notes-file release-notes.md

CHANGELOG.md

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# Changelog
2+
3+
All notable changes to the Postman Plugin for Claude Code are documented here.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
The version here always matches `version` in `.claude-plugin/plugin.json`. A release
9+
is cut by tagging the matching `vX.Y.Z` (see [Releasing](#releasing)).
10+
11+
## [Unreleased]
12+
13+
## [1.3.0] - 2026-07-20
14+
15+
### Added
16+
17+
- `/postman:learn` command — searches the Postman Learning Center via the
18+
`searchLearningCenter` MCP tool. Requires Full MCP mode (the tool is absent in
19+
`minimal` and `code` modes).
20+
21+
## [1.2.0] - 2026-06-09
22+
23+
### Added
24+
25+
- `postman-context` skill — API discovery, exploration, and client code generation
26+
from real API definitions via `postman context`.
27+
28+
### Changed
29+
30+
- Reworked the unified search tool and search strategy around
31+
`searchPostmanElements` (`ownership` + `privateNetwork` filters).
32+
- Reduced plugin token footprint via progressive-disclosure references and leaner
33+
front matter.
34+
- Updated CI validators for scoped tools.
35+
36+
## [1.1.0] - 2026-04-29
37+
38+
### Added
39+
40+
- OAuth authentication support in `/postman:setup` alongside `POSTMAN_API_KEY`.
41+
42+
### Changed
43+
44+
- Added unique headers across components.
45+
46+
### Removed
47+
48+
- Redundant tooling.
49+
50+
## [1.0.0] - 2026-02-02
51+
52+
### Added
53+
54+
- Initial release: 11 slash commands, 7 skills, and the `readiness-analyzer`
55+
sub-agent, powered by the Postman MCP Server (`mcp.postman.com`) plus the
56+
Postman CLI for `request`, `generate-spec`, and `run-collection`.
57+
58+
## Releasing
59+
60+
Releases are automated by `.github/workflows/release.yml`. To cut a release:
61+
62+
1. Bump `version` in `.claude-plugin/plugin.json`.
63+
2. Move your `## [Unreleased]` notes into a new `## [X.Y.Z] - YYYY-MM-DD` section.
64+
3. Merge to `main`.
65+
4. Tag the commit and push the tag:
66+
67+
```bash
68+
git tag vX.Y.Z
69+
git push origin vX.Y.Z
70+
```
71+
72+
The workflow verifies the tag matches `plugin.json`, extracts the matching
73+
CHANGELOG section, and publishes a GitHub Release with those notes.
74+
75+
[Unreleased]: https://github.com/Postman-Devrel/postman-claude-code-plugin/compare/v1.3.0...HEAD
76+
[1.3.0]: https://github.com/Postman-Devrel/postman-claude-code-plugin/compare/v1.2.0...v1.3.0
77+
[1.2.0]: https://github.com/Postman-Devrel/postman-claude-code-plugin/compare/v1.1.0...v1.2.0
78+
[1.1.0]: https://github.com/Postman-Devrel/postman-claude-code-plugin/compare/v1.0.0...v1.1.0
79+
[1.0.0]: https://github.com/Postman-Devrel/postman-claude-code-plugin/releases/tag/v1.0.0

CLAUDE.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,10 @@ CLI commands work with Postman's git sync structure: `postman/collections/` (v3
7373
- The `allowed-tools` field in front matter controls what tools a command/agent can use
7474
- CLI commands need `Bash` in `allowed-tools`; MCP commands list the specific `mcp__postman__<toolName>` tools they call — never the `mcp__postman__*` wildcard. When a command's workflow gains a new MCP call, add that tool to its `allowed-tools`
7575
- Front-matter `description` fields are injected into every user session — keep them to one or two sentences (what it does + when to use it)
76+
77+
## Versioning & Releases
78+
79+
- The plugin follows [Semantic Versioning](https://semver.org). `version` in `.claude-plugin/plugin.json` is the single source of truth
80+
- Every user-facing change bumps the version and adds an entry under `## [Unreleased]` in `CHANGELOG.md` (added a command/skill → minor; fix/tweak → patch; breaking change → major)
81+
- To release: bump `plugin.json`, move `[Unreleased]` notes into a dated `## [X.Y.Z]` section, merge to `main`, then `git tag vX.Y.Z && git push origin vX.Y.Z`
82+
- The `Release` GitHub Actions workflow (`.github/workflows/release.yml`) triggers on `v*` tags: it fails if the tag doesn't match `plugin.json`, extracts the matching CHANGELOG section, and publishes a GitHub Release with those notes

0 commit comments

Comments
 (0)