plugins { id 'org.antora' version '1.0.0-alpha.7' } apply plugin: 'io.spring.convention.docs' apply plugin: 'java' antora { playbook = 'cached-antora-playbook.yml' playbookProvider { repository = 'spring-projects/spring-security' branch = 'docs-build' path = 'lib/antora/templates/per-branch-antora-playbook.yml' checkLocalBranch = true } options = [clean: true, stacktrace: true] } tasks.register('generateAntora') { group = 'Documentation' description = 'Generates the antora.yml for dynamic properties' doLast { def docsTag = snapshotBuild ? 'current' : project.version def ghTag = snapshotBuild ? 'main' : project.version def ghUrl = "https://github.com/spring-projects/spring-security/tree/$ghTag" def ghOldSamplesUrl = 'https://github.com/spring-projects/spring-security/tree/5.4.x/samples' def ghSamplesUrl = "https://github.com/spring-projects/spring-security-samples/tree/$samplesBranch" def securityDocsUrl = "https://docs.spring.io/spring-security/site/docs/$docsTag" def securityApiUrl = "$securityDocsUrl/api/" def securityReferenceUrl = "$securityDocsUrl/reference/html5/" def springFrameworkApiUrl = "https://docs.spring.io/spring-framework/docs/$springFrameworkVersion/javadoc-api/" def springFrameworkReferenceUrl = "https://docs.spring.io/spring-framework/docs/$springFrameworkVersion/reference/html/" def ymlVersions = resolvedVersions(project.configurations.testRuntimeClasspath).call() .collect(v -> " ${v.getKey()}: ${v.getValue()}") .join('\n') def outputFile = layout.buildDirectory.file('generateAntora/antora.yml').get().asFile mkdir(outputFile.getParentFile()) def mainVersion = project.version def prerelease = null def versionComponents = mainVersion.split(/(?=-)/) if (versionComponents.length > 1) { if (versionComponents[1] == '-SNAPSHOT') { mainVersion = versionComponents[0] prerelease = "'-SNAPSHOT'" } else { prerelease = 'true' } } def antoraYmlText = file('antora.yml').text layout.buildDirectory.file('.antora.yml').get().asFile.text = antoraYmlText antoraYmlText = antoraYmlText.lines().collect { l -> if (l.startsWith('version: ')) { return prerelease == null ? "version: '${mainVersion}'" : "version: '${mainVersion}'\nprerelease: ${prerelease}" } if (l.startsWith('title: ')) return "title: ${project.parent.description}" return l == 'ext:' || l.getAt(0) == ' ' ? null : l }.findAll(Objects::nonNull).join('\n') outputFile.text = """$antoraYmlText asciidoc: attributes: icondir: icons gh-old-samples-url: $ghOldSamplesUrl gh-samples-url: $ghSamplesUrl gh-url: $ghUrl security-api-url: $securityApiUrl security-reference-url: $securityReferenceUrl spring-framework-api-url: $springFrameworkApiUrl spring-framework-reference-url: $springFrameworkReferenceUrl spring-security-version: ${project.version} ${ymlVersions} """ } } dependencies { testImplementation platform(project(':spring-security-dependencies')) testImplementation 'com.unboundid:unboundid-ldapsdk' testImplementation 'org.apache.directory.server:apacheds-core' testImplementation 'org.springframework:spring-core' } def resolvedVersions(Configuration configuration) { return { configuration.resolvedConfiguration .resolvedArtifacts .collectEntries { [(it.name + '-version'): it.moduleVersion.id.version] } } } repositories { mavenCentral() maven { url 'https://repo.spring.io/release' } maven { url 'https://repo.spring.io/milestone' } maven { url 'https://repo.spring.io/snapshot' } }