1
1
import { Release , Asset } from "gh-release"
2
- import { log } from "./util"
2
+ import { log , warn } from "./util"
3
3
import { basename } from "path"
4
4
import { parse as parseUrl } from "url"
5
5
import * as mime from "mime"
@@ -31,7 +31,7 @@ export class GitHubPublisher implements Publisher {
31
31
return this . _releasePromise
32
32
}
33
33
34
- constructor ( private owner : string , private repo : string , version : string , private token : string | null , private createReleaseIfNotExists : boolean = true ) {
34
+ constructor ( private owner : string , private repo : string , version : string , private token : string | null , private policy : string = "always" ) {
35
35
if ( token == null || token . length === 0 ) {
36
36
throw new Error ( "GitHub Personal Access Token is not specified" )
37
37
}
@@ -41,23 +41,31 @@ export class GitHubPublisher implements Publisher {
41
41
}
42
42
43
43
private async init ( ) : Promise < Release | null > {
44
+ const createReleaseIfNotExists = this . policy !== "onTagOrDraft"
44
45
// we don't use "Get a release by tag name" because "tag name" means existing git tag, but we draft release and don't create git tag
45
46
const releases = await gitHubRequest < Array < Release > > ( `/repos/${ this . owner } /${ this . repo } /releases` , this . token )
46
47
for ( let release of releases ) {
47
- if ( release ! . tag_name === this . tag ) {
48
- if ( ! release ! . draft ) {
49
- if ( this . createReleaseIfNotExists ) {
48
+ if ( release . tag_name === this . tag ) {
49
+ if ( ! release . draft ) {
50
+ if ( this . policy === "onTag" ) {
50
51
throw new Error ( "Release must be a draft" )
51
52
}
52
53
else {
54
+ const message = `Release ${ this . tag } is not a draft, artifacts will be not published`
55
+ if ( this . policy === "always" ) {
56
+ warn ( message )
57
+ }
58
+ else {
59
+ log ( message )
60
+ }
53
61
return null
54
62
}
55
63
}
56
64
return release !
57
65
}
58
66
}
59
67
60
- if ( this . createReleaseIfNotExists ) {
68
+ if ( createReleaseIfNotExists ) {
61
69
log ( "Release %s doesn't exists, creating one" , this . tag )
62
70
return this . createRelease ( )
63
71
}
0 commit comments