From 527c6c53f6e67b6771fd74cf4b8a4eb68b570461 Mon Sep 17 00:00:00 2001 From: shmyga Date: Wed, 15 Jan 2020 20:20:45 +0300 Subject: [PATCH] [add] ansible deploy --- .gitignore | 2 +- ansible/ansible.cfg | 11 +++++++++++ ansible/deploy.yml | 14 ++++++++++++++ ansible/dev/inventory.yml | 2 ++ ansible/group_vars/all.yml | 9 +++++++++ ansible/prod/inventory.yml | 4 ++++ ansible/requirements.yml | 5 +++++ ansible/roles/build/defaults/main.yml | 2 ++ ansible/roles/build/tasks/main.yml | 11 +++++++++++ gulpfile.js | 2 +- src/haxe/ru/m/puzzlez/render/PartView.hx | 2 +- src/haxe/ru/m/puzzlez/render/Render.hx | 18 ++++++++++++++---- src/haxe/ru/m/puzzlez/view/PuzzlezAppView.hx | 16 ++++++++++------ .../ru/m/puzzlez/view/PuzzlezAppView.yaml | 4 ++++ src/icon.png | Bin 0 -> 23894 bytes 15 files changed, 89 insertions(+), 13 deletions(-) create mode 100644 ansible/ansible.cfg create mode 100644 ansible/deploy.yml create mode 100644 ansible/dev/inventory.yml create mode 100644 ansible/group_vars/all.yml create mode 100644 ansible/prod/inventory.yml create mode 100644 ansible/requirements.yml create mode 100644 ansible/roles/build/defaults/main.yml create mode 100644 ansible/roles/build/tasks/main.yml create mode 100644 src/icon.png diff --git a/.gitignore b/.gitignore index 6ca9a0b..88f146f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -build/ +/build/ target/ src-gen/ out/ diff --git a/ansible/ansible.cfg b/ansible/ansible.cfg new file mode 100644 index 0000000..e75f79b --- /dev/null +++ b/ansible/ansible.cfg @@ -0,0 +1,11 @@ +[defaults] +hash_behaviour = merge +host_key_checking = False +#callback_whitelist = profile_tasks +display_skipped_hosts = False +stdout_callback = yaml +bin_ansible_callbacks = True + +[ssh_connection] +pipelining = True +ssh_args = -o ForwardAgent=yes diff --git a/ansible/deploy.yml b/ansible/deploy.yml new file mode 100644 index 0000000..ed386b8 --- /dev/null +++ b/ansible/deploy.yml @@ -0,0 +1,14 @@ +--- +- hosts: all + vars: + ansible_user: "{{ deploy_user }}" + roles: + - ansible-deploy + - build + post_tasks: + - include_role: + name: ansible-deploy + tasks_from: complete.yml + - include_role: + name: service + tasks_from: restart.yml diff --git a/ansible/dev/inventory.yml b/ansible/dev/inventory.yml new file mode 100644 index 0000000..47e4ee3 --- /dev/null +++ b/ansible/dev/inventory.yml @@ -0,0 +1,2 @@ +all: + hosts: localhost diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml new file mode 100644 index 0000000..2ff7e21 --- /dev/null +++ b/ansible/group_vars/all.yml @@ -0,0 +1,9 @@ +--- +project_name: puzzlez +project_user: holop + +deploy_user: "{{ project_user }}" +deploy_project: "{{ project_name }}" +deploy_repo_url: "git@bitbucket.org:infernalgames/{{ project_name }}.git" +deploy_repo_version: master +deploy_npm: yes diff --git a/ansible/prod/inventory.yml b/ansible/prod/inventory.yml new file mode 100644 index 0000000..6e674a5 --- /dev/null +++ b/ansible/prod/inventory.yml @@ -0,0 +1,4 @@ +all: + hosts: shmyga.ru + vars: + config_src: "/home/holop/puzzlez/config.json" diff --git a/ansible/requirements.yml b/ansible/requirements.yml new file mode 100644 index 0000000..2248dad --- /dev/null +++ b/ansible/requirements.yml @@ -0,0 +1,5 @@ +--- +- name: ansible-deploy + src: git@bitbucket.org:shmyga/ansible-deploy.git + version: master + scm: git diff --git a/ansible/roles/build/defaults/main.yml b/ansible/roles/build/defaults/main.yml new file mode 100644 index 0000000..e711e90 --- /dev/null +++ b/ansible/roles/build/defaults/main.yml @@ -0,0 +1,2 @@ +config_src: "{{ deploy_release_dir }}/config.{{ inventory_hostname }}.json" +config_dest: "{{ deploy_release_dir }}/config.json" diff --git a/ansible/roles/build/tasks/main.yml b/ansible/roles/build/tasks/main.yml new file mode 100644 index 0000000..9e5d8d0 --- /dev/null +++ b/ansible/roles/build/tasks/main.yml @@ -0,0 +1,11 @@ +--- +- name: "Copy config" + copy: + src: "{{ config_src }}" + dest: "{{ config_dest }}" + remote_src: true + +- name: "Gulp build" + command: "{{ deploy_release_dir }}/node_modules/.bin/gulp default" + args: + chdir: "{{ deploy_release_dir }}" diff --git a/gulpfile.js b/gulpfile.js index 00ec5d5..e23b1ba 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -22,7 +22,7 @@ const config = new Project.Config({ meta: { title: 'Puzzle\'z', filename: 'puzzlez', - icon: 'src/client/resources/icon.png', + icon: 'src/icon.png', pack: 'ru.m.puzzlez', author: 'shmyga ', company: 'MegaLoMania', diff --git a/src/haxe/ru/m/puzzlez/render/PartView.hx b/src/haxe/ru/m/puzzlez/render/PartView.hx index e80ac04..c1f2424 100644 --- a/src/haxe/ru/m/puzzlez/render/PartView.hx +++ b/src/haxe/ru/m/puzzlez/render/PartView.hx @@ -19,7 +19,7 @@ class PartView extends Sprite { } private var size:Point; - private var bitmap:Bitmap; + public var bitmap:Bitmap; public function new(id:Int, image:BitmapData, size:Point) { super(); diff --git a/src/haxe/ru/m/puzzlez/render/Render.hx b/src/haxe/ru/m/puzzlez/render/Render.hx index 20a7b15..9b2f190 100644 --- a/src/haxe/ru/m/puzzlez/render/Render.hx +++ b/src/haxe/ru/m/puzzlez/render/Render.hx @@ -1,14 +1,15 @@ package ru.m.puzzlez.render; -import haxework.net.ImageLoader; -import ru.m.puzzlez.core.ImageSource; -import haxework.signal.Signal; import flash.display.BitmapData; +import flash.display.PNGEncoderOptions; import flash.display.Sprite; import flash.events.MouseEvent; import flash.geom.Point; +import flash.geom.Rectangle; +import flash.net.FileReference; +import flash.utils.ByteArray; +import haxework.signal.Signal; import haxework.view.SpriteView; -import openfl.Assets; import ru.m.puzzlez.core.GameEvent; import ru.m.puzzlez.core.GameState; @@ -109,10 +110,19 @@ class Render extends SpriteView implements IRender { signal.emit(GameEvent.PART_PUT(activePart.id, partPosition.clone())); table.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); table.stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp); + //save(activePart); activePart = null; activePoint = null; } + private function save(part:PartView):Void { + var file = new FileReference(); + var bitmapData = part.bitmap.bitmapData; + var data = new ByteArray(); + bitmapData.encode(new Rectangle(0, 0, bitmapData.width, bitmapData.height), new PNGEncoderOptions(), data); + file.save(data, "icon.png"); + } + private function clean() { for (partView in parts) { table.removeChild(partView); diff --git a/src/haxe/ru/m/puzzlez/view/PuzzlezAppView.hx b/src/haxe/ru/m/puzzlez/view/PuzzlezAppView.hx index c4c5790..bd60de2 100644 --- a/src/haxe/ru/m/puzzlez/view/PuzzlezAppView.hx +++ b/src/haxe/ru/m/puzzlez/view/PuzzlezAppView.hx @@ -1,5 +1,6 @@ package ru.m.puzzlez.view; +import haxework.view.form.ButtonView; import haxework.net.JsonLoader; import haxework.view.data.DataView; import haxework.view.group.VGroupView; @@ -33,12 +34,6 @@ typedef PixabayResponse = { images.data = [for (name in Assets.list(AssetType.IMAGE)) ASSET(name)]; render.scale = 0.75; scale.position = render.scale - scale.ratio; - - /*new JsonLoader() - .GET('https://pixabay.com/api/?key=14915210-5eae157281211e0ad28bc8def&category=nature') - .then(function(result:PixabayResponse) { - images.data = images.data.concat([for (item in result.hits) URL(item.largeImageURL)]); - });*/ } private function imageViewFactory(index:Int, image:ImageSource):ImageView { @@ -50,6 +45,15 @@ typedef PixabayResponse = { return result; } + private function moreImages(view:ButtonView):Void { + view.visible = false; + new JsonLoader() + .GET('https://pixabay.com/api/?key=14915210-5eae157281211e0ad28bc8def&category=nature') + .then(function(result:PixabayResponse) { + images.data = images.data.concat([for (item in result.hits) URL(item.largeImageURL)]); + }); + } + public function setScale(value:Float):Void { render.scale = value + scale.ratio; } diff --git a/src/haxe/ru/m/puzzlez/view/PuzzlezAppView.yaml b/src/haxe/ru/m/puzzlez/view/PuzzlezAppView.yaml index ca9c561..32592cf 100644 --- a/src/haxe/ru/m/puzzlez/view/PuzzlezAppView.yaml +++ b/src/haxe/ru/m/puzzlez/view/PuzzlezAppView.yaml @@ -22,6 +22,10 @@ views: +onDataSelect: ~start geometry.margin: 5 overflow.y: scroll + - id: more + $type: haxework.view.form.ButtonView + text: More + +onPress: ~moreImages - id: scale $type: haxework.view.list.VScrollBarView ratio: 0.5 diff --git a/src/icon.png b/src/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d23bbf9b31691b6dabcff3f848240faafdf6cc53 GIT binary patch literal 23894 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 literal 0 HcmV?d00001