openpencil/.github/workflows/vscode-extension.yml

83 lines
2.7 KiB
YAML

name: VS Code extension package
# Gates the op-vscode extension (typecheck + unit tests + esbuild bundle) and
# packages a platform-neutral .vsix artifact on every change. The daemon
# binary + wasm bundle are NOT embedded yet (the extension probes
# <workspace>/target/debug/op-host-web-server or `openpencil.dev.daemonPath`);
# per-platform vsix bundling lands with the packaging plan (Plan 3).
on:
push:
branches: ['**']
tags: ['v*']
paths:
- 'packages/op-vscode/**'
# op-vscode is a member of the packages/ Bun workspace: its
# dependency graph is locked at the WORKSPACE root, so a root
# package.json / bun.lock bump changes this extension's deps
# without touching packages/op-vscode/**.
- 'packages/package.json'
- 'packages/bun.lock'
# build.mjs extracts the bundled AI skill from the CLI's asset.
- 'crates/op-cli/assets/skill-bundle.json'
- '.github/workflows/vscode-extension.yml'
pull_request:
paths:
- 'packages/op-vscode/**'
- 'packages/package.json'
- 'packages/bun.lock'
- 'crates/op-cli/assets/skill-bundle.json'
- '.github/workflows/vscode-extension.yml'
jobs:
package:
name: Check and package .vsix
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies (workspace root — bun.lock lives there)
working-directory: packages
run: bun install --frozen-lockfile
- name: Type check
working-directory: packages/op-vscode
run: bunx tsc -p tsconfig.json --noEmit
- name: Unit tests
working-directory: packages/op-vscode
run: bun test src
- name: Build extension bundle
working-directory: packages/op-vscode
run: node build.mjs
- name: Stage packaging metadata
working-directory: packages/op-vscode
# vsce wants a LICENSE next to package.json; the repo root carries it.
run: cp ../../LICENSE LICENSE
- name: Package .vsix
working-directory: packages/op-vscode
run: |
version="$(node -p "require('./package.json').version")"
bunx @vscode/vsce package --no-dependencies --allow-missing-repository \
--out "openpencil-vscode-${version}.vsix"
ls -la ./*.vsix
- name: Upload .vsix artifact
uses: actions/upload-artifact@v4
with:
name: openpencil-vscode-vsix
path: packages/op-vscode/*.vsix
if-no-files-found: error
retention-days: 30