Compare commits

...

583 Commits

Author SHA1 Message Date
Charles Gagnon
5bbc17be5c Fix ssl config issue (#8187)
* Fix ssl config issue

(cherry picked from commit cacd481bff)

* Better fix

* Actually return...
2019-11-01 16:25:44 -07:00
Charles Gagnon
abbb1e54da Add config for ignoring SSL errors on BDC queries (#8169)
* Add config for ignoring SSL errors on BDC queries

* Fix error handling in write stream

* Disable tslint check

* Handle promise appropriately

* PR comments

* Change defaults to true
2019-11-01 15:20:47 -07:00
Anthony Dresser
08d81927b4 remove js files that are being ignored (#8182) 2019-11-01 14:29:21 -07:00
Anthony Dresser
3d718068d1 update rollup code (#8181) 2019-11-01 13:36:14 -07:00
Anthony Dresser
1d31a6ef98 Bump some packages (#8096)
* update packages

* remove fs

* fix more deps

* test adding governance to ci

* ignore samples for cacheing

* fix save cache too

* bump more packages

* attempt to fix slickgrid

* add more deps

* use slickgrid version

* bump https-proxy

* bump more packages.

* fix service-downloader

* remove typings

* fix compile

* update more packages

* add vscode back to the extensions that need it for testing

* add fail on critical

* regrab proxy agent

* lock more deps

* replace final high warning

* revert service downloader changes

* remove the deps on jquery ui and event drag
2019-11-01 12:55:58 -07:00
Anthony Dresser
9c8f36e463 remove externals for some azure deps (#8168) 2019-11-01 12:19:29 -07:00
Anthony Dresser
bd988f62a2 Add WS as a dep of notebooks (#8154)
* add ws as an optional dep of noteoboks

* fix method of adding ws

* fix parsing for yarnrc

* remove optional reps
2019-11-01 12:19:06 -07:00
Zbyněk Sailer
29a46b9f8b LOC CHECKIN | Microsoft/azuredatastudio master | 20191029 (#8081) 2019-11-01 12:16:30 -07:00
Chris LaFreniere
55acb36e33 Update powershell kernel version to 0.1.2 (#8171) 2019-11-01 10:47:32 -07:00
Kevin Cunnane
a8b442a274 recommend datavirtualization instead of sql-vnext (#8172) 2019-10-31 20:25:27 -07:00
Maddy
330f690628 version bump books package (#8174) 2019-10-31 18:03:50 -07:00
Maddy
7cc430d199 added try catch aroud the json parse and bypassing the err by logging… (#8166)
* added try catch aroud the json parse and bypassing the err by logging to console

* updated error message with package info

* updates to address PR comments

* added package info and refactored the err logging

* backslash update

* refactored error method and added try for the entire method
2019-10-31 17:57:26 -07:00
Kevin Cunnane
2558d6bff6 Fix #8162 Spark timeout in BDC cluster is higher than client-side, causing successful sessions to show as failed (#8164)
* Fix #8162 Spark timeout in BDC cluster is higher than client-side, causing successful sessions to show as failed
2019-10-31 17:00:36 -07:00
Chris LaFreniere
5aff7ef4c7 Ensure cwd matches notebook path (#8137)
* Ensure cwd matches notebook path

* add error checking

* silent, don't store history
2019-10-31 15:10:49 -07:00
Charles Gagnon
7569f7fa32 Fix node update in bdc dashboard on reconnect (#8138)
* Fix node update in bdc dashboard on reconnect

* Fix no floating promises

* Fix opening from dashboard to always save controller node
2019-10-31 14:42:15 -07:00
Kevin Cunnane
333f634e94 Fix #8159 Mount HDFS broken against latest cluster (#8160)
connectWithRetry needed to pass as ... so each arg was set correctly,
instead of having 1st param be an array of the input arguments
2019-10-31 14:39:45 -07:00
Amir Omidi
b62c0cf2ab More promise cleanup (#8100)
* Some promise cleanup

* Handle more promise issues

* Remove changes that aren't needed anymore

* Use log service

* another one

* Be more explicit

* Some more promises cleaned up

* Handle promises here too

* Strings for errors

* Some more cleanup

* Remove unused imports
2019-10-31 14:30:08 -07:00
BranislavGrbicMDCS
572a83dac7 Hidding error message for sql on demand on server dashboard (#8146)
* Hidding error message for sql on demand

* Using constant instead of hardcoded value
2019-10-31 21:25:39 +01:00
Charles Gagnon
dbf834c00f Fix metrics log links (#8140) 2019-10-31 13:24:56 -07:00
Udeesha Gautam
24a6897836 Updating SqlToolsService To Revert SqlCmd explicit handling (#8133)
Updating SqlToolsService To Revert SqlCmd explicit handling (#8133)
2019-10-31 10:34:17 -07:00
Alan Ren
23da6155dd fix the missing icon issue of expand/collapse btn (#8132) 2019-10-30 20:10:34 -07:00
Charles Gagnon
ef9321ef2c Add error messages to BDC dashboard page (#8103)
* Add error messages to BDC dashboard page

* Remove testing code

* PR fixes
2019-10-30 15:23:34 -07:00
Alan Ren
836bf1d28a use addtionalEnvironmentVariables (#8123) 2019-10-30 15:02:30 -07:00
Alex Ma
9eb319f392 ImageInsight Image Error Notification (#8086)
* image visualization printout (needs localization)

* Add error image and log error

* "added alert error for invalid image"

* removed unnecessary spaces

* removed spaces on 61 and 66

* Added image and used notification service

* Removed unused import

* Changed wording for error
2019-10-30 14:48:12 -07:00
Alan Ren
79b6a14d64 Revert "accept azdata eula (#8114)" (#8121)
This reverts commit 0dec2ff9b5.
2019-10-30 13:57:41 -07:00
Alan Ren
0dec2ff9b5 accept azdata eula (#8114) 2019-10-30 13:31:05 -07:00
Chris LaFreniere
dd270a78fc Notebooks: Improvements to Connection Profile Passing (#8105)
* Fix relative images on notebook markdown pc

* PR feedback around replace ordering

* update databaseName when it's set to master

* usinng query as example
2019-10-30 13:22:17 -07:00
Anthony Dresser
827e6162c7 fix import (#8116) 2019-10-30 13:11:29 -07:00
Alan Ren
9f54fbc8cc profiler icon issue (#8115) 2019-10-30 12:32:37 -07:00
Shafiq Ur Rahman
f8858a3511 Tab trap for modal (closes #5930) (#8043)
* Tab trap for modal (closes #5930)

* Addressing PR comments

* Fixed formatting.
2019-10-30 11:38:11 -07:00
Charles Gagnon
82e5221024 Fix modal event propagation (#8050)
* Fix event propagation

* Remove unneeded onkeyup method

* Move event handling code into SQL classes
2019-10-30 11:29:01 -07:00
Anthony Dresser
004297aea6 fix linux cache (#8111) 2019-10-30 11:02:53 -07:00
Anthony Dresser
f7b8a019cd Remove references to noderequire (#8101)
* remove references to nodequire

* change promise handling
2019-10-30 10:04:52 -07:00
BranislavGrbicMDCS
a89788a020 Adjusting OE and hiding nodes for sql on demand (#8087) 2019-10-30 18:02:12 +01:00
Chris LaFreniere
62af81e88c Notebooks: Fix relative images not rendering on PC for Markdown Cells (#8091)
* Fix relative images on notebook markdown pc

* PR feedback around replace ordering
2019-10-29 19:48:57 -07:00
Amir Omidi
ab736466cd Some promise cleanup (#8092)
* Some promise cleanup

* Handle more promise issues

* Remove changes that aren't needed anymore

* Use log service

* another one

* Be more explicit
2019-10-29 17:04:46 -07:00
Amir Omidi
6a6f30523c Code -> Azure Data Studio (#8099)
* Change string

* sql carbon edit
2019-10-29 16:22:46 -07:00
Kim Santiago
8e3fa0a26d Bump dacpac and schema compare extension versions and remove preview (#8095)
* bump dacpac and schema compare extension versions and remove preview

* bump azdata dependency version
2019-10-29 16:04:10 -07:00
Amir Omidi
72c088e137 Allow toggle developer tools shortcut all the time (#8003)
* Allow toggle developer tools shortcut all the time

* Remove the import
2019-10-29 11:57:52 -07:00
Kim Santiago
ce5eb00177 Fix schema compare include/exclude behavior (#8042)
* don't uncheck difference if unsuccessful

* changes after rebasing to get schema compare fix

* First cut of column checkbox checking reactive to include opteration

* handle blocking dependencies and affected dependencies

* Changing the checked property of table to be list

* Addressing comments

* add map to keep row number of diff entries

* remove findDifferenceRow() since it isn't needed anymore

* fix scrolling to the top when checking/unchecking and add info message

* change checked to updateCells

* improve warning cannot include/exclude message
2019-10-29 11:55:31 -07:00
Alan Ren
5629356c66 notebook background execution (#8079)
* notebook background execution

* code review comments

* comments 2

* more logging
2019-10-29 11:53:50 -07:00
Maddy
6e7311ca87 added openLocalizedook action that opens up the link to localized books. (#8025)
* initial commit

* addressed the tslint floating promise errors

* updated the command name with PM's feedback
2019-10-29 11:51:05 -07:00
Charles Gagnon
d315ccff68 Fix BDC remember password and reprompting connection (#7957)
* Fix remember password and reprompting connection

* comment

* Fix to remember password for session

* Fix floating promises
2019-10-29 07:27:31 -07:00
Aditya Bist
789ee4b133 add repository field for extensions (#8073) 2019-10-28 17:41:23 -07:00
Amir Omidi
428745e929 Cleanup the copy output (#8072)
* Cleanup the copy output

* Use helper functions and cleanup promise handling
2019-10-28 16:13:34 -07:00
Charles Gagnon
cea8d62051 Add SQL Metrics links to BDC dashboard (#8056)
* Add SQL metrics link to dashboard pages

* Only show SQL metrics column for SQL service

* Add param doc
2019-10-28 15:07:32 -07:00
Charles Gagnon
fa79e5b016 Fix for propagating aria-label title of form components to loading component (#8051) 2019-10-28 14:48:47 -07:00
Aditya Bist
15fd37e049 add link to twitter on badge (#8037) 2019-10-28 14:22:13 -07:00
Karl Burtram
1dd4ea19a3 Update agent and import versions for Nov (#8054) 2019-10-28 11:53:12 -07:00
Kevin Cunnane
067af76904 Azure: add PostgresSQL support and refactor to use resource graph (#8046)
* Azure: add PostgresSQL support and refactor to use resource graph
- Refactored to use @azure/arm-resourcegraph for all queries
- Refactored database lookup to do just 2 queries
(all servers, all DBS) instead of waiting serially on 1 query per RG
- Added Azure Database for PostgresSQL Servers support in the tree
- Removed use of older azure APIs in preference to ones compatible with resource graph
- Note: Had to use v1.0 of new subscriptions package because resourcegraph is 2month out of date vs all other packages
2019-10-28 09:47:38 -07:00
Arvind Ranasaria
a7f597c943 dependencies messages, no curl on win32, fixes to min Version (#8039)
* checking temp work to move to another branch

* removing freeTds

* dependencies Messages and No curl on Win32

* elipsis instead of ...

* add min version check post install and pr fixes

* removing unnecessary comment

* removing old TODO comment

* fix text messages

* add github toke nto electron download (#8047)

* remove hardcode of kubectl version for download
2019-10-27 17:13:12 -07:00
Charles Gagnon
833adf3515 Fix hygiene errors (#8019) 2019-10-27 14:38:26 -07:00
Charles Gagnon
bd15a96b83 Make form components use title as aria-label (#8040) 2019-10-27 14:37:34 -07:00
Karl Burtram
024bd00d93 Bump ADS to 1.14.0 in master (#8049) 2019-10-27 14:03:19 -07:00
Karl Burtram
eb1aafa639 Bump SQL Tools Service to pickup schema compare changes (#8048) 2019-10-27 13:58:41 -07:00
Anthony Dresser
bf6b68c614 add github toke nto electron download (#8047) 2019-10-26 15:59:17 -07:00
Alan Ren
a895f53029 min version check (#8038)
* min version check

* comments
2019-10-25 17:11:32 -07:00
Karl Burtram
78d3b9d555 Fix typo in icon path (#8033) 2019-10-25 16:00:44 -07:00
Aditya Bist
42e1b28130 add twitter account badge to readme (#8034) 2019-10-25 15:58:15 -07:00
Karl Burtram
5590d60c5a Revert icon update 8aa8dc29a1 (#8030)
* Revert icon update 8aa8dc29a1

* Add build electron.js file
2019-10-25 14:37:15 -07:00
Maddy
d79423c728 Task/checkfile length (#7959)
* add hygiene task to test file length

* check for the filename length instead of the path

* formatted the error message

* added check for entire path including directories

* error messaged fixed

* check relative length for 150 as agreed upon

* error message to include 150

* added file length filter

* check the file length seperately

* ffsdfsdf

* remove the test file

* move it to last

* restore the filtered files for further checks

* removed comment

* test

* test

* remove the test file

* test commit

* remove the test file

* restore fileLengthFilter

* test

* remove the testfile

* revert

* xfgdgdfg

* huh

* test file

* revert.

* add all to the filter
2019-10-25 14:30:43 -07:00
Alan Ren
d1a0ae43c8 update the message (#8031) 2019-10-25 14:11:25 -07:00
Alan Ren
e4b0371b2a fix 2 issues found during testing (#8029) 2019-10-25 13:54:19 -07:00
Anthony Dresser
e191556d3b Update pipelines (#7993)
* update pipelines

* update

* fix scripts

* testing something

* testing something

* testing something

* add github token

* testing something

* delete fiels
2019-10-25 13:04:41 -07:00
Karl Burtram
5a269fc49a Package LiveShare outside core ADS (#8024) 2019-10-25 12:59:10 -07:00
Amir Omidi
613cd58aa3 Don't pack the hgh level node_modules directory (#7998) 2019-10-25 12:09:55 -07:00
Arvind Ranasaria
af9984f73b pass install paths to notebooks (#8008)
* pass install paths to notebooks

* onComplete

* discover and publish actual installation Path

* pass the path to notebook

* minor fixes needed post merge of code from remote

* fix some errors

* remove unused variable
2019-10-25 12:06:55 -07:00
Chris LaFreniere
3b1c9e910d serverManager to decide if server start needed (#8017) 2019-10-25 11:11:54 -07:00
Chris LaFreniere
5b29aef5f3 fix stdin cancel breaks notebook (#8012) 2019-10-25 10:52:18 -07:00
Anthony Dresser
b65a7795df Testing out ci with workflows (#8005)
* add workflow for ci

* add another step

* remove more steps
2019-10-25 10:30:53 -07:00
BranislavGrbicMDCS
c6a78456b8 Adjusting context menu for SqlOnDemand (#8018) 2019-10-25 17:33:17 +02:00
Chris LaFreniere
f8067ffada Fix for Markdown File in Jupyter Books Viewlet not Opening After 2x (#8009)
* fix for markdown not opening after opened twice

* PR comment to add return type
2019-10-24 22:14:24 -07:00
Chris LaFreniere
f7059a2365 Fix Issue when Saving Wrong Kernel (#7974)
* Only fire kernelChangeEmitter after lang set

* Fix unused import found by lgtm

* Fix comment
2019-10-24 22:13:18 -07:00
Alan Ren
d013b594b1 suppress the alert (#8007) 2019-10-24 20:13:32 -07:00
Charles Gagnon
c5d427ebb1 Fix column text overflow on BDC status pages (#7928)
* Fix column text overflow on status page

* Fix typo

* Fix another typo
2019-10-24 18:31:57 -07:00
Udeesha Gautam
240b90610f Work with single ext loc file (#7894)
* try loc with single file model

* adding filter and languages

* add links in langpack json

* changing variable name and limiting the list to only tested extensions
2019-10-24 18:12:04 -07:00
Chris LaFreniere
5cfad825fc search book gone from command palette (#8002) 2019-10-24 17:45:28 -07:00
Alex Ma
8918d1593c reclassified autoinstallrequired message to error (#7986)
* reclassified autoinstallrequired message to error

* Changed level to warning
2019-10-24 17:00:07 -07:00
Chris LaFreniere
b1e0b7c1e3 Always send \n instead of \r\n to Jupyter kernel (#7995)
* Always send \n instead of \r\n to kernel

* Use replace instead of split/join
2019-10-24 16:43:52 -07:00
Amir Omidi
3a5e4cbeac delete workflow (#8000) 2019-10-24 16:29:54 -07:00
Alan Ren
7bfa6e611e Remove RC from strings (#8001) 2019-10-24 16:03:22 -07:00
Maddy
004c177f7b builtinExtension-insiders to builtinExtension (#7973)
* builtinExtension-insiders to builtinExtension

* maintain both insiders and stable.

* builtinExtension.js is for build time and skipping the check for dev.

* check quality and pick insider vs stable json
2019-10-24 15:34:12 -07:00
Amir Omidi
86cc3f77ee Fixes some code coverage issues (#7994)
* Fix code coverage issues

* Fix some code coverage stuff
2019-10-24 15:32:43 -07:00
Chris LaFreniere
a33820ecdd Fix starting and separators in a row (#7861) 2019-10-24 15:20:58 -07:00
Kevin Cunnane
7babd6f3d0 Add SQL Managed Instance support and sorting (#7996)
- Add SQL Instances folder and support using existing SQLClient API
- Sort subscriptions in tree and quickpick for easier search
- Sort all resources (Databases, Servers, Instances) alphabetically too

Not in this PR:
- Will experiment with Graph API for faster perf & easier addition of other Azure resources such as PostgreSQL
2019-10-24 15:18:49 -07:00
aspnerd
e28ecf44cb Use selected DB for import wizard schema list (#7878)
* Update fileConfigPage.ts

* Update fileConfigPage.ts

* Update fileConfigPage.ts

* Update fileConfigPage.ts

* Update fileConfigPage.ts

* Update fileConfigPage.ts

* Update fileConfigPage.ts

* Update fileConfigPage.ts

* Update fileConfigPage.ts
2019-10-24 15:08:10 -07:00
Alan Ren
93685d3a09 make the azdata install url configurable (#7989)
* make the azdata install url configurable

* use settings without reloading

* comments
2019-10-24 14:57:17 -07:00
Maddy
d660405e73 hide save book action from command pallet (#7981) 2019-10-24 14:44:35 -07:00
Alan Ren
684fb2566b revert the notebook background execution (#7984) 2019-10-24 13:46:40 -07:00
Charles Gagnon
696f6841cb Change BDC view errors to use modal dialog instead of error toast (#7985)
* Change BDC view errors to use modal dialog instead of error toast

* Move to common control
2019-10-24 13:05:07 -07:00
Charles Gagnon
cef60f3ae5 Fix troubleshoot URL lookup (#7978) 2019-10-24 10:14:39 -07:00
Alan Ren
34fe2b44cc remove insider build check (#7926)
* remove insider build check

* fix welcome page not load issue
2019-10-23 21:53:42 -07:00
Aditya Bist
a16bfbfedd Fix node infinitely loading when a firewall dialog is cancelled (#7970)
* add back icons for azure actions

* fix firewall infinite loop

* formatting

* change message to firewall canceled

* fix tests
2019-10-23 21:37:21 -07:00
Chris LaFreniere
fb4fccf2d5 Notebooks: ensure python path dirs added to path on session start (#7968)
* ensure python path dirs add to path session start

* Change logic slightly

* PR feedback from Charles
2019-10-23 19:22:24 -07:00
Chris LaFreniere
b53cad78bd Update recommended package versions for ps (#7972) 2019-10-23 18:57:05 -07:00
Chris LaFreniere
a431ca7ef2 check for ownerDocument focus for focus (#7964) 2019-10-23 18:56:43 -07:00
Chris LaFreniere
c2022cac57 Fix for relative links not being resolved in notebook outputs (#7966)
* Fix for relative links not being resolved

* Add comment
2019-10-23 18:49:52 -07:00
Kevin Cunnane
806d807eae Refactor Azure Core extension for easier resource addition (#7958)
Consolidated most logic into a base class and common resource request pattern.
Reduces cost to add new providers, which will help for SQL Managed Instance support
2019-10-23 16:29:51 -07:00
Aditya Bist
24e3b1c5e6 add back icons for azure actions (#7963) 2019-10-23 15:09:23 -07:00
Amir Omidi
bbe3605317 Lets try out this gh-action (#7875)
* Update blank.yml

* Update and rename blank.yml to tslint.yml

* Update tslint.yml

* Update tslint.yml

* Update tslint.yml

* Update tslint.yml
2019-10-23 13:05:36 -07:00
Cory Rivera
06d67f5ad2 Append stdErr log to error message when a streamed console command fails. (#7868) 2019-10-23 12:38:24 -07:00
Amir Omidi
41f9f22e38 Update lgtm.yml (#7932)
Add vs stuff as a classifier so we don't see their issues
2019-10-22 23:16:11 -07:00
Anthony Dresser
a94cbb528e Merge from vscode f5d3ffa6a0d655c87e1eb0e1e90773df58f7ff25 (#7929)
* Merge from vscode f5d3ffa6a0d655c87e1eb0e1e90773df58f7ff25

* fix launch script

* add missing files
2019-10-22 21:49:55 -07:00
Charles Gagnon
4a68ab4659 Hygiene linting for extensions + new rule (#7843)
* linting for extensions + new rule

* Remove unneeded array

* Fix spelling mistake

* Fix bad merge
2019-10-22 18:56:31 -07:00
Chris LaFreniere
4c24043cc8 Add Option to Halt Notebook when Error Occurs in SQL Kernel (#7884)
* Add Option to Halt Nb when Error Occurs

* PR comments
2019-10-22 18:19:36 -07:00
Maddy
2ca5d18855 Update/sqlserverbook extension to stable (#7914)
* move package info from builtin-inisders to builtin extensions

* vbump for the filename fiasco change

* merged master

* revert sql.bat update
2019-10-22 17:13:48 -07:00
Kim Santiago
37426b0794 don't allow tabbing into table (#7769) 2019-10-22 16:25:37 -07:00
Charles Gagnon
a70ebeed1c BDC Dashboard context sensitive troubleshoot links (#7895)
* Add context awareness to troubleshoot button on dashboard

* Remove tests for now

* Undo yarn.lock changes

* Correct yarn.lock version

* Lower case service check
2019-10-22 14:24:26 -07:00
Charles Gagnon
8f2113e6b5 Fix HDFS paths to be encoded properly (#7896) 2019-10-22 14:05:23 -07:00
Charles Gagnon
03cb0565d4 Clean up bdc devDependencies (#7872)
* Clean up bgc devDependencies

* Add extra files to .vscodeignore
2019-10-22 11:07:35 -07:00
Charles Gagnon
dd14f9b93d Fix telemetry opt out message (#7891) 2019-10-22 11:00:57 -07:00
Kevin Cunnane
4dd15fb479 Add help text to mount HDFS dialog (#7865) 2019-10-22 10:40:28 -07:00
BranislavGrbicMDCS
397f6afaf1 ADS changes for new engine edition (#7695)
* Sql on demand changes

* Formating files

* Removing features for new Engine Edition

* Fixing Restore & Backup issue. Adding support for multiple conditions per flavor

* tabifying

* Formating documents

* Work in progress

* Resolving comments

* Resolving comments.

* Fixing typo
2019-10-22 12:50:15 +02:00
Anthony Dresser
65fb77ef5c Update linting file (#7886)
* update linting file

* update pr template
2019-10-22 00:26:03 -07:00
Anthony Dresser
1e22f47304 Merge from vscode c58aaab8a1cc22a7139b761166a0d4f37d41e998 (#7880)
* Merge from vscode c58aaab8a1cc22a7139b761166a0d4f37d41e998

* fix pipelines

* fix strict-null-checks

* add missing files
2019-10-21 22:12:22 -07:00
Charles Gagnon
7c9be74970 Disable failing test (#7882) 2019-10-21 20:31:16 -07:00
Amir Omidi
5efb2cf918 Add a new unstable test (#7874) 2019-10-21 19:19:03 -07:00
Alan Ren
98505110a4 fix a typo (#7871) 2019-10-21 18:31:24 -07:00
Anthony Dresser
1a864584b6 move code to mean linting (#7873) 2019-10-21 17:56:58 -07:00
Charles Gagnon
8aa8dc29a1 Separate icons for non-stable builds (#7857)
* Use separate icons for non-stable builds

* Fix file name

* Switch icon

* Updated icons

* Switch to copy of code.ico until issue is fixed

* Fix icon

* remove

* add

* Fix file renaming

* Fix a couple naming issues

* Move iss changes to build file
2019-10-21 16:11:59 -07:00
Anthony Dresser
06e86e57e7 Strict null on some query and connection (#7300)
* wip

* make connection work with strict-nulls

* change comments

* fix tests; remove unneeded type forcing

* address feedback

* adjust the logic of query editor

* clean up typing
2019-10-21 15:50:12 -07:00
Alan Ren
6a375fdd8c fix the wizard opened twice issue #7866 (#7869) 2019-10-21 15:32:13 -07:00
Maddy
b8ad7e3072 Updates to package.json to show books on stable (#7836)
* Updates to package.json to show books on stable

* remove notebookQuality context key

* renamed untitiled to unsaved
2019-10-21 14:26:59 -07:00
Chris LaFreniere
597a0cad6b Add (dummy) IPyWidgets Renderer (#7849) 2019-10-21 14:22:44 -07:00
Amir Omidi
a646af2ad2 Move vscode from dependencies to devDependencies (#7864)
* Update package.json

Move vscode out of dependencies

* Change extensions.js
2019-10-21 14:20:46 -07:00
Amir Omidi
143b70c6a8 Revert "Fix BDC and resource-deploy extensions to not be packaged separately (#7858)" (#7860)
This reverts commit 53a081262d.
2019-10-21 12:06:00 -07:00
Kevin Cunnane
c1e95a2246 Fix errors due to icon to codicon rename in VSCode (#7837)
Found numerous errors where icons weren't rendering correctly.
- Anything that's an action must have CSS using "codicon" not "icon"
since VSCode sets the "codicon" class automatically.
This affected Agent view in particular, but also:
  - acounts view
  - new tab view in dashboard
 - many more
- Anything referencing the common-icons.css icons needed updating.
This hid help tooltip text in FormContainer UI for example.
- Finally I tried to convert all references from icon -> codicon,
even when the CSS was technically correct. This was done
for maintainability reasons - from now on always add codicon.

Fixes #7827
2019-10-21 12:02:30 -07:00
Charles Gagnon
53a081262d Fix BDC and resource-deploy extensions to not be packaged separately (#7858)
* Fix BDC and resource-deploy extensions to not be packaged separately

* Update js too
2019-10-21 11:06:22 -07:00
Charles Gagnon
8b46143d48 Fix Manage Access dialog to not allow entering blank user (#7844) 2019-10-21 10:07:28 -07:00
Alan Ren
a05edc619c use required attribute (#7850)
* use required attribute

* readable sql port
2019-10-21 09:53:12 -07:00
Alan Yu
6c5aa6b367 Update ThirdPartyNotices.txt (#7479)
* Update ThirdPartyNotices.txt

* tab -> spaces
2019-10-20 21:56:29 -07:00
Charles Gagnon
0246c3f895 Fix ModelView tree A11y issue (#7835)
* Fix tree A11y issue

* Toggle expanded state on enter

* Move onkeydown method to base class
2019-10-20 21:42:55 -07:00
Chris LaFreniere
e3ae5263c6 Starting Fewer Jupyter Servers for Notebooks (#7744)
* Start fewer Jupyter servers

* Windows fix for drive casing

* PR Feedback

* Quick fix

* Fixing bug

* Ensure environment variables set 4 session startup

* test fix

* Dummy commit to update comment
2019-10-20 21:38:58 -07:00
Alan Ren
0bfb1aab7e set storage settings table name (#7841) 2019-10-20 19:27:50 -07:00
Chris LaFreniere
d120102805 Bump up widths for pick, remove schedule buttons (#7517) 2019-10-20 13:22:49 -07:00
Charles Gagnon
7e5b864299 BDC Dashboard connection retry (#7784)
* Open cluster dashboard

* Remove old translated strings and update var name

* Add exported auth type

* Add newline

* Add connection retry for dashboard

* Change getMainSectionComponent to return multiple (no undefined)

* Move try/catch to withConnectRetry

* Add connection retry for dashboard

* Change getMainSectionComponent to return multiple (no undefined)

* Move try/catch to withConnectRetry
2019-10-19 15:42:49 -07:00
Arvind Ranasaria
4dd6db57ee Feat/tool install master merge back to master (#7819)
* add install tools button (#7454)

* add install tools button

* address comments

* remove description for install tools hint message

* First working version of AutoDeployment of tools (#7647)

First working version of AutoDeployment of tools.

This pull request adds feature to install the tools needed for doing BDC/TINA deployments.

This has been tested so far only on win32 and testing on other platforms is in progress.

* removing TODO and redundant code

* Not localizing azuredatastudio product name

* convert methods returning Promises to async-await

* changing from null to undefined

* Localize all the command labels

* using existing sudo-prompt typings

* progres/error status in ModalDialogue && PR fixes

* review feedback to change warning to information

* revert settings.json changes

* fix resource-Deployment Extension Unit Test

* ensuring platform service's working directory

* incorporate review feedback

* review feedback

* addressing PR feedback

* PR fixes

* PR Feedback

* remove debug logs

* disable UI deployment containers when installing

* addding data type to stdout/stderr messaging

* remove commented code

* revert accidental change

* addressing review feedback

* fix failed install with zero exit code

* fixing bug due to typo

* fixes for linux

* Misc fixes during mac testing

* PR fixes
2019-10-18 23:17:21 -07:00
Udeesha Gautam
a2f105a913 Fix Local keys for spark so that dup key error doesnt occur (#7634) 2019-10-18 18:06:37 -07:00
Charles Gagnon
ab31a7b964 Open cluster dashboard from SQL Dashboard (#7783)
* Open cluster dashboard

* Remove old translated strings and update var name

* Add exported auth type

* Add newline

* PR feedback
2019-10-18 17:35:47 -07:00
Amir Omidi
203ff3872f Test run list proposal (#7617)
* Test run list propsal

* fixed ts errors

* added js file

* excluding testSetup.js file from hygiene

* moved ignore line to indententationFilter
2019-10-18 17:21:40 -07:00
Chris LaFreniere
2ee3840650 First improvements for SQL Cell Looping (#7733)
* First improvements

* clear results

* cleanup

* error handling
2019-10-18 17:12:10 -07:00
Cory Rivera
fa80dbfb27 Update download links for our notebook Python packages. (#7839) 2019-10-18 16:53:29 -07:00
Amir Omidi
2237d286b6 XML output is truncated (#7748)
* QueryExecutionOptions change

* add config points

* Change api type used

* Revert "QueryExecutionOptions change"

This reverts commit 7adc3b032b5e4bc92234d337f0a145f0963c2d34.

Let's not change the azdata file.

* Change the signature of this api

* Change the event

* Change SqlCMD to use the API properly

* Add type

* Change type to interface - handle existing files

* Remove unused import

* Delete useless code

* Remove unnecessary code

* Fix the interface

* remove whitespace
2019-10-18 16:35:45 -07:00
Anthony Dresser
4124f6b1ad Readd labeling (#7834)
* readd labeling

* fix yml structure

* fix more yml structure
2019-10-18 15:07:31 -07:00
Karl Burtram
23361d3d56 Update ENU loc resource files (#7831) 2019-10-18 14:35:15 -07:00
Anthony Dresser
4c8f3ddfd3 Add scripting contributions for explorer widget (#7830)
* add scripting contributions for explorer widget

* utilize or
2019-10-18 14:26:43 -07:00
Amir Omidi
f631a8aa9a Delete unused code (#7800)
* Update cmsUtils.ts

Fix small issue

* Delete unused code
2019-10-18 13:29:34 -07:00
Amir Omidi
bbc6460d3f Update groupContainer.component.ts (#7803)
Fix small issue
2019-10-18 13:27:25 -07:00
Amir Omidi
09d78544cf Update sqlExtHostTypes.ts (#7801)
Fix small mistake
2019-10-18 13:26:53 -07:00
Amir Omidi
a791aff0a2 Update pythonPathLookup.ts (#7807)
Fix regex problem
2019-10-18 13:26:38 -07:00
Amir Omidi
ce318f123f remove unusued deps (#7810) 2019-10-18 13:22:50 -07:00
Amir Omidi
9374056e61 move dependencies around (#7808) 2019-10-18 13:22:13 -07:00
Charles Gagnon
5ef19affd0 Update SqlToolsService (#7826) 2019-10-18 12:12:16 -07:00
Charles Gagnon
d40abf4add Add husky back for precommit hooks (#7825) 2019-10-18 08:47:58 -07:00
Alan Ren
86f8b3f9ec change field type to Password (#7791) 2019-10-17 22:39:31 -07:00
Chris LaFreniere
385d7f2803 Clear Output -> Clear Result for consistency (#7776) 2019-10-17 19:54:12 -07:00
Chris LaFreniere
2ee04e0cf0 null checks for onBeforeDetached (#7782) 2019-10-17 18:24:30 -07:00
Cory Rivera
9bdaba3b65 Remove sqlmlutils from default packages due to installation failures on OSX. (#7780) 2019-10-17 17:21:53 -07:00
Chris LaFreniere
80d46fb8a4 Add search book icon (#7777) 2019-10-17 17:20:07 -07:00
Maddy
268f9ef725 revert the version bump. (#7772) 2019-10-17 15:10:53 -07:00
Alan Ren
3813d9385b update the extensions.json (#7771) 2019-10-17 14:26:47 -07:00
Charles Gagnon
48bf72bfc4 Fix TelemetryOptOut error and add debug targets for running extension integration tests (#7765) 2019-10-17 13:39:11 -07:00
Amir Omidi
fa1d5cc49d Revert "Move Notebook tests back to stable" (#7755)
* Revert "Move Notebook tests back to stable (#7749)"

This reverts commit 5d4da455bd.

* Update notebook.test.ts

* Update notebook.test.ts
2019-10-17 11:30:58 -07:00
Amir Omidi
de5fd11155 Add some more asserts to integration tests (#7759) 2019-10-17 10:55:16 -07:00
Alan Ren
cd30a8cbc0 enable bdc features for stable (#7757) 2019-10-17 09:59:29 -07:00
Alex Ma
ec1e54db9a Handling for parsing of iconpaths (#7738)
* Check if light and dark are URI

* Added a map in the extensionsRegistry to check

* Moved resolve check to connectionProviderExtension

* removed resolvedUsers from extensionsRegistry.ts

* removed unused imports and spaces

* Formatting for import

* Simplified resolver check.

* ToString is sufficient to avoid any complications

* Small formatting fix

* removed extra comment
2019-10-17 09:51:33 -07:00
Maddy
82963ad075 vbump for the updates (#7752) 2019-10-16 23:10:24 -07:00
Elliot Boschwitz
b24671bbf6 disabled failing tests in vs code
Add skip statements for tests found to be failing.
2019-10-16 21:25:03 -07:00
Alan Ren
2ab7a47353 deploy BDC wizard improvement for CU1 (#7756)
* unified admin user account (#7485)

* azdata changes

* spaces

* error message

* comments

* support AD authentication for bdc deployment (#7518)

* enable ad authentication

* remove export for internal interface

* add comments

* more changes after testing

* update notebooks

* escape slash

* more comments

* Update deploy-bdc-aks.ipynb

* Update deploy-bdc-existing-aks.ipynb

* Update deploy-bdc-existing-kubeadm.ipynb

* AD changes and review feedback (#7618)

* enable ad authentication

* remove export for internal interface

* add comments

* more changes after testing

* update notebooks

* escape slash

* more comments

* Update deploy-bdc-aks.ipynb

* Update deploy-bdc-existing-aks.ipynb

* Update deploy-bdc-existing-kubeadm.ipynb

* address comments from scenario review (#7546)

* support AD authentication for bdc deployment (#7518)

* enable ad authentication

* remove export for internal interface

* add comments

* more changes after testing

* update notebooks

* escape slash

* more comments

* Update deploy-bdc-aks.ipynb

* Update deploy-bdc-existing-aks.ipynb

* Update deploy-bdc-existing-kubeadm.ipynb

* scenario review feedbacks

* more fixes

* adjust the display order of resource types

* different way to implement left side buttons

* revert unwanted changes

* rename variable

* more fixes for the scenario review feedback (#7589)

* fix more issues

* add help links

* model view readonly text with links

* fix size string

* address comments

* update notebooks

* text update

* address the feedback of 2nd round of deploy BDC wizard review (#7646)

* 2nd review meeting comments

* fix the unit test failure

* recent changes in azdata

* notebook background execution with azdata (#7741)

* notebook background execution with azdata

* prompt to open notebook in case of failure

* fix path quote issue

* better temp file handling

* expose docker settings (#7751)

* add docker settings

* new icon for container image
2019-10-16 20:41:15 -07:00
Charles Gagnon
5d4da455bd Move Notebook tests back to stable (#7749)
* SqlClient fix is in so these should be stable again

* removed comments
2019-10-16 16:44:36 -07:00
Cory Rivera
0b039830ea Add sqlmlutils to list of required notebook packages. (#7740) 2019-10-16 14:16:09 -07:00
Charles Gagnon
77e1ca59ed Roll back tree icon merge changes to fix loading icon issue (#7722) 2019-10-15 22:44:37 -07:00
Charles Gagnon
e8e8ee5941 BDC Dashboard fixes (#7732)
* BDC Dashboard fixes

* Make refresh indicate when refresh is happening

* Fix refresh button to properly reset even if error occurs. Refactor onclick into own method.

* Undo refresh button rotation per design feedback
2019-10-15 21:50:02 -07:00
Cory Rivera
23861bd369 Wait for python installs to complete before starting a python notebook. (#7729) 2019-10-15 17:06:19 -07:00
Chris LaFreniere
4c946b21a9 Jupyter Book Search First Steps (#7704)
* Crawling for book search. needs icon

* Remove context until decision on entry point

* Add undefined check
2019-10-15 17:04:24 -07:00
Alex Ma
e74538b40d Added notification for unsaved file in scheduling (#7705)
* Added notification for unsaved file in scheduling

* Removed logging message in line 216

* Changed regex for all 3 platforms (forbid '/')

* Untitled file prompts to save in mainController

* removed spaces and changed save message
2019-10-15 14:29:34 -07:00
Cory Rivera
b6ef5469de Correctly handle exceptions in package upgrade promise. (#7734) 2019-10-15 13:50:30 -07:00
Amir Omidi
ee2850f2e2 Add name and change severity (#7727)
Add a name and change severity to error.
2019-10-15 10:37:26 -07:00
Amir Omidi
3387a762c4 Update lgtm.yml (#7723)
Get rid of path classifiers
2019-10-15 01:42:05 -07:00
Amir Omidi
75388cc3af Add the promises ql file (#7720) 2019-10-14 18:55:26 -07:00
Kim Santiago
087f7fc43d remove role=document ffrom dialog so screenreader doesn't read it (#7685) 2019-10-14 16:57:09 -07:00
Amir Omidi
5da0e16e44 Check for error (#7711)
* Custom error
2019-10-14 16:26:51 -07:00
Cory Rivera
eb465fde1a Skip prompting for package upgrade if a python install is already in progress. (#7717) 2019-10-14 15:31:53 -07:00
Charles Gagnon
26ece1ee86 Fixes to apply recursive (#7714)
* Fix apply recursive Promise.all to correctly await promises and fix apply to not apply defaults to child files.

* PR comments
2019-10-14 15:04:14 -07:00
Kevin Cunnane
f18b65a690 Mount delete, refresh and default to new folder for mount create (#7702)
* Mount delete, refresh and default to new folder for mount create
- Delete mount action added
- Refresh mount action added
- Added "mymount" to theend of existing path so that we don't use already-existing HDFS folder. The call fails unless folder doesn't exist
2019-10-14 13:26:14 -07:00
Charles Gagnon
6851b2091f Add return to getControllerEndpoint (#7699) 2019-10-14 09:05:09 -07:00
Amir Omidi
74396c1558 Rename icon to codicon #7709 (#7710) 2019-10-13 22:24:52 -07:00
Charles Gagnon
d02c680dab More HDFS Manage Access dialog updates (#7692)
* Add support for default permissions on directories

(cherry picked from commit 4e81cceba142c6763c3447b4d2965cd75764f8f9)

* Remove unneeded import

(cherry picked from commit ffe5f357357e75e9290966e89768c699df2e1311)

* Add recursive apply and clean up webhdfs

(cherry picked from commit ae76df14f99e599df1cdfcc74ee22d3822f11a59)

* Final set of changes

* Undo changes to azdata/sqlops and few minor fixes

* Remove cast to fix build error

* Hide defaults checkbox for files and switch checkbox order
2019-10-11 15:18:17 -07:00
Cory Rivera
888327f5bc Hide collapse cell button if cell only has one line. (#7701) 2019-10-11 15:12:42 -07:00
Charles Gagnon
2623e7da88 Update Component API properties (#7694) 2019-10-11 13:33:35 -07:00
Amir Omidi
0d2a3bc2d7 Update lgtm.yml (#7698)
Add a trailing slash
2019-10-11 12:54:03 -07:00
Chris LaFreniere
5eeaa5710c Adding in separators (#7651) 2019-10-11 11:06:57 -07:00
Kevin Cunnane
92e1f83046 Mount HDFS Dialog: basic support (#7580)
Implemented in this PR

- New base dialog for anything needing to work with the controller. This is important since going from SQL -> Controller we "should" have the right permissions but aren't guaranteed
- Support for Mount HDFS via a dialog. Includes basic polling for success/failure, but have to give up after 2.5min as mounting could take hours. By then it's assumed to be successful since server-side has 2min timeout built in.


Not implemented in this PR

- Script as Notebook button. This should convert the inputs to a set of cells in a notebook so users can run things themselves
- Updates based on PM / UX reviews. I think we'll need a round of feedback before completing this work.
2019-10-11 11:06:40 -07:00
Cory Rivera
9a3f72591e Show a background task when upgrading python packages. (#7649) 2019-10-11 10:56:19 -07:00
Alex Ma
12d824d791 Fix for chart names in dropdown select box. (#7642)
* isolated problem involving user friendly names

* Fix to handle horizontalBar

* Working rough version, need to implement data structure to store alternative names later

* consolidated checks into its own static method, data structure still highly recommended to implement

* Version with hashMap implemented

* Moved check for alternative names into chartView

* removed parseOption

* removed space in selectbox

* removed unused import

* removed unused import and spaces

* Fixed formatting

* Added new comment and modified changeToAltNames

* Localization has been added to the Hash

* flxed small formatting issue

* fixed double quotes for nls.localize
2019-10-11 09:50:23 -07:00
Charles Gagnon
613fef5e73 Fix checkbox component layout (#7678) 2019-10-11 09:45:53 -07:00
Karl Burtram
1d4babefba Bump changelog for 1.12.2 (#7653) 2019-10-10 22:55:54 -07:00
Karl Burtram
6e9e81e3a1 Bump Azure Data Studio to 1.13.0 for Nov (#7654) 2019-10-10 20:54:16 -07:00
Karl Burtram
c292561eb1 Update XLF files and fix errors with export (#7586)
* Update XLF files and fix errors with export

* Update file name

* Patch
2019-10-10 20:47:28 -07:00
Amir Omidi
248464191d add lgtm file (#7650) 2019-10-10 18:10:48 -07:00
Charles Gagnon
f1cdfb768d Make health status header wider so text isn't multiline (#7637) 2019-10-10 14:10:28 -07:00
Cory Rivera
777c188a3f Add collapsed argument to insertCell extension method. (#7635) 2019-10-10 14:06:31 -07:00
Kim Santiago
bf00a6b695 bump dacpac and schema compare extension versions (#7629) 2019-10-10 13:20:23 -07:00
Amir Omidi
b58927fea1 Fix the CI (#7633) 2019-10-10 11:52:02 -07:00
Charles Gagnon
2aa7a145d4 Fix connection group input not correctly selecting nested groups (#7625) 2019-10-10 11:21:13 -07:00
Alex Ma
4d618c5ef1 Improved chart names for chart type dropdown. (#7631)
* isolated problem involving user friendly names

* Fix to handle horizontalBar

* Working rough version, need to implement data structure to store alternative names later

* consolidated checks into its own static method, data structure still highly recommended to implement

* Version with hashMap implemented
2019-10-10 11:08:33 -07:00
Charles Gagnon
543e3e2c09 More updates to HDFS Manage Access dialog (#7611)
* Add display property to ModelView components

* Update DisplayType property in sqlops as well

* More updates to HDFS Manage Access dialog

* More updates to HDFS Manage Access dialog
2019-10-10 10:57:38 -07:00
Kim Santiago
93c9426f25 fix aria labels for database text boxes (#7628) 2019-10-10 10:30:43 -07:00
Chris LaFreniere
d4feb903b0 Supporting Different Kernel JSONs for Various Platforms (#7552)
* First go at it

* undo unnecessary change to copy api

* Revert "undo unnecessary change to copy api"

This reverts commit f95f7f7a42277586f4d4d0eb7b0733c11853b413.

* Revert "First go at it"

This reverts commit 410c0d3c61b7c7cae3a2469a2672f67fe3b745b6.

* Actual super simple fix
2019-10-09 19:19:05 -07:00
Chris LaFreniere
5a1183a457 Fix async problem with jupyter book viewlet loading (#7591)
* Fix async problem with jupyter book viewlet

* PR Feedback
2019-10-09 16:06:32 -07:00
Alan Ren
22774f28c0 notebook linebreak update (#7614) 2019-10-09 14:46:52 -07:00
Amir Omidi
1936e0dbbd Enable prod mode if the service is built (#7575) 2019-10-09 11:24:51 -07:00
Rahul Ajmera
df6e86554c Microsoft logo in SVG format (#7572)
* Adding SVG for microsoft logo. Will allow for scalable use of image

* Rename Microsoft-logo_cmyk_c-gray.svg to microsoft_logo_gray.svg
2019-10-09 11:02:00 -07:00
Charles Gagnon
33218bb0e5 Add display property to ModelView components (#7579)
* Add display property to ModelView components

* Update DisplayType property in sqlops as well
2019-10-09 10:28:18 -07:00
Amir Omidi
f475c04ce3 Fix mocha issues (#7588)
* mocha invert boolean

* Run integration test setup either way
2019-10-08 22:14:06 -07:00
Amir Omidi
0788796f1a add --nogpu to our integration tests (#7495) 2019-10-08 17:43:57 -07:00
Cory Rivera
3a01f960a7 Add prompt for user to upgrade python packages when starting a notebook (#7574) 2019-10-08 17:42:10 -07:00
Cory Rivera
d37105ada2 Don't expand notebook cells after being run, and don't hide outputs when cell is collapsed. (#7585) 2019-10-08 17:39:21 -07:00
Cory Rivera
66fda57513 Block Enter key from closing Manage Packages dialog. (#7584) 2019-10-08 16:58:23 -07:00
Charles Gagnon
2fe82e4b2f Styling updates for HDFS Manage Access Dialog (#7551) 2019-10-08 16:02:55 -07:00
Amir Omidi
eee7e52bd4 Release tests (#7577) 2019-10-08 15:06:21 -07:00
Elliot Boschwitz
ecd76eb870 removed hidden overflow for schema compare splitview (#7104)
Fixes issue where scrollbars wouldn't appear with vertical overflow in schema compare
2019-10-08 13:44:12 -07:00
Amir Omidi
bcaa09e910 Disable unstable tests (#7571) 2019-10-08 13:01:49 -07:00
Charles Gagnon
32df727ff9 Revert ""Retry resubmit" - allows zone.js to cleanup error stacktraces (#7502)" (#7568)
This reverts commit d91488da62.
2019-10-08 10:04:58 -07:00
Karl Burtram
e1bfe6cdda Update changelog for 1.12.1 (#7548) 2019-10-08 09:05:10 -07:00
Charles Gagnon
e4e71af597 Fix all await-promise tslint errors (#7530)
* Fix all await-promise tslint errors

* Remove unnecessary await
2019-10-07 17:52:01 -07:00
Kim Santiago
749ddc30c7 fixing error and splitview not showing for schema compare (#7549) 2019-10-07 17:51:46 -07:00
Charles Gagnon
c4965c7fe9 Fix parseAclPermissionFromOctal to include optional sticky bit (#7542)
* Fix parseAclPermissionFromOctal to include optional sticky bit

* Fix doc
2019-10-07 17:21:08 -07:00
Amir Omidi
de72ab176c Add chmod +x to all the scripts (#7550) 2019-10-07 17:12:06 -07:00
Amir Omidi
b453c3a48e Flat file import version bump (#7525) 2019-10-07 16:09:26 -07:00
Amir Omidi
857c658888 cleanup promises and async (#7169) 2019-10-07 15:30:38 -07:00
Amir Omidi
d91488da62 "Retry resubmit" - allows zone.js to cleanup error stacktraces (#7502)
* Revert "Revert "Revert "Revert "allows zone.js to cleanup error stacktraces (#7203)" (#7499)" (#7500)" (#7501)"

This reverts commit 080d9bbaa6.

* Don't include the setup file here

* Change setup.js
2019-10-07 15:30:15 -07:00
Amir Omidi
16fbd4abfd Return values (#7521) 2019-10-07 15:29:51 -07:00
Amir Omidi
285f8bc28c Move around scripting utils (#7523)
* Move around scripting utils

* Don't set a file path

* Version bump
2019-10-07 15:09:49 -07:00
Charles Gagnon
3fb4877859 Change script file names back to original names (#7544) 2019-10-07 14:03:34 -07:00
Charles Gagnon
e25cbdf4b9 Fix BDC dashboard to update status icons on refresh (#7520) 2019-10-07 13:40:58 -07:00
Charles Gagnon
b1db9a8cf1 Update Query History readme with latest feature additions (#7529) 2019-10-07 13:38:28 -07:00
Charles Gagnon
f418104b7a big data cluster -> Big Data Cluster (#7536) 2019-10-07 13:13:40 -07:00
Charles Gagnon
5454917569 Add ability to handle enter key propagation for input model components (#7524)
* Add ability to stop enter key propagation for input model components

* Fix spacing

* onInputEntered -> onEnterKeyPressed
2019-10-07 12:05:43 -07:00
Charles Gagnon
effa50a9bd Add unstable test params for core and extension tests (#7513)
* Add unstable test params for core and extension tests

* unset invert options for unstable script runs

* Fix copypasta

* Add nogpu to dacpac tests
2019-10-07 10:18:02 -07:00
Euler
ac87346507 Prevent connections from moving on click (#7528) 2019-10-07 08:49:05 -07:00
Amir Omidi
cacbcb5415 Add more functionality to the grid (#7516) 2019-10-05 12:08:18 -07:00
Chris LaFreniere
0b2a2ad0ed Allow git to open notebook files (#7403)
* Allow git to open notebook files

* pr feedback
2019-10-04 15:34:19 -07:00
Aasim Khan
44bc7a89df Register Notebook Editor Model during instantiation (#6891) 2019-10-04 15:33:37 -07:00
Charles Gagnon
bcb5384639 Capitalize action text for query history (#7512) 2019-10-04 14:14:05 -07:00
Kevin Cunnane
b23e577ccc Support mounted file icon (#7496) 2019-10-04 14:10:50 -07:00
Charles Gagnon
96a28f2c4d Add query-history package metadata (#7511)
* Add query-history package metadata

* Add newline
2019-10-04 13:58:12 -07:00
Cory Rivera
826c4115a7 Add powershell package to notebook python setup. (#7503)
Also added force-reinstall flag to installs when running Reinstall Dependencies.
2019-10-04 11:08:07 -07:00
Amir Omidi
c95ea16a44 Amir/tests after build (#7507)
* test

* remove disable extensions

* fix the file...
2019-10-04 02:16:07 -07:00
Chris LaFreniere
8e1a2248e4 Notebooks: Ensure quotes and backslashes are escaped properly in text editor model (#7497)
* Ensure quotes and backslashes are escaped properly

* PR comment

* PR comments

* Reliably fix
2019-10-03 19:21:01 -07:00
Cory Rivera
6b29fd05bd Add collapse/expand functionality to notebook code cells. (#7481) 2019-10-03 16:50:47 -07:00
Karl Burtram
080d9bbaa6 Revert "Revert "Revert "allows zone.js to cleanup error stacktraces (#7203)" (#7499)" (#7500)" (#7501)
This reverts commit 263d342a79.
2019-10-03 16:02:20 -07:00
Amir Omidi
263d342a79 Revert "Revert "allows zone.js to cleanup error stacktraces (#7203)" (#7499)" (#7500)
This reverts commit 0d2dcb3d25.
2019-10-03 16:01:16 -07:00
Amir Omidi
0d2dcb3d25 Revert "allows zone.js to cleanup error stacktraces (#7203)" (#7499)
This reverts commit a0f1d68cfb.
2019-10-03 15:57:50 -07:00
Alan Ren
9dd35c8c0d fix the bdc casing on welcome page (#7498) 2019-10-03 15:50:14 -07:00
Kevin Cunnane
e85f93abec Support HDFS Tiering (#7484)
This is the 1st step to supporting HDFS Tiering
Changes:

Add new mounted folder icon. Will have separate commit for file icon
Disable delete/mkdir/upload for mounted files and folders
Disable delete for root HDFS folder (this was added in error)
2019-10-03 14:48:19 -07:00
Charles Gagnon
18c12dac9a Fix to open ADS release notes instead of VS Code (#7418)
* Open latest ADS release notes in browser

* Only show release notes for stable builds

* Update config description text

* Have release notes notification prompt user before opening

* Remove unneeded import
2019-10-03 13:28:04 -07:00
Amir Omidi
a0f1d68cfb allows zone.js to cleanup error stacktraces (#7203)
* allows zone.js to cleanup error stacktraces

* zone.js changes

* Change ordering
2019-10-03 13:23:38 -07:00
Amir Omidi
37f651fe08 Mark test as unstable (#7493) 2019-10-03 12:56:42 -07:00
Alan Ren
d2e4e94aec fix issue 7489 and disposable handling (#7491) 2019-10-03 12:20:54 -07:00
Amir Omidi
cf1a09aeaf Revert "Disable schema compare tests (#7459)" (#7460)
This reverts commit 704c5174f9.
2019-10-03 11:57:11 -07:00
Amir Omidi
32897d3e07 Mock extension context (#7492) 2019-10-03 11:56:44 -07:00
AlexFsmn
3f2a728ed0 Fixed issue where task icons got hidden if text was too long (#6699)
* Fixed issue where task icons got hidden if text was too long
#6116

* Changed padding to min width
#6116

* Update tasksPanel.css
2019-10-03 10:10:56 -07:00
Charles Gagnon
af24a9d002 Initial work for Manage Access dialog (#7483)
* Add width and height properties to checkbox component

* Initial work on manage access dialog

* Add missed change

* Add comments and clean up

* Initial work on manage access dialog

* Add missed change

* Add comments and clean up

* Add return type

* Address comments and use apiWrapper

* Fix compile error
2019-10-03 08:58:06 -07:00
Amir Omidi
6582debd73 Unstable tests (#7487)
Setup unstable tests
2019-10-02 22:01:17 -07:00
Amir Omidi
575d1c8543 Disable one test and add a new utility function (#7486)
Skip problematic tests
2019-10-02 21:59:40 -07:00
Charles Gagnon
08b78c3ca5 Add width and height properties to checkbox component (#7482) 2019-10-02 16:21:08 -07:00
Amir Omidi
e0a867a184 Disable hw accl (#7457)
Allow headless running of tests
2019-10-02 14:08:22 -07:00
Amir Omidi
2b8508574d Create the azure folder differently. (#7470)
Create the folder with a different mechanism.
2019-10-02 12:57:29 -07:00
Chris LaFreniere
b8976785fd Stop grabbing focus when nb editor isn't in view (#7466)
* Stop grabbing focus when nb editor isn't in view

* Add comments
2019-10-02 11:56:57 -07:00
Charles Gagnon
79e2c56ec8 .Add types for ModelView CSS properties (#7465) 2019-10-02 11:21:18 -07:00
Charles Gagnon
1ea09c7add Update SqlToolsService for rows affected fix (#7469) 2019-10-02 11:20:40 -07:00
Udeesha Gautam
7489a65bbe Changing Sql cmd icons to more clear ones (#7451)
Changing Sql cmd icons to more clear ones
2019-10-02 11:04:22 -07:00
Karl Burtram
faabdb8d88 Update readme for October release (#7449) 2019-10-02 10:03:32 -07:00
Alan Ren
57c5d98bdc make it easy to indicate all platforms (#7467) 2019-10-02 09:33:27 -07:00
Charles Gagnon
b5c249c25d Update settings/descriptions to use ADS product name (#7425)
* Update settings to use ADS product name

* Fix JSON comment break
2019-10-02 09:04:09 -07:00
Alan Yu
60a244888d Update README.md (#7463)
* Update README.md

* Fix number and links
2019-10-02 08:24:58 -07:00
Anthony Dresser
c4dfc5cf70 Fix issue with startup (#7461)
* address startup erorr

* fix naming
2019-10-01 17:31:49 -07:00
Chris LaFreniere
4c2ffdfc68 Add powershell kernel.json (#7456) 2019-10-01 16:30:09 -07:00
Amir Omidi
704c5174f9 Disable schema compare tests (#7459) 2019-10-01 16:11:50 -07:00
Amir Omidi
b708b4a42b Add dependencies required for tests (#7450)
* Add the dependencies

* options -> testOptions

* tabs vs spaces

* dacpac
2019-10-01 15:48:36 -07:00
Kevin Cunnane
ee98ce5c18 Fix/controller ad (#7445)
Reapply my previous commit
add kerberos to excludes in the webpack for the extension
Fixes #7443
Verified on Windows and MacOS
2019-10-01 14:52:09 -07:00
Alan Ren
7162272f1e update timeout (#7446) 2019-10-01 12:51:42 -07:00
Udeesha Gautam
faee6b45e0 Extensions Localization (#7426)
* Correct Schema comapre single file path in xlfs

* converting SC and Dacpac from Xlf to Json

* Adding all exts other than mssql (needs fixing)
2019-10-01 11:53:46 -07:00
Alan Ren
aef69ab12a add readme (#7447) 2019-10-01 11:21:07 -07:00
Karl Burtram
a712426185 Bump Server Reports to 0.2.0 (#7431)
* Bump Server Reports to 0.2.0

* Add force reload flag

* vbump in package-lock.json
2019-10-01 10:42:11 -07:00
Karl Burtram
19be0d0ff3 Revert "Support AD in cluster connection dialog (#7367)" (#7444)
This reverts commit 9f065b2b5a.
2019-10-01 10:30:38 -07:00
Charles Gagnon
3202e46930 Fix typo in snippet (#7441) 2019-10-01 09:56:27 -07:00
Alan Ren
5b95d6777f new icons (#7433) 2019-10-01 09:50:37 -07:00
Anthony Dresser
084524cd2d Merge from vscode 313ede61cbad8f9dc748907b3384e059ddddb79a (#7436)
* Merge from vscode 313ede61cbad8f9dc748907b3384e059ddddb79a

* fix strict null checks
2019-09-30 23:35:45 -07:00
Charles Gagnon
6ab03053a0 Switch HDFS node to use normal Folder icon (#7430) 2019-09-30 16:00:08 -07:00
Kevin Cunnane
9f065b2b5a Support AD in cluster connection dialog (#7367)
- Use token API to get auth token before using other endpoints. Note this needs server updates before it'll work as expected (will only checkin after verifying this)
- Add auth option in controller UI and plumb through connection save, load, and uses of the controller API
Because the swagger spec is split in 2 created new file for the 2nd swagger spec including token auth endpoints. These come from a running cluster and instructions were updated to reflect this.

New UI Changes:
- Added authentication type field with "Basic" and "Windows Authentication" as the options
- Moved error notifications to the dialog instead of separate notification window. That's the recommended pattern
- Username / password aren't required for Windows Authentication. I couldn't find a way to change required status in form container on switching from Windows => Basic Auth so have error show on clicking OK. 
- Controller URL should use ":" not "," for IP:Port
2019-09-30 15:59:04 -07:00
Chris LaFreniere
5327ed84c1 Add ps to standard kernels in package.json (#7428) 2019-09-30 14:04:25 -07:00
Charles Gagnon
4018a29a16 Add toggle query history capture command/action (#7427)
* Add toggle query history capture command/action

* Add extension updates
2019-09-30 11:59:49 -07:00
Charles Gagnon
7cbc268c52 Add Clear All Query History command/action (#7408)
* Add clear all query history action/command

* Fix display issue when clearing

* Change localize ID and fix registration
2019-09-30 08:20:27 -07:00
Anthony Dresser
bca7c8e6bd Merge from vscode f2d41726ba5a0e8abfe61b2c743022b1b6372010 (#7415)
* Merge from vscode f2d41726ba5a0e8abfe61b2c743022b1b6372010

* add missing files
2019-09-27 23:30:36 -07:00
Alan Ren
d0fb6de390 sample of how to contribute a deployment type (#7414) 2019-09-27 16:03:30 -07:00
Charles Gagnon
63f3d9862f Add getaclstatus/setacl calls to WebHDFS API (#7378)
* Add getaclstatus/setacl calls to WebHDFS API

* Fix hygiene check
2019-09-27 13:45:45 -07:00
Anthony Dresser
00f8dcb23e clean up workbench files (#7392) 2019-09-27 12:17:07 -07:00
Alan Ren
bc4165037c fall back to the old text component behavior... (#7405)
* fall back to the old text component behavior...

if no required indicator and description is needed, fall back to the old text component behavior.

* Update text.component.ts

indention
2019-09-27 11:54:11 -07:00
Anthony Dresser
07109617b5 Merge from vscode e0762af258c0b20320ed03f3871a41967acc4421 (#7404)
* Merge from vscode e0762af258c0b20320ed03f3871a41967acc4421

* readd svgs
2019-09-27 11:13:19 -07:00
Alan Ren
6385443a4c deployment extensibility (#7394)
* rename button and update dialog button width

* make deployment resource type contributable

* conflicts

* fix card width hight issue

* comments
2019-09-27 10:13:38 -07:00
Chris LaFreniere
6ef415d0e6 Notebook Tokenization Fixes (#7375)
* Fix don't like; unclear if grammar necessssary too

* Cleanup and sanity check

* Cleanup and sanity check

* Add test

* Call onBeforeAttached for 3 types of editor models
2019-09-27 10:04:29 -07:00
Chris LaFreniere
ba8ba9f68d echo extension test names (#7391) 2019-09-27 10:04:10 -07:00
Charles Gagnon
b30252021b Sort endpoints (#7402) 2019-09-27 07:45:37 -07:00
Anthony Dresser
db57171ece fix dashboard icons (#7388) 2019-09-26 12:45:24 -07:00
Alan Ren
3688e9981d fixes #7383 and #7380 (#7384) 2019-09-26 12:35:44 -07:00
Anthony Dresser
b4de26a801 Disable tasks (#7329)
* disable tasks

* more disable

* disable more tasks
2019-09-26 12:15:48 -07:00
Anthony Dresser
2a15768a25 Remove diff (#7368)
* remove diff

* gulpfile changes (#7370)

* gulpfile changes

* Remove examples

* move require statements to the top of the file

* add await
2019-09-26 11:55:42 -07:00
Anthony Dresser
f971417746 fix workspace actions (#7345) 2019-09-26 11:47:44 -07:00
Charles Gagnon
33854d42e4 Fix endpoint links to not overflow text (#7312)
* Fix endpoint links to not overflow

* Add titles to links

* Re-add title to Text and fix errors
2019-09-26 11:47:22 -07:00
Alan Ren
2d9f6dcd86 rename button and update dialog button width (#7369)
* rename button and update dialog button width

* update padding to match portal
2019-09-25 20:21:41 -07:00
Kim Santiago
e3c347e148 Fixing folder path in dacpac and schema compare extensions (#7352)
* fixing folder path in dacpac and schema compare extensions

* created method

* import os
2019-09-25 15:00:56 -07:00
Amir Omidi
f7c468d6f0 Promise cleanup (#7210) 2019-09-25 14:46:14 -07:00
Kim Santiago
e6cac8cc14 Fix missing schema compare icons (#7355)
* move schema compare icons

* use extensionContext.extensionPath
2019-09-25 12:59:18 -07:00
Cory Rivera
79d0239362 Use python3 as the default python version in Spark sessions. (#7353) 2019-09-25 11:23:39 -07:00
Alan Ren
a0e31fc723 wizard for deploying bdc (#7183)
* wip

* wip2

* wip eod 820

* wip 822

* text component improvements and misc changes

* aria-label

* targetClusterPage wip

* target cluster page

* target cluster page

* wip 827

* wip deployment profile page

* profile page

* service settings page

* wip 0903

* 0909 wip

* 0910

* 0911

* sql instance and working directory

* notebooks

* docker version on windows

* EULA env var

* 917 updates

* address comments

* use async file access

* fix the summary page display issue for ad auth

* add save json file buttons

* use promise for private methds

* review feedbacks

* refactor

* pass json to notebooks

* fix no tool scenario

* bypass tool check if installed

* update hint text

* update notebooks

* workaround azdata first time use

* comments

* accept eula and some text update

* fix the error in package.json

* promise instead of thenable

* comments

* fix typo
2019-09-25 10:04:13 -07:00
Anthony Dresser
6a6048d40f Merge from vscode 817eb6b0c720a4ecbc13c020afbbebfed667aa09 (#7356) 2019-09-24 21:36:17 -07:00
Charles Gagnon
a29ae4d3b9 Add enable logs setting for Flat File Import (#7342)
* Add config for enabling Flat File Import logging

* Move logs to default log location for extensions

* Add localized strings
2019-09-24 18:07:46 -07:00
Charles Gagnon
82b19614e1 Update more CSS url use (#7341)
* Update more CSS urls

* URI with resources (#7348)

* URI with resources

* Remove logs
2019-09-24 18:07:23 -07:00
Amir Omidi
49851daf0d Don't check if directory exists (#7349) 2019-09-24 15:45:48 -07:00
Chris LaFreniere
d815ae0e83 Skip failing tests due to sqlclient issues (#7346) 2019-09-24 15:04:35 -07:00
Anthony Dresser
cb50fae12d move query plan to browser (#7343) 2019-09-24 12:14:24 -07:00
Charles Gagnon
26072af82f Use test.skip instead of commenting out disabled test (#7338)
* Use test.skip instead of commenting out disabled test

* Also disable OE test
2019-09-24 11:13:25 -07:00
Amir Omidi
89c1c4897a proper icon rendering (#7337)
* proper icon rendering

* address comments
2019-09-24 01:30:39 -07:00
Udeesha Gautam
5e5563f974 Disabling test for insiders build to pass (#7336)
Disabling dacpac import test for insiders build to pass
2019-09-23 23:29:09 -07:00
Amir Omidi
5df68e5942 Use URIs properly (#7334) 2019-09-23 21:09:54 -07:00
Udeesha Gautam
d895de0bc1 Trying to remove intermittent ext test failure (#7330)
* Trying to remove intermittent ext test failure

* taking PR comments
2019-09-23 19:52:05 -07:00
Maddy
2ec4a0c8a8 renamed .icon to .codicon as per vscode updates that are merged. (#7331) 2019-09-23 17:17:24 -07:00
Anthony Dresser
5e3ec6ea39 moves notebooks code to browser (#7313) 2019-09-23 13:32:29 -07:00
Amir Omidi
6f06ab440a Move css around (#7311)
* Move css around

* typings

* Keep it in both
2019-09-20 17:21:16 -07:00
Shafiq Ur Rahman
c3bb7a66e0 Show more of the url (closes #6348) (#7299) 2019-09-20 16:00:36 -07:00
Amir Omidi
aadc871124 Serializer (#7309) 2019-09-20 16:00:24 -07:00
Charles Gagnon
cb2cea4ebd Remove Data Services folder (#7147)
* Remove Data Services folder

* Remove copy path from HDFS node

* Add comment
2019-09-20 13:57:28 -07:00
Chris LaFreniere
6125e68c1f Ensure we call layout() as few times as possible for notebook cells (#7253)
* Call layout fewer times from queryTextEditor

* remove unused method
2019-09-20 12:06:37 -07:00
Arvind Ranasaria
71b80e0817 Set Mocha options based on environment settings (#7229)
* Set Mocha options based on environment settings

* fixing copy paste bugs in console logs

* incorporating review feedback
2019-09-20 12:04:22 -07:00
Maddy
ac6a4e590d Books/viewlet refactor (#7208)
* add saved/untitled views to the books viewlet and provide save option to untitled

* addressed comments

* fixes after merge

* await on async methods

* reverted back

* await on promise

* added localize for books view names

* initial commit

* missed a file change

* changes to make the merges work part1

* fixes after merges 2

* getChildren to get all books

* chnages to address comments

* fsPromises instead of fs.readSync

* merged master

* replaced deprecated fs.exists async call with pathExists

* renamed method
2019-09-20 10:47:33 -07:00
Karl Burtram
1f61a2581c Pickup latest SQL Tools for SMO\Driver bump (#7301)
* Pickup latest SQL Tools for SMO\Driver bump

* Bump to 2.0.0.15 for intellisense fix
2019-09-20 09:52:44 -07:00
Amir Omidi
bf23a52ba4 optional serialization service (#7303) 2019-09-19 22:14:10 -07:00
Anthony Dresser
db498db0a8 Merge from vscode 1eb87b0e9ce9886afeaecec22b31abd0d9b7939f (#7282)
* Merge from vscode 1eb87b0e9ce9886afeaecec22b31abd0d9b7939f

* fix various icon issues

* fix preview features
2019-09-19 21:50:52 -07:00
Charles Gagnon
9d3d64eef3 BDC dashboard 💄 (#7292)
* cleanup

* Undo bad merge

* extra undefined check
2019-09-19 15:06:44 -07:00
Alan Ren
e694e0273b Fix for issue 7233 (#7293) 2019-09-19 14:13:03 -07:00
Charles Gagnon
ced882a2e5 Update iKey for extensions (#7278) 2019-09-19 13:46:01 -07:00
Charles Gagnon
754c643b1b Don't show links for BDC logs if none available (#7286)
* Don't show links for BDC logs if none available

* Remove extra space

* Add comment

* Consolidate localize calls
2019-09-19 13:43:21 -07:00
Charles Gagnon
6a136854b0 Update whoIsActive extension to use azdata (#7287)
* Update whoIsActive extension to use azdata

* Change path

* Update package-lock
2019-09-19 11:38:18 -07:00
Chris LaFreniere
a584aca969 Stop clearing out connecting and connected state when cancelling out of connection dialog (#7254)
* Stop clearing out connecting and connected state

* tweaks

* Handling cancel while connecting

* fix typo

* PR comments
2019-09-18 17:21:32 -07:00
Anthony Dresser
b3fbb29bf2 add sql folding (#7270) 2019-09-18 15:02:22 -07:00
Anthony Dresser
b7299e5eec check for undefined (#7277) 2019-09-18 14:53:13 -07:00
Amir Omidi
510c45b9b7 use isNaN instead of == NaN (#7276) 2019-09-18 14:35:46 -07:00
Anthony Dresser
aad9c0f965 Add more areas to strict null (#7243)
* add more areas to strict null

* fix compile errors

* fix tests

* fix checks

* address PR comments
2019-09-18 12:27:19 -07:00
Charles Gagnon
373828d76f Have MSSQL extension wait for SqlToolsService ready before finishing activation (#7087)
* Have mssql activate wait for service to be ready before returning

* Change to using deferred promise

* Await on server ready

* Finish removing old code

* More cleanup

* Go back to exposed promise API

* Make property readonly

* Add missing file

* Add back in deleted stuff

* Go back to awaiting
2019-09-18 11:41:37 -07:00
Amir Omidi
86a9a2c069 NaN checks aren't possible with an equality check (#7268) 2019-09-18 10:59:58 -07:00
Karl Burtram
6e7e6ee434 Use the default connect timeout in OE tests (#7249) 2019-09-18 08:57:14 -07:00
Anthony Dresser
6af544afde Final fix for exploration merge (#7250)
* fix exploration merge

* use pool

* fix exploration

* add login
2019-09-17 16:25:17 -07:00
Amir Omidi
dca21bd3be Null/undefined check editors (#7084)
* Null check editors

* Add console.errors to the null checks

* Change promises

* Fix typo

* Add output type & change returns
2019-09-17 16:19:47 -07:00
Chris LaFreniere
9b82b101cd Fix for notebook line height (#7248) 2019-09-17 15:41:51 -07:00
Anthony Dresser
47a14bbbff fix exploration merge (#7247) 2019-09-17 15:16:03 -07:00
Cory Rivera
094d6f2339 Update python packages to use sparkmagic 0.12.9 (#7240) 2019-09-17 15:05:59 -07:00
Anthony Dresser
290dd9531f add explore merge build (#7241) 2019-09-17 14:40:56 -07:00
Chris LaFreniere
141226332c Add notebook grid actions (#7181)
* Add notebook grid actions

* pr comments
2019-09-17 14:16:35 -07:00
Udeesha Gautam
7e0a5205b2 Fix Failng dacpac and SC integration tests (#7245) 2019-09-17 14:11:23 -07:00
Aditya Bist
c6c863cd84 commiter work (#7244)
* fix incorrect css and removed redundant css warnings

* add gulp step to check all files

* added files file

* revert build to hygiene job

* keep css changes only
2019-09-17 14:10:38 -07:00
Anthony Dresser
28d453fced Implement a no sync rule (#7216)
* implement a no sync rule

* fix linting disable

* fix unused imports

* exclude more testing

* clean up fs usage

* clean up more fs usage

* remove duplicate of code

* fix compile errors
2019-09-17 13:32:42 -07:00
Chris LaFreniere
4d62983680 Add Default File Type when Saving Chart (#7235)
* add file filter

* Code cleanup
2019-09-17 10:38:39 -07:00
Anthony Dresser
d3ea9c3168 Implement use strict linting (#7223)
* implement use strict linting

* commit changes

* add additional check for strict
2019-09-16 17:36:31 -07:00
Charles Gagnon
603a79d094 Fix moved config (#7231) 2019-09-16 16:24:28 -07:00
Amir Omidi
16481927e8 EoL chars (#7225) 2019-09-16 15:53:59 -07:00
Cory Rivera
6f06c18014 Lighten colors used for inline notebook buttons in dark themes. (#7230) 2019-09-16 15:27:56 -07:00
Karl Burtram
7868afb4fd Activate XML features when SQL loads (#7228) 2019-09-16 14:34:58 -07:00
Anthony Dresser
66d4d5c73f revert changes to build files (#7227) 2019-09-16 14:12:35 -07:00
Anthony Dresser
075479274d Readd sql linting (#7217)
* readd sql linting

* add skip linting for pipeline hygiene
2019-09-16 10:59:28 -07:00
Charles Gagnon
bae797f975 Fix config path (#7220) 2019-09-16 09:37:02 -07:00
Anthony Dresser
ea0f9e6ce9 Merge from vscode 64980ea1f3f532c82bb6c28d27bba9ef2c5b4463 (#7206)
* Merge from vscode 64980ea1f3f532c82bb6c28d27bba9ef2c5b4463

* fix config changes

* fix strictnull checks
2019-09-15 22:38:26 -07:00
Karl Burtram
fa6c52699e Remove sqlops referece from server reports extension (#7212) 2019-09-13 20:43:59 -07:00
jamesrod817
209d7e48d8 Tempdb (#7022)
* Server changes by James

* tempdb
2019-09-13 16:19:48 -07:00
Charles Gagnon
0bd3e1b0e1 Fix query-history README links (#7205)
* Fix README URLs

* different fix
2019-09-13 15:24:14 -07:00
Anthony Dresser
9229b26b9e Rename some build steps (#7202)
* rename some build steps

* unify naming
2019-09-13 13:52:01 -07:00
Maddy
29dbce079b Fix/replace wrong imports (#7158)
* replaced fs with IFileService

* work around for URI with relative paths

* updates to comments

* renamed existsSync to exists

* await on promise inside non-async method

* .then change

* await async calls

* removed the old code

* include everthing in .then

* remove file exists check

* added _ for consistency

* use path.abosult method

* fixed the cleanIrl calls back and path.sep change

* reverted path.sep for now
2019-09-13 13:11:18 -07:00
Amir Omidi
86df538db9 Specialized clipboard service (#7195)
* Specialized clipboard service
2019-09-13 13:07:00 -07:00
Anthony Dresser
d9c5b7ea9e Clean up some more disposable usage (#7190)
* clean up some more disposable usage

* fix a bug

* add more to register
2019-09-13 12:28:33 -07:00
Anthony Dresser
c9128d56c0 Handle some promises better in cms (#7166)
* handle some promises better in cms

* 💄
2019-09-13 12:28:16 -07:00
Charles Gagnon
888755e842 Add abillity to open to specific item within a Jupyter book (#7155)
* Add abillity to open to specific item within a Jupyter book

* Move helper method into BookTreeItem class

* Fix default URL path

* Add typing to Jupyter book code

* Update comment and typings

* Fix compile error and cleanup
2019-09-13 11:51:15 -07:00
Charles Gagnon
3ac096b3b1 Fix ModelView tests (#7193) 2019-09-12 17:17:58 -07:00
Charles Gagnon
7ebd1eb053 Revert accidently change to sql.bat (#7194) 2019-09-12 17:03:57 -07:00
Chris LaFreniere
2128851bdf Add title to table (#7182) 2019-09-12 14:57:39 -07:00
Anthony Dresser
823d136a00 No browser from common (#7178)
* no browser from common

* clean up some imports
2019-09-12 14:52:42 -07:00
Charles Gagnon
a67e62b2d0 Add margin to BDC Dashboard pages/nav (#7129) 2019-09-12 13:25:26 -07:00
Benjin Dubishar
d262ea21e3 Addresses accessiblility bug by converting editable dropdowns to normal when in accessible mode (#7159)
* Automatically disabling editability on extension dropdowns when in accessible mode

* correcting variable name type
2019-09-12 11:08:05 -07:00
Elliot Boschwitz
aaf115a5c8 Dacpac extension announces invalid text inputs in screen reader mode (#7133)
Text input boxes will have an updated aria-label with a given error message if the input is invalid.
2019-09-12 11:05:56 -07:00
Charles Gagnon
206c5146e1 BDC Dashboard Style Updates (#7140)
* Style updates

* Add highlight line under resource group tabs

* Fixes

* Update font weight to semi-bold (600)
2019-09-12 09:15:25 -07:00
Amir Omidi
abe917f3c1 Better cell selection (#6914)
* Better cell selection

* Explicit return type and undefined assignment

* More complex copy/paste

* Get TS to be less mad at me

* Remove EoL

* Fail safe if statement

* strict null check
2019-09-11 18:23:49 -07:00
Charles Gagnon
0793e11b04 Update to the latest merged VS Code version (#7154) 2019-09-11 15:35:38 -07:00
Karl Burtram
9df66deb81 Initial LiveShare extension scaffolding (#7170)
* LiveShare initial shared connection

* Various cleanups

* Fix type

* Fix hygiene
2019-09-11 15:24:08 -07:00
Charles Gagnon
9765b0ed8e Bump extension versions (#7168) 2019-09-11 15:22:35 -07:00
Amir Omidi
83c9c3f618 New rule to stop floating promises (#7165)
* Rules surrounding promises
2019-09-11 14:25:21 -07:00
Charles Gagnon
dd5dd12ee6 Minor notebook cleanup (#7156)
* Minor notebook cleanup

* Undo fix to getBooks
2019-09-11 14:12:32 -07:00
Charles Gagnon
b68fd91a02 Update query history README (#7164)
* Update query history README

* Fix typos
2019-09-11 13:57:55 -07:00
Charles Gagnon
4270547147 Remove custom tree indent guide (#7119) 2019-09-11 09:58:55 -07:00
Charles Gagnon
c4b90360a5 Query History feature (#6579)
* Initial commit

* Fix up QueryEventType

* Making query history visible in view and open query command (#6479)

* Add QueryInfo to query event events

* Pull actual query text/connection info for displaying

* cons and expand (#6489)

* Making query history visible in view and open query command

* expand and icons

* Failure icon enabled (#6491)

* Making query history visible in view and open query command

* expand and icons

* failure icon enabled

* Minor cleanup

* Open query with connection and add run query (#6496)

* Add initial query-history extension

* Fix issues caused by master merge, cleanup and add query-history extension (#6567)

* Open query with connection and add run query

* Fix issues caused by latest master merges, cleanup and add query-history extension

* Remove child nodes (#6568)

* Open query with connection and add run query

* Fix issues caused by latest master merges, cleanup and add query-history extension

* Remove child node expansion

* Layering movement and add delete action (#6574)

* Open query with connection and add run query

* Fix issues caused by latest master merges, cleanup and add query-history extension

* Remove child node expansion

* Some layering movement and add delete action

* Move query tracking into service (#6578)

* Open query with connection and add run query

* Fix issues caused by latest master merges, cleanup and add query-history extension

* Remove child node expansion

* Some layering movement and add delete action

* Move query history tracking into service

* Add comment

* Fix actions

* Remove unnecessary type

* cleanup

* Remove unused section of README

* Fix merge issues and address PR comments

* Fix compile and tslint errors

* Change startup function name
2019-09-11 08:23:59 -07:00
Kim Santiago
7d49e75e46 make wizard page names get announced by screen reader (#7040) 2019-09-10 14:59:16 -07:00
Charles Gagnon
8db5bd438e Update iKey (#7150) 2019-09-10 13:43:44 -07:00
Karl Burtram
f6f18b68b5 Update readme for September release (#7096) 2019-09-10 10:19:39 -07:00
Maddy
ab8a9509b8 Books/fix relative links (#7083)
* fix to make relative links work on untitled notebooks

* changes to make the preb/next links to work

* show filename with extension
2019-09-10 09:43:00 -07:00
Karl Burtram
4dda5ee549 Bump ADS to 1.12.0 for October (#7139) 2019-09-09 15:43:01 -07:00
Udeesha Gautam
5ae8017233 Bug/accessibility 5 (#7008)
* fixing 6946 and 6796(second part)

* fix for https://github.com/microsoft/azuredatastudio/issues/6726

* comments cleanup

* taking PR comments

* adding strong border for HC focus

* convert to string template
2019-09-09 15:37:12 -07:00
Benjin Dubishar
66cdbbb335 Automatically focus the execute button in the DacFx wizard summary screens (#6984)
* Focus piping for extension buttons

* Focus the done button when entering the summary page for DacFx wizard

* Adding internal value resets for extension-side button model.

* Correcting remark string
2019-09-09 14:57:28 -07:00
Kim Santiago
3e9b694e6f Update dacpac and schema compare extensions to not use deprecated workspace.rootPath (#7125) 2019-09-09 13:21:35 -07:00
Alan Ren
b1eef13bb0 Update apiWrapper.ts (#7132)
remove the usage of workspace.rootPath, this is not being used.
2019-09-09 11:30:03 -07:00
Kim Santiago
82f93f7da5 remove non-descriptive tooltips (#7099) 2019-09-09 11:03:14 -07:00
Charles Gagnon
119008d05d Add metadata to Agent package.json (#7116) 2019-09-09 10:26:41 -07:00
Charles Gagnon
aeaac4bc17 Add ModelView ImageComponent (#7106)
* Add ModelView ImageComponent

* Remove duplicate property declarations

* Fix sqlops too
2019-09-08 18:29:30 -07:00
Charles Gagnon
789e26ae60 Add attach compound and align names (#7107) 2019-09-08 17:34:36 -07:00
Aasim Khan
b813ace79c Added opening latest notebook run to context menu from notebooks pane (#7066)
* added agent notebooks, notebook history view and view materialized notebook button

* Got a basic UI running for viewing notebook history

* made some changes to make UI look good

* Added new notebook dialog

* Added new notebook Dialog

* Added create notebook dialog

* Added edit and delete notebook job

* Added some notebook history features

* Added new notebook job icons, fixed a minor bug
in openmaterializednotebookAPI and added fixed the
schedule Picker API.

* Fixed Bugs in Notebook Grid expansion

* Fixed Notebook table highlighting and
grid generation is done using code.

* fixed some UI bugs

* Added changes to reflect sqltoolservice api

* Fixed some localize keys

* Made changes in the PR and added
ability to open Template Notebooks from
notebook history view.

* Added pin and renaming to notebook history

* made some library calls async

* fixed an import bug caused by merging from master

* Validation in NotebookJobDialog

* Added entry points for scheduling notebooks
on file explorer and notebook editor

* Handled no active connections and
a small bug in collapsing grid

* fix a bug in scheduling notebook from explorer
and toolbar

* setting up agent providers from connection now

* changed modals

* Reupload edited template

* Add dialog info, solved an edit bug and localized
UI strings.

* Bug fixes in UI, notebook renaming and
editing template on fly.

* fixed a bug that failed editing notebook jobs from notebook jobs table

* Fixed a cyclic dependency, made strings const and
some other changes in the PR

* Made some cyclic dependency and some fixes from PR

* made some changes mentioned in the PR

* Changed storage database health text

* Changed the sqltoolservice version to the point to the latest build.

* Added open Latest notebook notebook run to notebooks view context menu

* Fixed a small compilation error

* fixed a spelling mistake in function name

* made changes mentioned in the PR added open Notebook Functionality to charts

* Changed some context menues strings and order

* made some changes from the PR and fixed an API call

* made some changes mentioned in the PR

* Changed sqltoolsservice version to point to the latest build
2019-09-06 17:27:41 -07:00
Anthony Dresser
02f497712d clean up some promise use in cms (#7004) 2019-09-06 15:58:47 -07:00
Kim Santiago
fda4ba81c3 bump sqltoolsservice version to get DacFx fix for DW (#7102) 2019-09-06 10:18:03 -07:00
Hannah Qin
e7a9d34ecd Fix command palette keyboard shortcut in README.md (#6601)
Correcting keyboard shortcut for the command palette in the French lang pack README: changing from "Ctrl+Alt+P" to "Ctrl+Shift+P"
2019-09-05 16:11:29 -07:00
Aditya Bist
485cb43a34 fix issue where sometimes ownerUri was null (#7094) 2019-09-05 15:36:51 -07:00
Cory Rivera
3281d28de7 Disable 'should not be dirty after saving notebook' test in notebook integration tests. (#7091) 2019-09-05 15:34:43 -07:00
Aditya Bist
856833dbc4 fix disconnect option for extension nodes (#7085) 2019-09-05 13:48:47 -07:00
Charles Gagnon
15f1945f31 Localize some missed status messages (#7076)
* Localize some missed status messages

* More service text updates
2019-09-05 11:49:39 -07:00
Charles Gagnon
b1f29a8c92 Don't add unnecessary separator to OE action menu (#7071)
* Don't add unnecessary separator to OE action menu

* Fix another check
2019-09-05 09:22:53 -07:00
Maddy
cbbd4ffbb6 make books viewlet only available in insiders (#7055)
* make books viewlet only available in insiders

* insiders only: Books widget on dashboard
2019-09-05 09:20:03 -07:00
Karl Burtram
e2ea397fb9 Fix agent extension version back to 0.42.0 (#7068) 2019-09-04 17:18:38 -07:00
Aditya Bist
6a4c9b4108 fix cms server deletion from memento (#7062) 2019-09-04 15:45:06 -07:00
Amir Omidi
a61c86bff5 Remove the eol character at the end of string (#7056) 2019-09-04 15:30:46 -07:00
Aditya Bist
35b09542e2 removed separator from context menu (#7059)
* removed separator from context menu

* remove unused import
2019-09-04 15:29:27 -07:00
Udeesha Gautam
a57536be4b Trimming the text for SQLCMD button (#7050) 2019-09-04 15:25:41 -07:00
Aasim Khan
fbb2accacb Agent Notebooks Scheduler (#6786)
* added agent notebooks, notebook history view and view materialized notebook button

* Got a basic UI running for viewing notebook history

* made some changes to make UI look good

* Added new notebook dialog

* Added new notebook Dialog

* Added create notebook dialog

* Added edit and delete notebook job

* Added some notebook history features

* Added new notebook job icons, fixed a minor bug
in openmaterializednotebookAPI and added fixed the
schedule Picker API.

* Fixed Bugs in Notebook Grid expansion

* Fixed Notebook table highlighting and
grid generation is done using code.

* fixed some UI bugs

* Added changes to reflect sqltoolservice api

* Fixed some localize keys

* Made changes in the PR and added
ability to open Template Notebooks from
notebook history view.

* Added pin and renaming to notebook history

* made some library calls async

* fixed an import bug caused by merging from master

* Validation in NotebookJobDialog

* Added entry points for scheduling notebooks
on file explorer and notebook editor

* Handled no active connections and
a small bug in collapsing grid

* fix a bug in scheduling notebook from explorer
and toolbar

* setting up agent providers from connection now

* changed modals

* Reupload edited template

* Add dialog info, solved an edit bug and localized
UI strings.

* Bug fixes in UI, notebook renaming and
editing template on fly.

* fixed a bug that failed editing notebook jobs from notebook jobs table

* Fixed a cyclic dependency, made strings const and
some other changes in the PR

* Made some cyclic dependency and some fixes from PR

* made some changes mentioned in the PR

* Changed storage database health text

* Changed the sqltoolservice version to the point to the latest build.
2019-09-04 15:12:35 -07:00
Charles Gagnon
0a393400b2 Register loadCompletionExtension command (#6985) 2019-09-04 15:02:47 -07:00
Charles Gagnon
8b5ce753e4 More BDC updates (#6990) 2019-09-04 13:49:08 -07:00
Karl Burtram
f05b9396e8 Update extension versions for September (#7053) 2019-09-04 13:17:11 -07:00
DrewSK
6670fe8c1c fix(snippets): ads parenthesis to sqlcreateindex snippet (#7020) 2019-09-04 10:26:54 -07:00
Anthony Dresser
b8518f5795 Add pipeline args for testing (#7028)
* add pipeline args for testing

* fix test publish step

* simplify some testing code

* change coverage reporters

* fix coverage reports
2019-09-03 17:59:19 -07:00
Cory Rivera
c94291af52 Update CSS for inline notebook cell buttons (#7033) 2019-09-03 17:18:32 -07:00
Anthony Dresser
1d6f48806e fix index for panel push (#7035) 2019-09-03 17:17:23 -07:00
Chris LaFreniere
4626f37671 Notebooks: Fix double-click to edit with source as array (#7027)
* Fix dbl click to  edit with source as array

* Fix equality check
2019-09-03 10:37:19 -07:00
Amir Omidi
33a7fe38e1 Revert "Revert "OE clicking and awaiting the expansion calls"" (#6923)
* Revert "Revert "OE clicking and awaiting the expansion calls" (#6921)"

This reverts commit b9e3a468ae.

* Handle edge cases better

* Polling for OE load time
2019-09-03 10:31:29 -07:00
Udeesha Gautam
a5c824a318 fixing two backup issues - opening context of dialog and footer color (#7025) 2019-09-03 10:17:08 -07:00
Anthony Dresser
30df1d8b0f Fix pipeline electron download (#7023)
* add testing logging

* testing

* testing

* testing

* update env to work correctly

* add env to yarn as well

* remove unnecessary change
2019-08-30 17:13:51 -07:00
Chris LaFreniere
97a583e965 Ensure context key provider set before session (#7024) 2019-08-30 15:32:55 -07:00
Cory Rivera
f1f8ef4734 Update Resource Type Service Tests to use correct number of resource types. (#7021) 2019-08-30 13:36:02 -07:00
Anthony Dresser
ee1d5680a7 Build Cache (#7011)
* add build caching

* test caching
2019-08-30 11:34:43 -07:00
Anthony Dresser
b6e7ec51f0 update build status badge (#7009)
* update build status badgfe

* dummy update

* dummy update

* wip

* wip

* wip

* wip

* wip

* wip
2019-08-29 21:34:14 -07:00
Chris LaFreniere
2d6f69da1c no mathjax (#6995) 2019-08-29 18:07:05 -07:00
Kevin Cunnane
f51f1989aa Add connect protocol handler to SQL command line service (#7007)
- This already handles commandline which needs same logic
- Includes visual confirmation to avoid connecting by default to untrusted server
- If successful will connect & expand in Connections tree
- If failed, will show dialog with all presets
- Shows New Query by default, can add option for New Notebook instead in the future

Connection protocol is `azuredatastudio://connect?server=mysqldw.database.windows.net&database=db1&user=myusername&aad=true`
Same args as commandline, namely:
- server
- database
- user
- aad
- integrated

I have also added `provider` arg to allow non-MSSQL providers. In the future, we should update logic to prompt for install of correct extension for that provider if it's missing.
2019-08-29 17:26:50 -07:00
Udeesha Gautam
9b003ad285 Passing test sc service to unit test (#7006)
* passing test sc service to for UT execution
2019-08-29 17:22:14 -07:00
Anthony Dresser
947ac1fbf2 Fix context menu positioning. (#6992)
* hack in default actions into menu

* fix tests
2019-08-29 12:12:14 -07:00
Benjin Dubishar
faf6eae535 Inform screen-readers of Dacpac Deploy loading and loading complete for summary (#7000)
* Loading components now announce themselves.  Likely need way to disable.

* Adding focus elements to table for screen-reading after component is loaded in

* Adding piping for aria roles on tables

* Alerting on completion of deploy plan summary

* Removing extra ariaLive property
2019-08-28 14:42:40 -07:00
Chris LaFreniere
40d5667e63 Don't Inform extHostNotebookDocuments Unnecessarily on Cell Source Changes (#6981)
* Dont tell exthostnotebookdocuments on cell source

* Update comment
2019-08-28 11:49:57 -07:00
Kim Santiago
953bd064bc fix wrong dacfx wizard radio button count (#6991) 2019-08-28 10:11:03 -07:00
Chris LaFreniere
50a0b6e115 Stop Using os library in NotebookTextFileModel (#6993)
* Stop using os library

* small fix
2019-08-27 20:45:30 -07:00
Charles Gagnon
e96b1796b3 Make service names clickable tab links (#6987)
* Make sql master link clickable that opens connection

* Improve comments and fix break

* Show error message if failed to connect and clear username

* Make service names clickable tab links

* Remove key handler event again
2019-08-27 17:45:38 -07:00
Charles Gagnon
99350210d7 Make sql master link clickable that opens connection (#6982)
* Make sql master link clickable that opens connection

* Improve comments and fix break

* Show error message if failed to connect and clear username

* Remove key handler - text doesn't even get focus currently so this isn't doing anything
2019-08-27 17:39:05 -07:00
Chris LaFreniere
4e25bc9396 os.EOL instead of hardcode \n for fast notebook source changes (#6986)
* os.EOL instead of hardcode \n

* test fixes
2019-08-27 17:36:07 -07:00
Anthony Dresser
65b315bf4c fix icons (#6976) 2019-08-27 16:22:32 -07:00
Kevin Cunnane
4d19610c94 Fix #6845 Notebook: Pyspark3 links incorrectly mapped when AD enabled (#6885) 2019-08-27 14:28:14 -07:00
Charles Gagnon
a27b759b10 Add styling to selected tabs in BDC Dashboard (#6978)
* Change cursor over tabs to be hand (pointer)

* Change hyperlink color

* Hook up CSSStyles to be updated from extension side and make BDC dashboard tabs change style when selected

* Remove unused file

* Add back in call to updateStyles

* Fix typos
2019-08-27 14:14:46 -07:00
Amir Omidi
1e217094a7 Fix/6799 (#6979)
* remove IEditorProgressService

* Remove the import
2019-08-27 13:24:03 -07:00
Maddy
ae3b16024d version bump (#6975) 2019-08-27 12:20:25 -07:00
Maddy
04622d4cb3 azdata updates and relative formatting updates (#6970)
* azdata updates and relative formatting updates

* bigdatacluster case fix

* only upgrade pandas to 24.2 if it's lower

* rename bigdatacluster to caps
2019-08-27 11:51:34 -07:00
Alan Ren
0e9218ef5f update string (#6972) 2019-08-27 11:37:17 -07:00
Cory Rivera
8031f8b199 Insert generated cell in Analyze in Notebook at index 0, rather than replacing first cell's contents. (#6965) 2019-08-27 11:19:17 -07:00
Chris LaFreniere
f6140ebd11 Only show options on Controller viewlet (#6964) 2019-08-26 19:20:05 -07:00
Anthony Dresser
507bae90b7 Merge from vscode 91e99652cd5fcfc072387c64e151b435e39e8dcf (#6962) 2019-08-26 15:58:42 -07:00
Alan Ren
edf470c8fa update notebook for RC (#6961) 2019-08-26 15:34:20 -07:00
Maddy
8eab999e52 version bump (#6959) 2019-08-26 14:07:25 -07:00
Anthony Dresser
323e62c967 Utilize test skipping to reduce merge conflicts (#6937)
* utilize test skipping to reduce merge conflicts

* fix compile error
2019-08-26 13:05:19 -07:00
Charles Gagnon
83567d1a51 Fix build break (#6957) 2019-08-26 12:06:57 -07:00
Kim Santiago
9acbf48635 Bumping schema compare extension version (#6955)
* bumping schema compare extension version

* bump azdata dependency
2019-08-26 11:57:30 -07:00
Alan Ren
f70ee0c229 update strings (#6954) 2019-08-26 11:44:05 -07:00
Charles Gagnon
eea9d13350 Update and align endpoint names (#6953) 2019-08-26 11:39:46 -07:00
Charles Gagnon
877a71d673 Remove BDC view feature flag (#6952) 2019-08-26 11:09:18 -07:00
Chris LaFreniere
84b3e876d7 Notebook Performance Improvements to Cell Editing/Output Changes/Execution Count Changes (#6867)
* edit perf

* Save multiline source in notebooks

* More merges

* Single, multi line works needs work

* Works with single + multi and recomputes active

* Actual perf improvements this time

* code cleanup

* Calculating output position on the fly

* Hmm can we use brackets to make this simpler?

* monday progress

* output working. lots of improvements.

* First tests working

* 10 tests now, fixed bugs

* Cleanup, add output test

* More fixes

* Need to still fix execution count bug

* Tests pass, added comments

* Cleanup

* PR comments round 1

* Deal with merge issues from master, layering

* Deleting duplicate file

* More PR Comments

* PR Comments
2019-08-26 10:17:58 -07:00
Cory Rivera
4afa282ef9 Add Insert Cell actions back into cell overflow menu in Notebooks. (#6930) 2019-08-26 09:57:52 -07:00
Maddy
b1ebf60836 skip book tests for now (#6951) 2019-08-26 09:51:20 -07:00
Anthony Dresser
92a3acbfe8 Merge from vscode e3b9b8eefc062d68ba8a4b6a817162d132f3b533 (#6932)
* Merge from vscode e3b9b8eefc062d68ba8a4b6a817162d132f3b533

* skip failing test

* add comment
2019-08-24 00:19:48 -07:00
Charles Gagnon
023d06d114 Further BDC Dashboard Updates (#6926)
* BDC Dashboard updates

* Add service health status view details

* Add sanity check to endpoint fixing logic for SQL dashboard as well
2019-08-23 17:46:26 -07:00
Anthony Dresser
5513f0badd Change icon for accounts (#6924)
* change icon for accounts

* revert back octicon labels until vscode fixes person-filled
2019-08-23 17:13:17 -07:00
Maddy
82a80e7199 update icon (#6920) 2019-08-23 17:07:13 -07:00
Charles Gagnon
b9e3a468ae Revert "OE clicking and awaiting the expansion calls" (#6921) 2019-08-23 15:27:05 -07:00
Anthony Dresser
5b9a08359d remove circular dependency between server group and connection management (#6916) 2019-08-23 14:53:54 -07:00
Cory Rivera
d6950fa4b7 Skip URL parsing when rendering empty links in Notebooks. (#6889) 2019-08-23 14:51:01 -07:00
Alan Ren
9b7a7bd9dc Alanren/extension install (#6918)
* fix extension install

* fix azure account open url issue
2019-08-23 14:50:08 -07:00
Lucy Zhang
7f32473a10 Books/ Unit Tests for error handling (#6817)
* added tests for getBooks and getTableOfContents

* update tests for new getTableOfContents method

* wait for all toc.yml to be found

* add event to signal all toc.yml files read

* add workspae folder parameter back

* remove toc filter

* added timeout logic

* added test for invalid toc.yml

* added tests for invalid toc.yml file format

* added tests for error handling

* update uuid package

* increase timeout time

* change workspacefolder to string
2019-08-23 14:46:52 -07:00
Maddy
9274f223f0 Nb/open book without reload (#6635)
* initial commit

* fix: added initialize method to fix the previous/next links rendering

* added checks

* open first markdown/ipynb in the book ans expand the view

* added launch book from command pallete, removed the pick folder and save option added launching the first notebook/markdown

* moved the open book command pallet action from mssql to notebooks

* open as untitled to true

* opening markdown files issue fix

* removed opening as untitled files

* open ipynb files as untitled and changes for previous&next links to work

* add books as seperate viewlet

* localize double quote issues and renamed treeCollapsibleState

* renames and added logic to conditionally show Preview command

* moved registerCommands from widget to extension contribution

* isEditorUntitled check

* async comment updates

* formatting issues.

* promisfying the async calls

* moved existsAsync to top
2019-08-23 11:19:35 -07:00
Anthony Dresser
1a39fdae24 remove systemjs typings (#6894) 2019-08-23 11:11:19 -07:00
Udeesha Gautam
79af62f65b update SqlToolsService Version for Schema compare AAD changes (#6910)
update SqlToolsService Version for Schema compare AAD changes
2019-08-23 10:47:13 -07:00
Benjin Dubishar
5b75061bf0 Adding new aria properties to extHostModelView (#6881) 2019-08-23 10:37:14 -07:00
Arvind Ranasaria
bb4248c459 Adding retries to install-ssmsmin and install-sqltoolsservice for download/install failures (#6880)
* Changes to enable retry for Service downloader.
* removing 'enabled' flag from the "retry" config.
*  use 0.1.7 release of service-downloader which enables the retry feature.
2019-08-23 09:32:06 -07:00
Anthony Dresser
658cf51887 Merge from vscode 0f73473c08055054f317c1c94502f7f39fdbb164 (#6892)
* Merge from vscode 0f73473c08055054f317c1c94502f7f39fdbb164

* fix tslinting
2019-08-22 22:07:01 -07:00
Udeesha Gautam
1372cbaee1 Bug/Accessibility fix for 6796 (partial), 6800 and 6745 (#6882)
* fix for https://github.com/microsoft/azuredatastudio/issues/6796 (partial) and https://github.com/microsoft/azuredatastudio/issues/6800 and checkbox regression

* fix for https://github.com/microsoft/azuredatastudio/issues/6745
2019-08-22 17:31:06 -07:00
Charles Gagnon
faabcb43f9 BDC Dashboard updates (#6888)
* BDC Dashboard updates

* PR comments
2019-08-22 17:14:59 -07:00
Anthony Dresser
82a8f09709 Isolate more features (#6854)
* working; new query and scripting

* working; removing manage from menus and combining data explorer contributions

* consolidate dashboard contributions; move manage action to dashboard contributions; make groupings the same

* fix notebook actions not firing

* fix notebook actions

* notebooks working

* move backup and restore entry points into their own file; move explorerwidget contribution into their respective files

* fix tests

* move extension actions to their own file

* fix tests

* change tests
2019-08-22 16:54:30 -07:00
Lucy Zhang
36244ed517 Added console logs for Book unit tests (#6876)
* added logs

* use uuid for random path name
2019-08-22 16:53:01 -07:00
Anthony Dresser
26a22fa00e fix off by 1 error (#6886) 2019-08-22 16:07:02 -07:00
Cory Rivera
7beddeb999 Re-add carbon edit for handling undefined proxy in extHostTreeViews. (#6883) 2019-08-22 15:49:47 -07:00
Benjin Dubishar
887b2bfd2b Adding aria-live label support for input boxes (#6862)
* Adding aria-live support for InputBoxes

* Adding aria-live setting for DacFx wizard InputBox control

* Dud commit to unstick Github CI
2019-08-22 14:01:19 -07:00
Amir Omidi
ab9c4e0cbd Revert "Revert "OE clicking and awaiting the expansion calls (#6761)" (#6866)" (#6875)
This reverts commit a8d831d32e.
2019-08-22 13:16:39 -07:00
Udeesha Gautam
1a97313d19 fix for https://github.com/microsoft/azuredatastudio/issues/6729 (#6863)
Tables in Extensions need a way to override tab so that tabbing in table cells is not possible and tabbing takes control out of Table - this is the accessibility requirement for tables not having actionable cells. Keeping it as a switch so that we can continue having older behavior where needed.
2019-08-22 11:42:09 -07:00
Kim Santiago
5b94f8c4a7 add title to schema compare differences table (#6834) 2019-08-22 11:37:47 -07:00
Anthony Dresser
8e070454c3 Global object linting (#6857)
* add more linting

* fix linting issues
2019-08-22 10:51:59 -07:00
Udeesha Gautam
854508e940 Bug/accessibility - Focus related issues (#6859)
* fix for https://github.com/microsoft/azuredatastudio/issues/6798

* fix for https://github.com/microsoft/azuredatastudio/issues/6851
2019-08-22 10:29:27 -07:00
Charles Gagnon
09552c5f15 Fix OE tests (#6873) 2019-08-22 08:06:31 -07:00
Amir Omidi
a8d831d32e Revert "OE clicking and awaiting the expansion calls (#6761)" (#6866)
This reverts commit b731c56076.
2019-08-21 22:21:54 -07:00
Anthony Dresser
985bfae8a0 Merge from vscode e558dc6ea73a75bd69d7a0b485f0e7e4194c66bf (#6864) 2019-08-21 20:44:59 -07:00
Charles Gagnon
d2ae0f0154 Temporarily remove failing test (#6865)
* Disable book tests

* Remove tests completely
2019-08-21 20:26:14 -07:00
Kevin Cunnane
c107c154ef increase service endpoints table height (#6861)
- Increate height so rows are not truncated
2019-08-21 18:33:52 -07:00
Kevin Cunnane
017ed93061 Fix HDFS AD write support + improve error logging (#6855)
* Fix HDFS AD write support + improve error logging
- Implemented write stream piping correctly so data is paused until we're ready to push to server
- During testing, noted that things weren't awaited correctly. Tweaked some functions to improve this

* Use correct content type
2019-08-21 15:23:17 -07:00
Kim Santiago
8e668b657c add names for schema compare dialog (#6856) 2019-08-21 15:20:07 -07:00
Charles Gagnon
b075b035ab Fix custom tree views not displaying (#6858) 2019-08-21 15:03:52 -07:00
Amir Omidi
b731c56076 OE clicking and awaiting the expansion calls (#6761)
* Server selection with proper awaits

* Handle keyboard clicks immedietely.

* Clean up the event a little more

* Eat the event if its not mouse or keyboard
2019-08-21 10:25:52 -07:00
Amir Omidi
baa482bd79 Fallback to text if xml parser fails parsing (#6657) 2019-08-21 10:24:46 -07:00
Anthony Dresser
85bf22322f Isolate features (#6792)
* working; new query and scripting

* working; removing manage from menus and combining data explorer contributions

* consolidate dashboard contributions; move manage action to dashboard contributions; make groupings the same

* fix notebook actions

* fix tests
2019-08-21 09:51:02 -07:00
Charles Gagnon
3fde278ed2 Update events for insiders (#6807)
* Update events for insiders

* Add back in isBuilt check
2019-08-21 07:41:31 -07:00
Anthony Dresser
ecb80f14f0 Merge from vscode 6e530127a1bb8ffbd1bfb77dc680c321dc0d71f5 (#6844) 2019-08-20 21:07:47 -07:00
Kevin Cunnane
1f00249646 Fix HDFS with AD auth for browse, read file scenarios (#6840)
* Fix HDFS with AD auth for browse, read
- HDFS now fully supports expanding nodes for all levels, including using cookie for auth
- HDFS now support reading files from HDFS
- HDFS write file is broken and will be fixed (either in PR update or separate PR)
- Removed hack to use gateway-0 instead of actual DNS name now these are supported. Needed for testing

* Fix Jupyter error using new DMV with endpoints
2019-08-20 18:12:38 -07:00
Benjin Dubishar
29c5977281 Adding role="presentation" to all formContainers to silence the announcement of "table". (#6838) 2019-08-20 17:03:29 -07:00
Charles Gagnon
3fd487cfa2 Fix file URI input (#6837)
* Fix QueryInput URI to work with transformers

* Fix input for results as well
2019-08-20 16:30:46 -07:00
Charles Gagnon
8724944d26 Version bump (#6839) 2019-08-20 16:29:54 -07:00
Charles Gagnon
b7b01fafd0 BDC Dashboard WIP (#6812)
* Further work on dashboards

* More work on dashboard

* Undo adding manage to context menu until feature is complete

* Update cluster status name
2019-08-20 16:06:05 -07:00
Kim Santiago
8fbbd5127c Add aria labels to '•••' buttons in dacfx and schema compare (#6814)
* adding aria label to '•••' buttons in dacfx and schema compare extensions

* add tooltips and more descriptive labels

* fix typo
2019-08-20 15:18:18 -07:00
Kim Santiago
f64c2775b0 set aria-label for radio buttons (#6835) 2019-08-20 15:17:37 -07:00
Alan Ren
7bd8a6f2b1 Alanren/sql on windows (#6785)
* download file

* add entry

* fix issues

* add 2019

* string updates

* make dialog self contained

* expose notebook input dialog

* refactoring

* add log and correct the url

* comments
2019-08-20 14:45:27 -07:00
Anthony Dresser
c540e81108 clean up some disposable use (#6832) 2019-08-20 14:34:13 -07:00
Chris LaFreniere
54cf062737 Fix Notebook Connection Issues (#6831) 2019-08-20 13:40:15 -07:00
Benjin Dubishar
949ea4b6c3 Adds ariaRowcount to virtualized tables in SchemaCompare options (#6816)
* Adds button extension for explicitly setting aria-label, in case the label is not screen-reader friendly

* Explicitly set aria-label for ellipsis buttons in SchemaCompare

* Changing localize call to double-quotes

* Removes unused getter for ariaLabel

* Adding aria-rowcounts for long scrollable tables
2019-08-20 13:17:13 -07:00
Kim Santiago
4fb53622bc disable failing schema compare dacpac to database test (#6828) 2019-08-20 13:08:15 -07:00
Udeesha Gautam
9117b02c72 Feature/sqlcmd - ADS changes to enable SQLCMD (#6555)
* Basic SQLCMD functionality to run query and toggle mode

* icons and  some cleanup

* Adding PR comments
2019-08-20 11:40:16 -07:00
Udeesha Gautam
c513204501 Bug/accessibility 1 (#6774)
* fixing simple name changes

* Fixing button color and tabbing on tabs

* removing some extra lines of code

* Adding some null checks

* Updating as per PR comments
2019-08-20 10:11:34 -07:00
Lucy Zhang
23ed1e9123 Book Tests: Increase time for toc.yml search. (#6815) 2019-08-19 17:38:10 -07:00
Benjin Dubishar
77bf228809 Improve narration for backup and dacpac UIs (#6783)
* Added ability to specify aria-rowcount and -colcount to tables.

* Cleanup

* Adds aria role to table container so that screen-readers ignore it
2019-08-19 16:51:38 -07:00
Anthony Dresser
986ad33678 Remove dacfx and schema compare from the azdata api (#6684)
* refactor mssql extension to directly expose dacfx and schema compare

* remove more code

* fix compile errors
2019-08-19 16:34:09 -07:00
Kim Santiago
87b0e08a6a Add name property for DacFx wizard edit text boxes (#6775)
* add name property for file location edit and version edit

* add aria label property for drop down component

* remove 'Edit' from aria labels
2019-08-19 14:36:13 -07:00
Alan Ren
0be1cf8b73 add valid uri prefix (#6810) 2019-08-19 14:03:13 -07:00
Anthony Dresser
0a78a2e117 move open data explorer viewlet action (#6808) 2019-08-19 13:56:26 -07:00
Anthony Dresser
ed264aae81 remove some more small differences (#6791) 2019-08-19 12:38:59 -07:00
Anthony Dresser
7f6839d38e change how we detect if a untitled query is valid (#6776) 2019-08-17 14:44:16 -07:00
Anthony Dresser
b4c2acb8d0 remove some diffs from vscode (#6780) 2019-08-17 14:43:51 -07:00
Anthony Dresser
6f037ce064 exclude kerberos from webpack (#6790) 2019-08-17 14:43:34 -07:00
Anthony Dresser
41d8663b09 Merge from vscode 70dc55955d586ebd427658b43cdb344f2047f9c2 (#6789) 2019-08-16 21:47:46 -07:00
Lucy Zhang
fb26126bcb Unit Tests for Books (#6676)
* added test for sections and navigation

* update variable names

* latest from master

* add await for creating file methods

* wait for all toc.yml to be found

* add event to signal all toc.yml files read

* add workspae folder parameter back

* remove toc filter

* use onReadAllTOCFIles event

* added timeout logic for getting toc.yml files

* latest from master

* new method for comparing book items
2019-08-16 17:01:43 -07:00
Alan Ren
4c24ea0f7d change got overwritten (#6788) 2019-08-16 16:59:26 -07:00
Alan Ren
076aa51524 control the auto refresh state (#6577)
* control the auto refresh state

* visual indicator when autorefresh is off
2019-08-16 16:36:03 -07:00
Kim Santiago
bae87a0a24 Fix #6771: Dacfx wizard summary page has wrong page number (#6778)
* fix summary page number for deploy new db

* also fix page number for upgrade

* add enum for page names
2019-08-16 11:25:07 -07:00
Cory Rivera
447f1ec616 Add installer file associations for Notebook .ipynb files. (#6768) 2019-08-16 10:49:14 -07:00
Kim Santiago
1f1a720e01 fix deploy filename changing when it shouldn't (#6777) 2019-08-16 10:46:32 -07:00
Lucy Zhang
f4d37a2bb8 fix toc path for windows (#6772) 2019-08-16 08:59:36 -07:00
Anthony Dresser
6f297efb88 Merge from vscode 1ce89e2cb720d69c496c2815c4696ee4fd4429a6 (#6779)
* Merge from vscode 1ce89e2cb720d69c496c2815c4696ee4fd4429a6

* redisable accounts because of issues
2019-08-15 23:56:46 -07:00
Anthony Dresser
fb4e3c6a05 merge sqlops and azdata (#6773) 2019-08-15 16:15:32 -07:00
Benjin Dubishar
b05e35bdd7 Benjind/schema compare add aria label (#6767)
* Adds button extension for explicitly setting aria-label, in case the label is not screen-reader friendly

* Explicitly set aria-label for ellipsis buttons in SchemaCompare

* Changing localize call to double-quotes

* Removes unused getter for ariaLabel
2019-08-15 15:14:37 -07:00
Alan Ren
314bd0e212 run the whole thing instead of current statement (#6757)
* run the whole thing instead of current statement

* backward compact
2019-08-15 13:43:08 -07:00
Karl Burtram
d4d11aa260 Update README and CHANGELOG for 1.10 release (#6766) 2019-08-15 10:09:58 -07:00
Anthony Dresser
58bfba4b47 Merge from vscode b12f623603e2fc1c5b3037115fa37c1a6acc4165 (#6760) 2019-08-15 02:19:31 -07:00
Anthony Dresser
4966ed8b42 Strict Null Checks on platform/accounts (#6735)
* add some patches for strict null

* renable strict null checks

* wip

* finish adding account to strict nulls

* fix backup component

* wip

* fix tests
2019-08-14 20:26:21 -07:00
Anthony Dresser
7b8530a21e Integrate into vscode node module factory workflow (#6685)
* integrate into vscode node module factory workflow

* add missing file

* fix compile errors

* fix compile errors

* change uppercase

* fix compile
2019-08-14 20:26:08 -07:00
Kevin Cunnane
fdac1d5382 Re-add AD auth for SQL big data cluster (#6759)
* Revert "Revert "Initial AD support for BDCs (#6741)" as it breaks linux (#6758)"

This reverts commit 51660b25ef.

* Install kerberos package on linux
2019-08-14 20:19:31 -07:00
Kevin Cunnane
51660b25ef Revert "Initial AD support for BDCs (#6741)" as it breaks linux (#6758)
This reverts commit 52f8984a99.
2019-08-14 19:16:52 -07:00
Kevin Cunnane
52f8984a99 Initial AD support for BDCs (#6741)
Partially working AD support for BDCs with some known issues
- Plumbed through kerberos support to Notebooks.
  - Using "gateway-0" for service temporarily as service endpoints API doesn't yet return correct DNS name. Will update in separate PR once available
- Plumbed kerberos auth to HDFS, Spark. Only partially working as we use same token on each call 
  - Will fix in separate PR, as this requires a refactor of WebHDFS library. Will need to either get new token every time or set a cookie, both of which require refactors
- Fixed error when Data Service node expansion failed and blocked all OE expansion
- Support for SqlToolsService change to use new cluster endpoints DMV
  -  Updated API to add new endpoints field to replace IP + port
  - Added logic to handle case where endpoints for Yarn, Grafana etc. are in the list
  - Sort list and use expected new localized strings

- Updated SqlToolsService to include support for new DMV
- Add "gateway-0" handling in Jupyter session as workaround for lack of domain names in endpoints list
2019-08-14 18:09:41 -07:00
Alan Ren
4e8c06f36d add sql password validation (#6715)
* add sql password validation

* refactor the code

* correct the user name for bdc, it is also sa

* comments
2019-08-14 16:33:22 -07:00
Amir Omidi
3bb70a7b1f Fix JSON on package.nls.json (#6754) 2019-08-14 13:07:59 -07:00
Amir Omidi
e4e46b3e87 Handle selection for multiple values in tree (#6569)
Handle OE clicking and double clicking with less logic and timeouts
2019-08-14 12:08:31 -07:00
Kim Santiago
8287e0dda5 Add optional title to tables (#6740)
* Add optional title to tables

* addressing comments
2019-08-14 11:12:18 -07:00
Amir Omidi
462b5d1d53 Fixes bug when opening the scheduler dialog (#6624)
Checks if the loading component is loaded before using it
2019-08-14 10:51:06 -07:00
Charles Gagnon
5528a90eaf Initial work for BDC Dashboard (#6646) 2019-08-14 10:17:01 -07:00
Anthony Dresser
82c1c57c76 Merge from vscode ec07311dab2556c9d66a4cb3eecdc21c524202e1 (#6739) 2019-08-13 19:14:03 -07:00
Udeesha Gautam
a645a09f42 Bug/restore query editor tabs (#6654)
* trial run for query editor temp file fix

* Fixing restore tabs bug with right layering

* Moving FileService change from vscode to our code
2019-08-13 18:41:25 -07:00
Matthew McCune
b5fdf8c2a7 Update row count as updates are received (#6642) 2019-08-13 18:31:34 -07:00
Karl Burtram
f48b9e1b41 Enable visualizer recommendaton prompt in stable build (#6737) 2019-08-13 18:01:00 -07:00
Anthony Dresser
7008e88678 Reenable strict null checks (#6716)
* add some patches for strict null

* renable strict null checks
2019-08-13 14:33:08 -07:00
Cory Rivera
60bf331f19 Correctly set focus on new Notebook cells after clicking on inline buttons. (#6708) 2019-08-13 14:14:18 -07:00
Anthony Dresser
e9c234a0ae Fix cms integration tests (#6734)
* attmpt to fix cms tests

* attmpt to fix cms
2019-08-13 14:11:48 -07:00
Alan Ren
1d52a83730 revert the icon (#6733) 2019-08-13 13:41:28 -07:00
Anthony Dresser
8e8b936da4 add sanity check when adding tables to the results (#6714) 2019-08-13 13:35:12 -07:00
Anthony Dresser
6fd4b5eaf2 Fix encoding of uris for data protocol (#6723)
* fix encoding or uris

* fix tests
2019-08-13 09:58:16 -07:00
Charles Gagnon
bb010b2e53 Bump required azdata engine version for schema compare (#6717) 2019-08-13 09:44:57 -07:00
Anthony Dresser
7eba8c4c03 Merge from vscode 52dcb723a39ae75bee1bd56b3312d7fcdc87aeed (#6719) 2019-08-12 21:31:51 -07:00
Charles Gagnon
00250839fc Remove unused test channel (#6710) 2019-08-12 14:53:15 -07:00
Charles Gagnon
1f6164a0ca Fix resultSerializer to correctly check returned file picker path (#6713) 2019-08-12 14:52:37 -07:00
Kim Santiago
b4df060362 fix default connection not always being correct (#6711) 2019-08-12 14:24:05 -07:00
Lucy Zhang
e10cad21fe Fix Books Unit Tests (#6702)
* wait for all toc.yml to be found

* add event to signal all toc.yml files read

* add workspae folder parameter back

* remove toc filter
2019-08-12 13:47:29 -07:00
Alan Ren
68d62f861b kubeadm notebook (#6648)
* kubeadm notebook

* update title
2019-08-12 11:47:03 -07:00
Anthony Dresser
7e4c8bf8a0 upgrade language client and remove from webpack (#6612) 2019-08-12 11:44:39 -07:00
Anthony Dresser
d733525f2c Use vscode log path (#6599)
* use vscode log file

* remove log

* remove sqltools output log and add command to open log
2019-08-12 11:44:27 -07:00
3468 changed files with 186669 additions and 157183 deletions

View File

@@ -1,49 +1,34 @@
{
perform: false,
perform: true,
alwaysRequireAssignee: false,
labelsRequiringAssignee: [],
autoAssignees: {
accessibility: [],
acquisition: [],
agent: [],
azure: [],
backup: [],
bcdr: [],
'chart viewer': [],
connection: [],
dacfx: [],
dashboard: [],
'data explorer': [],
documentation: [],
'edit data': [],
export: [],
extensibility: [],
extensionManager: [],
globalization: [],
grid: [],
import: [],
insights: [],
intellisense: [],
localization: [],
'managed instance': [],
notebooks: [],
'object explorer': [],
performance: [],
profiler: [],
'query editor': [],
'query execution': [],
reliability: [],
restore: [],
scripting: [],
'server group': [],
settings: [],
setup: [],
shell: [],
showplan: [],
snippet: [],
sql2019Preview: [],
sqldw: [],
supportability: [],
ux: []
Area - Acquisition: [],
Area - Azure: [],
Area - Backup\Restore: [],
Area - Charting\Insights: [],
Area - Connection: [],
Area - DacFX: [],
Area - Dashboard: [],
Area - Data Explorer: [],
Area - Edit Data: [],
Area - Extensibility: [],
Area - External Table: [],
Area - Fundamentals: [],
Area - Language Service: [],
Area - Localization: [],
Area - Notebooks: [],
Area - Performance: [],
Area - Query Editor: [ anthonydresser ],
Area - Query Plan: [],
Area - Reliability: [],
Area - Resource Deployment: [],
Area - Schema Compare: [],
Area - Shell: [],
Area - SQL Agent: [],
Area - SQL Import: [],
Area - SQL Profiler: [],
Area - SQL 2019: [],
Area - SSMS Integration: []
}
}

9
.github/pull_request_template.md vendored Normal file
View File

@@ -0,0 +1,9 @@
<!-- Thank you for submitting a Pull Request. Please:
* Read our Pull Request guidelines:
https://github.com/Microsoft/azuredatastudio/wiki/How-to-Contribute#pull-requests.
* Associate an issue with the Pull Request.
* Ensure that the code is up-to-date with the `master` branch.
* Include a description of the proposed changes and how to test them.
-->
This PR fixes #

118
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,118 @@
name: CI
on:
push:
branches:
- master
- release/*
pull_request:
branches:
- master
- release/*
jobs:
linux:
runs-on: ubuntu-latest
env:
CHILD_CONCURRENCY: "1"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v1
# TODO: rename azure-pipelines/linux/xvfb.init to github-actions
- run: |
sudo apt-get update
sudo apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 dbus xvfb libgtk-3-0 libkrb5-dev # {{SQL CARBON EDIT}} add kerberos dep
sudo cp build/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
name: Setup Build Environment
- uses: actions/setup-node@v1
with:
node-version: 10
# TODO: cache node modules
- run: yarn --frozen-lockfile
name: Install Dependencies
- run: yarn electron x64
name: Download Electron
- run: yarn gulp hygiene --skip-tslint
name: Run Hygiene Checks
- run: yarn gulp tslint
name: Run TSLint Checks
- run: yarn strict-null-check # {{SQL CARBON EDIT}} add step
name: Run Strict Null Check
# - run: yarn monaco-compile-check {{SQL CARBON EDIT}} remove step
# name: Run Monaco Editor Checks
- run: yarn compile
name: Compile Sources
# - run: yarn download-builtin-extensions {{SQL CARBON EDIT}} remove step
# name: Download Built-in Extensions
- run: DISPLAY=:10 ./scripts/test.sh --tfs "Unit Tests"
name: Run Unit Tests
# - run: DISPLAY=:10 ./scripts/test-integration.sh --tfs "Integration Tests" {{SQL CARBON EDIT}} remove step
# name: Run Integration Tests
windows:
runs-on: windows-2016
env:
CHILD_CONCURRENCY: "1"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
with:
node-version: 10
- uses: actions/setup-python@v1
with:
python-version: '2.x'
- run: yarn --frozen-lockfile
name: Install Dependencies
- run: yarn electron
name: Download Electron
- run: yarn gulp hygiene --skip-tslint
name: Run Hygiene Checks
- run: yarn gulp tslint
name: Run TSLint Checks
- run: yarn strict-null-check # {{SQL CARBON EDIT}} add step
name: Run Strict Null Check
# - run: yarn monaco-compile-check {{SQL CARBON EDIT}} remove step
# name: Run Monaco Editor Checks
- run: yarn compile
name: Compile Sources
# - run: yarn download-builtin-extensions {{SQL CARBON EDIT}} remove step
# name: Download Built-in Extensions
- run: .\scripts\test.bat --tfs "Unit Tests"
name: Run Unit Tests
# - run: .\scripts\test-integration.bat --tfs "Integration Tests" {{SQL CARBON EDIT}} remove step
# name: Run Integration Tests
darwin:
runs-on: macos-latest
env:
CHILD_CONCURRENCY: "1"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
with:
node-version: 10
- run: yarn --frozen-lockfile
name: Install Dependencies
- run: yarn electron x64
name: Download Electron
- run: yarn gulp hygiene --skip-tslint
name: Run Hygiene Checks
- run: yarn gulp tslint
name: Run TSLint Checks
- run: yarn strict-null-check # {{SQL CARBON EDIT}} add step
name: Run Strict Null Check
# - run: yarn monaco-compile-check {{SQL CARBON EDIT}} remove step
# name: Run Monaco Editor Checks
- run: yarn compile
name: Compile Sources
# - run: yarn download-builtin-extensions {{SQL CARBON EDIT}} remove step
# name: Download Built-in Extensions
- run: ./scripts/test.sh --tfs "Unit Tests"
name: Run Unit Tests
# - run: ./scripts/test-integration.sh --tfs "Integration Tests" {{SQL CARBON EDIT}} remove step
# name: Run Integration Tests

13
.github/workflows/tslint.yml vendored Normal file
View File

@@ -0,0 +1,13 @@
name: TSLint Enforcement
on: [pull_request]
jobs:
job:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v1
- name: TSLint
uses: aaomidi/gh-action-tslint@master
with:
token: ${{ secrets.GITHUB_TOKEN }}
tslint_config: 'tslint-sql.json'

1
.gitignore vendored
View File

@@ -30,3 +30,4 @@ coverage/
test_data/
test-results/
yarn-error.log
*.vsix

View File

@@ -0,0 +1,33 @@
/**
* @name No floating promises
* @kind problem
* @problem.severity error
* @id js/experimental/floating-promise
*/
import javascript
private predicate isEscapingPromise(PromiseDefinition promise) {
exists (DataFlow::Node escape | promise.flowsTo(escape) |
escape = any(DataFlow::InvokeNode invk).getAnArgument()
or
escape = any(DataFlow::FunctionNode fun).getAReturn()
or
escape = any(ThrowStmt t).getExpr().flow()
or
escape = any(GlobalVariable v).getAnAssignedExpr().flow()
or
escape = any(DataFlow::PropWrite write).getRhs()
or
exists(WithStmt with, Assignment assign |
with.mayAffect(assign.getLhs()) and
assign.getRhs().flow() = escape
)
)
}
from PromiseDefinition promise
where
not exists(promise.getAMethodCall(any(string m | m = "then" or m = "catch" or m = "finally"))) and
not exists (AwaitExpr e | promise.flowsTo(e.getOperand().flow())) and
not isEscapingPromise(promise)
select promise, "This promise appears to be a floating promise"

6
.prettierrc.json Normal file
View File

@@ -0,0 +1,6 @@
{
"useTabs": true,
"printWidth": 120,
"semi": true,
"singleQuote": true
}

View File

@@ -1,23 +1,61 @@
{
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"licenseDetail"
],
"properties": {
"name": {
"type": "string",
"description": "The name of the dependency"
"oneOf": [
{
"type": "object",
"required": [
"name",
"prependLicenseText"
],
"properties": {
"name": {
"type": "string",
"description": "The name of the dependency"
},
"fullLicenseText": {
"type": "array",
"description": "The complete license text of the dependency",
"items": {
"type": "string"
}
},
"prependLicenseText": {
"type": "array",
"description": "A piece of text to prepend to the auto-detected license text of the dependency",
"items": {
"type": "string"
}
}
}
},
"licenseDetail": {
"type": "array",
"description": "The complete license text of the dependency",
"items": {
"type": "string"
{
"type": "object",
"required": [
"name",
"fullLicenseText"
],
"properties": {
"name": {
"type": "string",
"description": "The name of the dependency"
},
"fullLicenseText": {
"type": "array",
"description": "The complete license text of the dependency",
"items": {
"type": "string"
}
},
"prependLicenseText": {
"type": "array",
"description": "A piece of text to prepend to the auto-detected license text of the dependency",
"items": {
"type": "string"
}
}
}
}
}
]
}
}
}

75
.vscode/launch.json vendored
View File

@@ -16,6 +16,7 @@
"request": "attach",
"name": "Attach to Extension Host",
"port": 5870,
"timeout": 30000,
"restart": true,
"outFiles": [
"${workspaceFolder}/out/**/*.js"
@@ -67,15 +68,15 @@
"name": "Launch azuredatastudio",
"windows": {
"runtimeExecutable": "${workspaceFolder}/scripts/sql.bat",
"timeout": 20000
"timeout": 45000
},
"osx": {
"runtimeExecutable": "${workspaceFolder}/scripts/sql.sh",
"timeout": 20000
"timeout": 45000
},
"linux": {
"runtimeExecutable": "${workspaceFolder}/scripts/sql.sh",
"timeout": 20000
"timeout": 45000
},
"env": {
"VSCODE_EXTHOST_WILL_SEND_SOCKET": null
@@ -127,6 +128,33 @@
"webRoot": "${workspaceFolder}",
"timeout": 45000
},
{
"type": "chrome",
"request": "launch",
"name": "Launch ADS (Web) (TBD)",
"runtimeExecutable": "yarn",
"runtimeArgs": [
"web"
],
},
{
"type": "chrome",
"request": "launch",
"name": "Launch ADS (Web, Chrome) (TBD)",
"url": "http://localhost:8080",
"preLaunchTask": "Run web"
},
{
"type": "node",
"request": "launch",
"name": "Git Unit Tests",
"program": "${workspaceFolder}/extensions/git/node_modules/mocha/bin/_mocha",
"stopOnEntry": false,
"cwd": "${workspaceFolder}/extensions/git",
"outFiles": [
"${workspaceFolder}/extensions/git/out/**/*.js"
]
},
{
"name": "Launch Built-in Extension",
"type": "extensionHost",
@@ -165,7 +193,10 @@
"cwd": "${workspaceFolder}",
"outFiles": [
"${workspaceFolder}/out/**/*.js"
]
],
"env": {
"MOCHA_COLORS": "true"
}
},
{
"type": "chrome",
@@ -183,6 +214,22 @@
"webRoot": "${workspaceFolder}",
"timeout": 45000
},
{
"type": "chrome",
"request": "launch",
"name": "Run Extension Integration Tests",
"windows": {
"runtimeExecutable": "${workspaceFolder}/scripts/sql-test-integration.bat"
},
"osx": {
"runtimeExecutable": "${workspaceFolder}/scripts/sql-test-integration.sh"
},
"linux": {
"runtimeExecutable": "${workspaceFolder}/scripts/sql-test-integration.sh"
},
"webRoot": "${workspaceFolder}",
"timeout": 45000
},
],
"compounds": [
{
@@ -199,6 +246,13 @@
"Run Extension Unit Tests"
]
},
{
"name": "Debug Extension Integration Tests",
"configurations": [
"Attach to Extension Host",
"Run Extension Integration Tests"
]
},
{
"name": "Debug azuredatastudio Main and Renderer",
"configurations": [
@@ -207,18 +261,25 @@
]
},
{
"name": "Search and Renderer processes",
"name": "Debug Renderer and search processes",
"configurations": [
"Launch azuredatastudio",
"Attach to Search Process"
]
},
{
"name": "Renderer and Extension Host processes",
"name": "Debug Renderer and Extension Host processes",
"configurations": [
"Launch azuredatastudio",
"Attach to Extension Host"
]
},
{
"name": "Attach Renderer and Extension Host",
"configurations": [
"Attach to azuredatastudio",
"Attach to Extension Host"
]
}
]
}
}

View File

@@ -60,5 +60,6 @@
"remote.extensionKind": {
"msjsdiag.debugger-for-chrome": "workspace"
},
"gulp.autoDetect": "off",
"files.insertFinalNewline": true
}
}

46
.vscode/tasks.json vendored
View File

@@ -5,7 +5,10 @@
"type": "npm",
"script": "watch",
"label": "Build VS Code",
"group": "build",
"group": {
"kind": "build",
"isDefault": true
},
"isBackground": true,
"presentation": {
"reveal": "never"
@@ -42,6 +45,20 @@
"applyTo": "allDocuments"
}
},
{
"type": "npm",
"script": "strict-null-check-watch",
"label": "TS - Strict Null Checks",
"isBackground": true,
"presentation": {
"reveal": "never"
},
"problemMatcher": {
"base": "$tsc-watch",
"owner": "typescript-strict-null-checks",
"applyTo": "allDocuments"
}
},
{
"type": "gulp",
"task": "tslint",
@@ -73,14 +90,33 @@
"problemMatcher": []
},
{
"type": "gulp",
"task": "electron",
"type": "npm",
"script": "electron",
"label": "Download electron"
},
{
"type": "gulp",
"task": "hygiene",
"problemMatcher": []
}
},
{
"type": "shell",
"command": "yarn web -- --no-launch",
"label": "Run web",
"isBackground": true,
// This section to make error go away when launching the debug config
"problemMatcher": {
"pattern": {
"regexp": ""
},
"background": {
"beginsPattern": ".*node .*",
"endsPattern": "Web UI available at .*"
}
},
"presentation": {
"reveal": "never"
}
},
]
}
}

View File

@@ -1,3 +1,3 @@
disturl "https://atom.io/download/electron"
target "4.2.7"
target "6.0.12"
runtime "electron"

View File

@@ -1,5 +1,49 @@
# Change Log
## Version 1.12.2
* Release date: October 11, 2019
* Release status: General Availability
* Hotfix release (1.12.2): `Disable automatically starting the EH in inspect mode` https://github.com/microsoft/azuredatastudio/commit/c9bef82ace6c67190d0e83820011a2bbd1f793c1
## Version 1.12.1
* Release date: October 7, 2019
* Release status: General Availability
* Hotfix release: `Notebooks: Ensure quotes and backslashes are escaped properly in text editor model` https://github.com/microsoft/azuredatastudio/pull/7540
## Version 1.12.0
* Release date: October 2, 2019
* Release status: General Availability
## What's new in this version
* Announcing the Query History panel
* Improved Query Results Grid copy selection support
* TempDB page added to Server Reports extension
* PowerShell extension update
* Resolved [bugs and issues](https://github.com/microsoft/azuredatastudio/milestone/42?closed=1).
## Version 1.11.0
* Release date: September 10, 2019
* Release status: General Availability
## What's new in this version
* Resolved [bugs and issues](https://github.com/microsoft/azuredatastudio/milestone/41?closed=1).
## Version 1.10.0
* Release date: August 14, 2019
* Release status: General Availability
## What's new in this version
* [SandDance](https://github.com/microsoft/SandDance) integration — A new way to interact with data. Download the extension [here](https://docs.microsoft.com/sql/azure-data-studio/sanddance-extension)
* Notebook improvements
* Better loading performance
* Ability to right click SQL results grid to save your results as CSV, JSON, etc.
* Buttons to add code or text cells in-line
* [Other fixes and improvements](https://github.com/microsoft/azuredatastudio/issues?q=is%3Aissue+label%3A%22Area%3A+Notebooks%22+milestone%3A%22August+2019+Release%22+is%3Aclosed)
* SQL Server Dacpac extension can support Azure Active Directory authentication
* Updated SQL Server 2019 extension
* Visual Studio Code May Release Merge 1.37 - this includes changes from [1.36](https://code.visualstudio.com/updates/v1_37) and [1.37](https://code.visualstudio.com/updates/v1_37)
* Resolved [bugs and issues](https://github.com/microsoft/azuredatastudio/milestone/39?closed=1).
## Version 1.9.0
* Release date: July 11, 2019
* Release status: General Availability
@@ -181,7 +225,7 @@ We would like to thank all our users who raised issues, and in particular the fo
## What's new in this version
* Announcing the SQL Server 2019 Preview extension.
* Support for SQL Server 2019 preview features including big data cluster support.
* Support for SQL Server 2019 preview features including Big Data Cluster support.
* Azure Data Studio Notebooks
* The Azure Resource Explorer viewlets you browse data-related endpoints for your Azure accounts and create connections to them in Object Explorer. In this release Azure SQL Databases and servers are supported.
* SQL Server Polybase Create External Table Wizard

View File

@@ -1,7 +1,8 @@
# Azure Data Studio
[![Join the chat at https://gitter.im/Microsoft/sqlopsstudio](https://badges.gitter.im/Microsoft/sqlopsstudio.svg)](https://gitter.im/Microsoft/sqlopsstudio?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Build Status](https://dev.azure.com/ms/azuredatastudio/_apis/build/status/Microsoft.azuredatastudio)](https://dev.azure.com/ms/azuredatastudio/_build/latest?definitionId=4)
[![Build Status](https://dev.azure.com/azuredatastudio/azuredatastudio/_apis/build/status/Azure%20Data%20Studio%20CI?branchName=master)](https://dev.azure.com/azuredatastudio/azuredatastudio/_build/latest?definitionId=4&branchName=master)
[![Twitter Follow](https://img.shields.io/twitter/follow/azuredatastudio?style=social)](https://twitter.com/azuredatastudio)
Azure Data Studio is a data management tool that enables you to work with SQL Server, Azure SQL DB and SQL DW from Windows, macOS and Linux.
@@ -9,13 +10,13 @@ Azure Data Studio is a data management tool that enables you to work with SQL Se
Platform | Link
-- | --
Windows User Installer | https://go.microsoft.com/fwlink/?linkid=2098449
Windows System Installer | https://go.microsoft.com/fwlink/?linkid=2098450
Windows ZIP | https://go.microsoft.com/fwlink/?linkid=2098500
macOS ZIP | https://go.microsoft.com/fwlink/?linkid=2098501
Linux TAR.GZ | https://go.microsoft.com/fwlink/?linkid=2098197
Linux RPM | https://go.microsoft.com/fwlink/?linkid=2098280
Linux DEB | https://go.microsoft.com/fwlink/?linkid=2098279
Windows User Installer | https://go.microsoft.com/fwlink/?linkid=2105135
Windows System Installer | https://go.microsoft.com/fwlink/?linkid=2105134
Windows ZIP | https://go.microsoft.com/fwlink/?linkid=2104938
macOS ZIP | https://go.microsoft.com/fwlink/?linkid=2105133
Linux TAR.GZ | https://go.microsoft.com/fwlink/?linkid=2105132
Linux RPM | https://go.microsoft.com/fwlink/?linkid=2104937
Linux DEB | https://go.microsoft.com/fwlink/?linkid=2105131
Go to our [download page](https://aka.ms/azuredatastudio) for more specific instructions.
@@ -68,6 +69,9 @@ The [Microsoft Enterprise and Developer Privacy Statement](https://privacy.micro
## Contributions and "Thank You"
We would like to thank all our users who raised issues, and in particular the following users who helped contribute fixes:
* dzsquared for `fix(snippets): ads parenthesis to sqlcreateindex snippet #7020`
* devmattrick for `Update row count as updates are received #6642`
* mottykohn for `In Message panel onclick scroll to line #6417`
* Stevoni for `Corrected Keyboard Shortcut Execution Issue #5480`
* yamatoya for `fix the format #4899`
* GeoffYoung for `Fix sqlDropColumn description #4422`

View File

@@ -36,6 +36,7 @@ expressly granted herein, whether by implication, estoppel or otherwise.
jquery-ui: https://github.com/jquery/jquery-ui
jquery.event.drag: https://github.com/devongovett/jquery.event.drag
jschardet: https://github.com/aadsm/jschardet
jupyter-powershell: https://github.com/vors/jupyter-powershell
JupyterLab: https://github.com/jupyterlab/jupyterlab
make-error: https://github.com/JsCommunity/make-error
minimist: https://github.com/substack/minimist
@@ -1175,7 +1176,35 @@ That's all there is to it!
=========================================
END OF jschardet NOTICES AND INFORMATION
%% jupyter-powershell NOTICES AND INFORMATION BEGIN HERE
=========================================
The MIT License (MIT)
Copyright (c) 2016 Sergei Vorobev
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
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 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.
=========================================
END OF jupyter-powershell NOTICES AND INFORMATION
%% JupyterLab NOTICES AND INFORMATION BEGIN HERE
=========================================
Copyright (c) 2015 Project Jupyter Contributors
All rights reserved.

View File

@@ -1,66 +0,0 @@
steps:
- task: NodeTool@0
inputs:
versionSpec: '10.15.1'
displayName: 'Install Node.js'
- script: |
npm i -g yarn
displayName: 'preinstall'
- script: |
export CXX="g++-4.9" CC="gcc-4.9" DISPLAY=:10
sudo cp build/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
# sh -e /etc/init.d/xvfb start
# sleep 3
displayName: 'Linux preinstall'
condition: eq(variables['Agent.OS'], 'Linux')
- script: |
yarn
displayName: 'Install'
- script: |
yarn gulp electron-x64
displayName: Download Electron
- script: |
yarn gulp hygiene
displayName: Run Hygiene Checks
- script: |
yarn tslint
displayName: 'Run TSLint'
# - script: |
# yarn strict-null-check
# displayName: 'Run Strict Null Check'
- script: |
yarn compile
displayName: 'Compile'
- script: |
DISPLAY=:10 ./scripts/test.sh --reporter mocha-junit-reporter
displayName: 'Tests'
condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
- script: |
DISPLAY=:10 ./scripts/test.sh --reporter mocha-junit-reporter --coverage
displayName: 'Tests'
condition: and(succeeded(), ne(variables['Agent.OS'], 'Linux'))
- task: PublishTestResults@2
inputs:
testResultsFiles: '**/test-results.xml'
condition: succeededOrFailed()
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: 'cobertura'
summaryFileLocation: $(System.DefaultWorkingDirectory)/.build/coverage/cobertura-coverage.xml
reportDirectory: $(System.DefaultWorkingDirectory)/.build/coverage/lcov-reports
condition: ne(variables['Agent.OS'], 'Linux')

View File

@@ -1,44 +0,0 @@
steps:
- task: NodeTool@0
inputs:
versionSpec: '10.15.1'
displayName: 'Install Node.js'
- script: |
yarn
displayName: 'Yarn Install'
- script: |
yarn gulp electron-x64
displayName: 'Electron'
- script: |
yarn gulp hygiene
displayName: Run Hygiene Checks
- script: |
yarn tslint
displayName: 'Run TSLint'
# - script: |
# yarn strict-null-check
# displayName: 'Run Strict Null Check'
- script: |
yarn compile
displayName: 'Compile'
- script: |
.\scripts\test.bat --reporter mocha-junit-reporter --coverage
displayName: 'Test'
- task: PublishTestResults@2
inputs:
testResultsFiles: 'test-results.xml'
condition: succeededOrFailed()
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: 'cobertura'
summaryFileLocation: $(System.DefaultWorkingDirectory)\.build\coverage\cobertura-coverage.xml
reportDirectory: $(System.DefaultWorkingDirectory)\.build\coverage\lcov-report

View File

@@ -1,29 +1,18 @@
trigger:
- master
- releases/*
jobs:
# All tasks on Windows
- job: build_all_windows
displayName: Build all tasks (Windows)
- job: Windows
pool:
vmImage: vs2017-win2016
vmImage: VS2017-Win2016
steps:
- template: azure-pipelines-windows.yml
- template: build/azure-pipelines/win32/continuous-build-win32.yml
# All tasks on Linux
- job: build_all_linux
displayName: Build all tasks (Linux)
- job: Linux
pool:
vmImage: 'Ubuntu 16.04'
vmImage: 'Ubuntu-16.04'
steps:
- template: azure-pipelines-linux-mac.yml
- template: build/azure-pipelines/linux/continuous-build-linux.yml
# All tasks on macOS
- job: build_all_darwin
displayName: Build all tasks (macOS)
- job: macOS
pool:
vmImage: macos-10.13
vmImage: macOS 10.13
steps:
- template: azure-pipelines-linux-mac.yml
- template: build/azure-pipelines/darwin/continuous-build-darwin.yml

View File

@@ -1 +1 @@
2019-07-11T05:47:05.444Z
2019-08-30T20:24:23.714Z

View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -e
REPO="$(pwd)"
# Publish webview contents
PACKAGEJSON="$REPO/package.json"
VERSION=$(node -p "require(\"$PACKAGEJSON\").version")
node build/azure-pipelines/common/publish-webview.js "$REPO/src/vs/workbench/contrib/webview/browser/pre/"

View File

@@ -0,0 +1,87 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as azure from 'azure-storage';
import * as mime from 'mime';
import * as minimist from 'minimist';
import { basename, join } from 'path';
const fileNames = [
'fake.html',
'host.js',
'index.html',
'main.js',
'service-worker.js'
];
async function assertContainer(blobService: azure.BlobService, container: string): Promise<void> {
await new Promise((c, e) => blobService.createContainerIfNotExists(container, { publicAccessLevel: 'blob' }, err => err ? e(err) : c()));
}
async function doesBlobExist(blobService: azure.BlobService, container: string, blobName: string): Promise<boolean | undefined> {
const existsResult = await new Promise<azure.BlobService.BlobResult>((c, e) => blobService.doesBlobExist(container, blobName, (err, r) => err ? e(err) : c(r)));
return existsResult.exists;
}
async function uploadBlob(blobService: azure.BlobService, container: string, blobName: string, file: string): Promise<void> {
const blobOptions: azure.BlobService.CreateBlockBlobRequestOptions = {
contentSettings: {
contentType: mime.lookup(file),
cacheControl: 'max-age=31536000, public'
}
};
await new Promise((c, e) => blobService.createBlockBlobFromLocalFile(container, blobName, file, blobOptions, err => err ? e(err) : c()));
}
async function publish(commit: string, files: readonly string[]): Promise<void> {
console.log('Publishing...');
console.log('Commit:', commit);
const storageAccount = process.env['AZURE_WEBVIEW_STORAGE_ACCOUNT']!;
const blobService = azure.createBlobService(storageAccount, process.env['AZURE_WEBVIEW_STORAGE_ACCESS_KEY']!)
.withFilter(new azure.ExponentialRetryPolicyFilter(20));
await assertContainer(blobService, commit);
for (const file of files) {
const blobName = basename(file);
const blobExists = await doesBlobExist(blobService, commit, blobName);
if (blobExists) {
console.log(`Blob ${commit}, ${blobName} already exists, not publishing again.`);
continue;
}
console.log('Uploading blob to Azure storage...');
await uploadBlob(blobService, commit, blobName, file);
}
console.log('Blobs successfully uploaded.');
}
function main(): void {
const commit = process.env['BUILD_SOURCEVERSION'];
if (!commit) {
console.warn('Skipping publish due to missing BUILD_SOURCEVERSION');
return;
}
const opts = minimist(process.argv.slice(2));
const [directory] = opts._;
const files = fileNames.map(fileName => join(directory, fileName));
publish(commit, files).catch(err => {
console.error(err);
process.exit(1);
});
}
if (process.argv.length < 3) {
console.error('Usage: node publish.js <directory>');
process.exit(-1);
}
main();

View File

@@ -4,46 +4,64 @@ steps:
versionSpec: "10.15.1"
- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1
inputs:
keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock'
targetfolder: '**/node_modules, !**/node_modules/**/node_modules'
vstsFeed: '$(ArtifactFeed)'
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock, !samples/**/yarn.lock'
targetfolder: '**/node_modules, !**/node_modules/**/node_modules, !samples/**/node_modules'
vstsFeed: '$(build-cache)' # {{SQL CARBON EDIT}} update build cache
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3 # {{SQL CARBON EDIT}} update version
inputs:
versionSpec: "1.10.1"
versionSpec: "1.x"
- script: |
yarn --frozen-lockfile
CHILD_CONCURRENCY=1 yarn --frozen-lockfile
displayName: Install Dependencies
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
env:
GITHUB_TOKEN: $(GITHUB_TOKEN) # {{SQL CARBON EDIT}} add github token
- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1
inputs:
keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock'
targetfolder: '**/node_modules, !**/node_modules/**/node_modules'
vstsFeed: '$(ArtifactFeed)'
keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock, !samples/**/yarn.lock'
targetfolder: '**/node_modules, !**/node_modules/**/node_modules, !samples/**/node_modules'
vstsFeed: '$(build-cache)' # {{SQL CARBON EDIT}} update build cache
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
- script: |
yarn gulp electron-x64
yarn electron x64
displayName: Download Electron
env:
GITHUB_TOKEN: $(GITHUB_TOKEN) # {{SQL CARBON EDIT}} add github token
- script: |
yarn gulp hygiene
yarn gulp hygiene --skip-tslint
displayName: Run Hygiene Checks
- script: |
yarn monaco-compile-check
displayName: Run Monaco Editor Checks
yarn gulp tslint
displayName: Run TSLint Checks
- script: | # {{SQL CARBON EDIT}} add step
yarn strict-null-check
displayName: Run Strict Null Check.
- script: | # {{SQL CARBON EDIT}} add step
yarn tslint
displayName: Run TSLint (gci)
# - script: | {{SQL CARBON EDIT}} remove step
# yarn monaco-compile-check
# displayName: Run Monaco Editor Checks
- script: |
yarn compile
displayName: Compile Sources
- script: |
yarn download-builtin-extensions
displayName: Download Built-in Extensions
# - script: | {{SQL CARBON EDIT}} remove step
# yarn download-builtin-extensions
# displayName: Download Built-in Extensions
- script: |
./scripts/test.sh --tfs "Unit Tests"
displayName: Run Unit Tests
- script: |
./scripts/test-integration.sh --tfs "Integration Tests"
displayName: Run Integration Tests
# - script: | {{SQL CARBON EDIT}} remove step
# ./scripts/test-integration.sh --tfs "Integration Tests"
# displayName: Run Integration Tests
- task: PublishTestResults@2
displayName: Publish Tests Results
inputs:
testResultsFiles: '*-results.xml'
searchFolder: '$(Build.ArtifactStagingDirectory)/test-results'
condition: succeededOrFailed()
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 # {{SQL CARBON EDIT}} add task
displayName: 'Component Detection'
inputs:
alertWarningLevel: High
failOnAlert: true

View File

@@ -2,11 +2,12 @@ steps:
- script: |
mkdir -p .build
echo -n $BUILD_SOURCEVERSION > .build/commit
echo -n $VSCODE_QUALITY > .build/quality
displayName: Prepare cache flag
- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1
inputs:
keyfile: 'build/.cachesalt, .build/commit'
keyfile: 'build/.cachesalt, .build/commit, .build/quality'
targetfolder: '.build, out-build, out-vscode-min, out-vscode-reh-min, out-vscode-reh-web-min'
vstsFeed: 'npm-vscode'
platformIndependent: true
@@ -24,7 +25,7 @@ steps:
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:
versionSpec: "1.10.1"
versionSpec: "1.x"
- task: AzureKeyVault@1
displayName: 'Azure Key Vault: Get Secrets'
@@ -101,11 +102,39 @@ steps:
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
- script: |
# Figure out the full absolute path of the product we just built
# including the remote server and configure the integration tests
# to run with these builds instead of running out of sources.
set -e
APP_ROOT=$(agent.builddirectory)/VSCode-darwin
APP_NAME="`ls $APP_ROOT | head -n 1`"
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-darwin" \
./scripts/test-integration.sh --build --tfs "Integration Tests"
displayName: Run integration tests
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
# Web Smoke Tests disabled due to https://github.com/microsoft/vscode/issues/80308
# - script: |
# set -e
# cd test/smoke
# yarn compile
# cd -
# yarn smoketest --web --headless
# continueOnError: true
# displayName: Run web smoke tests
# condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
- script: |
set -e
cd test/smoke
yarn compile
cd -
yarn smoketest --web --headless
continueOnError: true
displayName: Run smoke tests
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
- script: |
set -e
pushd ../VSCode-darwin && zip -r -X -y ../VSCode-darwin.zip * && popd

View File

@@ -0,0 +1,36 @@
pool:
vmImage: 'Ubuntu-16.04'
trigger: none
pr: none
steps:
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
- task: AzureKeyVault@1
displayName: 'Azure Key Vault: Get Secrets'
inputs:
azureSubscription: 'vscode-builds-subscription'
KeyVaultName: vscode
- script: |
set -e
cat << EOF > ~/.netrc
machine github.com
login vscode
password $(github-distro-mixin-password)
EOF
git config user.email "vscode@microsoft.com"
git config user.name "VSCode"
git checkout origin/electron-6.0.x
git merge origin/master
# Push master branch into exploration branch
git push origin HEAD:electron-6.0.x
displayName: Sync & Merge Exploration

View File

@@ -0,0 +1,39 @@
trigger:
branches:
include: ['master']
pr: none
jobs:
- job: ExplorationMerge
pool:
vmImage: Ubuntu-16.04
steps:
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
- script: |
set -e
cat << EOF > ~/.netrc
machine mssqltools.visualstudio.com
login azuredatastudio
password $(DEVOPS_PASSWORD)
EOF
git config user.email "andresse@microsoft.com"
git config user.name "AzureDataStudio"
git remote add explore "$ADS_EXPLORE_REPO"
git fetch explore
git checkout -b merge-branch explore/master
git merge origin/master
git push explore HEAD:master
displayName: Sync & Merge Explore
env:
ADS_EXPLORE_REPO: $(ADS_EXPLORE_REPO)
DEVOPS_PASSWORD: $(DEVOPS_PASSWORD)

View File

@@ -2,7 +2,7 @@ steps:
- script: |
set -e
sudo apt-get update
sudo apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 dbus xvfb libgtk-3-0
sudo apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 dbus xvfb libgtk-3-0 libkrb5-dev #{{SQL CARBON EDIT}} add kerberos dep
sudo cp build/azure-pipelines/linux/xvfb.init /etc/init.d/xvfb
sudo chmod +x /etc/init.d/xvfb
sudo update-rc.d xvfb defaults
@@ -12,46 +12,64 @@ steps:
versionSpec: "10.15.1"
- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1
inputs:
keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock'
targetfolder: '**/node_modules, !**/node_modules/**/node_modules'
vstsFeed: '$(ArtifactFeed)'
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock, !samples/**/yarn.lock'
targetfolder: '**/node_modules, !**/node_modules/**/node_modules, !samples/**/node_modules'
vstsFeed: '$(build-cache)' # {{SQL CARBON EDIT}} update build cache
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3 # {{SQL CARBON EDIT}} update version
inputs:
versionSpec: "1.10.1"
versionSpec: "1.x"
- script: |
yarn --frozen-lockfile
CHILD_CONCURRENCY=1 yarn --frozen-lockfile
displayName: Install Dependencies
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
env:
GITHUB_TOKEN: $(GITHUB_TOKEN) # {{SQL CARBON EDIT}} add github token
- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1
inputs:
keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock'
targetfolder: '**/node_modules, !**/node_modules/**/node_modules'
vstsFeed: '$(ArtifactFeed)'
keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock, !samples/**/yarn.lock'
targetfolder: '**/node_modules, !**/node_modules/**/node_modules, !samples/**/node_modules'
vstsFeed: '$(build-cache)' # {{SQL CARBON EDIT}} update build cache
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
- script: |
yarn gulp electron-x64
yarn electron x64
displayName: Download Electron
env:
GITHUB_TOKEN: $(GITHUB_TOKEN) # {{SQL CARBON EDIT}} add github token
- script: |
yarn gulp hygiene
yarn gulp hygiene --skip-tslint
displayName: Run Hygiene Checks
- script: |
yarn monaco-compile-check
displayName: Run Monaco Editor Checks
yarn gulp tslint
displayName: Run TSLint Checks
- script: | # {{SQL CARBON EDIT}} add gci checks
yarn tslint
displayName: Run TSLint (gci)
- script: | # {{SQL CARBON EDIT}} add strict null check
yarn strict-null-check
displayName: Run Strict Null Check
# - script: | {{SQL CARBON EDIT}} remove monaco editor checks
# yarn monaco-compile-check
# displayName: Run Monaco Editor Checks
- script: |
yarn compile
displayName: Compile Sources
- script: |
yarn download-builtin-extensions
displayName: Download Built-in Extensions
# - script: | {{SQL CARBON EDIT}} remove step
# yarn download-builtin-extensions
# displayName: Download Built-in Extensions
- script: |
DISPLAY=:10 ./scripts/test.sh --tfs "Unit Tests"
displayName: Run Unit Tests
- script: |
DISPLAY=:10 ./scripts/test-integration.sh --tfs "Integration Tests"
displayName: Run Integration Tests
# - script: | {{SQL CARBON EDIT}} remove step
# DISPLAY=:10 ./scripts/test-integration.sh --tfs "Integration Tests"
# displayName: Run Integration Tests
- task: PublishTestResults@2
displayName: Publish Tests Results
inputs:
testResultsFiles: '*-results.xml'
searchFolder: '$(Build.ArtifactStagingDirectory)/test-results'
condition: succeededOrFailed()
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 # {{SQL CARBON EDIT}} add task
displayName: 'Component Detection'
inputs:
alertWarningLevel: High
failOnAlert: true

View File

@@ -0,0 +1,3 @@
#!/usr/bin/env bash
set -e
echo 'noop'

View File

@@ -0,0 +1,3 @@
#!/usr/bin/env bash
set -e
echo 'noop'

View File

@@ -0,0 +1,3 @@
#!/usr/bin/env bash
set -e
echo 'noop'

View File

@@ -2,11 +2,12 @@ steps:
- script: |
mkdir -p .build
echo -n $BUILD_SOURCEVERSION > .build/commit
echo -n $VSCODE_QUALITY > .build/quality
displayName: Prepare cache flag
- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1
inputs:
keyfile: 'build/.cachesalt, .build/commit'
keyfile: 'build/.cachesalt, .build/commit, .build/quality'
targetfolder: '.build, out-build, out-vscode-min, out-vscode-reh-min, out-vscode-reh-web-min'
vstsFeed: 'npm-vscode'
platformIndependent: true
@@ -24,7 +25,7 @@ steps:
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:
versionSpec: "1.10.1"
versionSpec: "1.x"
- task: AzureKeyVault@1
displayName: 'Azure Key Vault: Get Secrets'
@@ -112,4 +113,4 @@ steps:
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
displayName: 'Component Detection'
continueOnError: true
continueOnError: true

View File

@@ -2,11 +2,12 @@ steps:
- script: |
mkdir -p .build
echo -n $BUILD_SOURCEVERSION > .build/commit
echo -n $VSCODE_QUALITY > .build/quality
displayName: Prepare cache flag
- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1
inputs:
keyfile: 'build/.cachesalt, .build/commit'
keyfile: 'build/.cachesalt, .build/commit, .build/quality'
targetfolder: '.build, out-build, out-vscode-min, out-vscode-reh-min, out-vscode-reh-web-min'
vstsFeed: 'npm-vscode'
platformIndependent: true
@@ -24,7 +25,7 @@ steps:
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:
versionSpec: "1.10.1"
versionSpec: "1.x"
- task: AzureKeyVault@1
displayName: 'Azure Key Vault: Get Secrets'
@@ -104,7 +105,14 @@ steps:
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
- script: |
# Figure out the full absolute path of the product we just built
# including the remote server and configure the integration tests
# to run with these builds instead of running out of sources.
set -e
APP_ROOT=$(agent.builddirectory)/VSCode-linux-x64
APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-linux-x64" \
DISPLAY=:10 ./scripts/test-integration.sh --build --tfs "Integration Tests"
# yarn smoketest -- --build "$(agent.builddirectory)/VSCode-linux-x64"
displayName: Run integration tests

View File

@@ -5,7 +5,7 @@ steps:
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:
versionSpec: "1.10.1"
versionSpec: "1.x"
- task: AzureKeyVault@1
displayName: 'Azure Key Vault: Get Secrets'
@@ -51,4 +51,4 @@ steps:
# Publish snap package
AZURE_DOCUMENTDB_MASTERKEY="$(builds-docdb-key-readwrite)" \
AZURE_STORAGE_ACCESS_KEY_2="$(vscode-storage-key)" \
node build/azure-pipelines/common/publish.js "$VSCODE_QUALITY" "linux-snap-x64" package "$SNAP_FILENAME" "$VERSION" true "$SNAP_PATH"
node build/azure-pipelines/common/publish.js "$VSCODE_QUALITY" "linux-snap-x64" package "$SNAP_FILENAME" "$VERSION" true "$SNAP_PATH"

View File

@@ -56,7 +56,7 @@ jobs:
- template: linux/snap-build-linux.yml
- job: LinuxArmhf
condition: and(succeeded(), eq(variables['VSCODE_COMPILE_ONLY'], 'false'), eq(variables['VSCODE_BUILD_LINUX_ARMHF'], 'true'), ne(variables['VSCODE_QUALITY'], 'stable'))
condition: and(succeeded(), eq(variables['VSCODE_COMPILE_ONLY'], 'false'), eq(variables['VSCODE_BUILD_LINUX_ARMHF'], 'true'))
pool:
vmImage: 'Ubuntu-16.04'
variables:
@@ -66,8 +66,19 @@ jobs:
steps:
- template: linux/product-build-linux-multiarch.yml
- job: LinuxArm64
condition: and(succeeded(), eq(variables['VSCODE_COMPILE_ONLY'], 'false'), eq(variables['VSCODE_BUILD_LINUX_ARM64'], 'true'), ne(variables['VSCODE_QUALITY'], 'stable'))
pool:
vmImage: 'Ubuntu-16.04'
variables:
VSCODE_ARCH: arm64
dependsOn:
- Compile
steps:
- template: linux/product-build-linux-multiarch.yml
- job: LinuxAlpine
condition: and(succeeded(), eq(variables['VSCODE_COMPILE_ONLY'], 'false'), eq(variables['VSCODE_BUILD_LINUX_ALPINE'], 'true'), ne(variables['VSCODE_QUALITY'], 'stable'))
condition: and(succeeded(), eq(variables['VSCODE_COMPILE_ONLY'], 'false'), eq(variables['VSCODE_BUILD_LINUX_ALPINE'], 'true'))
pool:
vmImage: 'Ubuntu-16.04'
variables:
@@ -128,6 +139,9 @@ jobs:
steps:
- template: sync-mooncake.yml
trigger: none
pr: none
schedules:
- cron: "0 5 * * Mon-Fri"
displayName: Mon-Fri at 7:00

View File

@@ -2,11 +2,12 @@ steps:
- script: |
mkdir -p .build
echo -n $BUILD_SOURCEVERSION > .build/commit
echo -n $VSCODE_QUALITY > .build/quality
displayName: Prepare cache flag
- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1
inputs:
keyfile: 'build/.cachesalt, .build/commit'
keyfile: 'build/.cachesalt, .build/commit, .build/quality'
targetfolder: '.build, out-build, out-vscode-min, out-vscode-reh-min, out-vscode-reh-web-min'
vstsFeed: 'npm-vscode'
platformIndependent: true
@@ -19,7 +20,7 @@ steps:
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:
versionSpec: "1.10.1"
versionSpec: "1.x"
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
- task: AzureKeyVault@1
@@ -86,9 +87,10 @@ steps:
- script: |
set -e
yarn gulp hygiene
yarn gulp hygiene --skip-tslint
yarn gulp tslint
yarn monaco-compile-check
displayName: Run hygiene checks
displayName: Run hygiene, tslint and monaco compile checks
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
- script: |
@@ -97,6 +99,13 @@ steps:
displayName: Extract Telemetry
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
- script: |
set -e
AZURE_WEBVIEW_STORAGE_ACCESS_KEY="$(vscode-webview-storage-key)" \
./build/azure-pipelines/common/publish-webview.sh
displayName: Publish Webview
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
- script: |
set -e
yarn gulp compile-build
@@ -116,9 +125,9 @@ steps:
- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1
inputs:
keyfile: 'build/.cachesalt, .build/commit'
keyfile: 'build/.cachesalt, .build/commit, .build/quality'
targetfolder: '.build, out-build, out-vscode-min, out-vscode-reh-min, out-vscode-reh-web-min'
vstsFeed: 'npm-vscode'
platformIndependent: true
alias: 'Compilation'
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))

View File

@@ -1,36 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
Object.defineProperty(exports, "__esModule", { value: true });
const cp = require("child_process");
let tag = '';
try {
tag = cp
.execSync('git describe --tags `git rev-list --tags --max-count=1`')
.toString()
.trim();
if (!isValidTag(tag)) {
throw Error(`Invalid tag ${tag}`);
}
}
catch (err) {
console.error(err);
console.error('Failed to update types');
process.exit(1);
}
function isValidTag(t) {
if (t.split('.').length !== 3) {
return false;
}
const [major, minor, bug] = t.split('.');
// Only release for tags like 1.34.0
if (bug !== '0') {
return false;
}
if (parseInt(major, 10) === NaN || parseInt(minor, 10) === NaN) {
return false;
}
return true;
}

View File

@@ -13,7 +13,23 @@ steps:
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:
versionSpec: "1.10.1"
versionSpec: "1.x"
- bash: |
TAG_VERSION=$(git describe --tags `git rev-list --tags --max-count=1`)
CHANNEL="G1C14HJ2F"
if [ "$TAG_VERSION" == "1.999.0" ]; then
MESSAGE="<!here>. Someone pushed 1.999.0 tag. Please delete it ASAP from remote and local."
curl -X POST -H "Authorization: Bearer $(SLACK_TOKEN)" \
-H 'Content-type: application/json; charset=utf-8' \
--data '{"channel":"'"$CHANNEL"'", "link_names": true, "text":"'"$MESSAGE"'"}' \
https://slack.com/api/chat.postMessage
exit 1
fi
displayName: Check 1.999.0 tag
- bash: |
# Install build dependencies

View File

@@ -1,62 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
Object.defineProperty(exports, "__esModule", { value: true });
const fs = require("fs");
const cp = require("child_process");
const path = require("path");
let tag = '';
try {
tag = cp
.execSync('git describe --tags `git rev-list --tags --max-count=1`')
.toString()
.trim();
const dtsUri = `https://raw.githubusercontent.com/microsoft/vscode/${tag}/src/vs/vscode.d.ts`;
const outPath = path.resolve(process.cwd(), 'DefinitelyTyped/types/vscode/index.d.ts');
cp.execSync(`curl ${dtsUri} --output ${outPath}`);
updateDTSFile(outPath, tag);
console.log(`Done updating vscode.d.ts at ${outPath}`);
}
catch (err) {
console.error(err);
console.error('Failed to update types');
process.exit(1);
}
function updateDTSFile(outPath, tag) {
const oldContent = fs.readFileSync(outPath, 'utf-8');
const newContent = getNewFileContent(oldContent, tag);
fs.writeFileSync(outPath, newContent);
}
function getNewFileContent(content, tag) {
const oldheader = [
`/*---------------------------------------------------------------------------------------------`,
` * Copyright (c) Microsoft Corporation. All rights reserved.`,
` * Licensed under the Source EULA. See License.txt in the project root for license information.`,
` *--------------------------------------------------------------------------------------------*/`
].join('\n');
return getNewFileHeader(tag) + content.slice(oldheader.length);
}
function getNewFileHeader(tag) {
const [major, minor] = tag.split('.');
const shorttag = `${major}.${minor}`;
const header = [
`// Type definitions for Visual Studio Code ${shorttag}`,
`// Project: https://github.com/microsoft/vscode`,
`// Definitions by: Visual Studio Code Team, Microsoft <https://github.com/Microsoft>`,
`// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped`,
``,
`/*---------------------------------------------------------------------------------------------`,
` * Copyright (c) Microsoft Corporation. All rights reserved.`,
` * Licensed under the Source EULA.`,
` * See https://github.com/Microsoft/vscode/blob/master/LICENSE.txt for license information.`,
` *--------------------------------------------------------------------------------------------*/`,
``,
`/**`,
` * Type Definition for Visual Studio Code ${shorttag} Extension API`,
` * See https://code.visualstudio.com/api for more information`,
` */`
].join('\n');
return header;
}

View File

@@ -5,7 +5,7 @@ steps:
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:
versionSpec: "1.10.1"
versionSpec: "1.x"
- task: AzureKeyVault@1
displayName: 'Azure Key Vault: Get Secrets'

View File

@@ -13,19 +13,37 @@ const util = require('../lib/util');
const root = path.dirname(path.dirname(__dirname));
const commit = util.getVersion(root);
function main() {
const vs = vfs.src('out-vscode-min/**/*.map', { base: 'out-vscode-min' }) // client source-maps only
// optionally allow to pass in explicit base/maps to upload
const [, , base, maps] = process.argv;
const fetch = function (base, maps = `${base}/**/*.map`) {
return vfs.src(maps, { base })
.pipe(es.mapSync(f => {
f.path = `${f.base}/core/${f.relative}`;
return f;
}));
};
const extensionsOut = vfs.src(['.build/extensions/**/*.js.map', '!**/node_modules/**'], { base: '.build' });
function main() {
const sources = [];
return es.merge(vs, extensionsOut)
// vscode client maps (default)
if (!base) {
const vs = fetch('out-vscode-min'); // client source-maps only
sources.push(vs);
const extensionsOut = vfs.src(['.build/extensions/**/*.js.map', '!**/node_modules/**'], { base: '.build' });
sources.push(extensionsOut);
}
// specific client base/maps
else {
sources.push(fetch(base, maps));
}
return es.merge(...sources)
.pipe(es.through(function (data) {
// debug
console.log('Uploading Sourcemap', data.relative);
console.log('Uploading Sourcemap', data.relative); // debug
this.emit('data', data);
}))
.pipe(azure.upload({
@@ -36,4 +54,4 @@ function main() {
}));
}
main();
main();

View File

@@ -2,11 +2,12 @@ steps:
- script: |
mkdir -p .build
echo -n $BUILD_SOURCEVERSION > .build/commit
echo -n $VSCODE_QUALITY > .build/quality
displayName: Prepare cache flag
- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1
inputs:
keyfile: 'build/.cachesalt, .build/commit'
keyfile: 'build/.cachesalt, .build/commit, .build/quality'
targetfolder: '.build, out-build, out-vscode-min, out-vscode-reh-min, out-vscode-reh-web-min'
vstsFeed: 'npm-vscode'
platformIndependent: true
@@ -24,7 +25,7 @@ steps:
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:
versionSpec: "1.10.1"
versionSpec: "1.x"
- task: AzureKeyVault@1
displayName: 'Azure Key Vault: Get Secrets'
@@ -87,6 +88,15 @@ steps:
yarn gulp vscode-web-min-ci
displayName: Build
# upload only the workbench.web.api.js source maps because
# we just compiled these bits in the previous step and the
# general task to upload source maps has already been run
- script: |
set -e
AZURE_STORAGE_ACCESS_KEY="$(ticino-storage-key)" \
node build/azure-pipelines/upload-sourcemaps out-vscode-web-min out-vscode-web-min/vs/workbench/workbench.web.api.js.map
displayName: Upload sourcemaps (Web)
- script: |
set -e
AZURE_DOCUMENTDB_MASTERKEY="$(builds-docdb-key-readwrite)" \

View File

@@ -2,52 +2,70 @@ steps:
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3 # {{SQL CARBON EDIT}} update version
inputs:
versionSpec: "1.10.1"
versionSpec: "1.x"
- task: UsePythonVersion@0
inputs:
versionSpec: '2.x'
addToPath: true
- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1
inputs:
keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock'
targetfolder: '**/node_modules, !**/node_modules/**/node_modules'
vstsFeed: '$(ArtifactFeed)'
keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock, !samples/**/yarn.lock'
targetfolder: '**/node_modules, !**/node_modules/**/node_modules, !samples/**/node_modules'
vstsFeed: '$(build-cache)' # {{SQL CARBON EDIT}} update build cache
- powershell: |
yarn --frozen-lockfile
env:
CHILD_CONCURRENCY: "1"
GITHUB_TOKEN: $(GITHUB_TOKEN) # {{SQL CARBON EDIT}} add github token
displayName: Install Dependencies
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1
inputs:
keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock'
targetfolder: '**/node_modules, !**/node_modules/**/node_modules'
vstsFeed: '$(ArtifactFeed)'
keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock, !samples/**/yarn.lock'
targetfolder: '**/node_modules, !**/node_modules/**/node_modules, !samples/**/node_modules'
vstsFeed: '$(build-cache)' # {{SQL CARBON EDIT}} update build cache
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
- powershell: |
yarn gulp electron
displayName: Download Electron
- powershell: |
yarn gulp hygiene
yarn electron
env:
GITHUB_TOKEN: $(GITHUB_TOKEN) # {{SQL CARBON EDIT}} add github token
- script: |
yarn gulp hygiene --skip-tslint
displayName: Run Hygiene Checks
- powershell: |
yarn monaco-compile-check
displayName: Run Monaco Editor Checks
- script: |
yarn gulp tslint
displayName: Run TSLint Checks
- script: | # {{SQL CARBON EDIT}} add step
yarn tslint
displayName: Run TSLint (gci)
- script: | # {{SQL CARBON EDIT}} add step
yarn strict-null-check
displayName: Run Strict Null Check
# - powershell: | {{SQL CARBON EDIT}} remove step
# yarn monaco-compile-check
# displayName: Run Monaco Editor Checks
- powershell: |
yarn compile
displayName: Compile Sources
- powershell: |
yarn download-builtin-extensions
displayName: Download Built-in Extensions
# - powershell: | {{SQL CARBON EDIT}} remove step
# yarn download-builtin-extensions
# displayName: Download Built-in Extensions
- powershell: |
.\scripts\test.bat --tfs "Unit Tests"
displayName: Run Unit Tests
- powershell: |
.\scripts\test-integration.bat --tfs "Integration Tests"
displayName: Run Integration Tests
# - powershell: | {{SQL CARBON EDIT}} remove step
# .\scripts\test-integration.bat --tfs "Integration Tests"
# displayName: Run Integration Tests
- task: PublishTestResults@2
displayName: Publish Tests Results
inputs:
testResultsFiles: '*-results.xml'
searchFolder: '$(Build.ArtifactStagingDirectory)/test-results'
condition: succeededOrFailed()
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 # {{SQL CARBON EDIT}} add task
displayName: 'Component Detection'
inputs:
alertWarningLevel: High
failOnAlert: true

View File

@@ -2,11 +2,12 @@ steps:
- powershell: |
mkdir .build -ea 0
"$env:BUILD_SOURCEVERSION" | Out-File -Encoding ascii -NoNewLine .build\commit
"$env:VSCODE_QUALITY" | Out-File -Encoding ascii -NoNewLine .build\quality
displayName: Prepare cache flag
- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1
inputs:
keyfile: 'build/.cachesalt, .build/commit'
keyfile: 'build/.cachesalt, .build/commit, .build/quality'
targetfolder: '.build, out-build, out-vscode-min, out-vscode-reh-min, out-vscode-reh-web-min'
vstsFeed: 'npm-vscode'
platformIndependent: true
@@ -24,7 +25,7 @@ steps:
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:
versionSpec: "1.10.1"
versionSpec: "1.x"
- task: UsePythonVersion@0
inputs:
@@ -106,16 +107,21 @@ steps:
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
exec { yarn gulp "electron-$(VSCODE_ARCH)" }
exec { yarn electron $(VSCODE_ARCH) }
exec { .\scripts\test.bat --build --tfs "Unit Tests" }
displayName: Run unit tests
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
- powershell: |
# Figure out the full absolute path of the product we just built
# including the remote server and configure the integration tests
# to run with these builds instead of running out of sources.
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
exec { yarn gulp "electron-$(VSCODE_ARCH)" }
exec { .\scripts\test-integration.bat --build --tfs "Integration Tests" }
$AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
$AppProductJson = Get-Content -Raw -Path "$AppRoot\resources\app\product.json" | ConvertFrom-Json
$AppNameShort = $AppProductJson.nameShort
exec { $env:INTEGRATION_TEST_ELECTRON_PATH = "$AppRoot\$AppNameShort.exe"; $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-reh-win32-$(VSCODE_ARCH)"; .\scripts\test-integration.bat --build --tfs "Integration Tests" }
displayName: Run integration tests
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))

View File

@@ -1,7 +1,7 @@
[
{
"name": "Microsoft.sqlservernotebook",
"version": "0.1.2",
"version": "0.3.2",
"repo": "https://github.com/Microsoft/azuredatastudio"
}
]

View File

@@ -1,2 +1,7 @@
[
{
"name": "Microsoft.sqlservernotebook",
"version": "0.3.2",
"repo": "https://github.com/Microsoft/azuredatastudio"
}
]

View File

@@ -41,12 +41,7 @@ var editorEntryPoints = [
];
var editorResources = [
'out-build/vs/{base,editor}/**/*.{svg,png}',
'!out-build/vs/base/browser/ui/splitview/**/*',
'!out-build/vs/base/browser/ui/toolbar/**/*',
'!out-build/vs/base/browser/ui/octiconLabel/**/*',
'!out-build/vs/workbench/**',
'!**/test/**'
'out-editor-build/vs/base/browser/ui/codiconLabel/**/*.ttf'
];
var BUNDLED_FILE_HEADER = [
@@ -89,9 +84,6 @@ const extractEditorSrcTask = task.define('extract-editor-src', () => {
`lib.dom.d.ts`,
`lib.webworker.importscripts.d.ts`
],
redirects: {
'vs/base/browser/ui/octiconLabel/octiconLabel': 'vs/base/browser/ui/octiconLabel/octiconLabel.mock',
},
shakeLevel: 2, // 0-Files, 1-InnerFile, 2-ClassMembers
importIgnorePattern: /(^vs\/css!)|(promise-polyfill\/polyfill)/,
destRoot: path.join(root, 'out-editor-src')

View File

@@ -21,10 +21,15 @@ const nlsDev = require('vscode-nls-dev');
const root = path.dirname(__dirname);
const commit = util.getVersion(root);
const plumber = require('gulp-plumber');
const _ = require('underscore');
const ext = require('./lib/extensions');
const extensionsPath = path.join(path.dirname(__dirname), 'extensions');
// {{SQL CARBON EDIT}}
const sqlLocalizedExtensions = [
'dacpac',
'schema-compare'
];
// {{SQL CARBON EDIT}}
const compilations = glob.sync('**/tsconfig.json', {
cwd: extensionsPath,
@@ -37,38 +42,38 @@ const tasks = compilations.map(function (tsconfigFile) {
const absolutePath = path.join(extensionsPath, tsconfigFile);
const relativeDirname = path.dirname(tsconfigFile);
const tsconfig = require(absolutePath);
const tsOptions = _.assign({}, tsconfig.extends ? require(path.join(extensionsPath, relativeDirname, tsconfig.extends)).compilerOptions : {}, tsconfig.compilerOptions);
tsOptions.verbose = false;
tsOptions.sourceMap = true;
const overrideOptions = {};
overrideOptions.sourceMap = true;
const name = relativeDirname.replace(/\//g, '-');
const root = path.join('extensions', relativeDirname);
const srcBase = path.join(root, 'src');
const src = path.join(srcBase, '**');
const srcOpts = { cwd: path.dirname(__dirname), base: srcBase };
const out = path.join(root, 'out');
const baseUrl = getBaseUrl(out);
let headerId, headerOut;
let index = relativeDirname.indexOf('/');
if (index < 0) {
headerId = 'vscode.' + relativeDirname;
headerId = 'microsoft.' + relativeDirname; // {{SQL CARBON EDIT}}
headerOut = 'out';
} else {
headerId = 'vscode.' + relativeDirname.substr(0, index);
headerId = 'microsoft.' + relativeDirname.substr(0, index); // {{SQL CARBON EDIT}}
headerOut = relativeDirname.substr(index + 1) + '/out';
}
function createPipeline(build, emitError) {
const reporter = createReporter();
tsOptions.inlineSources = !!build;
tsOptions.base = path.dirname(absolutePath);
overrideOptions.inlineSources = Boolean(build);
overrideOptions.base = path.dirname(absolutePath);
const compilation = tsb.create(tsOptions, null, null, err => reporter(err.toString()));
const compilation = tsb.create(absolutePath, overrideOptions, false, err => reporter(err.toString()));
return function () {
const pipeline = function () {
const input = es.through();
const tsFilter = filter(['**/*.ts', '!**/lib/lib*.d.ts', '!**/node_modules/**'], { restore: true });
const output = input
@@ -98,15 +103,19 @@ const tasks = compilations.map(function (tsconfigFile) {
return es.duplex(input, output);
};
}
const srcOpts = { cwd: path.dirname(__dirname), base: srcBase };
// add src-stream for project files
pipeline.tsProjectSrc = () => {
return compilation.src(srcOpts);
};
return pipeline;
}
const cleanTask = task.define(`clean-extension-${name}`, util.rimraf(out));
const compileTask = task.define(`compile-extension:${name}`, task.series(cleanTask, () => {
const pipeline = createPipeline(false, true);
const input = gulp.src(src, srcOpts);
const pipeline = createPipeline(sqlLocalizedExtensions.includes(name), true); // {{SQL CARBON EDIT}}
const input = pipeline.tsProjectSrc();
return input
.pipe(pipeline())
@@ -115,8 +124,8 @@ const tasks = compilations.map(function (tsconfigFile) {
const watchTask = task.define(`watch-extension:${name}`, task.series(cleanTask, () => {
const pipeline = createPipeline(false);
const input = gulp.src(src, srcOpts);
const watchInput = watcher(src, srcOpts);
const input = pipeline.tsProjectSrc();
const watchInput = watcher(src, { ...srcOpts, ...{ readDelay: 200 } });
return watchInput
.pipe(util.incremental(pipeline, input))
@@ -125,7 +134,7 @@ const tasks = compilations.map(function (tsconfigFile) {
const compileBuildTask = task.define(`compile-build-extension-${name}`, task.series(cleanTask, () => {
const pipeline = createPipeline(true, true);
const input = gulp.src(src, srcOpts);
const input = pipeline.tsProjectSrc();
return input
.pipe(pipeline())
@@ -156,8 +165,8 @@ const cleanExtensionsBuildTask = task.define('clean-extensions-build', util.rimr
const compileExtensionsBuildTask = task.define('compile-extensions-build', task.series(
cleanExtensionsBuildTask,
task.define('bundle-extensions-build', () => ext.packageLocalExtensionsStream().pipe(gulp.dest('.build'))),
task.define('bundle-marketplace-extensions-build', () => ext.packageMarketplaceExtensionsStream().pipe(gulp.dest('.build'))),
task.define('bundle-marketplace-extensions-build', () => ext.packageMarketplaceExtensionsStream().pipe(gulp.dest('.build')))
));
gulp.task(compileExtensionsBuildTask);
exports.compileExtensionsBuildTask = compileExtensionsBuildTask;
exports.compileExtensionsBuildTask = compileExtensionsBuildTask;

View File

@@ -17,6 +17,7 @@ const vfs = require('vinyl-fs');
const path = require('path');
const fs = require('fs');
const pall = require('p-all');
const task = require('./lib/task');
/**
* Hygiene works by creating cascading subsets of all our files and
@@ -50,12 +51,15 @@ const indentationFilter = [
'!src/vs/css.js',
'!src/vs/css.build.js',
'!src/vs/loader.js',
'!src/vs/base/common/insane/insane.js',
'!src/vs/base/common/marked/marked.js',
'!src/vs/base/node/terminateProcess.sh',
'!src/vs/base/node/cpuUsage.sh',
'!test/assert.js',
'!build/testSetup.js',
// except specific folders
'!test/automation/out/**',
'!test/smoke/out/**',
'!extensions/vscode-api-tests/testWorkspace/**',
'!extensions/vscode-api-tests/testWorkspace2/**',
@@ -64,11 +68,12 @@ const indentationFilter = [
// except multiple specific files
'!**/package.json',
'!**/package-lock.json', // {{SQL CARBON EDIT}}
'!**/yarn.lock',
'!**/yarn-error.log',
// except multiple specific folders
'!**/octicons/**',
'!**/codicon/**',
'!**/fixtures/**',
'!**/lib/**',
'!extensions/**/out/**',
@@ -98,7 +103,8 @@ const indentationFilter = [
'!extensions/admin-tool-ext-win/ssmsmin/**',
'!extensions/resource-deployment/notebooks/**',
'!extensions/mssql/notebooks/**',
'!extensions/big-data-cluster/src/bigDataCluster/controller/apiGenerated.ts'
'!extensions/big-data-cluster/src/bigDataCluster/controller/apiGenerated.ts',
'!extensions/big-data-cluster/src/bigDataCluster/controller/clusterApiGenerated2.ts'
];
const copyrightFilter = [
@@ -129,14 +135,15 @@ const copyrightFilter = [
'!extensions/html-language-features/server/src/modes/typescript/*',
'!extensions/*/server/bin/*',
'!src/vs/editor/test/node/classification/typescript-test.ts',
'!scripts/code-web.js',
// {{SQL CARBON EDIT}}
'!extensions/notebook/src/intellisense/text.ts',
'!extensions/mssql/src/objectExplorerNodeProvider/webhdfs.ts',
'!extensions/mssql/src/hdfs/webhdfs.ts',
'!src/sql/workbench/parts/notebook/browser/outputs/tableRenderers.ts',
'!src/sql/workbench/parts/notebook/common/models/url.ts',
'!src/sql/workbench/parts/notebook/common/models/renderMimeInterfaces.ts',
'!src/sql/workbench/parts/notebook/common/models/outputProcessor.ts',
'!src/sql/workbench/parts/notebook/common/models/mimemodel.ts',
'!src/sql/workbench/parts/notebook/browser/models/renderMimeInterfaces.ts',
'!src/sql/workbench/parts/notebook/browser/models/outputProcessor.ts',
'!src/sql/workbench/parts/notebook/browser/models/mimemodel.ts',
'!src/sql/workbench/parts/notebook/browser/cellViews/media/*.css',
'!src/sql/base/browser/ui/table/plugins/rowSelectionModel.plugin.ts',
'!src/sql/base/browser/ui/table/plugins/rowDetailView.ts',
@@ -157,6 +164,7 @@ const copyrightFilter = [
'!extensions/notebook/src/prompts/**',
'!extensions/mssql/src/prompts/**',
'!extensions/notebook/resources/jupyter_config/**',
'!extensions/query-history/images/**',
'!**/*.gif',
'!**/*.xlf',
'!**/*.dacpac',
@@ -171,36 +179,82 @@ const eslintFilter = [
'!src/vs/nls.js',
'!src/vs/css.build.js',
'!src/vs/nls.build.js',
'!src/**/insane.js',
'!src/**/marked.js',
'!**/test/**'
];
const tslintFilter = [
'src/**/*.ts',
'test/**/*.ts',
'extensions/**/*.ts',
const tslintBaseFilter = [
'!**/fixtures/**',
'!**/typings/**',
'!**/node_modules/**',
'!extensions/typescript/test/colorize-fixtures/**',
'!extensions/typescript-basics/test/colorize-fixtures/**',
'!extensions/vscode-api-tests/testWorkspace/**',
'!extensions/vscode-api-tests/testWorkspace2/**',
'!extensions/**/*.test.ts',
'!extensions/html-language-features/server/lib/jquery.d.ts',
// {{SQL CARBON EDIT}}
'!extensions/big-data-cluster/src/bigDataCluster/controller/apiGenerated.ts'
'!extensions/big-data-cluster/src/bigDataCluster/controller/apiGenerated.ts', // {{SQL CARBON EDIT}},
'!extensions/big-data-cluster/src/bigDataCluster/controller/tokenApiGenerated.ts' // {{SQL CARBON EDIT}},
];
// {{SQL CARBON EDIT}}
const useStrictFilter = [
'src/**'
];
const sqlFilter = [
'src/sql/**'
'src/sql/**',
'extensions/**',
// Ignore VS Code extensions
'!extensions/bat/**',
'!extensions/configuration-editing/**',
'!extensions/docker/**',
'!extensions/extension-editing/**',
'!extensions/git/**',
'!extensions/git-ui/**',
'!extensions/image-preview/**',
'!extensions/insights-default/**',
'!extensions/json/**',
'!extensions/json-language-features/**',
'!extensions/markdown-basics/**',
'!extensions/markdown-language-features/**',
'!extensions/merge-conflict/**',
'!extensions/powershell/**',
'!extensions/python/**',
'!extensions/r/**',
'!extensions/theme-*/**',
'!extensions/vscode-*/**',
'!extensions/xml/**',
'!extensions/xml-language-features/**',
'!extensions/yarml/**',
];
// {{SQL CARBON EDIT}}
const tslintCoreFilter = [
'src/**/*.ts',
'test/**/*.ts',
'!extensions/**/*.ts',
'!test/automation/**',
'!test/smoke/**',
...tslintBaseFilter
];
const tslintExtensionsFilter = [
'extensions/**/*.ts',
'!src/**/*.ts',
'!test/**/*.ts',
'test/automation/**/*.ts',
...tslintBaseFilter
];
const tslintHygieneFilter = [
'src/**/*.ts',
'test/**/*.ts',
'extensions/**/*.ts',
...tslintBaseFilter
];
const fileLengthFilter = filter([
'**',
'!extensions/import/*.docx',
'!extensions/admin-tool-ext-win/license/**'
], {restore: true});
const copyrightHeaderLines = [
'/*---------------------------------------------------------------------------------------------',
' * Copyright (c) Microsoft Corporation. All rights reserved.',
@@ -217,14 +271,49 @@ gulp.task('eslint', () => {
});
gulp.task('tslint', () => {
const options = { emitError: true };
return es.merge([
return vfs.src(all, { base: '.', follow: true, allowEmpty: true })
.pipe(filter(tslintFilter))
.pipe(gulptslint.default({ rulesDirectory: 'build/lib/tslint' }))
.pipe(gulptslint.default.report(options));
// Core: include type information (required by certain rules like no-nodejs-globals)
vfs.src(all, { base: '.', follow: true, allowEmpty: true })
.pipe(filter(tslintCoreFilter))
.pipe(gulptslint.default({ rulesDirectory: 'build/lib/tslint', program: tslint.Linter.createProgram('src/tsconfig.json') }))
.pipe(gulptslint.default.report({ emitError: true })),
// Exenstions: do not include type information
vfs.src(all, { base: '.', follow: true, allowEmpty: true })
.pipe(filter(tslintExtensionsFilter))
.pipe(gulptslint.default({ rulesDirectory: 'build/lib/tslint' }))
.pipe(gulptslint.default.report({ emitError: true }))
]).pipe(es.through());
});
function checkPackageJSON(actualPath) {
const actual = require(path.join(__dirname, '..', actualPath));
const rootPackageJSON = require('../package.json');
for (let depName in actual.dependencies) {
const depVersion = actual.dependencies[depName];
const rootDepVersion = rootPackageJSON.dependencies[depName];
if (!rootDepVersion) {
// missing in root is allowed
continue;
}
if (depVersion !== rootDepVersion) {
this.emit('error', `The dependency ${depName} in '${actualPath}' (${depVersion}) is different than in the root package.json (${rootDepVersion})`);
}
}
}
const checkPackageJSONTask = task.define('check-package-json', () => {
return gulp.src('package.json')
.pipe(es.through(function() {
checkPackageJSON.call(this, 'remote/package.json');
checkPackageJSON.call(this, 'remote/web/package.json');
}));
});
gulp.task(checkPackageJSONTask);
function hygiene(some) {
let errorCount = 0;
@@ -274,23 +363,6 @@ function hygiene(some) {
this.emit('data', file);
});
// {{SQL CARBON EDIT}}
// Check for unnecessary 'use strict' lines. These are automatically added by the alwaysStrict compiler option so don't need to be added manually
const useStrict = es.through(function (file) {
const lines = file.__lines;
// Only take the first 10 lines to reduce false positives- the compiler will throw an error if it's not the first non-comment line in a file
// (10 is used to account for copyright and extraneous newlines)
lines.slice(0, 10).forEach((line, i) => {
if (/\s*'use\s*strict\s*'/.test(line)) {
console.error(file.relative + '(' + (i + 1) + ',1): Unnecessary \'use strict\' - this is already added by the compiler');
errorCount++;
}
});
this.emit('data', file);
});
// {{SQL CARBON EDIT}} END
const formatting = es.map(function (file, cb) {
tsfmt.processString(file.path, file.contents.toString('utf8'), {
verify: false,
@@ -321,6 +393,23 @@ function hygiene(some) {
});
});
const filelength = es.through(function (file) {
const fileName = path.basename(file.relative);
const fileDir = path.dirname(file.relative);
//check the filename is < 50 characters (basename gets the filename with extension).
if (fileName.length > 50) {
console.error(`File name '${fileName}' under ${fileDir} is too long. Rename file to have less than 50 characters.`);
errorCount++;
}
if (file.relative.length > 150) {
console.error(`File path ${file.relative} exceeds acceptable file-length. Rename the path to have less than 150 characters.`);
errorCount++;
}
this.emit('data', file);
});
const tslintConfiguration = tslint.Configuration.findConfiguration('tslint.json', '.');
const tslintOptions = { fix: false, formatter: 'json' };
const tsLinter = new tslint.Linter(tslintOptions);
@@ -339,20 +428,22 @@ function hygiene(some) {
input = some;
}
// {{SQL CARBON EDIT}} Linting for SQL
const tslintSqlConfiguration = tslint.Configuration.findConfiguration('tslint-sql.json', '.');
const tslintSqlOptions = { fix: false, formatter: 'json' };
const sqlTsLinter = new tslint.Linter(tslintSqlOptions);
const sqlTsl = es.through(function (file) {
const sqlTsl = es.through(function (file) { //TODO restore
const contents = file.contents.toString('utf8');
sqlTsLinter.lint(file.relative, contents, tslintSqlConfiguration.results);
this.emit('data', file);
});
const productJsonFilter = filter('product.json', { restore: true });
const result = input
.pipe(fileLengthFilter)
.pipe(filelength)
.pipe(fileLengthFilter.restore)
.pipe(filter(f => !f.stat.isDirectory()))
.pipe(productJsonFilter)
.pipe(process.env['BUILD_SOURCEVERSION'] ? es.through() : productJson)
@@ -362,15 +453,16 @@ function hygiene(some) {
.pipe(filter(copyrightFilter))
.pipe(copyrights);
const typescript = result
.pipe(filter(tslintFilter))
.pipe(formatting)
.pipe(tsl)
// {{SQL CARBON EDIT}}
.pipe(filter(useStrictFilter))
.pipe(useStrict)
.pipe(filter(sqlFilter))
.pipe(sqlTsl);
let typescript = result
.pipe(filter(tslintHygieneFilter))
.pipe(formatting);
if (!process.argv.some(arg => arg === '--skip-tslint')) {
typescript = typescript.pipe(tsl);
typescript = typescript
.pipe(filter(sqlFilter)) // {{SQL CARBON EDIT}}
.pipe(sqlTsl);
}
const javascript = result
.pipe(filter(eslintFilter))
@@ -456,7 +548,7 @@ function createGitIndexVinyls(paths) {
.then(r => r.filter(p => !!p));
}
gulp.task('hygiene', () => hygiene());
gulp.task('hygiene', task.series(checkPackageJSONTask, () => hygiene()));
// this allows us to run hygiene as a git pre-commit hook
if (require.main === module) {

View File

@@ -31,6 +31,7 @@ const BUILD_TARGETS = [
{ platform: 'linux', arch: 'ia32', pkgTarget: 'node8-linux-x86' },
{ platform: 'linux', arch: 'x64', pkgTarget: 'node8-linux-x64' },
{ platform: 'linux', arch: 'armhf', pkgTarget: 'node8-linux-armv7' },
{ platform: 'linux', arch: 'arm64', pkgTarget: 'node8-linux-arm64' },
{ platform: 'linux', arch: 'alpine', pkgTarget: 'node8-linux-alpine' },
];
@@ -41,6 +42,7 @@ gulp.task('vscode-reh-win32-x64-min', noop);
gulp.task('vscode-reh-darwin-min', noop);
gulp.task('vscode-reh-linux-x64-min', noop);
gulp.task('vscode-reh-linux-armhf-min', noop);
gulp.task('vscode-reh-linux-arm64-min', noop);
gulp.task('vscode-reh-linux-alpine-min', noop);
gulp.task('vscode-reh-web-win32-ia32-min', noop);

View File

@@ -4,7 +4,6 @@
*--------------------------------------------------------------------------------------------*/
'use strict';
const gulp = require('gulp');
const util = require('./lib/util');
const tsfmt = require('typescript-formatter');
@@ -22,72 +21,78 @@ gulp.task('fmt', () => formatStagedFiles());
const formatFiles = (some) => {
const formatting = es.map(function (file, cb) {
tsfmt.processString(file.path, file.contents.toString('utf8'), {
replace: true,
tsfmt: true,
tslint: true,
tsconfig: true
// verbose: true
}).then(result => {
console.info('ran formatting on file ' + file.path + ' result: ' + result.message);
if (result.error) {
console.error(result.message);
}
cb(null, file);
tsfmt.processString(file.path, file.contents.toString('utf8'), {
replace: true,
tsfmt: true,
tslint: true,
tsconfig: true
// verbose: true
}).then(result => {
console.info('ran formatting on file ' + file.path + ' result: ' + result.message);
if (result.error) {
console.error(result.message);
}
cb(null, file);
}, err => {
cb(err);
});
}, err => {
cb(err);
});
return gulp.src(some, { base: '.' })
.pipe(filter(f => !f.stat.isDirectory()))
.pipe(formatting);
});
return gulp.src(some, {
base: '.'
})
.pipe(filter(f => !f.stat.isDirectory()))
.pipe(formatting);
};
const formatStagedFiles = () => {
const cp = require('child_process');
cp.exec('git diff --name-only', { maxBuffer: 2000 * 1024 }, (err, out) => {
if (err) {
console.error();
console.error(err);
process.exit(1);
}
cp.exec('git diff --name-only', {
maxBuffer: 2000 * 1024
}, (err, out) => {
if (err) {
console.error();
console.error(err);
process.exit(1);
}
const some = out
.split(/\r?\n/)
.filter(l => !!l)
.filter(l => l.match(/.*.ts$/i));
const some = out
.split(/\r?\n/)
.filter(l => !!l)
.filter(l => l.match(/.*.ts$/i));
formatFiles(some).on('error', err => {
console.error();
console.error(err);
process.exit(1);
});
formatFiles(some).on('error', err => {
console.error();
console.error(err);
process.exit(1);
});
});
cp.exec('git diff --cached --name-only', { maxBuffer: 2000 * 1024 }, (err, out) => {
if (err) {
console.error();
console.error(err);
process.exit(1);
}
cp.exec('git diff --cached --name-only', {
maxBuffer: 2000 * 1024
}, (err, out) => {
if (err) {
console.error();
console.error(err);
process.exit(1);
}
const some = out
.split(/\r?\n/)
.filter(l => !!l)
.filter(l => l.match(/.*.ts$/i));
const some = out
.split(/\r?\n/)
.filter(l => !!l)
.filter(l => l.match(/.*.ts$/i));
formatFiles(some).on('error', err => {
console.error();
console.error(err);
process.exit(1);
});
formatFiles(some).on('error', err => {
console.error();
console.error(err);
process.exit(1);
});
});
};
function installService() {
let config = require('../extensions/mssql/src/config.json');
let config = require('../extensions/mssql/config.json');
return platformInfo.getCurrent().then(p => {
let runtime = p.runtimeId;
// fix path since it won't be correct
@@ -109,7 +114,7 @@ gulp.task('install-sqltoolsservice', () => {
});
function installSsmsMin() {
const config = require('../extensions/admin-tool-ext-win/src/config.json');
const config = require('../extensions/admin-tool-ext-win/config.json');
return platformInfo.getCurrent().then(p => {
const runtime = p.runtimeId;
// fix path since it won't be correct

View File

@@ -31,7 +31,7 @@ const crypto = require('crypto');
const i18n = require('./lib/i18n');
const ext = require('./lib/extensions'); // {{SQL CARBON EDIT}}
const deps = require('./dependencies');
const getElectronVersion = require('./lib/electron').getElectronVersion;
const { config } = require('./lib/electron');
const createAsar = require('./lib/asar').createAsar;
const { compileBuildTask } = require('./gulpfile.compile');
const { compileExtensionsBuildTask } = require('./gulpfile.extensions');
@@ -58,10 +58,9 @@ const nodeModules = [
// Build
const vscodeEntryPoints = _.flatten([
buildfile.entrypoint('vs/workbench/workbench.main'),
buildfile.entrypoint('vs/workbench/workbench.desktop.main'),
buildfile.base,
buildfile.serviceWorker,
buildfile.workbench,
buildfile.workbenchDesktop,
buildfile.code
]);
@@ -79,7 +78,7 @@ const vscodeResources = [
'out-build/vs/base/common/performance.js',
'out-build/vs/base/node/languagePacks.js',
'out-build/vs/base/node/{stdForkStart.js,terminateProcess.sh,cpuUsage.sh,ps.sh}',
'out-build/vs/base/browser/ui/octiconLabel/octicons/**',
'out-build/vs/base/browser/ui/codiconLabel/codicon/**',
'out-build/vs/workbench/browser/media/*-theme.css',
'out-build/vs/workbench/contrib/debug/**/*.json',
'out-build/vs/workbench/contrib/externalTerminal/**/*.scpt',
@@ -87,7 +86,6 @@ const vscodeResources = [
'out-build/vs/workbench/contrib/webview/electron-browser/pre/*.js',
'out-build/vs/**/markdown.css',
'out-build/vs/workbench/contrib/tasks/**/*.json',
'out-build/vs/workbench/contrib/welcome/walkThrough/**/*.md',
'out-build/vs/platform/files/**/*.exe',
'out-build/vs/platform/files/**/*.md',
'out-build/vs/code/electron-browser/workbench/**',
@@ -125,6 +123,7 @@ const optimizeVSCodeTask = task.define('optimize-vscode', task.series(
resources: vscodeResources,
loaderConfig: common.loaderConfig(nodeModules),
out: 'out-vscode',
inlineAmdImages: true,
bundleInfo: undefined
})
));
@@ -144,73 +143,6 @@ const minifyVSCodeTask = task.define('minify-vscode', task.series(
));
gulp.task(minifyVSCodeTask);
// Package
// @ts-ignore JSON checking: darwinCredits is optional
const darwinCreditsTemplate = product.darwinCredits && _.template(fs.readFileSync(path.join(root, product.darwinCredits), 'utf8'));
function darwinBundleDocumentType(extensions, icon) {
return {
name: product.nameLong + ' document',
role: 'Editor',
ostypes: ["TEXT", "utxt", "TUTX", "****"],
extensions: extensions,
iconFile: icon
};
}
const config = {
version: getElectronVersion(),
productAppName: product.nameLong,
companyName: 'Microsoft Corporation',
copyright: 'Copyright (C) 2019 Microsoft. All rights reserved',
darwinIcon: 'resources/darwin/code.icns',
darwinBundleIdentifier: product.darwinBundleIdentifier,
darwinApplicationCategoryType: 'public.app-category.developer-tools',
darwinHelpBookFolder: 'VS Code HelpBook',
darwinHelpBookName: 'VS Code HelpBook',
darwinBundleDocumentTypes: [
// {{SQL CARBON EDIT}} - Remove most document types and replace with ours
darwinBundleDocumentType(["csv", "json", "sqlplan", "sql", "xml"], 'resources/darwin/code_file.icns'),
],
darwinBundleURLTypes: [{
role: 'Viewer',
name: product.nameLong,
urlSchemes: [product.urlProtocol]
}],
darwinForceDarkModeSupport: true,
darwinCredits: darwinCreditsTemplate ? Buffer.from(darwinCreditsTemplate({ commit: commit, date: new Date().toISOString() })) : undefined,
linuxExecutableName: product.applicationName,
winIcon: 'resources/win32/code.ico',
token: process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined,
// @ts-ignore JSON checking: electronRepository is optional
repo: product.electronRepository || undefined
};
function getElectron(arch) {
return () => {
const electronOpts = _.extend({}, config, {
platform: process.platform,
arch,
ffmpegChromium: true,
keepDefaultApp: true
});
return gulp.src('package.json')
.pipe(json({ name: product.nameShort }))
.pipe(electron(electronOpts))
.pipe(filter(['**', '!**/app/package.json']))
.pipe(vfs.dest('.build/electron'));
};
}
gulp.task(task.define('electron', task.series(util.rimraf('.build/electron'), getElectron(process.arch))));
gulp.task(task.define('electron-ia32', task.series(util.rimraf('.build/electron'), getElectron('ia32'))));
gulp.task(task.define('electron-x64', task.series(util.rimraf('.build/electron'), getElectron('x64'))));
gulp.task(task.define('electron-arm', task.series(util.rimraf('.build/electron'), getElectron('armv7l'))));
gulp.task(task.define('electron-arm64', task.series(util.rimraf('.build/electron'), getElectron('arm64'))));
/**
* Compute checksums for some files.
*
@@ -255,8 +187,8 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
const out = sourceFolderName;
const checksums = computeChecksums(out, [
'vs/workbench/workbench.main.js',
'vs/workbench/workbench.main.css',
'vs/workbench/workbench.desktop.main.js',
'vs/workbench/workbench.desktop.main.css',
'vs/code/electron-browser/workbench/workbench.html',
'vs/code/electron-browser/workbench/workbench.js'
]);
@@ -268,7 +200,7 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
// {{SQL CARBON EDIT}}
ext.packageBuiltInExtensions();
const extensions = gulp.src('.build/extensions/**', { base: '.build', dot: true });
const extensions = gulp.src(['.build/extensions/**', '!.build/extensions/node_modules/**'], { base: '.build', dot: true }); // {{SQL CARBON EDIT}} - don't package the node_modules directory
const sources = es.merge(src, extensions)
.pipe(filter(['**', '!**/*.js.map'], { dot: true }));
@@ -353,7 +285,15 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
.pipe(electron(_.extend({}, config, { platform, arch, ffmpegChromium: true })))
.pipe(filter(['**', '!LICENSE', '!LICENSES.chromium.html', '!version'], { dot: true }));
// result = es.merge(result, gulp.src('resources/completions/**', { base: '.' }));
if (platform === 'linux') {
result = es.merge(result, gulp.src('resources/completions/bash/code', { base: '.' })
.pipe(replace('@@APPNAME@@', product.applicationName))
.pipe(rename(function (f) { f.basename = product.applicationName; })));
result = es.merge(result, gulp.src('resources/completions/zsh/_code', { base: '.' })
.pipe(replace('@@APPNAME@@', product.applicationName))
.pipe(rename(function (f) { f.basename = '_' + product.applicationName; })));
}
if (platform === 'win32') {
result = es.merge(result, gulp.src('resources/win32/bin/code.js', { base: 'resources/win32', allowEmpty: true }));
@@ -460,7 +400,7 @@ gulp.task(task.define(
optimizeVSCodeTask,
function () {
const pathToMetadata = './out-vscode/nls.metadata.json';
const pathToExtensions = './extensions/*';
const pathToExtensions = '.build/extensions/*';
const pathToSetup = 'build/win32/**/{Default.isl,messages.en.isl}';
return es.merge(
@@ -481,7 +421,7 @@ gulp.task(task.define(
optimizeVSCodeTask,
function () {
const pathToMetadata = './out-vscode/nls.metadata.json';
const pathToExtensions = './extensions/*';
const pathToExtensions = '.build/extensions/*';
const pathToSetup = 'build/win32/**/{Default.isl,messages.en.isl}';
return es.merge(

View File

@@ -43,7 +43,8 @@ function prepareDebPackage(arch) {
.pipe(replace('@@NAME_LONG@@', product.nameLong))
.pipe(replace('@@NAME_SHORT@@', product.nameShort))
.pipe(replace('@@NAME@@', product.applicationName))
.pipe(replace('@@ICON@@', product.linuxIconName))
.pipe(replace('@@EXEC@@', `/usr/share/${product.applicationName}/${product.applicationName}`))
.pipe(replace('@@ICON@@', `/usr/share/pixmaps/${product.linuxIconName}.png`))
.pipe(replace('@@URLPROTOCOL@@', product.urlProtocol));
const appdata = gulp.src('resources/linux/code.appdata.xml', { base: '.' })
@@ -55,11 +56,13 @@ function prepareDebPackage(arch) {
const icon = gulp.src('resources/linux/code.png', { base: '.' })
.pipe(rename('usr/share/pixmaps/' + product.linuxIconName + '.png'));
// const bash_completion = gulp.src('resources/completions/bash/code')
// .pipe(rename('usr/share/bash-completion/completions/code'));
const bash_completion = gulp.src('resources/completions/bash/code')
.pipe(replace('@@APPNAME@@', product.applicationName))
.pipe(rename('usr/share/bash-completion/completions/' + product.applicationName));
// const zsh_completion = gulp.src('resources/completions/zsh/_code')
// .pipe(rename('usr/share/zsh/vendor-completions/_code'));
const zsh_completion = gulp.src('resources/completions/zsh/_code')
.pipe(replace('@@APPNAME@@', product.applicationName))
.pipe(rename('usr/share/zsh/vendor-completions/_' + product.applicationName));
const code = gulp.src(binaryDir + '/**/*', { base: binaryDir })
.pipe(rename(function (p) { p.dirname = 'usr/share/' + product.applicationName + '/' + p.dirname; }));
@@ -95,7 +98,7 @@ function prepareDebPackage(arch) {
.pipe(replace('@@UPDATEURL@@', product.updateUrl || '@@UPDATEURL@@'))
.pipe(rename('DEBIAN/postinst'));
const all = es.merge(control, postinst, postrm, prerm, desktops, appdata, icon, /* bash_completion, zsh_completion, */ code);
const all = es.merge(control, postinst, postrm, prerm, desktops, appdata, icon, bash_completion, zsh_completion, code);
return all.pipe(vfs.dest(destination));
};
@@ -134,6 +137,7 @@ function prepareRpmPackage(arch) {
.pipe(replace('@@NAME_LONG@@', product.nameLong))
.pipe(replace('@@NAME_SHORT@@', product.nameShort))
.pipe(replace('@@NAME@@', product.applicationName))
.pipe(replace('@@EXEC@@', `/usr/share/${product.applicationName}/${product.applicationName}`))
.pipe(replace('@@ICON@@', product.linuxIconName))
.pipe(replace('@@URLPROTOCOL@@', product.urlProtocol));
@@ -146,11 +150,13 @@ function prepareRpmPackage(arch) {
const icon = gulp.src('resources/linux/code.png', { base: '.' })
.pipe(rename('BUILD/usr/share/pixmaps/' + product.linuxIconName + '.png'));
// const bash_completion = gulp.src('resources/completions/bash/code')
// .pipe(rename('BUILD/usr/share/bash-completion/completions/code'));
const bash_completion = gulp.src('resources/completions/bash/code')
.pipe(replace('@@APPNAME@@', product.applicationName))
.pipe(rename('BUILD/usr/share/bash-completion/completions/' + product.applicationName));
// const zsh_completion = gulp.src('resources/completions/zsh/_code')
// .pipe(rename('BUILD/usr/share/zsh/site-functions/_code'));
const zsh_completion = gulp.src('resources/completions/zsh/_code')
.pipe(replace('@@APPNAME@@', product.applicationName))
.pipe(rename('BUILD/usr/share/zsh/site-functions/_' + product.applicationName));
const code = gulp.src(binaryDir + '/**/*', { base: binaryDir })
.pipe(rename(function (p) { p.dirname = 'BUILD/usr/share/' + product.applicationName + '/' + p.dirname; }));
@@ -173,7 +179,7 @@ function prepareRpmPackage(arch) {
const specIcon = gulp.src('resources/linux/rpm/code.xpm', { base: '.' })
.pipe(rename('SOURCES/' + product.applicationName + '.xpm'));
const all = es.merge(code, desktops, appdata, icon, /* bash_completion, zsh_completion, */ spec, specIcon);
const all = es.merge(code, desktops, appdata, icon, bash_completion, zsh_completion, spec, specIcon);
return all.pipe(vfs.dest(getRpmBuildPath(rpmArch)));
};
@@ -202,21 +208,25 @@ function prepareSnapPackage(arch) {
const destination = getSnapBuildPath(arch);
return function () {
// A desktop file that is placed in snap/gui will be placed into meta/gui verbatim.
const desktop = gulp.src('resources/linux/code.desktop', { base: '.' })
.pipe(rename(`usr/share/applications/${product.applicationName}.desktop`));
.pipe(rename(`snap/gui/${product.applicationName}.desktop`));
// A desktop file that is placed in snap/gui will be placed into meta/gui verbatim.
const desktopUrlHandler = gulp.src('resources/linux/code-url-handler.desktop', { base: '.' })
.pipe(rename(`usr/share/applications/${product.applicationName}-url-handler.desktop`));
.pipe(rename(`snap/gui/${product.applicationName}-url-handler.desktop`));
const desktops = es.merge(desktop, desktopUrlHandler)
.pipe(replace('@@NAME_LONG@@', product.nameLong))
.pipe(replace('@@NAME_SHORT@@', product.nameShort))
.pipe(replace('@@NAME@@', product.applicationName))
.pipe(replace('@@ICON@@', `/usr/share/pixmaps/${product.linuxIconName}.png`))
.pipe(replace('@@EXEC@@', `${product.applicationName} --force-user-env`))
.pipe(replace('@@ICON@@', `\${SNAP}/meta/gui/${product.linuxIconName}.png`))
.pipe(replace('@@URLPROTOCOL@@', product.urlProtocol));
// An icon that is placed in snap/gui will be placed into meta/gui verbatim.
const icon = gulp.src('resources/linux/code.png', { base: '.' })
.pipe(rename(`usr/share/pixmaps/${product.linuxIconName}.png`));
.pipe(rename(`snap/gui/${product.linuxIconName}.png`));
const code = gulp.src(binaryDir + '/**/*', { base: binaryDir })
.pipe(rename(function (p) { p.dirname = `usr/share/${product.applicationName}/${p.dirname}`; }));
@@ -237,7 +247,8 @@ function prepareSnapPackage(arch) {
function buildSnapPackage(arch) {
const snapBuildPath = getSnapBuildPath(arch);
return shell.task(`cd ${snapBuildPath} && snapcraft build`);
// Default target for snapcraft runs: pull, build, stage and prime, and finally assembles the snap.
return shell.task(`cd ${snapBuildPath} && snapcraft`);
}
const BUILD_TARGETS = [

View File

@@ -6,146 +6,11 @@
'use strict';
const gulp = require('gulp');
const path = require('path');
const es = require('event-stream');
const util = require('./lib/util');
const task = require('./lib/task');
const common = require('./lib/optimize');
const product = require('../product.json');
const rename = require('gulp-rename');
const filter = require('gulp-filter');
const json = require('gulp-json-editor');
const _ = require('underscore');
const deps = require('./dependencies');
const vfs = require('vinyl-fs');
const packageJson = require('../package.json');
const { compileBuildTask } = require('./gulpfile.compile');
const REPO_ROOT = path.dirname(__dirname);
const commit = util.getVersion(REPO_ROOT);
const BUILD_ROOT = path.dirname(REPO_ROOT);
const WEB_FOLDER = path.join(REPO_ROOT, 'remote', 'web');
const noop = () => { return Promise.resolve(); };
const productionDependencies = deps.getProductionDependencies(WEB_FOLDER);
const nodeModules = Object.keys(product.dependencies || {})
.concat(_.uniq(productionDependencies.map(d => d.name)));
const vscodeWebResources = [
// Workbench
'out-build/vs/{base,platform,editor,workbench}/**/*.{svg,png,html}',
'out-build/vs/base/browser/ui/octiconLabel/octicons/**',
'out-build/vs/**/markdown.css',
// Webview
'out-build/vs/workbench/contrib/webview/browser/pre/*.js',
// Excludes
'!out-build/vs/**/{node,electron-browser,electron-main}/**',
'!out-build/vs/editor/standalone/**',
'!out-build/vs/workbench/**/*-tb.png',
'!**/test/**'
];
const buildfile = require('../src/buildfile');
const vscodeWebEntryPoints = [
buildfile.workbenchWeb,
buildfile.serviceWorker,
buildfile.keyboardMaps,
buildfile.base
];
const optimizeVSCodeWebTask = task.define('optimize-vscode-web', task.series(
util.rimraf('out-vscode-web'),
common.optimizeTask({
src: 'out-build',
entryPoints: _.flatten(vscodeWebEntryPoints),
otherSources: [],
resources: vscodeWebResources,
loaderConfig: common.loaderConfig(nodeModules),
out: 'out-vscode-web',
bundleInfo: undefined
})
));
const minifyVSCodeWebTask = task.define('minify-vscode-web', task.series(
optimizeVSCodeWebTask,
util.rimraf('out-vscode-web-min'),
common.minifyTask('out-vscode-web', `https://ticino.blob.core.windows.net/sourcemaps/${commit}/core`)
));
gulp.task(minifyVSCodeWebTask);
function packageTask(sourceFolderName, destinationFolderName) {
const destination = path.join(BUILD_ROOT, destinationFolderName);
return () => {
const src = gulp.src(sourceFolderName + '/**', { base: '.' })
.pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + sourceFolderName), 'out'); }))
.pipe(filter(['**', '!**/*.js.map']));
const sources = es.merge(src);
let version = packageJson.version;
const quality = product.quality;
if (quality && quality !== 'stable') {
version += '-' + quality;
}
const name = product.nameShort;
const packageJsonStream = gulp.src(['remote/web/package.json'], { base: 'remote/web' })
.pipe(json({ name, version }));
const date = new Date().toISOString();
const productJsonStream = gulp.src(['product.json'], { base: '.' })
.pipe(json({ commit, date }));
const license = gulp.src(['remote/LICENSE'], { base: 'remote' });
const dependenciesSrc = _.flatten(productionDependencies.map(d => path.relative(REPO_ROOT, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!${d}/.bin/**`]));
const deps = gulp.src(dependenciesSrc, { base: 'remote/web', dot: true })
.pipe(filter(['**', '!**/package-lock.json']))
.pipe(util.cleanNodeModules(path.join(__dirname, '.nativeignore')));
const favicon = gulp.src('resources/server/favicon.ico', { base: 'resources/server' });
let all = es.merge(
packageJsonStream,
productJsonStream,
license,
sources,
deps,
favicon
);
let result = all
.pipe(util.skipDirectories())
.pipe(util.fixWin32DirectoryPermissions());
return result.pipe(vfs.dest(destination));
};
}
const dashed = (str) => (str ? `-${str}` : ``);
['', 'min'].forEach(minified => {
const sourceFolderName = `out-vscode-web${dashed(minified)}`;
const destinationFolderName = `vscode-web`;
const vscodeWebTaskCI = task.define(`vscode-web${dashed(minified)}-ci`, task.series(
minified ? minifyVSCodeWebTask : optimizeVSCodeWebTask,
util.rimraf(path.join(BUILD_ROOT, destinationFolderName)),
packageTask(sourceFolderName, destinationFolderName)
));
gulp.task(vscodeWebTaskCI);
const vscodeWebTask = task.define(`vscode-web${dashed(minified)}`, task.series(
compileBuildTask,
vscodeWebTaskCI
));
gulp.task(vscodeWebTask);
});
gulp.task('minify-vscode-web', noop);
gulp.task('vscode-web', noop);
gulp.task('vscode-web-min', noop);
gulp.task('vscode-web-ci', noop);
gulp.task('vscode-web-min-ci', noop);

View File

@@ -19,7 +19,8 @@ const ansiColors = require('ansi-colors');
const root = path.dirname(path.dirname(__dirname));
// {{SQL CARBON EDIT}}
const builtInExtensions = require('../builtInExtensions-insiders.json');
const quality = process.env['VSCODE_QUALITY'];
const builtInExtensions = quality && quality === 'stable' ? require('../builtInExtensions.json') : require('../builtInExtensions-insiders.json');
// {{SQL CARBON EDIT}} - END
const controlFilePath = path.join(os.homedir(), '.vscode-oss-dev', 'extensions', 'control.json');

View File

@@ -11,7 +11,6 @@ const bom = require("gulp-bom");
const sourcemaps = require("gulp-sourcemaps");
const tsb = require("gulp-tsb");
const path = require("path");
const _ = require("underscore");
const monacodts = require("../monaco/api");
const nls = require("./nls");
const reporter_1 = require("./reporter");
@@ -22,14 +21,7 @@ const watch = require('./watch');
const reporter = reporter_1.createReporter();
function getTypeScriptCompilerOptions(src) {
const rootDir = path.join(__dirname, `../../${src}`);
const tsconfig = require(`../../${src}/tsconfig.json`);
let options;
if (tsconfig.extends) {
options = Object.assign({}, require(path.join(rootDir, tsconfig.extends)).compilerOptions, tsconfig.compilerOptions);
}
else {
options = tsconfig.compilerOptions;
}
let options = {};
options.verbose = false;
options.sourceMap = true;
if (process.env['VSCODE_NO_SOURCEMAP']) { // To be used by developers in a hurry
@@ -38,15 +30,14 @@ function getTypeScriptCompilerOptions(src) {
options.rootDir = rootDir;
options.baseUrl = rootDir;
options.sourceRoot = util.toFileUri(rootDir);
options.newLine = /\r\n/.test(fs.readFileSync(__filename, 'utf8')) ? 'CRLF' : 'LF';
options.newLine = /\r\n/.test(fs.readFileSync(__filename, 'utf8')) ? 0 : 1;
return options;
}
function createCompile(src, build, emitError) {
const opts = _.clone(getTypeScriptCompilerOptions(src));
opts.inlineSources = !!build;
opts.noFilesystemLookup = true;
const ts = tsb.create(opts, true, undefined, err => reporter(err.toString()));
return function (token) {
const projectPath = path.join(__dirname, '../../', src, 'tsconfig.json');
const overrideOptions = Object.assign(Object.assign({}, getTypeScriptCompilerOptions(src)), { inlineSources: Boolean(build) });
const compilation = tsb.create(projectPath, overrideOptions, false, err => reporter(err));
function pipeline(token) {
const utf8Filter = util.filter(data => /(\/|\\)test(\/|\\).*utf8/.test(data.path));
const tsFilter = util.filter(data => /\.ts$/.test(data.path));
const noDeclarationsFilter = util.filter(data => !(/\.d\.ts$/.test(data.path)));
@@ -57,30 +48,28 @@ function createCompile(src, build, emitError) {
.pipe(utf8Filter.restore)
.pipe(tsFilter)
.pipe(util.loadSourcemaps())
.pipe(ts(token))
.pipe(compilation(token))
.pipe(noDeclarationsFilter)
.pipe(build ? nls() : es.through())
.pipe(noDeclarationsFilter.restore)
.pipe(sourcemaps.write('.', {
addComment: false,
includeContent: !!build,
sourceRoot: opts.sourceRoot
sourceRoot: overrideOptions.sourceRoot
}))
.pipe(tsFilter.restore)
.pipe(reporter.end(!!emitError));
return es.duplex(input, output);
}
pipeline.tsProjectSrc = () => {
return compilation.src({ base: src });
};
return pipeline;
}
const typesDts = [
'node_modules/typescript/lib/*.d.ts',
'node_modules/@types/**/*.d.ts',
'!node_modules/@types/webpack/**/*',
'!node_modules/@types/uglify-js/**/*',
];
function compileTask(src, out, build) {
return function () {
const compile = createCompile(src, build, true);
const srcPipe = es.merge(gulp.src(`${src}/**`, { base: `${src}` }), gulp.src(typesDts));
const srcPipe = gulp.src(`${src}/**`, { base: `${src}` });
let generator = new MonacoGenerator(false);
if (src === 'src') {
generator.execute();
@@ -95,8 +84,8 @@ exports.compileTask = compileTask;
function watchTask(out, build) {
return function () {
const compile = createCompile('src', build);
const src = es.merge(gulp.src('src/**', { base: 'src' }), gulp.src(typesDts));
const watchSrc = watch('src/**', { base: 'src' });
const src = gulp.src('src/**', { base: 'src' });
const watchSrc = watch('src/**', { base: 'src', readDelay: 200 });
let generator = new MonacoGenerator(true);
generator.execute();
return watchSrc

View File

@@ -12,27 +12,21 @@ import * as bom from 'gulp-bom';
import * as sourcemaps from 'gulp-sourcemaps';
import * as tsb from 'gulp-tsb';
import * as path from 'path';
import * as _ from 'underscore';
import * as monacodts from '../monaco/api';
import * as nls from './nls';
import { createReporter } from './reporter';
import * as util from './util';
import * as fancyLog from 'fancy-log';
import * as ansiColors from 'ansi-colors';
import ts = require('typescript');
const watch = require('./watch');
const reporter = createReporter();
function getTypeScriptCompilerOptions(src: string) {
function getTypeScriptCompilerOptions(src: string): ts.CompilerOptions {
const rootDir = path.join(__dirname, `../../${src}`);
const tsconfig = require(`../../${src}/tsconfig.json`);
let options: { [key: string]: any };
if (tsconfig.extends) {
options = Object.assign({}, require(path.join(rootDir, tsconfig.extends)).compilerOptions, tsconfig.compilerOptions);
} else {
options = tsconfig.compilerOptions;
}
let options: ts.CompilerOptions = {};
options.verbose = false;
options.sourceMap = true;
if (process.env['VSCODE_NO_SOURCEMAP']) { // To be used by developers in a hurry
@@ -41,18 +35,17 @@ function getTypeScriptCompilerOptions(src: string) {
options.rootDir = rootDir;
options.baseUrl = rootDir;
options.sourceRoot = util.toFileUri(rootDir);
options.newLine = /\r\n/.test(fs.readFileSync(__filename, 'utf8')) ? 'CRLF' : 'LF';
options.newLine = /\r\n/.test(fs.readFileSync(__filename, 'utf8')) ? 0 : 1;
return options;
}
function createCompile(src: string, build: boolean, emitError?: boolean): (token?: util.ICancellationToken) => NodeJS.ReadWriteStream {
const opts = _.clone(getTypeScriptCompilerOptions(src));
opts.inlineSources = !!build;
opts.noFilesystemLookup = true;
function createCompile(src: string, build: boolean, emitError?: boolean) {
const projectPath = path.join(__dirname, '../../', src, 'tsconfig.json');
const overrideOptions = { ...getTypeScriptCompilerOptions(src), inlineSources: Boolean(build) };
const ts = tsb.create(opts, true, undefined, err => reporter(err.toString()));
const compilation = tsb.create(projectPath, overrideOptions, false, err => reporter(err));
return function (token?: util.ICancellationToken) {
function pipeline(token?: util.ICancellationToken) {
const utf8Filter = util.filter(data => /(\/|\\)test(\/|\\).*utf8/.test(data.path));
const tsFilter = util.filter(data => /\.ts$/.test(data.path));
@@ -65,39 +58,31 @@ function createCompile(src: string, build: boolean, emitError?: boolean): (token
.pipe(utf8Filter.restore)
.pipe(tsFilter)
.pipe(util.loadSourcemaps())
.pipe(ts(token))
.pipe(compilation(token))
.pipe(noDeclarationsFilter)
.pipe(build ? nls() : es.through())
.pipe(noDeclarationsFilter.restore)
.pipe(sourcemaps.write('.', {
addComment: false,
includeContent: !!build,
sourceRoot: opts.sourceRoot
sourceRoot: overrideOptions.sourceRoot
}))
.pipe(tsFilter.restore)
.pipe(reporter.end(!!emitError));
return es.duplex(input, output);
}
pipeline.tsProjectSrc = () => {
return compilation.src({ base: src });
};
return pipeline;
}
const typesDts = [
'node_modules/typescript/lib/*.d.ts',
'node_modules/@types/**/*.d.ts',
'!node_modules/@types/webpack/**/*',
'!node_modules/@types/uglify-js/**/*',
];
export function compileTask(src: string, out: string, build: boolean): () => NodeJS.ReadWriteStream {
return function () {
const compile = createCompile(src, build, true);
const srcPipe = es.merge(
gulp.src(`${src}/**`, { base: `${src}` }),
gulp.src(typesDts),
);
const srcPipe = gulp.src(`${src}/**`, { base: `${src}` });
let generator = new MonacoGenerator(false);
if (src === 'src') {
generator.execute();
@@ -115,11 +100,8 @@ export function watchTask(out: string, build: boolean): () => NodeJS.ReadWriteSt
return function () {
const compile = createCompile('src', build);
const src = es.merge(
gulp.src('src/**', { base: 'src' }),
gulp.src(typesDts),
);
const watchSrc = watch('src/**', { base: 'src' });
const src = gulp.src('src/**', { base: 'src' });
const watchSrc = watch('src/**', { base: 'src', readDelay: 200 });
let generator = new MonacoGenerator(true);
generator.execute();

View File

@@ -2,29 +2,88 @@
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
const fs = require('fs');
const path = require('path');
Object.defineProperty(exports, "__esModule", { value: true });
const fs = require("fs");
const path = require("path");
const vfs = require("vinyl-fs");
const filter = require("gulp-filter");
const json = require("gulp-json-editor");
const _ = require("underscore");
const util = require("./util");
const electron = require('gulp-atom-electron');
const root = path.dirname(path.dirname(__dirname));
const product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8'));
const commit = util.getVersion(root);
function getElectronVersion() {
const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8');
// @ts-ignore
const target = /^target "(.*)"$/m.exec(yarnrc)[1];
return target;
const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8');
const target = /^target "(.*)"$/m.exec(yarnrc)[1];
return target;
}
exports.getElectronVersion = getElectronVersion;
const darwinCreditsTemplate = product.darwinCredits && _.template(fs.readFileSync(path.join(root, product.darwinCredits), 'utf8'));
function darwinBundleDocumentType(extensions, icon) {
return {
name: product.nameLong + ' document',
role: 'Editor',
ostypes: ["TEXT", "utxt", "TUTX", "****"],
extensions: extensions,
iconFile: icon
};
}
exports.config = {
version: getElectronVersion(),
productAppName: product.nameLong,
companyName: 'Microsoft Corporation',
copyright: 'Copyright (C) 2019 Microsoft. All rights reserved',
darwinIcon: 'resources/darwin/code.icns',
darwinBundleIdentifier: product.darwinBundleIdentifier,
darwinApplicationCategoryType: 'public.app-category.developer-tools',
darwinHelpBookFolder: 'VS Code HelpBook',
darwinHelpBookName: 'VS Code HelpBook',
darwinBundleDocumentTypes: [
darwinBundleDocumentType(["csv", "json", "sqlplan", "sql", "xml"], 'resources/darwin/code_file.icns'),
],
darwinBundleURLTypes: [{
role: 'Viewer',
name: product.nameLong,
urlSchemes: [product.urlProtocol]
}],
darwinForceDarkModeSupport: true,
darwinCredits: darwinCreditsTemplate ? Buffer.from(darwinCreditsTemplate({ commit: commit, date: new Date().toISOString() })) : undefined,
linuxExecutableName: product.applicationName,
winIcon: 'resources/win32/code.ico',
token: process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined,
repo: product.electronRepository || undefined
};
function getElectron(arch) {
return () => {
const electronOpts = _.extend({}, exports.config, {
platform: process.platform,
arch,
ffmpegChromium: true,
keepDefaultApp: true
});
return vfs.src('package.json')
.pipe(json({ name: product.nameShort }))
.pipe(electron(electronOpts))
.pipe(filter(['**', '!**/app/package.json']))
.pipe(vfs.dest('.build/electron'));
};
}
async function main(arch = process.arch) {
const version = getElectronVersion();
const electronPath = path.join(root, '.build', 'electron');
const versionFile = path.join(electronPath, 'version');
const isUpToDate = fs.existsSync(versionFile) && fs.readFileSync(versionFile, 'utf8') === `${version}`;
if (!isUpToDate) {
await util.rimraf(electronPath)();
await util.streamToPromise(getElectron(arch)());
}
}
module.exports.getElectronVersion = getElectronVersion;
// returns 0 if the right version of electron is in .build/electron
// @ts-ignore
if (require.main === module) {
const version = getElectronVersion();
const versionFile = path.join(root, '.build', 'electron', 'version');
const isUpToDate = fs.existsSync(versionFile) && fs.readFileSync(versionFile, 'utf8') === `${version}`;
process.exit(isUpToDate ? 0 : 1);
main(process.argv[2]).catch(err => {
console.error(err);
process.exit(1);
});
}

100
build/lib/electron.ts Normal file
View File

@@ -0,0 +1,100 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
import * as fs from 'fs';
import * as path from 'path';
import * as vfs from 'vinyl-fs';
import * as filter from 'gulp-filter';
import * as json from 'gulp-json-editor';
import * as _ from 'underscore';
import * as util from './util';
const electron = require('gulp-atom-electron');
const root = path.dirname(path.dirname(__dirname));
const product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8'));
const commit = util.getVersion(root);
export function getElectronVersion(): string {
const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8');
const target = /^target "(.*)"$/m.exec(yarnrc)![1];
return target;
}
const darwinCreditsTemplate = product.darwinCredits && _.template(fs.readFileSync(path.join(root, product.darwinCredits), 'utf8'));
function darwinBundleDocumentType(extensions: string[], icon: string) {
return {
name: product.nameLong + ' document',
role: 'Editor',
ostypes: ["TEXT", "utxt", "TUTX", "****"],
extensions: extensions,
iconFile: icon
};
}
export const config = {
version: getElectronVersion(),
productAppName: product.nameLong,
companyName: 'Microsoft Corporation',
copyright: 'Copyright (C) 2019 Microsoft. All rights reserved',
darwinIcon: 'resources/darwin/code.icns',
darwinBundleIdentifier: product.darwinBundleIdentifier,
darwinApplicationCategoryType: 'public.app-category.developer-tools',
darwinHelpBookFolder: 'VS Code HelpBook',
darwinHelpBookName: 'VS Code HelpBook',
darwinBundleDocumentTypes: [
darwinBundleDocumentType(["csv", "json", "sqlplan", "sql", "xml"], 'resources/darwin/code_file.icns'),
],
darwinBundleURLTypes: [{
role: 'Viewer',
name: product.nameLong,
urlSchemes: [product.urlProtocol]
}],
darwinForceDarkModeSupport: true,
darwinCredits: darwinCreditsTemplate ? Buffer.from(darwinCreditsTemplate({ commit: commit, date: new Date().toISOString() })) : undefined,
linuxExecutableName: product.applicationName,
winIcon: 'resources/win32/code.ico',
token: process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined,
repo: product.electronRepository || undefined
};
function getElectron(arch: string): () => NodeJS.ReadWriteStream {
return () => {
const electronOpts = _.extend({}, config, {
platform: process.platform,
arch,
ffmpegChromium: true,
keepDefaultApp: true
});
return vfs.src('package.json')
.pipe(json({ name: product.nameShort }))
.pipe(electron(electronOpts))
.pipe(filter(['**', '!**/app/package.json']))
.pipe(vfs.dest('.build/electron'));
};
}
async function main(arch = process.arch): Promise<void> {
const version = getElectronVersion();
const electronPath = path.join(root, '.build', 'electron');
const versionFile = path.join(electronPath, 'version');
const isUpToDate = fs.existsSync(versionFile) && fs.readFileSync(versionFile, 'utf8') === `${version}`;
if (!isUpToDate) {
await util.rimraf(electronPath)();
await util.streamToPromise(getElectron(arch)());
}
}
if (require.main === module) {
main(process.argv[2]).catch(err => {
console.error(err);
process.exit(1);
});
}

View File

@@ -29,12 +29,18 @@ const commit = util.getVersion(root);
const sourceMappingURLBase = `https://ticino.blob.core.windows.net/sourcemaps/${commit}`;
function fromLocal(extensionPath) {
const webpackFilename = path.join(extensionPath, 'extension.webpack.config.js');
if (fs.existsSync(webpackFilename)) {
return fromLocalWebpack(extensionPath);
}
else {
return fromLocalNormal(extensionPath);
}
const input = fs.existsSync(webpackFilename)
? fromLocalWebpack(extensionPath)
: fromLocalNormal(extensionPath);
const tmLanguageJsonFilter = filter('**/*.tmLanguage.json', { restore: true });
return input
.pipe(tmLanguageJsonFilter)
.pipe(buffer())
.pipe(es.mapSync((f) => {
f.contents = Buffer.from(JSON.stringify(JSON.parse(f.contents.toString('utf8'))));
return f;
}))
.pipe(tmLanguageJsonFilter.restore);
}
function fromLocalWebpack(extensionPath) {
const result = es.through();
@@ -95,7 +101,7 @@ function fromLocalWebpack(extensionPath) {
result.emit('error', compilation.warnings.join('\n'));
}
};
const webpackConfig = Object.assign({}, require(webpackConfigPath), { mode: 'production' });
const webpackConfig = Object.assign(Object.assign({}, require(webpackConfigPath)), { mode: 'production' });
const relativeOutputPath = path.relative(extensionPath, webpackConfig.output.path);
return webpackGulp(webpackConfig, webpack, webpackDone)
.pipe(es.through(function (data) {
@@ -193,13 +199,10 @@ const sqlBuiltInExtensions = [
'admin-pack',
'dacpac',
'schema-compare',
'cms'
'cms',
'query-history',
'liveshare'
];
// make resource deployment and BDC extension only available in insiders
if (process.env['VSCODE_QUALITY'] === 'stable') {
sqlBuiltInExtensions.push('resource-deployment');
sqlBuiltInExtensions.push('big-data-cluster');
}
const builtInExtensions = process.env['VSCODE_QUALITY'] === 'stable' ? require('../builtInExtensions.json') : require('../builtInExtensions-insiders.json');
// {{SQL CARBON EDIT}} - End
function packageLocalExtensionsStream() {

View File

@@ -30,11 +30,20 @@ const sourceMappingURLBase = `https://ticino.blob.core.windows.net/sourcemaps/${
function fromLocal(extensionPath: string): Stream {
const webpackFilename = path.join(extensionPath, 'extension.webpack.config.js');
if (fs.existsSync(webpackFilename)) {
return fromLocalWebpack(extensionPath);
} else {
return fromLocalNormal(extensionPath);
}
const input = fs.existsSync(webpackFilename)
? fromLocalWebpack(extensionPath)
: fromLocalNormal(extensionPath);
const tmLanguageJsonFilter = filter('**/*.tmLanguage.json', { restore: true });
return input
.pipe(tmLanguageJsonFilter)
.pipe(buffer())
.pipe(es.mapSync((f: File) => {
f.contents = Buffer.from(JSON.stringify(JSON.parse(f.contents.toString('utf8'))));
return f;
}))
.pipe(tmLanguageJsonFilter.restore);
}
function fromLocalWebpack(extensionPath: string): Stream {
@@ -226,16 +235,11 @@ const sqlBuiltInExtensions = [
'admin-pack',
'dacpac',
'schema-compare',
'cms'
'cms',
'query-history',
'liveshare'
];
// make resource deployment and BDC extension only available in insiders
if (process.env['VSCODE_QUALITY'] === 'stable') {
sqlBuiltInExtensions.push('resource-deployment');
sqlBuiltInExtensions.push('big-data-cluster');
}
interface IBuiltInExtension {
name: string;
version: string;
@@ -346,4 +350,4 @@ export function packageExtensionTask(extensionName: string, platform: string, ar
return result.pipe(vfs.dest(destination));
};
}
// {{SQL CARBON EDIT}} - End
// {{SQL CARBON EDIT}} - End

View File

@@ -176,6 +176,7 @@ class XLF {
this.buffer.push(line.toString());
}
}
exports.XLF = XLF;
XLF.parsePseudo = function (xlfString) {
return new Promise((resolve) => {
let parser = new xml2js.Parser();
@@ -248,7 +249,6 @@ XLF.parse = function (xlfString) {
});
});
};
exports.XLF = XLF;
class Limiter {
constructor(maxDegreeOfParalellism) {
this.maxDegreeOfParalellism = maxDegreeOfParalellism;
@@ -586,7 +586,7 @@ function createXlfFilesForExtensions() {
}
return _xlf;
}
gulp.src([`./extensions/${extensionName}/package.nls.json`, `./extensions/${extensionName}/**/nls.metadata.json`], { allowEmpty: true }).pipe(event_stream_1.through(function (file) {
gulp.src([`.build/extensions/${extensionName}/package.nls.json`, `.build/extensions/${extensionName}/**/nls.metadata.json`], { allowEmpty: true }).pipe(event_stream_1.through(function (file) {
if (file.isBuffer()) {
const buffer = file.contents;
const basename = path.basename(file.path);
@@ -609,7 +609,7 @@ function createXlfFilesForExtensions() {
}
else if (basename === 'nls.metadata.json') {
const json = JSON.parse(buffer.toString('utf8'));
const relPath = path.relative(`./extensions/${extensionName}`, path.dirname(file.path));
const relPath = path.relative(`.build/extensions/${extensionName}`, path.dirname(file.path));
for (let file in json) {
const fileContent = json[file];
getXlf().addFile(`extensions/${extensionName}/${relPath}/${file}`, fileContent.keys, fileContent.messages);
@@ -912,8 +912,8 @@ function pullCoreAndExtensionsXlfFiles(apiHostname, username, password, language
_coreAndExtensionResources.push(...json.workbench);
// extensions
let extensionsToLocalize = Object.create(null);
glob.sync('./extensions/**/*.nls.json').forEach(extension => extensionsToLocalize[extension.split('/')[2]] = true);
glob.sync('./extensions/*/node_modules/vscode-nls').forEach(extension => extensionsToLocalize[extension.split('/')[2]] = true);
glob.sync('.build/extensions/**/*.nls.json').forEach(extension => extensionsToLocalize[extension.split('/')[2]] = true);
glob.sync('.build/extensions/*/node_modules/vscode-nls').forEach(extension => extensionsToLocalize[extension.split('/')[2]] = true);
Object.keys(extensionsToLocalize).forEach(extension => {
_coreAndExtensionResources.push({ name: extension, project: extensionsProject });
});
@@ -1086,7 +1086,7 @@ function prepareI18nPackFiles(externalExtensions, resultingTranslationPaths, pse
resultingTranslationPaths.push({ id: 'vscode', resourceName: 'main.i18n.json' });
this.queue(translatedMainFile);
for (let extension in extensionsPacks) {
const translatedExtFile = createI18nFile(`./extensions/${extension}`, extensionsPacks[extension]);
const translatedExtFile = createI18nFile(`extensions/${extension}`, extensionsPacks[extension]);
this.queue(translatedExtFile);
const externalExtensionId = externalExtensions[extension];
if (externalExtensionId) {

View File

@@ -106,6 +106,10 @@
"name": "vs/workbench/contrib/quickopen",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/userData",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/remote",
"project": "vscode-workbench"
@@ -170,6 +174,10 @@
"name": "vs/workbench/contrib/webview",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/customEditor",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/welcome",
"project": "vscode-workbench"
@@ -178,6 +186,10 @@
"name": "vs/workbench/contrib/outline",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/userDataSync",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/actions",
"project": "vscode-workbench"
@@ -230,6 +242,10 @@
"name": "vs/workbench/services/keybinding",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/lifecycle",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/mode",
"project": "vscode-workbench"
@@ -255,7 +271,7 @@
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/workspace",
"name": "vs/workbench/services/workspaces",
"project": "vscode-workbench"
},
{
@@ -269,6 +285,14 @@
{
"name": "vs/workbench/services/preferences",
"project": "vscode-preferences"
},
{
"name": "vs/workbench/services/notification",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/userData",
"project": "vscode-workbench"
}
]
}

View File

@@ -709,7 +709,7 @@ export function createXlfFilesForExtensions(): ThroughStream {
}
return _xlf;
}
gulp.src([`./extensions/${extensionName}/package.nls.json`, `./extensions/${extensionName}/**/nls.metadata.json`], { allowEmpty: true }).pipe(through(function (file: File) {
gulp.src([`.build/extensions/${extensionName}/package.nls.json`, `.build/extensions/${extensionName}/**/nls.metadata.json`], { allowEmpty: true }).pipe(through(function (file: File) {
if (file.isBuffer()) {
const buffer: Buffer = file.contents as Buffer;
const basename = path.basename(file.path);
@@ -729,7 +729,7 @@ export function createXlfFilesForExtensions(): ThroughStream {
getXlf().addFile(`extensions/${extensionName}/package`, keys, messages);
} else if (basename === 'nls.metadata.json') {
const json: BundledExtensionFormat = JSON.parse(buffer.toString('utf8'));
const relPath = path.relative(`./extensions/${extensionName}`, path.dirname(file.path));
const relPath = path.relative(`.build/extensions/${extensionName}`, path.dirname(file.path));
for (let file in json) {
const fileContent = json[file];
getXlf().addFile(`extensions/${extensionName}/${relPath}/${file}`, fileContent.keys, fileContent.messages);
@@ -1053,8 +1053,8 @@ export function pullCoreAndExtensionsXlfFiles(apiHostname: string, username: str
// extensions
let extensionsToLocalize = Object.create(null);
glob.sync('./extensions/**/*.nls.json').forEach(extension => extensionsToLocalize[extension.split('/')[2]] = true);
glob.sync('./extensions/*/node_modules/vscode-nls').forEach(extension => extensionsToLocalize[extension.split('/')[2]] = true);
glob.sync('.build/extensions/**/*.nls.json').forEach(extension => extensionsToLocalize[extension.split('/')[2]] = true);
glob.sync('.build/extensions/*/node_modules/vscode-nls').forEach(extension => extensionsToLocalize[extension.split('/')[2]] = true);
Object.keys(extensionsToLocalize).forEach(extension => {
_coreAndExtensionResources.push({ name: extension, project: extensionsProject });
@@ -1253,7 +1253,7 @@ export function prepareI18nPackFiles(externalExtensions: Map<string>, resultingT
this.queue(translatedMainFile);
for (let extension in extensionsPacks) {
const translatedExtFile = createI18nFile(`./extensions/${extension}`, extensionsPacks[extension]);
const translatedExtFile = createI18nFile(`extensions/${extension}`, extensionsPacks[extension]);
this.queue(translatedExtFile);
const externalExtensionId = externalExtensions[extension];

View File

@@ -5,6 +5,7 @@
'use strict';
Object.defineProperty(exports, "__esModule", { value: true });
const es = require("event-stream");
const fs = require("fs");
const gulp = require("gulp");
const concat = require("gulp-concat");
const minifyCSS = require("gulp-cssnano");
@@ -17,7 +18,7 @@ const fancyLog = require("fancy-log");
const ansiColors = require("ansi-colors");
const path = require("path");
const pump = require("pump");
const uglifyes = require("uglify-es");
const terser = require("terser");
const VinylFile = require("vinyl");
const bundle = require("./bundle");
const i18n_1 = require("./i18n");
@@ -134,6 +135,14 @@ function optimizeTask(opts) {
if (err || !result) {
return bundlesStream.emit('error', JSON.stringify(err));
}
if (opts.inlineAmdImages) {
try {
result = inlineAmdImages(src, result);
}
catch (err) {
return bundlesStream.emit('error', JSON.stringify(err));
}
}
toBundleStream(src, bundledFileHeader, result.files).pipe(bundlesStream);
// Remove css inlined resources
const filteredResources = resources.slice();
@@ -169,6 +178,39 @@ function optimizeTask(opts) {
};
}
exports.optimizeTask = optimizeTask;
function inlineAmdImages(src, result) {
for (const outputFile of result.files) {
for (const sourceFile of outputFile.sources) {
if (sourceFile.path && /\.js$/.test(sourceFile.path)) {
sourceFile.contents = sourceFile.contents.replace(/\([^.]+\.registerAndGetAmdImageURL\(([^)]+)\)\)/g, (_, m0) => {
let imagePath = m0;
// remove `` or ''
if ((imagePath.charAt(0) === '`' && imagePath.charAt(imagePath.length - 1) === '`')
|| (imagePath.charAt(0) === '\'' && imagePath.charAt(imagePath.length - 1) === '\'')) {
imagePath = imagePath.substr(1, imagePath.length - 2);
}
if (!/\.(png|svg)$/.test(imagePath)) {
console.log(`original: ${_}`);
return _;
}
const repoLocation = path.join(src, imagePath);
const absoluteLocation = path.join(REPO_ROOT_PATH, repoLocation);
if (!fs.existsSync(absoluteLocation)) {
const message = `Invalid amd image url in file ${sourceFile.path}: ${imagePath}`;
console.log(message);
throw new Error(message);
}
const fileContents = fs.readFileSync(absoluteLocation);
const mime = /\.svg$/.test(imagePath) ? 'image/svg+xml' : 'image/png';
// Mark the file as inlined so we don't ship it by itself
result.cssInlinedResources.push(repoLocation);
return `("data:${mime};base64,${fileContents.toString('base64')}")`;
});
}
}
}
return result;
}
/**
* Wrap around uglify and allow the preserveComments function
* to have a file "context" to include our copyright only once per file.
@@ -199,7 +241,7 @@ function uglifyWithCopyrights() {
return false;
};
};
const minify = composer(uglifyes);
const minify = composer(terser);
const input = es.through();
const output = input
.pipe(flatmap((stream, f) => {

View File

@@ -6,6 +6,7 @@
'use strict';
import * as es from 'event-stream';
import * as fs from 'fs';
import * as gulp from 'gulp';
import * as concat from 'gulp-concat';
import * as minifyCSS from 'gulp-cssnano';
@@ -19,7 +20,7 @@ import * as ansiColors from 'ansi-colors';
import * as path from 'path';
import * as pump from 'pump';
import * as sm from 'source-map';
import * as uglifyes from 'uglify-es';
import * as terser from 'terser';
import * as VinylFile from 'vinyl';
import * as bundle from './bundle';
import { Language, processNlsFiles } from './i18n';
@@ -161,6 +162,10 @@ export interface IOptimizeTaskOpts {
* (emit bundleInfo.json file)
*/
bundleInfo: boolean;
/**
* replace calls to `registerAndGetAmdImageURL` with data uris
*/
inlineAmdImages: boolean;
/**
* (out folder name)
*/
@@ -194,6 +199,14 @@ export function optimizeTask(opts: IOptimizeTaskOpts): () => NodeJS.ReadWriteStr
bundle.bundle(entryPoints, loaderConfig, function (err, result) {
if (err || !result) { return bundlesStream.emit('error', JSON.stringify(err)); }
if (opts.inlineAmdImages) {
try {
result = inlineAmdImages(src, result);
} catch (err) {
return bundlesStream.emit('error', JSON.stringify(err));
}
}
toBundleStream(src, bundledFileHeader, result.files).pipe(bundlesStream);
// Remove css inlined resources
@@ -238,6 +251,42 @@ export function optimizeTask(opts: IOptimizeTaskOpts): () => NodeJS.ReadWriteStr
};
}
function inlineAmdImages(src: string, result: bundle.IBundleResult): bundle.IBundleResult {
for (const outputFile of result.files) {
for (const sourceFile of outputFile.sources) {
if (sourceFile.path && /\.js$/.test(sourceFile.path)) {
sourceFile.contents = sourceFile.contents.replace(/\([^.]+\.registerAndGetAmdImageURL\(([^)]+)\)\)/g, (_, m0) => {
let imagePath = m0;
// remove `` or ''
if ((imagePath.charAt(0) === '`' && imagePath.charAt(imagePath.length - 1) === '`')
|| (imagePath.charAt(0) === '\'' && imagePath.charAt(imagePath.length - 1) === '\'')) {
imagePath = imagePath.substr(1, imagePath.length - 2);
}
if (!/\.(png|svg)$/.test(imagePath)) {
console.log(`original: ${_}`);
return _;
}
const repoLocation = path.join(src, imagePath);
const absoluteLocation = path.join(REPO_ROOT_PATH, repoLocation);
if (!fs.existsSync(absoluteLocation)) {
const message = `Invalid amd image url in file ${sourceFile.path}: ${imagePath}`;
console.log(message);
throw new Error(message);
}
const fileContents = fs.readFileSync(absoluteLocation);
const mime = /\.svg$/.test(imagePath) ? 'image/svg+xml' : 'image/png';
// Mark the file as inlined so we don't ship it by itself
result.cssInlinedResources.push(repoLocation);
return `("data:${mime};base64,${fileContents.toString('base64')}")`;
});
}
}
}
return result;
}
declare class FileWithCopyright extends VinylFile {
public __hasOurCopyright: boolean;
}
@@ -275,7 +324,7 @@ function uglifyWithCopyrights(): NodeJS.ReadWriteStream {
};
};
const minify = (composer as any)(uglifyes);
const minify = (composer as any)(terser);
const input = es.through();
const output = input
.pipe(flatmap((stream, f) => {

103
build/lib/rollup.js Normal file
View File

@@ -0,0 +1,103 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
const fs = require("fs");
const rollup = require("rollup");
const path = require("path");
// getting around stupid import rules
const nodeResolve = require('rollup-plugin-node-resolve');
const commonjs = require('rollup-plugin-commonjs');
async function rollupModule(options) {
const moduleName = options.moduleName;
try {
const inputFile = options.inputFile;
const outputDirectory = options.outputDirectory;
await fs.promises.mkdir(outputDirectory, {
recursive: true
});
const outputFileName = options.outputFileName;
const outputMapName = `${outputFileName}.map`;
const external = options.external || [];
const outputFilePath = path.resolve(outputDirectory, outputFileName);
const outputMapPath = path.resolve(outputDirectory, outputMapName);
const bundle = await rollup.rollup({
input: inputFile,
plugins: [
nodeResolve(),
commonjs(),
],
external,
});
const generatedBundle = await bundle.generate({
name: moduleName,
format: 'umd',
sourcemap: true
});
const result = generatedBundle.output[0];
result.code = result.code + '\n//# sourceMappingURL=' + path.basename(outputMapName);
await fs.promises.writeFile(outputFilePath, result.code);
await fs.promises.writeFile(outputMapPath, result.map);
return {
name: moduleName,
result: true
};
}
catch (ex) {
return {
name: moduleName,
result: false,
exception: ex
};
}
}
function rollupAngularSlickgrid(root) {
return new Promise(async (resolve, reject) => {
const result = await rollupModule({
moduleName: 'angular2-slickgrid',
inputFile: path.resolve(root, 'node_modules', 'angular2-slickgrid', 'out', 'index.js'),
outputDirectory: path.resolve(root, 'node_modules', 'angular2-slickgrid', 'out', 'bundles'),
outputFileName: 'angular2-slickgrid.umd.js'
});
if (!result.result) {
return reject(`angular2-slickgrid failed to bundle - ${result.exception}`);
}
resolve();
});
}
exports.rollupAngularSlickgrid = rollupAngularSlickgrid;
function rollupAngular(root) {
return new Promise(async (resolve, reject) => {
const modules = ['core', 'animations', 'common', 'compiler', 'forms', 'platform-browser', 'platform-browser-dynamic', 'router'];
const tasks = modules.map((module) => {
return rollupModule({
moduleName: `ng.${module}`,
inputFile: path.resolve(root, 'node_modules', '@angular', module, '@angular', `${module}.es5.js`),
outputDirectory: path.resolve(root, 'node_modules', '@angular', module, 'bundles'),
outputFileName: `${module}.umd.js`,
external: modules.map(mn => `@angular/${mn}`)
});
});
// array of booleans
const x = await Promise.all(tasks);
const result = x.reduce((prev, current) => {
if (!current.result) {
prev.fails.push(current.name);
prev.exceptions.push(current.exception);
prev.result = false;
}
return prev;
}, {
fails: [],
exceptions: [],
result: true,
});
if (!result.result) {
return reject(`failures: ${result.fails} - exceptions: ${JSON.stringify(result.exceptions)}`);
}
resolve();
});
}
exports.rollupAngular = rollupAngular;

125
build/lib/rollup.ts Normal file
View File

@@ -0,0 +1,125 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as fs from 'fs';
import * as rollup from 'rollup';
import * as path from 'path';
// getting around stupid import rules
const nodeResolve = require('rollup-plugin-node-resolve');
const commonjs = require('rollup-plugin-commonjs');
export interface IRollupOptions {
moduleName: string;
inputFile: string;
outputDirectory: string;
outputFileName: string;
external?: string[];
}
async function rollupModule(options: IRollupOptions) {
const moduleName = options.moduleName;
try {
const inputFile = options.inputFile;
const outputDirectory = options.outputDirectory;
await fs.promises.mkdir(outputDirectory, {
recursive: true
});
const outputFileName = options.outputFileName;
const outputMapName = `${outputFileName}.map`;
const external = options.external || [];
const outputFilePath = path.resolve(outputDirectory, outputFileName);
const outputMapPath = path.resolve(outputDirectory, outputMapName);
const bundle = await rollup.rollup({
input: inputFile,
plugins: [
nodeResolve(),
commonjs(),
],
external,
});
const generatedBundle = await bundle.generate({
name: moduleName,
format: 'umd',
sourcemap: true
});
const result = generatedBundle.output[0];
result.code = result.code + '\n//# sourceMappingURL=' + path.basename(outputMapName);
await fs.promises.writeFile(outputFilePath, result.code);
await fs.promises.writeFile(outputMapPath, result.map);
return {
name: moduleName,
result: true
};
} catch (ex) {
return {
name: moduleName,
result: false,
exception: ex
};
}
}
export function rollupAngularSlickgrid(root: string): Promise<void> {
return new Promise(async (resolve, reject) => {
const result = await rollupModule({
moduleName: 'angular2-slickgrid',
inputFile: path.resolve(root, 'node_modules', 'angular2-slickgrid', 'out', 'index.js'),
outputDirectory: path.resolve(root, 'node_modules', 'angular2-slickgrid', 'out', 'bundles'),
outputFileName: 'angular2-slickgrid.umd.js'
});
if (!result.result) {
return reject(`angular2-slickgrid failed to bundle - ${result.exception}`);
}
resolve();
});
}
export function rollupAngular(root: string): Promise<void> {
return new Promise(async (resolve, reject) => {
const modules = ['core', 'animations', 'common', 'compiler', 'forms', 'platform-browser', 'platform-browser-dynamic', 'router'];
const tasks = modules.map((module) => {
return rollupModule({
moduleName: `ng.${module}`,
inputFile: path.resolve(root, 'node_modules', '@angular', module, '@angular', `${module}.es5.js`),
outputDirectory: path.resolve(root, 'node_modules', '@angular', module, 'bundles'),
outputFileName: `${module}.umd.js`,
external: modules.map(mn => `@angular/${mn}`)
});
});
// array of booleans
const x = await Promise.all(tasks);
const result = x.reduce<{ fails: string[]; exceptions: string[]; result: boolean }>((prev, current) => {
if (!current.result) {
prev.fails.push(current.name);
prev.exceptions.push(current.exception);
prev.result = false;
}
return prev;
}, {
fails: [],
exceptions: [],
result: true,
});
if (!result.result) {
return reject(`failures: ${result.fails} - exceptions: ${JSON.stringify(result.exceptions)}`);
}
resolve();
});
}

View File

@@ -130,7 +130,7 @@ function createESMSourcesAndResources2(options) {
write(getDestAbsoluteFilePath(file), JSON.stringify(tsConfig, null, '\t'));
continue;
}
if (/\.d\.ts$/.test(file) || /\.css$/.test(file) || /\.js$/.test(file)) {
if (/\.d\.ts$/.test(file) || /\.css$/.test(file) || /\.js$/.test(file) || /\.ttf$/.test(file)) {
// Transport the files directly
write(getDestAbsoluteFilePath(file), fs.readFileSync(path.join(SRC_FOLDER, file)));
continue;
@@ -250,35 +250,37 @@ function transportCSS(module, enqueue, write) {
const filename = path.join(SRC_DIR, module);
const fileContents = fs.readFileSync(filename).toString();
const inlineResources = 'base64'; // see https://github.com/Microsoft/monaco-editor/issues/148
const inlineResourcesLimit = 300000; //3000; // see https://github.com/Microsoft/monaco-editor/issues/336
const newContents = _rewriteOrInlineUrls(fileContents, inlineResources === 'base64', inlineResourcesLimit);
const newContents = _rewriteOrInlineUrls(fileContents, inlineResources === 'base64');
write(module, newContents);
return true;
function _rewriteOrInlineUrls(contents, forceBase64, inlineByteLimit) {
function _rewriteOrInlineUrls(contents, forceBase64) {
return _replaceURL(contents, (url) => {
let imagePath = path.join(path.dirname(module), url);
let fileContents = fs.readFileSync(path.join(SRC_DIR, imagePath));
if (fileContents.length < inlineByteLimit) {
const MIME = /\.svg$/.test(url) ? 'image/svg+xml' : 'image/png';
let DATA = ';base64,' + fileContents.toString('base64');
if (!forceBase64 && /\.svg$/.test(url)) {
// .svg => url encode as explained at https://codepen.io/tigt/post/optimizing-svgs-in-data-uris
let newText = fileContents.toString()
.replace(/"/g, '\'')
.replace(/</g, '%3C')
.replace(/>/g, '%3E')
.replace(/&/g, '%26')
.replace(/#/g, '%23')
.replace(/\s+/g, ' ');
let encodedData = ',' + newText;
if (encodedData.length < DATA.length) {
DATA = encodedData;
}
}
return '"data:' + MIME + DATA + '"';
const fontMatch = url.match(/^(.*).ttf\?(.*)$/);
if (fontMatch) {
const relativeFontPath = `${fontMatch[1]}.ttf`; // trim the query parameter
const fontPath = path.join(path.dirname(module), relativeFontPath);
enqueue(fontPath);
return relativeFontPath;
}
enqueue(imagePath);
return url;
const imagePath = path.join(path.dirname(module), url);
const fileContents = fs.readFileSync(path.join(SRC_DIR, imagePath));
const MIME = /\.svg$/.test(url) ? 'image/svg+xml' : 'image/png';
let DATA = ';base64,' + fileContents.toString('base64');
if (!forceBase64 && /\.svg$/.test(url)) {
// .svg => url encode as explained at https://codepen.io/tigt/post/optimizing-svgs-in-data-uris
let newText = fileContents.toString()
.replace(/"/g, '\'')
.replace(/</g, '%3C')
.replace(/>/g, '%3E')
.replace(/&/g, '%26')
.replace(/#/g, '%23')
.replace(/\s+/g, ' ');
let encodedData = ',' + newText;
if (encodedData.length < DATA.length) {
DATA = encodedData;
}
}
return '"data:' + MIME + DATA + '"';
});
}
function _replaceURL(contents, replacer) {

View File

@@ -154,7 +154,7 @@ export function createESMSourcesAndResources2(options: IOptions2): void {
continue;
}
if (/\.d\.ts$/.test(file) || /\.css$/.test(file) || /\.js$/.test(file)) {
if (/\.d\.ts$/.test(file) || /\.css$/.test(file) || /\.js$/.test(file) || /\.ttf$/.test(file)) {
// Transport the files directly
write(getDestAbsoluteFilePath(file), fs.readFileSync(path.join(SRC_FOLDER, file)));
continue;
@@ -290,40 +290,41 @@ function transportCSS(module: string, enqueue: (module: string) => void, write:
const filename = path.join(SRC_DIR, module);
const fileContents = fs.readFileSync(filename).toString();
const inlineResources = 'base64'; // see https://github.com/Microsoft/monaco-editor/issues/148
const inlineResourcesLimit = 300000;//3000; // see https://github.com/Microsoft/monaco-editor/issues/336
const newContents = _rewriteOrInlineUrls(fileContents, inlineResources === 'base64', inlineResourcesLimit);
const newContents = _rewriteOrInlineUrls(fileContents, inlineResources === 'base64');
write(module, newContents);
return true;
function _rewriteOrInlineUrls(contents: string, forceBase64: boolean, inlineByteLimit: number): string {
function _rewriteOrInlineUrls(contents: string, forceBase64: boolean): string {
return _replaceURL(contents, (url) => {
let imagePath = path.join(path.dirname(module), url);
let fileContents = fs.readFileSync(path.join(SRC_DIR, imagePath));
if (fileContents.length < inlineByteLimit) {
const MIME = /\.svg$/.test(url) ? 'image/svg+xml' : 'image/png';
let DATA = ';base64,' + fileContents.toString('base64');
if (!forceBase64 && /\.svg$/.test(url)) {
// .svg => url encode as explained at https://codepen.io/tigt/post/optimizing-svgs-in-data-uris
let newText = fileContents.toString()
.replace(/"/g, '\'')
.replace(/</g, '%3C')
.replace(/>/g, '%3E')
.replace(/&/g, '%26')
.replace(/#/g, '%23')
.replace(/\s+/g, ' ');
let encodedData = ',' + newText;
if (encodedData.length < DATA.length) {
DATA = encodedData;
}
}
return '"data:' + MIME + DATA + '"';
const fontMatch = url.match(/^(.*).ttf\?(.*)$/);
if (fontMatch) {
const relativeFontPath = `${fontMatch[1]}.ttf`; // trim the query parameter
const fontPath = path.join(path.dirname(module), relativeFontPath);
enqueue(fontPath);
return relativeFontPath;
}
enqueue(imagePath);
return url;
const imagePath = path.join(path.dirname(module), url);
const fileContents = fs.readFileSync(path.join(SRC_DIR, imagePath));
const MIME = /\.svg$/.test(url) ? 'image/svg+xml' : 'image/png';
let DATA = ';base64,' + fileContents.toString('base64');
if (!forceBase64 && /\.svg$/.test(url)) {
// .svg => url encode as explained at https://codepen.io/tigt/post/optimizing-svgs-in-data-uris
let newText = fileContents.toString()
.replace(/"/g, '\'')
.replace(/</g, '%3C')
.replace(/>/g, '%3E')
.replace(/&/g, '%26')
.replace(/#/g, '%23')
.replace(/\s+/g, ' ');
let encodedData = ',' + newText;
if (encodedData.length < DATA.length) {
DATA = encodedData;
}
}
return '"data:' + MIME + DATA + '"';
});
}

View File

@@ -0,0 +1,45 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
const Lint = require("tslint");
class AbstractGlobalsRuleWalker extends Lint.RuleWalker {
constructor(file, program, opts, _config) {
super(file, opts);
this.program = program;
this._config = _config;
}
visitIdentifier(node) {
if (this.getDisallowedGlobals().some(disallowedGlobal => disallowedGlobal === node.text)) {
if (this._config.allowed && this._config.allowed.some(allowed => allowed === node.text)) {
return; // override
}
const checker = this.program.getTypeChecker();
const symbol = checker.getSymbolAtLocation(node);
if (symbol) {
const declarations = symbol.declarations;
if (Array.isArray(declarations) && symbol.declarations.some(declaration => {
if (declaration) {
const parent = declaration.parent;
if (parent) {
const sourceFile = parent.getSourceFile();
if (sourceFile) {
const fileName = sourceFile.fileName;
if (fileName && fileName.indexOf(this.getDefinitionPattern()) >= 0) {
return true;
}
}
}
}
return false;
})) {
this.addFailureAtNode(node, `Cannot use global '${node.text}' in '${this._config.target}'`);
}
}
}
super.visitIdentifier(node);
}
}
exports.AbstractGlobalsRuleWalker = AbstractGlobalsRuleWalker;

View File

@@ -0,0 +1,57 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as ts from 'typescript';
import * as Lint from 'tslint';
interface AbstractGlobalsRuleConfig {
target: string;
allowed: string[];
}
export abstract class AbstractGlobalsRuleWalker extends Lint.RuleWalker {
constructor(file: ts.SourceFile, private program: ts.Program, opts: Lint.IOptions, private _config: AbstractGlobalsRuleConfig) {
super(file, opts);
}
protected abstract getDisallowedGlobals(): string[];
protected abstract getDefinitionPattern(): string;
visitIdentifier(node: ts.Identifier) {
if (this.getDisallowedGlobals().some(disallowedGlobal => disallowedGlobal === node.text)) {
if (this._config.allowed && this._config.allowed.some(allowed => allowed === node.text)) {
return; // override
}
const checker = this.program.getTypeChecker();
const symbol = checker.getSymbolAtLocation(node);
if (symbol) {
const declarations = symbol.declarations;
if (Array.isArray(declarations) && symbol.declarations.some(declaration => {
if (declaration) {
const parent = declaration.parent;
if (parent) {
const sourceFile = parent.getSourceFile();
if (sourceFile) {
const fileName = sourceFile.fileName;
if (fileName && fileName.indexOf(this.getDefinitionPattern()) >= 0) {
return true;
}
}
}
}
return false;
})) {
this.addFailureAtNode(node, `Cannot use global '${node.text}' in '${this._config.target}'`);
}
}
}
super.visitIdentifier(node);
}
}

View File

@@ -48,9 +48,7 @@ class DoubleQuotedStringArgRuleWalker extends Lint.RuleWalker {
const argText = arg.getText();
const doubleQuotedArg = argText.length >= 2 && argText[0] === DoubleQuotedStringArgRuleWalker.DOUBLE_QUOTE && argText[argText.length - 1] === DoubleQuotedStringArgRuleWalker.DOUBLE_QUOTE;
if (!doubleQuotedArg) {
const fix = [
Lint.Replacement.replaceFromTo(arg.getStart(), arg.getWidth(), `"${arg.getText().slice(1, arg.getWidth() - 2)}"`),
];
const fix = Lint.Replacement.replaceFromTo(arg.getStart(), arg.getEnd(), `"${arg.getText().slice(1, arg.getWidth() - 1)}"`);
this.addFailure(this.createFailure(arg.getStart(), arg.getWidth(), `Argument ${this.argIndex + 1} to '${functionName}' must be double quoted.`, fix));
return;
}

View File

@@ -68,9 +68,7 @@ class DoubleQuotedStringArgRuleWalker extends Lint.RuleWalker {
const doubleQuotedArg = argText.length >= 2 && argText[0] === DoubleQuotedStringArgRuleWalker.DOUBLE_QUOTE && argText[argText.length - 1] === DoubleQuotedStringArgRuleWalker.DOUBLE_QUOTE;
if (!doubleQuotedArg) {
const fix = [
Lint.Replacement.replaceFromTo(arg.getStart(), arg.getWidth(), `"${arg.getText().slice(1, arg.getWidth() - 2)}"`),
];
const fix = Lint.Replacement.replaceFromTo(arg.getStart(), arg.getEnd(), `"${arg.getText().slice(1, arg.getWidth() - 1)}"`);
this.addFailure(this.createFailure(
arg.getStart(), arg.getWidth(),
`Argument ${this.argIndex! + 1} to '${functionName}' must be double quoted.`, fix));

View File

@@ -0,0 +1,34 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
const Lint = require("tslint");
const minimatch = require("minimatch");
const abstractGlobalsRule_1 = require("./abstractGlobalsRule");
class Rule extends Lint.Rules.TypedRule {
applyWithProgram(sourceFile, program) {
const configs = this.getOptions().ruleArguments;
for (const config of configs) {
if (minimatch(sourceFile.fileName, config.target)) {
return this.applyWithWalker(new NoDOMGlobalsRuleWalker(sourceFile, program, this.getOptions(), config));
}
}
return [];
}
}
exports.Rule = Rule;
class NoDOMGlobalsRuleWalker extends abstractGlobalsRule_1.AbstractGlobalsRuleWalker {
getDefinitionPattern() {
return 'lib.dom.d.ts';
}
getDisallowedGlobals() {
// intentionally not complete
return [
"window",
"document",
"HTMLElement"
];
}
}

View File

@@ -0,0 +1,45 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as ts from 'typescript';
import * as Lint from 'tslint';
import * as minimatch from 'minimatch';
import { AbstractGlobalsRuleWalker } from './abstractGlobalsRule';
interface NoDOMGlobalsRuleConfig {
target: string;
allowed: string[];
}
export class Rule extends Lint.Rules.TypedRule {
applyWithProgram(sourceFile: ts.SourceFile, program: ts.Program): Lint.RuleFailure[] {
const configs = <NoDOMGlobalsRuleConfig[]>this.getOptions().ruleArguments;
for (const config of configs) {
if (minimatch(sourceFile.fileName, config.target)) {
return this.applyWithWalker(new NoDOMGlobalsRuleWalker(sourceFile, program, this.getOptions(), config));
}
}
return [];
}
}
class NoDOMGlobalsRuleWalker extends AbstractGlobalsRuleWalker {
getDefinitionPattern(): string {
return 'lib.dom.d.ts';
}
getDisallowedGlobals(): string[] {
// intentionally not complete
return [
"window",
"document",
"HTMLElement"
];
}
}

View File

@@ -0,0 +1,41 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
const Lint = require("tslint");
const minimatch = require("minimatch");
const abstractGlobalsRule_1 = require("./abstractGlobalsRule");
class Rule extends Lint.Rules.TypedRule {
applyWithProgram(sourceFile, program) {
const configs = this.getOptions().ruleArguments;
for (const config of configs) {
if (minimatch(sourceFile.fileName, config.target)) {
return this.applyWithWalker(new NoNodejsGlobalsRuleWalker(sourceFile, program, this.getOptions(), config));
}
}
return [];
}
}
exports.Rule = Rule;
class NoNodejsGlobalsRuleWalker extends abstractGlobalsRule_1.AbstractGlobalsRuleWalker {
getDefinitionPattern() {
return '@types/node';
}
getDisallowedGlobals() {
// https://nodejs.org/api/globals.html#globals_global_objects
return [
"NodeJS",
"Buffer",
"__dirname",
"__filename",
"clearImmediate",
"exports",
"global",
"module",
"process",
"setImmediate"
];
}
}

View File

@@ -0,0 +1,52 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as ts from 'typescript';
import * as Lint from 'tslint';
import * as minimatch from 'minimatch';
import { AbstractGlobalsRuleWalker } from './abstractGlobalsRule';
interface NoNodejsGlobalsConfig {
target: string;
allowed: string[];
}
export class Rule extends Lint.Rules.TypedRule {
applyWithProgram(sourceFile: ts.SourceFile, program: ts.Program): Lint.RuleFailure[] {
const configs = <NoNodejsGlobalsConfig[]>this.getOptions().ruleArguments;
for (const config of configs) {
if (minimatch(sourceFile.fileName, config.target)) {
return this.applyWithWalker(new NoNodejsGlobalsRuleWalker(sourceFile, program, this.getOptions(), config));
}
}
return [];
}
}
class NoNodejsGlobalsRuleWalker extends AbstractGlobalsRuleWalker {
getDefinitionPattern(): string {
return '@types/node';
}
getDisallowedGlobals(): string[] {
// https://nodejs.org/api/globals.html#globals_global_objects
return [
"NodeJS",
"Buffer",
"__dirname",
"__filename",
"clearImmediate",
"exports",
"global",
"module",
"process",
"setImmediate"
];
}
}

View File

@@ -0,0 +1,33 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
const Lint = require("tslint");
const minimatch = require("minimatch");
class Rule extends Lint.Rules.AbstractRule {
apply(sourceFile) {
const args = this.getOptions().ruleArguments[0];
if (args.exclude.every(x => !minimatch(sourceFile.fileName, x))) {
return this.applyWithWalker(new NoSyncRuleWalker(sourceFile, this.getOptions()));
}
return [];
}
}
exports.Rule = Rule;
class NoSyncRuleWalker extends Lint.RuleWalker {
constructor(file, opts) {
super(file, opts);
}
visitCallExpression(node) {
if (node.expression && NoSyncRuleWalker.operations.some(x => node.expression.getText().indexOf(x) >= 0)) {
this.addFailureAtNode(node, `Do not use Sync operations`);
}
super.visitCallExpression(node);
}
}
NoSyncRuleWalker.operations = ['readFileSync', 'writeFileSync', 'existsSync', 'fchmodSync', 'lchmodSync',
'statSync', 'fstatSync', 'lstatSync', 'linkSync', 'symlinkSync', 'readlinkSync', 'realpathSync', 'unlinkSync', 'rmdirSync',
'mkdirSync', 'mkdtempSync', 'readdirSync', 'openSync', 'utimesSync', 'futimesSync', 'fsyncSync', 'writeSync', 'readSync',
'appendFileSync', 'accessSync', 'fdatasyncSync', 'copyFileSync'];

View File

@@ -0,0 +1,45 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as ts from 'typescript';
import * as Lint from 'tslint';
import * as minimatch from 'minimatch';
interface NoSyncRuleConfig {
exclude: string[];
}
export class Rule extends Lint.Rules.AbstractRule {
apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] {
const args = <NoSyncRuleConfig>this.getOptions().ruleArguments[0];
if (args.exclude.every(x => !minimatch(sourceFile.fileName, x))) {
return this.applyWithWalker(new NoSyncRuleWalker(sourceFile, this.getOptions()));
}
return [];
}
}
class NoSyncRuleWalker extends Lint.RuleWalker {
private static readonly operations = ['readFileSync', 'writeFileSync', 'existsSync', 'fchmodSync', 'lchmodSync',
'statSync', 'fstatSync', 'lstatSync', 'linkSync', 'symlinkSync', 'readlinkSync', 'realpathSync', 'unlinkSync', 'rmdirSync',
'mkdirSync', 'mkdtempSync', 'readdirSync', 'openSync', 'utimesSync', 'futimesSync', 'fsyncSync', 'writeSync', 'readSync',
'appendFileSync', 'accessSync', 'fdatasyncSync', 'copyFileSync'];
constructor(file: ts.SourceFile, opts: Lint.IOptions) {
super(file, opts);
}
visitCallExpression(node: ts.CallExpression) {
if (node.expression && NoSyncRuleWalker.operations.some(x => node.expression.getText().indexOf(x) >= 0)) {
this.addFailureAtNode(node, `Do not use Sync operations`);
}
super.visitCallExpression(node);
}
}

View File

@@ -0,0 +1,49 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
const ts = require("typescript");
const Lint = require("tslint");
/**
* Implementation of the no-localize-keys-with-underscore rule which verifies that keys to the localize
* calls don't contain underscores (_) since those break the localization process.
*/
class Rule extends Lint.Rules.AbstractRule {
apply(sourceFile) {
return this.applyWithWalker(new NoLocalizeKeysWithUnderscore(sourceFile, this.getOptions()));
}
}
exports.Rule = Rule;
const signatures = [
"localize",
"nls.localize"
];
class NoLocalizeKeysWithUnderscore extends Lint.RuleWalker {
constructor(file, opts) {
super(file, opts);
}
visitCallExpression(node) {
this.checkCallExpression(node);
super.visitCallExpression(node);
}
checkCallExpression(node) {
// If this isn't one of the localize functions then continue on
const functionName = node.expression.getText();
if (functionName && !signatures.some(s => s === functionName)) {
return;
}
const arg = node && node.arguments && node.arguments.length > 0 ? node.arguments[0] : undefined; // The key is the first element
// Ignore if the arg isn't a string - we expect the compiler to warn if that's an issue
if (arg && ts.isStringLiteral(arg)) {
if (arg.getText().indexOf('_') >= 0) {
const fix = [
Lint.Replacement.replaceFromTo(arg.getStart(), arg.getEnd(), `${arg.getText().replace(/_/g, '.')}`),
];
this.addFailure(this.createFailure(arg.getStart(), arg.getWidth(), `Keys for localize calls must not contain underscores. Use periods (.) instead.`, fix));
return;
}
}
}
}

View File

@@ -0,0 +1,55 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as ts from 'typescript';
import * as Lint from 'tslint';
/**
* Implementation of the no-localize-keys-with-underscore rule which verifies that keys to the localize
* calls don't contain underscores (_) since those break the localization process.
*/
export class Rule extends Lint.Rules.AbstractRule {
public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] {
return this.applyWithWalker(new NoLocalizeKeysWithUnderscore(sourceFile, this.getOptions()));
}
}
const signatures = [
"localize",
"nls.localize"
];
class NoLocalizeKeysWithUnderscore extends Lint.RuleWalker {
constructor(file: ts.SourceFile, opts: Lint.IOptions) {
super(file, opts);
}
protected visitCallExpression(node: ts.CallExpression): void {
this.checkCallExpression(node);
super.visitCallExpression(node);
}
private checkCallExpression(node: ts.CallExpression): void {
// If this isn't one of the localize functions then continue on
const functionName = node.expression.getText();
if (functionName && !signatures.some(s => s === functionName)) {
return;
}
const arg = node && node.arguments && node.arguments.length > 0 ? node.arguments[0] : undefined; // The key is the first element
// Ignore if the arg isn't a string - we expect the compiler to warn if that's an issue
if(arg && ts.isStringLiteral(arg)) {
if (arg.getText().indexOf('_') >= 0) {
const fix = [
Lint.Replacement.replaceFromTo(arg.getStart(), arg.getEnd(), `${arg.getText().replace(/_/g, '.')}`),
];
this.addFailure(this.createFailure(
arg.getStart(), arg.getWidth(),
`Keys for localize calls must not contain underscores. Use periods (.) instead.`, fix));
return;
}
}
}
}

View File

@@ -11,6 +11,9 @@ const Lint = require("tslint");
*/
class Rule extends Lint.Rules.AbstractRule {
apply(sourceFile) {
if (/\.d.ts$/.test(sourceFile.fileName)) {
return [];
}
return this.applyWithWalker(new NoUnexternalizedStringsRuleWalker(sourceFile, this.getOptions()));
}
}

View File

@@ -11,6 +11,9 @@ import * as Lint from 'tslint';
*/
export class Rule extends Lint.Rules.AbstractRule {
public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] {
if (/\.d.ts$/.test(sourceFile.fileName)) {
return [];
}
return this.applyWithWalker(new NoUnexternalizedStringsRuleWalker(sourceFile, this.getOptions()));
}
}

View File

@@ -0,0 +1,28 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
const Lint = require("tslint");
class Rule extends Lint.Rules.TypedRule {
applyWithProgram(sourceFile, program) {
if (program.getCompilerOptions().alwaysStrict) {
return this.applyWithWalker(new NoUselessStrictRuleWalker(sourceFile, this.getOptions()));
}
return [];
}
}
exports.Rule = Rule;
class NoUselessStrictRuleWalker extends Lint.RuleWalker {
visitStringLiteral(node) {
this.checkStringLiteral(node);
super.visitStringLiteral(node);
}
checkStringLiteral(node) {
const text = node.getText();
if (text === '\'use strict\'' || text === '"use strict"') {
this.addFailureAtNode(node, 'use strict directive is unnecessary');
}
}
}

View File

@@ -0,0 +1,30 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as Lint from 'tslint';
import * as ts from 'typescript';
export class Rule extends Lint.Rules.TypedRule {
public applyWithProgram(sourceFile: ts.SourceFile, program: ts.Program): Lint.RuleFailure[] {
if (program.getCompilerOptions().alwaysStrict) {
return this.applyWithWalker(new NoUselessStrictRuleWalker(sourceFile, this.getOptions()));
}
return [];
}
}
class NoUselessStrictRuleWalker extends Lint.RuleWalker {
protected visitStringLiteral(node: ts.StringLiteral): void {
this.checkStringLiteral(node);
super.visitStringLiteral(node);
}
private checkStringLiteral(node: ts.StringLiteral): void {
const text = node.getText();
if (text === '\'use strict\'' || text === '"use strict"') {
this.addFailureAtNode(node, 'use strict directive is unnecessary');
}
}
}

View File

@@ -7,10 +7,12 @@ declare module "gulp-tsb" {
}
export interface IncrementalCompiler {
(token?:ICancellationToken): NodeJS.ReadWriteStream;
// program?: ts.Program;
(token?: ICancellationToken): NodeJS.ReadWriteStream;
src(opts?: {
cwd?: string;
base?: string;
}): NodeJS.ReadStream;
}
export function create(projectPath: string, existingOptions: any, verbose?: boolean, onError?: (message: any) => void): IncrementalCompiler;
export function create(configOrName: { [option: string]: string | number | boolean; } | string, verbose?: boolean, json?: boolean, onError?: (message: any) => void): IncrementalCompiler;
}
}

View File

@@ -121,7 +121,7 @@ function loadSourcemaps() {
return;
}
if (!f.contents) {
cb(new Error('empty file'));
cb(undefined, f);
return;
}
const contents = f.contents.toString('utf8');
@@ -166,20 +166,23 @@ function stripSourceMappingURL() {
}
exports.stripSourceMappingURL = stripSourceMappingURL;
function rimraf(dir) {
let retries = 0;
const retry = (cb) => {
_rimraf(dir, { maxBusyTries: 1 }, (err) => {
if (!err) {
return cb();
}
if (err.code === 'ENOTEMPTY' && ++retries < 5) {
return setTimeout(() => retry(cb), 10);
}
return cb(err);
});
};
retry.taskName = `clean-${path.basename(dir).toLowerCase()}`;
return retry;
const result = () => new Promise((c, e) => {
let retries = 0;
const retry = () => {
_rimraf(dir, { maxBusyTries: 1 }, (err) => {
if (!err) {
return c();
}
if (err.code === 'ENOTEMPTY' && ++retries < 5) {
return setTimeout(() => retry(), 10);
}
return e(err);
});
};
retry();
});
result.taskName = `clean-${path.basename(dir).toLowerCase()}`;
return result;
}
exports.rimraf = rimraf;
function getVersion(root) {
@@ -219,3 +222,10 @@ function versionStringToNumber(versionStr) {
return parseInt(match[1], 10) * 1e4 + parseInt(match[2], 10) * 1e2 + parseInt(match[3], 10);
}
exports.versionStringToNumber = versionStringToNumber;
function streamToPromise(stream) {
return new Promise((c, e) => {
stream.on('error', err => e(err));
stream.on('end', () => c());
});
}
exports.streamToPromise = streamToPromise;

View File

@@ -165,7 +165,7 @@ export function loadSourcemaps(): NodeJS.ReadWriteStream {
}
if (!f.contents) {
cb(new Error('empty file'));
cb(undefined, f);
return;
}
@@ -218,24 +218,29 @@ export function stripSourceMappingURL(): NodeJS.ReadWriteStream {
return es.duplex(input, output);
}
export function rimraf(dir: string): (cb: any) => void {
let retries = 0;
export function rimraf(dir: string): () => Promise<void> {
const result = () => new Promise<void>((c, e) => {
let retries = 0;
const retry = (cb: (err?: any) => void) => {
_rimraf(dir, { maxBusyTries: 1 }, (err: any) => {
if (!err) {
return cb();
}
const retry = () => {
_rimraf(dir, { maxBusyTries: 1 }, (err: any) => {
if (!err) {
return c();
}
if (err.code === 'ENOTEMPTY' && ++retries < 5) {
return setTimeout(() => retry(cb), 10);
}
if (err.code === 'ENOTEMPTY' && ++retries < 5) {
return setTimeout(() => retry(), 10);
}
return cb(err);
});
};
retry.taskName = `clean-${path.basename(dir).toLowerCase()}`;
return retry;
return e(err);
});
};
retry();
});
result.taskName = `clean-${path.basename(dir).toLowerCase()}`;
return result;
}
export function getVersion(root: string): string | undefined {
@@ -281,3 +286,10 @@ export function versionStringToNumber(versionStr: string) {
return parseInt(match[1], 10) * 1e4 + parseInt(match[2], 10) * 1e2 + parseInt(match[3], 10);
}
export function streamToPromise(stream: NodeJS.ReadWriteStream): Promise<void> {
return new Promise((c, e) => {
stream.on('error', err => e(err));
stream.on('end', () => c());
});
}

View File

@@ -5,17 +5,6 @@
const es = require('event-stream');
/** Ugly hack for gulp-tsb */
function handleDeletions() {
return es.mapSync(f => {
if (/\.ts$/.test(f.relative) && !f.contents) {
f.contents = Buffer.from('');
f.stat = { mtime: new Date() };
}
return f;
});
}
let watch = undefined;
@@ -24,6 +13,5 @@ if (!watch) {
}
module.exports = function () {
return watch.apply(null, arguments)
.pipe(handleDeletions());
return watch.apply(null, arguments);
};

View File

@@ -148,8 +148,9 @@ function getMassagedTopLevelDeclarationText(sourceFile, declaration, importName,
}
});
}
result = result.replace(/export default/g, 'export');
result = result.replace(/export declare/g, 'export');
result = result.replace(/export default /g, 'export ');
result = result.replace(/export declare /g, 'export ');
result = result.replace(/declare /g, '');
if (declaration.kind === ts.SyntaxKind.EnumDeclaration) {
result = result.replace(/const enum/, 'enum');
enums.push(result);
@@ -515,7 +516,7 @@ class DeclarationResolver {
'file.ts': fileContents
};
const service = ts.createLanguageService(new TypeScriptLanguageServiceHost({}, fileMap, {}));
const text = service.getEmitOutput('file.ts', true).outputFiles[0].text;
const text = service.getEmitOutput('file.ts', true, true).outputFiles[0].text;
return new CacheEntry(ts.createSourceFile(fileName, text, ts.ScriptTarget.ES5), mtime);
}
}

View File

@@ -178,8 +178,9 @@ function getMassagedTopLevelDeclarationText(sourceFile: ts.SourceFile, declarati
}
});
}
result = result.replace(/export default/g, 'export');
result = result.replace(/export declare/g, 'export');
result = result.replace(/export default /g, 'export ');
result = result.replace(/export declare /g, 'export ');
result = result.replace(/declare /g, '');
if (declaration.kind === ts.SyntaxKind.EnumDeclaration) {
result = result.replace(/const enum/, 'enum');
@@ -616,7 +617,7 @@ export class DeclarationResolver {
'file.ts': fileContents
};
const service = ts.createLanguageService(new TypeScriptLanguageServiceHost({}, fileMap, {}));
const text = service.getEmitOutput('file.ts', true).outputFiles[0].text;
const text = service.getEmitOutput('file.ts', true, true).outputFiles[0].text;
return new CacheEntry(
ts.createSourceFile(fileName, text, ts.ScriptTarget.ES5),
mtime

View File

@@ -48,7 +48,7 @@ declare namespace monaco.editor {
#include(vs/editor/standalone/common/standaloneThemeService): BuiltinTheme, IStandaloneThemeData, IColors
#include(vs/editor/common/modes/supports/tokenization): ITokenThemeRule
#include(vs/editor/common/services/webWorker): MonacoWebWorker, IWebWorkerOptions
#include(vs/editor/standalone/browser/standaloneCodeEditor): IActionDescriptor, IEditorConstructionOptions, IDiffEditorConstructionOptions, IStandaloneCodeEditor, IStandaloneDiffEditor
#include(vs/editor/standalone/browser/standaloneCodeEditor): IActionDescriptor, IStandaloneEditorConstructionOptions, IDiffEditorConstructionOptions, IStandaloneCodeEditor, IStandaloneDiffEditor
export interface ICommandHandler {
(...args: any[]): void;
}
@@ -62,6 +62,7 @@ export interface ICommandHandler {
#includeAll(vs/editor/common/editorCommon;editorOptions.=>): IScrollEvent
#includeAll(vs/editor/common/model/textModelEvents):
#includeAll(vs/editor/common/controller/cursorEvents):
#include(vs/platform/accessibility/common/accessibility): AccessibilitySupport
#includeAll(vs/editor/common/config/editorOptions):
#includeAll(vs/editor/browser/editorBrowser;editorCommon.=>;editorOptions.=>):
#include(vs/editor/common/config/fontInfo): FontInfo, BareFontInfo

View File

@@ -1,7 +1,7 @@
{
"name": "monaco-editor-core",
"private": true,
"version": "0.16.0",
"version": "0.18.0",
"description": "A browser based code editor",
"author": "Microsoft Corporation",
"license": "MIT",

View File

@@ -70,6 +70,7 @@ runtime "${runtime}"`;
}
yarnInstall(`build`); // node modules required for build
yarnInstall('test/automation'); // node modules required for smoketest
yarnInstall('test/smoke'); // node modules required for smoketest
yarnInstallBuildDependencies(); // node modules for watching, specific to host node version, not electron
@@ -78,4 +79,42 @@ const processTreeDts = path.join('node_modules', 'windows-process-tree', 'typing
if (fs.existsSync(processTreeDts)) {
console.log('Removing windows-process-tree.d.ts');
fs.unlinkSync(processTreeDts);
}
}
function getInstalledVersion(packageName, cwd) {
const opts = {};
if (cwd) {
opts.cwd = cwd;
}
const result = cp.spawnSync(yarn, ['list', '--pattern', packageName], opts);
const stdout = result.stdout.toString();
const match = stdout.match(new RegExp(packageName + '@(\\S+)'));
if (!match || !match[1]) {
throw new Error('Unexpected output from yarn list: ' + stdout);
}
return match[1];
}
function assertSameVersionsBetweenFolders(packageName, otherFolder) {
const baseVersion = getInstalledVersion(packageName);
const otherVersion = getInstalledVersion(packageName, otherFolder);
if (baseVersion !== otherVersion) {
throw new Error(`Mismatched versions installed for ${packageName}: root has ${baseVersion}, ./${otherFolder} has ${otherVersion}. These should be the same!`);
}
}
// Check that modules in both the base package.json and remote/ have the same version installed
const requireSameVersionsInRemote = [
'xterm',
'xterm-addon-search',
'xterm-addon-web-links',
'node-pty',
'vscode-ripgrep'
];
requireSameVersionsInRemote.forEach(packageName => {
assertSameVersionsBetweenFolders(packageName, 'remote');
});

View File

@@ -31,4 +31,4 @@ if (!/yarn\.js$|yarnpkg$/.test(process.env['npm_execpath'])) {
if (err) {
console.error('');
process.exit(1);
}
}

View File

@@ -132,7 +132,7 @@ exports.update = function (repoId, repoPath, dest, modifyGrammar, version = 'mas
if (packageJsonPathOverride) {
packageJsonPath += packageJsonPathOverride;
}
packageJsonPath += '/package.json';
packageJsonPath += 'package.json';
for (let i = 0; i < cgmanifestRead.registrations.length; i++) {
if (cgmanifestRead.registrations[i].component.git.repositoryUrl.substr(cgmanifestRead.registrations[i].component.git.repositoryUrl.length - repoId.length, repoId.length) === repoId) {
cgmanifestRead.registrations[i].component.git.commitHash = info.commitSha;

View File

@@ -24,9 +24,9 @@
"@types/pump": "^1.0.1",
"@types/request": "^2.47.0",
"@types/rimraf": "^2.0.2",
"@types/terser": "^3.12.0",
"@types/through": "^0.0.29",
"@types/through2": "^2.0.34",
"@types/uglify-es": "^3.0.0",
"@types/underscore": "^1.8.9",
"@types/xml2js": "0.0.33",
"applicationinsights": "1.0.8",
@@ -36,15 +36,20 @@
"github-releases": "^0.4.1",
"gulp-bom": "^1.0.0",
"gulp-sourcemaps": "^1.11.0",
"gulp-uglify": "^3.0.0",
"iconv-lite": "0.4.23",
"mime": "^1.3.4",
"minimist": "^1.2.0",
"request": "^2.85.0",
"rollup": "^1.20.3",
"rollup-plugin-commonjs": "^10.1.0",
"rollup-plugin-node-resolve": "^5.2.0",
"terser": "4.3.8",
"tslint": "^5.9.1",
"service-downloader": "github:anthonydresser/service-downloader#0.1.5",
"typescript": "3.5.2",
"service-downloader": "github:anthonydresser/service-downloader#0.1.7",
"typescript": "3.7.0-dev.20191017",
"vsce": "1.48.0",
"vscode-telemetry-extractor": "1.5.3",
"vscode-telemetry-extractor": "^1.5.4",
"xml2js": "^0.4.17"
},
"scripts": {

57
build/testSetup.js Normal file
View File

@@ -0,0 +1,57 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
const fs = require('fs').promises;
const path = require('path');
const readConfiguration = (async () => {
const parseConfigString = ((content) => {
try {
const result = JSON.parse(content);
return result;
}
catch (ex) {
console.log('Could NOT parse TEST_RUN_LIST:', content);
}
});
// Attempt to read from an enviornment variable
const testRunlist = process.env['TEST_RUN_LIST'];
if (testRunlist && testRunlist !== '') {
const result = parseConfigString(testRunlist);
if (result) {
console.log('Using the environment test run list:', result);
return result;
}
}
// Attempt to read from a config file
let testRunPath = process.env['TEST_RUN_LIST_FILE'];
if (!testRunPath || testRunPath === '') {
testRunPath = path.resolve(__dirname, '..', 'runlist.json');
}
try {
const contents = await fs.readFile(testRunPath);
return parseConfigString(contents);
}
catch (ex) {
console.log(`error reading file ${testRunPath}:`, ex);
}
});
(async () => {
const keys = process.argv.slice(2);
const configuration = await readConfiguration();
if (!configuration) {
console.log('no configuration was setup');
return;
}
const testList = [];
keys.forEach((key) => {
const arr = configuration[key];
if (arr) {
testList.push(...arr);
}
});
const result = `(${testList.join('|')})`;
console.log(result);
process.env['TEST_GREP'] = result;
})();

67
build/testSetup.ts Normal file
View File

@@ -0,0 +1,67 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
const fs = require('fs').promises;
const path = require('path');
interface IntegrationTestConfig {
[key: string]: string[];
}
const readConfiguration = (async (): Promise<IntegrationTestConfig | void> => {
const parseConfigString = ((content: string): (IntegrationTestConfig | void) => {
try {
const result = JSON.parse(content);
return result as IntegrationTestConfig;
} catch (ex) {
console.log('Could NOT parse TEST_RUN_LIST:', content);
}
});
// Attempt to read from an enviornment variable
const testRunlist = process.env['TEST_RUN_LIST'];
if (testRunlist && testRunlist !== '') {
const result = parseConfigString(testRunlist);
if (result) {
console.log('Using the environment test run list:', result);
return result;
}
}
// Attempt to read from a config file
let testRunPath = process.env['TEST_RUN_LIST_FILE'];
if (!testRunPath || testRunPath === '') {
testRunPath = path.resolve(__dirname, '..', 'runlist.json');
}
try {
const contents = await fs.readFile(testRunPath);
return parseConfigString(contents);
} catch (ex) {
console.log(`error reading file ${testRunPath}:`, ex);
}
});
(async (): Promise<string | void> => {
const keys = process.argv.slice(2);
const configuration = await readConfiguration();
if (!configuration) {
console.log('no configuration was setup');
return;
}
const testList: string[] = [];
keys.forEach((key) => {
const arr = configuration[key];
if (arr) {
testList.push(...arr);
}
});
const result = `(${testList.join('|')})`;
console.log(result);
process.env['TEST_GREP'] = result;
})();

View File

@@ -29,7 +29,7 @@ dependencies = [
[[package]]
name = "inno_updater"
version = "0.8.0"
version = "0.8.2"
dependencies = [
"byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"crc 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",

View File

@@ -20,8 +20,8 @@ Compression=lzma
SolidCompression=yes
AppMutex={code:GetAppMutex}
SetupMutex={#AppMutex}setup
WizardImageFile={#RepoDir}\resources\win32\inno-big.bmp
WizardSmallImageFile={#RepoDir}\resources\win32\inno-small.bmp
WizardImageFile="{#RepoDir}\resources\win32\inno-big-100.bmp,{#RepoDir}\resources\win32\inno-big-125.bmp,{#RepoDir}\resources\win32\inno-big-150.bmp,{#RepoDir}\resources\win32\inno-big-175.bmp,{#RepoDir}\resources\win32\inno-big-200.bmp,{#RepoDir}\resources\win32\inno-big-225.bmp,{#RepoDir}\resources\win32\inno-big-250.bmp"
WizardSmallImageFile="{#RepoDir}\resources\win32\inno-small-100.bmp,{#RepoDir}\resources\win32\inno-small-125.bmp,{#RepoDir}\resources\win32\inno-small-150.bmp,{#RepoDir}\resources\win32\inno-small-175.bmp,{#RepoDir}\resources\win32\inno-small-200.bmp,{#RepoDir}\resources\win32\inno-small-225.bmp,{#RepoDir}\resources\win32\inno-small-250.bmp"
SetupIconFile={#RepoDir}\resources\win32\code.ico
UninstallDisplayIcon={app}\{#ExeBasename}.exe
ChangesEnvironment=true
@@ -100,12 +100,22 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}Source
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}SourceFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""
Root: HKCU; Subkey: "Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};{app}\bin"; Tasks: addtopath; Check: NeedsAddPath(ExpandConstant('{app}\bin'))
; .sql
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.sql\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.sql\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.sql"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,SQL}"; Flags: uninsdeletekey; Tasks: associatewithfiles
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\sql.ico"; Tasks: associatewithfiles
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
; .ipynb
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.ipynb\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.ipynb\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.ipynb"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ipynb"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,IPYNB}"; Flags: uninsdeletekey; Tasks: associatewithfiles
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ipynb"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ipynb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\ipynb.ico"; Tasks: associatewithfiles
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ipynb\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
; Environment
#if "user" == InstallTarget
#define EnvironmentRootKey "HKCU"

Some files were not shown because too many files have changed in this diff Show More