1+ name : Release
2+ on :
3+ release :
4+ types :
5+ - published
6+ workflow_dispatch :
7+ inputs :
8+ publishMS :
9+ description : " Publish to the Microsoft Marketplace"
10+ type : boolean
11+ required : true
12+ default : " true"
13+ publishOVSX :
14+ description : " Publish to Open VSX"
15+ type : boolean
16+ required : true
17+ default : " true"
18+ publishGH :
19+ description : " Publish to GitHub Releases"
20+ type : boolean
21+ required : true
22+ default : " true"
23+
24+ jobs :
25+ package :
26+ name : Package
27+ runs-on : ubuntu-latest
28+ outputs :
29+ packageName : ${{ steps.setup.outputs.packageName }}
30+ tag : ${{ steps.setup-tag.outputs.tag }}
31+ version : ${{ steps.setup-tag.outputs.version }}
32+ steps :
33+ - uses : actions/checkout@v2
34+ - uses : actions/setup-node@v2
35+ with :
36+ node-version : 20
37+ registry-url : https://registry.npmjs.org/
38+
39+ - uses : oven-sh/setup-bun@v1
40+
41+ - name : Install dependencies
42+ run : bun install
43+
44+ - name : Setup package path
45+ id : setup
46+ run : echo "::set-output name=packageName::$(node -e "console.log(require('./package.json').name + '-' + require('./package.json').version + '.vsix')")"
47+
48+ - name : Package
49+ run : |
50+ npx vsce package --out ${{ steps.setup.outputs.packageName }} --no-yarn
51+
52+ - uses : actions/upload-artifact@v4
53+ with :
54+ name : ${{ steps.setup.outputs.packageName }}
55+ path : ./${{ steps.setup.outputs.packageName }}
56+ if-no-files-found : error
57+
58+ - name : Setup tag
59+ id : setup-tag
60+ run : |
61+ $version = (Get-Content ./package.json -Raw | ConvertFrom-Json).version
62+ Write-Host "tag: release/$version"
63+ Write-Host "::set-output name=tag::release/$version"
64+ Write-Host "::set-output name=version::$version"
65+ shell : pwsh
66+
67+ publishMS :
68+ name : Publish to VS marketplace
69+ runs-on : ubuntu-latest
70+ needs : package
71+ if : github.event.inputs.publishMS == 'true'
72+ steps :
73+ - uses : actions/checkout@v2
74+ - uses : actions/download-artifact@v4
75+ with :
76+ name : ${{ needs.package.outputs.packageName }}
77+ - name : Publish to VS marketplace
78+ run : npx vsce publish --packagePath ./${{ needs.package.outputs.packageName }} -p ${{ secrets.VSCE_PAT }} --no-yarn
79+
80+ publishOVSX :
81+ name : Publish to Open VSX
82+ runs-on : ubuntu-latest
83+ needs : package
84+ if : github.event.inputs.publishOVSX == 'true'
85+ steps :
86+ - uses : actions/checkout@v2
87+ - uses : actions/download-artifact@v4
88+ with :
89+ name : ${{ needs.package.outputs.packageName }}
90+ - name : Publish to Open VSX
91+ run : npx ovsx publish ./${{ needs.package.outputs.packageName }} -p ${{ secrets.OVSX_PAT }}
92+
93+ publishGH :
94+ name : Publish to GitHub releases
95+ runs-on : ubuntu-latest
96+ needs : package
97+ if : github.event.inputs.publishGH == 'true'
98+ steps :
99+ - uses : actions/download-artifact@v4
100+ with :
101+ name : ${{ needs.package.outputs.packageName }}
102+
103+ - name : Create Release
104+ id : create-release
105+ uses : actions/create-release@v1
106+ env :
107+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
108+ with :
109+ tag_name : ${{ needs.package.outputs.tag }}
110+ release_name : Release ${{ needs.package.outputs.version }}
111+ draft : false
112+ prerelease : false
113+
114+ - name : Upload assets to a Release
115+ uses : AButler/upload-release-assets@v2.0
116+ with :
117+ files : ${{ needs.package.outputs.packageName }}
118+ release-tag : ${{ needs.package.outputs.tag }}
119+ repo-token : ${{ secrets.GITHUB_TOKEN }}
0 commit comments