Skip to content

Commit

Permalink
InfoJarManifestPlugin: configure meta inf normalization to ignore gra…
Browse files Browse the repository at this point in the history
…dle-info-plugin attributes
  • Loading branch information
rpalcolea committed Jul 25, 2020
1 parent ffd85d6 commit c87e091
Show file tree
Hide file tree
Showing 12 changed files with 114 additions and 11 deletions.
1 change: 1 addition & 0 deletions build.gradle
Expand Up @@ -39,6 +39,7 @@ dependencies {

// TODO, make these optional
implementation 'com.perforce:p4java:2015.2.1365273'
implementation 'com.netflix.nebula:nebula-gradle-interop:latest.release'
implementation 'com.netflix.nebula:gradle-contacts-plugin:latest.release'
implementation 'org.eclipse.jgit:org.eclipse.jgit:5.7.0.202003110725-r'
implementation 'org.tmatesoft.svnkit:svnkit:1.8.12'
Expand Down
6 changes: 6 additions & 0 deletions gradle/dependency-locks/compileClasspath.lockfile
Expand Up @@ -12,6 +12,7 @@ com.jcraft:jsch.agentproxy.usocket-nc:0.0.7
com.jcraft:jsch:0.1.55
com.jcraft:jzlib:1.1.2
com.netflix.nebula:gradle-contacts-plugin:5.1.0
com.netflix.nebula:nebula-gradle-interop:1.0.11
com.perforce:p4java:2015.2.1365273
com.trilead:trilead-ssh2:1.0.0-build220
de.regnis.q.sequence:sequence-library:1.0.3
Expand All @@ -23,6 +24,11 @@ org.bouncycastle:bcpg-jdk15on:1.64
org.bouncycastle:bcpkix-jdk15on:1.64
org.bouncycastle:bcprov-jdk15on:1.64
org.eclipse.jgit:org.eclipse.jgit:5.7.0.202003110725-r
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.50
org.jetbrains.kotlin:kotlin-stdlib:1.3.50
org.jetbrains:annotations:13.0
org.slf4j:slf4j-api:1.7.2
org.tmatesoft.sqljet:sqljet:1.1.10
org.tmatesoft.svnkit:svnkit:1.8.12
6 changes: 6 additions & 0 deletions gradle/dependency-locks/integTestCompileClasspath.lockfile
Expand Up @@ -15,6 +15,7 @@ com.jcraft:jsch.agentproxy.usocket-nc:0.0.7
com.jcraft:jsch:0.1.55
com.jcraft:jzlib:1.1.2
com.netflix.nebula:gradle-contacts-plugin:5.1.0
com.netflix.nebula:nebula-gradle-interop:1.0.11
com.netflix.nebula:nebula-test:7.8.6
com.perforce:p4java:2015.2.1365273
com.trilead:trilead-ssh2:1.0.0-build220
Expand All @@ -32,6 +33,11 @@ org.bouncycastle:bcpkix-jdk15on:1.64
org.bouncycastle:bcprov-jdk15on:1.64
org.eclipse.jgit:org.eclipse.jgit:5.7.0.202003110725-r
org.hamcrest:hamcrest-core:1.3
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.50
org.jetbrains.kotlin:kotlin-stdlib:1.3.50
org.jetbrains:annotations:13.0
org.objenesis:objenesis:2.4
org.slf4j:slf4j-api:1.7.2
org.spockframework:spock-core:1.3-groovy-2.4
Expand Down
6 changes: 6 additions & 0 deletions gradle/dependency-locks/integTestRuntimeClasspath.lockfile
Expand Up @@ -15,6 +15,7 @@ com.jcraft:jsch.agentproxy.usocket-nc:0.0.7
com.jcraft:jsch:0.1.55
com.jcraft:jzlib:1.1.2
com.netflix.nebula:gradle-contacts-plugin:5.1.0
com.netflix.nebula:nebula-gradle-interop:1.0.11
com.netflix.nebula:nebula-test:7.8.6
com.perforce:p4java:2015.2.1365273
com.trilead:trilead-ssh2:1.0.0-build220
Expand All @@ -32,6 +33,11 @@ org.bouncycastle:bcpkix-jdk15on:1.64
org.bouncycastle:bcprov-jdk15on:1.64
org.eclipse.jgit:org.eclipse.jgit:5.7.0.202003110725-r
org.hamcrest:hamcrest-core:1.3
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.50
org.jetbrains.kotlin:kotlin-stdlib:1.3.50
org.jetbrains:annotations:13.0
org.objenesis:objenesis:2.4
org.slf4j:slf4j-api:1.7.2
org.spockframework:spock-core:1.3-groovy-2.4
Expand Down
6 changes: 6 additions & 0 deletions gradle/dependency-locks/runtimeClasspath.lockfile
Expand Up @@ -12,6 +12,7 @@ com.jcraft:jsch.agentproxy.usocket-nc:0.0.7
com.jcraft:jsch:0.1.55
com.jcraft:jzlib:1.1.2
com.netflix.nebula:gradle-contacts-plugin:5.1.0
com.netflix.nebula:nebula-gradle-interop:1.0.11
com.perforce:p4java:2015.2.1365273
com.trilead:trilead-ssh2:1.0.0-build220
de.regnis.q.sequence:sequence-library:1.0.3
Expand All @@ -23,6 +24,11 @@ org.bouncycastle:bcpg-jdk15on:1.64
org.bouncycastle:bcpkix-jdk15on:1.64
org.bouncycastle:bcprov-jdk15on:1.64
org.eclipse.jgit:org.eclipse.jgit:5.7.0.202003110725-r
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.50
org.jetbrains.kotlin:kotlin-stdlib:1.3.50
org.jetbrains:annotations:13.0
org.slf4j:slf4j-api:1.7.2
org.tmatesoft.sqljet:sqljet:1.1.10
org.tmatesoft.svnkit:svnkit:1.8.12
6 changes: 6 additions & 0 deletions gradle/dependency-locks/testCompileClasspath.lockfile
Expand Up @@ -15,6 +15,7 @@ com.jcraft:jsch.agentproxy.usocket-nc:0.0.7
com.jcraft:jsch:0.1.55
com.jcraft:jzlib:1.1.2
com.netflix.nebula:gradle-contacts-plugin:5.1.0
com.netflix.nebula:nebula-gradle-interop:1.0.11
com.netflix.nebula:nebula-test:7.8.6
com.perforce:p4java:2015.2.1365273
com.trilead:trilead-ssh2:1.0.0-build220
Expand All @@ -32,6 +33,11 @@ org.bouncycastle:bcpkix-jdk15on:1.64
org.bouncycastle:bcprov-jdk15on:1.64
org.eclipse.jgit:org.eclipse.jgit:5.7.0.202003110725-r
org.hamcrest:hamcrest-core:1.3
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.50
org.jetbrains.kotlin:kotlin-stdlib:1.3.50
org.jetbrains:annotations:13.0
org.objenesis:objenesis:2.4
org.slf4j:slf4j-api:1.7.2
org.spockframework:spock-core:1.3-groovy-2.4
Expand Down
6 changes: 6 additions & 0 deletions gradle/dependency-locks/testRuntimeClasspath.lockfile
Expand Up @@ -15,6 +15,7 @@ com.jcraft:jsch.agentproxy.usocket-nc:0.0.7
com.jcraft:jsch:0.1.55
com.jcraft:jzlib:1.1.2
com.netflix.nebula:gradle-contacts-plugin:5.1.0
com.netflix.nebula:nebula-gradle-interop:1.0.11
com.netflix.nebula:nebula-test:7.8.6
com.perforce:p4java:2015.2.1365273
com.trilead:trilead-ssh2:1.0.0-build220
Expand All @@ -32,6 +33,11 @@ org.bouncycastle:bcpkix-jdk15on:1.64
org.bouncycastle:bcprov-jdk15on:1.64
org.eclipse.jgit:org.eclipse.jgit:5.7.0.202003110725-r
org.hamcrest:hamcrest-core:1.3
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.50
org.jetbrains.kotlin:kotlin-stdlib:1.3.50
org.jetbrains:annotations:13.0
org.objenesis:objenesis:2.4
org.slf4j:slf4j-api:1.7.2
org.spockframework:spock-core:1.3-groovy-2.4
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.6-rc-3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
15 changes: 10 additions & 5 deletions src/main/groovy/nebula/plugin/info/basic/BasicInfoPlugin.groovy
Expand Up @@ -41,6 +41,11 @@ import static java.util.jar.Attributes.Name.*
*/
class BasicInfoPlugin implements Plugin<Project>, InfoCollectorPlugin {
private static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat('yyyy-MM-dd_HH:mm:ss')
static final String BUILT_BY_PROPERTY = 'Built-By'
static final String BUILT_OS_PROPERTY = 'Built-OS'
static final String BUILD_DATE_PROPERTY = 'Build-Date'
static final String BUILD_STATUS_PROPERTY = 'Built-Status'
static final String GRADLE_VERSION_PROPERTY = 'Gradle-Version'

// Sample from commons-lang, and hence via Maven
// Manifest-Version: 1.0
Expand Down Expand Up @@ -71,18 +76,18 @@ class BasicInfoPlugin implements Plugin<Project>, InfoCollectorPlugin {
manifestPlugin.add(MANIFEST_VERSION.toString(), '1.0') // Java Standard
manifestPlugin.add(IMPLEMENTATION_TITLE.toString()) { "${project.group}#${project.name};${project.version}" }.changing = true
manifestPlugin.add(IMPLEMENTATION_VERSION.toString()) { project.version }
manifestPlugin.add('Built-Status') { project.status } // Could be promoted, so this is the actual status necessarily
manifestPlugin.add(BUILD_STATUS_PROPERTY) { project.status } // Could be promoted, so this is the actual status necessarily

String builtBy = providers.systemProperty("user.name").forUseAtConfigurationTime().get()
String builtOs = providers.systemProperty("os.name").forUseAtConfigurationTime().get()
manifestPlugin.add('Built-By', builtBy)
manifestPlugin.add('Built-OS', builtOs)
manifestPlugin.add(BUILT_BY_PROPERTY, builtBy)
manifestPlugin.add(BUILT_OS_PROPERTY, builtOs)

// Makes list of attributes not idempotent, which can throw off "changed" checks
manifestPlugin.add('Build-Date', DATE_FORMATTER.format(new Date())).changing = true
manifestPlugin.add(BUILD_DATE_PROPERTY, DATE_FORMATTER.format(new Date())).changing = true


manifestPlugin.add('Gradle-Version', { project.gradle.gradleVersion })
manifestPlugin.add(GRADLE_VERSION_PROPERTY, { project.gradle.gradleVersion })

// TODO Include hostname
}
Expand Down
Expand Up @@ -28,6 +28,12 @@ import org.gradle.api.provider.ProviderFactory
import javax.inject.Inject

class ContinuousIntegrationInfoPlugin implements Plugin<Project>, InfoCollectorPlugin {

static final BUILD_HOST_PROPERTY = 'Build-Host'
static final BUILD_JOB_PROPERTY = 'Build-Job'
static final BUILD_NUMBER_PROPERTY = 'Build-Number'
static final BUILD_ID_PROPERTY = 'Build-Id'

protected Project project
List<ContinuousIntegrationInfoProvider> providers
ContinuousIntegrationInfoProvider selectedProvider
Expand Down
Expand Up @@ -16,18 +16,49 @@

package nebula.plugin.info.reporting

import com.netflix.nebula.interop.GradleKt
import nebula.plugin.info.InfoBrokerPlugin
import nebula.plugin.info.InfoReporterPlugin
import nebula.plugin.info.basic.BasicInfoPlugin
import nebula.plugin.info.ci.ContinuousIntegrationInfoPlugin
import nebula.plugin.info.java.InfoJavaPlugin
import nebula.plugin.info.scm.ScmInfoPlugin
import org.gradle.api.Action
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.bundling.Jar
import org.gradle.normalization.MetaInfNormalization

/**
* Inject manifest values. Does not participate in incremental builds as its own task, it proved too difficult
* as a separate task.
*/
class InfoJarManifestPlugin implements Plugin<Project>, InfoReporterPlugin {

private static final List<String> ATTRIBUTES_TO_IGNORE_FOR_META_INF_NORMALIZATION = [
'Module-Owner',
'Module-Email',
'Nebula-Version',
BasicInfoPlugin.BUILT_BY_PROPERTY,
BasicInfoPlugin.BUILT_OS_PROPERTY,
BasicInfoPlugin.BUILD_DATE_PROPERTY,
BasicInfoPlugin.GRADLE_VERSION_PROPERTY,
BasicInfoPlugin.BUILD_STATUS_PROPERTY,
InfoJavaPlugin.CREATED_PROPERTY,
InfoJavaPlugin.JDK_PROPERTY,
InfoJavaPlugin.SOURCE_PROPERTY,
InfoJavaPlugin.TARGET_PROPERTY,
ContinuousIntegrationInfoPlugin.BUILD_NUMBER_PROPERTY,
ContinuousIntegrationInfoPlugin.BUILD_HOST_PROPERTY,
ContinuousIntegrationInfoPlugin.BUILD_JOB_PROPERTY,
ContinuousIntegrationInfoPlugin.BUILD_ID_PROPERTY,
ScmInfoPlugin.MODULE_SOURCE_PROPERTY,
ScmInfoPlugin.MODULE_ORIGIN_PROPERTY,
ScmInfoPlugin.CHANGE_PROPERTY,
ScmInfoPlugin.FULL_CHANGE_PROPERTY,
ScmInfoPlugin.BRANCH_PROPERTY
] as List<String>

void apply(Project project) {

project.plugins.withType(InfoBrokerPlugin) { InfoBrokerPlugin manifestPlugin ->
Expand All @@ -38,6 +69,23 @@ class InfoJarManifestPlugin implements Plugin<Project>, InfoReporterPlugin {
jarTask.manifest.attributes.putAll(attrs)
}
}
project.afterEvaluate {
if(GradleKt.versionGreaterThan(project.gradle, "6.6-rc-1")) {
configureMetaInfNormalization(project)
}
}

}
}

private void configureMetaInfNormalization(Project project) {
project.normalization.runtimeClasspath.metaInf(new Action<MetaInfNormalization>() {
@Override
void execute(MetaInfNormalization metaInfNormalization) {
ATTRIBUTES_TO_IGNORE_FOR_META_INF_NORMALIZATION.each { attribute ->
metaInfNormalization.ignoreAttribute(attribute)
}
}
})
}
}
17 changes: 12 additions & 5 deletions src/main/groovy/nebula/plugin/info/scm/ScmInfoPlugin.groovy
Expand Up @@ -30,6 +30,13 @@ import org.gradle.api.provider.ProviderFactory
import javax.inject.Inject

class ScmInfoPlugin implements Plugin<Project>, InfoCollectorPlugin {

static final String MODULE_SOURCE_PROPERTY = 'Module-Source'
static final String MODULE_ORIGIN_PROPERTY = 'Module-Origin'
static final String CHANGE_PROPERTY = 'Change'
static final String FULL_CHANGE_PROPERTY = 'Full-Change'
static final String BRANCH_PROPERTY = 'Branch'

private static Logger logger = Logging.getLogger(ScmInfoPlugin)

protected Project project
Expand Down Expand Up @@ -57,11 +64,11 @@ class ScmInfoPlugin implements Plugin<Project>, InfoCollectorPlugin {
configureExtMapping()

project.plugins.withType(InfoBrokerPlugin) { InfoBrokerPlugin manifestPlugin ->
manifestPlugin.add('Module-Source') { extension.source }
manifestPlugin.add('Module-Origin') { extension.origin }
manifestPlugin.add('Change') { extension.change }
manifestPlugin.add('Full-Change') { extension.fullChange }
manifestPlugin.add('Branch') { extension.branch }
manifestPlugin.add(MODULE_SOURCE_PROPERTY) { extension.source }
manifestPlugin.add(MODULE_ORIGIN_PROPERTY) { extension.origin }
manifestPlugin.add(CHANGE_PROPERTY) { extension.change }
manifestPlugin.add(FULL_CHANGE_PROPERTY) { extension.fullChange }
manifestPlugin.add(BRANCH_PROPERTY) { extension.branch }
}
}

Expand Down

0 comments on commit c87e091

Please sign in to comment.