Skip to content

Commit 485ef63

Browse files
committed
skill publishing fixes
1 parent 4fbbd20 commit 485ef63

4 files changed

Lines changed: 36 additions & 21 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@salesforce/b2c-tooling-sdk': patch
3+
---
4+
5+
Fix skills version resolution to correctly parse release tags and invalidate cached version on download errors
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@salesforce/b2c-agent-plugins': patch
3+
---
4+
5+
Fix skills artifact download by publishing zip assets to dedicated agent-plugins releases

.github/workflows/publish.yml

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ jobs:
395395
if: steps.release-type.outputs.type == 'stable' && steps.changesets.outputs.skip != 'true' && steps.quick-check.outputs.skip != 'true'
396396
run: |
397397
# Determine the release tag — prefer CLI as the user-facing product.
398-
# VSX is excluded: it gets its own dedicated release to avoid tag collisions.
398+
# Plugins and VSX get their own dedicated releases, so they are excluded here.
399399
if [[ "${{ steps.packages.outputs.publish_cli }}" == "true" ]]; then
400400
RELEASE_TAG="@salesforce/b2c-cli@${{ steps.packages.outputs.version_cli }}"
401401
elif [[ "${{ steps.packages.outputs.publish_sdk }}" == "true" ]]; then
@@ -406,10 +406,8 @@ jobs:
406406
RELEASE_TAG="@salesforce/mrt-utilities@${{ steps.packages.outputs.version_mrt }}"
407407
elif [[ "${{ steps.packages.outputs.publish_docs }}" == "true" ]]; then
408408
RELEASE_TAG="docs@${{ steps.packages.outputs.version_docs }}"
409-
elif [[ "${{ steps.packages.outputs.publish_plugins }}" == "true" ]]; then
410-
RELEASE_TAG="b2c-agent-plugins@${{ steps.packages.outputs.version_plugins }}"
411409
else
412-
echo "No non-VSX packages published, skipping main release"
410+
echo "No non-VSX/non-plugins packages published, skipping main release"
413411
exit 0
414412
fi
415413
@@ -421,7 +419,6 @@ jobs:
421419
[[ "${{ steps.packages.outputs.publish_mrt }}" == "true" ]] && TITLE_PARTS+=("mrt-utilities ${{ steps.packages.outputs.version_mrt }}")
422420
[[ "${{ steps.packages.outputs.publish_vsx }}" == "true" ]] && TITLE_PARTS+=("b2c-vs-extension ${{ steps.packages.outputs.version_vsx }}")
423421
[[ "${{ steps.packages.outputs.publish_docs }}" == "true" ]] && TITLE_PARTS+=("docs ${{ steps.packages.outputs.version_docs }}")
424-
[[ "${{ steps.packages.outputs.publish_plugins }}" == "true" ]] && TITLE_PARTS+=("agent-plugins ${{ steps.packages.outputs.version_plugins }}")
425422
RELEASE_TITLE="Version Packages — $(IFS=', '; echo "${TITLE_PARTS[*]}")"
426423
427424
gh release create "$RELEASE_TAG" --title "$RELEASE_TITLE" --notes-file /tmp/release-notes.md
@@ -443,20 +440,11 @@ jobs:
443440
- name: Upload skills to release
444441
if: steps.release-type.outputs.type == 'stable' && steps.changesets.outputs.skip != 'true' && steps.quick-check.outputs.skip != 'true' && steps.packages.outputs.publish_plugins == 'true'
445442
run: |
446-
# Determine the release tag (same priority as Create GitHub Release, excludes VSX)
447-
if [[ "${{ steps.packages.outputs.publish_cli }}" == "true" ]]; then
448-
RELEASE_TAG="@salesforce/b2c-cli@${{ steps.packages.outputs.version_cli }}"
449-
elif [[ "${{ steps.packages.outputs.publish_sdk }}" == "true" ]]; then
450-
RELEASE_TAG="@salesforce/b2c-tooling-sdk@${{ steps.packages.outputs.version_sdk }}"
451-
elif [[ "${{ steps.packages.outputs.publish_mcp }}" == "true" ]]; then
452-
RELEASE_TAG="@salesforce/b2c-dx-mcp@${{ steps.packages.outputs.version_mcp }}"
453-
elif [[ "${{ steps.packages.outputs.publish_mrt }}" == "true" ]]; then
454-
RELEASE_TAG="@salesforce/mrt-utilities@${{ steps.packages.outputs.version_mrt }}"
455-
elif [[ "${{ steps.packages.outputs.publish_docs }}" == "true" ]]; then
456-
RELEASE_TAG="docs@${{ steps.packages.outputs.version_docs }}"
457-
else
458-
RELEASE_TAG="b2c-agent-plugins@${{ steps.packages.outputs.version_plugins }}"
459-
fi
443+
RELEASE_TAG="b2c-agent-plugins@${{ steps.packages.outputs.version_plugins }}"
444+
445+
gh release create "$RELEASE_TAG" \
446+
--title "Agent Plugins ${{ steps.packages.outputs.version_plugins }}" \
447+
--notes "Skills artifacts for b2c-agent-plugins v${{ steps.packages.outputs.version_plugins }}"
460448
461449
gh release upload "$RELEASE_TAG" b2c-skills.zip b2c-cli-skills.zip
462450
env:

