#
# Copyright 2020 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# Turn on parallel compilation, caching and on-demand configuration
org.gradle.configureondemand=true
org.gradle.caching=true
org.gradle.parallel=true

# Declare we support AndroidX
android.useAndroidX=true

# Increase memory
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=2048m -XX:+HeapDumpOnOutOfMemoryError

# Required to publish to Nexus (see https://github.com/gradle/gradle/issues/11308)
systemProp.org.gradle.internal.publish.checksums.insecure=true

# Increase timeout when pushing to Sonatype (otherwise we get timeouts)
systemProp.org.gradle.internal.http.socketTimeout=120000

GROUP=com.google.accompanist
# !! No longer need to update this manually when using a Compose SNAPSHOT
VERSION_NAME=0.34.0

POM_DESCRIPTION=Utilities for Jetpack Compose

POM_URL=https://github.com/google/accompanist/
POM_SCM_URL=https://github.com/google/accompanist/
POM_SCM_CONNECTION=scm:git:git://github.com/google/accompanist.git
POM_SCM_DEV_CONNECTION=scm:git:git://github.com/google/accompanist.git

POM_LICENCE_NAME=The Apache Software License, Version 2.0
POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
POM_LICENCE_DIST=repo

POM_DEVELOPER_ID=google
POM_DEVELOPER_NAME=Google

SONATYPE_HOST=DEFAULT
RELEASE_SIGNING_ENABLED=true
