Skip to content
This repository has been archived by the owner on Feb 23, 2020. It is now read-only.

Commit

Permalink
#142 Renew devops configs (#195)
Browse files Browse the repository at this point in the history
- Skip problem selenium test
- Review#2 fix. Annotate commented string
- Review#2 fix. Rm git install from dockerfile.dev
- Fix forgotten env vars. Rm pdd task in favor of se#345
- Resurrect#1 gulp build
- Launch tests #1
- Fix forgotten drone file
- Review#1 fixes
- Devops configs renew
- Rm coala's redundant lint step
  • Loading branch information
duker33 committed Jun 15, 2018
1 parent d88d4bf commit 025bae7
Show file tree
Hide file tree
Showing 26 changed files with 406 additions and 272 deletions.
63 changes: 39 additions & 24 deletions .drone.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ pipeline:
branch: master

npm:
image: node
image: node:slim
environment:
- DEPS_DIR=/usr/app/deps
commands:
Expand All @@ -31,38 +31,36 @@ pipeline:
environment:
- TEST_ENV=true
- DJANGO_SETTINGS_MODULE=stroyprombeton.settings.dev
- DATABASE_URL=postgres://postgres:test@postgres/test
- BROCKER_URL=amqp://rabbitmq:test@rabbitmq:5672/
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=test
- POSTGRES_URL=postgres
- POSTGRES_DB=test
- RABBITMQ_DEFAULT_USER=rabbitmq
- RABBITMQ_DEFAULT_PASS=test
- RABBITMQ_URL=rabbitmq
- RABBITMQ_PORT=5672
- SELENIUM_URL=http://selenium:4444/wd/hub
commands:
- python manage.py migrate
- python manage.py collectstatic --noinput
- python manage.py test -v 3 --liveserver=test:8020-8030 --parallel=6
- python manage.py test --liveserver=test:8021-8029 --parallel
volumes:
- /tmp/cache/drone/stroyprombeton/site-packages/${DRONE_COMMIT_SHA}/site-packages:/usr/local/lib/python3.6/site-packages
when:
event: [push, pull_request]
branch: master

pip-clean:
image: busybox
commands:
- rm -rf /site-packages/${DRONE_COMMIT_SHA}
volumes:
- /tmp/cache/drone/stroyprombeton/site-packages/:/site-packages/
when:
status: [ success, failure ]
when:
event: [push, pull_request]
branch: master

lint:
image: docker/compose:1.17.1
commands:
- cd docker
- docker-compose run --rm stb-lint
- docker-compose run --rm stb-pdd
- docker-compose run --rm lint
- docker-compose run --rm pdd
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# @todo #142:60m Explore why drone `lint` and `docker-build` use .env
# Both of them should not as it seems. Write doc why or rm them.
# in case if "Push Hooks" is enabled in Drone settings GUI
- /root/prog/stroyprombeton/docker/.env:/drone/src/github.com/fidals/stroyprombeton/commit/${DRONE_COMMIT_SHA}/docker/.env
when:
event: [push, pull_request]
Expand All @@ -72,9 +70,7 @@ pipeline:
image: docker/compose:1.17.1
commands:
- cd docker
- docker-compose -f docker-compose.yml build --no-cache stb-python
- docker-compose -f docker-compose-production.yml build --no-cache stb-source
- docker-compose -f docker-compose-production.yml build --no-cache stb-python
- docker-compose -f docker-compose-build.yml build --no-cache nodejs python-dev python-prod
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# in case if "Push Hooks" is enabled in Drone settings GUI
Expand All @@ -92,7 +88,7 @@ pipeline:
- DOCKER_HUB_PASSWORD=${DOCKER_HUB_PASSWORD}
commands:
- docker login -u $DOCKER_HUB_LOGIN -p $DOCKER_HUB_PASSWORD
- docker push fidals/stb-source:prod
- docker push fidals/stb-nodejs:prod
- docker push fidals/stb:dev
- docker push fidals/stb:prod
volumes:
Expand All @@ -104,6 +100,24 @@ pipeline:
event: push
branch: master

pip-clean:
image: busybox
commands:
- rm -rf /site-packages/${DRONE_COMMIT_SHA}
volumes:
- /tmp/cache/drone/stroyprombeton/site-packages/:/site-packages/
when:
status: [ success, failure ]

