22
33const _ = require ( 'lodash' ) ;
44const Nv = require ( '@pkgjs/nv' ) ;
5+ const Semver = require ( 'semver' ) ;
56
67
78const internals = { } ;
@@ -53,6 +54,30 @@ internals.parseActionsSetupNode = function * (workflow, file) {
5354} ;
5455
5556
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+
5681internals . parseLjharbActions = function * ( workflow , file ) {
5782
5883 for ( const job of Object . values ( workflow . jobs ) ) {
@@ -114,8 +139,7 @@ internals.parseLjharbActions = function * (workflow, file) {
114139 throw new Error ( `Unrecognized action in ${ needOutput } in ${ file } ` ) ;
115140 }
116141
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 ) ;
119143 continue ;
120144 }
121145
@@ -130,6 +154,17 @@ internals.parseLjharbActions = function * (workflow, file) {
130154
131155exports . detect = async ( meta ) => {
132156
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+
133168 const files = await meta . loadFolder ( '.github/workflows' ) ;
134169 const rawSet = new Set ( ) ;
135170 const byFileSets = { } ;
0 commit comments