@@ -43,6 +43,7 @@ type Release struct {
4343}
4444
4545var verFlag bool
46+ var prereleaseFlag bool
4647
4748func init () {
4849 log .SetFlags (0 )
@@ -59,6 +60,7 @@ func init() {
5960 }
6061
6162 flag .BoolVar (& verFlag , "version" , false , "-version" )
63+ flag .BoolVar (& prereleaseFlag , "prerelease" , false , "-prerelease" )
6264 flag .Parse ()
6365}
6466
@@ -77,6 +79,7 @@ Parameters:
7779
7880Options:
7981 -version: Displays version
82+ -prerelease: Identify the release as a prerelease
8083
8184Environment variables:
8285 DEBUG: Allows you to run github-release in debugging mode. DO NOT do this if you are attempting to upload big files.
@@ -100,13 +103,14 @@ func main() {
100103 return
101104 }
102105
103- if len (os .Args ) < 6 {
106+ if flag .NArg () != 5 {
107+ log .Printf ("Error: Invalid number of arguments (got %d, expected 5)\n \n " , flag .NArg ())
104108 log .Fatal (usage )
105109 }
106110
107- userRepo := strings .Split (os . Args [ 1 ] , "/" )
111+ userRepo := strings .Split (flag . Arg ( 0 ) , "/" )
108112 if len (userRepo ) != 2 {
109- log .Printf ("Error: Invalid format used for username and repository: %s\n \n " , os . Args [ 1 ] )
113+ log .Printf ("Error: Invalid format used for username and repository: %s\n \n " , flag . Arg ( 0 ) )
110114 log .Fatal (usage )
111115 }
112116
@@ -121,24 +125,32 @@ Please refer to https://help.github.com/articles/creating-an-access-token-for-co
121125
122126 if debug {
123127 log .Println ("Glob pattern received: " )
124- log .Println (os . Args [ 5 ] )
128+ log .Println (flag . Arg ( 4 ) )
125129 }
126130
127- filepaths , err := filepath .Glob (os . Args [ 5 ] )
131+ filepaths , err := filepath .Glob (flag . Arg ( 4 ) )
128132 if err != nil {
129- log .Fatalf ("Error: Invalid glob pattern: %s\n " , os . Args [ 5 ] )
133+ log .Fatalf ("Error: Invalid glob pattern: %s\n " , flag . Arg ( 4 ) )
130134 }
131135
132136 if debug {
133137 log .Println ("Expanded glob pattern: " )
134138 log .Printf ("%v\n " , filepaths )
135139 }
136140
137- tag := os . Args [ 2 ]
138- branch := os . Args [ 3 ]
139- desc := os . Args [ 4 ]
141+ tag := flag . Arg ( 1 )
142+ branch := flag . Arg ( 2 )
143+ desc := flag . Arg ( 3 )
140144
141- CreateRelease (tag , branch , desc , filepaths )
145+ release := Release {
146+ TagName : tag ,
147+ Name : tag ,
148+ Prerelease : prereleaseFlag ,
149+ Draft : false ,
150+ Branch : branch ,
151+ Body : desc ,
152+ }
153+ publishRelease (release , filepaths )
142154 log .Println ("Done" )
143155}
144156
@@ -172,8 +184,6 @@ func uploadFile(uploadURL, path string) {
172184// CreateRelease creates a Github Release, attaching the given files as release assets
173185// If a release already exist, up in Github, this function will attempt to attach the given files to it.
174186func CreateRelease (tag , branch , desc string , filepaths []string ) {
175- endpoint := fmt .Sprintf ("%s/releases" , githubAPIEndpoint )
176-
177187 release := Release {
178188 TagName : tag ,
179189 Name : tag ,
@@ -182,7 +192,11 @@ func CreateRelease(tag, branch, desc string, filepaths []string) {
182192 Branch : branch ,
183193 Body : desc ,
184194 }
195+ publishRelease (release , filepaths )
196+ }
185197
198+ func publishRelease (release Release , filepaths []string ) {
199+ endpoint := fmt .Sprintf ("%s/releases" , githubAPIEndpoint )
186200 releaseData , err := json .Marshal (release )
187201 if err != nil {
188202 log .Fatalln (err )
@@ -195,7 +209,7 @@ func CreateRelease(tag, branch, desc string, filepaths []string) {
195209 if err != nil && data != nil {
196210 log .Println (err )
197211 log .Println ("Trying again assuming release already exists." )
198- endpoint = fmt .Sprintf ("%s/releases/tags/%s" , githubAPIEndpoint , tag )
212+ endpoint = fmt .Sprintf ("%s/releases/tags/%s" , githubAPIEndpoint , release . TagName )
199213 data , err = doRequest ("GET" , endpoint , "application/json" , nil , int64 (0 ))
200214 }
201215
0 commit comments