1+ name : Release VS Code Extension
2+
3+ on :
4+ push :
5+ tags :
6+ - ' v*' # Triggers on tags like v1.0.0, v1.1.0, etc.
7+ branches :
8+ - master # Only trigger on master branch
9+
10+ jobs :
11+ release :
12+ runs-on : ubuntu-latest
13+
14+ steps :
15+ - name : Checkout code
16+ uses : actions/checkout@v4
17+
18+ - name : Setup Node.js
19+ uses : actions/setup-node@v4
20+ with :
21+ node-version : ' 18'
22+ cache : ' npm'
23+
24+ - name : Install dependencies
25+ run : npm ci
26+
27+ - name : Extract version from tag
28+ id : extract_version
29+ run : |
30+ TAG_NAME=${GITHUB_REF#refs/tags/}
31+ VERSION=${TAG_NAME#v} # Remove 'v' prefix if present
32+ echo "version=${VERSION}" >> $GITHUB_OUTPUT
33+ echo "Extracted version: ${VERSION}"
34+
35+ - name : Update package.json version
36+ run : |
37+ npm version ${{ steps.extract_version.outputs.version }} --no-git-tag-version
38+ echo "Updated package.json version to ${{ steps.extract_version.outputs.version }}"
39+
40+ - name : Build extension
41+ run : npm run package
42+
43+ - name : Install vsce
44+ run : npm install -g @vscode/vsce
45+
46+ - name : Package extension
47+ run : vsce package
48+
49+ - name : Publish to VS Code Marketplace
50+ run : vsce publish -p ${{ secrets.VSCE_PAT }}
51+ env :
52+ VSCE_PAT : ${{ secrets.VSCE_PAT }}
53+
54+ - name : Get extension filename
55+ id : extension_file
56+ run : |
57+ EXTENSION_FILE=$(ls *.vsix | head -n 1)
58+ echo "filename=${EXTENSION_FILE}" >> $GITHUB_OUTPUT
59+
60+ - name : Create GitHub Release
61+ uses : actions/create-release@v1
62+ env :
63+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
64+ with :
65+ tag_name : ${{ github.ref_name }}
66+ release_name : Release ${{ github.ref_name }}
67+ body : |
68+ ## Release ${{ github.ref_name }}
69+
70+ ### Changes
71+ - Automatic release for version ${{ steps.extract_version.outputs.version }}
72+
73+ ### Installation
74+ You can install this extension from the [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=DeeprajBaidya.snippetizer) or download the VSIX file below.
75+ draft : false
76+ prerelease : false
77+
78+ - name : Upload Release Asset
79+ uses : actions/upload-release-asset@v1
80+ env :
81+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
82+ with :
83+ upload_url : ${{ steps.create_release.outputs.upload_url }}
84+ asset_path : ./${{ steps.extension_file.outputs.filename }}
85+ asset_name : ${{ steps.extension_file.outputs.filename }}
86+ asset_content_type : application/zip
0 commit comments