@@ -181,11 +181,9 @@ def yaml_to_rst(path):
181181# The short X.Y version.
182182version = __version__
183183
184+
184185# Get tags from GitHub
185186# Set GITHUBTOKEN to your API token in your environment to increase rate limit.
186- g = Github (os .environ .get ('GITHUBTOKEN' ))
187-
188-
189187def _gh_rate_limit ():
190188 print ("""Release notes not updated due to GitHub API rate limit.
191189
@@ -210,49 +208,6 @@ def _gh_rate_limit():
210208""" )
211209
212210
213- try :
214- gh_cpac = g .get_user ('FCP-INDI' ).get_repo ('C-PAC' )
215- gh_tags = [t .name for t in gh_cpac .get_tags ()]
216- except RateLimitExceededException :
217- _gh_rate_limit ()
218- gh_tags = []
219- gh_tags .sort (reverse = True )
220-
221- # don't build release notes for newer releases
222- build_version = os .environ .get ('CIRCLE_TAG' , '' ).rstrip ('-source' )
223- if len (build_version ):
224- gh_tags = [gh_tag for gh_tag in gh_tags if compare_versions (
225- build_version , gh_tag
226- )]
227-
228- # Try to get release notes from GitHub
229- try :
230- gh_releases = []
231- for t in gh_tags :
232- try :
233- gh_releases .append (gh_cpac .get_release (t ).raw_data )
234- except (AttributeError , UnknownObjectException ):
235- print (f'No notes for { t } ' )
236- gh_releaseNotes = {r ['tag_name' ]: {
237- 'name' : r ['name' ],
238- 'body' : r ['body' ],
239- 'published_at' : r ['published_at' ]
240- } for r in gh_releases }
241- except RateLimitExceededException :
242- _gh_rate_limit ()
243- gh_releaseNotes = {
244- t : {
245- 'name' : t ,
246- 'body' : '' .join ([
247- 'See https://github.com/FCP-INDI/C-PAC/releases/tag/' ,
248- t ,
249- ' for release notes.'
250- ]),
251- 'published_at' : None
252- } for t in gh_tags
253- }
254-
255-
256211def sort_tag (t ):
257212 return (t [0 :- 4 ] if t [0 ].isdigit () else t [1 :- 4 ])
258213
@@ -277,94 +232,144 @@ def _unireplace(release_note, unireplace):
277232 )
278233
279234
280- this_dir = os .path .dirname (os .path .abspath (__file__ ))
281- release_notes_dir = os .path .join (this_dir , 'user' , 'release_notes' )
282- if not os .path .exists (release_notes_dir ):
283- os .makedirs (release_notes_dir )
284- latest_path = os .path .join (release_notes_dir , 'latest.rst' )
285- # all_release_notes = ''
286- for t in gh_tags :
287- if t in gh_releaseNotes :
288- tag_header = '{}{}{}' .format (
289- 'Latest Release: ' if t == gh_tags [0 ] else '' ,
290- (
291- gh_releaseNotes [t ]['name' ][4 :] if (
292- gh_releaseNotes [t ]['name' ].startswith ('CPAC' )
293- ) else gh_releaseNotes [t ]['name' ][5 :] if (
294- gh_releaseNotes [t ]['name' ].startswith ('C-PAC' )
295- ) else gh_releaseNotes [t ]['name' ]
296- ).strip (),
297- ' ({})' .format (
298- dparser .parse (gh_releaseNotes [t ]['published_at' ]).date (
299- ).strftime ('%b %d, %Y' )
300- ) if gh_releaseNotes [t ]['published_at' ] else ''
301- )
302- release_note = '\n ' .join (_unireplace (
303- """{}
304- {}
305- {}
306- """ .format (
307- tag_header ,
308- '^' * len (tag_header ),
309- m2r .convert (gh_releaseNotes [t ]['body' ].encode (
310- 'ascii' ,
311- errors = 'backslashreplace'
312- ).decode ('utf-8' ))
313- ),
314- {}
315- ))
316-
317- release_notes_path = os .path .join (release_notes_dir , f'{ t } .rst' )
318- if gh_releaseNotes [t ]['published_at' ] and not os .path .exists (
319- release_notes_path
320- ) and not os .path .exists (
321- os .path .join (release_notes_dir , f'v{ t } .rst' )
322- ):
323- with open (release_notes_path , 'w+' ) as f :
324- f .write (release_note )
325- else :
326- print (release_notes_path )
327-
328- if tag_header .startswith ('Latest' ) and not os .path .exists (latest_path ):
329- with open (latest_path , 'w+' ) as f :
330- f .write (
331- """
332-
333- .. include:: /user/release_notes/{latest}.rst
334-
335- .. toctree::
336- :hidden:
337- :titlesonly:
338- :maxdepth: 1
339-
340- /user/release_notes/{latest}.rst
341- """ .format (latest = str (t ))
342- )
343-
344- rnd = [
345- d for d in os .listdir (release_notes_dir ) if d not in [
346- 'index.rst' ,
347- 'latest.rst'
235+ gh_tags = []
236+ _gh_token = os .environ .get ('GITHUBTOKEN' )
237+ if _gh_token is None :
238+ g = None
239+ _gh_rate_limit ()
240+ else :
241+ g = Github (os .environ .get ('GITHUBTOKEN' ))
242+ try :
243+ gh_cpac = g .get_user ('FCP-INDI' ).get_repo ('C-PAC' )
244+ gh_tags = [t .name for t in gh_cpac .get_tags ()]
245+ except RateLimitExceededException :
246+ _gh_rate_limit ()
247+ gh_tags .sort (reverse = True )
248+
249+ # don't build release notes for newer releases
250+ build_version = os .environ .get ('CIRCLE_TAG' , '' ).rstrip ('-source' )
251+ if len (build_version ):
252+ gh_tags = [gh_tag for gh_tag in gh_tags if compare_versions (
253+ build_version , gh_tag
254+ )]
255+
256+ # Try to get release notes from GitHub
257+ try :
258+ gh_releases = []
259+ for t in gh_tags :
260+ try :
261+ gh_releases .append (gh_cpac .get_release (t ).raw_data )
262+ except (AttributeError , UnknownObjectException ):
263+ print (f'No notes for { t } ' )
264+ gh_releaseNotes = {r ['tag_name' ]: {
265+ 'name' : r ['name' ],
266+ 'body' : r ['body' ],
267+ 'published_at' : r ['published_at' ]
268+ } for r in gh_releases }
269+ except RateLimitExceededException :
270+ _gh_rate_limit ()
271+ gh_releaseNotes = {
272+ t : {
273+ 'name' : t ,
274+ 'body' : '' .join ([
275+ 'See https://github.com/FCP-INDI/C-PAC/releases/tag/' ,
276+ t ,
277+ ' for release notes.'
278+ ]),
279+ 'published_at' : None
280+ } for t in gh_tags
281+ }
282+
283+ this_dir = os .path .dirname (os .path .abspath (__file__ ))
284+ release_notes_dir = os .path .join (this_dir , 'user' , 'release_notes' )
285+ if not os .path .exists (release_notes_dir ):
286+ os .makedirs (release_notes_dir )
287+ latest_path = os .path .join (release_notes_dir , 'latest.rst' )
288+ # all_release_notes = ''
289+ for t in gh_tags :
290+ if t in gh_releaseNotes :
291+ tag_header = '{}{}{}' .format (
292+ 'Latest Release: ' if t == gh_tags [0 ] else '' ,
293+ (
294+ gh_releaseNotes [t ]['name' ][4 :] if (
295+ gh_releaseNotes [t ]['name' ].startswith ('CPAC' )
296+ ) else gh_releaseNotes [t ]['name' ][5 :] if (
297+ gh_releaseNotes [t ]['name' ].startswith ('C-PAC' )
298+ ) else gh_releaseNotes [t ]['name' ]
299+ ).strip (),
300+ ' ({})' .format (
301+ dparser .parse (gh_releaseNotes [t ]['published_at' ]).date (
302+ ).strftime ('%b %d, %Y' )
303+ ) if gh_releaseNotes [t ]['published_at' ] else ''
304+ )
305+ release_note = '\n ' .join (_unireplace (
306+ """{}
307+ {}
308+ {}
309+ """ .format (
310+ tag_header ,
311+ '^' * len (tag_header ),
312+ m2r .convert (gh_releaseNotes [t ]['body' ].encode (
313+ 'ascii' ,
314+ errors = 'backslashreplace'
315+ ).decode ('utf-8' ))
316+ ),
317+ {}
318+ ))
319+
320+ release_notes_path = os .path .join (release_notes_dir , f'{ t } .rst' )
321+ if gh_releaseNotes [t ]['published_at' ] and not os .path .exists (
322+ release_notes_path
323+ ) and not os .path .exists (
324+ os .path .join (release_notes_dir , f'v{ t } .rst' )
325+ ):
326+ with open (release_notes_path , 'w+' ) as f :
327+ f .write (release_note )
328+ else :
329+ print (release_notes_path )
330+
331+ if (
332+ tag_header .startswith ('Latest' ) and
333+ not os .path .exists (latest_path )
334+ ):
335+ with open (latest_path , 'w+' ) as f :
336+ f .write (
337+ """
338+
339+ .. include:: /user/release_notes/{latest}.rst
340+
341+ .. toctree::
342+ :hidden:
343+ :titlesonly:
344+ :maxdepth: 1
345+
346+ /user/release_notes/{latest}.rst
347+ """ .format (latest = str (t ))
348+ )
349+
350+ rnd = [
351+ d for d in os .listdir (release_notes_dir ) if d not in [
352+ 'index.rst' ,
353+ 'latest.rst'
354+ ]
348355 ]
349- ]
350- rnd .sort (key = sort_tag , reverse = True )
356+ rnd .sort (key = sort_tag , reverse = True )
351357
352- all_release_notes = """
353- {}
358+ all_release_notes = """
359+ {}
354360
355- .. toctree::
356- :hidden:
357- :titlesonly:
358- :maxdepth: 1
361+ .. toctree::
362+ :hidden:
363+ :titlesonly:
364+ :maxdepth: 1
359365
360- {}
361-
362- """ .format (
363- '\n ' .join ([f'.. include:: /user/release_notes/{ fp } ' for fp in rnd ]),
364- '\n ' .join ([f'/user/release_notes/{ d } ' for d in rnd ]))
365- with open (os .path .join (release_notes_dir , 'index.rst' ), 'w+' ) as f :
366- f .write (all_release_notes .strip ())
366+ {}
367367
368+ """ .format (
369+ '\n ' .join ([f'.. include:: /user/release_notes/{ fp } ' for fp in rnd ]),
370+ '\n ' .join ([f'/user/release_notes/{ d } ' for d in rnd ]))
371+ with open (os .path .join (release_notes_dir , 'index.rst' ), 'w+' ) as f :
372+ f .write (all_release_notes .strip ())
368373
369374# The full version, including alpha/beta/rc tags.
370375release = f'{ __version__ } Beta'
@@ -579,7 +584,7 @@ def _unireplace(release_note, unireplace):
579584
580585""" .format (
581586 versions = ', ' .join (gh_tags [:5 ])
582- )
587+ ) if len ( gh_tags ) >= 5 else ""
583588
584589def setup (app ):
585590 from CPAC .utils .monitoring import custom_logging
0 commit comments