@@ -6,6 +6,9 @@ import { fileURLToPath } from "url"
66
77console . log ( "=== publishing ===\n" )
88
9+ const dir = fileURLToPath ( new URL ( ".." , import . meta. url ) )
10+ process . chdir ( dir )
11+
912const tag = `v${ Script . version } `
1013
1114const pkgjsons = await Array . fromAsync (
@@ -14,64 +17,29 @@ const pkgjsons = await Array.fromAsync(
1417 } ) ,
1518) . then ( ( arr ) => arr . filter ( ( x ) => ! x . includes ( "node_modules" ) && ! x . includes ( "dist" ) ) )
1619
17- const extensionToml = fileURLToPath ( new URL ( "../packages/extensions/zed/extension.toml" , import . meta. url ) )
18- const publishPackageJsons = [ "packages/plugin/package.json" , "packages/sdk/js/package.json" ]
19-
20- async function hasChanges ( ) {
21- return ( await $ `git diff --quiet && git diff --cached --quiet` . nothrow ( ) ) . exitCode !== 0
22- }
23-
24- async function hasPublishPackageJsonChanges ( ) {
25- if ( ( await $ `git diff --quiet -- ${ publishPackageJsons } ` . nothrow ( ) ) . exitCode !== 0 ) return true
26- return ( await $ `git diff --cached --quiet -- ${ publishPackageJsons } ` . nothrow ( ) ) . exitCode !== 0
27- }
28-
29- async function logPublishPackageJsonChanges ( ) {
30- await $ `git status --short -- ${ publishPackageJsons } `
31- await $ `git diff -- ${ publishPackageJsons } `
32- await $ `git diff --cached -- ${ publishPackageJsons } `
33- }
34-
35- async function releaseTagExists ( ) {
36- return ( await $ `git rev-parse -q --verify refs/tags/${ tag } ` . nothrow ( ) ) . exitCode === 0
37- }
38-
39- async function prepareReleaseFiles ( ) {
40- for ( const file of pkgjsons ) {
41- let pkg = await Bun . file ( file ) . text ( )
42- pkg = pkg . replaceAll ( / " v e r s i o n " : " [ ^ " ] + " / g, `"version": "${ Script . version } "` )
43- console . log ( "updated:" , file )
44- await Bun . file ( file ) . write ( pkg )
45- }
46-
47- let toml = await Bun . file ( extensionToml ) . text ( )
48- toml = toml . replace ( / ^ v e r s i o n = " [ ^ " ] + " / m, `version = "${ Script . version } "` )
49- toml = toml . replaceAll ( / r e l e a s e s \/ d o w n l o a d \/ v [ ^ / ] + \/ / g, `releases/download/v${ Script . version } /` )
50- console . log ( "updated:" , extensionToml )
51- await Bun . file ( extensionToml ) . write ( toml )
52-
53- await $ `bun install`
54- await $ `./packages/sdk/js/script/build.ts`
55- }
56-
5720if ( Script . release && ! Script . preview ) {
5821 await $ `git fetch origin --tags`
5922 await $ `git switch --detach`
6023}
6124
62- await prepareReleaseFiles ( )
63-
64- if ( Script . release && ! Script . preview ) {
65- if ( await releaseTagExists ( ) ) {
66- console . log ( `release tag ${ tag } already exists, skipping tag creation` )
67- } else {
68- await $ `git commit -am "release: ${ tag } "`
69- await $ `git tag ${ tag } `
70- await $ `git push origin refs/tags/${ tag } --no-verify`
71- await new Promise ( ( resolve ) => setTimeout ( resolve , 5_000 ) )
72- }
25+ for ( const file of pkgjsons ) {
26+ let pkg = await Bun . file ( file ) . text ( )
27+ pkg = pkg . replaceAll ( / " v e r s i o n " : " [ ^ " ] + " / g, `"version": "${ Script . version } "` )
28+ console . log ( "updated:" , file )
29+ await Bun . file ( file ) . write ( pkg )
7330}
7431
32+ const extensionToml = fileURLToPath ( new URL ( "../packages/extensions/zed/extension.toml" , import . meta. url ) )
33+ let toml = await Bun . file ( extensionToml ) . text ( )
34+ toml = toml . replace ( / ^ v e r s i o n = " [ ^ " ] + " / m, `version = "${ Script . version } "` )
35+ toml = toml . replaceAll ( / r e l e a s e s \/ d o w n l o a d \/ v [ ^ / ] + \/ / g, `releases/download/v${ Script . version } /` )
36+ console . log ( "updated:" , extensionToml )
37+ await Bun . file ( extensionToml ) . write ( toml )
38+
39+ await $ `bun install`
40+ await import ( `../packages/sdk/js/script/build.ts` )
41+ process . chdir ( dir )
42+
7543console . log ( "\n=== cli ===\n" )
7644await import ( `../packages/opencode/script/publish.ts` )
7745
@@ -87,25 +55,19 @@ if (Script.release) {
8755}
8856
8957if ( Script . release && ! Script . preview ) {
58+ process . chdir ( dir )
59+ await $ `git commit -am "release: ${ tag } "`
60+ const releaseCommit = ( await $ `git rev-parse HEAD` . text ( ) ) . trim ( )
61+ await $ `git tag -d ${ tag } ` . nothrow ( )
62+ await $ `git tag ${ tag } `
63+ await $ `git push origin refs/tags/${ tag } --force-with-lease --no-verify`
64+ await new Promise ( ( resolve ) => setTimeout ( resolve , 5_000 ) )
9065 await $ `git fetch origin`
91- if ( await hasPublishPackageJsonChanges ( ) ) {
92- console . error ( "publish scripts left package.json changes before syncing dev" )
93- await logPublishPackageJsonChanges ( )
94- throw new Error ( "packages/plugin/package.json or packages/sdk/js/package.json changed during publish" )
95- }
9666 await $ `git checkout -B dev origin/dev`
97- await prepareReleaseFiles ( )
98- if ( await hasChanges ( ) ) {
99- await $ `git commit -am "sync release versions for v${ Script . version } "`
100- await $ `git push origin HEAD:dev --no-verify`
101- } else {
102- console . log ( `dev already synced for ${ tag } ` )
103- }
67+ await $ `git cherry-pick ${ releaseCommit } `
68+ await $ `git push origin HEAD:dev --no-verify`
10469}
10570
10671if ( Script . release ) {
10772 await $ `gh release edit ${ tag } --draft=false --repo ${ process . env . GH_REPO } `
10873}
109-
110- const dir = fileURLToPath ( new URL ( ".." , import . meta. url ) )
111- process . chdir ( dir )
0 commit comments