/*
 *  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you 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
 *
 *    http://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.
 */
import com.github.jk1.license.filter.LicenseBundleNormalizer

import java.time.Duration

plugins {
    id 'idea'
    id 'geb.coordinates'
    alias(libs.plugins.nexusPublish)
    alias(libs.plugins.asl2)
    id 'geb.source-distribution'
    id 'com.github.jk1.dependency-license-report' version '2.9'
    id 'org.nosphere.apache.rat'
    id 'com.github.ben-manes.versions' version '0.52.0'
}

repositories {
    mavenCentral()
}

configurations {
    site
}

dependencies {
    site project(path: 'doc:site', configuration: 'distribution')
}

licenseReport {
    // ASF policy mostly cares about compileClasspath but we'll also check the handful of additional dependencies for runtime
    configurations = ['runtimeClasspath']
    allowedLicensesFile = new File("$projectDir/gradle/allowed-licenses.json")
    filters = [new LicenseBundleNormalizer(bundlePath: "$projectDir/gradle/license-normalizer-bundle.json")]
    excludes = ['io.netty:netty-tcnative'] // Apache2 license but metadata shows null license
}

nexusPublishing {
    repositories {
        sonatype {
            stagingProfileId = "c1802e5c2fe49"
            username.set(providers.gradleProperty("sonatypeOssUsername"))
            password.set(providers.gradleProperty("sonatypeOssPassword"))
        }
    }

    clientTimeout = Duration.ofSeconds(300)
    connectTimeout = Duration.ofSeconds(60)

    transitionCheckOptions {
        maxRetries.set(60)
        delayBetween.set(Duration.ofMillis(3000))
    }
}

extensions.findByName("develocity")?.buildScan {
    termsOfUseUrl = 'https://gradle.com/terms-of-service'
    termsOfUseAgree = 'yes'
}

tasks.register("stage", Sync) {
    from configurations.site
    into 'deploy'
}

idea {
    project {
        jdkName = "11"
    }
}

tasks.named('rat') {
    excludes = [
        '.asf.yaml', // ASF metadata for github integration excluded from src zip
        '**/build/**',
        '**/.gradle/**', '**/wrapper/**', 'gradlew*',  // gradle wrapper files excluded from src zip
        'licenses/**',
        'notices/**',
        'module/**', // has it's own rat checks
        '**/jquery-1.4.2.min.js', // MIT license as per NOTICE/LICENSE files (TODO)
        '**/META-INF/groovy/*',
        '**/generatedResources/**',
        'Procfile', // TODO is this still needed?
        '.tm_properties', // TODO is this still needed?
        'doc', // TODO re-enable checking for docs
        'logo.svg', // Logo svg
        'out/**', '*.ipr', '**/*.iml', '*.iws', '.idea/**', // Intellij files
        'bootstrap/settings.gradle', // empty file
    ]
}

def UNSTABLE = /^([\d.-]+(alpha|beta|rc|m)[\d.-]+)$/
// ignore non-stable releases
tasks.named("dependencyUpdates")?.configure {
    gradleReleaseChannel = 'current'
    rejectVersionIf {
        !(it.currentVersion.toLowerCase() ==~ UNSTABLE) && it.candidate.version.toLowerCase() ==~ UNSTABLE
    }
}