npm-clean:
image: busybox
commands:
- rm -rf /drone/src/github.com/fidals/stroyprombeton/pull/${DRONE_PULL_REQUEST}/node_modules/*
volumes:
- /tmp/cache/drone/stroyprombeton/node_modules:/drone/src/github.com/fidals/stroyprombeton/pull/${DRONE_PULL_REQUEST}/node_modules
when:
status: [ success, failure ]

services:
postgres:
group: build
Expand All @@ -122,10 +136,11 @@ services:

selenium:
group: build
image: selenium/standalone-chrome:3.6.0
image: selenium/standalone-chrome-debug:3.10.0
environment: # https://github.com/SeleniumHQ/docker-selenium/issues/392
- DBUS_SESSION_BUS_ADDRESS=/dev/null
- SCREEN_WIDTH=1920
- SCREEN_HEIGHT=1080
shm_size: 4G
volumes: # https://github.com/SeleniumHQ/docker-selenium#running-the-images
- /dev/shm:/dev/shm

2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ media/
stroyprombeton/settings/local.py
stb.json
docker/.env
docker/env_files/*
!docker/env_files/*.dist
celerybeat*
fake_db.py
.vscode/
Expand Down
35 changes: 0 additions & 35 deletions docker/.env.dist

This file was deleted.

134 changes: 86 additions & 48 deletions docker/Makefile
Original file line number Diff line number Diff line change
@@ -1,61 +1,99 @@
dc=docker-compose
d=docker
dcp=docker-compose -f docker-compose-production.yml
dcb=$(dc) -f docker-compose-build.yml
dcp=$(dc) -f docker-compose-production.yml

.PHONY: migrate create-env build-static watch-static \
build test backup restore \
generate-production-static-data deploy


# ---------------------- Dev section ----------------------
migrate:
$(dc) exec stb-python python manage.py migrate

# for local env
static:
@docker-compose run --rm stb-nodejs bash -c "\
npm install && \
npm install -g gulp-cli && \
gulp build"

# for local env
build: static
$(dc) build stb-python

# for local env
test: static
$(dc) up -d stb-selenium
$(dc) exec stb-python python manage.py test --liveserver=stb-python:8001-8010 --parallel=8
$(dc) exec app python manage.py migrate

fixtures:
$(dc) run --rm app bash -c "\
python manage.py loaddata stroyprombeton/fixtures/admin.json \
&& python manage.py loaddata stroyprombeton/fixtures/dump.json \
"

prices:
$(dc) exec app python manage.py price

create-env:
@bash ./create-env.sh

create-config:
@bash ./create-config.sh

build-static:
$(dc) run --rm nodejs gulp build

watch-static:
$(dc) run --rm nodejs gulp watch

collectstatic:
$(dc) exec app python manage.py collectstatic --noinput

test: build-static
$(dc) up -d selenium
$(dc) exec app python manage.py test --liveserver=app:8001-8009 --parallel
$(dc) stop

# for local env
lint:
$(dc) up -d stb-python
$(d) run --rm --volumes-from stb-python --workdir=/usr/app/src -it coala/base coala
$(dc) up -d app
$(dc) run --rm lint
$(dc) stop

# for local env
restore:
@bash ../etc/stb-backup-restore.sh

# for serv env
deploy-dev:
$(MAKE) create-env
# uncomment in #167
# $(MAKE) create-config
$(dc) pull
$(dc) up -d app
$(MAKE) build-static
$(MAKE) migrate
# Create admin user with login/pass: admin/asdfjkl;
$(MAKE) fixtures
# Launch "collectstatic" not in static recipe because ManifestStaticStorage writes to db
$(MAKE) collectstatic
# to make fresh collected static visible immediately
$(dc) stop app && $(dc) up -d app


# ---------------------- Production deploy section ----------------------
# @todo #142:60m Resurrect backup system.
# Right now it's too dangerous and not used.
backup:
$(dcp) up stb-backup-data

# start dev environment
dev: build
$(dc) up -d stb-python
$(dc) exec stb-python python manage.py migrate
# launch "collectstatic" not in static recipe because ManifestStaticStorage writes to db
$(dc) exec stb-python python manage.py collectstatic --noinput
$(dc) stop && $(dc) up -d # to make fresh collected static visible immediately

# for serv env
build-production: build
$(dcp) build
$(dcp) push

deploy: backup
$(dcp) run --rm backup-data sh /usr/bin/entrypoint.sh

restore:
@bash ../etc/backup/backup-restore.sh

generate-production-static-data:
$(dcp) exec app python manage.py price

# drone should do this in working flow.
# But if drone don't do this for some reasons,
# you can run this recipe from local machine.
prepare-deploy:
rm -rf front/build
$(dc) stop app && $(dcp) stop app
$(dc) rm -f app && $(dcp) rm -f app
$(MAKE) build-static
$(dcb) build --no-cache python-dev python-prod
$(dcb) push python-dev python-prod

deploy:
$(dcp) pull
$(dcp) stop
$(dcp) rm -f stb-source
$(dcp) up -d
$(dcp) exec stb-python python manage.py migrate
# launch "collectstatic" not in build env, but on deploy.
# Because ManifestStaticStorage writes to db
$(dcp) exec stb-python python manage.py collectstatic --noinput
$(dcp) stop && $(dcp) up -d # to make fresh collected static visible immediately
# to flush nginx's inner static caches
$(dcp) rm -f app nginx && $(dcp) up -d app nginx
$(dcp) exec app python manage.py migrate
$(MAKE) -j generate-production-static-data
# Launch "collectstatic" not in static recipe because ManifestStaticStorage writes to db
$(dcp) exec app python manage.py collectstatic --noinput
# to make fresh collected static visible immediately
$(dcp) stop && $(dcp) up -d
28 changes: 0 additions & 28 deletions docker/README.md

This file was deleted.

1 comment on commit 025bae7

@0pdd
Copy link
Collaborator

@0pdd 0pdd commented on 025bae7 Jun 15, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn't able to retrieve PDD puzzles from the code base and submit them to GitHub. If you think that it's a bug on our side, please submit it to yegor256/0pdd:

set -x && set -e && set -o pipefail && cd /tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton && pdd -v -f /tmp/20180615-3832-1jk10jg [1]: bash: warning: setlocale: LC_ALL: cannot change locale (UTF-8) + set -e + set -o pipefail + cd /tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton + pdd -v -f...

Please, copy and paste this stack trace to GitHub:

UserError
set -x && set -e && set -o pipefail && cd /tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton && pdd -v -f /tmp/20180615-3832-1jk10jg [1]:
bash: warning: setlocale: LC_ALL: cannot change locale (UTF-8)
+ set -e
+ set -o pipefail
+ cd /tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton
+ pdd -v -f /tmp/20180615-3832-1jk10jg

My version is 0.20.3
Ruby version is 2.3.3 at x86_64-linux
Reading /tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton
294 file(s) found, 148 excluded
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/stroyprombeton/migrations/__init__.py is a binary file (0 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/stroyprombeton/tests/assets/review.jpg is a binary file (149793 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/stroyprombeton/tests/__init__.py is a binary file (0 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/stroyprombeton/formats/en/__init__.py is a binary file (0 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/stroyprombeton/formats/__init__.py is a binary file (0 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/stroyprombeton/formats/ru/__init__.py is a binary file (0 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/stroyprombeton/management/__init__.py is a binary file (0 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/stroyprombeton/templatetags/__init__.py is a binary file (0 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/stroyprombeton/locale/ru/LC_MESSAGES/django.mo is a binary file (7319 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/stroyprombeton/settings/__init__.py is a binary file (0 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/media/categories/1/1.png is a binary file (7609 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/media/index-page/01.png is a binary file (15572 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/media/news/08-09-16/165x165.jpg is a binary file (25797 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/media/news/news1-head.png is a binary file (977647 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/media/news/news1-1.png is a binary file (191831 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/media/news/thumb-b-news-2.png is a binary file (113417 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/media/news/news1-2.png is a binary file (256741 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/media/news/thumb-news-1.png is a binary file (46818 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/media/news/thumb-b-news-1.png is a binary file (100807 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/media/posts/Russia-map.png is a binary file (60128 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/media/products/1/main.jpg is a binary file (91604 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/media/products/1/small.jpg is a binary file (91604 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/common/image-thumb.png is a binary file (6244 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/header-image.jpg is a binary file (56247 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/partner-stkmetall-logo.png is a binary file (2441 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/ajax-loader.gif is a binary file (4178 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/catalog-new-jersey.png is a binary file (51903 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/spriteSrc/main/offer-pricelist-hover.png is a binary file (1088 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/spriteSrc/main/offer-commercial-disable.png is a binary file (1199 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/spriteSrc/main/offer-pricelist-disable.png is a binary file (1125 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/spriteSrc/main/offer-pricelist.png is a binary file (1325 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/spriteSrc/main/offer-draft.png is a binary file (1688 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/spriteSrc/main/offer-draft-hover.png is a binary file (1580 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/spriteSrc/main/offer-commercial.png is a binary file (1217 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/spriteSrc/main/offer-draft-disable.png is a binary file (1613 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/spriteSrc/main/offer-commercial-hover.png is a binary file (1204 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/spriteSrc/pages/picture.png is a binary file (373 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/spriteSrc/pages/arrow-down-disabled.png is a binary file (304 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/spriteSrc/pages/arrow-down-hover.png is a binary file (303 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/spriteSrc/pages/arrow-down.png is a binary file (303 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/spriteSrc/pages/arrow-down-active.png is a binary file (292 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/favicon.ico is a binary file (894 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/partner-modulenergo-logo.png is a binary file (4036 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/partner-stkmodul-logo.png is a binary file (2581 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/catalog-gbi.png is a binary file (57174 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/stk-logo.png is a binary file (2819 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/photoSwipe/preloader.gif is a binary file (866 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/photoSwipe/default-skin.png is a binary file (547 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/stk-prombeton.png is a binary file (3414 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/images/icon-photo.png is a binary file (373 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/fonts/fontawesome-webfont.woff is a binary file (90412 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/fonts/glyphicons-halflings-regular.woff is a binary file (23424 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/fonts/slick.woff is a binary file (1380 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/fonts/slick.ttf is a binary file (1892 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/fonts/fontawesome-webfont.woff2 is a binary file (71896 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/front/fonts/glyphicons-halflings-regular.woff2 is a binary file (18028 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/doc/images/table_editor/filters_group.png is a binary file (37953 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/doc/images/table_editor/add_product_button.png is a binary file (22893 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/doc/images/table_editor/table.png is a binary file (24967 bytes)
/tmp/0pdd20180614-4-tkm64f/fidals/stroyprombeton/doc/images/table_editor/search_field.png is a binary file (6952 bytes)
Reading gulpfile.babel.js...
Reading stroyprombeton/mailer.py...
Reading stroyprombeton/sitemaps.py...
Reading stroyprombeton/migrations/0002_delete_region.py...
Reading stroyprombeton/migrations/0004_zero_code_to_none.py...
Reading stroyprombeton/migrations/0001_initial.py...
Reading stroyprombeton/migrations/0007_remove_category_link_to_metal.py...
Reading stroyprombeton/migrations/0005_alter_catalog_fields.py...
Reading stroyprombeton/migrations/0006_auto_20170317_1457.py...
Reading stroyprombeton/migrations/0008_page_templates.py...
Reading stroyprombeton/migrations/0003_auto_20161229_0848.py...
Reading stroyprombeton/migrations/0009_trigram_search.py...
Reading stroyprombeton/fixtures/admin.json...
Reading stroyprombeton/fixtures/dump.json...
Reading stroyprombeton/celery.py...
Reading stroyprombeton/tests/tests_forms.py...
Reading stroyprombeton/tests/tests_commands.py...
Reading stroyprombeton/tests/tests_selenium.py...
Puzzle 137-a7a31c49 0/DEV at stroyprombeton/tests/tests_selenium.py
Puzzle 142-ba36b9df 30/DEV at stroyprombeton/tests/tests_selenium.py
Puzzle 142-ba36b9df 15/DEV at stroyprombeton/tests/tests_selenium.py
Reading stroyprombeton/tests/tests_views.py...
Puzzle 142-0a53b98c 30/DEV at stroyprombeton/tests/tests_views.py
Reading stroyprombeton/tests/tests_admin.py...
Reading stroyprombeton/tests/tests_selenium_mobile.py...
Reading stroyprombeton/tests/tests_selenium_admin.py...
Puzzle 137-7a497511 120/DEV at stroyprombeton/tests/tests_selenium_admin.py
Puzzle 137-e5de5ce7 0/DEV at stroyprombeton/tests/tests_selenium_admin.py
Reading stroyprombeton/tests/helpers.py...
Reading stroyprombeton/admin.py...
Reading stroyprombeton/apps.py...
Reading stroyprombeton/models.py...
Reading stroyprombeton/urls.py...
Reading stroyprombeton/wsgi.py...
Reading stroyprombeton/tasks.py...
Reading stroyprombeton/formats/en/formats.py...
Reading stroyprombeton/formats/ru/formats.py...
Reading stroyprombeton/management/commands/translate.py...
Reading stroyprombeton/management/commands/test_db.py...
Reading stroyprombeton/management/commands/remove_product_duplicates.py...
Reading stroyprombeton/management/commands/seo_texts.py...
Reading stroyprombeton/management/commands/fake_db.py...
Reading stroyprombeton/management/commands/category_images.py...
Reading stroyprombeton/management/commands/price.py...
Reading stroyprombeton/management/commands/untranslated.py...
Reading stroyprombeton/views/pages.py...
Reading stroyprombeton/views/ecommerce.py...
Reading stroyprombeton/views/admin.py...
Reading stroyprombeton/views/search.py...
Puzzle 85-600a6da3 0/DEV at stroyprombeton/views/search.py
Reading stroyprombeton/views/__init__.py...
Reading stroyprombeton/views/catalog.py...
Reading stroyprombeton/views/helpers.py...
Reading stroyprombeton/__init__.py...
Reading stroyprombeton/templatetags/stb_extras.py...
Reading stroyprombeton/locale/ru/LC_MESSAGES/django.po...
Reading stroyprombeton/settings/base.py...
Reading stroyprombeton/settings/dev.py...
Puzzle 106-4167c824 0/DEV at stroyprombeton/settings/dev.py
Reading stroyprombeton/settings/local.py.dist...
Reading stroyprombeton/settings/prod.py...
Reading stroyprombeton/forms.py...
Reading stroyprombeton/context_processors.py...
Reading .eslintrc...
Reading assets/.gitignore...
Reading .gitignore...
Reading etc/stb-backup-restore.sh...
Reading etc/nginx/default.conf...
Reading etc/gunicorn.py...
Reading etc/stb-backup-entrypoint.sh...
Reading .drone.yml...
ERROR: .drone.yml; puzzle at line #61; Space expected at 63:8; make sure all lines in the puzzle body have a single leading space.. If you can't understand the cause of this issue or you don't know how to fix it, please submit a GitHub issue, we will try to help you: https://github.com/yegor256/pdd/issues. This tool is still in its beta version and we will appreciate your feedback. Here is where you can find more documentation: https://github.com/yegor256/pdd/blob/master/README.md.
Exit code is 1

/app/objects/git_repo.rb:66:in `rescue in block in xml'
/app/objects/git_repo.rb:63:in `block in xml'
/app/vendor/ruby-2.3.3/lib/ruby/2.3.0/tempfile.rb:295:in `open'
/app/objects/git_repo.rb:62:in `xml'
/app/objects/puzzles.rb:36:in `deploy'
/app/objects/job.rb:38:in `proceed'
/app/objects/job_starred.rb:33:in `proceed'
/app/objects/job_recorded.rb:32:in `proceed'
/app/objects/job_emailed.rb:35:in `proceed'
/app/objects/job_commiterrors.rb:36:in `proceed'
/app/objects/job_detached.rb:48:in `exclusive'
/app/objects/job_detached.rb:36:in `block in proceed'
/app/objects/job_detached.rb:36:in `fork'
/app/objects/job_detached.rb:36:in `proceed'
/app/0pdd.rb:342:in `block in <top (required)>'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1634:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1634:in `block in compile!'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:992:in `block (3 levels) in route!'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1011:in `route_eval'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:992:in `block (2 levels) in route!'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1039:in `block in process_route'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1037:in `catch'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1037:in `process_route'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:990:in `block in route!'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:989:in `each'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:989:in `route!'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1096:in `block in dispatch!'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1075:in `block in invoke'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1075:in `catch'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1075:in `invoke'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1093:in `dispatch!'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:924:in `block in call!'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1075:in `block in invoke'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1075:in `catch'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1075:in `invoke'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:924:in `call!'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:913:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/rack-protection-2.0.1/lib/rack/protection/xss_header.rb:18:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/rack-protection-2.0.1/lib/rack/protection/path_traversal.rb:16:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/rack-protection-2.0.1/lib/rack/protection/json_csrf.rb:26:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/rack-protection-2.0.1/lib/rack/protection/base.rb:50:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/rack-protection-2.0.1/lib/rack/protection/base.rb:50:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/rack-protection-2.0.1/lib/rack/protection/frame_options.rb:31:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/rack-2.0.5/lib/rack/logger.rb:15:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/rack-2.0.5/lib/rack/common_logger.rb:33:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:231:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:224:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/rack-2.0.5/lib/rack/head.rb:12:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/rack-2.0.5/lib/rack/method_override.rb:22:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:194:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1957:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1501:in `block in call'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1728:in `synchronize'
/app/vendor/bundle/ruby/2.3.0/gems/sinatra-2.0.1/lib/sinatra/base.rb:1501:in `call'
/app/vendor/bundle/ruby/2.3.0/gems/rack-2.0.5/lib/rack/handler/webrick.rb:86:in `service'
/app/vendor/ruby-2.3.3/lib/ruby/2.3.0/webrick/httpserver.rb:140:in `service'
/app/vendor/ruby-2.3.3/lib/ruby/2.3.0/webrick/httpserver.rb:96:in `run'
/app/vendor/ruby-2.3.3/lib/ruby/2.3.0/webrick/server.rb:296:in `block in start_thread'

Please sign in to comment.