7
7
* if a rebuild is needed. It compares current versions with the latest available.
8
8
*/
9
9
10
- interface PHPVersion {
11
- version : string ;
12
- status : 'stable' | 'security' | 'eol' ;
13
- releaseDate ?: string ;
10
+ // Unused interface - keeping for future use
11
+ interface _PHPVersion {
12
+ version : string
13
+ status : 'stable' | 'security' | 'eol'
14
+ releaseDate ?: string
14
15
}
15
16
16
17
interface BuildInfo {
17
- currentVersions : string [ ] ;
18
- latestVersions : string [ ] ;
19
- hasNewVersions : boolean ;
20
- newVersions : string [ ] ;
21
- rebuildNeeded : boolean ;
22
- reason : string ;
18
+ currentVersions : string [ ]
19
+ latestVersions : string [ ]
20
+ hasNewVersions : boolean
21
+ newVersions : string [ ]
22
+ rebuildNeeded : boolean
23
+ reason : string
23
24
}
24
25
25
26
async function getCurrentVersions ( ) : Promise < string [ ] > {
26
27
try {
27
28
// Read current versions from the script
28
- const { readFileSync } = await import ( 'fs' ) ;
29
- const scriptContent = readFileSync ( 'scripts/get-php-versions.ts' , 'utf8' ) ;
29
+ const { readFileSync } = await import ( 'node: fs' )
30
+ const scriptContent = readFileSync ( 'scripts/get-php-versions.ts' , 'utf8' )
30
31
31
32
// Extract fallback versions from the script
32
- const fallbackMatch = scriptContent . match ( / r e t u r n \[ ' ( [ ^ ' ] + ) ' , ' ( [ ^ ' ] + ) ' , ' ( [ ^ ' ] + ) ' , ' ( [ ^ ' ] + ) ' \] / ) ;
33
+ const fallbackMatch = scriptContent . match ( / r e t u r n \[ ' ( [ ^ ' ] + ) ' , ' ( [ ^ ' ] + ) ' , ' ( [ ^ ' ] + ) ' , ' ( [ ^ ' ] + ) ' \] / )
33
34
if ( fallbackMatch ) {
34
- return [ fallbackMatch [ 1 ] , fallbackMatch [ 2 ] , fallbackMatch [ 3 ] , fallbackMatch [ 4 ] ] ;
35
+ return [ fallbackMatch [ 1 ] , fallbackMatch [ 2 ] , fallbackMatch [ 3 ] , fallbackMatch [ 4 ] ]
35
36
}
36
37
37
38
// If we can't parse from script, use hardcoded fallback
38
- return [ '8.4.11' , '8.3.14' , '8.2.26' , '8.1.30' ] ;
39
- } catch ( error ) {
40
- console . error ( 'Failed to read current versions:' , error ) ;
41
- return [ '8.4.11' , '8.3.14' , '8.2.26' , '8.1.30' ] ;
39
+ return [ '8.4.11' , '8.3.14' , '8.2.26' , '8.1.30' ]
40
+ }
41
+ catch ( error ) {
42
+ console . error ( 'Failed to read current versions:' , error )
43
+ return [ '8.4.11' , '8.3.14' , '8.2.26' , '8.1.30' ]
42
44
}
43
45
}
44
46
45
47
async function getLatestVersions ( ) : Promise < string [ ] > {
46
48
try {
47
49
// Use ts-pkgx to get PHP versions
48
- const { execSync } = await import ( 'child_process' ) ;
49
- const output = execSync ( 'bunx ts-pkgx get-php-versions' , { encoding : 'utf8' } ) ;
50
+ const { execSync } = await import ( 'node: child_process' )
51
+ const output = execSync ( 'bunx ts-pkgx get-php-versions' , { encoding : 'utf8' } )
50
52
51
53
// Parse the output - assuming it returns a JSON array or comma-separated string
52
- let versions : string [ ] ;
54
+ let versions : string [ ]
53
55
try {
54
- versions = JSON . parse ( output ) ;
55
- } catch {
56
+ versions = JSON . parse ( output )
57
+ }
58
+ catch {
56
59
// If not JSON, split by comma
57
- versions = output . trim ( ) . split ( ',' ) . map ( v => v . trim ( ) ) ;
60
+ versions = output . trim ( ) . split ( ',' ) . map ( v => v . trim ( ) )
58
61
}
59
62
60
63
// Filter to only stable versions and sort by version
61
64
const stableVersions = versions
62
65
. filter ( v => v . match ( / ^ \d + \. \d + \. \d + $ / ) )
63
66
. sort ( ( a , b ) => {
64
- const [ aMajor , aMinor , aPatch ] = a . split ( '.' ) . map ( Number ) ;
65
- const [ bMajor , bMinor , bPatch ] = b . split ( '.' ) . map ( Number ) ;
66
-
67
- if ( aMajor !== bMajor ) return bMajor - aMajor ;
68
- if ( aMinor !== bMinor ) return bMinor - aMinor ;
69
- return bPatch - aPatch ;
67
+ const [ aMajor , aMinor , aPatch ] = a . split ( '.' ) . map ( Number )
68
+ const [ bMajor , bMinor , bPatch ] = b . split ( '.' ) . map ( Number )
69
+
70
+ if ( aMajor !== bMajor )
71
+ return bMajor - aMajor
72
+ if ( aMinor !== bMinor )
73
+ return bMinor - aMinor
74
+ return bPatch - aPatch
70
75
} )
71
- . slice ( 0 , 4 ) ; // Keep only the 4 most recent versions
76
+ . slice ( 0 , 4 ) // Keep only the 4 most recent versions
72
77
73
- return stableVersions ;
74
- } catch ( error ) {
75
- console . error ( 'Failed to fetch latest PHP versions from ts-pkgx:' , error ) ;
78
+ return stableVersions
79
+ }
80
+ catch ( error ) {
81
+ console . error ( 'Failed to fetch latest PHP versions from ts-pkgx:' , error )
76
82
77
83
// Fallback to current versions
78
- return await getCurrentVersions ( ) ;
84
+ return await getCurrentVersions ( )
79
85
}
80
86
}
81
87
82
88
function compareVersions ( current : string [ ] , latest : string [ ] ) : BuildInfo {
83
- const currentSet = new Set ( current ) ;
84
- const latestSet = new Set ( latest ) ;
89
+ const currentSet = new Set ( current )
90
+ const latestSet = new Set ( latest )
85
91
86
92
// Find new versions
87
- const newVersions = latest . filter ( v => ! currentSet . has ( v ) ) ;
93
+ const newVersions = latest . filter ( v => ! currentSet . has ( v ) )
88
94
89
95
// Find removed versions
90
- const removedVersions = current . filter ( v => ! latestSet . has ( v ) ) ;
96
+ const removedVersions = current . filter ( v => ! latestSet . has ( v ) )
91
97
92
- const hasNewVersions = newVersions . length > 0 ;
93
- const hasRemovedVersions = removedVersions . length > 0 ;
94
- const rebuildNeeded = hasNewVersions || hasRemovedVersions ;
98
+ const hasNewVersions = newVersions . length > 0
99
+ const hasRemovedVersions = removedVersions . length > 0
100
+ const rebuildNeeded = hasNewVersions || hasRemovedVersions
95
101
96
- let reason = '' ;
102
+ let reason = ''
97
103
if ( hasNewVersions && hasRemovedVersions ) {
98
- reason = `New versions available: ${ newVersions . join ( ', ' ) } . Removed versions: ${ removedVersions . join ( ', ' ) } ` ;
99
- } else if ( hasNewVersions ) {
100
- reason = `New versions available: ${ newVersions . join ( ', ' ) } ` ;
101
- } else if ( hasRemovedVersions ) {
102
- reason = `Versions removed: ${ removedVersions . join ( ', ' ) } ` ;
103
- } else {
104
- reason = 'No changes detected' ;
104
+ reason = `New versions available: ${ newVersions . join ( ', ' ) } . Removed versions: ${ removedVersions . join ( ', ' ) } `
105
+ }
106
+ else if ( hasNewVersions ) {
107
+ reason = `New versions available: ${ newVersions . join ( ', ' ) } `
108
+ }
109
+ else if ( hasRemovedVersions ) {
110
+ reason = `Versions removed: ${ removedVersions . join ( ', ' ) } `
111
+ }
112
+ else {
113
+ reason = 'No changes detected'
105
114
}
106
115
107
116
return {
@@ -110,55 +119,56 @@ function compareVersions(current: string[], latest: string[]): BuildInfo {
110
119
hasNewVersions,
111
120
newVersions,
112
121
rebuildNeeded,
113
- reason
114
- } ;
122
+ reason,
123
+ }
115
124
}
116
125
117
126
async function checkForUpdates ( ) : Promise < BuildInfo > {
118
- const currentVersions = await getCurrentVersions ( ) ;
119
- const latestVersions = await getLatestVersions ( ) ;
127
+ const currentVersions = await getCurrentVersions ( )
128
+ const latestVersions = await getLatestVersions ( )
120
129
121
- return compareVersions ( currentVersions , latestVersions ) ;
130
+ return compareVersions ( currentVersions , latestVersions )
122
131
}
123
132
124
133
function generateOutput ( buildInfo : BuildInfo ) : void {
125
- console . log ( '🔍 PHP Version Update Check' ) ;
126
- console . log ( '' ) ;
127
- console . log ( '📊 Version Comparison:' ) ;
128
- console . log ( ` Current: ${ buildInfo . currentVersions . join ( ', ' ) } ` ) ;
129
- console . log ( ` Latest: ${ buildInfo . latestVersions . join ( ', ' ) } ` ) ;
130
- console . log ( '' ) ;
134
+ console . log ( '🔍 PHP Version Update Check' )
135
+ console . log ( '' )
136
+ console . log ( '📊 Version Comparison:' )
137
+ console . log ( ` Current: ${ buildInfo . currentVersions . join ( ', ' ) } ` )
138
+ console . log ( ` Latest: ${ buildInfo . latestVersions . join ( ', ' ) } ` )
139
+ console . log ( '' )
131
140
132
141
if ( buildInfo . rebuildNeeded ) {
133
- console . log ( '🔄 Rebuild Required: YES' ) ;
134
- console . log ( ` Reason: ${ buildInfo . reason } ` ) ;
142
+ console . log ( '🔄 Rebuild Required: YES' )
143
+ console . log ( ` Reason: ${ buildInfo . reason } ` )
135
144
136
145
if ( buildInfo . hasNewVersions ) {
137
- console . log ( ` New versions: ${ buildInfo . newVersions . join ( ', ' ) } ` ) ;
146
+ console . log ( ` New versions: ${ buildInfo . newVersions . join ( ', ' ) } ` )
138
147
}
139
- } else {
140
- console . log ( '✅ Rebuild Required: NO' ) ;
141
- console . log ( ` Reason: ${ buildInfo . reason } ` ) ;
148
+ }
149
+ else {
150
+ console . log ( '✅ Rebuild Required: NO' )
151
+ console . log ( ` Reason: ${ buildInfo . reason } ` )
142
152
}
143
153
144
154
// Output for GitHub Actions
145
- console . log ( '' ) ;
146
- console . log ( 'GitHub Actions Output:' ) ;
147
- console . log ( `rebuild_needed=${ buildInfo . rebuildNeeded } ` ) ;
148
- console . log ( `reason=${ buildInfo . reason } ` ) ;
149
- console . log ( `current_versions=${ JSON . stringify ( buildInfo . currentVersions ) } ` ) ;
150
- console . log ( `latest_versions=${ JSON . stringify ( buildInfo . latestVersions ) } ` ) ;
151
- console . log ( `new_versions=${ JSON . stringify ( buildInfo . newVersions ) } ` ) ;
155
+ console . log ( '' )
156
+ console . log ( 'GitHub Actions Output:' )
157
+ console . log ( `rebuild_needed=${ buildInfo . rebuildNeeded } ` )
158
+ console . log ( `reason=${ buildInfo . reason } ` )
159
+ console . log ( `current_versions=${ JSON . stringify ( buildInfo . currentVersions ) } ` )
160
+ console . log ( `latest_versions=${ JSON . stringify ( buildInfo . latestVersions ) } ` )
161
+ console . log ( `new_versions=${ JSON . stringify ( buildInfo . newVersions ) } ` )
152
162
}
153
163
154
164
async function main ( ) : Promise < void > {
155
- const buildInfo = await checkForUpdates ( ) ;
156
- generateOutput ( buildInfo ) ;
165
+ const buildInfo = await checkForUpdates ( )
166
+ generateOutput ( buildInfo )
157
167
}
158
168
159
169
// Run the script
160
170
if ( import . meta. main ) {
161
- main ( ) . catch ( console . error ) ;
171
+ main ( ) . catch ( console . error )
162
172
}
163
173
164
- export { checkForUpdates , compareVersions , getCurrentVersions , getLatestVersions } ;
174
+ export { checkForUpdates , compareVersions , getCurrentVersions , getLatestVersions }
0 commit comments