@hexonet/semantic-release-whmcs 4.0.0 → 4.0.3
Sign up to get free protection for your applications and to get access to all the features.
- package/.github/workflows/pull-request.yml +7 -6
- package/.github/workflows/push.yml +7 -6
- package/.releaserc.json +5 -1
- package/HISTORY.md +22 -0
- package/README.md +1 -0
- package/coverage/coverage-final.json +8 -8
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +19 -19
- package/coverage/lib/definitions/errors.js.html +1 -1
- package/coverage/lib/definitions/index.html +1 -1
- package/coverage/lib/delete-marketplace-version.js.html +93 -150
- package/coverage/lib/get-error.js.html +1 -1
- package/coverage/lib/get-github-releases.js.html +15 -21
- package/coverage/lib/index.html +47 -47
- package/coverage/lib/publish.js.html +81 -204
- package/coverage/lib/puppet.js.html +207 -54
- package/coverage/lib/resolve-config.js.html +17 -11
- package/coverage/lib/scrape-marketplace-versions.js.html +32 -134
- package/coverage/lib/set-compatible-versions.js.html +64 -142
- package/coverage/lib/verify.js.html +9 -6
- package/coverage/sort-arrow-sprite.png +0 -0
- package/lib/delete-marketplace-version.js +59 -78
- package/lib/get-github-releases.js +9 -11
- package/lib/publish.js +76 -117
- package/lib/puppet.js +79 -28
- package/lib/resolve-config.js +9 -7
- package/lib/scrape-marketplace-versions.js +27 -61
- package/lib/set-compatible-versions.js +53 -79
- package/lib/verify.js +4 -3
- package/package.json +8 -9
@@ -25,14 +25,14 @@
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
26
26
|
<span class="strong">0% </span>
|
27
27
|
<span class="quiet">Statements</span>
|
28
|
-
<span class='fraction'>0/
|
28
|
+
<span class='fraction'>0/28</span>
|
29
29
|
</div>
|
30
30
|
|
31
31
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
33
33
|
<span class="strong">0% </span>
|
34
34
|
<span class="quiet">Branches</span>
|
35
|
-
<span class='fraction'>0/
|
35
|
+
<span class='fraction'>0/2</span>
|
36
36
|
</div>
|
37
37
|
|
38
38
|
|
@@ -46,7 +46,7 @@
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
47
47
|
<span class="strong">0% </span>
|
48
48
|
<span class="quiet">Lines</span>
|
49
|
-
<span class='fraction'>0/
|
49
|
+
<span class='fraction'>0/27</span>
|
50
50
|
</div>
|
51
51
|
|
52
52
|
|
@@ -108,41 +108,7 @@
|
|
108
108
|
<a name='L43'></a><a href='#L43'>43</a>
|
109
109
|
<a name='L44'></a><a href='#L44'>44</a>
|
110
110
|
<a name='L45'></a><a href='#L45'>45</a>
|
111
|
-
<a name='L46'></a><a href='#L46'>46</a>
|
112
|
-
<a name='L47'></a><a href='#L47'>47</a>
|
113
|
-
<a name='L48'></a><a href='#L48'>48</a>
|
114
|
-
<a name='L49'></a><a href='#L49'>49</a>
|
115
|
-
<a name='L50'></a><a href='#L50'>50</a>
|
116
|
-
<a name='L51'></a><a href='#L51'>51</a>
|
117
|
-
<a name='L52'></a><a href='#L52'>52</a>
|
118
|
-
<a name='L53'></a><a href='#L53'>53</a>
|
119
|
-
<a name='L54'></a><a href='#L54'>54</a>
|
120
|
-
<a name='L55'></a><a href='#L55'>55</a>
|
121
|
-
<a name='L56'></a><a href='#L56'>56</a>
|
122
|
-
<a name='L57'></a><a href='#L57'>57</a>
|
123
|
-
<a name='L58'></a><a href='#L58'>58</a>
|
124
|
-
<a name='L59'></a><a href='#L59'>59</a>
|
125
|
-
<a name='L60'></a><a href='#L60'>60</a>
|
126
|
-
<a name='L61'></a><a href='#L61'>61</a>
|
127
|
-
<a name='L62'></a><a href='#L62'>62</a>
|
128
|
-
<a name='L63'></a><a href='#L63'>63</a>
|
129
|
-
<a name='L64'></a><a href='#L64'>64</a>
|
130
|
-
<a name='L65'></a><a href='#L65'>65</a>
|
131
|
-
<a name='L66'></a><a href='#L66'>66</a>
|
132
|
-
<a name='L67'></a><a href='#L67'>67</a>
|
133
|
-
<a name='L68'></a><a href='#L68'>68</a>
|
134
|
-
<a name='L69'></a><a href='#L69'>69</a>
|
135
|
-
<a name='L70'></a><a href='#L70'>70</a>
|
136
|
-
<a name='L71'></a><a href='#L71'>71</a>
|
137
|
-
<a name='L72'></a><a href='#L72'>72</a>
|
138
|
-
<a name='L73'></a><a href='#L73'>73</a>
|
139
|
-
<a name='L74'></a><a href='#L74'>74</a>
|
140
|
-
<a name='L75'></a><a href='#L75'>75</a>
|
141
|
-
<a name='L76'></a><a href='#L76'>76</a>
|
142
|
-
<a name='L77'></a><a href='#L77'>77</a>
|
143
|
-
<a name='L78'></a><a href='#L78'>78</a>
|
144
|
-
<a name='L79'></a><a href='#L79'>79</a>
|
145
|
-
<a name='L80'></a><a href='#L80'>80</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
146
112
|
<span class="cline-any cline-no"> </span>
|
147
113
|
<span class="cline-any cline-no"> </span>
|
148
114
|
<span class="cline-any cline-neutral"> </span>
|
@@ -150,154 +116,86 @@
|
|
150
116
|
<span class="cline-any cline-neutral"> </span>
|
151
117
|
<span class="cline-any cline-neutral"> </span>
|
152
118
|
<span class="cline-any cline-no"> </span>
|
153
|
-
<span class="cline-any cline-neutral"> </span>
|
154
|
-
<span class="cline-any cline-neutral"> </span>
|
155
|
-
<span class="cline-any cline-no"> </span>
|
156
|
-
<span class="cline-any cline-neutral"> </span>
|
157
|
-
<span class="cline-any cline-no"> </span>
|
158
119
|
<span class="cline-any cline-no"> </span>
|
159
120
|
<span class="cline-any cline-no"> </span>
|
160
121
|
<span class="cline-any cline-neutral"> </span>
|
161
122
|
<span class="cline-any cline-no"> </span>
|
162
123
|
<span class="cline-any cline-no"> </span>
|
163
|
-
<span class="cline-any cline-neutral"> </span>
|
164
124
|
<span class="cline-any cline-no"> </span>
|
165
125
|
<span class="cline-any cline-no"> </span>
|
166
126
|
<span class="cline-any cline-neutral"> </span>
|
167
127
|
<span class="cline-any cline-no"> </span>
|
168
|
-
<span class="cline-any cline-no"> </span>
|
169
128
|
<span class="cline-any cline-neutral"> </span>
|
170
129
|
<span class="cline-any cline-no"> </span>
|
171
130
|
<span class="cline-any cline-no"> </span>
|
172
|
-
<span class="cline-any cline-no"> </span>
|
173
|
-
<span class="cline-any cline-no"> </span>
|
174
|
-
<span class="cline-any cline-no"> </span>
|
175
|
-
<span class="cline-any cline-no"> </span>
|
176
|
-
<span class="cline-any cline-no"> </span>
|
177
|
-
<span class="cline-any cline-no"> </span>
|
178
|
-
<span class="cline-any cline-no"> </span>
|
179
|
-
<span class="cline-any cline-no"> </span>
|
180
|
-
<span class="cline-any cline-no"> </span>
|
181
|
-
<span class="cline-any cline-no"> </span>
|
182
131
|
<span class="cline-any cline-neutral"> </span>
|
183
132
|
<span class="cline-any cline-no"> </span>
|
184
133
|
<span class="cline-any cline-no"> </span>
|
185
134
|
<span class="cline-any cline-no"> </span>
|
186
|
-
<span class="cline-any cline-neutral"> </span>
|
187
|
-
<span class="cline-any cline-no"> </span>
|
188
|
-
<span class="cline-any cline-no"> </span>
|
189
135
|
<span class="cline-any cline-no"> </span>
|
190
136
|
<span class="cline-any cline-no"> </span>
|
191
137
|
<span class="cline-any cline-no"> </span>
|
192
138
|
<span class="cline-any cline-neutral"> </span>
|
193
139
|
<span class="cline-any cline-neutral"> </span>
|
194
140
|
<span class="cline-any cline-neutral"> </span>
|
195
|
-
<span class="cline-any cline-no"> </span>
|
196
|
-
<span class="cline-any cline-no"> </span>
|
197
|
-
<span class="cline-any cline-no"> </span>
|
198
|
-
<span class="cline-any cline-no"> </span>
|
199
|
-
<span class="cline-any cline-no"> </span>
|
200
|
-
<span class="cline-any cline-no"> </span>
|
201
|
-
<span class="cline-any cline-neutral"> </span>
|
202
|
-
<span class="cline-any cline-neutral"> </span>
|
203
141
|
<span class="cline-any cline-neutral"> </span>
|
204
142
|
<span class="cline-any cline-neutral"> </span>
|
205
|
-
<span class="cline-any cline-no"> </span>
|
206
|
-
<span class="cline-any cline-no"> </span>
|
207
143
|
<span class="cline-any cline-neutral"> </span>
|
208
144
|
<span class="cline-any cline-no"> </span>
|
209
145
|
<span class="cline-any cline-no"> </span>
|
210
|
-
<span class="cline-any cline-no"> </span>
|
211
146
|
<span class="cline-any cline-neutral"> </span>
|
212
147
|
<span class="cline-any cline-no"> </span>
|
213
148
|
<span class="cline-any cline-no"> </span>
|
214
149
|
<span class="cline-any cline-no"> </span>
|
215
150
|
<span class="cline-any cline-neutral"> </span>
|
216
151
|
<span class="cline-any cline-neutral"> </span>
|
217
|
-
<span class="cline-any cline-neutral"> </span>
|
218
|
-
<span class="cline-any cline-no"> </span>
|
219
152
|
<span class="cline-any cline-no"> </span>
|
220
153
|
<span class="cline-any cline-no"> </span>
|
221
|
-
<span class="cline-any cline-neutral"> </span>
|
222
154
|
<span class="cline-any cline-no"> </span>
|
223
155
|
<span class="cline-any cline-neutral"> </span>
|
224
156
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">const debug = <span class="cstat-no" title="statement not covered" >require('debug')('semantic-release:whmcs')</span>
|
225
|
-
const resolveConfig = <span class="cstat-no" title="statement not covered" >require('./resolve-config')</span>
|
226
157
|
const puppet = <span class="cstat-no" title="statement not covered" >require('./puppet')</span>
|
158
|
+
const path = <span class="cstat-no" title="statement not covered" >require('path')</span>
|
227
159
|
|
228
160
|
/**
|
229
161
|
* A method to publish the module update on whmcs market place
|
230
162
|
*/
|
231
163
|
<span class="cstat-no" title="statement not covered" >module.exports = <span class="fstat-no" title="function not covered" >as</span>ync (pluginConfig, context) => {</span>
|
232
|
-
const
|
233
|
-
|
234
|
-
} = <span class="cstat-no" title="statement not covered" >context</span>
|
164
|
+
const sep = <span class="cstat-no" title="statement not covered" >'+++++++++++++++++++++++++++++++++++++++++++++++++++'</span>
|
165
|
+
const out = <span class="cstat-no" title="statement not covered" >`\n${sep}\n${path.basename(__filename)}\n${sep}\n`</span>
|
235
166
|
|
236
|
-
|
237
|
-
const
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
<span class="cstat-no" title="statement not covered" >
|
242
|
-
|
243
|
-
const wmbase = <span class="cstat-no" title="statement not covered" >'https://marketplace.whmcs.com'</span>
|
244
|
-
let url = <span class="cstat-no" title="statement not covered" >`${wmbase}/user/login`</span>
|
167
|
+
const püppi = <span class="cstat-no" title="statement not covered" >await puppet(context)</span>
|
168
|
+
const result = <span class="cstat-no" title="statement not covered" >await püppi.login()</span>
|
169
|
+
<span class="cstat-no" title="statement not covered" > if (!result) {</span>
|
170
|
+
<span class="cstat-no" title="statement not covered" > return result</span>
|
171
|
+
}
|
172
|
+
const { page, gotoOpts, selectorOpts, productid, urlbase } = <span class="cstat-no" title="statement not covered" >püppi.config</span>
|
245
173
|
|
174
|
+
let marketplaceVersions = <span class="cstat-no" title="statement not covered" >[]</span>
|
246
175
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
176
|
+
// scrap versions from WHMCS marketplace
|
177
|
+
const url = <span class="cstat-no" title="statement not covered" >`${urlbase}/product/${productid}/edit#versions`</span>
|
247
178
|
<span class="cstat-no" title="statement not covered" > await page.goto(url, gotoOpts)</span>
|
248
|
-
|
249
|
-
const selector = <span class="cstat-no" title="statement not covered" >'div
|
179
|
+
<span class="cstat-no" title="statement not covered" > debug(`${out}product page loaded at %s`, url)</span>
|
180
|
+
const selector = <span class="cstat-no" title="statement not covered" >'div#versions tr strong'</span>
|
250
181
|
<span class="cstat-no" title="statement not covered" > await page.waitForSelector(selector, selectorOpts)</span>
|
251
|
-
<span class="cstat-no" title="statement not covered" > debug('
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
const nav = <span class="cstat-no" title="statement not covered" >page.waitForNavigation(navOpts)</span>
|
256
|
-
<span class="cstat-no" title="statement not covered" > await page.hover(selector)</span>
|
257
|
-
<span class="cstat-no" title="statement not covered" > await page.click(selector)</span>
|
258
|
-
<span class="cstat-no" title="statement not covered" > await nav</span>
|
259
|
-
<span class="cstat-no" title="statement not covered" > debug('Login form successfully submitted.')</span>
|
260
|
-
<span class="cstat-no" title="statement not covered" > logger.log('WHMCS Marketplace Login Form successfully submitted.')</span>
|
261
|
-
} catch (error) {
|
262
|
-
<span class="cstat-no" title="statement not covered" > debug('WHMCS Marketplace login failed.', error.message)</span>
|
263
|
-
<span class="cstat-no" title="statement not covered" > logger.error('WHMCS Marketplace login failed.', error.message)</span>
|
264
|
-
<span class="cstat-no" title="statement not covered" > success = false</span>
|
265
|
-
}
|
266
|
-
let marketplaceVersions = <span class="cstat-no" title="statement not covered" >false</span>
|
267
|
-
<span class="cstat-no" title="statement not covered" > if (success) {</span>
|
268
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
269
|
-
<span class="cstat-no" title="statement not covered" > if (!parseInt(whmcsPRODUCTID, 10)) {</span>
|
270
|
-
<span class="cstat-no" title="statement not covered" > return false</span>
|
271
|
-
}
|
272
|
-
|
273
|
-
// scrap versions from WHMCS marketplace
|
274
|
-
<span class="cstat-no" title="statement not covered" > url = `${wmbase}/product/${whmcsPRODUCTID}/edit#versions`</span>
|
275
|
-
<span class="cstat-no" title="statement not covered" > await page.goto(url, gotoOpts)</span>
|
276
|
-
<span class="cstat-no" title="statement not covered" > debug('product page loaded at %s', url)</span>
|
277
|
-
const selector = <span class="cstat-no" title="statement not covered" >'div#versions tr strong'</span>
|
278
|
-
<span class="cstat-no" title="statement not covered" > await page.waitForSelector(selector, selectorOpts)</span>
|
279
|
-
<span class="cstat-no" title="statement not covered" > debug('product version table found')</span>
|
280
|
-
/* istanbul ignore next */
|
281
|
-
marketplaceVersions = await page.$$eval('div#versions tr td strong', tds => tds.map((td) => {
|
182
|
+
<span class="cstat-no" title="statement not covered" > debug('product version table found')</span>
|
183
|
+
/* istanbul ignore next */
|
184
|
+
marketplaceVersions = await page.$$eval(selector, (tds) =>
|
185
|
+
tds.map((td) => {
|
282
186
|
return td.innerText.substring(8)
|
283
|
-
})
|
284
|
-
|
285
|
-
<span class="cstat-no" title="statement not covered" >
|
286
|
-
|
287
|
-
|
288
|
-
<span class="cstat-no" title="statement not covered" >
|
289
|
-
<span class="cstat-no" title="statement not covered" >
|
290
|
-
|
291
|
-
<span class="cstat-no" title="statement not covered" > debug('publishing new product version failed.', error.message)</span>
|
292
|
-
<span class="cstat-no" title="statement not covered" > logger.error('WHMCS Marketplace publishing new product version failed.', error.message)</span>
|
293
|
-
<span class="cstat-no" title="statement not covered" > success = false</span>
|
294
|
-
}
|
187
|
+
})
|
188
|
+
)
|
189
|
+
<span class="cstat-no" title="statement not covered" > marketplaceVersions.reverse()</span>
|
190
|
+
<span class="cstat-no" title="statement not covered" > marketplaceVersions.forEach(<span class="fstat-no" title="function not covered" >(v</span>) => <span class="cstat-no" title="statement not covered" >debug(`Detected WHMCS version ${v}`))</span></span>
|
191
|
+
} catch (error) {
|
192
|
+
<span class="cstat-no" title="statement not covered" > debug('Publishing new product version failed.', error.message)</span>
|
193
|
+
<span class="cstat-no" title="statement not covered" > await page.browser().close()</span>
|
194
|
+
<span class="cstat-no" title="statement not covered" > return false</span>
|
295
195
|
}
|
296
196
|
|
197
|
+
<span class="cstat-no" title="statement not covered" > debug('Publishing new product version succeeded.')</span>
|
297
198
|
<span class="cstat-no" title="statement not covered" > await page.browser().close()</span>
|
298
|
-
<span class="cstat-no" title="statement not covered" > if (!success) {</span>
|
299
|
-
<span class="cstat-no" title="statement not covered" > return false</span>
|
300
|
-
}
|
301
199
|
<span class="cstat-no" title="statement not covered" > return marketplaceVersions</span>
|
302
200
|
}
|
303
201
|
</pre></td></tr></table></pre>
|
@@ -307,7 +205,7 @@ const puppet = <span class="cstat-no" title="statement not covered" >require('./
|
|
307
205
|
<div class='footer quiet pad2 space-top1 center small'>
|
308
206
|
Code coverage generated by
|
309
207
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
310
|
-
at
|
208
|
+
at 2022-08-09T11:01:27.229Z
|
311
209
|
</div>
|
312
210
|
<script src="../prettify.js"></script>
|
313
211
|
<script>
|
@@ -23,9 +23,9 @@
|
|
23
23
|
<div class='clearfix'>
|
24
24
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
26
|
-
<span class="strong">87.
|
26
|
+
<span class="strong">87.5% </span>
|
27
27
|
<span class="quiet">Statements</span>
|
28
|
-
<span class='fraction'>
|
28
|
+
<span class='fraction'>28/32</span>
|
29
29
|
</div>
|
30
30
|
|
31
31
|
|
@@ -44,9 +44,9 @@
|
|
44
44
|
|
45
45
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
47
|
-
<span class="strong">87.
|
47
|
+
<span class="strong">87.5% </span>
|
48
48
|
<span class="quiet">Lines</span>
|
49
|
-
<span class='fraction'>
|
49
|
+
<span class='fraction'>28/32</span>
|
50
50
|
</div>
|
51
51
|
|
52
52
|
|
@@ -134,33 +134,7 @@
|
|
134
134
|
<a name='L69'></a><a href='#L69'>69</a>
|
135
135
|
<a name='L70'></a><a href='#L70'>70</a>
|
136
136
|
<a name='L71'></a><a href='#L71'>71</a>
|
137
|
-
<a name='L72'></a><a href='#L72'>72</a>
|
138
|
-
<a name='L73'></a><a href='#L73'>73</a>
|
139
|
-
<a name='L74'></a><a href='#L74'>74</a>
|
140
|
-
<a name='L75'></a><a href='#L75'>75</a>
|
141
|
-
<a name='L76'></a><a href='#L76'>76</a>
|
142
|
-
<a name='L77'></a><a href='#L77'>77</a>
|
143
|
-
<a name='L78'></a><a href='#L78'>78</a>
|
144
|
-
<a name='L79'></a><a href='#L79'>79</a>
|
145
|
-
<a name='L80'></a><a href='#L80'>80</a>
|
146
|
-
<a name='L81'></a><a href='#L81'>81</a>
|
147
|
-
<a name='L82'></a><a href='#L82'>82</a>
|
148
|
-
<a name='L83'></a><a href='#L83'>83</a>
|
149
|
-
<a name='L84'></a><a href='#L84'>84</a>
|
150
|
-
<a name='L85'></a><a href='#L85'>85</a>
|
151
|
-
<a name='L86'></a><a href='#L86'>86</a>
|
152
|
-
<a name='L87'></a><a href='#L87'>87</a>
|
153
|
-
<a name='L88'></a><a href='#L88'>88</a>
|
154
|
-
<a name='L89'></a><a href='#L89'>89</a>
|
155
|
-
<a name='L90'></a><a href='#L90'>90</a>
|
156
|
-
<a name='L91'></a><a href='#L91'>91</a>
|
157
|
-
<a name='L92'></a><a href='#L92'>92</a>
|
158
|
-
<a name='L93'></a><a href='#L93'>93</a>
|
159
|
-
<a name='L94'></a><a href='#L94'>94</a>
|
160
|
-
<a name='L95'></a><a href='#L95'>95</a>
|
161
|
-
<a name='L96'></a><a href='#L96'>96</a>
|
162
|
-
<a name='L97'></a><a href='#L97'>97</a>
|
163
|
-
<a name='L98'></a><a href='#L98'>98</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
137
|
+
<a name='L72'></a><a href='#L72'>72</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
164
138
|
<span class="cline-any cline-yes">1x</span>
|
165
139
|
<span class="cline-any cline-yes">1x</span>
|
166
140
|
<span class="cline-any cline-neutral"> </span>
|
@@ -168,19 +142,16 @@
|
|
168
142
|
<span class="cline-any cline-neutral"> </span>
|
169
143
|
<span class="cline-any cline-neutral"> </span>
|
170
144
|
<span class="cline-any cline-yes">1x</span>
|
171
|
-
<span class="cline-any cline-
|
172
|
-
<span class="cline-any cline-neutral"> </span>
|
145
|
+
<span class="cline-any cline-yes">1x</span>
|
173
146
|
<span class="cline-any cline-yes">1x</span>
|
174
147
|
<span class="cline-any cline-neutral"> </span>
|
175
148
|
<span class="cline-any cline-yes">1x</span>
|
176
149
|
<span class="cline-any cline-yes">1x</span>
|
177
150
|
<span class="cline-any cline-yes">1x</span>
|
151
|
+
<span class="cline-any cline-no"> </span>
|
178
152
|
<span class="cline-any cline-neutral"> </span>
|
179
|
-
<span class="cline-any cline-yes">1x</span>
|
180
|
-
<span class="cline-any cline-yes">1x</span>
|
181
153
|
<span class="cline-any cline-neutral"> </span>
|
182
154
|
<span class="cline-any cline-yes">1x</span>
|
183
|
-
<span class="cline-any cline-yes">1x</span>
|
184
155
|
<span class="cline-any cline-neutral"> </span>
|
185
156
|
<span class="cline-any cline-yes">1x</span>
|
186
157
|
<span class="cline-any cline-yes">1x</span>
|
@@ -188,39 +159,23 @@
|
|
188
159
|
<span class="cline-any cline-yes">1x</span>
|
189
160
|
<span class="cline-any cline-yes">1x</span>
|
190
161
|
<span class="cline-any cline-yes">1x</span>
|
162
|
+
<span class="cline-any cline-neutral"> </span>
|
191
163
|
<span class="cline-any cline-yes">1x</span>
|
192
164
|
<span class="cline-any cline-yes">1x</span>
|
193
165
|
<span class="cline-any cline-yes">1x</span>
|
194
166
|
<span class="cline-any cline-yes">1x</span>
|
195
167
|
<span class="cline-any cline-yes">1x</span>
|
168
|
+
<span class="cline-any cline-neutral"> </span>
|
196
169
|
<span class="cline-any cline-yes">1x</span>
|
197
170
|
<span class="cline-any cline-yes">1x</span>
|
198
171
|
<span class="cline-any cline-yes">1x</span>
|
199
|
-
<span class="cline-any cline-yes">1x</span>
|
200
|
-
<span class="cline-any cline-neutral"> </span>
|
201
|
-
<span class="cline-any cline-no"> </span>
|
202
|
-
<span class="cline-any cline-no"> </span>
|
203
|
-
<span class="cline-any cline-no"> </span>
|
204
|
-
<span class="cline-any cline-neutral"> </span>
|
205
172
|
<span class="cline-any cline-neutral"> </span>
|
206
173
|
<span class="cline-any cline-yes">1x</span>
|
207
|
-
<span class="cline-any cline-yes">1x</span>
|
208
|
-
<span class="cline-any cline-yes">1x</span>
|
209
|
-
<span class="cline-any cline-no"> </span>
|
210
174
|
<span class="cline-any cline-neutral"> </span>
|
211
175
|
<span class="cline-any cline-neutral"> </span>
|
212
176
|
<span class="cline-any cline-neutral"> </span>
|
213
|
-
<span class="cline-any cline-yes">1x</span>
|
214
|
-
<span class="cline-any cline-yes">1x</span>
|
215
|
-
<span class="cline-any cline-yes">1x</span>
|
216
177
|
<span class="cline-any cline-neutral"> </span>
|
217
|
-
<span class="cline-any cline-yes">1x</span>
|
218
|
-
<span class="cline-any cline-yes">1x</span>
|
219
|
-
<span class="cline-any cline-yes">1x</span>
|
220
|
-
<span class="cline-any cline-yes">1x</span>
|
221
|
-
<span class="cline-any cline-yes">1x</span>
|
222
178
|
<span class="cline-any cline-neutral"> </span>
|
223
|
-
<span class="cline-any cline-yes">1x</span>
|
224
179
|
<span class="cline-any cline-neutral"> </span>
|
225
180
|
<span class="cline-any cline-neutral"> </span>
|
226
181
|
<span class="cline-any cline-neutral"> </span>
|
@@ -240,119 +195,86 @@
|
|
240
195
|
<span class="cline-any cline-neutral"> </span>
|
241
196
|
<span class="cline-any cline-neutral"> </span>
|
242
197
|
<span class="cline-any cline-yes">1x</span>
|
243
|
-
<span class="cline-any cline-yes">1x</span>
|
244
|
-
<span class="cline-any cline-yes">1x</span>
|
245
|
-
<span class="cline-any cline-yes">1x</span>
|
246
|
-
<span class="cline-any cline-neutral"> </span>
|
247
|
-
<span class="cline-any cline-yes">1x</span>
|
248
|
-
<span class="cline-any cline-yes">1x</span>
|
249
|
-
<span class="cline-any cline-yes">1x</span>
|
250
198
|
<span class="cline-any cline-neutral"> </span>
|
251
199
|
<span class="cline-any cline-no"> </span>
|
252
200
|
<span class="cline-any cline-no"> </span>
|
253
201
|
<span class="cline-any cline-no"> </span>
|
254
202
|
<span class="cline-any cline-neutral"> </span>
|
255
203
|
<span class="cline-any cline-neutral"> </span>
|
256
|
-
<span class="cline-any cline-
|
204
|
+
<span class="cline-any cline-yes">1x</span>
|
257
205
|
<span class="cline-any cline-yes">1x</span>
|
258
206
|
<span class="cline-any cline-yes">1x</span>
|
259
207
|
<span class="cline-any cline-neutral"> </span>
|
260
208
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">const debug = require('debug')('semantic-release:whmcs')
|
261
|
-
const resolveConfig = require('./resolve-config')
|
262
209
|
const puppet = require('./puppet')
|
210
|
+
const path = require('path')
|
263
211
|
|
264
212
|
/**
|
265
213
|
* A method to publish the module update on whmcs market place
|
266
214
|
*/
|
267
215
|
module.exports = async (pluginConfig, context) => {
|
268
|
-
const
|
269
|
-
|
270
|
-
} = context
|
216
|
+
const sep = '+++++++++++++++++++++++++++++++++++++++++++++++++++'
|
217
|
+
const out = `\n${sep}\n${path.basename(__filename)}\n${sep}\n`
|
271
218
|
|
272
|
-
|
273
|
-
const
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
const wmbase = 'https://marketplace.whmcs.com'
|
280
|
-
let url = `${wmbase}/user/login`
|
219
|
+
const püppi = await puppet(context)
|
220
|
+
const result = await püppi.login()
|
221
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!result) {
|
222
|
+
<span class="cstat-no" title="statement not covered" > return result</span>
|
223
|
+
}
|
224
|
+
const { page, gotoOpts, selectorOpts, productid, urlbase, minversion } =
|
225
|
+
püppi.config
|
281
226
|
|
227
|
+
debug(out)
|
282
228
|
try {
|
229
|
+
// scrap versions from WHMCS marketplace
|
230
|
+
const url = `${urlbase}/product/${productid}/edit#compatibility`
|
283
231
|
await page.goto(url, gotoOpts)
|
284
|
-
|
285
|
-
const selector = 'div.login-leftcol form button[type="submit"]'
|
286
|
-
await page.waitForSelector(selector, selectorOpts)
|
287
|
-
debug('login form loaded at %s', url)
|
288
|
-
await page.type('#email', whmcsLOGIN)
|
289
|
-
await page.type('#password', whmcsPASSWORD)
|
290
|
-
debug('WHMCS Marketplace credentials entered')
|
291
|
-
const nav = page.waitForNavigation(navOpts)
|
292
|
-
await page.hover(selector)
|
293
|
-
await page.click(selector)
|
294
|
-
await nav
|
295
|
-
debug('Login form successfully submitted.')
|
296
|
-
logger.log('WHMCS Marketplace Login Form successfully submitted.')
|
297
|
-
} catch (error) {
|
298
|
-
<span class="cstat-no" title="statement not covered" > debug('WHMCS Marketplace login failed.', error.message)</span>
|
299
|
-
<span class="cstat-no" title="statement not covered" > logger.error('WHMCS Marketplace login failed.', error.message)</span>
|
300
|
-
<span class="cstat-no" title="statement not covered" > success = false</span>
|
301
|
-
}
|
302
|
-
|
303
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (success) {
|
304
|
-
try {
|
305
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (!parseInt(whmcsPRODUCTID, 10)) {
|
306
|
-
<span class="cstat-no" title="statement not covered" > return false</span>
|
307
|
-
}
|
308
|
-
|
309
|
-
// scrap versions from WHMCS marketplace
|
310
|
-
url = `${wmbase}/product/${whmcsPRODUCTID}/edit#compatibility`
|
311
|
-
await page.goto(url, gotoOpts)
|
312
|
-
debug('product page loaded at %s', url)
|
313
|
-
|
314
|
-
const selector = 'input[name="versionIds[]"]'
|
315
|
-
const submitSelector = 'div#compatibility button[type="submit"]'
|
316
|
-
await page.waitForSelector(selector, selectorOpts)
|
317
|
-
await page.waitForSelector(submitSelector, selectorOpts)
|
318
|
-
debug('compatibility version table found')
|
232
|
+
debug('product page loaded at %s', url)
|
319
233
|
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
let check = true
|
326
|
-
for (let i = 0; i < 2; i++) {
|
327
|
-
const a = ~~checkParts[i]
|
328
|
-
const b = ~~minParts[i]
|
329
|
-
if (a > b) {
|
330
|
-
break
|
331
|
-
}
|
332
|
-
if (a < b) {
|
333
|
-
check = false
|
334
|
-
break
|
335
|
-
}
|
336
|
-
}
|
337
|
-
c.checked = check
|
338
|
-
}), whmcsMINVERSION)
|
339
|
-
const submitNav = page.waitForNavigation(navOpts)
|
340
|
-
await page.hover(submitSelector)
|
341
|
-
await page.click(submitSelector)
|
342
|
-
await submitNav
|
234
|
+
const selector = 'input[name="versionIds[]"]'
|
235
|
+
const submitSelector = 'div#compatibility button[type="submit"]'
|
236
|
+
await page.waitForSelector(selector, selectorOpts)
|
237
|
+
await page.waitForSelector(submitSelector, selectorOpts)
|
238
|
+
debug('compatibility version table found')
|
343
239
|
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
} catch (error) {
|
348
|
-
<span class="cstat-no" title="statement not covered" > debug('updating whmcs compatibility list failed.', error.message)</span>
|
349
|
-
<span class="cstat-no" title="statement not covered" > logger.error('WHMCS Marketplace updating whmcs compatibility list failed.', error.message)</span>
|
350
|
-
<span class="cstat-no" title="statement not covered" > success = false</span>
|
240
|
+
let tmp = minversion
|
241
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (tmp) {
|
242
|
+
tmp = tmp.replace(/(.)/g, '$&\u200E')
|
351
243
|
}
|
244
|
+
debug(`Minimum required WHMCS version: ${tmp}`)
|
245
|
+
/* istanbul ignore next */
|
246
|
+
await page.$$eval(
|
247
|
+
selector,
|
248
|
+
(checkboxes, minversion) =>
|
249
|
+
checkboxes.forEach(function (c) {
|
250
|
+
const checkParts = c.className.split('-')[0].split('_')
|
251
|
+
const minParts = minversion.split('.')
|
252
|
+
let check = true
|
253
|
+
for (let i = 0; i < 2; i++) {
|
254
|
+
const a = ~~checkParts[i]
|
255
|
+
const b = ~~minParts[i]
|
256
|
+
if (a > b) {
|
257
|
+
break
|
258
|
+
}
|
259
|
+
if (a < b) {
|
260
|
+
check = false
|
261
|
+
break
|
262
|
+
}
|
263
|
+
}
|
264
|
+
c.checked = check
|
265
|
+
}),
|
266
|
+
minversion
|
267
|
+
)
|
268
|
+
await page.clickAndNavigate(submitSelector)
|
269
|
+
} catch (error) {
|
270
|
+
<span class="cstat-no" title="statement not covered" > debug('Updating whmcs compatibility list failed.', error.message)</span>
|
271
|
+
<span class="cstat-no" title="statement not covered" > await page.browser().close()</span>
|
272
|
+
<span class="cstat-no" title="statement not covered" > return false</span>
|
352
273
|
}
|
353
274
|
|
275
|
+
debug('Updating whmcs compatibility list succeeded.')
|
354
276
|
await page.browser().close()
|
355
|
-
return
|
277
|
+
return true
|
356
278
|
}
|
357
279
|
</pre></td></tr></table></pre>
|
358
280
|
|
@@ -361,7 +283,7 @@ module.exports = async (pluginConfig, context) => {
|
|
361
283
|
<div class='footer quiet pad2 space-top1 center small'>
|
362
284
|
Code coverage generated by
|
363
285
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
364
|
-
at
|
286
|
+
at 2022-08-09T11:01:27.229Z
|
365
287
|
</div>
|
366
288
|
<script src="../prettify.js"></script>
|
367
289
|
<script>
|
@@ -32,7 +32,7 @@
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
33
33
|
<span class="strong">100% </span>
|
34
34
|
<span class="quiet">Branches</span>
|
35
|
-
<span class='fraction'>
|
35
|
+
<span class='fraction'>12/12</span>
|
36
36
|
</div>
|
37
37
|
|
38
38
|
|
@@ -83,7 +83,8 @@
|
|
83
83
|
<a name='L18'></a><a href='#L18'>18</a>
|
84
84
|
<a name='L19'></a><a href='#L19'>19</a>
|
85
85
|
<a name='L20'></a><a href='#L20'>20</a>
|
86
|
-
<a name='L21'></a><a href='#L21'>21</a
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
87
88
|
<span class="cline-any cline-yes">1x</span>
|
88
89
|
<span class="cline-any cline-yes">1x</span>
|
89
90
|
<span class="cline-any cline-neutral"> </span>
|
@@ -93,6 +94,7 @@
|
|
93
94
|
<span class="cline-any cline-yes">5x</span>
|
94
95
|
<span class="cline-any cline-yes">2x</span>
|
95
96
|
<span class="cline-any cline-neutral"> </span>
|
97
|
+
<span class="cline-any cline-neutral"> </span>
|
96
98
|
<span class="cline-any cline-yes">5x</span>
|
97
99
|
<span class="cline-any cline-yes">3x</span>
|
98
100
|
<span class="cline-any cline-neutral"> </span>
|
@@ -110,13 +112,14 @@ const getError = require('./get-error')
|
|
110
112
|
module.exports = async (pluginConfig, context) => {
|
111
113
|
const cfg = resolveConfig(context)
|
112
114
|
const errors = []
|
113
|
-
if (cfg.
|
115
|
+
if (cfg.login === false || cfg.password === false) {
|
114
116
|
errors.push(getError('EWHMCSNOCREDENTIALS'))
|
115
117
|
}
|
116
|
-
|
118
|
+
// TODO: we might test Marketplace login using given credentials
|
119
|
+
if (cfg.productid === false) {
|
117
120
|
errors.push(getError('EWHMCSNOPRODUCTID'))
|
118
121
|
}
|
119
|
-
if (!/^[0-9]+$/.test(cfg.
|
122
|
+
if (!/^[0-9]+$/.test(cfg.productid) || !parseInt(cfg.productid, 10)) {
|
120
123
|
errors.push(getError('EWHMCSINVALIDPRODUCTID'))
|
121
124
|
}
|
122
125
|
if (errors.length > 0) {
|
@@ -130,7 +133,7 @@ module.exports = async (pluginConfig, context) => {
|
|
130
133
|
<div class='footer quiet pad2 space-top1 center small'>
|
131
134
|
Code coverage generated by
|
132
135
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
133
|
-
at
|
136
|
+
at 2022-08-09T11:01:27.229Z
|
134
137
|
</div>
|
135
138
|
<script src="../prettify.js"></script>
|
136
139
|
<script>
|
Binary file
|