Автоматизации и инфраструктура вместо рутины и бойлерплейта
Материалы к докладу на митап red_mad_robot 15.12.2022
1. Качество кода
- Наш кодстайл Kotlin
- EditorConfig - шарим настройки форматирования между всеми разработчиками
{ | |
"latest": "1.20.2", | |
"versions": { | |
"1.20.2": "https://api.papermc.io/v2/projects/paper/versions/1.20.2/builds/309/downloads/paper-1.20.2-309.jar", | |
"1.20.1": "https://api.papermc.io/v2/projects/paper/versions/1.20.1/builds/196/downloads/paper-1.20.1-196.jar", | |
"1.20": "https://api.papermc.io/v2/projects/paper/versions/1.20/builds/17/downloads/paper-1.20-17.jar", | |
"1.19.4": "https://api.papermc.io/v2/projects/paper/versions/1.19.4/builds/550/downloads/paper-1.19.4-550.jar", | |
"1.19.3": "https://api.papermc.io/v2/projects/paper/versions/1.19.3/builds/448/downloads/paper-1.19.3-448.jar", | |
"1.19.2": "https://api.papermc.io/v2/projects/paper/versions/1.19.2/builds/307/downloads/paper-1.19.2-307.jar", | |
"1.19.1": "https://api.papermc.io/v2/projects/paper/versions/1.19.1/builds/111/downloads/paper-1.19.1-111.jar", |
Материалы к докладу на митап red_mad_robot 15.12.2022
root = true | |
[*] | |
charset = utf-8 | |
end_of_line = lf | |
indent_size = 4 | |
indent_style = space | |
insert_final_newline = true | |
trim_trailing_whitespace = true | |
max_line_length = 120 |
package com.example.build | |
import org.gradle.api.DefaultTask | |
import org.gradle.api.file.RegularFileProperty | |
import org.gradle.api.tasks.InputFile | |
import org.gradle.api.tasks.OutputFile | |
import org.gradle.api.tasks.TaskAction | |
/** Adds `android:debuggable="true"` to the manifest. */ | |
abstract class MakeDebuggableTask : DefaultTask() { |
import androidx.datastore.core.DataStore | |
import androidx.datastore.core.Serializer | |
import java.io.InputStream | |
import java.io.OutputStream | |
abstract class NullableSerializer<T : Any> : Serializer<T?> { | |
override val defaultValue: T? = null | |
final override suspend fun readFrom(input: InputStream): T? { |
import androidx.datastore.core.DataStore | |
import androidx.datastore.core.Serializer | |
import kotlinx.coroutines.flow.first | |
import kotlinx.serialization.json.Json | |
import kotlinx.serialization.json.decodeFromStream | |
import kotlinx.serialization.json.encodeToStream | |
import java.io.InputStream | |
import java.io.OutputStream | |
/** |
package retrofit2.adapter.rxjava2 | |
import io.reactivex.Completable | |
import io.reactivex.Flowable | |
import io.reactivex.Maybe | |
import io.reactivex.Observable | |
import io.reactivex.Single | |
import retrofit2.Call | |
import retrofit2.CallAdapter | |
import retrofit2.Retrofit |
package io.example | |
import kotlinx.serialization.Serializable | |
import kotlinx.serialization.json.Json | |
import kotlinx.serialization.json.decodeFromStream | |
import okhttp3.Interceptor | |
import okhttp3.Response | |
import retrofit2.HttpException | |
import retrofit2.Invocation | |
import java.io.IOException |
#!/usr/bin/env bash | |
# | |
# Script for APK and AAB signing. | |
# | |
# Usage: ./sign-app.sh <format> <path_to_app> <keystore_base64> <properties_base64> | |
# | |
# format - should be one of: apk or aab | |
# path_to_app - path to apk/aab file or '--auto' to automatically detect path | |
# keystore_base64 - Base64 encoded keystore file | |
# properties_base64 - Base64 encoded properties file. This file should contain: |
import android.app.Activity | |
import android.app.Application | |
import android.content.ComponentCallbacks | |
import android.content.Context | |
import android.content.res.Configuration | |
import android.os.Build | |
import android.os.Bundle | |
import java.util.Locale | |
private const val LANGUAGE_RU = "ru" |