Fixes versions regexes in different parts of infrastructure (#3917)

This commit is contained in:
LepilkinaElena
2020-02-26 17:08:00 +03:00
committed by GitHub
parent b75536581b
commit dafadad6a9
5 changed files with 78 additions and 9 deletions
@@ -42,7 +42,7 @@ open class BuildRegister : DefaultTask() {
val buildInfoTokens: Int = 4
val additionalInfoTokens: Int = 3
val compileTimeSamplesNumber: Int = 2
val buildNumberTokens: Int = 3
val buildNumberRegex: Regex = "\\d+(\\.\\d+)+(-M\\d)?-(\\w+)-\\d+".toRegex()
val performanceServer = "https://kotlin-native-perf-summary.labs.jb.gg"
private fun sendPostRequest(url: String, body: String) : String {
@@ -174,11 +174,8 @@ open class BuildRegister : DefaultTask() {
}
}
val buildNumberParts = buildNumber.split("-")
if (buildNumberParts.size != buildNumberTokens) {
error("Wrong format of build number $buildNumber.")
}
val (_, buildType, _) = buildNumberParts
val matchResult = buildNumberRegex.find(buildNumber) ?: error("Wrong format of build number $buildNumber.")
val buildType = matchResult.groups[3]!!.value
// Send post request to register build.
val requestBody = buildString {
@@ -55,7 +55,7 @@ open class CollisionDetector : DefaultTask() {
resolvedConflicts[outputPath] = processedFile
} else {
// Skip class files from ignored libraries if version of libraries had collision are the same.
val versionRegex = "\\d+\\.\\d+(\\.\\d+)?(-\\w+(-\\d+)?)?".toRegex()
val versionRegex = "\\d+\\.\\d+(\\.\\d+)?(-M\\d)?(-\\w+(-\\d+)?)?".toRegex()
val currentVersion = versionRegex.find(processedFile.name)?.groupValues?.get(0)
val collisionLibVersion = versionRegex.find(filesInfo.getValue(outputPath))?.groupValues?.get(0)
if (outputPath.endsWith(".class") && currentVersion == collisionLibVersion) {
@@ -0,0 +1,72 @@
/*
* Copyright 2010-2019 JetBrains s.r.o.
*
* Licensed 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.
*/
package org.jetbrains.build
import org.jetbrains.report.*
import org.jetbrains.report.json.*
data class Build(val buildNumber: String, val startTime: String, val finishTime: String, val branch: String,
val commits: String, val buildType: String, val failuresNumber: Int, val executionTime: String,
val compileTime: String, val codeSize: String, val bundleSize: String?) {
companion object: EntityFromJsonFactory<Build> {
override fun create(data: JsonElement): Build {
if (data is JsonObject) {
val buildNumber = elementToString(data.getRequiredField("buildNumber"), "buildNumber")
val startTime = elementToString(data.getRequiredField("startTime"), "startTime")
val finishTime = elementToString(data.getRequiredField("finishTime"), "finishTime")
val branch = elementToString(data.getRequiredField("branch"), "branch")
val commits = elementToString(data.getRequiredField("commits"), "commits")
val buildType = elementToString(data.getRequiredField("buildType"), "buildType")
val failuresNumber = elementToInt(data.getRequiredField("failuresNumber"), "failuresNumber")
val executionTime = elementToString(data.getRequiredField("executionTime"), "executionTime")
val compileTime = elementToString(data.getRequiredField("compileTime"), "compileTime")
val codeSize = elementToString(data.getRequiredField("codeSize"), "codeSize")
val bundleSize = elementToStringOrNull(data.getRequiredField("bundleSize"), "bundleSize")
return Build(buildNumber, startTime, finishTime, branch, commits, buildType, failuresNumber, executionTime,
compileTime, codeSize, bundleSize)
} else {
error("Top level entity is expected to be an object. Please, check origin files.")
}
}
}
private fun formatTime(time: String, targetZone: Int = 3): String {
val matchResult = "^\\d{8}T(\\d{2})(\\d{2})\\d{2}((\\+|-)\\d{2})".toRegex().find(time)?.groupValues
matchResult?.let {
val timeZone = matchResult[3].toInt()
val timeDifference = targetZone - timeZone
var hours = (matchResult[1].toInt() + timeDifference)
if (hours > 23) {
hours -= 24
}
return "${if (hours < 10) "0$hours" else "$hours"}:${matchResult[2]}"
} ?: error { "Wrong format of time $startTime" }
}
val date: String by lazy {
val matchResult = "^(\\d{4})(\\d{2})(\\d{2})".toRegex().find(startTime)?.groupValues
matchResult?.let { "${matchResult[3]}/${matchResult[2]}/${matchResult[1]}" }
?: error { "Wrong format of time $startTime" }
}
val formattedStartTime: String by lazy {
formatTime(startTime)
}
val formattedFinishTime: String by lazy {
formatTime(finishTime)
}
}
@@ -49,7 +49,7 @@ object LocalCache {
buildsDescription.forEach {
if (!it.isEmpty()) {
val buildNumber = it.substringBefore(',')
if (!"\\d+(\\.\\d+)+-\\w+-\\d+".toRegex().matches(buildNumber)) {
if (!"\\d+(\\.\\d+)+(-M\\d)?-\\w+-\\d+".toRegex().matches(buildNumber)) {
error("Build number $buildNumber differs from expected format. File with data for " +
"target $onlyTarget could be corrupted.")
}
@@ -263,7 +263,7 @@ fun main(args: Array<String>) {
val branchesUrl = "$serverUrl/branches/${parameters["target"]}"
val branches: Array<String> = JSON.parse(sendGetRequest(branchesUrl))
val releaseBranches = branches.filter { "^v\\d+\\.\\d+\\.\\d+-fixes$".toRegex().find(it) != null }
val releaseBranches = branches.filter { "^v\\d+(\\.\\d+)+(-M\\d)?-fixes$".toRegex().find(it) != null }
// Fill autocomplete list.
val buildsNumbersUrl = "$serverUrl/buildsNumbers/${parameters["target"]}"