Skip to content

fix: enhance success and failure reporting in StartDebuggerTool #118

fix: enhance success and failure reporting in StartDebuggerTool

fix: enhance success and failure reporting in StartDebuggerTool #118

Workflow file for this run

name: CI/CD Pipeline
on:
push:
branches: [main]
jobs:
build-and-test:
name: Build and Test
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node-version: [20.x]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: npm
- name: Install dependencies
run: npm ci
- name: Run lint
run: npm run lint
- name: Compile TypeScript
run: npm run compile
- name: Setup virtual display (Linux only)
if: matrix.os == 'ubuntu-latest'
run: sudo apt-get update && sudo apt-get install -y xvfb
- name: Run tests
shell: bash
run: |
if [ "${{ matrix.os }}" = "ubuntu-latest" ]; then
xvfb-run --auto-servernum --server-args='-screen 0 1280x1024x24' npm test
else
npm test
fi
env:
CI: true
auto-release:
name: Auto Release
if: github.event_name == 'push' && github.ref == 'refs/heads/main' && !contains(github.event.head_commit.message, '[skip ci]')
runs-on: ubuntu-latest
needs: build-and-test
permissions:
contents: write
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20.x
cache: npm
- name: Install dependencies
run: npm ci
- name: Determine next version
id: version
uses: actions/github-script@v7
with:
script: |
const latestRelease = await github.rest.repos.getLatestRelease({ owner: context.repo.owner, repo: context.repo.repo }).catch(()=>null);
let nextVersion;
if (latestRelease) {
const prevTagRaw = latestRelease.data.tag_name || '';
const prev = prevTagRaw.replace(/^v/, '');
const parts = prev.split('.');
if (parts.length !== 3 || parts.some(p => isNaN(Number(p)))) {
core.setFailed(`Latest release tag '${prevTagRaw}' is not semver x.y.z`);
return;
}
parts[2] = String(Number(parts[2]) + 1);
nextVersion = parts.join('.');
} else {
nextVersion = '0.0.1';
}
core.info(`Computed next version: ${nextVersion}`);
core.setOutput('version', nextVersion);
- name: Create and push tag
env:
VERSION: ${{ steps.version.outputs.version }}
run: |
if git rev-parse ${VERSION} >/dev/null 2>&1; then echo "Tag ${VERSION} already exists"; else git tag ${VERSION}; git push origin ${VERSION}; fi
- name: Generate release notes & create release
uses: ./.github/actions/anthropic-release-notes
with:
anthropic-api-key: ${{ secrets.ANTHROPIC_API_KEY }}
language: en
model: claude-3-5-sonnet-latest
token: ${{ secrets.GITHUB_TOKEN }}
version: ${{ steps.version.outputs.version }}
package:
name: Package Extension
runs-on: ubuntu-latest
needs: build-and-test
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20.x
cache: npm
- name: Install dependencies
run: npm ci
- name: Install vsce
run: npm install -g @vscode/vsce
- name: Package extension
run: vsce package
- name: Upload VSIX artifact
uses: actions/upload-artifact@v4
with:
name: vsix-package
path: '*.vsix'
retention-days: 30
publish:
name: Publish to VS Code Marketplace
runs-on: ubuntu-latest
needs: [package, auto-release]
if: github.event_name == 'push' && github.ref == 'refs/heads/main' && !contains(github.event.head_commit.message, '[skip ci]')
permissions:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20.x
cache: npm
- name: Install dependencies
run: npm ci
- name: Install vsce
run: npm install -g @vscode/vsce
- name: Sync package.json version to tag (no commit)
env:
TAG_VERSION: ${{ needs.auto-release.outputs.version }}
run: |
node -e "const fs=require('fs'); const tag=process.env.TAG_VERSION; const pkg=JSON.parse(fs.readFileSync('package.json','utf8')); if(pkg.version!==tag){ pkg.version=tag; fs.writeFileSync('package.json', JSON.stringify(pkg,null,2)+'\n'); console.log('Synced package.json version to tag', tag); } else { console.log('package.json version already matches tag', tag); }"
- name: Publish to VS Code Marketplace
env:
VSCE_PAT: ${{ secrets.VSCE_PAT }}
run: vsce publish -p $VSCE_PAT --allow-proposed-apis terminalDataWriteEvent
- name: Download VSIX artifact
uses: actions/download-artifact@v4
with:
name: vsix-package
- name: Upload VSIX to GitHub Release
uses: softprops/action-gh-release@v1
with:
files: '*.vsix'
tag_name: ${{ needs.auto-release.outputs.version }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}