Skip to content

Commit 0756486

Browse files
committed
!410 - Added close milestone on correct release generation.
1 parent 4060ce4 commit 0756486

File tree

3 files changed

+124
-52
lines changed

3 files changed

+124
-52
lines changed

apps/Core/Packages/Devtools/Modules/DevtoolsModules.php

Lines changed: 110 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ public function updateModule($data)
341341
public function removeModule($data)
342342
{
343343
if ($data['module_type'] !== 'core') {
344-
if ($data['module_type'] === 'apptypes') {
344+
if (isset($data['module_type']) && $data['module_type'] === 'apptypes') {
345345
$this->apps->types->removeAppType($data);
346346
$this->addResponse('Removed app type from DB. Remove files manually...');
347347

@@ -800,7 +800,7 @@ protected function getModuleJsonFileLocation(&$data)
800800
ucfirst($data['name']) . '/' .
801801
substr($data['module_type'], 0, -1) . '.json';
802802
} else {
803-
if ($data['module_type'] === 'apptypes') {
803+
if (isset($data['module_type']) && $data['module_type'] === 'apptypes') {
804804
return $moduleLocation . 'Install/type.json';
805805
} else if ($data['module_type'] === 'components') {
806806
$routeArr = explode('/', $data['route']);
@@ -1332,7 +1332,9 @@ protected function addUpdateComponentMenu($data)
13321332

13331333
public function syncLabels($data)
13341334
{
1335-
if ($data['module_type'] === 'apptypes') {
1335+
if (isset($data['module_type']) &&
1336+
$data['module_type'] === 'apptypes'
1337+
) {
13361338
$module = $this->apps->types->getAppTypeById($data['id']);
13371339
} else {
13381340
$module = $this->modules->{$data['module_type']}->getById($data['id']);
@@ -1389,7 +1391,7 @@ public function getMilestoneLabelIssues($data, $viaGenerateRelease = false)
13891391
$module = $data;
13901392
$status = 'open';
13911393
} else {
1392-
if ($data['module_type'] === 'apptypes') {
1394+
if (isset($data['module_type']) && $data['module_type'] === 'apptypes') {
13931395
$module = $this->apps->types->getAppTypeById($data['id']);
13941396
} else {
13951397
$module = $this->modules->{$data['module_type']}->getById($data['id']);
@@ -1413,6 +1415,32 @@ public function getMilestoneLabelIssues($data, $viaGenerateRelease = false)
14131415
$status = 'closed';
14141416
}
14151417

1418+
$currentMilestones = $this->syncMilestones($data);
1419+
1420+
$found = false;
1421+
1422+
if ($currentMilestones && isset($currentMilestones['milestones'])) {
1423+
array_walk($currentMilestones['milestones'], function($milestone) use(&$found, $data) {
1424+
if ((int) $data['milestone'] !== 0) {
1425+
$milestoneIdentifier = $milestone['number'] ?? $milestone['id'];
1426+
1427+
if ((int) $milestoneIdentifier === (int) $data['milestone']) {
1428+
$found = true;
1429+
}
1430+
} else {
1431+
if ($milestone['title'] === $data['milestone']) {
1432+
$found = true;
1433+
}
1434+
}
1435+
});
1436+
}
1437+
1438+
if (!$found) {
1439+
$this->addResponse('Error syncing issues as milestone does not exists', 1);
1440+
1441+
return false;
1442+
}
1443+
14161444
if (!$this->latestRelease) {
14171445
$since = null;
14181446
} else {
@@ -1436,7 +1464,7 @@ public function getMilestoneLabelIssues($data, $viaGenerateRelease = false)
14361464
$data['label'],
14371465
null,
14381466
null,
1439-
$data['milestone'],
1467+
(int) $data['milestone'],
14401468
$since
14411469
];
14421470
} else if (strtolower($this->apiClientConfig['provider']) === 'github') {
@@ -1446,7 +1474,7 @@ public function getMilestoneLabelIssues($data, $viaGenerateRelease = false)
14461474
[
14471475
$this->apiClientConfig['org_user'],
14481476
strtolower($this->helper->last(explode('/', $module['repo']))),
1449-
$data['milestone'],
1477+
(int) $data['milestone'],
14501478
$status,
14511479
null,
14521480
null,
@@ -1458,15 +1486,23 @@ public function getMilestoneLabelIssues($data, $viaGenerateRelease = false)
14581486
];
14591487
}
14601488

1461-
$issues = $this->apiClient->useMethod($collection, $method, $args)->getResponse(true);
1489+
try {
1490+
$issues = $this->apiClient->useMethod($collection, $method, $args)->getResponse(true);
1491+
1492+
if ($issues) {
1493+
$this->addResponse('Issues Synced', 0, ['issues' => $issues]);
14621494

1463-
if ($issues) {
1464-
$this->addResponse('Issues Synced', 0, ['issues' => $issues]);
1495+
return $issues;
1496+
}
14651497

1466-
return $issues;
1498+
$this->addResponse('No issues found with selected milestone/label', 1);
1499+
} catch (\Exception $e) {
1500+
$this->addResponse($e->getMessage(), 1);
1501+
1502+
return false;
14671503
}
14681504

1469-
$this->addResponse('Error syncing issues or No issues found with selected milestone/label', 1);
1505+
return true;
14701506
}
14711507

14721508
protected function getReleases($module, $getLatestRelease = false)
@@ -1560,7 +1596,7 @@ public function bumpVersion($data)
15601596
}
15611597

15621598
if (!isset($data['repo'])) {
1563-
if ($data['module_type'] === 'apptypes') {
1599+
if (isset($data['module_type']) && $data['module_type'] === 'apptypes') {
15641600
$module = $this->apps->types->getAppTypeById($data['id']);
15651601
} else {
15661602
$module = $this->modules->{$data['module_type']}->getById($data['id']);
@@ -1780,7 +1816,7 @@ public function bumpVersion($data)
17801816

17811817
public function syncBranches($data)
17821818
{
1783-
if ($data['module_type'] === 'apptypes') {
1819+
if (isset($data['module_type']) && $data['module_type'] === 'apptypes') {
17841820
$module = $this->apps->types->getAppTypeById($data['id']);
17851821
} else {
17861822
$module = $this->modules->{$data['module_type']}->getById($data['id']);
@@ -1849,7 +1885,7 @@ public function syncBranches($data)
18491885

18501886
public function syncMilestones($data)
18511887
{
1852-
if ($data['module_type'] === 'apptypes') {
1888+
if (isset($data['module_type']) && $data['module_type'] === 'apptypes') {
18531889
$module = $this->apps->types->getAppTypeById($data['id']);
18541890
} else {
18551891
$module = $this->modules->{$data['module_type']}->getById($data['id']);
@@ -1890,9 +1926,9 @@ public function syncMilestones($data)
18901926
}
18911927

18921928
if ($milestones) {
1893-
$this->addResponse('Labels Synced', 0, ['milestones' => $milestones]);
1929+
$this->addResponse('Milestones Synced', 0, ['milestones' => $milestones]);
18941930

1895-
return $milestones;
1931+
return ['milestones' => $milestones];
18961932
}
18971933

18981934
$this->addResponse('Error syncing milestones or no milestones configured.', 1);
@@ -1902,6 +1938,7 @@ public function generateRelease($data)
19021938
{
19031939
if ($data['module_type'] === 'apptypes') {
19041940
$module = $this->apps->types->getAppTypeById($data['id']);
1941+
$module['module_type'] = 'apptypes';
19051942
} else {
19061943
$module = $this->modules->{$data['module_type']}->getById($data['id']);
19071944
}
@@ -1959,16 +1996,15 @@ public function generateRelease($data)
19591996
if (!$this->latestRelease ||
19601997
($this->latestRelease && $data['mark-as-draft'] == 'false')
19611998
) {
1962-
$module['version'] = $name;
1963-
$module['branch'] = $data['branch'];
1964-
19651999
//Check for any open issues against the milestone that was created during draft creation.
19662000
if ($this->getMilestoneLabelIssues($module, true)) {
19672001
$this->addResponse('Milestone ' . $module['version'] . ' has a issues open. Please close those issues before generating release.', 1);
19682002

19692003
return false;
19702004
}
19712005

2006+
$module['version'] = $name;
2007+
$module['branch'] = $data['branch'];
19722008
//Check for any open pull request against the branch we have to create release from.
19732009
if (!$this->checkPullRequests($module)) {
19742010
return false;
@@ -2147,7 +2183,7 @@ public function generateRelease($data)
21472183
) {
21482184
$core = $this->core->core;
21492185

2150-
$core['version'] = $data['version'];
2186+
$core['version'] = $module['version'];
21512187

21522188
$this->core->update($core);
21532189
}
@@ -2165,6 +2201,8 @@ public function generateRelease($data)
21652201
if ($newMilestone) {
21662202
$releaseData = array_merge($releaseData, $newMilestone);
21672203
}
2204+
} else {
2205+
$this->closeReleaseMilestone($versionData, $data, $module, $repo);
21682206
}
21692207
}
21702208
} catch (\throwable $e) {
@@ -2237,6 +2275,58 @@ protected function createReleaseMilestone($versionData, $data, $module, $repo)
22372275
$this->addResponse('Error generating new label', 1);
22382276
}
22392277

2278+
protected function closeReleaseMilestone($versionData, $data, $module, $repo)
2279+
{
2280+
if (isset($versionData['newVersion'])) {
2281+
$version = $versionData['newVersion'];
2282+
} else if (isset($versionData['release'])) {
2283+
$version = $versionData['release'];
2284+
}
2285+
2286+
$currentMilestones = $this->syncMilestones($data);
2287+
2288+
$found = false;
2289+
2290+
if ($currentMilestones && isset($currentMilestones['milestones'])) {
2291+
array_walk($currentMilestones['milestones'], function($milestone) use(&$found, $version) {
2292+
if ($milestone['title'] === $version) {
2293+
$found = $milestone['number'] ?? $milestone['id'];
2294+
}
2295+
});
2296+
}
2297+
2298+
if ($found) {
2299+
if (strtolower($this->apiClientConfig['provider']) === 'gitea') {
2300+
$collection = 'IssueApi';
2301+
$method = 'issueEditMilestone';
2302+
} else if (strtolower($this->apiClientConfig['provider']) === 'github') {
2303+
$collection = 'IssuesApi';
2304+
$method = 'issuesUpdateMilestone';
2305+
}
2306+
2307+
$args =
2308+
[
2309+
$this->apiClientConfig['org_user'],
2310+
strtolower($this->helper->last(explode('/', $repo))),
2311+
$found,
2312+
[
2313+
'state' => 'closed',
2314+
]
2315+
];
2316+
try {
2317+
$this->apiClient->useMethod($collection, $method, $args)->getResponse(true);
2318+
} catch (\throwable $e) {
2319+
$this->addResponse($e->getMessage(), 1);
2320+
2321+
return false;
2322+
}
2323+
2324+
return true;
2325+
}
2326+
2327+
return false;
2328+
}
2329+
22402330
public function commitBundleJson($data)
22412331
{
22422332
$bundle = $this->modules->bundles->getById($data['id']);

apps/Core/Views/Default/html/devtools/modules/module.html

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,6 @@
5151
afterInit : function() {
5252
$('#{{componentId}}-{{sectionId}}-import-issues').off();
5353
$('#{{componentId}}-{{sectionId}}-import-issues').click(function(e) {
54-
$('#{{componentId}}-{{sectionId}}-import-issues').attr('disabled', true);
55-
$('#{{componentId}}-{{sectionId}}-import-issues').children('i').removeClass('fa-list-check').addClass('fa-spin fa-cog');
56-
5754
var postData = { };
5855
postData[$('#security-token').attr('name')] = $('#security-token').val();
5956
postData['id'] = $('#{{componentId}}-{{sectionId}}-id').val();
@@ -68,6 +65,9 @@
6865
postData['label'] = $('#{{componentId}}-{{sectionId}}-label').select2('data')[0].text;
6966
}
7067

68+
$('#{{componentId}}-{{sectionId}}-import-issues').attr('disabled', true);
69+
$('#{{componentId}}-{{sectionId}}-import-issues').children('i').removeClass('fa-list-check').addClass('fa-spin fa-cog');
70+
7171
$.post('{{links.url("devtools/modules/getMilestoneLabelIssues")}}', postData, function(response) {
7272
if (response.tokenKey && response.token) {
7373
$('#security-token').attr('name', response.tokenKey);
@@ -78,7 +78,7 @@
7878
if (response.responseData && response.responseData.issues) {
7979
var html = $('#{{componentId}}-{{sectionId}}-release-notes').trumbowyg('html');
8080

81-
html += '<h6>RESOLVED ISSUES (' + $('#{{componentId}}-{{sectionId}}-milestone').text() + ')';
81+
html += '<h6>RESOLVED ISSUES (' + $('#{{componentId}}-{{sectionId}}-milestone').select2('data')[0].text + ')';
8282

8383
if ($('#{{componentId}}-{{sectionId}}-label').val()) {
8484
html += ' (' + $('#{{componentId}}-{{sectionId}}-label').select2('data')[0].text + ')';
@@ -485,13 +485,22 @@
485485
if (response.responseData && response.responseData.milestones) {
486486
$('#{{componentId}}-{{sectionId}}-milestone').empty().trigger('change');
487487
for (var milestone in response.responseData.milestones) {
488+
var milestoneNumber = 1;
489+
490+
if (response.responseData.milestones[milestone]['number']) {
491+
milestoneNumber = response.responseData.milestones[milestone]['number'];
492+
} else if (response.responseData.milestones[milestone]['id']) {
493+
milestoneNumber = response.responseData.milestones[milestone]['id'];
494+
}
488495
var newOption
489496
= new Option(
490497
response.responseData.milestones[milestone]['title'],
491-
response.responseData.milestones[milestone]['number'], false, false
498+
milestoneNumber, false, false
492499
);
493500

494501
$('#{{componentId}}-{{sectionId}}-milestone').append(newOption).trigger('change');
502+
503+
milestoneNumber++;
495504
}
496505
}
497506
PNotify.success({'text': 'Synced ' + response.responseData.milestones.length + ' milestones.'});

system/Base/Providers/BasepackagesServiceProvider/Packages/ApiClientServices/Apis/Repos/Github/Model/Reactions.php

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -382,33 +382,6 @@ public function valid()
382382
}
383383

384384

385-
/**
386-
* Gets _1
387-
*
388-
* @return int
389-
*/
390-
public function get1()
391-
{
392-
return $this->container['_1'];
393-
}
394-
395-
/**
396-
* Sets _1
397-
*
398-
* @param int $_1 _1
399-
*
400-
* @return self
401-
*/
402-
public function set1($_1)
403-
{
404-
if (is_null($_1)) {
405-
throw new \InvalidArgumentException('non-nullable _1 cannot be null');
406-
}
407-
$this->container['_1'] = $_1;
408-
409-
return $this;
410-
}
411-
412385
/**
413386
* Gets _1
414387
*

0 commit comments

Comments
 (0)