1+ const cheerio = require ( 'cheerio' ) ;
2+ const fse = require ( 'fs-extra' ) ;
3+ const path = require ( 'path' ) ;
4+ const R = require ( 'ramda' ) ;
5+ const request = require ( 'request-promise-native' ) ;
6+
7+ const windowsCommonConditions = [
8+ R . test ( / o s = W i n d o w s $ / gm) ,
9+ R . test ( / s h a r e d = F a l s e $ / gm)
10+ ]
11+
12+ const macCommonConditions = [
13+ R . test ( / a r c h = x 8 6 _ 6 4 $ / gm) ,
14+ R . test ( / o s = M a c o s $ / gm) ,
15+ R . test ( / c o m p i l e r = a p p l e - c l a n g $ / gm) ,
16+ R . test ( / s h a r e d = F a l s e $ / gm)
17+ ] ;
18+
19+ const debugPairs = R . toPairs ( {
20+ 'win32-vs12-static-debug' : R . allPass ( [
21+ ...windowsCommonConditions ,
22+ R . test ( / a r c h = x 8 6 $ / gm) ,
23+ R . test ( / b u i l d _ t y p e = D e b u g $ / gm) ,
24+ R . test ( / c o m p i l e r \. v e r s i o n = 1 2 $ / gm)
25+ ] ) ,
26+ 'win32-vs14-static-debug' : R . allPass ( [
27+ ...windowsCommonConditions ,
28+ R . test ( / a r c h = x 8 6 $ / gm) ,
29+ R . test ( / b u i l d _ t y p e = D e b u g $ / gm) ,
30+ R . test ( / c o m p i l e r \. v e r s i o n = 1 4 $ / gm)
31+ ] ) ,
32+ 'win32-vs15-static-debug' : R . allPass ( [
33+ ...windowsCommonConditions ,
34+ R . test ( / a r c h = x 8 6 $ / gm) ,
35+ R . test ( / b u i l d _ t y p e = D e b u g $ / gm) ,
36+ R . test ( / c o m p i l e r \. v e r s i o n = 1 5 $ / gm)
37+ ] ) ,
38+
39+ 'win64-vs12-static-debug' : R . allPass ( [
40+ ...windowsCommonConditions ,
41+ R . test ( / a r c h = x 8 6 _ 6 4 $ / gm) ,
42+ R . test ( / b u i l d _ t y p e = D e b u g $ / gm) ,
43+ R . test ( / c o m p i l e r \. v e r s i o n = 1 2 $ / gm)
44+ ] ) ,
45+ 'win64-vs14-static-debug' : R . allPass ( [
46+ ...windowsCommonConditions ,
47+ R . test ( / a r c h = x 8 6 _ 6 4 $ / gm) ,
48+ R . test ( / b u i l d _ t y p e = D e b u g $ / gm) ,
49+ R . test ( / c o m p i l e r \. v e r s i o n = 1 4 $ / gm)
50+ ] ) ,
51+ 'win64-vs15-static-debug' : R . allPass ( [
52+ ...windowsCommonConditions ,
53+ R . test ( / a r c h = x 8 6 _ 6 4 $ / gm) ,
54+ R . test ( / b u i l d _ t y p e = D e b u g $ / gm) ,
55+ R . test ( / c o m p i l e r \. v e r s i o n = 1 5 $ / gm)
56+ ] ) ,
57+
58+ 'macOS-clang-9-static-debug' : R . allPass ( [
59+ ...macCommonConditions ,
60+ R . test ( / b u i l d _ t y p e = D e b u g $ / gm) ,
61+ R . test ( / c o m p i l e r \. v e r s i o n = 9 .0 $ / gm)
62+ ] ) ,
63+ 'macOS-clang-8.1-static-debug' : R . allPass ( [
64+ ...macCommonConditions ,
65+ R . test ( / b u i l d _ t y p e = D e b u g $ / gm) ,
66+ R . test ( / c o m p i l e r \. v e r s i o n = 8 \. 1 $ / gm)
67+ ] )
68+ } )
69+
70+ const releasePairs = R . toPairs ( {
71+ 'win32-vs12-static' : R . allPass ( [
72+ ...windowsCommonConditions ,
73+ R . test ( / a r c h = x 8 6 $ / gm) ,
74+ R . test ( / b u i l d _ t y p e = R e l e a s e $ / gm) ,
75+ R . test ( / c o m p i l e r \. v e r s i o n = 1 2 $ / gm)
76+ ] ) ,
77+ 'win32-vs14-static' : R . allPass ( [
78+ ...windowsCommonConditions ,
79+ R . test ( / a r c h = x 8 6 $ / gm) ,
80+ R . test ( / b u i l d _ t y p e = R e l e a s e $ / gm) ,
81+ R . test ( / c o m p i l e r \. v e r s i o n = 1 4 $ / gm)
82+ ] ) ,
83+ 'win32-vs15-static' : R . allPass ( [
84+ ...windowsCommonConditions ,
85+ R . test ( / a r c h = x 8 6 $ / gm) ,
86+ R . test ( / b u i l d _ t y p e = R e l e a s e $ / gm) ,
87+ R . test ( / c o m p i l e r \. v e r s i o n = 1 5 $ / gm)
88+ ] ) ,
89+
90+ 'win64-vs12-static' : R . allPass ( [
91+ ...windowsCommonConditions ,
92+ R . test ( / a r c h = x 8 6 _ 6 4 $ / gm) ,
93+ R . test ( / b u i l d _ t y p e = R e l e a s e $ / gm) ,
94+ R . test ( / c o m p i l e r \. v e r s i o n = 1 2 $ / gm)
95+ ] ) ,
96+ 'win64-vs14-static' : R . allPass ( [
97+ ...windowsCommonConditions ,
98+ R . test ( / a r c h = x 8 6 _ 6 4 $ / gm) ,
99+ R . test ( / b u i l d _ t y p e = R e l e a s e $ / gm) ,
100+ R . test ( / c o m p i l e r \. v e r s i o n = 1 4 $ / gm)
101+ ] ) ,
102+ 'win64-vs15-static' : R . allPass ( [
103+ ...windowsCommonConditions ,
104+ R . test ( / a r c h = x 8 6 _ 6 4 $ / gm) ,
105+ R . test ( / b u i l d _ t y p e = R e l e a s e $ / gm) ,
106+ R . test ( / c o m p i l e r \. v e r s i o n = 1 5 $ / gm)
107+ ] ) ,
108+
109+ 'macOS-clang-9-static' : R . allPass ( [
110+ ...macCommonConditions ,
111+ R . test ( / b u i l d _ t y p e = R e l e a s e $ / gm) ,
112+ R . test ( / c o m p i l e r \. v e r s i o n = 9 .0 $ / gm)
113+ ] ) ,
114+ 'macOS-clang-8.1-static' : R . allPass ( [
115+ ...macCommonConditions ,
116+ R . test ( / b u i l d _ t y p e = R e l e a s e $ / gm) ,
117+ R . test ( / c o m p i l e r \. v e r s i o n = 8 \. 1 $ / gm)
118+ ] )
119+ } ) ;
120+
121+ const distributionPairs = [ ...debugPairs , ...releasePairs ] ;
122+
123+ const detectDistributionPairFromConfig = ( itemHash , body ) => R . reduce (
124+ ( acc , [ releaseName , predicate ] ) => R . cond ( [
125+ [ predicate , R . always ( [ releaseName , itemHash ] ) ] ,
126+ [ R . T , R . always ( acc ) ]
127+ ] ) ( body ) ,
128+ undefined ,
129+ distributionPairs
130+ ) ;
131+
132+ const getDistributionConfig = ( itemHash ) =>
133+ request . get ( `https://bintray.com/conan-community/conan/download_file?file_path=conan%2FOpenSSL%2F1.1.0i%2Fstable%2Fpackage%2F${ itemHash } %2Fconaninfo.txt` )
134+ . then ( ( body ) => detectDistributionPairFromConfig ( itemHash , body ) ) ;
135+
136+ const discoverDistributions = ( treeHtml ) => {
137+ const releaseHashes = [ ] ;
138+
139+ const $ = cheerio . load ( treeHtml ) ;
140+ const links = $ ( '#treeBrowseTable > tbody > tr > td.nameCol > a' ) ;
141+ links . each ( ( _ , link ) => {
142+ const releaseHash = link . children [ 0 ] . data ;
143+ if ( ! releaseHash ) {
144+ return ;
145+ }
146+ releaseHashes . push ( releaseHash ) ;
147+ } ) ;
148+
149+ return Promise . all (
150+ R . map ( releaseHash => getDistributionConfig ( releaseHash ) , releaseHashes )
151+ ) ;
152+ }
153+
154+ request ( 'https://bintray.com/package/files/conan-community/conan/OpenSSL%3Aconan?order=asc&sort=name&basePath=conan%2FOpenSSL%2F1.1.0i%2Fstable%2Fpackage&tab=files' )
155+ . then ( discoverDistributions )
156+ . then ( R . filter ( R . identity ) )
157+ . then ( R . sortBy ( R . prop ( 0 ) ) )
158+ . then ( R . fromPairs )
159+ . then ( distributions => fse . writeFile ( 'openssl_distributions.json' , JSON . stringify ( distributions , null , 2 ) ) ) ;
0 commit comments