import org.ajoberstar.grgit.Grgit

buildscript {
  ext {
    composeVersion = '1.0.1'
    kotlinVersion = '1.5.21'
    daggerVersion = '2.38.1'
  }

  repositories {
    google()
    gradlePluginPortal()
  }
  dependencies {
    classpath 'org.ajoberstar:grgit:2.3.0'
    classpath 'com.android.tools.build:gradle:7.0.1'
    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.14.2'
    classpath 'org.jetbrains.dokka:dokka-gradle-plugin:1.5.0'
  }
}

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

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

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