This is a fix to pnpm deployment which needs testing as the final part of origin/master release No functional changes * fix(docs): remove stray tool-call tags breaking the MDX build platform/docs/docs/migration-guide/3p12-to-3p13/build-tooling.md ended with two orphan closing tags (leftover tool-call serialization artifacts): </content> </invoke> Docusaurus compiles Markdown as MDX (JSX-aware), so the orphan closing tag failed the docs build: MDX compilation failed ... Unexpected closing slash in tag, expected an open tag first (build-tooling.md line 402) This was the remaining blocker for build-and-deploy-docs once the --no-frozen-lockfile change let the install step succeed. A scan of the docs tree found no other such artifacts. Verified locally: docusaurus build now generates static files with no MDX errors. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Update lockfile and avoid freshness check on every command * fix(release): keep workspace:* in the repo, concretize only at publish The release flow rewrote internal @ohif/* dependency specifiers to the concrete version and committed them, so pnpm-lock.yaml (which records workspace links) drifted from the manifests on every version bump. The resulting ERR_PNPM_OUTDATED_LOCKFILE broke every frozen install: Netlify (viewer-dev), the docs deploy, pnpm's pre-run deps check, and post-merge installs. Keep workspace:* everywhere in the committed repo and move the concrete-version substitution to publish time only: - publish-version.mjs: bump each package's own `version` field only; stop rewriting @ohif/* dependency/peerDependency specifiers. - publish-package.mjs: publish with `pnpm publish --no-git-checks` instead of `npm publish`. pnpm rewrites workspace:* to the exact version in the published tarball; npm would publish the literal "workspace:*", which npm/yarn consumers cannot resolve. - One-time: revert the 25 workspace manifests' @ohif/* specifiers to workspace:* (version fields untouched) and regenerate pnpm-lock.yaml to match. Because internal deps are workspace:* (links, not versions in the lockfile), version bumps no longer change pnpm-lock.yaml, so it stays in sync and frozen installs keep working. Verified: `pnpm install --frozen-lockfile` passes, and `pnpm pack` of @ohif/core emits a tarball whose @ohif/ui dependency is the exact version (3.13.0-beta.92), not workspace:*. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(ci): correct build-docs install comment for workspace:* release flow publish-version.mjs no longer rewrites @ohif/* deps to concrete versions, so the old comment was stale. Internal deps stay workspace:* and the lockfile stays consistent; pnpm publish concretizes only the published tarball. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci(docs): use --frozen-lockfile now that the lockfile no longer drifts With internal deps as workspace:* the lockfile stays in sync across version bumps, so the docs deploy can install frozen -- failing fast on genuine lockfile drift instead of silently reconciling. The --no-frozen-lockfile workaround is no longer needed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci: use --frozen-lockfile in CI install steps now that the lockfile is stable Internal @ohif/* deps are workspace:* so pnpm-lock.yaml no longer drifts; the UNIT_TESTS/BUILD/NPM_PUBLISH installs can run frozen and fail fast on genuine drift. Kept --no-frozen-lockfile only where it is still required: the Dockerfile (platform/docs is excluded from the build context) and the playwright CS3D-version step (mutates @cornerstonejs versions before installing). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test: stability of seg load mpr test * Better drag fix for crosshairs --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
77 lines
2.6 KiB
JavaScript
77 lines
2.6 KiB
JavaScript
import { execa } from 'execa';
|
|
import fs from 'fs/promises';
|
|
import glob from 'glob';
|
|
import path from 'path';
|
|
|
|
const MAX_RETRIES = 3;
|
|
const RETRY_DELAY = 10000; // 10 seconds
|
|
|
|
async function run() {
|
|
const { stdout: branchName } = await execa('git', ['rev-parse', '--abbrev-ref', 'HEAD']);
|
|
|
|
const packages = ['extensions/*', 'platform/*', 'modes/*'];
|
|
|
|
const rootDir = process.cwd();
|
|
|
|
for (const packagePathPattern of packages) {
|
|
const matchingDirectories = glob.sync(packagePathPattern, { cwd: rootDir });
|
|
|
|
for (const packageDirectory of matchingDirectories) {
|
|
try {
|
|
// change back to the root directory
|
|
process.chdir(rootDir);
|
|
|
|
const packageJsonPath = path.join(packageDirectory, 'package.json');
|
|
|
|
const packageJsonContent = JSON.parse(await fs.readFile(packageJsonPath, 'utf8'));
|
|
|
|
if (packageJsonContent.private) {
|
|
console.log(`Skipping private package at ${packageDirectory}`);
|
|
continue;
|
|
}
|
|
|
|
// move to package directory
|
|
process.chdir(packageDirectory);
|
|
|
|
let retries = 0;
|
|
while (retries < MAX_RETRIES) {
|
|
try {
|
|
console.log(`Tying to publishing package at ${packageDirectory}`);
|
|
// Use `pnpm publish` (not npm) so the workspace:* specifiers on our
|
|
// internal @ohif/* deps are rewritten to the exact version in the
|
|
// published tarball. npm would publish the literal "workspace:*",
|
|
// which npm/yarn consumers cannot resolve. --no-git-checks because
|
|
// the bump commit/tag is created in CI on a possibly-detached ref.
|
|
const publishArgs = ['publish', '--no-git-checks'];
|
|
|
|
if (branchName === 'master') {
|
|
publishArgs.push('--tag', 'beta');
|
|
}
|
|
|
|
await execa('pnpm', publishArgs);
|
|
console.log(`Successfully published package at ${packageDirectory}`);
|
|
break;
|
|
} catch (error) {
|
|
retries++;
|
|
console.error(
|
|
`Failed to publish package at ${packageDirectory} with error ${error}, retrying... (${retries}/${MAX_RETRIES})`
|
|
);
|
|
await new Promise(resolve => setTimeout(resolve, RETRY_DELAY));
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error(`An error occurred while processing ${packageDirectory}: ${error}`);
|
|
} finally {
|
|
process.chdir(rootDir); // Ensure we always move back to the root directory
|
|
}
|
|
}
|
|
}
|
|
|
|
console.log('Finished');
|
|
}
|
|
|
|
run().catch(err => {
|
|
console.error('Error encountered during package publish:', err);
|
|
process.exit(1);
|
|
});
|