| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| /* groovylint-disable JavaIoPackageAccess */ |
| |
| ArrayList calculateBadges(Map project) { |
| def badges = [] |
| if (getStatus("https://ci-builds.apache.org/job/Sling/job/modules/job/sling-${project.folder}/job/master/badge/icon") != 404) { |
| println 'Adding build status badge...' |
| badges.add(" [![Build Status](https://ci-builds.apache.org/job/Sling/job/modules/job/sling-${project.folder}/job/master/badge/icon)](https://ci-builds.apache.org/job/Sling/job/modules/job/sling-${project.folder}/job/master/)") |
| } |
| if (responseValid("https://img.shields.io/jenkins/tests.svg?jobUrl=https://ci-builds.apache.org/job/Sling/job/modules/job/sling-${project.folder}/job/master/")) { |
| println 'Adding test status badge...' |
| badges.add(" [![Test Status](https://img.shields.io/jenkins/tests.svg?jobUrl=https://ci-builds.apache.org/job/Sling/job/modules/job/sling-${project.folder}/job/master/)](https://ci-builds.apache.org/job/Sling/job/modules/job/sling-${project.folder}/job/master/test/?width=800&height=600)") |
| } |
| if (responseValid("https://sonarcloud.io/api/project_badges/measure?project=apache_sling-${project.folder}&metric=coverage")) { |
| println 'Adding coverage status badge...' |
| badges.add(" [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=apache_sling-${project.folder}&metric=coverage)](https://sonarcloud.io/dashboard?id=apache_sling-${project.folder})") |
| } |
| if (responseValid("https://sonarcloud.io/api/project_badges/measure?project=apache_sling-${project.folder}&metric=alert_status")) { |
| println 'Adding quality status badge...' |
| badges.add(" [![Sonarcloud Status](https://sonarcloud.io/api/project_badges/measure?project=apache_sling-${project.folder}&metric=alert_status)](https://sonarcloud.io/dashboard?id=apache_sling-${project.folder})") |
| } |
| if (project.artifactId) { |
| if (getStatus("https://www.javadoc.io/badge/org.apache.sling/${project.artifactId}.svg") != 404) { |
| println 'Adding JavaDoc badge...' |
| badges.add(" [![JavaDoc](https://www.javadoc.io/badge/org.apache.sling/${project.artifactId}.svg)](https://www.javadoc.io/doc/org.apache.sling/${project.folder})") |
| } |
| if (responseValid("https://maven-badges.herokuapp.com/maven-central/org.apache.sling/${project.artifactId}/badge.svg")) { |
| println 'Adding Maven release badge...' |
| badges.add(" [![Maven Central](https://maven-badges.herokuapp.com/maven-central/org.apache.sling/${project.artifactId}/badge.svg)](https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.apache.sling%22%20a%3A%22${project.artifactId}%22)") |
| } |
| } |
| if (project.contrib) { |
| println 'Adding contrib status badge...' |
| badges.add(' [![Contrib](https://sling.apache.org/badges/status-contrib.svg)](https://github.com/apache/sling-aggregator/blob/master/docs/status/contrib.md)') |
| } |
| if (project.deprecated) { |
| println 'Adding deprecated status badge...' |
| badges.add(' [![Deprecated](https://sling.apache.org/badges/status-deprecated.svg)](https://github.com/apache/sling-aggregator/blob/master/docs/status/deprecated.md)') |
| } |
| if (project.group) { |
| println 'Adding group badge...' |
| badges.add(" [![${project.group}](https://sling.apache.org/badges/group-${project.group}.svg)](https://github.com/apache/sling-aggregator/blob/master/docs/groups/${project.group}.md)") |
| } |
| return badges |
| } |
| |
| String getProjectGroup(String repoName, File aggregatorDir) { |
| println 'Loading manifest...' |
| |
| manifest = new XmlParser().parseText(new File(aggregatorDir, 'default.xml').text) |
| |
| def groupNode = projectGroup = manifest.project.find { |
| it.@path == repoName |
| } |
| if (groupNode != null) { |
| def groupName = groupNode['@groups'] |
| if (groupName != null) { |
| println "Using Group: ${groupName}" |
| return groupName |
| } |
| } |
| return '' |
| } |
| |
| int getStatus(String url) { |
| def get = new URL(url).openConnection() |
| get.setRequestProperty('User-Agent', 'curl/7.35.0') |
| def rc = get.getResponseCode() |
| println 'Retrieved status ' + rc + ' from ' + url |
| return rc |
| } |
| |
| Map parseMavenPom(File projectFolder, File aggregatorDir) { |
| File pomFile = new File(projectFolder, 'pom.xml') |
| String repoName = projectFolder.name |
| |
| println "Fetching from ${projectFolder}..." |
| |
| println 'Reading status lists...' |
| String[] deprecated = new File(aggregatorDir, 'deprecated-projects.txt').text.split('\\n') |
| assert deprecated |
| String[] contrib = new File(aggregatorDir, 'contrib-projects.txt').text.split('\\n') |
| assert contrib |
| |
| if (pomFile.exists()) { |
| println 'Parsing pom.xml...' |
| Node pom = new XmlParser().parseText(pomFile.text) |
| |
| Map project = [:] |
| project['artifactId'] = pom.artifactId.text() |
| project['name'] = pom.name.text() |
| project['description'] = pom.description.text().replace('\n', ' ') |
| project['group'] = getProjectGroup(repoName, aggregatorDir) |
| project['folder'] = repoName |
| if (contrib.contains(repoName)) { |
| println 'Setting project status to contrib...' |
| project['contrib'] = true |
| } |
| if (deprecated.contains(repoName)) { |
| println 'Setting project status to deprecated...' |
| project['deprecated'] = true |
| } |
| return project |
| } |
| return null |
| } |
| |
| boolean responseValid(String url) { |
| def get = new URL(url).openConnection() |
| get.setRequestProperty('User-Agent', 'curl/7.35.0') |
| int rc = get.responseCode |
| if (rc == 200) { |
| println "Retrieved valid response code ${rc} from ${url}" |
| String text = get.inputStream.text |
| if (text.contains('inaccessible') || text.contains('not found') || text.contains('not been found') |
| || text.contains('invalid') || text.contains('unknown') || text.contains('no tests found')) { |
| println "Retrieved invalid response from ${url}" |
| return false |
| } |
| return true |
| } |
| println "Retrieved invalid response code ${rc} from ${url}" |
| return false |
| } |