diff --git a/cmd/build/cmd_workflow.go b/cmd/build/cmd_workflow.go index ed84f1f..7a3eb2d 100644 --- a/cmd/build/cmd_workflow.go +++ b/cmd/build/cmd_workflow.go @@ -15,6 +15,7 @@ import ( var ( releaseWorkflowPathInput string + releaseWorkflowWorkflowPathInput string releaseWorkflowWorkflowPathHyphenInput string releaseWorkflowWorkflowPathSnakeInput string releaseWorkflowOutputPathHyphenInput string @@ -29,6 +30,7 @@ var ( // rather than by call-site position. type releaseWorkflowInputs struct { pathInput string + workflowPathInput string workflowPathHyphenInput string workflowPathSnakeInput string outputPathHyphenInput string @@ -44,6 +46,7 @@ var releaseWorkflowCmd = &cli.Command{ RunE: func(cmd *cli.Command, args []string) error { return runReleaseWorkflow(cmd.Context(), releaseWorkflowInputs{ pathInput: releaseWorkflowPathInput, + workflowPathInput: releaseWorkflowWorkflowPathInput, workflowPathHyphenInput: releaseWorkflowWorkflowPathHyphenInput, workflowPathSnakeInput: releaseWorkflowWorkflowPathSnakeInput, outputPathHyphenInput: releaseWorkflowOutputPathHyphenInput, @@ -63,6 +66,7 @@ func setWorkflowI18n() { func initWorkflowFlags() { releaseWorkflowCmd.Flags().StringVar(&releaseWorkflowPathInput, "path", "", i18n.T("cmd.build.workflow.flag.path")) + releaseWorkflowCmd.Flags().StringVar(&releaseWorkflowWorkflowPathInput, "workflowPath", "", i18n.T("cmd.build.workflow.flag.path")) releaseWorkflowCmd.Flags().StringVar(&releaseWorkflowWorkflowPathHyphenInput, "workflow-path", "", i18n.T("cmd.build.workflow.flag.path")) releaseWorkflowCmd.Flags().StringVar(&releaseWorkflowWorkflowPathSnakeInput, "workflow_path", "", i18n.T("cmd.build.workflow.flag.path")) releaseWorkflowCmd.Flags().StringVar(&releaseWorkflowOutputPathHyphenInput, "output-path", "", i18n.T("cmd.build.workflow.flag.output_path")) @@ -86,6 +90,7 @@ func AddWorkflowCommand(buildCmd *cli.Command) { // buildcmd.AddWorkflowCommand(buildCmd) // runReleaseWorkflow(ctx, releaseWorkflowInputs{}) // writes to .github/workflows/release.yml // runReleaseWorkflow(ctx, releaseWorkflowInputs{pathInput: "ci/release.yml"}) // writes to ./ci/release.yml under the project root +// runReleaseWorkflow(ctx, releaseWorkflowInputs{workflowPathInput: "ci/release.yml"}) // uses the workflowPath alias // runReleaseWorkflow(ctx, releaseWorkflowInputs{workflowPathHyphenInput: "ci/release.yml"}) // uses the workflow-path alias // runReleaseWorkflow(ctx, releaseWorkflowInputs{workflowPathSnakeInput: "ci/release.yml"}) // uses the workflow_path alias // runReleaseWorkflow(ctx, releaseWorkflowInputs{workflowOutputPathInput: "ci/release.yml"}) // uses the workflowOutputPath alias @@ -98,6 +103,7 @@ func runReleaseWorkflow(_ context.Context, inputs releaseWorkflowInputs) error { resolvedWorkflowPath, err := resolveReleaseWorkflowInputPathAliases( projectDir, inputs.pathInput, + inputs.workflowPathInput, inputs.workflowPathHyphenInput, inputs.workflowPathSnakeInput, ) @@ -123,12 +129,12 @@ func runReleaseWorkflow(_ context.Context, inputs releaseWorkflowInputs) error { // resolveReleaseWorkflowInputPathAliases keeps the CLI error wording stable while // delegating the conflict detection to the shared build helper. -func resolveReleaseWorkflowInputPathAliases(projectDir, pathInput, workflowPathHyphenInput, workflowPathSnakeInput string) (string, error) { +func resolveReleaseWorkflowInputPathAliases(projectDir, pathInput, workflowPathInput, workflowPathHyphenInput, workflowPathSnakeInput string) (string, error) { resolvedWorkflowPath, err := build.ResolveReleaseWorkflowInputPathAliases( io.Local, projectDir, pathInput, - "", + workflowPathInput, workflowPathSnakeInput, workflowPathHyphenInput, ) diff --git a/cmd/build/cmd_workflow_test.go b/cmd/build/cmd_workflow_test.go index 8fc745d..5f616d0 100644 --- a/cmd/build/cmd_workflow_test.go +++ b/cmd/build/cmd_workflow_test.go @@ -88,7 +88,15 @@ func TestBuildCmd_resolveReleaseWorkflowOutputPathAliases_AbsoluteEquivalent_Goo func TestBuildCmd_resolveReleaseWorkflowInputPathAliases_Good(t *testing.T) { projectDir := t.TempDir() - path, err := resolveReleaseWorkflowInputPathAliases(projectDir, "ci/release.yml", "", "") + path, err := resolveReleaseWorkflowInputPathAliases(projectDir, "ci/release.yml", "", "", "") + require.NoError(t, err) + assert.Equal(t, ax.Join(projectDir, "ci", "release.yml"), path) +} + +func TestBuildCmd_resolveReleaseWorkflowInputPathAliases_WorkflowPathGood(t *testing.T) { + projectDir := t.TempDir() + + path, err := resolveReleaseWorkflowInputPathAliases(projectDir, "", "ci/release.yml", "", "") require.NoError(t, err) assert.Equal(t, ax.Join(projectDir, "ci", "release.yml"), path) } @@ -96,7 +104,7 @@ func TestBuildCmd_resolveReleaseWorkflowInputPathAliases_Good(t *testing.T) { func TestBuildCmd_resolveReleaseWorkflowInputPathAliases_Bad(t *testing.T) { projectDir := t.TempDir() - _, err := resolveReleaseWorkflowInputPathAliases(projectDir, "ci/release.yml", "ops/release.yml", "") + _, err := resolveReleaseWorkflowInputPathAliases(projectDir, "ci/release.yml", "ops/release.yml", "", "") require.Error(t, err) assert.Contains(t, err.Error(), "workflow path aliases specify different locations") } @@ -123,6 +131,7 @@ func TestBuildCmd_RunReleaseWorkflow_Good(t *testing.T) { AddWorkflowCommand(buildCmd) pathFlag := releaseWorkflowCmd.Flags().Lookup("path") + workflowPathCamelFlag := releaseWorkflowCmd.Flags().Lookup("workflowPath") workflowPathFlag := releaseWorkflowCmd.Flags().Lookup("workflow-path") workflowPathSnakeFlag := releaseWorkflowCmd.Flags().Lookup("workflow_path") outputPathFlag := releaseWorkflowCmd.Flags().Lookup("output-path") @@ -133,6 +142,7 @@ func TestBuildCmd_RunReleaseWorkflow_Good(t *testing.T) { workflowOutputPathSnakeFlag := releaseWorkflowCmd.Flags().Lookup("workflow_output_path") assert.NotNil(t, pathFlag) + assert.NotNil(t, workflowPathCamelFlag) assert.NotNil(t, workflowPathFlag) assert.NotNil(t, workflowPathSnakeFlag) assert.NotNil(t, outputPathFlag) @@ -141,6 +151,7 @@ func TestBuildCmd_RunReleaseWorkflow_Good(t *testing.T) { assert.NotNil(t, workflowOutputPathFlag) assert.NotNil(t, workflowOutputPathSnakeFlag) assert.NotEmpty(t, pathFlag.Usage) + assert.NotEmpty(t, workflowPathCamelFlag.Usage) assert.NotEmpty(t, workflowPathFlag.Usage) assert.NotEmpty(t, workflowPathSnakeFlag.Usage) assert.NotEmpty(t, outputPathFlag.Usage) @@ -150,6 +161,7 @@ func TestBuildCmd_RunReleaseWorkflow_Good(t *testing.T) { assert.NotEmpty(t, workflowOutputPathFlag.Usage) assert.NotEmpty(t, workflowOutputPathSnakeFlag.Usage) assert.NotEqual(t, pathFlag.Usage, outputFlag.Usage) + assert.Equal(t, pathFlag.Usage, workflowPathCamelFlag.Usage) assert.Equal(t, pathFlag.Usage, workflowPathFlag.Usage) assert.Equal(t, workflowPathFlag.Usage, workflowPathSnakeFlag.Usage) assert.NotEqual(t, outputPathFlag.Usage, outputFlag.Usage)