Skip to content

Commit 8bbbd94

Browse files
committed
update
1 parent a6f1dbe commit 8bbbd94

File tree

8 files changed

+109
-215
lines changed

8 files changed

+109
-215
lines changed

.github/workflows/deploy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
- run: yarn run-script build-and-publish
2222
env:
2323
GH_TOKEN: ${{ secrets.GH_TOKEN }}
24-
VSCE_TOKEN_DISABLED: ${{ secrets.MARKETPLACE_TOKEN }}
24+
VSCE_PAT: ${{ secrets.MARKETPLACE_TOKEN }}
2525
GITHUB_RUN_NUMBER: ${{ github.run_number }}
2626
- name: Upload Artifacts
2727
uses: actions/upload-artifact@v4

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"displayName": "Draw.io Integration",
55
"description": "This unofficial extension integrates Draw.io into VS Code.",
66
"version": "1.7.0",
7+
"preRelease": true,
78
"license": "GPL-3.0",
89
"publisher": "hediet",
910
"keywords": [

scripts/build-and-publish.ts

Lines changed: 49 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,62 @@
1-
import { getChangelog } from "./shared";
21
import { readFile, writeFile } from "fs/promises";
3-
import { resolve } from "path";
2+
import { join, resolve } from "path";
43
import { SemanticVersion } from "@hediet/semver";
54
import { context } from "@actions/github";
65
import { exec } from "@actions/exec";
6+
import { readFileSync } from "fs";
7+
import { Changelog } from "./changelog";
78

89
const packageJsonPath = resolve(__dirname, "../package.json");
910

1011
export async function run(): Promise<void> {
1112
const changeLog = getChangelog();
1213
const version = changeLog.latestVersion;
1314

14-
const packageJson = await readJsonFile<{ version: string }>(packageJsonPath);
15+
const packageJson = await readJsonFile<{ version: string; preRelease?: boolean }>(packageJsonPath);
1516
const stableVersion = SemanticVersion.parse(packageJson.version);
1617

1718
if (version.kind !== 'released' || version.version.toString() !== stableVersion.toString()) {
1819
throw new Error("Version in package.json does not match latest version in changelog.");
1920
}
2021

22+
if (stableVersion.patch !== 0) {
23+
throw new Error("Patch version must be 0.");
24+
}
25+
2126
const gh = new GitHubClient();
2227

28+
const isPreRelease = !!packageJson.preRelease;
29+
2330
const stableTag = `v${stableVersion}`;
24-
if (!await gh.tagExists(context.repo, stableTag)) {
25-
try {
26-
await publish('stable', stableVersion);
27-
} catch (e) { }
28-
//await gh.createTag(context.repo, stableTag, context.sha);
31+
const stableGhTagExists = await gh.tagExists(context.repo, stableTag);
32+
if (!isPreRelease && !stableGhTagExists) {
33+
await buildAndPublish('stable', stableVersion);
34+
await gh.createTag(context.repo, stableTag, context.sha);
2935
} else {
30-
console.log(`GitHub tag for stable version ${stableTag} exists, skipping publish.`);
36+
if (stableGhTagExists) {
37+
console.log(`GitHub tag for stable version ${stableTag} exists, skipping publish.`);
38+
}
39+
if (isPreRelease) {
40+
console.log("Pre-release version detected, skipping stable");
41+
}
3142
}
3243

3344
const runNumber = process.env.GITHUB_RUN_NUMBER;
34-
const preReleaseNumber = `${new Date().toISOString().replace(/[^0-9]/g, '')}0${runNumber}`;
45+
const preReleaseNumber = `${formatDate(new Date())}0${Number(runNumber)}`;
3546
const previewVersion = stableVersion.with({ patch: Number(preReleaseNumber) });
3647

3748
const previewTag = `v${previewVersion}`;
38-
if (!await gh.tagExists(context.repo, previewTag)) {
39-
try {
40-
await publish('preRelease', previewVersion);
41-
} catch (e) { }
42-
//await gh.createTag(context.repo, previewTag, context.sha);
49+
50+
const previewGhTagExists = await gh.tagExists(context.repo, previewTag);
51+
if (!previewGhTagExists) {
52+
await buildAndPublish('preRelease', previewVersion);
53+
await gh.createTag(context.repo, previewTag, context.sha);
4354
} else {
4455
console.log(`GitHub tag for preview version ${previewTag} exists, skipping publish.`);
4556
}
4657
}
4758

48-
async function publish(releaseType: 'stable' | 'preRelease', version: SemanticVersion) {
59+
async function buildAndPublish(releaseType: 'stable' | 'preRelease', version: SemanticVersion) {
4960
console.log(`Publishing ${releaseType} version ${version}...`);
5061

5162
const packageJson = await readJsonFile<any>(packageJsonPath);
@@ -62,11 +73,24 @@ async function publish(releaseType: 'stable' | 'preRelease', version: SemanticVe
6273
"vsce",
6374
"publish",
6475
"--pat",
65-
process.env.VSCE_TOKEN!,
76+
process.env.VSCE_PAT!,
6677
...(releaseType === 'preRelease' ? ['--pre-release'] : [])]
6778
);
6879
}
6980

81+
82+
function padN(num: number, n: number): string {
83+
return num.toString().padStart(n, '0');
84+
}
85+
86+
function formatDate(date: Date): string {
87+
const year = date.getUTCFullYear();
88+
const month = date.getUTCMonth() + 1;
89+
const day = date.getUTCDate();
90+
91+
return `${year}${padN(month, 2)}${padN(day, 2)}`;
92+
}
93+
7094
interface IRepo {
7195
owner: string;
7296
repo: string;
@@ -119,3 +143,11 @@ async function writeJsonFile(path: string, data: unknown): Promise<void> {
119143
const content = JSON.stringify(data, null, '\t');
120144
await writeFile(path, content, 'utf-8');
121145
}
146+
147+
function readTextFileSync(fileName: string): string {
148+
return readFileSync(fileName, { encoding: "utf-8" });
149+
}
150+
151+
function getChangelog(): Changelog {
152+
return new Changelog(readTextFileSync(join(__dirname, "../CHANGELOG.md")));
153+
}

scripts/changelog.ts

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import { SemanticVersion } from "@hediet/semver";
2+
3+
export class Changelog {
4+
private readonly regex = /## \[(.*?)\]([ \t]*-[ \t]*(.*))?/;
5+
public get latestVersion(): {
6+
kind: "released";
7+
version: SemanticVersion;
8+
releaseDate: Date | undefined;
9+
} |
10+
{ kind: "unreleased"; } {
11+
const result = this.regex.exec(this.src);
12+
if (!result) {
13+
throw new Error("Invalid changelog");
14+
}
15+
if (result[1].toLowerCase() === "unreleased") {
16+
return { kind: "unreleased" };
17+
}
18+
19+
let date: Date | undefined;
20+
if (result[3]) {
21+
date = new Date(result[3].trim());
22+
}
23+
return {
24+
kind: "released",
25+
version: SemanticVersion.parse(result[1]),
26+
releaseDate: date,
27+
};
28+
}
29+
30+
constructor(private src: string) { }
31+
32+
public setLatestVersion(
33+
newVersion: SemanticVersion,
34+
releaseDate: Date | undefined
35+
): void {
36+
let dateStr = "";
37+
if (releaseDate !== undefined) {
38+
const year = releaseDate.getUTCFullYear();
39+
const day = releaseDate.getUTCDate();
40+
const month = releaseDate.getUTCMonth() + 1;
41+
dateStr = ` - ${pad(year, 4)}-${pad(month, 2)}-${pad(day, 2)}`;
42+
}
43+
this.src = this.src.replace(
44+
this.regex,
45+
`## [${newVersion.toString()}]${dateStr}`
46+
);
47+
}
48+
49+
public toString(): string {
50+
return this.src;
51+
}
52+
}
53+
54+
function pad(num: number, size: number): string {
55+
let s = num + "";
56+
while (s.length < size) s = "0" + s;
57+
return s;
58+
}

scripts/prepare-insiders-build/README_INSIDERS_BUILD.md

Lines changed: 0 additions & 19 deletions
This file was deleted.

scripts/prepare-insiders-build/index.ts

Lines changed: 0 additions & 98 deletions
This file was deleted.

scripts/prepare-insiders-build/package-insiders-build.json

Lines changed: 0 additions & 7 deletions
This file was deleted.

scripts/shared.ts

Lines changed: 0 additions & 73 deletions
This file was deleted.

0 commit comments

Comments
 (0)