forked from dell-asm/module-rpm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.gradle
196 lines (169 loc) · 8.08 KB
/
build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
// requires java >= 1.7
import java.nio.file.LinkOption
import java.nio.file.attribute.BasicFileAttributes
import java.nio.file.Files
defaultTasks 'clean','rpm'
buildscript {
ext {
env = System.getenv()
buildNumber = env.BUILD_NUMBER ? env.BUILD_NUMBER.toString() : ((int) (System.currentTimeMillis() / 1000)).toString()
BASE_REPO_URL = hasProperty('BASE_REPO_URL') ? BASE_REPO_URL : 'http://10.35.178.198:8081/artifactory'
ASMNEXT_REPO = hasProperty('ASMNEXT_REPO') ? ASMNEXT_REPO : 'asmnext-trunk-ci'
ASMNEXT_REPO_URL = hasProperty('ASMNEXT_REPO_URL') ? ASMNEXT_REPO_URL : "${BASE_REPO_URL}/${ASMNEXT_REPO}"
PLUGINS_REPO = hasProperty('PLUGINS_REPO') ? PLUGINS_REPO : 'plugins-release'
PLUGINS_REPO_URL = hasProperty('PLUGINS_REPO_URL') ? PLUGINS_REPO_URL : "${BASE_REPO_URL}/${PLUGINS_REPO}"
USE_LOCAL_REPO = hasProperty('USE_LOCAL_REPO') ? USE_LOCAL_REPO : 'false'
rpm_packageName = env.RPM_PACKAGENAME ? env.RPM_PACKAGENAME : 'Dell-ASM-puppet-module-'
puppet_user = env.PUPPET_USER ? env.PUPPET_USER : 'puppet'
moduleName = env.MODULE_NAME ? env.MODULE_NAME : 'puppetlabs-xinetd'
moduleFolder = env.MODULE_FOLDER ? env.MODULE_FOLDER : 'xinetd'
gitFolder = env.GIT_FOLDER ? env.GIT_FOLDER : moduleName
gitRepo = env.REPONAME ? env.REPONAME : gitFolder
moduleVersion = env.MODULE_VERSION ? env.MODULE_VERSION : '1.2.0'
rpm_description = env.RPM_DESCRIPTION ? env.RPM_DESCRIPTION : 'Puppet module packaged for consumption by Dell ASM'
rpm_summary = env.RPM_SUMMARY ? env.RPM_SUMMARY : 'Puppet module packaged for consumption by Dell Active Systems Manager.'
rpm_vendor = env.RPM_VENDOR ? env.RPM_VENDOR : 'Dell Inc.'
rpm_url = env.RPM_URL ? env.RPM_URL : 'http://www.dell.com'
rpm_license = env.RPM_LICENSE ? env.RPM_LICENSE : 'ASL 2.0'
rpm_packager = env.RPM_PACKAGER ? env.RPM_PACKAGER : 'canova'
rpm_release = env.RPM_RELEASE ? env.RPM_RELEASE : buildNumber
}
repositories {
maven {
url PLUGINS_REPO_URL
}
}
dependencies {
classpath 'org.redline-rpm:redline:1.2.4'
}
}
task clean (type:Delete) {
delete 'build'
}
task rpm() << {
buildModuleRpm(project.moduleName,project.moduleVersion)
}
class CompCuInfo {
final def major
final def minor
final def micro
final def path
final def valid
public CompCuInfo(path) {
def matcher = path =~/lib\/puppet\/files\/CompCU-([0-9.]+)[.]jar/
if (!matcher.matches()) {
valid = false
} else {
def version = matcher[0][1]
def components = version.split("[.]")
major = components[0].toInteger()
minor = components[1].toInteger()
micro = components.length <= 2 ? 0 : components[2].toInteger()
valid = true
this.path = path
}
}
def isCompCuJar() {
return valid
}
public boolean isGreaterThan(o) {
if (o == null) {
return true;
}
// Check major
if (major > o.major) {
return true;
} else if (major < o.major) {
return false;
}
// Check minor
if (minor > o.minor) {
return true;
} else if (minor < o.minor) {
return false;
}
// / Check micro
if (micro > o.micro) {
return true;
} else if (micro < o.micro) {
return false;
}
// Same version
return false;
}
public String toString() {
return "CompCuInfo<${path}>"
}
}
import org.redline_rpm.payload.*
import org.redline_rpm.header.*
def buildModuleRpm(moduleName,moduleVersion,puppetModulesFolder='/etc/puppetlabs/puppet/modules',rpmDestinationDirectory=(new File("${buildDir}/distributions"))) {
if (! rpmDestinationDirectory.isDirectory()) {
rpmDestinationDirectory.mkdirs()
}
org.redline_rpm.Builder rpmBuilder = new org.redline_rpm.Builder()
def rpmFileTree = fileTree("../modules/$gitRepo") {
include '**'
exclude '.git*'
exclude { element ->
// check if parent is link. if so, exclude. otherwise, gradle will recurse until it fails
boolean elementParentIsSymbolicLink = false
if ( null != element.file.parent)
elementParentIsSymbolicLink = Files.readAttributes(element.file.parentFile.toPath(), BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS).isSymbolicLink()
if (elementParentIsSymbolicLink)
{
logger.debug("excluded ${element.file} because parent is symbolic link")
logger.debug("parent is ${element.file.parentFile.toPath()}")
}
elementParentIsSymbolicLink
}
}
def compCuInfo = null
rpmFileTree.visit { element ->
def visitedFile = element.file
logger.debug("File name and Path = ${element.path} ${element.file.name}")
if (Files.readAttributes(visitedFile.toPath(), BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS).isSymbolicLink()) {
def linktarget = Files.readSymbolicLink(visitedFile.toPath())
logger.debug("symbolic link = ${visitedFile.getPath()} -> ${linktarget}")
rpmBuilder.addLink("${puppetModulesFolder}/${moduleFolder}/${element.path}", linktarget.toString())
} else if (element.isDirectory()) {
rpmBuilder.addDirectory("${puppetModulesFolder}/${moduleFolder}/${element.path}", 0755, Directive.NONE, project.puppet_user, project.puppet_user)
} else if('files/pool' == element.path || 'files/volume' == element.path ){
rpmBuilder.addFile("${puppetModulesFolder}/${moduleFolder}/${element.path}",element.file, 0755 , Directive.NONE, project.puppet_user,project.puppet_user)
} else if (null != visitedFile.getParentFile() && 'bin' == visitedFile.getParentFile().getName()) {
rpmBuilder.addFile("${puppetModulesFolder}/${moduleFolder}/${element.path}", element.file, 0755, Directive.NONE, project.puppet_user, project.puppet_user)
} else {
def info = new CompCuInfo(element.path)
if (info.isCompCuJar() && info.isGreaterThan(compCuInfo)) {
compCuInfo = info
}
rpmBuilder.addFile("${puppetModulesFolder}/${moduleFolder}/${element.path}", element.file, 0644, Directive.NONE, project.puppet_user, project.puppet_user)
}
}
if (compCuInfo != null) {
rpmBuilder.addLink("${puppetModulesFolder}/${moduleFolder}/lib/puppet/files/CompCU.jar", "${puppetModulesFolder}/${moduleFolder}/${compCuInfo.path}", 0644, project.puppet_user, project.puppet_user)
}
rpmBuilder.setPackage("${project.rpm_packageName}${moduleName}",moduleVersion,project.rpm_release)
rpmBuilder.setType(RpmType.BINARY)
rpmBuilder.setPlatform(Architecture.NOARCH,'LINUX')
rpmBuilder.setSummary(project.rpm_summary)
rpmBuilder.setDescription(project.rpm_description)
rpmBuilder.setBuildHost('localhost')
rpmBuilder.setLicense(project.rpm_license)
rpmBuilder.setGroup('Enterprise Systems Management')
rpmBuilder.setDistribution('')
rpmBuilder.setVendor(project.rpm_vendor)
rpmBuilder.setPackager(project.rpm_packager)
rpmBuilder.setUrl(project.rpm_url)
// If we are building the dell-bmc module, we need to install the ipmiflash rpm
if (moduleName == 'dell-bmc') {
rpmBuilder.addDependencyMore('dell-pec-ipmiflash','2013.02.11')
}
if (moduleName == 'dell-compellent') {
rpmBuilder.addDirectory("/opt/Dell/ASM/logs/compellent", 0775, Directive.NONE, project.puppet_user, project.puppet_user)
}
if (moduleName == 'dell-equallogic') {
rpmBuilder.addDirectory("/var/lib/net-snmp/mib_indexes", 0775, Directive.NONE, project.puppet_user, project.puppet_user)
}
println rpmBuilder.build(rpmDestinationDirectory)
}