fix(jetbrains): use gradle release metadata

This commit is contained in:
kirillk
2026-05-29 12:14:43 -04:00
parent dfe3961087
commit fb6e241b97
10 changed files with 38 additions and 41 deletions
+4 -4
View File
@@ -49,7 +49,7 @@ jobs:
- name: Save reviewed release metadata
run: |
cp packages/kilo-jetbrains/CHANGELOG.md "$RUNNER_TEMP/jetbrains-CHANGELOG.md"
cp packages/kilo-jetbrains/package.json "$RUNNER_TEMP/jetbrains-package.json"
cp packages/kilo-jetbrains/gradle.properties "$RUNNER_TEMP/jetbrains-gradle.properties"
- name: Checkout release tag
uses: actions/checkout@v6
@@ -60,7 +60,7 @@ jobs:
- name: Restore reviewed release metadata
run: |
cp "$RUNNER_TEMP/jetbrains-CHANGELOG.md" packages/kilo-jetbrains/CHANGELOG.md
cp "$RUNNER_TEMP/jetbrains-package.json" packages/kilo-jetbrains/package.json
cp "$RUNNER_TEMP/jetbrains-gradle.properties" packages/kilo-jetbrains/gradle.properties
- name: Setup Node
uses: actions/setup-node@v4
@@ -111,7 +111,7 @@ jobs:
- name: Verify plugin
working-directory: packages/kilo-jetbrains
run: ./gradlew verifyPlugin -Pproduction=true -Pkilo.version="$VERSION" -Pkilo.channel="$CHANNEL"
run: ./gradlew verifyPlugin -Pproduction=true -Pkilo.channel="$CHANNEL"
env:
VERSION: ${{ steps.release.outputs.version }}
CHANNEL: ${{ steps.release.outputs.marketplace_channel }}
@@ -129,7 +129,7 @@ jobs:
- name: Publish to JetBrains Marketplace
working-directory: packages/kilo-jetbrains
run: ./gradlew publishPlugin -Pproduction=true -Pkilo.version="$VERSION" -Pkilo.channel="$CHANNEL"
run: ./gradlew publishPlugin -Pproduction=true -Pkilo.channel="$CHANNEL"
env:
VERSION: ${{ steps.release.outputs.version }}
CHANNEL: ${{ steps.release.outputs.marketplace_channel }}
+4 -4
View File
@@ -58,12 +58,12 @@ The PR updates:
| File | Purpose |
|---|---|
| `packages/kilo-jetbrains/package.json` | JetBrains plugin package version. |
| `packages/kilo-jetbrains/gradle.properties` | JetBrains plugin version in `kilo.jetbrains.version`. |
| `packages/kilo-jetbrains/CHANGELOG.md` | Release notes packaged into the plugin. |
Review and edit `packages/kilo-jetbrains/CHANGELOG.md` before merging. This changelog entry is rendered into JetBrains `<change-notes>`, so it appears on the Marketplace and inside IntelliJ plugin UI.
Review `packages/kilo-jetbrains/gradle.properties` and edit `packages/kilo-jetbrains/CHANGELOG.md` before merging. This changelog entry is rendered into JetBrains `<change-notes>`, so it appears on the Marketplace and inside IntelliJ plugin UI.
The PR can change release metadata such as `packages/kilo-jetbrains/package.json` and `packages/kilo-jetbrains/CHANGELOG.md`, but it does not change the tagged source code that will be built.
The PR can change release metadata such as `packages/kilo-jetbrains/gradle.properties` and `packages/kilo-jetbrains/CHANGELOG.md`, but it does not change the tagged source code that will be built.
## Merge and Publish
@@ -84,7 +84,7 @@ Publishing behavior:
| `x.y.z-rc.n` | `eap` | Prerelease |
| `x.y.z` | default | Stable release |
The workflow checks out `jetbrains/v<version>` for verification, signing, and Marketplace publishing. It overlays the reviewed `packages/kilo-jetbrains/CHANGELOG.md` from the merged PR before rendering release notes and before `publishPlugin`, so Marketplace metadata and the GitHub Release use the reviewed changelog.
The workflow checks out `jetbrains/v<version>` for verification, signing, and Marketplace publishing. It overlays the reviewed `packages/kilo-jetbrains/gradle.properties` and `packages/kilo-jetbrains/CHANGELOG.md` from the merged PR before rendering release notes and before `publishPlugin`, so the Marketplace plugin version, Marketplace notes, and GitHub Release use the reviewed metadata.
## Installing RC Builds
+5 -4
View File
@@ -42,10 +42,11 @@ fun gitTag(): String? {
val release = providers.gradleProperty("production").map { it.toBoolean() }.orElse(false).get()
val override = providers.gradleProperty("kilo.version").orNull?.trim()?.takeIf { it.isNotEmpty() }
val ver = override?.let(::checked) ?: if (release) checked(
gitTag()?.removePrefix("jetbrains/v")
?: error("Missing JetBrains plugin version. Publish builds must run from a jetbrains/v<version> tag."),
) else checked(gitTag()?.removePrefix("jetbrains/v") ?: "0.0.0-dev")
val prop = providers.gradleProperty("kilo.jetbrains.version").orNull?.trim()?.takeIf { it.isNotEmpty() }
val tag = gitTag()?.removePrefix("jetbrains/v")
val ver = override?.let(::checked) ?: prop?.let(::checked) ?: if (release) checked(
tag ?: error("Missing JetBrains plugin version. Publish builds must set kilo.jetbrains.version or run from a jetbrains/v<version> tag."),
) else checked(tag ?: "0.0.0-dev")
val channel = providers.gradleProperty("kilo.channel").map { it.trim() }.orElse("default")
val splitPort = providers.gradleProperty("kilo.splitModeServerPort").orNull?.let(::port) ?: fallback()
@@ -1,4 +1,5 @@
kotlin.stdlib.default.dependency=false
kilo.jetbrains.version=7.0.1-rc.4
org.gradle.configuration-cache=true
org.gradle.caching=true
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=512m
+1 -1
View File
@@ -8,7 +8,7 @@
"test": "./gradlew test",
"test:ci": "bun script/test-ci.ts"
},
"version": "7.0.1-rc.4",
"version": "7.3.17",
"dependencies": {},
"devDependencies": {},
"peerDependencies": {}
+11 -8
View File
@@ -5,7 +5,7 @@ import { $ } from "bun"
import semver from "semver"
import { parseArgs } from "util"
const pkgfile = new URL("../packages/kilo-jetbrains/package.json", import.meta.url).pathname
const props = new URL("../packages/kilo-jetbrains/gradle.properties", import.meta.url).pathname
const log = new URL("../packages/kilo-jetbrains/CHANGELOG.md", import.meta.url).pathname
const repo = process.env.GH_REPO ?? process.env.GITHUB_REPOSITORY ?? "Kilo-Org/kilocode"
@@ -67,9 +67,9 @@ if (dry) {
}
await $`git checkout -B ${branch} ${sha}`
await writepkg(ver)
await writeprops(ver)
await writelog(ver, entry)
await $`git add packages/kilo-jetbrains/package.json packages/kilo-jetbrains/CHANGELOG.md`
await $`git add packages/kilo-jetbrains/gradle.properties packages/kilo-jetbrains/CHANGELOG.md`
const changed = await $`git diff --cached --quiet`.nothrow()
if (changed.exitCode !== 0) await $`git commit -m ${`release(jetbrains): v${ver}`}`
@@ -203,10 +203,13 @@ function entries(notes: string) {
return groups
}
async function writepkg(ver: string) {
const pkg = await Bun.file(pkgfile).json()
pkg.version = ver
await Bun.write(pkgfile, `${JSON.stringify(pkg, null, 2)}\n`)
async function writeprops(ver: string) {
const current = await Bun.file(props).text()
const line = `kilo.jetbrains.version=${ver}`
const next = current.match(/^kilo\.jetbrains\.version=/m)
? current.replace(/^kilo\.jetbrains\.version=.*$/m, line)
: `${current.trim()}\n${line}\n`
await Bun.write(props, next.endsWith("\n") ? next : `${next}\n`)
}
async function writelog(ver: string, entry: string) {
@@ -229,7 +232,7 @@ function regex(ver: string) {
function body(ver: string, kind: string, from: string, tag: string, sha: string, notes: string) {
return `## Summary
- Prepare JetBrains ${kind} release ${ver}.
- Review and edit \`packages/kilo-jetbrains/CHANGELOG.md\` before merging.
- Review \`packages/kilo-jetbrains/gradle.properties\` and edit \`packages/kilo-jetbrains/CHANGELOG.md\` before merging.
JetBrains-Version: ${ver}
JetBrains-Kind: ${kind}
+10 -2
View File
@@ -69,8 +69,8 @@ if (existing.exitCode !== 0) throw new Error(`${tag} does not exist`)
const sha = (await $`git rev-list -n 1 ${tag}`.text()).trim()
if (sha !== commit) throw new Error(`${tag} points at ${sha}, expected ${commit}`)
const pkg = await Bun.file("packages/kilo-jetbrains/package.json").json()
if (pkg.version !== ver) throw new Error(`packages/kilo-jetbrains/package.json version is ${pkg.version}, expected ${ver}`)
const prop = await props()
if (prop !== ver) throw new Error(`packages/kilo-jetbrains/gradle.properties kilo.jetbrains.version is ${prop}, expected ${ver}`)
const changelog = await Bun.file("packages/kilo-jetbrains/CHANGELOG.md").text()
if (!changelog.includes(`## [${ver}]`)) throw new Error(`CHANGELOG.md is missing section for ${ver}`)
@@ -102,3 +102,11 @@ function need(body: string, key: string) {
if (!value) throw new Error(`PR body is missing ${key}`)
return value
}
async function props() {
const text = await Bun.file("packages/kilo-jetbrains/gradle.properties").text()
const line = text.split(/\r?\n/).find((item) => item.startsWith("kilo.jetbrains.version="))
const value = line?.split("=", 2)[1]?.trim()
if (!value) throw new Error("packages/kilo-jetbrains/gradle.properties is missing kilo.jetbrains.version")
return value
}
+1 -8
View File
@@ -50,14 +50,7 @@ const pkgjsons = await Array.fromAsync(
new Bun.Glob("**/package.json").scan({
absolute: true,
}),
).then((arr) =>
arr.filter(
(x) =>
!x.includes("node_modules") &&
!x.includes("dist") &&
!x.endsWith("/packages/kilo-jetbrains/package.json"), // kilocode_change
),
)
).then((arr) => arr.filter((x) => !x.includes("node_modules") && !x.includes("dist")))
for (const file of pkgjsons) {
let pkg = await Bun.file(file).text()
+1 -8
View File
@@ -42,14 +42,7 @@ const pkgjsons = await Array.fromAsync(
new Bun.Glob("**/package.json").scan({
absolute: true,
}),
).then((arr) =>
arr.filter(
(x) =>
!x.includes("node_modules") &&
!x.includes("dist") &&
!x.endsWith("/packages/kilo-jetbrains/package.json"), // kilocode_change
),
)
).then((arr) => arr.filter((x) => !x.includes("node_modules") && !x.includes("dist")))
for (const file of pkgjsons) {
let pkg = await Bun.file(file).text()
@@ -76,8 +76,6 @@ export async function preserveAllVersions(options: PreserveOptions = {}): Promis
info(`Target version: ${targetVersion}`)
for await (const path of glob.scan({ absolute: true })) {
if (path.endsWith("/packages/kilo-jetbrains/package.json")) continue
// Skip excluded paths
if (excludes.some((ex) => path.includes(ex.replace(/\*\*/g, "")))) {
continue