feat: add release automation and marketplace prep

This commit is contained in:
L'électron rare
2026-03-21 09:38:03 +01:00
parent da5862665a
commit 70130b0f45
7 changed files with 3918 additions and 4 deletions
+118
View File
@@ -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}"
+2
View File
@@ -1,5 +1,7 @@
node_modules/**
.vscode/**
.github/**
src/**
*.code-workspace
tsconfig.json
README.md
+8
View File
@@ -0,0 +1,8 @@
# Changelog
## 0.1.0
- Initial public release of Kill LIFE Operator.
- Added linked-agent discovery and the `@killops` operational chat participant.
- Added GitHub Actions build, packaging, GitHub Release, and Marketplace publication flow.
- Added Marketplace metadata and shared multi-root smoke-test guidance.
+56
View File
@@ -25,6 +25,7 @@ Par defaut, `@killops` repond avec un biais operationnel : etat courant, checks,
```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 :
- `@killops /doc` : aide a produire runbooks, notes et passages de relais.
- `@killops` sans commande : agit comme cockpit operationnel.
## 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-operator-<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-operator
```
## 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 `@killops /agents`, puis `@killops /firmware` ou `@killops /qa`.
## Reglages
### `killLifeOperator.linkedProjectRoots`
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+3718 -1
View File
File diff suppressed because it is too large Load Diff
+16 -3
View File
@@ -4,7 +4,17 @@
"description": "Operational VS Code extension for running linked local project agents as an execution cockpit for status, runbooks, and next actions.",
"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-operator#readme",
"bugs": {
"url": "https://github.com/electron-rare/kill-life-operator/issues"
},
"pricing": "Free",
"galleryBanner": {
"color": "#3E2A15",
"theme": "dark"
},
"repository": {
"type": "git",
"url": "https://github.com/electron-rare/kill-life-operator.git"
@@ -24,7 +34,8 @@
"kill-life"
],
"activationEvents": [
"onChatParticipant:kill-life-operator.orchestrator"
"onChatParticipant:kill-life-operator.orchestrator",
"onView:killLifeOperator.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"
}
}