diff --git a/Makefile b/Makefile index 863fef90..2d8d5e2c 100644 --- a/Makefile +++ b/Makefile @@ -15,12 +15,17 @@ GPG_KEY = devteam@adguard.com GPG_KEY_PASSPHRASE = not-a-real-password NPM = npm NPM_FLAGS = --prefix $(CLIENT_DIR) +NPM_INSTALL_FLAGS = $(NPM_FLAGS) --quiet --no-progress --ignore-engines\ + --ignore-optional --ignore-platform --ignore-scripts RACE = 0 SIGN = 1 VERBOSE = 0 VERSION = v0.0.0 YARN = yarn -YARN_FLAGS = --cwd $(CLIENT_BETA_DIR) --network-timeout 120000 +YARN_FLAGS = --cwd $(CLIENT_BETA_DIR) +YARN_INSTALL_FLAGS = $(YARN_FLAGS) --network-timeout 120000 --silent\ + --ignore-engines --ignore-optional --ignore-platform\ + --ignore-scripts ENV = env\ COMMIT='$(COMMIT)'\ @@ -64,8 +69,8 @@ js-build: $(NPM) $(NPM_FLAGS) run build-prod $(YARN) $(YARN_FLAGS) build js-deps: - $(NPM) $(NPM_FLAGS) ci - $(YARN) $(YARN_FLAGS) install + $(NPM) $(NPM_INSTALL_FLAGS) ci + $(YARN) $(YARN_INSTALL_FLAGS) install # TODO(a.garipov): Remove the legacy client tasks support once the new # client is done and the old one is removed. diff --git a/bamboo-specs/bamboo.yaml b/bamboo-specs/bamboo.yaml new file mode 100644 index 00000000..9ff52b59 --- /dev/null +++ b/bamboo-specs/bamboo.yaml @@ -0,0 +1,5 @@ +--- +!include test.yaml + +--- +!include release.yaml diff --git a/bamboo-specs/release.yaml b/bamboo-specs/release.yaml new file mode 100644 index 00000000..8eb6d0fe --- /dev/null +++ b/bamboo-specs/release.yaml @@ -0,0 +1,236 @@ +--- +'version': 2 +'plan': + 'project-key': 'AGH' + 'key': 'AGHBSNAPSPECS' + 'name': 'AdGuard Home - Build and publish release' +'variables': + 'channel': 'edge' + 'dockerGo': 'adguard/golang-ubuntu:2.0' + 'outputPush': 'false' + +'stages': +- 'Make snapshot': + 'manual': false + 'final': false + 'jobs': + - 'Make release' + +- 'Make and publish docker': + 'manual': false + 'final': false + 'jobs': + - 'Make and publish docker' + +- 'Publish to static.adguard.com': + 'manual': false + 'final': false + 'jobs': + - 'Publish to static.adguard.com' + +- 'Publish to Snapstore': + 'manual': false + 'final': false + 'jobs': + - 'Publish to Snapstore' + +- 'Publish to Github Releases': + 'manual': false + 'final': false + 'jobs': + - 'Publish to Github Releases' + +'Make release': + 'docker': + 'image': '${bamboo.dockerGo}' + 'volumes': + '${system.YARN_DIR}': '${bamboo.cacheYarn}' + '${system.GO_CACHE_DIR}': '${bamboo.cacheGo}' + '${system.GO_PKG_CACHE_DIR}': '${bamboo.cacheGoPkg}' + 'key': 'MR' + 'tasks': + - 'checkout': + '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.gpgSecretKey}"\ + | awk '{ gsub(/\\n/, "\n"); print; }'\ + | gpg --import --batch --yes + + make\ + CHANNEL=${bamboo.channel}\ + GPG_KEY_PASSPHRASE=${bamboo.gpgPassword}\ + VERBOSE=1\ + build-release + # TODO(a.garipov): Use more fine-grained artifact rules. + 'artifacts': + - 'name': 'AdGuardHome dists' + 'pattern': 'dist/**' + 'shared': true + 'required': true + 'requirements': + - 'adg-docker': 'true' + +'Make and publish docker': + 'key': 'MPD' + 'tasks': + - 'checkout': + '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}" + + # 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 + + # If true, push to docker hub. Otherwise, keep in the build cache. + OUTPUT_PUSH="${bamboo.outputPush}" + + # Prepare and push the build. + make\ + CHANNEL="${bamboo.channel}"\ + DOCKER_IMAGE_NAME='adguard/adguardhome'\ + DOCKER_OUTPUT="type=image,name=adguard/adguardhome,push=$OUTPUT_PUSH"\ + VERBOSE='1'\ + build-docker + 'environment': + DOCKER_CLI_EXPERIMENTAL=enabled + 'final-tasks': + - 'clean' + 'requirements': + - 'adg-docker': 'true' + +'Publish to static.adguard.com': + 'key': 'PUB' + '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 + export CHANNEL="${bamboo.channel}" + ./bamboo-deploy-publisher/deploy.sh adguard-home-"$CHANNEL" + 'final-tasks': + - 'clean' + 'requirements': + - 'adg-docker': 'true' + +'Publish to Snapstore': + 'key': 'PTS' + '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 + env\ + SNAPCRAFT_CHANNEL=edge\ + SNAPCRAFT_EMAIL="${bamboo.snapcraftEmail}"\ + SNAPCRAFT_MACAROON="${bamboo.snapcraftMacaroonPassword}"\ + SNAPCRAFT_UBUNTU_DISCHARGE="${bamboo.snapcraftUbuntuDischargePassword}"\ + ./bamboo-deploy-publisher/deploy.sh adguard-home-snap + 'final-tasks': + - 'clean' + 'requirements': + - 'adg-docker': 'true' + +'Publish to Github Releases': + 'key': 'PTGR' + '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 + + export CHANNEL="${bamboo.channel}" + if [ "$CHANNEL" != 'release' -a "${CHANNEL}" != 'beta' ] + then + echo "don't publish to Github Releases for this channel" + + exit 0 + fi + + env\ + GITHUB_TOKEN="${bamboo.githubPublicRepoPassword}"\ + ./bamboo-deploy-publisher/deploy.sh adguard-home-github + 'final-tasks': + - 'clean' + 'requirements': + - 'adg-docker': 'true' + +'triggers': +- 'cron': '0 30 14 * * ?' +'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' + +'labels': [] +'other': + 'concurrent-build-plugin': 'system-default' diff --git a/bamboo-specs/test.yaml b/bamboo-specs/test.yaml new file mode 100644 index 00000000..6154d7a2 --- /dev/null +++ b/bamboo-specs/test.yaml @@ -0,0 +1,62 @@ +--- +'version': 2 +'plan': + 'project-key': 'AGH' + 'key': 'AHBRTSPECS' + 'name': 'AdGuard Home - Build and run tests' +'variables': + 'dockerGo': 'adguard/golang-ubuntu:2.0' + +'stages': +- 'Tests': + 'manual': false + 'final': false + 'jobs': + - 'Test' + +'Test': + 'docker': + 'image': '${bamboo.dockerGo}' + 'volumes': + '${system.YARN_DIR}': '${bamboo.cacheYarn}' + '${system.GO_CACHE_DIR}': '${bamboo.cacheGo}' + '${system.GO_PKG_CACHE_DIR}': '${bamboo.cacheGoPkg}' + 'key': 'TEST' + 'tasks': + - 'checkout': + 'force-clean-build': true + - 'script': + 'interpreter': 'SHELL' + 'scripts': + - | + #!/bin/sh + + set -e -f -u -x + + make VERBOSE=1 ci go-tools lint + 'final-tasks': + - 'clean' + 'requirements': + - 'adg-docker': 'true' + +'branches': + 'create': 'for-pull-request' + 'delete': + 'after-deleted-days': 1 + 'after-inactive-days': 5 + 'integration': + 'push-on-success': false + 'merge-from': 'AdGuard Home - Build and run tests' + 'link-to-jira': true + +'notifications': +- 'events': + - 'plan-status-changed' + 'recipients': + - 'webhook': + 'name': 'Build webhook' + 'url': 'http://prod.jirahub.service.eu.consul/v1/webhook/bamboo' + +'labels': [] +'other': + 'concurrent-build-plugin': 'system-default' diff --git a/client/webpack.prod.js b/client/webpack.prod.js index 0eb5b38d..6869f0f8 100644 --- a/client/webpack.prod.js +++ b/client/webpack.prod.js @@ -3,6 +3,10 @@ const merge = require('webpack-merge'); const common = require('./webpack.common.js'); module.exports = merge(common, { + stats: 'minimal', + performance : { + hints : false + }, module: { rules: [ { diff --git a/client2/package.json b/client2/package.json index df188c7c..a28282e3 100644 --- a/client2/package.json +++ b/client2/package.json @@ -4,7 +4,7 @@ "name": "adguard-home", "version": "0.1.0", "scripts": { - "build": "rm -rf ../build2 && yarn install --network-timeout 120000 && webpack --config ./scripts/webpack/webpack.config.prod.js", + "build": "webpack --config ./scripts/webpack/webpack.config.prod.js", "start": "webpack serve --config ./scripts/webpack/webpack.config.dev.js", "generate": "rm -rf ./src/lib/entities ./src/lib/apis && ts-node --compiler-options '{ \"module\": \"CommonJS\" }' ./scripts/generator/index.ts", "translations:check": "ts-node --compiler-options '{ \"module\": \"CommonJS\" }' ./scripts/plugins/checkTranslations.ts", diff --git a/client2/scripts/webpack/webpack.config.prod.js b/client2/scripts/webpack/webpack.config.prod.js index c0bddae4..d9057ef1 100644 --- a/client2/scripts/webpack/webpack.config.prod.js +++ b/client2/scripts/webpack/webpack.config.prod.js @@ -10,6 +10,10 @@ const CopyPlugin = require('copy-webpack-plugin'); module.exports = merge(baseConfig, { mode: 'production', devtool: 'source-map', + stats: 'minimal', + performance : { + hints : false + }, output: { path: path.resolve(__dirname, '../../../build2/static'), filename: '[name].bundle.[hash:5].js',