2020-03-20 19:20:52 +02:00
// Code generated by piper's step-generator. DO NOT EDIT.
package cmd
import (
"fmt"
"os"
"time"
"github.com/SAP/jenkins-library/pkg/config"
"github.com/SAP/jenkins-library/pkg/log"
"github.com/SAP/jenkins-library/pkg/telemetry"
"github.com/spf13/cobra"
)
type nexusUploadOptions struct {
2020-04-03 21:32:38 +02:00
Version string ` json:"version,omitempty" `
Url string ` json:"url,omitempty" `
2020-04-11 12:56:44 +02:00
MavenRepository string ` json:"mavenRepository,omitempty" `
NpmRepository string ` json:"npmRepository,omitempty" `
2020-04-03 21:32:38 +02:00
GroupID string ` json:"groupId,omitempty" `
ArtifactID string ` json:"artifactId,omitempty" `
GlobalSettingsFile string ` json:"globalSettingsFile,omitempty" `
M2Path string ` json:"m2Path,omitempty" `
2020-09-16 11:33:03 +02:00
Username string ` json:"username,omitempty" `
2020-04-03 21:32:38 +02:00
Password string ` json:"password,omitempty" `
2020-03-20 19:20:52 +02:00
}
2020-04-11 12:56:44 +02:00
// NexusUploadCommand Upload artifacts to Nexus Repository Manager
2020-03-20 19:20:52 +02:00
func NexusUploadCommand ( ) * cobra . Command {
2020-04-28 07:42:02 +02:00
const STEP_NAME = "nexusUpload"
2020-03-20 19:20:52 +02:00
metadata := nexusUploadMetadata ( )
var stepConfig nexusUploadOptions
var startTime time . Time
var createNexusUploadCmd = & cobra . Command {
2020-04-28 07:42:02 +02:00
Use : STEP_NAME ,
2020-04-11 12:56:44 +02:00
Short : "Upload artifacts to Nexus Repository Manager" ,
Long : ` Upload build artifacts to a Nexus Repository Manager .
Supports MTA , npm and ( multi - module ) Maven projects .
MTA files will be uploaded to a Maven repository .
The uploaded file - type depends on your project structure and step configuration .
To upload Maven projects , you need a pom . xml in the project root and set the mavenRepository option .
To upload MTA projects , you need a mta . yaml in the project root and set the mavenRepository option .
To upload npm projects , you need a package . json in the project root and set the npmRepository option .
npm :
Publishing npm projects makes use of npm ' s "publish" command .
It requires a "package.json" file in the project ' s root directory which has "version" set and is not delared as "private" .
To find out what will be published , run "npm publish --dry-run" in the project ' s root folder .
It will use your gitignore file to exclude the mached files from publishing .
Note : npm ' s gitignore parser might yield different results from your git client , to ignore a "foo" directory globally use the glob pattern "**/foo" .
If an image for mavenExecute is configured , and npm packages are to be published , the image must have npm installed . ` ,
2020-06-23 18:05:21 +02:00
PreRunE : func ( cmd * cobra . Command , _ [ ] string ) error {
2020-03-20 19:20:52 +02:00
startTime = time . Now ( )
2020-04-28 07:42:02 +02:00
log . SetStepName ( STEP_NAME )
2020-03-20 19:20:52 +02:00
log . SetVerbose ( GeneralConfig . Verbose )
2020-04-28 07:42:02 +02:00
path , _ := os . Getwd ( )
fatalHook := & log . FatalHook { CorrelationID : GeneralConfig . CorrelationID , Path : path }
log . RegisterHook ( fatalHook )
err := PrepareConfig ( cmd , & metadata , STEP_NAME , & stepConfig , config . OpenPiperFile )
2020-04-16 14:37:45 +02:00
if err != nil {
2020-06-24 10:04:05 +02:00
log . SetErrorCategory ( log . ErrorConfiguration )
2020-04-16 14:37:45 +02:00
return err
}
2020-09-16 11:33:03 +02:00
log . RegisterSecret ( stepConfig . Username )
2020-04-16 14:37:45 +02:00
log . RegisterSecret ( stepConfig . Password )
2020-05-05 08:36:24 +02:00
if len ( GeneralConfig . HookConfig . SentryConfig . Dsn ) > 0 {
sentryHook := log . NewSentryHook ( GeneralConfig . HookConfig . SentryConfig . Dsn , GeneralConfig . CorrelationID )
log . RegisterHook ( & sentryHook )
}
2020-04-16 14:37:45 +02:00
return nil
2020-03-20 19:20:52 +02:00
} ,
2020-06-23 18:05:21 +02:00
Run : func ( _ * cobra . Command , _ [ ] string ) {
2020-03-20 19:20:52 +02:00
telemetryData := telemetry . CustomData { }
telemetryData . ErrorCode = "1"
handler := func ( ) {
telemetryData . Duration = fmt . Sprintf ( "%v" , time . Since ( startTime ) . Milliseconds ( ) )
telemetry . Send ( & telemetryData )
}
log . DeferExitHandler ( handler )
defer handler ( )
2020-04-28 07:42:02 +02:00
telemetry . Initialize ( GeneralConfig . NoTelemetry , STEP_NAME )
2020-03-20 19:20:52 +02:00
nexusUpload ( stepConfig , & telemetryData )
telemetryData . ErrorCode = "0"
2020-05-18 21:52:54 +02:00
log . Entry ( ) . Info ( "SUCCESS" )
2020-03-20 19:20:52 +02:00
} ,
}
addNexusUploadFlags ( createNexusUploadCmd , & stepConfig )
return createNexusUploadCmd
}
func addNexusUploadFlags ( cmd * cobra . Command , stepConfig * nexusUploadOptions ) {
2020-05-25 19:48:59 +02:00
cmd . Flags ( ) . StringVar ( & stepConfig . Version , "version" , ` nexus3 ` , "The Nexus Repository Manager version. Currently supported are 'nexus2' and 'nexus3'." )
2020-03-20 19:20:52 +02:00
cmd . Flags ( ) . StringVar ( & stepConfig . Url , "url" , os . Getenv ( "PIPER_url" ) , "URL of the nexus. The scheme part of the URL will not be considered, because only http is supported." )
2020-04-11 12:56:44 +02:00
cmd . Flags ( ) . StringVar ( & stepConfig . MavenRepository , "mavenRepository" , os . Getenv ( "PIPER_mavenRepository" ) , "Name of the nexus repository for Maven and MTA deployments. If this is not provided, Maven and MTA deployment is implicitly disabled." )
cmd . Flags ( ) . StringVar ( & stepConfig . NpmRepository , "npmRepository" , os . Getenv ( "PIPER_npmRepository" ) , "Name of the nexus repository for npm deployments. If this is not provided, npm deployment is implicitly disabled." )
2020-03-20 19:20:52 +02:00
cmd . Flags ( ) . StringVar ( & stepConfig . GroupID , "groupId" , os . Getenv ( "PIPER_groupId" ) , "Group ID of the artifacts. Only used in MTA projects, ignored for Maven." )
cmd . Flags ( ) . StringVar ( & stepConfig . ArtifactID , "artifactId" , os . Getenv ( "PIPER_artifactId" ) , "The artifact ID used for both the .mtar and mta.yaml files deployed for MTA projects, ignored for Maven." )
cmd . Flags ( ) . StringVar ( & stepConfig . GlobalSettingsFile , "globalSettingsFile" , os . Getenv ( "PIPER_globalSettingsFile" ) , "Path to the mvn settings file that should be used as global settings file." )
cmd . Flags ( ) . StringVar ( & stepConfig . M2Path , "m2Path" , os . Getenv ( "PIPER_m2Path" ) , "The path to the local .m2 directory, only used for Maven projects." )
2020-09-16 11:33:03 +02:00
cmd . Flags ( ) . StringVar ( & stepConfig . Username , "username" , os . Getenv ( "PIPER_username" ) , "Username for accessing the Nexus endpoint." )
2020-04-03 21:32:38 +02:00
cmd . Flags ( ) . StringVar ( & stepConfig . Password , "password" , os . Getenv ( "PIPER_password" ) , "Password for accessing the Nexus endpoint." )
2020-03-20 19:20:52 +02:00
cmd . MarkFlagRequired ( "url" )
}
// retrieve step metadata
func nexusUploadMetadata ( ) config . StepData {
var theMetaData = config . StepData {
Metadata : config . StepMetadata {
Name : "nexusUpload" ,
Aliases : [ ] config . Alias { { Name : "mavenExecute" , Deprecated : false } } ,
} ,
Spec : config . StepSpec {
Inputs : config . StepInputs {
Parameters : [ ] config . StepParameters {
{
Name : "version" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : false ,
2020-03-31 15:16:18 +02:00
Aliases : [ ] config . Alias { { Name : "nexus/version" } } ,
2020-03-20 19:20:52 +02:00
} ,
{
Name : "url" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : true ,
2020-03-31 15:16:18 +02:00
Aliases : [ ] config . Alias { { Name : "nexus/url" } } ,
2020-03-20 19:20:52 +02:00
} ,
{
2020-04-11 12:56:44 +02:00
Name : "mavenRepository" ,
2020-03-20 19:20:52 +02:00
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
2020-04-11 12:56:44 +02:00
Mandatory : false ,
Aliases : [ ] config . Alias { { Name : "nexus/mavenRepository" } , { Name : "nexus/repository" } } ,
} ,
{
Name : "npmRepository" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : false ,
Aliases : [ ] config . Alias { { Name : "nexus/npmRepository" } } ,
2020-03-20 19:20:52 +02:00
} ,
{
Name : "groupId" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : false ,
2020-03-31 15:16:18 +02:00
Aliases : [ ] config . Alias { { Name : "nexus/groupId" } } ,
2020-03-20 19:20:52 +02:00
} ,
{
Name : "artifactId" ,
ResourceRef : [ ] config . ResourceReference { } ,
2020-03-31 15:16:18 +02:00
Scope : [ ] string { "PARAMETERS" } ,
2020-03-20 19:20:52 +02:00
Type : "string" ,
Mandatory : false ,
Aliases : [ ] config . Alias { } ,
} ,
{
Name : "globalSettingsFile" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "GENERAL" , "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : false ,
Aliases : [ ] config . Alias { { Name : "maven/globalSettingsFile" } } ,
} ,
{
Name : "m2Path" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "GENERAL" , "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : false ,
Aliases : [ ] config . Alias { { Name : "maven/m2Path" } } ,
} ,
{
2020-09-16 11:33:03 +02:00
Name : "username" ,
2020-08-28 15:38:15 +02:00
ResourceRef : [ ] config . ResourceReference { { Name : "nexusCredentialsId" , Param : "username" } } ,
2020-03-31 15:16:18 +02:00
Scope : [ ] string { "PARAMETERS" } ,
2020-03-20 19:20:52 +02:00
Type : "string" ,
Mandatory : false ,
Aliases : [ ] config . Alias { } ,
} ,
{
Name : "password" ,
2020-08-28 15:38:15 +02:00
ResourceRef : [ ] config . ResourceReference { { Name : "nexusCredentialsId" , Param : "password" } } ,
2020-03-31 15:16:18 +02:00
Scope : [ ] string { "PARAMETERS" } ,
2020-03-20 19:20:52 +02:00
Type : "string" ,
Mandatory : false ,
Aliases : [ ] config . Alias { } ,
} ,
} ,
} ,
} ,
}
return theMetaData
}