Exposing buildRpm as a publication


(Sidharth) #1

taking my first steps. Am working on publishing my rpm artifacts to Artifactory. What I have is the buildRpm plugin task that builds an RPM. The rpm build is configured through the nebula plugin. For uploading I used the artifactory plugin; My implementation is as follows:

// See https://docs.gradle.org/current/userguide/artifact_management.htmland
// section 30.3 "note that the custom archives you are creating as part of your
// build are not automatically assigned to any configuration. You have to
// explicitly do this assignment.[sic]"
configurations {
    rpmConfig
}

// Attach the artifact to the configuration in this closure:
// docs.gradle.org/current/dsl/org.gradle.api.artifacts.dsl.ArtifactHandler.html
artifacts {
    rpmConfig file(buildRpm.archivePath)
}

artifactory {
    contextUrl = "${artifactory_contextUrl}"   //The base Artifactory URL if not overridden by the publisher/resolver
    publish {
        repository {
            repoKey = "${artifactory_root_dir}"
            username = "${artifactory_user}"
            password = "${artifactory_password}"
            maven = false
            ivy {
                artifactLayout = "${artifactory_team_dir}/[artifact]/build/distributions/[artifact]-[revision](-[classifier])(.[ext])"
                mavenCompatible = false
            }
        }
        defaults {
            // publications('buildRpm') This does not work because buildRpm does not make publications like ivy/groovy
            publishConfigs('rpmConfig')
            publishBuildInfo = false //Publish build-info to Artifactory (true by default)
            publishArtifacts = true //Publish artifacts to Artifactory (true by default)
            publishPom = false //Publish generated POM files to Artifactory (true by default).
            publishIvy = false//Publish generated Ivy descriptor files to Artifactory (true by default).
        }
    }
}

// If we don't specify this artifactoryPublish task fails
artifactoryPublish.dependsOn buildRpm

My questions are

  • Is there a way to leverage the nebula plugin to configure the plugin directly without having the explicit artifact and custom configuration?
  • I kind of ran with the ivy part to specify my artifacts. Is this a bit shoe horned or is this the canonical way to specify my RPM package layout?