1
1
const path = require ( "node:path" ) ;
2
2
const cp = require ( "node:child_process" ) ;
3
+ const fs = require ( "node:fs" ) ;
3
4
const semver = require ( "semver" ) ;
4
5
6
+ const { ensureCleanWorkingDirectory } = require ( "./utils" ) ;
7
+
5
8
const packageDir = path . resolve ( __dirname , "../packages" ) ;
6
9
10
+ const PACKAGES = [
11
+ "remix-eslint-config" ,
12
+ "remix-server-runtime" , // publish before platforms
13
+ "remix-cloudflare" ,
14
+ "remix-cloudflare-pages" ,
15
+ "remix-cloudflare-workers" ,
16
+ "remix-deno" ,
17
+ "remix-node" , // publish node before node servers
18
+ "remix-dev" , // publish after node
19
+ "remix-architect" ,
20
+ "remix-express" , // publish express before serve
21
+ "remix-react" ,
22
+ "remix-serve" ,
23
+ "remix-fs-routes" ,
24
+ "remix-css-bundle" ,
25
+ "remix-testing" ,
26
+ "remix-route-config" ,
27
+ "remix-routes-option-adapter" ,
28
+ "create-remix" ,
29
+ "remix" ,
30
+ ] ;
31
+
7
32
function getTaggedVersion ( ) {
8
33
let output = cp . execSync ( "git tag --list --points-at HEAD" ) . toString ( ) . trim ( ) ;
9
34
return output . replace ( / ^ v / , "" ) . replace ( / ^ r e m i x @ / , "" ) ;
@@ -14,18 +39,28 @@ function getTaggedVersion() {
14
39
* @param {string } tag
15
40
*/
16
41
function publish ( dir , tag ) {
17
- let args = [ "--access public" , `--tag ${ tag } ` ] ;
18
- if ( [ "experimental" , "nightly" ] . includes ( tag ) ) {
19
- args . push ( `--no-git-checks` ) ;
20
- } else {
21
- args . push ( "--publish-branch v2" ) ;
22
- }
23
- let cmd = `pnpm publish ${ dir } ${ args . join ( " " ) } ` ;
42
+ let cmd = `pnpm publish ${ dir } --access public --tag ${ tag } --no-git-checks` ;
24
43
console . log ( "Publishing command:" , cmd ) ;
25
44
cp . execSync ( cmd , { stdio : "inherit" } ) ;
26
45
}
27
46
47
+ /**
48
+ * @param {string } dir
49
+ * @param {string } tag
50
+ */
51
+ function validateVersion ( dir , tag ) {
52
+ let file = path . join ( dir , "package.json" ) ;
53
+ let json = JSON . parse ( fs . readFileSync ( file , "utf8" ) ) ;
54
+ if ( json . version !== tag ) {
55
+ throw new Error (
56
+ `Package ${ dir } is on version ${ json . version } , but should be on ${ tag } `
57
+ ) ;
58
+ }
59
+ }
60
+
28
61
async function run ( ) {
62
+ ensureCleanWorkingDirectory ( ) ;
63
+
29
64
// Make sure there's a current tag
30
65
let taggedVersion = getTaggedVersion ( ) ;
31
66
@@ -46,28 +81,13 @@ async function run() {
46
81
: prereleaseTag
47
82
: "latest" ;
48
83
84
+ // Validate all packages
85
+ for ( let name of PACKAGES ) {
86
+ validateVersion ( path . join ( packageDir , name ) , taggedVersion ) ;
87
+ }
88
+
49
89
// Publish all packages
50
- for ( let name of [
51
- "remix-eslint-config" ,
52
- "remix-server-runtime" , // publish before platforms
53
- "remix-cloudflare" ,
54
- "remix-cloudflare-pages" ,
55
- "remix-cloudflare-workers" ,
56
- "remix-deno" ,
57
- "remix-node" , // publish node before node servers
58
- "remix-dev" , // publish after node
59
- "remix-architect" ,
60
- "remix-express" , // publish express before serve
61
- "remix-react" ,
62
- "remix-serve" ,
63
- "remix-fs-routes" ,
64
- "remix-css-bundle" ,
65
- "remix-testing" ,
66
- "remix-route-config" ,
67
- "remix-routes-option-adapter" ,
68
- "create-remix" ,
69
- "remix" ,
70
- ] ) {
90
+ for ( let name of PACKAGES ) {
71
91
publish ( path . join ( packageDir , name ) , tag ) ;
72
92
}
73
93
}
0 commit comments