packages/b2c-tooling-sdk/src/skills/github.ts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,15 @@ function writeLatestVersionCache(version: string): void {
5252
}
5353
}
5454

55+
function clearLatestVersionCache(): void {
56+
try {
57+
const p = getLatestVersionCachePath();
58+
if (fs.existsSync(p)) fs.unlinkSync(p);
59+
} catch {
60+
// Best-effort
61+
}
62+
}
63+
5564
function isRateLimited(response: Response): boolean {
5665
if (response.status !== 403 && response.status !== 429) return false;
5766
const remaining = response.headers.get('x-ratelimit-remaining');
@@ -130,9 +139,12 @@ function parseRelease(release: {
130139
const b2cAsset = release.assets.find((a) => a.name === b2cSource.assetName);
131140
const b2cCliAsset = release.assets.find((a) => a.name === b2cCliSource.assetName);
132141

142+
const versionMatch = release.tag_name.match(/@(\d+\.\d+\.\d+.*)$/);
143+
const version = versionMatch ? versionMatch[1] : release.tag_name.replace(/^v/, '');
144+
133145
return {
134146
tagName: release.tag_name,
135-
version: release.tag_name.replace(/^v/, ''),
147+
version,
136148
publishedAt: release.published_at,
137149
b2cSkillsAssetUrl: b2cAsset?.browser_download_url ?? null,
138150
b2cCliSkillsAssetUrl: b2cCliAsset?.browser_download_url ?? null,
@@ -167,6 +179,7 @@ export async function getRelease(version: string = 'latest'): Promise<ReleaseInf
167179
});
168180

169181
if (!response.ok) {
182+
clearLatestVersionCache();
170183
if (response.status === 404) {
171184
throw new Error(`Release not found: ${tag}`);
172185
}
@@ -212,7 +225,10 @@ export async function listReleases(limit: number = 10): Promise<ReleaseInfo[]> {
212225
assets: Array<{name: string; browser_download_url: string}>;
213226
}>;
214227

215-
return data.map(parseRelease).filter((r) => r.b2cSkillsAssetUrl || r.b2cCliSkillsAssetUrl);
228+
return data
229+
.filter((r) => r.tag_name.startsWith('b2c-agent-plugins@'))
230+
.map(parseRelease)
231+
.filter((r) => r.b2cSkillsAssetUrl || r.b2cCliSkillsAssetUrl);
216232
}
217233

218234
/**
@@ -264,6 +280,7 @@ async function downloadReleaseArtifact(
264280
});
265281

266282
if (!response.ok) {
283+
clearLatestVersionCache();
267284
if (response.status === 404) {
268285
throw new Error(`Skills artifact '${source.assetName}' not found for release ${tag}`);
269286
}

0 commit comments

Comments
 (0)