1+ from github import Github
12from invoke import task
3+ from tasks .util .env import get_faabric_config , get_version , PROJ_ROOT
4+ from subprocess import run , PIPE , STDOUT
25
3- from tasks .util .env import get_version , PROJ_ROOT
46
5- from subprocess import run
7+ def get_tag_name (version ):
8+ return "v{}" .format (version )
69
710
811@task
912def tag (ctx , force = False ):
1013 """
1114 Creates git tag from the current tree
1215 """
13- git_tag = "v{}" . format (get_version ())
16+ git_tag = get_tag_name (get_version ())
1417 run (
1518 "git tag {} {}" .format ("--force" if force else "" , git_tag ),
1619 shell = True ,
@@ -24,3 +27,96 @@ def tag(ctx, force=False):
2427 check = True ,
2528 cwd = PROJ_ROOT ,
2629 )
30+
31+
32+ def is_git_submodule ():
33+ git_cmd = "git rev-parse --show-superproject-working-tree"
34+ result = run (git_cmd , shell = True , stdout = PIPE , stderr = STDOUT )
35+ return result .stdout .decode ("utf-8" ) != ""
36+
37+
38+ def get_github_instance ():
39+ conf = get_faabric_config ()
40+
41+ if not conf .has_section ("Github" ) or not conf .has_option (
42+ "Github" , "access_token"
43+ ):
44+ print ("Must set up Github config with access token" )
45+
46+ token = conf ["Github" ]["access_token" ]
47+ g = Github (token )
48+ return g
49+
50+
51+ def get_repo ():
52+ g = get_github_instance ()
53+ return g .get_repo ("faasm/faabric" )
54+
55+
56+ def get_release ():
57+ r = get_repo ()
58+ rels = r .get_releases ()
59+
60+ return rels [0 ]
61+
62+
63+ def get_release_body ():
64+ """
65+ Generate body for release with detailed changelog
66+ """
67+ if is_git_submodule ():
68+ docker_cmd = [
69+ "docker run -t -v" ,
70+ "{}/..:/app/" .format (PROJ_ROOT ),
71+ "orhunp/git-cliff:latest" ,
72+ "--config ./faabric/cliff.toml" ,
73+ "--repository ./faabric" ,
74+ "{}..v{}" .format (get_release ().tag_name , get_version ()),
75+ ]
76+ else :
77+ docker_cmd = [
78+ "docker run -t -v" ,
79+ "{}:/app/" .format (PROJ_ROOT ),
80+ "orhunp/git-cliff:latest" ,
81+ "--config cliff.toml" ,
82+ "--repository ." ,
83+ "{}..v{}" .format (get_release ().tag_name , get_version ()),
84+ ]
85+
86+ cmd = " " .join (docker_cmd )
87+ print ("Generating release body..." )
88+ print (cmd )
89+ result = run (cmd , shell = True , stdout = PIPE , stderr = PIPE )
90+
91+ return result .stdout .decode ("utf-8" )
92+
93+
94+ @task
95+ def release_create (ctx ):
96+ """
97+ Create a draft release on Github
98+ """
99+ # Work out the tag
100+ faabric_ver = get_version ()
101+ tag_name = get_tag_name (faabric_ver )
102+
103+ # Create a release in github from this tag
104+ r = get_repo ()
105+ r .create_git_release (
106+ tag_name ,
107+ "Faabric {}" .format (faabric_ver ),
108+ get_release_body (),
109+ draft = True ,
110+ )
111+
112+ print ("You may now review the draft release in:" )
113+ print ("https://github.com/faasm/faabric/releases" )
114+
115+
116+ @task
117+ def release_publish (ctx ):
118+ """
119+ Publish the draft release
120+ """
121+ rel = get_release ()
122+ rel .update_release (rel .title , rel .raw_data ["body" ], draft = False )
0 commit comments