From 1dd879f255ea9dc5afb41f3338e7c759a03b7300 Mon Sep 17 00:00:00 2001 From: Maxim Bachinsky Date: Sun, 28 Jun 2020 23:14:29 +0300 Subject: [PATCH 001/168] update api gen version --- gradle/apiGenerator.gradle | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/gradle/apiGenerator.gradle b/gradle/apiGenerator.gradle index 12eac76..5f3435c 100644 --- a/gradle/apiGenerator.gradle +++ b/gradle/apiGenerator.gradle @@ -12,10 +12,10 @@ configurations { } dependencies { - apigenerator 'ru.touchin:api-generator:1.4.0-beta1' + apigenerator 'ru.touchin:api-generator:1.4.0-beta2' } -android.applicationVariants.all { variant -> +android.libraryVariants.all { variant -> final File generatedModelsDirectory = new File("${project.buildDir}/generated/source/models/${variant.dirName}") def generateJsonModelsTask = tasks.create("apiGenerator${variant.name}") doLast { @@ -26,9 +26,11 @@ android.applicationVariants.all { variant -> configurations.apigenerator.asPath, "generate-client-code", "--output-language", - "JAVA", + "KOTLIN", "--specification-path", rootProject.extensions.findByName("pathToApiSchemes"), + "--kotlin-methods-generation-mode", + "coroutines", "--output-path", "${generatedModelsDirectory.path}", "--package-name", From 86702efd508a75a3882ec45e54630ec4d0a0f6bc Mon Sep 17 00:00:00 2001 From: Maxim Bachinsky Date: Mon, 29 Jun 2020 00:58:20 +0300 Subject: [PATCH 002/168] add to string generator root path for multimodule project --- gradle/stringGenerator.gradle | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/gradle/stringGenerator.gradle b/gradle/stringGenerator.gradle index a05b155..374ab12 100644 --- a/gradle/stringGenerator.gradle +++ b/gradle/stringGenerator.gradle @@ -2,11 +2,11 @@ import groovy.json.JsonSlurper import groovy.xml.MarkupBuilder task stringGenerator { - generate(android.languageMap) + generate(android.languageMap, android.rootPath ?: "app") println("Strings generated!") } -private def generate(Map sources) { +private def generate(Map sources, String rootPath) { if (sources == null || sources.isEmpty()) { throw new IOException("languageMap can't be null or empty") } @@ -31,7 +31,7 @@ private def generate(Map sources) { } } - def stringsFile = getFile(key, key == defaultLang) + def stringsFile = getFile(key, key == defaultLang, rootPath) stringsFile.write(sw.toString(), "UTF-8") } } @@ -69,15 +69,15 @@ private static Map getJsonsMap(Map sources) { } } -private static File getFile(String key, boolean defaultLang) { +private static File getFile(String key, boolean defaultLang, String rootPath) { if (defaultLang) { - return new File("app/src/main/res/values/strings.xml") + return new File("${rootPath}/src/main/res/values/strings.xml") } else { - def directory = new File("app/src/main/res/values-$key") + def directory = new File("${rootPath}/src/main/res/values-$key") if (!directory.exists()) { directory.mkdir() } - return new File("app/src/main/res/values-$key/strings.xml") + return new File("${rootPath}/src/main/res/values-$key/strings.xml") } } From 7850b7f0cdd5d261e532d265b33464a9140a6d45 Mon Sep 17 00:00:00 2001 From: Maxim Bachinsky Date: Mon, 29 Jun 2020 01:19:47 +0300 Subject: [PATCH 003/168] fix correct name for coroutines --- gradle/apiGenerator.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/apiGenerator.gradle b/gradle/apiGenerator.gradle index 5f3435c..9a094c3 100644 --- a/gradle/apiGenerator.gradle +++ b/gradle/apiGenerator.gradle @@ -30,7 +30,7 @@ android.libraryVariants.all { variant -> "--specification-path", rootProject.extensions.findByName("pathToApiSchemes"), "--kotlin-methods-generation-mode", - "coroutines", + "COROUTINE", "--output-path", "${generatedModelsDirectory.path}", "--package-name", From e3e730c762fc56717e8763313ca7abdd9bc0bf79 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Tue, 7 Jul 2020 18:51:13 +0300 Subject: [PATCH 004/168] updated api gen version --- gradle/apiGenerator.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/apiGenerator.gradle b/gradle/apiGenerator.gradle index 9a094c3..fc9dae3 100644 --- a/gradle/apiGenerator.gradle +++ b/gradle/apiGenerator.gradle @@ -12,7 +12,7 @@ configurations { } dependencies { - apigenerator 'ru.touchin:api-generator:1.4.0-beta2' + apigenerator 'ru.touchin:api-generator:1.4.0-beta3' } android.libraryVariants.all { variant -> From 1b444a458208831921b3b5bd90361f225569881d Mon Sep 17 00:00:00 2001 From: Maxim Bachinsky Date: Wed, 19 Aug 2020 17:06:08 +0300 Subject: [PATCH 005/168] move apigen and static analysis scripts to plugins. removed extra files --- checkstyle/configuration/google_checks.xml | 210 ----------- .../configuration/touchin_checkstyle.xml | 339 ------------------ findbugs/filters/findbugs-filter.xml | 23 -- gradle/apiGenerator.gradle | 44 --- gradle/apiGeneratorKotlinServer.gradle | 38 -- gradle/commonStaticAnalysis.gradle | 233 ------------ gradle/plugins/.gitignore | 19 + gradle/plugins/build.gradle.kts | 52 +++ gradle/plugins/settings.gradle.kts | 0 .../java/apigen/ApiGeneratorAndroidPlugin.kt | 37 ++ .../java/apigen/ApiGeneratorBackendPlugin.kt | 19 + .../main/java/apigen/ApiGeneratorExtension.kt | 22 ++ .../main/java/apigen/ApiGeneratorPlugin.kt | 76 ++++ .../errors/AndroidLintError.kt | 12 + .../java/static_analysis/errors/CpdError.kt | 12 + .../static_analysis/errors/DetektError.kt | 12 + .../errors/StaticAnalysisError.kt | 5 + .../static_analysis/linters/AndroidLinter.kt | 65 ++++ .../java/static_analysis/linters/CpdLinter.kt | 57 +++ .../static_analysis/linters/DetektLinter.kt | 62 ++++ .../java/static_analysis/linters/Linter.kt | 12 + .../plugins/StaticAnalysisAndroidPlugin.kt | 43 +++ .../plugins/StaticAnalysisBackendPlugin.kt | 21 ++ .../plugins/StaticAnalysisExtension.kt | 6 + .../plugins/StaticAnalysisPlugin.kt | 47 +++ .../java/static_analysis/utils/Extensions.kt | 33 ++ .../static_analysis/utils/ReportGenerator.kt | 52 +++ .../applicationFileNaming.gradle | 0 gradle/{ => scripts}/stringGenerator.gradle | 0 gradle/staticAnalysis.gradle | 166 --------- lint/lint.xml | 272 -------------- pmd/rulesets/java/android.xml | 131 ------- export_src.sh => scripts/export_src.sh | 0 .../detekt-config.yml | 2 +- static_analysis_configs/lint.xml | 273 ++++++++++++++ 35 files changed, 938 insertions(+), 1457 deletions(-) delete mode 100755 checkstyle/configuration/google_checks.xml delete mode 100755 checkstyle/configuration/touchin_checkstyle.xml delete mode 100644 findbugs/filters/findbugs-filter.xml delete mode 100644 gradle/apiGenerator.gradle delete mode 100644 gradle/apiGeneratorKotlinServer.gradle delete mode 100644 gradle/commonStaticAnalysis.gradle create mode 100644 gradle/plugins/.gitignore create mode 100644 gradle/plugins/build.gradle.kts create mode 100644 gradle/plugins/settings.gradle.kts create mode 100644 gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt create mode 100644 gradle/plugins/src/main/java/apigen/ApiGeneratorBackendPlugin.kt create mode 100644 gradle/plugins/src/main/java/apigen/ApiGeneratorExtension.kt create mode 100644 gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt create mode 100644 gradle/plugins/src/main/java/static_analysis/errors/AndroidLintError.kt create mode 100644 gradle/plugins/src/main/java/static_analysis/errors/CpdError.kt create mode 100644 gradle/plugins/src/main/java/static_analysis/errors/DetektError.kt create mode 100644 gradle/plugins/src/main/java/static_analysis/errors/StaticAnalysisError.kt create mode 100644 gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt create mode 100644 gradle/plugins/src/main/java/static_analysis/linters/CpdLinter.kt create mode 100644 gradle/plugins/src/main/java/static_analysis/linters/DetektLinter.kt create mode 100644 gradle/plugins/src/main/java/static_analysis/linters/Linter.kt create mode 100644 gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisAndroidPlugin.kt create mode 100644 gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisBackendPlugin.kt create mode 100644 gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisExtension.kt create mode 100644 gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisPlugin.kt create mode 100644 gradle/plugins/src/main/java/static_analysis/utils/Extensions.kt create mode 100644 gradle/plugins/src/main/java/static_analysis/utils/ReportGenerator.kt rename gradle/{ => scripts}/applicationFileNaming.gradle (100%) rename gradle/{ => scripts}/stringGenerator.gradle (100%) delete mode 100644 gradle/staticAnalysis.gradle delete mode 100644 lint/lint.xml delete mode 100644 pmd/rulesets/java/android.xml rename export_src.sh => scripts/export_src.sh (100%) rename {kotlin => static_analysis_configs}/detekt-config.yml (99%) create mode 100644 static_analysis_configs/lint.xml diff --git a/checkstyle/configuration/google_checks.xml b/checkstyle/configuration/google_checks.xml deleted file mode 100755 index 441f1af..0000000 --- a/checkstyle/configuration/google_checks.xml +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/checkstyle/configuration/touchin_checkstyle.xml b/checkstyle/configuration/touchin_checkstyle.xml deleted file mode 100755 index b36d47f..0000000 --- a/checkstyle/configuration/touchin_checkstyle.xml +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/findbugs/filters/findbugs-filter.xml b/findbugs/filters/findbugs-filter.xml deleted file mode 100644 index bb462be..0000000 --- a/findbugs/filters/findbugs-filter.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gradle/apiGenerator.gradle b/gradle/apiGenerator.gradle deleted file mode 100644 index fc9dae3..0000000 --- a/gradle/apiGenerator.gradle +++ /dev/null @@ -1,44 +0,0 @@ -repositories { - maven { - url 'https://dl.bintray.com/touchin/touchin-tools' - metadataSources { - artifact() - } - } -} - -configurations { - apigenerator -} - -dependencies { - apigenerator 'ru.touchin:api-generator:1.4.0-beta3' -} - -android.libraryVariants.all { variant -> - final File generatedModelsDirectory = new File("${project.buildDir}/generated/source/models/${variant.dirName}") - - def generateJsonModelsTask = tasks.create("apiGenerator${variant.name}") doLast { - javaexec { - main = "-jar" - workingDir = file("${rootDir}") - args = [ - configurations.apigenerator.asPath, - "generate-client-code", - "--output-language", - "KOTLIN", - "--specification-path", - rootProject.extensions.findByName("pathToApiSchemes"), - "--kotlin-methods-generation-mode", - "COROUTINE", - "--output-path", - "${generatedModelsDirectory.path}", - "--package-name", - "${rootProject.extensions.findByName("applicationId") ?: applicationId}" - ] - } - } - - generateJsonModelsTask.description = 'Generates Java classes for JSON models' - variant.registerJavaGeneratingTask generateJsonModelsTask, generatedModelsDirectory -} diff --git a/gradle/apiGeneratorKotlinServer.gradle b/gradle/apiGeneratorKotlinServer.gradle deleted file mode 100644 index 66676b5..0000000 --- a/gradle/apiGeneratorKotlinServer.gradle +++ /dev/null @@ -1,38 +0,0 @@ -repositories { - maven { - url "https://dl.bintray.com/touchin/touchin-tools" - metadataSources { - artifact() - } - } -} - -configurations { - apigeneratorKotlinServer -} - -dependencies { - apigeneratorKotlinServer 'ru.touchin:api-generator:1.4.0-beta1' -} - -task generateApiModelsKotlinServer doLast { - javaexec { - main = "-jar" - workingDir = file("${rootDir}") - args = [ - configurations.apigeneratorKotlinServer.asPath, - "generate-client-code", - "--output-language", - "KOTLIN_SERVER", - "--specification-path", - rootProject.extensions.findByName("pathToApiSchemes"), - "--output-path", - "${rootDir}/src/main/kotlin", - "--package-name", - rootProject.extensions.findByName("apiPackageName"), - "--recreate_output_dirs", - false - ] - } -} - diff --git a/gradle/commonStaticAnalysis.gradle b/gradle/commonStaticAnalysis.gradle deleted file mode 100644 index b929257..0000000 --- a/gradle/commonStaticAnalysis.gradle +++ /dev/null @@ -1,233 +0,0 @@ -apply plugin: 'cpd' -apply plugin: 'io.gitlab.arturbosch.detekt' - -def getCpdTask -def getLintTask -def getKotlinDetektTasks - -def appendError -def appendCpdErrors -def appendKotlinErrors -def appendLintErrors - -repositories { - maven { url "http://dl.bintray.com/touchin/touchin-tools" } -} - -configurations { - pngtastic -} - -cpd { - skipLexicalErrors = true -} - -import org.apache.tools.ant.taskdefs.condition.Os - -ext.getIdeaFormatTask = { isAndroidProject, sources -> - def ideaPath = System.getenv("IDEA_HOME") - if (ideaPath == null) { - return tasks.create((isAndroidProject ? "android" : "server") + "donothing") - } - return tasks.create((isAndroidProject ? "android" : "server") + "IdeaFormat_$project.name", Exec) { - def inspectionPath - def params = ["-r", "-mask", "*.java,*.kt,*.xml"] - for (String source : sources) { - params.add(source) - } - - if (Os.isFamily(Os.FAMILY_WINDOWS)) { - inspectionPath = ['cmd', '/c', "\"${ideaPath}\\bin\\format.bat\" ${params.join(" ")}"] - } else { - inspectionPath = ["$ideaPath/bin/format.sh"] - } - commandLine inspectionPath - if (!Os.isFamily(Os.FAMILY_WINDOWS)) { - args = params - } - } -} - -ext.getStaticAnalysisTaskNames = { isAndroidProject, sources, buildVariant -> - def tasksNames = new ArrayList() - try { - tasksNames.add(getCpdTask(isAndroidProject, sources)) - tasksNames.addAll(getKotlinDetektTasks()) - if (isAndroidProject) { - tasksNames.add(getLintTask(buildVariant)) - } - } catch (Exception exception) { - println(exception.toString()) - } - return tasksNames -} - -ext.generateReport = { isAndroidProject -> - StringBuilder consoleReport = new StringBuilder() - consoleReport.append("STATIC ANALYSIS RESULTS:") - def count = 0 - - def previousCount = count - count = appendCpdErrors(count, new File("${project.buildDir}/reports/cpd.xml")) - if (count - previousCount > 0) { - consoleReport.append("\nCPD: FAILED (" + (count - previousCount) + " errors)") - } else { - consoleReport.append("\nCPD: PASSED") - } - - previousCount = count - subprojects.forEach { subproject -> - def reportFile = new File("${rootProject.buildDir}/reports/kotlin-detekt-${subproject.name}.xml") - if (reportFile.exists()) { - count = appendKotlinErrors(count, reportFile).toInteger() - } - } - if (count - previousCount > 0) { - consoleReport.append("\nKotlin-detekt: FAILED (" + (count - previousCount) + " errors)") - } else { - consoleReport.append("\nKotlin-detekt: PASSED") - } - - if (isAndroidProject) { - previousCount = count - count = appendLintErrors(count, new File("${rootProject.buildDir}/reports/lint_report.xml")) - if (count - previousCount > 0) { - consoleReport.append("\nLint: FAILED (" + (count - previousCount) + " errors)") - } else { - consoleReport.append("\nLint: PASSED") - } - } - - if (count > 0) { - consoleReport.append("\nOverall: FAILED (" + count + " errors)") - throw new Exception(consoleReport.toString()) - } else { - consoleReport.append("\nOverall: PASSED") - println(consoleReport.toString()) - } -} - -appendError = { number, analyzer, file, line, errorId, errorLink, description -> - println("$number. $analyzer : $description ($errorId)\n\tat $file: $line") -} - -appendKotlinErrors = { count, checkstyleFile -> - def rootNode = new XmlParser().parse(checkstyleFile) - for (def fileNode : rootNode.children()) { - if (!fileNode.name().equals("file")) { - continue - } - - for (def errorNode : fileNode.children()) { - if (!errorNode.name().equals("error")) { - continue - } - count++ - - appendError(count, "Detekt", fileNode.attribute("name"), errorNode.attribute("line"), errorNode.attribute("source"), "", errorNode.attribute("message")) - } - } - return count -} - -appendCpdErrors = { count, cpdFile -> - def rootNode = new XmlParser().parse(cpdFile) - for (def duplicationNode : rootNode.children()) { - if (!duplicationNode.name().equals("duplication")) { - continue - } - count++ - - def duplicationIndex = 0 - - String duplicationPoints = "" - for (def filePointNode : duplicationNode.children()) { - if (filePointNode.name().equals("file")) { - def file = filePointNode.attribute("path") - def line = filePointNode.attribute("line") - duplicationPoints += "\n " + file + ":" + line - duplicationIndex++ - } - } - println("$count CPD: code duplication $duplicationPoints") - } - return count -} - -appendLintErrors = { count, lintFile -> - def rootNode = new XmlParser().parse(lintFile) - for (def issueNode : rootNode.children()) { - if (!issueNode.name().equals("issue") - || !issueNode.attribute("severity").equals("Error")) { - continue - } - for (def locationNode : issueNode.children()) { - if (!locationNode.name().equals("location")) { - continue - } - count++ - appendError(count, "Lint", locationNode.attribute("file"), locationNode.attribute("line"), - issueNode.attribute("id"), issueNode.attribute("explanation"), issueNode.attribute("message")) - } - } - return count -} - -getCpdTask = { isAndroidProject, sources -> - def taskName = (isAndroidProject ? "android" : "server") + "cpd_${rootProject.name}" - def task = tasks.findByName(taskName) - if (task == null) { - task = tasks.create(taskName, tasks.findByName('cpdCheck').getClass().getSuperclass()) { - minimumTokenCount = 60 - source = files(sources) - ignoreFailures = true - reports { - xml { - enabled = true - destination = file("${rootProject.buildDir}/reports/cpd.xml") - } - } - } - } - return task.path -} - -getLintTask = { buildVariant -> - def appProject = subprojects.find { it.plugins.hasPlugin("com.android.application") } - def lintTaskPath - if (buildVariant != null) { - lintTaskPath = ":${appProject.name}:lint${buildVariant.name.capitalize()}" - } else { - def lintDebugTasks = appProject.tasks.matching { it.getName().contains("lint") && it.getName().contains("Debug") } - lintTaskPath = lintDebugTasks.first().path - } - if (lintTaskPath == null) { - throw IllegalStateException("Unable to find lint debug task for build variant: ${buildVariant}") - } - return lintTaskPath -} - -getKotlinDetektTasks = { - subprojects - .findResults { it.tasks.findByName("detekt")?.path } - .findAll { !it.contains(":libs") } -} - -task optimizePng { - doFirst { - def jarArgs = new ArrayList() - jarArgs.add(configurations.pngtastic.asPath) - def relatedPathIndex = "${rootDir}".length() + 1 - for (def file : fileTree(dir: "${rootDir}", include: '**/src/**/res/drawable**/*.png')) { - jarArgs.add(file.absolutePath.substring(relatedPathIndex)) - } - for (def file : fileTree(dir: "${rootDir}", include: '**/src/**/res/mipmap**/*.png')) { - jarArgs.add(file.absolutePath.substring(relatedPathIndex)) - } - javaexec { main = "-jar"; args = jarArgs; workingDir = file("${rootDir}") } - } -} - -dependencies { - pngtastic 'com.github.depsypher:pngtastic:1.2' -} diff --git a/gradle/plugins/.gitignore b/gradle/plugins/.gitignore new file mode 100644 index 0000000..d7e7478 --- /dev/null +++ b/gradle/plugins/.gitignore @@ -0,0 +1,19 @@ +# Generated files +bin/ +gen/ + +# Gradle files +.gradle/ +build/ +/*/build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Log Files +*.log +.gradle +.idea +.DS_Store +/captures +*.iml diff --git a/gradle/plugins/build.gradle.kts b/gradle/plugins/build.gradle.kts new file mode 100644 index 0000000..3611bcb --- /dev/null +++ b/gradle/plugins/build.gradle.kts @@ -0,0 +1,52 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + `java-gradle-plugin` + `kotlin-dsl` +} + +// The kotlin-dsl plugin requires a repository to be declared +repositories { + jcenter() + google() +} + +dependencies { + // android gradle plugin, required by custom plugin + implementation("com.android.tools.build:gradle:4.0.1") + + implementation("io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.10.0") + implementation("de.aaschmid:gradle-cpd-plugin:3.1") + + // kotlin plugin, required by custom plugin + implementation(kotlin("gradle-plugin", embeddedKotlinVersion)) + + gradleKotlinDsl() + implementation(kotlin("stdlib-jdk8")) +} + +val compileKotlin: KotlinCompile by tasks +compileKotlin.kotlinOptions { + jvmTarget = "1.8" +} + +gradlePlugin { + plugins { + create("api-generator-android") { + id = "api-generator-android" + implementationClass = "apigen.ApiGeneratorAndroidPlugin" + } + create("api-generator-backend") { + id = "api-generator-backend" + implementationClass = "apigen.ApiGeneratorBackendPlugin" + } + create("static-analysis-android") { + id = "static-analysis-android" + implementationClass = "static_analysis.plugins.StaticAnalysisAndroidPlugin" + } + create("static-analysis-backend") { + id = "static-analysis-backend" + implementationClass = "static_analysis.plugins.StaticAnalysisBackendPlugin" + } + } +} diff --git a/gradle/plugins/settings.gradle.kts b/gradle/plugins/settings.gradle.kts new file mode 100644 index 0000000..e69de29 diff --git a/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt b/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt new file mode 100644 index 0000000..fa417b0 --- /dev/null +++ b/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt @@ -0,0 +1,37 @@ +package apigen + +import com.android.build.gradle.LibraryExtension +import org.gradle.api.Project +import org.gradle.kotlin.dsl.getByType +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +class ApiGeneratorAndroidPlugin : ApiGeneratorPlugin() { + + override fun apply(target: Project) { + super.apply(target) + + with(target) { + val extension = getExtension() + val outputDir = getDirectoryForGeneration() + + extension.outputDirPath = outputDir.path + extension.recreateOutputDir = true + + afterEvaluate { + extensions.getByType().apply { + sourceSets.getByName("main") + .java + .srcDir(outputDir) + } + tasks + .filterIsInstance(KotlinCompile::class.java) + .forEach { + it.source(outputDir) + } + } + } + } + + private fun Project.getDirectoryForGeneration() = file("$buildDir/generated/api") + +} diff --git a/gradle/plugins/src/main/java/apigen/ApiGeneratorBackendPlugin.kt b/gradle/plugins/src/main/java/apigen/ApiGeneratorBackendPlugin.kt new file mode 100644 index 0000000..b68eccf --- /dev/null +++ b/gradle/plugins/src/main/java/apigen/ApiGeneratorBackendPlugin.kt @@ -0,0 +1,19 @@ +package apigen + +import org.gradle.api.Project + +class ApiGeneratorBackendPlugin : ApiGeneratorPlugin() { + + override fun apply(target: Project) { + super.apply(target) + + with(target) { + val extension = getExtension() + + extension.outputDirPath = file("src/main/kotlin").path + extension.recreateOutputDir = false + extension.outputLanguage = OutputLanguage.KotlinServer + + } + } +} diff --git a/gradle/plugins/src/main/java/apigen/ApiGeneratorExtension.kt b/gradle/plugins/src/main/java/apigen/ApiGeneratorExtension.kt new file mode 100644 index 0000000..76e0ed9 --- /dev/null +++ b/gradle/plugins/src/main/java/apigen/ApiGeneratorExtension.kt @@ -0,0 +1,22 @@ +package apigen + +open class ApiGeneratorExtension( + var pathToApiSchemes: String? = null, + var outputPackageName: String = "", + var outputDirPath: String = "", + var recreateOutputDir: Boolean = false, + var outputLanguage: OutputLanguage? = null +) + +sealed class OutputLanguage(val argName: String, val methodOutputType: MethodOutputType? = null) { + object KotlinServer : OutputLanguage("KOTLIN_SERVER") + class KotlinAndroid(methodOutputType: MethodOutputType = MethodOutputType.Rx) : OutputLanguage("KOTLIN", methodOutputType) + object Java : OutputLanguage("JAVA") + object Swift : OutputLanguage("SWIFT") +} + +sealed class MethodOutputType(val argName: String) { + object Rx : MethodOutputType("REACTIVE") + object RetrofitCall : MethodOutputType("CALL") + object Coroutine : MethodOutputType("COROUTINE") +} diff --git a/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt b/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt new file mode 100644 index 0000000..ff272ce --- /dev/null +++ b/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt @@ -0,0 +1,76 @@ +package apigen + +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.kotlin.dsl.create +import org.gradle.kotlin.dsl.dependencies +import org.gradle.kotlin.dsl.repositories + +abstract class ApiGeneratorPlugin : Plugin { + + companion object { + const val API_GENERATOR_CONFIG = "apiGenerator" + const val API_GENERATOR_EXT_NAME = "apiGenerator" + const val API_GENERATOR_VERSION = "1.4.0-beta4" + } + + override fun apply(target: Project) { + with(target) { + repositories { + maven { + url = uri("https://dl.bintray.com/touchin/touchin-tools") + metadataSources { + artifact() + } + } + } + + configurations.create(API_GENERATOR_CONFIG) + + dependencies { + add(API_GENERATOR_CONFIG, "ru.touchin:api-generator:$API_GENERATOR_VERSION") + } + + extensions.create(API_GENERATOR_EXT_NAME) + + val apiGenTask = createApiGeneratorTask() + + gradle.projectsEvaluated { + tasks.getByName("preBuild").dependsOn(apiGenTask) + } + } + } + + protected fun Project.getExtension(): ApiGeneratorExtension = extensions.getByName(API_GENERATOR_EXT_NAME) as ApiGeneratorExtension + + private fun Project.createApiGeneratorTask(): Task = tasks.create(API_GENERATOR_CONFIG).doLast { + + val extension = getExtension() + + val pathToApiSchemes = extension.pathToApiSchemes ?: throw IllegalStateException("Configure path to api schemes for api generator plugin") + val outputLanguage = extension.outputLanguage ?: throw IllegalStateException("Configure output language code for api generator plugin") + + javaexec { + main = "-jar" + workingDir = rootDir + args = listOfNotNull( + configurations.getByName("apiGenerator").asPath, + "generate-client-code", + "--output-language", + outputLanguage.argName, + "--specification-path", + pathToApiSchemes, + "--kotlin-methods-generation-mode".takeIf { outputLanguage.methodOutputType != null }, + outputLanguage.methodOutputType?.argName, + "--output-path", + extension.outputDirPath, + "--package-name", + extension.outputPackageName, + "--recreate_output_dirs", + extension.recreateOutputDir.toString() + ) + } + } + +} diff --git a/gradle/plugins/src/main/java/static_analysis/errors/AndroidLintError.kt b/gradle/plugins/src/main/java/static_analysis/errors/AndroidLintError.kt new file mode 100644 index 0000000..aee4a44 --- /dev/null +++ b/gradle/plugins/src/main/java/static_analysis/errors/AndroidLintError.kt @@ -0,0 +1,12 @@ +package static_analysis.errors + +class AndroidLintError( + private val filePath: String, + private val fileLine: String, + private val errorId: String, + private val description: String +) : StaticAnalysisError { + + override fun print(count: Int): String = "\n$count. Android Lint. $description ($errorId)\n\tat [$filePath:$fileLine]" + +} diff --git a/gradle/plugins/src/main/java/static_analysis/errors/CpdError.kt b/gradle/plugins/src/main/java/static_analysis/errors/CpdError.kt new file mode 100644 index 0000000..cca1c8a --- /dev/null +++ b/gradle/plugins/src/main/java/static_analysis/errors/CpdError.kt @@ -0,0 +1,12 @@ +package static_analysis.errors + +class CpdError( + private val duplications: List>, + private val codeFragment: String +) : StaticAnalysisError { + + override fun print(count: Int): String = "\n$count. CPD. Code duplication in files: " + + duplications.joinToString(separator = "") { (file, line) -> "\n\t[$file:$line]" } + + "\n\n Duplicated code:\n\n$codeFragment\n" + +} diff --git a/gradle/plugins/src/main/java/static_analysis/errors/DetektError.kt b/gradle/plugins/src/main/java/static_analysis/errors/DetektError.kt new file mode 100644 index 0000000..3aa9c09 --- /dev/null +++ b/gradle/plugins/src/main/java/static_analysis/errors/DetektError.kt @@ -0,0 +1,12 @@ +package static_analysis.errors + +class DetektError( + private val filePath: String, + private val fileLine: String, + private val errorId: String, + private val description: String +) : StaticAnalysisError { + + override fun print(count: Int): String = "\n$count. Detekt. $description ($errorId)\n\tat [$filePath:$fileLine]" + +} diff --git a/gradle/plugins/src/main/java/static_analysis/errors/StaticAnalysisError.kt b/gradle/plugins/src/main/java/static_analysis/errors/StaticAnalysisError.kt new file mode 100644 index 0000000..f932aca --- /dev/null +++ b/gradle/plugins/src/main/java/static_analysis/errors/StaticAnalysisError.kt @@ -0,0 +1,5 @@ +package static_analysis.errors + +interface StaticAnalysisError { + fun print(count: Int): String +} diff --git a/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt b/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt new file mode 100644 index 0000000..f299d22 --- /dev/null +++ b/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt @@ -0,0 +1,65 @@ +package static_analysis.linters + +import com.android.build.gradle.AppExtension +import com.android.build.gradle.AppPlugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.findByType +import static_analysis.errors.AndroidLintError +import static_analysis.errors.StaticAnalysisError +import static_analysis.plugins.StaticAnalysisExtension +import static_analysis.utils.typedChildren +import static_analysis.utils.xmlParser + +class AndroidLinter : Linter { + + override val name: String = "Android lint" + + override fun getErrors(project: Project): List = xmlParser(project.getLintReportFile()) + .typedChildren() + .filter { it.name() == "issue" && (it.attribute("severity") as String) == "Error" } + .map { errorNode -> + errorNode + .typedChildren() + .filter { it.name() == "location" } + .map { locationNode -> + AndroidLintError( + filePath = locationNode.attribute("file") as String, + fileLine = locationNode.attribute("line") as String, + errorId = errorNode.attribute("id") as String, + description = errorNode.attribute("message") as String + ) + } + } + .flatten() + + override fun setupForProject(project: Project, extension: StaticAnalysisExtension) { + project.gradle.projectsEvaluated { + project.subprojects + .mapNotNull { it.extensions.findByType() } + .first() + .lintOptions.apply { + isAbortOnError = false + isCheckAllWarnings = true + isWarningsAsErrors = false + xmlReport = true + htmlReport = false + isCheckDependencies = true + disable("MissingConstraints", "VectorRaster") + xmlOutput = project.getLintReportFile() + lintConfig = project.file("${extension.buildScriptDir}/static_analysis_configs/lint.xml") + } + } + } + + override fun getTaskNames(project: Project, buildType: String?): List = project + .subprojects + .filter { it.plugins.hasPlugin(AppPlugin::class.java) } + .mapNotNull { subproject: Project -> + subproject.tasks.find { task -> + task.name.contains(buildType!!, ignoreCase = true) && task.name.contains("lint") + }?.path + } + + private fun Project.getLintReportFile() = file("${rootProject.buildDir}/reports/lint-report.xml") + +} diff --git a/gradle/plugins/src/main/java/static_analysis/linters/CpdLinter.kt b/gradle/plugins/src/main/java/static_analysis/linters/CpdLinter.kt new file mode 100644 index 0000000..ca3ff7e --- /dev/null +++ b/gradle/plugins/src/main/java/static_analysis/linters/CpdLinter.kt @@ -0,0 +1,57 @@ +package static_analysis.linters + +import de.aaschmid.gradle.plugins.cpd.Cpd +import de.aaschmid.gradle.plugins.cpd.CpdExtension +import org.gradle.api.Project +import org.gradle.kotlin.dsl.findByType +import org.gradle.kotlin.dsl.withType +import static_analysis.errors.CpdError +import static_analysis.errors.StaticAnalysisError +import static_analysis.plugins.StaticAnalysisExtension +import static_analysis.utils.getSources +import static_analysis.utils.typedChildren +import static_analysis.utils.xmlParser + +class CpdLinter : Linter { + + override val name: String = "CPD" + + override fun getErrors(project: Project): List = xmlParser(project.getCpdReportFile()) + .typedChildren() + .filter { it.name() == "duplication" } + .map { duplicationNode -> + + val children = duplicationNode + .typedChildren() + + CpdError( + duplications = children + .filter { it.name() == "file" } + .map { fileNode -> fileNode.attribute("path") as String to fileNode.attribute("line") as String }, + codeFragment = children.findLast { it.name() == "codefragment" }!!.text() + ) + + } + + override fun setupForProject(project: Project, extension: StaticAnalysisExtension) { + project.extensions.findByType()!!.apply { + isSkipLexicalErrors = true + language = "kotlin" + minimumTokenCount = 60 + } + project.tasks.withType { + reports.xml.destination = project.getCpdReportFile() + ignoreFailures = true + source = project.getSources(extension.excludes) + } + } + + override fun getTaskNames(project: Project, buildType: String?): List = project + .rootProject + .tasks + .withType() + .map { it.path } + + private fun Project.getCpdReportFile() = file("${rootProject.buildDir}/reports/cpd.xml") + +} diff --git a/gradle/plugins/src/main/java/static_analysis/linters/DetektLinter.kt b/gradle/plugins/src/main/java/static_analysis/linters/DetektLinter.kt new file mode 100644 index 0000000..0aafb22 --- /dev/null +++ b/gradle/plugins/src/main/java/static_analysis/linters/DetektLinter.kt @@ -0,0 +1,62 @@ +package static_analysis.linters + +import io.gitlab.arturbosch.detekt.Detekt +import org.gradle.api.Project +import static_analysis.errors.DetektError +import static_analysis.errors.StaticAnalysisError +import static_analysis.plugins.StaticAnalysisExtension +import static_analysis.utils.getSources +import static_analysis.utils.typedChildren +import static_analysis.utils.xmlParser + +class DetektLinter : Linter { + + override val name: String = "Detekt" + + override fun getErrors(project: Project): List = xmlParser(project.getDetektReportFile()) + .typedChildren() + .filter { fileNode -> fileNode.name() == "file" } + .map { fileNode -> + fileNode + .typedChildren() + .filter { it.name() == "error" } + .map { errorNode -> + DetektError( + filePath = fileNode.attribute("name") as String, + fileLine = errorNode.attribute("line") as String, + errorId = errorNode.attribute("source") as String, + description = errorNode.attribute("message") as String + ) + } + } + .flatten() + + override fun setupForProject(project: Project, extension: StaticAnalysisExtension) { + project + .tasks + .withType(Detekt::class.java) { + exclude("**/test/**") + exclude("resources/") + exclude("build/") + exclude("tmp/") + jvmTarget = "1.8" + + config.setFrom(project.files("${extension.buildScriptDir!!}/static_analysis_configs/detekt-config.yml")) + reports { + txt.enabled = false + html.enabled = false + xml { + enabled = true + destination = project.getDetektReportFile() + } + } + + source = project.getSources(extension.excludes) + } + } + + override fun getTaskNames(project: Project, buildType: String?): List = listOf(":detekt") + + private fun Project.getDetektReportFile() = file("${rootProject.buildDir}/reports/detekt.xml") + +} diff --git a/gradle/plugins/src/main/java/static_analysis/linters/Linter.kt b/gradle/plugins/src/main/java/static_analysis/linters/Linter.kt new file mode 100644 index 0000000..65421a1 --- /dev/null +++ b/gradle/plugins/src/main/java/static_analysis/linters/Linter.kt @@ -0,0 +1,12 @@ +package static_analysis.linters + +import org.gradle.api.Project +import static_analysis.errors.StaticAnalysisError +import static_analysis.plugins.StaticAnalysisExtension + +interface Linter { + val name: String + fun getErrors(project: Project): List + fun setupForProject(project: Project, extension: StaticAnalysisExtension) + fun getTaskNames(project: Project, buildType: String? = null): List +} diff --git a/gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisAndroidPlugin.kt b/gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisAndroidPlugin.kt new file mode 100644 index 0000000..c433e81 --- /dev/null +++ b/gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisAndroidPlugin.kt @@ -0,0 +1,43 @@ +package static_analysis.plugins + +import com.android.build.gradle.AppExtension +import org.gradle.api.Project +import org.gradle.kotlin.dsl.getByType +import static_analysis.linters.AndroidLinter +import static_analysis.linters.CpdLinter +import static_analysis.linters.DetektLinter +import static_analysis.linters.Linter + +class StaticAnalysisAndroidPlugin : StaticAnalysisPlugin() { + + override fun createStaticAnalysisTasks(project: Project, linters: List) { + project.subprojects { + if (plugins.hasPlugin("com.android.application")) { + + extensions.getByType().apply { + applicationVariants.forEach { variant -> + project.tasks.register("staticAnalysis${variant.name.capitalize()}") { + setupStaticAnalysisTask(linters, variant.name) + } + } + + project.tasks.register("staticAnalysis") { + setupStaticAnalysisTask( + linters = linters, + buildVariant = applicationVariants.first { it.name.contains("Debug") }.name + ) + } + } + + + } + } + } + + override fun createLinters(): List = listOf( + DetektLinter(), + CpdLinter(), + AndroidLinter() + ) + +} diff --git a/gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisBackendPlugin.kt b/gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisBackendPlugin.kt new file mode 100644 index 0000000..fa35f1d --- /dev/null +++ b/gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisBackendPlugin.kt @@ -0,0 +1,21 @@ +package static_analysis.plugins + +import org.gradle.api.Project +import static_analysis.linters.CpdLinter +import static_analysis.linters.DetektLinter +import static_analysis.linters.Linter + +class StaticAnalysisBackendPlugin : StaticAnalysisPlugin() { + + override fun createStaticAnalysisTasks(project: Project, linters: List) { + project.tasks.register("staticAnalysis") { + setupStaticAnalysisTask(linters) + } + } + + override fun createLinters(): List = listOf( + CpdLinter(), + DetektLinter() + ) + +} diff --git a/gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisExtension.kt b/gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisExtension.kt new file mode 100644 index 0000000..dfa698d --- /dev/null +++ b/gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisExtension.kt @@ -0,0 +1,6 @@ +package static_analysis.plugins + +open class StaticAnalysisExtension( + var excludes: String = "", + var buildScriptDir: String? = null +) diff --git a/gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisPlugin.kt b/gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisPlugin.kt new file mode 100644 index 0000000..38ded00 --- /dev/null +++ b/gradle/plugins/src/main/java/static_analysis/plugins/StaticAnalysisPlugin.kt @@ -0,0 +1,47 @@ +package static_analysis.plugins + +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.kotlin.dsl.create +import org.gradle.kotlin.dsl.getByType +import static_analysis.linters.Linter +import static_analysis.utils.ReportGenerator + +abstract class StaticAnalysisPlugin : Plugin { + + companion object { + const val DETEKT_ID = "io.gitlab.arturbosch.detekt" + const val CPD_ID = "de.aaschmid.cpd" + const val STATIC_ANALYSIS_EXT_NAME = "staticAnalysis" + } + + override fun apply(target: Project) { + + with(target) { + pluginManager.apply(CPD_ID) + pluginManager.apply(DETEKT_ID) + + extensions.create(STATIC_ANALYSIS_EXT_NAME) + + val linters = createLinters() + + afterEvaluate { + linters.forEach { it.setupForProject(target, extensions.getByType()) } + } + + gradle.projectsEvaluated { + createStaticAnalysisTasks(target, linters) + } + } + } + + fun Task.setupStaticAnalysisTask(linters: List, buildVariant: String? = null) { + doFirst { ReportGenerator.generate(linters, project) } + dependsOn(*(linters.map { it.getTaskNames(project, buildVariant) }.flatten().toTypedArray())) + } + + abstract fun createLinters(): List + abstract fun createStaticAnalysisTasks(project: Project, linters: List) + +} diff --git a/gradle/plugins/src/main/java/static_analysis/utils/Extensions.kt b/gradle/plugins/src/main/java/static_analysis/utils/Extensions.kt new file mode 100644 index 0000000..c53ce16 --- /dev/null +++ b/gradle/plugins/src/main/java/static_analysis/utils/Extensions.kt @@ -0,0 +1,33 @@ +package static_analysis.utils + +import groovy.util.Node +import groovy.util.XmlParser +import org.gradle.api.Project +import org.gradle.api.file.FileTree +import java.io.File + +fun Node.typedChildren() = children() as List + +fun xmlParser(file: File) = XmlParser().parse(file) + +fun Project.getSources(excludes: String): FileTree = files( + project + .rootProject + .subprojects + .filter { subproject -> subproject.subprojects.isEmpty() && !excludes.contains(subproject.path) } + .map { subproject -> subproject.file("${subproject.projectDir.path}/src/main") } + .filter { it.exists() && it.isDirectory } + .flatMap { srcDir -> + srcDir + .listFiles() + .orEmpty() + .flatMap { + listOf( + File(srcDir.path, "java"), + File(srcDir.path, "kotlin") + ) + } + } + .filter { it.exists() && it.isDirectory } + .map { it.path } +).asFileTree diff --git a/gradle/plugins/src/main/java/static_analysis/utils/ReportGenerator.kt b/gradle/plugins/src/main/java/static_analysis/utils/ReportGenerator.kt new file mode 100644 index 0000000..caf543e --- /dev/null +++ b/gradle/plugins/src/main/java/static_analysis/utils/ReportGenerator.kt @@ -0,0 +1,52 @@ +package static_analysis.utils + +import org.gradle.api.Project +import static_analysis.errors.StaticAnalysisError +import static_analysis.linters.Linter + +object ReportGenerator { + + fun generate(linters: List, project: Project) { + + val groupedErrors = linters + .map { linter -> linter to linter.getErrors(project) } + + val lintersResults = groupedErrors + .map { it.first.name to it.second.size } + + val allErrors = groupedErrors + .map { it.second } + .flatten() + + val consoleReport = StringBuilder("\nSTATIC ANALYSIS ERRORS:").apply { + appendAllErrors(allErrors) + append("\nREPORT:\n") + appendReportsSummary(lintersResults) + appendOverallSummary(allErrors) + } + + if (allErrors.isEmpty()) { + println(consoleReport) + } else { + throw Exception(consoleReport.toString()) + } + + } + + private fun StringBuilder.appendAllErrors(errors: List) = errors + .mapIndexed { index, staticAnalysisError -> staticAnalysisError.print(index + 1) } + .forEach { error -> append(error) } + + private fun StringBuilder.appendReportsSummary(lintersResults: List>) = lintersResults + .forEach { this.appendSummary(it.first, it.second) } + + private fun StringBuilder.appendOverallSummary(errors: List) = appendSummary("Overall", errors.size) + + private fun StringBuilder.appendSummary(header: String, quantityOfErrors: Int) { + assert(quantityOfErrors < 0) + + append("\n$header: ") + append(if (quantityOfErrors == 0) "PASSED" else "FAILED ($quantityOfErrors errors)") + } + +} diff --git a/gradle/applicationFileNaming.gradle b/gradle/scripts/applicationFileNaming.gradle similarity index 100% rename from gradle/applicationFileNaming.gradle rename to gradle/scripts/applicationFileNaming.gradle diff --git a/gradle/stringGenerator.gradle b/gradle/scripts/stringGenerator.gradle similarity index 100% rename from gradle/stringGenerator.gradle rename to gradle/scripts/stringGenerator.gradle diff --git a/gradle/staticAnalysis.gradle b/gradle/staticAnalysis.gradle deleted file mode 100644 index b952ec9..0000000 --- a/gradle/staticAnalysis.gradle +++ /dev/null @@ -1,166 +0,0 @@ -buildscript { - repositories { - maven { url "https://plugins.gradle.org/m2" } - } - dependencies { - classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.5.1" - } -} - -def getServerProjectSources -def getAndroidProjectSources - -apply from: "$buildScriptsDir/gradle/commonStaticAnalysis.gradle" - -gradle.projectsEvaluated { - - tasks.withType(JavaCompile) { - options.compilerArgs << - "-Xlint:cast" << - "-Xlint:divzero" << - "-Xlint:empty" << - "-Xlint:deprecation" << - "-Xlint:finally" << - "-Xlint:overrides" << - "-Xlint:path" << - "-Werror" - } - - def excludes = rootProject.extensions.findByName("staticAnalysisExcludes") - - def androidSources = getAndroidProjectSources(excludes) - def androidStaticAnalysisTasks = getStaticAnalysisTaskNames(true, androidSources, null) - def androidIdeaFormatTask = getIdeaFormatTask(true, androidSources) - - task staticAnalysisWithFormatting { - androidStaticAnalysisTasks.each { task -> - tasks.findByName(task)?.mustRunAfter(androidIdeaFormatTask) - } - dependsOn androidIdeaFormatTask - dependsOn androidStaticAnalysisTasks - doFirst { - generateReport(true) - } - } - - task staticAnalysis { - dependsOn androidStaticAnalysisTasks - doFirst { - generateReport(true) - } - } - - def serverStaticAnalysisTasks = getStaticAnalysisTaskNames(false, getServerProjectSources(excludes), null) - def serverIdeaFormatTask = getIdeaFormatTask(false, getServerProjectSources(excludes)) - - task serverStaticAnalysisWithFormatting { - serverStaticAnalysisTasks.each { task -> - tasks.findByName(task)?.mustRunAfter(serverIdeaFormatTask) - } - dependsOn serverIdeaFormatTask - dependsOn serverStaticAnalysisTasks - doFirst { - generateReport(false) - } - } - - task serverStaticAnalysis { - dependsOn serverStaticAnalysisTasks - doFirst { - generateReport(false) - } - } - - subprojects { subproject -> - if (subproject.plugins.hasPlugin("com.android.application")) { - subproject.android { - lintOptions.abortOnError = false - lintOptions.checkAllWarnings = true - lintOptions.warningsAsErrors = false - lintOptions.xmlReport = true - lintOptions.xmlOutput = file "$rootProject.buildDir/reports/lint_report.xml" - lintOptions.htmlReport = false - lintOptions.lintConfig = file "$buildScriptsDir/lint/lint.xml" - lintOptions.checkDependencies true - lintOptions.disable 'MissingConstraints', 'VectorRaster' - - applicationVariants.all { variant -> - task("staticAnalysis${variant.name.capitalize()}") { - dependsOn getStaticAnalysisTaskNames(true, androidSources, variant) - doFirst { generateReport(true) } - } - } - } - } - - def regex = ~':detekt$' - tasks.forEach { task -> - if (!task.name.contains(":libs") && task.path =~ regex) { - task.exclude '**/test/**' - task.exclude 'resources/' - task.exclude 'build/' - task.exclude 'tmp/' - - task.jvmTarget = "1.8" - } - } - - detekt { - config = files("$buildScriptsDir/kotlin/detekt-config.yml") - - reports { - txt.enabled = false - html.enabled = false - xml { - enabled = true - destination = file("${rootProject.buildDir}/reports/kotlin-detekt-${subproject.name}.xml") - } - } - } - } -} - -getServerProjectSources = { excludes -> - def sources = new ArrayList() - def sourcesDirectory = new File(project.projectDir.path, 'src') - - for (def sourceFlavorDirectory : sourcesDirectory.listFiles()) { - def javaSourceDirectory = new File(sourceFlavorDirectory.path, 'java') - def kotlinSourceDirectory = new File(sourceFlavorDirectory.path, 'kotlin') - - if (javaSourceDirectory.exists() && javaSourceDirectory.isDirectory()) { - sources.add(javaSourceDirectory.absolutePath) - } - if (kotlinSourceDirectory.exists() && kotlinSourceDirectory.isDirectory()) { - sources.add(kotlinSourceDirectory.absolutePath) - } - } - return sources -} - -getAndroidProjectSources = { excludes -> - def sources = new ArrayList() - for (def project : rootProject.subprojects) { - if (!project.subprojects.isEmpty() || (excludes != null && excludes.contains(project.path))) { - continue - } - - def sourcesDirectory = new File(project.projectDir.path, 'src') - if (!sourcesDirectory.exists() || !sourcesDirectory.isDirectory()) { - continue - } - - for (def sourceFlavorDirectory : sourcesDirectory.listFiles()) { - def javaSourceDirectory = new File(sourceFlavorDirectory.path, 'java') - def kotlinSourceDirectory = new File(sourceFlavorDirectory.path, 'kotlin') - - if (javaSourceDirectory.exists() && javaSourceDirectory.isDirectory()) { - sources.add(javaSourceDirectory.absolutePath) - } - if (kotlinSourceDirectory.exists() && kotlinSourceDirectory.isDirectory()) { - sources.add(kotlinSourceDirectory.absolutePath) - } - } - } - return sources -} diff --git a/lint/lint.xml b/lint/lint.xml deleted file mode 100644 index 57a80e9..0000000 --- a/lint/lint.xml +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pmd/rulesets/java/android.xml b/pmd/rulesets/java/android.xml deleted file mode 100644 index debe6f4..0000000 --- a/pmd/rulesets/java/android.xml +++ /dev/null @@ -1,131 +0,0 @@ - - - - Every Java Rule in PMD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/export_src.sh b/scripts/export_src.sh similarity index 100% rename from export_src.sh rename to scripts/export_src.sh diff --git a/kotlin/detekt-config.yml b/static_analysis_configs/detekt-config.yml similarity index 99% rename from kotlin/detekt-config.yml rename to static_analysis_configs/detekt-config.yml index 3afb6fa..5ea4cce 100644 --- a/kotlin/detekt-config.yml +++ b/static_analysis_configs/detekt-config.yml @@ -23,7 +23,7 @@ formatting: active: true console-reports: - active: true + active: false exclude: # - 'ProjectStatisticsReport' # - 'ComplexityReport' diff --git a/static_analysis_configs/lint.xml b/static_analysis_configs/lint.xml new file mode 100644 index 0000000..98227d4 --- /dev/null +++ b/static_analysis_configs/lint.xml @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 0f53df4bb45903a2d748bb0d087a99fec3bcfd90 Mon Sep 17 00:00:00 2001 From: Maxim Bachinsky Date: Wed, 19 Aug 2020 17:56:02 +0300 Subject: [PATCH 006/168] update api gen version --- gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt b/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt index ff272ce..e0fc6ec 100644 --- a/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt +++ b/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt @@ -12,7 +12,7 @@ abstract class ApiGeneratorPlugin : Plugin { companion object { const val API_GENERATOR_CONFIG = "apiGenerator" const val API_GENERATOR_EXT_NAME = "apiGenerator" - const val API_GENERATOR_VERSION = "1.4.0-beta4" + const val API_GENERATOR_VERSION = "1.4.0-beta5" } override fun apply(target: Project) { From 7b54155ae1bd769dec94bd79edd43ead4dc2cfc0 Mon Sep 17 00:00:00 2001 From: Maxim Bachinsky Date: Thu, 20 Aug 2020 13:33:57 +0300 Subject: [PATCH 007/168] fixed android api gen and string generator for old projects --- .../main/java/apigen/ApiGeneratorAndroidPlugin.kt | 10 ++++++++-- gradle/scripts/stringGenerator.gradle | 14 +++++++------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt b/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt index fa417b0..0442f43 100644 --- a/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt +++ b/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt @@ -1,8 +1,9 @@ package apigen +import com.android.build.gradle.AppExtension import com.android.build.gradle.LibraryExtension import org.gradle.api.Project -import org.gradle.kotlin.dsl.getByType +import org.gradle.kotlin.dsl.findByType import org.jetbrains.kotlin.gradle.tasks.KotlinCompile class ApiGeneratorAndroidPlugin : ApiGeneratorPlugin() { @@ -18,7 +19,12 @@ class ApiGeneratorAndroidPlugin : ApiGeneratorPlugin() { extension.recreateOutputDir = true afterEvaluate { - extensions.getByType().apply { + extensions.findByType()?.apply { + sourceSets.getByName("main") + .java + .srcDir(outputDir) + } + extensions.findByType()?.apply { sourceSets.getByName("main") .java .srcDir(outputDir) diff --git a/gradle/scripts/stringGenerator.gradle b/gradle/scripts/stringGenerator.gradle index 374ab12..9c47e90 100644 --- a/gradle/scripts/stringGenerator.gradle +++ b/gradle/scripts/stringGenerator.gradle @@ -2,11 +2,11 @@ import groovy.json.JsonSlurper import groovy.xml.MarkupBuilder task stringGenerator { - generate(android.languageMap, android.rootPath ?: "app") + generate(android.languageMap, project) println("Strings generated!") } -private def generate(Map sources, String rootPath) { +private def generate(Map sources, Project project) { if (sources == null || sources.isEmpty()) { throw new IOException("languageMap can't be null or empty") } @@ -31,7 +31,7 @@ private def generate(Map sources, String rootPath) { } } - def stringsFile = getFile(key, key == defaultLang, rootPath) + def stringsFile = getFile(key, key == defaultLang, project) stringsFile.write(sw.toString(), "UTF-8") } } @@ -69,15 +69,15 @@ private static Map getJsonsMap(Map sources) { } } -private static File getFile(String key, boolean defaultLang, String rootPath) { +private static File getFile(String key, boolean defaultLang, Project project) { if (defaultLang) { - return new File("${rootPath}/src/main/res/values/strings.xml") + return project.file("src/main/res/values/strings.xml") } else { - def directory = new File("${rootPath}/src/main/res/values-$key") + def directory = project.file("src/main/res/values-$key") if (!directory.exists()) { directory.mkdir() } - return new File("${rootPath}/src/main/res/values-$key/strings.xml") + return project.file("src/main/res/values-$key/strings.xml") } } From b3bff241398f0545fe1870b62371594c495e5825 Mon Sep 17 00:00:00 2001 From: Maxim Bachinsky Date: Thu, 20 Aug 2020 15:22:41 +0300 Subject: [PATCH 008/168] fixed problem with source sets for java code --- .../src/main/java/apigen/ApiGeneratorAndroidPlugin.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt b/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt index 0442f43..d30c4f5 100644 --- a/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt +++ b/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt @@ -3,6 +3,7 @@ package apigen import com.android.build.gradle.AppExtension import com.android.build.gradle.LibraryExtension import org.gradle.api.Project +import org.gradle.api.tasks.compile.JavaCompile import org.gradle.kotlin.dsl.findByType import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -34,6 +35,12 @@ class ApiGeneratorAndroidPlugin : ApiGeneratorPlugin() { .forEach { it.source(outputDir) } + + tasks + .filterIsInstance() + .forEach { + it.source(outputDir) + } } } } From 3d73b2473f5d85af83f4a7392215a29d0f733221 Mon Sep 17 00:00:00 2001 From: Maxim Bachinsky Date: Thu, 20 Aug 2020 15:24:04 +0300 Subject: [PATCH 009/168] little change of code's style --- .../plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt b/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt index d30c4f5..83295d3 100644 --- a/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt +++ b/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt @@ -31,7 +31,7 @@ class ApiGeneratorAndroidPlugin : ApiGeneratorPlugin() { .srcDir(outputDir) } tasks - .filterIsInstance(KotlinCompile::class.java) + .filterIsInstance() .forEach { it.source(outputDir) } From 21e21aca1d4ad49355cb51b549d1454cb97741a7 Mon Sep 17 00:00:00 2001 From: Maxim Bachinsky Date: Thu, 20 Aug 2020 17:55:14 +0300 Subject: [PATCH 010/168] fix android lint bug with no file column errors --- .../src/main/java/static_analysis/errors/AndroidLintError.kt | 4 ++-- .../src/main/java/static_analysis/linters/AndroidLinter.kt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/plugins/src/main/java/static_analysis/errors/AndroidLintError.kt b/gradle/plugins/src/main/java/static_analysis/errors/AndroidLintError.kt index aee4a44..b7b850b 100644 --- a/gradle/plugins/src/main/java/static_analysis/errors/AndroidLintError.kt +++ b/gradle/plugins/src/main/java/static_analysis/errors/AndroidLintError.kt @@ -2,11 +2,11 @@ package static_analysis.errors class AndroidLintError( private val filePath: String, - private val fileLine: String, + private val fileLine: String?, private val errorId: String, private val description: String ) : StaticAnalysisError { - override fun print(count: Int): String = "\n$count. Android Lint. $description ($errorId)\n\tat [$filePath:$fileLine]" + override fun print(count: Int): String = "\n$count. Android Lint. $description ($errorId)\n\tat [$filePath${fileLine?.let { ":$it" }.orEmpty()}]" } diff --git a/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt b/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt index f299d22..3e19265 100644 --- a/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt +++ b/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt @@ -24,7 +24,7 @@ class AndroidLinter : Linter { .map { locationNode -> AndroidLintError( filePath = locationNode.attribute("file") as String, - fileLine = locationNode.attribute("line") as String, + fileLine = locationNode.attribute("line") as String?, errorId = errorNode.attribute("id") as String, description = errorNode.attribute("message") as String ) From a8e55fc0e856425fc81428197ab704694c90a4d7 Mon Sep 17 00:00:00 2001 From: Maxim Bachinsky Date: Wed, 2 Sep 2020 17:48:46 +0300 Subject: [PATCH 011/168] fix proguard cut annotation which used in custom json adapter --- proguard/rules/moshi.pro | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 proguard/rules/moshi.pro diff --git a/proguard/rules/moshi.pro b/proguard/rules/moshi.pro new file mode 100644 index 0000000..fe81601 --- /dev/null +++ b/proguard/rules/moshi.pro @@ -0,0 +1,23 @@ +# JSR 305 annotations are for embedding nullability information. +-dontwarn javax.annotation.** + +-keepclasseswithmembers class * { + @com.squareup.moshi.* ; +} + +-keep @com.squareup.moshi.JsonQualifier interface * +-keep @com.squareup.moshi.JsonQualifier class * + +# Enum field names are used by the integrated EnumJsonAdapter. +# values() is synthesized by the Kotlin compiler and is used by EnumJsonAdapter indirectly +# Annotate enums with @JsonClass(generateAdapter = false) to use them with Moshi. +-keepclassmembers @com.squareup.moshi.JsonClass class * extends java.lang.Enum { + ; + **[] values(); +} + +-keep class kotlin.reflect.jvm.internal.impl.builtins.BuiltInsLoaderImpl + +-keepclassmembers class kotlin.Metadata { + public ; +} From 487291a54fd5fdb0d3b028d0b3e57adb28fe280b Mon Sep 17 00:00:00 2001 From: Maxim Bachinsky Date: Tue, 8 Sep 2020 15:42:47 +0300 Subject: [PATCH 012/168] fix code review --- gradle/plugins/.gitignore | 1 + .../java/apigen/ApiGeneratorAndroidPlugin.kt | 8 ++----- .../java/apigen/ApiGeneratorBackendPlugin.kt | 10 ++++----- .../main/java/apigen/ApiGeneratorPlugin.kt | 4 ++-- .../errors/AndroidLintError.kt | 5 ++++- .../static_analysis/linters/AndroidLinter.kt | 22 +++++++++++-------- .../java/static_analysis/linters/CpdLinter.kt | 4 ++-- .../static_analysis/linters/DetektLinter.kt | 2 +- .../main/java/static_analysis/utils/Node.kt | 5 +++++ .../utils/{Extensions.kt => Project.kt} | 6 ----- .../static_analysis/utils/ReportGenerator.kt | 4 ++-- .../java/static_analysis/utils/XmlUtils.kt | 4 ++++ proguard/common.pro | 2 +- 13 files changed, 41 insertions(+), 36 deletions(-) create mode 100644 gradle/plugins/src/main/java/static_analysis/utils/Node.kt rename gradle/plugins/src/main/java/static_analysis/utils/{Extensions.kt => Project.kt} (87%) create mode 100644 gradle/plugins/src/main/java/static_analysis/utils/XmlUtils.kt diff --git a/gradle/plugins/.gitignore b/gradle/plugins/.gitignore index d7e7478..39d12d8 100644 --- a/gradle/plugins/.gitignore +++ b/gradle/plugins/.gitignore @@ -12,6 +12,7 @@ local.properties # Log Files *.log + .gradle .idea .DS_Store diff --git a/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt b/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt index 83295d3..ea06f40 100644 --- a/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt +++ b/gradle/plugins/src/main/java/apigen/ApiGeneratorAndroidPlugin.kt @@ -32,15 +32,11 @@ class ApiGeneratorAndroidPlugin : ApiGeneratorPlugin() { } tasks .filterIsInstance() - .forEach { - it.source(outputDir) - } + .forEach { it.source(outputDir) } tasks .filterIsInstance() - .forEach { - it.source(outputDir) - } + .forEach { it.source(outputDir) } } } } diff --git a/gradle/plugins/src/main/java/apigen/ApiGeneratorBackendPlugin.kt b/gradle/plugins/src/main/java/apigen/ApiGeneratorBackendPlugin.kt index b68eccf..b4a8723 100644 --- a/gradle/plugins/src/main/java/apigen/ApiGeneratorBackendPlugin.kt +++ b/gradle/plugins/src/main/java/apigen/ApiGeneratorBackendPlugin.kt @@ -7,13 +7,11 @@ class ApiGeneratorBackendPlugin : ApiGeneratorPlugin() { override fun apply(target: Project) { super.apply(target) - with(target) { - val extension = getExtension() + val extension = target.getExtension() - extension.outputDirPath = file("src/main/kotlin").path - extension.recreateOutputDir = false - extension.outputLanguage = OutputLanguage.KotlinServer + extension.outputDirPath = target.file("src/main/kotlin").path + extension.recreateOutputDir = false + extension.outputLanguage = OutputLanguage.KotlinServer - } } } diff --git a/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt b/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt index e0fc6ec..7e9b607 100644 --- a/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt +++ b/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt @@ -12,7 +12,7 @@ abstract class ApiGeneratorPlugin : Plugin { companion object { const val API_GENERATOR_CONFIG = "apiGenerator" const val API_GENERATOR_EXT_NAME = "apiGenerator" - const val API_GENERATOR_VERSION = "1.4.0-beta5" + const val API_GENERATOR_DEFAULT_VERSION = "1.4.0-beta5" } override fun apply(target: Project) { @@ -29,7 +29,7 @@ abstract class ApiGeneratorPlugin : Plugin { configurations.create(API_GENERATOR_CONFIG) dependencies { - add(API_GENERATOR_CONFIG, "ru.touchin:api-generator:$API_GENERATOR_VERSION") + add(API_GENERATOR_CONFIG, "ru.touchin:api-generator:$API_GENERATOR_DEFAULT_VERSION") } extensions.create(API_GENERATOR_EXT_NAME) diff --git a/gradle/plugins/src/main/java/static_analysis/errors/AndroidLintError.kt b/gradle/plugins/src/main/java/static_analysis/errors/AndroidLintError.kt index b7b850b..6b87d81 100644 --- a/gradle/plugins/src/main/java/static_analysis/errors/AndroidLintError.kt +++ b/gradle/plugins/src/main/java/static_analysis/errors/AndroidLintError.kt @@ -7,6 +7,9 @@ class AndroidLintError( private val description: String ) : StaticAnalysisError { - override fun print(count: Int): String = "\n$count. Android Lint. $description ($errorId)\n\tat [$filePath${fileLine?.let { ":$it" }.orEmpty()}]" + override fun print(count: Int): String = "\n$count. Android Lint. $description ($errorId)\n\tat [$filePath$fileLinePrefix]" + + private val fileLinePrefix: String + get() = fileLine?.let { ":$it" }.orEmpty() } diff --git a/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt b/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt index 3e19265..3853959 100644 --- a/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt +++ b/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt @@ -8,7 +8,7 @@ import static_analysis.errors.AndroidLintError import static_analysis.errors.StaticAnalysisError import static_analysis.plugins.StaticAnalysisExtension import static_analysis.utils.typedChildren -import static_analysis.utils.xmlParser +import xmlParser class AndroidLinter : Linter { @@ -51,14 +51,18 @@ class AndroidLinter : Linter { } } - override fun getTaskNames(project: Project, buildType: String?): List = project - .subprojects - .filter { it.plugins.hasPlugin(AppPlugin::class.java) } - .mapNotNull { subproject: Project -> - subproject.tasks.find { task -> - task.name.contains(buildType!!, ignoreCase = true) && task.name.contains("lint") - }?.path - } + override fun getTaskNames(project: Project, buildType: String?): List { + if (buildType == null) throw IllegalStateException("build type must not be null in android linter") + + return project + .subprojects + .filter { it.plugins.hasPlugin(AppPlugin::class.java) } + .mapNotNull { subproject: Project -> + subproject.tasks.find { task -> + task.name.contains(buildType, ignoreCase = true) && task.name.contains("lint") + }?.path + } + } private fun Project.getLintReportFile() = file("${rootProject.buildDir}/reports/lint-report.xml") diff --git a/gradle/plugins/src/main/java/static_analysis/linters/CpdLinter.kt b/gradle/plugins/src/main/java/static_analysis/linters/CpdLinter.kt index ca3ff7e..313d250 100644 --- a/gradle/plugins/src/main/java/static_analysis/linters/CpdLinter.kt +++ b/gradle/plugins/src/main/java/static_analysis/linters/CpdLinter.kt @@ -10,7 +10,7 @@ import static_analysis.errors.StaticAnalysisError import static_analysis.plugins.StaticAnalysisExtension import static_analysis.utils.getSources import static_analysis.utils.typedChildren -import static_analysis.utils.xmlParser +import xmlParser class CpdLinter : Linter { @@ -50,7 +50,7 @@ class CpdLinter : Linter { .rootProject .tasks .withType() - .map { it.path } + .map(Cpd::getPath) private fun Project.getCpdReportFile() = file("${rootProject.buildDir}/reports/cpd.xml") diff --git a/gradle/plugins/src/main/java/static_analysis/linters/DetektLinter.kt b/gradle/plugins/src/main/java/static_analysis/linters/DetektLinter.kt index 0aafb22..3905ce8 100644 --- a/gradle/plugins/src/main/java/static_analysis/linters/DetektLinter.kt +++ b/gradle/plugins/src/main/java/static_analysis/linters/DetektLinter.kt @@ -7,7 +7,7 @@ import static_analysis.errors.StaticAnalysisError import static_analysis.plugins.StaticAnalysisExtension import static_analysis.utils.getSources import static_analysis.utils.typedChildren -import static_analysis.utils.xmlParser +import xmlParser class DetektLinter : Linter { diff --git a/gradle/plugins/src/main/java/static_analysis/utils/Node.kt b/gradle/plugins/src/main/java/static_analysis/utils/Node.kt new file mode 100644 index 0000000..e8618e2 --- /dev/null +++ b/gradle/plugins/src/main/java/static_analysis/utils/Node.kt @@ -0,0 +1,5 @@ +package static_analysis.utils + +import groovy.util.Node + +fun Node.typedChildren() = children() as List diff --git a/gradle/plugins/src/main/java/static_analysis/utils/Extensions.kt b/gradle/plugins/src/main/java/static_analysis/utils/Project.kt similarity index 87% rename from gradle/plugins/src/main/java/static_analysis/utils/Extensions.kt rename to gradle/plugins/src/main/java/static_analysis/utils/Project.kt index c53ce16..f1c46cf 100644 --- a/gradle/plugins/src/main/java/static_analysis/utils/Extensions.kt +++ b/gradle/plugins/src/main/java/static_analysis/utils/Project.kt @@ -1,15 +1,9 @@ package static_analysis.utils -import groovy.util.Node -import groovy.util.XmlParser import org.gradle.api.Project import org.gradle.api.file.FileTree import java.io.File -fun Node.typedChildren() = children() as List - -fun xmlParser(file: File) = XmlParser().parse(file) - fun Project.getSources(excludes: String): FileTree = files( project .rootProject diff --git a/gradle/plugins/src/main/java/static_analysis/utils/ReportGenerator.kt b/gradle/plugins/src/main/java/static_analysis/utils/ReportGenerator.kt index caf543e..b18f8f4 100644 --- a/gradle/plugins/src/main/java/static_analysis/utils/ReportGenerator.kt +++ b/gradle/plugins/src/main/java/static_analysis/utils/ReportGenerator.kt @@ -12,10 +12,10 @@ object ReportGenerator { .map { linter -> linter to linter.getErrors(project) } val lintersResults = groupedErrors - .map { it.first.name to it.second.size } + .map { (linter, linterErrors) -> linter.name to linterErrors.size } val allErrors = groupedErrors - .map { it.second } + .map(Pair>::second) .flatten() val consoleReport = StringBuilder("\nSTATIC ANALYSIS ERRORS:").apply { diff --git a/gradle/plugins/src/main/java/static_analysis/utils/XmlUtils.kt b/gradle/plugins/src/main/java/static_analysis/utils/XmlUtils.kt new file mode 100644 index 0000000..f335b29 --- /dev/null +++ b/gradle/plugins/src/main/java/static_analysis/utils/XmlUtils.kt @@ -0,0 +1,4 @@ +import groovy.util.XmlParser +import java.io.File + +fun xmlParser(file: File) = XmlParser().parse(file) diff --git a/proguard/common.pro b/proguard/common.pro index 52715c2..d7f2023 100644 --- a/proguard/common.pro +++ b/proguard/common.pro @@ -1,5 +1,4 @@ -include rules/components.pro - -include rules/okhttp.pro -include rules/retrofit.pro -include rules/logansquare.pro @@ -7,3 +6,4 @@ -include rules/glide.pro -include rules/kaspersky.pro -include rules/appsflyer.pro +-include rules/moshi.pro From adf2946881bf0490ad41418bf76e9c14cb925260 Mon Sep 17 00:00:00 2001 From: Maxim Bachinsky Date: Tue, 8 Sep 2020 19:04:43 +0300 Subject: [PATCH 013/168] fixed code review --- .../java/static_analysis/linters/AndroidLinter.kt | 13 ++++++++----- .../main/java/static_analysis/linters/CpdLinter.kt | 2 +- .../java/static_analysis/linters/DetektLinter.kt | 2 +- .../src/main/java/static_analysis/utils/XmlUtils.kt | 2 ++ 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt b/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt index 3853959..8550e04 100644 --- a/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt +++ b/gradle/plugins/src/main/java/static_analysis/linters/AndroidLinter.kt @@ -8,7 +8,7 @@ import static_analysis.errors.AndroidLintError import static_analysis.errors.StaticAnalysisError import static_analysis.plugins.StaticAnalysisExtension import static_analysis.utils.typedChildren -import xmlParser +import static_analysis.utils.xmlParser class AndroidLinter : Linter { @@ -52,15 +52,18 @@ class AndroidLinter : Linter { } override fun getTaskNames(project: Project, buildType: String?): List { - if (buildType == null) throw IllegalStateException("build type must not be null in android linter") + if (buildType == null) { + throw IllegalStateException("Build type must not be null in android linter") + } return project .subprojects .filter { it.plugins.hasPlugin(AppPlugin::class.java) } .mapNotNull { subproject: Project -> - subproject.tasks.find { task -> - task.name.contains(buildType, ignoreCase = true) && task.name.contains("lint") - }?.path + subproject + .tasks + .find { task -> task.name.contains(buildType, ignoreCase = true) && task.name.contains("lint") } + ?.path } } diff --git a/gradle/plugins/src/main/java/static_analysis/linters/CpdLinter.kt b/gradle/plugins/src/main/java/static_analysis/linters/CpdLinter.kt index 313d250..1e7395a 100644 --- a/gradle/plugins/src/main/java/static_analysis/linters/CpdLinter.kt +++ b/gradle/plugins/src/main/java/static_analysis/linters/CpdLinter.kt @@ -10,7 +10,7 @@ import static_analysis.errors.StaticAnalysisError import static_analysis.plugins.StaticAnalysisExtension import static_analysis.utils.getSources import static_analysis.utils.typedChildren -import xmlParser +import static_analysis.utils.xmlParser class CpdLinter : Linter { diff --git a/gradle/plugins/src/main/java/static_analysis/linters/DetektLinter.kt b/gradle/plugins/src/main/java/static_analysis/linters/DetektLinter.kt index 3905ce8..0aafb22 100644 --- a/gradle/plugins/src/main/java/static_analysis/linters/DetektLinter.kt +++ b/gradle/plugins/src/main/java/static_analysis/linters/DetektLinter.kt @@ -7,7 +7,7 @@ import static_analysis.errors.StaticAnalysisError import static_analysis.plugins.StaticAnalysisExtension import static_analysis.utils.getSources import static_analysis.utils.typedChildren -import xmlParser +import static_analysis.utils.xmlParser class DetektLinter : Linter { diff --git a/gradle/plugins/src/main/java/static_analysis/utils/XmlUtils.kt b/gradle/plugins/src/main/java/static_analysis/utils/XmlUtils.kt index f335b29..1754f4c 100644 --- a/gradle/plugins/src/main/java/static_analysis/utils/XmlUtils.kt +++ b/gradle/plugins/src/main/java/static_analysis/utils/XmlUtils.kt @@ -1,3 +1,5 @@ +package static_analysis.utils + import groovy.util.XmlParser import java.io.File From 3546f980fdf97ae29e467c40b9d975c800880612 Mon Sep 17 00:00:00 2001 From: Vlad Date: Mon, 14 Sep 2020 22:07:30 +0300 Subject: [PATCH 014/168] Add localization files check --- xcode/build_phases/common/localization_check | Bin 0 -> 72656 bytes xcode/build_phases/localization_check.sh | 9 +++++++++ 2 files changed, 9 insertions(+) create mode 100755 xcode/build_phases/common/localization_check create mode 100755 xcode/build_phases/localization_check.sh diff --git a/xcode/build_phases/common/localization_check b/xcode/build_phases/common/localization_check new file mode 100755 index 0000000000000000000000000000000000000000..3ca068bbc5677ff06e90da59a2f916dc4d8dce82 GIT binary patch literal 72656 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 literal 0 HcmV?d00001 diff --git a/xcode/build_phases/localization_check.sh b/xcode/build_phases/localization_check.sh new file mode 100755 index 0000000..6cd5c61 --- /dev/null +++ b/xcode/build_phases/localization_check.sh @@ -0,0 +1,9 @@ +# source: https://github.com/iKenndac/verify-string-files + +SOURCES_DIR=${1:-${TARGET_NAME}} # first argument or TARGET_NAME + +if [ "${CONFIGURATION}" = "DEBUG" ]; then + ${SOURCES_DIR}/build-scripts/xcode/build_phases/common/localization_check -master ${SOURCES_DIR}/Resources/Base.lproj/Localizable.strings -warning-level warning +else + ${SOURCES_DIR}/build-scripts/xcode/build_phases/common/localization_check -master ${SOURCES_DIR}/Resources/Base.lproj/Localizable.strings +fi From 94f1d45c7f59ff435e9f55adb3839376e6c886ae Mon Sep 17 00:00:00 2001 From: Vlad Date: Mon, 14 Sep 2020 22:11:59 +0300 Subject: [PATCH 015/168] Code correction --- xcode/build_phases/localization_check.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/build_phases/localization_check.sh b/xcode/build_phases/localization_check.sh index 6cd5c61..9a4407d 100755 --- a/xcode/build_phases/localization_check.sh +++ b/xcode/build_phases/localization_check.sh @@ -1,6 +1,6 @@ # source: https://github.com/iKenndac/verify-string-files -SOURCES_DIR=${1:-${TARGET_NAME}} # first argument or TARGET_NAME +readonly SOURCES_DIR=${1:-${PROJECT_DIR}} # first argument or PROJECT_DIR if [ "${CONFIGURATION}" = "DEBUG" ]; then ${SOURCES_DIR}/build-scripts/xcode/build_phases/common/localization_check -master ${SOURCES_DIR}/Resources/Base.lproj/Localizable.strings -warning-level warning From 80cc86b4f817d971744356572c015b426fb5e731 Mon Sep 17 00:00:00 2001 From: Vlad Date: Mon, 14 Sep 2020 22:14:01 +0300 Subject: [PATCH 016/168] Code correction --- xcode/build_phases/localization_check.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xcode/build_phases/localization_check.sh b/xcode/build_phases/localization_check.sh index 9a4407d..ede7c9b 100755 --- a/xcode/build_phases/localization_check.sh +++ b/xcode/build_phases/localization_check.sh @@ -3,7 +3,7 @@ readonly SOURCES_DIR=${1:-${PROJECT_DIR}} # first argument or PROJECT_DIR if [ "${CONFIGURATION}" = "DEBUG" ]; then - ${SOURCES_DIR}/build-scripts/xcode/build_phases/common/localization_check -master ${SOURCES_DIR}/Resources/Base.lproj/Localizable.strings -warning-level warning + ${SOURCES_DIR}/build-scripts/xcode/build_phases/common/localization_check -master ${SOURCES_DIR}/Resources/Localization/Base.lproj/Localizable.strings -warning-level warning else - ${SOURCES_DIR}/build-scripts/xcode/build_phases/common/localization_check -master ${SOURCES_DIR}/Resources/Base.lproj/Localizable.strings + ${SOURCES_DIR}/build-scripts/xcode/build_phases/common/localization_check -master ${SOURCES_DIR}/Resources/Localization/Base.lproj/Localizable.strings fi From 2f65d801ec37dab309e8fb52445f35c8a0acb43e Mon Sep 17 00:00:00 2001 From: Vlad Date: Mon, 14 Sep 2020 22:19:01 +0300 Subject: [PATCH 017/168] Code correction --- xcode/build_phases/localization_check.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/xcode/build_phases/localization_check.sh b/xcode/build_phases/localization_check.sh index ede7c9b..0b15d78 100755 --- a/xcode/build_phases/localization_check.sh +++ b/xcode/build_phases/localization_check.sh @@ -1,9 +1,11 @@ # source: https://github.com/iKenndac/verify-string-files readonly SOURCES_DIR=${1:-${PROJECT_DIR}} # first argument or PROJECT_DIR +readonly LOCALIZATION_PATH="${PRODUCT_NAME}/Resources/Localization/Base.lproj/Localizable.strings" +readonly CHECK_SCRIPT="${SOURCES_DIR}/build-scripts/xcode/build_phases/common/localization_check" if [ "${CONFIGURATION}" = "DEBUG" ]; then - ${SOURCES_DIR}/build-scripts/xcode/build_phases/common/localization_check -master ${SOURCES_DIR}/Resources/Localization/Base.lproj/Localizable.strings -warning-level warning + ${SOURCES_DIR} -master ${LOCALIZATION_PATH} -warning-level warning else - ${SOURCES_DIR}/build-scripts/xcode/build_phases/common/localization_check -master ${SOURCES_DIR}/Resources/Localization/Base.lproj/Localizable.strings + ${CHECK_SCRIPT} -master ${LOCALIZATION_PATH} fi From b73abe782cc6eba22801b3a7fe39d900ed4b9b30 Mon Sep 17 00:00:00 2001 From: Vlad Date: Mon, 14 Sep 2020 22:27:42 +0300 Subject: [PATCH 018/168] Update binary --- xcode/build_phases/common/localization_check | Bin 72656 -> 72656 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/xcode/build_phases/common/localization_check b/xcode/build_phases/common/localization_check index 3ca068bbc5677ff06e90da59a2f916dc4d8dce82..201ca8c1697110251fcb64a7eb5240bcec5a033e 100755 GIT binary patch delta 14056 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 MlwbMTHywxmFLf1t5C8xG delta 13831 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 NAH25v;OP!I{|^IH9*F<| From 2f4628e5a72480b2613591cfa4265eb652febd89 Mon Sep 17 00:00:00 2001 From: Vlad Date: Mon, 14 Sep 2020 22:29:19 +0300 Subject: [PATCH 019/168] Update binary --- xcode/build_phases/common/localization_check | Bin 72656 -> 72656 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/xcode/build_phases/common/localization_check b/xcode/build_phases/common/localization_check index 201ca8c1697110251fcb64a7eb5240bcec5a033e..e1d10789411a9af4cd44a4f7d30a01832c1263c2 100755 GIT binary patch delta 318 zcmcbxo#n!ImJJ4+0zYf_&HWK%wR_bY)BCKy4=>y7z*(Zo*s^)6-t8d9jLj1p1N`JH z%~O(6EmP7gOpS~aladk>Q7f(~^>n6DR*apJp>{pMUT?Ru(PgMe{sg-7`q) zxu9OlZT61ea@M227G4_`SH?`7m6f)}%<+@F<+UQwZil}!9+q=v9-PA+*E4zHg%pv6 zZzHD9I`=R5Sx6RFM{8K{;e8dA9ifgKO6{Ru@m6ds#u@XRcqF%5$F&H=}g6E?B`U5OA+D&e!Iv?IBi~vd<=b y|0dtPyg(t=v6Gjx$uuA|a`vp|6-srDuJ_`KQ y`9AsX Date: Mon, 14 Sep 2020 22:30:38 +0300 Subject: [PATCH 020/168] Update script --- xcode/build_phases/localization_check.sh | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/xcode/build_phases/localization_check.sh b/xcode/build_phases/localization_check.sh index 0b15d78..72b3733 100755 --- a/xcode/build_phases/localization_check.sh +++ b/xcode/build_phases/localization_check.sh @@ -4,8 +4,4 @@ readonly SOURCES_DIR=${1:-${PROJECT_DIR}} # first argument or PROJECT_DIR readonly LOCALIZATION_PATH="${PRODUCT_NAME}/Resources/Localization/Base.lproj/Localizable.strings" readonly CHECK_SCRIPT="${SOURCES_DIR}/build-scripts/xcode/build_phases/common/localization_check" -if [ "${CONFIGURATION}" = "DEBUG" ]; then - ${SOURCES_DIR} -master ${LOCALIZATION_PATH} -warning-level warning -else - ${CHECK_SCRIPT} -master ${LOCALIZATION_PATH} -fi +${CHECK_SCRIPT} -master ${LOCALIZATION_PATH} From 427adefbc6118dd6b72983198ec5894120671fa7 Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 15 Sep 2020 10:54:46 +0300 Subject: [PATCH 021/168] Fix PR --- xcode/build_phases/localization_check.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/xcode/build_phases/localization_check.sh b/xcode/build_phases/localization_check.sh index 72b3733..cf514c5 100755 --- a/xcode/build_phases/localization_check.sh +++ b/xcode/build_phases/localization_check.sh @@ -1,7 +1,9 @@ # source: https://github.com/iKenndac/verify-string-files -readonly SOURCES_DIR=${1:-${PROJECT_DIR}} # first argument or PROJECT_DIR -readonly LOCALIZATION_PATH="${PRODUCT_NAME}/Resources/Localization/Base.lproj/Localizable.strings" -readonly CHECK_SCRIPT="${SOURCES_DIR}/build-scripts/xcode/build_phases/common/localization_check" +# first argument set base localization strings path +readonly LOCALIZATION_PATH=${2:-${PRODUCT_NAME}/Resources/Localization/Base.lproj/Localizable.strings} + +# second argument set check script path +readonly CHECK_SCRIPT=${3:-${PROJECT_DIR}/build-scripts/xcode/build_phases/common/localization_check} ${CHECK_SCRIPT} -master ${LOCALIZATION_PATH} From 1e2e8518a44536fcb69380717ce26d653be311ac Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 15 Sep 2020 11:01:49 +0300 Subject: [PATCH 022/168] Fix typo --- xcode/build_phases/localization_check.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xcode/build_phases/localization_check.sh b/xcode/build_phases/localization_check.sh index cf514c5..afb80eb 100755 --- a/xcode/build_phases/localization_check.sh +++ b/xcode/build_phases/localization_check.sh @@ -1,9 +1,9 @@ # source: https://github.com/iKenndac/verify-string-files # first argument set base localization strings path -readonly LOCALIZATION_PATH=${2:-${PRODUCT_NAME}/Resources/Localization/Base.lproj/Localizable.strings} +readonly LOCALIZATION_PATH=${1:-${PRODUCT_NAME}/Resources/Localization/Base.lproj/Localizable.strings} # second argument set check script path -readonly CHECK_SCRIPT=${3:-${PROJECT_DIR}/build-scripts/xcode/build_phases/common/localization_check} +readonly CHECK_SCRIPT=${2:-${PROJECT_DIR}/build-scripts/xcode/build_phases/common/localization_check} ${CHECK_SCRIPT} -master ${LOCALIZATION_PATH} From ab03600b0ddd25cb6aea4b2806a1e19895020e84 Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 15 Sep 2020 11:33:05 +0300 Subject: [PATCH 023/168] Add disposable_nil rule --- xcode/.swiftlint.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index 8e71145..cbda066 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -251,6 +251,12 @@ custom_rules: message: "The parameter name is actually used in the function name. Use _ instead." severity: error + disposable_nil: + name: "Disposable nil" + regex: ' *\S*(d|D)isposable *= *nil' + message: "Use `dispose()` instead of nil." + severity: error + # Rx unused_map_parameter: From 697805638cbd188565b7a54ab373a884baa94b05 Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 15 Sep 2020 11:51:29 +0300 Subject: [PATCH 024/168] Code correction --- xcode/.swiftlint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index cbda066..2f1053a 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -253,7 +253,7 @@ custom_rules: disposable_nil: name: "Disposable nil" - regex: ' *\S*(d|D)isposable *= *nil' + regex: ' *\S*(d|D)isposable\?? *= *nil' message: "Use `dispose()` instead of nil." severity: error From c9ced95bce60c8658051896ab118bbf53ca14fe1 Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 15 Sep 2020 12:05:24 +0300 Subject: [PATCH 025/168] Code correction --- xcode/.swiftlint.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index 2f1053a..7ba943a 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -251,12 +251,6 @@ custom_rules: message: "The parameter name is actually used in the function name. Use _ instead." severity: error - disposable_nil: - name: "Disposable nil" - regex: ' *\S*(d|D)isposable\?? *= *nil' - message: "Use `dispose()` instead of nil." - severity: error - # Rx unused_map_parameter: @@ -265,6 +259,12 @@ custom_rules: message: "Replace Rx.map operator with replace(with:) or asVoid(). For Sequence.map consider using forEach." severity: warning + disposable_nil: + name: "Disposable nil" + regex: ' *\S*(d|D)isposable\?? *= *nil' + message: "Use `dispose()` instead of nil." + severity: error + # LeadKit multiple_add_subview: From 7b92842a4beccfe7bd9487e2683b0d39ee357b89 Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 15 Sep 2020 12:14:59 +0300 Subject: [PATCH 026/168] Update message --- xcode/.swiftlint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index 7ba943a..40a41b4 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -262,7 +262,7 @@ custom_rules: disposable_nil: name: "Disposable nil" regex: ' *\S*(d|D)isposable\?? *= *nil' - message: "Use `dispose()` instead of nil." + message: "nil assigning doesn't dispose subscription. Call `dispose()` instead." severity: error # LeadKit From 55e29f68a6a857db1556430cb59774f9ee8db0bb Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 18 Sep 2020 12:57:28 +0300 Subject: [PATCH 027/168] Add parameter_closure rule --- xcode/.swiftlint.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index 40a41b4..1b7f74b 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -251,6 +251,12 @@ custom_rules: message: "The parameter name is actually used in the function name. Use _ instead." severity: error + parameter_closure: + name: "Parameter closure" + regex: '\w*<\S*, Void\S*>' + message: "Use `ParameterClosure` instead of declaring an explicit return value of `Void`." + severity: error + # Rx unused_map_parameter: From b022bfce9539312e5c120f1bfced5dbc4e11ee80 Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 18 Sep 2020 13:07:21 +0300 Subject: [PATCH 028/168] Code correction --- xcode/.swiftlint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index 1b7f74b..a8c88c7 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -253,7 +253,7 @@ custom_rules: parameter_closure: name: "Parameter closure" - regex: '\w*<\S*, Void\S*>' + regex: '\w*Closure<[^\r\n\t\f\v]*, Void[^\r\n\t\f\v]*>' message: "Use `ParameterClosure` instead of declaring an explicit return value of `Void`." severity: error From ef8a3b6cf5f6ff8fe4f0c1e2f5d8fccf898dbc47 Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 2 Oct 2020 10:30:35 +0300 Subject: [PATCH 029/168] Add unused resources script --- xcode/build_phases/common/unused_resources | Bin 0 -> 621536 bytes xcode/build_phases/unused_resources.sh | 8 ++++++++ 2 files changed, 8 insertions(+) create mode 100755 xcode/build_phases/common/unused_resources create mode 100644 xcode/build_phases/unused_resources.sh diff --git a/xcode/build_phases/common/unused_resources b/xcode/build_phases/common/unused_resources new file mode 100755 index 0000000000000000000000000000000000000000..1541a1b9382f6464da1d975df9739927547a7272 GIT binary patch literal 621536 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Ⓢ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%0At+RR^t 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 b}EK(`*a5l}}kkTH11gVM)o^Ol6=$ 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 pDVCzMT(J_(E;93rTZm?5( ${REPORTS_DIR}/Unused_resources_log.txt From d99cf7cb03dd96b131af434363a7e94cab28f1de Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 2 Oct 2020 10:55:51 +0300 Subject: [PATCH 030/168] Code correction --- xcode/build_phases/unused_resources.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/build_phases/unused_resources.sh b/xcode/build_phases/unused_resources.sh index c4592fd..dfa2429 100644 --- a/xcode/build_phases/unused_resources.sh +++ b/xcode/build_phases/unused_resources.sh @@ -5,4 +5,4 @@ readonly FILES_TO_EXCLUDE=`find ${SOURCES_DIR} -type d -name Localization -or -n mkdir ${REPORTS_DIR} -${UNUSED_RESOURCES_SCRIPT} --project ${SOURCES_DIR} --exclude ${FILES_TO_EXCLUDE} --resource-extensions 'imageset jpg png gif pdf txt' > ${REPORTS_DIR}/Unused_resources_log.txt +${UNUSED_RESOURCES_SCRIPT} --exclude ${FILES_TO_EXCLUDE} > ${REPORTS_DIR}/Unused_resources_log.txt From 9a4abfd68b77af708aa3aedfb3b497d27e5b305c Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 2 Oct 2020 10:59:23 +0300 Subject: [PATCH 031/168] Code correction --- xcode/build_phases/unused_resources.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/build_phases/unused_resources.sh b/xcode/build_phases/unused_resources.sh index dfa2429..9c01296 100644 --- a/xcode/build_phases/unused_resources.sh +++ b/xcode/build_phases/unused_resources.sh @@ -5,4 +5,4 @@ readonly FILES_TO_EXCLUDE=`find ${SOURCES_DIR} -type d -name Localization -or -n mkdir ${REPORTS_DIR} -${UNUSED_RESOURCES_SCRIPT} --exclude ${FILES_TO_EXCLUDE} > ${REPORTS_DIR}/Unused_resources_log.txt +${UNUSED_RESOURCES_SCRIPT} --project ${SOURCES_DIR} --exclude ${FILES_TO_EXCLUDE} > ${REPORTS_DIR}/Unused_resources_log.txt From c11f3d4204f599938a651ff80ce45dac90005192 Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 2 Oct 2020 11:14:35 +0300 Subject: [PATCH 032/168] Update exe --- xcode/build_phases/common/unused_resources | Bin 621536 -> 622032 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/xcode/build_phases/common/unused_resources b/xcode/build_phases/common/unused_resources index 1541a1b9382f6464da1d975df9739927547a7272..cb324f0ec372ff03d6a66e3d0f241564fe0854e3 100755 GIT binary patch delta 135366 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�g?q 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%0A7^W+h{4 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 delta 138072 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 X&n+RVMvBK}#28Owf5sS3Y3%<1DCW|! From aa152a8fd4473c451e041a8f4eb2ddd80a20ec0f Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 2 Oct 2020 11:21:45 +0300 Subject: [PATCH 033/168] Code correction --- xcode/build_phases/common/unused_resources | Bin 622032 -> 621840 bytes xcode/build_phases/unused_resources.sh | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/build_phases/common/unused_resources b/xcode/build_phases/common/unused_resources index cb324f0ec372ff03d6a66e3d0f241564fe0854e3..937637ea8c8a009bd800177a94f2cd37139aa12c 100755 GIT binary patch delta 158537 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 BLWckV diff --git a/xcode/build_phases/unused_resources.sh b/xcode/build_phases/unused_resources.sh index 9c01296..346e0c2 100644 --- a/xcode/build_phases/unused_resources.sh +++ b/xcode/build_phases/unused_resources.sh @@ -5,4 +5,4 @@ readonly FILES_TO_EXCLUDE=`find ${SOURCES_DIR} -type d -name Localization -or -n mkdir ${REPORTS_DIR} -${UNUSED_RESOURCES_SCRIPT} --project ${SOURCES_DIR} --exclude ${FILES_TO_EXCLUDE} > ${REPORTS_DIR}/Unused_resources_log.txt +${UNUSED_RESOURCES_SCRIPT} --project ${SOURCES_DIR} --exclude ${FILES_TO_EXCLUDE} > ${REPORTS_DIR}/Unused_resources_log.txt --action "l" From ef6d0eb3ccccd524669a199a710d6c409ec3ad23 Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 2 Oct 2020 11:28:06 +0300 Subject: [PATCH 034/168] Code correction --- xcode/build_phases/unused_resources.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xcode/build_phases/unused_resources.sh b/xcode/build_phases/unused_resources.sh index 346e0c2..f970a30 100644 --- a/xcode/build_phases/unused_resources.sh +++ b/xcode/build_phases/unused_resources.sh @@ -1,7 +1,7 @@ -readonly SOURCES_DIR=${1:-${PROJECT_DIR}} # first argument or PROJECT_DIR +readonly SOURCES_DIR=${1:-${PROJECT_DIR}/${PRODUCT_NAME}} # first argument or PROJECT_DIR readonly UNUSED_RESOURCES_SCRIPT=${2:-${PROJECT_DIR}/build-scripts/xcode/build_phases/common/unused_resources} # second argument set check script path readonly REPORTS_DIR=${PROJECT_DIR}/code-quality-reports -readonly FILES_TO_EXCLUDE=`find ${SOURCES_DIR} -type d -name Localization -or -name Generated -or -name Carthage -or -name Pods | paste -sd " " -` +readonly FILES_TO_EXCLUDE=`find ${SOURCES_DIR} -type d -name Localization -or -name Generated | paste -sd " " -` mkdir ${REPORTS_DIR} From bbe5e3a9082f34df1748569ea4e24c6ac30007e4 Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 2 Oct 2020 11:40:39 +0300 Subject: [PATCH 035/168] Code correction --- xcode/build_phases/unused_resources.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xcode/build_phases/unused_resources.sh b/xcode/build_phases/unused_resources.sh index f970a30..d4b91a9 100644 --- a/xcode/build_phases/unused_resources.sh +++ b/xcode/build_phases/unused_resources.sh @@ -1,8 +1,8 @@ -readonly SOURCES_DIR=${1:-${PROJECT_DIR}/${PRODUCT_NAME}} # first argument or PROJECT_DIR -readonly UNUSED_RESOURCES_SCRIPT=${2:-${PROJECT_DIR}/build-scripts/xcode/build_phases/common/unused_resources} # second argument set check script path +readonly SOURCES_DIR=${1:-${PROJECT_DIR}/${PRODUCT_NAME}} # first argument set product dir +readonly UNUSED_RESOURCES_SCRIPT=${2:-${PROJECT_DIR}/build-scripts/xcode/build_phases/common/unused_resources} # second argument set script path readonly REPORTS_DIR=${PROJECT_DIR}/code-quality-reports readonly FILES_TO_EXCLUDE=`find ${SOURCES_DIR} -type d -name Localization -or -name Generated | paste -sd " " -` mkdir ${REPORTS_DIR} -${UNUSED_RESOURCES_SCRIPT} --project ${SOURCES_DIR} --exclude ${FILES_TO_EXCLUDE} > ${REPORTS_DIR}/Unused_resources_log.txt --action "l" +${UNUSED_RESOURCES_SCRIPT} --project ${SOURCES_DIR} --exclude ${FILES_TO_EXCLUDE} --action "l" > ${REPORTS_DIR}/Unused_resources_log.txt From e9dcba923ce038605d105b016d8d62239744a1a1 Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 2 Oct 2020 12:40:17 +0300 Subject: [PATCH 036/168] Update exe --- xcode/build_phases/common/unused_resources | Bin 621840 -> 603776 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/xcode/build_phases/common/unused_resources b/xcode/build_phases/common/unused_resources index 937637ea8c8a009bd800177a94f2cd37139aa12c..1a5b4fcf29dbc0022653cc2e2347c9652eab2435 100755 GIT binary patch delta 181502 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

8Um8yH?HF8bg52{ELk73)f& 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Ξ8coL!KVS(rAI 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 E1DR#32><{9 delta 185844 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 Date: Tue, 13 Oct 2020 17:25:06 +0300 Subject: [PATCH 037/168] add local storage (project folder) type for match --- xcode/commonFastfile | 26 ++++-- .../lib/match/storage/local_storage.rb | 82 +++++++++++++++++++ xcode/fastlane/touchlane/lib/touchlane.rb | 5 +- .../lib/{ => touchlane}/configuration.rb | 0 .../lib/{ => touchlane}/configuration_type.rb | 0 5 files changed, 103 insertions(+), 10 deletions(-) create mode 100644 xcode/fastlane/touchlane/lib/match/storage/local_storage.rb rename xcode/fastlane/touchlane/lib/{ => touchlane}/configuration.rb (100%) rename xcode/fastlane/touchlane/lib/{ => touchlane}/configuration_type.rb (100%) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 8564ade..d9ef852 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -2,6 +2,14 @@ $appName = File.basename(Dir['../*.xcworkspace'].first, '.*') require_relative 'fastlane/touchlane/lib/touchlane' +# ugly hack to add support for custom storage + +Match.module_eval do + def self.storage_modes + return %w(git google_cloud s3 local) + end +end + private_lane :installDependencies do |options| podsReposPath = File.expand_path "~/.cocoapods/repos/master/" lockFilePath = "#{podsReposPath}/.git/index.lock" @@ -339,21 +347,23 @@ lane :ManuallyUpdateCodeSigning do |options| end def sync_code_signing_using_options(options) + Match::Storage.register_backend(type: 'local', storage_class: Touchlane::LocalStorage) + Match::Encryption.register_backend(type: 'local', encryption_class: Match::Encryption::OpenSSL) + + signing_identities_path = File.expand_path "../EncryptedSigningIdentities" + match( app_identifier: options[:app_identifier], username: options[:username] || options[:apple_id], team_id: options[:team_id], type: options[:type], readonly: options[:readonly].nil? ? true : options[:readonly], - storage_mode: "git", - git_url: options[:git_url], - git_branch: "fastlane_certificates", - shallow_clone: true, - clone_branch_directly: true, - keychain_name: options[:keychain_name], - keychain_password: options[:keychain_password], + storage_mode: "local", + # we can't pass signing_identities_path as parameter name since params is hardcoded in match/runner.rb + git_url: signing_identities_path, skip_docs: true, - platform: "ios" + keychain_name: options[:keychain_name], + keychain_password: options[:keychain_password] ) end diff --git a/xcode/fastlane/touchlane/lib/match/storage/local_storage.rb b/xcode/fastlane/touchlane/lib/match/storage/local_storage.rb new file mode 100644 index 0000000..c8751e6 --- /dev/null +++ b/xcode/fastlane/touchlane/lib/match/storage/local_storage.rb @@ -0,0 +1,82 @@ +require 'match' +require 'fileutils' +require 'fastlane_core/ui/ui' + +module Touchlane + class LocalStorage < Match::Storage::Interface + attr_accessor :signing_identities_path + + def self.configure(params) + return self.new( + # we can't pass signing_identities_path since params is hardcoded in match/runner.rb + signing_identities_path: params[:git_url] + ) + end + + def initialize(signing_identities_path: nil) + self.signing_identities_path = signing_identities_path + end + + def prefixed_working_directory + return working_directory + end + + def download + # Check if we already have a functional working_directory + return if @working_directory + + # No existing working directory, creating a new one now + self.working_directory = Dir.mktmpdir + + Dir.mkdir(self.signing_identities_path) unless File.exists?(self.signing_identities_path) + + FileUtils.cp_r("#{self.signing_identities_path}/.", self.working_directory) + end + + def human_readable_description + "Local folder [#{self.signing_identities_path}]" + end + + def upload_files(files_to_upload: [], custom_message: nil) + # `files_to_upload` is an array of files that need to be moved to signing identities dir + # Those doesn't mean they're new, it might just be they're changed + # Either way, we'll upload them using the same technique + + Dir.mkdir(self.signing_identities_path) unless File.exists?(self.signing_identities_path) + + files_to_upload.each do |current_file| + # Go from + # "/var/folders/px/bz2kts9n69g8crgv4jpjh6b40000gn/T/d20181026-96528-1av4gge/profiles/development/Development_me.mobileprovision" + # to + # "profiles/development/Development_me.mobileprovision" + # + + # We also have to remove the trailing `/` as Google Cloud doesn't handle it nicely + target_path = current_file.gsub(self.working_directory + "/", "") + FileUtils.cp_r(current_file, File.join(self.signing_identities_path, target_path), remove_destination: true) + end + end + + def delete_files(files_to_delete: [], custom_message: nil) + files_to_delete.each do |file_name| + target_path = current_file.gsub(self.working_directory + "/", "") + File.delete(File.join(self.signing_identities_path, target_path)) + end + end + + def skip_docs + false + end + + def list_files(file_name: "", file_ext: "") + Dir[File.join(working_directory, "**", file_name, "*.#{file_ext}")] + end + + def generate_matchfile_content + path = Fastlane::UI.input("Path to the signing identities folder: ") + + return "git_url(\"#{path}\")" + end + + end +end diff --git a/xcode/fastlane/touchlane/lib/touchlane.rb b/xcode/fastlane/touchlane/lib/touchlane.rb index 8038507..f366ab1 100644 --- a/xcode/fastlane/touchlane/lib/touchlane.rb +++ b/xcode/fastlane/touchlane/lib/touchlane.rb @@ -1,4 +1,5 @@ module Touchlane - require_relative "configuration_type" - require_relative "configuration" + require_relative "touchlane/configuration_type" + require_relative "touchlane/configuration" + require_relative "match/storage/local_storage" end \ No newline at end of file diff --git a/xcode/fastlane/touchlane/lib/configuration.rb b/xcode/fastlane/touchlane/lib/touchlane/configuration.rb similarity index 100% rename from xcode/fastlane/touchlane/lib/configuration.rb rename to xcode/fastlane/touchlane/lib/touchlane/configuration.rb diff --git a/xcode/fastlane/touchlane/lib/configuration_type.rb b/xcode/fastlane/touchlane/lib/touchlane/configuration_type.rb similarity index 100% rename from xcode/fastlane/touchlane/lib/configuration_type.rb rename to xcode/fastlane/touchlane/lib/touchlane/configuration_type.rb From fe5564da7be048c95891193d1e26f4d3e5cf8e3d Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Tue, 13 Oct 2020 21:54:31 +0300 Subject: [PATCH 038/168] update ManuallyUpdateCodeSigning lane so it can use local storage --- xcode/commonFastfile | 45 +++++++++---------- .../lib/match/storage/local_storage.rb | 2 +- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index d9ef852..9d65323 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -123,7 +123,7 @@ private_lane :buildConfiguration do |options| openKeychain(options) - if is_ci + if !options[:buildNumber].nil? increment_build_number( build_number: options[:buildNumber] ) @@ -278,25 +278,18 @@ private_lane :openKeychain do |options| end lane :ManuallyUpdateCodeSigning do |options| - # based on this article https://medium.com/@jonathancardoso/using-fastlane-match-with-existing-certificates-without-revoking-them-a325be69dac6 - require 'fastlane_core' + register_local_storage_for_match() + require 'match' - conf = FastlaneCore::Configuration.create(Match::Options.available_options, {}) - conf.load_configuration_file("Matchfile") - - git_url = conf.config_file_options[:git_url] - shallow_clone = false - branch = 'fastlane_certificates' - - storage_conf = lambda do - new_storage = Match::Storage.for_mode('git', { git_url: git_url, shallow_clone: shallow_clone, git_branch: branch, clone_branch_directly: false}) + storage_factory = lambda do + new_storage = Match::Storage.for_mode('local', { git_url: get_signing_identities_path() }) new_storage.download return new_storage end - encryption_conf_for_storage = lambda do |stor| - new_encryption = Match::Encryption.for_storage_mode('git', { git_url: git_url, working_directory: stor.working_directory}) + encryption_factory = lambda do |stor| + new_encryption = Match::Encryption.for_storage_mode('local', { working_directory: stor.working_directory }) new_encryption.decrypt_files return new_encryption end @@ -305,8 +298,8 @@ lane :ManuallyUpdateCodeSigning do |options| Dir[File.join(stor.working_directory, "**", "*.{cer,p12,mobileprovision}")] end - storage = storage_conf.call - encryption = encryption_conf_for_storage.call(storage) + storage = storage_factory.call + encryption = encryption_factory.call(storage) old_files = get_all_files.call(storage) sh("open #{storage.working_directory}") @@ -329,8 +322,8 @@ lane :ManuallyUpdateCodeSigning do |options| # to avoid this we use storage twice if needed if files_diff.length > 0 - storage = storage_conf.call - encryption = encryption_conf_for_storage.call(storage) + storage = storage_factory.call + encryption = encryption_factory.call(storage) files_to_delete = files_diff.map do |file| old_file = file @@ -347,10 +340,7 @@ lane :ManuallyUpdateCodeSigning do |options| end def sync_code_signing_using_options(options) - Match::Storage.register_backend(type: 'local', storage_class: Touchlane::LocalStorage) - Match::Encryption.register_backend(type: 'local', encryption_class: Match::Encryption::OpenSSL) - - signing_identities_path = File.expand_path "../EncryptedSigningIdentities" + register_local_storage_for_match() match( app_identifier: options[:app_identifier], @@ -360,13 +350,22 @@ def sync_code_signing_using_options(options) readonly: options[:readonly].nil? ? true : options[:readonly], storage_mode: "local", # we can't pass signing_identities_path as parameter name since params is hardcoded in match/runner.rb - git_url: signing_identities_path, + git_url: get_signing_identities_path(), skip_docs: true, keychain_name: options[:keychain_name], keychain_password: options[:keychain_password] ) end +def register_local_storage_for_match + Match::Storage.register_backend(type: 'local', storage_class: Touchlane::LocalStorage) + Match::Encryption.register_backend(type: 'local', encryption_class: Match::Encryption::OpenSSL) +end + +def get_signing_identities_path + File.expand_path "../EncryptedSigningIdentities" +end + def fill_up_options_using_configuration_type(options, configuration_type) configuration = get_configuration_for_type(configuration_type.type) diff --git a/xcode/fastlane/touchlane/lib/match/storage/local_storage.rb b/xcode/fastlane/touchlane/lib/match/storage/local_storage.rb index c8751e6..f2ed2bd 100644 --- a/xcode/fastlane/touchlane/lib/match/storage/local_storage.rb +++ b/xcode/fastlane/touchlane/lib/match/storage/local_storage.rb @@ -59,7 +59,7 @@ module Touchlane def delete_files(files_to_delete: [], custom_message: nil) files_to_delete.each do |file_name| - target_path = current_file.gsub(self.working_directory + "/", "") + target_path = file_name.gsub(self.working_directory + "/", "") File.delete(File.join(self.signing_identities_path, target_path)) end end From 784063b9964d5c20c791a7edf7020ed884df0c5f Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Tue, 20 Oct 2020 13:36:48 +0300 Subject: [PATCH 039/168] add support for custom scheme and lane name via options --- xcode/commonFastfile | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 9d65323..3886625 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -19,10 +19,6 @@ private_lane :installDependencies do |options| sh("rm -rf #{podsReposPath}") end - if File.exists? "../Gemfile" - bundle_install(path: "../.gem") - end - cocoapods( repo_update: true ) @@ -95,7 +91,7 @@ end private_lane :addShield do |options| buildNumber = options[:buildNumber] - buildDescription = options[:xcconfig_name] # EnterpriseCustomerDev1WithoutSSLPinningRelease + buildDescription = options[:lane_name] # EnterpriseCustomerDev1WithoutSSLPinningRelease .split(/(?=[A-Z])/) # -> ["Enterprise", "Customer", "Dev1", "Without", "S", "S", "L", "Pinning", "Release"] .map { |v| v.gsub(/[[:lower:]]+/, "") }[1..2] # -> ["E", "C", "D1", "W", "S", "S", "L", "P", "R"] -> ["C", "D1"] .join # -> "CD1" @@ -113,10 +109,10 @@ end private_lane :buildConfiguration do |options| appName = options[:appName] || $appName - lane_name = lane_context[SharedValues::LANE_NAME] + lane_name = options[:lane_name] || lane_context[SharedValues::LANE_NAME] - options[:scheme] = appName - options[:xcconfig_name] = lane_name + options[:scheme] = options[:scheme] || appName + options[:lane_name] = lane_name configuration_type = Touchlane::ConfigurationType.from_lane_name(lane_name) options = fill_up_options_using_configuration_type(options, configuration_type) @@ -172,12 +168,12 @@ private_lane :buildArchive do |options| exportOptions = icloudEnvironment.to_s.empty? ? {} : {iCloudContainerEnvironment: icloudEnvironment} exportOptions[:compileBitcode] = options[:compileBitcode] || false - xcconfig_name = options[:xcconfig_name] + lane_name = options[:lane_name] configuration = options[:configuration] xcodeproj_path = options[:xcodeproj_path] if configuration != "AppStore" # AppStore uses xcconfig choosen in Xcode - set_xcconfig_for_configuration_of_project(xcconfig_name, configuration, xcodeproj_path) + set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodeproj_path) end gym( @@ -401,7 +397,7 @@ def get_google_services_plist_path(app_target_folder_name, configuration_type) File.expand_path "../#{app_target_folder_name}/Resources/#{configuration_type.prefix}-GoogleService-Info.plist" end -def set_xcconfig_for_configuration_of_project(xcconfig_name, configuration, xcodeproj_path) +def set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodeproj_path) require 'xcodeproj' project = Xcodeproj::Project.open(xcodeproj_path) @@ -418,7 +414,7 @@ def set_xcconfig_for_configuration_of_project(xcconfig_name, configuration, xcod application_targets.each do |target| build_configuration = target.build_configuration_list[configuration] - config_name = target.name + xcconfig_name + config_name = target.name + lane_name build_configuration_reference = project.files.select { |f| f.path.start_with?(config_name) }.first build_configuration.base_configuration_reference = build_configuration_reference end From cb21c0ab0384ddfa5702c3ca36fd786cfb053a8a Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Mon, 23 Nov 2020 17:28:55 +0300 Subject: [PATCH 040/168] some fixes and improvements for multiple swiftlint --- xcode/.swiftlint.yml | 3 +- .../multiple_swiftlint/setting_option.rb | 91 +++++++++++-------- .../multiple_swiftlint/strategy_maker.rb | 70 +++++++------- .../multiple_swiftlint/swiftlint.rb | 5 +- 4 files changed, 92 insertions(+), 77 deletions(-) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index a8c88c7..53f5a30 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -72,8 +72,7 @@ opt_in_rules: excluded: - Carthage - Pods - - Generated - - Localization + - "**/Generated" line_length: warning: 128 diff --git a/xcode/build_phases/multiple_swiftlint/setting_option.rb b/xcode/build_phases/multiple_swiftlint/setting_option.rb index 44b8d7e..4374b24 100644 --- a/xcode/build_phases/multiple_swiftlint/setting_option.rb +++ b/xcode/build_phases/multiple_swiftlint/setting_option.rb @@ -7,17 +7,50 @@ class SettingOption def initialize @options = OpenStruct.new OptionParser.new do |opt| - opt.on('-p', '--project_root_path STRING', 'The path of project directory and contains *.xcodeproj file always. ' + - 'Example: project_root_path=~/Projects/MyProject/Source/..') { |option| @options.project_root_path = option } - opt.on('-r', '--source_root_path STRING', 'The path of source directory and may not contains *.xcodeproj file in some cases. ' + - 'Example: source_root_path=~/Projects/MyProject/') { |option| @options.source_root_path = option } - opt.on('-s', '--swiftlint_executable_path STRING', 'The executable path of swiftlint') { |option| @options.swiftlint_executable_path = option } - opt.on('-c', '--check_mode MODE', 'The mode of check is "fully" or "simplified"') { |option| @options.check_mode = option } - opt.on('-u', '--use_multiple BOOL', 'The flag indicates the use of multiple yaml swiftlint configurations') { |option| @options.use_multiple = option } - opt.on('-d', '--source_date DATE', 'The date of grouping files according touchin and old swiftlint rules') { |option| @options.source_date = option } - opt.on('-y', '--touchin_swiftlint_yaml_path STRING', 'The path to the touchin swiftlint yaml relative to the source directory') { |option| @options.touchin_swiftlint_yaml_path = option } + opt.on('-p', + '--project_root_path STRING', + 'The path of project directory and contains *.xcodeproj file always. ' + + 'Example: project_root_path=~/Projects/MyProject/Source/..') { |option| + @options.project_root_path = option + } + opt.on('-r', + '--source_root_path STRING', + 'The path of source directory and may not contains *.xcodeproj file in some cases. ' + + 'Example: source_root_path=~/Projects/MyProject/') { |option| + @options.source_root_path = option + } + opt.on('-s', + '--swiftlint_executable_path STRING', + 'The executable path of swiftlint') { |option| + @options.swiftlint_executable_path = option + } + opt.on('-c', + '--check_mode MODE', + 'The mode of check is "fully" or "simplified"') { |option| + @options.check_mode = option + } + opt.on('-u', + '--use_multiple BOOL', + 'The flag indicates the use of multiple yaml swiftlint configurations') { |option| + @options.use_multiple = option + } + opt.on('-d', + '--source_date DATE', + 'The date of grouping files according touchin and old swiftlint rules') { |option| + @options.source_date = option + } + opt.on('-tc', + '--touchin_swiftlint_yaml_path STRING', + 'The path to the touchin swiftlint yaml relative to the source directory') { |option| + @options.touchin_swiftlint_yaml_path = option + } + opt.on('-oc', + '--old_swiftlint_yaml_path STRING', + 'The path to the old swiftlint yaml relative to the source directory') { |option| + @options.old_swiftlint_yaml_path = option + } end.parse! - + if @options.check_mode.to_s.nilOrEmpty? @options.check_mode = 'fully' end @@ -29,37 +62,17 @@ class SettingOption if @options.source_root_path.to_s.nilOrEmpty? @options.source_root_path = @options.project_root_path end - + if @options.touchin_swiftlint_yaml_path.to_s.nilOrEmpty? - @options.touchin_swiftlint_yaml_path = '/build-scripts/xcode/.swiftlint.yml' + @options.touchin_swiftlint_yaml_path = File.join(project_root_path, 'build-scripts/xcode/.swiftlint.yml') + end + + if @options.old_swiftlint_yaml_path.to_s.nilOrEmpty? + @options.old_swiftlint_yaml_path = File.join(project_root_path, '.swiftlint.yml') end end - - def project_root_path - @options.project_root_path - end - - def source_date - @options.source_date - end - - def swiftlint_executable_path - @options.swiftlint_executable_path - end - - def check_mode - @options.check_mode - end - - def use_multiple - @options.use_multiple - end - - def source_root_path - @options.source_root_path - end - - def touchin_swiftlint_yaml_path - @options.touchin_swiftlint_yaml_path + + def method_missing(method, *args, &block) + @options.send(method, *args, &block) end end diff --git a/xcode/build_phases/multiple_swiftlint/strategy_maker.rb b/xcode/build_phases/multiple_swiftlint/strategy_maker.rb index a677892..eb82ae4 100644 --- a/xcode/build_phases/multiple_swiftlint/strategy_maker.rb +++ b/xcode/build_phases/multiple_swiftlint/strategy_maker.rb @@ -7,19 +7,19 @@ require_relative 'swift_file_manager.rb' require_relative 'yaml_manager.rb' class StrategyMaker - def initialize(project_root_path, swiftlint_executable_path, touchin_swiftlint_yaml_path) - @project_root_path = project_root_path - @touchin_swiftlint_yaml_path = project_root_path + touchin_swiftlint_yaml_path - @old_swiftlint_yaml_path = project_root_path + '/.swiftlint.yml' - - @temporary_swiftlint_folder_name = project_root_path + '/temporary_swiftlint' - @touchin_swiftlint_yaml_temporary_path = @temporary_swiftlint_folder_name + '/.touchin_swiftlint.yml' - @old_swiftlint_yaml_temporary_path = @temporary_swiftlint_folder_name + '/.old_swiftlint.yml' - + def initialize(project_root_path, swiftlint_executable_path, touchin_swiftlint_yaml_path, old_swiftlint_yaml_path) + @project_root_path = project_root_path + @touchin_swiftlint_yaml_path = touchin_swiftlint_yaml_path + @old_swiftlint_yaml_path = old_swiftlint_yaml_path + + @temporary_swiftlint_folder_name = Dir.mktmpdir + @touchin_swiftlint_yaml_temporary_path = File.join(@temporary_swiftlint_folder_name, '.touchin_swiftlint.yml') + @old_swiftlint_yaml_temporary_path = File.join(@temporary_swiftlint_folder_name, '.old_swiftlint.yml') + @swiftlint_autocorrect_command = swiftlint_executable_path + ' autocorrect --path ' + @project_root_path + ' --config ' @swiftlint_lint_command = swiftlint_executable_path + ' --path ' + @project_root_path + ' --config ' end - + def run_fully_multiple_strategy(source_date) create_yaml_managers_and_copy_temporary_files @@ -33,38 +33,38 @@ class StrategyMaker @touchin_swiftlint_yaml_manager.update('excluded', total_touchin_excluded_files) @old_swiftlint_yaml_manager.update('excluded', total_old_excluded_files) - + run_multiple_strategy(@touchin_swiftlint_yaml_temporary_path, @old_swiftlint_yaml_temporary_path) end - + def run_simplified_multiple_strategy(source_date, source_root_path) included_files = GitСaretaker.get_modified_files - + if included_files.nilOrEmpty? puts 'Git did not found swift files to check' return end - + create_yaml_managers_and_copy_temporary_files exclude_files = unique_exclude_files(@touchin_swiftlint_yaml_manager, @old_swiftlint_yaml_manager) included_files = included_files.map { |file_path| source_root_path + file_path } - + swift_file_manager = SwiftFileManager.new(exclude_files, source_date) swift_file_manager.find_list_file_paths_from(included_files) - + total_touchin_included_files = swift_file_manager.new_files total_old_included_files = swift_file_manager.old_files - + @touchin_swiftlint_yaml_manager.update('excluded', []) @old_swiftlint_yaml_manager.update('excluded', []) - + @touchin_swiftlint_yaml_manager.update('included', total_touchin_included_files) @old_swiftlint_yaml_manager.update('included', total_old_included_files) - + is_exist_total_touchin_included_files = (not total_touchin_included_files.nilOrEmpty?) is_exist_total_old_included_files = (not total_old_included_files.nilOrEmpty?) - + if is_exist_total_touchin_included_files and is_exist_total_old_included_files run_multiple_strategy(@touchin_swiftlint_yaml_temporary_path, @old_swiftlint_yaml_temporary_path) elsif is_exist_total_touchin_included_files and not is_exist_total_old_included_files @@ -75,11 +75,11 @@ class StrategyMaker puts 'Git did not found swift files to check' end end - + def run_fully_single_strategy run_single_strategy(@touchin_swiftlint_yaml_path) end - + def run_simplified_single_strategy(source_root_path) included_files = GitСaretaker.get_modified_files @@ -87,34 +87,34 @@ class StrategyMaker puts 'Git did not found swift files to check' return end - + create_copy_temporary_touchin_files - + touchin_swiftlint_yaml_manager = YamlManager.new(@touchin_swiftlint_yaml_temporary_path) touchin_excluded_files = touchin_swiftlint_yaml_manager.get_configuration('excluded') swift_files = SwiftFileManager.new(touchin_excluded_files, '') included_files = included_files.select { |file_name| not swift_files.is_excluded_file(file_name) } included_files = included_files.map { |file_path| source_root_path + file_path } - + touchin_swiftlint_yaml_manager.update('excluded', []) touchin_swiftlint_yaml_manager.update('included', included_files) - + if not included_files.nilOrEmpty? run_single_strategy(@touchin_swiftlint_yaml_temporary_path) else puts 'Git found the swift files to check, but they are excluded in yaml' end end - + private - + def run_single_strategy(swiftlint_yaml_path) result_swiftlint_command = get_swiftlint_command(swiftlint_yaml_path) puts result_swiftlint_command run_bash_command(result_swiftlint_command) end - + def run_multiple_strategy(touchin_swiftlint_yaml_temporary_path, old_swiftlint_yaml_temporary_path) touchin_swiftlint_command = get_swiftlint_command(touchin_swiftlint_yaml_temporary_path) old_swiftlint_command = get_swiftlint_command(old_swiftlint_yaml_temporary_path) @@ -122,34 +122,34 @@ class StrategyMaker puts result_swiftlint_command run_bash_command(result_swiftlint_command) end - + def get_swiftlint_command(swiftlint_yaml_path) autocorrect_command = @swiftlint_autocorrect_command + swiftlint_yaml_path lint_command = @swiftlint_lint_command + swiftlint_yaml_path return autocorrect_command + ' && ' + lint_command end - + def run_bash_command(bash_command) exit (exec bash_command) end def create_yaml_managers_and_copy_temporary_files create_copy_temporary_files - + @touchin_swiftlint_yaml_manager = YamlManager.new(@touchin_swiftlint_yaml_temporary_path) @old_swiftlint_yaml_manager = YamlManager.new(@old_swiftlint_yaml_temporary_path) end - + def create_copy_temporary_files create_copy_temporary_touchin_files FileUtils.cp @old_swiftlint_yaml_path, @old_swiftlint_yaml_temporary_path end - + def create_copy_temporary_touchin_files Dir.mkdir(@temporary_swiftlint_folder_name) unless Dir.exist?(@temporary_swiftlint_folder_name) FileUtils.cp @touchin_swiftlint_yaml_path, @touchin_swiftlint_yaml_temporary_path end - + def unique_exclude_files(touchin_swiftlint_yaml_manager, old_swiftlint_yaml_manager) touchin_excluded_files = touchin_swiftlint_yaml_manager.get_configuration('excluded') old_excluded_files = old_swiftlint_yaml_manager.get_configuration('excluded') diff --git a/xcode/build_phases/multiple_swiftlint/swiftlint.rb b/xcode/build_phases/multiple_swiftlint/swiftlint.rb index 17f8383..9638347 100644 --- a/xcode/build_phases/multiple_swiftlint/swiftlint.rb +++ b/xcode/build_phases/multiple_swiftlint/swiftlint.rb @@ -3,7 +3,10 @@ require_relative 'setting_option.rb' require_relative 'strategy_maker.rb' setting = SettingOption.new -strategy_maker = StrategyMaker.new(setting.project_root_path, setting.swiftlint_executable_path, setting.touchin_swiftlint_yaml_path) +strategy_maker = StrategyMaker.new(setting.project_root_path, + setting.swiftlint_executable_path, + setting.touchin_swiftlint_yaml_path, + setting.old_swiftlint_yaml_path) if setting.check_mode.eql? 'fully' and setting.use_multiple.true? strategy_maker.run_fully_multiple_strategy(setting.source_date) From 44d4e4175d16fafdb40f280f137c864d5a6eaab2 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Mon, 23 Nov 2020 17:41:18 +0300 Subject: [PATCH 041/168] fix undefined method mktmpdir --- xcode/build_phases/multiple_swiftlint/strategy_maker.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/xcode/build_phases/multiple_swiftlint/strategy_maker.rb b/xcode/build_phases/multiple_swiftlint/strategy_maker.rb index eb82ae4..d297dbf 100644 --- a/xcode/build_phases/multiple_swiftlint/strategy_maker.rb +++ b/xcode/build_phases/multiple_swiftlint/strategy_maker.rb @@ -1,4 +1,5 @@ require 'fileutils' +require 'tmpdir' require_relative 'array_extension.rb' require_relative 'git_caretaker.rb' From 1054ae4d3e71824958a74e4597896f18f226afb7 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Mon, 23 Nov 2020 17:53:13 +0300 Subject: [PATCH 042/168] add prefer_zero_over_explicit_init rule --- xcode/.swiftlint.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index 53f5a30..9a86a55 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -32,6 +32,7 @@ opt_in_rules: - fatal_error_message - extension_access_modifier - explicit_init + - prefer_zero_over_explicit_init # style From 4dbdcfce7a4791e364699fd8de490cdee0ba86b1 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Mon, 23 Nov 2020 19:04:48 +0300 Subject: [PATCH 043/168] make all build script calls relative --- xcode/build_phases/copy_paste_detection.sh | 4 ++-- xcode/build_phases/unused.sh | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/xcode/build_phases/copy_paste_detection.sh b/xcode/build_phases/copy_paste_detection.sh index c8b6e88..79a8806 100644 --- a/xcode/build_phases/copy_paste_detection.sh +++ b/xcode/build_phases/copy_paste_detection.sh @@ -1,5 +1,5 @@ if which pmd >/dev/null; then - # running CPD + readonly CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" readonly SOURCES_DIR=${1:-${PROJECT_DIR}} # first argument or PROJECT_DIR readonly REPORTS_DIR=${PROJECT_DIR}/code-quality-reports readonly FILES_TO_EXCLUDE=`find ${SOURCES_DIR} -type d -name Localization -or -name Generated -or -name Carthage -or -name Pods | paste -sd " " -` @@ -8,7 +8,7 @@ if which pmd >/dev/null; then pmd cpd --files ${SOURCES_DIR} --exclude ${FILES_TO_EXCLUDE} --minimum-tokens 50 --language swift --encoding UTF-8 --format net.sourceforge.pmd.cpd.XMLRenderer > ${REPORTS_DIR}/cpd-output.xml --failOnViolation true - php ./build-scripts/xcode/aux_scripts/cpd_script.php ${REPORTS_DIR}/cpd-output.xml | tee ${REPORTS_DIR}/CPDLog.txt + php ${CURRENT_DIR}/../aux_scripts/cpd_script.php ${REPORTS_DIR}/cpd-output.xml | tee ${REPORTS_DIR}/CPDLog.txt # Make paths relative to SOURCES_DIR, so different developers won't rewrite entire file readonly SED_REPLACEMENT_STRING=$(echo ${SOURCES_DIR} | sed "s/\//\\\\\//g") diff --git a/xcode/build_phases/unused.sh b/xcode/build_phases/unused.sh index 5a0a906..169967d 100644 --- a/xcode/build_phases/unused.sh +++ b/xcode/build_phases/unused.sh @@ -1,4 +1,5 @@ -arguments=("$@") -ignored_files=$(IFS=, ; echo "${arguments[*]}") +readonly ARGUMENTS=("$@") +readonly IGNORED_FILES=$(IFS=, ; echo "${ARGUMENTS[*]}") +readonly CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -ruby ${PROJECT_DIR}/build-scripts/xcode/build_phases/Unused.rb --config ${PROJECT_DIR}/build-scripts/xcode/UnusedConfig.yml --exclude ${ignored_files} +ruby ${CURRENT_DIR}/Unused.rb --config ${CURRENT_DIR}/../UnusedConfig.yml --exclude ${IGNORED_FILES} From dbfc6153ab5a96761b1307f7fa163dc0d527ba87 Mon Sep 17 00:00:00 2001 From: Vlad Date: Sat, 12 Dec 2020 18:17:39 +0300 Subject: [PATCH 044/168] Add uploadFeaturesToProject lane --- xcode/commonFastfile | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 3886625..3d82867 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -106,6 +106,26 @@ private_lane :addShield do |options| end end +private_lane :uploadFeaturesToProject do |options| + require 'json' + + features_string = options[:features] # "DebitCardFeature,Sprint5Feature,CreditCardFeature" + feature_names = features_string.split(",").map { |value| value.strip } # [ "DebitCardFeature", "Sprint5Feature", "CreditCardFeature" ] + + # Generate JSON from feature names + feature_bodies = feature_names.map { |feature_name| { :name => feature_name, :enabled => true} } + features = { :features => features_body } + features_json = JSON.pretty_generate(features) + + # Put features JSON to project file + app_target_folder_name = options[:appName] || $appName + features_file_path = get_features_file_path(app_target_folder_name) + + File.open(features_file_path, "w") do |f| + f.write(features_json) + end +end + private_lane :buildConfiguration do |options| appName = options[:appName] || $appName @@ -136,6 +156,10 @@ private_lane :buildConfiguration do |options| installDependencies(options) + if options[:features] + uploadFeaturesToProject(options) + end + if !(options[:uploadToFabric] || options[:uploadToAppStore]) options[:skip_package_ipa] = true @@ -397,6 +421,10 @@ def get_google_services_plist_path(app_target_folder_name, configuration_type) File.expand_path "../#{app_target_folder_name}/Resources/#{configuration_type.prefix}-GoogleService-Info.plist" end +def get_features_file_path(app_target_folder_name) + File.expand_path "../#{app_target_folder_name}/Resources/Features.json" +end + def set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodeproj_path) require 'xcodeproj' From aa00fe13cae04b488a331afeb1fa6017ac1245cf Mon Sep 17 00:00:00 2001 From: Vlad Date: Sat, 12 Dec 2020 19:55:10 +0300 Subject: [PATCH 045/168] Add Features class --- xcode/commonFastfile | 27 ++++-------- xcode/fastlane/touchlane/lib/touchlane.rb | 3 +- .../touchlane/lib/touchlane/features.rb | 41 +++++++++++++++++++ 3 files changed, 50 insertions(+), 21 deletions(-) create mode 100644 xcode/fastlane/touchlane/lib/touchlane/features.rb diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 3d82867..ac4eb16 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -106,24 +106,15 @@ private_lane :addShield do |options| end end -private_lane :uploadFeaturesToProject do |options| - require 'json' - - features_string = options[:features] # "DebitCardFeature,Sprint5Feature,CreditCardFeature" - feature_names = features_string.split(",").map { |value| value.strip } # [ "DebitCardFeature", "Sprint5Feature", "CreditCardFeature" ] - - # Generate JSON from feature names - feature_bodies = feature_names.map { |feature_name| { :name => feature_name, :enabled => true} } - features = { :features => features_body } - features_json = JSON.pretty_generate(features) - - # Put features JSON to project file +private_lane lane :uploadFeaturesToProject do |options| app_target_folder_name = options[:appName] || $appName - features_file_path = get_features_file_path(app_target_folder_name) - File.open(features_file_path, "w") do |f| - f.write(features_json) - end + project_features_file_path = File.expand_path "../#{app_target_folder_name}/Resources/Features.json" + common_features_file_path = File.expand_path "../common/build_options/Features.json" + + builder_features_list = options[:features] # [ "Feature1", "Feature2", "Feature3" ] + + Touchlane::Features.generate_features_file_in_project(builder_features_list, common_features_file_path, project_features_file_path) end private_lane :buildConfiguration do |options| @@ -421,10 +412,6 @@ def get_google_services_plist_path(app_target_folder_name, configuration_type) File.expand_path "../#{app_target_folder_name}/Resources/#{configuration_type.prefix}-GoogleService-Info.plist" end -def get_features_file_path(app_target_folder_name) - File.expand_path "../#{app_target_folder_name}/Resources/Features.json" -end - def set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodeproj_path) require 'xcodeproj' diff --git a/xcode/fastlane/touchlane/lib/touchlane.rb b/xcode/fastlane/touchlane/lib/touchlane.rb index f366ab1..7ece7cd 100644 --- a/xcode/fastlane/touchlane/lib/touchlane.rb +++ b/xcode/fastlane/touchlane/lib/touchlane.rb @@ -1,5 +1,6 @@ module Touchlane require_relative "touchlane/configuration_type" require_relative "touchlane/configuration" + require_relative "touchlane/features" require_relative "match/storage/local_storage" -end \ No newline at end of file +end diff --git a/xcode/fastlane/touchlane/lib/touchlane/features.rb b/xcode/fastlane/touchlane/lib/touchlane/features.rb new file mode 100644 index 0000000..3c50022 --- /dev/null +++ b/xcode/fastlane/touchlane/lib/touchlane/features.rb @@ -0,0 +1,41 @@ +require 'json' +require 'yaml' + +module Touchlane + class Features + + def self.generate_features_file_in_project(builder_features_list, common_features_file_path, project_features_file_path) + common_features_list = get_features_from_file(common_features_file_path)["features"] + + # Check is entered features contains in configuration file + features_diff = builder_features_list - common_features_list + + if !features_diff.empty? + raise "Unexpected features: " + features_diff.join(', ') + end + + # Generate JSON from feature names + feature_bodies = builder_features_list.map { |feature_name| { :name => feature_name, :enabled => true} } + features = { :features => features_body } + features_json = JSON.pretty_generate(features) + + unless File.exists? project_features_file_path + raise "Unable to load features from file at #{path}" + else + File.open(project_features_file_path, "w") do |f| + f.write(features_json) + end + end + + def self.get_features_from_file(path) + unless File.exists? path + raise "Unable to load features from file at #{path}" + else + YAML.load_file(path)["features"] + end + end + + private_class_method :new, :get_features_from_file + + end +end From a47f0b6218a864abfe5b10c094cbf516edc2dd47 Mon Sep 17 00:00:00 2001 From: Vlad Date: Sat, 12 Dec 2020 20:00:22 +0300 Subject: [PATCH 046/168] Fix file type --- xcode/commonFastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index ac4eb16..3446ca5 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -110,7 +110,7 @@ private_lane lane :uploadFeaturesToProject do |options| app_target_folder_name = options[:appName] || $appName project_features_file_path = File.expand_path "../#{app_target_folder_name}/Resources/Features.json" - common_features_file_path = File.expand_path "../common/build_options/Features.json" + common_features_file_path = File.expand_path "../common/build_options/Features.yaml" builder_features_list = options[:features] # [ "Feature1", "Feature2", "Feature3" ] From 67418eefc35396544f3b5d69edd99ed215d69c9c Mon Sep 17 00:00:00 2001 From: Vlad Date: Sat, 12 Dec 2020 20:57:09 +0300 Subject: [PATCH 047/168] Code correction --- xcode/fastlane/touchlane/lib/touchlane/features.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/xcode/fastlane/touchlane/lib/touchlane/features.rb b/xcode/fastlane/touchlane/lib/touchlane/features.rb index 3c50022..3345c01 100644 --- a/xcode/fastlane/touchlane/lib/touchlane/features.rb +++ b/xcode/fastlane/touchlane/lib/touchlane/features.rb @@ -24,6 +24,7 @@ module Touchlane else File.open(project_features_file_path, "w") do |f| f.write(features_json) + end end end From 46be166a04fb5f83a431c9f675951b0598de7615 Mon Sep 17 00:00:00 2001 From: Vlad Date: Sat, 12 Dec 2020 21:12:05 +0300 Subject: [PATCH 048/168] Code correction --- xcode/commonFastfile | 6 +++--- xcode/fastlane/touchlane/lib/touchlane/features.rb | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 3446ca5..48b8c8a 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -106,14 +106,14 @@ private_lane :addShield do |options| end end -private_lane lane :uploadFeaturesToProject do |options| +private_lane :uploadFeaturesToProject do |options| app_target_folder_name = options[:appName] || $appName project_features_file_path = File.expand_path "../#{app_target_folder_name}/Resources/Features.json" common_features_file_path = File.expand_path "../common/build_options/Features.yaml" - builder_features_list = options[:features] # [ "Feature1", "Feature2", "Feature3" ] - + builder_features_list = options[:features].split(",").map { |feature_name| feature_name.strip } # [ "Feature1", "Feature2", "Feature3" ] + Touchlane::Features.generate_features_file_in_project(builder_features_list, common_features_file_path, project_features_file_path) end diff --git a/xcode/fastlane/touchlane/lib/touchlane/features.rb b/xcode/fastlane/touchlane/lib/touchlane/features.rb index 3345c01..4806fba 100644 --- a/xcode/fastlane/touchlane/lib/touchlane/features.rb +++ b/xcode/fastlane/touchlane/lib/touchlane/features.rb @@ -16,7 +16,7 @@ module Touchlane # Generate JSON from feature names feature_bodies = builder_features_list.map { |feature_name| { :name => feature_name, :enabled => true} } - features = { :features => features_body } + features = { :features => feature_bodies } features_json = JSON.pretty_generate(features) unless File.exists? project_features_file_path @@ -32,7 +32,7 @@ module Touchlane unless File.exists? path raise "Unable to load features from file at #{path}" else - YAML.load_file(path)["features"] + YAML.load_file(path) end end From 136beef976eae2c184cdcda51338cbcb43ccdbbb Mon Sep 17 00:00:00 2001 From: Vlad Date: Sat, 12 Dec 2020 21:12:58 +0300 Subject: [PATCH 049/168] Fix typo --- xcode/fastlane/touchlane/lib/touchlane/features.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/fastlane/touchlane/lib/touchlane/features.rb b/xcode/fastlane/touchlane/lib/touchlane/features.rb index 4806fba..f0d55a7 100644 --- a/xcode/fastlane/touchlane/lib/touchlane/features.rb +++ b/xcode/fastlane/touchlane/lib/touchlane/features.rb @@ -20,7 +20,7 @@ module Touchlane features_json = JSON.pretty_generate(features) unless File.exists? project_features_file_path - raise "Unable to load features from file at #{path}" + raise "Unable to load features to file at #{path}" else File.open(project_features_file_path, "w") do |f| f.write(features_json) From 2712da9b8941b3bbef80f318e93cf5790a1695c5 Mon Sep 17 00:00:00 2001 From: Vlad Date: Sat, 12 Dec 2020 21:16:07 +0300 Subject: [PATCH 050/168] Code correction --- xcode/fastlane/touchlane/lib/touchlane/features.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/fastlane/touchlane/lib/touchlane/features.rb b/xcode/fastlane/touchlane/lib/touchlane/features.rb index f0d55a7..00a4e3e 100644 --- a/xcode/fastlane/touchlane/lib/touchlane/features.rb +++ b/xcode/fastlane/touchlane/lib/touchlane/features.rb @@ -28,7 +28,7 @@ module Touchlane end end - def self.get_features_from_file(path) + def self.get_features_from_file(path) unless File.exists? path raise "Unable to load features from file at #{path}" else From 4cf2810533aa2380cdd17f7254676bfe8c3dc3e8 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Sun, 13 Dec 2020 02:01:04 +0300 Subject: [PATCH 051/168] disable comments evaluation for redundant_boolean_condition rule --- xcode/.swiftlint.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index 9a86a55..60816cc 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -220,6 +220,26 @@ custom_rules: regex: "(== true)|(== false)|(!= true)|(!= false)" message: "Comparing a boolean to true is redundant (use `?? false` for optionals), and `!`-syntax is preferred over comparing to false." severity: error + match_kinds: + - argument + - attribute.builtin + - attribute.id + - buildconfig.id + - buildconfig.keyword + - identifier + - keyword + - number + - objectliteral + - parameter + - placeholder + # - string # all except string literals + # - comment # and comments + # - comment.mark + # - comment.url + # - doccomment + # - doccomment.field + - string_interpolation_anchor + - typeidentifier redundant_ternary_operator: name: "Redundant Ternary Operator" From a5f2b49a5126c35d19690f8c6030057d21bc571a Mon Sep 17 00:00:00 2001 From: Vlad Date: Mon, 14 Dec 2020 11:58:58 +0300 Subject: [PATCH 052/168] Fix names filter --- xcode/commonFastfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 48b8c8a..4efcb84 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -112,7 +112,9 @@ private_lane :uploadFeaturesToProject do |options| project_features_file_path = File.expand_path "../#{app_target_folder_name}/Resources/Features.json" common_features_file_path = File.expand_path "../common/build_options/Features.yaml" - builder_features_list = options[:features].split(",").map { |feature_name| feature_name.strip } # [ "Feature1", "Feature2", "Feature3" ] + builder_features_list = options[:features] + .split(",").map { |feature_name| feature_name.strip } # [ "Feature1", "Feature2", "Feature3" ] + .reject { |feature_name| feature_name.empty? } Touchlane::Features.generate_features_file_in_project(builder_features_list, common_features_file_path, project_features_file_path) end From b3751302a90e2dbc89b7a9b0ea603e2d845e2bda Mon Sep 17 00:00:00 2001 From: Vlad Date: Mon, 14 Dec 2020 20:58:19 +0300 Subject: [PATCH 053/168] Add features generator --- .../features_generator/features_generator.rb | 55 +++++++++++++++++++ .../features_generator/features_generator.sh | 14 +++++ 2 files changed, 69 insertions(+) create mode 100755 xcode/build_phases/features_generator/features_generator.rb create mode 100755 xcode/build_phases/features_generator/features_generator.sh diff --git a/xcode/build_phases/features_generator/features_generator.rb b/xcode/build_phases/features_generator/features_generator.rb new file mode 100755 index 0000000..c770014 --- /dev/null +++ b/xcode/build_phases/features_generator/features_generator.rb @@ -0,0 +1,55 @@ +require 'yaml' +require 'erb' + +# Input files paths +build_settings_file_path = ARGV[0] +generated_features_enum_file_path = ARGV[1] + +features_enum_template = +" +//MARK: - Feature toggles + +public enum FeatureToggles: String, Codable, RawRepresentable, CaseIterable { + <% for @item in @items %> + case <%= @item %> + <% end %> +} +" + +class FeatureUtils + include ERB::Util + + attr_accessor :items + + def initialize(items) + @items = items + end + + def render(template) + ERB.new(template).result(binding) + end +end + +def save(path, data) + unless File.exists? path + raise "Unable to safe features to file at #{path}" + else + File.open(path, "w") do |f| + f.write(data) + end + end +end + +def get_features_from_file(path) + unless File.exists? path + raise "Unable to load features from file at #{path}" + else + YAML.load_file(path) + end +end + +build_settings_features_list = get_features_from_file(build_settings_file_path)["features"] +utils = FeatureUtils.new(build_settings_features_list) + +data = utils.render(features_enum_template).strip +save(generated_features_enum_file_path, data) diff --git a/xcode/build_phases/features_generator/features_generator.sh b/xcode/build_phases/features_generator/features_generator.sh new file mode 100755 index 0000000..2c8f94b --- /dev/null +++ b/xcode/build_phases/features_generator/features_generator.sh @@ -0,0 +1,14 @@ +readonly build_settings_file_path="${PROJECT_DIR}/common/build_settings.yaml" +readonly generated_file_path="${PROJECT_DIR}/${PRODUCT_NAME}/Resources/Features/FeatureToggles.swift" + +if ! [ -e ${build_settings_file_path} ]; then + echo "File ${PROJECT_DIR}/common/build_settings.yaml does not exist. Add this file and try again." + exit 1 +fi + +if ! [ -e ${generated_file_path} ]; then + echo "File ${PROJECT_DIR}/${PRODUCT_NAME}/Resources/Features/FeatureToggles.swift does not exist. Add this file and try again." + exit 1 +fi + +ruby ${PROJECT_DIR}/build-scripts/xcode/build_phases/features_generator/features_generator.rb ${build_settings_file_path} ${generated_file_path} From 1f321c27c97cb4d9c3268af67954d906f6ef2f4c Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 15 Dec 2020 10:59:14 +0300 Subject: [PATCH 054/168] Add manager module and code correction --- .../features_generator/features_generator.rb | 37 ++++++------------- .../features_generator/features_generator.sh | 18 +++++---- xcode/commonFastfile | 8 ++-- .../touchlane/lib/touchlane/configuration.rb | 2 + .../touchlane/lib/touchlane/features.rb | 31 +++++----------- xcode/managers/lib/file_manager.rb | 27 ++++++++++++++ xcode/managers/managers.rb | 3 ++ 7 files changed, 67 insertions(+), 59 deletions(-) create mode 100644 xcode/managers/lib/file_manager.rb create mode 100644 xcode/managers/managers.rb diff --git a/xcode/build_phases/features_generator/features_generator.rb b/xcode/build_phases/features_generator/features_generator.rb index c770014..e35bb41 100755 --- a/xcode/build_phases/features_generator/features_generator.rb +++ b/xcode/build_phases/features_generator/features_generator.rb @@ -1,6 +1,8 @@ require 'yaml' require 'erb' +require_relative 'managers/managers' + # Input files paths build_settings_file_path = ARGV[0] generated_features_enum_file_path = ARGV[1] @@ -9,9 +11,9 @@ features_enum_template = " //MARK: - Feature toggles -public enum FeatureToggles: String, Codable, RawRepresentable, CaseIterable { - <% for @item in @items %> - case <%= @item %> +public enum FeatureToggle: String, Codable, RawRepresentable, CaseIterable { + <% for @feature in @features %> + case <%= @feature %> <% end %> } " @@ -19,10 +21,10 @@ public enum FeatureToggles: String, Codable, RawRepresentable, CaseIterable { class FeatureUtils include ERB::Util - attr_accessor :items + attr_accessor :features - def initialize(items) - @items = items + def initialize(features) + @features = features end def render(template) @@ -30,26 +32,9 @@ class FeatureUtils end end -def save(path, data) - unless File.exists? path - raise "Unable to safe features to file at #{path}" - else - File.open(path, "w") do |f| - f.write(data) - end - end -end +build_settings_features_list = Managers::FileManager.load_from_file_YAML(build_settings_file_path)["features"] -def get_features_from_file(path) - unless File.exists? path - raise "Unable to load features from file at #{path}" - else - YAML.load_file(path) - end -end - -build_settings_features_list = get_features_from_file(build_settings_file_path)["features"] utils = FeatureUtils.new(build_settings_features_list) +rendered_enum = utils.render(features_enum_template).strip -data = utils.render(features_enum_template).strip -save(generated_features_enum_file_path, data) +Managers::FileManager.save_data_to_file(generated_features_enum_file_path, rendered_enum) diff --git a/xcode/build_phases/features_generator/features_generator.sh b/xcode/build_phases/features_generator/features_generator.sh index 2c8f94b..dbe7b22 100755 --- a/xcode/build_phases/features_generator/features_generator.sh +++ b/xcode/build_phases/features_generator/features_generator.sh @@ -1,14 +1,18 @@ -readonly build_settings_file_path="${PROJECT_DIR}/common/build_settings.yaml" -readonly generated_file_path="${PROJECT_DIR}/${PRODUCT_NAME}/Resources/Features/FeatureToggles.swift" +# Input paths +readonly BUILD_SETTINGS_FILE_PATH=${1:-${PROJECT_DIR}/common/build_settings.yaml} +readonly FEATURES_ENUM_FILE_PATH=${2:-${PROJECT_DIR}/${PRODUCT_NAME}/Resources/Features/FeatureToggles.swift} -if ! [ -e ${build_settings_file_path} ]; then - echo "File ${PROJECT_DIR}/common/build_settings.yaml does not exist. Add this file and try again." +# Features enunm generator script +readonly GENERATOR_SCRIPT=${${PROJECT_DIR}/build-scripts/xcode/build_phases/features_generator/features_generator.rb} + +if ! [ -e ${BUILD_SETTINGS_FILE_PATH} ]; then + echo "File ${BUILD_SETTINGS_FILE_PATH} does not exist. Add this file and try again." exit 1 fi -if ! [ -e ${generated_file_path} ]; then - echo "File ${PROJECT_DIR}/${PRODUCT_NAME}/Resources/Features/FeatureToggles.swift does not exist. Add this file and try again." +if ! [ -e ${FEATURES_ENUM_FILE_PATH} ]; then + echo "File ${FEATURES_ENUM_FILE_PATH} does not exist. Add this file and try again." exit 1 fi -ruby ${PROJECT_DIR}/build-scripts/xcode/build_phases/features_generator/features_generator.rb ${build_settings_file_path} ${generated_file_path} +ruby ${GENERATOR_SCRIPT} ${BUILD_SETTINGS_FILE_PATH} ${FEATURES_ENUM_FILE_PATH} \ No newline at end of file diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 4efcb84..07f75da 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -106,17 +106,17 @@ private_lane :addShield do |options| end end -private_lane :uploadFeaturesToProject do |options| +private_lane :generateFeaturesJSONFile do |options| app_target_folder_name = options[:appName] || $appName project_features_file_path = File.expand_path "../#{app_target_folder_name}/Resources/Features.json" - common_features_file_path = File.expand_path "../common/build_options/Features.yaml" + build_settings_file_path = File.expand_path "../common/build_settings.yaml" builder_features_list = options[:features] .split(",").map { |feature_name| feature_name.strip } # [ "Feature1", "Feature2", "Feature3" ] .reject { |feature_name| feature_name.empty? } - Touchlane::Features.generate_features_file_in_project(builder_features_list, common_features_file_path, project_features_file_path) + Touchlane::Features.generate_features_file_in_project(builder_features_list, build_settings_file_path, project_features_file_path) end private_lane :buildConfiguration do |options| @@ -149,7 +149,7 @@ private_lane :buildConfiguration do |options| installDependencies(options) - if options[:features] + unless options[:features].nil? uploadFeaturesToProject(options) end diff --git a/xcode/fastlane/touchlane/lib/touchlane/configuration.rb b/xcode/fastlane/touchlane/lib/touchlane/configuration.rb index 02cc4d3..00b93a1 100644 --- a/xcode/fastlane/touchlane/lib/touchlane/configuration.rb +++ b/xcode/fastlane/touchlane/lib/touchlane/configuration.rb @@ -1,5 +1,7 @@ require "yaml" +require_relative 'managers/managers' + module Touchlane class Configuration def initialize(type, app_identifier, apple_id, team_id, itc_team_id) diff --git a/xcode/fastlane/touchlane/lib/touchlane/features.rb b/xcode/fastlane/touchlane/lib/touchlane/features.rb index 00a4e3e..0173dc4 100644 --- a/xcode/fastlane/touchlane/lib/touchlane/features.rb +++ b/xcode/fastlane/touchlane/lib/touchlane/features.rb @@ -1,14 +1,15 @@ require 'json' -require 'yaml' + +require_relative 'managers/managers' module Touchlane class Features - def self.generate_features_file_in_project(builder_features_list, common_features_file_path, project_features_file_path) - common_features_list = get_features_from_file(common_features_file_path)["features"] + def self.generate_features_file_in_project(builder_features_list, build_settings_file_path, project_features_file_path) + build_settings_features_list = Managers::FileManager.load_from_file_YAML(build_settings_file_path)["features"] # Check is entered features contains in configuration file - features_diff = builder_features_list - common_features_list + features_diff = builder_features_list - build_settings_features_list if !features_diff.empty? raise "Unexpected features: " + features_diff.join(', ') @@ -16,27 +17,13 @@ module Touchlane # Generate JSON from feature names feature_bodies = builder_features_list.map { |feature_name| { :name => feature_name, :enabled => true} } - features = { :features => feature_bodies } - features_json = JSON.pretty_generate(features) + features_full_body = { :features => feature_bodies } + features_json = JSON.pretty_generate(features_full_body) - unless File.exists? project_features_file_path - raise "Unable to load features to file at #{path}" - else - File.open(project_features_file_path, "w") do |f| - f.write(features_json) - end - end + Managers::FileManager.save_data_to_file(project_features_file_path, features_json) end - def self.get_features_from_file(path) - unless File.exists? path - raise "Unable to load features from file at #{path}" - else - YAML.load_file(path) - end - end - - private_class_method :new, :get_features_from_file + private_class_method :new end end diff --git a/xcode/managers/lib/file_manager.rb b/xcode/managers/lib/file_manager.rb new file mode 100644 index 0000000..72381f5 --- /dev/null +++ b/xcode/managers/lib/file_manager.rb @@ -0,0 +1,27 @@ +require 'yaml' + +module Managers + class FileManager + + def self.save_data_to_file(path, data) + unless File.exists? path + raise "Unable to save data to file at #{path}" + else + File.open(path, "w") do |f| + f.write(data) + end + end + end + + def self.load_from_file_YAML(path) + unless File.exists? path + raise "Unable to load data from file at #{path}" + else + YAML.load_file(path) + end + end + + private_class_method :new + + end +end diff --git a/xcode/managers/managers.rb b/xcode/managers/managers.rb new file mode 100644 index 0000000..81e6279 --- /dev/null +++ b/xcode/managers/managers.rb @@ -0,0 +1,3 @@ +module Managers + require_relative "lib/file_manager" +end From e7574decbc69dd7b9be5fd35aa18caa3c8ed92c1 Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 15 Dec 2020 11:05:35 +0300 Subject: [PATCH 055/168] Add check for nil --- xcode/build_phases/features_generator/features_generator.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/xcode/build_phases/features_generator/features_generator.rb b/xcode/build_phases/features_generator/features_generator.rb index e35bb41..925967e 100755 --- a/xcode/build_phases/features_generator/features_generator.rb +++ b/xcode/build_phases/features_generator/features_generator.rb @@ -34,6 +34,10 @@ end build_settings_features_list = Managers::FileManager.load_from_file_YAML(build_settings_file_path)["features"] +if build_settings_features_list.nil? or build_settings_features_list.empty? + raise "There are no features in " + build_settings_file_path +end + utils = FeatureUtils.new(build_settings_features_list) rendered_enum = utils.render(features_enum_template).strip From 4564ffbd99208ded644b7ae8057e6314da4cd875 Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 15 Dec 2020 11:06:23 +0300 Subject: [PATCH 056/168] Add comment --- xcode/build_phases/features_generator/features_generator.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/xcode/build_phases/features_generator/features_generator.rb b/xcode/build_phases/features_generator/features_generator.rb index 925967e..07cb358 100755 --- a/xcode/build_phases/features_generator/features_generator.rb +++ b/xcode/build_phases/features_generator/features_generator.rb @@ -38,6 +38,7 @@ if build_settings_features_list.nil? or build_settings_features_list.empty? raise "There are no features in " + build_settings_file_path end +# Generate enum Feature Toggles utils = FeatureUtils.new(build_settings_features_list) rendered_enum = utils.render(features_enum_template).strip From 149a4d2dcb91a780c9c72fb1599e0551079e3991 Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 15 Dec 2020 11:23:15 +0300 Subject: [PATCH 057/168] Code correction --- xcode/build_phases/features_generator/features_generator.rb | 2 +- xcode/build_phases/features_generator/features_generator.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/xcode/build_phases/features_generator/features_generator.rb b/xcode/build_phases/features_generator/features_generator.rb index 07cb358..d8a8f8e 100755 --- a/xcode/build_phases/features_generator/features_generator.rb +++ b/xcode/build_phases/features_generator/features_generator.rb @@ -1,7 +1,7 @@ require 'yaml' require 'erb' -require_relative 'managers/managers' +require_relative File.expand_path "build-scripts/xcode/managers/managers" # Input files paths build_settings_file_path = ARGV[0] diff --git a/xcode/build_phases/features_generator/features_generator.sh b/xcode/build_phases/features_generator/features_generator.sh index dbe7b22..730c2a2 100755 --- a/xcode/build_phases/features_generator/features_generator.sh +++ b/xcode/build_phases/features_generator/features_generator.sh @@ -3,7 +3,7 @@ readonly BUILD_SETTINGS_FILE_PATH=${1:-${PROJECT_DIR}/common/build_settings.yaml readonly FEATURES_ENUM_FILE_PATH=${2:-${PROJECT_DIR}/${PRODUCT_NAME}/Resources/Features/FeatureToggles.swift} # Features enunm generator script -readonly GENERATOR_SCRIPT=${${PROJECT_DIR}/build-scripts/xcode/build_phases/features_generator/features_generator.rb} +readonly GENERATOR_SCRIPT=${PROJECT_DIR}/build-scripts/xcode/build_phases/features_generator/features_generator.rb if ! [ -e ${BUILD_SETTINGS_FILE_PATH} ]; then echo "File ${BUILD_SETTINGS_FILE_PATH} does not exist. Add this file and try again." From d7a571400d2fb819fa3c950174238b24d6a7a4ed Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 15 Dec 2020 11:40:16 +0300 Subject: [PATCH 058/168] Code correction --- xcode/commonFastfile | 6 +++--- xcode/fastlane/touchlane/lib/touchlane/configuration.rb | 2 -- xcode/fastlane/touchlane/lib/touchlane/features.rb | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 07f75da..e36fee4 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -106,10 +106,10 @@ private_lane :addShield do |options| end end -private_lane :generateFeaturesJSONFile do |options| +private_lane :generateFeaturesFile do |options| app_target_folder_name = options[:appName] || $appName - project_features_file_path = File.expand_path "../#{app_target_folder_name}/Resources/Features.json" + project_features_file_path = File.expand_path "../#{app_target_folder_name}/Resources/Features/Features.json" build_settings_file_path = File.expand_path "../common/build_settings.yaml" builder_features_list = options[:features] @@ -150,7 +150,7 @@ private_lane :buildConfiguration do |options| installDependencies(options) unless options[:features].nil? - uploadFeaturesToProject(options) + generateFeaturesFile(options) end if !(options[:uploadToFabric] || options[:uploadToAppStore]) diff --git a/xcode/fastlane/touchlane/lib/touchlane/configuration.rb b/xcode/fastlane/touchlane/lib/touchlane/configuration.rb index 00b93a1..02cc4d3 100644 --- a/xcode/fastlane/touchlane/lib/touchlane/configuration.rb +++ b/xcode/fastlane/touchlane/lib/touchlane/configuration.rb @@ -1,7 +1,5 @@ require "yaml" -require_relative 'managers/managers' - module Touchlane class Configuration def initialize(type, app_identifier, apple_id, team_id, itc_team_id) diff --git a/xcode/fastlane/touchlane/lib/touchlane/features.rb b/xcode/fastlane/touchlane/lib/touchlane/features.rb index 0173dc4..62d1b10 100644 --- a/xcode/fastlane/touchlane/lib/touchlane/features.rb +++ b/xcode/fastlane/touchlane/lib/touchlane/features.rb @@ -1,6 +1,6 @@ require 'json' -require_relative 'managers/managers' +require_relative File.expand_path "../build-scripts/xcode/managers/managers" module Touchlane class Features From 31cc96b6c66f50941e1c9c0f1bca6f02b810f44f Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 15 Dec 2020 11:52:09 +0300 Subject: [PATCH 059/168] Fix enum path --- xcode/build_phases/features_generator/features_generator.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/build_phases/features_generator/features_generator.sh b/xcode/build_phases/features_generator/features_generator.sh index 730c2a2..4e39fff 100755 --- a/xcode/build_phases/features_generator/features_generator.sh +++ b/xcode/build_phases/features_generator/features_generator.sh @@ -1,6 +1,6 @@ # Input paths readonly BUILD_SETTINGS_FILE_PATH=${1:-${PROJECT_DIR}/common/build_settings.yaml} -readonly FEATURES_ENUM_FILE_PATH=${2:-${PROJECT_DIR}/${PRODUCT_NAME}/Resources/Features/FeatureToggles.swift} +readonly FEATURES_ENUM_FILE_PATH=${2:-${PROJECT_DIR}/${PRODUCT_NAME}/Resources/Features/FeatureToggle.swift} # Features enunm generator script readonly GENERATOR_SCRIPT=${PROJECT_DIR}/build-scripts/xcode/build_phases/features_generator/features_generator.rb From 64c8f852989cdcef794866267d845adc676b720a Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 15 Dec 2020 15:53:37 +0300 Subject: [PATCH 060/168] Fix PR --- xcode/commonFastfile | 8 ++++++-- .../fastlane/touchlane/lib/touchlane/features.rb | 15 ++++----------- xcode/managers/lib/file_manager.rb | 6 ++++++ 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index e36fee4..21fc50e 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -1,6 +1,7 @@ $appName = File.basename(Dir['../*.xcworkspace'].first, '.*') require_relative 'fastlane/touchlane/lib/touchlane' +require_relative File.expand_path "../build-scripts/xcode/managers/managers" # ugly hack to add support for custom storage @@ -114,9 +115,12 @@ private_lane :generateFeaturesFile do |options| builder_features_list = options[:features] .split(",").map { |feature_name| feature_name.strip } # [ "Feature1", "Feature2", "Feature3" ] - .reject { |feature_name| feature_name.empty? } - Touchlane::Features.generate_features_file_in_project(builder_features_list, build_settings_file_path, project_features_file_path) + build_settings_features_list = Managers::FileManager.load_from_file_YAML(build_settings_file_path)["features"] + + features_hash = Touchlane::Features.generate_features_hash(builder_features_list, build_settings_features_list) + + Managers::FileManager.save_data_to_file_in_json(project_features_file_path, features_hash) end private_lane :buildConfiguration do |options| diff --git a/xcode/fastlane/touchlane/lib/touchlane/features.rb b/xcode/fastlane/touchlane/lib/touchlane/features.rb index 62d1b10..e6e65c5 100644 --- a/xcode/fastlane/touchlane/lib/touchlane/features.rb +++ b/xcode/fastlane/touchlane/lib/touchlane/features.rb @@ -1,12 +1,7 @@ -require 'json' - -require_relative File.expand_path "../build-scripts/xcode/managers/managers" - module Touchlane class Features - def self.generate_features_file_in_project(builder_features_list, build_settings_file_path, project_features_file_path) - build_settings_features_list = Managers::FileManager.load_from_file_YAML(build_settings_file_path)["features"] + def self.generate_features_hash(builder_features_list, build_settings_features_list) # Check is entered features contains in configuration file features_diff = builder_features_list - build_settings_features_list @@ -15,12 +10,10 @@ module Touchlane raise "Unexpected features: " + features_diff.join(', ') end - # Generate JSON from feature names - feature_bodies = builder_features_list.map { |feature_name| { :name => feature_name, :enabled => true} } + # Generate hash from feature names + feature_bodies = builder_features_list.map { |feature_name| { :name => feature_name, :enabled => true } } features_full_body = { :features => feature_bodies } - features_json = JSON.pretty_generate(features_full_body) - - Managers::FileManager.save_data_to_file(project_features_file_path, features_json) + features_full_body.to_hash() end private_class_method :new diff --git a/xcode/managers/lib/file_manager.rb b/xcode/managers/lib/file_manager.rb index 72381f5..45bdda8 100644 --- a/xcode/managers/lib/file_manager.rb +++ b/xcode/managers/lib/file_manager.rb @@ -1,4 +1,5 @@ require 'yaml' +require 'json' module Managers class FileManager @@ -20,6 +21,11 @@ module Managers YAML.load_file(path) end end + + def self.save_data_to_file_in_json(path, data) + json_data = JSON.pretty_generate(data) + save_data_to_file(path, json_data) + end private_class_method :new From 545f8d4c2f115f3335e6c7006a3a8398a567ba3b Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 15 Dec 2020 18:27:25 +0300 Subject: [PATCH 061/168] Fix PR --- xcode/commonFastfile | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 21fc50e..2bcb73a 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -107,22 +107,6 @@ private_lane :addShield do |options| end end -private_lane :generateFeaturesFile do |options| - app_target_folder_name = options[:appName] || $appName - - project_features_file_path = File.expand_path "../#{app_target_folder_name}/Resources/Features/Features.json" - build_settings_file_path = File.expand_path "../common/build_settings.yaml" - - builder_features_list = options[:features] - .split(",").map { |feature_name| feature_name.strip } # [ "Feature1", "Feature2", "Feature3" ] - - build_settings_features_list = Managers::FileManager.load_from_file_YAML(build_settings_file_path)["features"] - - features_hash = Touchlane::Features.generate_features_hash(builder_features_list, build_settings_features_list) - - Managers::FileManager.save_data_to_file_in_json(project_features_file_path, features_hash) -end - private_lane :buildConfiguration do |options| appName = options[:appName] || $appName @@ -418,6 +402,22 @@ def get_google_services_plist_path(app_target_folder_name, configuration_type) File.expand_path "../#{app_target_folder_name}/Resources/#{configuration_type.prefix}-GoogleService-Info.plist" end +def generateFeaturesFile(options) + app_target_folder_name = options[:appName] || $appName + + project_features_file_path = File.expand_path "../#{app_target_folder_name}/Resources/Features/Features.json" + build_settings_file_path = File.expand_path "../common/build_settings.yaml" + + builder_features_list = options[:features] + .split(",").map { |feature_name| feature_name.strip } # [ "Feature1", "Feature2", "Feature3" ] + + build_settings_features_list = Managers::FileManager.load_from_file_YAML(build_settings_file_path)["features"] + + features_hash = Touchlane::Features.generate_features_hash(builder_features_list, build_settings_features_list) + + Managers::FileManager.save_data_to_file_in_json(project_features_file_path, features_hash) +end + def set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodeproj_path) require 'xcodeproj' From 4777c0c5977783867282157371f304df8e8920b1 Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 18 Dec 2020 17:55:27 +0300 Subject: [PATCH 062/168] Fix PR --- xcode/build_phases/features_generator/features_generator.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xcode/build_phases/features_generator/features_generator.sh b/xcode/build_phases/features_generator/features_generator.sh index 4e39fff..b41cb44 100755 --- a/xcode/build_phases/features_generator/features_generator.sh +++ b/xcode/build_phases/features_generator/features_generator.sh @@ -3,7 +3,8 @@ readonly BUILD_SETTINGS_FILE_PATH=${1:-${PROJECT_DIR}/common/build_settings.yaml readonly FEATURES_ENUM_FILE_PATH=${2:-${PROJECT_DIR}/${PRODUCT_NAME}/Resources/Features/FeatureToggle.swift} # Features enunm generator script -readonly GENERATOR_SCRIPT=${PROJECT_DIR}/build-scripts/xcode/build_phases/features_generator/features_generator.rb +readonly CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +readonly GENERATOR_SCRIPT=${CURRENT_DIR}/features_generator.rb if ! [ -e ${BUILD_SETTINGS_FILE_PATH} ]; then echo "File ${BUILD_SETTINGS_FILE_PATH} does not exist. Add this file and try again." From 1a344aeed7b058f3278616627392b77bf7116701 Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 18 Dec 2020 18:03:04 +0300 Subject: [PATCH 063/168] Fix PR --- xcode/commonFastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 2bcb73a..f6fbb5a 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -1,7 +1,7 @@ $appName = File.basename(Dir['../*.xcworkspace'].first, '.*') require_relative 'fastlane/touchlane/lib/touchlane' -require_relative File.expand_path "../build-scripts/xcode/managers/managers" +require_relative 'managers/managers' # ugly hack to add support for custom storage From 7b5ba18dfa7cbf1570c203fad73a4237828a5550 Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 18 Dec 2020 18:29:28 +0300 Subject: [PATCH 064/168] Fix PR --- xcode/build_phases/features_generator/features_generator.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/build_phases/features_generator/features_generator.rb b/xcode/build_phases/features_generator/features_generator.rb index d8a8f8e..834500b 100755 --- a/xcode/build_phases/features_generator/features_generator.rb +++ b/xcode/build_phases/features_generator/features_generator.rb @@ -1,7 +1,7 @@ require 'yaml' require 'erb' -require_relative File.expand_path "build-scripts/xcode/managers/managers" +require_relative "../../managers/managers" # Input files paths build_settings_file_path = ARGV[0] From 688a82854863d3aba0ffed2cb6a7afc4ee7d1814 Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 18 Dec 2020 18:30:19 +0300 Subject: [PATCH 065/168] Fix PR --- xcode/build_phases/features_generator/features_generator.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/build_phases/features_generator/features_generator.rb b/xcode/build_phases/features_generator/features_generator.rb index 834500b..6601ba6 100755 --- a/xcode/build_phases/features_generator/features_generator.rb +++ b/xcode/build_phases/features_generator/features_generator.rb @@ -1,7 +1,7 @@ require 'yaml' require 'erb' -require_relative "../../managers/managers" +require_relative '../../managers/managers' # Input files paths build_settings_file_path = ARGV[0] From ec27c3bc8152c427b47bbaa53c86d64806643a72 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Mon, 21 Dec 2020 14:22:52 +0300 Subject: [PATCH 066/168] add Generated, as well as **/Generated (for multiple swiftlint) --- xcode/.swiftlint.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index 60816cc..caa2386 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -73,6 +73,7 @@ opt_in_rules: excluded: - Carthage - Pods + - Generated - "**/Generated" line_length: From bd19a47a7545c1b0872f193c98b0c1ffe1b868aa Mon Sep 17 00:00:00 2001 From: Vlad Date: Sun, 27 Dec 2020 22:07:20 +0300 Subject: [PATCH 067/168] Update feature toggles work Add templates Add template manager Updaet features generation scripts --- .../features_generator/features_generator.rb | 31 +++-------------- .../features_generator/features_generator.sh | 2 +- xcode/commonFastfile | 8 ++--- .../touchlane/lib/touchlane/features.rb | 17 +++++++--- xcode/managers/lib/template_manager.rb | 19 +++++++++++ xcode/managers/managers.rb | 1 + xcode/templates/templates.rb | 3 ++ .../templates/templates/features_templates.rb | 34 +++++++++++++++++++ 8 files changed, 78 insertions(+), 37 deletions(-) create mode 100644 xcode/managers/lib/template_manager.rb create mode 100644 xcode/templates/templates.rb create mode 100755 xcode/templates/templates/features_templates.rb diff --git a/xcode/build_phases/features_generator/features_generator.rb b/xcode/build_phases/features_generator/features_generator.rb index 6601ba6..8a1bebd 100755 --- a/xcode/build_phases/features_generator/features_generator.rb +++ b/xcode/build_phases/features_generator/features_generator.rb @@ -1,37 +1,12 @@ require 'yaml' -require 'erb' require_relative '../../managers/managers' +require_relative '../../templates/templates' # Input files paths build_settings_file_path = ARGV[0] generated_features_enum_file_path = ARGV[1] -features_enum_template = -" -//MARK: - Feature toggles - -public enum FeatureToggle: String, Codable, RawRepresentable, CaseIterable { - <% for @feature in @features %> - case <%= @feature %> - <% end %> -} -" - -class FeatureUtils - include ERB::Util - - attr_accessor :features - - def initialize(features) - @features = features - end - - def render(template) - ERB.new(template).result(binding) - end -end - build_settings_features_list = Managers::FileManager.load_from_file_YAML(build_settings_file_path)["features"] if build_settings_features_list.nil? or build_settings_features_list.empty? @@ -39,7 +14,9 @@ if build_settings_features_list.nil? or build_settings_features_list.empty? end # Generate enum Feature Toggles -utils = FeatureUtils.new(build_settings_features_list) +features_enum_template = Templates::FeatureTemplates.features_enum +utils = Managers::TemplateManager.new(build_settings_features_list) + rendered_enum = utils.render(features_enum_template).strip Managers::FileManager.save_data_to_file(generated_features_enum_file_path, rendered_enum) diff --git a/xcode/build_phases/features_generator/features_generator.sh b/xcode/build_phases/features_generator/features_generator.sh index b41cb44..66da7cc 100755 --- a/xcode/build_phases/features_generator/features_generator.sh +++ b/xcode/build_phases/features_generator/features_generator.sh @@ -1,6 +1,6 @@ # Input paths readonly BUILD_SETTINGS_FILE_PATH=${1:-${PROJECT_DIR}/common/build_settings.yaml} -readonly FEATURES_ENUM_FILE_PATH=${2:-${PROJECT_DIR}/${PRODUCT_NAME}/Resources/Features/FeatureToggle.swift} +readonly FEATURES_ENUM_FILE_PATH=${2:-${PROJECT_DIR}/${PRODUCT_NAME}/Resources/Features/Feature.swift} # Features enunm generator script readonly CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" diff --git a/xcode/commonFastfile b/xcode/commonFastfile index f6fbb5a..1ad1c9f 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -138,7 +138,7 @@ private_lane :buildConfiguration do |options| installDependencies(options) unless options[:features].nil? - generateFeaturesFile(options) + generate_enabled_features_extension(options) end if !(options[:uploadToFabric] || options[:uploadToAppStore]) @@ -402,10 +402,10 @@ def get_google_services_plist_path(app_target_folder_name, configuration_type) File.expand_path "../#{app_target_folder_name}/Resources/#{configuration_type.prefix}-GoogleService-Info.plist" end -def generateFeaturesFile(options) +def generate_enabled_features_extension(options) app_target_folder_name = options[:appName] || $appName - project_features_file_path = File.expand_path "../#{app_target_folder_name}/Resources/Features/Features.json" + project_features_file_path = File.expand_path "../#{app_target_folder_name}/Resources/Features/Enabled.swift" build_settings_file_path = File.expand_path "../common/build_settings.yaml" builder_features_list = options[:features] @@ -413,7 +413,7 @@ def generateFeaturesFile(options) build_settings_features_list = Managers::FileManager.load_from_file_YAML(build_settings_file_path)["features"] - features_hash = Touchlane::Features.generate_features_hash(builder_features_list, build_settings_features_list) + enabled_features_hash = Touchlane::Features.generate_enabled_features_hash(builder_features_list, build_settings_features_list) Managers::FileManager.save_data_to_file_in_json(project_features_file_path, features_hash) end diff --git a/xcode/fastlane/touchlane/lib/touchlane/features.rb b/xcode/fastlane/touchlane/lib/touchlane/features.rb index e6e65c5..13501e6 100644 --- a/xcode/fastlane/touchlane/lib/touchlane/features.rb +++ b/xcode/fastlane/touchlane/lib/touchlane/features.rb @@ -1,7 +1,13 @@ +require 'yaml' +require 'erb' + +require_relative '../../managers/managers' +require_relative '../../templates/templates' + module Touchlane class Features - def self.generate_features_hash(builder_features_list, build_settings_features_list) + def self.generate_enabled_features_hash(builder_features_list, build_settings_features_list) # Check is entered features contains in configuration file features_diff = builder_features_list - build_settings_features_list @@ -10,10 +16,11 @@ module Touchlane raise "Unexpected features: " + features_diff.join(', ') end - # Generate hash from feature names - feature_bodies = builder_features_list.map { |feature_name| { :name => feature_name, :enabled => true } } - features_full_body = { :features => feature_bodies } - features_full_body.to_hash() + # Generate FeatureToggle extension hash from feature names + enabled_features_extension_template = Templates::FeatureTemplates.enabled_features_extension + utils = Managers::TemplateManager.new(builder_features_list) + + utils.render(enabled_features_extension_template).strip.to_hash() end private_class_method :new diff --git a/xcode/managers/lib/template_manager.rb b/xcode/managers/lib/template_manager.rb new file mode 100644 index 0000000..adb59c5 --- /dev/null +++ b/xcode/managers/lib/template_manager.rb @@ -0,0 +1,19 @@ +require 'erb' + +module Managers + class TemplateManager + + include ERB::Util + + attr_accessor :items + + def initialize(items) + @items = items + end + + def render(template) + ERB.new(template).result(binding) + end + + end +end diff --git a/xcode/managers/managers.rb b/xcode/managers/managers.rb index 81e6279..9c3c53d 100644 --- a/xcode/managers/managers.rb +++ b/xcode/managers/managers.rb @@ -1,3 +1,4 @@ module Managers require_relative "lib/file_manager" + require_relative "lib/template_manager" end diff --git a/xcode/templates/templates.rb b/xcode/templates/templates.rb new file mode 100644 index 0000000..c26788d --- /dev/null +++ b/xcode/templates/templates.rb @@ -0,0 +1,3 @@ +module Templates + require_relative "templates/features_templates" +end diff --git a/xcode/templates/templates/features_templates.rb b/xcode/templates/templates/features_templates.rb new file mode 100755 index 0000000..ba579ab --- /dev/null +++ b/xcode/templates/templates/features_templates.rb @@ -0,0 +1,34 @@ +module Templates + module FeatureTemplates + + def self.features_enum +" +//MARK: - Feature toggles + +public enum Feature: String, Codable, RawRepresentable, CaseIterable { + <% for @item in @items %> + case <%= @item %> + <% end %> +} +" + end + + def self.enabled_features_extension +" +// MARK: - Enabled features + +public extension Feature { + + static var enabled: [Feature] { + [ + <% for @item in @items %> + .<%= @item %>, + <% end %> + ] + } +} +" + end + + end +end \ No newline at end of file From 07b0df8a46cb5ce86067af5fb820840c961e5902 Mon Sep 17 00:00:00 2001 From: Vlad Date: Sun, 27 Dec 2020 22:09:28 +0300 Subject: [PATCH 068/168] Code correction --- xcode/fastlane/touchlane/lib/touchlane/features.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/xcode/fastlane/touchlane/lib/touchlane/features.rb b/xcode/fastlane/touchlane/lib/touchlane/features.rb index 13501e6..bebd4bf 100644 --- a/xcode/fastlane/touchlane/lib/touchlane/features.rb +++ b/xcode/fastlane/touchlane/lib/touchlane/features.rb @@ -1,6 +1,3 @@ -require 'yaml' -require 'erb' - require_relative '../../managers/managers' require_relative '../../templates/templates' From 417ddaafba539419908b71be87a9ee68e0dad4ce Mon Sep 17 00:00:00 2001 From: Vlad Date: Sun, 27 Dec 2020 22:22:52 +0300 Subject: [PATCH 069/168] Update naming --- xcode/templates/templates/features_templates.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xcode/templates/templates/features_templates.rb b/xcode/templates/templates/features_templates.rb index ba579ab..9c7cb44 100755 --- a/xcode/templates/templates/features_templates.rb +++ b/xcode/templates/templates/features_templates.rb @@ -3,7 +3,7 @@ module Templates def self.features_enum " -//MARK: - Feature toggles +//MARK: - Generated feature toggles public enum Feature: String, Codable, RawRepresentable, CaseIterable { <% for @item in @items %> @@ -15,7 +15,7 @@ public enum Feature: String, Codable, RawRepresentable, CaseIterable { def self.enabled_features_extension " -// MARK: - Enabled features +// MARK: - Generated enabled features public extension Feature { From 2af414680f90f47b4d5adce2501926b00ce074d4 Mon Sep 17 00:00:00 2001 From: Vlad Date: Sun, 27 Dec 2020 22:32:45 +0300 Subject: [PATCH 070/168] Fix paths --- xcode/fastlane/touchlane/lib/touchlane/features.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xcode/fastlane/touchlane/lib/touchlane/features.rb b/xcode/fastlane/touchlane/lib/touchlane/features.rb index bebd4bf..37b0f29 100644 --- a/xcode/fastlane/touchlane/lib/touchlane/features.rb +++ b/xcode/fastlane/touchlane/lib/touchlane/features.rb @@ -1,5 +1,5 @@ -require_relative '../../managers/managers' -require_relative '../../templates/templates' +require_relative '../../../../managers/managers' +require_relative '../../../../templates/templates' module Touchlane class Features From a042e43450eacac76aa7485863de07e37d776dce Mon Sep 17 00:00:00 2001 From: Vlad Date: Sun, 27 Dec 2020 23:23:36 +0300 Subject: [PATCH 071/168] Fix script logic --- xcode/commonFastfile | 28 +++++++++++++------ .../touchlane/lib/touchlane/features.rb | 6 ++-- .../templates/templates/features_templates.rb | 2 +- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 1ad1c9f..0f2f795 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -137,9 +137,7 @@ private_lane :buildConfiguration do |options| installDependencies(options) - unless options[:features].nil? - generate_enabled_features_extension(options) - end + generate_enabled_features_extension_if_needed(options) if !(options[:uploadToFabric] || options[:uploadToAppStore]) options[:skip_package_ipa] = true @@ -402,20 +400,32 @@ def get_google_services_plist_path(app_target_folder_name, configuration_type) File.expand_path "../#{app_target_folder_name}/Resources/#{configuration_type.prefix}-GoogleService-Info.plist" end -def generate_enabled_features_extension(options) +def generate_enabled_features_extension_if_needed(options) app_target_folder_name = options[:appName] || $appName - project_features_file_path = File.expand_path "../#{app_target_folder_name}/Resources/Features/Enabled.swift" + project_enabled_features_file_path = File.expand_path "../#{app_target_folder_name}/Resources/Features/Enabled.swift" build_settings_file_path = File.expand_path "../common/build_settings.yaml" - builder_features_list = options[:features] - .split(",").map { |feature_name| feature_name.strip } # [ "Feature1", "Feature2", "Feature3" ] + unless is_feature_extension_needed?(options, project_enabled_features_file_path) + return + end + + if options[:features].nil? + builder_features_list = [] # If Enabled.swift exists and features option is nil we need to create empty extension to avoid unexpected features + else + builder_features_list = (options[:features] || []) + .split(",").map { |feature_name| feature_name.strip } # [ "Feature1", "Feature2", "Feature3" ] + end build_settings_features_list = Managers::FileManager.load_from_file_YAML(build_settings_file_path)["features"] - enabled_features_hash = Touchlane::Features.generate_enabled_features_hash(builder_features_list, build_settings_features_list) + enabled_features_extension = Touchlane::Features.generate_enabled_features_extension(builder_features_list, build_settings_features_list) - Managers::FileManager.save_data_to_file_in_json(project_features_file_path, features_hash) + Managers::FileManager.save_data_to_file(project_enabled_features_file_path, enabled_features_extension) +end + +def is_feature_extension_needed?(options, project_enabled_features_file_path) + !options[:features].nil? || File.exists?(project_enabled_features_file_path) end def set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodeproj_path) diff --git a/xcode/fastlane/touchlane/lib/touchlane/features.rb b/xcode/fastlane/touchlane/lib/touchlane/features.rb index 37b0f29..838eb0e 100644 --- a/xcode/fastlane/touchlane/lib/touchlane/features.rb +++ b/xcode/fastlane/touchlane/lib/touchlane/features.rb @@ -4,12 +4,12 @@ require_relative '../../../../templates/templates' module Touchlane class Features - def self.generate_enabled_features_hash(builder_features_list, build_settings_features_list) + def self.generate_enabled_features_extension(builder_features_list, build_settings_features_list) # Check is entered features contains in configuration file features_diff = builder_features_list - build_settings_features_list - if !features_diff.empty? + unless features_diff.empty? raise "Unexpected features: " + features_diff.join(', ') end @@ -17,7 +17,7 @@ module Touchlane enabled_features_extension_template = Templates::FeatureTemplates.enabled_features_extension utils = Managers::TemplateManager.new(builder_features_list) - utils.render(enabled_features_extension_template).strip.to_hash() + utils.render(enabled_features_extension_template).strip end private_class_method :new diff --git a/xcode/templates/templates/features_templates.rb b/xcode/templates/templates/features_templates.rb index 9c7cb44..ee049cf 100755 --- a/xcode/templates/templates/features_templates.rb +++ b/xcode/templates/templates/features_templates.rb @@ -22,7 +22,7 @@ public extension Feature { static var enabled: [Feature] { [ <% for @item in @items %> - .<%= @item %>, + \.<%= @item %>, <% end %> ] } From 175a97fc5f8884881dfeaa87dc8d19aa9371bf6b Mon Sep 17 00:00:00 2001 From: Vlad Date: Mon, 28 Dec 2020 08:30:36 +0300 Subject: [PATCH 072/168] Code correction --- xcode/commonFastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 0f2f795..4feb6df 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -413,7 +413,7 @@ def generate_enabled_features_extension_if_needed(options) if options[:features].nil? builder_features_list = [] # If Enabled.swift exists and features option is nil we need to create empty extension to avoid unexpected features else - builder_features_list = (options[:features] || []) + builder_features_list = options[:features] .split(",").map { |feature_name| feature_name.strip } # [ "Feature1", "Feature2", "Feature3" ] end From f684dbc0293d00ccab7f39a96b6eb7f134029d72 Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 29 Dec 2020 14:43:47 +0300 Subject: [PATCH 073/168] Fix PR --- xcode/fastlane/touchlane/lib/touchlane/features.rb | 2 +- xcode/templates/templates/features_templates.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/xcode/fastlane/touchlane/lib/touchlane/features.rb b/xcode/fastlane/touchlane/lib/touchlane/features.rb index 838eb0e..cadfb0f 100644 --- a/xcode/fastlane/touchlane/lib/touchlane/features.rb +++ b/xcode/fastlane/touchlane/lib/touchlane/features.rb @@ -13,7 +13,7 @@ module Touchlane raise "Unexpected features: " + features_diff.join(', ') end - # Generate FeatureToggle extension hash from feature names + # Generate enabled features extension from feature names enabled_features_extension_template = Templates::FeatureTemplates.enabled_features_extension utils = Managers::TemplateManager.new(builder_features_list) diff --git a/xcode/templates/templates/features_templates.rb b/xcode/templates/templates/features_templates.rb index ee049cf..69eeeaf 100755 --- a/xcode/templates/templates/features_templates.rb +++ b/xcode/templates/templates/features_templates.rb @@ -3,7 +3,7 @@ module Templates def self.features_enum " -//MARK: - Generated feature toggles +// MARK: - Generated feature toggles public enum Feature: String, Codable, RawRepresentable, CaseIterable { <% for @item in @items %> From db8cd599b3c1c605d20df6050ea79050267b6b52 Mon Sep 17 00:00:00 2001 From: Vlad Date: Wed, 30 Dec 2020 14:20:10 +0300 Subject: [PATCH 074/168] Add strong self rule --- xcode/.swiftlint.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index caa2386..35c417c 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -278,6 +278,12 @@ custom_rules: message: "Use `ParameterClosure` instead of declaring an explicit return value of `Void`." severity: error + strong_self: + name: "Strong self" + regex: '(if|guard)\s+let\s+self\s+=\s+self' + message: "Use a local function instead of capture strong self" + severity: error + # Rx unused_map_parameter: From 454ae16cbe130e244527c2f8046d87be0768966f Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Wed, 13 Jan 2021 18:21:54 +0300 Subject: [PATCH 075/168] remove GOOGLE_SERVICE_INFO_PLIST_PATH generation from xcconfig files --- xcode/config_generator/render_xcconfigs.rb | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/xcode/config_generator/render_xcconfigs.rb b/xcode/config_generator/render_xcconfigs.rb index e08f18a..69aee0b 100755 --- a/xcode/config_generator/render_xcconfigs.rb +++ b/xcode/config_generator/render_xcconfigs.rb @@ -75,27 +75,11 @@ def generate_provisioning_profile(provisioning_key, bundle_id, distribution_type end end -def generate_google_service_info_plist_path(google_service_info_plist_key, target_name, distribution_type) - google_service_info_plist_path = target_name + "/Resources/" - - path_suffix = case distribution_type - when "development" - "Standard-GoogleService-Info.plist" - when "enterprise" - "Enterprise-GoogleService-Info.plist" - else - "AppStore-GoogleService-Info.plist" - end - - return config_option(google_service_info_plist_key, google_service_info_plist_path + path_suffix) -end - # Generate missing properties if needed def generate_missing_properties(target_name, properties, distribution_type) result = [] development_team_key = "DEVELOPMENT_TEAM" provisioning_key = "PROVISIONING_PROFILE_SPECIFIER" - google_service_info_plist_key = "GOOGLE_SERVICE_INFO_PLIST_PATH" bundle_id_key = "PRODUCT_BUNDLE_IDENTIFIER" # Bundle_id_key should be among the properties (required by fastlane) @@ -111,10 +95,6 @@ def generate_missing_properties(target_name, properties, distribution_type) result.append(generate_provisioning_profile(provisioning_key, properties[bundle_id_key], distribution_type)) end - unless properties.key?(google_service_info_plist_key) - result.append(generate_google_service_info_plist_path(google_service_info_plist_key, target_name, distribution_type)) - end - return result end From 9c247bbf4a7fa251799f25ba11c926f3afcdb839 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Thu, 14 Jan 2021 18:00:09 +0300 Subject: [PATCH 076/168] improve copy-paste detection script --- xcode/build_phases/copy_paste_detection.sh | 110 +++++++++++++++++++-- xcode/build_phases/unused.sh | 4 +- 2 files changed, 102 insertions(+), 12 deletions(-) diff --git a/xcode/build_phases/copy_paste_detection.sh b/xcode/build_phases/copy_paste_detection.sh index 79a8806..2483291 100644 --- a/xcode/build_phases/copy_paste_detection.sh +++ b/xcode/build_phases/copy_paste_detection.sh @@ -1,20 +1,110 @@ +# Description: +# Validates code for copy-paste, prints results to standard output and report file. +# +# Parameters: +# $1 $2 $3 $n - folders to exclude from code checking. +# +# Required environment variables: +# PROJECT_DIR - project directory. +# +# Optional environment variables: +# SCRIPT_INPUT_FILE_COUNT - number of files listed in "Input files" of build phase. +# SCRIPT_INPUT_FILE_{N} - file path to directory that should be checked. +# +# Modified files: +# ${PROJECT_DIR}/code-quality-reports/CPDLog.txt - check report. +# ${PROJECT_DIR}/code-quality-reports/CPDCommit.txt - last checked commit. +# +# Example of usage: +# copy_paste_detection.sh Generated Localization Pods +# + +readonly EXIT_SUCCESS=0 +readonly EXIT_FAILURE=1 + +read_input_file_names() +{ + local -r DEFAULT_VALUE=${1} + + local INPUT_FILE_NAMES="" + + if [ "${SCRIPT_INPUT_FILE_COUNT}" -gt 0 ] ; then + for i in `seq 0 $((${SCRIPT_INPUT_FILE_COUNT}-1))` + do + SCRIPT_INPUT_FILE_VARIABLE_NAME="SCRIPT_INPUT_FILE_${i}" + COMMAND="echo \${${SCRIPT_INPUT_FILE_VARIABLE_NAME}}" + INPUT_FILE_NAME=`eval ${COMMAND}` + INPUT_FILE_NAMES=${INPUT_FILE_NAMES}${INPUT_FILE_NAME}" " + done + + echo ${INPUT_FILE_NAMES} + else + echo ${DEFAULT_VALUE} + fi +} + +is_nothing_changed_since_last_check() +{ + local -r COMMIT_FILE_PATH=${1} + local -r LAST_LINTED_COMMIT=`cat ${COMMIT_FILE_PATH}` || "" + + local -r CURRENT_COMMIT=${2} + + if [[ "${CURRENT_GIT_COMMIT}" = "${LAST_LINTED_COMMIT}" ]]; then + if git diff --quiet --exit-code; then + echo "Commit your changes and build again." + else + echo "Nothing was changed since ${LAST_LINTED_COMMIT}. Skipping code checking." + fi + + return ${EXIT_SUCCESS} + else + return ${EXIT_FAILURE} + fi +} + if which pmd >/dev/null; then - readonly CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - readonly SOURCES_DIR=${1:-${PROJECT_DIR}} # first argument or PROJECT_DIR - readonly REPORTS_DIR=${PROJECT_DIR}/code-quality-reports - readonly FILES_TO_EXCLUDE=`find ${SOURCES_DIR} -type d -name Localization -or -name Generated -or -name Carthage -or -name Pods | paste -sd " " -` + readonly REPORTS_DIR="${PROJECT_DIR}/code-quality-reports" - mkdir ${REPORTS_DIR} + readonly CPD_COMMIT_FILE_PATH="${REPORTS_DIR}/CPDCommit.txt" - pmd cpd --files ${SOURCES_DIR} --exclude ${FILES_TO_EXCLUDE} --minimum-tokens 50 --language swift --encoding UTF-8 --format net.sourceforge.pmd.cpd.XMLRenderer > ${REPORTS_DIR}/cpd-output.xml --failOnViolation true + readonly CURRENT_GIT_COMMIT=`git rev-parse --verify HEAD` - php ${CURRENT_DIR}/../aux_scripts/cpd_script.php ${REPORTS_DIR}/cpd-output.xml | tee ${REPORTS_DIR}/CPDLog.txt + if is_nothing_changed_since_last_check ${CPD_COMMIT_FILE_PATH} ${CURRENT_GIT_COMMIT}; then + exit ${EXIT_SUCCESS} + fi - # Make paths relative to SOURCES_DIR, so different developers won't rewrite entire file - readonly SED_REPLACEMENT_STRING=$(echo ${SOURCES_DIR} | sed "s/\//\\\\\//g") + readonly SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + + readonly SOURCES_DIRS=`read_input_file_names ${PROJECT_DIR}` + + readonly COMMAND_LINE_ARGUMENTS=$@ + + FOLDERS_TO_EXLUDE="" + + for argument in ${COMMAND_LINE_ARGUMENTS} + do + FOLDERS_TO_EXLUDE=${FOLDERS_TO_EXLUDE}"-or -name ${argument} " + done + + FOLDERS_TO_EXLUDE=`echo ${FOLDERS_TO_EXLUDE} | cut -c5-` # remove first "-or" + + readonly FILES_TO_EXCLUDE=`find ${PROJECT_DIR} -type d ${FOLDERS_TO_EXLUDE} | paste -sd " " -` + + mkdir -p ${REPORTS_DIR} + + pmd cpd --files ${SOURCES_DIRS} --exclude ${FILES_TO_EXCLUDE} --minimum-tokens 50 --language swift --encoding UTF-8 --format net.sourceforge.pmd.cpd.XMLRenderer --failOnViolation true > ${REPORTS_DIR}/cpd-output.xml + + php ${SCRIPT_DIR}/../aux_scripts/cpd_script.php ${REPORTS_DIR}/cpd-output.xml | tee ${REPORTS_DIR}/CPDLog.txt + + # Make paths relative to PROJECT_DIR, so different developers won't rewrite entire file + readonly SED_REPLACEMENT_STRING=$(echo ${PROJECT_DIR} | sed "s/\//\\\\\//g") sed -i '' "s/${SED_REPLACEMENT_STRING}//g" "${REPORTS_DIR}/CPDLog.txt" + + echo ${CURRENT_GIT_COMMIT} > ${CPD_COMMIT_FILE_PATH} else echo "warning: pmd not installed, install using 'brew install pmd'" - exit 1 + + exit ${EXIT_FAILURE} fi diff --git a/xcode/build_phases/unused.sh b/xcode/build_phases/unused.sh index 169967d..f137d8c 100644 --- a/xcode/build_phases/unused.sh +++ b/xcode/build_phases/unused.sh @@ -1,5 +1,5 @@ readonly ARGUMENTS=("$@") readonly IGNORED_FILES=$(IFS=, ; echo "${ARGUMENTS[*]}") -readonly CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +readonly SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -ruby ${CURRENT_DIR}/Unused.rb --config ${CURRENT_DIR}/../UnusedConfig.yml --exclude ${IGNORED_FILES} +ruby ${SCRIPT_DIR}/Unused.rb --config ${SCRIPT_DIR}/../UnusedConfig.yml --exclude ${IGNORED_FILES} From 2c5f978eebca28e6046da2a3be4c80d4544029ca Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Thu, 14 Jan 2021 18:16:50 +0300 Subject: [PATCH 077/168] final changes --- xcode/build_phases/copy_paste_detection.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/xcode/build_phases/copy_paste_detection.sh b/xcode/build_phases/copy_paste_detection.sh index 2483291..42cb778 100644 --- a/xcode/build_phases/copy_paste_detection.sh +++ b/xcode/build_phases/copy_paste_detection.sh @@ -13,7 +13,7 @@ # # Modified files: # ${PROJECT_DIR}/code-quality-reports/CPDLog.txt - check report. -# ${PROJECT_DIR}/code-quality-reports/CPDCommit.txt - last checked commit. +# ${PROJECT_DIR}/code-quality-reports/CPDCommit - last checked commit. # # Example of usage: # copy_paste_detection.sh Generated Localization Pods @@ -31,9 +31,9 @@ read_input_file_names() if [ "${SCRIPT_INPUT_FILE_COUNT}" -gt 0 ] ; then for i in `seq 0 $((${SCRIPT_INPUT_FILE_COUNT}-1))` do - SCRIPT_INPUT_FILE_VARIABLE_NAME="SCRIPT_INPUT_FILE_${i}" - COMMAND="echo \${${SCRIPT_INPUT_FILE_VARIABLE_NAME}}" - INPUT_FILE_NAME=`eval ${COMMAND}` + local SCRIPT_INPUT_FILE_VARIABLE_NAME="SCRIPT_INPUT_FILE_${i}" + local COMMAND="echo \${${SCRIPT_INPUT_FILE_VARIABLE_NAME}}" + local INPUT_FILE_NAME=`eval ${COMMAND}` INPUT_FILE_NAMES=${INPUT_FILE_NAMES}${INPUT_FILE_NAME}" " done @@ -66,7 +66,7 @@ is_nothing_changed_since_last_check() if which pmd >/dev/null; then readonly REPORTS_DIR="${PROJECT_DIR}/code-quality-reports" - readonly CPD_COMMIT_FILE_PATH="${REPORTS_DIR}/CPDCommit.txt" + readonly CPD_COMMIT_FILE_PATH="${REPORTS_DIR}/CPDCommit" readonly CURRENT_GIT_COMMIT=`git rev-parse --verify HEAD` From 093f16a578356cdc1c0ddc5a92d67a4ec6855455 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Fri, 15 Jan 2021 11:35:26 +0300 Subject: [PATCH 078/168] remove yarn install, use new firebase plugin API --- xcode/commonFastfile | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 4feb6df..5bf6e4f 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -57,8 +57,6 @@ private_lane :uploadToFirebase do |options| releaseNotesFile = "release-notes.txt" sh("touch ../#{releaseNotesFile}") - sh("yarn install") - app_target_folder_name = options[:appName] || $appName configuration_type = Touchlane::ConfigurationType.from_type(options[:type]) @@ -70,8 +68,7 @@ private_lane :uploadToFirebase do |options| app: google_app_id, ipa_path: options[:ipa_path], groups: "touch-instinct", - release_notes_file: releaseNotesFile, - firebase_cli_path: File.expand_path("../node_modules/firebase-tools/lib/bin/firebase.js") + release_notes_file: releaseNotesFile ) upload_symbols_to_crashlytics( @@ -411,16 +408,16 @@ def generate_enabled_features_extension_if_needed(options) end if options[:features].nil? - builder_features_list = [] # If Enabled.swift exists and features option is nil we need to create empty extension to avoid unexpected features + builder_features_list = [] # If Enabled.swift exists and features option is nil we need to create empty extension to avoid unexpected features else builder_features_list = options[:features] .split(",").map { |feature_name| feature_name.strip } # [ "Feature1", "Feature2", "Feature3" ] - end + end build_settings_features_list = Managers::FileManager.load_from_file_YAML(build_settings_file_path)["features"] enabled_features_extension = Touchlane::Features.generate_enabled_features_extension(builder_features_list, build_settings_features_list) - + Managers::FileManager.save_data_to_file(project_enabled_features_file_path, enabled_features_extension) end From e0300fcd076eca13d7f679845945fd8403c5bd59 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Fri, 15 Jan 2021 18:51:15 +0300 Subject: [PATCH 079/168] remove carthage & rome --- xcode/commonFastfile | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 5bf6e4f..ec647c4 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -23,34 +23,6 @@ private_lane :installDependencies do |options| cocoapods( repo_update: true ) - - if File.exists? "../Cartfile" - use_rome = File.exists? "../Romefile" - - swift_version = sh("xcrun swift --version | head -1 | sed 's/.*\\(\(.*\)\\).*/\\1/' | tr -d \"()\" | tr \" \" \"-\"").chop - rome_path = "Pods/Rome/rome" - rome_options = "--platform iOS --cache-prefix #{swift_version} --romefile Romefile" - - carthage_install = lambda do - if use_rome - sh("cd .. && #{rome_path} download #{rome_options}") - end - - carthage(command: "bootstrap", platform: "iOS", cache_builds: true) - - if use_rome - sh("cd .. && #{rome_path} list --missing #{rome_options} | awk '{print $1}' | xargs -I framework_name #{rome_path} upload framework_name #{rome_options}") - end - end - - begin - carthage_install.call - rescue - # workaround for https://github.com/Carthage/Carthage/issues/2298 - sh("rm -rf ~/Library/Caches/org.carthage.CarthageKit") - carthage_install.call - end - end end private_lane :uploadToFirebase do |options| From be7e522f38843a3c74fb7fa749838cfb8c3d93ee Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Fri, 15 Jan 2021 18:51:53 +0300 Subject: [PATCH 080/168] copy_paste_detection refactoring --- scripts/runner.sh | 16 +++ .../common/read_input_file_names.sh | 49 ++++++++ xcode/build_phases/copy_paste_detection.sh | 118 ++++++++++++------ 3 files changed, 143 insertions(+), 40 deletions(-) create mode 100644 scripts/runner.sh create mode 100644 xcode/build_phases/common/read_input_file_names.sh diff --git a/scripts/runner.sh b/scripts/runner.sh new file mode 100644 index 0000000..2903ce2 --- /dev/null +++ b/scripts/runner.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +# Description: +# This is a wrapper that defines common variables and passes all parameters to sh. +# +# Example of usage: +# runner.sh copy_paste_detection.sh Generated Localization Pods +# + +readonly EXIT_SUCCESS=0 +readonly EXIT_FAILURE=1 + +readonly TRUE=0 +readonly FALSE=1 + +. $@ \ No newline at end of file diff --git a/xcode/build_phases/common/read_input_file_names.sh b/xcode/build_phases/common/read_input_file_names.sh new file mode 100644 index 0000000..0fdbf2b --- /dev/null +++ b/xcode/build_phases/common/read_input_file_names.sh @@ -0,0 +1,49 @@ +#!/bin/sh + +# Description: +# Converts SCRIPT_INPUT_FILE_{N} variables to single string using passed separator. +# +# Parameters: +# $1 - separator to use. +# $2 - default value to return if SCRIPT_INPUT_FILE_COUNT is zero. +# +# Optional environment variables: +# FILE_NAMES_SEPARATOR - number of files listed in "Input files" of build phase. +# DEFAULT_FILE_NAMES - file path to directory that should be checked. +# +# Examples of usage: +# read_input_file_names +# read_input_file_names.sh " " path/to/project +# + +if [ -z "${FILE_NAMES_SEPARATOR}" ]; then + if [ ! -z "${1}" ]; then + FILE_NAMES_SEPARATOR=${1} + else + FILE_NAMES_SEPARATOR="" + fi +fi + +if [ -z "${DEFAULT_FILE_NAMES}" ]; then + if [ ! -z "${2}" ]; then + DEFAULT_FILE_NAMES=${2} + else + DEFAULT_FILE_NAMES="" + fi +fi + +if [ "${SCRIPT_INPUT_FILE_COUNT}" -gt 0 ] ; then + INPUT_FILE_NAMES="" + + for i in `seq 0 $((${SCRIPT_INPUT_FILE_COUNT}-1))` + do + SCRIPT_INPUT_FILE_VARIABLE_NAME="SCRIPT_INPUT_FILE_${i}" + COMMAND="echo \${${SCRIPT_INPUT_FILE_VARIABLE_NAME}}" + INPUT_FILE_NAME=`eval ${COMMAND}` + INPUT_FILE_NAMES=${INPUT_FILE_NAMES}${INPUT_FILE_NAME}" " + done + + echo ${INPUT_FILE_NAMES} +else + echo ${DEFAULT_VALUE} +fi \ No newline at end of file diff --git a/xcode/build_phases/copy_paste_detection.sh b/xcode/build_phases/copy_paste_detection.sh index 42cb778..1bd10a6 100644 --- a/xcode/build_phases/copy_paste_detection.sh +++ b/xcode/build_phases/copy_paste_detection.sh @@ -1,3 +1,5 @@ +#!/bin/sh + # Description: # Validates code for copy-paste, prints results to standard output and report file. # @@ -10,51 +12,62 @@ # Optional environment variables: # SCRIPT_INPUT_FILE_COUNT - number of files listed in "Input files" of build phase. # SCRIPT_INPUT_FILE_{N} - file path to directory that should be checked. +# REFACTORING_MODE - special bool flag for unconditional code checking. # # Modified files: # ${PROJECT_DIR}/code-quality-reports/CPDLog.txt - check report. # ${PROJECT_DIR}/code-quality-reports/CPDCommit - last checked commit. # # Example of usage: -# copy_paste_detection.sh Generated Localization Pods +# runner.sh copy_paste_detection.sh Generated Localization Pods # -readonly EXIT_SUCCESS=0 -readonly EXIT_FAILURE=1 - -read_input_file_names() +is_refactoring_mode() { - local -r DEFAULT_VALUE=${1} - - local INPUT_FILE_NAMES="" - - if [ "${SCRIPT_INPUT_FILE_COUNT}" -gt 0 ] ; then - for i in `seq 0 $((${SCRIPT_INPUT_FILE_COUNT}-1))` - do - local SCRIPT_INPUT_FILE_VARIABLE_NAME="SCRIPT_INPUT_FILE_${i}" - local COMMAND="echo \${${SCRIPT_INPUT_FILE_VARIABLE_NAME}}" - local INPUT_FILE_NAME=`eval ${COMMAND}` - INPUT_FILE_NAMES=${INPUT_FILE_NAMES}${INPUT_FILE_NAME}" " - done - - echo ${INPUT_FILE_NAMES} - else - echo ${DEFAULT_VALUE} + if [ -z "${REFACTORING_MODE}" ]; then + return ${FALSE} fi + + local -r STR_MODE=`tr "[:upper:]" "[:lower:]" <<< ${REFACTORING_MODE}` + + if [ ${STR_MODE} == "yes" ] || [ ${STR_MODE} == "true" ] || [ ${STR_MODE} == "1" ]; then + return ${TRUE} + fi + + return ${FALSE} } is_nothing_changed_since_last_check() { - local -r COMMIT_FILE_PATH=${1} - local -r LAST_LINTED_COMMIT=`cat ${COMMIT_FILE_PATH}` || "" + if is_refactoring_mode; then + echo "Refactoring mode detected. Skipping commits comparison." + return ${EXIT_FAILURE} + fi - local -r CURRENT_COMMIT=${2} - - if [[ "${CURRENT_GIT_COMMIT}" = "${LAST_LINTED_COMMIT}" ]]; then - if git diff --quiet --exit-code; then - echo "Commit your changes and build again." + if [ -z "${COMMIT_FILE_PATH}" ]; then + if [ ! -z "${1}" ]; then + local -r COMMIT_FILE_PATH=${1} else - echo "Nothing was changed since ${LAST_LINTED_COMMIT}. Skipping code checking." + echo "COMMIT_FILE_PATH should be defined or passed as first argument!" + return ${EXIT_FAILURE} + fi + fi + + if [ -z "${CURRENT_COMMIT}" ]; then + if [ ! -z "${2}" ]; then + local -r CURRENT_COMMIT=${2} + else + local -r CURRENT_COMMIT=`git rev-parse --verify HEAD` + fi + fi + + local -r LAST_CHECKED_COMMIT=`cat ${COMMIT_FILE_PATH}` || "" + + if [ ${CURRENT_COMMIT} = ${LAST_CHECKED_COMMIT} ]; then + if git diff --quiet --exit-code; then + echo "Commit your changes and run script again." + else + echo "Nothing was changed since ${LAST_CHECKED_COMMIT}. Skipping." fi return ${EXIT_SUCCESS} @@ -63,20 +76,45 @@ is_nothing_changed_since_last_check() fi } -if which pmd >/dev/null; then - readonly REPORTS_DIR="${PROJECT_DIR}/code-quality-reports" - - readonly CPD_COMMIT_FILE_PATH="${REPORTS_DIR}/CPDCommit" - - readonly CURRENT_GIT_COMMIT=`git rev-parse --verify HEAD` - - if is_nothing_changed_since_last_check ${CPD_COMMIT_FILE_PATH} ${CURRENT_GIT_COMMIT}; then +record_current_commit() +{ + if is_refactoring_mode; then + echo "Refactoring mode detected. Commit won't be recorder." exit ${EXIT_SUCCESS} fi - readonly SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" + if [ -v "${CURRENT_COMMIT}" ]; then + if [ ! -v "${1}" ]; then + local -r CURRENT_COMMIT=${1} + else + local -r CURRENT_COMMIT=`git rev-parse --verify HEAD` + fi + fi - readonly SOURCES_DIRS=`read_input_file_names ${PROJECT_DIR}` + if [ -v "${COMMIT_FILE_PATH}" ]; then + if [ ! -v "${2}" ]; then + local -r COMMIT_FILE_PATH=${2} + else + echo "COMMIT_FILE_PATH should be defined or passed as second argument!" + return ${EXIT_FAILURE} + fi + fi + + echo ${CURRENT_COMMIT} > ${COMMIT_FILE_PATH} +} + +if which pmd >/dev/null; then + readonly REPORTS_DIR="${PROJECT_DIR}/code-quality-reports" + + readonly COMMIT_FILE_PATH="${REPORTS_DIR}/CPDCommit" + + readonly CURRENT_COMMIT=`git rev-parse --verify HEAD` + + if is_nothing_changed_since_last_check; then + exit ${EXIT_SUCCESS} + fi + + readonly SOURCES_DIRS=`. ${SCRIPT_DIR}/common/read_input_file_names.sh " " ${PROJECT_DIR}` readonly COMMAND_LINE_ARGUMENTS=$@ @@ -102,7 +140,7 @@ if which pmd >/dev/null; then sed -i '' "s/${SED_REPLACEMENT_STRING}//g" "${REPORTS_DIR}/CPDLog.txt" - echo ${CURRENT_GIT_COMMIT} > ${CPD_COMMIT_FILE_PATH} + record_current_commit else echo "warning: pmd not installed, install using 'brew install pmd'" From bb432d422018b5282cce28773030c4f3007468be Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Fri, 15 Jan 2021 18:58:45 +0300 Subject: [PATCH 081/168] add doc about SCRIPT_DIR variable --- xcode/build_phases/copy_paste_detection.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/xcode/build_phases/copy_paste_detection.sh b/xcode/build_phases/copy_paste_detection.sh index 1bd10a6..0ab2b1a 100644 --- a/xcode/build_phases/copy_paste_detection.sh +++ b/xcode/build_phases/copy_paste_detection.sh @@ -8,6 +8,7 @@ # # Required environment variables: # PROJECT_DIR - project directory. +# SCRIPT_DIR - directory of current script. # # Optional environment variables: # SCRIPT_INPUT_FILE_COUNT - number of files listed in "Input files" of build phase. From e2f85337c0a0bf1dbc93fd5e48637a4bc7cb12db Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Mon, 18 Jan 2021 15:54:54 +0300 Subject: [PATCH 082/168] remove REFACTORING_MODE --- xcode/build_phases/copy_paste_detection.sh | 95 +--------------------- 1 file changed, 4 insertions(+), 91 deletions(-) diff --git a/xcode/build_phases/copy_paste_detection.sh b/xcode/build_phases/copy_paste_detection.sh index 0ab2b1a..132a7d5 100644 --- a/xcode/build_phases/copy_paste_detection.sh +++ b/xcode/build_phases/copy_paste_detection.sh @@ -13,108 +13,23 @@ # Optional environment variables: # SCRIPT_INPUT_FILE_COUNT - number of files listed in "Input files" of build phase. # SCRIPT_INPUT_FILE_{N} - file path to directory that should be checked. -# REFACTORING_MODE - special bool flag for unconditional code checking. # # Modified files: # ${PROJECT_DIR}/code-quality-reports/CPDLog.txt - check report. -# ${PROJECT_DIR}/code-quality-reports/CPDCommit - last checked commit. # # Example of usage: # runner.sh copy_paste_detection.sh Generated Localization Pods # -is_refactoring_mode() -{ - if [ -z "${REFACTORING_MODE}" ]; then - return ${FALSE} - fi +readonly EXIT_SUCCESS=0 +readonly EXIT_FAILURE=1 - local -r STR_MODE=`tr "[:upper:]" "[:lower:]" <<< ${REFACTORING_MODE}` - - if [ ${STR_MODE} == "yes" ] || [ ${STR_MODE} == "true" ] || [ ${STR_MODE} == "1" ]; then - return ${TRUE} - fi - - return ${FALSE} -} - -is_nothing_changed_since_last_check() -{ - if is_refactoring_mode; then - echo "Refactoring mode detected. Skipping commits comparison." - return ${EXIT_FAILURE} - fi - - if [ -z "${COMMIT_FILE_PATH}" ]; then - if [ ! -z "${1}" ]; then - local -r COMMIT_FILE_PATH=${1} - else - echo "COMMIT_FILE_PATH should be defined or passed as first argument!" - return ${EXIT_FAILURE} - fi - fi - - if [ -z "${CURRENT_COMMIT}" ]; then - if [ ! -z "${2}" ]; then - local -r CURRENT_COMMIT=${2} - else - local -r CURRENT_COMMIT=`git rev-parse --verify HEAD` - fi - fi - - local -r LAST_CHECKED_COMMIT=`cat ${COMMIT_FILE_PATH}` || "" - - if [ ${CURRENT_COMMIT} = ${LAST_CHECKED_COMMIT} ]; then - if git diff --quiet --exit-code; then - echo "Commit your changes and run script again." - else - echo "Nothing was changed since ${LAST_CHECKED_COMMIT}. Skipping." - fi - - return ${EXIT_SUCCESS} - else - return ${EXIT_FAILURE} - fi -} - -record_current_commit() -{ - if is_refactoring_mode; then - echo "Refactoring mode detected. Commit won't be recorder." - exit ${EXIT_SUCCESS} - fi - - if [ -v "${CURRENT_COMMIT}" ]; then - if [ ! -v "${1}" ]; then - local -r CURRENT_COMMIT=${1} - else - local -r CURRENT_COMMIT=`git rev-parse --verify HEAD` - fi - fi - - if [ -v "${COMMIT_FILE_PATH}" ]; then - if [ ! -v "${2}" ]; then - local -r COMMIT_FILE_PATH=${2} - else - echo "COMMIT_FILE_PATH should be defined or passed as second argument!" - return ${EXIT_FAILURE} - fi - fi - - echo ${CURRENT_COMMIT} > ${COMMIT_FILE_PATH} -} +readonly TRUE=0 +readonly FALSE=1 if which pmd >/dev/null; then readonly REPORTS_DIR="${PROJECT_DIR}/code-quality-reports" - readonly COMMIT_FILE_PATH="${REPORTS_DIR}/CPDCommit" - - readonly CURRENT_COMMIT=`git rev-parse --verify HEAD` - - if is_nothing_changed_since_last_check; then - exit ${EXIT_SUCCESS} - fi - readonly SOURCES_DIRS=`. ${SCRIPT_DIR}/common/read_input_file_names.sh " " ${PROJECT_DIR}` readonly COMMAND_LINE_ARGUMENTS=$@ @@ -140,8 +55,6 @@ if which pmd >/dev/null; then readonly SED_REPLACEMENT_STRING=$(echo ${PROJECT_DIR} | sed "s/\//\\\\\//g") sed -i '' "s/${SED_REPLACEMENT_STRING}//g" "${REPORTS_DIR}/CPDLog.txt" - - record_current_commit else echo "warning: pmd not installed, install using 'brew install pmd'" From bd2138f58d688bf3a68f07907ac6bee817b38006 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Mon, 18 Jan 2021 15:55:07 +0300 Subject: [PATCH 083/168] update swiftlint config --- xcode/.swiftlint.yml | 53 +++++++++++--------------------------------- 1 file changed, 13 insertions(+), 40 deletions(-) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index 35c417c..337f194 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -65,6 +65,7 @@ opt_in_rules: - identical_operands - overridden_super_call - unowned_variable_capture + - comment_spacing # metrics @@ -187,26 +188,12 @@ custom_rules: regex: '(?!\n)[^ \n]+ {2,}.+' message: "Remove excess empty spaces" severity: warning - match_kinds: - - argument - - attribute.builtin - - attribute.id - - buildconfig.id - - buildconfig.keyword - - identifier - - keyword - - number - - objectliteral - - parameter - - placeholder - # - string # all except string literals - # - comment # and comments - # - comment.mark - # - comment.url - # - doccomment - # - doccomment.field - - string_interpolation_anchor - - typeidentifier + excluded_match_kinds: + - comment + - comment.mark + - comment.url + - doccomment + - doccomment.field getter_setter_style: name: "Wrong getter/setter code style" @@ -221,26 +208,12 @@ custom_rules: regex: "(== true)|(== false)|(!= true)|(!= false)" message: "Comparing a boolean to true is redundant (use `?? false` for optionals), and `!`-syntax is preferred over comparing to false." severity: error - match_kinds: - - argument - - attribute.builtin - - attribute.id - - buildconfig.id - - buildconfig.keyword - - identifier - - keyword - - number - - objectliteral - - parameter - - placeholder - # - string # all except string literals - # - comment # and comments - # - comment.mark - # - comment.url - # - doccomment - # - doccomment.field - - string_interpolation_anchor - - typeidentifier + excluded_match_kinds: + - comment + - comment.mark + - comment.url + - doccomment + - doccomment.field redundant_ternary_operator: name: "Redundant Ternary Operator" From b27fa554fb4dab242ccf7a520e38ec918416dad3 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Mon, 18 Jan 2021 15:55:40 +0300 Subject: [PATCH 084/168] delete runner.sh, update swiftlint script --- .../common/read_input_file_names.sh | 9 +++- xcode/build_phases/swiftlint.sh | 46 ++++++++++++++++++- 2 files changed, 51 insertions(+), 4 deletions(-) mode change 100644 => 100755 xcode/build_phases/swiftlint.sh diff --git a/xcode/build_phases/common/read_input_file_names.sh b/xcode/build_phases/common/read_input_file_names.sh index 0fdbf2b..8717544 100644 --- a/xcode/build_phases/common/read_input_file_names.sh +++ b/xcode/build_phases/common/read_input_file_names.sh @@ -40,10 +40,15 @@ if [ "${SCRIPT_INPUT_FILE_COUNT}" -gt 0 ] ; then SCRIPT_INPUT_FILE_VARIABLE_NAME="SCRIPT_INPUT_FILE_${i}" COMMAND="echo \${${SCRIPT_INPUT_FILE_VARIABLE_NAME}}" INPUT_FILE_NAME=`eval ${COMMAND}` - INPUT_FILE_NAMES=${INPUT_FILE_NAMES}${INPUT_FILE_NAME}" " + INPUT_FILE_NAMES=${INPUT_FILE_NAMES}${INPUT_FILE_NAME}${FILE_NAMES_SEPARATOR} done - echo ${INPUT_FILE_NAMES} + FILE_NAMES_SEPARATOR_LENGTH=`awk '{ print length; }' <<< ${FILE_NAMES_SEPARATOR}` + INPUT_FILE_NAMES_LENGTH=`awk '{ print length; }' <<< ${INPUT_FILE_NAMES}` + INPUT_FILE_NAMES_TRIMMED_LENGTH=$((INPUT_FILE_NAMES_LENGTH - FILE_NAMES_SEPARATOR_LENGTH)) + + # remove separator suffix + echo ${INPUT_FILE_NAMES} | cut -c1-${INPUT_FILE_NAMES_TRIMMED_LENGTH} else echo ${DEFAULT_VALUE} fi \ No newline at end of file diff --git a/xcode/build_phases/swiftlint.sh b/xcode/build_phases/swiftlint.sh old mode 100644 new mode 100755 index f1f8fb8..38f8b82 --- a/xcode/build_phases/swiftlint.sh +++ b/xcode/build_phases/swiftlint.sh @@ -1,2 +1,44 @@ -SOURCES_DIR=${1:-${TARGET_NAME}} # first argument or TARGET_NAME -${PODS_ROOT}/SwiftLint/swiftlint autocorrect --path ${SOURCES_DIR} --config ${PROJECT_DIR}/build-scripts/xcode/.swiftlint.yml && ${PODS_ROOT}/SwiftLint/swiftlint --path ${SOURCES_DIR} --config ${PROJECT_DIR}/build-scripts/xcode/.swiftlint.yml +#!/bin/sh + +# Description: +# Runs swiftlint with selected or default config file. +# +# Parameters: +# $1 - path to swiftlint executable. +# $2 - path to swiftlint config. +# +# Required environment variables: +# SCRIPT_DIR - directory of current script. +# PODS_ROOT - cocoapods installation directory (eg. ${SRCROOT}/Pods). +# +# Optional environment variables: +# SWIFTLINT_EXECUTABLE - path to swiftlint executable. +# SWIFTLINT_CONFIG_PATH - path to swiftlint config. +# +# Example of usage: +# swiftlint.sh +# swiftlint.sh Pods/Swiftlint/swiftlint build-scripts/xcode/.swiftlint.yml +# + +readonly SOURCES_DIRS=`. ${SCRIPT_DIR}/common/read_input_file_names.sh "\n" ${PROJECT_DIR}` + +if [ -z "${SWIFTLINT_EXECUTABLE}" ]; then + if [ ! -z "${1}" ]; then + readonly SWIFTLINT_EXECUTABLE=${1} + else + readonly SWIFTLINT_EXECUTABLE=${PODS_ROOT}/SwiftLint/swiftlint + fi +fi + +if [ -z "${SWIFTLINT_CONFIG_PATH}" ]; then + if [ ! -z "${2}" ]; then + readonly SWIFTLINT_CONFIG_PATH=${2} + else + readonly SWIFTLINT_CONFIG_PATH=${SCRIPT_DIR}/../.swiftlint.yml + fi +fi + +for SOURCE_DIR in ${SOURCES_DIRS}; do + ${SWIFTLINT_EXECUTABLE} autocorrect --path ${SOURCE_DIR} --config ${SWIFTLINT_CONFIG_PATH} + ${SWIFTLINT_EXECUTABLE} --path ${SOURCE_DIR} --config ${SWIFTLINT_CONFIG_PATH} +done From a682c25dd544ce096857a8821bdadd8bac0e4dda Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Mon, 18 Jan 2021 15:57:16 +0300 Subject: [PATCH 085/168] misunstaged runner.sh --- scripts/runner.sh | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 scripts/runner.sh diff --git a/scripts/runner.sh b/scripts/runner.sh deleted file mode 100644 index 2903ce2..0000000 --- a/scripts/runner.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh - -# Description: -# This is a wrapper that defines common variables and passes all parameters to sh. -# -# Example of usage: -# runner.sh copy_paste_detection.sh Generated Localization Pods -# - -readonly EXIT_SUCCESS=0 -readonly EXIT_FAILURE=1 - -readonly TRUE=0 -readonly FALSE=1 - -. $@ \ No newline at end of file From 7819b0e4cdb6f251be5533b43c5ba55fc0b4296d Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Mon, 18 Jan 2021 16:18:00 +0300 Subject: [PATCH 086/168] add doc about SRCROOT --- xcode/build_phases/swiftlint.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xcode/build_phases/swiftlint.sh b/xcode/build_phases/swiftlint.sh index 38f8b82..d148924 100755 --- a/xcode/build_phases/swiftlint.sh +++ b/xcode/build_phases/swiftlint.sh @@ -9,6 +9,7 @@ # # Required environment variables: # SCRIPT_DIR - directory of current script. +# SRCROOT - project directory. # PODS_ROOT - cocoapods installation directory (eg. ${SRCROOT}/Pods). # # Optional environment variables: @@ -20,7 +21,7 @@ # swiftlint.sh Pods/Swiftlint/swiftlint build-scripts/xcode/.swiftlint.yml # -readonly SOURCES_DIRS=`. ${SCRIPT_DIR}/common/read_input_file_names.sh "\n" ${PROJECT_DIR}` +readonly SOURCES_DIRS=`. ${SCRIPT_DIR}/common/read_input_file_names.sh "\n" ${SRCROOT}` if [ -z "${SWIFTLINT_EXECUTABLE}" ]; then if [ ! -z "${1}" ]; then From ca37784c577145c16039a8b6f48b721ee94a0c54 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Mon, 18 Jan 2021 16:36:18 +0300 Subject: [PATCH 087/168] add doc to swiftlint about input files --- xcode/build_phases/swiftlint.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xcode/build_phases/swiftlint.sh b/xcode/build_phases/swiftlint.sh index d148924..5052f54 100755 --- a/xcode/build_phases/swiftlint.sh +++ b/xcode/build_phases/swiftlint.sh @@ -15,6 +15,8 @@ # Optional environment variables: # SWIFTLINT_EXECUTABLE - path to swiftlint executable. # SWIFTLINT_CONFIG_PATH - path to swiftlint config. +# SCRIPT_INPUT_FILE_COUNT - number of files listed in "Input files" of build phase. +# SCRIPT_INPUT_FILE_{N} - file path to directory that should be checked. # # Example of usage: # swiftlint.sh From 8794713900d9812f5c46863793a5fc6cfc208c7f Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Mon, 18 Jan 2021 18:19:41 +0300 Subject: [PATCH 088/168] add smart skipping for api_generator script --- xcode/build_phases/api_generator.sh | 141 ++++++++++++++++++++- xcode/build_phases/copy_paste_detection.sh | 3 - 2 files changed, 138 insertions(+), 6 deletions(-) mode change 100644 => 100755 xcode/build_phases/api_generator.sh mode change 100644 => 100755 xcode/build_phases/copy_paste_detection.sh diff --git a/xcode/build_phases/api_generator.sh b/xcode/build_phases/api_generator.sh old mode 100644 new mode 100755 index cb09e6b..2c99954 --- a/xcode/build_phases/api_generator.sh +++ b/xcode/build_phases/api_generator.sh @@ -1,9 +1,144 @@ +#!/bin/sh + +# Description: +# Generates API models & methods. +# +# Parameters: +# $1 - api generator version. +# +# Optional environment variables: +# OUTPUT_PATH - path to Generated folder. +# +# Examples of usage: +# . api_generator.sh 1.4.0-beta1 +# . api_generator.sh 1.4.0-beta1 ${TARGET_NAME}/Generated +# + +readonly EXIT_SUCCESS=0 +readonly EXIT_FAILURE=1 + +readonly TRUE=0 +readonly FALSE=1 + +is_force_run() +{ + if [ -z "${FORCE_RUN}" ]; then + return ${FALSE} + fi + + local -r STR_MODE=`tr "[:upper:]" "[:lower:]" <<< ${FORCE_RUN}` + + if [ ${STR_MODE} == "yes" ] || [ ${STR_MODE} == "true" ] || [ ${STR_MODE} == "1" ]; then + return ${TRUE} + fi + + return ${FALSE} +} + +get_current_commit() +{ + if [ -z "${CURRENT_COMMIT}" ]; then + if [ -z "${REPO_PATH}" ]; then + if [ ! -z "${1}" ]; then + echo `git -C ${1} rev-parse --verify HEAD` + else + echo `git rev-parse --verify HEAD` + fi + else + echo `git -C ${REPO_PATH} rev-parse --verify HEAD` + fi + else + echo ${CURRENT_COMMIT} + fi +} + +is_nothing_changed_since_last_check() +{ + if is_force_run; then + echo "Force run detected. Skipping commits comparison." + return ${EXIT_FAILURE} + fi + + if [ -z "${COMMIT_FILE_PATH}" ]; then + if [ ! -z "${1}" ]; then + local -r COMMIT_FILE_PATH=${1} + else + echo "COMMIT_FILE_PATH should be defined or passed as first argument!" + return ${EXIT_FAILURE} + fi + fi + + if [ -z "${2}" ]; then + local -r CURRENT_COMMIT=`get_current_commit` + else + local -r CURRENT_COMMIT=${2} + fi + + local -r LAST_CHECKED_COMMIT=`cat ${COMMIT_FILE_PATH}` || "" + + if [ ${CURRENT_COMMIT} = "${LAST_CHECKED_COMMIT}" ]; then + return ${EXIT_SUCCESS} + else + return ${EXIT_FAILURE} + fi +} + +record_current_commit() +{ + if is_force_run; then + echo "Force run detected. Commit won't be recorder." + exit ${EXIT_SUCCESS} + fi + + if [ -z "${1}" ]; then + local -r CURRENT_COMMIT=`get_current_commit` + else + local -r CURRENT_COMMIT=${1} + fi + + if [ -z "${COMMIT_FILE_PATH}" ]; then + if [ ! -v "${2}" ]; then + local -r COMMIT_FILE_PATH=${2} + else + echo "COMMIT_FILE_PATH should be defined or passed as second argument!" + return ${EXIT_FAILURE} + fi + fi + + echo ${CURRENT_COMMIT} > ${COMMIT_FILE_PATH} +} + +readonly BUILD_PHASES_DIR=${SRCROOT}/build_phases + +mkdir -p ${BUILD_PHASES_DIR} + +readonly COMMIT_FILE_PATH=${BUILD_PHASES_DIR}/api-generator-commit + +readonly REPO_PATH="common" + +if is_nothing_changed_since_last_check; then + echo "Nothing was changed models generation skipped." + exit ${EXIT_SUCCESS} +fi + VERSION=$1 FILE_NAME="api-generator-${VERSION}.jar" +if [ -z "${OUTPUT_PATH}" ]; then + if [ ! -z "${2}" ]; then + readonly OUTPUT_PATH=${2} + else + readonly OUTPUT_PATH="Generated" + fi +fi + +mkdir -p ${OUTPUT_PATH} + # download api generator -link="https://dl.bintray.com/touchin/touchin-tools/ru/touchin/api-generator/${VERSION}/${FILE_NAME}" -. build-scripts/xcode/aux_scripts/download_file.sh ${FILE_NAME} ${link} +readonly DOWNLOAD_URL="https://dl.bintray.com/touchin/touchin-tools/ru/touchin/api-generator/${VERSION}/${FILE_NAME}" +. build-scripts/xcode/aux_scripts/download_file.sh ${FILE_NAME} ${DOWNLOAD_URL} # execute api generator -java -Xmx6g -jar "Downloads/${FILE_NAME}" generate-client-code --output-language SWIFT --specification-path common/api --output-path ${PRODUCT_NAME}/Generated --single-file true +java -Xmx6g -jar "Downloads/${FILE_NAME}" generate-client-code --output-language SWIFT --specification-path common/api --output-path ${OUTPUT_PATH} --single-file true + +record_current_commit diff --git a/xcode/build_phases/copy_paste_detection.sh b/xcode/build_phases/copy_paste_detection.sh old mode 100644 new mode 100755 index 132a7d5..653b093 --- a/xcode/build_phases/copy_paste_detection.sh +++ b/xcode/build_phases/copy_paste_detection.sh @@ -24,9 +24,6 @@ readonly EXIT_SUCCESS=0 readonly EXIT_FAILURE=1 -readonly TRUE=0 -readonly FALSE=1 - if which pmd >/dev/null; then readonly REPORTS_DIR="${PROJECT_DIR}/code-quality-reports" From 039ddac90a8efae6cfaa4b3675d8c9244acef48e Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Tue, 19 Jan 2021 17:00:32 +0300 Subject: [PATCH 089/168] use App Store Connect API for match and upload_to_app_store --- xcode/commonFastfile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 4feb6df..ce77659 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -1,4 +1,5 @@ $appName = File.basename(Dir['../*.xcworkspace'].first, '.*') +$API_KEY_PATH="fastlane/api_key.json" require_relative 'fastlane/touchlane/lib/touchlane' require_relative 'managers/managers' @@ -82,6 +83,7 @@ end private_lane :uploadToAppStore do |options| upload_to_app_store( username: options[:username] || options[:apple_id], + api_key_path: $API_KEY_PATH, ipa: options[:ipa_path], force: true, # skip metainfo prompt skip_metadata: true, @@ -232,8 +234,8 @@ lane :SyncSymbols do |options| xcodeproj_path = File.expand_path "../#{appName}.xcodeproj" - version_number = options[:version] || get_version_number(xcodeproj: xcodeproj_path, target: appName) - build_number = options[:build_number] || get_build_number(xcodeproj: xcodeproj_path) + version_number = options[:version] || "latest" + build_number = options[:build_number] if configuration.type.is_app_store download_dsyms( @@ -344,6 +346,7 @@ def sync_code_signing_using_options(options) match( app_identifier: options[:app_identifier], username: options[:username] || options[:apple_id], + api_key_path: $API_KEY_PATH, team_id: options[:team_id], type: options[:type], readonly: options[:readonly].nil? ? true : options[:readonly], From 0546268696d3880c5527586d49da6a270a27d8ab Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Thu, 21 Jan 2021 12:03:34 +0300 Subject: [PATCH 090/168] add support for xcfilelist list in read_input_file_names --- .../common/read_input_file_names.sh | 55 ++++++++++++++----- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/xcode/build_phases/common/read_input_file_names.sh b/xcode/build_phases/common/read_input_file_names.sh index 8717544..2a37807 100644 --- a/xcode/build_phases/common/read_input_file_names.sh +++ b/xcode/build_phases/common/read_input_file_names.sh @@ -1,15 +1,20 @@ #!/bin/sh # Description: -# Converts SCRIPT_INPUT_FILE_{N} variables to single string using passed separator. +# Converts SCRIPT_INPUT_FILE_{N} or SCRIPT_INPUT_FILE_LIST_{N} variables to string that contains +# list of file names splitted by given separator. # # Parameters: # $1 - separator to use. -# $2 - default value to return if SCRIPT_INPUT_FILE_COUNT is zero. +# $2 - default value to return if SCRIPT_INPUT_FILE_COUNT or SCRIPT_INPUT_FILE_LIST_COUNT is zero. # # Optional environment variables: -# FILE_NAMES_SEPARATOR - number of files listed in "Input files" of build phase. -# DEFAULT_FILE_NAMES - file path to directory that should be checked. +# FILE_NAMES_SEPARATOR - separator to use. +# DEFAULT_FILE_NAMES - default value if was found in environment variables. +# SCRIPT_INPUT_FILE_COUNT - number of files listed in "Input files" section of build phase. +# SCRIPT_INPUT_FILE_{N} - file path of specific input file at index. +# SCRIPT_INPUT_FILE_LIST_COUNT - number of files listed in "Input File Lists" section of build phase. +# SCRIPT_INPUT_FILE_LIST_{N} - file path to specifis xcfilelist file at index. # # Examples of usage: # read_input_file_names @@ -32,23 +37,43 @@ if [ -z "${DEFAULT_FILE_NAMES}" ]; then fi fi -if [ "${SCRIPT_INPUT_FILE_COUNT}" -gt 0 ] ; then - INPUT_FILE_NAMES="" +INPUT_FILE_NAMES="" + +if [ ! -z "${SCRIPT_INPUT_FILE_COUNT}" ] && \ + [ ${SCRIPT_INPUT_FILE_COUNT} -gt 0 ]; then for i in `seq 0 $((${SCRIPT_INPUT_FILE_COUNT}-1))` do SCRIPT_INPUT_FILE_VARIABLE_NAME="SCRIPT_INPUT_FILE_${i}" - COMMAND="echo \${${SCRIPT_INPUT_FILE_VARIABLE_NAME}}" - INPUT_FILE_NAME=`eval ${COMMAND}` - INPUT_FILE_NAMES=${INPUT_FILE_NAMES}${INPUT_FILE_NAME}${FILE_NAMES_SEPARATOR} + SHELL_VARIABLE="\${${SCRIPT_INPUT_FILE_VARIABLE_NAME}}" + RESOLVED_FILE_NAME=`envsubst <<< ${SHELL_VARIABLE}` + INPUT_FILE_NAMES=${INPUT_FILE_NAMES}${FILE_NAMES_SEPARATOR}${RESOLVED_FILE_NAME} done - FILE_NAMES_SEPARATOR_LENGTH=`awk '{ print length; }' <<< ${FILE_NAMES_SEPARATOR}` - INPUT_FILE_NAMES_LENGTH=`awk '{ print length; }' <<< ${INPUT_FILE_NAMES}` - INPUT_FILE_NAMES_TRIMMED_LENGTH=$((INPUT_FILE_NAMES_LENGTH - FILE_NAMES_SEPARATOR_LENGTH)) + FILE_NAMES_SEPARATOR_LENGTH=`awk '{ print length; }' <<< "${FILE_NAMES_SEPARATOR}"` - # remove separator suffix - echo ${INPUT_FILE_NAMES} | cut -c1-${INPUT_FILE_NAMES_TRIMMED_LENGTH} + if [ ${FILE_NAMES_SEPARATOR_LENGTH} -gt 0 ] && \ + [ ! -z "${INPUT_FILE_NAMES}" ]; then + + # remove separator prefix + INPUT_FILE_NAMES=`cut -c${FILE_NAMES_SEPARATOR_LENGTH}- <<< ${INPUT_FILE_NAMES}` + fi +elif [ "${SCRIPT_INPUT_FILE_LIST_COUNT}" -gt 0 ]; then + for i in `seq 0 $((${SCRIPT_INPUT_FILE_LIST_COUNT}-1))` + do + SCRIPT_INPUT_FILE_LIST_VARIABLE_NAME="SCRIPT_INPUT_FILE_LIST_${i}" + SHELL_VARIABLE="\${${SCRIPT_INPUT_FILE_LIST_VARIABLE_NAME}}" + FILE_NAME=`envsubst <<< ${SHELL_VARIABLE}` + RESOLVED_FILE_NAMES=`envsubst < ${FILE_NAME}` + + for INPUT_FILE_NAME in ${RESOLVED_FILE_NAMES}; do + INPUT_FILE_NAMES=${INPUT_FILE_NAMES}${INPUT_FILE_NAME}${FILE_NAMES_SEPARATOR} + done + done +fi + +if [ -z "${INPUT_FILE_NAMES}" ]; then + echo ${DEFAULT_FILE_NAMES} else - echo ${DEFAULT_VALUE} + echo ${INPUT_FILE_NAMES} fi \ No newline at end of file From d0256372c1e352fb1e6d96981b9e58a0d0552783 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Thu, 21 Jan 2021 17:28:52 +0300 Subject: [PATCH 091/168] add check for simultaneous usage of Input Files and Input File Lists --- .../common/read_input_file_names.sh | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/xcode/build_phases/common/read_input_file_names.sh b/xcode/build_phases/common/read_input_file_names.sh index 2a37807..8d3f543 100644 --- a/xcode/build_phases/common/read_input_file_names.sh +++ b/xcode/build_phases/common/read_input_file_names.sh @@ -21,11 +21,21 @@ # read_input_file_names.sh " " path/to/project # +has_input_files() +{ + [ ! -z "${SCRIPT_INPUT_FILE_COUNT}" ] && [ ${SCRIPT_INPUT_FILE_COUNT} -gt 0 ] +} + +has_input_file_lists() +{ + [ ! -z "${SCRIPT_INPUT_FILE_LIST_COUNT}" ] && [ ${SCRIPT_INPUT_FILE_LIST_COUNT} -gt 0 ] +} + if [ -z "${FILE_NAMES_SEPARATOR}" ]; then if [ ! -z "${1}" ]; then FILE_NAMES_SEPARATOR=${1} else - FILE_NAMES_SEPARATOR="" + FILE_NAMES_SEPARATOR=" " fi fi @@ -39,7 +49,11 @@ fi INPUT_FILE_NAMES="" -if [ ! -z "${SCRIPT_INPUT_FILE_COUNT}" ] && \ +if has_input_files && has_input_file_lists; then + >&2 echo "Passing Input Files and Input Files Lists is not supported!\nOnly Input Files will be used." +fi + +if has_input_files && \ [ ${SCRIPT_INPUT_FILE_COUNT} -gt 0 ]; then for i in `seq 0 $((${SCRIPT_INPUT_FILE_COUNT}-1))` @@ -58,7 +72,7 @@ if [ ! -z "${SCRIPT_INPUT_FILE_COUNT}" ] && \ # remove separator prefix INPUT_FILE_NAMES=`cut -c${FILE_NAMES_SEPARATOR_LENGTH}- <<< ${INPUT_FILE_NAMES}` fi -elif [ "${SCRIPT_INPUT_FILE_LIST_COUNT}" -gt 0 ]; then +elif has_input_file_lists; then for i in `seq 0 $((${SCRIPT_INPUT_FILE_LIST_COUNT}-1))` do SCRIPT_INPUT_FILE_LIST_VARIABLE_NAME="SCRIPT_INPUT_FILE_LIST_${i}" From fec78fd0bc741efc2015dd6d4b8b19fc0d4dc096 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Thu, 4 Feb 2021 18:48:20 +0300 Subject: [PATCH 092/168] use two api keys: project and touchin --- xcode/commonFastfile | 29 ++++++++++++------- .../lib/touchlane/configuration_type.rb | 17 +++++++---- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index ce77659..a7b56f8 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -1,5 +1,4 @@ $appName = File.basename(Dir['../*.xcworkspace'].first, '.*') -$API_KEY_PATH="fastlane/api_key.json" require_relative 'fastlane/touchlane/lib/touchlane' require_relative 'managers/managers' @@ -80,15 +79,16 @@ private_lane :uploadToFirebase do |options| ) end -private_lane :uploadToAppStore do |options| +def upload_to_app_store_using_options(options) upload_to_app_store( username: options[:username] || options[:apple_id], - api_key_path: $API_KEY_PATH, + api_key_path: options[:api_key_path], ipa: options[:ipa_path], force: true, # skip metainfo prompt skip_metadata: true, team_id: options[:itc_team_id], - dev_portal_team_id: options[:team_id] + dev_portal_team_id: options[:team_id], + precheck_include_in_app_purchases: false ) end @@ -164,7 +164,7 @@ private_lane :buildConfiguration do |options| sync_code_signing_using_options(options) buildArchive(options) - uploadToAppStore(options) + upload_to_app_store_using_options(options) end end @@ -346,7 +346,7 @@ def sync_code_signing_using_options(options) match( app_identifier: options[:app_identifier], username: options[:username] || options[:apple_id], - api_key_path: $API_KEY_PATH, + api_key_path: options[:api_key_path], team_id: options[:team_id], type: options[:type], readonly: options[:readonly].nil? ? true : options[:readonly], @@ -371,7 +371,16 @@ end def fill_up_options_using_configuration_type(options, configuration_type) configuration = get_configuration_for_type(configuration_type.type) - configuration.to_options + if configuration_type.is_app_store || configuration_type.is_development + api_key_path = "fastlane/#{configuration_type.prefix}_api_key.json" + else + api_key_path = nil + end + + default_options = {:api_key_path => api_key_path} + + default_options + .merge(configuration.to_options) .merge(get_keychain_options(options)) .merge(options) end @@ -414,16 +423,16 @@ def generate_enabled_features_extension_if_needed(options) end if options[:features].nil? - builder_features_list = [] # If Enabled.swift exists and features option is nil we need to create empty extension to avoid unexpected features + builder_features_list = [] # If Enabled.swift exists and features option is nil we need to create empty extension to avoid unexpected features else builder_features_list = options[:features] .split(",").map { |feature_name| feature_name.strip } # [ "Feature1", "Feature2", "Feature3" ] - end + end build_settings_features_list = Managers::FileManager.load_from_file_YAML(build_settings_file_path)["features"] enabled_features_extension = Touchlane::Features.generate_enabled_features_extension(builder_features_list, build_settings_features_list) - + Managers::FileManager.save_data_to_file(project_enabled_features_file_path, enabled_features_extension) end diff --git a/xcode/fastlane/touchlane/lib/touchlane/configuration_type.rb b/xcode/fastlane/touchlane/lib/touchlane/configuration_type.rb index a47434e..96f5412 100644 --- a/xcode/fastlane/touchlane/lib/touchlane/configuration_type.rb +++ b/xcode/fastlane/touchlane/lib/touchlane/configuration_type.rb @@ -14,16 +14,21 @@ module Touchlane def initialize(type) @type = type + @is_app_store = type == APP_STORE + @is_development = type == DEVELOPMENT + case type - when DEVELOPMENT, ENTERPRISE + when DEVELOPMENT @export_method = type - @configuration = type == DEVELOPMENT ? "Debug" : "Release" - @is_app_store = false - @prefix = type == DEVELOPMENT ? DEVELOPMENT_PREFIX : ENTERPRISE_PREFIX + @configuration = "Debug" + @prefix = DEVELOPMENT_PREFIX + when ENTERPRISE + @export_method = type + @configuration = "Release" + @prefix = ENTERPRISE_PREFIX when APP_STORE @export_method = "app-store" @configuration = "AppStore" - @is_app_store = true @prefix = APP_STORE_PREFIX else raise "Unknown type passed #{type}" @@ -32,7 +37,7 @@ module Touchlane private_class_method :new - attr_reader :export_method, :type, :configuration, :is_app_store, :prefix + attr_reader :export_method, :type, :configuration, :is_app_store, :is_development, :prefix def self.from_lane_name(lane_name) case From 2c97109908435d62f5ccffaa995e5e6e6f0242f6 Mon Sep 17 00:00:00 2001 From: Vlad Date: Thu, 11 Feb 2021 17:45:45 +0300 Subject: [PATCH 093/168] Add pattern_matching and fallthrough rules --- xcode/.swiftlint.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index 35c417c..2c5dcc6 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -284,6 +284,18 @@ custom_rules: message: "Use a local function instead of capture strong self" severity: error + pattern_matching: + name: "Pattern matching" + regex: 'case[^\(]+\([^\)]*(let|var)\s' + message: "Use a let|var keyword behind parentheses" + severity: error + + fallthrough: + name: "Fallthrough" + regex: '\sfallthrough\s' + message: "Fallthrough usage is restricted!" + severity: error + # Rx unused_map_parameter: From 69ec87dc47e19436a9d03732eee657e13bf3f932 Mon Sep 17 00:00:00 2001 From: Vlad Date: Thu, 11 Feb 2021 18:19:50 +0300 Subject: [PATCH 094/168] Update pattern_matching --- xcode/.swiftlint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index 2c5dcc6..d29d115 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -286,7 +286,7 @@ custom_rules: pattern_matching: name: "Pattern matching" - regex: 'case[^\(]+\([^\)]*(let|var)\s' + regex: 'case[^\n\(]+\([^\)]*(let|var)\s' message: "Use a let|var keyword behind parentheses" severity: error From f0e0cb7e02b0e784dcb0db1101c386fabb545727 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Thu, 11 Feb 2021 18:22:14 +0300 Subject: [PATCH 095/168] add fallthrough rule, use warnings instead of errors for most kind of custom rules --- xcode/.swiftlint.yml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index 337f194..0d26641 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -33,6 +33,7 @@ opt_in_rules: - extension_access_modifier - explicit_init - prefer_zero_over_explicit_init + - fallthrough # style @@ -201,13 +202,13 @@ custom_rules: match_kinds: - keyword message: "Make a new line break when use getter or setter" - severity: error + severity: warning redundant_boolean_condition: name: "Redundant Boolean Condition" regex: "(== true)|(== false)|(!= true)|(!= false)" message: "Comparing a boolean to true is redundant (use `?? false` for optionals), and `!`-syntax is preferred over comparing to false." - severity: error + severity: warning excluded_match_kinds: - comment - comment.mark @@ -219,43 +220,43 @@ custom_rules: name: "Redundant Ternary Operator" regex: "(\\? true \\: false)|(\\? false \\: true)" message: "Returning a boolean as true is redundant, and `!`-syntax is preferred over returning as false." - severity: error + severity: warning single_line_closure: name: "Single line closure" regex: '\{([^\n\/]*\[[^\]]+\][^\n\/]*)?([^\n\/]*[a-zA-Z]\w*(, \w+)*)? in [^\n\/]+' message: "Too complex expression for single line closure. Improve readability by making it multiline." - severity: error + severity: warning addSubview_in_cell: name: "Usage addSubview in cell" regex: '(extension|class)\s*\w+Cell(:| )(?s).*(self\.|\s{2,})add(Subv|V)iews?\(\w' message: "Use сontentView instead of self for addSubview or addSubviews methods in cell." - severity: error + severity: warning redundant_type_annotation_bool: name: "Redundant type annotation for Bool" regex: '\s((var|let))\s{1,}\w+ *((: *Bool *=)|((\w| |<|>|:)*= *BehaviorRelay\( *value *:)) *((true)|(false))' message: "Using a type annotation for Bool is redundant." - severity: error + severity: warning parameter_repetition: name: "Parameter repetition" regex: 'func ((\w+([A-Z]\w+))|(\w+)) *(<[^>]+>)? *\( *(?i)(\3|\4):' message: "The parameter name is actually used in the function name. Use _ instead." - severity: error + severity: warning parameter_closure: name: "Parameter closure" regex: '\w*Closure<[^\r\n\t\f\v]*, Void[^\r\n\t\f\v]*>' message: "Use `ParameterClosure` instead of declaring an explicit return value of `Void`." - severity: error + severity: warning strong_self: name: "Strong self" regex: '(if|guard)\s+let\s+self\s+=\s+self' message: "Use a local function instead of capture strong self" - severity: error + severity: warning # Rx From f62bc00b9c3e3bd57ca9101f6661ba11d1635364 Mon Sep 17 00:00:00 2001 From: Vlad Date: Thu, 11 Feb 2021 18:33:05 +0300 Subject: [PATCH 096/168] Remove fallthrough --- xcode/.swiftlint.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index d29d115..2db54e1 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -288,13 +288,7 @@ custom_rules: name: "Pattern matching" regex: 'case[^\n\(]+\([^\)]*(let|var)\s' message: "Use a let|var keyword behind parentheses" - severity: error - - fallthrough: - name: "Fallthrough" - regex: '\sfallthrough\s' - message: "Fallthrough usage is restricted!" - severity: error + severity: warning # Rx From 2c0e89dbf5c876029517217e2512948252d2c3b1 Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 9 Mar 2021 13:14:49 +0300 Subject: [PATCH 097/168] Add path to pmd --- xcode/build_phases/copy_paste_detection.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xcode/build_phases/copy_paste_detection.sh b/xcode/build_phases/copy_paste_detection.sh index 653b093..b3b1f04 100755 --- a/xcode/build_phases/copy_paste_detection.sh +++ b/xcode/build_phases/copy_paste_detection.sh @@ -24,7 +24,7 @@ readonly EXIT_SUCCESS=0 readonly EXIT_FAILURE=1 -if which pmd >/dev/null; then +if which /usr/local/bin/pmd >/dev/null; then readonly REPORTS_DIR="${PROJECT_DIR}/code-quality-reports" readonly SOURCES_DIRS=`. ${SCRIPT_DIR}/common/read_input_file_names.sh " " ${PROJECT_DIR}` @@ -44,7 +44,7 @@ if which pmd >/dev/null; then mkdir -p ${REPORTS_DIR} - pmd cpd --files ${SOURCES_DIRS} --exclude ${FILES_TO_EXCLUDE} --minimum-tokens 50 --language swift --encoding UTF-8 --format net.sourceforge.pmd.cpd.XMLRenderer --failOnViolation true > ${REPORTS_DIR}/cpd-output.xml + /usr/local/bin/pmd cpd --files ${SOURCES_DIRS} --exclude ${FILES_TO_EXCLUDE} --minimum-tokens 50 --language swift --encoding UTF-8 --format net.sourceforge.pmd.cpd.XMLRenderer --failOnViolation true > ${REPORTS_DIR}/cpd-output.xml php ${SCRIPT_DIR}/../aux_scripts/cpd_script.php ${REPORTS_DIR}/cpd-output.xml | tee ${REPORTS_DIR}/CPDLog.txt From e5c4db8c108ff32572bdabcfc58b48d2c0dca5a1 Mon Sep 17 00:00:00 2001 From: Vlad Date: Fri, 12 Mar 2021 19:41:16 +0300 Subject: [PATCH 098/168] Add resources to exclude --- xcode/.swiftlint.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index 0d26641..2747b3e 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -77,6 +77,7 @@ excluded: - Pods - Generated - "**/Generated" + - "**/Resources" line_length: warning: 128 From fc1c0ac74b452fd64dbbea7b582817e2c1fea78a Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 23 Mar 2021 16:29:00 +0300 Subject: [PATCH 099/168] Add cpde generation phase --- xcode/commonFastfile | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 6319ae9..5a6ad82 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -108,6 +108,7 @@ private_lane :buildConfiguration do |options| installDependencies(options) + run_code_generation_phase_if_needed() generate_enabled_features_extension_if_needed(options) if !(options[:uploadToFabric] || options[:uploadToAppStore]) @@ -425,3 +426,14 @@ def set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodepro project.save() end + +# Build phases + +def run_code_generation_phase_if_needed() + code_generation_script_path = File.expand_path "../.githooks/scripts/CodeGen.sh" + + if File.exists? code_generation_script_path + sh(code_generation_script_path) + end + +end From f5d3b7e4ea8f47bac1e14e2add1f563bd4df910a Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 23 Mar 2021 16:49:22 +0300 Subject: [PATCH 100/168] Add xcodeproj_path to code generation --- xcode/commonFastfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 5a6ad82..950a2d8 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -429,11 +429,12 @@ end # Build phases -def run_code_generation_phase_if_needed() +def run_code_generation_phase_if_needed(options) code_generation_script_path = File.expand_path "../.githooks/scripts/CodeGen.sh" + xcodeproj_path = File.expand_path options[:xcodeproj_path] if File.exists? code_generation_script_path - sh(code_generation_script_path) + sh("code_generation_script_path ${xcodeproj_path}") end end From 43485eb8f5076f94a56ec52f44fac7ea0cb3c563 Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 23 Mar 2021 16:56:39 +0300 Subject: [PATCH 101/168] Correct params input to sh --- xcode/commonFastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 950a2d8..92a3102 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -434,7 +434,7 @@ def run_code_generation_phase_if_needed(options) xcodeproj_path = File.expand_path options[:xcodeproj_path] if File.exists? code_generation_script_path - sh("code_generation_script_path ${xcodeproj_path}") + sh("#{code_generation_script_path} #{xcodeproj_path}") end end From ddf7e0228b06c2d76d309b37541a2738c60c82f3 Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 23 Mar 2021 17:07:09 +0300 Subject: [PATCH 102/168] Correct code generation input --- xcode/commonFastfile | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 92a3102..f4d4e61 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -89,12 +89,12 @@ private_lane :buildConfiguration do |options| configuration_type = Touchlane::ConfigurationType.from_lane_name(lane_name) options = fill_up_options_using_configuration_type(options, configuration_type) - openKeychain(options) + #openKeychain(options) if !options[:buildNumber].nil? - increment_build_number( - build_number: options[:buildNumber] - ) + #increment_build_number( + # build_number: options[:buildNumber] + #) end ipa_name = "#{appName}.ipa" @@ -106,9 +106,9 @@ private_lane :buildConfiguration do |options| options[:xcodeproj_path] = "../#{appName}.xcodeproj" options[:workspace] = "./#{appName}.xcworkspace" - installDependencies(options) + #installDependencies(options) - run_code_generation_phase_if_needed() + run_code_generation_phase_if_needed(options) generate_enabled_features_extension_if_needed(options) if !(options[:uploadToFabric] || options[:uploadToAppStore]) @@ -433,8 +433,9 @@ def run_code_generation_phase_if_needed(options) code_generation_script_path = File.expand_path "../.githooks/scripts/CodeGen.sh" xcodeproj_path = File.expand_path options[:xcodeproj_path] + if File.exists? code_generation_script_path - sh("#{code_generation_script_path} #{xcodeproj_path}") + sh(code_generation_script_path, xcodeproj_path) end end From 8529a6f41f4a44928eb24a8bc0ed7c04abf7a125 Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 23 Mar 2021 17:37:51 +0300 Subject: [PATCH 103/168] Remove comments --- xcode/commonFastfile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index f4d4e61..f939208 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -89,12 +89,12 @@ private_lane :buildConfiguration do |options| configuration_type = Touchlane::ConfigurationType.from_lane_name(lane_name) options = fill_up_options_using_configuration_type(options, configuration_type) - #openKeychain(options) + openKeychain(options) if !options[:buildNumber].nil? - #increment_build_number( - # build_number: options[:buildNumber] - #) + increment_build_number( + build_number: options[:buildNumber] + ) end ipa_name = "#{appName}.ipa" @@ -106,7 +106,7 @@ private_lane :buildConfiguration do |options| options[:xcodeproj_path] = "../#{appName}.xcodeproj" options[:workspace] = "./#{appName}.xcworkspace" - #installDependencies(options) + installDependencies(options) run_code_generation_phase_if_needed(options) generate_enabled_features_extension_if_needed(options) From bfad757f236486b21aeb85ff23a822a3b30ffb83 Mon Sep 17 00:00:00 2001 From: Vlad Date: Tue, 23 Mar 2021 17:54:53 +0300 Subject: [PATCH 104/168] Remove empty spaces --- xcode/commonFastfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index f939208..e7f4c13 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -433,9 +433,7 @@ def run_code_generation_phase_if_needed(options) code_generation_script_path = File.expand_path "../.githooks/scripts/CodeGen.sh" xcodeproj_path = File.expand_path options[:xcodeproj_path] - if File.exists? code_generation_script_path sh(code_generation_script_path, xcodeproj_path) end - end From 784f619166a1d7746f5829808c21ab6422ec0a42 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Mon, 19 Apr 2021 13:57:53 +0300 Subject: [PATCH 105/168] create intermediate directories in LocalStorage.upload_files --- .../fastlane/touchlane/lib/match/storage/local_storage.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/xcode/fastlane/touchlane/lib/match/storage/local_storage.rb b/xcode/fastlane/touchlane/lib/match/storage/local_storage.rb index f2ed2bd..73759b8 100644 --- a/xcode/fastlane/touchlane/lib/match/storage/local_storage.rb +++ b/xcode/fastlane/touchlane/lib/match/storage/local_storage.rb @@ -42,8 +42,6 @@ module Touchlane # Those doesn't mean they're new, it might just be they're changed # Either way, we'll upload them using the same technique - Dir.mkdir(self.signing_identities_path) unless File.exists?(self.signing_identities_path) - files_to_upload.each do |current_file| # Go from # "/var/folders/px/bz2kts9n69g8crgv4jpjh6b40000gn/T/d20181026-96528-1av4gge/profiles/development/Development_me.mobileprovision" @@ -53,7 +51,11 @@ module Touchlane # We also have to remove the trailing `/` as Google Cloud doesn't handle it nicely target_path = current_file.gsub(self.working_directory + "/", "") - FileUtils.cp_r(current_file, File.join(self.signing_identities_path, target_path), remove_destination: true) + absolute_target_path = File.join(self.signing_identities_path, target_path) + + FileUtils.mkdir_p(File.dirname(absolute_target_path)) + + FileUtils.cp_r(current_file, absolute_target_path, remove_destination: true) end end From daf50493e6ce45a475ed16c574889ade527851f3 Mon Sep 17 00:00:00 2001 From: Loupehope <31570429+Loupehope@users.noreply.github.com> Date: Thu, 29 Apr 2021 08:03:46 +0300 Subject: [PATCH 106/168] Remove useless path to pmd --- xcode/build_phases/copy_paste_detection.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xcode/build_phases/copy_paste_detection.sh b/xcode/build_phases/copy_paste_detection.sh index b3b1f04..653b093 100755 --- a/xcode/build_phases/copy_paste_detection.sh +++ b/xcode/build_phases/copy_paste_detection.sh @@ -24,7 +24,7 @@ readonly EXIT_SUCCESS=0 readonly EXIT_FAILURE=1 -if which /usr/local/bin/pmd >/dev/null; then +if which pmd >/dev/null; then readonly REPORTS_DIR="${PROJECT_DIR}/code-quality-reports" readonly SOURCES_DIRS=`. ${SCRIPT_DIR}/common/read_input_file_names.sh " " ${PROJECT_DIR}` @@ -44,7 +44,7 @@ if which /usr/local/bin/pmd >/dev/null; then mkdir -p ${REPORTS_DIR} - /usr/local/bin/pmd cpd --files ${SOURCES_DIRS} --exclude ${FILES_TO_EXCLUDE} --minimum-tokens 50 --language swift --encoding UTF-8 --format net.sourceforge.pmd.cpd.XMLRenderer --failOnViolation true > ${REPORTS_DIR}/cpd-output.xml + pmd cpd --files ${SOURCES_DIRS} --exclude ${FILES_TO_EXCLUDE} --minimum-tokens 50 --language swift --encoding UTF-8 --format net.sourceforge.pmd.cpd.XMLRenderer --failOnViolation true > ${REPORTS_DIR}/cpd-output.xml php ${SCRIPT_DIR}/../aux_scripts/cpd_script.php ${REPORTS_DIR}/cpd-output.xml | tee ${REPORTS_DIR}/CPDLog.txt From a83d6074b23158526ac7c3ac15b8bc75d510633e Mon Sep 17 00:00:00 2001 From: rybakovi Date: Thu, 29 Apr 2021 20:42:14 +0300 Subject: [PATCH 107/168] upd version and location --- gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt b/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt index 7e9b607..fcaf17a 100644 --- a/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt +++ b/gradle/plugins/src/main/java/apigen/ApiGeneratorPlugin.kt @@ -12,14 +12,14 @@ abstract class ApiGeneratorPlugin : Plugin { companion object { const val API_GENERATOR_CONFIG = "apiGenerator" const val API_GENERATOR_EXT_NAME = "apiGenerator" - const val API_GENERATOR_DEFAULT_VERSION = "1.4.0-beta5" + const val API_GENERATOR_DEFAULT_VERSION = "1.4.0-beta10" } override fun apply(target: Project) { with(target) { repositories { maven { - url = uri("https://dl.bintray.com/touchin/touchin-tools") + url = uri("https://maven.dev.touchin.ru") metadataSources { artifact() } From 8813dacd6fcc527c257801cbb32613f3d7bee780 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Tue, 11 May 2021 18:04:46 +0300 Subject: [PATCH 108/168] update api generator download url --- xcode/build_phases/api_generator.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/build_phases/api_generator.sh b/xcode/build_phases/api_generator.sh index 2c99954..3748c44 100755 --- a/xcode/build_phases/api_generator.sh +++ b/xcode/build_phases/api_generator.sh @@ -135,7 +135,7 @@ fi mkdir -p ${OUTPUT_PATH} # download api generator -readonly DOWNLOAD_URL="https://dl.bintray.com/touchin/touchin-tools/ru/touchin/api-generator/${VERSION}/${FILE_NAME}" +readonly DOWNLOAD_URL="https://maven.dev.touchin.ru/ru/touchin/api-generator/api-generator/${VERSION}/${FILE_NAME}" . build-scripts/xcode/aux_scripts/download_file.sh ${FILE_NAME} ${DOWNLOAD_URL} # execute api generator From 515e6ac5be581011b51a64e6b465e0c8d3642651 Mon Sep 17 00:00:00 2001 From: Loupehope <31570429+Loupehope@users.noreply.github.com> Date: Tue, 11 May 2021 18:45:54 +0300 Subject: [PATCH 109/168] fix: api generator url --- xcode/build_phases/api_generator.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/build_phases/api_generator.sh b/xcode/build_phases/api_generator.sh index 3748c44..bef1a04 100755 --- a/xcode/build_phases/api_generator.sh +++ b/xcode/build_phases/api_generator.sh @@ -135,7 +135,7 @@ fi mkdir -p ${OUTPUT_PATH} # download api generator -readonly DOWNLOAD_URL="https://maven.dev.touchin.ru/ru/touchin/api-generator/api-generator/${VERSION}/${FILE_NAME}" +readonly DOWNLOAD_URL="https://maven.dev.touchin.ru/ru/touchin/api-generator/${VERSION}/${FILE_NAME}" . build-scripts/xcode/aux_scripts/download_file.sh ${FILE_NAME} ${DOWNLOAD_URL} # execute api generator From 908f69b1f844e6a24f43729097a5080b9442699e Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov <> Date: Thu, 13 May 2021 17:27:51 +0300 Subject: [PATCH 110/168] feat: run code generation for workspace --- xcode/commonFastfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index a0f4641..0ede997 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -440,9 +440,9 @@ end def run_code_generation_phase_if_needed(options) code_generation_script_path = File.expand_path "../.githooks/scripts/CodeGen.sh" - xcodeproj_path = File.expand_path options[:xcodeproj_path] + workspace_path = File.expand_path options[:workspace] if File.exists? code_generation_script_path - sh(code_generation_script_path, xcodeproj_path) + sh(code_generation_script_path, workspace_path) end end From a132bcd9396d3f27072a81a595dd12fb55870dc6 Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov <> Date: Thu, 13 May 2021 17:41:44 +0300 Subject: [PATCH 111/168] refactor: update path to xcworkspace --- xcode/commonFastfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 0ede997..2210ad8 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -108,7 +108,7 @@ private_lane :buildConfiguration do |options| installDependencies(options) - run_code_generation_phase_if_needed(options) + run_code_generation_phase_if_needed() generate_enabled_features_extension_if_needed(options) if !(options[:uploadToFabric] || options[:uploadToAppStore]) @@ -438,9 +438,9 @@ end # Build phases -def run_code_generation_phase_if_needed(options) +def run_code_generation_phase_if_needed: code_generation_script_path = File.expand_path "../.githooks/scripts/CodeGen.sh" - workspace_path = File.expand_path options[:workspace] + workspace_path = File.expand_path "../#{appName}.xcworkspace" if File.exists? code_generation_script_path sh(code_generation_script_path, workspace_path) From fa9ccef66befbd31c4573535a5c417c60fcfbc86 Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov <> Date: Thu, 13 May 2021 17:47:15 +0300 Subject: [PATCH 112/168] refactor: correct typo --- xcode/commonFastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 2210ad8..52a1906 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -438,7 +438,7 @@ end # Build phases -def run_code_generation_phase_if_needed: +def run_code_generation_phase_if_needed() code_generation_script_path = File.expand_path "../.githooks/scripts/CodeGen.sh" workspace_path = File.expand_path "../#{appName}.xcworkspace" From 045b57e72d52fabc42f533f00f3f2e7ddc261774 Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov <> Date: Thu, 13 May 2021 17:56:37 +0300 Subject: [PATCH 113/168] refactor: complete app name --- xcode/commonFastfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 52a1906..28cca96 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -108,7 +108,7 @@ private_lane :buildConfiguration do |options| installDependencies(options) - run_code_generation_phase_if_needed() + run_code_generation_phase_if_needed(options) generate_enabled_features_extension_if_needed(options) if !(options[:uploadToFabric] || options[:uploadToAppStore]) @@ -438,7 +438,8 @@ end # Build phases -def run_code_generation_phase_if_needed() +def run_code_generation_phase_if_needed(options) + appName = options[:appName] || $appName code_generation_script_path = File.expand_path "../.githooks/scripts/CodeGen.sh" workspace_path = File.expand_path "../#{appName}.xcworkspace" From e0913de8a3ecde0d73b7d5c7df64ee9106b6f114 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Sun, 4 Jul 2021 16:57:00 +0300 Subject: [PATCH 114/168] replace timeout: false with timeout: 0 according to https://github.com/fastlane/fastlane/pull/18894 --- xcode/commonFastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 28cca96..fea0819 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -237,7 +237,7 @@ private_lane :openKeychain do |options| name: options[:keychain_name], password: options[:keychain_password], unlock: true, - timeout: false, + timeout: 0, add_to_search_list: !keychain_exists ) else From 3f70495e4bd51ae7acdafa732096987e8794bcc0 Mon Sep 17 00:00:00 2001 From: Alexander Rutsman Date: Mon, 5 Jul 2021 16:29:00 +0300 Subject: [PATCH 115/168] Removed google service prefix --- xcode/commonFastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index fea0819..5875264 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -379,7 +379,7 @@ def get_configuration_for_type(type) end def get_google_services_plist_path(app_target_folder_name, configuration_type) - File.expand_path "../#{app_target_folder_name}/Resources/#{configuration_type.prefix}-GoogleService-Info.plist" + File.expand_path "../#{app_target_folder_name}/Resources/GoogleService-Info.plist" end def generate_enabled_features_extension_if_needed(options) From efb5c8b60e08a27ff8de04466b5e38a65c0efff7 Mon Sep 17 00:00:00 2001 From: Alexander Rutsman Date: Tue, 6 Jul 2021 12:56:18 +0300 Subject: [PATCH 116/168] Edit timeout --- xcode/commonFastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 5875264..47a2757 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -237,7 +237,7 @@ private_lane :openKeychain do |options| name: options[:keychain_name], password: options[:keychain_password], unlock: true, - timeout: 0, + timeout: false, add_to_search_list: !keychain_exists ) else From 3c5135ea5e29a68e5492bb118a5a946e785aa741 Mon Sep 17 00:00:00 2001 From: Alexander Rutsman Date: Wed, 7 Jul 2021 15:23:29 +0300 Subject: [PATCH 117/168] Git revert HEAD --- xcode/commonFastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 47a2757..5875264 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -237,7 +237,7 @@ private_lane :openKeychain do |options| name: options[:keychain_name], password: options[:keychain_password], unlock: true, - timeout: false, + timeout: 0, add_to_search_list: !keychain_exists ) else From ad2172cd27af1ad4dfed0f5d64ddd8bfd80fc743 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Wed, 21 Jul 2021 13:41:14 +0300 Subject: [PATCH 118/168] add xcodegen support --- xcode/commonFastfile | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 5875264..ea9d55c 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -79,11 +79,11 @@ private_lane :addShield do |options| end private_lane :buildConfiguration do |options| - appName = options[:appName] || $appName + options[:appName] = options[:appName] || $appName lane_name = options[:lane_name] || lane_context[SharedValues::LANE_NAME] - options[:scheme] = options[:scheme] || appName + options[:scheme] = options[:scheme] || options[:appName] options[:lane_name] = lane_name configuration_type = Touchlane::ConfigurationType.from_lane_name(lane_name) @@ -97,14 +97,16 @@ private_lane :buildConfiguration do |options| ) end - ipa_name = "#{appName}.ipa" + ipa_name = "#{options[:appName]}.ipa" options[:output_name] = ipa_name options[:ipa_path] = "./#{ipa_name}" - options[:dsym_path] = "./#{appName}.app.dSYM.zip" + options[:dsym_path] = "./#{options[:appName]}.app.dSYM.zip" - options[:xcodeproj_path] = "../#{appName}.xcodeproj" - options[:workspace] = "./#{appName}.xcworkspace" + options[:xcodeproj_path] = options[:xcodeproj_path] || "../#{options[:appName]}.xcodeproj" + options[:workspace] = options[:workspace] || "./#{options[:appName]}.xcworkspace" + + generate_xcodeproj_if_needed(options) installDependencies(options) @@ -436,14 +438,22 @@ def set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodepro project.save() end +def generate_xcodeproj_if_needed(options) + project_yml_path = File.expand_path "../project.yml" + + if !File.exists?(options[:xcodeproj_path]) && File.exists?(project_yml_path) + xcodegen( + spec: project_yml_path + ) + end +end + # Build phases def run_code_generation_phase_if_needed(options) - appName = options[:appName] || $appName code_generation_script_path = File.expand_path "../.githooks/scripts/CodeGen.sh" - workspace_path = File.expand_path "../#{appName}.xcworkspace" if File.exists? code_generation_script_path - sh(code_generation_script_path, workspace_path) + sh(code_generation_script_path, options[:workspace_path]) end end From cf2aa3f7ee10030f140f8aa5b3743b66e0bf5799 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Wed, 21 Jul 2021 17:17:22 +0300 Subject: [PATCH 119/168] localization script refactoring --- xcode/aux_scripts/import_strings.php | 16 ++++++------- xcode/build_phases/localization.sh | 34 ++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/xcode/aux_scripts/import_strings.php b/xcode/aux_scripts/import_strings.php index 7cfdc7d..84b076c 100644 --- a/xcode/aux_scripts/import_strings.php +++ b/xcode/aux_scripts/import_strings.php @@ -1,14 +1,13 @@ $value) { $value_without_linefeed = preg_replace("/\r|\n/", " ", $value); - $ios_swift_strings .= "\t/// ".$value_without_linefeed."\n\t".'static let '.preg_replace_callback('/_(.?)/', function ($m) { return strtoupper($m[1]); }, $key).' = NSLocalizedString("'.$key.'", comment: "")'."\n".PHP_EOL; + $ios_swift_strings .= "\t/// ".$value_without_linefeed."\n\t".'static let '.preg_replace_callback('/_(.?)/', function ($m) { return strtoupper($m[1]); }, $key).' = NSLocalizedString("'.$key.'", bundle: '.$BUNDLE.', comment: "'.$value_without_linefeed.'")'."\n".PHP_EOL; } $ios_swift_strings .= '}'.PHP_EOL; - file_put_contents($localization.'String+Localization.swift', $ios_swift_strings); + echo $ios_swift_strings; + file_put_contents($LOCALIZATION_PATH.'String+Localization.swift', $ios_swift_strings); } } ?> diff --git a/xcode/build_phases/localization.sh b/xcode/build_phases/localization.sh index 8c8bf61..dea12e3 100644 --- a/xcode/build_phases/localization.sh +++ b/xcode/build_phases/localization.sh @@ -1,16 +1,36 @@ -LOCALIZATION_PATH="${PRODUCT_NAME}/Resources/Localization" -#first argument set strings folder path +#!/bin/sh + +# Description: +# Generates Localizeable.strings and String+Localization.swift files. +# +# Parameters: +# $1 - path to strings folder containing json files. +# $2 - path to Localization folder (output). +# $3 - Bundle for localization. Default is `.main`. +# +# Required environment variables: +# SCRIPT_DIR - directory of current script. +# +# Optional environment variables: +# PRODUCT_NAME - product name to produce path to localization folder (output). +# +# Examples of usage: +# . localization.sh +# . localization.sh common/strings Resources/Localization/ .main +# + STRINGS_FOLDER=${1:-"common/strings"} +LOCALIZATION_PATH=${2:-"${PRODUCT_NAME}/Resources/Localization/"} +BUNDLE=${3:-".main"} if ! [ -e ${LOCALIZATION_PATH} ]; then - echo "${PROJECT_DIR}/${LOCALIZATION_PATH} path does not exist. Add these folders and try again." + echo "${LOCALIZATION_PATH} path does not exist. Add these folders and try again." exit 1 fi -if ! [ -e "${PROJECT_DIR}/${STRINGS_FOLDER}" ]; then - echo "${PROJECT_DIR}/${STRINGS_FOLDER} path does not exist. Submodule with strings should be named common and contain strings folder." +if ! [ -e "${STRINGS_FOLDER}" ]; then + echo "${STRINGS_FOLDER} path does not exist. Submodule with strings should be named common and contain strings folder." exit 1 fi -#second argument set strings script path -php ${2:-build-scripts/xcode/aux_scripts/import_strings.php} ${PRODUCT_NAME} ${STRINGS_FOLDER} +php ${SCRIPT_DIR}/../aux_scripts/import_strings.php ${LOCALIZATION_PATH} ${STRINGS_FOLDER} ${BUNDLE} From 82a44c2a1ce1f8f81e6e4826bf2170be0cc0131e Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Wed, 21 Jul 2021 17:56:06 +0300 Subject: [PATCH 120/168] disable cyrillic_strings rule for String+Localization.swift --- xcode/aux_scripts/import_strings.php | 1 + 1 file changed, 1 insertion(+) diff --git a/xcode/aux_scripts/import_strings.php b/xcode/aux_scripts/import_strings.php index 84b076c..f2d822f 100644 --- a/xcode/aux_scripts/import_strings.php +++ b/xcode/aux_scripts/import_strings.php @@ -41,6 +41,7 @@ '// swiftlint:disable superfluous_disable_command'.PHP_EOL. '// swiftlint:disable line_length'.PHP_EOL. '// swiftlint:disable file_length'.PHP_EOL. + '// swiftlint:disable cyrillic_strings'.PHP_EOL. '// swiftlint:disable identifier_name'.PHP_EOL.PHP_EOL. 'public extension String {'.PHP_EOL; foreach ($json as $key=>$value) { From 0d555bea19bf9decdb2bbd5113cb94f7cba6f7c2 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Wed, 21 Jul 2021 21:06:58 +0300 Subject: [PATCH 121/168] generate xcodeproj before increment build number --- xcode/commonFastfile | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index ea9d55c..fa3e6a3 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -86,17 +86,6 @@ private_lane :buildConfiguration do |options| options[:scheme] = options[:scheme] || options[:appName] options[:lane_name] = lane_name - configuration_type = Touchlane::ConfigurationType.from_lane_name(lane_name) - options = fill_up_options_using_configuration_type(options, configuration_type) - - openKeychain(options) - - if !options[:buildNumber].nil? - increment_build_number( - build_number: options[:buildNumber] - ) - end - ipa_name = "#{options[:appName]}.ipa" options[:output_name] = ipa_name @@ -106,8 +95,19 @@ private_lane :buildConfiguration do |options| options[:xcodeproj_path] = options[:xcodeproj_path] || "../#{options[:appName]}.xcodeproj" options[:workspace] = options[:workspace] || "./#{options[:appName]}.xcworkspace" + configuration_type = Touchlane::ConfigurationType.from_lane_name(lane_name) + options = fill_up_options_using_configuration_type(options, configuration_type) + generate_xcodeproj_if_needed(options) + openKeychain(options) + + if !options[:buildNumber].nil? + increment_build_number( + build_number: options[:buildNumber] + ) + end + installDependencies(options) run_code_generation_phase_if_needed(options) From 63ecad8042c73e26c7b95ac15fadcca5d22d331b Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Thu, 22 Jul 2021 09:29:22 +0300 Subject: [PATCH 122/168] remove hadcoded CODE_SIGN_STYLE key; remove PROVISIONING_PROFILE_SPECIFIER auto generation --- xcode/config_generator/render_xcconfigs.rb | 17 +++-------------- xcode/config_generator/target_xcconfig.mustache | 4 +--- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/xcode/config_generator/render_xcconfigs.rb b/xcode/config_generator/render_xcconfigs.rb index 69aee0b..c96c120 100755 --- a/xcode/config_generator/render_xcconfigs.rb +++ b/xcode/config_generator/render_xcconfigs.rb @@ -64,23 +64,12 @@ def fetch_development_team(development_team_key, distribution_type) return config_option(development_team_key, team_value) end -# Return empty array or generated provisioning profile hash -def generate_provisioning_profile(provisioning_key, bundle_id, distribution_type) - case distribution_type - when "appstore" - app_store_profile = "match AppStore " + bundle_id - config_option(provisioning_key, app_store_profile) - else - config_option(provisioning_key, bundle_id) - end -end - # Generate missing properties if needed def generate_missing_properties(target_name, properties, distribution_type) result = [] development_team_key = "DEVELOPMENT_TEAM" - provisioning_key = "PROVISIONING_PROFILE_SPECIFIER" bundle_id_key = "PRODUCT_BUNDLE_IDENTIFIER" + code_sign_style_key = "CODE_SIGN_STYLE" # Bundle_id_key should be among the properties (required by fastlane) unless properties.key?(bundle_id_key) @@ -91,8 +80,8 @@ def generate_missing_properties(target_name, properties, distribution_type) result.append(fetch_development_team(development_team_key, distribution_type)) end - unless properties.key?(provisioning_key) - result.append(generate_provisioning_profile(provisioning_key, properties[bundle_id_key], distribution_type)) + unless properties.key?(code_sign_style_key) + result.append(config_option(code_sign_style_key, "Manual")) end return result diff --git a/xcode/config_generator/target_xcconfig.mustache b/xcode/config_generator/target_xcconfig.mustache index 7e5477a..570fab1 100644 --- a/xcode/config_generator/target_xcconfig.mustache +++ b/xcode/config_generator/target_xcconfig.mustache @@ -2,6 +2,4 @@ {{#configuration.xcconfig_options}} {{key}} = {{value}} -{{/configuration.xcconfig_options}} - -CODE_SIGN_STYLE = Manual \ No newline at end of file +{{/configuration.xcconfig_options}} \ No newline at end of file From 6a032c324f17fd70c26d33acd7efd67772c19a17 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Tue, 27 Jul 2021 15:03:21 +0300 Subject: [PATCH 123/168] replace existing options when generating xcconfigs --- xcode/config_generator/render_xcconfigs.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/xcode/config_generator/render_xcconfigs.rb b/xcode/config_generator/render_xcconfigs.rb index c96c120..b19f063 100755 --- a/xcode/config_generator/render_xcconfigs.rb +++ b/xcode/config_generator/render_xcconfigs.rb @@ -102,7 +102,11 @@ targets.each do |target_name, target| # Add properties from settings file properties.each do |key, value| - config["xcconfig_options"].append(config_option(key, value)) + if config["xcconfig_options"].any? { |option| key == option["key"] } + config["xcconfig_options"].map! { |option| key == option["key"] ? config_option(key, value) : option } + else + config["xcconfig_options"].append(config_option(key, value)) + end end # Add missing properties if needed From 8d0449714bf8b3a53bc87561b1ad5b6b01e9249a Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Wed, 28 Jul 2021 15:58:18 +0300 Subject: [PATCH 124/168] set xcconfig for framework targets as well --- xcode/commonFastfile | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index fa3e6a3..d2686a2 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -420,7 +420,8 @@ def set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodepro target_to_modify_selector = lambda do |t| supported_product_types = [ Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application], - Xcodeproj::Constants::PRODUCT_TYPE_UTI[:app_extension] + Xcodeproj::Constants::PRODUCT_TYPE_UTI[:app_extension], + Xcodeproj::Constants::PRODUCT_TYPE_UTI[:framework] ] return !t.test_target_type? && supported_product_types.include?(t.product_type) end @@ -428,10 +429,13 @@ def set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodepro application_targets = project.native_targets.select(&target_to_modify_selector) application_targets.each do |target| - build_configuration = target.build_configuration_list[configuration] config_name = target.name + lane_name build_configuration_reference = project.files.select { |f| f.path.start_with?(config_name) }.first - build_configuration.base_configuration_reference = build_configuration_reference + + if !build_configuration_reference.nil? # target has custom xcconfig + build_configuration = target.build_configuration_list[configuration] + build_configuration.base_configuration_reference = build_configuration_reference + end end From 6cdd30a872bc018efbc42f1419c407a4a65971c5 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Wed, 28 Jul 2021 22:02:43 +0300 Subject: [PATCH 125/168] fix workspace path for code generation --- xcode/commonFastfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index d2686a2..a3147d3 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -93,7 +93,7 @@ private_lane :buildConfiguration do |options| options[:dsym_path] = "./#{options[:appName]}.app.dSYM.zip" options[:xcodeproj_path] = options[:xcodeproj_path] || "../#{options[:appName]}.xcodeproj" - options[:workspace] = options[:workspace] || "./#{options[:appName]}.xcworkspace" + options[:workspace] = options[:workspace] || File.expand_path("../#{options[:appName]}.xcworkspace") configuration_type = Touchlane::ConfigurationType.from_lane_name(lane_name) options = fill_up_options_using_configuration_type(options, configuration_type) @@ -458,6 +458,6 @@ def run_code_generation_phase_if_needed(options) code_generation_script_path = File.expand_path "../.githooks/scripts/CodeGen.sh" if File.exists? code_generation_script_path - sh(code_generation_script_path, options[:workspace_path]) + sh(code_generation_script_path, options[:workspace]) end end From 7c4149778cd5cbe7f9e5b808e4f77c9e1ceed5f2 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Wed, 4 Aug 2021 10:45:04 +0300 Subject: [PATCH 126/168] add backslashes before characters that need to be escaped --- xcode/aux_scripts/import_strings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/aux_scripts/import_strings.php b/xcode/aux_scripts/import_strings.php index f2d822f..e5c0a8d 100644 --- a/xcode/aux_scripts/import_strings.php +++ b/xcode/aux_scripts/import_strings.php @@ -46,7 +46,7 @@ 'public extension String {'.PHP_EOL; foreach ($json as $key=>$value) { $value_without_linefeed = preg_replace("/\r|\n/", " ", $value); - $ios_swift_strings .= "\t/// ".$value_without_linefeed."\n\t".'static let '.preg_replace_callback('/_(.?)/', function ($m) { return strtoupper($m[1]); }, $key).' = NSLocalizedString("'.$key.'", bundle: '.$BUNDLE.', comment: "'.$value_without_linefeed.'")'."\n".PHP_EOL; + $ios_swift_strings .= "\t/// ".$value_without_linefeed."\n\t".'static let '.preg_replace_callback('/_(.?)/', function ($m) { return strtoupper($m[1]); }, $key).' = NSLocalizedString("'.$key.'", bundle: '.$BUNDLE.', comment: "'.addslashes($value_without_linefeed).'")'."\n".PHP_EOL; } $ios_swift_strings .= '}'.PHP_EOL; echo $ios_swift_strings; From c2104468bd964f476407c57f2e3f03a94d07885e Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Wed, 4 Aug 2021 11:00:50 +0300 Subject: [PATCH 127/168] remove debug output --- xcode/aux_scripts/import_strings.php | 1 - 1 file changed, 1 deletion(-) diff --git a/xcode/aux_scripts/import_strings.php b/xcode/aux_scripts/import_strings.php index e5c0a8d..1cd20ee 100644 --- a/xcode/aux_scripts/import_strings.php +++ b/xcode/aux_scripts/import_strings.php @@ -49,7 +49,6 @@ $ios_swift_strings .= "\t/// ".$value_without_linefeed."\n\t".'static let '.preg_replace_callback('/_(.?)/', function ($m) { return strtoupper($m[1]); }, $key).' = NSLocalizedString("'.$key.'", bundle: '.$BUNDLE.', comment: "'.addslashes($value_without_linefeed).'")'."\n".PHP_EOL; } $ios_swift_strings .= '}'.PHP_EOL; - echo $ios_swift_strings; file_put_contents($LOCALIZATION_PATH.'String+Localization.swift', $ios_swift_strings); } } From 5ac9fd8232fc7234aed3ccd0b8171f47aedaf60f Mon Sep 17 00:00:00 2001 From: Dmitriy <54894715+Orlyanskiy93@users.noreply.github.com> Date: Mon, 9 Aug 2021 11:55:43 +0300 Subject: [PATCH 128/168] Update .swiftlint.yml add lazy var rule to swiftlint --- xcode/.swiftlint.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index df3de2c..15690aa 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -264,6 +264,12 @@ custom_rules: regex: 'case[^\n\(]+\([^\)]*(let|var)\s' message: "Use a let|var keyword behind parentheses" severity: warning + + lazy_var: + name: "Using lazy var" + regex: '(? Date: Mon, 9 Aug 2021 11:58:54 +0300 Subject: [PATCH 129/168] add install_env script for build phases --- xcode/aux_scripts/install_env.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 xcode/aux_scripts/install_env.sh diff --git a/xcode/aux_scripts/install_env.sh b/xcode/aux_scripts/install_env.sh new file mode 100644 index 0000000..65b8353 --- /dev/null +++ b/xcode/aux_scripts/install_env.sh @@ -0,0 +1,13 @@ +# When you run Git from the command line, it runs in the environment as set up by your Shell. +# GUI OS X apps, however, have no knowledge about your shell - and the PATH environment can be changed in many different places. +# Export our profile with path by ourselves + +function source_home_file { + file="$HOME/$1" + [[ -f "${file}" ]] && source "${file}" +} + +# Use specific exec due to Xcode has custom value of $PATH +if [ -z "$(which pmd)" ]; then + source_home_file ".bash_profile" || source_home_file ".zshrc" || true +fi \ No newline at end of file From 9ae6e92e66536c685fc1dbdef4d481fa9c73b85c Mon Sep 17 00:00:00 2001 From: Dmitriy <54894715+Orlyanskiy93@users.noreply.github.com> Date: Mon, 9 Aug 2021 12:10:27 +0300 Subject: [PATCH 130/168] Update .swiftlint.yml pr fix --- xcode/.swiftlint.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index 15690aa..3d48731 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -266,9 +266,9 @@ custom_rules: severity: warning lazy_var: - name: "Using lazy var" + name: "Lazy var access modifier" regex: '(? Date: Mon, 9 Aug 2021 12:11:51 +0300 Subject: [PATCH 131/168] Update .swiftlint.yml --- xcode/.swiftlint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index 3d48731..55e94fc 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -268,7 +268,7 @@ custom_rules: lazy_var: name: "Lazy var access modifier" regex: '(? Date: Mon, 30 Aug 2021 15:31:39 +0300 Subject: [PATCH 132/168] GIT_BRANCH environment variable handling + add some docs --- scripts/export_src.sh | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/scripts/export_src.sh b/scripts/export_src.sh index 3f48a1f..b44f4e6 100755 --- a/scripts/export_src.sh +++ b/scripts/export_src.sh @@ -1,31 +1,49 @@ #!/bin/sh +# Description: +# Creates archive with source code of multiple repositories. +# +# Parameters: +# $1 - github repository name without suffix (project name). +# $2, $3, ..., $n - repository suffixes (platforms). +# +# Optional environment variables: +# GIT_BRANCH - branch to use. Default - master. +# +# Example of usage: +# export_src.sh TestProject ios android backend +# GIT_BRANCH="develop"; ./export_src.sh TestProject ios web +# + +if [ -z "${GIT_BRANCH}" ]; then + GIT_BRANCH="master" +fi + PROJECT_NAME=$1 -SRC_FOLDER_NAME=${PROJECT_NAME}-src-$(date +%F) -SRC_DIR=./${SRC_FOLDER_NAME} +SRC_FOLDER_NAME="${PROJECT_NAME}-src-$(date +%F)" +SRC_DIR="./${SRC_FOLDER_NAME}" COMMAND_LINE_ARGUMENTS=$@ clone_platform() { - PROJECT_DIR=$1 + PROJECT_NAME=$1 PLATFORM=$2 - git clone --recurse-submodules -j8 git@github.com:TouchInstinct/${PROJECT_DIR}-${PLATFORM}.git --branch master + git clone --recurse-submodules -j8 "git@github.com:TouchInstinct/${PROJECT_NAME}-${PLATFORM}.git" --branch "${GIT_BRANCH}" } -mkdir -p ${SRC_DIR} -cd ${SRC_DIR} +mkdir -p "${SRC_DIR}" +cd "${SRC_DIR}" for argument in ${COMMAND_LINE_ARGUMENTS} do - if [ $argument != $PROJECT_NAME ] - then + if [ $argument != $PROJECT_NAME ]; then platform=${argument} # all arguments after project name treated as platforms clone_platform ${PROJECT_NAME} ${platform} fi done find . -name ".git*" -print0 | xargs -0 rm -rf -zip -r ${SRC_FOLDER_NAME}.zip . +zip -r -q ${SRC_FOLDER_NAME}.zip . open . From 8094a04ab3968af9b6672704b1c79d1370d4fc08 Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov Date: Sat, 11 Sep 2021 12:48:55 +0300 Subject: [PATCH 133/168] feat: lint only changed files --- xcode/build_phases/swiftlint.sh | 34 +++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/xcode/build_phases/swiftlint.sh b/xcode/build_phases/swiftlint.sh index 5052f54..4b58b46 100755 --- a/xcode/build_phases/swiftlint.sh +++ b/xcode/build_phases/swiftlint.sh @@ -41,7 +41,37 @@ if [ -z "${SWIFTLINT_CONFIG_PATH}" ]; then fi fi +# Xcode упадет, если будем использовать большое количество Script Input Files, +# так как просто переполнится стек - https://unix.stackexchange.com/questions/357843/setting-a-long-environment-variable-breaks-a-lot-of-commands +# Поэтому воспользуемся "скрытым" параметром Swiflint - https://github.com/realm/SwiftLint/pull/3313 +# Создадим временный файл swiftlint_files с префиксом @ и в нем уже определим список файлов +# необходимых для линтовки :) + +lint_files_path="${SRCROOT}/build_phases/swiftlint_files" + +if [ ! -z "${lint_files_path}" ]; then + > ${lint_files_path} # Если файл существует, то просто его отчистим +else + touch ${lint_files_path} # Если файла нет, то создадим его +fi + +# Проходимся по папкам, которые требуют линтовки for SOURCE_DIR in ${SOURCES_DIRS}; do - ${SWIFTLINT_EXECUTABLE} autocorrect --path ${SOURCE_DIR} --config ${SWIFTLINT_CONFIG_PATH} - ${SWIFTLINT_EXECUTABLE} --path ${SOURCE_DIR} --config ${SWIFTLINT_CONFIG_PATH} + + # Отбираем файлы, которые были изменены или созданы + source_unstaged_files=$(git diff --diff-filter=d --name-only ${SOURCE_DIR} | grep "\.swift$") + source_staged_files=$(git diff --diff-filter=d --name-only --cached ${SOURCE_DIR} | grep "\.swift$") + + if [ ! -z "${source_unstaged_files}" ]; then + echo "${source_unstaged_files}" >> ${lint_files_path} + fi + + if [ ! -z "${source_staged_files}" ]; then + echo "${source_staged_files}" >> ${lint_files_path} + fi done + +swiftlint_files_path="@${lint_files_path}" + +${SWIFTLINT_EXECUTABLE} autocorrect --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} +${SWIFTLINT_EXECUTABLE} lint --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} From e725685a9e57510ff556c1529cd0370d92381a81 Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov Date: Sat, 11 Sep 2021 13:01:10 +0300 Subject: [PATCH 134/168] refactor: add allow_zero_lintable_files to swiftlint --- xcode/.swiftlint.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index df3de2c..55c4b9e 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -115,6 +115,8 @@ identifier_name: warning_threshold: 1 +allow_zero_lintable_files: true + custom_rules: # General From 40f6d12e15794cda7a22cb6e8d3e397e35f4c913 Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov Date: Sat, 11 Sep 2021 13:21:48 +0300 Subject: [PATCH 135/168] refactor: enable --force-exclude --- xcode/build_phases/swiftlint.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xcode/build_phases/swiftlint.sh b/xcode/build_phases/swiftlint.sh index 4b58b46..eac169c 100755 --- a/xcode/build_phases/swiftlint.sh +++ b/xcode/build_phases/swiftlint.sh @@ -73,5 +73,5 @@ done swiftlint_files_path="@${lint_files_path}" -${SWIFTLINT_EXECUTABLE} autocorrect --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} -${SWIFTLINT_EXECUTABLE} lint --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} +${SWIFTLINT_EXECUTABLE} autocorrect --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} --force-exclude +${SWIFTLINT_EXECUTABLE} lint --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} --force-exclude From 088114cb5c1a8dc29e0844a98fde8a6a96b41a10 Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov Date: Sun, 12 Sep 2021 11:49:37 +0300 Subject: [PATCH 136/168] refactor: enable --use-alternative-excluding --- xcode/build_phases/swiftlint.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xcode/build_phases/swiftlint.sh b/xcode/build_phases/swiftlint.sh index eac169c..da54880 100755 --- a/xcode/build_phases/swiftlint.sh +++ b/xcode/build_phases/swiftlint.sh @@ -73,5 +73,5 @@ done swiftlint_files_path="@${lint_files_path}" -${SWIFTLINT_EXECUTABLE} autocorrect --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} --force-exclude -${SWIFTLINT_EXECUTABLE} lint --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} --force-exclude +${SWIFTLINT_EXECUTABLE} autocorrect --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} --force-exclude --use-alternative-excluding +${SWIFTLINT_EXECUTABLE} lint --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} --force-exclude --use-alternative-excluding From 5a6dd866f712b8aad850309364238f7d32bbd66f Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov Date: Mon, 13 Sep 2021 11:32:21 +0300 Subject: [PATCH 137/168] refactor: typo --- xcode/build_phases/swiftlint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/build_phases/swiftlint.sh b/xcode/build_phases/swiftlint.sh index da54880..a7c8297 100755 --- a/xcode/build_phases/swiftlint.sh +++ b/xcode/build_phases/swiftlint.sh @@ -50,7 +50,7 @@ fi lint_files_path="${SRCROOT}/build_phases/swiftlint_files" if [ ! -z "${lint_files_path}" ]; then - > ${lint_files_path} # Если файл существует, то просто его отчистим + > ${lint_files_path} # Если файл существует, то просто его очистим else touch ${lint_files_path} # Если файла нет, то создадим его fi From 9e8d08801734096a2cd46a4ea12a45925167e7e3 Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov Date: Mon, 13 Sep 2021 18:47:37 +0300 Subject: [PATCH 138/168] refactor: add FORCE_LINT arg --- xcode/build_phases/swiftlint.sh | 75 +++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 31 deletions(-) diff --git a/xcode/build_phases/swiftlint.sh b/xcode/build_phases/swiftlint.sh index a7c8297..13bf906 100755 --- a/xcode/build_phases/swiftlint.sh +++ b/xcode/build_phases/swiftlint.sh @@ -12,14 +12,19 @@ # SRCROOT - project directory. # PODS_ROOT - cocoapods installation directory (eg. ${SRCROOT}/Pods). # +# Available environment variables: +# FORCE_LINT - lint all project. +# # Optional environment variables: # SWIFTLINT_EXECUTABLE - path to swiftlint executable. # SWIFTLINT_CONFIG_PATH - path to swiftlint config. # SCRIPT_INPUT_FILE_COUNT - number of files listed in "Input files" of build phase. # SCRIPT_INPUT_FILE_{N} - file path to directory that should be checked. +# FORCE_LINT - lint all project. # # Example of usage: # swiftlint.sh +# FORCE_LINT=true; swiftlint.sh # swiftlint.sh Pods/Swiftlint/swiftlint build-scripts/xcode/.swiftlint.yml # @@ -41,37 +46,45 @@ if [ -z "${SWIFTLINT_CONFIG_PATH}" ]; then fi fi -# Xcode упадет, если будем использовать большое количество Script Input Files, -# так как просто переполнится стек - https://unix.stackexchange.com/questions/357843/setting-a-long-environment-variable-breaks-a-lot-of-commands -# Поэтому воспользуемся "скрытым" параметром Swiflint - https://github.com/realm/SwiftLint/pull/3313 -# Создадим временный файл swiftlint_files с префиксом @ и в нем уже определим список файлов -# необходимых для линтовки :) +if [ ! -z "${FORCE_LINT}" ]; then + # Если задана переменная FORCE_LINT, то проверяем все файлы проекта + for SOURCE_DIR in ${SOURCES_DIRS}; do + ${SWIFTLINT_EXECUTABLE} autocorrect --path ${SOURCE_DIR} --config ${SWIFTLINT_CONFIG_PATH} + ${SWIFTLINT_EXECUTABLE} --path ${SOURCE_DIR} --config ${SWIFTLINT_CONFIG_PATH} + done +else + # Xcode упадет, если будем использовать большое количество Script Input Files, + # так как просто переполнится стек - https://unix.stackexchange.com/questions/357843/setting-a-long-environment-variable-breaks-a-lot-of-commands + # Поэтому воспользуемся "скрытым" параметром Swiflint - https://github.com/realm/SwiftLint/pull/3313 + # Создадим временный файл swiftlint_files с префиксом @ и в нем уже определим список файлов + # необходимых для линтовки :) -lint_files_path="${SRCROOT}/build_phases/swiftlint_files" + lint_files_path="${SRCROOT}/build_phases/swiftlint_files" -if [ ! -z "${lint_files_path}" ]; then - > ${lint_files_path} # Если файл существует, то просто его очистим -else - touch ${lint_files_path} # Если файла нет, то создадим его + if [ ! -z "${lint_files_path}" ]; then + > ${lint_files_path} # Если файл существует, то просто его очистим + else + touch ${lint_files_path} # Если файла нет, то создадим его + fi + + # Проходимся по папкам, которые требуют линтовки + for SOURCE_DIR in ${SOURCES_DIRS}; do + + # Отбираем файлы, которые были изменены или созданы + source_unstaged_files=$(git diff --diff-filter=d --name-only ${SOURCE_DIR} | grep "\.swift$") + source_staged_files=$(git diff --diff-filter=d --name-only --cached ${SOURCE_DIR} | grep "\.swift$") + + if [ ! -z "${source_unstaged_files}" ]; then + echo "${source_unstaged_files}" >> ${lint_files_path} + fi + + if [ ! -z "${source_staged_files}" ]; then + echo "${source_staged_files}" >> ${lint_files_path} + fi + done + + swiftlint_files_path="@${lint_files_path}" + + ${SWIFTLINT_EXECUTABLE} autocorrect --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} --force-exclude --use-alternative-excluding + ${SWIFTLINT_EXECUTABLE} --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} --force-exclude --use-alternative-excluding fi - -# Проходимся по папкам, которые требуют линтовки -for SOURCE_DIR in ${SOURCES_DIRS}; do - - # Отбираем файлы, которые были изменены или созданы - source_unstaged_files=$(git diff --diff-filter=d --name-only ${SOURCE_DIR} | grep "\.swift$") - source_staged_files=$(git diff --diff-filter=d --name-only --cached ${SOURCE_DIR} | grep "\.swift$") - - if [ ! -z "${source_unstaged_files}" ]; then - echo "${source_unstaged_files}" >> ${lint_files_path} - fi - - if [ ! -z "${source_staged_files}" ]; then - echo "${source_staged_files}" >> ${lint_files_path} - fi -done - -swiftlint_files_path="@${lint_files_path}" - -${SWIFTLINT_EXECUTABLE} autocorrect --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} --force-exclude --use-alternative-excluding -${SWIFTLINT_EXECUTABLE} lint --path ${swiftlint_files_path} --config ${SWIFTLINT_CONFIG_PATH} --force-exclude --use-alternative-excluding From db99ec0009a2155285fd490dd03c28fb64fd9357 Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov Date: Mon, 13 Sep 2021 18:47:44 +0300 Subject: [PATCH 139/168] refactor: add gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9f1344f --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# macOS + +.DS_Store \ No newline at end of file From 494bc4886b91d1c40ec4ca87ef7630cf13cf5c8b Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov Date: Mon, 13 Sep 2021 19:10:35 +0300 Subject: [PATCH 140/168] refactor: add FORCE_LINT to fastlane --- xcode/commonFastfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index a3147d3..245e1cb 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -148,6 +148,7 @@ private_lane :buildArchive do |options| lane_name = options[:lane_name] configuration = options[:configuration] xcodeproj_path = options[:xcodeproj_path] + xcargs = "FORCE_LINT=true" # To enable linting on project without CodeLint target if configuration != "AppStore" # AppStore uses xcconfig choosen in Xcode set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodeproj_path) @@ -166,6 +167,7 @@ private_lane :buildArchive do |options| skip_package_ipa: options[:skip_package_ipa], include_symbols: options[:include_symbols] || false, include_bitcode: options[:compileBitcode] || false, + xcargs: xcargs ) end From 44d4ff9f741d6011ba368c1dca26c1d063ffe04a Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov Date: Mon, 13 Sep 2021 19:19:37 +0300 Subject: [PATCH 141/168] refactor: correct fastfile --- xcode/commonFastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 245e1cb..d2338f3 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -148,7 +148,7 @@ private_lane :buildArchive do |options| lane_name = options[:lane_name] configuration = options[:configuration] xcodeproj_path = options[:xcodeproj_path] - xcargs = "FORCE_LINT=true" # To enable linting on project without CodeLint target + xcargs = "FORCE_LINT='true'" # To enable linting on project without CodeLint target if configuration != "AppStore" # AppStore uses xcconfig choosen in Xcode set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodeproj_path) From a455072e14d6627b6e767cfbba9db23530065b5c Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov Date: Mon, 13 Sep 2021 19:26:01 +0300 Subject: [PATCH 142/168] refactor: revert xcargs --- xcode/commonFastfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index d2338f3..a3147d3 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -148,7 +148,6 @@ private_lane :buildArchive do |options| lane_name = options[:lane_name] configuration = options[:configuration] xcodeproj_path = options[:xcodeproj_path] - xcargs = "FORCE_LINT='true'" # To enable linting on project without CodeLint target if configuration != "AppStore" # AppStore uses xcconfig choosen in Xcode set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodeproj_path) @@ -167,7 +166,6 @@ private_lane :buildArchive do |options| skip_package_ipa: options[:skip_package_ipa], include_symbols: options[:include_symbols] || false, include_bitcode: options[:compileBitcode] || false, - xcargs: xcargs ) end From f98c1af7195eef0cb7af0ab20758cdb457c51de9 Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov Date: Tue, 14 Sep 2021 08:51:53 +0300 Subject: [PATCH 143/168] refactor: correct lint_files_path creation --- xcode/build_phases/swiftlint.sh | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/xcode/build_phases/swiftlint.sh b/xcode/build_phases/swiftlint.sh index 13bf906..accd774 100755 --- a/xcode/build_phases/swiftlint.sh +++ b/xcode/build_phases/swiftlint.sh @@ -61,11 +61,8 @@ else lint_files_path="${SRCROOT}/build_phases/swiftlint_files" - if [ ! -z "${lint_files_path}" ]; then - > ${lint_files_path} # Если файл существует, то просто его очистим - else - touch ${lint_files_path} # Если файла нет, то создадим его - fi + # Если файл существует, то просто его очистим, если нет - создадим + > ${lint_files_path} # Проходимся по папкам, которые требуют линтовки for SOURCE_DIR in ${SOURCES_DIRS}; do From 1678af01168af9a42edd7a2dccede2075617f13e Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov Date: Wed, 15 Sep 2021 19:29:21 +0300 Subject: [PATCH 144/168] docs: remove useless docs --- xcode/build_phases/swiftlint.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/xcode/build_phases/swiftlint.sh b/xcode/build_phases/swiftlint.sh index accd774..1437b19 100755 --- a/xcode/build_phases/swiftlint.sh +++ b/xcode/build_phases/swiftlint.sh @@ -12,9 +12,6 @@ # SRCROOT - project directory. # PODS_ROOT - cocoapods installation directory (eg. ${SRCROOT}/Pods). # -# Available environment variables: -# FORCE_LINT - lint all project. -# # Optional environment variables: # SWIFTLINT_EXECUTABLE - path to swiftlint executable. # SWIFTLINT_CONFIG_PATH - path to swiftlint config. From b9429f8aaff2290835f3c7c900797cf709baf119 Mon Sep 17 00:00:00 2001 From: Vlad Suhomlinov Date: Thu, 23 Sep 2021 19:31:39 +0300 Subject: [PATCH 145/168] feat: remove lazy_var --- xcode/.swiftlint.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/xcode/.swiftlint.yml b/xcode/.swiftlint.yml index 23154c0..55c4b9e 100644 --- a/xcode/.swiftlint.yml +++ b/xcode/.swiftlint.yml @@ -266,12 +266,6 @@ custom_rules: regex: 'case[^\n\(]+\([^\)]*(let|var)\s' message: "Use a let|var keyword behind parentheses" severity: warning - - lazy_var: - name: "Lazy var access modifier" - regex: '(? Date: Tue, 12 Oct 2021 15:49:26 +0300 Subject: [PATCH 146/168] Added setting xcode version --- xcode/commonFastfile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index a3147d3..494465b 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -148,11 +148,16 @@ private_lane :buildArchive do |options| lane_name = options[:lane_name] configuration = options[:configuration] xcodeproj_path = options[:xcodeproj_path] + xcode_version = options[:xcodeVersion] if configuration != "AppStore" # AppStore uses xcconfig choosen in Xcode set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodeproj_path) end + if !xcode_version.nil? + ensure_xcode_version(version: xcode_version) + end + gym( clean: true, workspace: options[:workspace], From ecc34d227ad4b999e38caa87a68f30c2af425095 Mon Sep 17 00:00:00 2001 From: Alexander Rutsman Date: Tue, 12 Oct 2021 18:42:00 +0300 Subject: [PATCH 147/168] Added default xcode version --- xcode/commonFastfile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 494465b..4e36946 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -148,15 +148,16 @@ private_lane :buildArchive do |options| lane_name = options[:lane_name] configuration = options[:configuration] xcodeproj_path = options[:xcodeproj_path] - xcode_version = options[:xcodeVersion] + default_xcode_version = sh("xcodebuild -version") # Xcode Build version + .split(" ")[1] + + xcode_version = options[:xcodeVersion] || default_xcode_version if configuration != "AppStore" # AppStore uses xcconfig choosen in Xcode set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodeproj_path) end - if !xcode_version.nil? - ensure_xcode_version(version: xcode_version) - end + xcversion(version: xcode_version) gym( clean: true, From b319b97522fed94a2efe8c24b2309baa7207d422 Mon Sep 17 00:00:00 2001 From: Alexander Rutsman Date: Tue, 12 Oct 2021 19:09:36 +0300 Subject: [PATCH 148/168] Added default xcode version --- xcode/commonFastfile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 4e36946..c37d1ca 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -148,16 +148,19 @@ private_lane :buildArchive do |options| lane_name = options[:lane_name] configuration = options[:configuration] xcodeproj_path = options[:xcodeproj_path] + xcode_version = options[:xcodeVersion] default_xcode_version = sh("xcodebuild -version") # Xcode Build version .split(" ")[1] - xcode_version = options[:xcodeVersion] || default_xcode_version - if configuration != "AppStore" # AppStore uses xcconfig choosen in Xcode set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodeproj_path) end - xcversion(version: xcode_version) + if xcode_version.nil? + xcversion(version: default_xcode_version) + else + xcversion(version: xcode_version) + end gym( clean: true, From 7061bad2ec94a725da5cf302b27928eaa89e29a9 Mon Sep 17 00:00:00 2001 From: Alexander Rutsman Date: Wed, 20 Oct 2021 16:01:13 +0300 Subject: [PATCH 149/168] Added search for the newest version --- xcode/commonFastfile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index c37d1ca..1930d50 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -149,8 +149,11 @@ private_lane :buildArchive do |options| configuration = options[:configuration] xcodeproj_path = options[:xcodeproj_path] xcode_version = options[:xcodeVersion] - default_xcode_version = sh("xcodebuild -version") # Xcode Build version - .split(" ")[1] + + default_xcode_version = sh("system_profiler -json SPDeveloperToolsDataType | jq -r '.SPDeveloperToolsDataType # getting json with version data + |=sort_by(.spdevtools_version) # sort by increasing the version of xcode + |.SPDeveloperToolsDataType[-1].spdevtools_version'") # take the largest version in format: "13.0 (13A5212g)" + .split(" ")[0] # take version number if configuration != "AppStore" # AppStore uses xcconfig choosen in Xcode set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodeproj_path) @@ -469,4 +472,4 @@ def run_code_generation_phase_if_needed(options) if File.exists? code_generation_script_path sh(code_generation_script_path, options[:workspace]) end -end +end \ No newline at end of file From e1e15d619e126483391ec1965075bb7447ebeb71 Mon Sep 17 00:00:00 2001 From: Alexander Rutsman Date: Wed, 27 Oct 2021 11:20:34 +0300 Subject: [PATCH 150/168] Added search for the newest version on ruby --- xcode/commonFastfile | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 1930d50..607dfc3 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -141,6 +141,9 @@ private_lane :buildConfiguration do |options| end private_lane :buildArchive do |options| + + require 'json' + icloudEnvironment = options[:iCloudContainerEnvironment] || "" exportOptions = icloudEnvironment.to_s.empty? ? {} : {iCloudContainerEnvironment: icloudEnvironment} exportOptions[:compileBitcode] = options[:compileBitcode] || false @@ -150,17 +153,19 @@ private_lane :buildArchive do |options| xcodeproj_path = options[:xcodeproj_path] xcode_version = options[:xcodeVersion] - default_xcode_version = sh("system_profiler -json SPDeveloperToolsDataType | jq -r '.SPDeveloperToolsDataType # getting json with version data - |=sort_by(.spdevtools_version) # sort by increasing the version of xcode - |.SPDeveloperToolsDataType[-1].spdevtools_version'") # take the largest version in format: "13.0 (13A5212g)" - .split(" ")[0] # take version number + cmd = 'system_profiler -json SPDeveloperToolsDataType' + cmd_result = `#{cmd}` + spdeveloperToolsDataType = JSON.parse(cmd_result)['SPDeveloperToolsDataType'] + sortedSPDeveloperToolsDataType = spdeveloperToolsDataType.sort_by { |hash| hash['spdevtools_version'].split(' ').first.to_i } # sort by increasing the version of xcode + default_xcode_version = sortedSPDeveloperToolsDataType.last['spdevtools_version'] # take the largest version in format: "13.0 (13A5212g)" + default_xcode_version_number = default_xcode_version.split(' ').first # take version number if configuration != "AppStore" # AppStore uses xcconfig choosen in Xcode set_xcconfig_for_configuration_of_project(lane_name, configuration, xcodeproj_path) end if xcode_version.nil? - xcversion(version: default_xcode_version) + xcversion(version: default_xcode_version_number) else xcversion(version: xcode_version) end From e1290036ffd60e562aac55df083aa991ff41d03e Mon Sep 17 00:00:00 2001 From: Timur Kayumov Date: Wed, 3 Nov 2021 12:57:37 +0200 Subject: [PATCH 151/168] Fix file paths when collect changes for linting --- xcode/build_phases/swiftlint.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/xcode/build_phases/swiftlint.sh b/xcode/build_phases/swiftlint.sh index 1437b19..cdefbef 100755 --- a/xcode/build_phases/swiftlint.sh +++ b/xcode/build_phases/swiftlint.sh @@ -63,10 +63,12 @@ else # Проходимся по папкам, которые требуют линтовки for SOURCE_DIR in ${SOURCES_DIRS}; do + # Путь к папке репозитория + path_prefix="`git rev-parse --show-toplevel`/" # Отбираем файлы, которые были изменены или созданы - source_unstaged_files=$(git diff --diff-filter=d --name-only ${SOURCE_DIR} | grep "\.swift$") - source_staged_files=$(git diff --diff-filter=d --name-only --cached ${SOURCE_DIR} | grep "\.swift$") + source_unstaged_files=$(git diff --diff-filter=d --name-only --line-prefix=${path_prefix} | grep "\.swift$") + source_staged_files=$(git diff --diff-filter=d --name-only --line-prefix=${path_prefix} --cached ${SOURCE_DIR} | grep "\.swift$") if [ ! -z "${source_unstaged_files}" ]; then echo "${source_unstaged_files}" >> ${lint_files_path} From c2259b12b201b31bc57d64821d0bbaac9150ff7b Mon Sep 17 00:00:00 2001 From: Timur Kayumov Date: Wed, 3 Nov 2021 13:13:00 +0200 Subject: [PATCH 152/168] Revert path argument --- xcode/build_phases/swiftlint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/build_phases/swiftlint.sh b/xcode/build_phases/swiftlint.sh index cdefbef..887866a 100755 --- a/xcode/build_phases/swiftlint.sh +++ b/xcode/build_phases/swiftlint.sh @@ -67,7 +67,7 @@ else path_prefix="`git rev-parse --show-toplevel`/" # Отбираем файлы, которые были изменены или созданы - source_unstaged_files=$(git diff --diff-filter=d --name-only --line-prefix=${path_prefix} | grep "\.swift$") + source_unstaged_files=$(git diff --diff-filter=d --name-only --line-prefix=${path_prefix} ${SOURCE_DIR} | grep "\.swift$") source_staged_files=$(git diff --diff-filter=d --name-only --line-prefix=${path_prefix} --cached ${SOURCE_DIR} | grep "\.swift$") if [ ! -z "${source_unstaged_files}" ]; then From 0fc2eb03c6b94659263349d3f3d7d13bdfb5bde0 Mon Sep 17 00:00:00 2001 From: Aleksandr Shushkov Date: Wed, 1 Dec 2021 15:45:13 +0300 Subject: [PATCH 153/168] Add user defined enviroment for copy-paste decetion script --- xcode/aux_scripts/install_env.sh | 14 +++++++++++++- xcode/build_phases/copy_paste_detection.sh | 6 ++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/xcode/aux_scripts/install_env.sh b/xcode/aux_scripts/install_env.sh index 65b8353..ce6c803 100644 --- a/xcode/aux_scripts/install_env.sh +++ b/xcode/aux_scripts/install_env.sh @@ -1,3 +1,13 @@ +# Description: +# Add user defined enviroment if programm not found +# +# Parameters: +# $1 - programm +# +# Examples of usage: +# . install_env.sh pmd +# + # When you run Git from the command line, it runs in the environment as set up by your Shell. # GUI OS X apps, however, have no knowledge about your shell - and the PATH environment can be changed in many different places. # Export our profile with path by ourselves @@ -8,6 +18,8 @@ function source_home_file { } # Use specific exec due to Xcode has custom value of $PATH -if [ -z "$(which pmd)" ]; then +if [ -z "$(which $1)" ]; then source_home_file ".bash_profile" || source_home_file ".zshrc" || true + + echo "User defined enviroment has been set" fi \ No newline at end of file diff --git a/xcode/build_phases/copy_paste_detection.sh b/xcode/build_phases/copy_paste_detection.sh index 653b093..e29cda1 100755 --- a/xcode/build_phases/copy_paste_detection.sh +++ b/xcode/build_phases/copy_paste_detection.sh @@ -24,6 +24,12 @@ readonly EXIT_SUCCESS=0 readonly EXIT_FAILURE=1 +if ! which pmd >/dev/null; then + echo "pmd is not found, trying add user defined enviroment" + + . ${SCRIPT_DIR}/../aux_scripts/install_env.sh pmd +fi + if which pmd >/dev/null; then readonly REPORTS_DIR="${PROJECT_DIR}/code-quality-reports" From c94fb4496648343fc98a8e822e1b558d30710631 Mon Sep 17 00:00:00 2001 From: Aleksandr Shushkov Date: Wed, 1 Dec 2021 15:59:42 +0300 Subject: [PATCH 154/168] Fix PR issues from @petropavel13 --- xcode/aux_scripts/install_env.sh | 2 +- xcode/build_phases/copy_paste_detection.sh | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/xcode/aux_scripts/install_env.sh b/xcode/aux_scripts/install_env.sh index ce6c803..d1c1fc0 100644 --- a/xcode/aux_scripts/install_env.sh +++ b/xcode/aux_scripts/install_env.sh @@ -21,5 +21,5 @@ function source_home_file { if [ -z "$(which $1)" ]; then source_home_file ".bash_profile" || source_home_file ".zshrc" || true - echo "User defined enviroment has been set" + echo "User defined enviroment has been set for ${1}" fi \ No newline at end of file diff --git a/xcode/build_phases/copy_paste_detection.sh b/xcode/build_phases/copy_paste_detection.sh index e29cda1..3fe30c1 100755 --- a/xcode/build_phases/copy_paste_detection.sh +++ b/xcode/build_phases/copy_paste_detection.sh @@ -24,11 +24,7 @@ readonly EXIT_SUCCESS=0 readonly EXIT_FAILURE=1 -if ! which pmd >/dev/null; then - echo "pmd is not found, trying add user defined enviroment" - - . ${SCRIPT_DIR}/../aux_scripts/install_env.sh pmd -fi +. ${SCRIPT_DIR}/../aux_scripts/install_env.sh pmd if which pmd >/dev/null; then readonly REPORTS_DIR="${PROJECT_DIR}/code-quality-reports" From 5f009524a38b9d69768d062d150d6258f92d5d06 Mon Sep 17 00:00:00 2001 From: Aleksandr Shushkov Date: Mon, 6 Dec 2021 16:08:24 +0300 Subject: [PATCH 155/168] Add user enviroment for localization script --- xcode/build_phases/localization.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xcode/build_phases/localization.sh b/xcode/build_phases/localization.sh index dea12e3..e277f58 100644 --- a/xcode/build_phases/localization.sh +++ b/xcode/build_phases/localization.sh @@ -19,6 +19,8 @@ # . localization.sh common/strings Resources/Localization/ .main # +. ${SCRIPT_DIR}/../aux_scripts/install_env.sh php + STRINGS_FOLDER=${1:-"common/strings"} LOCALIZATION_PATH=${2:-"${PRODUCT_NAME}/Resources/Localization/"} BUNDLE=${3:-".main"} From 6b21a9845a411d428101b32bb5d3698997608a97 Mon Sep 17 00:00:00 2001 From: Aleksandr Shushkov Date: Mon, 6 Dec 2021 16:13:46 +0300 Subject: [PATCH 156/168] Add php installation check --- xcode/build_phases/localization.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/xcode/build_phases/localization.sh b/xcode/build_phases/localization.sh index e277f58..7d6b3b2 100644 --- a/xcode/build_phases/localization.sh +++ b/xcode/build_phases/localization.sh @@ -35,4 +35,10 @@ if ! [ -e "${STRINGS_FOLDER}" ]; then exit 1 fi -php ${SCRIPT_DIR}/../aux_scripts/import_strings.php ${LOCALIZATION_PATH} ${STRINGS_FOLDER} ${BUNDLE} +if which php >/dev/null; then + php ${SCRIPT_DIR}/../aux_scripts/import_strings.php ${LOCALIZATION_PATH} ${STRINGS_FOLDER} ${BUNDLE} +else + echo "warning: php not installed, install using 'brew install php'" + + exit ${EXIT_FAILURE} +fi \ No newline at end of file From 1db4cfc771f8c077e029371a493c6c1e3af13c0e Mon Sep 17 00:00:00 2001 From: Aleksandr Shushkov Date: Mon, 6 Dec 2021 16:18:04 +0300 Subject: [PATCH 157/168] Fix identation --- xcode/build_phases/localization.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xcode/build_phases/localization.sh b/xcode/build_phases/localization.sh index 7d6b3b2..0c75ebe 100644 --- a/xcode/build_phases/localization.sh +++ b/xcode/build_phases/localization.sh @@ -38,7 +38,7 @@ fi if which php >/dev/null; then php ${SCRIPT_DIR}/../aux_scripts/import_strings.php ${LOCALIZATION_PATH} ${STRINGS_FOLDER} ${BUNDLE} else - echo "warning: php not installed, install using 'brew install php'" + echo "warning: php not installed, install using 'brew install php'" - exit ${EXIT_FAILURE} + exit ${EXIT_FAILURE} fi \ No newline at end of file From 22abe5a7925437664cb3c00f6c01b8d02ccaede4 Mon Sep 17 00:00:00 2001 From: Aleksandr Shushkov Date: Mon, 6 Dec 2021 16:19:44 +0300 Subject: [PATCH 158/168] Add failure exit code --- xcode/build_phases/localization.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/xcode/build_phases/localization.sh b/xcode/build_phases/localization.sh index 0c75ebe..3229498 100644 --- a/xcode/build_phases/localization.sh +++ b/xcode/build_phases/localization.sh @@ -19,6 +19,9 @@ # . localization.sh common/strings Resources/Localization/ .main # +readonly EXIT_SUCCESS=0 +readonly EXIT_FAILURE=1 + . ${SCRIPT_DIR}/../aux_scripts/install_env.sh php STRINGS_FOLDER=${1:-"common/strings"} From 2ec3289b5b9d4d056f71520f24b0688dbb3ba3e4 Mon Sep 17 00:00:00 2001 From: Aleksandr Shushkov Date: Mon, 6 Dec 2021 17:37:09 +0300 Subject: [PATCH 159/168] Fix PR issues from @petropavel13 --- xcode/build_phases/localization.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xcode/build_phases/localization.sh b/xcode/build_phases/localization.sh index 3229498..1b3d6e8 100644 --- a/xcode/build_phases/localization.sh +++ b/xcode/build_phases/localization.sh @@ -30,12 +30,12 @@ BUNDLE=${3:-".main"} if ! [ -e ${LOCALIZATION_PATH} ]; then echo "${LOCALIZATION_PATH} path does not exist. Add these folders and try again." - exit 1 + exit ${EXIT_FAILURE} fi if ! [ -e "${STRINGS_FOLDER}" ]; then echo "${STRINGS_FOLDER} path does not exist. Submodule with strings should be named common and contain strings folder." - exit 1 + exit ${EXIT_FAILURE} fi if which php >/dev/null; then From 514524526617d686e9b8781ed4b9473e75f02911 Mon Sep 17 00:00:00 2001 From: Aleksandr Shushkov Date: Mon, 6 Dec 2021 20:52:59 +0300 Subject: [PATCH 160/168] Fix executes only export commands --- xcode/aux_scripts/install_env.sh | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/xcode/aux_scripts/install_env.sh b/xcode/aux_scripts/install_env.sh index d1c1fc0..c37fdaa 100644 --- a/xcode/aux_scripts/install_env.sh +++ b/xcode/aux_scripts/install_env.sh @@ -1,3 +1,5 @@ +#!/bin/sh + # Description: # Add user defined enviroment if programm not found # @@ -14,7 +16,21 @@ function source_home_file { file="$HOME/$1" - [[ -f "${file}" ]] && source "${file}" + + #echo $file + + if [[ -f "${file}" ]]; then + paathes="$(cat "${file}" | grep "^export PATH=")" + + while read paath + do + eval "$paath" + done <<< "$paathes" + else + return 1 + fi + + return 0 } # Use specific exec due to Xcode has custom value of $PATH From d7acbb0080aec1c32f233780f4fa48976b548b8b Mon Sep 17 00:00:00 2001 From: Aleksandr Shushkov Date: Mon, 6 Dec 2021 20:55:16 +0300 Subject: [PATCH 161/168] Fix variable names --- xcode/aux_scripts/install_env.sh | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/xcode/aux_scripts/install_env.sh b/xcode/aux_scripts/install_env.sh index c37fdaa..8f4c6ef 100644 --- a/xcode/aux_scripts/install_env.sh +++ b/xcode/aux_scripts/install_env.sh @@ -17,15 +17,13 @@ function source_home_file { file="$HOME/$1" - #echo $file - if [[ -f "${file}" ]]; then - paathes="$(cat "${file}" | grep "^export PATH=")" + export_commands="$(cat "${file}" | grep "^export PATH=")" - while read paath + while read export_command do - eval "$paath" - done <<< "$paathes" + eval "$export_command" + done <<< "$export_commands" else return 1 fi From d96c126fe2615d6b7469daf6542a87aeb1803beb Mon Sep 17 00:00:00 2001 From: Aleksandr Shushkov Date: Mon, 6 Dec 2021 21:15:47 +0300 Subject: [PATCH 162/168] Fix adding all paths --- xcode/aux_scripts/install_env.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/xcode/aux_scripts/install_env.sh b/xcode/aux_scripts/install_env.sh index 8f4c6ef..2b6feec 100644 --- a/xcode/aux_scripts/install_env.sh +++ b/xcode/aux_scripts/install_env.sh @@ -24,11 +24,9 @@ function source_home_file { do eval "$export_command" done <<< "$export_commands" - else - return 1 fi - return 0 + return 1 } # Use specific exec due to Xcode has custom value of $PATH From 8991f8c2b81cd7f10f800268d0790a6f3b6feb97 Mon Sep 17 00:00:00 2001 From: Aleksandr Shushkov Date: Tue, 7 Dec 2021 16:05:29 +0300 Subject: [PATCH 163/168] Fix PR issues from @petropavel13 --- xcode/aux_scripts/install_env.sh | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/xcode/aux_scripts/install_env.sh b/xcode/aux_scripts/install_env.sh index 2b6feec..379c640 100644 --- a/xcode/aux_scripts/install_env.sh +++ b/xcode/aux_scripts/install_env.sh @@ -18,12 +18,14 @@ function source_home_file { file="$HOME/$1" if [[ -f "${file}" ]]; then - export_commands="$(cat "${file}" | grep "^export PATH=")" + if ! source "${file}"; then + export_commands="$(cat "${file}" | grep "^export PATH=")" - while read export_command - do - eval "$export_command" - done <<< "$export_commands" + while read export_command + do + eval "$export_command" + done <<< "$export_commands" + fi fi return 1 From 3fd44c3bbd56d78fae708782b5823b6bf3cca555 Mon Sep 17 00:00:00 2001 From: Grigorii Date: Wed, 8 Dec 2021 17:57:07 +0300 Subject: [PATCH 164/168] Deleted detekt.UseDataClass rule --- static_analysis_configs/detekt-config.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/static_analysis_configs/detekt-config.yml b/static_analysis_configs/detekt-config.yml index 5ea4cce..8a6b3e4 100644 --- a/static_analysis_configs/detekt-config.yml +++ b/static_analysis_configs/detekt-config.yml @@ -387,9 +387,6 @@ style: UnusedPrivateMember: active: true allowedNames: "(_|ignored|expected|serialVersionUID)" - UseDataClass: - active: true - excludeAnnotatedClasses: "" UtilityClassWithPublicConstructor: active: false VarCouldBeVal: From 9dad6d730c8d6adbca697575cfd6875111a3f535 Mon Sep 17 00:00:00 2001 From: Aleksandr Shushkov Date: Sun, 19 Dec 2021 19:59:17 +0300 Subject: [PATCH 165/168] Add .zprofile exporting --- xcode/aux_scripts/install_env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/aux_scripts/install_env.sh b/xcode/aux_scripts/install_env.sh index 379c640..59b0a2f 100644 --- a/xcode/aux_scripts/install_env.sh +++ b/xcode/aux_scripts/install_env.sh @@ -33,7 +33,7 @@ function source_home_file { # Use specific exec due to Xcode has custom value of $PATH if [ -z "$(which $1)" ]; then - source_home_file ".bash_profile" || source_home_file ".zshrc" || true + source_home_file ".bash_profile" || source_home_file ".zshrc" || source_home_file ".zprofile" || true echo "User defined enviroment has been set for ${1}" fi \ No newline at end of file From a2f193cd866d11e47ec962be37fbde5918b61248 Mon Sep 17 00:00:00 2001 From: Vladimir Makarov Date: Wed, 12 Jan 2022 18:23:25 +0500 Subject: [PATCH 166/168] Change appName property --- xcode/commonFastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 5e39d9f..f8a09b4 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -113,7 +113,7 @@ private_lane :buildConfiguration do |options| if is_ci increment_build_number_in_xcodeproj( build_number: options[:buildNumber], - xcodeproj: "./#{appName}.xcodeproj" + xcodeproj: "./#{options[:appName]}.xcodeproj" ) end From 66ecde9ad17f6f0945f20cbda348d743af7b0f60 Mon Sep 17 00:00:00 2001 From: Vladimir Makarov Date: Wed, 12 Jan 2022 19:07:02 +0500 Subject: [PATCH 167/168] Configuration Type Prefix added --- xcode/commonFastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index f8a09b4..66ddd35 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -407,7 +407,7 @@ def get_configuration_for_type(type) end def get_google_services_plist_path(app_target_folder_name, configuration_type) - File.expand_path "../#{app_target_folder_name}/Resources/GoogleService-Info.plist" + File.expand_path "../#{app_target_folder_name}/Resources/#{configuration_type.prefix}-GoogleService-Info.plist" end def generate_enabled_features_extension_if_needed(options) From 4dfd614140b86ff6698e6086d3cdd6e21ebcc3e2 Mon Sep 17 00:00:00 2001 From: Vladimir Makarov Date: Tue, 25 Jan 2022 17:35:41 +0500 Subject: [PATCH 168/168] VUZ | Increment build number in xcodeproj target added --- xcode/commonFastfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xcode/commonFastfile b/xcode/commonFastfile index 66ddd35..676c031 100644 --- a/xcode/commonFastfile +++ b/xcode/commonFastfile @@ -113,7 +113,8 @@ private_lane :buildConfiguration do |options| if is_ci increment_build_number_in_xcodeproj( build_number: options[:buildNumber], - xcodeproj: "./#{options[:appName]}.xcodeproj" + xcodeproj: "./#{options[:appName]}.xcodeproj", + target: options[:appName] ) end