2
2
3
3
const _ = require ( 'lodash' ) ;
4
4
const Nv = require ( '@pkgjs/nv' ) ;
5
+ const Semver = require ( 'semver' ) ;
5
6
6
7
7
8
const internals = { } ;
@@ -53,6 +54,30 @@ internals.parseActionsSetupNode = function * (workflow, file) {
53
54
} ;
54
55
55
56
57
+ internals . resolveLjharbPreset = function * ( { preset } ) {
58
+
59
+ // @todo : with has more options - resolve to precise versions here and yield the full list
60
+ // @todo : return preset as well as resolved version
61
+
62
+ if ( preset === '0.x' ) {
63
+ yield * [ '0.8' , '0.10' , '0.12' ] ;
64
+ return ;
65
+ }
66
+
67
+ if ( preset === 'iojs' ) {
68
+ yield * [ '1' , '2' , '3' ] ;
69
+ return ;
70
+ }
71
+
72
+ if ( ! Semver . validRange ( preset ) ) {
73
+ yield preset ;
74
+ return ;
75
+ }
76
+
77
+ yield * internals . latestNodeVersions . filter ( ( { resolved } ) => Semver . satisfies ( resolved , preset ) ) . map ( ( { major } ) => major ) ;
78
+ } ;
79
+
80
+
56
81
internals . parseLjharbActions = function * ( workflow , file ) {
57
82
58
83
for ( const job of Object . values ( workflow . jobs ) ) {
@@ -114,8 +139,7 @@ internals.parseLjharbActions = function * (workflow, file) {
114
139
throw new Error ( `Unrecognized action in ${ needOutput } in ${ file } ` ) ;
115
140
}
116
141
117
- // @todo : with has more options - resolve to precise versions here and yield the full list
118
- yield needStep . with . preset ;
142
+ yield * internals . resolveLjharbPreset ( needStep . with ) ;
119
143
continue ;
120
144
}
121
145
@@ -130,6 +154,17 @@ internals.parseLjharbActions = function * (workflow, file) {
130
154
131
155
exports . detect = async ( meta ) => {
132
156
157
+ if ( ! internals . latestNodeVersions ) {
158
+ // @todo : unhardcode
159
+ const latest = [ ] ;
160
+ for ( const v of [ '4' , '5' , '6' , '7' , '8' , '9' , '10' , '11' , '12' , '13' , '14' , '15' , '16' ] ) {
161
+ const resolved = await Nv ( v ) ;
162
+ latest . push ( { major : v , resolved : resolved [ resolved . length - 1 ] . version } ) ;
163
+ }
164
+
165
+ internals . latestNodeVersions = latest ;
166
+ }
167
+
133
168
const files = await meta . loadFolder ( '.github/workflows' ) ;
134
169
const rawSet = new Set ( ) ;
135
170
const byFileSets = { } ;
0 commit comments