Skip to content

Commit a4bac62

Browse files
committed
releases bugs fixed
1 parent b075fcd commit a4bac62

File tree

1 file changed

+177
-10
lines changed

1 file changed

+177
-10
lines changed

src/cls/GitHub/API.cls

Lines changed: 177 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -241,10 +241,12 @@ Method MirrorAll(Directory As %String = {..#Directory}) As %Status
241241
Return st
242242
}
243243

244-
Method MirrorOne(Repo As %String, OwnerFrom As %String, OwnerTo As %String, Org As %String, Directory As %String = {..#Directory}) As %Status
244+
Method MirrorOne(Repo As %String, OwnerFrom As %String, OwnerTo As %String, Org As %Boolean, Directory As %String = {..#Directory}) As %Status
245245
{
246246
Set st = $$$OK
247247

248+
Set:$f(Repo,".git")=0 Repo = Repo_".git"
249+
248250
Set github = "https://github.com/"
249251
Set sourceRepo = github_OwnerFrom_"/"_Repo
250252
Set mirrorRepo = github_OwnerTo_"/"_Repo
@@ -255,7 +257,7 @@ Method MirrorOne(Repo As %String, OwnerFrom As %String, OwnerTo As %String, Org
255257
Set st1 = ..CreateRepo(Repo, description, $select(Org=0:"",1:OwnerTo))
256258

257259
w " "_st1,!,!,"Clone bare repo: "_sourceRepo
258-
Set st2 = ..Clone(sourceRepo, Directory)
260+
Set st2 = $system.Status.DisplayError(..Clone(sourceRepo, Directory))
259261
Set st = $$$ADDSC(st1, st2)
260262

261263
w " "_st,!,!,"Mirroring: "_sourceRepo_" -> "_mirrorRepo
@@ -265,6 +267,9 @@ Method MirrorOne(Repo As %String, OwnerFrom As %String, OwnerTo As %String, Org
265267
w " "_st,!,!,"Fetch and push... "
266268
Set st4 = ..FetchAndPush(Directory_Repo)
267269
Set st = $$$ADDSC(st, st4)
270+
271+
w " "_st,!,!,"Mirror Releases... "
272+
set st1 = ..MirrorReleases(OwnerFrom, OwnerTo, $p(Repo,".git",1))
268273

269274
Return st
270275
}
@@ -287,10 +292,10 @@ Method CreateRepo(Name As %String, Description As %String = "empty", Org As %Str
287292
Return st
288293
}
289294

290-
ClassMethod Clone(Repo As %String, Directory As %String, Parameter As %String = "--mirror") As %Status
295+
ClassMethod Clone(RepoURL As %String, Directory As %String = {..#Directory}, Parameter As %String = "--mirror") As %Status
291296
{
292297
Do $system.Process.CurrentDirectory(Directory)
293-
Set cmd = "git clone " _ Parameter _" "_ Repo
298+
Set cmd = "git clone " _ Parameter _" "_ RepoURL
294299

295300
Set st = ##class(GitHub.Utils).execute(cmd)
296301

@@ -321,21 +326,183 @@ ClassMethod FetchAndPush(Directory As %String) As %Status
321326
Return $$$ADDSC(st1, st2)
322327
}
323328

329+
// do ##class(GitHub.API).UpdateMirrors()
330+
324331
ClassMethod UpdateMirrors(Directory As %String = {..#Directory}) As %Status
325332
{
326333
Set stream=##class(%Stream.FileCharacter).%New()
327-
Set sc=stream.LinkToFile(Directory_"repos.json")
334+
Set st=stream.LinkToFile(Directory_"repos.json")
328335
Set conf={}.%FromJSON(stream.Read($$$MaxCacheInt))
329336

330-
Set repos = conf.repos
331337

332-
for i=0:1:repos.%Size()-1
338+
Set mirrors = conf.mirrors
339+
340+
For i=0:1:mirrors.%Size()-1
333341
{
334-
Set repo = repos.%Get(i)_".git"
335-
Set sc = ..FetchAndPush(Directory_repo)
342+
set mirror = mirrors.%Get(i)
343+
Set repos = mirror.repos
344+
345+
For i=0:1:repos.%Size()-1
346+
{
347+
Set repo = repos.%Get(i)_".git"
348+
Set st1 = ..FetchAndPush(Directory_repo)
349+
Set st = $$$ADDSC(st, st1)
350+
}
351+
}
352+
Return st
353+
}
354+
355+
Method MirrorReleases(OwnerFrom As %String, OwnerTo As %String, Repo As %String) As %Status
356+
{
357+
#Dim releases As %DynamicArray
358+
#Dim release As %DynamicObject
359+
360+
Set st = ..GetReleasesList(OwnerFrom, Repo, .releases)
361+
362+
For i=1:1:releases.Count()
363+
{
364+
Set release = releases.GetAt(i)
365+
366+
Set st1 = ..CreateRelease(OwnerTo, Repo, release, .releaseid)
367+
Set st = $$$ADDSC(st, st1)
368+
369+
Set st1 = ..GetListAssetsForARelease(OwnerFrom, Repo, release.id, .assets)
370+
Set st = $$$ADDSC(st, st1)
371+
372+
For j=1:1:assets.Count()
373+
{
374+
Set asset = assets.GetAt(j)
375+
376+
Set st1 = ..DownloadAssetsContent(asset."browser_download_url", .stream)
377+
Set st = $$$ADDSC(st, st1)
378+
379+
Set st1 = ..UploadAsset(OwnerTo, Repo, releaseid, asset, stream)
380+
Set st = $$$ADDSC(st, st1)
381+
}
336382
}
337383

338-
Return sc
384+
Return st
385+
}
386+
387+
Method GetReleasesList(Owner As %String, Repo As %String, Output Releases As %DynamicArray) As %Status
388+
{
389+
Set ..Request.Location = "/repos/"_Owner_"/"_Repo_"/releases"
390+
391+
set st = ..Request.Get()
392+
393+
Set st1 = ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(..Request.HttpResponse.Data,, .Releases, 1)
394+
Set st = $$$ADDSC(st, st1)
395+
396+
Return st
397+
}
398+
399+
Method GetLatestRelease(Owner As %String, Repo As %String, ByRef Release As %DynamicObject) As %Status
400+
{
401+
Set ..Request.Location = "/repos/"_Owner_"/"_Repo_"/releases/latest"
402+
403+
set st = ..Request.Get()
404+
405+
Set st1 = ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(..Request.HttpResponse.Data,, .Release, 1)
406+
Set st = $$$ADDSC(st, st1)
407+
408+
Return st
409+
}
410+
411+
Method CreateRelease(Owner As %String, Repo As %String, Input As %DynamicObject, Output ReleaseID As %Integer) As %Status
412+
{
413+
414+
Set ..Request.Location = "/repos/"_Owner_"/"_Repo_"/releases"
415+
416+
set json = {
417+
"tag_name": (Input."tag_name"),
418+
"target_commitish": (Input."target_commitish"),
419+
"name": (Input.name),
420+
"body": (Input.body),
421+
"draft": false,
422+
"prerelease": false
423+
}.%ToJSON()
424+
425+
do ..Request.EntityBody.Write(json)
426+
427+
Set st = ..Request.Post()
428+
429+
Set st1 = ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(..Request.HttpResponse.Data,, .release, 1)
430+
Set st = $$$ADDSC(st, st1)
431+
432+
Set ReleaseID = release.id
433+
434+
Return st
435+
}
436+
437+
Method DeleteRelease(Owner As %String, Repo As %String, ReleaseID) As %Status
438+
{
439+
Set ..Request.Location = "/repos/"_Owner_"/"_Repo_"/releases/"_ReleaseID
440+
441+
set st = ..Request.Delete(..Request.Location)
442+
443+
Set st1 = ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(..Request.HttpResponse.Data,, .Release, 1)
444+
Set st = $$$ADDSC(st, st1)
445+
446+
Return st
447+
}
448+
449+
Method GetListAssetsForARelease(Owner As %String, Repo As %String, ReleaseId As %Integer, Output Assets As %DynamicArray) As %Status
450+
{
451+
Set ..Request.Location = "/repos/"_Owner_"/"_Repo_"/releases/"_ReleaseId_"/assets"
452+
453+
set st = ..Request.Get()
454+
455+
Set st1 = ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(..Request.HttpResponse.Data,, .Assets, 1)
456+
Set st = $$$ADDSC(st, st1)
457+
458+
Return st
459+
}
460+
461+
Method DownloadAssetsContent(BrowserDownloadURL As %String, Output Assets) As %Status
462+
{
463+
Set ..Request.Server = $p(BrowserDownloadURL, "/", 3)
464+
Set ..Request.Location = $p(BrowserDownloadURL, "/", 4,*)
465+
set ..Request.FollowRedirect = $$$NO
466+
467+
Set st = ..Request.Get()
468+
469+
Set location = ..Request.HttpResponse.GetHeader("LOCATION")
470+
471+
Set requestAsset = ##class(%Net.HttpRequest).%New()
472+
Set requestAsset.Https = 1
473+
Set requestAsset.SSLConfiguration = ..#SSLConfig
474+
475+
Set st = requestAsset.Get(location)
476+
477+
Set Assets = requestAsset.HttpResponse.Data
478+
479+
Set ..Request.Server= ..#Server
480+
481+
Return st
482+
}
483+
484+
Method UploadAsset(Owner As %String, Repo As %String, ReleaseId As %Integer, Asset As %ZEN.proxyObject, Stream As %AbstractStream) As %Status
485+
{
486+
Set ..Request.Server = "uploads.github.com"
487+
488+
Do ..Request.SetParam("Content-Type", Asset."Content-Type")
489+
Do ..Request.SetParam("name", Asset.name)
490+
Do ..Request.SetParam("label", Asset.label)
491+
492+
Set ..Request.Location = "/repos/"_Owner_"/"_Repo_"/releases/"_ReleaseId_"/assets"
493+
494+
do ..Request.EntityBody.CopyFrom(Stream)
495+
496+
Set st = ..Request.Post()
497+
498+
Set ..Request.Server= ..#Server
499+
500+
return st
501+
}
502+
503+
Method test(test)
504+
{
505+
zw
339506
}
340507

341508
}

0 commit comments

Comments
 (0)