import org.ajoberstar.grgit.Grgit

buildscript {
  ext {
    coroutinesVersion = '1.5.2'
    coreVersion = '1.6.0'
    appcompatVersion = '1.3.1'
    activityVersion = '1.3.1'
    lifecycleVersion = '2.3.1'
    composeVersion = '1.0.3'
    kotlinVersion = '1.5.30'
    daggerVersion = '2.38.1'
    awsVersion = '2.8.3'
    mockitoVersion = '3.12.4'
    robolectricVersion = '4.6.1'
    retrofitVersion = '2.9.0'
    materialVersion = '1.4.0'
    epoxyVersion = '4.6.4'
    junitVersion = '4.13.2'
    extJunitVersion = '1.1.3'
    espressoVersion = '3.3.0'
    startupVersion = '1.2.0-alpha01'
  }

  repositories {
    google()
    gradlePluginPortal()
  }
  dependencies {
    classpath 'org.ajoberstar:grgit:2.3.0'
    classpath 'com.android.tools.build:gradle:7.0.4'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
    classpath "net.ltgt.gradle:gradle-errorprone-plugin:2.0.2"
    classpath 'com.vanniktech:gradle-maven-publish-plugin:0.18.0'
    classpath 'org.jetbrains.dokka:dokka-gradle-plugin:1.5.30'
  }
}

allprojects {
  repositories {
    google()
    mavenCentral()
    maven { url "https://jitpack.io" }
  }
}

ext {
  git = Grgit.open(currentDir: project.rootDir)
  gitSha = git.head().id
  gitBranch = git.branch.current().name
}

task clean(type: Delete) {
  delete rootProject.buildDir
}
