---
'version': 2
'plan':
    'project-key': 'AGH'
    'key': 'AGHBSNAPSPECS'
    'name': 'AdGuard Home - Build and publish release'
# Make sure to sync any changes with the branch overrides below.
'variables':
    'channel': 'edge'
    'dockerFrontend': 'adguard/home-js-builder:2.1-bullseye'
    'dockerGo': 'adguard/go-builder:1.23.6--1'

'stages':
  - 'Build frontend':
        'manual': false
        'final': false
        'jobs':
          - 'Build frontend'

  - 'Make release':
        'manual': false
        'final': false
        'jobs':
          - 'Make release'

  - 'Make and publish docker':
        'manual': false
        'final': false
        'jobs':
          - 'Make and publish docker'

  - 'Publish to static storage':
        'manual': false
        'final': false
        'jobs':
          - 'Publish to static storage'

  - 'Publish to GitHub Releases':
        'manual': false
        'final': false
        'jobs':
          - 'Publish to GitHub Releases'

'Build frontend':
    'artifacts':
      - 'name': 'AdGuardHome frontend'
        'pattern': 'build/**'
        'shared': true
        'required': true
    'docker':
        'image': '${bamboo.dockerFrontend}'
        'volumes':
            '${system.YARN_DIR}': '${bamboo.cacheYarn}'
    'key': 'BF'
    'other':
        'clean-working-dir': true
    'tasks':
      - 'checkout':
            'force-clean-build': true
      - 'script':
            'interpreter': 'SHELL'
            'scripts':
              - |
                #!/bin/sh

                set -e -f -u -x

                make\
                        VERBOSE=1\
                        js-deps js-build
    'requirements':
      - 'adg-docker': 'true'

'Make release':
    'artifact-subscriptions':
      - 'artifact': 'AdGuardHome frontend'
    # TODO(a.garipov): Use more fine-grained artifact rules.
    'artifacts':
      - 'name': 'AdGuardHome dists'
        'pattern': 'dist/**'
        'shared': true
        'required': true
    'docker':
        'image': '${bamboo.dockerGo}'
        'volumes':
            '${system.GO_CACHE_DIR}': '${bamboo.cacheGo}'
            '${system.GO_PKG_CACHE_DIR}': '${bamboo.cacheGoPkg}'
    'key': 'MR'
    'other':
        'clean-working-dir': true
    'tasks':
      - 'checkout':
            'force-clean-build': true
      - 'checkout':
            'repository': 'bamboo-deploy-publisher'
            # The paths are always relative to the working directory.
            'path': 'bamboo-deploy-publisher'
            'force-clean-build': true
      - 'script':
            'interpreter': 'SHELL'
            'scripts':
              - |
                #!/bin/sh

                set -e -f -u -x

                # Explicitly checkout the revision that we need.
                git checkout "${bamboo.repository.revision.number}"

                # Run the build with the specified channel.
                echo "${bamboo.gpgSecretKeyPart1}${bamboo.gpgSecretKeyPart2}"\
                        | awk '{ gsub(/\\n/, "\n"); print; }'\
                        | gpg --import --batch --yes

                make\
                        CHANNEL=${bamboo.channel}\
                        GPG_KEY_PASSPHRASE=${bamboo.gpgPassword}\
                        DEPLOY_SCRIPT_PATH="./bamboo-deploy-publisher/deploy.sh"\
                        SIGNER_API_KEY="${bamboo.adguardHomeWinSignerSecretApiKey}"\
                        FRONTEND_PREBUILT=1\
                        PARALLELISM=1\
                        VERBOSE=2\
                        build-release
    'requirements':
      - 'adg-docker': 'true'

