ci: implement workflow to publish dev versions (#11120)

* ci: implement workflow to publish dev versions

* ci: refactor into the other dev job

* fix: use dev tag

* chore: clarify

* fix: always use actions from main

* fix: conditionally

* chore: don't ask for meaningless perm
This commit is contained in:
Denis-Adrian Cristea
2025-10-08 14:08:39 +03:00
committed by GitHub
parent fcf7f27fd7
commit 0c2975e3fd
5 changed files with 93 additions and 21 deletions

View File

@@ -26,9 +26,9 @@ export interface ReleaseEntry {
version: string;
}
async function fetchDevVersion(pkg: string) {
async function fetchDevVersion(pkg: string, tag: string) {
try {
const res = await fetch(`https://registry.npmjs.org/${pkg}/dev`);
const res = await fetch(`https://registry.npmjs.org/${pkg}/${tag}`);
if (!res.ok) return null;
const packument = (await res.json()) as PackumentVersion;
return packument.version;
@@ -37,7 +37,7 @@ async function fetchDevVersion(pkg: string) {
}
}
async function getReleaseEntries(dev: boolean, dry: boolean) {
async function getReleaseEntries(dry: boolean, devTag?: string) {
const releaseEntries: ReleaseEntry[] = [];
const packageList: pnpmTree[] =
await $`pnpm list --recursive --only-projects --filter {packages/\*} --prod --json`.json();
@@ -57,8 +57,8 @@ async function getReleaseEntries(dev: boolean, dry: boolean) {
version: pkg.version,
};
if (dev) {
const devVersion = await fetchDevVersion(pkg.name);
if (devTag) {
const devVersion = await fetchDevVersion(pkg.name, devTag);
if (devVersion?.endsWith(commitHash)) {
// Write the currently released dev version so when pnpm publish runs on dependents they depend on the dev versions
if (dry) {
@@ -72,9 +72,9 @@ async function getReleaseEntries(dev: boolean, dry: boolean) {
release.version = devVersion;
} else if (dry) {
info(`[DRY] Bumping ${pkg.name} via git-cliff.`);
release.version = `${pkg.version}.DRY-dev.${timestamp}-${commitHash}`;
release.version = `${pkg.version}.DRY-${devTag}.${timestamp}-${commitHash}`;
} else {
await $`pnpm --filter=${pkg.name} run release --preid "dev.${timestamp}-${commitHash}" --skip-changelog`;
await $`pnpm --filter=${pkg.name} run release --preid "${devTag}.${timestamp}-${commitHash}" --skip-changelog`;
// Read again instead of parsing the output to be sure we're matching when checking against npm
const pkgJson = (await file(`${pkg.path}/package.json`).json()) as PackageJSON;
release.version = pkgJson.version;
@@ -129,8 +129,8 @@ async function getReleaseEntries(dev: boolean, dry: boolean) {
return releaseEntries;
}
export async function generateReleaseTree(dev: boolean, dry: boolean, packageName?: string, exclude?: string[]) {
let releaseEntries = await getReleaseEntries(dev, dry);
export async function generateReleaseTree(dry: boolean, devTag?: string, packageName?: string, exclude?: string[]) {
let releaseEntries = await getReleaseEntries(dry, devTag);
// Try to early return if the package doesn't have deps
if (packageName && packageName !== 'all') {
const releaseEntry = releaseEntries.find((entry) => entry.name === packageName);