Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
959414e
docs: updating contributor guidelines
alocay Aug 20, 2025
29ad940
ci: adding a skip for the changeset verification if a label is applied
alocay Aug 21, 2025
2953ff1
Merge pull request #276 from apollographql/rebase-relesae-0.7.2-to-de…
alocay Aug 21, 2025
efb67b3
Ignore certain branches for verify changeset (#270)
alocay Aug 21, 2025
cf66482
change wording around mcp auth spec
mabuyo Aug 21, 2025
2cf290c
Merge pull request #278 from apollographql/mm/auth-spec
mabuyo Aug 21, 2025
2dbaa6a
chore: Update CODEOWNERS to include ai-runtime (#283)
swcollard Aug 25, 2025
cc7b99a
Gt 367 GitHub workflow to merge main into develop (#282)
alocay Aug 25, 2025
8a7a924
Merge branch 'develop' into conflict/main-into-develop-pr-
alocay Aug 26, 2025
b58aaca
ci: ignoring conflict and sync branches from changeset verification
alocay Aug 26, 2025
af3ea63
ci: adding ignore check to job level
alocay Aug 26, 2025
9c78e1e
chore: fixing typo
alocay Aug 26, 2025
d860e7e
Merge pull request #295 from apollographql/conflict/main-into-develop…
alocay Aug 26, 2025
0ee66f0
fix: Add missing token propagation for execute tool
DaleSeo Aug 27, 2025
c1fb704
chore: add changeset
DaleSeo Aug 27, 2025
1fa757f
Merge pull request #298 from apollographql/fix-missing-token-propagation
DaleSeo Aug 27, 2025
1544e0d
Merge branch 'develop' into conflict/main-into-develop-pr-299
alocay Aug 27, 2025
18d2f0f
Merge pull request #300 from apollographql/conflict/main-into-develop…
alocay Aug 27, 2025
fbb272d
chore: ensuring workflow as correct change
alocay Aug 27, 2025
1896e67
Merge pull request #301 from apollographql/conflict/main-into-develop…
alocay Aug 27, 2025
587b0ab
Merge remote-tracking branch 'origin/main' into sync/main-into-develo…
apollo-bot2 Aug 28, 2025
fd610cb
Merge pull request #306 from apollographql/sync/main-into-develop-pr-304
alocay Aug 28, 2025
72c0a5d
test: hardcoded version strings in tests
DaleSeo Aug 27, 2025
4df5481
chore: add changeset
DaleSeo Aug 28, 2025
7624cd7
Merge remote-tracking branch 'origin/main' into sync/main-into-develo…
apollo-bot2 Aug 29, 2025
48832ac
deps: update insta in the xtask crate
DaleSeo Aug 29, 2025
71ab1da
chore: update inline snapshots
DaleSeo Aug 29, 2025
1ff0a1d
chore: add changeset
DaleSeo Aug 29, 2025
48282d6
Merge pull request #313 from apollographql/update-snapshots
DaleSeo Aug 29, 2025
29b8e52
Merge pull request #312 from apollographql/sync/main-into-develop-pr-310
alocay Sep 2, 2025
51d9e01
Merge pull request #305 from apollographql/GT-375
DaleSeo Sep 2, 2025
6baf007
Merge remote-tracking branch 'origin/main' into sync/main-into-develo…
apollo-bot2 Sep 2, 2025
61c32f2
Merge pull request #316 from apollographql/sync/main-into-develop-pr-315
alocay Sep 2, 2025
4d593b2
ci: fixes to the canary generation workflow (#318)
alocay Sep 2, 2025
ba78a5a
Gt 367 grabbing pr num and url correctly (#296)
alocay Sep 2, 2025
93bcfff
test: adding a basic manual e2e test for mcp server (#320)
alocay Sep 2, 2025
b1d848b
Merge remote-tracking branch 'origin/main' into sync/main-into-develo…
apollo-bot2 Sep 3, 2025
c8eb509
Merge pull request #324 from apollographql/sync/main-into-develop-pr-308
alocay Sep 3, 2025
eedc53e
ci: GitHub workflow release finalize (#326)
alocay Sep 3, 2025
ab881a4
fix: Validate ExecutableDocument in validate tool (#329)
swcollard Sep 3, 2025
493cbb7
Bumping to version 0.7.5
apollo-bot2 Sep 2, 2025
4e1115a
chore: updating changelong
alocay Sep 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
* @apollographql/graph-tooling
docs @apollographql/docs @apollographql/graph-tooling
* @apollographql/ai-runtime
docs @apollographql/docs @apollographql/ai-runtime
16 changes: 15 additions & 1 deletion .github/workflows/canary-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,15 @@ on:
# https://github.com/orgs/community/discussions/25615
tags-ignore:
- "**"
paths-ignore:
- '.github/**'
- '.cargo/**'
- '.direnv/**'
- '.vscode/**'
- 'docs/**'
- 'Cargo.*'
- 'crates/**/Cargo.*'
- '*.md'
branches:
- develop
workflow_dispatch:
Expand All @@ -30,8 +39,13 @@ jobs:
DATE=$(date -u +%Y%m%dT%H%M%SZ)
echo "version=canary-${DATE}-${SHORT_SHA}" >> "$GITHUB_OUTPUT"

release_container:
release_canary_container:
needs: compute_canary_version
permissions:
contents: read
packages: write
attestations: write
id-token: write
uses: ./.github/workflows/release-container.yml
with:
version: ${{ needs.compute_canary_version.outputs.version }}
Expand Down
96 changes: 91 additions & 5 deletions .github/workflows/prep-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -161,10 +161,96 @@ jobs:
sys.exit(1)
PY

- name: Push changes to release branch
id: push_changes
- name: Commit version bumps
id: commit_version_bumps
run: |
set -e
set -euo pipefail
git add -A || true
git commit -m "Bumping to version ${{ steps.bump.outputs.new_version }}" || true
git push origin HEAD
git commit -m "chore(release): bumping to version ${{ steps.bump.outputs.new_version }}" || echo "No version bump changes to commit"

- name: Update changelog via xtask
run: cargo xtask changeset changelog ${{ steps.bump.outputs.new_version }}

- name: Extract changelog section
id: changelog
shell: bash
env:
NEW: ${{ steps.bump.outputs.new_version }}
OLD: ${{ steps.meta.outputs.current_version }}
run: |
set -euo pipefail
# Write the extracted section to a file and also expose it as a multiline output "body"
python3 - <<'PY' > CHANGELOG_SECTION.md
try:
import os, re, sys, pathlib
new = os.environ["NEW"]
old = os.environ["OLD"]

p = pathlib.Path("CHANGELOG.md")
if not p.exists():
raise FileNotFoundError("CHANGELOG.md not found at repo root")
text = p.read_text(encoding="utf-8")

# Find header for the new version
start = re.search(rf'(?m)^# \[{re.escape(new)}\]', text)
if not start:
print(f"::error::Could not find changelog entry for {new}", file=sys.stderr)
sys.exit(1)

# Prefer the *specific* previous version header if present; otherwise, next '# ['; else, EOF
segment = text[start.start():]
end_old = re.search(rf'(?m)^# \[{re.escape(old)}\]', segment)
if end_old:
segment = segment[:end_old.start()]
else:
nxt = re.search(r'(?m)^# \[', segment[len('# [' + new + ']'):])
if nxt:
# adjust to absolute end
segment = segment[: (len('# [' + new + ']') + nxt.start())]

segment = segment.rstrip() + "\n"
print(segment)
except Exception:
import traceback
traceback.print_exc()
sys.exit(1)
PY

{
echo 'body<<EOF'
cat CHANGELOG_SECTION.md
echo 'EOF'
} >> "$GITHUB_OUTPUT"

- name: Commit and push changelog updates
shell: bash
run: |
set -euo pipefail
git add -A || true
git commit -m "chore(release): changelog for ${{ steps.bump.outputs.new_version }}" || echo "No changelog updates to commit"
git push origin HEAD

- name: Open/Update draft PR to main
env:
HEAD: ${{ github.ref_name }}
TITLE: Releasing ${{ steps.bump.outputs.new_version }}
shell: bash
run: |
set -euo pipefail
# Try to create; if it already exists, update it
if ! gh pr create \
--base main \
--head "$HEAD" \
--title "$TITLE" \
--draft \
--body-file CHANGELOG_SECTION.md \
--label release
then
num=$(gh pr list --head "$HEAD" --base main --state open --json number -q '.[0].number' || true)
if [[ -n "$num" ]]; then
gh pr edit "$num" --title "$TITLE" --body-file CHANGELOG_SECTION.md --add-label release
else
echo "::error::Failed to create or find PR from $HEAD to main"
exit 1
fi
fi
7 changes: 3 additions & 4 deletions .github/workflows/release-container.yml
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,8 @@ jobs:
shell: bash
run: |
docker manifest push $FQDN:$VERSION

# Only push the latest tag if this isn't a release candidate (ends with
# `rc.#`.
if [[ ! "$VERSION" =~ -rc\.[0-9]+$ ]]; then

# push :latest only if version DOES NOT start with canary OR end with -rc.<digits>
if [[ ! "$VERSION" =~ (^canary|-rc\.[0-9]+$) ]]; then
docker manifest push $FQDN:latest
fi
25 changes: 16 additions & 9 deletions .github/workflows/sync-develop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,11 +115,14 @@ jobs:
--title "${{ steps.meta.outputs.sync_title }}" \
--body "${{ steps.meta.outputs.sync_body }} (created via gh CLI)" \
--label back-merge \
--label skip-changeset \
--label automation

# Emit outputs for later steps
gh pr view --base "${BASE_BRANCH}" --head "${{ steps.meta.outputs.sync_branch }}" \
--json number,url | jq -r '"pr_number=\(.number)\npr_url=\(.url)"' >> "$GITHUB_OUTPUT"
# Fetch the newly created PR number, then its URL so that we display in a PR comment
num=$(gh pr list --base "${BASE_BRANCH}" --head "${{ steps.meta.outputs.sync_branch }}" --state open --json number --jq '.[0].number')
url=$(gh pr view "$num" --json url --jq .url)
echo "pr_number=$num" >> "$GITHUB_OUTPUT"
echo "pr_url=$url" >> "$GITHUB_OUTPUT"

# If the merge hit conflicts, open a DIRECT PR: HEAD_BRANCH -> BASE_BRANCH so conflicts can be resolved prior to merge
- name: Open conflict PR
Expand Down Expand Up @@ -155,10 +158,14 @@ jobs:
--body "${{ steps.meta.outputs.conflict_body }}" \
--label back-merge \
--label automation \
--label skip-changeset \
--label conflicts

gh pr view --base "${BASE_BRANCH}" --head "${{ steps.meta.outputs.conflict_branch }}" \
--json number,url | jq -r '"pr_number=\(.number)\npr_url=\(.url)"' >> "$GITHUB_OUTPUT"
# Fetch the newly created conflict PR number, then its URL so that we display in a PR comment
num=$(gh pr list --base "${BASE_BRANCH}" --head "${{ steps.meta.outputs.conflict_branch }}" --state open --json number --jq '.[0].number')
url=$(gh pr view "$num" --json url --jq .url)
echo "pr_number=$num" >> "$GITHUB_OUTPUT"
echo "pr_url=$url" >> "$GITHUB_OUTPUT"

# Comment back on the ORIGINAL merged PR with a link to the sync PR
- name: Comment on source PR with sync PR link
Expand All @@ -169,22 +176,22 @@ jobs:
const owner = context.repo.owner;
const repo = context.repo.repo;
const issue_number = Number(process.env.SOURCE_PR);

const hadConflicts = '${{ steps.prep.outputs.merge_status }}' !== '0';
const syncUrl = '${{ steps.sync_pr.outputs.pr_url || steps.conflict_pr.outputs.pr_url }}';
const head = process.env.HEAD_BRANCH;
const base = process.env.BASE_BRANCH;

const status = hadConflicts ? 'conflicts ❗' : 'clean ✅';
const note = hadConflicts
? 'Opened from a copy of main so conflicts can be resolved safely.'
: 'Opened from a sync branch created off develop.';

const body = [
`Opened sync PR **${head} → ${base}**: ${syncUrl}`,
``,
`Merge status: **${status}**`,
note
].join('\n');

await github.rest.issues.createComment({ owner, repo, issue_number, body });
7 changes: 6 additions & 1 deletion .github/workflows/verify-changeset.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
name: Verify Changeset
on:
pull_request:
branches-ignore:
- main
- release/**
- conflict/*
- sync/*
paths-ignore:
- '.github/**'
- '.cargo/**'
Expand All @@ -14,7 +19,7 @@ on:

jobs:
verify-changeset:
if: ${{ !contains(github.event.pull_request.labels.*.name, 'skip-changeset') }}
if: ${{ !contains(github.event.pull_request.labels.*.name, 'skip-changeset') && !startsWith(github.head_ref, 'sync/') && !startsWith(github.head_ref, 'conflict/') }}
name: Verify
runs-on: ubuntu-24.04
permissions:
Expand Down
38 changes: 38 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,44 @@ All notable changes to this project will be documented in this file.

This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

# [0.7.5] - 2025-09-03

## 🐛 Fixes

### fix: Validate ExecutableDocument in validate tool - @swcollard PR #329

Contains fixes for https://github.com/apollographql/apollo-mcp-server/issues/327

The validate tool was parsing the operation passed in to it against the schema but it wasn't performing the validate function on the ExecutableDocument returned by the Parser. This led to cases where missing required arguments were not caught by the Tool.

This change also updates the input schema to the execute tool to make it more clear to the LLM that it needs to provide a valid JSON object

## 🛠 Maintenance

### test: adding a basic manual e2e test for mcp server - @alocay PR #320

Adding some basic e2e tests using [mcp-server-tester](https://github.com/steviec/mcp-server-tester). Currently, the tool does not always exit (ctrl+c is sometimes needed) so this should be run manually.

### How to run tests?
Added a script `run_tests.sh` (may need to run `chmod +x` to run it) to run tests. Basic usage found via `./run_tests.sh -h`. The script does the following:

1. Builds test/config yaml paths and verifies the files exist.
2. Checks if release `apollo-mcp-server` binary exists. If not, it builds the binary via `cargo build --release`.
3. Reads in the template file (used by `mcp-server-tester`) and replaces all `<test-dir>` placeholders with the test directory value. Generates this test server config file and places it in a temp location.
4. Invokes the `mcp-server-tester` via `npx`.
5. On script exit the generated config is cleaned up.

### Example run:
To run the tests for `local-operations` simply run `./run_tests.sh local-operations`

### Update snapshot format - @DaleSeo PR #313

Updates all inline snapshots in the codebase to ensure they are consistent with the latest insta format.

### Hardcoded version strings in tests - @DaleSeo PR #305

The GraphQL tests have hardcoded version strings that we need to update manually each time we release a new version. Since this isn't included in the release checklist, it's easy to miss it and only notice the test failures later.

# [0.7.4] - 2025-08-27

## 🐛 Fixes
Expand Down
6 changes: 3 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ members = [

[workspace.package]
authors = ["Apollo <[email protected]>"]
version = "0.7.4"
version = "0.7.5"

[workspace.dependencies]
apollo-compiler = "1.27.0"
Expand Down
Loading