Comparar commits
361 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| 99f6c52e68 | |||
| 21d0d5bbbc | |||
| 7331c584e2 | |||
| 690240ba74 | |||
| e20379e073 | |||
| 2f67b6cd16 | |||
| 98a9708b3b | |||
| c4c1bd906d | |||
| 45b01b7f7a | |||
| 269a9098e5 | |||
| cc832c6207 | |||
| 5050e00d66 | |||
| 93c3d098ad | |||
| 93d7cfa09f | |||
| 8a5263a2ea | |||
| 733e57850a | |||
| b9ef38cc0f | |||
| 53ee46ae02 | |||
| 5e750fb94c | |||
| 8e9ceeeaef | |||
| 6990d6083c | |||
| 6647390f1f | |||
| 79683b5c34 | |||
| cea3aeb98b | |||
| a4a2aed438 | |||
| abf5d416b1 | |||
| d00dfb1db4 | |||
| f85971c309 | |||
| 48b0ef6286 | |||
| a6c3f9508e | |||
| b0588f8434 | |||
| 0403d4d3c9 | |||
| 89d84a9b18 | |||
| 1da7c4dd45 | |||
| 4484c4f4f6 | |||
| 028b075055 | |||
| 75317e3616 | |||
| 279cae7373 | |||
| 6cc3a39aa3 | |||
| 38fd98030d | |||
| ae8b7bee61 | |||
| d2288e11de | |||
| 74fbd2098d | |||
| 774c337ddd | |||
| ebf28feb92 | |||
| 5dca937c49 | |||
| f36f744c69 | |||
| 1e1ec33804 | |||
| 3dd2a1ad5a | |||
| 0c1ff392fd | |||
| 16a66809cd | |||
| d7a695cb33 | |||
| 804642234d | |||
| bfc6e662ca | |||
| 66a3b58b9b | |||
| 2c8cdba0f8 | |||
| 651ce5b672 | |||
| fa214ef5a4 | |||
| 75b809d7d1 | |||
| 43bd60844c | |||
| ab75ff6ea5 | |||
| 68abe58277 | |||
| b2d711ece5 | |||
| 4a58f7c45f | |||
| 20160eba9c | |||
| b73dab7310 | |||
| 8520f6a559 | |||
| 9e83f9f516 | |||
| 2b344cec0b | |||
| fba576c8bd | |||
| 30f22bc939 | |||
| 09e5c4c233 | |||
| d12ca0937d | |||
| 7b3e7c37f4 | |||
| 91d188efd8 | |||
| 8e8e4c3c96 | |||
| f0c385dd8b | |||
| 5fc8aaace4 | |||
| 734abf3104 | |||
| 170470bca1 | |||
| 5ff0c94ba1 | |||
| 0fd5c2bb54 | |||
| 4b2d5271d3 | |||
| 68da794580 | |||
| d08a3d5560 | |||
| cffc6468ed | |||
| d9958b8298 | |||
| a5b8418f17 | |||
| e96b3cd4c0 | |||
| 6b54aff06b | |||
| 22bb7dfc66 | |||
| e80a3e9955 | |||
| 0ea7ca09f9 | |||
| 7137281d48 | |||
| a3a36dc2e6 | |||
| c41fa2f7df | |||
| 3ae90c647d | |||
| 3cc869524a | |||
| f4788bb7df | |||
| 1cd69df438 | |||
| b98c2ababf | |||
| a40939f7cd | |||
| 59f42bb220 | |||
| 8da13147fe | |||
| 097387ae0a | |||
| b8ba83b330 | |||
| cec934847e | |||
| e0492c8cd2 | |||
| e4e472f28b | |||
| 925da69e02 | |||
| 0cba9df9f3 | |||
| e2f12dc7f9 | |||
| 6bb24f0f8a | |||
| a23a3ac322 | |||
| 3399163387 | |||
| e8044496b7 | |||
| 7cb91aa2b2 | |||
| ebafba7c10 | |||
| a3b2ad302e | |||
| 9f7da7071f | |||
| 2e8aff7e74 | |||
| 0d38710ba7 | |||
| 5ad5420ca9 | |||
| ddf8ecb6a0 | |||
| 66f4a5d95e | |||
| d3e0c8db83 | |||
| 2acc93107b | |||
| a659f06d24 | |||
| 1687e29742 | |||
| be416f7e0e | |||
| 6a15844bcb | |||
| c458f598a3 | |||
| 9cf2344d80 | |||
| d6b828284d | |||
| d777697a94 | |||
| 4cf1ba6375 | |||
| a9e8c862a8 | |||
| f63da01efa | |||
| 5a56478d92 | |||
| f46749ef73 | |||
| 59ce75a465 | |||
| c8bb6b93de | |||
| 71e55f8887 | |||
| 655f3a892c | |||
| 1ca29b647a | |||
| 9fad962f56 | |||
| 82e0e4e5bb | |||
| fc6f575c3e | |||
| 220ea736c3 | |||
| b5dd99c10d | |||
| a0aae576dc | |||
| 43acad0776 | |||
| 896c70daa0 | |||
| 5622bd855f | |||
| 2c31b9d096 | |||
| 0bbccc0800 | |||
| 44e4871ad4 | |||
| 4f3371486c | |||
| 9cddc7e813 | |||
| c0e2ee9cbe | |||
| 2addd9817c | |||
| 7f8a7a8358 | |||
| ae53f31cf8 | |||
| 3aaf662195 | |||
| 1f960dbb7b | |||
| 1424bc5d8a | |||
| e5cb1b7165 | |||
| 6a14ae75ce | |||
| 8e04e9617a | |||
| 84bf791b30 | |||
| 8cb12e8e8a | |||
| 58b1329c80 | |||
| 3859074b84 | |||
| 8f7e814869 | |||
| 8980fc6729 | |||
| 9245d6c274 | |||
| 15e45f806d | |||
| 09c4804991 | |||
| 17521635ba | |||
| 2794ecb718 | |||
| 7a57341fa4 | |||
| 5332a160a4 | |||
| f9502b5615 | |||
| d77831d212 | |||
| 3c93fee22c | |||
| a2bd29bf41 | |||
| 91fa61c56d | |||
| f13027dfa9 | |||
| 60eadb75b1 | |||
| 7a71702dc9 | |||
| b639048bef | |||
| a9a6170adb | |||
| 8e6344b2c0 | |||
| 3cc8791e7b | |||
| daa5b1d7e9 | |||
| 0d794aeeb8 | |||
| 81d81d380f | |||
| efff6928d5 | |||
| 075291c3f3 | |||
| 848d1343ad | |||
| 27bef9a38f | |||
| c80b012e0a | |||
| 9138ee7a31 | |||
| 89dd574443 | |||
| 126fa9bace | |||
| 616a5d50c7 | |||
| c8a33c4e72 | |||
| 877dc19787 | |||
| d560d8ad12 | |||
| 6f8ea2910e | |||
| 70f7ec29b9 | |||
| 702f99c0ff | |||
| 861737d5de | |||
| b7cc171844 | |||
| bb654391c3 | |||
| e3f6c28634 | |||
| dfd13adc3d | |||
| 59d807c597 | |||
| 8b67da38b2 | |||
| f576673e04 | |||
| f37b86ecb7 | |||
| 278aa5a625 | |||
| 9134a1e285 | |||
| fea9fdb11d | |||
| a149e3232f | |||
| 2415d1ebc3 | |||
| 13f7a82234 | |||
| f268f1fe57 | |||
| fdfd1b630a | |||
| 0c95660fa1 | |||
| 5c3ebd81a6 | |||
| 77edae9a6f | |||
| 8a62c469da | |||
| f2a4b7e2f1 | |||
| b6c09f57fe | |||
| f6514bd802 | |||
| 03ec9f8f2f | |||
| 801c09dad5 | |||
| c0051a0815 | |||
| 55a3387de8 | |||
| 00963f5819 | |||
| 368aa2cc6e | |||
| 70a4d5bd24 | |||
| 2c39d04d94 | |||
| 79943b425e | |||
| 61d6ac3629 | |||
| 7860cd8ad9 | |||
| f30face4f6 | |||
| 8a08468cc7 | |||
| e989c40d58 | |||
| 6c87b66ff9 | |||
| c581132a5f | |||
| 712e295ff5 | |||
| e9eae6fd28 | |||
| afc69f6249 | |||
| f43d6540ca | |||
| ef4c56c5cb | |||
| e1b91fdc47 | |||
| 861ecc4adb | |||
| 21dc092074 | |||
| 4996afe9ba | |||
| 6378f82369 | |||
| 90ed6bf004 | |||
| ea6167927c | |||
| c765b49c8f | |||
| 52c007d82b | |||
| 2fa3c48120 | |||
| b693a8b956 | |||
| 3a15e3d971 | |||
| 22f6db6a84 | |||
| f37d424741 | |||
| 826c0f9b76 | |||
| 6a86ec23f3 | |||
| 8e36e88337 | |||
| bf75080abe | |||
| 98a69c1715 | |||
| f91445b4b8 | |||
| 687bdbd20c | |||
| 75d25f56a8 | |||
| 3796f17396 | |||
| 66cae0d24b | |||
| 5c1f50cd1b | |||
| 8ecc3203c6 | |||
| 76dbd4be47 | |||
| d41f42964c | |||
| 468b5af314 | |||
| bad2c783a0 | |||
| 3aad390dc3 | |||
| e28a120b7c | |||
| 42b67933ad | |||
| 365e1fee7b | |||
| 8fbd35d1a2 | |||
| 2cb2901e7d | |||
| 58c0e528fe | |||
| 964ea4c80f | |||
| 71106eb218 | |||
| 9419de1bfd | |||
| 69780a5f1c | |||
| 8e0f36a805 | |||
| b9e0b34475 | |||
| e49918f247 | |||
| 042c6ede96 | |||
| 3bfada7aeb | |||
| ae9e02101b | |||
| 3f7796baa3 | |||
| d2d9e569dc | |||
| 0eb73f29b4 | |||
| d3a934a355 | |||
| 0ac197e6f8 | |||
| 4c4e1cb662 | |||
| edc0aabdbf | |||
| a32f71bfb0 | |||
| a45f1d291c | |||
| 1c182d0fc2 | |||
| 0ddfcbdce9 | |||
| e30c4f9dff | |||
| e2e0d13e53 | |||
| a14b6251d8 | |||
| feeee2955f | |||
| c47d1196d6 | |||
| 22641113b3 | |||
| 307255c3f3 | |||
| 88cd1f2946 | |||
| 176bf963f2 | |||
| 3edda2692c | |||
| 09f81bbd98 | |||
| c2005df48e | |||
| d05e6f9302 | |||
| 345965b6a4 | |||
| c990ba4c97 | |||
| 2e5f1f8cf8 | |||
| 26438fee34 | |||
| ac83504698 | |||
| 7f2ecb3d25 | |||
| 44721ba033 | |||
| 7a2f0990b3 | |||
| 714f7cac03 | |||
| 51cc1af598 | |||
| 9e83805958 | |||
| 70d3413685 | |||
| f067595e6a | |||
| 90e68febaa | |||
| a030410fd1 | |||
| e1e3a6f5d7 | |||
| 36ba1e7c40 | |||
| 72aadae588 | |||
| 6e31dacb19 | |||
| ec42022f2b | |||
| 905eebde21 | |||
| f4ee7e11a9 | |||
| be63b105a8 | |||
| 679760c38e | |||
| 6d50e3d340 | |||
| 1e58fb3229 | |||
| ebc813e4af | |||
| 2ff2d79592 | |||
| 1b44b855a3 | |||
| 6cf13ddcb7 | |||
| 0b7b179db0 | |||
| 0602327dcf | |||
| f6d2ab92bb |
@@ -1,21 +0,0 @@
|
||||
# Validate changes
|
||||
# cat .codecov.yml | curl --data-binary @- https://codecov.io/validate
|
||||
|
||||
comment: on # enable pull request comment
|
||||
coverage:
|
||||
range: 70..100
|
||||
round: down # round down to the precision point
|
||||
precision: 2
|
||||
status:
|
||||
project: # compare project coverage against the base of pr
|
||||
default:
|
||||
target: 75% # min coverage ratio to be considered a success
|
||||
threshold: null # allow coverage to drop by X%
|
||||
base: auto
|
||||
patch: # provides an indication on how well the pull request is tested
|
||||
default:
|
||||
target: 70% # min coverage ratio to be considered a success
|
||||
ignore:
|
||||
- "src/electron/start.js"
|
||||
- "src/providers/export/tensorFlowRecords/tensorFlowRecordsProtoBuf_pb.js"
|
||||
- "src/redux/store/store.ts"
|
||||
@@ -1,13 +0,0 @@
|
||||
version: 1
|
||||
|
||||
update_configs:
|
||||
target_branch: "develop"
|
||||
|
||||
# Keep package.json (& lockfiles) up to date weekly
|
||||
- package_manager: "javascript"
|
||||
directory: "/"
|
||||
update_schedule: "weekly"
|
||||
|
||||
default_labels:
|
||||
- "dependencies"
|
||||
- "dependabot"
|
||||
@@ -1,18 +0,0 @@
|
||||
# EditorConfig is awesome: https://EditorConfig.org
|
||||
|
||||
# Default:
|
||||
# https://github.com/editorconfig/editorconfig-defaults/blob/master/editorconfig-defaults.json
|
||||
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
# Unix-style newlines with a newline ending every file
|
||||
[*]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
[*.yml]
|
||||
indent_size = 2
|
||||
@@ -1,5 +0,0 @@
|
||||
# react-scripts build use this to generate the right path for assets
|
||||
# relative to index.html
|
||||
# without it, you'll see error like this
|
||||
# Failed to load resource: net::ERR_FILE_NOT_FOUND /favicon.ico:1
|
||||
PUBLIC_URL=.
|
||||
@@ -1 +0,0 @@
|
||||
REACT_APP_INSTRUMENTATION_KEY=40a80c0c-b913-45b7-afc9-c7eb3ed62900
|
||||
@@ -1 +0,0 @@
|
||||
REACT_APP_INSTRUMENTATION_KEY=0b9e5117-c78d-40c9-9338-921092cde49a
|
||||
@@ -1,2 +0,0 @@
|
||||
HOST_TYPE=electron
|
||||
INSTRUMENTATION_KEY=40a80c0c-b913-45b7-afc9-c7eb3ed62900
|
||||
@@ -1,32 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Desktop (please complete the following information):**
|
||||
- OS: [e.g. iOS]
|
||||
- Browser [e.g. chrome, safari]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
@@ -1,20 +0,0 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
@@ -1,45 +1,37 @@
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
/.vscode
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
/test-output
|
||||
.pnp.js
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# packaging
|
||||
/build
|
||||
|
||||
# releases
|
||||
/releases/
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
.env
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# dev
|
||||
secrets.sh
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
|
||||
# ide
|
||||
.idea
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# complexity reports
|
||||
es6-src/
|
||||
report/
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
|
||||
# VoTT Server
|
||||
server/lib
|
||||
server/node_modules
|
||||
server/coverage
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (http://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules
|
||||
jspm_packages
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
10.15.1
|
||||
@@ -1,3 +0,0 @@
|
||||
# Path to sources
|
||||
sonar.sources=src/
|
||||
sonar.exclusions=**/*.test.ts*,src/common/localization/*
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible Node.js debug attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Debug Renderer",
|
||||
"type": "chrome",
|
||||
"request": "launch",
|
||||
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron",
|
||||
//"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron.cmd",
|
||||
"runtimeArgs": [
|
||||
"${workspaceRoot}",
|
||||
"--enable-logging",
|
||||
"--remote-debugging-port=9222"
|
||||
],
|
||||
"sourceMaps": false
|
||||
},
|
||||
{
|
||||
"name": "Debug Main",
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"cwd": "${workspaceRoot}",
|
||||
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron",
|
||||
//"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron.cmd",
|
||||
"program": "${workspaceRoot}/main.js"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,158 +0,0 @@
|
||||
# VoTT Changelog
|
||||
|
||||
<!-- cl-start -->
|
||||
|
||||
# [2.1.0](https://github.com/Microsoft/VoTT/compare/v2.0.0...v2.1.0) (04-29-2019)
|
||||
[GitHub Release](https://github.com/Microsoft/VoTT/releases/tag/v2.1.0)
|
||||
|
||||
- fix: Updates backwards compat & fixes cntk export image bug (#789)
|
||||
- fix: Updates export options for pascalVOC rename (#788)
|
||||
- fix: change method for alloc string to buffer (#777)
|
||||
- feat: Add CSV Exporter (#757)
|
||||
- fix: Fix display of tag color picker (#782)
|
||||
- feat: Active Learning Updates (#778)
|
||||
- doc: updates to readme and changelog (#781)
|
||||
- doc: Adds CODE_OF_CONDUCT.md (#779)
|
||||
- doc: Add bug & feature templates (#780)
|
||||
- fix: Refactored project tag/delete updates (#764)
|
||||
- fix: Enables selection of azure region for custom vision export (#765)
|
||||
- feat: CNTK Export Provider (#771)
|
||||
- feat: Save partial project progress during project creation (#769)
|
||||
- fix: Fixes ymax and rename Tensorflow nama everywhere (#763)
|
||||
|
||||
# [2.0.0](https://github.com/Microsoft/VoTT/compare/v2.0.0-preview.3...v2.0.0) (04-12-2019)
|
||||
[GitHub Release](https://github.com/Microsoft/VoTT/releases/tag/v2.0.0)
|
||||
|
||||
- doc: update v1/master reference (#748)
|
||||
- ci: update pipeline for v2 flipover to master (#747)
|
||||
- feat: add ability to import v1 video project (#726)
|
||||
- fix: Move findDOMNode outside of render method (#745)
|
||||
- doc: updating readme (#733)
|
||||
- fix: Adjusts z-index video player overlays (#740)
|
||||
- fix: Updated keyboard manager to support meta (aka cmd) key (#743)
|
||||
- fix: don't allow invalid path characters in project name (#741)
|
||||
- fix: switch asset count to include video frames (#717)
|
||||
- feat: Enforce asset tagging before switching assets (#730)
|
||||
- feat: Auto-size video/image assets and position canvas (#734)
|
||||
- fix: CORS warning message for Bing Image Search (#732)
|
||||
- feat: Adds option to specify if images are included with JSON export (#728)
|
||||
- fix: Simplifies asset load flow (#727)
|
||||
- fix: Render Enhancments (#719)
|
||||
- feat: Add toast messages when entities are created / deleted (#714)
|
||||
- feat: New Tag Input Component (#710)
|
||||
- feat: Add more export options to pascal voc exporter (#705)
|
||||
- feat: exclude desktop functionality from browser target (#713)
|
||||
- feature: tracking app metrics for web olny (#712)
|
||||
- fix: Catch error while tfrecord image not loaded (#701)
|
||||
- ci: clean up deprecated pipelines (#708)
|
||||
- feat: Update asset status to use badges & resize sidebar (#709)
|
||||
- ci: refactor plato report pipeline (#707)
|
||||
- ci: refactor web deploy pipeline (#702)
|
||||
- feat: Help menu displaying keyboard shortcuts (#689)
|
||||
- fix: replace default react favicon with tags icon (#699)
|
||||
- WIP: resizes thumbnails and sidebar (#691)
|
||||
- ci: update pipelines to work for all branches with prefix dev (#700)
|
||||
|
||||
# [2.0.0-preview.3](https://github.com/Microsoft/VoTT/compare/v2.0.0-preview.2...v2.0.0-preview.3) (03-20-2019)
|
||||
[GitHub Release](https://github.com/Microsoft/VoTT/releases/tag/v2.0.0-preview.3)
|
||||
|
||||
- ci: Clean up sonar cloud issues
|
||||
- Remove height from root style (#694)
|
||||
- fix: Don't call tag click with invalid hot key (#690)
|
||||
- refactor: remove redux-invariant & redux-logging from production (#680)
|
||||
- fix: Cleans up some of the flexbox styling overflow content heights (#683)
|
||||
- Blurring tag input on click and change (#679)
|
||||
- fix: metrics page throw error if project has no tags (#681)
|
||||
- feat: Updated UX of project metrics to include charts (#678)
|
||||
- fix: open file containing special characters in the name [AB#17533] (#671)
|
||||
- fix: Re-apply tags in editor when project tags are updated (#673)
|
||||
- fix: remove profile settings and active learning (#677)
|
||||
- fix: misspelling in applicationActions.ts [AB#17157]
|
||||
- fix: display spinner icon on metrics panel when loading (#669)
|
||||
- fix: standardize default export option to "visited" (#667)
|
||||
- fix: Display asset load error when an asset fails to load (#654)
|
||||
- Fix saving asset metadata for all valid asset type (#668)
|
||||
- ci: disable web vott deploy for PR (#670)
|
||||
- feat: Enable copy rectangle functionality in editor (#651)
|
||||
- ci: Merge v2 into dev (#666)
|
||||
- feat: Added Custom TitleBar & Status Bar (#664)
|
||||
|
||||
# [v2.0.0-preview.2](https://github.com/Microsoft/VoTT/compare/v2.0.0-preview.1...v2.0.0-preview.2) (03-08-2019)
|
||||
[GitHub Release](https://github.com/Microsoft/VoTT/releases/tag/v2.0.0-preview.2)
|
||||
|
||||
- Bug/17537/fix title (#660)
|
||||
- Ignore error from react drag n drop (#648)
|
||||
- ci: Azure DevOps pipeline definitions for VoTT Web CD (#658)
|
||||
- ci: script to deploy VoTT to Azure (#656)
|
||||
- fix: Resolves issue exporting all assets (#649)
|
||||
- fix: save tagged video frames as "jpg" files (#641)
|
||||
- fix: remove grey and white from tagColors (#645)
|
||||
- Handle project with no tags while loading regions (#644)
|
||||
- fix: remove "All assets" from export options dropdown (#646)
|
||||
- feat: Clear Regions updates [AB#17269] (#647)
|
||||
- fix: Don't allow invalid pasting (#640)
|
||||
- fix: set default export format in project (#642)
|
||||
- fix: Tagging new region only applies to one region (#635)
|
||||
- feature: Enhanced error message for unknown errors (not in prod mode) (#639)
|
||||
- feature: display project metrics (#638)
|
||||
- fix: re-add exportProject to registerToolbar (#634)
|
||||
- fix: Upgrade vott-react and add test cases for adding new tags (#637)
|
||||
- ci: modify pipeline to also run off dev branch (#633)
|
||||
- fix: Updated EditorTagsInput to work with vott-react (#630)
|
||||
- fix: Wrap the delete call to protect against 404's (#632)
|
||||
- feat: add ability to import v1 projects (#610)
|
||||
- feat: add hotkeys for all editor toolbar items and simplify tag input hotkeys (remove ctrl+) (#617)
|
||||
- fix: Fixes issue where user is unable to navigate to new project screen (#629)
|
||||
- feat: Copy, Cut, Paste and Clear (#624)
|
||||
- docs: adds list of shortcuts (hotkeys) to docs (#628)
|
||||
- fix: replaces emtpy with empty throughout (#627)
|
||||
- fix: Resolves typescript tsc compile issues for v3.1.6 (#625)
|
||||
- fix: Move last visited tag settings to reducer to fix delete file assets bug [#AB17101] (#626)
|
||||
- feat: Export video frames AB#16583 (#585)
|
||||
- ci: make sure build fail if codecov token is missing (#621)
|
||||
- fix: User can navigate between key frames using keyboard accelerators (#619)
|
||||
- fix: Delete asset metadata files when project is deleted (#620)
|
||||
- feat: Ability to retain the state of the last viewed asset on project open [#AB17139] (#615)
|
||||
- feat: Locked tags for tagging regions (#600)
|
||||
- ci: update release names and package details (#614)
|
||||
- ci: add changelog and release scripts (#608)
|
||||
- fix: Fixes issue where regions cannot be deleted (#612)
|
||||
- docs: update contribution guidelines for changelog (#606)
|
||||
- feat: Add Project version info (#609)
|
||||
- fix: Correct bounding box values on region move (#604)
|
||||
- fix:Add Connection button displays with correct style (#603)
|
||||
- ci: update sonarcloud to ignore test files (#602)
|
||||
- fix:Resolves issue where user is unable to create new project (#601)
|
||||
- fix: Navigating to homepage should't close any open project (#596)
|
||||
- feat: Add tag to project while importing TFRecords [AB#17001] (#586)
|
||||
- fix: Disables KeyboardManager when focused on input elements (#595)
|
||||
- fix: Corrects canvas sizing and region sizes (#592)
|
||||
- refactor:Refactor canvas component to utilize internal state (#594)
|
||||
- rebasing and squashing wabrez/integrat-vott-react (#591)
|
||||
- Only hook video state change on non-preview assets AB#17076 (#575)
|
||||
- Fixes previous/next buttons to navigate between assets (#576)
|
||||
- add keyboard shorcut for navigating video frames (#588)
|
||||
- Removed toolbar items that are not implemented (#589)
|
||||
- fix sidebar so it's in sync with asset navigation (#584)
|
||||
- Updating report CI scripts to be more robust. (#581)
|
||||
- Refactor region tags to only be a string array (#587)
|
||||
- Fix Asset detection from path (#578)
|
||||
- Inital user docs for video player AB#17082 (#580)
|
||||
- EditorPage does not have correct state when navigating directly via URL- AB#17079 (#577)
|
||||
- Added CI script for updating complexity reports, pushing to blob (#574)
|
||||
- Import region metadata from TFRecords (#566)
|
||||
- Added context menu option in electron for all input fields AB#16922 (#570)
|
||||
- Adding visited/tagged marks on video timeline AB #16772 (#556)
|
||||
- Fixed issue where validation was not showing up for source/target connection in project settings (#571)
|
||||
- TFRecords import refactoring (#553)
|
||||
- Added data-tag-name attr to the tag element (#569)
|
||||
- Added v2 complexity report scripts. (#550)
|
||||
- Update canvastools and fix tests (#567)
|
||||
- Fixed delete project bug AB#17024 (#568)
|
||||
- [Fixes AB#16951] - support up/down & w/s key for navigating assets (#547)
|
||||
- Update project when in-use connection changes AB#16921 (#564)
|
||||
- Added localization for export JSON files AB#16387 (#554)
|
||||
- Enhanced video support (#544)
|
||||
- Add support for keyUp and keyPress events (#539)
|
||||
- Small refactor of canvas and editor page (#538)
|
||||
- enable sonarcloud pr scan (#530)
|
||||
@@ -1,76 +0,0 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at opensource@microsoft.com. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
https://www.contributor-covenant.org/faq
|
||||
@@ -1,111 +0,0 @@
|
||||
# Contributing to VoTT
|
||||
|
||||
We welcome [issues](https://github.com/Microsoft/VoTT/issues) and [pull requests](https://github.com/Microsoft/VoTT/pulls) into the project. We ask that you follow these simple guidelines:
|
||||
|
||||
<!-- generated using: https://www.npmjs.com/package/markdown-toc-->
|
||||
<!-- command: `markdown-toc -i CONTRIBUTING.md --bullets "*"`-->
|
||||
|
||||
<!-- toc -->
|
||||
|
||||
* [Issues](#issues)
|
||||
* [Pull Requests](#pull-requests)
|
||||
* [Commit Message Guidelines](#commit-message-guidelines)
|
||||
* [Commit Message Format](#commit-message-format)
|
||||
* [Header](#header)
|
||||
* [Type](#type)
|
||||
* [Short Description](#short-description)
|
||||
* [Body](#body)
|
||||
* [Footer](#footer)
|
||||
* [Commit Message Example](#commit-message-example)
|
||||
* [Style](#style)
|
||||
|
||||
<!-- tocstop -->
|
||||
|
||||
## Issues
|
||||
|
||||
* Look for duplicate issues & comment on thread if experiencing something similar
|
||||
* Fill in template information (platform, OS, version, screenshots, etc.)
|
||||
|
||||
## Pull Requests
|
||||
|
||||
1. Find an issue to work on, or create a new one.
|
||||
1. Fork the repo and/or pull down the latest changes from `master`.
|
||||
1. Create branch following naming convention: `git checkout -b issue-<###>-<short-description>`.
|
||||
1. Write code.
|
||||
1. Add unit tests.
|
||||
1. Verify linting and unit tests by running `npm test`.
|
||||
1. Update docs if needed.
|
||||
1. Rebase on `master` and resolve conflicts.
|
||||
1. Commit your changes using a descriptive commit message that follows [our commit message conventions](#commit-message-guidelines). Adherence to these conventions is necessary for the [change log](CHANGELOG.md) to be automatically generated from these messages.
|
||||
1. Submit PR to `master` branch.
|
||||
|
||||
Please try to keep PRs small to decrease the time required to review and merge.
|
||||
|
||||
## Commit Message Guidelines
|
||||
|
||||
We have adopted standards similar to [Angular](https://github.com/angular/angular/blob/master/CONTRIBUTING.md#commit) for how our git commit messages should be formatted. This leads to more readable messages, which are easier to follow when looking through the project history. Those messages are used to generate the [VoTT change log](CHANGELOG.md).
|
||||
|
||||
### Commit Message Format
|
||||
|
||||
Each commit message consists of a **header**, a **body** and a **footer**.
|
||||
|
||||
```text
|
||||
<type>: <short description>
|
||||
<BLANK LINE>
|
||||
<body>
|
||||
<BLANK LINE>
|
||||
<footer>
|
||||
```
|
||||
|
||||
### Header
|
||||
|
||||
#### Type
|
||||
|
||||
Must be one of the following:
|
||||
|
||||
* **build**: Changes that affect the build system or external dependencies
|
||||
* **ci**: Changes to our CI configuration files and scripts
|
||||
* **docs**: Documentation only changes
|
||||
* **feat**: A new feature
|
||||
* **fix**: A bug fix
|
||||
* **perf**: A code change that improves performance
|
||||
* **refactor**: A code change that neither fixes a bug nor adds a feature
|
||||
* **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
|
||||
* **test**: Adding missing tests or correcting existing tests
|
||||
|
||||
#### Short Description
|
||||
|
||||
Contains a succinct description of the change:
|
||||
|
||||
* use the imperative, present tense: "change" not "changed" nor "changes"
|
||||
* don't capitalize the first letter
|
||||
* no dot (.) at the end
|
||||
|
||||
### Body
|
||||
|
||||
Just as in the **short description**, use the imperative, present tense: "change" not "changed" nor "changes".
|
||||
The body should include the motivation for the change and contrast this with previous behavior.
|
||||
|
||||
### Footer
|
||||
|
||||
The footer should contain any information about **breaking changes** and is also the place to
|
||||
reference Azure DevOps user stories/tasks or GitHub issues that this commit **closes**.
|
||||
|
||||
### Commit Message Example
|
||||
|
||||
```text
|
||||
fix: add debouncing to asset scroller to correct browser scroll position
|
||||
|
||||
There is no debouncing when we store the asset container's scroll position.
|
||||
This results in erratic, jumpy scrolling and a poor user experience. Improve
|
||||
stability and usability with debouncing.
|
||||
|
||||
AB#17056
|
||||
```
|
||||
|
||||
## Style
|
||||
|
||||
* This repo uses [EditorConfig](https://editorconfig.org/) to maintain consistent styles across multiple platforms and IDEs. Please refer to
|
||||
this [guide](docs/STYLE.md) for more information.
|
||||
|
||||
Thank you!
|
||||
@@ -1,6 +1,6 @@
|
||||
The MIT License
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2016-2019 Microsoft Commercial Software Engineering
|
||||
Copyright (c) 2016 Microsoft Partner Catalyst Team
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -9,13 +9,13 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
react: npm run react-start
|
||||
electron: npm run electron-start
|
||||
@@ -1,295 +1,203 @@
|
||||
# VoTT (Visual Object Tagging Tool)
|
||||
# VoTT: Visual Object Tagging Tool
|
||||
|
||||
[](https://dev.azure.com/msft-vott/VoTT/_build/latest?definitionId=25&branchName=master)
|
||||
[](https://codecov.io/gh/Microsoft/VoTT)
|
||||
[](https://sonarcloud.io/dashboard?id=Microsoft_VoTT)
|
||||
This tool provides end to end support for generating datasets and validating object detection models from video and image assets.
|
||||
|
||||
[Complexity Analysis Report](https://vottv2.z5.web.core.windows.net/)
|
||||
### End to End Object Detection Pipeline:
|
||||

|
||||
|
||||
----------
|
||||
The tool supports the following **features**:
|
||||
|
||||
An open source annotation and labeling tool for image and video assets.
|
||||
|
||||
VoTT is a React + Redux Web application, written in [TypeScript](https://github.com/Microsoft/TypeScript). This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
|
||||
|
||||
Features include:
|
||||
|
||||
* The ability to label images or video frames
|
||||
* Extensible model for importing data from local or cloud storage providers
|
||||
* Extensible model for exporting labeled data to local or cloud storage providers
|
||||
|
||||
VoTT helps facilitate an end-to-end machine learning pipeline:
|
||||
|
||||

|
||||
- The ability to tag and annotate Image Directories or Stand alone videos.
|
||||
- Computer-assisted tagging and tracking of objects in videos using the [Camshift tracking algorithm](http://opencv.jp/opencv-1.0.0_org/docs/papers/camshift.pdf).
|
||||
- Exporting tags and assets to CNTK or YOLO format for training an object detection model.
|
||||
- Running and validating a trained CNTK object detection model on new videos to generate stronger models.
|
||||
|
||||
## Table of Contents
|
||||
<!-- generated using: https://www.npmjs.com/package/markdown-toc-->
|
||||
<!-- command: `markdown-toc -i README.md --bullets "*"`-->
|
||||
|
||||
<!-- toc -->
|
||||
- [Installation](#installation)
|
||||
- [Tagging a Video](#tagging-a-video)
|
||||
- [Tagging an Image Directory](#tagging-an-image-directory)
|
||||
- [Reviewing and Improving an Object Detection Model](#reviewing-and-improving-an-object-detection-model)
|
||||
- [Upcoming Features](#upcoming-features)
|
||||
- [How to Contribute](#how-to-contribute)
|
||||
|
||||
---
|
||||
## Installation
|
||||
|
||||
### Installing the Visual Object Tagging Tool
|
||||
|
||||
1. Download and extract the app [release package](https://github.com/CatalystCode/CNTK-Object-Detection-Video-Tagging-Tool/releases)
|
||||
|
||||
2. Run the app by launching the "VOTT" executable which will be located inside the unzipped folder.
|
||||
|
||||
### Installing CNTK with the FRCNN Prerequisites for Reviewing Model
|
||||
|
||||
*Please note that installation of **CNTK and FAST-RCNN dependencies** are **optional for tagging** and are **only required for CNTK model review and training**.*
|
||||
|
||||
1. Install [CNTK](https://github.com/Microsoft/CNTK/wiki/Setup-CNTK-on-your-machine) (*Note: currently the tool only supports the full installation method (non pip) of CNTK*).
|
||||
|
||||
2. Follow the setup instructions of the [CNTK Fast-RCNN tutorial](https://github.com/Microsoft/CNTK/wiki/Object-Detection-using-Fast-R-CNN#setup) (*Note: Fast-RCNN currently only supports Linux python version 3.4 and not 3.5*).
|
||||
|
||||
3. Configure `CNTK-Config.json` (which resides in the '\resources\app' directory of the tagging tool) with the following properties to enable the model review feature:
|
||||
|
||||
```json
|
||||
{
|
||||
"cntkPath" : "{CNTK Path default is c:/local/cntk}",
|
||||
}
|
||||
```
|
||||
## Tagging a Video
|
||||
|
||||
1. Select the option to tag a video
|
||||
|
||||

|
||||
|
||||
2. Load an MP4 video file either by dragging it into the app or clicking on and selecting it.
|
||||
|
||||

|
||||
|
||||
3. Configure the tagging job and specify the settings in the screenshot below:
|
||||
|
||||

|
||||
|
||||
**Frame Extraction Rate**: number of frames to tag per second of video<br>
|
||||
|
||||
**Tagging Region Type**: type of bounding box for tagging regions<br>
|
||||
- *Rectangle*: tag bounding boxes of any dimension
|
||||
- *Square*: tag bounding boxes of auto-fixed dimensions
|
||||
|
||||
**Suggested Region Method**: how to suggest regions for next frame<br>
|
||||
- *Tracking*: Use camshift to track tagged regions in next frame
|
||||
- *Copy Last Frame*: Copy all regions to the next frame.
|
||||
|
||||
**Enable Scene Change Detection**: Detect scene changes to prevent false positives when tracking. (Note this option is slightly slower)
|
||||
|
||||
**Labels**: labels of the tagged regions (e.g. `Cat`, `Dog`, `Horse`, `Person`)<br>
|
||||
|
||||
4. Tag the video frame by frame
|
||||
|
||||

|
||||
|
||||
**Tagging**: click and drag a bounding box around the desired area, then move or resize the region until it fits the object
|
||||
- Selected regions appear as red  and unselected regions will appear as blue .
|
||||
- Assign a tag to a region by clicking on it and selecting the desired tag from the labeling toolbar at the bottom of the tagging control
|
||||
- Click the  button to clear all tags on a given frame
|
||||
|
||||
**Navigation**: users can navigate between video frames by using the  buttons, the left/right arrow keys, or the video skip bar
|
||||
- Tags are auto-saved each time a frame is changed
|
||||
|
||||
**Tracking**: new regions are tracked by default until a given scene changes.
|
||||
- Since the [camshift algorithm](http://opencv.jp/opencv-1.0.0_org/docs/papers/camshift.pdf) has some known limitations, you can disable tracking for certain sets of frames. To toggle tracking *on* and *off* use the file menu setting, or the keyboard shortcut Ctrl/Cmd + T.
|
||||
|
||||
|
||||
- [VoTT (Visual Object Tagging Tool)](#vott-visual-object-tagging-tool)
|
||||
- [Table of Contents](#table-of-contents)
|
||||
- [Getting Started](#getting-started)
|
||||
- [Download and install a release package for your platform (recommended)](#download-and-install-a-release-package-for-your-platform-recommended)
|
||||
- [Build and run from source](#build-and-run-from-source)
|
||||
- [Run as Web Application](#run-as-web-application)
|
||||
- [V1 & V2](#v1--v2)
|
||||
- [Where is V1](#where-is-v1)
|
||||
- [V1 releases](#v1-releases)
|
||||
- [V1 projects in V2](#v1-projects-in-v2)
|
||||
- [Using VoTT](#using-vott)
|
||||
- [Creating Connections](#creating-connections)
|
||||
- [Creating a New Project](#creating-a-new-project)
|
||||
- [Project Settings](#project-settings)
|
||||
- [Security Tokens](#security-tokens)
|
||||
- [Labeling an Image](#labeling-an-image)
|
||||
- [Labeling a Video](#labeling-a-video)
|
||||
- [Exporting Labels](#exporting-labels)
|
||||
- [Keyboard Shortcuts](#keyboard-shortcuts)
|
||||
- [Tag Ordering](#tag-ordering)
|
||||
- [Tag Locking](#tag-locking)
|
||||
- [Editor Shortcuts](#editor-shortcuts)
|
||||
- [Mouse Controls](#mouse-controls)
|
||||
- [Collaborators](#collaborators)
|
||||
- [Contributing to VoTT](#contributing-to-vott)
|
||||
5. Export video Tags using the Object Detection Menu or Ctrl/Cmd + E
|
||||
|
||||
<!-- tocstop -->
|
||||

|
||||
|
||||
*Note on exporting: the tool reserves a random 20% sample of the tagged frames as a test set.*
|
||||
|
||||
Specify the following export configuration settings:
|
||||
|
||||

|
||||
|
||||
- **Export Format**: What framework to export to defaults to *CNTK*<br>
|
||||
- **Export Frames Until**: how far into the video the export operation will proceed<br>
|
||||
- *Last Tagged Region*: exports frames up until the last frame containing tags
|
||||
- *Last Visited Frame*: exports frames up until the last frame that the user explicitly visited
|
||||
- *Last Frame*: exports all video frames<br>
|
||||
- **Output directory**: directory path for exporting training data<br>
|
||||
|
||||
---
|
||||
|
||||
## Getting Started
|
||||
## Tagging an Image Directory
|
||||
|
||||
VoTT can be installed as a native application or run from source. VoTT is also available as a [stand-alone Web application](https://vott.z22.web.core.windows.net) and can be used in any modern Web browser.
|
||||
1. Select the option to tag an image directory
|
||||
|
||||
### Download and install a release package for your platform (recommended)
|
||||

|
||||
|
||||
VoTT is available for Windows, Linux and OSX. Download the appropriate platform package/installer from [GitHub Releases](https://github.com/Microsoft/VoTT/releases). `v2` releases will be prefixed by `2.x`.
|
||||
2. Load an image directory by selecting it.
|
||||
|
||||
### Build and run from source
|
||||

|
||||
|
||||
VoTT requires [NodeJS (>= 10.x, Dubnium) and NPM](https://github.com/nodejs/Release)
|
||||
3. Configure the tagging job and specify the settings in the screenshot below:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/Microsoft/VoTT.git
|
||||
cd VoTT
|
||||
npm ci
|
||||
npm start
|
||||

|
||||
|
||||
**Frame Extraction Rate**: number of frames to tag per second of video<br>
|
||||
|
||||
**Tagging Region Type**: type of bounding box for tagging regions<br>
|
||||
- *Rectangle*: tag bounding boxes of any dimension
|
||||
- *Square*: tag bounding boxes of auto-fixed dimensions
|
||||
|
||||
**Labels**: labels of the tagged regions (e.g. `Cat`, `Dog`, `Horse`, `Person`)<br>
|
||||
|
||||
4. Tag each Image
|
||||
|
||||

|
||||
|
||||
**Tagging**: click and drag a bounding box around the desired area, then move or resize the region until it fits the object
|
||||
- Selected regions appear as red  and unselected regions will appear as blue .
|
||||
- Assign a tag to a region by clicking on it and selecting the desired tag from the labeling toolbar at the bottom of the tagging control
|
||||
- Click the  button to clear all tags on a given frame
|
||||
|
||||
**Navigation**: users can navigate between video frames by using the  buttons, the left/right arrow keys, or the video skip bar
|
||||
- Tags are auto-saved each time a frame is changed
|
||||
|
||||
5. Export Image directory tags Tags using the Object Detection Menu or Ctrl/Cmd + E
|
||||
|
||||

|
||||
|
||||
*Note on exporting: the tool reserves a random 20% sample of the tagged frames as a test set.*
|
||||
|
||||
Specify the following export configuration settings:
|
||||
|
||||

|
||||
|
||||
- **Export Format**: What framework to export to defaults to *CNTK*<br>
|
||||
- **Export Frames Until**: how far into the video the export operation will proceed<br>
|
||||
- *Last Tagged Region*: exports frames up until the last frame containing tags
|
||||
- *Last Visited Frame*: exports frames up until the last frame that the user explicitly visited
|
||||
- *Last Frame*: exports all video frames<br>
|
||||
- **Output directory**: directory path for exporting training data<br>
|
||||
|
||||
---
|
||||
## Reviewing and Improving an Object Detection Model
|
||||
|
||||
1. Train model with [Object Detection using FastRCNN](https://github.com/Microsoft/CNTK/wiki/Object-Detection-using-Fast-R-CNN#train-on-your-own-data)<br> *Note: the data is already in CNTK format, so you do not have to run `C1_DrawBboxesOnImages.py` or `C2_AssignLabelsToBboxes.py`*
|
||||
2. Since CNTK does not embed the names of the classes in the model, on default, the module returns non descriptive names for the classes, e.g. "class_1", "class_2".Place a JSON file named "model.json" in the same directory of the Fast-RCNN model file with the the correct tag labels. Format the json file as follows with your own class names:
|
||||
```json
|
||||
{
|
||||
"classes" : {
|
||||
"background" : 0,
|
||||
"human" : 1,
|
||||
"cat" : 2,
|
||||
"dog" : 3
|
||||
}
|
||||
}
|
||||
```
|
||||
> **IMPORTANT**
|
||||
>
|
||||
> When running locally with `npm`, both the electron and the browser versions of the application will start. One major difference is that the electron version can access the local file system.
|
||||
|
||||
### Run as Web Application
|
||||
3. Load a new asset that the model has not been trained on
|
||||
4. Configure a new or load a previous tagging job
|
||||
4. Apply model to new asset using Ctrl/Cmd + R
|
||||
5. Specify a model path and temporary output directory<br>
|
||||

|
||||
6. When the model finishes processing, validate tags, re-export and retrain it
|
||||
7. Repeat step 1 on new assets until the model performance is satisfactory
|
||||
|
||||
|
||||
## Supporting additonal object detection Export and Review formats.
|
||||
|
||||
Using a modern Web browser, VoTT can be loaded from: [https://vott.z22.web.core.windows.net](https://vott.z22.web.core.windows.net)
|
||||
In the latest release we provide support for [Export and Review formats](https://github.com/CatalystCode/VOTT/tree/master/src/lib/detection_algorithms). To add a new object detection format, copy the interface folder and use the Yolo and CNTK implementations as reference.
|
||||
|
||||
As noted above, the Web version of VoTT *cannot* access the local file system; all assets must be imported/exported through a Cloud project.
|
||||
## Upcoming Features
|
||||
|
||||
## V1 & V2
|
||||
- Tagging project management
|
||||
|
||||
VoTT V2 is a refactor and refresh of the original Electron-based application. As the usage and demand for VoTT grew, `V2` was started as an initiative to improve and make VoTT more extensible and maintainable. In addition, `V2` uses more modern development frameworks and patterns (React, Redux) and is authored in TypeScript.
|
||||
-----------
|
||||
|
||||
A number of code quality practices have been adopted, including:
|
||||
## How to Contribute
|
||||
|
||||
* Code Linting
|
||||
* Unit tests & mocks (Jest, Enzyme)
|
||||
* [Code coverage](https://codecov.io/gh/Microsoft/VoTT) ([CodeCov.io](https://codecov.io/))
|
||||
* [Complexity analysis](https://vottv2.z5.web.core.windows.net/) ([Plato](docs/PLATO.md))
|
||||
You are welcome to send us any bugs you may find, suggestions, or any other comments.
|
||||
|
||||
All `V2` efforts are on the [master](https://github.com/Microsoft/VoTT/tree/master) branch
|
||||
Before sending anything, please go over the repository issues list, just to make sure that it isn't already there.
|
||||
|
||||
### Where is V1
|
||||
|
||||
`V1` will be on the [v1](https://github.com/Microsoft/VoTT/tree/v1) branch. There will not be any fixes or updates.
|
||||
|
||||
#### V1 releases
|
||||
|
||||
1.x releases can still be found under [GitHub Releases](https://github.com/Microsoft/VoTT/releases).
|
||||
|
||||
### V1 projects in V2
|
||||
|
||||
There is support for converting a V1 project into V2 format. Upon opening the JSON file, a window will pop up to confirm that the app should convert the project before redirecting to the editor screen. In this process, a `.vott` file will be generated in the same project directory, which may be used as the main project file going forward. We recommend backing up the V1 project file before converting the project.
|
||||
|
||||
## Using VoTT
|
||||
|
||||
### Creating Connections
|
||||
|
||||
VoTT is a 'Bring Your Own Data' (BYOD) application. In VoTT, connections are used to configure and manage source (the assets to label) and target (the location to which labels should be exported).
|
||||
|
||||
Connections can be set up and shared across projects. They use an extensible provider model, so new source/target providers can easily be added.
|
||||
|
||||
Currently, VoTT supports:
|
||||
|
||||
* [Azure Blob Storage](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction)
|
||||
* [Bing Image Search](https://azure.microsoft.com/en-us/services/cognitive-services/bing-image-search-api/)
|
||||
* Local File System
|
||||
|
||||
To create a new connection, click the `New Connections` (plug) icon, in the left hand navigation bar:
|
||||
|
||||

|
||||
|
||||
### Creating a New Project
|
||||
|
||||
Labeling workflows in VoTT revolve around projects - a collection of configurations and settings that persist.
|
||||
|
||||
Projects define source and target connections, and project metadata - including tags to be used when labeling source assets.
|
||||
|
||||
As mentioned above, all projects require a source and target connection:
|
||||
|
||||
* **Source Connection** - Where to pull assets from
|
||||
* **Target Connection** - Where project files and exported data should be stored
|
||||
|
||||

|
||||
|
||||
#### Project Settings
|
||||
|
||||
Project settings can be modified after a project has been created, by clicking on the `Project Setting` (slider) icon in the left hand navigation bar. Project metrics, such as Visited Assets, Tagged Assets, and Average Tags Per Asset can also be viewed on this screen.
|
||||
|
||||

|
||||
|
||||
#### Security Tokens
|
||||
|
||||
Some project settings can include sensitive values, such as API keys or other shared secrets. Each project will generate a security token that can be used to encrypt/decrypt sensitive project settings.
|
||||
|
||||
Security tokens can be found in `Application Settings` by clicking the gear icon in the lower corner of the left hand navigation bar.
|
||||
|
||||
**NOTE:** Project files can be shared among multiple people. In order to share sensitive project settings, *all parties must have/use the same security token.*
|
||||
|
||||
The token name and key **must** match in order for sensitive values to be successfully decrypted.
|
||||
|
||||

|
||||
|
||||
### Labeling an Image
|
||||
|
||||
When a project is created or opened, the main tag editor window opens. The tag editor consists of three main parts:
|
||||
|
||||
* A resizeable preview pane that contains a scrollable list of images and videos, from the source connection
|
||||
* The main editor pane that allows tags to be applied to drawn regions
|
||||
* The tags editor pane that allows users to modify, lock, reorder, and delete tags
|
||||
|
||||
Selecting an image or video on the left will load that image in the main tag editor. Regions can then be drawn on the loaded asset and a tag can be applied.
|
||||
|
||||
As desired, repeat this process for any additional assets.
|
||||
|
||||

|
||||
|
||||
### Labeling a Video
|
||||
|
||||
Labeling a video is much like labeling a series of images. When a video is selected from the left, it will begin automatically playing, and there are several controls on the player, as seen here:
|
||||
|
||||

|
||||
|
||||
In addition to the normal video playback controls, there are two extra pairs of buttons.
|
||||
|
||||
On the left, there are the previous and next frame buttons. Clicking these will pause the video, and move to the next appropriate frame as determined by the project settings. For example, if the project settings have a frame extraction rate of 1, these buttons will cause the video to be moved back or forward 1 second, while if the frame extraction rate is 10, the video will be moved back or forward a tenth of a second.
|
||||
|
||||
On the right, there are the previous and next tagged frame buttons. Clicking these will pause the video and move to the next or previous frame that has a previously tagged region on it, if a tagged frame exists.
|
||||
|
||||
Colored lines will also be visible along the video's timeline. These indicate the video frames that have already been visited. A yellow line denotes a frame that has been visited only, while a green line denotes a frame that has been both visited and tagged. The colored lines can be clicked for quick navigation to the indicated frame.
|
||||
|
||||
The timeline can also be used to manually scrub through the video to an arbitrary point, though the project settings for frame extraction rate are always obeyed. Pausing the video will move to the closest frame according to this project setting. This way, a very low frame extraction rate, such as 1 frame per second, can be set for sections of the video known to contain few taggable items, and a much higher frame extraction rate, such as 30 frames per second, to allow fine-grained control.
|
||||
|
||||
Tagging and drawing regions is not possible while the video is playing.
|
||||
|
||||
### Exporting Labels
|
||||
|
||||
Once assets have been labeled, they can be exported into a variety of formats:
|
||||
|
||||
* [Azure Custom Vision Service](https://azure.microsoft.com/en-us/services/cognitive-services/custom-vision-service/)
|
||||
* [Microsoft Cognitive Toolkit (CNTK)](https://github.com/Microsoft/CNTK)
|
||||
* TensorFlow (Pascal VOC and TFRecords)
|
||||
* VoTT (generic JSON schema)
|
||||
* Comma Separated Values (CSV)
|
||||
|
||||
In addition, users may choose to export
|
||||
|
||||
* all assets
|
||||
* only visited assets
|
||||
* only tagged assets
|
||||
|
||||
Click on the `Export` (arrow) icon in the left hand navigation. Select the appropriate export provider and which assets to export. The percentage separated into testing and training sets can be adjusted here too.
|
||||
|
||||

|
||||
|
||||
### Keyboard Shortcuts
|
||||
|
||||
VoTT allows a number of keyboard shortcuts to make it easier to keep one hand on the mouse while tagging. It allows most common shortcuts:
|
||||
|
||||
* Ctrl or Cmd + C - copy
|
||||
* Ctrl or Cmd + X - cut
|
||||
* Ctrl or Cmd + V - paste
|
||||
* Ctrl or Cmd + A - select all
|
||||
* Ctrl or Cmd + Z - undo
|
||||
* Ctrl or Cmd + Shift + Z - redo
|
||||
|
||||
#### Tag Ordering
|
||||
|
||||
Hotkeys of 1 through 0 are assigned to the first ten tags. These can be reordered by using the up/down arrow icons in in the tag editor pane.
|
||||
|
||||
|
||||
#### Tag Locking
|
||||
|
||||
A tag can be locked for repeated tagging using the lock icon at the top of the tag editor pane. Tags can also be locked by combining Ctrl or Cmd and the tag hotkey, i.e. `Ctrl+2` would lock the second tag in the list.
|
||||
|
||||

|
||||
|
||||
#### Editor Shortcuts
|
||||
|
||||
In addition, the editor page has some special shortcuts to select tagging tools:
|
||||
|
||||
* V - Pointer/Select
|
||||
* R - Draw Rectangle
|
||||
* P - Draw Polygon
|
||||
* Ctrl or Cmd + S - Save Project
|
||||
* Ctrl or Cmd + E - Export Project
|
||||
|
||||
VOTT allows you to fine tune the bounding boxes using the arrow keys in a few different ways. While a region is selected:
|
||||
|
||||
* Ctrl + Arrowkey - Move Region
|
||||
* Ctrl + Alt + Arrowkey - Shrink Region
|
||||
* Ctrl + Shift + Arrowkey - Expand Region
|
||||
|
||||
The slide viewer can be navigated from the keyboard as follows:
|
||||
|
||||
* W or ArrowUp - Previous Asset
|
||||
* S or ArrowDown - Next Asset
|
||||
|
||||
When the video playback bar is present, it allows the following shortcuts to select frames:
|
||||
|
||||
* A or ArrowLeft - Previous Frame
|
||||
* D or ArrowRight - Next Frame
|
||||
* Q - Previous Tagged Frame
|
||||
* E - Next Tagged Frame
|
||||
|
||||
#### Mouse Controls
|
||||
|
||||
* Two-point mode - Hold down Ctrl while creating a region
|
||||
* Square mode - Hold down Shift while creating a region
|
||||
* Multi-select - Hold down Shift while selecting regions
|
||||
* Exclusive Tracking mode - Ctrl + N to block frame UI allowing a user to create a region on top of existing regions
|
||||
|
||||
## Release Process
|
||||
|
||||

|
||||
|
||||
For more details on github/web releases and versions -- please review our [release process document](./docs/RELEASE_GUIDE.md)
|
||||
|
||||
To build VoTT executable using command:
|
||||
```
|
||||
npm run release
|
||||
```
|
||||
For details on packaging executable for the release -- please review our [PACKAGING.md](./docs/PACKAGING.md)
|
||||
|
||||
## Collaborators
|
||||
|
||||
VoTT was originally developed by the [Commercial Software Engineering (CSE) group at Microsoft](https://www.microsoft.com/developerblog/) in Israel.
|
||||
|
||||
V2 is developed by the CSE group at Microsoft in Redmond, Washington.
|
||||
|
||||
## Contributing to VoTT
|
||||
|
||||
There are many ways to contribute to VoTT -- please review our [contribution guidelines](CONTRIBUTING.md).
|
||||
|
||||
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see
|
||||
the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com)
|
||||
with any additional questions or comments.
|
||||
You are more than welcome to fork this repository and send us a pull request if you feel that what you've done should be included.
|
||||
|
||||
|
Antes Largura: | Altura: | Tamanho: 22 KiB |
|
Antes Largura: | Altura: | Tamanho: 4.6 KiB |
@@ -1,37 +0,0 @@
|
||||
trigger:
|
||||
- greenkeeper/* # enable CI to run on greenkeeper branches
|
||||
- master # run build for every merge to master
|
||||
pr:
|
||||
- dev* # kick off for pr targeting dev or prefix dev
|
||||
- master # trigger build for pr targeting master
|
||||
|
||||
variables:
|
||||
- group: CODE_COV
|
||||
|
||||
jobs:
|
||||
- job: Linux
|
||||
pool:
|
||||
vmImage: ubuntu-16.04
|
||||
timeoutInMinutes: 60 # how long to run the job before automatically cancelling
|
||||
steps:
|
||||
- checkout: self # self represents the repo where the initial Pipelines YAML file was found
|
||||
fetchDepth: 1 # the depth of commits to ask Git to fetch
|
||||
- template: azure-pipelines/linux/continuous-build-linux.yml
|
||||
|
||||
- job: MacOS
|
||||
pool:
|
||||
vmImage: macOS-10.15
|
||||
timeoutInMinutes: 60 # how long to run the job before automatically cancelling
|
||||
steps:
|
||||
- checkout: self # self represents the repo where the initial Pipelines YAML file was found
|
||||
fetchDepth: 1 # the depth of commits to ask Git to fetch
|
||||
- template: azure-pipelines/mac/continuous-build-mac.yml
|
||||
|
||||
- job: Windows
|
||||
pool:
|
||||
vmImage: "windows-2019"
|
||||
timeoutInMinutes: 60 # how long to run the job before automatically cancelling
|
||||
steps:
|
||||
- checkout: self # self represents the repo where the initial Pipelines YAML file was found
|
||||
fetchDepth: 1 # the depth of commits to ask Git to fetch
|
||||
- template: azure-pipelines/windows/continuous-build-windows.yml
|
||||
@@ -1,33 +0,0 @@
|
||||
name: "GitHub & Web Release [$(SourceBranchName)] - $(Date:yyyyMMdd)$(Rev:.r)"
|
||||
|
||||
trigger: none # manual queue only when we're ready to release
|
||||
pr: none # disable CI build for PR
|
||||
|
||||
variables:
|
||||
azureSubscription: "pj-little-sub"
|
||||
DEV_STORAGE_ACCOUNT: 'vottdev'
|
||||
PROD_STORAGE_ACCOUNT: 'vott'
|
||||
DEV_URL: "https://vottdev.z5.web.core.windows.net/"
|
||||
PROD_URL: "https://vott.z22.web.core.windows.net/"
|
||||
|
||||
stages:
|
||||
- stage: version_bump_commit
|
||||
jobs:
|
||||
- template: templates/npm-version-bump.yml
|
||||
parameters:
|
||||
versionType: $(NPM_VERSION_TYPE)
|
||||
|
||||
- stage: github_release
|
||||
dependsOn: version_bump_commit
|
||||
jobs:
|
||||
- template: templates/create-github-release.yml
|
||||
parameters:
|
||||
GitHubConnection: 'GitHub connection' # defaults for any parameters that aren't specified
|
||||
repositoryName: '$(Build.Repository.Name)' # microsoft/VoTT
|
||||
isPreRelease: $(IS_PRERELEASE) # set when queuing build
|
||||
isDraft: $(IS_DRAFT)
|
||||
|
||||
- stage: web_release
|
||||
dependsOn: version_bump_commit
|
||||
jobs:
|
||||
- template: templates/create-web-release.yml
|
||||
@@ -1,43 +0,0 @@
|
||||
# Node.js with React
|
||||
# Build a Node.js project that uses React.
|
||||
# Add steps that analyze code, save build artifacts, deploy, and more:
|
||||
# https://docs.microsoft.com/azure/devops/pipelines/languages/javascript
|
||||
steps:
|
||||
- bash: |
|
||||
set -e
|
||||
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 libgconf-2-4 dbus xvfb libgtk-3-0
|
||||
sudo cp azure-pipelines/linux/xvfb.init /etc/init.d/xvfb
|
||||
sudo chmod +x /etc/init.d/xvfb
|
||||
sudo update-rc.d xvfb defaults
|
||||
sudo service xvfb start
|
||||
displayName: 'Install dependencies'
|
||||
|
||||
- task: NodeTool@0
|
||||
inputs:
|
||||
versionSpec: '10.x'
|
||||
displayName: 'Install Node.js'
|
||||
|
||||
- bash: |
|
||||
set -e
|
||||
|
||||
export DISPLAY=:99.0
|
||||
|
||||
npm ci # do a clean install
|
||||
npm run compile
|
||||
npm run test:coverage # run tests and coverage
|
||||
displayName: 'Run tests and coverage'
|
||||
|
||||
- bash: |
|
||||
set -e
|
||||
|
||||
token=$(CODECOV_TOKEN)
|
||||
if [[ -z "${token}" ]]; then
|
||||
echo "Need to set CODECOV_TOKEN"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# https://docs.codecov.io/docs/about-the-codecov-bash-uploader
|
||||
bash <(curl -s https://codecov.io/bash) -t ${token}
|
||||
displayName: 'Upload coverage report'
|
||||
@@ -1,53 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# /etc/rc.d/init.d/xvfbd
|
||||
#
|
||||
# chkconfig: 345 95 28
|
||||
# description: Starts/Stops X Virtual Framebuffer server
|
||||
# processname: Xvfb
|
||||
#
|
||||
### BEGIN INIT INFO
|
||||
# Provides: xvfb
|
||||
# Required-Start: $remote_fs $syslog
|
||||
# Required-Stop: $remote_fs $syslog
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: Start xvfb at boot time
|
||||
# Description: Enable xvfb provided by daemon.
|
||||
### END INIT INFO
|
||||
|
||||
[ "${NETWORKING}" = "no" ] && exit 0
|
||||
|
||||
PROG="/usr/bin/Xvfb"
|
||||
PROG_OPTIONS=":10 -ac"
|
||||
PROG_OUTPUT="/tmp/Xvfb.out"
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
echo "Starting : X Virtual Frame Buffer "
|
||||
$PROG $PROG_OPTIONS>>$PROG_OUTPUT 2>&1 &
|
||||
disown -ar
|
||||
;;
|
||||
stop)
|
||||
echo "Shutting down : X Virtual Frame Buffer"
|
||||
killproc $PROG
|
||||
RETVAL=$?
|
||||
[ $RETVAL -eq 0 ] && /bin/rm -f /var/lock/subsys/Xvfb
|
||||
/var/run/Xvfb.pid
|
||||
echo
|
||||
;;
|
||||
restart|reload)
|
||||
$0 stop
|
||||
$0 start
|
||||
RETVAL=$?
|
||||
;;
|
||||
status)
|
||||
status Xvfb
|
||||
RETVAL=$?
|
||||
;;
|
||||
*)
|
||||
echo $"Usage: $0 (start|stop|restart|reload|status)"
|
||||
exit 1
|
||||
esac
|
||||
|
||||
exit $RETVAL
|
||||
@@ -1,19 +0,0 @@
|
||||
# Node.js with React
|
||||
# Build a Node.js project that uses React.
|
||||
# Add steps that analyze code, save build artifacts, deploy, and more:
|
||||
# https://docs.microsoft.com/azure/devops/pipelines/languages/javascript
|
||||
steps:
|
||||
- task: NodeTool@0
|
||||
inputs:
|
||||
versionSpec: '10.x'
|
||||
displayName: 'Install Node.js'
|
||||
|
||||
- bash: |
|
||||
set -e
|
||||
|
||||
export DISPLAY=:99.0
|
||||
|
||||
npm ci # do a clean install
|
||||
npm run compile
|
||||
npm run test:ci # don't watch and just run all the tests
|
||||
displayName: 'Run tests'
|
||||
@@ -1,30 +0,0 @@
|
||||
# https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops#job-templates-with-parameters
|
||||
jobs:
|
||||
- job: ${{ parameters.name }}
|
||||
pool: ${{ parameters.pool }}
|
||||
timeoutInMinutes: 15 # how long to run the job before automatically cancelling
|
||||
steps:
|
||||
- template: git-pull-current-branch.yml
|
||||
|
||||
- task: NodeTool@0
|
||||
displayName: 'Use Node 10.x'
|
||||
inputs:
|
||||
versionSpec: 10.x
|
||||
|
||||
- bash: |
|
||||
set -ex
|
||||
|
||||
# clean install
|
||||
npm ci
|
||||
npm run release-ci
|
||||
|
||||
OS=${{ parameters.os }}
|
||||
ARTIFACT_NAME=${{ parameters.artifact }}
|
||||
|
||||
mkdir -p ${OS}
|
||||
cp releases/${ARTIFACT_NAME} ${OS}/
|
||||
|
||||
displayName: Build
|
||||
|
||||
- publish: $(System.DefaultWorkingDirectory)/${{ parameters.os }}
|
||||
artifact: ${{ parameters.os }}
|
||||
@@ -1,96 +0,0 @@
|
||||
parameters:
|
||||
GitHubConnection: '' # defaults for any parameters that aren't specified
|
||||
repositoryName: ''
|
||||
isPreRelease: false
|
||||
isDraft: false
|
||||
|
||||
jobs:
|
||||
- template: build-artifact.yml
|
||||
parameters:
|
||||
name: LinuxArtifact
|
||||
pool:
|
||||
vmImage: ubuntu-16.04
|
||||
os: linux
|
||||
artifact: vott*.snap
|
||||
|
||||
- template: build-artifact.yml
|
||||
parameters:
|
||||
name: WindowsArtifact
|
||||
pool:
|
||||
vmImage: "windows-2019"
|
||||
os: windows
|
||||
artifact: vott*.exe
|
||||
|
||||
- template: build-artifact.yml
|
||||
parameters:
|
||||
name: MacOSArtifact
|
||||
pool:
|
||||
vmImage: macOS-10.15
|
||||
os: mac
|
||||
artifact: vott*.dmg
|
||||
|
||||
- job: Create_Github_Release
|
||||
timeoutInMinutes: 30 # timeout on job if deploy is not completed in 30 minutes
|
||||
dependsOn:
|
||||
- LinuxArtifact
|
||||
- WindowsArtifact
|
||||
- MacOSArtifact
|
||||
|
||||
pool:
|
||||
vmImage: ubuntu-16.04
|
||||
|
||||
steps:
|
||||
- download: current
|
||||
- template: git-pull-current-branch.yml
|
||||
|
||||
- bash: |
|
||||
set -e
|
||||
|
||||
echo
|
||||
echo "======> Set commit sha"
|
||||
COMMIT_SHA=$(git rev-parse --short HEAD)
|
||||
echo "COMMIT SHA: $COMMIT_SHA"
|
||||
echo "##vso[task.setvariable variable=COMMIT_SHA]$COMMIT_SHA"
|
||||
|
||||
###
|
||||
# These variables were set in the "Version Bump" stage. There are
|
||||
# currently no way to pass variables between stages, hence this workaround.
|
||||
###
|
||||
echo
|
||||
echo "======> Set version variables"
|
||||
CURRENT_VERSION=$(cat $(Pipeline.Workspace)/variables/CURRENT_VERSION)
|
||||
echo "##vso[task.setvariable variable=CURRENT_VERSION]$CURRENT_VERSION"
|
||||
|
||||
NEXT_VERSION=$(cat $(Pipeline.Workspace)/variables/NEXT_VERSION)
|
||||
echo "##vso[task.setvariable variable=NEXT_VERSION]$NEXT_VERSION"
|
||||
displayName: "Set variables for release task"
|
||||
|
||||
- task: GitHubRelease@1
|
||||
displayName: 'GitHub release (create)'
|
||||
inputs:
|
||||
gitHubConnection: ${{ parameters.GitHubConnection }}
|
||||
repositoryName: '$(Build.Repository.Name)'
|
||||
action: 'create'
|
||||
target: '$(Build.SourceBranch)'
|
||||
tagSource: 'userSpecifiedTag'
|
||||
tag: $(NEXT_VERSION)
|
||||
releaseNotesSource: 'inline'
|
||||
releaseNotesInline: |
|
||||
## Web Release
|
||||
### Dev
|
||||
$(DEV_URL)
|
||||
|
||||
### Prod
|
||||
$(PROD_URL)
|
||||
|
||||
## Docs
|
||||
https://github.com/Microsoft/VoTT/blob/$(Build.SourceBranch)/README.md
|
||||
assets: |
|
||||
../linux/*
|
||||
../windows/*
|
||||
../mac/*
|
||||
isDraft: ${{ parameters.isDraft }}
|
||||
isPreRelease: ${{ parameters.isPrelease }}
|
||||
changeLogCompareToRelease: 'lastNonDraftReleaseByTag'
|
||||
changeLogCompareToReleaseTag: $(CURRENT_VERSION)
|
||||
changeLogType: 'commitBased'
|
||||
@@ -1,56 +0,0 @@
|
||||
jobs:
|
||||
- job: "Web_Release"
|
||||
pool:
|
||||
vmImage: 'windows-latest'
|
||||
|
||||
steps:
|
||||
- template: git-pull-current-branch.yml
|
||||
|
||||
- task: NodeTool@0
|
||||
displayName: 'Use Node 10.x'
|
||||
inputs:
|
||||
versionSpec: 10.x
|
||||
|
||||
- task: Npm@1
|
||||
displayName: 'npm ci'
|
||||
inputs:
|
||||
command: custom
|
||||
workingDir: .
|
||||
verbose: false
|
||||
customCommand: ci
|
||||
|
||||
- task: Bash@3
|
||||
displayName: 'Create artifact'
|
||||
inputs:
|
||||
targetType: filePath
|
||||
filePath: './scripts/generate-web-artifact.sh'
|
||||
|
||||
- task: AzureFileCopy@3
|
||||
displayName: 'AzureBlob File Copy to $DEV_STORAGE_ACCOUNT'
|
||||
inputs:
|
||||
SourcePath: './build'
|
||||
azureSubscription: $(azureSubscription)
|
||||
destination: azureBlob
|
||||
storage: $(DEV_STORAGE_ACCOUNT)
|
||||
containerName: '$web'
|
||||
|
||||
- task: AzureFileCopy@3
|
||||
displayName: 'AzureBlob File Copy to $PROD_STORAGE_ACCOUNT'
|
||||
inputs:
|
||||
SourcePath: './build'
|
||||
azureSubscription: $(azureSubscription)
|
||||
destination: azureBlob
|
||||
storage: $(PROD_STORAGE_ACCOUNT)
|
||||
containerName: '$web'
|
||||
condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
|
||||
|
||||
- bash: |
|
||||
echo
|
||||
echo "Dev url: $DEV_URL"
|
||||
displayName: "Dev URL"
|
||||
|
||||
- bash: |
|
||||
echo
|
||||
echo "Prod url: $PROD_URL"
|
||||
displayName: "Prod URL"
|
||||
condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
|
||||
@@ -1,8 +0,0 @@
|
||||
steps:
|
||||
- task: Bash@3
|
||||
displayName: 'Pull latest from branch'
|
||||
inputs:
|
||||
targetType: filePath
|
||||
filePath: './scripts/git-pull-current-branch.sh'
|
||||
env:
|
||||
SOURCE_BRANCH: $(Build.SourceBranch)
|
||||
@@ -1,60 +0,0 @@
|
||||
parameters:
|
||||
versionType: ''
|
||||
|
||||
jobs:
|
||||
- job: "version_bump"
|
||||
|
||||
variables:
|
||||
- group: GitHub-Deploy-Creds
|
||||
|
||||
timeoutInMinutes: 30 # timeout on job if deploy is not completed in 30 minutes
|
||||
cancelTimeoutInMinutes: 1 # time limit to wait for job to cancel
|
||||
|
||||
pool:
|
||||
vmImage: macOS-latest # ssh key was generated on a Mac so using the same type of OS here
|
||||
|
||||
steps:
|
||||
- task: NodeTool@0
|
||||
inputs:
|
||||
versionSpec: 10.x
|
||||
displayName: 'Install Node.js'
|
||||
|
||||
# Download secure file
|
||||
# Download a secure file to the agent machine
|
||||
- task: DownloadSecureFile@1
|
||||
# name: sshKey # The name with which to reference the secure file's path on the agent, like $(mySecureFile.secureFilePath)
|
||||
inputs:
|
||||
secureFile: vott_id_rsa
|
||||
|
||||
# Install an SSH key prior to a build or deployment
|
||||
- task: InstallSSHKey@0 # https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/install-ssh-key?view=azure-devops
|
||||
inputs:
|
||||
knownHostsEntry: $(KNOWN_HOSTS_ENTRY)
|
||||
sshPublicKey: $(SSH_PUBLIC_KEY)
|
||||
#sshPassphrase: # Optional
|
||||
sshKeySecureFile: vott_id_rsa
|
||||
env:
|
||||
KNOWN_HOSTS_ENTRY: $(KNOWN_HOSTS_ENTRY)
|
||||
SSH_PUBLIC_KEY: $(SSH_PUBLIC_KEY) # map to the right format (camelCase) that Azure credentials understand
|
||||
|
||||
- task: Bash@3
|
||||
name: BumpNpmVersion
|
||||
displayName: Bump NPM Version
|
||||
inputs:
|
||||
targetType: filePath
|
||||
filePath: ./scripts/version-bump-commit.sh
|
||||
arguments:
|
||||
${{ parameters.versionType }}
|
||||
env:
|
||||
SOURCE_BRANCH: $(Build.SourceBranch)
|
||||
|
||||
- bash: |
|
||||
printenv | sort
|
||||
mkdir -p $(System.DefaultWorkingDirectory)/variables
|
||||
echo "$NEXT_VERSION" > $(System.DefaultWorkingDirectory)/variables/NEXT_VERSION
|
||||
echo "$CURRENT_VERSION" > $(System.DefaultWorkingDirectory)/variables/CURRENT_VERSION
|
||||
displayName: "Prep variables for publishing"
|
||||
|
||||
# Publish the variables folder as pipeline artifact
|
||||
- publish: $(System.DefaultWorkingDirectory)/variables
|
||||
artifact: variables
|
||||
@@ -1,74 +0,0 @@
|
||||
name: $(Date:yyyyMMdd).$(Hours)$(Minutes)$(Seconds)
|
||||
variables:
|
||||
AZURE_STORAGE_ACCOUNT: vottv2
|
||||
azureSubscription: 'pj-little-sub'
|
||||
REPORT_URL: 'https://vottv2.z22.web.core.windows.net/'
|
||||
|
||||
trigger:
|
||||
- dev*
|
||||
- master
|
||||
|
||||
pr: none # disable CI build for PR
|
||||
|
||||
pool:
|
||||
vmImage: 'Ubuntu-16.04'
|
||||
|
||||
steps:
|
||||
- bash: |
|
||||
set -e
|
||||
|
||||
COMMIT_SHA=`echo ${BUILD_SOURCEVERSION} | cut -c1-8`
|
||||
echo "sha: " $COMMIT_SHA
|
||||
|
||||
# rewrite build number
|
||||
echo "##vso[build.updatebuildnumber]Report-${COMMIT_SHA}-${BUILD_BUILDNUMBER}"
|
||||
displayName: "Rewrite build number"
|
||||
|
||||
- bash: |
|
||||
set -e
|
||||
|
||||
ACCOUNT=$(AZURE_STORAGE_ACCOUNT)
|
||||
if [[ -z "${ACCOUNT}" ]]; then
|
||||
echo "Need to set AZURE_STORAGE_ACCOUNT"
|
||||
exit 1
|
||||
fi
|
||||
displayName: "Verify storage account cred exists"
|
||||
|
||||
- task: NodeTool@0
|
||||
displayName: "Use Node 10.x"
|
||||
inputs:
|
||||
versionSpec: 10.x
|
||||
|
||||
- task: Npm@1
|
||||
displayName: 'Run `npm ci`'
|
||||
inputs:
|
||||
command: custom
|
||||
verbose: false
|
||||
customCommand: ci
|
||||
|
||||
- task: AzureCLI@1
|
||||
displayName: "Pull down old report and add updates"
|
||||
inputs:
|
||||
azureSubscription: $(azureSubscription)
|
||||
scriptLocation: inlineScript
|
||||
inlineScript: './scripts/update-report.sh'
|
||||
|
||||
- bash: |
|
||||
set -e
|
||||
|
||||
cat /tmp/download.log
|
||||
displayName: "print download log"
|
||||
condition: succeededOrFailed()
|
||||
|
||||
- task: AzureFileCopy@3
|
||||
displayName: 'AzureBlob File Copy to $(AZURE_STORAGE_ACCOUNT)'
|
||||
inputs:
|
||||
SourcePath: './report'
|
||||
azureSubscription: $(azureSubscription)
|
||||
destination: azureBlob
|
||||
storage: $(AZURE_STORAGE_ACCOUNT)
|
||||
containerName: '$web'
|
||||
|
||||
- bash: |
|
||||
echo "See report: $(REPORT_URL) "
|
||||
displayName: "Report URl"
|
||||
@@ -1,20 +0,0 @@
|
||||
# Node.js with React
|
||||
# Build a Node.js project that uses React.
|
||||
# Add steps that analyze code, save build artifacts, deploy, and more:
|
||||
# https://docs.microsoft.com/azure/devops/pipelines/languages/javascript
|
||||
steps:
|
||||
- task: NodeTool@0
|
||||
inputs:
|
||||
versionSpec: '10.x'
|
||||
displayName: 'Install Node.js'
|
||||
|
||||
- bash: |
|
||||
set -e
|
||||
|
||||
export DISPLAY=:99.0
|
||||
|
||||
npm ci # do a clean install
|
||||
npm run compile
|
||||
|
||||
npm run test:ci # don't watch and just run all the tests
|
||||
displayName: 'Run tests'
|
||||
@@ -1 +0,0 @@
|
||||
[{"name":"/m/01g317","id":1,"displayName":"person"},{"name":"/m/0199g","id":2,"displayName":"bicycle"},{"name":"/m/0k4j","id":3,"displayName":"car"},{"name":"/m/04_sv","id":4,"displayName":"motorcycle"},{"name":"/m/05czz6l","id":5,"displayName":"airplane"},{"name":"/m/01bjv","id":6,"displayName":"bus"},{"name":"/m/07jdr","id":7,"displayName":"train"},{"name":"/m/07r04","id":8,"displayName":"truck"},{"name":"/m/019jd","id":9,"displayName":"boat"},{"name":"/m/015qff","id":10,"displayName":"traffic light"},{"name":"/m/01pns0","id":11,"displayName":"fire hydrant"},{"name":"/m/02pv19","id":13,"displayName":"stop sign"},{"name":"/m/015qbp","id":14,"displayName":"parking meter"},{"name":"/m/0cvnqh","id":15,"displayName":"bench"},{"name":"/m/015p6","id":16,"displayName":"bird"},{"name":"/m/01yrx","id":17,"displayName":"cat"},{"name":"/m/0bt9lr","id":18,"displayName":"dog"},{"name":"/m/03k3r","id":19,"displayName":"horse"},{"name":"/m/07bgp","id":20,"displayName":"sheep"},{"name":"/m/01xq0k1","id":21,"displayName":"cow"},{"name":"/m/0bwd_0j","id":22,"displayName":"elephant"},{"name":"/m/01dws","id":23,"displayName":"bear"},{"name":"/m/0898b","id":24,"displayName":"zebra"},{"name":"/m/03bk1","id":25,"displayName":"giraffe"},{"name":"/m/01940j","id":27,"displayName":"backpack"},{"name":"/m/0hnnb","id":28,"displayName":"umbrella"},{"name":"/m/080hkjn","id":31,"displayName":"handbag"},{"name":"/m/01rkbr","id":32,"displayName":"tie"},{"name":"/m/01s55n","id":33,"displayName":"suitcase"},{"name":"/m/02wmf","id":34,"displayName":"frisbee"},{"name":"/m/071p9","id":35,"displayName":"skis"},{"name":"/m/06__v","id":36,"displayName":"snowboard"},{"name":"/m/018xm","id":37,"displayName":"sports ball"},{"name":"/m/02zt3","id":38,"displayName":"kite"},{"name":"/m/03g8mr","id":39,"displayName":"baseball bat"},{"name":"/m/03grzl","id":40,"displayName":"baseball glove"},{"name":"/m/06_fw","id":41,"displayName":"skateboard"},{"name":"/m/019w40","id":42,"displayName":"surfboard"},{"name":"/m/0dv9c","id":43,"displayName":"tennis racket"},{"name":"/m/04dr76w","id":44,"displayName":"bottle"},{"name":"/m/09tvcd","id":46,"displayName":"wine glass"},{"name":"/m/08gqpm","id":47,"displayName":"cup"},{"name":"/m/0dt3t","id":48,"displayName":"fork"},{"name":"/m/04ctx","id":49,"displayName":"knife"},{"name":"/m/0cmx8","id":50,"displayName":"spoon"},{"name":"/m/04kkgm","id":51,"displayName":"bowl"},{"name":"/m/09qck","id":52,"displayName":"banana"},{"name":"/m/014j1m","id":53,"displayName":"apple"},{"name":"/m/0l515","id":54,"displayName":"sandwich"},{"name":"/m/0cyhj_","id":55,"displayName":"orange"},{"name":"/m/0hkxq","id":56,"displayName":"broccoli"},{"name":"/m/0fj52s","id":57,"displayName":"carrot"},{"name":"/m/01b9xk","id":58,"displayName":"hot dog"},{"name":"/m/0663v","id":59,"displayName":"pizza"},{"name":"/m/0jy4k","id":60,"displayName":"donut"},{"name":"/m/0fszt","id":61,"displayName":"cake"},{"name":"/m/01mzpv","id":62,"displayName":"chair"},{"name":"/m/02crq1","id":63,"displayName":"couch"},{"name":"/m/03fp41","id":64,"displayName":"potted plant"},{"name":"/m/03ssj5","id":65,"displayName":"bed"},{"name":"/m/04bcr3","id":67,"displayName":"dining table"},{"name":"/m/09g1w","id":70,"displayName":"toilet"},{"name":"/m/07c52","id":72,"displayName":"tv"},{"name":"/m/01c648","id":73,"displayName":"laptop"},{"name":"/m/020lf","id":74,"displayName":"mouse"},{"name":"/m/0qjjc","id":75,"displayName":"remote"},{"name":"/m/01m2v","id":76,"displayName":"keyboard"},{"name":"/m/050k8","id":77,"displayName":"cell phone"},{"name":"/m/0fx9l","id":78,"displayName":"microwave"},{"name":"/m/029bxz","id":79,"displayName":"oven"},{"name":"/m/01k6s3","id":80,"displayName":"toaster"},{"name":"/m/0130jx","id":81,"displayName":"sink"},{"name":"/m/040b_t","id":82,"displayName":"refrigerator"},{"name":"/m/0bt_c3","id":84,"displayName":"book"},{"name":"/m/01x3z","id":85,"displayName":"clock"},{"name":"/m/02s195","id":86,"displayName":"vase"},{"name":"/m/01lsmm","id":87,"displayName":"scissors"},{"name":"/m/0kmg4","id":88,"displayName":"teddy bear"},{"name":"/m/03wvsk","id":89,"displayName":"hair drier"},{"name":"/m/012xff","id":90,"displayName":"toothbrush"}]
|
||||
@@ -1,32 +0,0 @@
|
||||
const path = require("path");
|
||||
|
||||
module.exports = {
|
||||
node: {
|
||||
__dirname: false,
|
||||
},
|
||||
target: "electron-main",
|
||||
entry: "./src/electron/main.ts",
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.ts?$/,
|
||||
use: [{
|
||||
loader: "ts-loader",
|
||||
options: {
|
||||
compilerOptions: {
|
||||
noEmit: false
|
||||
}
|
||||
}
|
||||
}],
|
||||
exclude: /node_modules/
|
||||
}
|
||||
]
|
||||
},
|
||||
resolve: {
|
||||
extensions: [".ts", ".js"]
|
||||
},
|
||||
output: {
|
||||
filename: "main.js",
|
||||
path: path.resolve(__dirname, "../build")
|
||||
}
|
||||
};
|
||||
@@ -1,7 +0,0 @@
|
||||
const merge = require('webpack-merge')
|
||||
const common = require('./webpack.common.js')
|
||||
|
||||
module.exports = merge(common, {
|
||||
mode: 'development',
|
||||
devtool: "inline-source-map",
|
||||
})
|
||||
@@ -1,7 +0,0 @@
|
||||
const merge = require('webpack-merge')
|
||||
const common = require('./webpack.common.js')
|
||||
|
||||
module.exports = merge(common, {
|
||||
mode: 'production',
|
||||
devtool: 'cheap-module-source-map',
|
||||
})
|
||||
@@ -1,19 +0,0 @@
|
||||
# Overview of CI setup
|
||||
|
||||
## Issues found and solutions
|
||||
|
||||
### Environment variables in scripts sections is not cross-platform friendly
|
||||
|
||||
1. Option 1
|
||||
* install `cross-env` npm package
|
||||
* use `cross-env` in npm script
|
||||
* https://github.com/facebook/create-react-app/issues/1137#issuecomment-279180815
|
||||
|
||||
1. Option 2
|
||||
* add `--coverage` flag so test will run only once without needing to set `CI=true`
|
||||
* no need for extra package, cross platform support
|
||||
* https://github.com/facebook/create-react-app/issues/1137#issuecomment-279191193
|
||||
|
||||
### Logs are cut off on Windows agent when using shell
|
||||
|
||||
1. make sure to use Bash task and not shell
|
||||
@@ -1,39 +0,0 @@
|
||||
# Debugging Guide
|
||||
## Electron Process
|
||||
TODO: create a vscode launch.json configuration that attaches to the elctron process. https://stackoverflow.com/a/41073851
|
||||
|
||||
## Renderer Process
|
||||
### Chrome Debugger
|
||||
1. Start app: `npm run start`.
|
||||
2. Open Chrome Dev Tools: `F12` in browser, `Ctrl + Shift + I` in electron.
|
||||
3. Open `Sources` tab.
|
||||
4. `Ctrl + Shift + F` and search for the file/function/code you would like to break into.
|
||||
5. Place breakpoint.
|
||||
6. Trigger breakpoint.
|
||||
> Note: Reloading the page may be required if the code executes at startup.
|
||||
|
||||
### VSCode Debugger
|
||||
1. Download & install the `Debugger for Chrome` VSCode plugin.
|
||||
2. Start app: `npm run start`.
|
||||
3. `F5`
|
||||
4. Select `Chrome`
|
||||
5. Change `http://localhost:8080` to `http://localhost:3000`
|
||||
6. `F5`
|
||||
7. Chrome should startup pointed at the app running at `http://localhost:3000`, and breakpoints in VSCode should work as expected.
|
||||
|
||||
## Unit Tests
|
||||
### Happy Path
|
||||
1. Download & install the `Jest` VSCode plugin.
|
||||
2. Open the test's source file.
|
||||
3. A `Debug` button should appear above every test. Place breakpoints, and click debug.
|
||||
> Note: If this button does not appear, here are some troubleshooting steps...
|
||||
> 1. `Ctrl + Shift + P` and select `Jest: Start Runner`.
|
||||
> 2. Restarting VSCode.
|
||||
|
||||
### Alternate Proof
|
||||
1. Download & install the `Jest` VSCode plugin.
|
||||
2. Open the test's source file.
|
||||
3. Place breakpoints.
|
||||
4. Go to the Debug view, select the `Jest All` configuration.
|
||||
5. `F5` or press the green play button.
|
||||
6. Your breakpoint should now be hit.
|
||||
@@ -1,39 +0,0 @@
|
||||
# Order of Operation
|
||||
|
||||
## Command
|
||||
|
||||
```bash
|
||||
npm run release
|
||||
```
|
||||
|
||||
### Underneath the hood
|
||||
|
||||
1. Create the `react` bundle inside the `build` directory,
|
||||
* have to run this first because it will override everything in the `build` directory;
|
||||
* create `index.html` & `static/`
|
||||
|
||||
```bash
|
||||
react-scripts build
|
||||
```
|
||||
|
||||
1. Create `build/electron` directory and the entry point file `bundle.js`
|
||||
|
||||
```bash
|
||||
webpack -p --config ./config/webpack.dev.config.js
|
||||
```
|
||||
|
||||
1. Now you can build the os-specific executable
|
||||
```bash
|
||||
electron-builder
|
||||
```
|
||||
|
||||
### Relevant files
|
||||
|
||||
1. `.env`
|
||||
* environment variables use by `react-script` to generate the correct content for `build/index.html`
|
||||
|
||||
1. `electron-builder.yml`
|
||||
* configuration for electron-builder
|
||||
|
||||
1. `package.json`
|
||||
* dependencies and scripts
|
||||
@@ -1,46 +0,0 @@
|
||||
# Overview
|
||||
|
||||
We're using [es6-plato](https://github.com/the-simian/es6-plato) to analyze code complexity. VoTT first has to be transpiled to ES6, as es6-plato won't work direcly on TypeScript.
|
||||
|
||||
We're also using the [eslint-plugin-react](https://github.com/yannickcr/eslint-plugin-react) eslint plugin for React-specific linting rules.
|
||||
|
||||
## Coverage Reports
|
||||
|
||||
The [VoTT coverage report](https://vottv2.z5.web.core.windows.net/) is updated on each merged PR, to reflect complexity analysis over time.
|
||||
|
||||
### V1
|
||||
|
||||
For posterity, a copy of the [V1 coverage report](https://vottv1.z5.web.core.windows.net/) is also available. This report represents a snapshot of the v1 codebase (v1 branch) and can be generated by running:
|
||||
|
||||
```bash
|
||||
git checkout v1
|
||||
npm i plato --no-save
|
||||
plato -r -d report -t 'VoTT v1 Complexity Analysis' -x 'public/js|test_|main.js' src
|
||||
```
|
||||
|
||||
## Local development
|
||||
|
||||
1. The following command will generate a `report` directory.
|
||||
|
||||
```bash
|
||||
npm run plato
|
||||
```
|
||||
|
||||
2. Open `report/index.html` in your browser to see the report locally.
|
||||
|
||||
## Debugging
|
||||
|
||||
1. If `npm run plato` is not working for you, try running the script manually:
|
||||
|
||||
* Make sure you have `typescript` & `es6-plato` installed locally:
|
||||
|
||||
```bash
|
||||
npm install -g typescript
|
||||
npm install -g es6-plato
|
||||
```
|
||||
|
||||
* Run following command from the root of the repository:
|
||||
|
||||
```bash
|
||||
./scripts/generate-report.sh -o report -v $(node -pe "require('./package.json').version") -c $(git rev-parse --short HEAD)
|
||||
```
|
||||
@@ -1,42 +0,0 @@
|
||||
## Available Scripts
|
||||
|
||||
In the project directory, you can run:
|
||||
|
||||
### `npm start`
|
||||
|
||||
Runs the app in the development mode.<br>
|
||||
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
|
||||
|
||||
The page will reload if you make edits.<br>
|
||||
You will also see any lint errors in the console.
|
||||
|
||||
### `npm test`
|
||||
|
||||
Launches the test runner in the interactive watch mode.<br>
|
||||
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
|
||||
|
||||
### `npm run build`
|
||||
|
||||
Builds the app for production to the `build` folder.<br>
|
||||
It correctly bundles React in production mode and optimizes the build for the best performance.
|
||||
|
||||
The build is minified and the filenames include the hashes.<br>
|
||||
Your app is ready to be deployed!
|
||||
|
||||
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
|
||||
|
||||
### `npm run eject`
|
||||
|
||||
**Note: this is a one-way operation. Once you `eject`, you can’t go back!**
|
||||
|
||||
If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
|
||||
|
||||
Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
|
||||
|
||||
You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
|
||||
|
||||
## Learn More
|
||||
|
||||
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
|
||||
|
||||
To learn React, check out the [React documentation](https://reactjs.org/).
|
||||
@@ -1,66 +0,0 @@
|
||||
# Overview
|
||||
|
||||
[](https://dev.azure.com/msft-vott/VoTT/_build/latest?definitionId=55&branchName=master)
|
||||
|
||||
Instruction on how to create new GitHub & Web Releases.
|
||||
|
||||
## Release Process
|
||||
|
||||

|
||||
|
||||
### AzDO Tasks
|
||||
|
||||
[GitHub Release Task](https://github.com/microsoft/azure-pipelines-tasks/tree/master/Tasks/GitHubReleaseV1)
|
||||
|
||||
[Azure File Copy](https://github.com/microsoft/azure-pipelines-tasks/tree/master/Tasks/AzureFileCopyV3)
|
||||
|
||||
## Versioning
|
||||
|
||||
Follow [NPM Semantic Versioning](https://docs.npmjs.com/about-semantic-versioning#incrementing-semantic-versions-in-published-packages)
|
||||
|
||||
| Code status | Stage | Rule | Example version |
|
||||
| ----------------------------------------- | ------------- | ------------------------------------------------------------------ | --------------- |
|
||||
| First release | New product | Start with 1.0.0 | 1.0.0 |
|
||||
| Backward compatible bug fixes | Patch release | Increment the third digit | 1.0.1 |
|
||||
| Backward compatible new features | Minor release | Increment the middle digit and reset last digit to zero | 1.1.0 |
|
||||
| Changes that break backward compatibility | Major release | Increment the first digit and reset middle and last digits to zero | 2.0.0 |
|
||||
|
||||
### Commands
|
||||
|
||||
The pipeline use [npm-version](https://docs.npmjs.com/cli/version) to update version
|
||||
|
||||
#### Pre
|
||||
|
||||
All version with `pre`, ie. `preminor` will bump the appropriate didgit & append `-0` to the new version
|
||||
|
||||
Examples:
|
||||
|
||||
`npm version prepatch`
|
||||
|
||||
1. v2.3.0 --> v2.3.1-0
|
||||
1. v2.3.1-0 --> v2.3.2-0
|
||||
|
||||
`npm version preminor`
|
||||
|
||||
1. v2.3.0 --> v2.4.0-0
|
||||
1. v2.4.0-0 --> v2.5.0-0
|
||||
|
||||
##### Exception
|
||||
|
||||
`prerelease` behave similar to prepatch, but would increment the last digit.
|
||||
|
||||
Examples:
|
||||
|
||||
`npm version prerelease`
|
||||
|
||||
v2.3.0 --> v2.3.1-0
|
||||
|
||||
v2.3.0-0 --> v2.3.0-1
|
||||
|
||||
#### Major
|
||||
|
||||
v2.x.x --> v3.0.0
|
||||
|
||||
#### Minor
|
||||
|
||||
v2.2.0 --> v2.3.0
|
||||
@@ -1,16 +0,0 @@
|
||||
# Overview
|
||||
|
||||
We're using [EditorConfig](https://editorconfig.org/) to help maintain consistent coding styles
|
||||
and also avoid unneccessary changes due to space/tab configuration.
|
||||
|
||||
## How to use
|
||||
|
||||
Some editors required installing additional plugin to work while others don't.
|
||||
|
||||
* Find your editor [here](https://editorconfig.org/).
|
||||
|
||||
### Editors that require plugins
|
||||
|
||||
* VsCode
|
||||
* Notepad
|
||||
* Sublime Text
|
||||
|
Antes Largura: | Altura: | Tamanho: 113 KiB |
|
Antes Largura: | Altura: | Tamanho: 336 KiB |
|
Antes Largura: | Altura: | Tamanho: 217 KiB |
|
Antes Largura: | Altura: | Tamanho: 129 KiB |
|
Antes Largura: | Altura: | Tamanho: 170 KiB |
|
Antes Largura: | Altura: | Tamanho: 202 KiB |
|
Antes Largura: | Altura: | Tamanho: 87 KiB |
|
Antes Largura: | Altura: | Tamanho: 342 KiB |
|
Antes Largura: | Altura: | Tamanho: 118 KiB |
|
Antes Largura: | Altura: | Tamanho: 218 KiB |
@@ -1,24 +0,0 @@
|
||||
# only use if package.json doesn't contain a "build"
|
||||
|
||||
directories:
|
||||
output: releases
|
||||
buildResources: app-icons # this is where app-icons is store
|
||||
appId: com.microsoft.vott
|
||||
artifactName: '${productName}-${version}-${platform}.${ext}'
|
||||
extends: null # need this otherwise it won't use the entry point we set in "main" in package.json
|
||||
files:
|
||||
- filter:
|
||||
- build/ # copy this directory to the asar directory that electron-builder use to look for the main entry file
|
||||
mac:
|
||||
icon: app-icons/icon.icns
|
||||
target: dmg
|
||||
identity: null # don't sign the app
|
||||
win:
|
||||
icon: app-icons/icon.ico
|
||||
linux:
|
||||
target:
|
||||
- snap
|
||||
publish: null
|
||||
electronVersion: 3.0.13
|
||||
extraFiles:
|
||||
- "cocoSSDModel"
|
||||
@@ -0,0 +1,254 @@
|
||||
const electron = require('electron');
|
||||
// Module to control application life.
|
||||
const app = electron.app;
|
||||
// Module to create native browser window.
|
||||
const BrowserWindow = electron.BrowserWindow;
|
||||
const windowStateKeeper = require('electron-window-state');
|
||||
const path = require('path');
|
||||
const url = require('url');
|
||||
|
||||
// Keep a global reference of the window object, if you don't, the window will
|
||||
// be closed automatically when the JavaScript object is garbage collected.
|
||||
let mainWindow;
|
||||
let ipcMain = require('electron').ipcMain;
|
||||
|
||||
function createWindow () {
|
||||
|
||||
let mainWindowState = windowStateKeeper({
|
||||
defaultWidth: 800,
|
||||
defaultHeight: 600
|
||||
});
|
||||
|
||||
// Create the browser window.
|
||||
mainWindow = new BrowserWindow({
|
||||
width: mainWindowState.width,
|
||||
height: mainWindowState.height,
|
||||
x: mainWindowState.x,
|
||||
y: mainWindowState.y,
|
||||
minHeight: 480,
|
||||
minWidth: 480,
|
||||
icon: __dirname + '/src/public/images/icon.png',
|
||||
show: false
|
||||
});
|
||||
|
||||
mainWindowState.manage(mainWindow);
|
||||
|
||||
// and load the index.html of the app.
|
||||
mainWindow.loadURL(url.format({
|
||||
pathname: path.join(__dirname, 'src/index.html'),
|
||||
protocol: 'file:',
|
||||
slashes: true
|
||||
}));
|
||||
|
||||
ipcMain.on('setFilePath', function (event, arg) {
|
||||
mainWindow.setRepresentedFilename(arg);
|
||||
|
||||
// opened a file, enabling save and export to CNTK menu items
|
||||
let p = (process.platform === 'darwin') ? 1 : 0;
|
||||
menu.items[p].submenu.items[1].enabled = true;
|
||||
menu.items[p].submenu.items[2].enabled = true;
|
||||
menu.items[p].submenu.items[3].enabled = true;
|
||||
menu.items[p+1].submenu.items[0].enabled = true;
|
||||
menu.items[p+1].submenu.items[1].enabled = true;
|
||||
});
|
||||
|
||||
|
||||
// do this independently for each object
|
||||
ipcMain.on('show-popup', function(event, arg) {
|
||||
let popup = new BrowserWindow({
|
||||
parent: mainWindow,
|
||||
modal: true,
|
||||
show: false,
|
||||
frame: false,
|
||||
autoHideMenuBar : true
|
||||
});
|
||||
|
||||
switch (arg.type) {
|
||||
case "export":
|
||||
popup.setSize(359, 300);
|
||||
popup.loadURL(url.format({
|
||||
pathname: path.join(__dirname, 'src/public/html/export-configuration.html'),
|
||||
protocol: 'file:',
|
||||
slashes: true
|
||||
}));
|
||||
break;
|
||||
|
||||
case "review":
|
||||
popup.setSize(359, 310);
|
||||
popup.loadURL(url.format({
|
||||
pathname: path.join(__dirname, 'src/public/html/review-configuration.html'),
|
||||
protocol: 'file:',
|
||||
slashes: true
|
||||
}));
|
||||
break;
|
||||
|
||||
default: return;
|
||||
}
|
||||
|
||||
popup.once('ready-to-show', () => {
|
||||
popup.send('configs', arg);
|
||||
popup.show();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
ipcMain.on('export-tags', (event, arg) => {
|
||||
mainWindow.send('export-tags', arg);
|
||||
});
|
||||
|
||||
ipcMain.on('review-model', (event, arg) => {
|
||||
mainWindow.send('review-model', arg);
|
||||
});
|
||||
|
||||
mainWindow.on('ready-to-show', function() {
|
||||
mainWindow.show();
|
||||
mainWindow.focus();
|
||||
});
|
||||
|
||||
// Emitted when the window is closed.
|
||||
mainWindow.on('closed', function () {
|
||||
// Dereference the window object, usually you would store windows
|
||||
// in an array if your app supports multi windows, this is the time
|
||||
// when you should delete the corresponding element.
|
||||
mainWindow = null;
|
||||
});
|
||||
|
||||
const {app, Menu} = require('electron');
|
||||
const template = [
|
||||
{
|
||||
label: 'File',
|
||||
submenu: [
|
||||
{
|
||||
label: 'Open...',
|
||||
accelerator: 'CmdOrCtrl+O',
|
||||
click () { mainWindow.webContents.send('openVideo'); }
|
||||
},
|
||||
{
|
||||
label: 'Open Image Directory...',
|
||||
accelerator: 'CmdOrCtrl+I',
|
||||
click () { mainWindow.webContents.send('openImageDirectory'); }
|
||||
},
|
||||
{
|
||||
label: 'Save',
|
||||
accelerator: 'CmdOrCtrl+S',
|
||||
enabled: false,
|
||||
click () { mainWindow.webContents.send('saveVideo'); }
|
||||
},
|
||||
{
|
||||
label: 'Toggle Tracking',
|
||||
accelerator: 'CmdOrCtrl+T',
|
||||
enabled: false,
|
||||
click () { mainWindow.webContents.send('toggleTracking'); }
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Object Detection',
|
||||
submenu: [
|
||||
{
|
||||
label: 'Export Tags',
|
||||
accelerator: 'CmdOrCtrl+E',
|
||||
enabled: false,
|
||||
click () { mainWindow.webContents.send('export'); }
|
||||
},
|
||||
{
|
||||
label: 'Review Detection Model',
|
||||
accelerator: 'CmdOrCtrl+R',
|
||||
enabled: false,
|
||||
click () { mainWindow.webContents.send('review'); }
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: "Edit",
|
||||
submenu: [
|
||||
{ label: "Undo", accelerator: "CmdOrCtrl+Z", selector: "undo:" },
|
||||
{ label: "Redo", accelerator: "Shift+CmdOrCtrl+Z", selector: "redo:" },
|
||||
{ type: "separator" },
|
||||
{ label: "Cut", accelerator: "CmdOrCtrl+X", selector: "cut:" },
|
||||
{ label: "Copy", accelerator: "CmdOrCtrl+C", selector: "copy:" },
|
||||
{ label: "Paste", accelerator: "CmdOrCtrl+V", selector: "paste:" },
|
||||
{ label: "Select All", accelerator: "CmdOrCtrl+A", selector: "selectAll:" }
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Debug',
|
||||
submenu: [
|
||||
{
|
||||
label: 'Toggle Developer Tools',
|
||||
accelerator: 'CmdOrCtrl+D',
|
||||
click () { mainWindow.webContents.toggleDevTools(); }
|
||||
},
|
||||
{
|
||||
label: 'Refresh App',
|
||||
accelerator: 'CmdOrCtrl+Space',
|
||||
click () { mainWindow.reload(); }
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
if (process.platform === 'darwin') {
|
||||
template.unshift({
|
||||
label: app.getName(),
|
||||
submenu: [
|
||||
{
|
||||
role: 'about'
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
role: 'hide'
|
||||
},
|
||||
{
|
||||
role: 'hideothers'
|
||||
},
|
||||
{
|
||||
role: 'unhide'
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
role: 'quit'
|
||||
}
|
||||
]
|
||||
})
|
||||
template[1].submenu.push();
|
||||
template[2].submenu.push();
|
||||
|
||||
}
|
||||
|
||||
const menu = Menu.buildFromTemplate(template);
|
||||
Menu.setApplicationMenu(menu);
|
||||
|
||||
}
|
||||
|
||||
// This method will be called when Electron has finished
|
||||
// initialization and is ready to create browser windows.
|
||||
// Some APIs can only be used after this event occurs.
|
||||
app.on('ready', createWindow);
|
||||
|
||||
// Quit when all windows are closed.
|
||||
app.on('window-all-closed', function () {
|
||||
// On OS X it is common for applications and their menu bar
|
||||
// to stay active until the user quits explicitly with Cmd + Q
|
||||
if (process.platform !== 'darwin') {
|
||||
app.quit()
|
||||
}
|
||||
});
|
||||
|
||||
app.on('activate', function () {
|
||||
// On OS X it's common to re-create a window in the app when the
|
||||
// dock icon is clicked and there are no other windows open.
|
||||
if (mainWindow === null) {
|
||||
createWindow()
|
||||
}
|
||||
});
|
||||
|
||||
// In this file you can include the rest of your app's specific main process
|
||||
// code. You can also put them in separate files and require them here.
|
||||
|
Depois Largura: | Altura: | Tamanho: 16 KiB |
|
Depois Largura: | Altura: | Tamanho: 59 KiB |
|
Depois Largura: | Altura: | Tamanho: 48 KiB |
|
Depois Largura: | Altura: | Tamanho: 40 KiB |
|
Depois Largura: | Altura: | Tamanho: 63 KiB |
|
Depois Largura: | Altura: | Tamanho: 64 KiB |
|
Depois Largura: | Altura: | Tamanho: 66 KiB |
|
Depois Largura: | Altura: | Tamanho: 64 KiB |
|
Depois Largura: | Altura: | Tamanho: 20 KiB |
|
Depois Largura: | Altura: | Tamanho: 20 KiB |
|
Depois Largura: | Altura: | Tamanho: 451 B |
|
Depois Largura: | Altura: | Tamanho: 74 KiB |
|
Depois Largura: | Altura: | Tamanho: 36 KiB |
|
Depois Largura: | Altura: | Tamanho: 320 B |
|
Depois Largura: | Altura: | Tamanho: 544 B |
|
Depois Largura: | Altura: | Tamanho: 305 B |
|
Depois Largura: | Altura: | Tamanho: 33 KiB |
@@ -1,139 +1,29 @@
|
||||
{
|
||||
"name": "vott",
|
||||
"version": "2.2.0",
|
||||
"author": {
|
||||
"name": "Microsoft",
|
||||
"url": "https://github.com/Microsoft/VoTT"
|
||||
},
|
||||
"description": "Visual Object Tagging Tool (VoTT) - an annotation and labeling tool for images and video.",
|
||||
"homepage": "https://github.com/Microsoft/VoTT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Microsoft/VoTT.git"
|
||||
},
|
||||
"license": "MIT",
|
||||
"private": true,
|
||||
"main": "build/main.js",
|
||||
"dependencies": {
|
||||
"@azure/storage-blob": "^10.3.0",
|
||||
"@tensorflow/tfjs": "^1.0.3",
|
||||
"@types/snapsvg": "^0.4.35",
|
||||
"axios": "^0.18.0",
|
||||
"bootstrap": "^4.1.3",
|
||||
"buffer-reverse": "^1.0.1",
|
||||
"crypto-js": "^3.1.9-1",
|
||||
"dotenv": "^7.0.0",
|
||||
"express-request-id": "^1.4.1",
|
||||
"google-protobuf": "^3.6.1",
|
||||
"jpeg-js": "^0.3.4",
|
||||
"json2csv": "^4.5.0",
|
||||
"lodash": "^4.17.11",
|
||||
"md5.js": "^1.3.5",
|
||||
"node-fetch": "^2.3.0",
|
||||
"node-int64": "^0.4.0",
|
||||
"rc-align": "^2.4.5",
|
||||
"rc-checkbox": "^2.1.6",
|
||||
"rc-menu": "^7.4.21",
|
||||
"rc-slider": "^8.6.7",
|
||||
"react": "^16.7.0",
|
||||
"react-appinsights": "^3.0.0-rc.5",
|
||||
"react-color": "^2.17.0",
|
||||
"react-dom": "^16.7.0",
|
||||
"react-jsonschema-form": "^1.3.0",
|
||||
"react-localization": "^1.0.13",
|
||||
"react-modal": "^3.8.1",
|
||||
"react-redux": "^5.1.1",
|
||||
"react-router-dom": "^4.3.1",
|
||||
"react-scripts": "2.1.1",
|
||||
"react-split-pane": "^0.1.87",
|
||||
"react-tag-input": "^6.1.0",
|
||||
"react-toastify": "^4.5.2",
|
||||
"react-virtualized": "^9.21.0",
|
||||
"react-vis": "^1.11.6",
|
||||
"reactstrap": "^6.5.0",
|
||||
"redux": "^4.0.1",
|
||||
"redux-thunk": "^2.3.0",
|
||||
"rimraf": "^2.6.2",
|
||||
"shortid": "^2.2.14",
|
||||
"video-react": "^0.13.2",
|
||||
"vott-ct": "2.1.24",
|
||||
"vott-react": "^0.2.10"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "nf start -p 3000",
|
||||
"compile": "tsc",
|
||||
"build": "react-scripts build",
|
||||
"webpack:dev": "webpack --config ./config/webpack.dev.js",
|
||||
"webpack:prod": "webpack -p --config ./config/webpack.prod.js",
|
||||
"react-start": "react-scripts start",
|
||||
"electron:run:dev": "npm run webpack:dev && electron . --remote-debugging-port=9223",
|
||||
"electron:run:prod": "npm run webpack:prod && electron . --remote-debugging-port=9223",
|
||||
"electron:start:dev": "npm run webpack:dev && npm run electron-start",
|
||||
"electron:start:prod": "npm run webpack:prod && npm run electron-start",
|
||||
"electron-start": "node src/electron/start",
|
||||
"eject": "react-scripts eject",
|
||||
"release-pr": "./scripts/release-pr.sh",
|
||||
"release-web": "npm run build && npm run webpack:prod",
|
||||
"release-ci": "bash ./scripts/build.sh",
|
||||
"release": "npm run build && npm run webpack:prod && electron-builder",
|
||||
"pretest": "./node_modules/.bin/tslint 'src/**/*.ts*'",
|
||||
"lintfix": "./node_modules/.bin/tslint 'src/**/*.ts*' --fix",
|
||||
"test": "react-scripts test --env=jsdom --silent",
|
||||
"test:ci": "cross-env CI=true npm run test",
|
||||
"test:coverage": "npm run test -- --coverage",
|
||||
"plato": "scripts/generate-report.sh -o report -v $(node -pe \"require('./package.json').version\") -c $(git rev-parse --short HEAD)",
|
||||
"postinstall": "electron-builder install-app-deps",
|
||||
"predebug": "npm run build && npm run webpack:dev"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"extends": "react-app"
|
||||
},
|
||||
"browserslist": [
|
||||
">0.2%",
|
||||
"not dead",
|
||||
"not ie <= 11",
|
||||
"not op_mini all"
|
||||
],
|
||||
"devDependencies": {
|
||||
"@fortawesome/fontawesome-free": "^5.5.0",
|
||||
"@types/axios": "^0.14.0",
|
||||
"@types/dotenv": "^6.1.0",
|
||||
"@types/enzyme": "^3.1.15",
|
||||
"@types/jest": "23.3.9",
|
||||
"@types/json2csv": "^4.4.0",
|
||||
"@types/node": "10.12.7",
|
||||
"@types/react": "16.7.6",
|
||||
"@types/react-dom": "16.0.9",
|
||||
"@types/react-jsonschema-form": "^1.0.12",
|
||||
"@types/react-router-dom": "^4.3.1",
|
||||
"@types/react-split-pane": "^0.1.67",
|
||||
"@types/react-toastify": "^4.0.1",
|
||||
"@types/reactstrap": "^6.4.3",
|
||||
"@types/redux-logger": "^3.0.6",
|
||||
"@types/redux-mock-store": "^1.0.0",
|
||||
"cross-env": "^5.2.0",
|
||||
"electron": "^3.0.13",
|
||||
"electron-builder": "^22.6.0",
|
||||
"enzyme": "^3.7.0",
|
||||
"enzyme-adapter-react-16": "^1.7.0",
|
||||
"foreman": "^3.0.1",
|
||||
"jest-enzyme": "^7.0.1",
|
||||
"jquery": "^3.3.1",
|
||||
"mock-fs": "^4.13.0",
|
||||
"node-sass": "^4.14.1",
|
||||
"popper.js": "^1.14.6",
|
||||
"redux-immutable-state-invariant": "^2.1.0",
|
||||
"redux-logger": "^3.0.6",
|
||||
"redux-mock-store": "^1.5.3",
|
||||
"ts-loader": "^5.3.0",
|
||||
"tslint": "^5.11.0",
|
||||
"typescript": "^3.1.6",
|
||||
"webpack": "^4.19.1",
|
||||
"webpack-cli": "^3.1.2",
|
||||
"webpack-merge": "^4.1.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.14.2",
|
||||
"npm": ">=6.4.1"
|
||||
}
|
||||
"name": "vott",
|
||||
"version": "1.0.0",
|
||||
"description": "An electron app for building end to end Object Detection Models with CNTK from Sample Videos.",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
"start": "electron ."
|
||||
},
|
||||
"repository": "https://github.com/CatalystCode/VOTT",
|
||||
"keywords": [
|
||||
"Video-Tagging",
|
||||
"CNTK",
|
||||
"Deep-Learning",
|
||||
"Object-Detection"
|
||||
],
|
||||
"readme": "README.md",
|
||||
"author": "aribornstein",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"bower": "^1.7.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"async": "^2.1.5",
|
||||
"cntk-fastrcnn": "^0.2.6",
|
||||
"electron": "^1.4.1",
|
||||
"electron-window-state": "^4.0.2",
|
||||
"remote": "^0.2.6"
|
||||
}
|
||||
}
|
||||
|
||||
|
Antes Largura: | Altura: | Tamanho: 15 KiB |
@@ -1,41 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="theme-color" content="#000000">
|
||||
<!--
|
||||
manifest.json provides metadata used when your web app is added to the
|
||||
homescreen on Android. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
||||
-->
|
||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
|
||||
<!--
|
||||
Notice the use of %PUBLIC_URL% in the tags above.
|
||||
It will be replaced with the URL of the `public` folder during the build.
|
||||
Only files inside the `public` folder can be referenced from the HTML.
|
||||
|
||||
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
|
||||
work correctly both with client-side routing and a non-root public URL.
|
||||
Learn how to configure a non-root public URL by running `npm run build`.
|
||||
-->
|
||||
<title>Visual Object Tagging Tool (VoTT) v%REACT_APP_VERSION%</title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
You need to enable JavaScript to run this app.
|
||||
</noscript>
|
||||
<div id="root"></div>
|
||||
<div style="display: none;">VoTT v%REACT_APP_VERSION%, commit=%REACT_APP_COMMIT_SHA%</div>
|
||||
<!--
|
||||
This HTML file is a template.
|
||||
If you open it directly in the browser, you will see an empty page.
|
||||
|
||||
You can add webfonts, meta tags, or analytics to this file.
|
||||
The build step will place the bundled scripts into the <body> tag.
|
||||
|
||||
To begin the development, run `npm start` or `yarn start`.
|
||||
To create a production bundle, use `npm run build` or `yarn build`.
|
||||
-->
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,15 +0,0 @@
|
||||
{
|
||||
"short_name": "VoTT",
|
||||
"name": "Visual Object Tagging Tool",
|
||||
"icons": [
|
||||
{
|
||||
"src": "favicon.ico",
|
||||
"sizes": "64x64 32x32 24x24 16x16",
|
||||
"type": "image/x-icon"
|
||||
}
|
||||
],
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"theme_color": "#000000",
|
||||
"background_color": "#ffffff"
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512" fill="#7cbb00" stroke="#7cbb00">><path d="M497.941 225.941L286.059 14.059A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v204.118a48 48 0 0 0 14.059 33.941l211.882 211.882c18.744 18.745 49.136 18.746 67.882 0l204.118-204.118c18.745-18.745 18.745-49.137 0-67.882zM112 160c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm513.941 133.823L421.823 497.941c-18.745 18.745-49.137 18.745-67.882 0l-.36-.36L527.64 323.522c16.999-16.999 26.36-39.6 26.36-63.64s-9.362-46.641-26.36-63.64L331.397 0h48.721a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882z"/></svg>
|
||||
|
Antes Largura: | Altura: | Tamanho: 663 B |
@@ -1,18 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# NOTE: this script should be ran from the root of the repository; the CWD should reflect this
|
||||
VERSION=$(node -pe "require('./package.json').version")
|
||||
COMMIT_SHA=$(git rev-parse --short HEAD)
|
||||
NPM_BIN_DIR=$(npm bin)
|
||||
|
||||
echo "cwd=$(pwd)"
|
||||
echo "version=${VERSION}"
|
||||
echo "commit=${COMMIT_SHA}"
|
||||
|
||||
export REACT_APP_VERSION=${VERSION}
|
||||
export REACT_APP_COMMIT_SHA=${COMMIT_SHA}
|
||||
|
||||
npx react-scripts build
|
||||
npx webpack -p --config ./config/webpack.prod.js
|
||||
npx electron-builder
|
||||
@@ -1,52 +0,0 @@
|
||||
|
||||
const plato = require('es6-plato');
|
||||
|
||||
// parse command line args
|
||||
const optionDefinitions = [
|
||||
{ name: 'src', type: String, defaultValue: './es6-src/**' },
|
||||
{ name: 'output', type: String, defaultValue: './report' },
|
||||
{ name: 'version', type: String, defaultValue: '2.0.0' },
|
||||
{ name: 'commit', type: String, defaultValue: '' }
|
||||
]
|
||||
const commandLineArgs = require('command-line-args');
|
||||
const options = commandLineArgs(optionDefinitions)
|
||||
|
||||
// close(ish) eslint config for ES6 + React
|
||||
let lintRules = {
|
||||
extends: [
|
||||
'eslint:recommended',
|
||||
'plugin:react/recommended'
|
||||
],
|
||||
plugins: [
|
||||
'react'
|
||||
],
|
||||
env: {
|
||||
es6: true,
|
||||
browser: true,
|
||||
serviceworker: true
|
||||
},
|
||||
parserOptions: {
|
||||
'ecmaVersion': 6,
|
||||
'sourceType': 'module',
|
||||
'ecmaFeatures': {
|
||||
'jsx': true
|
||||
}
|
||||
},
|
||||
rules: {
|
||||
quotes: [2, 'double']
|
||||
}
|
||||
};
|
||||
|
||||
// exclude all tests, toolbar/mockFactory and localization
|
||||
let exclude = /\.test|registerToolbar|en-us|es-cl|mockFactory/;
|
||||
let complexityRules = {};
|
||||
|
||||
let platoArgs = {
|
||||
title: `VoTT Complexity Analysis<br/>v${options.version}<br/>commit: ${options.commit}`,
|
||||
exclude: exclude,
|
||||
eslint: lintRules,
|
||||
complexity: complexityRules
|
||||
};
|
||||
|
||||
console.info(`Running complexity analysis on \`${options.src}\`, writing results to \`${options.output}\`...`);
|
||||
plato.inspect(options.src, options.output, platoArgs);
|
||||
@@ -1,59 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# NOTE: To generate a changlelog, a git revision range is required. This can be commit SHAs,
|
||||
# but for all links in the template to work, tags are expected. The CWD should be set to the
|
||||
# root of the repository.
|
||||
echo "cwd=$(pwd)"
|
||||
|
||||
PARAMS=""
|
||||
while (( "$#" )); do
|
||||
case "$1" in
|
||||
-t|--to)
|
||||
TO_COMMIT=$2
|
||||
shift 2
|
||||
;;
|
||||
-f|--from)
|
||||
FROM_COMMIT=$2
|
||||
shift 2
|
||||
;;
|
||||
--) # end argument parsing
|
||||
shift
|
||||
break
|
||||
;;
|
||||
-*|--*=) # unsupported flags
|
||||
echo "Error: Unsupported flag $1" >&2
|
||||
exit 1
|
||||
;;
|
||||
*) # preserve positional arguments
|
||||
PARAMS="$PARAMS $1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
# set positional arguments in their proper place
|
||||
eval set -- "$PARAMS"
|
||||
|
||||
BASE_GITHUB_URL=https://github.com/Microsoft/VoTT
|
||||
RELEASE_DATE=$(date +"%m-%d-%Y")
|
||||
TEMPLATE="# [${TO_COMMIT}](${BASE_GITHUB_URL}/compare/${FROM_COMMIT}...${TO_COMMIT}) (${RELEASE_DATE})\n[GitHub Release](${BASE_GITHUB_URL}/releases/tag/${TO_COMMIT})\n\n"
|
||||
CL_START='<!-- cl-start -->'
|
||||
|
||||
# Grab all non-merge commits (from PRs). Current PR policy is squash and merge,
|
||||
# using the fast-forward option, so merge commits *shouldn't* be present in the commit history.
|
||||
COMMITS=$(git log --pretty=%s --no-merges ${FROM_COMMIT}..${TO_COMMIT})
|
||||
|
||||
echo "Generating changlog from ${FROM_COMMIT} to ${TO_COMMIT}..."
|
||||
while read -r line;
|
||||
do
|
||||
echo "${line}"
|
||||
TEMPLATE="${TEMPLATE}- ${line}\n"
|
||||
done <<< "${COMMITS}"
|
||||
|
||||
# Attemped to use `sed` here, but between new lines and escape characters,
|
||||
# quickly became untenable. Python, perl and a couple other solutions come to mind,
|
||||
# but npm/JS are very xplat friendly and we're already using that tooling.
|
||||
# sed -i -e "s/${CL_START}/${CL_START}\n${TEMPLATE}/" CHANGELOG.md
|
||||
|
||||
npm install replace-in-file --no-save
|
||||
./node_modules/.bin/replace-in-file "${CL_START}" "$(echo -e ${CL_START}\\n\\n${TEMPLATE})" CHANGELOG.md
|
||||
@@ -1,63 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# -e: immediately exit if any command has a non-zero exit status
|
||||
# -o: prevents errors in a pipeline from being masked
|
||||
|
||||
BASEDIR=$(dirname "$0")
|
||||
ES6_SRC=$(pwd)/es6-src
|
||||
|
||||
PARAMS=""
|
||||
while (( "$#" )); do
|
||||
case "$1" in
|
||||
-o|--output)
|
||||
REPORT_DIR=$2
|
||||
shift 2
|
||||
;;
|
||||
-v|--version)
|
||||
VERSION=$2
|
||||
shift 2
|
||||
;;
|
||||
-c|--commit)
|
||||
COMMIT_SHA=$2
|
||||
shift 2
|
||||
;;
|
||||
--) # end argument parsing
|
||||
shift
|
||||
break
|
||||
;;
|
||||
-*|--*=) # unsupported flags
|
||||
echo "Error: Unsupported flag $1" >&2
|
||||
exit 1
|
||||
;;
|
||||
*) # preserve positional arguments
|
||||
PARAMS="$PARAMS $1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
# set positional arguments in their proper place
|
||||
eval set -- "$PARAMS"
|
||||
|
||||
echo "cwd=$(pwd)"
|
||||
echo "basedir=${BASEDIR}"
|
||||
echo "source=${ES6_SRC}"
|
||||
echo "output=${REPORT_DIR}"
|
||||
echo "version=${VERSION}"
|
||||
echo "commit=${COMMIT_SHA}"
|
||||
|
||||
# these are just needed for the reports; just install ad-hoc and don't save to package.json
|
||||
npm install es6-plato eslint-plugin-react command-line-args --no-save
|
||||
|
||||
echo
|
||||
echo "------> Finish installing dependencies"
|
||||
|
||||
echo
|
||||
echo "------> Transpile TS to ES6"
|
||||
# we can't do complexity analysis on TypeScript directly; transpile to ES6
|
||||
rm -rf ${ES6_SRC}
|
||||
tsc --noEmit false --outDir ${ES6_SRC}
|
||||
|
||||
echo
|
||||
echo "------> Running complexity analasis ..."
|
||||
node ${BASEDIR}/complexity-analysis.js --src ${ES6_SRC} --output ${REPORT_DIR} --version ${VERSION} --commit ${COMMIT_SHA}
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# NOTE: this script should be ran from the root of the repository; the CWD should reflect this
|
||||
VERSION=$(node -pe "require('./package.json').version")
|
||||
COMMIT_SHA=$(git rev-parse --short HEAD)
|
||||
|
||||
echo "cwd=$(pwd)"
|
||||
echo "version=${VERSION}"
|
||||
echo "commit=${COMMIT_SHA}"
|
||||
|
||||
# use by web pack
|
||||
export REACT_APP_VERSION=${VERSION}
|
||||
export REACT_APP_COMMIT_SHA=${COMMIT_SHA}
|
||||
|
||||
# npm install will be in a standalone task
|
||||
npm run release-web
|
||||
@@ -1,10 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Get full branch name excluding refs/head from the env var SOURCE_BRANCH
|
||||
SOURCE_BRANCH_NAME=${SOURCE_BRANCH/refs\/heads\/}
|
||||
|
||||
echo "SOURCE_BRANCH: ${SOURCE_BRANCH_NAME}"
|
||||
git pull origin ${SOURCE_BRANCH_NAME}
|
||||
git checkout ${SOURCE_BRANCH_NAME}
|
||||
echo "Checked out branch: ${SOURCE_BRANCH_NAME}"
|
||||
@@ -1,61 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
PARAMS=""
|
||||
while (( "$#" )); do
|
||||
case "$1" in
|
||||
-p|--previous)
|
||||
PREVIOUS_VERSION=$2
|
||||
shift 2
|
||||
;;
|
||||
-n|--new)
|
||||
NEW_VERSION=$2
|
||||
shift 2
|
||||
;;
|
||||
--) # end argument parsing
|
||||
shift
|
||||
break
|
||||
;;
|
||||
-*|--*=) # unsupported flags
|
||||
echo "Error: Unsupported flag $1" >&2
|
||||
exit 1
|
||||
;;
|
||||
*) # preserve positional arguments
|
||||
PARAMS="$PARAMS $1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
# set positional arguments in their proper place
|
||||
eval set -- "$PARAMS"
|
||||
|
||||
BASEDIR=$(dirname "$0")
|
||||
PROMPT=$(echo -e "This will create changes to open a release PR for VoTT v${NEW_VERSION}?\nNOTE: a clean working git directory is required.\nDo you want to continue? [Y/n] ")
|
||||
RELEASE_BRANCH=release-${NEW_VERSION}
|
||||
|
||||
read -p "${PROMPT}" -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]
|
||||
then
|
||||
echo "cwd=$(pwd)"
|
||||
echo "basedir=${BASEDIR}"
|
||||
echo "version=${NEW_VERSION}"
|
||||
|
||||
# get the latest from v2, create a release branch
|
||||
git checkout master
|
||||
git pull
|
||||
git checkout -b ${RELEASE_BRANCH}
|
||||
echo "Creating local tag ${NEW_VERSION}"
|
||||
git tag -a ${NEW_VERSION} -m "VoTT v${NEW_VERSION}"
|
||||
# update package.json version and the changelog
|
||||
npm install json --no-save
|
||||
# NOTE: at some point, we need to move to `npm version` and do all of this via build system
|
||||
./node_modules/.bin/json -I -f package.json -4 -e "this.version=\"${NEW_VERSION}\""
|
||||
./node_modules/.bin/json -I -f package-lock.json -4 -e "this.version=\"${NEW_VERSION}\""
|
||||
${BASEDIR}/generate-changelog.sh --from ${PREVIOUS_VERSION} --to ${NEW_VERSION}
|
||||
git commit -am "ci: update package version and changelog for ${NEW_VERSION} release"
|
||||
git push -u origin ${RELEASE_BRANCH}
|
||||
# remove the local tag, used for the changelog
|
||||
echo "Deleting local tag ${NEW_VERSION}"
|
||||
git tag -d ${NEW_VERSION}
|
||||
fi
|
||||
@@ -1,25 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -eou pipefail
|
||||
|
||||
# NOTE: this script should be ran from the root of the repository; the CWD should reflect this
|
||||
BASEDIR=$(dirname "$0")
|
||||
REPORT_DIR=$(pwd)/report
|
||||
VERSION=$(node -pe "require('./package.json').version")
|
||||
COMMIT_SHA=$(git rev-parse --short HEAD)
|
||||
|
||||
echo "cwd=$(pwd)"
|
||||
echo "basedir=${BASEDIR}"
|
||||
echo "reportdir=${REPORT_DIR}"
|
||||
echo "version=${VERSION}"
|
||||
echo "commit=${COMMIT_SHA}"
|
||||
|
||||
# This script appends code complexity reports over time. Given the amount of files, report files
|
||||
# are now stored on Azure Blob Storage. It's the source of truth - we download the current report,
|
||||
# run complexity analysis again, then push everything back to blob.
|
||||
rm -rf ${REPORT_DIR}
|
||||
mkdir -p ${REPORT_DIR}
|
||||
|
||||
#NOTE: be sure to set AZURE_STORAGE_ACCOUNT and AZURE_STORAGE_KEY environment variables
|
||||
az storage blob download-batch --no-progress -d report -s '$web' > /tmp/download.log
|
||||
|
||||
${BASEDIR}/generate-report.sh -o ${REPORT_DIR} -v ${VERSION} -c ${COMMIT_SHA}
|
||||
@@ -1,40 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
NPM_VERSION_TYPE=${1:-"prepatch --preid=preview"}
|
||||
echo "Next version type: ----->$NPM_VERSION_TYPE<-----"
|
||||
|
||||
PACKAGE_VERSION=$(node -pe "require('./package.json').version")
|
||||
CURRENT_VERSION="v$PACKAGE_VERSION"
|
||||
|
||||
# Get full branch name excluding refs/head from the env var SOURCE_BRANCH
|
||||
SOURCE_BRANCH_NAME=${SOURCE_BRANCH/refs\/heads\/}
|
||||
|
||||
# Configure git to commit as VoTT Service Account
|
||||
echo "Configuring git to use deploy key..."
|
||||
git config --local user.email "vott@microsoft.com"
|
||||
git config --local user.name "Vott"
|
||||
|
||||
echo "SOURCE_BRANCH: ${SOURCE_BRANCH_NAME}"
|
||||
git pull origin ${SOURCE_BRANCH_NAME}
|
||||
git checkout ${SOURCE_BRANCH_NAME}
|
||||
echo "Checked out branch: ${SOURCE_BRANCH_NAME}"
|
||||
|
||||
## format: v2.2.0
|
||||
NEXT_VERSION=`npm version ${NPM_VERSION_TYPE} -m "release: Update ${NPM_VERSION_TYPE} version to %s ***NO_CI***"`
|
||||
echo "Set next version to: ${NEXT_VERSION}"
|
||||
|
||||
# There is currently no way to pass variables between stages, hence this workaround
|
||||
echo
|
||||
echo "##vso[task.setvariable variable=NEXT_VERSION]$NEXT_VERSION"
|
||||
echo "##vso[task.setvariable variable=CURRENT_VERSION]$CURRENT_VERSION"
|
||||
|
||||
#### Push new tag
|
||||
SHA=`git rev-parse HEAD`
|
||||
|
||||
export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
|
||||
git remote add authOrigin git@github.com:microsoft/VoTT.git
|
||||
git push authOrigin ${SOURCE_BRANCH_NAME} --tags
|
||||
|
||||
echo
|
||||
echo "Pushed new tag: ${NEXT_VERSION} @ SHA: ${SHA:0:8}"
|
||||
@@ -1,5 +0,0 @@
|
||||
APP_ID=xyz
|
||||
APP_SECRET=asdf
|
||||
COOKIE_SECRETS="[ { key: '12345678901234567890123456789012', iv: '123456789012' }, { key: 'abcdefghijklmnopqrstuvwxyzabcdef', iv: 'abcdefghijkl' }, ])"
|
||||
ALLOW_HTTP=true
|
||||
BASE_URL=http://localhost:3000/
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Launch via NPM",
|
||||
"runtimeExecutable": "npm",
|
||||
"runtimeArgs": [
|
||||
"run-script",
|
||||
"debug"
|
||||
],
|
||||
"port": 9229
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Launch Program",
|
||||
"program": "${workspaceFolder}/lib/app.js", //"${workspaceFolder}\\lib\\app.js",
|
||||
"args": [
|
||||
"|",
|
||||
"bunyan"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
],
|
||||
"console": "internalConsole",
|
||||
"outputCapture": "std",
|
||||
}
|
||||
|
||||
]
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||
// for the documentation about the tasks.json format
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"type": "npm",
|
||||
"script": "build",
|
||||
"problemMatcher": [
|
||||
"$tsc"
|
||||
],
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"type": "typescript",
|
||||
"tsconfig": "tsconfig.json",
|
||||
"option": "watch",
|
||||
"problemMatcher": [
|
||||
"$tsc-watch"
|
||||
],
|
||||
"group": "build"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,75 +0,0 @@
|
||||
# Node.js
|
||||
# Build a general Node.js project with npm.
|
||||
# Add steps that analyze code, save build artifacts, deploy, and more:
|
||||
# https://docs.microsoft.com/azure/devops/pipelines/languages/javascript
|
||||
|
||||
trigger: none
|
||||
pr: none
|
||||
|
||||
variables:
|
||||
# Azure Resource Manager connection created during pipeline creation
|
||||
azureSubscription: fe7b93fe-e836-4a55-804c-883dbea6af24'
|
||||
|
||||
# Web app name
|
||||
webAppName: 'vott'
|
||||
|
||||
# Agent VM image name
|
||||
vmImageName: 'ubuntu-latest'
|
||||
|
||||
stages:
|
||||
- stage: Build
|
||||
displayName: Build stage
|
||||
jobs:
|
||||
- job: Build
|
||||
displayName: Build
|
||||
pool:
|
||||
vmImage: $(vmImageName)
|
||||
|
||||
steps:
|
||||
- task: NodeTool@0
|
||||
inputs:
|
||||
versionSpec: '10.x'
|
||||
displayName: 'Install Node.js'
|
||||
|
||||
- script: |
|
||||
npm install
|
||||
npm run build --if-present
|
||||
# npm run test --if-present
|
||||
workingDirectory: $(System.DefaultWorkingDirectory)/server
|
||||
displayName: 'npm install, build and test'
|
||||
|
||||
- task: ArchiveFiles@2
|
||||
displayName: 'Archive files'
|
||||
inputs:
|
||||
rootFolderOrFile: '$(System.DefaultWorkingDirectory)/server'
|
||||
includeRootFolder: false
|
||||
archiveType: zip
|
||||
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
|
||||
replaceExistingArchive: true
|
||||
|
||||
- upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
|
||||
artifact: drop
|
||||
|
||||
- stage: Deploy
|
||||
displayName: Deploy stage
|
||||
dependsOn: Build
|
||||
condition: succeeded()
|
||||
jobs:
|
||||
- deployment: Deploy
|
||||
displayName: Deploy
|
||||
environment: 'development'
|
||||
pool:
|
||||
vmImage: $(vmImageName)
|
||||
strategy:
|
||||
runOnce:
|
||||
deploy:
|
||||
steps:
|
||||
- task: AzureWebApp@1
|
||||
displayName: 'Azure Web App Deploy: vott'
|
||||
inputs:
|
||||
azureSubscription: $(azureSubscription)
|
||||
appType: webAppLinux
|
||||
appName: $(webAppName)
|
||||
runtimeStack: 'NODE|10.10'
|
||||
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
|
||||
startUpCommand: 'npm run start'
|
||||