@hexonet/semantic-release-whmcs 4.0.2 → 4.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/pull-request.yml +7 -7
- package/.github/workflows/push.yml +7 -7
- package/HISTORY.md +7 -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 +45 -45
- package/coverage/lib/publish.js.html +81 -204
- package/coverage/lib/puppet.js.html +208 -55
- package/coverage/lib/resolve-config.js.html +13 -10
- 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 -8
- 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 +5 -5
@@ -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
|