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/**
|
node_modules/**
|
||||||
.vscode/**
|
.vscode/**
|
||||||
|
.github/**
|
||||||
src/**
|
src/**
|
||||||
|
*.code-workspace
|
||||||
tsconfig.json
|
tsconfig.json
|
||||||
README.md
|
README.md
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## 0.1.0
|
||||||
|
|
||||||
|
- Initial public release of Kill LIFE Studio.
|
||||||
|
- Added linked-agent discovery and the `@killstudio` chat participant.
|
||||||
|
- Added GitHub Actions build, packaging, GitHub Release, and Marketplace publication flow.
|
||||||
|
- Added Marketplace metadata, local VSIX install guidance, and the shared multi-root smoke workspace.
|
||||||
@@ -25,6 +25,7 @@ Par defaut, `@killstudio` repond avec un biais produit : besoins, priorisation,
|
|||||||
```bash
|
```bash
|
||||||
npm install
|
npm install
|
||||||
npm run compile
|
npm run compile
|
||||||
|
npm run package:vsix
|
||||||
```
|
```
|
||||||
|
|
||||||
Ensuite dans VS Code :
|
Ensuite dans VS Code :
|
||||||
@@ -53,6 +54,61 @@ Dans le chat Copilot / agent de VS Code :
|
|||||||
- `@killstudio /doc` : route la demande avec le prompt documentation.
|
- `@killstudio /doc` : route la demande avec le prompt documentation.
|
||||||
- `@killstudio` sans commande : agit comme studio produit relie aux agents du projet actif.
|
- `@killstudio` sans commande : agit comme studio produit relie aux agents du projet actif.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### Depuis un VSIX local
|
||||||
|
|
||||||
|
Le CLI `code` n'est pas expose sur le `PATH` de cette machine. Le chemin recommande pour les tests locaux est 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-studio-<version>.vsix`.
|
||||||
|
|
||||||
|
### Depuis le Marketplace
|
||||||
|
|
||||||
|
La publication cible le publisher `electron-rare`. Une fois le publisher cree et le secret `VSCE_PAT` configure dans GitHub, chaque tag `vX.Y.Z` publie automatiquement la meme archive `.vsix` sur GitHub Releases et sur le VS Code Marketplace.
|
||||||
|
|
||||||
|
## Release automation
|
||||||
|
|
||||||
|
Le workflow [`.github/workflows/extension-ci.yml`](.github/workflows/extension-ci.yml) couvre les cas suivants :
|
||||||
|
|
||||||
|
- 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 pour enregistrer le secret depuis un terminal authentifie GitHub :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gh secret set VSCE_PAT --repo electron-rare/kill-life-studio
|
||||||
|
```
|
||||||
|
|
||||||
|
## Local multi-root smoke test
|
||||||
|
|
||||||
|
Le workspace canonique de validation locale est [`kill-life-local-smoke.code-workspace`](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-local-smoke.code-workspace`.
|
||||||
|
3. Verifie les trois entrees d'activity bar : Studio, Mesh, Operator.
|
||||||
|
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 `@killstudio /agents`, puis `@killstudio /pm`.
|
||||||
|
|
||||||
## Reglages
|
## Reglages
|
||||||
|
|
||||||
### `killLifeStudio.linkedProjectRoots`
|
### `killLifeStudio.linkedProjectRoots`
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"folders": [
|
||||||
|
{
|
||||||
|
"name": "Kill_LIFE",
|
||||||
|
"path": "../Kill_LIFE"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ai-agentic-embedded-base",
|
||||||
|
"path": "../Kill_LIFE/ai-agentic-embedded-base"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kill-life-studio",
|
||||||
|
"path": "."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kill-life-mesh",
|
||||||
|
"path": "../kill-life-mesh"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "kill-life-operator",
|
||||||
|
"path": "../kill-life-operator"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"files.exclude": {
|
||||||
|
"**/.git": true,
|
||||||
|
"**/node_modules": true,
|
||||||
|
"**/out": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
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": "Product-focused VS Code extension that turns linked local agent prompts into a studio for specs, UX, and roadmap work.",
|
"description": "Product-focused VS Code extension that turns linked local agent prompts into a studio for specs, UX, and roadmap work.",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"publisher": "electron-rare",
|
"publisher": "electron-rare",
|
||||||
"license": "MIT",
|
"license": "SEE LICENSE IN LICENSE",
|
||||||
|
"icon": "media/marketplace-icon.png",
|
||||||
|
"homepage": "https://github.com/electron-rare/kill-life-studio#readme",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/electron-rare/kill-life-studio/issues"
|
||||||
|
},
|
||||||
|
"pricing": "Free",
|
||||||
|
"galleryBanner": {
|
||||||
|
"color": "#18364A",
|
||||||
|
"theme": "dark"
|
||||||
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/electron-rare/kill-life-studio.git"
|
"url": "https://github.com/electron-rare/kill-life-studio.git"
|
||||||
@@ -24,7 +34,8 @@
|
|||||||
"kill-life"
|
"kill-life"
|
||||||
],
|
],
|
||||||
"activationEvents": [
|
"activationEvents": [
|
||||||
"onChatParticipant:kill-life-studio.orchestrator"
|
"onChatParticipant:kill-life-studio.orchestrator",
|
||||||
|
"onView:killLifeStudio.agentsView"
|
||||||
],
|
],
|
||||||
"main": "./out/extension.js",
|
"main": "./out/extension.js",
|
||||||
"contributes": {
|
"contributes": {
|
||||||
@@ -175,7 +186,8 @@
|
|||||||
"vscode:prepublish": "npm run compile",
|
"vscode:prepublish": "npm run compile",
|
||||||
"compile": "tsc -p ./",
|
"compile": "tsc -p ./",
|
||||||
"watch": "tsc -watch -p ./",
|
"watch": "tsc -watch -p ./",
|
||||||
"check": "tsc --noEmit -p ./"
|
"check": "tsc --noEmit -p ./",
|
||||||
|
"package:vsix": "vsce package"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fast-glob": "^3.3.3"
|
"fast-glob": "^3.3.3"
|
||||||
@@ -183,6 +195,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^25.5.0",
|
"@types/node": "^25.5.0",
|
||||||
"@types/vscode": "^1.110.0",
|
"@types/vscode": "^1.110.0",
|
||||||
|
"@vscode/vsce": "^3.7.1",
|
||||||
"typescript": "^5.9.3"
|
"typescript": "^5.9.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user