Compare commits

..

2 Commits

Author SHA1 Message Date
Shantur Rathore
ba418a8518 chore(release): publish dev builds as codenomad-dev
Switch dev workflow to publish the server under @neuralnomads/codenomad-dev with dist-tag latest, avoiding @dev dist-tags. Add workflow input to override package name at publish time.
2026-02-13 00:39:14 +00:00
Shantur Rathore
ffe991bbe4 chore(release): simplify dev version format
Switch dev builds to use -dev-YYYYMMDD-sha8 suffix and update version parsing + dev detection accordingly.
2026-02-13 00:07:33 +00:00
8 changed files with 35 additions and 9 deletions

View File

@@ -26,15 +26,16 @@ jobs:
run: |
set -euo pipefail
SHA8="${GITHUB_SHA::8}"
TS=$(date -u +%Y%m%d%H%M%S)
echo "version_suffix=-dev.${TS}.${SHA8}" >> "$GITHUB_OUTPUT"
DATE=$(date -u +%Y%m%d)
echo "version_suffix=-dev-${DATE}-${SHA8}" >> "$GITHUB_OUTPUT"
prerelease:
needs: prepare
uses: ./.github/workflows/reusable-release.yml
with:
version_suffix: ${{ needs.prepare.outputs.version_suffix }}
dist_tag: dev
npm_package_name: "@neuralnomads/codenomad-dev"
dist_tag: latest
prerelease: true
release_ui: false
secrets: inherit

View File

@@ -12,6 +12,11 @@ on:
required: false
default: dev
type: string
package_name:
description: "Package name to publish (e.g. @neuralnomads/codenomad-dev)"
required: false
default: "@neuralnomads/codenomad"
type: string
workflow_call:
inputs:
version:
@@ -21,6 +26,10 @@ on:
required: false
type: string
default: dev
package_name:
required: false
type: string
default: "@neuralnomads/codenomad"
secrets:
NPM_TOKEN:
required: false
@@ -54,7 +63,7 @@ jobs:
run: npm install @rollup/rollup-linux-x64-gnu --no-save
- name: Build server package (includes UI bundling)
run: npm run build --workspace @neuralnomads/codenomad
run: npm run build --workspace packages/server
- name: Set publish metadata
shell: bash
@@ -65,10 +74,17 @@ jobs:
fi
echo "VERSION=$VERSION_INPUT" >> "$GITHUB_ENV"
echo "DIST_TAG=${{ inputs.dist_tag || 'dev' }}" >> "$GITHUB_ENV"
echo "PACKAGE_NAME=${{ inputs.package_name }}" >> "$GITHUB_ENV"
- name: Bump package version for publish
run: npm version ${VERSION} --workspaces --include-workspace-root --no-git-tag-version --allow-same-version
- name: Set server package name for publish
shell: bash
run: |
set -euo pipefail
node -e "const fs=require('fs'); const path=require('path'); const p=path.join('packages','server','package.json'); const j=JSON.parse(fs.readFileSync(p,'utf8')); j.name=process.env.PACKAGE_NAME || j.name; fs.writeFileSync(p, JSON.stringify(j, null, 2)+'\n'); console.log('Publishing as', j.name);"
- name: Publish server package with provenance
env:
# Optional: when present, npm will use token auth.
@@ -85,4 +101,4 @@ jobs:
else
echo "Using NPM_TOKEN authentication"
fi
npm publish --workspace @neuralnomads/codenomad --access public --tag ${DIST_TAG} --provenance
npm publish --workspace packages/server --access public --tag ${DIST_TAG} --provenance

View File

@@ -14,4 +14,5 @@ jobs:
uses: ./.github/workflows/reusable-release.yml
with:
dist_tag: latest
npm_package_name: "@neuralnomads/codenomad"
secrets: inherit

View File

@@ -13,6 +13,11 @@ on:
required: false
default: dev
type: string
npm_package_name:
description: "npm package name to publish (defaults to server package name)"
required: false
default: ""
type: string
prerelease:
description: "Create GitHub prerelease"
required: false
@@ -100,4 +105,5 @@ jobs:
with:
version: ${{ needs.prepare-release.outputs.version }}
dist_tag: ${{ inputs.dist_tag }}
package_name: ${{ inputs.npm_package_name }}
secrets: inherit

View File

@@ -47,7 +47,7 @@ npx @neuralnomads/codenomad --launch
For dev version
```bash
npx @neuralnomads/codenomad@dev --launch
npx @neuralnomads/codenomad-dev --launch
```
Dev builds are published as GitHub pre-releases:

View File

@@ -351,7 +351,7 @@ async function main() {
const updateChannel = (process.env.CODENOMAD_UPDATE_CHANNEL ?? "").trim().toLowerCase()
const githubRepo = (process.env.CODENOMAD_GITHUB_REPO ?? "NeuralNomadsAI/CodeNomad").trim()
const isDevVersion = packageJson.version.includes("-dev.")
const isDevVersion = packageJson.version.includes("-dev.") || packageJson.version.includes("-dev-")
const enableDevUpdateChecks = updateChannel === "dev" || (updateChannel === "" && isDevVersion)
const devReleaseMonitor = enableDevUpdateChecks
? startDevReleaseMonitor({

View File

@@ -107,7 +107,9 @@ export function stripTagPrefix(tag: string | undefined): string | null {
function parseVersion(value: string): NormalizedVersion {
const normalized = stripTagPrefix(value) ?? "0.0.0"
const [core, prerelease = null] = normalized.split("-", 2)
const dashIndex = normalized.indexOf("-")
const core = dashIndex >= 0 ? normalized.slice(0, dashIndex) : normalized
const prerelease = dashIndex >= 0 ? normalized.slice(dashIndex + 1) : null
const [major = 0, minor = 0, patch = 0] = core.split(".").map((segment) => {
const parsed = Number.parseInt(segment, 10)
return Number.isFinite(parsed) ? parsed : 0

View File

@@ -148,7 +148,7 @@ function ensureMetaRefresh(meta: ServerMeta) {
if (metaRefreshInterval) return
const version = meta.serverVersion?.trim() ?? ""
const looksLikeDev = version.includes("-dev.")
const looksLikeDev = version.includes("-dev.") || version.includes("-dev-")
const hasDevUpdateChannel = Boolean(meta.update)
if (!looksLikeDev && !hasDevUpdateChannel) {