---
# This part of the release build is separate from the one described in
# release.yaml, because the Snapcraft infrastructure is brittle, and timeouts
# during logins and uploads often lead to release blocking.
'version': 2
'plan':
    'project-key': 'AGH'
    'key': 'AGHSNAP'
    'name': 'AdGuard Home - Build and publish Snapcraft release'
# Make sure to sync any changes with the branch overrides below.
'variables':
    'channel': 'edge'
    'dockerSnap': 'adguard/snap-builder:1.1'
    'snapcraftChannel': 'edge'

'stages':
  - 'Download release':
        'manual': false
        'final': false
        'jobs':
          - 'Download release'

  - 'Build packages':
        'manual': false
        'final': false
        'jobs':
          - 'Build packages'

  - 'Publish to Snapstore':
        'manual': false
        'final': false
        'jobs':
          - 'Publish to Snapstore'

# TODO(a.garipov): Consider using the Artifact Downloader Task if it ever learns
# about plan branches.
'Download release':
    'artifacts':
      - 'name': 'i386_binary'
        'pattern': 'AdGuardHome_i386'
        'shared': true
        'required': true
      - 'name': 'amd64_binary'
        'pattern': 'AdGuardHome_amd64'
        'shared': true
        'required': true
      - 'name': 'armhf_binary'
        'pattern': 'AdGuardHome_armhf'
        'shared': true
        'required': true
      - 'name': 'arm64_binary'
        'pattern': 'AdGuardHome_arm64'
        'shared': true
        'required': true
    'docker':
        'image': '${bamboo.dockerSnap}'
    'key': 'DR'
    'other':
        'clean-working-dir': true
    'tasks':
      - 'checkout':
            'force-clean-build': true
      - 'script':
            'interpreter': 'SHELL'
            'scripts':
            - |
              #!/bin/sh

              set -e -f -u -x

              env\
                      CHANNEL="${bamboo.channel}"\
                      VERBOSE='1'\
                      sh ./scripts/snap/download.sh
    'requirements':
      - 'adg-docker': 'true'

'Build packages':
    'artifact-subscriptions':
      - 'artifact': 'i386_binary'
      - 'artifact': 'amd64_binary'
      - 'artifact': 'armhf_binary'
      - 'artifact': 'arm64_binary'
    'artifacts':
      - 'name': 'i386_snap'
        'pattern': 'AdGuardHome_i386.snap'
        'shared': true
        'required': true
      - 'name': 'amd64_snap'
        'pattern': 'AdGuardHome_amd64.snap'
        'shared': true
        'required': true
      - 'name': 'armhf_snap'
        'pattern': 'AdGuardHome_armhf.snap'
        'shared': true
        'required': true
      - 'name': 'arm64_snap'
        'pattern': 'AdGuardHome_arm64.snap'
        'shared': true
        'required': true
    'docker':
        'image': '${bamboo.dockerSnap}'
    'key': 'BP'
    'other':
        'clean-working-dir': true
    'tasks':
      - 'checkout':
            'force-clean-build': true
      - 'script':
            'interpreter': 'SHELL'
            'scripts':
            - |
              #!/bin/sh

              set -e -f -u -x

              env\
                      VERBOSE='1'\
                      sh ./scripts/snap/build.sh
    'requirements':
      - 'adg-docker': 'true'

'Publish to Snapstore':
    'artifact-subscriptions':
      - 'artifact': 'i386_snap'
      - 'artifact': 'amd64_snap'
      - 'artifact': 'armhf_snap'
      - 'artifact': 'arm64_snap'
    'docker':
        'image': '${bamboo.dockerSnap}'
    'key': 'PTS'
    'other':
        'clean-working-dir': true
    'tasks':
      - 'checkout':
            'force-clean-build': true
      - 'script':
            'interpreter': 'SHELL'
            'scripts':
              - |
                #!/bin/sh

                set -e -f -u -x

                env\
                        SNAPCRAFT_CHANNEL="${bamboo.snapcraftChannel}"\
                        SNAPCRAFT_STORE_CREDENTIALS="${bamboo.snapcraftMacaroonPassword}"\
                        VERBOSE='1'\
                        sh ./scripts/snap/upload.sh
    '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.
    #
    # NOTE: The time is chosen to be exactly one hour after the main release
    # build as defined as in release.yaml.
  - 'cron': '0 42 14 ? * 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 Snapcraft 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'
            'dockerSnap': 'adguard/snap-builder:1.1'
            'snapcraftChannel': 'beta'
    # 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'
            'dockerSnap': 'adguard/snap-builder:1.1'
            'snapcraftChannel': 'candidate'
