Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.netflix.gradle.plugins.packaging.SystemPackagingExtension.groovy Maven / Gradle / Ivy
Go to download
Provides a task similar to Tar and Zip for constructing RPM and DEB package files.
package com.netflix.gradle.plugins.packaging
import com.netflix.gradle.plugins.deb.control.MultiArch
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.redline_rpm.header.Architecture
import org.redline_rpm.header.Flags
import org.redline_rpm.header.Os
import org.redline_rpm.header.RpmType
import org.redline_rpm.payload.Directive
/**
* Extension that can be used to configure both DEB and RPM.
*
* Ideally we'd have multiple levels, e.g. an extension for everything, one for deb which extends the, one for rpm
* that extends the base and have all the tasks take from the specific extension. But since tasks.withType can be used,
* there isn't really a need for "all rpm" extension.
*/
class SystemPackagingExtension {
static final IllegalStateException MULTIPLE_PREINSTALL_FILES = multipleFilesDefined('PreInstall')
static final IllegalStateException MULTIPLE_POSTINSTALL_FILES = multipleFilesDefined('PostInstall')
static final IllegalStateException MULTIPLE_PREUNINSTALL_FILES = multipleFilesDefined('PreUninstall')
static final IllegalStateException MULTIPLE_POSTUNINSTALL_FILES = multipleFilesDefined('PostUninstall')
static final IllegalStateException MULTIPLE_TRIGGERINSTALL_FILES = multipleFilesDefined('TriggerInstall')
static final IllegalStateException MULTIPLE_TRIGGERUNINSTALL_FILES = multipleFilesDefined('TriggerUninstall')
static final IllegalStateException MULTIPLE_TRIGGERPOSTUNINSTALL_FILES = multipleFilesDefined('TriggerPostUninstall')
static final IllegalStateException PREINSTALL_COMMANDS_AND_FILE_DEFINED = conflictingDefinitions('PreInstall')
static final IllegalStateException POSTINSTALL_COMMANDS_AND_FILE_DEFINED = conflictingDefinitions('PostInstall')
static final IllegalStateException PREUNINSTALL_COMMANDS_AND_FILE_DEFINED = conflictingDefinitions('PreUninstall')
static final IllegalStateException POSTUNINSTALL_COMMANDS_AND_FILE_DEFINED = conflictingDefinitions('PostUninstall')
static final IllegalStateException TRIGGERINSTALL_COMMANDS_AND_FILE_DEFINED = conflictingDefinitions('TriggerInstall')
static final IllegalStateException TRIGGERUNINSTALL_COMMANDS_AND_FILE_DEFINED = conflictingDefinitions('TriggerUninstall')
static final IllegalStateException TRIGGERPOSTUNINSTALL_COMMANDS_AND_FILE_DEFINED = conflictingDefinitions('TriggerPostUninstall')
// File name components
String packageName
String release
String version
Integer epoch
// Package signing data
String signingKeyId
String signingKeyPassphrase
File signingKeyRingFile
String user
String permissionGroup // Group is used by Gradle on tasks.
boolean setgid
/**
* In Debian, this is the Section and has to be provided. Valid values are: admin, cli-mono, comm, database, debug,
* devel, doc, editors, education, electronics, embedded, fonts, games, gnome, gnu-r, gnustep, graphics, hamradio,
* haskell, httpd, interpreters, introspection, java, kde, kernel, libdevel, libs, lisp, localization, mail, math,
* metapackages, misc, net, news, ocaml, oldlibs, otherosfs, perl, php, python, ruby, science, shells, sound, tasks,
* tex, text, utils, vcs, video, web, x11, xfce, zope. The section can be prefixed with contrib or non-free, if
* not part of main.
*/
String packageGroup
String buildHost
String summary
String packageDescription
String license
String packager
String distribution
String vendor
String url
String sourcePackage
// For Backward compatibility for those that passed in a Architecture object
String archStr // This is what can be convention mapped and then referenced
Directive fileType
Boolean createDirectoryEntry
Boolean addParentDirs
Os os
RpmType type
List prefixes = new ArrayList()
// DEB Only
Integer uid
Integer gid
MultiArch multiArch
String maintainer
String uploaders
String priority
File preInstallFile
File postInstallFile
File preUninstallFile
File postUninstallFile
File triggerInstallFile
File triggerUninstallFile
File triggerPostUninstallFile
final List configurationFiles = []
final List preInstallCommands = []
final List postInstallCommands = []
final List preUninstallCommands = []
final List postUninstallCommands = []
// RPM specific
final List triggerInstallCommands = []
final List triggerUninstallCommands = []
final List triggerPostUninstallCommands = []
final List preTransCommands = []
final List postTransCommands = []
final List commonCommands = []
/**
* Can be of type String or File
*/
final List supplementaryControlFiles = []
List links = new ArrayList ()
List dependencies = new ArrayList()
List obsoletes = new ArrayList()
List conflicts = new ArrayList()
// Deb-specific special dependencies
List recommends = new ArrayList()
List suggests = new ArrayList()
List enhances = new ArrayList()
List preDepends = new ArrayList()
List breaks = new ArrayList()
List replaces = new ArrayList()
List provides = new ArrayList()
List directories = new ArrayList()
// DEB-specific user-defined fields
// https://www.debian.org/doc/debian-policy/ch-controlfields.html#s5.7
Map customFields = [:]
@Input
@Optional
String getPackageName() {
return packageName
}
@Input
@Optional
String getRelease() {
return release
}
@Input
@Optional
String getVersion() {
return version
}
@Input
@Optional
Integer getEpoch() {
return epoch
}
@Input
@Optional
String getSigningKeyId() {
return signingKeyId
}
@Input
@Optional
String getSigningKeyPassphrase() {
return signingKeyPassphrase
}
@InputFile
@Optional
@PathSensitive(PathSensitivity.ABSOLUTE)
File getSigningKeyRingFile() {
return signingKeyRingFile
}
@Input
@Optional
String getUser() {
return user
}
@Input
@Optional
String getPermissionGroup() {
return permissionGroup
}
@Input
@Optional
Boolean getSetgid() {
return setgid
}
@Input
@Optional
String getPackageGroup() {
return packageGroup
}
@Input
@Optional
String getBuildHost() {
return buildHost
}
@Input
@Optional
String getSummary() {
return summary
}
@Input
@Optional
String getPackageDescription() {
return packageDescription
}
@Input
@Optional
String getLicense() {
return license
}
@Input
@Optional
String getPackager() {
return packager
}
@Input
@Optional
String getDistribution() {
return distribution
}
@Input
@Optional
String getVendor() {
return vendor
}
@Input
@Optional
String getUrl() {
return url
}
@Input
@Optional
String getSourcePackage() {
return sourcePackage
}
@Input
@Optional
String getArchStr() {
return archStr
}
void setArch(Object arch) {
archStr = (arch instanceof Architecture) ? arch.name() : arch.toString()
}
@Input
@Optional
Directive getFileType() {
return fileType
}
@Input
@Optional
Boolean getCreateDirectoryEntry() {
return createDirectoryEntry
}
@Input
@Optional
Boolean getAddParentDirs() {
return addParentDirs
}
@Input
@Optional
Os getOs() {
return os
}
@Input
@Optional
RpmType getType() {
return type
}
def prefix(String prefixStr) {
prefixes << prefixStr
return this
}
@Input
@Optional
List getPrefixes() {
return prefixes
}
@Input
@Optional
Integer getUid() {
return uid
}
@Input
@Optional
Integer getGid() {
return gid
}
@Input
@Optional
MultiArch getMultiArch() {
return multiArch
}
@Input
@Optional
String getMaintainer() {
return maintainer
}
@Input
@Optional
String getUploaders() {
return uploaders
}
@Input
@Optional
String getPriority() {
return priority
}
@Input
@Optional
List getSupplementaryControlFiles() {
return supplementaryControlFiles
}
def supplementaryControl(Object file) {
supplementaryControlFiles << file
return this
}
// Scripts
@InputFile
@Optional
@PathSensitive(PathSensitivity.RELATIVE)
File getPreInstallFile() {
return preInstallFile
}
@InputFile
@Optional
@PathSensitive(PathSensitivity.RELATIVE)
File getPostInstallFile() {
return postInstallFile
}
@InputFile
@Optional
@PathSensitive(PathSensitivity.RELATIVE)
File getPreUninstallFile() {
return preUninstallFile
}
@InputFile
@Optional
@PathSensitive(PathSensitivity.RELATIVE)
File getPostUninstallFile() {
return postUninstallFile
}
@InputFile
@Optional
@PathSensitive(PathSensitivity.RELATIVE)
File getTriggerInstallFile() {
return triggerInstallFile
}
@InputFile
@Optional
@PathSensitive(PathSensitivity.RELATIVE)
File getTriggerUninstallFile() {
return triggerUninstallFile
}
@InputFile
@Optional
@PathSensitive(PathSensitivity.RELATIVE)
File getTriggerPostUninstallFile() {
return triggerPostUninstallFile
}
@Input
@Optional
List getConfigurationFiles() {
return configurationFiles
}
@Input
@Optional
List getPreInstallCommands() {
return preInstallCommands
}
@Input
@Optional
List getPostInstallCommands() {
return postInstallCommands
}
@Input
@Optional
List getPreUninstallCommands() {
return preUninstallCommands
}
@Input
@Optional
List getPostUninstallCommands() {
return postUninstallCommands
}
@Input
@Optional
List getTriggerInstallCommands() {
return triggerInstallCommands
}
@Input
@Optional
List getTriggerUninstallCommands() {
return triggerUninstallCommands
}
@Input
@Optional
List getTriggerPostUninstallCommands() {
return triggerPostUninstallCommands
}
@Input
@Optional
List getPreTransCommands() {
return preTransCommands
}
@Input
@Optional
List getPostTransCommands() {
return postTransCommands
}
@Input
@Optional
List getCommonCommands() {
return commonCommands
}
@Input
@Optional
List getLinks() {
return links
}
@Input
@Optional
List getDependencies() {
return dependencies
}
@Input
@Optional
List getObsoletes() {
return obsoletes
}
@Input
@Optional
List getRecommends() {
return recommends
}
@Input
@Optional
List getSuggests() {
return suggests
}
@Input
@Optional
List getEnhances() {
return enhances
}
@Input
@Optional
List getPreDepends() {
return preDepends
}
@Input
@Optional
List getBreaks() {
return breaks
}
@Input
@Optional
List getReplaces() {
return replaces
}
@Input
@Optional
List getProvides() {
return provides
}
@Input
@Optional
List getConflicts() {
return conflicts
}
@Input
@Optional
List getDirectories() {
return directories
}
@Input
@Optional
Map getCustomFields() {
return customFields
}
/**
* For backwards compatibility
* @param script
*/
def setInstallUtils(File script) {
installUtils(script)
}
def installUtils(String script) {
commonCommands << script
return this
}
def installUtils(File script) {
commonCommands << script
return this
}
/**
* For backwards compatibility
* @param script
*/
def setConfigurationFile(String script) {
configurationFile(script)
}
def configurationFile(String path) {
configurationFiles << path
return this
}
/**
* For backwards compatibility
* @param script
*/
def setPreInstall(File script) {
preInstall(script)
}
def preInstall(String script) {
if(preInstallFile) { throw PREINSTALL_COMMANDS_AND_FILE_DEFINED }
preInstallCommands << script
return this
}
def preInstall(File script) {
if(preInstallFile) { throw PREINSTALL_COMMANDS_AND_FILE_DEFINED }
preInstallCommands << script
return this
}
def preInstallFile(File path) {
if(preInstallFile) { throw MULTIPLE_PREINSTALL_FILES }
if(preInstallCommands) { throw PREINSTALL_COMMANDS_AND_FILE_DEFINED }
preInstallFile = path
}
/**
* For backwards compatibility
* @param script
*/
def setPostInstall(File script) {
postInstall(script)
}
def postInstall(String script) {
if(postInstallFile) { throw POSTINSTALL_COMMANDS_AND_FILE_DEFINED }
postInstallCommands << script
return this
}
def postInstall(File script) {
if(postInstallFile) { throw POSTINSTALL_COMMANDS_AND_FILE_DEFINED }
postInstallCommands << script
return this
}
def postInstallFile(File path) {
if(postInstallFile) { throw MULTIPLE_POSTINSTALL_FILES }
if(postInstallCommands) { throw POSTINSTALL_COMMANDS_AND_FILE_DEFINED }
postInstallFile = path
}
/**
* For backwards compatibility
* @param script
*/
def setPreUninstall(File script) {
preUninstall(script)
}
def preUninstall(String script) {
if(preUninstallFile) { throw PREUNINSTALL_COMMANDS_AND_FILE_DEFINED }
preUninstallCommands << script
return this
}
def preUninstall(File script) {
if(preUninstallFile) { throw PREUNINSTALL_COMMANDS_AND_FILE_DEFINED }
preUninstallCommands << script
return this
}
def preUninstallFile(File script) {
if(preUninstallFile) { throw MULTIPLE_PREUNINSTALL_FILES }
if(preUninstallCommands) { throw PREUNINSTALL_COMMANDS_AND_FILE_DEFINED }
preUninstallFile = script
}
/**
* For backwards compatibility
* @param script
*/
def setPostUninstall(File script) {
postUninstall(script)
}
def postUninstall(String script) {
if(postUninstallFile) { throw POSTUNINSTALL_COMMANDS_AND_FILE_DEFINED }
postUninstallCommands << script
return this
}
def postUninstall(File script) {
if(postUninstallFile) { throw POSTUNINSTALL_COMMANDS_AND_FILE_DEFINED }
postUninstallCommands << script
return this
}
def postUninstallFile(File script) {
if(postUninstallFile) { throw MULTIPLE_POSTUNINSTALL_FILES }
if(postUninstallCommands) { throw POSTUNINSTALL_COMMANDS_AND_FILE_DEFINED }
postUninstallFile = script
}
/**
* For backwards compatibility
* @param script
*/
def setTriggerInstall(File script, String packageName, String version='', int flag=0) {
triggerInstall(script, packageName, version, flag)
}
def triggerInstall(File script, String packageName, String version='', int flag=0) {
if(triggerInstallFile) { throw TRIGGERINSTALL_COMMANDS_AND_FILE_DEFINED }
triggerInstallCommands << new Trigger(new Dependency(packageName, version, flag), script)
return this
}
def triggerInstallFile(File script) {
if(triggerInstallFile) { throw MULTIPLE_TRIGGERINSTALL_FILES }
if(triggerInstallCommands) { throw TRIGGERINSTALL_COMMANDS_AND_FILE_DEFINED }
triggerInstallFile = script
}
/**
* For backwards compatibility
* @param script
*/
def setTriggerUninstall(File script, String packageName, String version='', int flag=0) {
triggerUninstall(script, packageName, version, flag)
}
def triggerUninstall(File script, String packageName, String version='', int flag=0) {
if(triggerUninstallFile) { throw TRIGGERUNINSTALL_COMMANDS_AND_FILE_DEFINED }
triggerUninstallCommands << new Trigger(new Dependency(packageName, version, flag), script)
return this
}
def triggerUninstallFile(File script) {
if(triggerUninstallFile) { throw MULTIPLE_TRIGGERUNINSTALL_FILES }
if(triggerUninstallCommands) { throw TRIGGERUNINSTALL_COMMANDS_AND_FILE_DEFINED }
triggerUninstallFile = script
}
/**
* For backwards compatibility
* @param script
*/
def setTriggerPostUninstall(File script, String packageName, String version='', int flag=0) {
triggerPostUninstall(script, packageName, version, flag)
}
def triggerPostUninstall(File script, String packageName, String version='', int flag=0) {
if(triggerPostUninstallFile) { throw TRIGGERPOSTUNINSTALL_COMMANDS_AND_FILE_DEFINED }
triggerPostUninstallCommands << new Trigger(new Dependency(packageName, version, flag), script)
return this
}
def triggerPostUninstallFile(File script) {
if(triggerPostUninstallFile) { throw MULTIPLE_TRIGGERPOSTUNINSTALL_FILES }
if(triggerUninstallCommands) { throw TRIGGERPOSTUNINSTALL_COMMANDS_AND_FILE_DEFINED }
triggerPostUninstallFile = script
}
/**
* For backwards compatibility
* @param script
*/
def setPreTrans(File script) {
preTrans(script)
}
def preTrans(String script) {
preTransCommands << script
return this
}
def preTrans(File script) {
preTransCommands << script
return this
}
/**
* For backwards compatibility
* @param script
*/
def setPostTrans(File script) {
postTrans(script)
}
def postTrans(String script) {
postTransCommands << script
return this
}
def postTrans(File script) {
postTransCommands << script
return this
}
// @groovy.transform.PackageScope doesn't seem to set the proper scope when going through a @Delegate
Link link(String path, String target) {
link(path, target, -1, null, null)
}
Link link(String path, String target, int permissions) {
link(path, target, permissions, null, null)
}
Link link(String path, String target, String user, String permissionGroup) {
link(path, target, -1, user, permissionGroup)
}
Link link(String path, String target, int permissions, String user, String permissionGroup) {
Link link = new Link()
link.path = path
link.target = target
link.permissions = permissions
link.user = user
link.permissionGroup = permissionGroup
links.add(link)
link
}
Dependency requires(String packageName, String version, int flag) {
def dep = new Dependency(packageName, version, flag)
dependencies.add(dep)
dep
}
Dependency requires(String packageName, String version){
requires(packageName, version, 0)
}
Dependency requires(String packageName) {
requires(packageName, '', 0)
}
Dependency obsoletes(String packageName, String version, int flag) {
def dep = new Dependency(packageName, version, flag)
obsoletes.add(dep)
dep
}
Dependency obsoletes(String packageName) {
obsoletes(packageName, '', 0)
}
Dependency conflicts(String packageName, String version, int flag) {
def dep = new Dependency(packageName, version, flag)
conflicts.add(dep)
dep
}
Dependency conflicts(String packageName) {
conflicts(packageName, '', 0)
}
Dependency recommends(String packageName, String version, int flag) {
def dep = new Dependency(packageName, version, flag)
recommends.add(dep)
dep
}
Dependency recommends(String packageName) {
recommends(packageName, '', 0)
}
Dependency suggests(String packageName, String version, int flag) {
def dep = new Dependency(packageName, version, flag)
suggests.add(dep)
dep
}
Dependency suggests(String packageName) {
suggests(packageName, '', 0)
}
Dependency enhances(String packageName, String version, int flag) {
def dep = new Dependency(packageName, version, flag)
enhances.add(dep)
dep
}
Dependency enhances(String packageName) {
enhances(packageName, '', 0)
}
Dependency preDepends(String packageName, String version, int flag) {
def dep = new Dependency(packageName, version, flag)
preDepends.add(dep)
dep
}
Dependency preDepends(String packageName) {
preDepends(packageName, '', 0)
}
Dependency breaks(String packageName, String version, int flag) {
def dep = new Dependency(packageName, version, flag)
breaks.add(dep)
dep
}
Dependency breaks(String packageName) {
breaks(packageName, '', 0)
}
Dependency replaces(String packageName, String version, int flag) {
def dep = new Dependency(packageName, version, flag)
replaces.add(dep)
dep
}
Dependency replaces(String packageName) {
replaces(packageName, '', 0)
}
Dependency provides(String packageName, String version, int flag) {
def dep = new Dependency(packageName, version, flag)
provides.add(dep)
dep
}
Dependency provides(String packageName, String version) {
provides(packageName, version, Flags.EQUAL)
}
Dependency provides(String packageName) {
provides(packageName, '', 0)
}
Directory directory(String path) {
Directory directory = directory(path, -1)
directories << directory
directory
}
Directory directory(String path, boolean addParents) {
Directory directory = new Directory(path: path, addParents: addParents)
directories << directory
directory
}
Directory directory(String path, int permissions) {
Directory directory = new Directory(path: path, permissions: permissions)
directories << directory
directory
}
Directory directory(String path, int permissions, boolean addParents) {
Directory directory = new Directory(path: path, permissions: permissions, addParents: addParents)
directories << directory
directory
}
Directory directory(String path, int permissions, String user, String permissionGroup) {
Directory directory = new Directory(path: path, permissions: permissions, user: user, permissionGroup: permissionGroup)
directories << directory
directory
}
Directory directory(String path, int permissions, String user, String permissionGroup, boolean addParents) {
Directory directory = new Directory(path: path, permissions: permissions, user: user, permissionGroup: permissionGroup, addParents: addParents)
directories << directory
directory
}
def customField(String key, String val) {
customFields[key] = val
return this
}
def customField(Map fields) {
customFields += fields
return this
}
private static IllegalStateException multipleFilesDefined(String fileName) {
new IllegalStateException("Cannot specify more than one $fileName File")
}
private static IllegalStateException conflictingDefinitions(String type) {
new IllegalStateException("Cannot specify $type File and $type Commands")
}
}