@@ -25,61 +25,71 @@ steps:
2525 - build
2626 commands :
2727 - xvfb-run npm run test
28- - name : create extension
28+ - name : prepare release
2929 image : node
3030 depends_on :
3131 - lint
3232 - test
3333 commands :
34- - npx vsce package
34+ - npm install @stdlib/utils-escape-regexp-string --no-save
35+ - node -e "console.log(require('@stdlib/utils-escape-regexp-string')('${DRONE_TAG}'))" > .tagName.txt
36+ - export TagName=$$(cat .tagName.txt)
37+ - echo "/^## \(.* \($${TagName}\|\[$${TagName}\]\)\)\$/" > .tagHeading.txt
3538 when :
3639 event :
3740 - tag
38- - name : publish extension to ovsx marketplace
41+ - name : check release prerequisites
3942 image : node
4043 depends_on :
41- - create extension
44+ - prepare release
4245 environment :
43- ACCESS_TOKEN :
46+ VSCE_TOKEN :
47+ from_secret : vsce_token
48+ OVSX_TOKEN :
4449 from_secret : ovsx_token
50+ GITHUB_PUBLISH_TOKEN :
51+ from_secret : github_publish_token
4552 commands :
46- - npx ovsx publish --pat $ACCESS_TOKEN
47- when :
48- event :
49- - tag
50- ref :
51- - refs/tags/v[0-9]*.[0-9]*.[0-9]*
52- - name : publish extension to vscode marketplace
53- image : node
54- depends_on :
55- - publish extension to ovsx marketplace
56- environment :
57- ACCESS_TOKEN :
58- from_secret : azure_token
59- commands :
60- - npx vsce publish --pat $ACCESS_TOKEN
53+ - npm i --no-save @octokit/rest
54+ - export PUBLISHER=$$(node -e "console.log(JSON.parse(require('fs').readFileSync('package.json').toString()).publisher)")
55+ - >
56+ testOVSX() {
57+ url='https://open-vsx.org/api/-/namespace/create?token='"$1"
58+ output=$(curl -X POST $url --header 'Content-Type: application/json' --data-raw '{ "name": "'"$PUBLISHER"'" }')
59+ node -e 'JSON.parse('"'$output'"').error.includes("Invalid access token") && process.exit(1);'
60+ }
61+ - >
62+ testVSCE() {
63+ npx vsce verify-pat $PUBLISHER --pat $1 > /dev/null 2>&1
64+ }
65+ - >
66+ testGitHub() {
67+ node -e 'new (require("@octokit/rest").Octokit)({ auth: "'"$1"'" }).request("GET /user").catch(() => process.exit(1))' > /dev/null 2>&1
68+ }
69+ - export TagHeading=$$(cat .tagHeading.txt)
70+ - ' [ ! -z "$$(sed "$${TagHeading}p;d" CHANGELOG.md)" ] || { echo "No Changelog Entries Found!" && false; }'
71+ - testOVSX $OVSX_TOKEN || { echo "The Open VSX Token is invalid!" && false; }
72+ - testVSCE $VSCE_TOKEN || { echo "The Visual Studio Marketplace Token is invalid!" && false; }
73+ - testGitHub $GITHUB_PUBLISH_TOKEN || { echo "The GitHub Publish Token is invalid!" && false; }
6174 when :
6275 event :
6376 - tag
64- ref :
65- - refs/tags/v[0-9]*.[0-9]*.[0-9]*
66- - name : prepare release
77+ - name : create extension
6778 image : node
6879 depends_on :
69- - create extension
80+ - check release prerequisites
7081 commands :
71- - npm install @stdlib/utils-escape-regexp-string --no-save
72- - node -e "console.log(require('@stdlib/utils-escape-regexp-string')('${DRONE_TAG}'))" > .tagName.txt
82+ - npx vsce package
7383 when :
7484 event :
7585 - tag
7686 - name : prepare release notes
7787 image : alpine
7888 depends_on :
79- - prepare release
89+ - check release prerequisites
8090 commands :
8191 - export TagName=$$(cat .tagName.txt)
82- - export TagHeading="/## \(.* \($${TagName}\|\[$${TagName}\]\)\)\$/"
92+ - export TagHeading=$$(cat .tagHeading.txt)
8393 - export HeadingPattern='/## \(.* \(v[0-9.]*\|\[.*\]\)\)/'
8494 - cp -f CHANGELOG.md .releaseNotes.md
8595 - sed -i "1,$${TagHeading}{ $${TagHeading}P ; d } ; $${HeadingPattern},\$d" .releaseNotes.md
@@ -88,9 +98,38 @@ steps:
8898 when :
8999 event :
90100 - tag
101+ - name : publish extension to ovsx marketplace
102+ image : node
103+ depends_on :
104+ - create extension
105+ environment :
106+ OVSX_TOKEN :
107+ from_secret : ovsx_token
108+ commands :
109+ - npx ovsx publish --pat $OVSX_TOKEN
110+ when :
111+ event :
112+ - tag
113+ ref :
114+ - refs/tags/v[0-9]*.[0-9]*.[0-9]*
115+ - name : publish extension to vscode marketplace
116+ image : node
117+ depends_on :
118+ - publish extension to ovsx marketplace
119+ environment :
120+ VSCE_TOKEN :
121+ from_secret : vsce_token
122+ commands :
123+ - npx vsce publish --pat $VSCE_TOKEN
124+ when :
125+ event :
126+ - tag
127+ ref :
128+ - refs/tags/v[0-9]*.[0-9]*.[0-9]*
91129 - name : publish release
92130 image : plugins/github-release
93131 depends_on :
132+ - create extension
94133 - prepare release notes
95134 commands : []
96135 settings :
0 commit comments