/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * license agreements; and to You under the Apache License, version 2.0:
 *
 *   https://www.apache.org/licenses/LICENSE-2.0
 *
 * This file is part of the Apache Pekko project, which was derived from Akka.
 */

pluginManagement {
  repositories {
    mavenLocal()
    mavenCentral()
  }
  plugins {
    id 'org.apache.pekko.grpc.gradle' version "${System.getProperty('pekko.grpc.project.version')}"
  }
}

if (!System.getProperty('pekko.grpc.project.version')) {
  throw new GradleException("System property `pekko.grpc.project.version` is not provided. Use -Dpekko.grpc.project.version=\$VERSION.")
}
