--- '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.0' 'dockerGo': 'adguard/go-builder:1.23.4--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.0' 'dockerGo': 'adguard/go-builder:1.23.4--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.0' 'dockerGo': 'adguard/go-builder:1.23.4--1'