feat: add release automation and marketplace prep
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
name: Extension CI
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
tags:
|
||||
- "v*"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build and Package
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 22
|
||||
cache: npm
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Type-check
|
||||
run: npm run check
|
||||
|
||||
- name: Compile extension
|
||||
run: npm run compile
|
||||
|
||||
- name: Package VSIX
|
||||
run: |
|
||||
rm -f ./*.vsix
|
||||
npm run package:vsix
|
||||
|
||||
- name: Locate VSIX artifact
|
||||
id: locate_vsix
|
||||
run: |
|
||||
VSIX_PATH="$(find . -maxdepth 1 -name '*.vsix' -print -quit)"
|
||||
if [ -z "${VSIX_PATH}" ]; then
|
||||
echo "No VSIX artifact was produced."
|
||||
exit 1
|
||||
fi
|
||||
echo "path=${VSIX_PATH#./}" >> "${GITHUB_OUTPUT}"
|
||||
|
||||
- name: Upload VSIX artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: packaged-vsix
|
||||
path: ${{ steps.locate_vsix.outputs.path }}
|
||||
if-no-files-found: error
|
||||
|
||||
release:
|
||||
name: Release and Publish
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 22
|
||||
cache: npm
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Assert tag matches package version
|
||||
run: |
|
||||
PACKAGE_VERSION="$(node -p "require('./package.json').version")"
|
||||
EXPECTED_TAG="v${PACKAGE_VERSION}"
|
||||
if [ "${GITHUB_REF_NAME}" != "${EXPECTED_TAG}" ]; then
|
||||
echo "Tag ${GITHUB_REF_NAME} does not match ${EXPECTED_TAG}."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Download VSIX artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: packaged-vsix
|
||||
path: release-assets
|
||||
|
||||
- name: Locate VSIX artifact
|
||||
id: locate_vsix
|
||||
run: |
|
||||
VSIX_PATH="$(find release-assets -name '*.vsix' -print -quit)"
|
||||
if [ -z "${VSIX_PATH}" ]; then
|
||||
echo "Downloaded artifact does not contain a VSIX package."
|
||||
exit 1
|
||||
fi
|
||||
echo "path=${VSIX_PATH}" >> "${GITHUB_OUTPUT}"
|
||||
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: ${{ github.ref_name }}
|
||||
generate_release_notes: true
|
||||
files: ${{ steps.locate_vsix.outputs.path }}
|
||||
|
||||
- name: Publish to Visual Studio Marketplace
|
||||
env:
|
||||
VSCE_PAT: ${{ secrets.VSCE_PAT }}
|
||||
run: |
|
||||
if [ -z "${VSCE_PAT}" ]; then
|
||||
echo "VSCE_PAT secret is required to publish to the Visual Studio Marketplace."
|
||||
exit 1
|
||||
fi
|
||||
npx vsce publish --packagePath "${{ steps.locate_vsix.outputs.path }}" --pat "${VSCE_PAT}"
|
||||
@@ -1,5 +1,7 @@
|
||||
node_modules/**
|
||||
.vscode/**
|
||||
.github/**
|
||||
src/**
|
||||
*.code-workspace
|
||||
tsconfig.json
|
||||
README.md
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
# Changelog
|
||||
|
||||
## 0.1.0
|
||||
|
||||
- Initial public release of Kill LIFE Mesh.
|
||||
- Added linked-agent discovery and the `@killmesh` orchestration chat participant.
|
||||
- Added GitHub Actions build, packaging, GitHub Release, and Marketplace publication flow.
|
||||
- Added Marketplace metadata and shared multi-root smoke-test guidance.
|
||||
@@ -25,6 +25,7 @@ Par defaut, `@killmesh` repond avec un biais orchestration : dependances entre r
|
||||
```bash
|
||||
npm install
|
||||
npm run compile
|
||||
npm run package:vsix
|
||||
```
|
||||
|
||||
Ensuite dans VS Code :
|
||||
@@ -54,6 +55,61 @@ Dans le chat Copilot / agent de VS Code :
|
||||
- `@killmesh /qa` : aide a cadrer validations et handoffs.
|
||||
- `@killmesh` sans commande : agit comme coordinateur multi-repo.
|
||||
|
||||
## Installation
|
||||
|
||||
### Depuis un VSIX local
|
||||
|
||||
Le chemin recommande sur cette machine est l'installation via l'interface VS Code :
|
||||
|
||||
1. Genere le package avec `npm run package:vsix`.
|
||||
2. Dans VS Code, ouvre `Extensions: Install from VSIX...`.
|
||||
3. Selectionne `kill-life-mesh-<version>.vsix`.
|
||||
|
||||
### Depuis le Marketplace
|
||||
|
||||
Les releases sont preparees pour le publisher `electron-rare`. Un tag `vX.Y.Z` publie automatiquement la meme archive `.vsix` sur GitHub Releases et sur le VS Code Marketplace des que le secret `VSCE_PAT` est disponible.
|
||||
|
||||
## Release automation
|
||||
|
||||
Le workflow [`.github/workflows/extension-ci.yml`](.github/workflows/extension-ci.yml) execute :
|
||||
|
||||
- Pull requests et pushes sur `main` : `npm ci`, `npm run check`, `npm run compile`, `npm run package:vsix`.
|
||||
- Tags `v*` : verification `tag == v${package.json.version}`, creation de GitHub Release, puis publication Marketplace.
|
||||
|
||||
Sequence de release :
|
||||
|
||||
1. Mets a jour `package.json`.
|
||||
2. Commit et merge sur `main`.
|
||||
3. Cree un tag `vX.Y.Z` qui correspond exactement au champ `version`.
|
||||
4. Pousse le tag.
|
||||
|
||||
## Marketplace setup
|
||||
|
||||
Avant la premiere publication Marketplace :
|
||||
|
||||
1. Cree le publisher `electron-rare` dans Visual Studio Marketplace / Azure DevOps.
|
||||
2. Genere un Personal Access Token avec les permissions de publication Marketplace.
|
||||
3. Ajoute ce token comme secret GitHub `VSCE_PAT` dans ce repo.
|
||||
|
||||
Commande utile :
|
||||
|
||||
```bash
|
||||
gh secret set VSCE_PAT --repo electron-rare/kill-life-mesh
|
||||
```
|
||||
|
||||
## Local multi-root smoke test
|
||||
|
||||
Le workspace de reference est partage dans `../kill-life-studio/kill-life-local-smoke.code-workspace`.
|
||||
|
||||
Checklist de smoke test :
|
||||
|
||||
1. Installe les trois `.vsix` dans le meme profil VS Code.
|
||||
2. Ouvre `../kill-life-studio/kill-life-local-smoke.code-workspace`.
|
||||
3. Verifie les trois entrees d'activity bar.
|
||||
4. Lance `Refresh Agents` dans chaque extension.
|
||||
5. Confirme que les agents de `Kill_LIFE` et `Kill_LIFE/ai-agentic-embedded-base` sont visibles.
|
||||
6. Ouvre le chat et verifie `@killmesh /agents`, puis `@killmesh /architect` ou `@killmesh /qa`.
|
||||
|
||||
## Reglages
|
||||
|
||||
### `killLifeMesh.linkedProjectRoots`
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
Generated
+3718
-1
File diff suppressed because it is too large
Load Diff
+16
-3
@@ -4,7 +4,17 @@
|
||||
"description": "Orchestration-focused VS Code extension for coordinating linked local project agents across repos, contracts, and handoffs.",
|
||||
"version": "0.1.0",
|
||||
"publisher": "electron-rare",
|
||||
"license": "MIT",
|
||||
"license": "SEE LICENSE IN LICENSE",
|
||||
"icon": "media/marketplace-icon.png",
|
||||
"homepage": "https://github.com/electron-rare/kill-life-mesh#readme",
|
||||
"bugs": {
|
||||
"url": "https://github.com/electron-rare/kill-life-mesh/issues"
|
||||
},
|
||||
"pricing": "Free",
|
||||
"galleryBanner": {
|
||||
"color": "#113A35",
|
||||
"theme": "dark"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/electron-rare/kill-life-mesh.git"
|
||||
@@ -24,7 +34,8 @@
|
||||
"kill-life"
|
||||
],
|
||||
"activationEvents": [
|
||||
"onChatParticipant:kill-life-mesh.orchestrator"
|
||||
"onChatParticipant:kill-life-mesh.orchestrator",
|
||||
"onView:killLifeMesh.agentsView"
|
||||
],
|
||||
"main": "./out/extension.js",
|
||||
"contributes": {
|
||||
@@ -175,7 +186,8 @@
|
||||
"vscode:prepublish": "npm run compile",
|
||||
"compile": "tsc -p ./",
|
||||
"watch": "tsc -watch -p ./",
|
||||
"check": "tsc --noEmit -p ./"
|
||||
"check": "tsc --noEmit -p ./",
|
||||
"package:vsix": "vsce package"
|
||||
},
|
||||
"dependencies": {
|
||||
"fast-glob": "^3.3.3"
|
||||
@@ -183,6 +195,7 @@
|
||||
"devDependencies": {
|
||||
"@types/node": "^25.5.0",
|
||||
"@types/vscode": "^1.110.0",
|
||||
"@vscode/vsce": "^3.7.1",
|
||||
"typescript": "^5.9.3"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user