Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
0809eed
ci: enable sync-sample-catalog workflow on main
Yimin-Jin Jun 1, 2026
e9b3c42
ci: enable sync-sample-catalog workflow on main
huimiu Jun 1, 2026
0b104cf
ci(catalog): blacklist invocations_ws sample paths
Yimin-Jin Jun 1, 2026
455fa03
ci(catalog): blacklist invocations_ws sample paths
huimiu Jun 1, 2026
fa5dda2
docs: sync changelog from Skylight
MuyangAmigo Jun 2, 2026
cb7b51d
docs: sync latest changelog entries
MuyangAmigo Jun 2, 2026
c050ea5
Merge remote-tracking branch 'origin/main' into refresh-readme
MuyangAmigo Jun 2, 2026
5b6a60c
Merge pull request #424 from microsoft/refresh-readme
MuyangAmigo Jun 2, 2026
9b1bc61
Update changelog for 1.6.0 release
MuyangAmigo Jun 24, 2026
dbb1ab6
Merge pull request #489 from microsoft/codex/sync-skylight-changelogs
MuyangAmigo Jun 24, 2026
28f388a
docs: sync v1.6.1 hotfix and v1.6.0 VNet entry to WHATS_NEW (#487)
MuyangAmigo Jun 25, 2026
41b6a8d
Merge pull request #494 from microsoft/muyangamigo/whatsnew-v1.6.1
MuyangAmigo Jun 25, 2026
cacb559
docs: add outdated notice linking to official Foundry Toolkit docs
MuyangAmigo Jun 25, 2026
eff53ab
Merge pull request #495 from microsoft/muyangamigo-doc-outdated-notices
MuyangAmigo Jun 25, 2026
be69bed
Add LoRA finetuning doc link
MuyangAmigo Jun 25, 2026
e948ea0
Merge pull request #496 from microsoft/muyangamigo-doc-outdated-notices
MuyangAmigo Jun 25, 2026
ab81db8
docs: sync WHATS_NEW.md from Skylight CHANGELOG (3a79e56)
github-actions[bot] Jun 26, 2026
d2264d6
Merge pull request #500 from microsoft/bot/sync-whats-new
MuyangAmigo Jun 26, 2026
ac85759
docs: sync WHATS_NEW.md from Skylight CHANGELOG (dd96158)
github-actions[bot] Jun 30, 2026
9a4c31b
feat: add foundry skill docs
anchenyi Jun 30, 2026
2391dda
Merge pull request #504 from microsoft/anchenyi/add-skill-docs
anchenyi Jun 30, 2026
e9d77ce
feat: add with/without skill comparison
anchenyi Jul 1, 2026
9d70ec0
chore: wording
anchenyi Jul 1, 2026
5dd412d
Merge pull request #505 from microsoft/anchenyi/add-without-skill
anchenyi Jul 1, 2026
5a0e21b
Merge pull request #503 from microsoft/bot/sync-whats-new
JerryYangKai Jul 2, 2026
b57d066
docs: sync WHATS_NEW.md from Skylight CHANGELOG (b7b7eb2)
github-actions[bot] Jul 9, 2026
41ed4b3
Merge pull request #540 from microsoft/bot/sync-whats-new
anchenyi Jul 9, 2026
16b2b8a
chore: add foundry skill benchmark for gpt5.6 luna and terra
anchenyi Jul 10, 2026
426267e
Merge pull request #542 from microsoft/acnhenyi/add-gpt-5.6
anchenyi Jul 13, 2026
baf4c19
Add MVP release of foundry-agent-canvas (#545)
qinezh Jul 13, 2026
078fd8d
Update foundry-agent-canvas (#548)
qinezh Jul 14, 2026
00f3872
Update README for foundry-agent-canvas (#549)
qinezh Jul 14, 2026
ca6723e
docs: sync WHATS_NEW.md from Skylight CHANGELOG (e39da56)
github-actions[bot] Jul 15, 2026
1bc5e86
Set up CI with Azure Pipelines
developerparvezmosharaf Jul 16, 2026
0d311e5
Package Foundry Agent Canvas as external plugin (#554)
qinezh Jul 16, 2026
b26a861
Merge pull request #551 from microsoft/bot/sync-whats-new
MuyangAmigo Jul 16, 2026
e16be2b
Structuring the extension to work with what Copilot expects (#559)
aaronpowell Jul 17, 2026
c431bf7
chore: update readme of foundry agent canvas (#560)
qinezh Jul 17, 2026
0b7d154
Merge branch 'microsoft:main' into main
developerparvezmosharaf Jul 17, 2026
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
853 changes: 853 additions & 0 deletions .github/scripts/generate_sample_catalog.mjs

Large diffs are not rendered by default.

188 changes: 188 additions & 0 deletions .github/workflows/sync-sample-catalog.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
name: Sync Sample Catalog

on:
workflow_dispatch:
inputs:
commit_sha:
description: "Commit SHA from microsoft-foundry/foundry-samples to pin to"
required: true
type: string

# Least-privilege for the default GITHUB_TOKEN: only what `actions/checkout`
# needs. All writes (push branch + create PR) are performed via the GitHub
# App token generated below, not GITHUB_TOKEN.
permissions:
contents: read

# A single in-flight sync at a time — a re-trigger cancels any earlier run
# rather than racing it for the same PR branch.
concurrency:
group: sync-sample-catalog-${{ github.ref_name }}
cancel-in-progress: true

jobs:
sync:
runs-on: ubuntu-latest
env:
PR_LABEL_CANDIDATES: |
automated-pr
area:samples
area:hosted-agent

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.SYNC_APP_ID }}
private-key: ${{ secrets.SYNC_APP_PRIVATE_KEY }}

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Generate sample catalog
env:
REPO_ROOT: ${{ github.workspace }}
GITHUB_TOKEN: ${{ github.token }}
AZURE_OPENAI_ENDPOINT: ${{ secrets.AZURE_OPENAI_ENDPOINT }}
AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY }}
AZURE_OPENAI_DEPLOYMENT: ${{ secrets.AZURE_OPENAI_DEPLOYMENT }}
run: node .github/scripts/generate_sample_catalog.mjs "${{ inputs.commit_sha }}"

- name: Detect catalog changes
id: diff
shell: bash
run: |
set -euo pipefail

catalog_file="samples/hosted-agent/sample-catalog.json"

if [[ ! -f "$catalog_file" ]]; then
echo "Catalog file not generated."
echo "has_changes=false" >> "$GITHUB_OUTPUT"
exit 0
fi

# Stage the file so git diff detects both new and modified files
git add "$catalog_file"

if git diff --cached --quiet -- "$catalog_file"; then
echo "No changes to sample catalog."
echo "has_changes=false" >> "$GITHUB_OUTPUT"
exit 0
fi

echo "Catalog has changes:"
git diff --cached --stat -- "$catalog_file"

{
echo "## Sample Catalog Sync"
echo
echo "The sample catalog was regenerated from \`microsoft-foundry/foundry-samples\`."
echo
echo "### Changed files"
echo "- \`$catalog_file\`"
} >> "$GITHUB_STEP_SUMMARY"

echo "has_changes=true" >> "$GITHUB_OUTPUT"

- name: Resolve pull request labels
if: steps.diff.outputs.has_changes == 'true'
id: labels
shell: bash
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
run: |
set -euo pipefail

existing_labels=$(gh api --paginate repos/${{ github.repository }}/labels --jq '.[].name')
matched_labels=""

while IFS= read -r candidate; do
if [[ -z "$candidate" ]]; then
continue
fi

if grep -Fqx "$candidate" <<< "$existing_labels"; then
matched_labels+="$candidate"
matched_labels+=$'\n'
fi
done <<< "$PR_LABEL_CANDIDATES"

{
echo "labels<<EOF"
printf '%s' "$matched_labels"
echo
echo "EOF"
} >> "$GITHUB_OUTPUT"

- name: Generate PR branch name
if: steps.diff.outputs.has_changes == 'true'
id: branch
shell: bash
run: |
date_suffix=$(date -u +%Y%m%d)
echo "name=ci/sync-sample-catalog-${{ github.ref_name }}-${date_suffix}" >> "$GITHUB_OUTPUT"

- name: Create draft pull request
if: steps.diff.outputs.has_changes == 'true'
id: cpr
uses: peter-evans/create-pull-request@v8
with:
token: ${{ steps.app-token.outputs.token }}
branch: ${{ steps.branch.outputs.name }}
base: ${{ github.ref_name }}
delete-branch: true
draft: always-true
commit-message: |
ci: sync sample catalog from foundry-samples (${{ github.ref_name }})
title: "ci: sync sample catalog from foundry-samples (${{ github.ref_name }})"
body: |
## Summary
This automated draft PR updates `samples/hosted-agent/sample-catalog.json` by scanning
the `microsoft-foundry/foundry-samples` repository for hosted-agent sample templates.

## What changed
- New templates added or removed based on the upstream repo structure.
- `commitSha` pinned to the upstream commit supplied via the `commit_sha` workflow input.
- `requiresModel` and `protocol` values re-derived from each sample's `agent.yaml`.
- `displayName` derived from each template's folder name; `description` LLM-generated when empty.
- PM-edited `displayName` and `description` values are preserved from the previous catalog.

## Reviewer Checks
- Confirm new templates have correct `language`, `framework`, and `protocol` values.
- Review the auto-generated `description` for any new templates.
- Confirm no PM-edited display fields were accidentally lost.
labels: ${{ steps.labels.outputs.labels }}
add-paths: |
samples/hosted-agent/sample-catalog.json

- name: Report PR result
if: steps.diff.outputs.has_changes == 'true'
shell: bash
env:
PR_OPERATION: ${{ steps.cpr.outputs.pull-request-operation }}
PR_URL: ${{ steps.cpr.outputs.pull-request-url }}
PR_NUMBER: ${{ steps.cpr.outputs.pull-request-number }}
run: |
echo "PR operation: $PR_OPERATION"
echo "PR URL: $PR_URL"

{
echo
echo "## Pull Request"
echo
if [[ -n "$PR_URL" ]]; then
echo "- Operation: \`$PR_OPERATION\`"
echo "- PR: [#${PR_NUMBER:-?}]($PR_URL)"
else
echo "- No pull request was created or updated (peter-evans/create-pull-request returned no URL)."
fi
} >> "$GITHUB_STEP_SUMMARY"
Loading