Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ To check `conf/guides.yml` against the schema:
./gradlew validateGuides -PvalidationMode=both
```

To run the full guide verification harness (warning gate, link crawl, structural diff, CSP scan, acceptance report):
To run the full guide verification harness (warning gate, link crawl, CSP scan, acceptance report):

```bash
./gradlew verifyAllGuides
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ import website.gradle.tasks.RecordCompanionReleaseTask
import website.gradle.tasks.RecordReleaseTask
import website.gradle.tasks.RenderSiteTask
import website.gradle.tasks.SitemapTask
import website.gradle.tasks.StructuralDiffGuidesTask
import website.gradle.tasks.ValidateGuidesTask

@CompileStatic
Expand Down Expand Up @@ -154,7 +153,6 @@ class GrailsWebsitePlugin implements Plugin<Project> {

AsciidoctorWarningGateTask.register(project)
CrawlBuiltGuidesTask.register(project)
StructuralDiffGuidesTask.register(project)
AcceptanceReportTask.register(project)
GenerateRedirectStubsTask.register(project)
GenerateRedirectsManifestTask.register(project, siteExt)
Expand All @@ -166,7 +164,6 @@ class GrailsWebsitePlugin implements Plugin<Project> {
it.dependsOn('buildAllGuides')
it.dependsOn(AsciidoctorWarningGateTask.NAME)
it.dependsOn(CrawlBuiltGuidesTask.NAME)
it.dependsOn(StructuralDiffGuidesTask.NAME)
it.dependsOn(CspScanTask.NAME)
it.dependsOn(AcceptanceReportTask.NAME)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ import website.gradle.tasks.DownloadTask
import website.gradle.tasks.GuidesTask
import website.gradle.tasks.HtaccessTask
import website.gradle.tasks.MinutesTask
import website.gradle.tasks.ParityCheckGuideTask
import website.gradle.tasks.PluginsTask
import website.gradle.tasks.ProfilesTask
import website.gradle.tasks.QuestionsTask
Expand Down Expand Up @@ -81,10 +80,8 @@ class RenderGuidesPlugin {

static final String GROUP = 'documentation'
static final String AGGREGATE_TASK = 'buildAllGuides'
static final String PARITY_AGGREGATE_TASK = 'parityCheckAllGuides'
static final String GUIDES_YML_PATH = 'conf/guides.yml'
static final String GUIDE_TEMPLATE_PATH = 'guides/resources'
static final String PARITY_BASELINE_ROOT = 'buildSrc/src/test/resources/parity-baseline'

static void apply(Project project) {
File guidesYml = project.rootProject.layout.projectDirectory
Expand All @@ -103,14 +100,10 @@ class RenderGuidesPlugin {
registerAggregateTask(project, GROUP, AGGREGATE_TASK,
'Renders every wired-up guide-version pair under build/dist/guides/',
wiring.renderTaskNames)
registerAggregateTask(project, GROUP, PARITY_AGGREGATE_TASK,
'Runs renderer parity checks for every guide-version that has a baseline snapshot under buildSrc/src/test/resources/parity-baseline/',
wiring.parityTaskNames)
}

private static class Wiring {
List<String> renderTaskNames = []
List<String> parityTaskNames = []
}

@CompileDynamic
Expand Down Expand Up @@ -144,7 +137,7 @@ class RenderGuidesPlugin {
String safeName = sanitize(guideName)
String safeVersion = sanitize(versionKey)

if (!adocDir.isDirectory()) continue // skip-if-missing for render/parity/stage
if (!adocDir.isDirectory()) continue // skip-if-missing for render/stage

Map<String, Object> attributes = buildAttributes(
guide, version, versionKey)
Expand Down Expand Up @@ -240,28 +233,6 @@ class RenderGuidesPlugin {
}
}
wiring.renderTaskNames << renderTaskName

// Parity check vs the legacy snapshot, when one exists on disk.
File baselineFile = project.rootProject.layout.projectDirectory
.file("${PARITY_BASELINE_ROOT}/${guideName}-v${versionKey}/index.html").asFile
if (baselineFile.isFile()) {
String parityTaskName = "parityCheckGuide_${safeName}_${safeVersion}"
String renderedSinglePage = "dist/guides/${guideName}/${versionKey}/guide/single.html"
String reportRelPath = "reports/parity/${guideName}/${versionKey}.md"
project.tasks.register(parityTaskName, ParityCheckGuideTask) { ParityCheckGuideTask task ->
task.group = GROUP
task.description = "Compares rendered ${guideName} v${versionKey} against the legacy snapshot at ${baselineFile.name}"
task.dependsOn(renderTaskName)
task.localFile.set(project.layout.buildDirectory.file(renderedSinglePage))
task.baselineFile.set(baselineFile)
task.reportFile.set(project.layout.buildDirectory.file(reportRelPath))
task.guideLabel.set("${guideName}@v${versionKey}")
if (project.hasProperty('parityFailOnDiff')) {
task.failOnDiff.set(Boolean.parseBoolean(project.property('parityFailOnDiff') as String))
}
}
wiring.parityTaskNames << parityTaskName
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,6 @@ class AcceptanceReportTask extends DefaultTask {
@PathSensitive(PathSensitivity.RELATIVE)
final RegularFileProperty crawlReportFile = project.objects.fileProperty()

@Optional
@InputFile
@PathSensitive(PathSensitivity.RELATIVE)
final RegularFileProperty structuralReportFile = project.objects.fileProperty()

@Optional
@InputFile
@PathSensitive(PathSensitivity.RELATIVE)
Expand All @@ -81,14 +76,12 @@ class AcceptanceReportTask extends DefaultTask {
File guidesRoot = guidesDir.get().asFile
Map<String, GateResult> asciidoctorResults = parseCsvReport(optionalFile(asciidoctorReportFile))
Map<String, GateResult> crawlResults = parseCsvReport(optionalFile(crawlReportFile))
Map<String, GateResult> structuralResults = parseCsvReport(optionalFile(structuralReportFile))
CspAggregation cspAggregation = parseCspReport(optionalFile(cspReportFile))

Set<String> guideKeys = [] as LinkedHashSet<String>
guideKeys.addAll(discoverGuideKeys(guidesRoot))
guideKeys.addAll(asciidoctorResults.keySet())
guideKeys.addAll(crawlResults.keySet())
guideKeys.addAll(structuralResults.keySet())
guideKeys.addAll(cspAggregation.issuesByGuide.keySet())

if (guideKeys.isEmpty()) {
Expand All @@ -101,16 +94,14 @@ class AcceptanceReportTask extends DefaultTask {
Pair pair = splitKey(key)
GateResult asciidoctor = asciidoctorResults[key] ?: GateResult.review('asciidoctorWarningGate report row missing.')
GateResult crawl = crawlResults[key] ?: GateResult.review('crawlBuiltGuides report row missing.')
GateResult structural = structuralResults[key] ?: GateResult.review('structuralDiffGuides report row missing.')
GateResult csp = cspResultFor(key, cspAggregation)
String verdict = mergeVerdict([asciidoctor.status, crawl.status, structural.status, csp.status])
String details = summarizeDetails(asciidoctor, crawl, structural, csp)
String verdict = mergeVerdict([asciidoctor.status, crawl.status, csp.status])
String details = summarizeDetails(asciidoctor, crawl, csp)
rows << new AcceptanceRow(
guide: pair.guide,
version: pair.version,
asciidoctorWarningGate: asciidoctor.status,
crawlBuiltGuides: crawl.status,
structuralDiffGuides: structural.status,
cspScan: csp.status,
verdict: verdict,
details: details,
Expand All @@ -133,13 +124,11 @@ class AcceptanceReportTask extends DefaultTask {
task.guidesDir.convention(project.layout.buildDirectory.dir('dist/guides'))
task.asciidoctorReportFile.convention(project.layout.buildDirectory.file('reports/asciidoctor-warning-gate.csv'))
task.crawlReportFile.convention(project.layout.buildDirectory.file('reports/crawl-built-guides.csv'))
task.structuralReportFile.convention(project.layout.buildDirectory.file('reports/structural-diff-guides.csv'))
task.cspReportFile.convention(project.layout.buildDirectory.file('reports/csp-scan.md'))
task.reportFile.convention(project.layout.buildDirectory.file('reports/acceptance.csv'))
task.failOnViolation.convention(isHardFailMode(project))
task.dependsOn(AsciidoctorWarningGateTask.NAME)
task.dependsOn(CrawlBuiltGuidesTask.NAME)
task.dependsOn(StructuralDiffGuidesTask.NAME)
task.dependsOn(CspScanTask.NAME)
}
}
Expand Down Expand Up @@ -277,12 +266,10 @@ class AcceptanceReportTask extends DefaultTask {
'VERIFIED'
}

private static String summarizeDetails(GateResult asciidoctor, GateResult crawl,
GateResult structural, GateResult csp) {
private static String summarizeDetails(GateResult asciidoctor, GateResult crawl, GateResult csp) {
List<String> details = []
addDetail(details, 'asciidoctorWarningGate', asciidoctor)
addDetail(details, 'crawlBuiltGuides', crawl)
addDetail(details, 'structuralDiffGuides', structural)
addDetail(details, 'cspScan', csp)
if (details.isEmpty()) {
return 'All guide verification gates passed.'
Expand All @@ -298,13 +285,12 @@ class AcceptanceReportTask extends DefaultTask {

private static void writeCsv(File outputFile, List<AcceptanceRow> rows) {
outputFile.parentFile.mkdirs()
StringBuilder sb = new StringBuilder('guide,version,asciidoctorWarningGate,crawlBuiltGuides,structuralDiffGuides,cspScan,verdict,details\n')
StringBuilder sb = new StringBuilder('guide,version,asciidoctorWarningGate,crawlBuiltGuides,cspScan,verdict,details\n')
for (AcceptanceRow row : rows) {
sb << sanitize(row.guide) << ','
sb << sanitize(row.version) << ','
sb << sanitize(row.asciidoctorWarningGate) << ','
sb << sanitize(row.crawlBuiltGuides) << ','
sb << sanitize(row.structuralDiffGuides) << ','
sb << sanitize(row.cspScan) << ','
sb << sanitize(row.verdict) << ','
sb << sanitize(row.details) << '\n'
Expand Down Expand Up @@ -381,7 +367,6 @@ class AcceptanceReportTask extends DefaultTask {
String version
String asciidoctorWarningGate
String crawlBuiltGuides
String structuralDiffGuides
String cspScan
String verdict
String details
Expand Down

This file was deleted.

Loading
Loading