@@ -19,23 +19,27 @@ type ReleaseSet struct {
1919}
2020
2121type ReleaseCreateSet struct {
22- Fs * flag.FlagSet
23- Version string
24- PatchLevel string
25- PrNumber int
26- DryRun bool
27- Body string
22+ Fs * flag.FlagSet
23+ Version string
24+ PatchLevel string
25+ PrNumber int
26+ MergeCommitSHA string
27+ ReleaseBranch string
28+ DryRun bool
29+ Body string
2830}
2931
3032type ReleasePublishSet struct {
31- Fs * flag.FlagSet
32- Version string
33- PatchLevel string
34- ReleaseId int64
35- Assets string
36- PrNumber int
37- DryRun bool
38- Body string
33+ Fs * flag.FlagSet
34+ Version string
35+ PatchLevel string
36+ ReleaseId int64
37+ Assets string
38+ PrNumber int
39+ MergeCommitSHA string
40+ ReleaseBranch string
41+ DryRun bool
42+ Body string
3943}
4044
4145func ReleaseCreate (args * ReleaseCreateSet ) {
@@ -53,22 +57,28 @@ func ReleaseCreate(args *ReleaseCreateSet) {
5357 } else if args .Version != "" && args .PatchLevel == "" {
5458 version = args .Version
5559 } else {
56- prNumber , err := evalPrNumber (& args .PrNumber )
57- if err != nil {
58- log .Fatalln (err )
60+ // if no merge commit sha is provided, the pull request number should either be specified or evaluated from the merge message (fallback)
61+ if args .MergeCommitSHA == "" {
62+ err := evalPrNumber (& args .PrNumber )
63+ if err != nil {
64+ log .Fatalln (err )
65+ }
5966 }
60- prInfos , _ , err := acigithub .GetPrInfos (prNumber )
67+ prInfos , _ , err := acigithub .GetPrInfos (args . PrNumber , args . MergeCommitSHA )
6168 if err != nil {
6269 log .Fatalln (err )
6370 }
6471 version = prInfos .NextVersion
72+ if errEnvs := standardPrInfosToEnv (prInfos ); errEnvs != nil {
73+ log .Fatalln (errEnvs )
74+ }
6575 }
6676
6777 if args .DryRun {
6878 fmt .Printf ("Would create new release with version: %s\n " , version )
6979 } else {
7080 fmt .Printf ("Writing new release: %s\n " , version )
71- createdRelease , err := acigithub .CreateRelease (version , args .Body , true )
81+ createdRelease , err := acigithub .CreateRelease (version , args .ReleaseBranch , args . Body , true )
7282 if err != nil {
7383 log .Fatalln (err )
7484 }
@@ -91,15 +101,21 @@ func ReleasePublish(args *ReleasePublishSet) {
91101 } else if args .Version != "" && args .PatchLevel == "" {
92102 version = args .Version
93103 } else if args .ReleaseId == 0 {
94- prNumber , err := evalPrNumber (& args .PrNumber )
95- if err != nil {
96- log .Fatalln (err )
104+ // if no merge commit sha is provided, the pull request number should either be specified or evaluated from the merge message (fallback)
105+ if args .MergeCommitSHA == "" {
106+ err := evalPrNumber (& args .PrNumber )
107+ if err != nil {
108+ log .Fatalln (err )
109+ }
97110 }
98- prInfos , _ , err := acigithub .GetPrInfos (prNumber )
111+ prInfos , _ , err := acigithub .GetPrInfos (args . PrNumber , args . MergeCommitSHA )
99112 if err != nil {
100113 log .Fatalln (err )
101114 }
102115 version = prInfos .NextVersion
116+ if errEnvs := standardPrInfosToEnv (prInfos ); errEnvs != nil {
117+ log .Fatalln (errEnvs )
118+ }
103119 }
104120
105121 if args .Assets != "" {
@@ -113,26 +129,22 @@ func ReleasePublish(args *ReleasePublishSet) {
113129 fmt .Printf ("Would publishing release: %s\n " , version )
114130 } else {
115131 fmt .Printf ("Publishing release: %s - %d\n " , version , args .ReleaseId )
116- err = acigithub .PublishRelease (version , args .Body , args .ReleaseId , & args .Assets )
132+ err = acigithub .PublishRelease (version , args .ReleaseBranch , args . Body , args .ReleaseId , & args .Assets )
117133 if err != nil {
118134 log .Fatalln (err )
119135 }
120136 }
121137}
122138
123- func evalPrNumber (override * int ) (prNumber int , err error ) {
139+ func evalPrNumber (override * int ) (err error ) {
124140 if * override != 0 {
125- return * override , nil
141+ return nil
126142 }
127143
128- prNumber , err = getPrFromMergeMessage ()
144+ * override , err = getPrFromMergeMessage ()
129145 if err != nil {
130- log . Fatalln ( err )
146+ return err
131147 }
132-
133- /* if prNumber == 0 {
134- // tags, _, _ := CiEnvironment.Clients.GithubClient.Repositories.ListTags()
135- } */
136148 return
137149}
138150
@@ -146,6 +158,7 @@ func getPrFromMergeMessage() (pr int, err error) {
146158 } else {
147159 return 0 , errors .New ("No PR found in merge message pls make shure this regex matches: " + regex +
148160 "\n Example: Merge pull request #3 from some-orga/feature/awesome-feature" +
149- "\n If you like to set your patch level manually by flag: -level (feautre|bugfix)" )
161+ "\n If you like to set your patch level manually by flag: -level (feautre|bugfix)" +
162+ "\n Or use the -merge-sha option!" )
150163 }
151164}
0 commit comments