# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
---
loader: android_taskgraph.loader.build_config:components_loader

transforms:
    - android_taskgraph.transforms.build_components:transforms
    - gecko_taskgraph.transforms.build_schedules:transforms
    - gecko_taskgraph.transforms.job:transforms
    - gecko_taskgraph.transforms.task:transforms

not-for-components:
    - samples-browser   # Their configs are too different, so they're handled in a specific kind

kind-dependencies:
    - toolchain
    - build-fat-aar

task-defaults:
    artifact-template:
        type: file
        name: public/build/{artifact_file_name}
        path: '/builds/worker/workspace/obj-build/gradle/maven/org/mozilla/components/{component}/{version}/{artifact_file_name}'
    tests-artifact-template:
        type: directory
        name: public/reports/tests
        path: '/builds/worker/workspace/obj-build/gradle/build/mobile/android/android-components/{component_path}/reports/tests'
    lint-artifact-template:
        type: file
        name: public/reports/lint-results-release.html
        path: '/builds/worker/workspace/obj-build/gradle/build/mobile/android/android-components/{component_path}/reports/lint-results-release.html'
    jacoco-coverage-template:
        type: directory
        name: public/reports/jacoco
        path: '/builds/worker/workspace/obj-build/gradle/build/mobile/android/android-components/{component_path}/reports/jacoco'
    description: Execute Gradle tasks for component "{component}"
    fetches:
        toolchain:
            - android-sdk-linux
            - android-gradle-dependencies
            - linux64-jdk
        build-fat-aar:
            - target.maven.tar.xz
    attributes:
        build_platform: android
    dependencies:
        build-fat-aar:
            by-build-type:
                release|nightly|beta: build-fat-aar-android-geckoview-fat-aar-shippable/opt
                default: build-fat-aar-android-geckoview-fat-aar/opt
    include-coverage:
        by-build-type:
            release: false
            beta: false
            nightly: false
            default: true
    run:
        gradlew:
            by-build-type:
                release:
                    - ':{component}:assembleRelease'
                    - ':{component}:testRelease'
                    - ':{component}:lintRelease'
                    - ':{component}:publish'
                beta:
                    # /!\ Beta builds are considered Release in gradle
                    - ':{component}:assembleRelease'
                    - ':{component}:testRelease'
                    - ':{component}:lintRelease'
                    - ':{component}:publish'
                nightly:
                    - '-PnightlyVersion={nightlyVersion}'
                    - ':{component}:assembleRelease'
                    - ':{component}:testRelease'
                    - ':{component}:lintRelease'
                    - ':{component}:publish'
                default:
                    by-component:
                        # No lintRelease on this task, gradle task isn't defined
                        tooling-lint:
                            - ':{component}:assemble'
                            - ':{component}:assembleAndroidTest'
                            - ':{component}:test'
                            - ':{component}:lint'
                        # No testRelease on this task, gradle task isn't defined
                        tooling-detekt:
                            - ':{component}:assemble'
                            - ':{component}:assembleAndroidTest'
                            - ':{component}:test'
                            - ':{component}:lintRelease'
                        # No publish on these tasks
                        tooling-fetch-tests|samples-.*:
                            - ':{component}:assemble'
                            - ':{component}:assembleAndroidTest'
                            - ':{component}:testRelease'
                            - ':{component}:lintRelease'
                        default:
                            - ':{component}:assemble'
                            - ':{component}:assembleAndroidTest'
                            - ':{component}:testRelease'
                            - ':{component}:lintRelease'
                            - ':{component}:publish'
        pre-gradlew:
            - ["cd", "mobile/android/android-components"]
        using: gradlew
        use-caches: false
    run-on-projects:
        by-build-type:
            release: []
            beta: []
            nightly: []
            default: [all]
    shipping-phase:
        by-build-type:
            (nightly|beta|release): promote
            default: null
    shipping-product: firefox-android
    treeherder:
        kind: build
        symbol:
            by-build-type:
                release: '{treeherder_group}(BR)'
                beta: '{treeherder_group}(BB)'
                nightly: '{treeherder_group}(BN)'
                default: '{treeherder_group}(B)'
        platform: AC-android-all/opt
        tier: 1
    worker-type: b-linux-medium-gcp
    worker:
        chain-of-trust: true
        docker-image: {in-tree: android-components}
        max-run-time: 1200
        env:
            ANDROID_SDK_ROOT: /builds/worker/fetches/android-sdk-linux
