Skip to content
This repository was archived by the owner on Jul 10, 2025. It is now read-only.

Commit b6e7a9c

Browse files
authored
chore: Temporary workaround for e2e version set (#294)
* Temporary workaround for e2e version set * fix
1 parent a664d23 commit b6e7a9c

File tree

2 files changed

+173
-2
lines changed

2 files changed

+173
-2
lines changed

.github/workflows/snapshot.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,14 +165,18 @@ jobs:
165165
secrets: |
166166
kv/npm-registry/basicauth/ci token | NODE_AUTH_TOKEN
167167
168-
- run: pnpm -r build
169-
170168
- name: Generate snapshot version
171169
id: version
172170
uses: fluencelabs/github-actions/generate-snapshot-id@main
173171

172+
- name: Set package version
173+
run: node ci.cjs bump-version ${{ steps.version.outputs.id }}
174+
175+
- run: pnpm -r build
176+
174177
- name: Publish snapshots
175178
id: snapshot
176179
uses: fluencelabs/github-actions/pnpm-publish-snapshot@main
177180
with:
178181
id: ${{ steps.version.outputs.id }}
182+
set-version: false

ci.cjs

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
#! /usr/bin/env node
2+
3+
const fs = require("fs").promises;
4+
const path = require("path");
5+
6+
function printUsage() {
7+
console.log(
8+
`Usage: "ci check-consistency" or "ci bump-version %postfix%" or "ci get-version"`
9+
);
10+
}
11+
12+
let postfix;
13+
const mode = process.argv[2];
14+
15+
function validateArgs() {
16+
switch (mode) {
17+
case "get-version":
18+
return true;
19+
20+
case "bump-version":
21+
postfix = process.argv[3];
22+
if (!postfix) {
23+
printUsage();
24+
process.exit();
25+
}
26+
return true;
27+
28+
case "":
29+
case undefined:
30+
case "check-consistency":
31+
return true;
32+
33+
default:
34+
return false;
35+
}
36+
}
37+
38+
const PATH_TO_PACKAGES = "./packages/";
39+
40+
async function getPackageJsonsRecursive(currentPath) {
41+
return (
42+
await Promise.all(
43+
(await fs.readdir(currentPath, { withFileTypes: true }))
44+
.filter(
45+
(file) =>
46+
file.name !== "node_modules" && file.name !== "@tests" &&
47+
(file.isDirectory() || file.name === "package.json")
48+
)
49+
.map((file) =>
50+
file.isDirectory()
51+
? getPackageJsonsRecursive(
52+
path.join(currentPath, file.name)
53+
)
54+
: Promise.resolve([
55+
path.join(process.cwd(), currentPath, file.name),
56+
])
57+
)
58+
)
59+
).flat();
60+
}
61+
62+
async function getVersion(file) {
63+
const content = await fs.readFile(file);
64+
const json = JSON.parse(content);
65+
return [json.name, json.version];
66+
}
67+
68+
function processDep(obj, name, fn) {
69+
if (!obj) {
70+
return;
71+
}
72+
73+
if (!obj[name]) {
74+
return;
75+
}
76+
77+
fn(obj, obj[name]);
78+
}
79+
async function getVersionsMap(allPackageJsons) {
80+
return new Map(await Promise.all(allPackageJsons.map(getVersion)));
81+
}
82+
83+
function getVersionForPackageOrThrow(versionsMap, packageName) {
84+
const version = versionsMap.get(packageName);
85+
if (!version) {
86+
console.log("Failed to get version for package: ", packageName);
87+
process.exit(1);
88+
}
89+
return version;
90+
}
91+
92+
async function checkConsistency(file, versionsMap) {
93+
console.log("Checking: ", file);
94+
const content = await fs.readFile(file);
95+
const json = JSON.parse(content);
96+
97+
for (const [name, versionInDep] of versionsMap) {
98+
const check = (x, version) => {
99+
if (version.includes("*")) {
100+
return;
101+
}
102+
103+
if (versionInDep !== version) {
104+
console.log(
105+
`Error, versions don't match: ${name}:${version} !== ${versionInDep}`,
106+
file
107+
);
108+
process.exit(1);
109+
}
110+
};
111+
processDep(json.dependencies, name, check);
112+
processDep(json.devDependencies, name, check);
113+
}
114+
}
115+
116+
async function bumpVersions(file, versionsMap) {
117+
console.log("Updating: ", file);
118+
const content = await fs.readFile(file);
119+
const json = JSON.parse(content);
120+
121+
// bump dependencies
122+
for (const [name, version] of versionsMap) {
123+
const update = (x) => (x[name] = `${version}-${postfix}`);
124+
processDep(json.dependencies, name, update);
125+
processDep(json.devDependencies, name, update);
126+
}
127+
128+
// also bump version in package itself
129+
const version = getVersionForPackageOrThrow(versionsMap, json.name);
130+
json.version = `${version}-${postfix}`;
131+
132+
const newContent = JSON.stringify(json, undefined, 4) + "\n";
133+
await fs.writeFile(file, newContent);
134+
}
135+
136+
async function processPackageJsons(allPackageJsons, versionsMap, fn) {
137+
await Promise.all(allPackageJsons.map((x) => fn(x, versionsMap)));
138+
}
139+
140+
async function run() {
141+
if (!validateArgs()) {
142+
printUsage();
143+
process.exit(0);
144+
}
145+
146+
const packageJsons = await getPackageJsonsRecursive(PATH_TO_PACKAGES);
147+
const versionsMap = await getVersionsMap(packageJsons);
148+
149+
if (mode === "get-version") {
150+
const fjs = versionsMap.get("@fluencelabs/fluence");
151+
console.log(fjs);
152+
return;
153+
}
154+
155+
// always check consistency
156+
console.log("Checking versions consistency...");
157+
await processPackageJsons(packageJsons, versionsMap, checkConsistency);
158+
console.log("Versions are consistent");
159+
160+
if (mode === "bump-version") {
161+
console.log("Adding postfix: ", postfix);
162+
await processPackageJsons(packageJsons, versionsMap, bumpVersions);
163+
console.log("Done");
164+
}
165+
}
166+
167+
run();

0 commit comments

Comments
 (0)