Compare commits

..

476 Commits

Author SHA1 Message Date
Anthony Dresser
e57eb999fc Revert "Revert "fix ctrl+tab keybinding"" (#9121)
This reverts commit 99af31fa1f.
2020-02-11 16:01:53 -08:00
Anthony Dresser
99af31fa1f Revert "fix ctrl+tab keybinding"
This reverts commit e2990db33e.
2020-02-11 14:55:16 -08:00
Anthony Dresser
e2990db33e fix ctrl+tab keybinding 2020-02-11 14:53:59 -08:00
Alan Ren
b2238dc37b fix charting issue (#9094)
* fix charting issue

* fix charting issue 2

* revert version bump

(cherry picked from commit 8c61538a27)
2020-02-08 17:45:32 -08:00
Amir Omidi
6770bf877e ok button targetted fix (#9095) 2020-02-07 17:17:58 -08:00
Amir Omidi
ba66305bb5 Add device code authentication (#9097)
* Add device code authentication

* Change string
2020-02-07 17:15:08 -08:00
Charles Gagnon
8e731c75c3 Remove quality checks for events (#8934)
* Remove quality checks for events

* Update iKey

* Add missed quality check

(cherry picked from commit ec0a7a29d3)
2020-02-07 14:48:23 -08:00
Alex Ma
db0409569a made changes (#9092) 2020-02-07 14:31:53 -08:00
Amir Omidi
fb4ab6b501 Show error to user (#9014)
* Show error to user

* Update the errors

* change message

(cherry picked from commit df3f1768f7)
2020-02-07 14:15:02 -08:00
Amir Omidi
bd1d96a57a Amir/target/notarization (#9082)
* runtime hardening

* Notarization

* Fix the parameters

* Update sql-product-build-darwin.yml

* Format

* Change task name

* Remove the array

* Support new format

* Use new format for notarizing too

* Change timeouts to accommodate how long apple takes

* Change timeout in minutes to 2 hours

* Update sql-product-build-darwin.yml

* Increase timeouts

* Change the pipeline

* Fix formatting

* Fix formatting

* Fix formatting

* Fix formatting

* Change path

* Fix path for cleanup

* Don't do hardening

* Enable hardening again

* Self sign

* add display name

* Change key identity

* Deep codesign

* Fix path

* add extras

* add hardening back

* use ditto instead of zip per apple docs

* Changing signing syntax

* Don't deep sign

* Use --deep and add new entitlement

* Temporarily disable notarization

* entitlements fix

* Don't do runtime hardening for self sign

* Will this fix codesign I wonder

* codesigning

* sign everything first

* Change signing to delete bad files

* remove xattr

* Change the find command

* Delete mssql and big-data-cluster

* Stablize the signing

* Bring in notarization changes
2020-02-07 13:08:21 -08:00
Amir Omidi
6fe49e8cef Targeted fix for saving issue on MacOS (#9073)
* Create a targeted fix

* Add sql carbon edit
2020-02-06 16:22:21 -08:00
Alex Ma
6da98ed439 disable updateNameFromFirstLine from untitledTextEditorModel (#9064)
* disable updateNameFromFirstLine

* change to either

* WIP commit

* final fix

* formatting

* fix for tab space

* replace tab with space

* Fix formatting

Co-authored-by: Charles Gagnon <chgagnon@microsoft.com>
2020-02-06 14:09:45 -08:00
Chris LaFreniere
5ef69f5133 BDC: Add another command for bdc extension activation events (#9050)
* Add another command for bdc extension activation

* spaces

* Add other activation events

* spacing

(cherry picked from commit 8e67b104c3)
2020-02-05 16:05:49 -08:00
Alex Ma
ebf47df35e removed unnecessary formatting (#9045) 2020-02-04 14:01:42 -08:00
Amir Omidi
2a93d7c5e9 Move files locations (#9015) (#9044)
* Move files locations

* Extension path

(cherry picked from commit c6689700f6)
2020-02-04 13:42:06 -08:00
Chris LaFreniere
573c5b4470 Books: Ensure associatedResource is Present for Untitled Notebooks that have a File Associated with them (#9037)
* Conditionally add associatedResource t untitled nb

* Fix Jupyter Book notebook titles (#9039)

* Fix notebook titles

* Fix navigation links for books

* Added comments

Co-authored-by: Chris LaFreniere <40371649+chlafreniere@users.noreply.github.com>

* PR comment nit

Co-authored-by: Charles Gagnon <chgagnon@microsoft.com>
(cherry picked from commit 2208666eef)
2020-02-04 11:49:01 -08:00
Karl Burtram
41838b7720 Import "fromPromise" so Observables work correctly (#9034) (#9042)
* Import "fromPromise" so Observables work correctly

* Bump distro guid

* Fix unit test missing file error

* Bump distro to pick up latest changes
2020-02-04 11:40:26 -08:00
Charles Gagnon
ee1359fd7c Even more robust handling of extension tree loading (#9007)
* Even more robust handling of extension tree loading

* Fix initial loading and add new test for CMS

* Fix compile errors

* Fix logic

* Remove debug log statements

(cherry picked from commit 62df5359e2)
2020-02-04 08:05:08 -08:00
Alex Ma
189bcf703e Fix for table name not showing up on the header. (#9016)
* fix for edit data table header

* Fix for name, and SQL load

(cherry picked from commit 5b2c14f11a)
2020-01-31 14:32:27 -08:00
Charles Gagnon
ddfdd43fc3 Bump extension versions (#8990) 2020-01-29 17:20:11 -08:00
Maddy
648287fa85 listen to command a and select the active element. (#8969)
* listen to command a and select the active element.

* type fix
2020-01-29 16:55:59 -08:00
Chris LaFreniere
de27f2c2a5 stop firing active cell change events unnecessary (#8983) 2020-01-29 13:54:48 -08:00
Amir Omidi
8ff0ee59c5 Add entitlements (#8985)
* add entitlements

* Move location

* Rename entitlements file
2020-01-29 13:47:44 -08:00
Alex Ma
a5a8c9761e Fix for SQL text file for editdata upon reload. (#8947)
* set dirty for editdata to false (prevent backup)

* small wording change

* Temporary fix for issue

* using proper fix

* Used editInputData onDidChangeDirty

* Moved all code to editDataInput

* Implemented fix from notebooks into editdata.

* Fix for unregistering copy service

* Fix in QueryEditorService

* add handling in case of changes made while editing

* Small optimization, removed setdirty in sql check

* moved onDidChangeDirty to EditDataInput

* some text changes

* small fix for consistency in slickColorTheme
2020-01-29 13:03:27 -08:00
Chris LaFreniere
89554e5c14 Re-enable windows test (#8981) 2020-01-28 17:48:07 -08:00
Charles Gagnon
5618799305 Refactor node loading logic for tree controllers (#8980)
* Refactor node loading logic for tree controllers

* Add comment
2020-01-28 17:12:15 -08:00
Alex Ma
32a89676f1 EditDataTest Merge (removal of angular in edit data) (#8951)
* another commmit

* Now shows blank grid, nullcheck in queryhistory

* renamed onAngularLoaded to onComponentLoaded

* removed whitespace

* removed unused dataservice import

* now displays data, need to fix contextmenu actions

* minor changes

* another small commit

* added timeout for context menu

* updated queryhistoryserviceimpl

* removed log

* added commented out contextmenuregistrations

* context menu now shows up need to test

* added plugin registration WIP

* another commit

* yet another commit

* added wip function

* Clean up commit

* more cleaning up

* removed accessor

* renamed instances of parts

* updated

* fixed merge conflicts

* refactored bootstrapparams

* fixed code

* small changes to format

* set editable to true for testing

* added more options

* moved options to separate variable

* added texteditorclass for later

* added rudimentary create editor support

* changed grid.resize.emit to fire

* added formatterfactory

* added tslint disable

* removed debug message

* added more functions from Slickgrid.ts

* added wip handlechanges function

* another change

* added columndefinitions

* Managed to display table using handlechange

* added ability to edit for now

* added changes to table creation

* added setupevents

* added onInit

* fixed sql.xlf

* minor changes

* tidying up

* more cleaning up

* changed console.log messages to debug ones.

* added this.enableEditing

* made changes to getoverridabletexteditor

* fixed opencontextmenu

* added timeout for detectChange

* need to find way to run oncontext asynchronously

* check stuff

* oncontextmenu now no longer constantly refreshes

* added oldDataRows for future use

* add check for datarows

* small changes made

* set enableediting to true

* more changes

* added additional information for handlechanges

* another change

* more changes

* set enableediting to true

* fixed rerender

* added small test mssage for jquery

* text editor is in getOverridableTextEditorClass()

* removed debug messages

* added transparency for input.editor for table.

* need to find out how to add editing for input

* Added grid div to make slickgrid style work

* reinstated selected.

* disabled selectedcellcssclass

* restored selected

* removed selectionmodel due to not being found in the original code

* Added externalSelectionModel for correct results

* removed selectionmodel as its not used.

* WIP work on refreshresultsets

* temporarily bringing back selection model for now

* added getSelectedRanges from slickgrid into Table

* added getselectedranges from slickgrid into table

* small cleanup changes

* removed detectchanges

* removed last of detectchanges

* return of toprownumber

* no need for toprownumber

* removed isColumnLoading

* some small formatting

* fixed null check

* added back todo comment

* Added fix for context menu

* small change

* added missing value to getFormatter in grid panel

* added fix for last row italics

* added fix for null inconsistencies

* Some consolidation

* added new check for null cells

* minor change

* add check for selections (usually undefined)

* removed null check in formatters

* Some changes made

* changed plugins array

* removed todo

* renamed some variables

* deleted html file

* Moved height and width to editData.css

* added box-sizing for slickgridcontainer

* fixed editdatagridpanel css

* added small changes

* More minor changes

* removed params

* renamed refreshResultsets to refreshDatasets

* removed the  stylesheet.remove lines

* added fix for null

* removed tables

* removed spaces in refreshGrid

* More minor changes

* optimization and formatting

* removal of unnecessary lines

* replaced firstRender in some parts with firstLoad

* Added timeout fix

* minor changes

* Still testing

* cleanup

* restored 200 timeout

* added styling changes for editdata

* removed angular2-slickgrid and added styling

* Small formatting changes to editDataGridPanel

* consolidation
2020-01-28 14:24:39 -08:00
Charles Gagnon
461dd79bc2 Only log if an actual error occurred (#8979) 2020-01-28 13:05:31 -08:00
Amir Omidi
7ef3f003dd handle import errors (#8905) 2020-01-28 12:42:14 -08:00
Maddy
0c1edc1aeb version bump for cu1 tsg books (#8976) 2020-01-28 11:30:57 -08:00
Charles Gagnon
2dfd75352f Add coverage for extension tests (#8961)
* wip

* Add code coverage files to all extensions

* Update vscodetestcover

* Update yarn.lock

* Update CMS yarn.lock

* Update vscodetestcover version
2020-01-28 07:23:45 -08:00
Chris LaFreniere
136a1d8cee Temporarily Disable Windows_Test Job in Product Build (#8971)
* Temporarily Disable Windows Test Job

* Ensure Windows Test is removed from dependsOn
2020-01-27 17:32:24 -08:00
Anthony Dresser
5fd29d5ad8 Missing changes (#8972)
* add more folders to strictire compile, add more strict compile options

* update ci

* remove unnecessary assertion

* add missing checks
2020-01-27 16:47:42 -08:00
Anthony Dresser
64929de09d Add more folders to strict compile (#8954)
* add more folders to strictire compile, add more strict compile options

* update ci

* remove unnecessary assertion
2020-01-27 16:26:49 -08:00
Anthony Dresser
fefe1454de Merge from vscode 3c6f6af7347d38e87bc6406024e8dcf9e9bce229 (#8962)
* Merge from vscode 3c6f6af7347d38e87bc6406024e8dcf9e9bce229

* skip failing tests

* update mac build image
2020-01-27 15:28:17 -08:00
Aditya Bist
0eaee18dc4 Fix Run Query for widgets (#8960)
* format doc

* use new line instead of eol

* review comments

* return false
2020-01-27 12:27:00 -08:00
Leila Lali
28fff9ace8 MLS R package management bug fixing (#8920)
* MLS R package management bug fixing
2020-01-27 11:10:52 -08:00
Anthony Dresser
a41073adbf Add missing deps for linux image (#8958)
* add missing deps for linux image

* use docker versioning

* add comment to linux docker container
2020-01-25 22:53:41 -08:00
Charles Gagnon
379eae22ed Switch schema-compare to using ads common events (#8957)
* Switch schema-compare to using ads common events

* Update yarn.lock
2020-01-24 15:30:31 -08:00
Anthony Dresser
f49fe59e1f disable github ci linux until they fix the issue (#8953) 2020-01-24 11:54:53 -08:00
Kim Santiago
9e61c468d1 Add validation error message for inputbox component (#8909)
* add validation error message for inputbox component

* addressing comments

* remove copying entire definition for InputBoxProperties
2020-01-24 11:38:49 -08:00
Anthony Dresser
7e0c7e35a1 Update gcc for linux build (#8950)
* update gcc for linux build

* fix docker compile
2020-01-24 10:25:11 -08:00
Chris LaFreniere
b02bf17d1f Fixes for broken notebook experience (#8944)
* Fixes for broken notebook experience

* add sql carbon edit

* sql carbon edit

* add another sql carbon edit for import

* Set untitledResource instead of no resource
2020-01-23 17:06:32 -08:00
Alex Ma
510b84df3c Fix for null shift-tab/focus (#8937)
* Added fix for null

* removed space

* formatting and optimization
2020-01-23 16:24:32 -08:00
Cory Rivera
2eebcab74a Make notebook cells selectable for tab navigation. (#8946) 2020-01-23 15:39:27 -08:00
Maddy
5ccc0fd97b Implemented match case and whole wrd (#8904)
* Implemented match case and whole wrd

* removed unused ref

* renamed test method

* escape \

* refactored search

* added more tests

* updated tests appying match case and whole word to spcl characters

* regex update

* spcl to special

* non-capturing group added to the regex

* test
2020-01-23 07:28:12 -08:00
Alex Ma
76967d9467 minheight has been set to 55 for scrolling (#8851)
* minheight has been set to 50 for scrolling

* removed spaces

* changed value to 55 as it looked better

* removed comment
2020-01-22 16:42:41 -08:00
Anthony Dresser
eb0ee387ec distro update (#8935) 2020-01-22 13:52:22 -08:00
Anthony Dresser
bd7aac8ee0 Merge from vscode a234f13c45b40a0929777cb440ee011b7549eed2 (#8911)
* Merge from vscode a234f13c45b40a0929777cb440ee011b7549eed2

* update distro

* fix layering

* update distro

* fix tests
2020-01-22 13:42:37 -08:00
Anthony Dresser
977111eb21 distro update (#8933) 2020-01-22 13:30:27 -08:00
Anthony Dresser
5ccde42213 remove more instances of insiders builtinextensions (#8932) 2020-01-22 13:30:12 -08:00
Charles Gagnon
8b9aeb8679 Fix some dtslint errors in azdata.d.ts (#8931)
* Fix some dtslint errors in azdata.d.ts

* Undo return type change
2020-01-22 13:04:52 -08:00
Charles Gagnon
308dfee963 Bump SMO to fix script external table issue (#8922) 2020-01-21 17:23:55 -08:00
Anthony Dresser
f22dacadbe add disabled features option (#8678) 2020-01-21 16:51:57 -08:00
Anthony Dresser
13d4ab22b1 Remove quality from builtin (#8888)
* remove quality from builtin

* add compiled fles
2020-01-21 16:20:18 -08:00
Anthony Dresser
968d570073 ignore accessibility issues from locking (#8906) 2020-01-21 16:19:57 -08:00
Anthony Dresser
638eb151dd update distro (#8923) 2020-01-21 15:56:10 -08:00
Cory Rivera
52e3c2f9c7 Clear cell execution count when clearing output. (#8908) 2020-01-21 13:56:38 -08:00
Charles Gagnon
d517cf0c8c Fix new editor windows to open with global connection (#8901)
* Fix new editor windows to open with global connection

* Fix test

* Fix tests

* Move logic to queryInputFactory

* Remove unused function

* Remove unneeded check

* Add tests
2020-01-17 07:44:28 -08:00
Charles Gagnon
9acd757f6a Bump vscode version to latest from merge (#8894) 2020-01-16 08:29:52 -08:00
Leila Lali
167a9f991a Fixed broken notebook tests (#8885) 2020-01-15 13:57:52 -08:00
Amir Omidi
5cebfb3013 New Azure sign in experience (#8872)
* update

* Prepare for release for all

* Remove unused import

* Proper branding

* Handle error cases
2020-01-15 13:51:25 -08:00
khoiph1
4e5d001a9c loc update (#8879) 2020-01-15 13:03:27 -08:00
Leila Lali
09b578a169 Machine Learning Services R Packages (#8870)
* R Package management in Machine learning services extension
2020-01-15 12:19:22 -08:00
Cory Rivera
d3105beb43 Await should() methods involving promises in tests. (#8876) 2020-01-15 00:41:23 -08:00
Maddy
74c2d16660 getter for markdown editor on edit mode (#8871)
* getter for markdown editor on edit mode

* use first and find to work-around the code editor changes
2020-01-14 15:29:55 -08:00
Cory Rivera
c09e7b9e2f Increase timeouts for some integration tests. (#8869) 2020-01-13 13:43:18 -08:00
Anthony Dresser
88126c68e7 fix issues with uri being different format for query results (#8850) 2020-01-11 00:22:48 -08:00
Leila Lali
455de9add6 Activating MLS extension on specific events (#8862) 2020-01-10 19:00:35 -08:00
Anthony Dresser
2f6c944317 Add editor contribution tests (#8784)
* wip

* rewrite association

* fix tests

* add more tests

* fix tests

* fix more tests

* fix tests
2020-01-10 18:57:47 -08:00
Amir Omidi
0059ffb777 Increase timeouts (#8857) 2020-01-10 12:20:03 -08:00
kenvanhyning
12ba85ec33 update govt cloud login endpoint (#8855) 2020-01-09 16:18:46 -08:00
Alex Ma
c161f8d8ad Added fix for italics for last row (#8773)
* Added fix for italics for last row

* Added null handling in formatters

* Fixed issue with null not italicizing on grid

* small formatting fix

* some consolidation

* removed null check

* minor change

* removed null check in formatters
2020-01-09 10:23:11 -08:00
Arvind Ranasaria
206738db63 fix how failed/errored installation workflow (#8842)
* fix how failed/errored installation workflow

* address PR comments

* renaming UiControls method
2020-01-08 15:52:28 -08:00
Charles Gagnon
7ecb6b4427 Change test timeout for extension unit tests to 10sec (#8848) 2020-01-08 13:49:34 -08:00
Anthony Dresser
0c47a4486b distro (#8849) 2020-01-08 13:49:17 -08:00
Charles Gagnon
c79929fdd2 Fix small icon in dev build (#8672)
* Fix small icon in dev build

* Use distro instead (icons are temp)

* New insiders icons

* Fix merge conflicts

* Add back in types
2020-01-08 13:45:18 -08:00
Maddy
61cbc5eff0 uncommented old tests and fixed them (#8834)
* uncommneted old tests and fixed them

* removed comments
2020-01-08 13:21:40 -08:00
Leila Lali
fa4ad6cdb9 Adding a n activation event for opening the dashboard (#8733) 2020-01-08 12:18:17 -08:00
Amir Omidi
1b26dc0558 Consolidate connection namespace (#8844) 2020-01-08 12:08:59 -08:00
Amir Omidi
833313c72b Use the user's locale (#8843) 2020-01-08 12:02:18 -08:00
Amir Omidi
8a0824c1c6 Change the wizard setup (#8845) 2020-01-08 12:01:40 -08:00
Leila Lali
2d2376a2a6 Machine Learning Services Dashboard (#8796)
* Added a dashboard for Machine Learning Services Extension
2020-01-08 11:24:58 -08:00
Aditya Bist
774151b6e9 Fixes job history for Agent (#8847)
* fix job history function

* unbump version
2020-01-08 11:19:40 -08:00
Charles Gagnon
041f34beda Fix book provider load to not throw on startup (#8835)
* Fix book provider load to not throw on startup

* Move tests to stable

* Rename method

* Fix floating promises and broken test
2020-01-07 17:32:51 -08:00
Maddy
b1526603cc Tests/notebook find tests (#8827)
* updates to existing book tests

* notebookFindModal tests

* remove commented code

* undo book test changes

* undo book test changes

* resolve the find array

* additional tests
2020-01-07 16:35:28 -08:00
Cory Rivera
6070922579 Increase code signing timeout for Mac builds. (#8837) 2020-01-07 16:12:32 -08:00
Kim Santiago
8cdb5b36a9 Add test for schema compare include exclude (#8765)
* add test for schema compare include exclude

* combine a few checks

* small fixes

* add testData folder to whtiespace check exclusion list

* addressing comments

* fix testData path in gulpfile.hygiene.js

* move change up a couple lines
2020-01-07 10:05:36 -08:00
Alan Ren
ad68fddbc9 remove REL test step (#8825) 2020-01-06 23:00:41 -08:00
kenvanhyning
dd8b12f805 Kenvh/noazurecms (#8755)
* Disallow Azure SQL DB servers for CMS

* removed commented out lines

* added check for valid serverInfo
2020-01-06 16:53:06 -08:00
Alan Ren
c5d3251bb5 remove sql ops (#8805) 2020-01-06 15:37:09 -08:00
Kim Santiago
48b6dd796b Cleanup dacpac wizard (#8807)
* remove unnecessary awaits

* add back awaits and localize string

* add return types
2020-01-06 11:49:34 -08:00
Alex Ma
362af3c153 Changed class name for manage packages extension (#8789)
* Adds rule for .icon extensions

* revert

* Fixed issue and formatted for consistency

* reverted change for regular menuentryaction

* changed id back to old name

* Removed comment

* removed space
2020-01-03 16:09:06 -08:00
Charles Gagnon
fa2fcf2e40 Log original kerberos errors to console (#8804)
* Log original kerberos errors to console for debugging purposes

* Fix compile error
2020-01-03 15:30:42 -08:00
Alan Ren
8529b52e73 fix unstable tests (#8799)
* fix tests

* mark dac test unstable

* import export bac

* remove rel tag

* Update dacpac.test.ts

* bump sts and enable dac tests
2020-01-03 14:29:28 -08:00
Arvind Ranasaria
ef5ca7bc3a add handlers for promise rejections (#8735)
This change adds to handlers to unexpected promise rejection scenarios.
This PR fixes #8640


* add handlers for promise rejections
* Displaying all tools load errors
* Update toolBase.ts - setting errorMessage to be displayed in the additional information  field
* disable the select button  when tools not discovered
* PR fixes
2020-01-03 14:18:01 -08:00
Anthony Dresser
5b34dd2eee add listening for refreshing the top operations table (#8780) 2020-01-03 11:28:32 -08:00
Charles Gagnon
d647dbde09 Make dropdown update width immediately upon opening (#8716)
* Make dropdown update width immediately upon opening

* remove type

* min size of the input container width

* use clamp
2020-01-03 11:07:24 -08:00
Cory Rivera
d2e367c139 Use a single button for expanding and collapsing a notebook cell. (#8797) 2020-01-03 10:34:45 -08:00
Maddy
c3ddbba997 Only show find when modal is loaded and expand the collapsed cell on find. (#8790) 2020-01-01 20:17:50 -08:00
Benjin Dubishar
51ab435e5f Initial SQL Project tree viewlet in Explorer sidebar (#8639)
* Adding mock contents for tree
* added open sqlproj dialog
* reading files from directory
* Added directory traversal
* Adding tree sorting by folder vs file and label
* Improved auto-unfolding of tree based on node type
* replacing fs with fs.promise alias
* added activation event for when workspace contains sqlproj files
* Returning after displaying error
2019-12-27 12:42:23 -08:00
Karl Burtram
4a8609c3ef Update changelog for 1.14.1 release (#8778) 2019-12-26 09:10:29 -08:00
Anthony Dresser
03df1edcf8 use URI to equal (#8770) 2019-12-23 18:03:38 -08:00
Anthony Dresser
5bd983e7a3 fix icon for dataexplorer (#8769) 2019-12-23 12:15:46 -08:00
Anthony Dresser
4293d53e79 Merge from vscode d06f0e877ceaf3a35a283f1bfdc50927ec8dfd1e (#8767) 2019-12-22 08:53:45 -08:00
Alex Ma
ce10c3ac3f Added check for the last null row (#8764) 2019-12-20 15:16:56 -08:00
Anthony Dresser
74caccdfe6 Merge from vscode 4f85c3c94c15457e1d4c9e67da6800630394ea54 (#8757)
* Merge from vscode 4f85c3c94c15457e1d4c9e67da6800630394ea54

* disable failing tests
2019-12-19 23:41:55 -08:00
Maddy
778a34a9d2 Books/search within notebook (#8426)
* initial commit

* get notebook content

* skeleton for find in notebookModel

* add search function and keyboard shortcut

* add command for hiding find widget

* started on search logic

* continue search logic

* continue search logic

* add findcountchange listener

* notebook find position

* added css class

* hide find widget

* focus find input

* search for multiple occurrences in one line

* start notebook find decorations

* start adding decorations to notebook model

* added editor_model_defaults

* added cursor position

* merged master and resolved husky erros

* initial changes added to Lucyls base implementation

* pass NotebbokRange instead of Range to decorations

* changes after merging master

* temp changes for testing

* style updates from vscode merge

* implemented the empty methods and added supporting functionality from textModel

* just a little error checking

* It gets more and more yellow

* making highlight work between code cells

* highlight only word

* remove highlight on close and maintain the position

* cleanup of unused references

* clean up

* find between code cells refactored

* highlight markdown line and scroll to it

* find index fix

* find index fix

* code clean up

* remove commented code

* tslint fix for: Cannot use global 'NodeJS'

* linting rule fixes

* deltaDecoration base implementation on the base class

* moced class defnitions from interface fikle

* updated action names

* DOM.addClass instead of overwriting

* resooved conflicts

* moved 'find' code away from notebookmodel to sep class

* moved find realted code to seperate folder

* created notebookFindModel

* clean up

* highlight color changes

* spacing and typo fixes

* highlight correct element for nested elements

* do not iterate through paragraphs and li

* find accross notebooks

* keep track of index

* clear decorations on close

* floating promises

* maintain search context

Co-authored-by: Lucy Zhang <lucyzhang929@gmail.com>
Co-authored-by: Chris LaFreniere <40371649+chlafreniere@users.noreply.github.com>
2019-12-19 17:21:03 -08:00
Alan Ren
102d820935 Alanren/remove bdc (#8737)
* remove bdc server dependency

* revert the change to script

* cms needs 2 servers, adding 2019 server

* fix pipeline yaml
2019-12-19 13:53:32 -08:00
Karl Burtram
4a4e6dd90c Update README and CHANGLOG for Dec (#8705)
* Update README and CHANGLOG for Dec

* Update changelog
2019-12-19 10:38:17 -08:00
Anthony Dresser
82a08d108b add more activation events (#8665) 2019-12-18 23:39:17 -08:00
Anthony Dresser
099916bf19 Merge from vscode e74405d11443c5361c31e2bc341866d146eee206 (#8740) 2019-12-18 23:36:29 -08:00
osmant
48dcb7258e Guest account connection issue while using (#8726)
AAD authentication
2019-12-18 12:13:46 -08:00
swjain23
e181cf2fcd Bug fix to return authType as undefined if displayName is not set (#8731)
We noticed that if displayName is undefined this method would return the first auth type it found as getAuthTypeDisplayName() would return undefined.
If the displayName is undefined, we would not have a matchingTYpe and it should be undefined.
2019-12-18 11:40:20 -08:00
Maddy
746b4d7815 Book/untitled file name updates (#8579)
* file-name has entire path as name, changes to address that

* await promises
2019-12-18 09:09:17 -08:00
Maddy
a67e3abb4c add open book command to open any book from local sys (#8632)
* add open book command to open any book from local sys

* no-floating promises

* moved all the loc strings to common loc file

* typos
2019-12-18 09:08:52 -08:00
Anthony Dresser
30d9e9c141 Merge from vscode 4636be2b71c87bfb0bfe3c94278b447a5efcc1f1 (#8722)
* Merge from vscode 4636be2b71c87bfb0bfe3c94278b447a5efcc1f1

* remove tests that aren't working
2019-12-18 00:14:28 -08:00
Kim Santiago
0fd870d156 bump sqltoolsservice to get dacfx fix for schema compare (#8720) 2019-12-17 16:27:47 -08:00
Karl Burtram
768d333b35 Bump SQL Tools to 2.0.0-release.40 (#8719)
To pick up DacFx vbump
2019-12-17 15:42:57 -08:00
Anthony Dresser
2058682743 change some activation events for bdc and admin-tool (#8660) 2019-12-17 12:49:08 -08:00
Anthony Dresser
1c0f7c6702 open external for files from results serialize (#8666) 2019-12-17 12:47:23 -08:00
Anthony Dresser
9e0ba700c1 defensive about query rows; fix styling on dropdown; fix bug with always using the first dataset (#8680) 2019-12-17 12:26:33 -08:00
Anthony Dresser
ea5f9be441 Properly expose errors in ads and tests (#8692)
* add code to expose errors outside zone

* remove unexpect error hiding

* remove uncessary code

* fix tests

* trying to catch more errros

* revert for testing

* wip

* wip

* figured out what was going on

* wip

* fix tests

* fix tests
2019-12-17 12:06:36 -08:00
Anthony Dresser
6b5c31410d add GITHUBTOKEN env for product installs (#8717) 2019-12-17 12:06:08 -08:00
Anthony Dresser
8e4d0ad446 remove unnecessary info from problem svgs (#8712) 2019-12-17 10:13:06 -08:00
Leila Lali
0a6dc2720d Machine Learning Services extension with package management feature (#8622)
* Machine Learning Services extension with package management feature
2019-12-17 09:55:42 -08:00
Aditya Bist
ef8c0e91e6 fix provider dropdown option for cms dialog (#8711) 2019-12-16 18:50:50 -08:00
Alan Ren
2f6c764869 download 2019 developer edition (#8704) 2019-12-16 14:53:22 -08:00
rajeshka
73b9849dd5 Toggle Trusted Button (#8569)
* Toggle Trusted Button

* Persist Trusted information to Cache

* Trusted toggle unit test fixed

* Updated test comment
2019-12-16 13:32:56 -08:00
Alan Ren
64e217eac2 change order of tasks (#8703) 2019-12-16 13:21:03 -08:00
Chris LaFreniere
826e069b63 Fix passing in connection profile (#8689) 2019-12-16 13:20:43 -08:00
Chris LaFreniere
6e8a08c27a Fix Notebook Scrolling by Setting alwaysConsumeMouseWheel to False (#8686)
* flip alwaysConsumeMouseWheel to false for nb

* remove semicolon
2019-12-16 13:17:02 -08:00
Amir Omidi
5a01218691 Check for signed variable (#8682)
* Check for signed variable

* Check for signed

* use variable syntax

* Signed has to be upper case
2019-12-16 12:25:22 -08:00
Karl Burtram
f45374bc30 Bump ADS to 1.15 for Feb release train (#8702) 2019-12-16 12:00:33 -08:00
Arvind Ranasaria
ecbd8fb82c add installation search path to tools discovery (#8687) 2019-12-16 11:39:08 -08:00
Charles Gagnon
a42407b81a Fix missing action buttons with single view (#8694) 2019-12-16 10:33:21 -08:00
Charles Gagnon
a622e4ac40 Fix options dropdown arrow alignment in options dialog (#8695) 2019-12-16 09:58:57 -08:00
Arvind Ranasaria
6816f2dabb fix informational/error messages when tools not installed/not discovered/not installable (#8679)
* fix informational/error messages
2019-12-13 18:32:20 -08:00
Aditya Bist
a0c3f8f614 fix modelview tables failing for number columns (#8681) 2019-12-13 16:46:57 -08:00
Charles Gagnon
01b9754c80 Fix alignment of select dropdown in modal dialogs (#8683) 2019-12-13 16:23:25 -08:00
Aditya Bist
cd8f26ae9d formatted file (#8677) 2019-12-13 15:53:49 -08:00
Charles Gagnon
b650168704 Add de viewlet tests back (#8673) 2019-12-13 14:08:01 -08:00
Charles Gagnon
9587edd867 Bump extension versions (#8674)
* Bump agent version

* Bump more extensions

* Undo version change for BDC - is builtin
2019-12-13 11:11:56 -08:00
Anthony Dresser
642920504a Merge from vscode cbeff45f80213db0ddda2183170281ed97ed3b12 (#8670)
* Merge from vscode cbeff45f80213db0ddda2183170281ed97ed3b12

* fix null strict checks
2019-12-13 00:50:37 -08:00
Amir Omidi
67abc2f690 zonejs changes (#8664) 2019-12-12 17:07:26 -08:00
Charles Gagnon
5bf85a2855 Add tests for refresh scripting action (#8648)
* Add tests for refresh action

* Revert changes to make tree public

* Move tests into subsuite
2019-12-12 16:04:28 -08:00
Anthony Dresser
829717f5de move the step for publishing integration test results (#8658) 2019-12-12 15:33:55 -08:00
Cory Rivera
866bfc61ba Add more unit tests for NotebookInput (#8654) 2019-12-12 14:59:56 -08:00
BranislavGrbicMDCS
6638db1f35 Brgrbic/code cleanup issue8158 (#8655)
* Removing engine edition specific condition from displaying error message

* Removing unused import
2019-12-12 13:24:31 -08:00
Anthony Dresser
f0dde491be fix edit data close (#8657) 2019-12-12 13:18:33 -08:00
Anthony Dresser
994a2382ad fix build stream for rebuild extensions (#8650) 2019-12-12 12:07:49 -08:00
Charles Gagnon
856fec4243 Remove preview tags (#8653) 2019-12-12 11:24:05 -08:00
Chris LaFreniere
d1c594cfd0 Change deploy string from connections viewlet/welcome page (#8646)
* Change deploy string from connections viewlet

* Also change welcome page
2019-12-12 10:25:22 -08:00
Anthony Dresser
86da9852ca distro (#8651) 2019-12-11 22:48:46 -08:00
Anthony Dresser
4ba6a979ba Merge from vscode a4177f50c475fc0fa278a78235e3bee9ffdec781 (#8649)
* Merge from vscode a4177f50c475fc0fa278a78235e3bee9ffdec781

* distro

* fix tests
2019-12-11 22:42:23 -08:00
Anthony Dresser
82974a2135 remove some unused code (#8641) 2019-12-11 20:06:40 -08:00
Anthony Dresser
585c18ef4d distro update (#8647) 2019-12-11 18:11:55 -08:00
Alex Ma
7ec516d851 Change typo for monaco-pane-view (#8644)
* changed monaco-panel to pane (typo in classname)

* removed headervisible
2019-12-11 16:56:37 -08:00
Charles Gagnon
7e970d04ca Fix tree refresh (#8625)
* first part

* remove another refresh collapse expand

* Fix scriptable nodes

* Fix test
2019-12-11 16:34:03 -08:00
Charles Gagnon
808ce4366d Fix error deleting mount (#8637) 2019-12-11 16:31:44 -08:00
Arvind Ranasaria
8271226487 Improve performance of tools table painting for bdc deployment tools (#8628)
* get tool status at tool construction

* review feedback
2019-12-11 13:07:16 -08:00
Arvind Ranasaria
bbb7a67bd2 Update description to fit in Description column (#8633) 2019-12-11 10:41:00 -08:00
Chris LaFreniere
698b4fce41 Add generic select box padding (#8635) 2019-12-10 22:14:01 -08:00
Chris LaFreniere
302e8305ef add titles to collapse expand button (#8607) 2019-12-10 21:08:28 -08:00
Anthony Dresser
659f392196 add readonly method to editors (#8630) 2019-12-10 18:16:16 -08:00
Karl Burtram
775a25d944 Bump SQL Tools to 2.0.0-release.39 (#8631) 2019-12-10 16:59:42 -08:00
Chris LaFreniere
bceb766d28 Notebooks: Fix Cancel for Connection Dialog to Actually Close Window (#8626)
* Fix connection dialog not going away on cancel

* Remove unnecessary change
2019-12-10 16:59:15 -08:00
Arvind Ranasaria
36fd618ed4 Add validation for cluster name (#8617)
* adding input validation for cluster name

* Adding type to the inputValidtor

* move out const to global space
2019-12-10 11:50:46 -08:00
Charles Gagnon
99c473cdf6 Fix shift + enter to go to previous find entry in profiler (#8615) 2019-12-10 07:33:49 -08:00
Benjin Dubishar
88b55d0e06 Fixing extension exclusion name (#8616) 2019-12-09 18:52:11 -08:00
Cory Rivera
184d4bbe27 Add units tests for Notebook Actions (#8595) 2019-12-09 15:37:40 -08:00
Maddy
4fc6f4a13e unescape the encoded chars in tablename uri (#8446)
* unesacpe the encoded chars in tablename uri

* unescape special characters
2019-12-09 14:40:21 -08:00
Anthony Dresser
adad11c725 Add scripts for creating artifacts (#8602)
* add remote build to the pipeline

* add a separte compile step

* fix darwin build

* add linux container and fix docker creation

* fix distro

* remove system install and add xvfb start

* distro

* add logic to only run tests on hosted machine

* fix yml

* fix yml

* add linux docker container

* fix docker file

* fixdocker

* fix darwin

* fix linux build

* add cache salt to npm cache

* intentially ignore kerberos binaries

* disable docker for now

* remove vsix from win32

* fix linxu and win32

* fix linux and win32

* fix linux and win32

* fix linux

* maybe fix win32

* fix linux

* fix linux image; disable server package for noe

* fix minimatch for win32 test

* fix linux build

* add back in docker

* fix test

* use tmp directory insteado workspace

* change name of docker image

* try a differnt folder

* fix download

* add a git clean step

* bump cache

* fix issues with builidng

* readd windows build, revert signing changes

* simplify win32 server packaage

* some more optimizations

* use decompress task

* add back in install for windows test

* fix linux build

* add integration test to bat file

* make platform the same

* add copy extension to windows test

* revert tests back

* fix vsix drop aquasition

* inital changes

* fix download

* fix dependent on for release

* just downlaod everything which makes it easier

* setup pipeline artifacts

* more clean up

* fix linux

* add logic to install extensions for integration tests

* fix extension install

* fix build failures

* fix some issues

* fix darwin drop

* change linux build copy to js

* fix darwin archive

* fix copy artifacts and use it for windows

* use for darinw

* fix darwin

* ad dep on linux

* fix win32

* fix darwin

* fix copy artifacts

* mkdir p darwin

* fix copy

* add error handler

* add more binaries

* add more binaries

* fix archive path on linux

* add more options to integration extension install

* add more binaries

* add verbose to installer copy

* fix ip rate issues

* fix bat file for including extensions

* move echo

* add windows test condition

* use powershell cmdlet rather than cp

* remove verbose

* remove compiling of extensions

* fix pipelines

* update docker location

* fix copy item

* fix signing on win32

* fix locations

* move back to using cp

* ensure the docker folder exists

* test a createdrop script on darwin

* wip

* fix copy

* add drop for linux

* fix builds

* fix drop

* fix docker on linx

* fix darwin

* lets try this again

* fix linux drop

* i guess try the copy files task

* add create drop for win32

* ensure windows drop location exists

* fix extension install

* just use mkdir

* add better logic for installing extensions

* ignore errors?

* try force

* testing

* ok this should work

* use production cli

* fix liveshare vscodeignore

* fix integration test script

* revert changes to integration tests to fix them

* try newitem

* remove exec

* explicitly clear last exit code

* fix test build

* revert publish scripts

* add version json

* fix tests

* add back sources creation

* this is stupid

* fix clean positioning

* add version information to drop

* fix locations of artifacts in publush scripts
2019-12-09 14:34:46 -08:00
Anthony Dresser
a1b5af0445 remove secrets from ci (#8609) 2019-12-09 14:26:21 -08:00
Zbyněk Sailer
db4f512991 LOC CHECKIN | Microsoft/azuredatastudio master | 20191205 (#8571) 2019-12-09 10:57:01 -08:00
Charles Gagnon
42ff30515c Don't instrument any test code for coverage (#8598) 2019-12-09 09:01:10 -08:00
Chris LaFreniere
62565e0577 Notebooks: Only have One Connection in Attach To Dropdown (#8582)
* Have only one connection in attach to dropdown

* LGTM fixes

* Test fixes not unnecessarily changing context 2x

* PR Feedback
2019-12-08 11:03:51 -08:00
Anthony Dresser
de177c0335 distro (#8601) 2019-12-07 17:22:36 -08:00
Anthony Dresser
d614116b63 Merge from vscode a416c77e56ef0314ae00633faa04878151610de8 (#8600)
* Merge from vscode a416c77e56ef0314ae00633faa04878151610de8

* distro

* fix tests

* fix tests
2019-12-07 17:19:16 -08:00
Anthony Dresser
a7ff238653 Optimize pipelines (#8520)
Too Many commits
2019-12-07 14:27:38 -08:00
Arvind Ranasaria
6fb120f5dd Add tool path column to the deployment tools table (#8597)
* remove redundan console.warn messages

* add tool path, trim existing columns in tools table

* Update dockerTool.ts
2019-12-06 15:53:40 -08:00
Charles Gagnon
6e8cc3aaca Fix accessibility issues with Manage Access dialog (#8586)
* Fix accessibility issues with Manage Access dialog

* implement more property interfaces

* Fix lgtm errors

* Simplify condition
2019-12-06 15:09:42 -08:00
Arvind Ranasaria
18ab73cc1d remove redundan console.warn messages (#8593) 2019-12-06 14:16:38 -08:00
Charles Gagnon
d1c7370f1c Make links more descriptive (#8591) 2019-12-06 13:06:49 -08:00
Sakshi Sharma
794f7a14c0 Update schema compare extension to support SQL Login (#8567)
* Update schema compare extension to support SQL Login

* Update schema compare extension to support SQL Login

* Fixed the scenario where scmp file doesn't open as expected- cleaning up previous connect information and setting appropriate button states if either source or target info is missing. Also updated function getEndpointName to return empty string if serverName and databaseName aren't present, instead of partial information.

* Addressed comments. Fixed var names and moved repeatitive code in a helper function.
2019-12-06 11:52:48 -08:00
Alan Ren
7cd2a6d6aa fix radio card group rendering error (#8587)
* fix rendering error

* remove extra $ sign
2019-12-06 10:20:37 -08:00
Amir Omidi
febf6b9e70 Handle tenant failures (#8578)
* Handle tenant failures

* Change the comparison

* Fix issue
2019-12-05 17:47:05 -08:00
Arvind Ranasaria
7201025a15 Changes to remove Pip3 based installations for azdata (#8577)
* saving intermediate work - to merge master

* remove inadvertent change

* Remove Pip3 installation from all tools

* working version

* making some small fixes

* add back accidently removed file

* Update resourceTypePickerDialog.ts

* Removing redundant trailing ","

* Remove commented dead code

* fix casing of nls string

* remove inadvertent change

* change installation locations from field to properties so that they are constructed at run time'
2019-12-05 17:15:27 -08:00
Anthony Dresser
4787d7ba5c fix notebookinput matches function to work with replacement (#8585) 2019-12-05 16:53:36 -08:00
Alan Ren
3de95af25c check setting directly to avoid value reset (#8583) 2019-12-05 15:57:13 -08:00
swjain23
0bf4790a64 Add changes for flavor selection (#8419)
* Add changes for flavor selection

* Use getDefaultProviderId method

* Update default engine user setting description

* Add back check for codeEditor

* Add test for multiple providers

* Removing extra merge line

* Add an attribute to ConnectionProviderProperties for language flavor

Adding a boolean property to ConnectionProviderProperties for providers that are language flavors. When it is set to true, the provider will be part of drop down for changing SQL language flavor.

* Update variable name

* Put logic for removing CMS at one place and remove flag for flavor provider

* Using keys instead of entries

Using Object.keys instead of entries as doing [0] can be error prone if no provider matches.

* Adding logic to check from params

* Updating variable names

* Rename dedup map

* Fix action
2019-12-05 15:28:35 -08:00
Leila Lali
0d9353d99e Manage Package Dialog Refactor (#8473)
* Refactoring Manage Packages dialog so that other extensions can contribute to it by registering package mange providers for different location and package type
2019-12-05 10:26:50 -08:00
Maddy
a898c46e74 version bump (#8563)
* version bump

* vbump the release version as well
2019-12-05 10:13:56 -08:00
Anthony Dresser
493e7087cf update distro (#8570) 2019-12-04 19:55:52 -08:00
Anthony Dresser
f5ce7fb2a5 Merge from vscode a5cf1da01d5db3d2557132be8d30f89c38019f6c (#8525)
* Merge from vscode a5cf1da01d5db3d2557132be8d30f89c38019f6c

* remove files we don't want

* fix hygiene

* update distro

* update distro

* fix hygiene

* fix strict nulls

* distro

* distro

* fix tests

* fix tests

* add another edit

* fix viewlet icon

* fix azure dialog

* fix some padding

* fix more padding issues
2019-12-04 19:28:22 -08:00
Benjin Dubishar
a8818ab0df Initial commit of Database Projects extension (#8540)
* Initial commit of Database Projects extension

* Removing unused references, correcting license, tabs -> spaces in package.json

* cleaning up linter errors
2019-12-04 15:02:55 -08:00
Cory Rivera
9691fab917 Add code coverage tests for cell.ts (#8564) 2019-12-04 14:45:48 -08:00
Benjin Dubishar
a7f5741608 Correcting license link on schema-compare (#8560) 2019-12-04 14:44:04 -08:00
Alan Ren
c34869c243 improve the install sql on windows scenario (#8559) 2019-12-04 10:59:30 -08:00
Alan Ren
ab94b9785e deprecate the card component (#8552)
* deprecate the card component

* add deprecated tag
2019-12-04 10:48:08 -08:00
Arvind Ranasaria
ee94524ab1 Pull GITHUB_TOKEN from akv store (#8538)
* Pull GITHUB_TOKEN from akv store

* fixing subscription for ado-secrets

* undo changes to publish-types.yml

* fix subscription again
2019-12-04 09:37:58 -08:00
Charles Gagnon
6cce532ca4 Fix wizard not displaying error messages (#8545) 2019-12-03 17:40:19 -08:00
Charles Gagnon
7f16a4d857 Fix refresh action (#8519)
* Fix refresh action

* Refactor to async

* Fix missing bracket

* Remove unused error level

* Add back in error message

* Fix missing service
2019-12-03 17:40:02 -08:00
Cory Rivera
255ea1945b Only conda install pykerberos on non-windows platforms. (#8544) 2019-12-03 16:40:11 -08:00
Alan Ren
b38b53b658 accessible radio card (#8514)
* accessible radio card group

* set radio card group width

* address comments

* address comments 2

* fix the profile card not being focused issue
2019-12-03 13:26:00 -08:00
Arvind Ranasaria
82c60a23c0 Pull integration test connection string variables from secret store (#8529)
* Pull test secrets from Secret store

* removing redundant steps: from copy/paste

* fix indentation

* fix env: sections for test secrets
2019-12-03 10:18:09 -08:00
Anthony Dresser
c93ea20b75 fix uri string for converting inputs (#8530) 2019-12-03 10:09:20 -08:00
Zbyněk Sailer
6a4e4fc07b LOC CHECKIN | Microsoft/azuredatastudio master | 20191203 (#8533) 2019-12-03 10:07:16 -08:00
Charles Gagnon
d358cdac1e Add tests for declarative table component (#8499) 2019-12-03 09:04:33 -08:00
Charles Gagnon
4f8ced1f6b More dangling promise cleanup (#8518)
* More dangling promise cleanup

* return void

* Function to async

* Fix a couple missed promises
2019-12-02 15:54:33 -08:00
Cory Rivera
8cc60fde90 Add code coverage tests for notebookUtils (#8524) 2019-12-02 14:19:37 -08:00
Charles Gagnon
b8bc629970 Add aria labels and consolidate loc strings (#8494) 2019-12-02 13:33:24 -08:00
Arvind Ranasaria
9a83dfc022 Update sql-product-build.yml for Azure Pipelines (#8508) 2019-12-02 12:07:33 -08:00
Anthony Dresser
d5e26527a6 Clean windows agent on pipeline (#8503)
* add step to clean repo since agent does start clean

* move clean

* disable caaching for windows agent
2019-12-02 11:06:52 -08:00
Anthony Dresser
c9226a07c5 fix publish scripts for windows (#8501) 2019-11-27 16:08:56 -08:00
Charles Gagnon
d451528b36 Fix loading component not disappearing (#8495) 2019-11-27 14:42:28 -08:00
Anthony Dresser
48b2cbb0bf Rework windows pipeline to sign less (and min builds) (#8472)
* only sign windows once

* more scoping and add copy steps

* remove reh

* wip

* use min everywhere

* fix zip file name

* fix location of build file

* fix version.json production

* remove unneeded vars

* fix archive drop

* give mac more time

* fix location of windows archive

* fix system location and add comments

* fix installer signing

* remove unnecessary build step

* reduce the sign count

* fix dlls

* remove missing dlls
2019-11-27 13:01:55 -08:00
Anthony Dresser
39e6b9933d add publish scripts (#8490) 2019-11-27 12:50:47 -08:00
Anthony Dresser
d08fb1aee2 fix upgrade path for new serialization model (#8489) 2019-11-27 12:48:54 -08:00
Amir Omidi
5235a1d029 New azure authentication experience (#8483)
* Changes

* Work in progress

* Authenticate with azure

* enbable national clouds and initialization

* Add support for tenants

* Finish up account work

* Finish up azure auth

* Don't allow prompt if we're not initialized

* Shut down server

* Remove trailing comma

* encode uri component

* ignore errors

* Address comments on github

* Fix issues and disable feature without env var

* Don't encode the nonce

* Only use env variables to disable the new sign in

* Show more user friendly messages to users
2019-11-27 12:33:08 -08:00
Charles Gagnon
3135b8525b Add styling and component column type to declarative table (#8476)
* Initial wip

* wip

* Working implementation

* Make widths a bit nicer and remove sqlops addition

* Add sqlops back in

* Fix timing issue with tables

* Undo change to sql.bat and remove loading component when done
2019-11-27 08:06:41 -08:00
Charles Gagnon
0e9797c394 Fix more floating promises (#8460) 2019-11-27 08:04:51 -08:00
Anthony Dresser
4145ecfb32 default to using extension of the file for editor replacement (#8482) 2019-11-26 14:28:27 -08:00
Alan Ren
20e9b329b1 only handle the keyboard events on header (#8488) 2019-11-26 13:42:04 -08:00
Karl Burtram
d1ccbf028f sp_whoisactive and ServerReports updates for build breaks (#8431) 2019-11-26 13:02:34 -08:00
Karl Burtram
a1fc621e1b Bump SQL Tools to 2.0.0-release.37 for logging path fix (#8486) 2019-11-26 12:51:00 -08:00
Anthony Dresser
9ef6bec960 add back in listen for run query (#8481) 2019-11-26 10:40:22 -08:00
Rich Smith
b631530753 Modify connection management to support Active Directory authType for non-SQL DBs (#8434)
* First attempt to add Azure MFA login for PostgreSQL

* Finish merge with master

* Fix auth type default selection

* Add AzureMFAAndUser auth type for Orcas

* Fix formatting

* Update change log

* Incorporate some review comments

* Missed an occurrence of AzureResource

* Try to move all changes out of azdata.d.ts and sqlops.d.ts

* Concrete implementation of ConnectionProfile in azdata no longer has azureAccount

* Use enum names instead of numbers in config files
2019-11-26 10:32:59 -08:00
Anthony Dresser
d9997cebfc Only package external extensions on Linux in the pipelines (#8464)
* don't package every time, only on linux

* fix build

* fix build

* fix floating promises

* add comment

* fix order of steps

* clean up packaging of the extensions

* minor cleanup

* make code easier to read and add more logging

* do some rename

* maybe?

* re order the code

* fix output path not existing
2019-11-25 21:08:58 -08:00
Alan Ren
ffee69a765 set focus to default cards when loaded (#8480)
* set focus to default cards when loaded

* add return type
2019-11-25 20:31:39 -08:00
Anthony Dresser
7a38943412 remove request from azure externals (#8462) 2019-11-25 15:07:53 -08:00
Alan Ren
c970173fc0 fix azdata eula link (#8475) 2019-11-25 14:41:11 -08:00
Alan Ren
0979ce8de6 set dropdown aria-label (#8456) 2019-11-25 13:05:00 -08:00
Alan Ren
878bcc0d92 add service column name (#8457) 2019-11-25 13:04:36 -08:00
Anthony Dresser
68b2f1a8e4 Remove unnecessary lock (#8466)
* remove unncessary lock

* remove another one
2019-11-25 12:42:31 -08:00
Karl Burtram
8cd06f74b9 Update ENU XLF files (#8469) 2019-11-25 10:55:14 -08:00
Anthony Dresser
43387f0d0b Rework how we handle custom editors (#5696)
* update how we handle editors

* small edit

* handle changing languages

* implement generic language association

* implement notebook serializers

* fix tests

* formatting

* update how we handle editors

* small edit

* handle changing languages

* implement generic language association

* implement notebook serializers

* fix tests

* formatting

* fix broken

* fix compile

* fix tests

* add back in removed note book contributions

* fix layering

* fix compile errors

* fix workbench

* fix hanging promises

* idk why these changed

* fix change

* add comments to language change code

* fix a few bugs

* add query plan association
2019-11-24 19:22:11 -08:00
Anthony Dresser
f3a6fc6f88 remove myself as dri (#8459) 2019-11-24 14:51:50 -08:00
Alan Ren
f2bc367e78 set aria label for options dropdowns (#8453) 2019-11-24 12:23:59 -08:00
Alan Ren
46a8410fc5 make group container accessible (#8452) 2019-11-24 12:23:16 -08:00
Alan Ren
be7c26ede5 update the card role and add aria-checked state (#8451) 2019-11-24 12:03:10 -08:00
Anthony Dresser
fb3b7be9e5 Add release logic to ymls (#8450)
* adding releasing logic via tagging

* add dep for releasing

* fix name

* minor fixes
2019-11-22 19:26:31 -08:00
Alan Ren
78731e0c8c better loading message (#8448) 2019-11-22 18:52:59 -08:00
Karl Burtram
6b67f27cac Bump SQL Tools to 2.0.0-release.35 for SMO update (#8449) 2019-11-22 18:18:33 -08:00
Alan Ren
56182a53d1 add role to card component (#8447) 2019-11-22 17:31:22 -08:00
Maddy
66e1c01793 regex to encode & correctly (#8441) 2019-11-22 17:20:41 -08:00
Anthony Dresser
f0039a64a7 Fix build ymls (#8445)
* add publish mac args

* don't use minified

* continue on error

* no fancy error handling

* don't need continue on error specifier
2019-11-22 17:05:56 -08:00
Anthony Dresser
22501a09a1 Add governance to yml builds (#8444)
* add governance to myl

* remove wrong addition

* remove unnecessary values
2019-11-22 16:56:23 -08:00
Alan Ren
c03cce7f60 set aria label for table (#8443) 2019-11-22 16:05:57 -08:00
Alan Ren
98abf4a758 add aria label for agreement checkbox (#8439) 2019-11-22 15:50:09 -08:00
Anthony Dresser
c19bc54877 add mixin steps to product yml (#8440) 2019-11-22 13:55:21 -08:00
sakshisharma-DS
e17d4e96ae Update exclude/include message in SchemaCompare (#8350)
* Update exclude/include message in SchemaCompare

* Segregated the messages as discussed

* Updated message with a comma and merged two If statements in one
2019-11-22 13:20:38 -08:00
Alan Ren
b333788c3c space key as click (#8437) 2019-11-22 11:24:28 -08:00
Cory Rivera
632ca0685e Add code coverage tests for notebookContexts.ts (#8430) 2019-11-22 11:23:34 -08:00
Charles Gagnon
52de2b4751 Fix clickable being announced for all modelview text (#8384)
* Fix clickable being announced for all modelview text

* Remove unused method

* Move API changes into proposed
2019-11-22 11:01:46 -08:00
Anthony Dresser
fc0c05c755 Remove steps that delete code sign.md (#8397)
* remove steps that delete code sign.md

* update sign tool

* fix config

* wip

* add continue on error for md delete

* try this

* copy exactly what was there

* remove final del
2019-11-21 23:34:18 -08:00
Arvind Ranasaria
22b8ebd281 Adds minimum version requirement for kubectl (#8415)
* saving untested changes

* Fix for issue #8341

* Fix tab navigation within modal dialog (#8326)

* Fix tab navigation within modal dialog

* Add import

* Fix spelling

* Change to just add/remove items from DOM as necessary

* Fix a couple a11y issues with manage access (#8386)

* Fix a couple a11y issues with manage access

* Fix strict null check

* Fix another strict null check

* Update js file with monaco -> ads workbench (#8398)

* Set encoding to true (Bug fix for flavor) (#8395)

For offline scripts it shows the flavor as “Choose SQL Language”, this is because in flavorStatus.ts line 150 when we compare (uri === currentUri), the value of current Uri is "file:///d%3A/GitHub/PGExtension/TestDatabase/1ae730a9.sql" whereas the value for uri is "file:///d:/GitHub/PGExtension/TestDatabase/1ae730a9.sql" which ends up returning label ‘Choose SQL Language’.

In queryInput.ts we set public get uri(): string { return this.getResource().toString(true); }
This is the variable that we use in doChangeLanguageFlavor. And as we compare this with getEditorUri() later in flavorStatus.ts, it does not match. So enabling encoding here as well to get the encoded string in both the cases.

* bump handlebars in extensions (#8411)

* remove active css class on mouse leave (#8410)

* Bump SqlToolsService (#8404)

* Remove open notebook entry points (#8393)

* Add aria role and selected properties (#8405)

* Add aria role and selected properties

* Add img role fix

* Add title to text

* Notebooks cleanup: Remove old out of proc markdown option (#8394)

* Remove old out of proc markdown option

* Revert change to stats.js

* remove debug console.logs

* PR feedback
2019-11-21 15:29:20 -08:00
Anthony Dresser
ec91d3eda0 add filter for git hook on hygiene (#8396) 2019-11-21 13:00:20 -08:00
Anthony Dresser
7b31ee27d8 remove governance checks on ci (#8418) 2019-11-21 12:46:24 -08:00
Anthony Dresser
927120fa3b Remove labels from issue templates (#8392) 2019-11-21 12:11:50 -08:00
Charles Gagnon
f1ca2a35ef Add thank you to changelog (#8424)
@aspnerd Thanks again for the fix! Let me know if you'd prefer not to be added to this list.
2019-11-21 11:53:03 -08:00
Maddy
1760af13d1 Fix/open relative on dev (#8359)
* escape characters only on hyperlinks

* removed extra line

* added tests and changes to accomodate tests

* updates to test

* added comments

* use path.join

* format doc build error

* added comments
2019-11-21 11:24:10 -08:00
Karl Burtram
183cb84fbc Bump Server Reports and whoisactive extensions (#8412) 2019-11-21 10:18:32 -08:00
Charles Gagnon
019d5088ec Add engine edition to connection telemetry (#8425) 2019-11-21 10:05:44 -08:00
Anthony Dresser
15913e5e48 fix mixin (#8420) 2019-11-20 17:08:30 -08:00
Charles Gagnon
e6ffb97a7b Add info message for copy (#8416)
* Couple of a11y fixes for BDC Dashboard

* Moving ariaRole into separate PR

* Remove missed ariaRole tag

* Switch to just using notification dialog

* add back in blank line
2019-11-20 15:49:21 -08:00
Chris LaFreniere
8655044dfb Notebooks cleanup: Remove old out of proc markdown option (#8394)
* Remove old out of proc markdown option

* Revert change to stats.js
2019-11-20 14:00:06 -08:00
Charles Gagnon
f26c790736 Add aria role and selected properties (#8405)
* Add aria role and selected properties

* Add img role fix

* Add title to text
2019-11-20 13:56:59 -08:00
Chris LaFreniere
7e553031ce Remove open notebook entry points (#8393) 2019-11-20 13:46:03 -08:00
Charles Gagnon
164ec41fb1 Bump SqlToolsService (#8404) 2019-11-20 13:32:41 -08:00
Alan Ren
8cd9097526 remove active css class on mouse leave (#8410) 2019-11-20 13:28:06 -08:00
Anthony Dresser
134b0b32c6 bump handlebars in extensions (#8411) 2019-11-20 13:08:59 -08:00
swjain23
de4b7af1ad Set encoding to true (Bug fix for flavor) (#8395)
For offline scripts it shows the flavor as “Choose SQL Language”, this is because in flavorStatus.ts line 150 when we compare (uri === currentUri), the value of current Uri is "file:///d%3A/GitHub/PGExtension/TestDatabase/1ae730a9.sql" whereas the value for uri is "file:///d:/GitHub/PGExtension/TestDatabase/1ae730a9.sql" which ends up returning label ‘Choose SQL Language’.

In queryInput.ts we set public get uri(): string { return this.getResource().toString(true); }
This is the variable that we use in doChangeLanguageFlavor. And as we compare this with getEditorUri() later in flavorStatus.ts, it does not match. So enabling encoding here as well to get the encoded string in both the cases.
2019-11-20 12:36:20 -08:00
Charles Gagnon
f976fc9418 Update js file with monaco -> ads workbench (#8398) 2019-11-19 17:35:07 -08:00
Charles Gagnon
55059907a3 Fix a couple a11y issues with manage access (#8386)
* Fix a couple a11y issues with manage access

* Fix strict null check

* Fix another strict null check
2019-11-19 13:42:53 -08:00
Charles Gagnon
8ca0082ec4 Fix tab navigation within modal dialog (#8326)
* Fix tab navigation within modal dialog

* Add import

* Fix spelling

* Change to just add/remove items from DOM as necessary
2019-11-19 12:43:55 -08:00
Charles Gagnon
5b50696a1b Fix more floating promises (#8374)
* Fix more floating promises

* Fix a few more

* Test fixes

* Fix spellings

* More promise fixes

* couple more

* Few more fixes

* One more missed one
2019-11-18 17:11:25 -08:00
Anthony Dresser
840683e3f0 Build yamls (#8360)
* add darwin build

* add global product build

* add linux build

* fix build

* fix linux; add win32

* formatting

* formatting

* formatting

* formatting

* fix win32

* fix windows

* fix python

* fix linux display

* fix linux

* fix windows naming

* fix windows timeout

* add tagging

* add env for building

* add schedule
2019-11-18 13:50:02 -08:00
Charles Gagnon
ee5dbdffb9 Add charle-gagnon to default assignee (#8382) 2019-11-18 13:32:19 -08:00
Anthony Dresser
43f6a5576d assign chris to notebooks (#8381) 2019-11-18 11:12:33 -08:00
Charles Gagnon
8a44de27e7 monacoworkbench -> adsworkbench (#8380)
* monacoworkbench -> adsworkbench

* Fix typo
2019-11-18 10:57:39 -08:00
Anthony Dresser
fa9bbd4e1e remove commented our code that is removed elsewhere (#8370) 2019-11-18 10:55:31 -08:00
Charles Gagnon
66048f1d63 Default checkbox aria label to label (#8367) 2019-11-18 10:24:27 -08:00
Arvind Ranasaria
bafd9fd437 Native installers for azdata in auto deployment (#8285)
* code complete

* minor fixes from self-review

* installation searchaPaths and display logs fixes

* revert inadvertent change

* fixing installaton roott for debian and mac

* Chaning from getos to linux-release-info with sync api usage for figuring out os distribution

* adding file missed in previous commit

* fixing indvertent compile error that creeped in

* fix default install root for azli
2019-11-17 21:39:57 -08:00
Anthony Dresser
dae71c3bf4 assign myself (#8371) 2019-11-17 20:19:54 -08:00
Charles Gagnon
ae8304fc33 Add focus function for modelview components (#8348)
* Add focus method for modelview components

* Remove focus properties from table and radiobutton

* Fix break
2019-11-15 17:36:55 -08:00
Amir Omidi
d6ef42c8b0 Change how dropdowns get their lengths - take 2 (#8356)
* Add an element for width control

* Change the method that retrieves length

* Change to a readonly element
2019-11-15 15:17:46 -08:00
Anthony Dresser
131b0b93bf distro bump (#8362) 2019-11-15 14:59:28 -08:00
Charles Gagnon
82185f75d7 Fix tab focus for select box (#8349) 2019-11-15 14:31:40 -08:00
Anthony Dresser
3769b5066f bump packages (#8355) 2019-11-15 13:45:23 -08:00
Charles Gagnon
ba8c331356 Add alert role to error message element (#8354) 2019-11-15 11:51:08 -08:00
Alan Ren
80248846bb update the extensions.js (#8352) 2019-11-15 11:46:21 -08:00
Charles Gagnon
cf5297958a Update iKey (#8353) 2019-11-15 11:26:12 -08:00
Karl Burtram
22996cbce7 Update CHANGELOG for 1.13.1 hotfix release (#8342) 2019-11-15 09:27:25 -08:00
Charles Gagnon
7563416754 Fix a couple a11y issues (#8334)
* Fix a couple a11y issues

* Add other dialog
2019-11-15 07:41:09 -08:00
Anthony Dresser
02b1673c71 fix packaging (#8343) 2019-11-14 22:02:47 -08:00
Charles Gagnon
6ef87d7067 Insiders icons (#8313)
* Add separate icons for non-stable builds (#8078)

* Fixes

* Fix linux icon path

* WIP

* WIP

* WIP

* Undo all

* Try removing insiders icons completely

* Revert "Try removing insiders icons completely"

This reverts commit 7cdb04fcc3ba6ed92132e5d9113cc331e24b3c26.

* Revert "Undo all"

This reverts commit efac800b63483fbbcacdac45d885275c53350941.

* Revert "WIP"

This reverts commit b20517f374b85f6b02c665b86e73d9ae1b45258b.

* Revert "WIP"

This reverts commit 01383896ccc4939b000d0f08a1b370f6e66b0f3c.

* Revert "WIP"

This reverts commit da7da0a43401f1c97f1bfa66f255666cffe22948.

* Fixes

* Remove test

* Switch logic check

* Use insiders icons only

* Add newline
2019-11-14 17:21:57 -08:00
Anthony Dresser
e3921c6d14 Update configs for distro (#8337)
* update configs for distro

* add comments

* revert product.json

* update distro
2019-11-14 15:31:40 -08:00
Leila Lali
f9ef9d85f4 SQL extension building packages comments (#8296)
* Fixing the comment for building sql extension
2019-11-14 13:57:02 -08:00
Anthony Dresser
7a2c30e159 move code from parts to contrib (#8319) 2019-11-14 12:23:11 -08:00
Anthony Dresser
6438967202 enable stale pr (#8338) 2019-11-14 12:21:24 -08:00
Anthony Dresser
63bf82ad84 Add config for auto labeling (#8316)
* add auto assign label

* formatting
2019-11-14 12:08:16 -08:00
Charles Gagnon
18ab2ae799 Remove TelemetryUtils and use IAdsTelemetryService directly (#8289)
* Remove TelemetryUtils and use IAdsTelemetryService directly

* Fix event names and cleanup

* Fix tests

* Fix strict null check
2019-11-13 13:54:55 -08:00
Charles Gagnon
86d6295bf0 Fix welcome page icon (#8318)
* Fix welcome page icon

* Remove title metadata

* Add comment
2019-11-13 07:31:04 -08:00
Charles Gagnon
3f306d2396 Fix spacing for form layout (#8321) 2019-11-13 07:30:09 -08:00
Chris LaFreniere
2f1f5b2376 Prevent Markdown Cells from Collapsing (#8317) 2019-11-12 18:40:06 -08:00
Anthony Dresser
62d7c71093 Add stale pr config (#8315)
* add stale config

* formatting

* don't perform initally
2019-11-12 16:53:57 -08:00
Charles Gagnon
4f69ed5745 Fix missing icon and add test (#8307)
* Fix missing icon and add test

* Remove debug statement
2019-11-12 16:31:39 -08:00
Charles Gagnon
ddddf3beb4 Fix null ref error in query history (#8304)
* Fix null ref error in query history

* Add null check
2019-11-12 13:38:58 -08:00
Charles Gagnon
0ae525cbd5 Fix a few more floating promises (#8290)
* Fix a few more floating promises

* More explicit calls
2019-11-11 13:42:03 -08:00
Chris LaFreniere
0520870754 notebooks lgtm cleanup part 1 (#8280) 2019-11-11 13:40:48 -05:00
Charles Gagnon
8b17b77010 Undo codicon change to fix modelview images (#8201) 2019-11-11 08:28:48 -08:00
Alan Ren
e2ef1f8a89 remove the extension name link (#8271)
* remove the extension name link

* pr comments

* pr comments
2019-11-09 13:37:09 -08:00
Anthony Dresser
7f7052ad42 Clean up some of the extensions (#8267)
* 💄

* prune unused code

* more cleanup

* remove abunch of used code
2019-11-08 11:44:43 -08:00
Arvind Ranasaria
738ca479e4 fixes for #8165, #8167, & #8260 (#8250)
* saving untested work

* fixes for #8165 and #8167

* minor fixes

* fix for #8260

* minor quoting fixes

* fix for #8264

* minor fixes

* minor fixes.

* move tools constants to their own files

* remove execution cell results from notebooks.

* remove extraneous changes

* move ensuring of  StoragePath to platformservice

* remove fix for #8264 pending pm input
2019-11-08 09:11:21 -08:00
Cory Rivera
34a274a7d1 Update bundled python packages to pick up new powershell kernel updates. (#8273) 2019-11-07 16:46:05 -08:00
Charles Gagnon
b1496aa12f Don't show dialog cancelled errors for mount (#8272) 2019-11-07 16:00:23 -08:00
Charles Gagnon
30acba7921 Add preview title to BDC/HDFS components (#8268)
* Add preview title to BDC/HDFS components

* Additional dialogs

* More dialogs
2019-11-07 15:34:38 -08:00
Alan Ren
b5c0c37a23 add preview tag to the UI (#8266) 2019-11-07 14:31:17 -08:00
Anthony Dresser
ef0a92d83f Add compile options to a few extensions (#8252)
* add compile options to a few extensions

* move dep to dev dep

* fix return types
2019-11-07 11:41:31 -08:00
Alan Ren
b364e32beb improve the loading component (#8251)
* improve the loading component

* fix unused method warning

* revert the change
2019-11-07 11:28:38 -08:00
Alan Ren
7f51921176 fix the scroll issue of modal dialog and wizard (#8239)
* fix the scrolling issue of dialog and wizard

* revert unwanted changes
2019-11-07 10:50:00 -08:00
Charles Gagnon
efebd681b6 Add level to dialog titles and form component titles (#8233)
* Add level to dialog titles and form component titles

* Switch to h1

* h2 instead of role and aria-level
2019-11-07 09:32:02 -08:00
Charles Gagnon
d635390b33 Fix missing dashboard icons (#8249) 2019-11-07 08:05:06 -08:00
Anthony Dresser
61f0d614ce update distro (#8255) 2019-11-06 18:55:22 -08:00
Anthony Dresser
27b80804f5 add vm to distro (#8254) 2019-11-06 18:49:21 -08:00
Anthony Dresser
df0c505452 No unused locals (#8231)
* add no unused local

* fix strict null

* fix compile errors

* update vscode comments
2019-11-06 17:22:05 -08:00
Anthony Dresser
564f78b6f6 Revert "Revert "Remove typings and replace missing methods with vscodes (#8217)"" (#8242)
* Revert "Revert "Remove typings and replace missing methods with vscodes (#8217)" (#8240)"

This reverts commit e801a04bcf.

* fix runtime error

* add tests for chartview
2019-11-06 15:00:34 -08:00
Anthony Dresser
df6b6ded33 Distro build (#8235)
* update distro to work

* fix distro build

* fix distro build

* fix distro build
2019-11-06 13:16:39 -08:00
Elliot Boschwitz
e801a04bcf Revert "Remove typings and replace missing methods with vscodes (#8217)" (#8240)
This reverts commit 22a427f934.
2019-11-06 11:33:55 -08:00
Karl Burtram
3b1eaca58e Update Lang Pack extension strings from previous refresh (#8229)
* Update Lang Pack extension strings from previous refresh

* Bump lang pack versions
2019-11-05 17:53:27 -08:00
Anthony Dresser
22a427f934 Remove typings and replace missing methods with vscodes (#8217)
* remove typings and replace missing methods with vscodes

* fix strict-null-checks

* fix tests
2019-11-05 13:03:20 -08:00
Karl Burtram
4645a8ba6b Update ENU XLF (#8227) 2019-11-05 12:26:28 -08:00
Amir Omidi
1b88c10197 Some promise fixes (#8216)
* Some promise fixes

* changes to how we're logging errors

* Fix the tests

* Fix a few other issues
2019-11-05 11:50:39 -08:00
Karl Burtram
5a392dfd58 Revert "Add separate icons for non-stable builds (#8078)" (#8222)
This reverts commit 9eb438bb24.
2019-11-05 11:22:36 -08:00
Charles Gagnon
e49ff93122 Fix link for manual install of VSIX's (#8221) 2019-11-05 10:44:26 -08:00
Charles Gagnon
399788ccc1 Fix row/column count and table aria label (#8219) 2019-11-05 09:52:59 -08:00
Charles Gagnon
08fde8719d Make declarative table read blank for empty text cells (#8215) 2019-11-05 08:02:37 -08:00
Charles Gagnon
f7bef3f87b Update to new iKey (#8206) 2019-11-05 07:55:26 -08:00
Amir Omidi
c70e7794eb Use shared tsconfig (#8214)
* Use shared tsconfig

* Fix errors

* Remove sourcemap option
2019-11-04 17:25:01 -08:00
Charles Gagnon
9eb438bb24 Add separate icons for non-stable builds (#8078) 2019-11-04 17:05:25 -08:00
Charles Gagnon
38decaea90 Fix test script overwriting grep option (#8209)
* Fix test script overwriting grep option

* Better logic and fix unstable scripts too
2019-11-04 11:35:52 -08:00
Anthony Dresser
ade68b184d Move code around for more linting (#8190)
* testing

* moving around all the code

* fix strict nulls
2019-11-04 10:41:28 -08:00
Cory Rivera
3c702c15e2 Initialize cell source to empty array if notebook file's source is undefined. (#8189) 2019-11-04 10:38:14 -08:00
Anthony Dresser
76e8805a6b Remove should (#8196)
* remove should

* fix a few tests
2019-11-04 09:59:18 -08:00
Charles Gagnon
5dc7049f8c Fix floating promises in connection widget (#8198)
* Fix floating promises in connection widget

* PR feedback

* More feedback changes

* Couple missed promises
2019-11-04 07:24:38 -08:00
Karl Burtram
97f852c3d6 Update readme for Nov release (#8193) 2019-11-04 02:40:12 -08:00
Charles Gagnon
a8eed6114b Fix race conditions with BDC dashboard init (#8135)
* Fix race conditions with initialized

* Check for undefined status

* Disable no-floating-promises check

* Add catch instead of disabling tslint disable
2019-11-02 14:58:56 -07:00
Anthony Dresser
6864d39f85 add triggers for ci (#8197) 2019-11-02 13:22:55 -07:00
Udeesha Gautam
6f47c1fcda update dacpac and schema compare readme to remove preview text (#8191)
update dacpac and schema compare readme to remove preview text (#8191)
2019-11-01 18:49:16 -07:00
Maddy
c2c64293f5 missed insiders-only check removal (#8184) 2019-11-01 17:06:38 -07:00
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
4014 changed files with 253908 additions and 198349 deletions

16
.eslintignore Normal file
View File

@@ -0,0 +1,16 @@
**/vs/nls.build.js
**/vs/nls.js
**/vs/css.build.js
**/vs/css.js
**/vs/loader.js
**/promise-polyfill/**
**/insane/**
**/marked/**
**/test/**/*.js
**/node_modules/**
**/vscode-api-tests/testWorkspace/**
**/vscode-api-tests/testWorkspace2/**
**/extensions/**/out/**
**/extensions/**/build/**
**/extensions/markdown-language-features/media/**
**/extensions/typescript-basics/test/colorize-fixtures/**

View File

@@ -1,20 +1,273 @@
{
"root": true,
"env": {
"node": true,
"es6": true
},
"rules": {
"no-console": 0,
"no-cond-assign": 0,
"no-unused-vars": 1,
"no-extra-semi": "warn",
"semi": "warn"
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaFeatures": {
"experimentalObjectRestSpread": true
}
}
"root": true,
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module"
},
"plugins": [
"@typescript-eslint",
"jsdoc"
],
"rules": {
"constructor-super": "warn",
"curly": "warn",
"eqeqeq": "warn",
"no-buffer-constructor": "warn",
"no-caller": "warn",
"no-debugger": "warn",
"no-duplicate-case": "warn",
"no-duplicate-imports": "warn",
"no-eval": "warn",
"no-extra-semi": "warn",
"no-new-wrappers": "warn",
"no-redeclare": "off",
"no-sparse-arrays": "warn",
"no-throw-literal": "warn",
"no-unsafe-finally": "warn",
"no-unused-labels": "warn",
"no-restricted-globals": ["warn", "name", "length", "event", "closed", "external", "status", "origin", "orientation"], // non-complete list of globals that are easy to access unintentionally
"no-var": "warn",
"jsdoc/no-types": "warn",
"semi": "off",
"@typescript-eslint/semi": "warn",
"@typescript-eslint/class-name-casing": "warn",
"code-no-unused-expressions": [
"warn",
{
"allowTernary": true
}
],
"code-translation-remind": "warn",
"code-no-nls-in-standalone-editor": "warn",
"code-no-standalone-editor": "warn",
"code-no-unexternalized-strings": "warn",
"code-layering": [
"warn",
{
"common": ["browser"], // {{SQL CARBON EDIT}} @anthonydresser not ideal, but for our purposes its fine for now,
"node": [
"common"
],
"browser": [
"common"
],
"electron-main": [
"common",
"node"
],
"electron-browser": [
"common",
"browser",
"node"
]
}
],
"code-import-patterns": [
"warn",
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// !!! Do not relax these rules !!!
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{
"target": "**/{vs,sql}/base/common/**",
"restrictions": [
"vs/nls",
"**/{vs,sql}/base/common/**"
]
},
{
"target": "**/{vs,sql}/base/test/common/**",
"restrictions": [
"assert",
"sinon",
"vs/nls",
"**/{vs,sql}/base/common/**",
"**/{vs,sql}/base/test/common/**"
]
},
{
"target": "**/{vs,sql}/base/browser/**",
"restrictions": [
"vs/nls",
"vs/css!./**/*",
"**/{vs,sql}/base/{common,browser}/**",
"@angular/*",
"rxjs/*"
]
},
{
"target": "**/{vs,sql}/base/node/**",
"restrictions": [
"vs/nls",
"**/{vs,sql}/base/{common,browser,node}/**",
"!path" // node modules (except path where we have our own impl)
]
},
{
// vs/base/test/browser contains tests for vs/base/browser
"target": "**/{vs,sql}/base/test/browser/**",
"restrictions": [
"assert",
"vs/nls",
"**/{vs,sql}/base/{common,browser}/**",
"**/{vs,sql}/base/test/{common,browser}/**",
"@angular/*",
"rxjs/*"
]
},
{
"target": "**/{vs,sql}/base/parts/*/common/**",
"restrictions": [
"vs/nls",
"**/{vs,sql}/base/common/**",
"**/{vs,sql}/base/parts/*/common/**"
]
},
{
"target": "**/{vs,sql}/base/parts/*/browser/**",
"restrictions": [
"vs/nls",
"vs/css!./**/*",
"**/{vs,sql}/base/{common,browser}/**",
"**/{vs,sql}/base/parts/*/{common,browser}/**",
"@angular/*",
"rxjs/*"
]
},
{
"target": "**/{vs,sql}/base/parts/*/node/**",
"restrictions": [
"vs/nls",
"**/{vs,sql}/base/{common,browser,node}/**",
"**/{vs,sql}/base/parts/*/{common,browser,node}/**",
"!path" // node modules (except path where we have our own impl)
]
},
{
"target": "**/{vs,sql}/base/parts/*/electron-browser/**",
"restrictions": [
"vs/nls",
"vs/css!./**/*",
"**/{vs,sql}/base/{common,browser,node,electron-browser}/**",
"**/{vs,sql}/base/parts/*/{common,browser,node,electron-browser}/**",
"!path", // node modules (except path where we have our own impl)
"@angular/*",
"rxjs/*"
]
},
{
"target": "**/{vs,sql}/base/parts/*/electron-main/**",
"restrictions": [
"vs/nls",
"**/{vs,sql}/base/{common,browser,node,electron-main}/**",
"**/{vs,sql}/base/parts/*/{common,browser,node,electron-main}/**",
"!path", // node modules (except path where we have our own impl)
"@angular/*",
"rxjs/*"
]
},
{
"target": "**/{vs,sql}/platform/*/common/**",
"restrictions": [
"vs/nls",
"**/{vs,sql}/base/common/**",
"**/{vs,sql}/base/parts/*/common/**",
"**/{vs,sql}/{platform,workbench}/**/common/**",
"**/vs/editor/common/**",
"azdata" // TODO remove
]
},
{
"target": "**/{vs,sql}/platform/*/test/common/**",
"restrictions": [
"assert",
"sinon",
"vs/nls",
"**/{vs,sql}/base/common/**",
"**/{vs,sql}/{platform,workbench}/**/common/**",
"**/{vs,sql}/{base,platform,workbench}/**/test/common/**",
"typemoq",
"azdata" // TODO remove
]
},
{
"target": "**/{vs,sql}/platform/*/browser/**",
"restrictions": [
"vs/nls",
"vs/css!./**/*",
"**/{vs,sql}/base/{common,browser}/**",
"**/{vs,sql}/base/parts/*/{common,browser}/**",
"**/{vs,sql}/{platform,workbench}/**/{common,browser}/**",
"**/vs/editor/{common,browser}/**",
"@angular/*",
"rxjs/*",
"azdata" // TODO remove
]
},
{
"target": "**/{vs,sql}/platform/*/node/**",
"restrictions": [
"vs/nls",
"**/{vs,sql}/base/{common,browser,node}/**",
"**/{vs,sql}/base/parts/*/{common,browser,node}/**",
"**/{vs,sql}/{platform,workbench}/**/{common,browser,node}/**",
"**/vs/editor/{common,browser,node}/**",
"!path", // node modules (except path where we have our own impl)
"azdata" // TODO remove
]
},
{
"target": "**/{vs,sql}/platform/*/electron-browser/**",
"restrictions": [
"vs/nls",
"vs/css!./**/*",
"**/{vs,sql}/base/{common,browser,node}/**",
"**/{vs,sql}/base/parts/*/{common,browser,node,electron-browser}/**",
"**/{vs,sql}/{platform,workbench}/**/{common,browser,node,electron-browser}/**",
"**/vs/editor/{common,browser,node,electron-browser}/**",
"!path", // node modules (except path where we have our own impl)
"@angular/*",
"rxjs/*",
"azdata" // TODO remove
]
},
{
"target": "**/{vs,sql}/platform/*/electron-main/**",
"restrictions": [
"vs/nls",
"**/{vs,sql}/base/{common,browser,node}/**",
"**/{vs,sql}/base/parts/*/{common,browser,node,electron-browser}/**",
"**/{vs,sql}/{platform,workbench}/**/{common,browser,node,electron-main}/**",
"**/vs/editor/{common,browser,node,electron-main}/**",
"!path", // node modules (except path where we have our own impl)
"azdata" // TODO remove
]
},
{
"target": "**/{vs,sql}/platform/*/test/browser/**",
"restrictions": [
"assert",
"sinon",
"vs/nls",
"**/{vs,sql}/base/{common,browser}/**",
"**/{vs,sql}/{platform,workbench}/**/{common,browser}/**",
"**/{vs,sql}/{base,platform,workbench}/**/test/{common,browser}/**",
"typemoq",
"@angular/*",
"rxjs/*",
"azdata" // TODO remove
]
}
]
},
"overrides": [
{
"files": [
"*.js"
],
"rules": {
"jsdoc/no-types": "off"
}
}
]
}

7
.eslintrc.sql.json Normal file
View File

@@ -0,0 +1,7 @@
{
"extends": ".eslintrc.json",
"rules": {
"no-sync": "warn",
"strict": ["warn", "never"]
}
}

View File

@@ -2,11 +2,11 @@
name: Bug report
about: Create a report to help us improve
title: ''
labels: Bug
labels: ''
assignees: ''
---
<!-- Please read our Rules of Conduct: https://opensource.microsoft.com/codeofconduct/ -->
<!-- Please search existing issues to avoid creating duplicates. -->
<!-- Also please test using the latest insiders build to make sure your issue has not already been fixed. -->

1
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1 @@
blank_issues_enabled: false

View File

@@ -2,7 +2,7 @@
name: Feature request
about: Suggest an idea for this project
title: ''
labels: Enhancement
labels: ''
assignees: ''
---

View File

@@ -2,12 +2,14 @@
perform: true,
alwaysRequireAssignee: false,
labelsRequiringAssignee: [],
defaultLabel: 'Triage: Needed',
defaultAssignee: '',
autoAssignees: {
Area - Acquisition: [],
Area - Azure: [],
Area - Backup\Restore: [],
Area - Charting\Insights: [],
Area - Connection: [],
Area - Connection: [ charles-gagnon ],
Area - DacFX: [],
Area - Dashboard: [],
Area - Data Explorer: [],
@@ -15,9 +17,9 @@
Area - Extensibility: [],
Area - External Table: [],
Area - Fundamentals: [],
Area - Language Service: [],
Area - Language Service: [ charles-gagnon ],
Area - Localization: [],
Area - Notebooks: [],
Area - Notebooks: [ chlafreniere ],
Area - Performance: [],
Area - Query Editor: [ anthonydresser ],
Area - Query Plan: [],

34
.github/feature-requests.yml vendored Normal file
View File

@@ -0,0 +1,34 @@
{
typeLabel: {
name: 'feature-request'
},
candidateMilestone: {
number: 107,
name: 'Backlog Candidates'
},
approvedMilestone: {
number: 8,
name: 'Backlog'
},
onLabeled: {
delay: 60,
perform: true
},
onCandidateMilestoned: {
candidatesComment: "This feature request is now a candidate for our backlog. The community has 60 days to upvote the issue. If it receives 20 upvotes we will move it to our backlog. If not, we will close it. To learn more about how we handle feature requests, please see our [documentation](https://aka.ms/vscode-issue-lifecycle).\n\nHappy Coding!",
perform: true
},
onMonitorUpvotes: {
upvoteThreshold: 20,
acceptanceComment: ":slightly_smiling_face: This feature request received a sufficient number of community upvotes and we moved it to our backlog. To learn more about how we handle feature requests, please see our [documentation](https://aka.ms/vscode-issue-lifecycle).\n\nHappy Coding!",
perform: true
},
onMonitorDaysOnCandidateMilestone: {
daysOnMilestone: 60,
warningPeriod: 10,
numberOfCommentsToPreventAutomaticRejection: 20,
rejectionComment: ":slightly_frowning_face: In the last 60 days, this feature request has received less than 20 community upvotes and we closed it. Still a big Thank You to you for taking the time to create this issue! To learn more about how we handle feature requests, please see our [documentation](https://aka.ms/vscode-issue-lifecycle).\n\nHappy Coding!",
warningComment: "This feature request has not yet received the 20 community upvotes it takes to make to our backlog. 10 days to go. To learn more about how we handle feature requests, please see our [documentation](https://aka.ms/vscode-issue-lifecycle).\n\nHappy Coding",
perform: true
}
}

2
.github/locker.yml vendored
View File

@@ -1,6 +1,6 @@
{
daysAfterClose: 45,
daysSinceLastUpdate: 3,
ignoredLabels: [],
ignoredLabels: ['A11y_ADS_OctTestPass', 'A11y_ADS_Schema_Dacpac_Backup', 'A11y_AzureDataStudio', 'A11yExclusion', 'A11yMAS', 'A11yResolved: Will Not Fix', 'A11yTCS'],
perform: true
}

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 #

6
.github/stale.yml vendored Normal file
View File

@@ -0,0 +1,6 @@
{
perform: true,
label: 'Stale PR',
daysSinceLastUpdate: 7,
ignoredLabels: ['Do Not Merge']
}

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
# name: Run Hygiene Checks
# - run: yarn strict-vscode # {{SQL CARBON EDIT}} add step
# name: Run Strict Compile Options
# # - run: yarn monaco-compile-check {{SQL CARBON EDIT}} remove step
# # name: Run Monaco Editor Checks
# - run: yarn valid-layers-check
# name: Run Valid Layers 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
name: Run Hygiene Checks
- run: yarn strict-vscode # {{SQL CARBON EDIT}} add step
name: Run Strict Compile Options
# - run: yarn monaco-compile-check {{SQL CARBON EDIT}} remove step
# name: Run Monaco Editor Checks
- run: yarn valid-layers-check
name: Run Valid Layers 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
name: Run Hygiene Checks
- run: yarn strict-vscode # {{SQL CARBON EDIT}} add step
name: Run Strict Compile Options
# - run: yarn monaco-compile-check {{SQL CARBON EDIT}} remove step
# name: Run Monaco Editor Checks
- run: yarn valid-layers-check
name: Run Valid Layers 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

View File

@@ -2,7 +2,6 @@
// See https://go.microsoft.com/fwlink/?LinkId=827846
// for the documentation about the extensions.json format
"recommendations": [
"ms-vscode.vscode-typescript-tslint-plugin",
"dbaeumer.vscode-eslint",
"EditorConfig.EditorConfig",
"msjsdiag.debugger-for-chrome"

119
.vscode/launch.json vendored
View File

@@ -36,7 +36,10 @@
"port": 5876,
"outFiles": [
"${workspaceFolder}/out/**/*.js"
]
],
"presentation": {
"hidden": true,
}
},
{
"type": "node",
@@ -54,7 +57,10 @@
"port": 5875,
"outFiles": [
"${workspaceFolder}/out/**/*.js"
]
],
"presentation": {
"hidden": true,
}
},
{
"type": "chrome",
@@ -67,17 +73,16 @@
"request": "launch",
"name": "Launch azuredatastudio",
"windows": {
"runtimeExecutable": "${workspaceFolder}/scripts/sql.bat",
"timeout": 45000
"runtimeExecutable": "${workspaceFolder}/scripts/sql.bat"
},
"osx": {
"runtimeExecutable": "${workspaceFolder}/scripts/sql.sh",
"timeout": 45000
"runtimeExecutable": "${workspaceFolder}/scripts/sql.sh"
},
"linux": {
"runtimeExecutable": "${workspaceFolder}/scripts/sql.sh",
"timeout": 45000
"runtimeExecutable": "${workspaceFolder}/scripts/sql.sh"
},
"port": 9222,
"timeout": 20000,
"env": {
"VSCODE_EXTHOST_WILL_SEND_SOCKET": null
},
@@ -85,9 +90,12 @@
"urlFilter": "*workbench.html*",
"runtimeArgs": [
"--inspect=5875",
"--no-cached-data"
"--no-cached-data",
],
"webRoot": "${workspaceFolder}"
"webRoot": "${workspaceFolder}",
// Settings for js-debug:
"pauseForSourceMap": false,
"outFiles": ["${workspaceFolder}/out/**/*.js"],
},
{
"type": "node",
@@ -102,7 +110,11 @@
],
"outFiles": [
"${workspaceFolder}/out/**/*.js"
]
],
"presentation": {
"group": "2_launch",
"order": 1
}
},
{
"type": "chrome",
@@ -129,13 +141,43 @@
"timeout": 45000
},
{
"name": "Launch Built-in Extension",
"type": "extensionHost",
"type": "chrome",
"request": "launch",
"runtimeExecutable": "${execPath}",
"args": [
"--extensionDevelopmentPath=${workspaceRoot}/extensions/debug-auto-launch"
]
"name": "Launch ADS (Web) (TBD)",
"runtimeExecutable": "yarn",
"runtimeArgs": [
"web"
],
"presentation": {
"group": "2_launch",
"order": 2
}
},
{
"type": "chrome",
"request": "launch",
"name": "Launch ADS (Web, Chrome) (TBD)",
"url": "http://localhost:8080",
"preLaunchTask": "Run web",
"presentation": {
"group": "2_launch",
"order": 3
}
},
{
"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"
],
"presentation": {
"group": "5_tests",
"order": 10
}
},
{
"type": "node",
@@ -145,6 +187,10 @@
"cwd": "${workspaceFolder}/test/smoke",
"env": {
"BUILD_ARTIFACTSTAGINGDIRECTORY": "${workspaceFolder}"
},
"presentation": {
"group": "5_tests",
"order": 8
}
},
{
@@ -169,6 +215,9 @@
],
"env": {
"MOCHA_COLORS": "true"
},
"presentation": {
"hidden": true
}
},
{
@@ -219,40 +268,50 @@
"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": [
"Launch azuredatastudio",
"Attach to Main Process"
]
],
"presentation": {
"group": "1_vscode",
"order": 1
}
},
{
"name": "Debug Renderer and search processes",
"name": "Debug azuredatastudio Main, Renderer & Extension Host",
"configurations": [
"Launch azuredatastudio",
"Attach to Search Process"
]
"Attach to Main Process",
"Attach to Extension Host"
],
"presentation": {
"group": "1_vscode",
"order": 3
}
},
{
"name": "Debug Renderer and Extension Host processes",
"configurations": [
"Launch azuredatastudio",
"Attach to Extension Host"
]
],
"presentation": {
"group": "1_vscode",
"order": 2
}
},
{
"name": "Attach Renderer and Extension Host",
"configurations": [
"Attach to azuredatastudio",
"Attach to Extension Host"
]
],
"presentation": {
"group": "1_vscode",
"order": 2
}
}
]
}

10
.vscode/searches/ts36031.code-search vendored Normal file
View File

@@ -0,0 +1,10 @@
# Query: \\w+\\?\\..+![(.[]
# Flags: RegExp
# ContextLines: 2
src/vs/base/browser/ui/tree/asyncDataTree.ts:
270 } : undefined,
271 isChecked: options.ariaProvider!.isChecked ? (e) => {
272: return options.ariaProvider?.isChecked!(e.element as T);
273 } : undefined
274 },

View File

@@ -37,8 +37,14 @@
}
}
],
"eslint.options": {
"rulePaths": [
"./build/lib/eslint"
]
},
"typescript.tsdk": "node_modules/typescript/lib",
"npm.exclude": "**/extensions/**",
"npm.packageManager": "yarn",
"emmet.excludeLanguages": [],
"typescript.preferences.importModuleSpecifier": "non-relative",
"typescript.preferences.quoteStyle": "single",
@@ -60,5 +66,6 @@
"remote.extensionKind": {
"msjsdiag.debugger-for-chrome": "workspace"
},
"gulp.autoDetect": "off",
"files.insertFinalNewline": true
}

50
.vscode/tasks.json vendored
View File

@@ -33,40 +33,32 @@
},
{
"type": "npm",
"script": "strict-initialization-watch",
"label": "TS - Strict Initialization",
"script": "strict-function-types-watch",
"label": "TS - Strict Function Types",
"isBackground": true,
"presentation": {
"reveal": "never"
},
"problemMatcher": {
"base": "$tsc-watch",
"owner": "typescript-strict-initialization",
"owner": "typescript-function-types",
"applyTo": "allDocuments"
}
},
{
"type": "npm",
"script": "strict-null-check-watch",
"label": "TS - Strict Null Checks",
"script": "strict-vscode-watch",
"label": "TS - Strict VSCode",
"isBackground": true,
"presentation": {
"reveal": "never"
},
"problemMatcher": {
"base": "$tsc-watch",
"owner": "typescript-strict-null-checks",
"owner": "typescript-vscode",
"applyTo": "allDocuments"
}
},
{
"type": "gulp",
"task": "tslint",
"label": "Run tslint",
"problemMatcher": [
"$tslint5"
]
},
{
"label": "Run tests",
"type": "shell",
@@ -90,8 +82,8 @@
"problemMatcher": []
},
{
"type": "gulp",
"task": "electron",
"type": "npm",
"script": "electron",
"label": "Download electron"
},
{
@@ -99,5 +91,31 @@
"task": "hygiene",
"problemMatcher": []
},
{
"type": "shell",
"command": "yarn web -- --no-launch",
"label": "Run web",
"isBackground": true,
"problemMatcher": {
"pattern": {
"regexp": ""
},
"background": {
"beginsPattern": ".*node .*",
"endsPattern": "Web UI available at .*"
}
},
"presentation": {
"reveal": "never"
}
},
{
"type": "npm",
"script": "eslint",
"problemMatcher": {
"source": "eslint",
"base": "$eslint-stylish"
}
}
]
}

View File

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

View File

@@ -1,5 +1,37 @@
# Change Log
## Version 1.14.1
* Release date: December 26, 2019
* Release status: General Availability
* Hotfix for bug https://github.com/microsoft/azuredatastudio/issues/8768
## Version 1.14.0
* Release date: December 19, 2019
* Release status: General Availability
* Added bigdatacluster.ignoreSslVerification setting to allow ignoring SSL verification errors when connecting to a BDC [#8129](https://github.com/microsoft/azuredatastudio/issues/8129)
* Changed attach to connection dropdown in Notebooks to only list the currently active connection [#8582](https://github.com/microsoft/azuredatastudio/pull/8582)
* Allow changing default language flavor for offline query editors [#8419](https://github.com/microsoft/azuredatastudio/pull/8419)
* GA status for Big Data Cluster/SQL 2019 features [#8269](https://github.com/microsoft/azuredatastudio/issues/8269)
* Resolved [bugs and issues](https://github.com/microsoft/azuredatastudio/milestone/44?closed=1).
## 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:
## Version 1.13.1
* Release date: November 15, 2019
* Release status: General Availability
* Resolved [#8210 Copy/Paste results are out of order](https://github.com/microsoft/azuredatastudio/issues/8210).
## Version 1.13.0
* Release date: November 4, 2019
* Release status: General Availability
* General Availability release for Schema Compare and DACPAC extensions
* Resolved [bugs and issues](https://github.com/microsoft/azuredatastudio/milestone/43?closed=1).
## 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:
* aspnerd for `Use selected DB for import wizard schema list` [#7878](https://github.com/microsoft/azuredatastudio/pull/7878)
## Version 1.12.2
* Release date: October 11, 2019
* Release status: General Availability

View File

@@ -2,6 +2,7 @@
[![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/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=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
Windows User Installer | https://go.microsoft.com/fwlink/?linkid=2113530
Windows System Installer | https://go.microsoft.com/fwlink/?linkid=2113628
Windows ZIP | https://go.microsoft.com/fwlink/?linkid=2113529
macOS ZIP | https://go.microsoft.com/fwlink/?linkid=2113528
Linux TAR.GZ | https://go.microsoft.com/fwlink/?linkid=2113627
Linux RPM | https://go.microsoft.com/fwlink/?linkid=2113718
Linux DEB | https://go.microsoft.com/fwlink/?linkid=2113344
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:
* eulercamposbarros for `Prevent connections from moving on click (#7528)`
* AlexFsmn for `Fixed issue where task icons got hidden if text was too long`
* jamesrod817 for `Tempdb (#7022)`
* 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`

View File

@@ -1,85 +0,0 @@
steps:
- 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
sudo apt-get install -y libkrb5-dev
# sh -e /etc/init.d/xvfb start
# sleep 3
displayName: "Linux preinstall"
condition: eq(variables['Agent.OS'], 'Linux')
- task: NodeTool@0
inputs:
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: "$(build-cache)"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3
inputs:
versionSpec: "1.10.1"
- script: |
yarn --frozen-lockfile
displayName: Install Dependencies
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
env:
GITHUB_TOKEN: $(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: "$(build-cache)"
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
- script: |
yarn gulp electron-x64
displayName: Download Electron
env:
GITHUB_TOKEN: $(GITHUB_TOKEN)
- script: |
yarn gulp hygiene --skip-tslint
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 --tfs "Unit Tests"
displayName: Run Unit Tests (Linux)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
- script: |
DISPLAY=:10 ./scripts/test.sh --tfs "Unit Tests" --coverage
displayName: Run Unit Tests (Mac)
condition: and(succeeded(), ne(variables['Agent.OS'], 'Linux'))
- task: PublishTestResults@2
inputs:
testResultsFiles: '*-results.xml'
searchFolder: '$(Build.ArtifactStagingDirectory)/test-results'
condition: succeededOrFailed()
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: 'cobertura'
summaryFileLocation: $(System.DefaultWorkingDirectory)/.build/coverage/cobertura-coverage.xml
reportDirectory: $(System.DefaultWorkingDirectory)/.build/coverage/lcov-report
condition: ne(variables['Agent.OS'], 'Linux')

View File

@@ -1,60 +0,0 @@
steps:
- task: NodeTool@0
inputs:
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: "$(build-cache)"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3
inputs:
versionSpec: "1.10.1"
- script: |
yarn --frozen-lockfile
displayName: Install Dependencies
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
env:
GITHUB_TOKEN: $(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: "$(build-cache)"
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
- script: |
yarn gulp electron-x64
displayName: "Electron"
env:
GITHUB_TOKEN: $(GITHUB_TOKEN)
- script: |
yarn gulp hygiene --skip-tslint
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
- powershell: |
.\scripts\test.bat --tfs "Unit Tests"
displayName: Run Unit Tests
- task: PublishTestResults@2
inputs:
testResultsFiles: "*-results.xml"
searchFolder: "$(Build.ArtifactStagingDirectory)/test-results"
condition: succeededOrFailed()

View File

@@ -3,20 +3,20 @@ trigger:
- release/*
jobs:
- job: Windows
pool:
vmImage: VS2017-Win2016
steps:
- template: azure-pipelines-windows.yml
- job: Windows
pool:
vmImage: VS2017-Win2016
steps:
- template: build/azure-pipelines/win32/continuous-build-win32.yml
- job: Linux
pool:
vmImage: "Ubuntu-16.04"
steps:
- template: azure-pipelines-linux-mac.yml
- job: Linux
pool:
vmImage: 'Ubuntu-16.04'
steps:
- template: build/azure-pipelines/linux/continuous-build-linux.yml
- job: macOS
pool:
vmImage: macOS 10.13
steps:
- template: azure-pipelines-linux-mac.yml
- job: macOS
pool:
vmImage: macOS-latest
steps:
- template: build/azure-pipelines/darwin/continuous-build-darwin.yml

View File

@@ -1 +1 @@
2019-08-30T20:24:23.714Z
2019-12-01T02:20:58.491Z

View File

@@ -0,0 +1,36 @@
/*---------------------------------------------------------------------------------------------
* 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 vfs from 'vinyl-fs';
const files = [
'.build/extensions/**/*.vsix', // external extensions
'.build/win32-x64/**/*.{exe,zip}', // windows binaries
'.build/linux/sha256hashes.txt', // linux hashes
'.build/linux/deb/amd64/deb/*', // linux debs
'.build/linux/rpm/x86_64/*', // linux rpms
'.build/linux/server/*', // linux server
'.build/linux/archive/*', // linux archive
'.build/docker/**', // docker images
'.build/darwin/**', // darwin binaries
'.build/version.json' // version information
];
async function main() {
return new Promise((resolve, reject) => {
const stream = vfs.src(files, { base: '.build', allowEmpty: true })
.pipe(vfs.dest(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY!));
stream.on('end', () => resolve());
stream.on('error', e => reject(e));
});
}
main().catch(err => {
console.error(err);
process.exit(1);
});

View File

@@ -0,0 +1,132 @@
/*---------------------------------------------------------------------------------------------
* 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 { Readable } from 'stream';
import * as crypto from 'crypto';
import * as azure from 'azure-storage';
import * as mime from 'mime';
import { CosmosClient } from '@azure/cosmos';
interface Asset {
platform: string;
type: string;
url: string;
mooncakeUrl?: string;
hash: string;
sha256hash: string;
size: number;
supportsFastUpdate?: boolean;
}
if (process.argv.length !== 6) {
console.error('Usage: node createAsset.js PLATFORM TYPE NAME FILE');
process.exit(-1);
}
function hashStream(hashName: string, stream: Readable): Promise<string> {
return new Promise<string>((c, e) => {
const shasum = crypto.createHash(hashName);
stream
.on('data', shasum.update.bind(shasum))
.on('error', e)
.on('close', () => c(shasum.digest('hex')));
});
}
async function doesAssetExist(blobService: azure.BlobService, quality: string, blobName: string): Promise<boolean | undefined> {
const existsResult = await new Promise<azure.BlobService.BlobResult>((c, e) => blobService.doesBlobExist(quality, blobName, (err, r) => err ? e(err) : c(r)));
return existsResult.exists;
}
async function uploadBlob(blobService: azure.BlobService, quality: 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(quality, blobName, file, blobOptions, err => err ? e(err) : c()));
}
function getEnv(name: string): string {
const result = process.env[name];
if (typeof result === 'undefined') {
throw new Error('Missing env: ' + name);
}
return result;
}
async function main(): Promise<void> {
const [, , platform, type, name, file] = process.argv;
const quality = getEnv('VSCODE_QUALITY');
const commit = getEnv('BUILD_SOURCEVERSION');
console.log('Creating asset...');
const stat = await new Promise<fs.Stats>((c, e) => fs.stat(file, (err, stat) => err ? e(err) : c(stat)));
const size = stat.size;
console.log('Size:', size);
const stream = fs.createReadStream(file);
const [sha1hash, sha256hash] = await Promise.all([hashStream('sha1', stream), hashStream('sha256', stream)]);
console.log('SHA1:', sha1hash);
console.log('SHA256:', sha256hash);
const blobName = commit + '/' + name;
const storageAccount = process.env['AZURE_STORAGE_ACCOUNT_2']!;
const blobService = azure.createBlobService(storageAccount, process.env['AZURE_STORAGE_ACCESS_KEY_2']!)
.withFilter(new azure.ExponentialRetryPolicyFilter(20));
const blobExists = await doesAssetExist(blobService, quality, blobName);
if (blobExists) {
console.log(`Blob ${quality}, ${blobName} already exists, not publishing again.`);
return;
}
console.log('Uploading blobs to Azure storage...');
await uploadBlob(blobService, quality, blobName, file);
console.log('Blobs successfully uploaded.');
const asset: Asset = {
platform,
type,
url: `${process.env['AZURE_CDN_URL']}/${quality}/${blobName}`,
hash: sha1hash,
sha256hash,
size
};
// Remove this if we ever need to rollback fast updates for windows
if (/win32/.test(platform)) {
asset.supportsFastUpdate = true;
}
console.log('Asset:', JSON.stringify(asset, null, ' '));
const client = new CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT']!, key: process.env['AZURE_DOCUMENTDB_MASTERKEY'] });
const scripts = client.database('builds').container(quality).scripts;
await scripts.storedProcedure('createAsset').execute('', [commit, asset, true]);
}
main().then(() => {
console.log('Asset successfully created');
process.exit(0);
}, err => {
console.error(err);
process.exit(1);
});

View File

@@ -0,0 +1,60 @@
/*---------------------------------------------------------------------------------------------
* 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 { CosmosClient } from '@azure/cosmos';
if (process.argv.length !== 3) {
console.error('Usage: node createBuild.js VERSION');
process.exit(-1);
}
function getEnv(name: string): string {
const result = process.env[name];
if (typeof result === 'undefined') {
throw new Error('Missing env: ' + name);
}
return result;
}
async function main(): Promise<void> {
const [, , _version] = process.argv;
const quality = getEnv('VSCODE_QUALITY');
const commit = getEnv('BUILD_SOURCEVERSION');
const queuedBy = getEnv('BUILD_QUEUEDBY');
const sourceBranch = getEnv('BUILD_SOURCEBRANCH');
const version = _version + (quality === 'stable' ? '' : `-${quality}`);
console.log('Creating build...');
console.log('Quality:', quality);
console.log('Version:', version);
console.log('Commit:', commit);
const build = {
id: commit,
timestamp: (new Date()).getTime(),
version,
isReleased: false,
sourceBranch,
queuedBy,
assets: [],
updates: {}
};
const client = new CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT']!, key: process.env['AZURE_DOCUMENTDB_MASTERKEY'] });
const scripts = client.database('builds').container(quality).scripts;
await scripts.storedProcedure('createBuild').execute('', [{ ...build, _partitionKey: '' }]);
}
main().then(() => {
console.log('Build successfully created');
process.exit(0);
}, err => {
console.error(err);
process.exit(1);
});

View File

@@ -0,0 +1,70 @@
/*---------------------------------------------------------------------------------------------
* 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 { CosmosClient } from '@azure/cosmos';
function getEnv(name: string): string {
const result = process.env[name];
if (typeof result === 'undefined') {
throw new Error('Missing env: ' + name);
}
return result;
}
interface Config {
id: string;
frozen: boolean;
}
function createDefaultConfig(quality: string): Config {
return {
id: quality,
frozen: false
};
}
async function getConfig(client: CosmosClient, quality: string): Promise<Config> {
const query = `SELECT TOP 1 * FROM c WHERE c.id = "${quality}"`;
const res = await client.database('builds').container('config').items.query(query).fetchAll();
if (res.resources.length === 0) {
return createDefaultConfig(quality);
}
return res.resources[0] as Config;
}
async function main(): Promise<void> {
const commit = getEnv('BUILD_SOURCEVERSION');
const quality = getEnv('VSCODE_QUALITY');
const client = new CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT']!, key: process.env['AZURE_DOCUMENTDB_MASTERKEY'] });
const config = await getConfig(client, quality);
console.log('Quality config:', config);
if (config.frozen) {
console.log(`Skipping release because quality ${quality} is frozen.`);
return;
}
console.log(`Releasing build ${commit}...`);
const scripts = client.database('builds').container(quality).scripts;
await scripts.storedProcedure('releaseBuild').execute('', [commit]);
}
main().then(() => {
console.log('Build successfully released');
process.exit(0);
}, err => {
console.error(err);
process.exit(1);
});

View File

@@ -8,7 +8,7 @@
import * as url from 'url';
import * as azure from 'azure-storage';
import * as mime from 'mime';
import { DocumentClient, RetrievedDocument } from 'documentdb';
import { CosmosClient } from '@azure/cosmos';
function log(...args: any[]) {
console.log(...[`[${new Date().toISOString()}]`, ...args]);
@@ -23,7 +23,7 @@ if (process.argv.length < 3) {
process.exit(-1);
}
interface Build extends RetrievedDocument {
interface Build {
assets: Asset[];
}
@@ -38,62 +38,20 @@ interface Asset {
supportsFastUpdate?: boolean;
}
function updateBuild(commit: string, quality: string, platform: string, type: string, asset: Asset): Promise<void> {
const client = new DocumentClient(process.env['AZURE_DOCUMENTDB_ENDPOINT']!, { masterKey: process.env['AZURE_DOCUMENTDB_MASTERKEY'] });
const collection = 'dbs/builds/colls/' + quality;
const updateQuery = {
query: 'SELECT TOP 1 * FROM c WHERE c.id = @id',
parameters: [{ name: '@id', value: commit }]
};
let updateTries = 0;
function _update(): Promise<void> {
updateTries++;
return new Promise<void>((c, e) => {
client.queryDocuments(collection, updateQuery).toArray((err, results) => {
if (err) { return e(err); }
if (results.length !== 1) { return e(new Error('No documents')); }
const release = results[0];
release.assets = [
...release.assets.filter((a: any) => !(a.platform === platform && a.type === type)),
asset
];
client.replaceDocument(release._self, release, err => {
if (err && err.code === 409 && updateTries < 5) { return c(_update()); }
if (err) { return e(err); }
log('Build successfully updated.');
c();
});
});
});
}
return _update();
}
async function sync(commit: string, quality: string): Promise<void> {
log(`Synchronizing Mooncake assets for ${quality}, ${commit}...`);
const cosmosdb = new DocumentClient(process.env['AZURE_DOCUMENTDB_ENDPOINT']!, { masterKey: process.env['AZURE_DOCUMENTDB_MASTERKEY'] });
const collection = `dbs/builds/colls/${quality}`;
const query = {
query: 'SELECT TOP 1 * FROM c WHERE c.id = @id',
parameters: [{ name: '@id', value: commit }]
};
const client = new CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT']!, key: process.env['AZURE_DOCUMENTDB_MASTERKEY'] });
const container = client.database('builds').container(quality);
const build = await new Promise<Build>((c, e) => {
cosmosdb.queryDocuments(collection, query).toArray((err, results) => {
if (err) { return e(err); }
if (results.length !== 1) { return e(new Error('No documents')); }
c(results[0] as Build);
});
});
const query = `SELECT TOP 1 * FROM c WHERE c.id = "${commit}"`;
const res = await container.items.query<Build>(query, {}).fetchAll();
if (res.resources.length !== 1) {
throw new Error(`No builds found for ${commit}`);
}
const build = res.resources[0];
log(`Found build for ${commit}, with ${build.assets.length} assets`);
@@ -140,8 +98,9 @@ async function sync(commit: string, quality: string): Promise<void> {
await new Promise((c, e) => readStream.pipe(writeStream).on('finish', c).on('error', e));
log(` Updating build in DB...`);
asset.mooncakeUrl = `${process.env['MOONCAKE_CDN_URL']}${blobPath}`;
await updateBuild(commit, quality, asset.platform, asset.type, asset);
const mooncakeUrl = `${process.env['MOONCAKE_CDN_URL']}${blobPath}`;
await container.scripts.storedProcedure('setAssetMooncakeUrl')
.execute('', [commit, asset.platform, asset.type, mooncakeUrl]);
log(` Done ✔️`);
} catch (err) {

View File

@@ -1,49 +1,52 @@
steps:
- task: NodeTool@0
inputs:
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
versionSpec: "12.13.0"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3 # {{SQL CARBON EDIT}} update version
inputs:
versionSpec: "1.x"
- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1
inputs:
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: 'npm-cache' # {{SQL CARBON EDIT}} update build cache
- script: |
yarn --frozen-lockfile
CHILD_CONCURRENCY=1 yarn --frozen-lockfile
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: 'npm-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
- script: |
yarn gulp hygiene --skip-tslint
yarn gulp hygiene
displayName: Run Hygiene Checks
- script: | # {{SQL CARBON EDIT}} add step
yarn strict-vscode
displayName: Run Strict Null Check.
# - script: | {{SQL CARBON EDIT}} remove step
# yarn monaco-compile-check
# displayName: Run Monaco Editor Checks
- script: |
yarn gulp tslint
displayName: Run TSLint Checks
- script: |
yarn monaco-compile-check
displayName: Run Monaco Editor Checks
yarn valid-layers-check
displayName: Run Valid Layers 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:

View File

@@ -0,0 +1,11 @@
#!/usr/bin/env bash
set -e
REPO="$(pwd)"
# ensure drop directories exist
mkdir -p $REPO/.build/darwin/{archive,server}
# package Remote Extension Host
pushd .. && mv azuredatastudio-reh-darwin azuredatastudio-server-darwin && zip -Xry $REPO/.build/darwin/server/azuredatastudio-server-darwin.zip azuredatastudio-server-darwin && popd
node build/azure-pipelines/common/copyArtifacts.js

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.disable-executable-page-protection</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
<key>com.apple.security.app-sandbox</key>
<false/>
<key>com.apple.security.automation.apple-events</key>
<true/>
</dict>
</plist>

View File

@@ -21,7 +21,7 @@ steps:
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
versionSpec: "12.13.0"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:

View File

@@ -5,28 +5,20 @@ set -e
zip -d ../VSCode-darwin.zip "*.pkg"
# publish the build
PACKAGEJSON=`ls ../VSCode-darwin/*.app/Contents/Resources/app/package.json`
VERSION=`node -p "require(\"$PACKAGEJSON\").version"`
node build/azure-pipelines/common/publish.js \
"$VSCODE_QUALITY" \
node build/azure-pipelines/common/createAsset.js \
darwin \
archive \
"VSCode-darwin-$VSCODE_QUALITY.zip" \
$VERSION \
true \
../VSCode-darwin.zip
# package Remote Extension Host
pushd .. && mv vscode-reh-darwin vscode-server-darwin && zip -Xry vscode-server-darwin.zip vscode-server-darwin && popd
# publish Remote Extension Host
node build/azure-pipelines/common/publish.js \
"$VSCODE_QUALITY" \
node build/azure-pipelines/common/createAsset.js \
server-darwin \
archive-unsigned \
"vscode-server-darwin.zip" \
$VERSION \
true \
../vscode-server-darwin.zip
# publish hockeyapp symbols

View File

@@ -0,0 +1,256 @@
steps:
- task: InstallAppleCertificate@2
displayName: 'Install developer certificate'
inputs:
certSecureFile: 'osx_signing_key.p12'
- 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, .build/quality'
targetfolder: '.build, out-build, out-vscode-min, out-vscode-reh-min, out-vscode-reh-web-min'
vstsFeed: 'BuildCache'
platformIndependent: true
alias: 'Compilation'
- script: |
set -e
exit 1
displayName: Check RestoreCache
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
- task: NodeTool@0
inputs:
versionSpec: '10.15.3'
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3
inputs:
versionSpec: '1.x'
- task: AzureKeyVault@1
displayName: 'Azure Key Vault: Get Secrets'
inputs:
azureSubscription: 'ClientToolsInfra_670062 (88d5392f-a34f-4769-b405-f597fc533613)'
KeyVaultName: ado-secrets
SecretsFilter: 'github-distro-mixin-password'
- script: |
set -e
cat << EOF > ~/.netrc
machine github.com
login azuredatastudio
password $(github-distro-mixin-password)
EOF
git config user.email "andresse@microsoft.com"
git config user.name "AzureDataStudio"
displayName: Prepare tooling
- script: |
set -e
git remote add distro "https://github.com/$(VSCODE_MIXIN_REPO).git"
git fetch distro
git merge $(node -p "require('./package.json').distro")
displayName: Merge distro
- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1
inputs:
keyfile: 'build/.cachesalt, .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: 'BuildCache'
- script: |
set -e
CHILD_CONCURRENCY=1 yarn --frozen-lockfile
displayName: Install dependencies
env:
GITHUB_TOKEN: $(github-distro-mixin-password)
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1
inputs:
keyfile: 'build/.cachesalt, .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: 'BuildCache'
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
- script: |
set -e
yarn postinstall
displayName: Run postinstall scripts
condition: and(succeeded(), eq(variables['CacheRestored'], 'true'))
- script: |
set -e
node build/azure-pipelines/mixin
displayName: Mix in quality
- script: |
set -e
yarn gulp install-sqltoolsservice
displayName: Install sqltoolsservice
- script: |
set -e
yarn gulp package-rebuild-extensions
yarn gulp vscode-darwin-min-ci
yarn gulp vscode-reh-darwin-min-ci
yarn gulp vscode-reh-web-darwin-min-ci
displayName: Build
env:
VSCODE_MIXIN_PASSWORD: $(github-distro-mixin-password)
- script: |
set -e
./scripts/test.sh --build --coverage --reporter mocha-junit-reporter
displayName: Run unit tests
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
- script: |
set -e
pushd ../azuredatastudio-darwin
ls
echo "Cleaning the application"
xattr -cr *.app
cd *.app
find . -name '._*' -print0 | xargs -0 rm -rf --
cd ..
echo "Signing the application with deep"
codesign --deep --force --timestamp --options runtime --entitlements $(Build.SourcesDirectory)/build/azure-pipelines/darwin/entitlements.xml -s LPV3BJJYXS *.app
cd *.app
ls
echo "Signing specific components"
find . -type f -print0 | xargs -0 file | grep ': *Mach-O' | sed 's/: *Mach-O.*//' | while read -r file; do codesign --options runtime --timestamp --entitlements $(Build.SourcesDirectory)/build/azure-pipelines/darwin/entitlements.xml -s LPV3BJJYXS --force "$file" || break; done
echo "Signing Electron again..."
codesign --force --timestamp --options runtime --entitlements $(Build.SourcesDirectory)/build/azure-pipelines/darwin/entitlements.xml -s LPV3BJJYXS Contents/Frameworks/Electron\ Framework.framework
cd ..
echo "Signing the entire application one more time"
codesign --force --timestamp --options runtime --entitlements $(Build.SourcesDirectory)/build/azure-pipelines/darwin/entitlements.xml -s LPV3BJJYXS *.app
popd
displayName: 'Manual codesign'
- script: |
set -e
mkdir -p .build/darwin/archive
pushd ../azuredatastudio-darwin
ditto -c -k --keepParent *.app $(Build.SourcesDirectory)/.build/darwin/archive/azuredatastudio-darwin.zip
popd
displayName: 'Archive'
- task: PublishPipelineArtifact@0
displayName: 'Publish SelfSigned'
inputs:
artifactName: darwin-selfsigned
targetPath: $(Build.SourcesDirectory)/.build/darwin/archive/azuredatastudio-darwin.zip
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
displayName: 'ESRP CodeSigning'
inputs:
ConnectedServiceName: 'Code Signing'
FolderPath: '$(Build.SourcesDirectory)/.build/darwin/archive'
Pattern: 'azuredatastudio-darwin.zip'
signConfigType: inlineSignParams
inlineOperation: |
[
{
"keyCode": "CP-401337-Apple",
"operationCode": "MacAppDeveloperSign",
"parameters": {
"Hardening": "Enable"
},
"toolName": "sign",
"toolVersion": "1.0"
}
]
SessionTimeout: 90
condition: and(succeeded(), eq(variables['signtba'], true))
- script: |
zip -d $(Build.SourcesDirectory)/.build/darwin/archive/azuredatastudio-darwin.zip "*.pkg"
displayName: Clean Archive
condition: and(succeeded(), eq(variables['signtba'], true))
- task: PublishPipelineArtifact@0
displayName: 'Publish Signed'
inputs:
artifactName: darwin-signed
targetPath: $(Build.SourcesDirectory)/.build/darwin/archive/azuredatastudio-darwin.zip
condition: and(succeeded(), eq(variables['signtba'], true))
- task: EsrpCodeSigning@1
displayName: 'ESRP Notarization'
inputs:
ConnectedServiceName: 'Code Signing'
FolderPath: '$(Build.SourcesDirectory)/.build/darwin/archive'
Pattern: 'azuredatastudio-darwin.zip'
signConfigType: inlineSignParams
inlineOperation: |
[
{
"KeyCode": "CP-401337-Apple",
"OperationCode": "MacAppNotarize",
"Parameters": {
"BundleId": "com.microsoft.azuredatastudio-$(VSCODE_QUALITY)"
},
"ToolName": "sign",
"ToolVersion": "1.0"
}
]
SessionTimeout: 120
condition: and(succeeded(), eq(variables['signtba'], true))
- task: PublishPipelineArtifact@0
displayName: 'Publish Notarized'
inputs:
artifactName: darwin-notarized
targetPath: $(Build.SourcesDirectory)/.build/darwin/archive/azuredatastudio-darwin.zip
condition: and(succeeded(), eq(variables['signtba'], true))
- script: |
set -e
./build/azure-pipelines/darwin/createDrop.sh
displayName: Create Drop
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
- task: PublishTestResults@2
displayName: 'Publish Test Results test-results.xml'
inputs:
testResultsFiles: 'test-results.xml'
searchFolder: '$(Build.SourcesDirectory)'
continueOnError: true
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
- task: PublishTestResults@2
displayName: 'Publish Integration and Smoke Test Results'
inputs:
testResultsFiles: 'dawin-integration-tests-results.xml'
searchFolder: '$(Build.ArtifactStagingDirectory)\test-results'
continueOnError: true
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage from $(Build.SourcesDirectory)/.build/coverage/cobertura-coverage.xml'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(Build.SourcesDirectory)/.build/coverage/cobertura-coverage.xml'
reportDirectory: '$(Build.SourcesDirectory)/.build/coverage'
continueOnError: true
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
displayName: 'Component Detection'
inputs:
failOnAlert: true

View File

@@ -0,0 +1,19 @@
Param(
[string]$sourcesDir,
[string]$artifactsDir,
[string]$storageKey,
[string]$documentDbKey
)
$env:AZURE_STORAGE_ACCESS_KEY_2 = $storageKey
$env:AZURE_DOCUMENTDB_MASTERKEY = $documentDbKey
$VersionJson = Get-Content -Raw -Path "$artifactsDir\version.json" | ConvertFrom-Json
$Version = $VersionJson.version
$Quality = $VersionJson.quality
$CommitId = $VersionJson.commit
$ZipName = "azuredatastudio-darwin.zip"
$Zip = "$artifactsDir\darwin\archive\$ZipName"
node $sourcesDir\build\azure-pipelines\common\publish.js $Quality darwin archive $ZipName $Version true $Zip $CommitId

View File

@@ -1,3 +1,6 @@
pool:
vmImage: 'Ubuntu-16.04'
trigger:
branches:
include: ['master', 'release/*']
@@ -8,27 +11,27 @@ pr:
steps:
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
versionSpec: "12.13.0"
- task: AzureKeyVault@1
displayName: 'Azure Key Vault: Get Secrets'
inputs:
azureSubscription: 'vscode-builds-subscription'
KeyVaultName: vscode
azureSubscription: 'azuredatastudio-adointegration'
KeyVaultName: ado-secrets
- script: |
set -e
cat << EOF > ~/.netrc
machine github.com
login vscode
login azuredatastudio
password $(github-distro-mixin-password)
EOF
git config user.email "vscode@microsoft.com"
git config user.name "VSCode"
git config user.email "andresse@microsoft.com"
git config user.name "AzureDataStudio"
git remote add distro "https://github.com/$VSCODE_MIXIN_REPO.git"
git remote add distro "https://github.com/$(VSCODE_MIXIN_REPO).git"
git fetch distro
# Push master branch into oss/master

View File

@@ -0,0 +1,16 @@
#Download base image ubuntu 16.04
FROM ubuntu:16.04
# Update Software repository
RUN apt-get update
RUN apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 dbus libgtk-3-0
ADD ./ /opt/ads-server
RUN chmod +x /opt/ads-server/server.sh && chmod +x /opt/ads-server/node
CMD ["/opt/ads-server/server.sh"]
EXPOSE 8000:8000
EXPOSE 8001:8001

View File

@@ -7,7 +7,7 @@ pr: none
steps:
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
versionSpec: "12.13.0"
- task: AzureKeyVault@1
displayName: 'Azure Key Vault: Get Secrets'

View File

@@ -0,0 +1,27 @@
#Download base image ubuntu 16.04
FROM ubuntu:16.04
# Update Software repository
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 dbus xvfb libgtk-3-0 \
libkrb5-dev git apt-transport-https ca-certificates curl gnupg-agent software-properties-common \
libnss3 libasound2 make gcc libx11-dev fakeroot rpm libgconf-2-4 libunwind8 g++-4.8
RUN rm /usr/bin/gcc
RUN rm /usr/bin/g++
RUN ln -s /usr/bin/gcc-4.8 /usr/bin/gcc
RUN ln -s /usr/bin/g++-4.8 /usr/bin/g++
#docker
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
RUN apt-key fingerprint 0EBFCD88
RUN add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
RUN apt-get update
RUN apt-get -y install docker-ce docker-ce-cli containerd.io
# This image needs to be built on a linux host; some weird stuff happens and the xvfb service won't start
# if built on a windows host.
ADD ./xvfb.init /etc/init.d/xvfb
RUN chmod +x /etc/init.d/xvfb
RUN update-rc.d xvfb defaults

View File

@@ -2,56 +2,59 @@ 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
sudo service xvfb start
- task: NodeTool@0
inputs:
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
versionSpec: "12.13.0"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3
inputs:
versionSpec: "1.x"
- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1
inputs:
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: 'npm-cache' # {{SQL CARBON EDIT}} update build cache
- script: |
yarn --frozen-lockfile
CHILD_CONCURRENCY=1 yarn --frozen-lockfile
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: 'npm-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
- script: |
yarn gulp hygiene --skip-tslint
yarn gulp hygiene
displayName: Run Hygiene Checks
- script: | # {{SQL CARBON EDIT}} add strict null check
yarn strict-vscode
displayName: Run Strict Null Check
# - script: | {{SQL CARBON EDIT}} remove monaco editor checks
# yarn monaco-compile-check
# displayName: Run Monaco Editor Checks
- script: |
yarn gulp tslint
displayName: Run TSLint Checks
- script: |
yarn monaco-compile-check
displayName: Run Monaco Editor Checks
yarn valid-layers-check
displayName: Run Valid Layers 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:

View File

@@ -0,0 +1,37 @@
#!/usr/bin/env bash
set -e
REPO="$(pwd)"
ROOT="$REPO/.."
# Publish tarball
mkdir -p $REPO/.build/linux/{archive,server}
PLATFORM_LINUX="linux-x64"
BUILDNAME="azuredatastudio-$PLATFORM_LINUX"
BUILD="$ROOT/$BUILDNAME"
TARBALL_FILENAME="azuredatastudio-$PLATFORM_LINUX.tar.gz"
TARBALL_PATH="$REPO/.build/linux/archive/$TARBALL_FILENAME"
# create version
PACKAGEJSON="$BUILD/resources/app/package.json"
VERSION=$(node -p "require(\"$PACKAGEJSON\").version")
COMMIT_ID=$(git rev-parse HEAD)
echo -e "{ \"version\": \"$VERSION\", \"quality\": \"$VSCODE_QUALITY\", \"commit\": \"$COMMIT_ID\" }" > "$REPO/.build/version.json"
rm -rf $ROOT/code-*.tar.*
(cd $ROOT && tar -czf $TARBALL_PATH $BUILDNAME)
# Publish Remote Extension Host
LEGACY_SERVER_BUILD_NAME="azuredatastudio-reh-$PLATFORM_LINUX"
SERVER_BUILD_NAME="azuredatastudio-server-$PLATFORM_LINUX"
SERVER_TARBALL_FILENAME="azuredatastudio-server-$PLATFORM_LINUX.tar.gz"
SERVER_TARBALL_PATH="$REPO/.build/linux/server/$SERVER_TARBALL_FILENAME"
rm -rf $ROOT/azuredatastudio-server-*.tar.*
(cd $ROOT && mv $LEGACY_SERVER_BUILD_NAME $SERVER_BUILD_NAME && tar --owner=0 --group=0 -czf $SERVER_TARBALL_PATH $SERVER_BUILD_NAME)
# create docker
mkdir -p $REPO/.build/docker
docker build -t azuredatastudio-server -f $REPO/build/azure-pipelines/docker/Dockerfile $ROOT/$SERVER_BUILD_NAME
docker save azuredatastudio-server | gzip > $REPO/.build/docker/azuredatastudio-server-docker.tar.gz
node build/azure-pipelines/common/copyArtifacts.js

View File

@@ -1,40 +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 documentdb_1 = require("documentdb");
function createDefaultConfig(quality) {
return {
id: quality,
frozen: false
};
}
function getConfig(quality) {
const client = new documentdb_1.DocumentClient(process.env['AZURE_DOCUMENTDB_ENDPOINT'], { masterKey: process.env['AZURE_DOCUMENTDB_MASTERKEY'] });
const collection = 'dbs/builds/colls/config';
const query = {
query: `SELECT TOP 1 * FROM c WHERE c.id = @quality`,
parameters: [
{ name: '@quality', value: quality }
]
};
return new Promise((c, e) => {
client.queryDocuments(collection, query).toArray((err, results) => {
if (err && err.code !== 409) {
return e(err);
}
c(!results || results.length === 0 ? createDefaultConfig(quality) : results[0]);
});
});
}
getConfig(process.argv[2])
.then(config => {
console.log(config.frozen);
process.exit(0);
})
.catch(err => {
console.error(err);
process.exit(1);
});

View File

@@ -21,7 +21,7 @@ steps:
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
versionSpec: "12.13.0"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:

View File

@@ -21,7 +21,7 @@ steps:
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
versionSpec: "12.13.0"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:
@@ -118,6 +118,32 @@ steps:
displayName: Run integration tests
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
- script: |
set -e
yarn gulp "vscode-linux-x64-build-deb"
yarn gulp "vscode-linux-x64-build-rpm"
yarn gulp "vscode-linux-x64-prepare-snap"
displayName: Build packages
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
inputs:
ConnectedServiceName: 'ESRP CodeSign'
FolderPath: '.build/linux/rpm/x86_64'
Pattern: '*.rpm'
signConfigType: inlineSignParams
inlineOperation: |
[
{
"keyCode": "CP-450779-Pgp",
"operationSetCode": "LinuxSign",
"parameters": [ ],
"toolName": "sign",
"toolVersion": "1.0"
}
]
SessionTimeout: 120
displayName: Codesign rpm
- script: |
set -e
AZURE_DOCUMENTDB_MASTERKEY="$(builds-docdb-key-readwrite)" \

View File

@@ -10,13 +10,11 @@ BUILD="$ROOT/$BUILDNAME"
BUILD_VERSION="$(date +%s)"
[ -z "$VSCODE_QUALITY" ] && TARBALL_FILENAME="code-$BUILD_VERSION.tar.gz" || TARBALL_FILENAME="code-$VSCODE_QUALITY-$BUILD_VERSION.tar.gz"
TARBALL_PATH="$ROOT/$TARBALL_FILENAME"
PACKAGEJSON="$BUILD/resources/app/package.json"
VERSION=$(node -p "require(\"$PACKAGEJSON\").version")
rm -rf $ROOT/code-*.tar.*
(cd $ROOT && tar -czf $TARBALL_PATH $BUILDNAME)
node build/azure-pipelines/common/publish.js "$VSCODE_QUALITY" "$PLATFORM_LINUX" archive-unsigned "$TARBALL_FILENAME" "$VERSION" true "$TARBALL_PATH"
node build/azure-pipelines/common/createAsset.js "$PLATFORM_LINUX" archive-unsigned "$TARBALL_FILENAME" "$TARBALL_PATH"
# Publish Remote Extension Host
LEGACY_SERVER_BUILD_NAME="vscode-reh-$PLATFORM_LINUX"
@@ -27,32 +25,28 @@ SERVER_TARBALL_PATH="$ROOT/$SERVER_TARBALL_FILENAME"
rm -rf $ROOT/vscode-server-*.tar.*
(cd $ROOT && mv $LEGACY_SERVER_BUILD_NAME $SERVER_BUILD_NAME && tar --owner=0 --group=0 -czf $SERVER_TARBALL_PATH $SERVER_BUILD_NAME)
node build/azure-pipelines/common/publish.js "$VSCODE_QUALITY" "server-$PLATFORM_LINUX" archive-unsigned "$SERVER_TARBALL_FILENAME" "$VERSION" true "$SERVER_TARBALL_PATH"
node build/azure-pipelines/common/createAsset.js "server-$PLATFORM_LINUX" archive-unsigned "$SERVER_TARBALL_FILENAME" "$SERVER_TARBALL_PATH"
# Publish hockeyapp symbols
node build/azure-pipelines/common/symbols.js "$VSCODE_MIXIN_PASSWORD" "$VSCODE_HOCKEYAPP_TOKEN" "x64" "$VSCODE_HOCKEYAPP_ID_LINUX64"
# Publish DEB
yarn gulp "vscode-linux-x64-build-deb"
PLATFORM_DEB="linux-deb-x64"
DEB_ARCH="amd64"
DEB_FILENAME="$(ls $REPO/.build/linux/deb/$DEB_ARCH/deb/)"
DEB_PATH="$REPO/.build/linux/deb/$DEB_ARCH/deb/$DEB_FILENAME"
node build/azure-pipelines/common/publish.js "$VSCODE_QUALITY" "$PLATFORM_DEB" package "$DEB_FILENAME" "$VERSION" true "$DEB_PATH"
node build/azure-pipelines/common/createAsset.js "$PLATFORM_DEB" package "$DEB_FILENAME" "$DEB_PATH"
# Publish RPM
yarn gulp "vscode-linux-x64-build-rpm"
PLATFORM_RPM="linux-rpm-x64"
RPM_ARCH="x86_64"
RPM_FILENAME="$(ls $REPO/.build/linux/rpm/$RPM_ARCH/ | grep .rpm)"
RPM_PATH="$REPO/.build/linux/rpm/$RPM_ARCH/$RPM_FILENAME"
node build/azure-pipelines/common/publish.js "$VSCODE_QUALITY" "$PLATFORM_RPM" package "$RPM_FILENAME" "$VERSION" true "$RPM_PATH"
node build/azure-pipelines/common/createAsset.js "$PLATFORM_RPM" package "$RPM_FILENAME" "$RPM_PATH"
# Publish Snap
yarn gulp "vscode-linux-x64-prepare-snap"
# Pack snap tarball artifact, in order to preserve file perms
mkdir -p $REPO/.build/linux/snap-tarball
SNAP_TARBALL_PATH="$REPO/.build/linux/snap-tarball/snap-x64.tar.gz"

View File

@@ -1,7 +1,7 @@
steps:
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
versionSpec: "12.13.0"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:
@@ -43,12 +43,10 @@ steps:
# Create snap package
BUILD_VERSION="$(date +%s)"
SNAP_FILENAME="code-$VSCODE_QUALITY-$BUILD_VERSION.snap"
PACKAGEJSON="$(ls $SNAP_ROOT/code*/usr/share/code*/resources/app/package.json)"
VERSION=$(node -p "require(\"$PACKAGEJSON\").version")
SNAP_PATH="$SNAP_ROOT/$SNAP_FILENAME"
(cd $SNAP_ROOT/code-* && sudo --preserve-env snapcraft snap --output "$SNAP_PATH")
# 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/createAsset.js "linux-snap-x64" package "$SNAP_FILENAME" "$SNAP_PATH"

View File

@@ -0,0 +1,172 @@
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, .build/quality'
targetfolder: '.build, out-build, out-vscode-min, out-vscode-reh-min, out-vscode-reh-web-min'
vstsFeed: 'BuildCache'
platformIndependent: true
alias: 'Compilation'
- script: |
set -e
exit 1
displayName: Check RestoreCache
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
- task: NodeTool@0
inputs:
versionSpec: '10.15.1'
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3
inputs:
versionSpec: "1.x"
- task: AzureKeyVault@1
displayName: 'Azure Key Vault: Get Secrets'
inputs:
azureSubscription: 'ClientToolsInfra_670062 (88d5392f-a34f-4769-b405-f597fc533613)'
KeyVaultName: ado-secrets
SecretsFilter: 'github-distro-mixin-password'
- script: |
set -e
cat << EOF > ~/.netrc
machine github.com
login azuredatastudio
password $(github-distro-mixin-password)
EOF
git config user.email "andresse@microsoft.com"
git config user.name "AzureDataStudio"
displayName: Prepare tooling
- script: |
set -e
git remote add distro "https://github.com/$(VSCODE_MIXIN_REPO).git"
git fetch distro
git merge $(node -p "require('./package.json').distro")
displayName: Merge distro
- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1
inputs:
keyfile: 'build/.cachesalt, .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: 'BuildCache'
- script: |
set -e
CHILD_CONCURRENCY=1 yarn --frozen-lockfile
displayName: Install dependencies
env:
GITHUB_TOKEN: $(github-distro-mixin-password)
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1
inputs:
keyfile: 'build/.cachesalt, .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: 'BuildCache'
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
- script: |
set -e
yarn postinstall
displayName: Run postinstall scripts
condition: and(succeeded(), eq(variables['CacheRestored'], 'true'))
- script: |
set -e
node build/azure-pipelines/mixin
displayName: Mix in quality
- script: |
set -e
yarn gulp install-sqltoolsservice
yarn gulp install-ssmsmin
displayName: Install extension binaries
- script: |
set -e
yarn gulp vscode-linux-x64-min-ci
yarn gulp vscode-reh-linux-x64-min-ci
yarn gulp vscode-reh-web-linux-x64-min-ci
displayName: Build
env:
VSCODE_MIXIN_PASSWORD: $(github-distro-mixin-password)
- script: |
set -e
service xvfb start
displayName: Start xvfb
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
- script: |
set -e
yarn gulp package-rebuild-extensions
yarn gulp compile-extensions
yarn gulp package-external-extensions
displayName: Package External extensions
- script: |
set -e
APP_ROOT=$(agent.builddirectory)/azuredatastudio-linux-x64
APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
DISPLAY=:10 ./scripts/test-extensions-unit.sh
displayName: 'Run Stable Extension Unit Tests'
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
- script: |
set -e
APP_ROOT=$(agent.builddirectory)/azuredatastudio-linux-x64
APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
DISPLAY=:10 ./scripts/test-extensions-unit-unstable.sh
displayName: 'Run Unstable Extension Unit Tests'
continueOnError: true
condition: and(succeeded(), eq(variables['RUN_UNSTABLE_TESTS'], 'true'))
- script: |
set -e
yarn gulp vscode-linux-x64-build-deb
displayName: Build Deb
- script: |
set -e
yarn gulp vscode-linux-x64-build-rpm
displayName: Build Rpm
- script: |
set -e
./build/azure-pipelines/linux/createDrop.sh
displayName: Create Drop
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
- task: PublishTestResults@2
displayName: 'Publish Test Results test-results.xml'
inputs:
testResultsFiles: 'test-results.xml'
searchFolder: '$(Build.SourcesDirectory)'
continueOnError: true
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage from $(Build.SourcesDirectory)/.build/coverage/cobertura-coverage.xml'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(Build.SourcesDirectory)/.build/coverage/cobertura-coverage.xml'
reportDirectory: '$(Build.SourcesDirectory)/.build/coverage'
continueOnError: true
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
displayName: 'Component Detection'
inputs:
failOnAlert: true

View File

@@ -0,0 +1,36 @@
Param(
[string]$sourcesDir,
[string]$artifactsDir,
[string]$storageKey,
[string]$documentDbKey
)
$env:AZURE_STORAGE_ACCESS_KEY_2 = $storageKey
$env:AZURE_DOCUMENTDB_MASTERKEY = $documentDbKey
$VersionJson = Get-Content -Raw -Path "$artifactsDir\version.json" | ConvertFrom-Json
$Version = $VersionJson.version
$Quality = $VersionJson.quality
$CommitId = $VersionJson.commit
$Arch = "x64"
# Publish tarball
$PlatformLinux = "linux-$Arch"
$TarballFilename = "azuredatastudio-linux-$Arch.tar.gz"
$TarballPath = "$artifactsDir\linux\archive\$TarballFilename"
node $sourcesDir\build\azure-pipelines\common\publish.js $Quality $PlatformLinux archive-unsigned $TarballFilename $Version true $TarballPath $CommitId
# Publish DEB
$PlatformDeb = "linux-deb-$Arch"
$DebFilename = "$(Get-ChildItem -File -Name $artifactsDir\linux\deb\amd64\deb\*.deb)"
$DebPath = "$artifactsDir\linux\deb\amd64\deb\$DebFilename"
node $sourcesDir\build\azure-pipelines\common\publish.js $Quality $PlatformDeb package $DebFilename $Version true $DebPath $CommitId
# Publish RPM
$PlatformRpm = "linux-rpm-$Arch"
$RpmFilename = "$(Get-ChildItem -File -Name $artifactsDir\linux\rpm\x86_64\*.rpm)"
$RpmPath = "$artifactsDir\linux\rpm\x86_64\$RpmFilename"
node $sourcesDir\build\azure-pipelines\common\publish.js $Quality $PlatformRpm package $RpmFilename $Version true $RpmPath $CommitId

View File

@@ -21,7 +21,7 @@ function main() {
return;
}
const productJsonFilter = filter('product.json', { restore: true });
const productJsonFilter = filter('**/product.json', { restore: true });
fancyLog(ansiColors.blue('[mixin]'), `Mixing in sources:`);
return vfs
@@ -29,7 +29,7 @@ function main() {
.pipe(filter(f => !f.isDirectory()))
.pipe(productJsonFilter)
.pipe(buffer())
.pipe(json(o => Object.assign({}, require('../product.json'), o)))
.pipe(json(o => Object.assign({}, require('../../product.json'), o)))
.pipe(productJsonFilter.restore)
.pipe(es.mapSync(function (f) {
fancyLog(ansiColors.blue('[mixin]'), f.relative, ansiColors.green('✔︎'));
@@ -38,4 +38,4 @@ function main() {
.pipe(vfs.dest('.'));
}
main();
main();

View File

@@ -67,7 +67,7 @@ jobs:
- 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'))
condition: and(succeeded(), eq(variables['VSCODE_COMPILE_ONLY'], 'false'), eq(variables['VSCODE_BUILD_LINUX_ARM64'], 'true'))
pool:
vmImage: 'Ubuntu-16.04'
variables:
@@ -102,7 +102,7 @@ jobs:
- job: macOS
condition: and(succeeded(), eq(variables['VSCODE_COMPILE_ONLY'], 'false'), eq(variables['VSCODE_BUILD_MACOS'], 'true'))
pool:
vmImage: macOS 10.13
vmImage: macOS-latest
dependsOn:
- Compile
steps:
@@ -118,6 +118,7 @@ jobs:
- Linux
- LinuxSnap
- LinuxArmhf
- LinuxArm64
- LinuxAlpine
- macOS
steps:
@@ -133,6 +134,7 @@ jobs:
- Linux
- LinuxSnap
- LinuxArmhf
- LinuxArm64
- LinuxAlpine
- LinuxWeb
- macOS

View File

@@ -12,23 +12,24 @@ steps:
vstsFeed: 'npm-vscode'
platformIndependent: true
alias: 'Compilation'
dryRun: true
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
versionSpec: "12.13.0"
condition: and(succeeded(), ne(variables['CacheExists-Compilation'], 'true'))
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:
versionSpec: "1.x"
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
condition: and(succeeded(), ne(variables['CacheExists-Compilation'], 'true'))
- task: AzureKeyVault@1
displayName: 'Azure Key Vault: Get Secrets'
inputs:
azureSubscription: 'vscode-builds-subscription'
KeyVaultName: vscode
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
condition: and(succeeded(), ne(variables['CacheExists-Compilation'], 'true'))
- script: |
set -e
@@ -41,7 +42,7 @@ steps:
git config user.email "vscode@microsoft.com"
git config user.name "VSCode"
displayName: Prepare tooling
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
condition: and(succeeded(), ne(variables['CacheExists-Compilation'], 'true'))
- script: |
set -e
@@ -49,33 +50,33 @@ steps:
git fetch distro
git merge $(node -p "require('./package.json').distro")
displayName: Merge distro
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
condition: and(succeeded(), ne(variables['CacheExists-Compilation'], 'true'))
- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1
inputs:
keyfile: 'build/.cachesalt, .yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock'
targetfolder: '**/node_modules, !**/node_modules/**/node_modules'
vstsFeed: 'npm-vscode'
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
condition: and(succeeded(), ne(variables['CacheExists-Compilation'], 'true'))
- script: |
set -e
CHILD_CONCURRENCY=1 yarn --frozen-lockfile
displayName: Install dependencies
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'), ne(variables['CacheRestored'], 'true'))
condition: and(succeeded(), ne(variables['CacheExists-Compilation'], 'true'), ne(variables['CacheRestored'], 'true'))
- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1
inputs:
keyfile: 'build/.cachesalt, .yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock'
targetfolder: '**/node_modules, !**/node_modules/**/node_modules'
vstsFeed: 'npm-vscode'
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'), ne(variables['CacheRestored'], 'true'))
condition: and(succeeded(), ne(variables['CacheExists-Compilation'], 'true'), ne(variables['CacheRestored'], 'true'))
- script: |
set -e
yarn postinstall
displayName: Run postinstall scripts
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'), eq(variables['CacheRestored'], 'true'))
condition: and(succeeded(), ne(variables['CacheExists-Compilation'], 'true'), eq(variables['CacheRestored'], 'true'))
# Mixin must run before optimize, because the CSS loader will
# inline small SVGs
@@ -83,28 +84,28 @@ steps:
set -e
node build/azure-pipelines/mixin
displayName: Mix in quality
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
condition: and(succeeded(), ne(variables['CacheExists-Compilation'], 'true'))
- script: |
set -e
yarn gulp hygiene --skip-tslint
yarn gulp tslint
yarn gulp hygiene
yarn monaco-compile-check
displayName: Run hygiene, tslint and monaco compile checks
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
yarn valid-layers-check
displayName: Run hygiene, monaco compile & valid layers checks
condition: and(succeeded(), ne(variables['CacheExists-Compilation'], 'true'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
- script: |
set -
./build/azure-pipelines/common/extract-telemetry.sh
displayName: Extract Telemetry
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
condition: and(succeeded(), ne(variables['CacheExists-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'))
condition: and(succeeded(), ne(variables['CacheExists-Compilation'], 'true'))
- script: |
set -e
@@ -114,14 +115,22 @@ steps:
yarn gulp minify-vscode-reh
yarn gulp minify-vscode-reh-web
displayName: Compile
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
condition: and(succeeded(), ne(variables['CacheExists-Compilation'], 'true'))
- script: |
set -e
AZURE_STORAGE_ACCESS_KEY="$(ticino-storage-key)" \
node build/azure-pipelines/upload-sourcemaps
displayName: Upload sourcemaps
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
condition: and(succeeded(), ne(variables['CacheExists-Compilation'], 'true'))
- script: |
set -e
VERSION=`node -p "require(\"./package.json\").version"`
AZURE_DOCUMENTDB_MASTERKEY="$(builds-docdb-key-readwrite)" \
node build/azure-pipelines/common/createBuild.js $VERSION
displayName: Create build
condition: and(succeeded(), ne(variables['CacheExists-Compilation'], 'true'))
- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1
inputs:
@@ -130,4 +139,4 @@ steps:
vstsFeed: 'npm-vscode'
platformIndependent: true
alias: 'Compilation'
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
condition: and(succeeded(), ne(variables['CacheExists-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

@@ -35,9 +35,9 @@ function isValidTag(t: string) {
return false;
}
if (parseInt(major, 10) === NaN || parseInt(minor, 10) === NaN) {
if (isNaN(parseInt(major, 10)) || isNaN(parseInt(minor, 10))) {
return false;
}
return true;
}
}

View File

@@ -9,7 +9,7 @@ pr: none
steps:
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
versionSpec: "12.13.0"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:

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

@@ -19,4 +19,4 @@ steps:
(cd build ; yarn)
AZURE_DOCUMENTDB_MASTERKEY="$(builds-docdb-key-readwrite)" \
node build/azure-pipelines/common/release.js
node build/azure-pipelines/common/releaseBuild.js

View File

@@ -0,0 +1,74 @@
resources:
containers:
- container: linux-x64
image: sqltoolscontainers.azurecr.io/linux-build-agent:1
endpoint: ContainerRegistry
jobs:
- job: Compile
pool:
vmImage: 'Ubuntu-16.04'
container: linux-x64
steps:
- template: sql-product-compile.yml
- job: macOS
condition: eq(variables['VSCODE_BUILD_MACOS'], 'true')
pool:
vmImage: macOS-latest
dependsOn:
- Compile
steps:
- template: darwin/sql-product-build-darwin.yml
timeoutInMinutes: 180
- job: Linux
condition: eq(variables['VSCODE_BUILD_LINUX'], 'true')
pool:
vmImage: 'Ubuntu-16.04'
container: linux-x64
dependsOn:
- Compile
steps:
- template: linux/sql-product-build-linux.yml
- job: Windows
condition: eq(variables['VSCODE_BUILD_WIN32'], 'true')
pool:
vmImage: VS2017-Win2016
dependsOn:
- Compile
steps:
- template: win32/sql-product-build-win32.yml
- job: Windows_Test
condition: and(succeeded(), eq(variables['VSCODE_BUILD_WIN32'], 'true'))
pool:
name: mssqltools
dependsOn:
- Linux
- Windows
steps:
- template: win32/sql-product-test-win32.yml
- job: Release
condition: and(succeeded(), or(eq(variables['VSCODE_RELEASE'], 'true'), and(eq(variables['VSCODE_QUALITY'], 'insider'), eq(variables['Build.Reason'], 'Schedule'))))
pool:
vmImage: 'Ubuntu-16.04'
dependsOn:
- macOS
- Linux
- Windows
- Windows_Test
steps:
- template: sql-release.yml
trigger: none
pr: none
schedules:
- cron: "0 5 * * Mon-Fri"
displayName: Mon-Fri at 7:00
branches:
include:
- master

View File

@@ -0,0 +1,113 @@
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, .build/quality'
targetfolder: '.build, out-build, out-vscode-min, out-vscode-reh-min, out-vscode-reh-web-min'
vstsFeed: 'BuildCache'
platformIndependent: true
alias: 'Compilation'
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3
inputs:
versionSpec: "1.x"
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
- task: AzureKeyVault@1
displayName: 'Azure Key Vault: Get Secrets'
inputs:
azureSubscription: 'ClientToolsInfra_670062 (88d5392f-a34f-4769-b405-f597fc533613)'
KeyVaultName: ado-secrets
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
- script: |
set -e
cat << EOF > ~/.netrc
machine github.com
login azuredatastudio
password $(github-distro-mixin-password)
EOF
git config user.email "andresse@microsoft.com"
git config user.name "AzureDataStudio"
displayName: Prepare tooling
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
- script: |
set -e
git remote add distro "https://github.com/$(VSCODE_MIXIN_REPO).git"
git fetch distro
git merge $(node -p "require('./package.json').distro")
displayName: Merge distro
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1
inputs:
keyfile: 'build/.cachesalt, .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: 'BuildCache'
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
- script: |
set -e
CHILD_CONCURRENCY=1 yarn --frozen-lockfile
displayName: Install dependencies
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'), ne(variables['CacheRestored'], 'true'))
- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1
inputs:
keyfile: 'build/.cachesalt, .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: 'BuildCache'
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'), ne(variables['CacheRestored'], 'true'))
- script: |
set -e
yarn postinstall
displayName: Run postinstall scripts
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'), eq(variables['CacheRestored'], 'true'))
# Mixin must run before optimize, because the CSS loader will
# inline small SVGs
- script: |
set -e
node build/azure-pipelines/mixin
displayName: Mix in quality
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
- script: |
set -e
yarn gulp hygiene
yarn strict-vscode
yarn valid-layers-check
displayName: Run hygiene, tslint
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
- script: |
set -e
yarn gulp compile-build
yarn gulp compile-extensions-build
yarn gulp minify-vscode
yarn gulp minify-vscode-reh
yarn gulp minify-vscode-reh-web
displayName: Compile
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1
inputs:
keyfile: 'build/.cachesalt, .build/commit, .build/quality'
targetfolder: '.build, out-build, out-vscode-min, out-vscode-reh-min, out-vscode-reh-web-min'
vstsFeed: 'BuildCache'
platformIndependent: true
alias: 'Compilation'
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))

View File

@@ -0,0 +1,5 @@
steps:
- script: |
set -e
echo "##vso[build.addbuildtag]Release"
displayName: Set For Release

View File

@@ -1,7 +1,7 @@
steps:
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
versionSpec: "12.13.0"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:

View File

@@ -21,7 +21,7 @@ steps:
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
versionSpec: "12.13.0"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:

View File

@@ -7,12 +7,9 @@ ROOT="$REPO/.."
WEB_BUILD_NAME="vscode-web"
WEB_TARBALL_FILENAME="vscode-web.tar.gz"
WEB_TARBALL_PATH="$ROOT/$WEB_TARBALL_FILENAME"
BUILD="$ROOT/$WEB_BUILD_NAME"
PACKAGEJSON="$BUILD/package.json"
VERSION=$(node -p "require(\"$PACKAGEJSON\").version")
rm -rf $ROOT/vscode-web.tar.*
(cd $ROOT && tar --owner=0 --group=0 -czf $WEB_TARBALL_PATH $WEB_BUILD_NAME)
node build/azure-pipelines/common/publish.js "$VSCODE_QUALITY" "web-standalone" archive-unsigned "$WEB_TARBALL_FILENAME" "$VERSION" true "$WEB_TARBALL_PATH"
node build/azure-pipelines/common/createAsset.js web-standalone archive-unsigned "$WEB_TARBALL_FILENAME" "$WEB_TARBALL_PATH"

View File

@@ -1,8 +1,8 @@
steps:
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
versionSpec: "12.13.0"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3 # {{SQL CARBON EDIT}} update version
inputs:
versionSpec: "1.x"
- task: UsePythonVersion@0
@@ -11,42 +11,47 @@ steps:
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: 'npm-cache' # {{SQL CARBON EDIT}} update build cache
- powershell: |
yarn --frozen-lockfile
env:
CHILD_CONCURRENCY: "1"
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: 'npm-cache' # {{SQL CARBON EDIT}} update build cache
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
- powershell: |
yarn gulp electron
yarn electron
- script: |
yarn gulp hygiene --skip-tslint
yarn gulp hygiene
displayName: Run Hygiene Checks
- script: | # {{SQL CARBON EDIT}} add step
yarn strict-vscode
displayName: Run Strict Null Check
# - powershell: | {{SQL CARBON EDIT}} remove step
# yarn monaco-compile-check
# displayName: Run Monaco Editor Checks
- script: |
yarn gulp tslint
displayName: Run TSLint Checks
- powershell: |
yarn monaco-compile-check
displayName: Run Monaco Editor Checks
yarn valid-layers-check
displayName: Run Valid Layers 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:

View File

@@ -0,0 +1,20 @@
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
$Arch = "x64"
$Repo = "$(pwd)"
$Root = "$Repo\.."
$LegacyServer = "$Root\azuredatastudio-reh-win32-$Arch"
$ServerName = "azuredatastudio-server-win32-$Arch"
$Server = "$Root\$ServerName"
$ServerZipLocation = "$Repo\.build\win32-$Arch\server"
$ServerZip = "$ServerZipLocation\azuredatastudio-server-win32-$Arch.zip"
# Create server archive
New-Item $ServerZipLocation -ItemType Directory # this will throw even when success for we don't want to exec this
$global:LASTEXITCODE = 0
exec { Rename-Item -Path $LegacyServer -NewName $ServerName } "Rename Item"
exec { .\node_modules\7zip\7zip-lite\7z.exe a -tzip $ServerZip $Server -r } "Zip Server"
exec { node build/azure-pipelines/common/copyArtifacts.js } "Copy Artifacts"

View File

@@ -21,7 +21,7 @@ steps:
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
versionSpec: "12.13.0"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
inputs:
@@ -107,7 +107,7 @@ 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'))

View File

@@ -23,14 +23,13 @@ exec { .\node_modules\7zip\7zip-lite\7z.exe a -tzip $ServerZip $Server -r }
# get version
$PackageJson = Get-Content -Raw -Path "$Build\resources\app\package.json" | ConvertFrom-Json
$Version = $PackageJson.version
$Quality = "$env:VSCODE_QUALITY"
$AssetPlatform = if ("$Arch" -eq "ia32") { "win32" } else { "win32-x64" }
exec { node build/azure-pipelines/common/publish.js $Quality "$AssetPlatform-archive" archive "VSCode-win32-$Arch-$Version.zip" $Version true $Zip }
exec { node build/azure-pipelines/common/publish.js $Quality "$AssetPlatform" setup "VSCodeSetup-$Arch-$Version.exe" $Version true $SystemExe }
exec { node build/azure-pipelines/common/publish.js $Quality "$AssetPlatform-user" setup "VSCodeUserSetup-$Arch-$Version.exe" $Version true $UserExe }
exec { node build/azure-pipelines/common/publish.js $Quality "server-$AssetPlatform" archive "vscode-server-win32-$Arch.zip" $Version true $ServerZip }
exec { node build/azure-pipelines/common/createAsset.js "$AssetPlatform-archive" archive "VSCode-win32-$Arch-$Version.zip" $Zip }
exec { node build/azure-pipelines/common/createAsset.js "$AssetPlatform" setup "VSCodeSetup-$Arch-$Version.exe" $SystemExe }
exec { node build/azure-pipelines/common/createAsset.js "$AssetPlatform-user" setup "VSCodeUserSetup-$Arch-$Version.exe" $UserExe }
exec { node build/azure-pipelines/common/createAsset.js "server-$AssetPlatform" archive "vscode-server-win32-$Arch.zip" $ServerZip }
# publish hockeyapp symbols
$hockeyAppId = if ("$Arch" -eq "ia32") { "$env:VSCODE_HOCKEYAPP_ID_WIN32" } else { "$env:VSCODE_HOCKEYAPP_ID_WIN64" }

View File

@@ -0,0 +1,270 @@
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, .build/quality'
targetfolder: '.build, out-build, out-vscode-min, out-vscode-reh-min, out-vscode-reh-web-min'
vstsFeed: 'BuildCache'
platformIndependent: true
alias: 'Compilation'
- powershell: |
$ErrorActionPreference = "Stop"
exit 1
displayName: Check RestoreCache
condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'))
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3
inputs:
versionSpec: "1.x"
- task: UsePythonVersion@0
inputs:
versionSpec: '2.x'
addToPath: true
- task: AzureKeyVault@1
displayName: 'Azure Key Vault: Get Secrets'
inputs:
azureSubscription: 'ClientToolsInfra_670062 (88d5392f-a34f-4769-b405-f597fc533613)'
KeyVaultName: ado-secrets
SecretsFilter: 'github-distro-mixin-password'
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
"machine github.com`nlogin azuredatastudio`npassword $(github-distro-mixin-password)" | Out-File "$env:USERPROFILE\_netrc" -Encoding ASCII
exec { git config user.email "andresse@microsoft.com" }
exec { git config user.name "AzureDataStudio" }
displayName: Prepare tooling
- powershell: |
git remote add distro "https://github.com/$(VSCODE_MIXIN_REPO).git"
git fetch distro
git merge $(node -p "require('./package.json').distro")
displayName: Merge distro
- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1
inputs:
keyfile: 'build/.cachesalt, .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: 'BuildCache'
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
$env:CHILD_CONCURRENCY="1"
exec { yarn --frozen-lockfile }
displayName: Install dependencies
env:
GITHUB_TOKEN: $(github-distro-mixin-password)
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1
inputs:
keyfile: 'build/.cachesalt, .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: 'BuildCache'
condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
exec { yarn postinstall }
displayName: Run postinstall scripts
condition: and(succeeded(), eq(variables['CacheRestored'], 'true'))
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
exec { node build/azure-pipelines/mixin }
displayName: Mix in quality
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
exec { yarn gulp "install-sqltoolsservice" }
displayName: Install sqltoolsservice
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
exec { yarn gulp "package-rebuild-extensions" }
exec { yarn gulp "vscode-win32-x64-min-ci" }
exec { yarn gulp "vscode-reh-win32-x64-min-ci" }
exec { yarn gulp "vscode-reh-web-win32-x64-min-ci" }
displayName: Build
env:
VSCODE_MIXIN_PASSWORD: $(github-distro-mixin-password)
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
exec { .\scripts\test-unstable.bat --build --coverage --reporter mocha-junit-reporter }
continueOnError: true
condition: and(succeeded(), eq(variables['RUN_UNSTABLE_TESTS'], 'true'))
displayName: Run unstable tests
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
displayName: 'Sign out code'
inputs:
ConnectedServiceName: 'Code Signing'
FolderPath: '$(agent.builddirectory)/azuredatastudio-win32-x64'
Pattern: '*.exe,*.node,resources/app/node_modules.asar.unpacked/*.dll,swiftshader/*.dll,d3dcompiler_47.dll,libGLESv2.dll,ffmpeg.dll,libEGL.dll,Microsoft.SqlTools.Hosting.dll,Microsoft.SqlTools.ResourceProvider.Core.dll,Microsoft.SqlTools.ResourceProvider.DefaultImpl.dll,MicrosoftSqlToolsCredentials.dll,MicrosoftSqlToolsServiceLayer.dll,Newtonsoft.Json.dll,SqlSerializationService.dll,SqlToolsResourceProviderService.dll,Microsoft.SqlServer.*.dll,Microsoft.Data.Tools.Sql.BatchParser.dll'
signConfigType: inlineSignParams
inlineOperation: |
[
  {
    "keyCode": "CP-230012",
    "operationSetCode": "SigntoolSign",
    "parameters": [
    {
      "parameterName": "OpusName",
      "parameterValue": "Azure Data Studio"
    },
    {
      "parameterName": "OpusInfo",
      "parameterValue": "https://github.com/microsoft/azuredatastudio"
    },
    {
      "parameterName": "PageHash",
      "parameterValue": "/NPH"
    },
    {
      "parameterName": "FileDigest",
      "parameterValue": "/fd sha256"
    },
    {
      "parameterName": "TimeStamp",
      "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
    }
    ],
    "toolName": "signtool.exe",
    "toolVersion": "6.2.9304.0"
  },
  {
    "keyCode": "CP-230012",
    "operationSetCode": "SigntoolVerify",
    "parameters": [
    {
      "parameterName": "VerifyAll",
      "parameterValue": "/all"
    }
],
    "toolName": "signtool.exe",
    "toolVersion": "6.2.9304.0"
  }
]
SessionTimeout: 600
MaxConcurrency: 5
MaxRetryAttempts: 20
condition: and(succeeded(), eq(variables['signed'], true))
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
exec { yarn gulp "vscode-win32-x64-user-setup" }
exec { yarn gulp "vscode-win32-x64-system-setup" }
exec { yarn gulp "vscode-win32-x64-archive" }
displayName: Archive & User & System setup
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
displayName: 'Sign installers'
inputs:
ConnectedServiceName: 'Code Signing'
FolderPath: '.build'
Pattern: '*.exe'
signConfigType: inlineSignParams
inlineOperation: |
[
  {
    "keyCode": "CP-230012",
    "operationSetCode": "SigntoolSign",
    "parameters": [
    {
      "parameterName": "OpusName",
      "parameterValue": "Azure Data Studio"
    },
    {
      "parameterName": "OpusInfo",
      "parameterValue": "https://github.com/microsoft/azuredatastudio"
    },
    {
      "parameterName": "PageHash",
      "parameterValue": "/NPH"
    },
    {
      "parameterName": "FileDigest",
      "parameterValue": "/fd sha256"
    },
    {
      "parameterName": "TimeStamp",
      "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
    }
    ],
    "toolName": "signtool.exe",
    "toolVersion": "6.2.9304.0"
  },
  {
    "keyCode": "CP-230012",
    "operationSetCode": "SigntoolVerify",
    "parameters": [
    {
      "parameterName": "VerifyAll",
      "parameterValue": "/all"
    }
],
    "toolName": "signtool.exe",
    "toolVersion": "6.2.9304.0"
  }
]
SessionTimeout: 600
MaxConcurrency: 5
MaxRetryAttempts: 20
condition: and(succeeded(), eq(variables['signed'], true))
- task: ArchiveFiles@2
displayName: 'Archive build scripts source'
inputs:
rootFolderOrFile: '$(Build.SourcesDirectory)/build'
archiveType: tar
archiveFile: '$(Build.BinariesDirectory)/source.tar.gz'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: build scripts source'
inputs:
PathtoPublish: '$(Build.BinariesDirectory)/source.tar.gz'
ArtifactName: source
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
.\build\azure-pipelines\win32\createDrop.ps1
displayName: Create Drop
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
- task: PublishTestResults@2
displayName: 'Publish Test Results test-results.xml'
inputs:
testResultsFiles: 'test-results.xml'
searchFolder: '$(Build.SourcesDirectory)'
failTaskOnFailedTests: true
continueOnError: true
condition: and(succeeded(), eq(variables['RUN_UNSTABLE_TESTS'], 'true'))
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
displayName: 'Component Detection'
inputs:
failOnAlert: true

View File

@@ -0,0 +1,99 @@
steps:
- task: NodeTool@0
inputs:
versionSpec: "10.15.1"
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3
inputs:
versionSpec: "1.x"
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
$env:CHILD_CONCURRENCY="1"
exec { git clean -fxd }
displayName: Clean repo
- task: DownloadPipelineArtifact@2
inputs:
buildType: 'current'
targetPath: '$(Build.SourcesDirectory)\.build'
artifactName: drop
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
$env:CHILD_CONCURRENCY="1"
exec { yarn --frozen-lockfile }
displayName: Install dependencies
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
exec { .\node_modules\7zip\7zip-lite\7z.exe x $(Build.SourcesDirectory)\.build\win32-x64/archive/azuredatastudio-win32-x64.zip -o$(Agent.TempDirectory)\azuredatastudio-win32-x64 }
displayName: Unzip artifact
- task: AzureKeyVault@1
displayName: 'Azure Key Vault: SqlToolsSecretStore'
inputs:
azureSubscription: 'ClientToolsInfra_670062 (88d5392f-a34f-4769-b405-f597fc533613)'
KeyVaultName: SqlToolsSecretStore
SecretsFilter: 'ads-integration-test-azure-server,ads-integration-test-azure-server-password,ads-integration-test-azure-server-username,ads-integration-test-bdc-server,ads-integration-test-bdc-server-password,ads-integration-test-bdc-server-username,ads-integration-test-standalone-server,ads-integration-test-standalone-server-password,ads-integration-test-standalone-server-username,ads-integration-test-standalone-server-2019,ads-integration-test-standalone-server-password-2019,ads-integration-test-standalone-server-username-2019'
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
$AppRoot = "$(Agent.TempDirectory)\azuredatastudio-win32-x64"
$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:INTEGRATION_TEST_CLI_PATH = "$AppRoot\bin\$AppNameShort"; .\scripts\sql-test-integration.bat }
continueOnError: true
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
displayName: Run stable tests
env:
BDC_BACKEND_USERNAME: $(ads-integration-test-bdc-server-username)
BDC_BACKEND_PWD: $(ads-integration-test-bdc-server-password)
BDC_BACKEND_HOSTNAME: $(ads-integration-test-bdc-server)
STANDALONE_SQL_USERNAME: $(ads-integration-test-standalone-server-username)
STANDALONE_SQL_PWD: $(ads-integration-test-standalone-server-password)
STANDALONE_SQL: $(ads-integration-test-standalone-server)
AZURE_SQL_USERNAME: $(ads-integration-test-azure-server-username)
AZURE_SQL_PWD: $(ads-integration-test-azure-server-password)
AZURE_SQL: $(ads-integration-test-azure-server)
STANDALONE_SQL_USERNAME_2019: $(ads-integration-test-standalone-server-username-2019)
STANDALONE_SQL_PWD_2019: $(ads-integration-test-standalone-server-password-2019)
STANDALONE_SQL_2019: $(ads-integration-test-standalone-server-2019)
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
$AppRoot = "$(Agent.TempDirectory)\azuredatastudio-win32-x64"
$AppProductJson = Get-Content -Raw -Path "$AppRoot\resources\app\product.json" | ConvertFrom-Json
$AppNameShort = $AppProductJson.nameShort
exec { $env:INTEGRATION_TEST_ELECTRON_PATH = "$AppRoot\$AppNameShort.exe"; .\scripts\sql-test-integration-unstable.bat }
continueOnError: true
condition: and(succeeded(), eq(variables['RUN_UNSTABLE_TESTS'], 'true'))
displayName: Run unstable integration tests
env:
BDC_BACKEND_USERNAME: $(ads-integration-test-bdc-server-username)
BDC_BACKEND_PWD: $(ads-integration-test-bdc-server-password)
BDC_BACKEND_HOSTNAME: $(ads-integration-test-bdc-server)
STANDALONE_SQL_USERNAME: $(ads-integration-test-standalone-server-username)
STANDALONE_SQL_PWD: $(ads-integration-test-standalone-server-password)
STANDALONE_SQL: $(ads-integration-test-standalone-server)
AZURE_SQL_USERNAME: $(ads-integration-test-azure-server-username)
AZURE_SQL_PWD: $(ads-integration-test-azure-server-password)
AZURE_SQL: $(ads-integration-test-azure-server)
STANDALONE_SQL_USERNAME_2019: $(ads-integration-test-standalone-server-username-2019)
STANDALONE_SQL_PWD_2019: $(ads-integration-test-standalone-server-password-2019)
STANDALONE_SQL_2019: $(ads-integration-test-standalone-server-2019)
- task: PublishTestResults@2
displayName: 'Publish Integration and Smoke Test Results'
inputs:
testResultsFiles: '*.xml'
searchFolder: '$(Build.ArtifactStagingDirectory)\test-results'
mergeTestResults: true
failTaskOnFailedTests: true
continueOnError: true
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))

View File

@@ -0,0 +1,29 @@
Param(
[string]$sourcesDir,
[string]$artifactsDir,
[string]$storageKey,
[string]$documentDbKey
)
$env:AZURE_STORAGE_ACCESS_KEY_2 = $storageKey
$env:AZURE_DOCUMENTDB_MASTERKEY = $documentDbKey
$ExeName = "AzureDataStudioSetup.exe"
$SystemExe = "$artifactsDir\win32-x64\system-setup\$ExeName"
$UserExe = "$artifactsDir\win32-x64\user-setup\$ExeName"
$UserExeName = "AzureDataStudioUserSetup.exe"
$ZipName = "azuredatastudio-win32-x64.zip"
$Zip = "$artifactsDir\win32-x64\archive\$ZipName"
$VersionJson = Get-Content -Raw -Path "$artifactsDir\version.json" | ConvertFrom-Json
$Version = $VersionJson.version
$Quality = $VersionJson.quality
$CommitId = $VersionJson.commit
$assetPlatform = "win32-x64"
node $sourcesDir/build/azure-pipelines/common/publish.js $Quality "$assetPlatform-archive" archive $ZipName $Version true $Zip $CommitId
node $sourcesDir/build/azure-pipelines/common/publish.js $Quality "$assetPlatform" setup $ExeName $Version true $SystemExe $CommitId
node $sourcesDir/build/azure-pipelines/common/publish.js $Quality "$assetPlatform-user" setup $UserExeName $Version true $UserExe $CommitId

View File

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

View File

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

View File

@@ -10,6 +10,7 @@ const os = require('os');
const { remote } = require('electron');
const dialog = remote.dialog;
const productJsonPath = path.join(__dirname, '..', '..', 'product.json');
const builtInExtensionsPath = path.join(__dirname, '..', 'builtInExtensions.json');
const controlFilePath = path.join(os.homedir(), '.vscode-oss-dev', 'extensions', 'control.json');
@@ -51,6 +52,7 @@ function render(el, state) {
}
const ul = document.createElement('ul');
const { quality } = readJson(productJsonPath);
const { builtin, control } = state;
for (const ext of builtin) {
@@ -61,6 +63,10 @@ function render(el, state) {
const name = document.createElement('code');
name.textContent = ext.name;
if (quality && ext.forQualities && !ext.forQualities.includes(quality)) {
name.textContent += ` (only on ${ext.forQualities.join(', ')})`;
}
li.appendChild(name);
const form = document.createElement('form');
@@ -123,4 +129,4 @@ function main() {
render(el, { builtin, control });
}
window.onload = main;
window.onload = main;

View File

@@ -17,14 +17,14 @@ const compilation = require('./lib/compilation');
const monacoapi = require('./monaco/api');
const fs = require('fs');
var root = path.dirname(__dirname);
var sha1 = util.getVersion(root);
var semver = require('./monaco/package.json').version;
var headerVersion = semver + '(' + sha1 + ')';
let root = path.dirname(__dirname);
let sha1 = util.getVersion(root);
let semver = require('./monaco/package.json').version;
let headerVersion = semver + '(' + sha1 + ')';
// Build
var editorEntryPoints = [
let editorEntryPoints = [
{
name: 'vs/editor/editor.main',
include: [],
@@ -40,11 +40,11 @@ var editorEntryPoints = [
}
];
var editorResources = [
let editorResources = [
'out-editor-build/vs/base/browser/ui/codiconLabel/**/*.ttf'
];
var BUNDLED_FILE_HEADER = [
let BUNDLED_FILE_HEADER = [
'/*!-----------------------------------------------------------',
' * Copyright (c) Microsoft Corporation. All rights reserved.',
' * Version: ' + headerVersion,
@@ -57,7 +57,6 @@ var BUNDLED_FILE_HEADER = [
const languages = i18n.defaultLanguages.concat([]); // i18n.defaultLanguages.concat(process.env.VSCODE_QUALITY !== 'stable' ? i18n.extraLanguages : []);
const extractEditorSrcTask = task.define('extract-editor-src', () => {
console.log(`If the build fails, consider tweaking shakeLevel below to a lower value.`);
const apiusages = monacoapi.execute().usageContent;
const extrausages = fs.readFileSync(path.join(root, 'build', 'monaco', 'monaco.usage.recipe')).toString();
standalone.extractEditor({
@@ -71,25 +70,15 @@ const extractEditorSrcTask = task.define('extract-editor-src', () => {
apiusages,
extrausages
],
typings: [
'typings/lib.ie11_safe_es6.d.ts',
'typings/thenable.d.ts',
'typings/es6-promise.d.ts',
'typings/require-monaco.d.ts',
"typings/lib.es2018.promise.d.ts",
'vs/monaco.d.ts'
],
libs: [
`lib.es5.d.ts`,
`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')
destRoot: path.join(root, 'out-editor-src'),
redirects: []
});
});
@@ -140,23 +129,75 @@ const createESMSourcesAndResourcesTask = task.define('extract-editor-esm', () =>
});
const compileEditorESMTask = task.define('compile-editor-esm', () => {
console.log(`Launching the TS compiler at ${path.join(__dirname, '../out-editor-esm')}...`);
let result;
if (process.platform === 'win32') {
const result = cp.spawnSync(`..\\node_modules\\.bin\\tsc.cmd`, {
result = cp.spawnSync(`..\\node_modules\\.bin\\tsc.cmd`, {
cwd: path.join(__dirname, '../out-editor-esm')
});
console.log(result.stdout.toString());
console.log(result.stderr.toString());
} else {
const result = cp.spawnSync(`node`, [`../node_modules/.bin/tsc`], {
result = cp.spawnSync(`node`, [`../node_modules/.bin/tsc`], {
cwd: path.join(__dirname, '../out-editor-esm')
});
console.log(result.stdout.toString());
console.log(result.stderr.toString());
}
console.log(result.stdout.toString());
console.log(result.stderr.toString());
if (result.status !== 0) {
console.log(`The TS Compilation failed, preparing analysis folder...`);
const destPath = path.join(__dirname, '../../vscode-monaco-editor-esm-analysis');
return util.rimraf(destPath)().then(() => {
fs.mkdirSync(destPath);
// initialize a new repository
cp.spawnSync(`git`, [`init`], {
cwd: destPath
});
// build a list of files to copy
const files = util.rreddir(path.join(__dirname, '../out-editor-esm'));
// copy files from src
for (const file of files) {
const srcFilePath = path.join(__dirname, '../src', file);
const dstFilePath = path.join(destPath, file);
if (fs.existsSync(srcFilePath)) {
util.ensureDir(path.dirname(dstFilePath));
const contents = fs.readFileSync(srcFilePath).toString().replace(/\r\n|\r|\n/g, '\n');
fs.writeFileSync(dstFilePath, contents);
}
}
// create an initial commit to diff against
cp.spawnSync(`git`, [`add`, `.`], {
cwd: destPath
});
// create the commit
cp.spawnSync(`git`, [`commit`, `-m`, `"original sources"`, `--no-gpg-sign`], {
cwd: destPath
});
// copy files from esm
for (const file of files) {
const srcFilePath = path.join(__dirname, '../out-editor-esm', file);
const dstFilePath = path.join(destPath, file);
if (fs.existsSync(srcFilePath)) {
util.ensureDir(path.dirname(dstFilePath));
const contents = fs.readFileSync(srcFilePath).toString().replace(/\r\n|\r|\n/g, '\n');
fs.writeFileSync(dstFilePath, contents);
}
}
console.log(`Open in VS Code the folder at '${destPath}' and you can alayze the compilation error`);
throw new Error('Standalone Editor compilation failed. If this is the build machine, simply launch `yarn run gulp editor-distro` on your machine to further analyze the compilation problem.');
});
}
});
function toExternalDTS(contents) {
let lines = contents.split('\n');
let lines = contents.split(/\r\n|\r|\n/);
let killNextCloseCurlyBrace = false;
for (let i = 0; i < lines.length; i++) {
let line = lines[i];
@@ -222,7 +263,7 @@ const finalEditorResourcesTask = task.define('final-editor-resources', () => {
// package.json
gulp.src('build/monaco/package.json')
.pipe(es.through(function (data) {
var json = JSON.parse(data.contents.toString());
let json = JSON.parse(data.contents.toString());
json.private = false;
data.contents = Buffer.from(JSON.stringify(json, null, ' '));
this.emit('data', data);
@@ -266,10 +307,10 @@ const finalEditorResourcesTask = task.define('final-editor-resources', () => {
return;
}
var relativePathToMap = path.relative(path.join(data.relative), path.join('min-maps', data.relative + '.map'));
let relativePathToMap = path.relative(path.join(data.relative), path.join('min-maps', data.relative + '.map'));
var strContents = data.contents.toString();
var newStr = '//# sourceMappingURL=' + relativePathToMap.replace(/\\/g, '/');
let strContents = data.contents.toString();
let newStr = '//# sourceMappingURL=' + relativePathToMap.replace(/\\/g, '/');
strContents = strContents.replace(/\/\/# sourceMappingURL=[^ ]+$/, newStr);
data.contents = Buffer.from(strContents);
@@ -312,6 +353,13 @@ gulp.task('editor-distro',
)
);
gulp.task('monacodts', task.define('monacodts', () => {
const result = monacoapi.execute();
fs.writeFileSync(result.filePath, result.content);
fs.writeFileSync(path.join(root, 'src/vs/editor/common/standalone/standaloneEnums.ts'), result.enums);
return Promise.resolve(true);
}));
//#region monaco type checking
function createTscCompileTask(watch) {

View File

@@ -115,7 +115,8 @@ const tasks = compilations.map(function (tsconfigFile) {
const compileTask = task.define(`compile-extension:${name}`, task.series(cleanTask, () => {
const pipeline = createPipeline(sqlLocalizedExtensions.includes(name), true); // {{SQL CARBON EDIT}}
const input = pipeline.tsProjectSrc();
const nonts = gulp.src(src, srcOpts).pipe(filter(['**', '!**/*.ts']));
const input = es.merge(nonts, pipeline.tsProjectSrc());
return input
.pipe(pipeline())
@@ -124,7 +125,8 @@ const tasks = compilations.map(function (tsconfigFile) {
const watchTask = task.define(`watch-extension:${name}`, task.series(cleanTask, () => {
const pipeline = createPipeline(false);
const input = pipeline.tsProjectSrc();
const nonts = gulp.src(src, srcOpts).pipe(filter(['**', '!**/*.ts']));
const input = es.merge(nonts, pipeline.tsProjectSrc());
const watchInput = watcher(src, { ...srcOpts, ...{ readDelay: 200 } });
return watchInput
@@ -134,7 +136,8 @@ const tasks = compilations.map(function (tsconfigFile) {
const compileBuildTask = task.define(`compile-build-extension-${name}`, task.series(cleanTask, () => {
const pipeline = createPipeline(true, true);
const input = pipeline.tsProjectSrc();
const nonts = gulp.src(src, srcOpts).pipe(filter(['**', '!**/*.ts']));
const input = es.merge(nonts, pipeline.tsProjectSrc());
return input
.pipe(pipeline())

View File

@@ -8,10 +8,8 @@
const gulp = require('gulp');
const filter = require('gulp-filter');
const es = require('event-stream');
const gulptslint = require('gulp-tslint');
const gulpeslint = require('gulp-eslint');
const tsfmt = require('typescript-formatter');
const tslint = require('tslint');
const VinylFile = require('vinyl');
const vfs = require('vinyl-fs');
const path = require('path');
@@ -73,7 +71,6 @@ const indentationFilter = [
'!**/yarn-error.log',
// except multiple specific folders
'!**/octicons/**',
'!**/codicon/**',
'!**/fixtures/**',
'!**/lib/**',
@@ -88,7 +85,7 @@ const indentationFilter = [
'!src/typings/**/*.d.ts',
'!extensions/**/*.d.ts',
'!**/*.{svg,exe,png,bmp,scpt,bat,cmd,cur,ttf,woff,eot,md,ps1,template,yaml,yml,d.ts.recipe,ico,icns}',
'!build/{lib,tslintRules,download}/**/*.js',
'!build/{lib,download}/**/*.js',
'!build/**/*.sh',
'!build/azure-pipelines/**/*.js',
'!build/azure-pipelines/**/*.config',
@@ -104,6 +101,7 @@ const indentationFilter = [
'!extensions/admin-tool-ext-win/ssmsmin/**',
'!extensions/resource-deployment/notebooks/**',
'!extensions/mssql/notebooks/**',
'!extensions/integration-tests/testData/**',
'!extensions/big-data-cluster/src/bigDataCluster/controller/apiGenerated.ts',
'!extensions/big-data-cluster/src/bigDataCluster/controller/clusterApiGenerated2.ts'
];
@@ -126,6 +124,7 @@ const copyrightFilter = [
'!**/*.opts',
'!**/*.disabled',
'!**/*.code-workspace',
'!**/*.js.map',
'!**/promise-polyfill/polyfill.js',
'!build/**/*.init',
'!resources/linux/snap/snapcraft.yaml',
@@ -136,29 +135,30 @@ 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/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/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/workbench/contrib/notebook/browser/outputs/tableRenderers.ts',
'!src/sql/workbench/contrib/notebook/common/models/url.ts',
'!src/sql/workbench/contrib/notebook/browser/models/renderMimeInterfaces.ts',
'!src/sql/workbench/contrib/notebook/browser/models/outputProcessor.ts',
'!src/sql/workbench/contrib/notebook/browser/models/mimemodel.ts',
'!src/sql/workbench/contrib/notebook/browser/cellViews/media/*.css',
'!src/sql/base/browser/ui/table/plugins/rowSelectionModel.plugin.ts',
'!src/sql/base/browser/ui/table/plugins/rowDetailView.ts',
'!src/sql/base/browser/ui/table/plugins/headerFilter.plugin.ts',
'!src/sql/base/browser/ui/table/plugins/checkboxSelectColumn.plugin.ts',
'!src/sql/base/browser/ui/table/plugins/cellSelectionModel.plugin.ts',
'!src/sql/base/browser/ui/table/plugins/autoSizeColumns.plugin.ts',
'!src/sql/workbench/parts/notebook/browser/outputs/sanitizer.ts',
'!src/sql/workbench/parts/notebook/browser/outputs/renderers.ts',
'!src/sql/workbench/parts/notebook/browser/outputs/registry.ts',
'!src/sql/workbench/parts/notebook/browser/outputs/factories.ts',
'!src/sql/workbench/parts/notebook/common/models/nbformat.ts',
'!src/sql/workbench/contrib/notebook/browser/outputs/sanitizer.ts',
'!src/sql/workbench/contrib/notebook/browser/outputs/renderers.ts',
'!src/sql/workbench/contrib/notebook/browser/outputs/registry.ts',
'!src/sql/workbench/contrib/notebook/browser/outputs/factories.ts',
'!src/sql/workbench/contrib/notebook/common/models/nbformat.ts',
'!extensions/markdown-language-features/media/tomorrow.css',
'!src/sql/workbench/browser/modelComponents/media/highlight.css',
'!src/sql/workbench/parts/notebook/electron-browser/cellViews/media/highlight.css',
'!src/sql/workbench/contrib/notebook/electron-browser/cellViews/media/highlight.css',
'!extensions/mssql/sqltoolsservice/**',
'!extensions/import/flatfileimportservice/**',
'!extensions/notebook/src/prompts/**',
@@ -171,7 +171,7 @@ const copyrightFilter = [
'!**/*.bacpac'
];
const eslintFilter = [
const jsHygieneFilter = [
'src/**/*.js',
'build/gulpfile.*.js',
'!src/vs/loader.js',
@@ -184,7 +184,10 @@ const eslintFilter = [
'!**/test/**'
];
const tslintBaseFilter = [
const tsHygieneFilter = [
'src/**/*.ts',
'test/**/*.ts',
'extensions/**/*.ts',
'!**/fixtures/**',
'!**/typings/**',
'!**/node_modules/**',
@@ -194,33 +197,16 @@ const tslintBaseFilter = [
'!extensions/**/*.test.ts',
'!extensions/html-language-features/server/lib/jquery.d.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}},
'!extensions/big-data-cluster/src/bigDataCluster/controller/tokenApiGenerated.ts', // {{SQL CARBON EDIT}},
'!src/vs/workbench/services/themes/common/textMateScopeMatcher.ts', // {{SQL CARBON EDIT}} skip this because we have no plans on touching this and its not ours
'!src/vs/workbench/contrib/extensions/browser/extensionTipsService.ts' // {{SQL CARBON EDIT}} skip this because known issue
];
const sqlFilter = ['src/sql/**']; // {{SQL CARBON EDIT}}
const tslintCoreFilter = [
'src/**/*.ts',
'test/**/*.ts',
'!extensions/**/*.ts',
'!test/automation/**',
'!test/smoke/**',
...tslintBaseFilter
];
const tslintExtensionsFilter = [
const sqlHygieneFilter = [ // for rules we want to only apply to our code
'src/sql/**/*.ts',
'!**/node_modules/**',
'extensions/**/*.ts',
'!src/**/*.ts',
'!test/**/*.ts',
'test/automation/**/*.ts',
...tslintBaseFilter
];
const tslintHygieneFilter = [
'src/**/*.ts',
'test/**/*.ts',
'extensions/**/*.ts',
...tslintBaseFilter
'!extensions/{git,search-result,vscode-test-resolver,extension-editing,json-language-features,vscode-colorize-tests}/**/*.ts',
];
const copyrightHeaderLines = [
@@ -232,27 +218,17 @@ const copyrightHeaderLines = [
gulp.task('eslint', () => {
return vfs.src(all, { base: '.', follow: true, allowEmpty: true })
.pipe(filter(eslintFilter))
.pipe(gulpeslint('src/.eslintrc'))
.pipe(filter(jsHygieneFilter.concat(tsHygieneFilter)))
.pipe(gulpeslint({
configFile: '.eslintrc.json',
rulePaths: ['./build/lib/eslint']
}))
.pipe(gulpeslint.formatEach('compact'))
.pipe(gulpeslint.failAfterError());
});
gulp.task('tslint', () => {
return es.merge([
// 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());
.pipe(gulpeslint.results(results => {
if (results.warningCount > 0 || results.errorCount > 0) {
throw new Error('eslint failed with warnings and/or errors');
}
}));
});
function checkPackageJSON(actualPath) {
@@ -274,7 +250,7 @@ function checkPackageJSON(actualPath) {
const checkPackageJSONTask = task.define('check-package-json', () => {
return gulp.src('package.json')
.pipe(es.through(function() {
.pipe(es.through(function () {
checkPackageJSON.call(this, 'remote/package.json');
checkPackageJSON.call(this, 'remote/web/package.json');
}));
@@ -341,8 +317,6 @@ function hygiene(some) {
replace: undefined,
tsconfig: undefined,
tsconfigFile: undefined,
tslint: undefined,
tslintFile: undefined,
tsfmtFile: undefined,
vscode: undefined,
vscodeFile: undefined
@@ -351,7 +325,7 @@ function hygiene(some) {
let formatted = result.dest.replace(/\r\n/gm, '\n');
if (original !== formatted) {
console.error("File not formatted. Run the 'Format Document' command to fix it:", file.relative);
console.error('File not formatted. Run the \'Format Document\' command to fix it:', file.relative);
errorCount++;
}
cb(null, file);
@@ -361,33 +335,19 @@ function hygiene(some) {
});
});
const tslintConfiguration = tslint.Configuration.findConfiguration('tslint.json', '.');
const tslintOptions = { fix: false, formatter: 'json' };
const tsLinter = new tslint.Linter(tslintOptions);
const tsl = es.through(function (file) {
const contents = file.contents.toString('utf8');
tsLinter.lint(file.relative, contents, tslintConfiguration.results);
this.emit('data', file);
});
let input;
if (Array.isArray(some) || typeof some === 'string' || !some) {
input = vfs.src(some || all, { base: '.', follow: true, allowEmpty: true });
const options = { base: '.', follow: true, allowEmpty: true };
if (some) {
input = vfs.src(some, options).pipe(filter(all)); // split this up to not unnecessarily filter all a second time
} else {
input = vfs.src(all, options);
}
} else {
input = some;
}
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) { //TODO restore
const contents = file.contents.toString('utf8');
sqlTsLinter.lint(file.relative, contents, tslintSqlConfiguration.results);
});
const productJsonFilter = filter('product.json', { restore: true });
const result = input
@@ -400,25 +360,36 @@ function hygiene(some) {
.pipe(filter(copyrightFilter))
.pipe(copyrights);
let typescript = result
.pipe(filter(tslintHygieneFilter))
const typescript = result
.pipe(filter(tsHygieneFilter))
.pipe(formatting);
if (!process.argv.some(arg => arg === '--skip-tslint')) {
typescript = typescript.pipe(tsl);
typescript = typescript
.pipe(filter(sqlFilter))
.pipe(sqlTsl); // {{SQL CARBON EDIT}}
}
const javascript = result
.pipe(filter(eslintFilter))
.pipe(gulpeslint('src/.eslintrc'))
.pipe(filter(jsHygieneFilter.concat(tsHygieneFilter)))
.pipe(gulpeslint({
configFile: '.eslintrc.json',
rulePaths: ['./build/lib/eslint']
}))
.pipe(gulpeslint.formatEach('compact'))
.pipe(gulpeslint.failAfterError());
.pipe(gulpeslint.results(results => {
errorCount += results.warningCount;
errorCount += results.errorCount;
}));
const sqlJavascript = result
.pipe(filter(sqlHygieneFilter))
.pipe(gulpeslint({
configFile: '.eslintrc.sql.json',
rulePaths: ['./build/lib/eslint']
}))
.pipe(gulpeslint.formatEach('compact'))
.pipe(gulpeslint.results(results => {
errorCount += results.warningCount;
errorCount += results.errorCount;
}));
let count = 0;
return es.merge(typescript, javascript)
return es.merge(typescript, javascript, sqlJavascript)
.pipe(es.through(function (data) {
count++;
if (process.env['TRAVIS'] && count % 10 === 0) {
@@ -427,33 +398,6 @@ function hygiene(some) {
this.emit('data', data);
}, function () {
process.stdout.write('\n');
const tslintResult = tsLinter.getResult();
if (tslintResult.failures.length > 0) {
for (const failure of tslintResult.failures) {
const name = failure.getFileName();
const position = failure.getStartPosition();
const line = position.getLineAndCharacter().line;
const character = position.getLineAndCharacter().character;
console.error(`${name}:${line + 1}:${character + 1}:${failure.getFailure()}`);
}
errorCount += tslintResult.failures.length;
}
const sqlTslintResult = sqlTsLinter.getResult();
if (sqlTslintResult.failures.length > 0) {
for (const failure of sqlTslintResult.failures) {
const name = failure.getFileName();
const position = failure.getStartPosition();
const line = position.getLineAndCharacter().line;
const character = position.getLineAndCharacter().character;
console.error(`${name}:${line + 1}:${character + 1}:${failure.getFailure()}`);
}
errorCount += sqlTslintResult.failures.length;
}
if (errorCount > 0) {
this.emit('error', 'Hygiene failed with ' + errorCount + ' errors. Check \'build/gulpfile.hygiene.js\'.');
} else {

View File

@@ -1,79 +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';
const gulp = require('gulp');
// {{SQL CARBON EDIT}}
const jeditor = require('gulp-json-editor');
const product = require('../product.json');
gulp.task('mixin', function () {
// {{SQL CARBON EDIT}}
const updateUrl = process.env['SQLOPS_UPDATEURL'];
if (!updateUrl) {
console.log('Missing SQLOPS_UPDATEURL, skipping mixin');
return;
}
const quality = process.env['VSCODE_QUALITY'];
if (!quality) {
console.log('Missing VSCODE_QUALITY, skipping mixin');
return;
}
// {{SQL CARBON EDIT}} - apply ADS insiders values if needed
let newValues = {
"nameShort": product.nameShort,
"nameLong": product.nameLong,
"applicationName": product.applicationName,
"dataFolderName": product.dataFolderName,
"win32MutexName": product.win32MutexName,
"win32DirName": product.win32DirName,
"win32NameVersion": product.win32NameVersion,
"win32RegValueName": product.win32RegValueName,
"win32AppId": product.win32AppId,
"win32x64AppId": product.win32x64AppId,
"win32UserAppId": product.win32UserAppId,
"win32x64UserAppId": product.win32x64UserAppId,
"win32AppUserModelId": product.win32AppUserModelId,
"win32ShellNameShort": product.win32ShellNameShort,
"darwinBundleIdentifier": product.darwinBundleIdentifier,
"updateUrl": updateUrl,
"quality": quality,
"extensionsGallery": {
"serviceUrl": 'https://sqlopsextensions.blob.core.windows.net/marketplace/v1/extensionsGallery.json'
}
};
if (quality === 'insider') {
let dashSuffix = '-insiders';
let dotSuffix = '.insiders';
let displaySuffix = ' - Insiders';
newValues.extensionsGallery.serviceUrl = `https://sqlopsextensions.blob.core.windows.net/marketplace/v1/extensionsGallery-${quality}.json`;
newValues.nameShort += dashSuffix;
newValues.nameLong += displaySuffix;
newValues.applicationName += dashSuffix;
newValues.dataFolderName += dashSuffix;
newValues.win32MutexName += dashSuffix;
newValues.win32DirName += displaySuffix;
newValues.win32NameVersion += displaySuffix;
newValues.win32RegValueName += dashSuffix;
newValues.win32AppId = "{{9F0801B2-DEE3-4272-A2C6-FBDF25BAAF0F}";
newValues.win32x64AppId = "{{6748A5FD-29EB-4BA6-B3C6-E7B981B8D6B0}";
newValues.win32UserAppId = "{{0F8CD1ED-483C-40EB-8AD2-8ED784651AA1}";
newValues.win32x64UserAppId += dashSuffix;
newValues.win32AppUserModelId += dotSuffix;
newValues.win32ShellNameShort += displaySuffix;
newValues.darwinBundleIdentifier += dotSuffix;
}
return gulp.src('./product.json')
.pipe(jeditor(newValues))
.pipe(gulp.dest('.'));
});

View File

@@ -118,7 +118,7 @@ function mixinServer(watch) {
const packageJSONPath = path.join(path.dirname(__dirname), 'package.json');
function exec(cmdLine) {
console.log(cmdLine);
cp.execSync(cmdLine, { stdio: "inherit" });
cp.execSync(cmdLine, { stdio: 'inherit' });
}
function checkout() {
const packageJSON = JSON.parse(fs.readFileSync(packageJSONPath).toString());

View File

@@ -11,12 +11,13 @@ const es = require('event-stream');
const filter = require('gulp-filter');
const del = require('del');
const serviceDownloader = require('service-downloader').ServiceDownloadProvider;
const platformInfo = require('service-downloader/out/platform').PlatformInformation;
const platform = require('service-downloader/out/platform').PlatformInformation;
const path = require('path');
const fs = require('fs');
const rollup = require('rollup');
const rollupNodeResolve = require('rollup-plugin-node-resolve');
const rollupCommonJS = require('rollup-plugin-commonjs');
const ext = require('./lib/extensions');
const task = require('./lib/task');
const glob = require('glob');
const vsce = require('vsce');
const mkdirp = require('mkdirp');
gulp.task('clean-mssql-extension', util.rimraf('extensions/mssql/node_modules'));
gulp.task('clean-credentials-extension', util.rimraf('extensions/credentials/node_modules'));
@@ -97,11 +98,11 @@ const formatStagedFiles = () => {
function installService() {
let config = require('../extensions/mssql/config.json');
return platformInfo.getCurrent().then(p => {
return platform.getCurrent().then(p => {
let runtime = p.runtimeId;
// fix path since it won't be correct
config.installDirectory = path.join(__dirname, '../extensions/mssql/src', config.installDirectory);
var installer = new serviceDownloader(config);
let installer = new serviceDownloader(config);
let serviceInstallFolder = installer.getInstallDirectory(runtime);
console.log('Cleaning up the install folder: ' + serviceInstallFolder);
return del(serviceInstallFolder + '/*').then(() => {
@@ -117,82 +118,50 @@ gulp.task('install-sqltoolsservice', () => {
return installService();
});
function installSsmsMin() {
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
config.installDirectory = path.join(__dirname, '..', 'extensions', 'admin-tool-ext-win', config.installDirectory);
var installer = new serviceDownloader(config);
const serviceInstallFolder = installer.getInstallDirectory(runtime);
const serviceCleanupFolder = path.join(serviceInstallFolder, '..');
console.log('Cleaning up the install folder: ' + serviceCleanupFolder);
return del(serviceCleanupFolder + '/*').then(() => {
console.log('Installing the service. Install folder: ' + serviceInstallFolder);
return installer.installService(runtime);
}, delError => {
console.log('failed to delete the install folder error: ' + delError);
});
});
}
gulp.task('install-ssmsmin', () => {
return installSsmsMin();
const config = require('../extensions/admin-tool-ext-win/config.json');
const runtime = 'Windows_64'; // admin-tool-ext is a windows only extension, and we only ship a 64 bit version, so locking the binaries as such
// fix path since it won't be correct
config.installDirectory = path.join(__dirname, '..', 'extensions', 'admin-tool-ext-win', config.installDirectory);
let installer = new serviceDownloader(config);
const serviceInstallFolder = installer.getInstallDirectory(runtime);
const serviceCleanupFolder = path.join(serviceInstallFolder, '..');
console.log('Cleaning up the install folder: ' + serviceCleanupFolder);
return del(serviceCleanupFolder + '/*').then(() => {
console.log('Installing the service. Install folder: ' + serviceInstallFolder);
return installer.installService(runtime);
}, delError => {
console.log('failed to delete the install folder error: ' + delError);
});
});
async function rollupModule(options) {
const moduleName = options.moduleName;
try {
const inputFile = options.inputFile;
const outputDirectory = options.outputDirectory;
const root = path.dirname(__dirname);
await fs.promises.mkdir(outputDirectory, {
recursive: true
gulp.task('package-external-extensions', task.series(
task.define('bundle-external-extensions-build', () => ext.packageExternalExtensionsStream().pipe(gulp.dest('.build/external'))),
task.define('create-external-extension-vsix-build', () => {
const vsixes = glob.sync('.build/external/extensions/*/package.json').map(manifestPath => {
const extensionPath = path.dirname(path.join(root, manifestPath));
const extensionName = path.basename(extensionPath);
return { name: extensionName, path: extensionPath };
}).map(element => {
const pkgJson = require(path.join(element.path, 'package.json'));
const vsixDirectory = path.join(root, '.build', 'extensions');
mkdirp.sync(vsixDirectory);
const packagePath = path.join(vsixDirectory, `${pkgJson.name}-${pkgJson.version}.vsix`);
console.info('Creating vsix for ' + element.path + ' result:' + packagePath);
return vsce.createVSIX({
cwd: element.path,
packagePath: packagePath,
useYarn: true
});
});
const outputFileName = options.outputFileName;
const outputMapName = `${outputFileName}.map`;
const external = options.external || [];
return Promise.all(vsixes);
})
));
const outputFilePath = path.resolve(outputDirectory, outputFileName);
const outputMapPath = path.resolve(outputDirectory, outputMapName);
const bundle = await rollup.rollup({
input: inputFile,
plugins: [
rollupNodeResolve(),
rollupCommonJS(),
],
external,
});
const generatedBundle = await bundle.generate({
output: {
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
};
}
}
module.exports = {
rollupModule
};
gulp.task('package-rebuild-extensions', task.series(
task.define('clean-rebuild-extensions', () => ext.cleanRebuildExtensions('.build/extensions')),
task.define('rebuild-extensions-build', () => ext.packageRebuildExtensionsStream().pipe(gulp.dest('.build'))),
));

View File

@@ -29,9 +29,8 @@ const packageJson = require('../package.json');
const product = require('../product.json');
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');
@@ -44,6 +43,7 @@ const nodeModules = [
'electron',
'original-fs',
'rxjs/Observable',
'rxjs/add/observable/fromPromise',
'rxjs/Subject',
'rxjs/Observer',
'slickgrid/lib/jquery.event.drag-2.3.0',
@@ -78,7 +78,6 @@ 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',
@@ -93,8 +92,7 @@ const vscodeResources = [
'out-build/vs/code/electron-browser/sharedProcess/sharedProcess.js',
'out-build/vs/code/electron-browser/issue/issueReporter.js',
'out-build/vs/code/electron-browser/processExplorer/processExplorer.js',
// {{SQL CARBON EDIT}}
'out-build/sql/workbench/electron-browser/splashscreen/*',
'out-build/sql/workbench/electron-browser/splashscreen/*', // {{SQL CARBON EDIT}} STart
'out-build/sql/**/*.{svg,png,cur,html}',
'out-build/sql/base/browser/ui/table/media/*.{gif,png,svg}',
'out-build/sql/base/browser/ui/checkbox/media/*.{gif,png,svg}',
@@ -112,7 +110,8 @@ const vscodeResources = [
'out-build/sql/media/objectTypes/*.svg',
'out-build/sql/media/icons/*.svg',
'out-build/sql/workbench/parts/notebook/media/**/*.svg',
'out-build/sql/setup.js',
'out-build/sql/setup.js', // {{SQL CARBON EDIT}} end
'out-build/vs/platform/auth/common/auth.css',
'!**/test/**'
];
@@ -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.
*
@@ -219,9 +151,9 @@ gulp.task(task.define('electron-arm64', task.series(util.rimraf('.build/electron
* @return {Object} A map of paths to checksums.
*/
function computeChecksums(out, filenames) {
var result = {};
let result = {};
filenames.forEach(function (filename) {
var fullPath = path.join(process.cwd(), out, filename);
let fullPath = path.join(process.cwd(), out, filename);
result[filename] = computeChecksum(fullPath);
});
return result;
@@ -234,9 +166,9 @@ function computeChecksums(out, filenames) {
* @return {string} The checksum for `filename`.
*/
function computeChecksum(filename) {
var contents = fs.readFileSync(filename);
let contents = fs.readFileSync(filename);
var hash = crypto
let hash = crypto
.createHash('md5')
.update(contents)
.digest('base64')
@@ -265,10 +197,7 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
.pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + out), 'out'); }))
.pipe(util.setExecutableBit(['**/*.sh']));
// {{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 }));
@@ -308,7 +237,6 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
const api = gulp.src('src/vs/vscode.d.ts').pipe(rename('out/vs/vscode.d.ts'));
// {{SQL CARBON EDIT}}
const dataApi = gulp.src('src/sql/azdata.d.ts').pipe(rename('out/sql/azdata.d.ts'));
const sqlopsAPI = gulp.src('src/sql/sqlops.d.ts').pipe(rename('out/sql/sqlops.d.ts'));
const telemetry = gulp.src('.build/telemetry/**', { base: '.build/telemetry', dot: true });
@@ -325,8 +253,7 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
productJsonStream,
license,
api,
dataApi,
sqlopsAPI, // {{SQL CARBON EDIT}}
dataApi, // {{SQL CARBON EDIT}}
telemetry,
sources,
deps

View File

@@ -23,7 +23,7 @@ const commit = util.getVersion(root);
const linuxPackageRevision = Math.floor(new Date().getTime() / 1000);
function getDebPackageArch(arch) {
return { x64: 'amd64', arm: 'armhf', arm64: "arm64" }[arch];
return { x64: 'amd64', arm: 'armhf', arm64: 'arm64' }[arch];
}
function prepareDebPackage(arch) {
@@ -44,7 +44,7 @@ function prepareDebPackage(arch) {
.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('@@ICON@@', `/usr/share/pixmaps/${product.linuxIconName}.png`))
.pipe(replace('@@URLPROTOCOL@@', product.urlProtocol));
const appdata = gulp.src('resources/linux/code.appdata.xml', { base: '.' })
@@ -118,7 +118,7 @@ function getRpmBuildPath(rpmArch) {
}
function getRpmPackageArch(arch) {
return { x64: 'x86_64', arm: 'armhf', arm64: "arm64" }[arch];
return { x64: 'x86_64', arm: 'armhf', arm64: 'arm64' }[arch];
}
function prepareRpmPackage(arch) {

View File

@@ -23,7 +23,7 @@ const repoPath = path.dirname(__dirname);
// {{SQL CARBON EDIT}}
const buildPath = arch => path.join(path.dirname(repoPath), `azuredatastudio-win32-${arch}`);
const zipDir = arch => path.join(repoPath, '.build', `win32-${arch}`, 'archive');
const zipPath = arch => path.join(zipDir(arch), `VSCode-win32-${arch}.zip`);
const zipPath = arch => path.join(zipDir(arch), `azuredatastudio-win32-${arch}.zip`);
const setupDir = (arch, target) => path.join(repoPath, '.build', `win32-${arch}`, `${target}-setup`);
const issPath = path.join(__dirname, 'win32', 'code.iss');
const innoSetupPath = path.join(path.dirname(path.dirname(require.resolve('innosetup'))), 'bin', 'ISCC.exe');

View File

@@ -18,11 +18,15 @@ const fancyLog = require('fancy-log');
const ansiColors = require('ansi-colors');
const root = path.dirname(path.dirname(__dirname));
// {{SQL CARBON EDIT}}
const quality = process.env['VSCODE_QUALITY'];
const builtInExtensions = quality && quality === 'stable' ? require('../builtInExtensions.json') : require('../builtInExtensions-insiders.json');
// {{SQL CARBON EDIT}} - END
const builtInExtensions = require('../builtInExtensions.json');
const controlFilePath = path.join(os.homedir(), '.vscode-oss-dev', 'extensions', 'control.json');
const ENABLE_LOGGING = !process.env['VSCODE_BUILD_BUILTIN_EXTENSIONS_SILENCE_PLEASE'];
function log() {
if (ENABLE_LOGGING) {
fancyLog.apply(this, arguments);
}
}
function getExtensionPath(extension) {
return path.join(root, '.build', 'builtInExtensions', extension.name);
@@ -47,7 +51,7 @@ function isUpToDate(extension) {
function syncMarketplaceExtension(extension) {
if (isUpToDate(extension)) {
fancyLog(ansiColors.blue('[marketplace]'), `${extension.name}@${extension.version}`, ansiColors.green('✔︎'));
log(ansiColors.blue('[marketplace]'), `${extension.name}@${extension.version}`, ansiColors.green('✔︎'));
return es.readArray([]);
}
@@ -56,13 +60,13 @@ function syncMarketplaceExtension(extension) {
return ext.fromMarketplace(extension.name, extension.version, extension.metadata)
.pipe(rename(p => p.dirname = `${extension.name}/${p.dirname}`))
.pipe(vfs.dest('.build/builtInExtensions'))
.on('end', () => fancyLog(ansiColors.blue('[marketplace]'), extension.name, ansiColors.green('✔︎')));
.on('end', () => log(ansiColors.blue('[marketplace]'), extension.name, ansiColors.green('✔︎')));
}
function syncExtension(extension, controlState) {
switch (controlState) {
case 'disabled':
fancyLog(ansiColors.blue('[disabled]'), ansiColors.gray(extension.name));
log(ansiColors.blue('[disabled]'), ansiColors.gray(extension.name));
return es.readArray([]);
case 'marketplace':
@@ -70,15 +74,15 @@ function syncExtension(extension, controlState) {
default:
if (!fs.existsSync(controlState)) {
fancyLog(ansiColors.red(`Error: Built-in extension '${extension.name}' is configured to run from '${controlState}' but that path does not exist.`));
log(ansiColors.red(`Error: Built-in extension '${extension.name}' is configured to run from '${controlState}' but that path does not exist.`));
return es.readArray([]);
} else if (!fs.existsSync(path.join(controlState, 'package.json'))) {
fancyLog(ansiColors.red(`Error: Built-in extension '${extension.name}' is configured to run from '${controlState}' but there is no 'package.json' file in that directory.`));
log(ansiColors.red(`Error: Built-in extension '${extension.name}' is configured to run from '${controlState}' but there is no 'package.json' file in that directory.`));
return es.readArray([]);
}
fancyLog(ansiColors.blue('[local]'), `${extension.name}: ${ansiColors.cyan(controlState)}`, ansiColors.green('✔︎'));
log(ansiColors.blue('[local]'), `${extension.name}: ${ansiColors.cyan(controlState)}`, ansiColors.green('✔︎'));
return es.readArray([]);
}
}
@@ -97,8 +101,8 @@ function writeControlFile(control) {
}
function main() {
fancyLog('Syncronizing built-in extensions...');
fancyLog(`You can manage built-in extensions with the ${ansiColors.cyan('--builtin')} flag`);
log('Syncronizing built-in extensions...');
log(`You can manage built-in extensions with the ${ansiColors.cyan('--builtin')} flag`);
const control = readControlFile();
const streams = [];

View File

@@ -44,7 +44,7 @@ function createCompile(src, build, emitError) {
const input = es.through();
const output = input
.pipe(utf8Filter)
.pipe(bom())
.pipe(bom()) // this is required to preserve BOM in test files that loose it otherwise
.pipe(utf8Filter.restore)
.pipe(tsFilter)
.pipe(util.loadSourcemaps())

View File

@@ -54,7 +54,7 @@ function createCompile(src: string, build: boolean, emitError?: boolean) {
const input = es.through();
const output = input
.pipe(utf8Filter)
.pipe(bom())
.pipe(bom()) // this is required to preserve BOM in test files that loose it otherwise
.pipe(utf8Filter.restore)
.pipe(tsFilter)
.pipe(util.loadSourcemaps())

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

@@ -0,0 +1,59 @@
"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 path_1 = require("path");
const minimatch = require("minimatch");
const utils_1 = require("./utils");
module.exports = new class {
constructor() {
this.meta = {
messages: {
badImport: 'Imports violates \'{{restrictions}}\' restrictions. See https://github.com/microsoft/vscode/wiki/Source-Code-Organization'
},
docs: {
url: 'https://github.com/microsoft/vscode/wiki/Source-Code-Organization'
}
};
}
create(context) {
const configs = context.options;
for (const config of configs) {
if (minimatch(context.getFilename(), config.target)) {
return utils_1.createImportRuleListener((node, value) => this._checkImport(context, config, node, value));
}
}
return {};
}
_checkImport(context, config, node, path) {
// resolve relative paths
if (path[0] === '.') {
path = path_1.join(context.getFilename(), path);
}
let restrictions;
if (typeof config.restrictions === 'string') {
restrictions = [config.restrictions];
}
else {
restrictions = config.restrictions;
}
let matched = false;
for (const pattern of restrictions) {
if (minimatch(path, pattern)) {
matched = true;
break;
}
}
if (!matched) {
// None of the restrictions matched
context.report({
loc: node.loc,
messageId: 'badImport',
data: {
restrictions: restrictions.join(' or ')
}
});
}
}
};

View File

@@ -0,0 +1,75 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
import { TSESTree } from '@typescript-eslint/experimental-utils';
import { join } from 'path';
import * as minimatch from 'minimatch';
import { createImportRuleListener } from './utils';
interface ImportPatternsConfig {
target: string;
restrictions: string | string[];
}
export = new class implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
badImport: 'Imports violates \'{{restrictions}}\' restrictions. See https://github.com/microsoft/vscode/wiki/Source-Code-Organization'
},
docs: {
url: 'https://github.com/microsoft/vscode/wiki/Source-Code-Organization'
}
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
const configs = <ImportPatternsConfig[]>context.options;
for (const config of configs) {
if (minimatch(context.getFilename(), config.target)) {
return createImportRuleListener((node, value) => this._checkImport(context, config, node, value));
}
}
return {};
}
private _checkImport(context: eslint.Rule.RuleContext, config: ImportPatternsConfig, node: TSESTree.Node, path: string) {
// resolve relative paths
if (path[0] === '.') {
path = join(context.getFilename(), path);
}
let restrictions: string[];
if (typeof config.restrictions === 'string') {
restrictions = [config.restrictions];
} else {
restrictions = config.restrictions;
}
let matched = false;
for (const pattern of restrictions) {
if (minimatch(path, pattern)) {
matched = true;
break;
}
}
if (!matched) {
// None of the restrictions matched
context.report({
loc: node.loc,
messageId: 'badImport',
data: {
restrictions: restrictions.join(' or ')
}
});
}
}
};

View File

@@ -0,0 +1,68 @@
"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 path_1 = require("path");
const utils_1 = require("./utils");
module.exports = new class {
constructor() {
this.meta = {
messages: {
layerbreaker: 'Bad layering. You are not allowed to access {{from}} from here, allowed layers are: [{{allowed}}]'
},
docs: {
url: 'https://github.com/microsoft/vscode/wiki/Source-Code-Organization'
}
};
}
create(context) {
const fileDirname = path_1.dirname(context.getFilename());
const parts = fileDirname.split(/\\|\//);
const ruleArgs = context.options[0];
let config;
for (let i = parts.length - 1; i >= 0; i--) {
if (ruleArgs[parts[i]]) {
config = {
allowed: new Set(ruleArgs[parts[i]]).add(parts[i]),
disallowed: new Set()
};
Object.keys(ruleArgs).forEach(key => {
if (!config.allowed.has(key)) {
config.disallowed.add(key);
}
});
break;
}
}
if (!config) {
// nothing
return {};
}
return utils_1.createImportRuleListener((node, path) => {
if (path[0] === '.') {
path = path_1.join(path_1.dirname(context.getFilename()), path);
}
const parts = path_1.dirname(path).split(/\\|\//);
for (let i = parts.length - 1; i >= 0; i--) {
const part = parts[i];
if (config.allowed.has(part)) {
// GOOD - same layer
break;
}
if (config.disallowed.has(part)) {
// BAD - wrong layer
context.report({
loc: node.loc,
messageId: 'layerbreaker',
data: {
from: part,
allowed: [...config.allowed.keys()].join(', ')
}
});
break;
}
}
});
}
};

View File

@@ -0,0 +1,83 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
import { join, dirname } from 'path';
import { createImportRuleListener } from './utils';
type Config = {
allowed: Set<string>;
disallowed: Set<string>;
};
export = new class implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
layerbreaker: 'Bad layering. You are not allowed to access {{from}} from here, allowed layers are: [{{allowed}}]'
},
docs: {
url: 'https://github.com/microsoft/vscode/wiki/Source-Code-Organization'
}
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
const fileDirname = dirname(context.getFilename());
const parts = fileDirname.split(/\\|\//);
const ruleArgs = <Record<string, string[]>>context.options[0];
let config: Config | undefined;
for (let i = parts.length - 1; i >= 0; i--) {
if (ruleArgs[parts[i]]) {
config = {
allowed: new Set(ruleArgs[parts[i]]).add(parts[i]),
disallowed: new Set()
};
Object.keys(ruleArgs).forEach(key => {
if (!config!.allowed.has(key)) {
config!.disallowed.add(key);
}
});
break;
}
}
if (!config) {
// nothing
return {};
}
return createImportRuleListener((node, path) => {
if (path[0] === '.') {
path = join(dirname(context.getFilename()), path);
}
const parts = dirname(path).split(/\\|\//);
for (let i = parts.length - 1; i >= 0; i--) {
const part = parts[i];
if (config!.allowed.has(part)) {
// GOOD - same layer
break;
}
if (config!.disallowed.has(part)) {
// BAD - wrong layer
context.report({
loc: node.loc,
messageId: 'layerbreaker',
data: {
from: part,
allowed: [...config!.allowed.keys()].join(', ')
}
});
break;
}
}
});
}
};

View File

@@ -0,0 +1,38 @@
"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 path_1 = require("path");
const utils_1 = require("./utils");
module.exports = new class NoNlsInStandaloneEditorRule {
constructor() {
this.meta = {
messages: {
noNls: 'Not allowed to import vs/nls in standalone editor modules. Use standaloneStrings.ts'
}
};
}
create(context) {
const fileName = context.getFilename();
if (/vs(\/|\\)editor(\/|\\)standalone(\/|\\)/.test(fileName)
|| /vs(\/|\\)editor(\/|\\)common(\/|\\)standalone(\/|\\)/.test(fileName)
|| /vs(\/|\\)editor(\/|\\)editor.api/.test(fileName)
|| /vs(\/|\\)editor(\/|\\)editor.main/.test(fileName)
|| /vs(\/|\\)editor(\/|\\)editor.worker/.test(fileName)) {
return utils_1.createImportRuleListener((node, path) => {
// resolve relative paths
if (path[0] === '.') {
path = path_1.join(context.getFilename(), path);
}
if (/vs(\/|\\)nls/.test(path)) {
context.report({
loc: node.loc,
messageId: 'noNls'
});
}
});
}
return {};
}
};

View File

@@ -0,0 +1,48 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
import { join } from 'path';
import { createImportRuleListener } from './utils';
export = new class NoNlsInStandaloneEditorRule implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
noNls: 'Not allowed to import vs/nls in standalone editor modules. Use standaloneStrings.ts'
}
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
const fileName = context.getFilename();
if (
/vs(\/|\\)editor(\/|\\)standalone(\/|\\)/.test(fileName)
|| /vs(\/|\\)editor(\/|\\)common(\/|\\)standalone(\/|\\)/.test(fileName)
|| /vs(\/|\\)editor(\/|\\)editor.api/.test(fileName)
|| /vs(\/|\\)editor(\/|\\)editor.main/.test(fileName)
|| /vs(\/|\\)editor(\/|\\)editor.worker/.test(fileName)
) {
return createImportRuleListener((node, path) => {
// resolve relative paths
if (path[0] === '.') {
path = join(context.getFilename(), path);
}
if (
/vs(\/|\\)nls/.test(path)
) {
context.report({
loc: node.loc,
messageId: 'noNls'
});
}
});
}
return {};
}
};

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.
*--------------------------------------------------------------------------------------------*/
const path_1 = require("path");
const utils_1 = require("./utils");
module.exports = new class NoNlsInStandaloneEditorRule {
constructor() {
this.meta = {
messages: {
badImport: 'Not allowed to import standalone editor modules.'
},
docs: {
url: 'https://github.com/microsoft/vscode/wiki/Source-Code-Organization'
}
};
}
create(context) {
if (/vs(\/|\\)editor/.test(context.getFilename())) {
// the vs/editor folder is allowed to use the standalone editor
return {};
}
return utils_1.createImportRuleListener((node, path) => {
// resolve relative paths
if (path[0] === '.') {
path = path_1.join(context.getFilename(), path);
}
if (/vs(\/|\\)editor(\/|\\)standalone(\/|\\)/.test(path)
|| /vs(\/|\\)editor(\/|\\)common(\/|\\)standalone(\/|\\)/.test(path)
|| /vs(\/|\\)editor(\/|\\)editor.api/.test(path)
|| /vs(\/|\\)editor(\/|\\)editor.main/.test(path)
|| /vs(\/|\\)editor(\/|\\)editor.worker/.test(path)) {
context.report({
loc: node.loc,
messageId: 'badImport'
});
}
});
}
};

View File

@@ -0,0 +1,50 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
import { join } from 'path';
import { createImportRuleListener } from './utils';
export = new class NoNlsInStandaloneEditorRule implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
badImport: 'Not allowed to import standalone editor modules.'
},
docs: {
url: 'https://github.com/microsoft/vscode/wiki/Source-Code-Organization'
}
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
if (/vs(\/|\\)editor/.test(context.getFilename())) {
// the vs/editor folder is allowed to use the standalone editor
return {};
}
return createImportRuleListener((node, path) => {
// resolve relative paths
if (path[0] === '.') {
path = join(context.getFilename(), path);
}
if (
/vs(\/|\\)editor(\/|\\)standalone(\/|\\)/.test(path)
|| /vs(\/|\\)editor(\/|\\)common(\/|\\)standalone(\/|\\)/.test(path)
|| /vs(\/|\\)editor(\/|\\)editor.api/.test(path)
|| /vs(\/|\\)editor(\/|\\)editor.main/.test(path)
|| /vs(\/|\\)editor(\/|\\)editor.worker/.test(path)
) {
context.report({
loc: node.loc,
messageId: 'badImport'
});
}
});
}
};

View File

@@ -0,0 +1,111 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
var _a;
const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
function isStringLiteral(node) {
return !!node && node.type === experimental_utils_1.AST_NODE_TYPES.Literal && typeof node.value === 'string';
}
function isDoubleQuoted(node) {
return node.raw[0] === '"' && node.raw[node.raw.length - 1] === '"';
}
module.exports = new (_a = class NoUnexternalizedStrings {
constructor() {
this.meta = {
messages: {
doubleQuoted: 'Only use double-quoted strings for externalized strings.',
badKey: 'The key \'{{key}}\' doesn\'t conform to a valid localize identifier.',
duplicateKey: 'Duplicate key \'{{key}}\' with different message value.',
badMessage: 'Message argument to \'{{message}}\' must be a string literal.'
}
};
}
create(context) {
const externalizedStringLiterals = new Map();
const doubleQuotedStringLiterals = new Set();
function collectDoubleQuotedStrings(node) {
if (isStringLiteral(node) && isDoubleQuoted(node)) {
doubleQuotedStringLiterals.add(node);
}
}
function visitLocalizeCall(node) {
// localize(key, message)
const [keyNode, messageNode] = node.arguments;
// (1)
// extract key so that it can be checked later
let key;
if (isStringLiteral(keyNode)) {
doubleQuotedStringLiterals.delete(keyNode); //todo@joh reconsider
key = keyNode.value;
}
else if (keyNode.type === experimental_utils_1.AST_NODE_TYPES.ObjectExpression) {
for (let property of keyNode.properties) {
if (property.type === experimental_utils_1.AST_NODE_TYPES.Property && !property.computed) {
if (property.key.type === experimental_utils_1.AST_NODE_TYPES.Identifier && property.key.name === 'key') {
if (isStringLiteral(property.value)) {
doubleQuotedStringLiterals.delete(property.value); //todo@joh reconsider
key = property.value.value;
break;
}
}
}
}
}
if (typeof key === 'string') {
let array = externalizedStringLiterals.get(key);
if (!array) {
array = [];
externalizedStringLiterals.set(key, array);
}
array.push({ call: node, message: messageNode });
}
// (2)
// remove message-argument from doubleQuoted list and make
// sure it is a string-literal
doubleQuotedStringLiterals.delete(messageNode);
if (!isStringLiteral(messageNode)) {
context.report({
loc: messageNode.loc,
messageId: 'badMessage',
data: { message: context.getSourceCode().getText(node) }
});
}
}
function reportBadStringsAndBadKeys() {
// (1)
// report all strings that are in double quotes
for (const node of doubleQuotedStringLiterals) {
context.report({ loc: node.loc, messageId: 'doubleQuoted' });
}
for (const [key, values] of externalizedStringLiterals) {
// (2)
// report all invalid NLS keys
if (!key.match(NoUnexternalizedStrings._rNlsKeys)) {
for (let value of values) {
context.report({ loc: value.call.loc, messageId: 'badKey', data: { key } });
}
}
// (2)
// report all invalid duplicates (same key, different message)
if (values.length > 1) {
for (let i = 1; i < values.length; i++) {
if (context.getSourceCode().getText(values[i - 1].message) !== context.getSourceCode().getText(values[i].message)) {
context.report({ loc: values[i].call.loc, messageId: 'duplicateKey', data: { key } });
}
}
}
}
}
return {
['Literal']: (node) => collectDoubleQuotedStrings(node),
['ExpressionStatement[directive] Literal:exit']: (node) => doubleQuotedStringLiterals.delete(node),
['CallExpression[callee.type="MemberExpression"][callee.object.name="nls"][callee.property.name="localize"]:exit']: (node) => visitLocalizeCall(node),
['CallExpression[callee.name="localize"][arguments.length>=2]:exit']: (node) => visitLocalizeCall(node),
['Program:exit']: reportBadStringsAndBadKeys,
};
}
},
_a._rNlsKeys = /^[_a-zA-Z0-9][ .\-_a-zA-Z0-9]*$/,
_a);

View File

@@ -0,0 +1,126 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/experimental-utils';
function isStringLiteral(node: TSESTree.Node | null | undefined): node is TSESTree.StringLiteral {
return !!node && node.type === AST_NODE_TYPES.Literal && typeof node.value === 'string';
}
function isDoubleQuoted(node: TSESTree.StringLiteral): boolean {
return node.raw[0] === '"' && node.raw[node.raw.length - 1] === '"';
}
export = new class NoUnexternalizedStrings implements eslint.Rule.RuleModule {
private static _rNlsKeys = /^[_a-zA-Z0-9][ .\-_a-zA-Z0-9]*$/;
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
doubleQuoted: 'Only use double-quoted strings for externalized strings.',
badKey: 'The key \'{{key}}\' doesn\'t conform to a valid localize identifier.',
duplicateKey: 'Duplicate key \'{{key}}\' with different message value.',
badMessage: 'Message argument to \'{{message}}\' must be a string literal.'
}
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
const externalizedStringLiterals = new Map<string, { call: TSESTree.CallExpression, message: TSESTree.Node }[]>();
const doubleQuotedStringLiterals = new Set<TSESTree.Node>();
function collectDoubleQuotedStrings(node: TSESTree.Literal) {
if (isStringLiteral(node) && isDoubleQuoted(node)) {
doubleQuotedStringLiterals.add(node);
}
}
function visitLocalizeCall(node: TSESTree.CallExpression) {
// localize(key, message)
const [keyNode, messageNode] = (<TSESTree.CallExpression>node).arguments;
// (1)
// extract key so that it can be checked later
let key: string | undefined;
if (isStringLiteral(keyNode)) {
doubleQuotedStringLiterals.delete(keyNode); //todo@joh reconsider
key = keyNode.value;
} else if (keyNode.type === AST_NODE_TYPES.ObjectExpression) {
for (let property of keyNode.properties) {
if (property.type === AST_NODE_TYPES.Property && !property.computed) {
if (property.key.type === AST_NODE_TYPES.Identifier && property.key.name === 'key') {
if (isStringLiteral(property.value)) {
doubleQuotedStringLiterals.delete(property.value); //todo@joh reconsider
key = property.value.value;
break;
}
}
}
}
}
if (typeof key === 'string') {
let array = externalizedStringLiterals.get(key);
if (!array) {
array = [];
externalizedStringLiterals.set(key, array);
}
array.push({ call: node, message: messageNode });
}
// (2)
// remove message-argument from doubleQuoted list and make
// sure it is a string-literal
doubleQuotedStringLiterals.delete(messageNode);
if (!isStringLiteral(messageNode)) {
context.report({
loc: messageNode.loc,
messageId: 'badMessage',
data: { message: context.getSourceCode().getText(<any>node) }
});
}
}
function reportBadStringsAndBadKeys() {
// (1)
// report all strings that are in double quotes
for (const node of doubleQuotedStringLiterals) {
context.report({ loc: node.loc, messageId: 'doubleQuoted' });
}
for (const [key, values] of externalizedStringLiterals) {
// (2)
// report all invalid NLS keys
if (!key.match(NoUnexternalizedStrings._rNlsKeys)) {
for (let value of values) {
context.report({ loc: value.call.loc, messageId: 'badKey', data: { key } });
}
}
// (2)
// report all invalid duplicates (same key, different message)
if (values.length > 1) {
for (let i = 1; i < values.length; i++) {
if (context.getSourceCode().getText(<any>values[i - 1].message) !== context.getSourceCode().getText(<any>values[i].message)) {
context.report({ loc: values[i].call.loc, messageId: 'duplicateKey', data: { key } });
}
}
}
}
}
return {
['Literal']: (node: any) => collectDoubleQuotedStrings(node),
['ExpressionStatement[directive] Literal:exit']: (node: any) => doubleQuotedStringLiterals.delete(node),
['CallExpression[callee.type="MemberExpression"][callee.object.name="nls"][callee.property.name="localize"]:exit']: (node: any) => visitLocalizeCall(node),
['CallExpression[callee.name="localize"][arguments.length>=2]:exit']: (node: any) => visitLocalizeCall(node),
['Program:exit']: reportBadStringsAndBadKeys,
};
}
};

View File

@@ -0,0 +1,145 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
// FORKED FROM https://github.com/eslint/eslint/blob/b23ad0d789a909baf8d7c41a35bc53df932eaf30/lib/rules/no-unused-expressions.js
// and added support for `OptionalCallExpression`, see https://github.com/facebook/create-react-app/issues/8107 and https://github.com/eslint/eslint/issues/12642
/**
* @fileoverview Flag expressions in statement position that do not side effect
* @author Michael Ficarra
*/
'use strict';
//------------------------------------------------------------------------------
// Rule Definition
//------------------------------------------------------------------------------
module.exports = {
meta: {
type: 'suggestion',
docs: {
description: 'disallow unused expressions',
category: 'Best Practices',
recommended: false,
url: 'https://eslint.org/docs/rules/no-unused-expressions'
},
schema: [
{
type: 'object',
properties: {
allowShortCircuit: {
type: 'boolean',
default: false
},
allowTernary: {
type: 'boolean',
default: false
},
allowTaggedTemplates: {
type: 'boolean',
default: false
}
},
additionalProperties: false
}
]
},
create(context) {
const config = context.options[0] || {},
allowShortCircuit = config.allowShortCircuit || false,
allowTernary = config.allowTernary || false,
allowTaggedTemplates = config.allowTaggedTemplates || false;
// eslint-disable-next-line jsdoc/require-description
/**
* @param {ASTNode} node any node
* @returns {boolean} whether the given node structurally represents a directive
*/
function looksLikeDirective(node) {
return node.type === 'ExpressionStatement' &&
node.expression.type === 'Literal' && typeof node.expression.value === 'string';
}
// eslint-disable-next-line jsdoc/require-description
/**
* @param {Function} predicate ([a] -> Boolean) the function used to make the determination
* @param {a[]} list the input list
* @returns {a[]} the leading sequence of members in the given list that pass the given predicate
*/
function takeWhile(predicate, list) {
for (let i = 0; i < list.length; ++i) {
if (!predicate(list[i])) {
return list.slice(0, i);
}
}
return list.slice();
}
// eslint-disable-next-line jsdoc/require-description
/**
* @param {ASTNode} node a Program or BlockStatement node
* @returns {ASTNode[]} the leading sequence of directive nodes in the given node's body
*/
function directives(node) {
return takeWhile(looksLikeDirective, node.body);
}
// eslint-disable-next-line jsdoc/require-description
/**
* @param {ASTNode} node any node
* @param {ASTNode[]} ancestors the given node's ancestors
* @returns {boolean} whether the given node is considered a directive in its current position
*/
function isDirective(node, ancestors) {
const parent = ancestors[ancestors.length - 1],
grandparent = ancestors[ancestors.length - 2];
return (parent.type === 'Program' || parent.type === 'BlockStatement' &&
(/Function/u.test(grandparent.type))) &&
directives(parent).indexOf(node) >= 0;
}
/**
* Determines whether or not a given node is a valid expression. Recurses on short circuit eval and ternary nodes if enabled by flags.
* @param {ASTNode} node any node
* @returns {boolean} whether the given node is a valid expression
*/
function isValidExpression(node) {
if (allowTernary) {
// Recursive check for ternary and logical expressions
if (node.type === 'ConditionalExpression') {
return isValidExpression(node.consequent) && isValidExpression(node.alternate);
}
}
if (allowShortCircuit) {
if (node.type === 'LogicalExpression') {
return isValidExpression(node.right);
}
}
if (allowTaggedTemplates && node.type === 'TaggedTemplateExpression') {
return true;
}
return /^(?:Assignment|OptionalCall|Call|New|Update|Yield|Await)Expression$/u.test(node.type) ||
(node.type === 'UnaryExpression' && ['delete', 'void'].indexOf(node.operator) >= 0);
}
return {
ExpressionStatement(node) {
if (!isValidExpression(node.expression) && !isDirective(node, context.getAncestors())) {
context.report({ node, message: 'Expected an assignment or function call and instead saw an expression.' });
}
}
};
}
};

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.
*--------------------------------------------------------------------------------------------*/
var _a;
const fs_1 = require("fs");
const utils_1 = require("./utils");
module.exports = new (_a = class TranslationRemind {
constructor() {
this.meta = {
messages: {
missing: 'Please add \'{{resource}}\' to ./build/lib/i18n.resources.json file to use translations here.'
}
};
}
create(context) {
return utils_1.createImportRuleListener((node, path) => this._checkImport(context, node, path));
}
_checkImport(context, node, path) {
if (path !== TranslationRemind.NLS_MODULE) {
return;
}
const currentFile = context.getFilename();
const matchService = currentFile.match(/vs\/workbench\/services\/\w+/);
const matchPart = currentFile.match(/vs\/workbench\/contrib\/\w+/);
if (!matchService && !matchPart) {
return;
}
const resource = matchService ? matchService[0] : matchPart[0];
let resourceDefined = false;
let json;
try {
json = fs_1.readFileSync('./build/lib/i18n.resources.json', 'utf8');
}
catch (e) {
console.error('[translation-remind rule]: File with resources to pull from Transifex was not found. Aborting translation resource check for newly defined workbench part/service.');
return;
}
const workbenchResources = JSON.parse(json).workbench;
workbenchResources.forEach((existingResource) => {
if (existingResource.name === resource) {
resourceDefined = true;
return;
}
});
if (!resourceDefined) {
context.report({
loc: node.loc,
messageId: 'missing',
data: { resource }
});
}
}
},
_a.NLS_MODULE = 'vs/nls',
_a);

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.
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
import { TSESTree } from '@typescript-eslint/experimental-utils';
import { readFileSync } from 'fs';
import { createImportRuleListener } from './utils';
export = new class TranslationRemind implements eslint.Rule.RuleModule {
private static NLS_MODULE = 'vs/nls';
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
missing: 'Please add \'{{resource}}\' to ./build/lib/i18n.resources.json file to use translations here.'
}
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
return createImportRuleListener((node, path) => this._checkImport(context, node, path));
}
private _checkImport(context: eslint.Rule.RuleContext, node: TSESTree.Node, path: string) {
if (path !== TranslationRemind.NLS_MODULE) {
return;
}
const currentFile = context.getFilename();
const matchService = currentFile.match(/vs\/workbench\/services\/\w+/);
const matchPart = currentFile.match(/vs\/workbench\/contrib\/\w+/);
if (!matchService && !matchPart) {
return;
}
const resource = matchService ? matchService[0] : matchPart![0];
let resourceDefined = false;
let json;
try {
json = readFileSync('./build/lib/i18n.resources.json', 'utf8');
} catch (e) {
console.error('[translation-remind rule]: File with resources to pull from Transifex was not found. Aborting translation resource check for newly defined workbench part/service.');
return;
}
const workbenchResources = JSON.parse(json).workbench;
workbenchResources.forEach((existingResource: any) => {
if (existingResource.name === resource) {
resourceDefined = true;
return;
}
});
if (!resourceDefined) {
context.report({
loc: node.loc,
messageId: 'missing',
data: { resource }
});
}
}
};

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