Skip to content

Commit be88e34

Browse files
committed
fix ci
1 parent b0d0306 commit be88e34

File tree

2 files changed

+70
-4
lines changed

2 files changed

+70
-4
lines changed

.github/workflows/publish.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ jobs:
1616
- uses: actions/checkout@v6
1717
with:
1818
submodules: recursive
19+
- name: Configure git safe.directory
20+
run: |
21+
git config --global --add safe.directory "$GITHUB_WORKSPACE"
22+
git submodule foreach --recursive 'git config --global --add safe.directory "$toplevel/$sm_path"'
1923
- uses: oven-sh/setup-bun@v2
2024
# Setup .npmrc file to publish to npm
2125
- uses: actions/setup-node@v6

scripts/prepublish.ts

Lines changed: 66 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,70 @@ import { access, readFile, writeFile } from 'node:fs/promises';
44
import path from 'node:path';
55
import { $ } from 'bun';
66

7+
function normalizeVersion(version: string): string {
8+
return version.trim().replace(/^refs\/tags\//, '').replace(/^v/, '');
9+
}
10+
11+
function getVersionFromEnvironment(): string | null {
12+
const candidates = [
13+
process.env.RELEASE_VERSION,
14+
process.env.CI_COMMIT_TAG,
15+
process.env.GITHUB_REF_TYPE === 'tag' ? process.env.GITHUB_REF_NAME : null,
16+
process.env.GITHUB_REF?.startsWith('refs/tags/')
17+
? process.env.GITHUB_REF
18+
: null,
19+
];
20+
21+
for (const candidate of candidates) {
22+
if (candidate?.trim()) {
23+
return normalizeVersion(candidate);
24+
}
25+
}
26+
27+
return null;
28+
}
29+
30+
function getShellErrorMessage(error: unknown): string {
31+
if (
32+
typeof error === 'object' &&
33+
error !== null &&
34+
'stderr' in error &&
35+
typeof error.stderr === 'string' &&
36+
error.stderr.trim()
37+
) {
38+
return error.stderr.trim();
39+
}
40+
41+
if (error instanceof Error && error.message.trim()) {
42+
return error.message.trim();
43+
}
44+
45+
return 'Unknown git error';
46+
}
47+
48+
async function getVersionFromGit(): Promise<string> {
49+
try {
50+
return normalizeVersion(await $`git describe --tags --always`.text());
51+
} catch (error) {
52+
const message = getShellErrorMessage(error);
53+
54+
if (message.includes('detected dubious ownership')) {
55+
throw new Error(
56+
'Git refused to read repository metadata because this checkout is not marked as safe. Configure safe.directory in CI or provide RELEASE_VERSION/GITHUB_REF_NAME.',
57+
{ cause: error },
58+
);
59+
}
60+
61+
throw new Error(`Unable to resolve publish version from git: ${message}`, {
62+
cause: error,
63+
});
64+
}
65+
}
66+
67+
async function resolveVersion(): Promise<string> {
68+
return getVersionFromEnvironment() ?? (await getVersionFromGit());
69+
}
70+
771
async function modifyPackageJson({
872
version,
973
}: {
@@ -35,17 +99,15 @@ async function modifyPackageJson({
3599
}
36100

37101
async function main(): Promise<void> {
38-
const version = (await $`git describe --tags --always`.text())
39-
.replace('v', '')
40-
.trim();
41102
try {
103+
const version = await resolveVersion();
104+
console.log(`Using publish version ${version}`);
42105
await modifyPackageJson({ version });
43106
console.log('✅ Prepublish script completed successfully');
44107
} catch (error) {
45108
console.error('❌ Prepublish script failed:', error);
46109
process.exit(1);
47110
}
48-
49111
}
50112

51113
main();

0 commit comments

Comments
 (0)