@@ -37,7 +37,8 @@ const ignorableFields = [
3737 'force_create' ,
3838 'auto_init' ,
3939 'repo' ,
40- 'archived'
40+ 'archived' ,
41+ 'releases'
4142]
4243
4344module . exports = class Repository extends ErrorStash {
@@ -48,6 +49,7 @@ module.exports = class Repository extends ErrorStash {
4849 this . settings = Object . assign ( { mediaType : { previews : [ 'nebula-preview' ] } } , settings , repo )
4950 this . topics = this . settings . topics
5051 this . security = this . settings . security
52+ this . releases = this . settings . releases
5153 this . repo = repo
5254 this . log = log
5355 this . nop = nop
@@ -56,6 +58,7 @@ module.exports = class Repository extends ErrorStash {
5658 delete this . settings . topics
5759 delete this . settings . force
5860 delete this . settings . template
61+ delete this . settings . releases
5962 }
6063
6164 sync ( ) {
@@ -109,8 +112,12 @@ module.exports = class Repository extends ErrorStash {
109112 promises . push ( updateRepoPromise . then ( ( ) => {
110113 return this . updateAutomatedSecurityFixes ( resp . data , resArray )
111114 } ) )
115+ promises . push ( updateRepoPromise . then ( ( ) => {
116+ return this . updateReleaseImmutability ( resp . data , resArray )
117+ } ) )
112118 } else {
113119 promises . push ( this . updateSecurity ( resp . data , resArray ) )
120+ promises . push ( this . updateReleaseImmutability ( resp . data , resArray ) )
114121 }
115122 if ( this . nop ) {
116123 return Promise . resolve ( resArray )
@@ -315,4 +322,34 @@ module.exports = class Repository extends ErrorStash {
315322 }
316323 }
317324 }
325+
326+ updateReleaseImmutability ( repoData , resArray ) {
327+ if ( this . releases ?. immutable === true || this . releases ?. immutable === false ) {
328+ const parms = {
329+ owner : repoData . owner . login ,
330+ repo : repoData . name
331+ }
332+ if ( this . releases . immutable === true ) {
333+ this . log . debug ( `Enabling release immutability for owner: ${ repoData . owner . login } and repo ${ repoData . name } ` )
334+ if ( this . nop ) {
335+ resArray . push ( new NopCommand ( this . constructor . name , this . repo , this . github . request . endpoint ( 'PUT /repos/{owner}/{repo}/releases/immutability' , parms ) , 'Enabling release immutability' ) )
336+ return Promise . resolve ( resArray )
337+ }
338+ return this . github . request ( 'PUT /repos/{owner}/{repo}/releases/immutability' , parms )
339+ } else {
340+ this . log . debug ( `Disabling release immutability for owner: ${ repoData . owner . login } and repo ${ repoData . name } ` )
341+ if ( this . nop ) {
342+ resArray . push ( new NopCommand ( this . constructor . name , this . repo , this . github . request . endpoint ( 'DELETE /repos/{owner}/{repo}/releases/immutability' , parms ) , 'Disabling release immutability' ) )
343+ return Promise . resolve ( resArray )
344+ }
345+ return this . github . request ( 'DELETE /repos/{owner}/{repo}/releases/immutability' , parms )
346+ }
347+ } else {
348+ this . log . debug ( `no need to update release immutability for ${ repoData . name } ` )
349+ if ( this . nop ) {
350+ return Promise . resolve ( [ ] )
351+ }
352+ return Promise . resolve ( )
353+ }
354+ }
318355}
0 commit comments