def call(body) { def pipelineParams = [:] body.resolveStrategy = Closure.DELEGATE_FIRST body.delegate = pipelineParams body() pipeline { agent { label 'master' } triggers { upstream(upstreamProjects: "../Reference/${pipelineParams.refFamily}", threshold: hudson.model.Result.SUCCESS) } stages { stage('Clean') { steps { sh 'rm -rf out' } } stage('Transform') { agent { docker { image 'cloudfluff/databaker' reuseNode true } } steps { script { ansiColor('xterm') { sh "jupyter-nbconvert --output-dir=out --ExecutePreprocessor.timeout=None --execute 'main.ipynb'" } } } } stage('Validate CSV') { agent { docker { image 'cloudfluff/csvlint' reuseNode true } } steps { script { ansiColor('xterm') { if (fileExists('schema.json')) { sh "csvlint -s schema.json" } else { def schemas = [] for (def schema : findFiles(glob: 'out/*-schema.json')) { schemas.add("out/${schema.name}") } for (String schema : schemas) { sh "csvlint -s ${schema}" } } } } } } stage('Upload Tidy Data') { steps { script { jobDraft.replace() if (fileExists('out/observations.csv')) { uploadTidy(['out/observations.csv'], "https://ons-opendata.github.io/${pipelineParams.refFamily}/columns.csv") } else { def datasets = [] String dspath = util.slugise(env.JOB_NAME) for (def observations : findFiles(glob: 'out/*.csv')) { def dataset = [ "csv": "out/${observations.name}", "metadata": "out/${observations.name}-metadata.trig", "path": "${dspath}/${observations.name.take(observations.name.lastIndexOf('.'))}" ] datasets.add(dataset) } for (def dataset : datasets) { uploadTidy([dataset.csv], "https://ons-opendata.github.io/${pipelineParams.refFamily}/columns.csv", dataset.path, dataset.metadata) } } } } } stage('Test draft dataset') { agent { docker { image 'cloudfluff/gdp-sparql-tests' reuseNode true } } steps { script { pmd = pmdConfig("pmd") String draftId = pmd.drafter.findDraftset(env.JOB_NAME).id String endpoint = pmd.drafter.getDraftsetEndpoint(draftId) String dspath = util.slugise(env.JOB_NAME) def dsgraphs = [] if (fileExists('out/observations.csv')) { dsgraphs.add("${pmd.config.base_uri}/graph/${dspath}") } else { for (def observations : findFiles(glob: 'out/*.csv')) { String basename = observations.name.take(observations.name.lastIndexOf('.')) dsgraphs.add("${pmd.config.base_uri}/graph/${dspath}/${basename}") } } withCredentials([usernamePassword(credentialsId: pmd.config.credentials, usernameVariable: 'USER', passwordVariable: 'PASS')]) { for (String dsgraph : dsgraphs) { sh "sparql-test-runner -t /usr/local/tests -s ${endpoint}?union-with-live=true -a '${USER}:${PASS}' -p \"dsgraph=<${dsgraph}>\" -r reports/TESTS-${dsgraph.substring(dsgraph.lastIndexOf('/')+1)}.xml" } } } } } stage('Publish') { steps { script { jobDraft.publish() } } } } post { always { script { if (pipelineParams.containsKey('trelloCard')) { updateCard pipelineParams.trelloCard } archiveArtifacts artifacts: 'out/*', excludes: 'out/*.html' junit allowEmptyResults: true, testResults: 'reports/**/*.xml' publishHTML([ allowMissing: true, alwaysLinkToLastBuild: true, keepAll: true, reportDir: 'out', reportFiles: 'main.html', reportName: 'Transform']) } } } } }