Skip to content

Commit

Permalink
Update draft PR control (#912)
Browse files Browse the repository at this point in the history
* Update draft PR control

* In progress code cleanup

* update draft pr trigger check param (#913)

* update draft pr trigger check param

* updated tests

* updated trigger options help text

* cleanup

* updated tests

* updated tests

* tests updated

* Improve shouldSkipDraftPRTrigger var name

* Test PR trigger map

* Add comment for clarifying PullRequestReadyStateConvertedToReadyForReview status handling

---------

Co-authored-by: Tamas Papik <[email protected]>
  • Loading branch information
godrei and trapacska authored Jan 19, 2024
1 parent 0e9b1ac commit 585c90c
Show file tree
Hide file tree
Showing 10 changed files with 261 additions and 77 deletions.
2 changes: 1 addition & 1 deletion _tests/integration/new_trigger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ func Test_NewTrigger(t *testing.T) {
config := map[string]interface{}{
"config": configPth,
"pr-source-branch": "no_draft_pr",
"draft-pr": true,
"pr-ready-state": "draft",
"format": "json",
}

Expand Down
4 changes: 2 additions & 2 deletions cli/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const (
PushBranchKey = "push-branch"
PRSourceBranchKey = "pr-source-branch"
PRTargetBranchKey = "pr-target-branch"
DraftPRKey = "draft-pr"
PRReadyStateKey = "pr-ready-state"

ConfigKey = "config"
InventoryKey = "inventory"
Expand Down Expand Up @@ -60,7 +60,7 @@ var (
cli.StringFlag{Name: PushBranchKey, Usage: "Git push branch name."},
cli.StringFlag{Name: PRSourceBranchKey, Usage: "Git pull request source branch name."},
cli.StringFlag{Name: PRTargetBranchKey, Usage: "Git pull request target branch name."},
cli.BoolFlag{Name: DraftPRKey, Usage: "Is the pull request in draft state?"},
cli.StringFlag{Name: PRReadyStateKey, Usage: "Git pull request ready state. Options: ready_for_review draft converted_to_ready_for_review"},
cli.StringFlag{Name: TagKey, Usage: "Git tag name."},

cli.StringFlag{Name: OuputFormatKey, Usage: "Output format. Accepted: json, yml."},
Expand Down
28 changes: 15 additions & 13 deletions cli/run_trigger_params.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package cli
import (
"encoding/base64"
"encoding/json"

"github.com/bitrise-io/bitrise/models"
)

// --------------------
Expand All @@ -17,11 +19,11 @@ type RunAndTriggerParamsModel struct {
// Trigger Params
TriggerPattern string `json:"pattern"`

PushBranch string `json:"push-branch"`
PRSourceBranch string `json:"pr-source-branch"`
PRTargetBranch string `json:"pr-target-branch"`
IsDraftPR bool `json:"draft-pr"`
Tag string `json:"tag"`
PushBranch string `json:"push-branch"`
PRSourceBranch string `json:"pr-source-branch"`
PRTargetBranch string `json:"pr-target-branch"`
PRReadyState models.PullRequestReadyState `json:"pr-ready-state"`
Tag string `json:"tag"`

// Trigger Check Params
Format string `json:"format"`
Expand All @@ -45,7 +47,7 @@ func parseRunAndTriggerJSONParams(jsonParams string) (RunAndTriggerParamsModel,
func parseRunAndTriggerParams(
workflowToRunID,
triggerPattern,
pushBranch, prSourceBranch, prTargetBranch string, isDraftPR *bool, tag,
pushBranch, prSourceBranch, prTargetBranch string, prReadyState models.PullRequestReadyState, tag,
format,
bitriseConfigPath, bitriseConfigBase64Data,
inventoryPath, inventoryBase64Data,
Expand Down Expand Up @@ -87,8 +89,8 @@ func parseRunAndTriggerParams(
if prTargetBranch != "" {
params.PRTargetBranch = prTargetBranch
}
if isDraftPR != nil {
params.IsDraftPR = *isDraftPR
if prReadyState != "" {
params.PRReadyState = prReadyState
}
if tag != "" {
params.Tag = tag
Expand Down Expand Up @@ -119,24 +121,24 @@ func parseRunParams(
bitriseConfigPath, bitriseConfigBase64Data,
inventoryPath, inventoryBase64Data,
jsonParams, base64JSONParams string) (RunAndTriggerParamsModel, error) {
return parseRunAndTriggerParams(workflowToRunID, "", "", "", "", nil, "", "", bitriseConfigPath, bitriseConfigBase64Data, inventoryPath, inventoryBase64Data, jsonParams, base64JSONParams)
return parseRunAndTriggerParams(workflowToRunID, "", "", "", "", "", "", "", bitriseConfigPath, bitriseConfigBase64Data, inventoryPath, inventoryBase64Data, jsonParams, base64JSONParams)
}

func parseTriggerParams(
triggerPattern,
pushBranch, prSourceBranch, prTargetBranch string, isDraftPR *bool, tag,
pushBranch, prSourceBranch, prTargetBranch string, prReadyState models.PullRequestReadyState, tag,
bitriseConfigPath, bitriseConfigBase64Data,
inventoryPath, inventoryBase64Data,
jsonParams, base64JSONParams string) (RunAndTriggerParamsModel, error) {
return parseRunAndTriggerParams("", triggerPattern, pushBranch, prSourceBranch, prTargetBranch, isDraftPR, tag, "", bitriseConfigPath, bitriseConfigBase64Data, inventoryPath, inventoryBase64Data, jsonParams, base64JSONParams)
return parseRunAndTriggerParams("", triggerPattern, pushBranch, prSourceBranch, prTargetBranch, prReadyState, tag, "", bitriseConfigPath, bitriseConfigBase64Data, inventoryPath, inventoryBase64Data, jsonParams, base64JSONParams)
}

func parseTriggerCheckParams(
triggerPattern,
pushBranch, prSourceBranch, prTargetBranch string, isDraftPR *bool, tag,
pushBranch, prSourceBranch, prTargetBranch string, prReadyState models.PullRequestReadyState, tag,
format,
bitriseConfigPath, bitriseConfigBase64Data,
inventoryPath, inventoryBase64Data,
jsonParams, base64JSONParams string) (RunAndTriggerParamsModel, error) {
return parseRunAndTriggerParams("", triggerPattern, pushBranch, prSourceBranch, prTargetBranch, isDraftPR, tag, format, bitriseConfigPath, bitriseConfigBase64Data, inventoryPath, inventoryBase64Data, jsonParams, base64JSONParams)
return parseRunAndTriggerParams("", triggerPattern, pushBranch, prSourceBranch, prTargetBranch, prReadyState, tag, format, bitriseConfigPath, bitriseConfigBase64Data, inventoryPath, inventoryBase64Data, jsonParams, base64JSONParams)
}
60 changes: 30 additions & 30 deletions cli/run_trigger_params_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"encoding/json"
"testing"

"github.com/bitrise-io/go-utils/pointers"
"github.com/bitrise-io/bitrise/models"
"github.com/stretchr/testify/require"
)

Expand All @@ -30,7 +30,7 @@ func TestParseRunAndTriggerJSONParams(t *testing.T) {
PushBranchKey: "deploy",
PRSourceBranchKey: "development",
PRTargetBranchKey: "release",
DraftPRKey: true,
PRReadyStateKey: models.PullRequestReadyStateReadyForReview,
TagKey: "0.9.0",

OuputFormatKey: "json",
Expand All @@ -50,7 +50,7 @@ func TestParseRunAndTriggerJSONParams(t *testing.T) {
require.Equal(t, "deploy", params.PushBranch)
require.Equal(t, "development", params.PRSourceBranch)
require.Equal(t, "release", params.PRTargetBranch)
require.Equal(t, true, params.IsDraftPR)
require.Equal(t, models.PullRequestReadyStateReadyForReview, params.PRReadyState)
require.Equal(t, "0.9.0", params.Tag)

require.Equal(t, "json", params.Format)
Expand All @@ -73,7 +73,7 @@ func TestParseRunAndTriggerJSONParams(t *testing.T) {
require.Equal(t, "", params.PushBranch)
require.Equal(t, "", params.PRSourceBranch)
require.Equal(t, "", params.PRTargetBranch)
require.Equal(t, false, params.IsDraftPR)
require.Equal(t, models.PullRequestReadyState(""), params.PRReadyState)

require.Equal(t, "", params.Format)

Expand All @@ -94,7 +94,7 @@ func TestParseRunAndTriggerParams(t *testing.T) {
pushBranch := "master"
prSourceBranch := "develop"
prTargetBranch := "master"
isDraftPR := pointers.NewBoolPtr(true)
prReadyState := models.PullRequestReadyStateReadyForReview
tag := "0.9.0"
format := "json"

Expand All @@ -110,7 +110,7 @@ func TestParseRunAndTriggerParams(t *testing.T) {
params, err := parseRunAndTriggerParams(
workflow,
pattern,
pushBranch, prSourceBranch, prTargetBranch, isDraftPR, tag,
pushBranch, prSourceBranch, prTargetBranch, prReadyState, tag,
format,
bitriseConfigPath, bitriseConfigBase64Data,
inventoryPath, inventoryBase64Data,
Expand All @@ -124,7 +124,7 @@ func TestParseRunAndTriggerParams(t *testing.T) {
require.Equal(t, pushBranch, params.PushBranch)
require.Equal(t, prSourceBranch, params.PRSourceBranch)
require.Equal(t, prTargetBranch, params.PRTargetBranch)
require.Equal(t, true, params.IsDraftPR)
require.Equal(t, models.PullRequestReadyStateReadyForReview, params.PRReadyState)
require.Equal(t, tag, params.Tag)

require.Equal(t, format, params.Format)
Expand All @@ -144,7 +144,7 @@ func TestParseRunAndTriggerParams(t *testing.T) {
pushBranch := "master"
prSourceBranch := "develop"
prTargetBranch := "master"
isDraftPR := true
prReadyState := models.PullRequestReadyStateDraft
tag := "0.9.0"
format := "json"

Expand All @@ -161,7 +161,7 @@ func TestParseRunAndTriggerParams(t *testing.T) {
PushBranchKey: pushBranch,
PRSourceBranchKey: prSourceBranch,
PRTargetBranchKey: prTargetBranch,
DraftPRKey: isDraftPR,
PRReadyStateKey: prReadyState,
TagKey: tag,
OuputFormatKey: format,

Expand All @@ -175,7 +175,7 @@ func TestParseRunAndTriggerParams(t *testing.T) {
jsonParams := toJSON(t, paramsMap)
base64JSONParams := ""

params, err := parseRunAndTriggerParams("", "", "", "", "", nil, "", "", "", "", "", "", jsonParams, base64JSONParams)
params, err := parseRunAndTriggerParams("", "", "", "", "", "", "", "", "", "", "", "", jsonParams, base64JSONParams)
require.NoError(t, err)

require.Equal(t, workflow, params.WorkflowToRunID)
Expand All @@ -184,7 +184,7 @@ func TestParseRunAndTriggerParams(t *testing.T) {
require.Equal(t, pushBranch, params.PushBranch)
require.Equal(t, prSourceBranch, params.PRSourceBranch)
require.Equal(t, prTargetBranch, params.PRTargetBranch)
require.Equal(t, true, params.IsDraftPR)
require.Equal(t, models.PullRequestReadyState("draft"), params.PRReadyState)
require.Equal(t, tag, params.Tag)

require.Equal(t, format, params.Format)
Expand All @@ -204,7 +204,7 @@ func TestParseRunAndTriggerParams(t *testing.T) {
pushBranch := "master"
prSourceBranch := "develop"
prTargetBranch := "master"
isDraftPR := true
prReadyState := models.PullRequestReadyStateDraft
tag := "0.9.0"
format := "json"

Expand All @@ -221,7 +221,7 @@ func TestParseRunAndTriggerParams(t *testing.T) {
PushBranchKey: pushBranch,
PRSourceBranchKey: prSourceBranch,
PRTargetBranchKey: prTargetBranch,
DraftPRKey: isDraftPR,
PRReadyStateKey: prReadyState,
TagKey: tag,
OuputFormatKey: format,

Expand All @@ -235,7 +235,7 @@ func TestParseRunAndTriggerParams(t *testing.T) {
jsonParams := ""
base64JSONParams := toBase64(t, toJSON(t, paramsMap))

params, err := parseRunAndTriggerParams("", "", "", "", "", nil, "", "", "", "", "", "", jsonParams, base64JSONParams)
params, err := parseRunAndTriggerParams("", "", "", "", "", "", "", "", "", "", "", "", jsonParams, base64JSONParams)
require.NoError(t, err)

require.Equal(t, workflow, params.WorkflowToRunID)
Expand All @@ -244,7 +244,7 @@ func TestParseRunAndTriggerParams(t *testing.T) {
require.Equal(t, pushBranch, params.PushBranch)
require.Equal(t, prSourceBranch, params.PRSourceBranch)
require.Equal(t, prTargetBranch, params.PRTargetBranch)
require.Equal(t, true, params.IsDraftPR)
require.Equal(t, models.PullRequestReadyState("draft"), params.PRReadyState)
require.Equal(t, tag, params.Tag)

require.Equal(t, format, params.Format)
Expand All @@ -264,7 +264,7 @@ func TestParseRunAndTriggerParams(t *testing.T) {
pushBranch := "master"
prSourceBranch := "develop"
prTargetBranch := "master"
isDraftPR := false
prReadyState := models.PullRequestReadyStateReadyForReview
tag := "0.9.0"
format := "json"

Expand All @@ -281,7 +281,7 @@ func TestParseRunAndTriggerParams(t *testing.T) {
PushBranchKey: pushBranch,
PRSourceBranchKey: prSourceBranch,
PRTargetBranchKey: prTargetBranch,
DraftPRKey: isDraftPR,
PRReadyStateKey: prReadyState,
TagKey: tag,
OuputFormatKey: format,

Expand All @@ -292,10 +292,10 @@ func TestParseRunAndTriggerParams(t *testing.T) {
InventoryBase64Key: inventoryBase64Data,
}

jsonParams := `{"workflow":"test","draft-pr":true}`
jsonParams := `{"workflow":"test","pr-ready-state":"draft"}`
base64JSONParams := toBase64(t, toJSON(t, paramsMap))

params, err := parseRunAndTriggerParams("", "", "", "", "", nil, "", "", "", "", "", "", jsonParams, base64JSONParams)
params, err := parseRunAndTriggerParams("", "", "", "", "", "", "", "", "", "", "", "", jsonParams, base64JSONParams)
require.NoError(t, err)

require.Equal(t, "test", params.WorkflowToRunID)
Expand All @@ -304,7 +304,7 @@ func TestParseRunAndTriggerParams(t *testing.T) {
require.Equal(t, "", params.PushBranch)
require.Equal(t, "", params.PRSourceBranch)
require.Equal(t, "", params.PRTargetBranch)
require.Equal(t, true, params.IsDraftPR)
require.Equal(t, models.PullRequestReadyStateDraft, params.PRReadyState)
require.Equal(t, "", params.Tag)

require.Equal(t, "", params.Format)
Expand All @@ -324,7 +324,7 @@ func TestParseRunAndTriggerParams(t *testing.T) {
pushBranch := "master"
prSourceBranch := "develop"
prTargetBranch := "master"
isDraftPR := pointers.NewBoolPtr(true)
prReadyState := models.PullRequestReadyStateDraft
tag := "0.9.0"
format := "json"

Expand All @@ -340,7 +340,7 @@ func TestParseRunAndTriggerParams(t *testing.T) {
params, err := parseRunAndTriggerParams(
workflow,
pattern,
pushBranch, prSourceBranch, prTargetBranch, isDraftPR, tag,
pushBranch, prSourceBranch, prTargetBranch, prReadyState, tag,
format,
bitriseConfigPath, bitriseConfigBase64Data,
inventoryPath, inventoryBase64Data,
Expand All @@ -354,7 +354,7 @@ func TestParseRunAndTriggerParams(t *testing.T) {
require.Equal(t, pushBranch, params.PushBranch)
require.Equal(t, prSourceBranch, params.PRSourceBranch)
require.Equal(t, prTargetBranch, params.PRTargetBranch)
require.Equal(t, true, params.IsDraftPR)
require.Equal(t, models.PullRequestReadyStateDraft, params.PRReadyState)
require.Equal(t, tag, params.Tag)

require.Equal(t, format, params.Format)
Expand Down Expand Up @@ -395,7 +395,7 @@ func TestParseRunParams(t *testing.T) {
require.Equal(t, "", params.PushBranch)
require.Equal(t, "", params.PRSourceBranch)
require.Equal(t, "", params.PRTargetBranch)
require.Equal(t, false, params.IsDraftPR)
require.Equal(t, models.PullRequestReadyState(""), params.PRReadyState)
require.Equal(t, "", params.Tag)

require.Equal(t, "", params.Format)
Expand All @@ -415,7 +415,7 @@ func TestParseTriggerParams(t *testing.T) {
pushBranch := "master"
prSourceBranch := "develop"
prTargetBranch := "master"
isDraftPR := pointers.NewBoolPtr(true)
prReadyState := models.PullRequestReadyStateDraft
tag := "0.9.0"

bitriseConfigPath := "bitrise.yml"
Expand All @@ -429,7 +429,7 @@ func TestParseTriggerParams(t *testing.T) {

params, err := parseTriggerParams(
pattern,
pushBranch, prSourceBranch, prTargetBranch, isDraftPR, tag,
pushBranch, prSourceBranch, prTargetBranch, prReadyState, tag,
bitriseConfigPath, bitriseConfigBase64Data,
inventoryPath, inventoryBase64Data,
jsonParams, base64JSONParams,
Expand All @@ -442,7 +442,7 @@ func TestParseTriggerParams(t *testing.T) {
require.Equal(t, pushBranch, params.PushBranch)
require.Equal(t, prSourceBranch, params.PRSourceBranch)
require.Equal(t, prTargetBranch, params.PRTargetBranch)
require.Equal(t, true, params.IsDraftPR)
require.Equal(t, models.PullRequestReadyStateDraft, params.PRReadyState)
require.Equal(t, tag, params.Tag)

require.Equal(t, "", params.Format)
Expand All @@ -462,7 +462,7 @@ func TestParseTriggerCheckParams(t *testing.T) {
pushBranch := "master"
prSourceBranch := "develop"
prTargetBranch := "master"
isDraftPR := pointers.NewBoolPtr(true)
prReadyState := models.PullRequestReadyStateDraft
tag := "0.9.0"
format := "json"

Expand All @@ -477,7 +477,7 @@ func TestParseTriggerCheckParams(t *testing.T) {

params, err := parseTriggerCheckParams(
pattern,
pushBranch, prSourceBranch, prTargetBranch, isDraftPR, tag,
pushBranch, prSourceBranch, prTargetBranch, prReadyState, tag,
format,
bitriseConfigPath, bitriseConfigBase64Data,
inventoryPath, inventoryBase64Data,
Expand All @@ -491,7 +491,7 @@ func TestParseTriggerCheckParams(t *testing.T) {
require.Equal(t, pushBranch, params.PushBranch)
require.Equal(t, prSourceBranch, params.PRSourceBranch)
require.Equal(t, prTargetBranch, params.PRTargetBranch)
require.Equal(t, true, params.IsDraftPR)
require.Equal(t, models.PullRequestReadyStateDraft, params.PRReadyState)
require.Equal(t, tag, params.Tag)

require.Equal(t, format, params.Format)
Expand Down
9 changes: 3 additions & 6 deletions cli/trigger.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ var triggerCommand = cli.Command{
cli.StringFlag{Name: PushBranchKey, Usage: "Git push branch name."},
cli.StringFlag{Name: PRSourceBranchKey, Usage: "Git pull request source branch name."},
cli.StringFlag{Name: PRTargetBranchKey, Usage: "Git pull request target branch name."},
cli.BoolFlag{Name: DraftPRKey, Usage: "Is the pull request in draft state?"},
cli.StringFlag{Name: PRReadyStateKey, Usage: "Git pull request ready state. Options: ready_for_review draft converted_to_ready_for_review"},
cli.StringFlag{Name: TagKey, Usage: "Git tag name."},

// cli params used in CI mode
Expand Down Expand Up @@ -101,10 +101,7 @@ func trigger(c *cli.Context) error {
pushBranch := c.String(PushBranchKey)
prSourceBranch := c.String(PRSourceBranchKey)
prTargetBranch := c.String(PRTargetBranchKey)
var isDraftPR *bool
if c.IsSet(DraftPRKey) {
isDraftPR = pointers.NewBoolPtr(c.Bool(DraftPRKey))
}
prReadyState := models.PullRequestReadyState(c.String(PRReadyStateKey))
tag := c.String(TagKey)

bitriseConfigBase64Data := c.String(ConfigBase64Key)
Expand All @@ -118,7 +115,7 @@ func trigger(c *cli.Context) error {

triggerParams, err := parseTriggerParams(
triggerPattern,
pushBranch, prSourceBranch, prTargetBranch, isDraftPR, tag,
pushBranch, prSourceBranch, prTargetBranch, prReadyState, tag,
bitriseConfigPath, bitriseConfigBase64Data,
inventoryPath, inventoryBase64Data,
jsonParams, jsonParamsBase64)
Expand Down
Loading

0 comments on commit 585c90c

Please sign in to comment.