'Make and publish docker':
    'key': 'MPD'
    'other':
        'clean-working-dir': true
    'tasks':
      - 'checkout':
            'force-clean-build': true
      - 'script':
            'interpreter': 'SHELL'
            'scripts':
              - |
                #!/bin/sh

                set -e -f -u -x

                # Install Qemu, create builder.
                docker version -f '{{ .Server.Experimental }}'
                docker buildx rm buildx-builder || :
                docker buildx create \
                    --name buildx-builder \
                    --driver docker-container \
                    --use
                docker buildx inspect --bootstrap

                # Login to DockerHub.
                docker login -u="${bamboo.dockerHubUsername}" \
                    -p="${bamboo.dockerHubPassword}"

                # Boot the builder.
                docker buildx inspect --bootstrap

                # Print Docker info.
                docker info

                # Prepare and push the build.
                env \
                    CHANNEL="${bamboo.channel}" \
                    REVISION="${bamboo.repository.revision.number}" \
                    DIST_DIR='dist' \
                    DOCKER_IMAGE_NAME='adguard/adguardhome' \
                    DOCKER_OUTPUT="type=image,name=adguard/adguardhome,push=true" \
                    VERBOSE='1' \
                    sh ./scripts/make/build-docker.sh
            'environment':
                DOCKER_CLI_EXPERIMENTAL=enabled
    'final-tasks':
      - 'clean'
    'requirements':
      - 'adg-docker': 'true'

'Publish to static storage':
    'key': 'PUB'
    'other':
        'clean-working-dir': true
    'tasks':
      - 'clean'
      - 'checkout':
            'repository': 'bamboo-deploy-publisher'
            'path': 'bamboo-deploy-publisher'
            'force-clean-build': true
      - 'script':
            'interpreter': 'SHELL'
            'scripts':
              - |
                #!/bin/sh

                set -e -f -u -x

                cd ./dist/

                CHANNEL="${bamboo.channel}"
                export CHANNEL

                ../bamboo-deploy-publisher/deploy.sh adguard-home-"$CHANNEL"
    'final-tasks':
      - 'clean'
    'requirements':
      - 'adg-docker': 'true'

'Publish to GitHub Releases':
    'key': 'PTGR'
    'other':
        'clean-working-dir': true
    'tasks':
      - 'clean'
      - 'checkout':
            'repository': 'bamboo-deploy-publisher'
            'path': 'bamboo-deploy-publisher'
            'force-clean-build': true
      - 'script':
            'interpreter': 'SHELL'
            'scripts':
              - |
                #!/bin/sh

                set -e -f -u -x

                channel="${bamboo.channel}"
                readonly channel

                if [ "$channel" != 'release' ] && [ "${channel}" != 'beta' ]
                then
                        echo "don't publish to GitHub Releases for this channel"

                        exit 0
                fi

                cd ./dist/

                env\
                        GITHUB_TOKEN="${bamboo.githubPublicRepoPassword}"\
                        ../bamboo-deploy-publisher/deploy.sh adguard-home-github
    'final-tasks':
      - 'clean'
    'requirements':
      - 'adg-docker': 'true'

'triggers':
    # Don't use minute values that end with a zero or a five as these are often
    # used in CI and so resources during these minutes can be quite busy.
  - 'cron': '0 42 13 ? * MON-FRI *'
'branches':
    'create': 'manually'
    'delete':
        'after-deleted-days': 1
        'after-inactive-days': 30
    'integration':
        'push-on-success': false
        'merge-from': 'AdGuard Home   - Build and publish release'
    'link-to-jira': true

'notifications':
  - 'events':
      - 'plan-completed'
    'recipients':
      - 'webhook':
            'name': 'Build webhook'
            'url': 'http://prod.jirahub.service.eu.consul/v1/webhook/bamboo?channel=adguard-qa-dns-builds'

'labels': []
'other':
    'concurrent-build-plugin': 'system-default'

'branch-overrides':
    # beta-vX.Y branches are the branches into which the commits that are needed
    # to release a new patch version are initially cherry-picked.
  - '^beta-v[0-9]+\.[0-9]+':
        # Build betas on release branches manually.
        'triggers': []
        # Set the default release channel on the release branch to beta, as we may
        # need to build a few of these.
        'variables':
            'channel': 'beta'
            'dockerFrontend': 'adguard/home-js-builder:2.1-bullseye'
            'dockerGo': 'adguard/go-builder:1.23.6--1'
    # release-vX.Y.Z branches are the branches from which the actual final
    # release is built.
  - '^release-v[0-9]+\.[0-9]+\.[0-9]+':
        # Disable integration branches for release branches.
        'branch-config':
            'integration':
                'push-on-success': false
                'merge-from': 'beta-v0.107'
        # Build final releases on release branches manually.
        'triggers': []
        # Set the default release channel on the final branch to release, as these
        # are the ones that actually get released.
        'variables':
            'channel': 'release'
            'dockerFrontend': 'adguard/home-js-builder:2.1-bullseye'
            'dockerGo': 'adguard/go-builder:1.23.6--1'
