Skip to content

Commit b7aaabd

Browse files
committed
Improved packaging script.
1 parent 7d66894 commit b7aaabd

File tree

1 file changed

+62
-47
lines changed

1 file changed

+62
-47
lines changed

package.py

Lines changed: 62 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,70 @@
1-
import os
1+
import subprocess
22
import json
33
import re
44
from git import Repo, TagReference
55

6-
def readVersionFromPackageJson():
7-
packageJson = open("package.json", "r")
8-
contentRaw = packageJson.read()
9-
contentJson = json.loads(contentRaw)
10-
packageJson.close()
11-
return contentJson["version"]
12-
13-
def isPackageJsonVersionTagged(repo, packageJsonVersion):
14-
packageJsonVersionTagFound = False
15-
for tag in repo.tags:
16-
if tag.name == packageJsonVersion:
17-
packageJsonVersionTagFound = True
18-
break
19-
return packageJsonVersionTagFound
20-
21-
def isChangeLogUpdatedWithPackageJsonVersion(packageJsonVersion):
22-
packageJsonVersionChangeLogEntryFound = False
23-
changeLog = open("CHANGELOG.md", "r")
24-
changeLogContent = changeLog.readlines()
25-
changeLog.close()
26-
for line in changeLogContent:
27-
match = re.search(f"^## Version {packageJsonVersion}$", line)
28-
if match:
29-
packageJsonVersionChangeLogEntryFound = True
30-
break
31-
return packageJsonVersionChangeLogEntryFound
32-
33-
def packageExtension():
34-
os.system("vsce package")
6+
def readVersionFromPackageJson() -> None:
7+
packageJson = open("package.json", "r")
8+
contentRaw = packageJson.read()
9+
contentJson = json.loads(contentRaw)
10+
packageJson.close()
11+
return contentJson["version"]
12+
13+
def isPackageJsonVersionTagged(repo, packageJsonVersion) -> bool:
14+
packageJsonVersionTagFound = False
15+
for tag in repo.tags:
16+
if tag.name == packageJsonVersion:
17+
packageJsonVersionTagFound = True
18+
break
19+
return packageJsonVersionTagFound
20+
21+
def isChangeLogUpdatedWithPackageJsonVersion(packageJsonVersion) -> bool:
22+
packageJsonVersionChangeLogEntryFound = False
23+
changeLog = open("CHANGELOG.md", "r")
24+
changeLogContent = changeLog.readlines()
25+
changeLog.close()
26+
for line in changeLogContent:
27+
match = re.search(f"^## Version {packageJsonVersion}$", line)
28+
if match:
29+
packageJsonVersionChangeLogEntryFound = True
30+
break
31+
return packageJsonVersionChangeLogEntryFound
32+
33+
def isAllPackagesInstalledLocally() -> bool:
34+
process = subprocess.Popen(["cmd", "/c", "npm", "list", "--production", "--parseable", "--depth=99999", "--loglevel=error"], stderr=subprocess.PIPE)
35+
out = process.stderr.read()
36+
return (len(out) == 0)
37+
38+
39+
def packageExtension() -> bool:
40+
process = subprocess.Popen(["cmd", "/c", "vsce", "package"], stderr=subprocess.PIPE)
41+
out = process.stderr.read()
42+
return (len(out) == 0)
3543

3644
def main():
37-
packageJsonVersion = readVersionFromPackageJson()
38-
repo = Repo("./")
39-
packageJsonVersionTagFound = isPackageJsonVersionTagged(repo, packageJsonVersion)
40-
packageJsonVersionChangeLogEntryFound = isChangeLogUpdatedWithPackageJsonVersion(packageJsonVersion)
41-
42-
if not packageJsonVersionChangeLogEntryFound:
43-
print("Fail: CHANGELOG.md not update!")
44-
else:
45-
if not packageJsonVersionTagFound:
46-
print(f"New version found in package.json: {packageJsonVersion}.")
47-
print("Creating tag in Git...")
48-
repo.create_tag(packageJsonVersion)
49-
print("Creating vsix package...")
50-
packageExtension()
45+
packageJsonVersion = readVersionFromPackageJson()
46+
repo = Repo("./")
47+
packageJsonVersionTagFound = isPackageJsonVersionTagged(repo, packageJsonVersion)
48+
packageJsonVersionChangeLogEntryFound = isChangeLogUpdatedWithPackageJsonVersion(packageJsonVersion)
49+
allPackagesInstalledLocally = isAllPackagesInstalledLocally()
50+
51+
if not packageJsonVersionChangeLogEntryFound:
52+
print("Fail: CHANGELOG.md not updated.")
5153
else:
52-
print(f"Fail: Version already tagged: {packageJsonVersion}.")
53-
print("No vsix package created")
54-
54+
if not allPackagesInstalledLocally:
55+
print("Fail: Not all packages installed locally. Please run 'npm install' to install packages, or run 'npm list --production --parseable --depth=99999 --loglevel=error' to identify the issue.")
56+
else:
57+
if packageJsonVersionTagFound:
58+
print(f"Fail: Version already tagged: {packageJsonVersion}.")
59+
print("No vsix package created")
60+
else:
61+
print("Creating vsix package...")
62+
isPackagingOk = packageExtension()
63+
if not isPackagingOk:
64+
print("Fail: Packaging failed.")
65+
else:
66+
print(f"New version found in package.json: {packageJsonVersion}.")
67+
print("Creating tag in Git...")
68+
repo.create_tag(packageJsonVersion)
69+
5570
main()

0 commit comments

Comments
 (0)