Compare commits

..

569 Commits

Author SHA1 Message Date
Lewis Sanchez
d904740d93 Adds toggle button to switch between estimated and actual execution plans (#19629) (#19706)
* Creates toggle button to switch between estimate and actual query plans

* Renames ID for the toggleActualExecutionPlanModeAction class

* Renames button back to explain

* Creating actual execution plans resembles SSMS

* Adds CTRL/CMD + L shortcut to display estimated execution plans

* Alphabetically organizes telemetry actions

* Adds telemetry when the setting for actual execution plan toggle is used

* Resolves build errors

* Fixes broken unit tests.

* Code review changes

* Removes unnecessary null-coalescing operator.

* Creates placeholder icons for actual execution plans enabled

* Code review changes

* Shortens label names

* Telemetry moved to toggle button

* Telemetry review changes

* Clarifies misleading label
2022-06-10 11:04:39 -07:00
Aasim Khan
3c1b371e7e Fixing graph root padding and truncating long queries in execution plan (#19703) (#19707)
* Fixing graph root padding
Truncating queries to one line

* Updating remote package
2022-06-10 08:38:51 -07:00
Aasim Khan
b27e1dd66d Changing plan comparison properties table logic and icons (#19700) (#19705)
* Changing plan comparison logic and icons

* Removing empty class ref
2022-06-09 16:31:46 -07:00
Alan Ren
1d917f7790 update STS to bring in a table designer fix (#19690) 2022-06-08 17:10:59 -07:00
Leila Lali
f3c06e7912 Fixing the telemetry property docker image name (#19685) (#19689) 2022-06-08 16:47:24 -07:00
Lucy Zhang
066bf98535 fix notebook provider (#19678) (#19684) 2022-06-08 15:55:54 -07:00
Vasu Bhog
2b8487115e [PORT] SQL Bindings Telemetry Issues (#19652)
* vbump SQL Bindings for June Release (#19639)

* Fix SQL Bindings VSCode telemetry issues (#19648)

* fix package json telemetry issues

* add vs code dependency back

* fix comma
2022-06-08 09:08:35 -07:00
Alex Ma
37ce99dea7 Update to localization source files and xlfs for June release (#19638) 2022-06-07 21:21:06 -07:00
Aasim Khan
a7e9a3d14b Removing filter from set Data (#19640) (#19644) 2022-06-07 21:20:51 -07:00
Kim Santiago
cb0edbdd1a fix table designer error when sql project has folders (#19667) (#19670)
* fix table designer error when sql project has folders

* filter on .sql file extension

* compare lowercase

* add back EntryType.File filter
2022-06-07 20:30:55 -07:00
Kim Santiago
7eac18f7a0 Fix sql database projects vscode telemetry (#19645) (#19661)
* fix the wrong extension name getting sent for sql database projects vscode extension

* bump version

* remove print statements

* clean up comment
2022-06-07 18:26:26 -07:00
Cory Rivera
d314ea393e Add new cells after the current one when adding a cell from the notebook toolbar. (#19649) (#19669) 2022-06-07 16:46:00 -07:00
Vasu Bhog
ce43b4e17d vbump SQL Bindings for June Release (#19639) (#19642) 2022-06-07 13:42:42 -07:00
Daniel Grajeda
4fd2f92e27 Introduce tabs for notebook views (#19526)
* Introduce tabs for notebook views

Cards have been restructured to contain tabs instead of cells directly.
Tabs then contain the cards that are displayed. Cards may contain one or
more cards.

The panel component has been reused to implement the cells. There is
still some cleanup left to do of unused functions, but I want to reduce
the size of the PR as much as possible.
2022-06-06 03:07:08 -07:00
Kim Santiago
535799fe23 update STS version to get DacFx fixes for update project and table designer (#19627) 2022-06-03 21:33:00 -07:00
Aasim Khan
36c480699f Surfacing extension install errors (#19613)
* Surfacing extension install error

* Fixing error property

* removing unncessary await

* Fixing error type and message

* Fixing some more strings

* Adding missing period

* Consolidating some strings

* consolidating strings

* revert vbump

* Switching to ExtensionManagementError
2022-06-03 19:41:09 -07:00
Cory Rivera
950bb1e53b Fix issues with changing SQL notebook connection while a cell is executing (#19624) 2022-06-03 18:05:32 -07:00
Alex Ma
25b80f0498 [Loc] update to sql xlf (#19626) 2022-06-03 17:49:10 -07:00
Aasim Khan
b63fd59372 Adding plan properties comparison, fixed dark icons, fixed dropdown text. (#19601)
* Adding prop compare logic

* Fixed using semaphore

* Adding dark icons
Adding dropdown prefix
Adding all visible plans from plan comparison

* Reverting mssql vbump

* Fixing icon name

* executionPlanComparisonPropertiesView

* Fixing icon paths and adding preselect model

* Fixed icon spacing

* Removing styling in formatter

* Adding tooltip to plugs
switching to plugins

* Removing unecessary calls to getSkeletonNodes()

* Renaming variable

* Fixed column value formatting

* Undoing formatter change
2022-06-03 16:31:03 -07:00
Aasim Khan
f0f4a0a3cf Updating sqltoolsservice (#19614) 2022-06-03 16:25:16 -07:00
Alan Ren
c4cc2e5d68 fix casing (#19619) 2022-06-03 14:42:57 -07:00
Kim Santiago
7804f2cf3f update sql database projects azdata dependency to 1.37.0 (#19618) 2022-06-03 14:27:14 -07:00
Lewis Sanchez
b52386a36a Execution Plan Telemetry for Plan Comparisons (#19610)
* Adds telemetry when plan comparison is invoked

* Small formatting change.

* Adds telemetry to add execution plan button

* Removes unused ExecutionPlanComparisonEditorView constructor parameters

* Small formatting adjustment

* Adds telemetry to ExecutionPlanComparisonEditorView properties

* Code review changes
2022-06-03 13:56:32 -07:00
Leila Lali
e8158d4374 SQL Project: Opening connection viewlet after deploying database (#19544) 2022-06-03 11:44:58 -07:00
Alex Ma
de9d73c948 [Loc] update to xlfs for 6-2-2022 (#19608) 2022-06-02 16:38:09 -07:00
Christopher Suh
1b9f4cbbae Changed add connection -> new connection (#19596)
* changed add connection -> new connection

* remove xlf file changes

* fix spacing

* fix workspace settings
2022-06-02 14:04:34 -07:00
Kim Santiago
1bbf5a78c1 enable table designer for table script in sql database project (#19237)
* add 'open in designer' to context menu of tables in sql projects

* fix tests

* Address comments

* enable table designer for sql database proj

* update label and issues on init

* vbump sts

* use promisified fs

* pr comments

Co-authored-by: Alan Ren <alanren@microsoft.com>
2022-06-02 13:27:47 -07:00
Charles Gagnon
d3c474162d Fix renderer error string (#19599)
* Fix error string localization

* fix

* fix
2022-06-02 12:42:27 -07:00
Vasu Bhog
4cb03a1ef0 [SQL Bindings] Add tests for connection string execute step (#19594)
* add connection string execute step tests
2022-06-02 13:49:25 -04:00
Charles Gagnon
9a79f7bf49 Run hygiene separately (#19597) 2022-06-02 10:28:01 -07:00
Alan Ren
d166d982c4 make sure controls are enabled (#19595) 2022-06-02 10:09:27 -07:00
Barbara Valdez
f06fd7f6f7 Fix split cell not working with attachments (#19587) 2022-06-01 16:23:46 -07:00
Charles Gagnon
071f631c34 Fix null ref in tree (#19589)
* Fix null ref in tree

* Correct type
2022-06-01 12:47:52 -07:00
Lewis Sanchez
f8844b328f Updates azdataGraph version from 0.0.27 to 0.0.28 (#19577) 2022-06-01 09:33:18 -07:00
Charles Gagnon
bba66e4e4d Fix env vars being overwritten in ext unit test script (#19574) 2022-05-31 21:33:00 -07:00
Charles Gagnon
41a3c8661c Fix GetConnection (#19579) 2022-05-31 21:32:44 -07:00
Charles Gagnon
eb2cd6238f Skip automation out dir for linting (#19575) 2022-05-31 21:25:47 -07:00
Alan Ren
11a969f44f workaround for the dashboard resets zooming issue (#19576) 2022-05-31 21:04:23 -07:00
Vasu Bhog
6c7a8313b2 Adds SQL Binding Create Azure Function with SQL Binding tests (#19538)
* add a couple of azure function service tests

* address comments

* use mock for azureFunctionExtensionAPI
2022-05-31 21:04:39 -04:00
Alex Ma
aeb1e776d4 [Loc] update to sql-bindings (#19578) 2022-05-31 16:55:35 -07:00
Charles Gagnon
6ae380b65d Remove unnecessary awaits from extensions (#19571)
* Remove unnecessary awaits

* fix ignore

* revert eslintignore

* try

* increase size

* Increase sql lint size
2022-05-31 15:36:44 -07:00
Vasu Bhog
96f345a74a add progress noticiations for database that would contain lots of tables (#19572) 2022-05-31 16:33:27 -04:00
Alan Ren
f41da46ccb remove the tracing (#19573) 2022-05-31 12:56:48 -07:00
Charles Gagnon
ccd458b876 Update typings for getAzureFunctions request (#19556) 2022-05-31 10:20:31 -07:00
csigs
1e4ff85ed7 Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220531162517469. (#19570) 2022-05-31 09:43:41 -07:00
csigs
6a321b930d Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220530163305847. (#19568) 2022-05-31 09:43:02 -07:00
Alex Ma
ef7de661df [Loc] update to data-workspace and notebook (#19560) 2022-05-27 17:06:23 -07:00
Cory Rivera
7b1d34b2ce Display the installed Python version above the package versions in the manage packages dialog. (#19551) 2022-05-27 14:31:40 -07:00
csigs
c8b3e46495 Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220527162216325. (#19555) 2022-05-27 09:39:21 -07:00
Leila Lali
6b10ecd588 Replaced db project readme file with opening a doc in browser after project is created (#19543) 2022-05-27 08:24:00 -07:00
Alan Ren
1d276d90e0 adjust the grid's height in table designer (#19550) 2022-05-26 17:54:23 -07:00
dependabot[bot]
0b6d2ea449 Bump path-parse from 1.0.6 to 1.0.7 in /extensions/azurecore (#19541)
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-26 13:34:18 -07:00
Aasim Khan
67f8ffea52 Updating vsce package (#19536)
* Updating vsce package

* Removing unsupported extensionKind
2022-05-26 13:13:25 -07:00
Alex Ma
830d9eb803 yarn lock update (#19547) 2022-05-26 13:03:14 -07:00
Lucy Zhang
c0ad66b823 Enable manage packages smoke test (#19504)
* fix page being reset twice and add back smoke test

* add missing await

* check pyarrow info loaded

* install latest package version

* fix version select box selector

* split out into two PRs
2022-05-26 12:00:51 -07:00
dependabot[bot]
b64b3f6b0b Bump ws from 7.2.3 to 7.4.6 in /extensions/azurecore (#19540)
Bumps [ws](https://github.com/websockets/ws) from 7.2.3 to 7.4.6.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/7.2.3...7.4.6)

---
updated-dependencies:
- dependency-name: ws
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-26 10:58:01 -07:00
Aasim Khan
386c986480 Updating set-value (#19534) 2022-05-26 10:08:35 -07:00
Aasim Khan
63712909aa updating normalize-url (#19535) 2022-05-26 10:08:15 -07:00
dependabot[bot]
2534c907de Bump path-parse from 1.0.6 to 1.0.7 in /extensions/cms (#19539)
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-26 10:07:28 -07:00
Aasim Khan
4e39c5fcf6 Updatin kind-of (#19533) 2022-05-26 10:03:57 -07:00
csigs
3e6ce6b370 Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220526161321984. (#19542) 2022-05-26 10:00:55 -07:00
Cory Rivera
793fe9c1f2 Also check for docs pane label in code cell completions test. (#19530) 2022-05-26 09:40:39 -07:00
dependabot[bot]
7d180be364 Bump path-parse from 1.0.6 to 1.0.7 in /extensions/dacpac (#19495)
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-26 08:47:03 -07:00
Karl Burtram
aa705f04c8 Update changelog for April hotfixes (#19454) 2022-05-26 08:46:44 -07:00
dependabot[bot]
8f835fc84e Bump path-parse from 1.0.6 to 1.0.7 in /extensions/import (#19468)
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-26 08:46:29 -07:00
dependabot[bot]
cbf095c0ff Bump path-parse from 1.0.6 to 1.0.7 in /extensions/integration-tests (#19467)
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-26 08:46:11 -07:00
Aasim Khan
f7aeccb0d4 updating gulp-azure-storage (#19492) 2022-05-25 22:19:57 -07:00
Aasim Khan
36cd60f290 Reverting gulp-untar resolution (#19529) 2022-05-25 18:10:20 -07:00
Charles Gagnon
45d7a6dd62 Clean up docs for connect and ConnectionResult (#19509)
* Clean up docs for connect and ConnectionResult

* links

* fix build

* fix
2022-05-25 10:38:00 -07:00
Aasim Khan
6282958bd1 scoping css (#19520) 2022-05-25 10:31:29 -07:00
Aasim Khan
6838261aed Updating tar across ads (#19507) 2022-05-24 18:23:41 -07:00
Alex Ma
517558fdfd [Loc] schema compare update xlf (#19517) 2022-05-24 16:50:51 -07:00
brian-harris
9604d685d1 vbump and fix ads version dependency (#19512) 2022-05-24 15:35:36 -07:00
Hai Cao
3780203b1d bump STS to 4.0.0.5 (#19505) 2022-05-24 13:02:53 -07:00
Lucy Zhang
86c14cd7e1 remove extra reset call (#19503) 2022-05-24 13:02:32 -07:00
Alan Ren
254f16b31a hide account when using connection string (#19506) 2022-05-24 11:19:34 -07:00
Aasim Khan
b194a5a784 updating gulp-eslint (#19491) 2022-05-24 10:28:50 -07:00
Charles Gagnon
1e3cef5d1b Add warning when not inlining source maps (#19490)
* Add warning when not inlining source maps

* more
2022-05-24 10:11:43 -07:00
Sai Avishkar Sreerama
36550798f3 Dac Deployment options model updates according to STS changes in mssql, SC, dacpac extensions (#18050)
* Dac Deployement options model updates according to STS changes

* Undoing vscode whitespace changes which were added accidentally

* Updated model with dac deploy options display names coming from the STS API

* Combining all exisitng code updates into single branch/pr. it includes mssql model updates and SC/dacpac model, code and testupdates

* sql db proj test failure fix

* STS version bump to 4.0.0.4
2022-05-23 23:19:06 -05:00
Vasu Bhog
09d9ad0020 Fix SQL Bindings README (#19498)
* fix links for vsix

* update to use raw links instead
2022-05-23 23:10:24 -05:00
Lewis Sanchez
e77b0bfa89 Update azdataGraph version from 0.0.26 to 0.0.27 (#19497) 2022-05-23 20:56:52 -07:00
Aasim Khan
719a7889fc updating kind-of (#19489) 2022-05-23 17:51:12 -07:00
dependabot[bot]
0687d61170 Bump path-parse from 1.0.6 to 1.0.7 in /extensions/data-workspace (#19493)
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-23 17:50:30 -07:00
Alex Ma
1d52740f62 [Loc] xlf update for 5-23-2022 (#19494) 2022-05-23 17:27:42 -07:00
Aasim Khan
a7749471ec Updating remote-retry-src (#19488) 2022-05-23 16:16:17 -07:00
Vasu Bhog
146b27f511 SQL Bindings Readme Instructions (#19487)
* add readme entry points

* use scenarios

* fix link

* address comments
2022-05-23 18:04:37 -05:00
Vasu Bhog
e1fc230273 remove password for connection string non sql auth types (#19484)
* remove password for connection string non sql auth types

* add comment

* fix test
2022-05-23 18:01:55 -05:00
Aasim Khan
c9c670cc86 Updating a vulnerable package (#19485) 2022-05-23 15:22:03 -07:00
Aasim Khan
8bb6b5fc1a Redoing Execution Plan Comparison Editor (#19375)
* Adding code for execution plan comparison editor

* Handling floating promises and fixing a loc string

* Fixing some polygon stuff

* Fixing azdatagraph null check bug

* Adding progress notification for similar areas

* Removing some floating promises

* Fixing button enabled state
2022-05-23 14:33:18 -07:00
csigs
000923207e Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220523162754012. (#19479) 2022-05-23 10:11:05 -07:00
csigs
0d34e83ddd Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220522162500906. (#19477) 2022-05-23 10:10:49 -07:00
Leila Lali
39f5ad9e16 Adding firewall rule prompt when publishing to existing server (#19474) 2022-05-23 08:33:53 -07:00
Vasu Bhog
1959736078 fix loop for cancelling out databases (#19460)
* fix loop for cancelling out databases

* remove loop and comments
2022-05-20 13:47:53 -07:00
brian-harris
529296110b fix resource group parameter, name (#19471) 2022-05-20 13:07:22 -07:00
dependabot[bot]
a241b511c6 Bump path-parse from 1.0.6 to 1.0.7 in /extensions/machine-learning (#19464)
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-20 11:21:58 -07:00
dependabot[bot]
f77adcaa4a Bump path-parse from 1.0.6 to 1.0.7 in /extensions/mssql (#19465)
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-20 11:21:38 -07:00
Alan Ren
70a5f0702e bump minimist (#19466) 2022-05-20 11:09:45 -07:00
Aasim Khan
6dbaa7e6f6 Updating sts (#19462) 2022-05-20 10:49:46 -07:00
Alan Ren
f3e7337196 Upgrade packages to remove dependency on the vulnerable package minimist 0.0.8 (#19455)
* new mocha version

* test fix

* test

* new vscodetestcov version

* use rc1

* use 1.2.1

* remove all 0.0.8 of minimist

* a few more
2022-05-20 10:06:13 -07:00
csigs
840084704b Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220520162113836. (#19463) 2022-05-20 09:41:33 -07:00
Alex Ma
dde8e169ac [Loc] update to arc, azurecore, and sql-bindings. (#19456) 2022-05-19 19:36:43 -07:00
Candice Ye
6188c218ee Canye/fix refresh (#19424)
* Bump version of arc and azcli to 1.3.0

* Fixed refresh to do dc config show and endpoint list first, then check the connectionmode

* Await calls to refresh indirect and direct

* Made sql mi-arc delete also handle direct mode. Made customlocation for sql mi create work again, regex problem.

Co-authored-by: Candice Ye <canye@microsoft.com>
2022-05-19 18:22:33 -07:00
Cory Rivera
3eedbf04df Fix Python smoke test failures. (#19405) 2022-05-19 16:10:55 -07:00
Leila Lali
30fb6b25b1 Fixed the formatting issues in SQL project readme file (#19445) 2022-05-19 15:51:56 -07:00
Charles Gagnon
887d218342 Add default name to promptAddItem (#19439)
* Add default name to promptAddItem

* Change to addItemPrompt
2022-05-19 15:10:34 -07:00
Charles Gagnon
4c008059df Add createAzureFunction to extension API (#19438) 2022-05-19 13:02:49 -07:00
Vasu Bhog
79875c0b95 fix await (#19437) 2022-05-19 12:20:36 -07:00
Charles Gagnon
f2b623b3b2 Move promptAddItem to extension API (#19423)
* Move addItem to extension API

* add noneDeployScripts
2022-05-19 11:25:10 -07:00
Laurent Nguyen
97a4ecdfbb Add support for CosmosDB - Mongo API (#19386)
* Display cdb nodes to browse azure tree

* Update icons

* Update node label

* Remove console logs

* Fix i18n in cosmosDbMongoTreeDataProvider

* Disable Mongo provider in azure tree for now

* Revert "Disable Mongo provider in azure tree for now"

This reverts commit 8b2d2079f43624596a41b82a71a5e40eef1ad4b1.

* Fix build issues related to merge

* Add COSMOSDB_MONGO in provider extension map

* Define providerId string as constant. Rename constants to follow azurecore/ naming conventions (all caps)
2022-05-19 11:12:53 -07:00
csigs
1bceb04a4a Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220519161154386. (#19434) 2022-05-19 10:48:41 -07:00
Vasu Bhog
9cefed840e SQL Bindings refactor password prompting (#19371)
* remove password enter manually - since we prompt user to include it prior

* go back to connection profile prompt

* add manual entry if connection info password is not saved

* add tests that verify all password prompt scenarios

* nit
2022-05-19 10:41:11 -07:00
dependabot[bot]
dbaa78a737 Bump minimist from 1.2.5 to 1.2.6 in /remote (#19432)
* Bump minimist from 1.2.5 to 1.2.6 in /remote

Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix root minimist package version

* fix dependency

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alan Ren <alanren@microsoft.com>
2022-05-19 00:25:52 -07:00
Alan Ren
77006cee86 fix a dependent bot issue (#19418) 2022-05-18 16:40:07 -07:00
Vasu Bhog
8967ec36f4 Add Table Menu for SQL Bindings promptForObjectName (#19358)
* first wip for table menu prompt

* fix up some table prompts

* use simpleExecuteRequest

* fix table prompt scenario for sql binding also

* fix/add more testing and address comments

* add brackets to selected database

* add manually entered option
2022-05-18 14:51:45 -07:00
Candice Ye
1210bceded Bump version of arc and azcli to 1.3.0 (#19420)
Co-authored-by: Candice Ye <canye@microsoft.com>
2022-05-18 14:48:20 -07:00
Candice Ye
a891ef4784 Make refresh handle direct mode (#19408)
Co-authored-by: Candice Ye <canye@microsoft.com>
2022-05-18 11:17:03 -07:00
Charles Gagnon
7fc8b1c849 Add UUID dependency to sql-bindings (#19406) 2022-05-17 23:44:52 -07:00
Charles Gagnon
27ee9527bb Quote paths in add package command (#19407) 2022-05-17 23:44:00 -07:00
brian-harris
08d717dff7 fix invalid targetServerName (#19409) 2022-05-17 19:34:50 -07:00
Barbara Valdez
132d22bfe7 add open api project method to api (#19401) 2022-05-17 15:09:16 -07:00
csigs
61662f6086 Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220517162754481. (#19397) 2022-05-17 13:54:49 -07:00
Charles Gagnon
570e41cdcb Add verbosity update to need logs request (#19398) 2022-05-17 11:47:54 -07:00
Aasim Khan
e04c1624bc Adding the mirrored parallelism icon (#19391) 2022-05-17 02:01:45 -07:00
Alex Ma
705dcd2b8c [Loc] Added changes to sql.xlf (#19395) 2022-05-16 20:02:19 -07:00
brian-harris
c3c2d83da1 update DMSV2 API and listMonitoringData to latest (#19394) 2022-05-16 18:53:41 -07:00
Candice Ye
e2a675ef58 Added DC Status (#19393)
Co-authored-by: Candice Ye <canye@microsoft.com>
2022-05-16 16:49:11 -07:00
Karl Burtram
701f656c55 Fix connection issue with wrong resource endpoint (#19387)
* Fix connection bug accessing PBI resource

* Address CR feedback

* Fix null check
2022-05-16 15:23:23 -07:00
Charles Gagnon
d7ecdd89b1 Update Dockerfiles to use MCR (#19388)
* Switch docker to pull from MCR

* try undo linux

* add back

* Update images
2022-05-16 14:49:31 -07:00
Candice Ye
d641988161 Added optional metadata to fix bug (#19389)
Co-authored-by: Candice Ye <canye@microsoft.com>
2022-05-16 14:49:21 -07:00
Candice Ye
801f797440 Fixed az sql mi-arc show for indirect scenario (#19378)
* Addressed sql mi show for indirect and direct

* Throw error when output is not JSON

Co-authored-by: Candice Ye <canye@microsoft.com>
2022-05-16 10:51:23 -07:00
csigs
394417f93e Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220516162608119. (#19385) 2022-05-16 09:53:07 -07:00
csigs
b11e7a8f23 Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220515160818916. (#19380) 2022-05-15 14:08:40 -07:00
Alan Ren
3b74d7843f show proper message when extension is not installed for a connection provider (#19377)
* show extension not installed error

* extension provider mapping

* fix tests
2022-05-15 13:52:28 -07:00
Alex Ma
aee14c8170 [Loc] more string changes (#19379) 2022-05-13 17:28:13 -07:00
Vasu Bhog
265f59ae94 SQL Bindings fix preview flag and constants file (#19370)
* fix preview flag and constants file

* address comment
2022-05-13 17:09:00 -07:00
Benjin Dubishar
2b1c8fe77a Change Azure icon in azurecore extension (#19055) 2022-05-13 17:05:00 -07:00
Barbara Valdez
f551cfb835 exit infite loop after closing error message (#19376) 2022-05-13 15:14:48 -07:00
Alan Ren
b8858f011d support for connect with connection string (#19355)
* wip

* WIP

* radio button

* handle connection string

* fix test

* fix test

* fix test cases

* remember password

* pr comments

* pr comments
2022-05-13 14:48:12 -07:00
Aditya Bist
128767c713 Added clickable more info links to designer validation issues (#19365)
* added clickable more info links to designer validation issues

* fix selection issue

* remove more info if none

* change quote style

* clear the dom node
2022-05-13 13:35:22 -07:00
Christopher Suh
8352c7631c vbump and typo fix (#19374) 2022-05-13 13:18:57 -07:00
csigs
b669ab9481 Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220513163417979. (#19372) 2022-05-13 13:14:40 -07:00
Christopher Suh
86e0c6963f Refreshes token for intellisense (#19214)
* wip

* wip

* wip

* working refresh token for intellisense

* pr review comments

* pr review comments

* add link

* pr comments

* change authority -> tenantId

* refactor tenant

* fix build

* add js doc comments, other pr changes

* fix error messaging

* add log

* added logs

* remove expiresOn

* fix error messaging

* pr comments

* remove localized strings from logs
2022-05-13 09:33:14 -05:00
Alex Ma
c7da145c92 [Loc] update to xlf 5-12-2022 and fix for sqltoolsservice exclusion bug in gulp extensions (#19367) 2022-05-12 19:10:26 -07:00
csigs
9bb035d3eb Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220512213846450. (#19363) 2022-05-12 16:59:04 -07:00
Charles Gagnon
88ce98b2e1 Bump STS to .250 (#19364) 2022-05-12 16:51:11 -07:00
Vasu Bhog
f53f4fc522 remove logic now that we have fix in vscode-azurefunctions (#19353) 2022-05-12 15:48:59 -07:00
Candice Ye
63c6c0631e Take SQL MI billing Business Critical out of preview (#19361)
* Added values for business critical price per core

* Remove Preview tag for business critical

Co-authored-by: Candice Ye <canye@microsoft.com>
2022-05-12 15:38:24 -07:00
Kim Santiago
7b4181dd13 add docker image with telemetry for publish to container (#19360)
* add docker info image to telemetry for publish to container

* change name
2022-05-12 14:03:17 -07:00
Barbara Valdez
9f69139dea add description to quick pick item (#19356) 2022-05-12 11:25:48 -07:00
Aditya Bist
784d8e9e96 Table Designer: Move columns UI (#19154)
* format

* added buttons and initial drag plugin

* initial drag and drop working

* add actions and taskbar

* drag and drop bugfix and other changes

* fix few issues

* more changes

* fix all move and insertion issues

* PRcomments

* fit and finish comments

* remove dead code

* bump sts

* add style for object being dragged

* add plugin to copyright filter

* Add to eslintrc

* fix drag contrast ratio

* generalize logic for cell focus

* demo feedback

* feedback

* add action state

* feedback

* remove unncecessary check

* add move actions to context menu

* change to const

* fix bug with tables and fix drop color

Co-authored-by: chgagnon <chgagnon@microsoft.com>
2022-05-12 10:49:45 -07:00
Lucy Zhang
fe7ac55e97 skip test (#19351) 2022-05-11 18:01:14 -07:00
Alex Ma
f45145ceb5 [Loc] update to xlfs. (#19354) 2022-05-11 17:07:18 -07:00
Charles Gagnon
fffe8cc17b Bump STS to .249 (#19352) 2022-05-11 16:45:44 -07:00
Barbara Valdez
e69bd2c01f Show function name when prompting user for sql binding type (#19336) 2022-05-11 13:51:15 -07:00
Leila Lali
e10b1eb5a9 SQL Project Deploy to docker container - Adding a UI for user to select docker image tag (#19297) 2022-05-11 11:29:11 -07:00
Nemanja Milovančević
65ef41d53d UI for the Backup/Restore Managed Instance Feature (#19244)
* Rebase from main branch

* Made mssql a module

* remove rpc specific stuff

* Added create sas RPC call

* Backup to url works now

* Moved createSas RPC to the BlobService

* Relocated createSas RPC from sql-dataprotocolclient to the mssql

* After rebase

* Removed duplicate symbol

* Renamed Blob to AzureBlob and relocated CreateSasResponse to mssql extension

* Removed AzureBlobProvider, removed AzureBlobService feature

* renamed blob to azureblob, converted thenable to promise

* Simplify API

* fixes

* docs update, blob to azureblob update

* UI design first commit

* Detected Managed Instance, trying to script backup to url

* azure subscription api added, but ADS crashes

* Created url dialog component and added link account

* Changed backup component UI logic

* Changed b/r UI, added restore from URL, detected MI from restore component

* Removed mocked and added real Azure API, changed RestoreDialog UI

* Added file fetching API

* added create sas RPC call

* Backup to url works now

* Fixed some bugs

* Moved createSas RPC to the BlobService

* Relocated createSas RPC from sql-dataprotocolclient to the mssql

* Rebase createSas changed to the backupRestoreManagedInstance

* PR comments fix

* Enabled backup to url for gov clouds

* Replaced anchor element with Link class

* Fixed pick azure account logic

* Removed duplicates from eslintrc

* Fixed url browser dialog

* Fixed restore UI, disabled url empty url browser dropdowns, fixed backup OK button

* bumped sts version

* bumped sts version

* Fix config

* Fixed URL browser dialog UX

* Backup and restore dialog fix

* Referencing azure resource types directly

* Scoped url browser dialog css classes

* Made the url browser dialog field a local variable

* moved url browser files from fileBrowser to the urlBrowser folder

* Changed deviceType from number to enum

* Added all device type options

* Moved mssql

* Added MI backup button comment

* Removed unhelpful comment

* Revert differential copy only backup mistake

* Renamed azurebrowser to urlBrowserDialog

* Localize create sas button label

* Removed unnecessary spinner

* Use UTC date instead of locale date

* Removed * and added required flag

* Use async instead of nested thens

* Added target database tooltip

* Using deferred promise instead of event emitter

* Added error handling to the url browser dialog

* Registered backup component elements

* Register backup component listeners

* Removed redundant setDefaultBackupPaths call

* Added setBackupPathList docs

* Add return types

* Remove code from comment

* Register restore dialog elements

* Register restore dialog listeners

* Pass engine edition enum instead of boolean

* Capitalize enum values

* DatabaseEngineEdition fix

* Use DeviceType instead of number

* Use deferred pointer

* Add new ModalDialogName

* Use constructor fields

* Register URL browser dialog components

* Remove unnecessary helper function

* nextYear function doc and move

* split registerListeners method

* showDialog returns promise

* Backup device type comment

* Pass aria label through constructor

* Fix backup button

* Remove comment

* Comment unsupported MI backup options

* Remove one liner helper function

* Restore dialog methods return types

* Remove comment

* JS doc format

* Renamed UrlBrowserDialog to BackupRestoreUrlBrowserDialog

* Moved MediaDeviceType, added PhisicalDeviceType

* Reorder and rename physical device type

* remove extra spaces

Co-authored-by: chgagnon <chgagnon@microsoft.com>
2022-05-11 11:01:06 -07:00
csigs
d38dcc853d Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220511162822170. (#19334) 2022-05-11 10:21:18 -07:00
Karl Burtram
9ef2ebc0d0 Update keytar to latest 7.X release (#19267) 2022-05-10 18:26:36 -07:00
Alex Ma
dd6e005ed1 [Loc] update to arc xlf (#19331) 2022-05-10 14:58:24 -07:00
Charles Gagnon
346bf0e81e Bump STS to .247 (#19321) 2022-05-10 10:16:01 -07:00
Charles Gagnon
e421d2fe7e Ignore coverage folders during hygiene (#19320) 2022-05-10 08:31:49 -07:00
Candice Ye
2312bed4ad Fixed SqlMiShowResult to be up to date (#19319)
* Fixed SqlMiShowResult to be up to date

* Bumped versions of azcli and arc up to 1.2.1 for bug bash

Co-authored-by: Candice Ye <canye@microsoft.com>
2022-05-09 18:38:44 -07:00
Alan Ren
75ab9b6812 fix json cell handling issue (#19310)
* fix json cell handling issue

* pr comment
2022-05-09 16:54:06 -07:00
Vasu Bhog
51e5890c83 Add Connection String Execute Step for SQL Bindings (#19293)
* add execute step

* nit comment

* edit param docs

* address comments

* ensure the user has the installs the latest version
2022-05-09 16:06:02 -07:00
Vasu Bhog
e80b8f92f2 vBump sql bindings extension (#19317)
* vBump sql bindings
2022-05-09 16:04:50 -07:00
Aasim Khan
7e57503aa6 Adding ability to expand and columns slickgrid table rows (#19168)
* Adding ability to expand and columns tables

* Bolding icons
Fixing variable names

* Adding helper function
Making css more target

* Adding keyboard navigation and parsing treegrid data

* Adding attributes, data transformations and key events to the treegrid

* Expanded

* changing var name

* FIxing formatter name

* Adding back cell styling

* Removing comments

* Making a new TreeGrid component.
Separating treegrid logic from tableDataView

* Fixing comments

* changing method name

* Modifying only visible row dom attributes

* Removing white space, moving role attribute setter to constructor.

* Fixing some more PR comments

* Adding comments and renaming functions

* Fixing comments

* Fixing comments

* Fixing comments

* Fixing some logic and removing unused attributes from element

* Adding expandable formatter to the first column

* Making the formatter generic

* Reverting formatter code

* Adding doc comments

* Fixing comments

* Removing duplicated code

* Adding comments

* Setting columns only when the table is initialized

* Letting users set expanded state instead of forcing it to false
2022-05-09 15:53:22 -07:00
Candice Ye
adf6f253f0 Add SQL MIAA Upgrade Management tab (#19238)
* Added sql upgrade management page and fixed icon for dc and sql upgrade

* Added logic for figuring out MIAA version, loading proper entries for table.

* Added PR comment changes

Co-authored-by: Candice Ye <canye@microsoft.com>
2022-05-09 14:35:42 -07:00
Alex Ma
c09ab8d0a9 [Loc] update to mssql and sql xlfs (#19308) 2022-05-09 10:37:09 -07:00
csigs
fd1fc8ac67 Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220507215231328. (#19305) 2022-05-09 10:18:52 -07:00
Alan Ren
23b347662a add configuration for STS parallel message processing (#19279)
* add configuration for parallel processing

* update setting description

* vbump sts

* enable feature for dev by default
2022-05-06 15:08:00 -07:00
Lewis Sanchez
5f48e4a28d Adds hot key combination for finding nodes in execution plans. (#19303)
* Adds hot key combination for finding nodes in execution plans.

* Captures cmd + f key combinations for other platforms

* Stops event propagation when targeted hot key sequence is pressed
2022-05-06 14:14:47 -07:00
Aasim Khan
20800a4279 Fixing keyboard navigation in execution plan graph and using selection change events to get selected cells (#19294) 2022-05-06 12:31:00 -07:00
csigs
cab9ab3b91 Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220506153723565. (#19300) 2022-05-06 10:22:14 -07:00
Cory Rivera
5afdf04aba Remove preview restriction for various notebook toolbar features. (#19296) 2022-05-05 19:15:34 -07:00
Cory Rivera
52782cfebd Add smoke test for saving a WYSIWYG cell. (#19284) 2022-05-04 20:52:22 -07:00
Kim Santiago
b3d92aaad3 change import back to import type * as azdataType (#19292) 2022-05-04 17:28:06 -07:00
Alex Ma
de2880d110 [Loc] Sql xlf update for 5-3-2022 (add untitledNotSupported) (#19291) 2022-05-04 15:43:33 -07:00
Barbara Valdez
742232ddd5 Add option to create sdk style project (#19290)
* update sql proj api

* remove extra spaces

* simplify check
2022-05-04 15:21:13 -07:00
Barbara Valdez
ae8d3ab1bf Make sure markdown.showSource correctly awaits opening the document (#19289)
Fixes #132914

Co-authored-by: Matt Bierner <matb@microsoft.com>
2022-05-04 14:57:48 -07:00
Cory Rivera
13b722eaf8 Show a notification when trying to run an untitled notebook with parameters. (#19286) 2022-05-04 13:26:26 -07:00
Charles Gagnon
30e2b135ce Bump axios (#19283) 2022-05-04 13:04:47 -07:00
csigs
55174c6124 Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220504193140518. (#19287) 2022-05-04 13:03:26 -07:00
Kim Santiago
d122e7636c remove default VS properties when converting legacy to SDK-style sql project (#19255) 2022-05-04 12:00:38 -07:00
Lucy Zhang
4d8fdf5833 Have screen reader announce when cell execution is complete (#19249)
* add tab index to cell output

* add sr-only element to announce cell exe complete

* use onExecutionComplete event

* remove extra change

* simplify alert message

* add alert for cell execution start
2022-05-04 10:44:24 -07:00
Lucy Zhang
2547754d0f Fix manage python packages smoke test (#19232)
* make sure cell is ran

* make sure dialog is gone before runing cell again

* ensure package is done installing

* show task panel

* remove comment

* pr comments

* pr comments

* add 7.0.0 package version
2022-05-04 06:19:51 -07:00
Alex Ma
7de41a98b4 [Loc] Sql-migration xlf update for 5-3-2022 (#19280) 2022-05-03 17:15:24 -07:00
Lewis Sanchez
fcf00b79fc Resolves cannot read property 'accessToken' of undefined error while connecting to a cloud DB (#19192)
* Resolves cannot read property 'accessToken' of undefined.

* Checks for and specifies undefined as refreshToken return type

* Adds documentation and checks for undefined results from refreshToken
2022-05-03 14:08:32 -07:00
Raymond Truong
b36ee9318f [SQL Migration] Refactor resource selection filtering logic + misc UI improvements (#19152)
* WIP

* WIP

* WIP

* Fix location dropdown not working properly

* Clean up comments

* Switch button order in selectMigrationServiceDialog

* Vbump to 1.0.1

* Refactor to avoid duplicate API calls

* Add null checks

* Fix migration status dialog not sorting migrations properly

* Address comments, remove unnecessary code

* Address comments - separate util methods by resource type, use logError instead of console.log

* Remove unused methods

* Fix DMS creation on newly created resource group

* Fix stale account behavior

* Address comments - remove telemetry context from util method calls

* Clean up imports

* Fix dashboard service monitoring not working

* Fix null reference on database backup page, and resources not updating properly when location is changed

* Fix dashboard not auto selecting DMS after migration started

* Add null checks
2022-05-03 16:22:47 -04:00
Cory Rivera
8cc66dade3 Fix intellisense for .NET Interactive SQL kernel (#19254) 2022-05-02 13:44:33 -07:00
Barbara Valdez
bfd878bff7 skip test for now (#19260) 2022-05-02 10:37:15 -07:00
Alex Ma
6858889f41 [Loc] added strings for sql-database-projects (#19265) 2022-05-02 10:10:40 -07:00
Leila Lali
d95aff1d3c New UI for deploying SQL project to a new Azure server (#18833) 2022-04-29 15:39:21 -07:00
dependabot[bot]
14a63977c8 Bump async from 2.6.1 to 2.6.4 (#19185)
Bumps [async](https://github.com/caolan/async) from 2.6.1 to 2.6.4.
- [Release notes](https://github.com/caolan/async/releases)
- [Changelog](https://github.com/caolan/async/blob/v2.6.4/CHANGELOG.md)
- [Commits](https://github.com/caolan/async/compare/v2.6.1...v2.6.4)

---
updated-dependencies:
- dependency-name: async
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-29 13:49:23 -07:00
Charles Gagnon
8d45e40901 Add event to track node expansion errors (#19248) 2022-04-29 11:02:58 -07:00
Neetu Singh
52baaf298e Add 'input parameters' used for recommending SKUs to telemetry (#19174)
* Add SKU Recommendation 'input parameters' to telemetry

* addressing comments, renaming event properties
2022-04-28 22:02:18 -07:00
Barbara Valdez
5dd1cbeed8 Keyboard navigation smoke test (#18796) 2022-04-28 17:05:23 -07:00
Vasu Bhog
7ef0ef65f4 remove logic (#19250) 2022-04-28 15:29:13 -07:00
Alex Ma
4023f5ce26 [loc] added connectionProgressTitle (#19247) 2022-04-28 10:33:38 -07:00
Charles Gagnon
e9c9a98ab3 Enable autoflush for STS logs (#19236) 2022-04-28 09:33:01 -07:00
Charles Gagnon
ba744ab950 Bump STS to .243 (#19239) 2022-04-28 09:32:48 -07:00
Kim Santiago
34f6083bfc fix alignment in update project from db dialog (#19207) 2022-04-27 17:06:42 -07:00
Vasu Bhog
a3efb193e0 Fix connection profile prompt for Create Function with SQL Binding (#19211)
* fix no connection profile and progress report

* show connection profile prompt if user exits object

* address comments
2022-04-27 15:14:39 -07:00
Vasu Bhog
727f37d6a5 remove ADS/azdata refs (#19212) 2022-04-27 11:23:53 -07:00
Candice Ye
4e849f0d60 Add 'az sql mi-arc upgrade' command to azcli api (#19219)
* Added sqlmiaa upgrade command and params to azcli api

* Put params under args

* Removed an extra comma

Co-authored-by: Candice Ye <canye@microsoft.com>
2022-04-26 16:16:57 -07:00
Alex Ma
10047b9a59 [Loc] update to sql bindings xlf (#19223) 2022-04-26 16:01:03 -07:00
Cory Rivera
b406dda13c Add smoke tests for cell toolbar keyboard shortcuts. (#19208) 2022-04-26 15:09:36 -07:00
Kim Santiago
6e2bf7521f update versions of data developer extensions (#19220) 2022-04-26 14:53:12 -07:00
Vasu Bhog
c86085352e Make Create Azure Function with SQL Binding more efficient and simple (#19187)
* initial refactor

* fix projectFolder cases

* update create azure function with sql binding when no folder is opened

* corner case exit browse file

* add version since targetFramework is set to specific core tools version

* update telemetry and address comments

* use project folder instead
2022-04-26 13:12:10 -07:00
Candice Ye
c4d0754954 Updating version numbers in package.jsons (#19216)
Co-authored-by: Candice Ye <canye@microsoft.com>
2022-04-26 13:07:04 -07:00
Charles Gagnon
19dd85bfe3 Add require-param rule for sql-bindings (#19201)
* Add require-param rule for sql-bindings

* fix
2022-04-25 14:58:52 -07:00
Charles Gagnon
15803c2a05 Fix SQL Bindings tests on windows (#19206) 2022-04-25 14:07:33 -07:00
Charles Gagnon
d54b7b9970 Return BindingType directly from promptForBindingType (#19200)
* Return BindingType directly from promptForBindingType

* align

* Fix tests

* fix compile
2022-04-25 14:07:03 -07:00
Charles Gagnon
72a43854f8 Add explicit return type linting to some extensions (#19199) 2022-04-25 11:24:23 -07:00
Kim Santiago
a7ba78b186 add telemetry on how many projects are open (#19146) 2022-04-25 10:20:37 -07:00
Kim Santiago
d34b65ebb7 send telemetry for generate project from OpenApi spec (#19188) 2022-04-25 10:20:26 -07:00
csigs
55331f9677 Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220425154518725. (#19198)
Co-authored-by: Alex Ma <alma1@microsoft.com>
2022-04-25 10:07:47 -07:00
csigs
e7c66d9424 Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220424210020361. (#19196) 2022-04-25 10:07:07 -07:00
Charles Gagnon
cd8a747522 Enable strictNullChecks for extensions by default (#19197)
* Strict null on extensions

* fix test

* Fail on no stdin
2022-04-25 09:19:42 -07:00
Aasim Khan
d0aae8e95b Adding ability to style cells in slickgrid (#19195) 2022-04-25 09:09:53 -07:00
Alan Ren
402604ba34 remove the preview feature flag check (#19194) 2022-04-23 20:07:43 -07:00
Cory Rivera
7b58568d26 Convert .NET Interactive notebook's kernel spec to a VS Code compatible kernel when saving. (#19176) 2022-04-22 16:00:13 -07:00
erpett
d9cf93cdae updating to v1.37.0 now that 1.36 is published (#19190) 2022-04-22 15:58:40 -07:00
Kim Santiago
23f9e37986 Fix create project from db not loading dbs when disconnected (#19129)
* fix create project from database when launched from disconnected node

* don't open dashboard

* fix tests

* update order so connection dialog opens first if can't connect
2022-04-22 15:28:04 -07:00
Aasim Khan
7554fbcaa0 Fixing zoomed badges (#19178) 2022-04-22 11:57:18 -07:00
Karl Burtram
58758286d8 Update changelog for 1.36.1 hotfix (#19179)
* Update changelog for 1.36.1 hotfix

* Remove links for 1.36.0 entry
2022-04-22 10:38:39 -07:00
Alex Ma
d59d6583bd [Loc] update to arc and sql xlfs (#19184) 2022-04-22 10:07:54 -07:00
csigs
36ee34663b Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220422155057574. (#19183) 2022-04-22 09:45:59 -07:00
Alan Ren
eb1212a606 increase nps survey probability (#19175) 2022-04-21 13:52:56 -07:00
Nemanja Milovančević
1cf905a7b8 Create shared access signature RPC (#18823)
* Rebase from main branch

* Made mssql a module

* remove rpc specific stuff

* Added create sas RPC call

* Backup to url works now

* Moved createSas RPC to the BlobService

* Relocated createSas RPC from sql-dataprotocolclient to the mssql

* After rebase

* Removed duplicate symbol

* Renamed Blob to AzureBlob and relocated CreateSasResponse to mssql extension

* Removed AzureBlobProvider, removed AzureBlobService feature

* renamed blob to azureblob, converted thenable to promise

* Simplify API

* fixes

* docs update, blob to azureblob update

* bumped sts version

* Fix config

Co-authored-by: chgagnon <chgagnon@microsoft.com>
2022-04-21 10:30:46 -07:00
Charles Gagnon
e9fefd2487 Fix typings pipeline + cleanup (#19163) 2022-04-21 10:30:18 -07:00
Chris LaFreniere
6c4bf812cd Notebooks: Preventing "previousSibling of Null" Errors on Cell Selection (#19153)
* Defensive programming

* PR comments
2022-04-20 17:37:38 -07:00
Candice Ye
0718876300 Bug fixes for DC upgrade in arc extension (#19161)
* Removed configure retention policy link. Log errors for upgrade instead of blocking the upgrade. Changed text of version log link.

* Addressing comments on PR

Co-authored-by: Candice Ye <canye@microsoft.com>
2022-04-20 16:20:52 -07:00
Chris LaFreniere
6acda40894 Cleanup references to ADS (#19157) 2022-04-20 14:38:20 -07:00
Aditya Bist
909d022562 change style (#19159) 2022-04-20 13:05:53 -07:00
Aditya Bist
449d27a5ae Add confirmation dialog before closing app (#19139)
* added confirmation dialog before closing app

* only one prompt for multiple open table designers
2022-04-19 20:26:22 -07:00
Cory Rivera
40a2181953 Add smoke test for converting from Rich Text to Markdown. (#19151) 2022-04-19 17:28:54 -07:00
Kim Santiago
bf82204453 add sdk-style option to exposed sql project apis (#19143) 2022-04-19 17:28:27 -07:00
Alan Ren
6395402b80 fix activitybar icon focus style (#19150)
* fix activity bar icon accessibility issue

* use state
2022-04-19 14:26:49 -07:00
Alex Ma
d3a457daa3 [Loc] update to arc and azcli xlfs (#19149) 2022-04-19 10:45:27 -07:00
Candice Ye
a8f2039fb6 Enabled Azure Arc data controller upgrade for direct and indirect mode (#19060)
* Fixed a connect to Server typo

* Added upgrade tab with description and title. Table is still stuck loading.

* Renamed backups to upgrades.

* Removed loading icon

* Table appearing and not stuck loading

* Saving for now to upgrade arc and azcli versions

* Added upgrade confirmation dialog, populated dummy data and added upgrade apis.

* Added parsing of versions and current version from listupgrades

* Upgrade itself not working, but added upgrade as a part of azure cli api.

* Table now populating with release dates and version numbers. Upgrade button only shows for appropriate cells. Upgrade done but no release version column.

* Changed text using PM advice

* Removed comments from controllerUpgrades.ts

* Replaced code in upgradecontroller.ts and made refresh work

* Removed one call to handleTablesUpdated

* Removed some code in upgradeControllers.ts and it still works

* removing more code for pitr refresh from upgradeController.ts

* Created and used UpgradeModel even though it is empty

* Added upgrademodel

* PR comments addressed

Co-authored-by: Candice Ye <canye@microsoft.com>
2022-04-18 17:52:43 -07:00
Alex Ma
21315a8a5d [Loc] added xlf updates for 4-18-2022 (#19140) 2022-04-18 16:53:22 -07:00
Cory Rivera
c121eeec4d Fix dotnet-interactive extension's publisher ID in recommended extensions list. (#19142) 2022-04-18 15:57:42 -07:00
erpett
bab0463b0b Updating readme and change log to reflect major changes in 1.36 (#19138) 2022-04-18 15:38:55 -07:00
Alexander Ivanov
0f598dd30b Add sqlproj property to trace the origin of the project. (#18670)
* Add sqlproj property to trace the origin of the project.

As part of the database migration process (schema conversion, in particular) we want to be able to tell when converted schemas are being built/deployed to the actual database server. Given that we rely on the SQL Database Projects ADS extension for the compilation/deployment, we don't have too many options other than updating the said extension.

The suggested approach is to make the following changes:
1) Add new property to the sqlproj file (called `DatabaseSource`), which will maintain the origin(s) of the project. The property can contain multiple values (separated by semicolon), in case same project contains objects produced by multiple sources (extract schema, convert from another database, etc.).
2) During build and deploy actions, send the well-known values from the newly added property to the telemetry. We don't want to send any random value of the property, as it may raise some privacy concerns. Instead we define a list of the well-known values that we know do not carry any personal information and send those, if they are specified.

This change adds all necessary APIs to the SQl Database projects extension which will be consumed by our migration extensions to populate new `DatabaseSource` property.

* Use `undefined` instead of `null`

Co-authored-by: Kim Santiago <kisantia@microsoft.com>
2022-04-18 11:38:10 -07:00
csigs
20a291334e Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220416160637768. (#19131) 2022-04-18 09:22:03 -07:00
Alan Ren
6578e5e4cf Fix High Contrast theme name (#19125) 2022-04-15 14:19:12 -07:00
Charles Gagnon
784f8ac963 Fix SQL Binding when creating new project (#19118)
* Fix SQL Binding when creating new project

* Use sql binding templates

* fix openDialog to use select

Co-authored-by: Vasu Bhog <vabhog@microsoft.com>
2022-04-15 13:46:15 -07:00
Alan Ren
5ec567a4f7 add title for color box (#19121) 2022-04-15 12:56:07 -07:00
Kim Santiago
794daa3440 add SDK option to create project from db quickpick (#19100)
* Add SDK option to create project from db quickpick

* cleanup
2022-04-15 09:57:48 -07:00
csigs
ec638e2b40 Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220415154237106. (#19115) 2022-04-15 09:18:09 -07:00
Vasu Bhog
e1cf51653e remove extra error message (#19110) 2022-04-14 16:50:22 -07:00
Lewis Sanchez
010107aea8 Telemetry for Query Execution Plans (#19039)
* Adds telemetry around how the properties window is opened

* Adds telemetry around accessing execution plan top operations

* Adds key for viewing top operations

* Adds telemetry around using the open query button and context menu item

* Adds telemetry around execution plan zoom in, out, to fit, and custom

* Adds telemetry around searching for nodes in execution plans

* Reduces telemetry additional properties to 1.

* Code review changes

* Removes unnecessary export
2022-04-14 11:41:35 -07:00
Charles Gagnon
d202fd703e Combine azure-resource.d.ts into azurecore.d.ts (#19047) 2022-04-14 11:06:45 -07:00
Lucy Zhang
e9b678494c skip manage packages test (#19089) 2022-04-14 10:54:15 -07:00
Barbara Valdez
7a8681481e fix cell nav (#19082) 2022-04-14 10:49:17 -07:00
Cory Rivera
8bd5ea5c84 Only update hover execution state if cell is not active. (#19073) 2022-04-14 10:19:58 -07:00
csigs
02064efcaa Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220414154555496. (#19087) 2022-04-14 10:00:56 -07:00
Cory Rivera
8747ac5c52 Add .NET Interactive extension info to product.json. (#19069) 2022-04-14 10:00:23 -07:00
Udeesha Gautam
02f859ac92 fix for sensitive text in output message (#19071) 2022-04-14 09:54:06 -07:00
Aasim Khan
d7f8b0bfed Fixing parallism icon not showing up (#19085) 2022-04-14 00:19:36 -07:00
Aasim Khan
192f7cc390 Fixing broken action label logic. (#19086)
* Fixing broken action label logic.

* Cleaning up some code
2022-04-14 00:19:07 -07:00
Vasu Bhog
ca05e01144 Fix connectionSettingName for create azure function with sql binding (#19008)
* fix connectionSettingName for create azure function with sql binding

* add sql binding user enters connection string manually

* address comments + fix test

* final comments
2022-04-13 15:53:27 -07:00
Aasim Khan
7dfa347250 Updating the cache element and not an unlinked reference to it. (#19057) 2022-04-13 14:33:35 -07:00
Alan Ren
e073c012af vbump sts (#19053) 2022-04-13 13:27:16 -07:00
Benjin Dubishar
6c1b13b8be updated svg (#19034) 2022-04-13 11:20:19 -07:00
Lucy Zhang
fb07ba9e04 Add smoke test for manage packages wizard (#19018)
* start manage packages smoke test

* fix addpackage

* remove wait for loading spinner

* check cell output gone

* check wizard tab is done initializing
2022-04-13 07:50:15 -07:00
brian-harris
fcd4c6e15b bug - use new cancel/cutover api format (#19037)
* bug - use new cancel/cutover api format

* fix telemetry bug with unregistered ir
2022-04-12 19:50:14 -07:00
Alex Ma
b342a2df7e [Loc] added updated strings for sql-migration (#19033) 2022-04-12 17:30:06 -07:00
Kim Santiago
5c823e436a update schema compare version to 1.13.1 (#19026) 2022-04-12 16:43:14 -07:00
brian-harris
3a0ac7279a Dev/brih/feature/switch ads to portal context (#18963)
* Add CodeQL Analysis workflow (#10195)

* Add CodeQL Analysis workflow

* Fix path

* dashboard refactor

* update version, readme, minor ui changes

* fix merge issue

* Revert "Add CodeQL Analysis workflow (#10195)"

This reverts commit fe98d586cd75be4758ac544649bb4983accf4acd.

* fix context switching issue

* fix resource id parsing error and mi api version

* mv refresh btn, rm autorefresh, align cards

* remove missed autorefresh code

* improve error handling and messages

* fix typos

* remove duplicate/unnecessary  _populate* calls

* change clear configuration button text

* remove confusing watermark text

* add stale account handling

Co-authored-by: Justin Hutchings <jhutchings1@users.noreply.github.com>
2022-04-12 16:26:40 -07:00
Cory Rivera
d98a421035 Enable cell cancellation for Interactive notebooks (#19005)
* Also added a check to prevent multiple Interactive cells from executing simultaneously.
2022-04-12 15:12:22 -07:00
Alan Ren
1d7e5925a9 bring in fixes for a few table designer issues (#19020) 2022-04-12 15:11:22 -07:00
Aasim Khan
387f4cd116 Adding caching to execution plan and refactoring code and some other fixes (#18913)
* Making ep code modular for easy swithcing in and out

* Changing to innerText

* Fixing renames

* Fixing var name in one file
2022-04-12 12:52:24 -07:00
Vasu Bhog
675969eebc suppress create function prompt (#18962) 2022-04-12 11:25:44 -07:00
Lewis Sanchez
4e5846c2c1 Updates azdataGraph package version to 0.0.20 (#19009) 2022-04-12 10:50:35 -07:00
Kim Santiago
2d68b2bbce hide convert to sdk-style from project context menu (#19002)
* hide convert to sdk-style from project context menu

* bump version since 0.16.0 was released in insiders
2022-04-12 09:45:02 -07:00
Aasim Khan
dd2d6e0b5c Adding link support to infobox. (#18876) 2022-04-11 20:39:41 -07:00
Aasim Khan
170950dca8 Adding badge icons to execution plan (#19004)
* Adding badge icons to executionplan

* Fixing doc comment

* Fixing doc comments

* Making enum value more readable

* Changing default to undefined.

* Fixing some icon names
2022-04-11 14:44:07 -07:00
Alex Ma
a577c3feca [Loc] added hiderefreshtask string (#19000) 2022-04-11 10:45:03 -07:00
csigs
6d81b02c18 Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220411153724338. (#18995)
Co-authored-by: Alex Ma <alma1@microsoft.com>
2022-04-11 10:21:01 -07:00
csigs
7a41bfc167 Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220410153816807. (#18992) 2022-04-11 10:04:23 -07:00
csigs
90176658fd Juno: check in to lego/hb_04604851-bac4-4681-9f74-73de611d6e48_20220409154211117. (#18990) 2022-04-11 10:04:09 -07:00
Alan Ren
fe1aefdd5f fix table designer issues (#18988)
* fix table designer issues

* commit change on blur

* new sts
2022-04-10 12:09:33 -07:00
Aasim Khan
9fcfe5b23c Adding flag to hide refresh button in dashboards. (#18964) 2022-04-09 17:52:09 -07:00
Cory Rivera
c2cc32a4a0 Add option to use notebook json contents instead of file string when creating a notebook. (#18972) 2022-04-08 16:39:14 -07:00
Alex Ma
828c6760e2 [Loc] update to sql-database-projects (#18983) 2022-04-08 15:38:54 -07:00
Hai Cao
0738c148ca A few table designer improvements && bump STS to .227 (#18982)
* Add unified col for data type deit

* remove seperate type setting cols and rename unified col to 'type'

* remove advanced type from properties window

* add description to col, idx, constraints

* nit

* bump STS to .227
2022-04-08 15:00:56 -07:00
Maddy
4191ef8aa5 Fix active cell update on tabbing (#18614)
* listen on focus_in of toolbar

* update styles on focus_in

* listen for active cell change on notebook componen

* add tabbing order to textcells

* remove duplicate listener

* clean up

* undo

* remove visible check from cellToolbar

* remove duplicate detectChanges on updateActiveCell

* only update active cell if it's already not

* add aria-label for accessibility

* localize the aria label

* refactor

* add cellLabel property to CellModel

* remove updateActiveCell from code component

* regression from merge fix

* set edit mode as true when focusing on cell

* moce check to model

* merge changes correctly

* update edit mode if code cell

* fixes

Co-authored-by: barbaravaldez <bavaldez@microsoft.com>
Co-authored-by: chgagnon <chgagnon@microsoft.com>
2022-04-08 12:31:30 -07:00
Alex Ma
41b639c7d6 [Loc] update to sql-bindings (#18978) 2022-04-08 11:21:26 -07:00
Alan Ren
c04f78981c retrieve the data from display data source (#18973) 2022-04-08 11:13:29 -07:00
Aditya Bist
197d56a29b Fix new table issue (#18974)
* fix new table issue

* fix new table scenario

* simplify logic
2022-04-08 11:10:30 -07:00
Alex Ma
cd7c94976c [Loc] Last update to langpack source files for April release. (#18977)
* [Loc] update xlfs

* [Loc] Last source file updates
2022-04-08 10:52:01 -07:00
Vasu Bhog
ed8d2f9927 Fix for user using command palette (#18948)
* fix for user using command palette command

* rework if a user uses the create azure function via the command

* for now only show in vs code

* move logic to azureFunctionService + address comments

* fix command location

* address comments

* fix validateFunction
2022-04-08 10:28:45 -07:00
csigs
dc14201088 LEGO: check in for main to temporary branch. (#18976) 2022-04-08 10:10:37 -07:00
Alex Ma
562e0fdde7 [Loc] add converttosdkstyleconfirmation message (#18971) 2022-04-07 16:51:49 -07:00
Charles Gagnon
a595fb8fd1 Inline source maps in dev build (#18970)
* Inline source maps in dev build

* Update readme

* correct command

* Use env var

* Update location
2022-04-07 16:39:08 -07:00
Barbara Valdez
683d906138 Create directory when adding a book section from book tree view (#18966)
* create folder when creating a book section

* fix test
2022-04-07 16:19:33 -07:00
Kim Santiago
379b24d78c Add confirmation before converting to SDK-style project (#18893)
* Add confirmation before updating to SDK-style project

* update string

* update string

* update other learn more url
2022-04-07 15:48:05 -07:00
Aasim Khan
d8b3db2ee3 Updating moment package (#18956)
* Updating moment package

* Fixing moment

* Fixing notebook moment package
2022-04-07 14:04:13 -07:00
Vasu Bhog
4e299dc4b2 fix timeout warning when exiting create function (#18947)
* fix timeout warning when exiting create function

* combine timeout errors

* make more explicit
2022-04-07 13:58:57 -07:00
Charles Gagnon
a5cc1ea223 Fix download links (#18969) 2022-04-07 13:37:35 -07:00
Alex Ma
b4195d8984 [Loc] update to langpack source files 4/7/2022 (#18967)
* Added updated xlfs

* update to source files
2022-04-07 12:28:02 -07:00
csigs
f804e5dd48 LEGO: check in for main to temporary branch. (#18965) 2022-04-07 09:39:48 -07:00
Candice Ye
e6773dd842 Change version numbers of arc and azcli (#18957)
Co-authored-by: Candice Ye <canye@microsoft.com>
2022-04-06 15:07:09 -07:00
Vasu Bhog
f829218c2c less prompts about langauge and runtime version (#18949) 2022-04-06 12:58:37 -07:00
Vasu Bhog
49b0640fde Update sql-bindings icon (#18946)
* add default icon
2022-04-06 12:57:54 -07:00
Alex Ma
63a700ef3f [Loc] update to langpack source files (#18958)
* update to xlfs

* [Loc] added updates to langpack source files
2022-04-06 12:46:39 -07:00
Cory Rivera
03d2e83250 Treat Jupyter's Python 3 Ipykernel alias as Python 3. (#18943) 2022-04-06 11:27:15 -07:00
Cory Rivera
316798a9b5 Add cell toolbar tests for undoing text styling by clicking button twice. (#18807) 2022-04-06 10:02:51 -07:00
csigs
bc79d62b35 LEGO: check in for main to temporary branch. (#18953) 2022-04-06 09:07:12 -07:00
Alex Ma
c4db69f391 [Loc] small update to arc xlf (#18945) 2022-04-05 17:20:08 -07:00
dependabot[bot]
f4e37d3dce Bump plist from 3.0.4 to 3.0.5 (#18916)
Bumps [plist](https://github.com/TooTallNate/node-plist) from 3.0.4 to 3.0.5.
- [Release notes](https://github.com/TooTallNate/node-plist/releases)
- [Changelog](https://github.com/TooTallNate/plist.js/blob/master/History.md)
- [Commits](https://github.com/TooTallNate/node-plist/commits)

---
updated-dependencies:
- dependency-name: plist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-05 17:00:13 -07:00
Karl Burtram
805dda533a Bump distro for electron bump (#18944) 2022-04-05 16:59:44 -07:00
Karl Burtram
463271f0d9 Bump Electron to 13.6.6 (#18940)
* Bump Electron to 13.6.6

* Bump azuredatastudio-sqlite version in smoke tests
2022-04-05 16:44:17 -07:00
Cory Rivera
7c399e84eb Add markdown smoke tests for changing text size and inserting links (#18888)
* Temporarily disabled text size tests due to issues running on Unix.
2022-04-05 15:53:06 -07:00
Candice Ye
92a2233022 Added text to the Arc DC deploy tile that user must have done az login before continuing with the wizard. (#18938)
Co-authored-by: Candice Ye <canye@microsoft.com>
2022-04-05 14:22:45 -07:00
Lewis Sanchez
a6000aef67 Resolves undefined tenant error while adding an account. (#18937)
* Selects the first tenant that appears in the drop down list of tenants

* Fixes tenant undefined while adding account error
2022-04-05 13:14:06 -07:00
Alex Ma
c707911800 [Loc] added updated langpack files and xlfs (#18920) 2022-04-05 10:50:49 -07:00
Alex Ma
630cdbc84f [Loc] added table show actions xlf (#18936) 2022-04-05 10:03:41 -07:00
Aasim Khan
4db0814b94 Adding context menu to table component (#18914)
* Adding context menu to table component

* Removing extra whitespace

* Some logic fixes

* Fixing focus logic
2022-04-04 23:47:39 -07:00
Alex Ma
b96fb5aa90 [Loc] added small string for sql-bindings (#18933) 2022-04-04 17:27:16 -07:00
Raymond Truong
a0cf244245 [SQL Migration] List resource groups based on available resources (#18846)
* WIP - implemented logic to show resource groups as derived from list of resources, instead of directly listing all resource groups

* Remove comments

* Remove getResourceGroupByName and craft resource group object manually instead

* Update subscription and location list when tenant is changed

* Define Azure resource types locally instead of modifying azurecore

* Add SQL VM scenario

* Split getAzureResourceGroupDropdownValues into four separate functions

* Refresh only subscription list when tenant is changed

* Create new DMS dialog should show all resource groups

* Remove unnecessary async code
2022-04-04 15:59:40 -07:00
Lewis Sanchez
81e785506c Bumps azdataGraph version to 0.019 (#18922) 2022-04-04 15:16:09 -07:00
Vasu Bhog
69c254aeac Add progress bar for adding sql binding (#18923)
* add progress bar for adding sql binding
2022-04-04 15:13:00 -07:00
Vasu Bhog
2d9004e481 Remove known settings from ConnectionStringSettingName prompt (#18910)
* remove known settings
2022-04-04 13:37:44 -07:00
Charles Gagnon
c53c6d86e2 Update STS to .226 (#18918) 2022-04-04 12:44:05 -07:00
Vasu Bhog
c65c41d704 add guid for session ID (#18912) 2022-04-04 10:43:20 -07:00
Alex Ma
838c27bfa3 [Loc] added updatedtosdkstyleerror (#18917) 2022-04-04 10:15:04 -07:00
csigs
fec1b7821f LEGO: check in for main to temporary branch. (#18908) 2022-04-04 09:51:12 -07:00
dependabot[bot]
adbbf7ae7f Bump ansi-regex from 3.0.0 to 3.0.1 in /extensions/admin-tool-ext-win (#18904)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-04 09:41:30 -07:00
dependabot[bot]
be62f1864d Bump plist from 3.0.4 to 3.0.5 in /build (#18903)
Bumps [plist](https://github.com/TooTallNate/node-plist) from 3.0.4 to 3.0.5.
- [Release notes](https://github.com/TooTallNate/node-plist/releases)
- [Changelog](https://github.com/TooTallNate/plist.js/blob/master/History.md)
- [Commits](https://github.com/TooTallNate/node-plist/commits)

---
updated-dependencies:
- dependency-name: plist
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-04 09:41:18 -07:00
dependabot[bot]
ca6ad43e8f Bump ansi-regex from 3.0.0 to 3.0.1 in /extensions/azurecore (#18902)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-04 09:41:04 -07:00
dependabot[bot]
bd6d438c8c Bump ansi-regex from 3.0.0 to 3.0.1 in /extensions/arc (#18901)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-04 09:40:55 -07:00
dependabot[bot]
7392ce7e31 Bump ansi-regex from 3.0.0 to 3.0.1 in /extensions/azcli (#18900)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-04 09:40:45 -07:00
dependabot[bot]
e82e267159 Bump ansi-regex from 3.0.0 to 3.0.1 in /extensions/agent (#18899)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-04 09:40:35 -07:00
dependabot[bot]
eb25cc810f Bump ansi-regex from 3.0.0 to 3.0.1 in /extensions/cms (#18898)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-04 09:40:25 -07:00
Kim Santiago
d6dab3dd18 Remove build and folder includes when converting to SDK-style project (#18889)
* remove Build and Folder Includes

* add tests

* cleanup

* rollback if there was an error during the conversion
2022-04-01 21:04:18 -04:00
Alan Ren
a795e64bed fix language change issue (#18906) 2022-04-01 17:52:11 -07:00
dependabot[bot]
055f10ff8d Bump ansi-regex from 3.0.0 to 3.0.1 in /extensions/dacpac (#18869)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-01 10:08:56 -07:00
dependabot[bot]
b9ebdf9eb7 Bump ansi-regex from 3.0.0 to 3.0.1 in /extensions/data-workspace (#18868)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-01 10:08:48 -07:00
dependabot[bot]
3bd033b25d Bump ansi-regex from 3.0.0 to 3.0.1 in /extensions/mssql (#18861)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-01 10:08:40 -07:00
dependabot[bot]
b7d1e950f3 Bump ansi-regex from 3.0.0 to 3.0.1 in /extensions/notebook (#18860)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-01 10:08:31 -07:00
dependabot[bot]
3f31290e8e Bump ansi-regex from 3.0.0 to 3.0.1 in /extensions/import (#18859)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-01 10:07:41 -07:00
dependabot[bot]
3b7a5b64af Bump ansi-regex from 3.0.0 to 3.0.1 in /extensions/integration-tests (#18857)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-01 10:07:32 -07:00
dependabot[bot]
6a0dd0415b Bump ansi-regex from 3.0.0 to 3.0.1 in /extensions/machine-learning (#18856)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-01 10:07:20 -07:00
dependabot[bot]
45b5f8d136 Bump ansi-regex from 3.0.0 to 3.0.1 in /extensions/sql-bindings (#18854)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-01 10:07:12 -07:00
dependabot[bot]
a29bb210b2 Bump ansi-regex from 3.0.0 to 3.0.1 in /extensions/resource-deployment (#18853)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-01 10:07:03 -07:00
csigs
3c8943aab2 LEGO: check in for main to temporary branch. (#18897) 2022-04-01 09:42:52 -07:00
Aditya Bist
bab5118996 Add graph icons to OE and TD (#18808)
* add graph icons to OE and TD

* PR comments

* change enum type

* change sub type to icon and make basic as default

* changed icontype to icon

* change default logic location

* change icon name to be more generic

* use right icons
2022-04-01 00:27:59 -07:00
Alex Ma
27f014c70d [Loc] add table filter xlf (#18896) 2022-03-31 22:16:37 -07:00
Aditya Bist
e7773425ee added graph node types from edit and publish results (#18891)
* added graph node types from edit and publish results

* make generic property bag

* review comments

* add comment for function

* edit comment

* change name to telemetry info
2022-03-31 21:50:26 -07:00
Vasu Bhog
0a43ed84e3 Add bindings telemetry (#18851)
* add bindings telemetry

* add exitReasons
2022-03-31 16:29:15 -07:00
Kim Santiago
80db3a492f don't show error notification if no error message in dacpac extension (#18871) 2022-03-31 15:31:48 -07:00
Kim Santiago
b65a6bd741 update DW target platform name in sql projects (#18843)
* update DW target platform name

* remove Microsoft from target platform names

* fix merge conflict
2022-03-31 15:30:30 -07:00
Alan Ren
b6083b6447 handle special values in the table filter (#18872)
* handle special values in the table filter

* pr comments
2022-03-31 11:17:55 -07:00
Kim Santiago
fe0cff07d6 Expose refresh projects tree (#18890)
* refresh project tree after apply schema compare to project

* clarify comment
2022-03-31 11:08:08 -07:00
Charles Gagnon
4166c622f3 Fix DiffEditorComponent types (#18883)
* Fix DiffEditorComponent types

* spacing
2022-03-30 15:24:10 -07:00
Aasim Khan
989ee0b2c7 Updating azdataGraph package to get tooltip improvements (#18877) 2022-03-30 14:28:16 -07:00
dependabot[bot]
cffa7c6b49 Bump ansi-regex from 3.0.0 to 3.0.1 in /extensions/sql-database-projects (#18855)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-29 17:28:51 -07:00
dependabot[bot]
4621d2e1af Bump ansi-regex from 3.0.0 to 3.0.1 in /extensions/schema-compare (#18858)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-29 17:28:28 -07:00
Alex Ma
c62619c17b [Loc] update to xlfs (#18866) 2022-03-29 15:02:59 -07:00
Chris LaFreniere
af3d307d40 Restart kernel initial implementation (#18835)
* Restart kernel initial implementation

* Update notebook extension TestKernel

* PR comments
2022-03-29 12:56:52 -07:00
Kim Santiago
8537a30996 fix project not getting updated after schema cmopare (#18850) 2022-03-29 11:55:12 -07:00
csigs
b51387bb46 LEGO: check in for main to temporary branch. (#18862) 2022-03-29 11:21:43 -07:00
Kim Santiago
f002a26fe4 Add convert to SDK style project to context menu (#18847)
* differentiate between sdk and legacy style projects in tree

* switch to legacy

* add to context menu

* add function call
2022-03-29 10:15:36 -07:00
Leila Lali
459fab256e Sql Proj: Adding a new sqlproj template for SQL dbs (#18636) 2022-03-29 09:06:56 -07:00
Alex Ma
25b8137a45 [Loc] change to sql-database-project xlf (#18848) 2022-03-28 17:33:45 -07:00
Kim Santiago
2f825f8a97 add initial SDK-style project migration (#18827)
* add initial SDK-style project migration

* addressing comments
2022-03-28 16:29:14 -07:00
Leila Lali
aad20bc338 Chaning the name of server in deploy option if target is Azure (#18828) 2022-03-28 15:07:09 -07:00
Kim Santiago
893015010d remove unused SchemaComparePublishChanges (#18830) 2022-03-28 10:54:53 -07:00
csigs
027bac766e LEGO: check in for main to temporary branch. (#18842) 2022-03-28 09:06:55 -07:00
csigs
9d2e5ff93e LEGO: check in for main to temporary branch. (#18836) 2022-03-28 09:06:45 -07:00
Lewis Sanchez
85b4bf13f9 Initial sets up of new execution plan comparison result endpoint (#18813)
* Initial sets up of new execution plan comparison result endpoint

* Makes query execution plan endpoint URI's more consistent.
2022-03-25 11:47:46 -07:00
Alex Ma
0d3cec074d [Loc] added loading notebook message (#18826) 2022-03-25 10:29:48 -07:00
Cory Rivera
d9501ffc03 Enable loading spinner for notebook editor. (#18810) 2022-03-24 16:31:33 -07:00
Charles Gagnon
f325a2df08 Throw more detailed error when compilation fails (#18783)
* Throw more detailed error when compilation fails

* Add SQL edits
2022-03-24 13:20:18 -07:00
Nemanja Milovančević
5e68ff1dfe Make mssql extension a module (#18804)
* Rebase from main branch

* import from module

* Add mssql module ref

Co-authored-by: Charles Gagnon <chgagnon@microsoft.com>
2022-03-24 11:09:55 -07:00
dependabot[bot]
ae8784e462 Bump minimist from 1.2.0 to 1.2.6 in /extensions/liveshare (#18814)
Bumps [minimist](https://github.com/substack/minimist) from 1.2.0 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.0...1.2.6)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-24 09:28:09 -07:00
dependabot[bot]
668f59ca2e Bump minimist from 1.2.5 to 1.2.6 in /test/smoke (#18812)
Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-24 09:25:21 -07:00
Alan Ren
b50c4fdb49 new service downloader version (#18811) 2022-03-23 21:46:42 -07:00
Raymond Truong
236db4d1b1 [SQL Migration] Show correct recommendation when viewing issues in assessment results (#18801) 2022-03-23 17:18:20 -07:00
Kim Santiago
c39b13a93e cleanup sql database projects package.json (#18794) 2022-03-23 10:45:48 -07:00
Kim Santiago
5a87e552bc move system dbs to bottom of the list in update project from db dialog (#18791) 2022-03-22 18:12:19 -07:00
Cory Rivera
1fa453f8f2 Add smoke tests for text cell toolbar actions. (#18792) 2022-03-22 12:51:56 -07:00
Vasu Bhog
783215c160 code owners for sql-bindings (#18795) 2022-03-22 12:23:38 -07:00
Charles Gagnon
bdf3261612 Disable broken tests (#18793) 2022-03-21 18:16:04 -07:00
Charles Gagnon
08b2d9668e Fix and enable core unit test coverage (#18781)
* Fix and enable core unit test coverage

* switch

* Fix coverage mapping

* don't output marked

* Fix filter check
2022-03-21 15:15:07 -07:00
Kim Santiago
8a670a8baa Add a few more properties for dacpac telemetry (#18782)
* add wizard page and selected operation for dacfx wizard cancel telemetry

* update name

* send version for extract

* pass version directly into function call
2022-03-21 14:27:09 -07:00
csigs
aaef400194 LEGO: check in for main to temporary branch. (#18785)
Co-authored-by: Alex Ma <alma1@microsoft.com>
2022-03-21 10:15:02 -07:00
csigs
e4a3ec1aac LEGO: check in for main to temporary branch. (#18784) 2022-03-21 09:49:50 -07:00
Vasu Bhog
1a1556ca75 Use SQL input / output template instead (#18768)
* use sql input / output template instead

* workaround for storage wizard that is opened
2022-03-18 17:31:19 -07:00
Cory Rivera
7914fcf101 Fix issues with unknown notebook file types not opening as a default notebook. (#18779) 2022-03-18 16:59:22 -07:00
Maddy
23a69f9b69 Add test for last edit mode (#18734)
* add test for persisting last edit mode

* remove empty line

* address comments

* update comment
2022-03-18 16:13:58 -07:00
Kim Santiago
6263cc2f87 cleanup dacpac extension telemetry (#18778)
* cleanup dacpac extension telemetry

* Add helper function and missing action
2022-03-18 15:53:05 -07:00
Alan Ren
f2d4801634 change the trigger of inputbox commit event (#18776) 2022-03-18 13:16:43 -07:00
Charles Gagnon
301c6f24fe Remove tslint from extensions (#18775) 2022-03-18 11:19:30 -07:00
Charles Gagnon
fc0721450d Cleanup sql bindings test utils (#18773) 2022-03-18 11:18:59 -07:00
Charles Gagnon
a6d442bb3b Consolidate extension typings files (#18765)
* Consolidate extension typings files

* fix
2022-03-18 09:24:22 -07:00
Alex Ma
b07266e8c2 [Loc] update to arc and sql XLFS (#18769) 2022-03-18 00:28:30 -07:00
Candice Ye
a786e63445 Arc bug fix: ADS Create DC wizard should prompt for Log Analytics workspace ID and access token similar to portal (#18742)
* Added monitor log-analytics workspace list to az api

* Made resource group and subscription optional for logs analytics workspace list

* Added dynamic fields for workspace names, id, primary key, based on value of auto-logs checkbox

* Hooked up the newly created source provider for log analytics workspaces. Dropdown now populates all workspace names.

* Added workspaceUtils.ts for a valueprovider. Now workspace name maps to id automatically.

* Replaced promise.all with promise.resolve

* Added workspace id and primary key as env variables in the notebook

* Removed extra space in package.json

* Made getOptions more concise and put azApi definition in function.

* Changed notebook to handle new Azure CLI command with param --clustername
2022-03-17 20:57:16 -07:00
Alan Ren
d6abcb892d handle validation error (#18766) 2022-03-17 19:43:02 -07:00
Kim Santiago
3071a7b710 Add more telemetry for sql database projects (#18751)
* add more telemetry for sql database projects

* add publishToContainer events

* send target platform when publishing

* add duration for createProjectFromDb and updateProjectFromDb
2022-03-17 16:44:10 -07:00
Aasim Khan
6c51b934f9 Fixing clickable state of infobox not setting properly when initializing it. (#18763)
* Fixing clickable state of infobox not set when initializing it.

* Removing unnecessary calls to a method
2022-03-17 14:11:15 -07:00
Alan Ren
9f2940e8f8 add severity support for issues (#18761)
* add severity support for issues

* vbump STS

* pr comments
2022-03-17 14:09:02 -07:00
Rachel Kim
aeb4e87c1f sql migration extension version bump 0.1.14 (#18665) 2022-03-17 14:01:49 -07:00
Alex Ma
85e1e01177 [Loc] update to sql-database-projects (#18764) 2022-03-17 13:03:13 -07:00
Vasu Bhog
d063355b1a improve sql bindings extension (#18757) 2022-03-17 11:37:37 -07:00
Vasu Bhog
80007a72cc Remove sql-bindings logic from sql-database-projects (#18754)
* remove sql-bindings logic from sql-database-projects
2022-03-17 11:36:28 -07:00
erpett
bdb81bc9b1 Updating Changelog with Hotfix notes (#18760) 2022-03-17 11:15:28 -07:00
Kim Santiago
023e10b496 Add preview and bump versions (#18749) 2022-03-17 10:47:50 -07:00
csigs
27cb693bd5 LEGO: check in for main to temporary branch. (#18759) 2022-03-17 10:29:37 -07:00
Barbara Valdez
80a9d94648 Update SQL Bindings API (#18748)
* refactor addSqlBindingQuickpick so they can be called using sql-bindings api
2022-03-17 00:21:49 -07:00
Alex Ma
6fad30bf3c added changes to sql xlf (#18753) 2022-03-16 17:00:06 -07:00
Aasim Khan
a0c2dc199e Adding Execution Plan Editor to ADS (#18696)
* Pushing Execution Plan Editor

* Renaming class
Handling error

* Awaiting for handlers to be registered

* Addressing some PR comments

* Fixing return type for provider

* Fixing editor id and removing unnecessary overrides

* Adding a namespace

* adding execution plan namespace

* Adding protocol comment

* Fixing if logic

* Fixing error message

* Cleaning up code

* cleanup code

* Adding help comments

* Fixing method call

* Using path.ts to get the base file name

* converting to lambda functions

* Adding comment for run action

* Fixing pr comments

* Fixing editor label

* Fixing doc comments

* Adding some more comments

* Fixign branding in comments
2022-03-16 15:07:29 -07:00
Cory Rivera
95980130c8 Correctly handle creating and saving untitled notebook .dib files. (#18744) 2022-03-16 14:37:21 -07:00
Alex Ma
8cc0fdfdc5 [Loc] update to data-workspace xlf (#18747) 2022-03-16 12:23:01 -07:00
csigs
f83605cbf4 LEGO: check in for main to temporary branch. (#18746) 2022-03-16 09:29:36 -07:00
Kim Santiago
90d6defa05 Add select target platform to new project quickpick (#18731)
* add step to choose target platform in new project quickpick

* add comment

* only splice if the default target platform index isn't -1

* change 3 to 5 in comment
2022-03-15 18:07:41 -07:00
Alan Ren
ca904ed380 Add comment for serialization provider api (#18718)
* promote serialization provider api

* Revert "promote serialization provider api"

This reverts commit df9bec3e58ff78dc611886ccda34381f365ef73e.

* update

* make dataType a string
2022-03-15 17:55:35 -07:00
Alan Ren
784a9270c8 fix the issue that chart axis's min/max value can't be zero (#18743)
* fix chart option issue

* pr comment
2022-03-15 17:55:16 -07:00
Vasu Bhog
d585e75706 Add rest of sql-bindings/azure funcs logic to sql bindings ext (#18733)
* refactor the rest of azure function and sql binding

* remove vscode-mssql typings that are moved to our sql-bindings ext
2022-03-15 15:10:42 -07:00
Alex Ma
01509de495 [Loc] small update to sql-migration xlf (#18740) 2022-03-15 12:19:24 -07:00
Raymond Truong
fa227c88c9 [SQL Migration] Add state check to target MI resource on target selection page (#18673)
* Add MI ready state check and error message

* Fix a typo

* Update error message logic

* Update '(Unavailable)' prefix to be localized string

* Show error messsage when non-Ready MI is initially selected (not just on Next button)

* Update error message with appropriate casing and actionable step
2022-03-15 10:45:43 -07:00
Alex Ma
cb607e34d7 [Loc] update to data-workspace and sql-bindings xlfs (#18732) 2022-03-14 17:20:28 -07:00
Kim Santiago
de9a4e02b1 add SDK style option to new project quickpick (#18724)
* add SDK style option to new project quickpick

* addressing comments
2022-03-14 16:10:51 -07:00
Alan Ren
820838fae8 vbump sts (#18727) 2022-03-14 15:49:27 -07:00
Alan Ren
85f1f3e0dc vbump slickgrid to bring in an accessibility fix (#18722)
* vbump slickgrid

* include yarn.lock

* update remote folder

* yarn.lock for remote folder

* web
2022-03-14 14:20:48 -07:00
Vasu Bhog
2d1ffeb47c Refactor vscode-mssql sql bindings logic to sql bindings ext (#18725)
* wip for refactor of mssql to sql-bindings

* remove STS dependency

* work to bring function over and setup with vscodeMsql APIs

* copy typings from vscode-mssql
2022-03-14 13:07:27 -07:00
Alex Ma
a86301312c [Loc] update to data-workspace xlf and sql xlf (#18726) 2022-03-14 13:00:53 -07:00
Cory Rivera
206188f3ab Add missing onNotebook:* activation event for VS Code notebook compatibility. (#18710) 2022-03-14 10:32:26 -07:00
Aditya Bist
d8a8107dc6 default to native credential service in linux (#18716) 2022-03-14 10:13:18 -07:00
Alex Ma
26e6cd28c2 Add account loading screen until provider accounts have finished loading (#18692)
* Added wait for accounts to be loaded to prevent premature loading

* revert changes

* WIP loading screen

* added work in progress emitter.

* added test event fire

* added test for accountDialogController emitter

* fixed test

* added event emitters inside accountDialog

* WIP changes to loading

* added fixed filter removed unnecessary emitters

* added working loading page

* fix for spaces

* added improvements

* fixed space

* added loading provider label xlf

* moved spinner = false to show views

* Added loadingSpinner

* removed additional localization

* removed change to css

* removed newline

* small changes

* fixed spaces

* fixed line positions

* removed loadingComplete

* added spinner container (so that account loading spinner appears on top)

* added small fix

* changed wording

* changed wording slightly

* removed comment
2022-03-14 09:44:09 -07:00
csigs
02093f8497 LEGO: check in for main to temporary branch. (#18715) 2022-03-14 09:25:17 -07:00
csigs
62a0bcc69f LEGO: check in for main to temporary branch. (#18713) 2022-03-14 09:25:01 -07:00
Kim Santiago
7181d4c79e Make SDK-style project a checkbox option instead of separate template (#18698)
* switch to using a checkbox instead of separate template for new SDK style project

* let project provider provide sdk learn more url

* Reorder
2022-03-11 16:54:53 -08:00
Alan Ren
4551329db0 table designer bug fixes (#18701)
* table designer bug fixes

* pr comments

* fix debounce issue
2022-03-11 12:14:51 -08:00
Alex Ma
5c14fe4f4c [Loc] small update to sql-migration (#18708) 2022-03-11 10:09:22 -08:00
Raymond Truong
d1d6b229ce [SQL Migration] Add more help text to database backup page (#18671)
* Add help text for backups with checksums and Azure storage accounts with private endpoints

* Update help text wording
2022-03-11 09:53:50 -08:00
Raymond Truong
94b4437a6a [SQL Migration] Fix SKU recommendations not working for named (non-default) instances (#18697)
* WIP

* Change instance name from machine name to full instance name returned by assessment

* Get full instance name from source connection profile instead of relying on assessment result

* Combine correct machine name with correct instance name
2022-03-11 09:49:44 -08:00
csigs
ebdfea25ad LEGO: check in for main to temporary branch. (#18706) 2022-03-11 09:30:37 -08:00
Kim Santiago
5f2d8b2bd5 remove sql server 2005 and 2008 as options for sql database projects (#18664)
* remove sql server 2005 and 2008 from target platforms

* also remove 2005 and 2008 from SqlTargetPlatform enum

* fix a windows test
2022-03-10 18:11:49 -08:00
Raymond Truong
85d6b2ef46 [SQL Migration] Fix overflow behavior on migration cutover dialog to avoid truncating backup file names (#18679) 2022-03-10 15:50:28 -08:00
Vasu Bhog
f424bea0de Fixes issues with SQL Bindings vscode dev (#18695)
* fixes issues with vscode development
2022-03-10 15:37:23 -08:00
Charles Gagnon
364684c79e Move some more azdata APIs to stable (#18691)
* Move some more apis to stable

* update
2022-03-10 11:01:11 -08:00
Alan Ren
4d7467a5d5 promote some APIs to stable api set. (#18689) 2022-03-09 19:29:06 -08:00
Aasim Khan
b299f7ed3f Making infobox clickable (#18676)
* Making infobox clickable

* Making it accessible

* Moving API to proposed

* Matching styling from portal

* Fixing some styling

* Moving to proposed

* Removing extra spacing

* Registering and Unregistering listeners

* Fixing listeners

* Registering emitter only once.

* Changing emitter type from undefined to void

* Adding arialabel to clickable link

* Changing property name to suit its purpose
2022-03-09 18:43:39 -08:00
Vasu Bhog
0c54c12772 Add SQL Binding Tests (#18687)
* add tests
2022-03-09 16:35:51 -08:00
Alex Ma
65b4847874 [Loc] add table designer XLF (#18688) 2022-03-09 16:07:59 -08:00
Alex Ma
33d2735970 Added fix to sql-bindings nls file (#18686)
* Added fix to sql-bindings nls file

* small fix to text
2022-03-09 15:49:14 -08:00
Aditya Bist
822199c9be add ability for md + text reports (#18667)
* add ability for md + text reports

* change report type

* re add types for ads

* match fields and add enum for mimetype

* rename preview report

* update type

* rename generate report type

* fix comment
2022-03-09 15:48:21 -08:00
Alan Ren
e50bded5d1 table designer new features (#18682)
* support graph tables

* ignore script compare

* ability to refresh view after edit

* reserve focus after refresh view

* primary key and default constraint

* bug fixes

* vbump sts

* comments

* update type

* fix issue
2022-03-09 14:17:01 -08:00
Charles Gagnon
27763c860c Add option to not publish source maps (#18683)
* Test PR

* fix
2022-03-09 11:12:58 -08:00
Alex Ma
634b9f8d08 [Loc] update to sql-bindings xlf file (#18685) 2022-03-09 09:39:10 -08:00
Karl Burtram
3844638156 Turn off Windows Test step (#18684) 2022-03-09 09:33:49 -08:00
Vasu Bhog
eb77d86136 Refactor SQL Binding code over from sql-database-projects (#18674)
* add sql binding prompt / logic

* remove controller and move to extension

* remove unused dependencies
2022-03-09 01:02:37 -08:00
Charles Gagnon
025e0831e7 Add var to let smoke tests fail build (#18677)
* Add var to let smoke tests fail build

* force failure

* try another

* fix

* undo failure

* update titles
2022-03-08 13:44:57 -08:00
Kim Santiago
5bb35d4eed update Microsoft.Build.Sql version to 0.1.3-preview in templates (#18659) 2022-03-07 17:34:30 -08:00
Cory Rivera
f013a88163 Only update active cell if the cell isn't currently in edit mode. (#18672) 2022-03-07 17:11:05 -08:00
Alex Ma
4f9d45335e [Loc] added small fix to sql-bindings (#18669) 2022-03-07 15:25:16 -08:00
Vasu Bhog
fee8e78011 fix display name and description key (#18666) 2022-03-07 13:22:44 -08:00
Aditya Bist
1be5c926d3 added markdown renderer for publish dialog (#18645) 2022-03-07 10:57:37 -08:00
csigs
72632bc376 LEGO: check in for main to temporary branch. (#18658)
Co-authored-by: Alex Ma <alma1@microsoft.com>
2022-03-07 10:21:51 -08:00
csigs
9890cc79c0 LEGO: check in for main to temporary branch. (#18656) 2022-03-07 09:40:13 -08:00
csigs
b3107dc4b1 LEGO: check in for main to temporary branch. (#18653) 2022-03-07 09:40:01 -08:00
Cory Rivera
eccb77aca3 Preserve previous code cell's language when creating a new code cell from an existing context. (#18646) 2022-03-06 21:35:57 -08:00
Alex Ma
5d0f0afdc6 [Loc] Updates to sql files with changes (#18648) 2022-03-04 16:41:04 -08:00
Rachel Kim
33259764f7 [Sql Migration] Stabilize save and close logic and fix related ux bugs (#18579)
* add loadSavedInfo function in stateMachine; only open wizard if didLoadSavedInfo

* * add loadSavedInfo function in stateMachine; only open wizard if didLoadSavedInfo
* replaced savedInfo.miggrationServiceId string with sqlMigrationServer object
* selectDatbasesFromList helper function to check previously selected dbs in dbSelectorPage and sqlDatabaseTree

* * remove savedInfo references from targetSelectionPage, migrationModePage
* add selectDefaultDropdownValue helper to stateMachine to handle unify savedInfo selection logic
* add updateDropdownLoadingStatus to targetSelectionPage
* check if values exist before making api calls in statemachine

* removed savedInfo references from databaseBackupPage, integrationRuntimePage

* databaseBackupPage - targetDatabaseNames, networkShares, blobs need to rely on savedInfo as user may update the list of migrationdbs during the retry/saveAndClose

* re-add serverAssessments to savedInfo; only getAssessments if it does not exist or needs to be updated; fix networkShare type savedInfo

* rename _assessmentDbs to _databasesForAssessment; _migrationDbs to _databasesForMigration

* load blobs/networkshares savedinfo; move selectDefaultDropdownValue to utils

* fix selectDefaultDropdownValue; refreshDatabaseBackupPage when user changes target subscription or location
2022-03-04 16:00:44 -08:00
Vasu Bhog
c9aa3e9f4b Boilerplate for SQL Bindings Extension (#18624)
* boilerplate for sql bindings extension

* edit gulpfile task as it was trying to find specific menus within package.json
2022-03-04 15:16:45 -08:00
Leila Lali
8e9957adbe SQLProj: No docker image build needed for deploying a database to docker (#18629) 2022-03-04 14:32:43 -08:00
Charles Gagnon
442c16bc3c Fix tempdb icon not showing on dev builds (#18633) 2022-03-04 13:10:46 -08:00
Charles Gagnon
1c83aa61d7 Fix error displayed when insights files can't be found and fix server-report insights in dev build (#18635)
* Fix error

* fix queries
2022-03-04 13:10:35 -08:00
Kim Santiago
9e3d678536 add learn more link for sdk style in create project from db dialog (#18637) 2022-03-04 13:00:21 -08:00
Charles Gagnon
9a944b614d Fix some more images not loading (#18632) 2022-03-04 11:03:13 -08:00
Alex Ma
bc78f6a573 [Loc] fixed path for editableDropdown (#18634) 2022-03-04 10:29:24 -08:00
csigs
da076c152c LEGO: check in for main to temporary branch. (#18628) 2022-03-04 09:57:56 -08:00
Aditya Bist
a2c39369c9 Add and move editable dropdown (#18589)
* add and move editable dropdown

* merge dropdowns

* merge dropdown cell factories

* add new column and hide in properties

* remove editable property
2022-03-03 20:23:20 -08:00
Alex Ma
be6b23eff0 [Loc] added small change to kernelRequiresConnection (#18627) 2022-03-03 16:25:26 -08:00
Cory Rivera
0ab4752643 Add new errorCode property to notebook errors to see if starting a notebook session failed. (#18617) 2022-03-03 14:05:54 -08:00
Charles Gagnon
10ff8aa116 Fix pinned app name (#18623)
* Fix pinned name on Windows

* fix distro
2022-03-03 12:43:28 -08:00
Neetu Singh
4f61be2495 Fixing telemetry (#18616)
* Fix Telemetry

* Removing unused imports
2022-03-03 11:39:52 -08:00
csigs
d5fa5fca3a LEGO: check in for main to temporary branch. (#18620) 2022-03-03 09:43:28 -08:00
Barbara Valdez
8b543d1d12 check find widget is not focused (#18506)
* remove logic to check that the find widget is visible
2022-03-02 16:57:37 -08:00
Alex Ma
87f1e26e39 [Loc] added changes for sql xlf (#18613) 2022-03-02 14:49:43 -08:00
Karl Burtram
9990f7c8e2 Disable smoke tests (#18611) 2022-03-02 12:56:33 -08:00
dependabot[bot]
d6a08a60d9 Bump plist from 3.0.1 to 3.0.4 (#18604)
Bumps [plist](https://github.com/TooTallNate/node-plist) from 3.0.1 to 3.0.4.
- [Release notes](https://github.com/TooTallNate/node-plist/releases)
- [Changelog](https://github.com/TooTallNate/plist.js/blob/master/History.md)
- [Commits](https://github.com/TooTallNate/node-plist/commits)

---
updated-dependencies:
- dependency-name: plist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-02 12:12:00 -08:00
csigs
628c8da716 LEGO: check in for main to temporary branch. (#18609) 2022-03-02 11:49:17 -08:00
Cory Rivera
79cda5cbe5 Add language picker to notebook cells. (#18601) 2022-03-02 10:25:55 -08:00
dependabot[bot]
c34de52a03 Bump plist from 3.0.1 to 3.0.4 in /build (#18607)
Bumps [plist](https://github.com/TooTallNate/node-plist) from 3.0.1 to 3.0.4.
- [Release notes](https://github.com/TooTallNate/node-plist/releases)
- [Changelog](https://github.com/TooTallNate/plist.js/blob/master/History.md)
- [Commits](https://github.com/TooTallNate/node-plist/commits)

---
updated-dependencies:
- dependency-name: plist
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-02 09:59:15 -08:00
dependabot[bot]
eb928e0b8f Bump url-parse from 1.5.8 to 1.5.10 in /extensions/notebook (#18608)
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.8 to 1.5.10.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.5.8...1.5.10)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-02 09:56:51 -08:00
Christopher Suh
84001139cc Update CI to windows-2019 (#18606)
* Revert "Update CI for new windows-latest (#18585)"

This reverts commit ebd4c6844b.

* update to windows-2019
2022-03-01 18:26:58 -08:00
Charles Gagnon
00f98457e8 Add a couple Notebook smoke tests for rendering links/imgs (#18600) 2022-03-01 13:14:19 -08:00
Christopher Suh
ebd4c6844b Update CI for new windows-latest (#18585)
* change to windows-2019

* fix for windows-latest
2022-02-28 18:20:12 -08:00
Charles Gagnon
3b4800de51 Remove duplicate AzureResource enum (#18501)
* Remove duplicate AzureResource enum

* comment
2022-02-28 12:19:38 -08:00
Charles Gagnon
7b5117b185 Fix yarn.lock version resolution (#18575) 2022-02-28 11:50:39 -08:00
Alex Ma
d36b755d6d [Loc] update to sql.xlf (#18574) 2022-02-28 10:18:26 -08:00
csigs
96729a4817 LEGO: check in for main to temporary branch. (#18564) 2022-02-28 09:50:09 -08:00
csigs
d8fd5b36f7 LEGO: check in for main to temporary branch. (#18509)
Co-authored-by: Alex Ma <alma1@microsoft.com>
2022-02-28 09:49:45 -08:00
Christopher Suh
dfa6799fcc Add label instructions for Needs Logs - Azure (#18559)
* added instructions for Needs Logs - Azure label

* formatting fixes
2022-02-27 15:21:16 -08:00
Benjin Dubishar
c64655ae71 Benjin/project update bug (#18532)
* correct result.success

* shifting success message to actually check success

* keying on errorMessage rather than success
2022-02-25 16:59:28 -08:00
erpett
5e93f2ca9b bumping version to 1.36 following 1.35's release (#18560) 2022-02-25 16:31:19 -08:00
erpett
7db7c2927c fixing links that got swapped (#18557) 2022-02-25 12:46:02 -08:00
Cory Rivera
ffdefd3b52 Add notebook extension support for .NET Interactive. (#18334)
* Also updated kernel dropdown to only include SQL aliased kernels when using SQL notebook provider.
2022-02-25 11:58:59 -08:00
Aasim Khan
02341088eb Renaming query plan to execution plan (#18551) 2022-02-25 00:49:34 -08:00
Charles Gagnon
8032f59d41 Update ubuntu-latest for update typings pipeline (#18552) 2022-02-24 16:02:38 -08:00
erpett
0193f8a6dc Updating Readme and Changelog for 1.35.0 release (#18543) 2022-02-24 14:46:25 -08:00
Charles Gagnon
23cbb98162 Fix Mac signing (#18534)
* Install .NET SDK for Mac signing

* Install runtime

* Specify 2.1.0

* Install SDK
2022-02-23 08:31:14 -08:00
Charles Gagnon
9b3d65b1d4 Bump url-parse (#18535) 2022-02-23 07:22:26 -08:00
Alan Ren
e2b4dd5a79 define the color in theme files (#18529) 2022-02-22 16:03:58 -08:00
Aasim Khan
19c7971630 Bringing back leftover changes (#18527) 2022-02-22 15:44:01 -08:00
Aasim Khan
5731366a1c Fixing query editor smoke test (#18515)
* Fixing query editor smoke test

* Fixing notification toast for telemetry opt out

* Adding SQL Carbon edit
2022-02-22 14:15:12 -08:00
Candice Ye
ef100b8e82 Bumped versions of arc and azcli to 1.0.0 for GA (#18516)
* Changed versions in package.jsons

* Bumped azdata version requirements to 1.35
2022-02-22 13:56:50 -08:00
Kim Santiago
7b92c9eb65 only show confirmation message for apply all changes, not for view changes in schema compare (#18520) 2022-02-22 13:33:24 -08:00
Charles Gagnon
5547c2baba Add AzureAccount service (#18502) 2022-02-22 09:00:07 -08:00
Alan Ren
40ee82ee3e highlight problematic property in the designer when error is selected (#18512)
* navigate to property when selecting error message

* use list component

* highlight problematic property

* remove unnecessary call

* comment

* comment
2022-02-21 20:49:12 -08:00
csigs
3c84575755 LEGO: check in for main to temporary branch. (#18503) 2022-02-21 12:21:12 -08:00
Aditya Bist
696db01dc8 Fix opt out prompt behavior (#18498)
* fix header

* fix product name
2022-02-18 15:53:59 -08:00
Karl Burtram
e0cb88599d Port - Restrict which sites out webview iframe can frame (#18495)
* protocol handler - normalize paths

* use `extUri` for normalizing paths

* :lipstick;

* Add content security policy to top level webview

This change hardens our webviews by adding a fairly restrictive csp to them. This CSP should only apply to the outer webview iframe, not to the inner iframe which is controlled by extensions

Co-authored-by: Benjamin Pasero <benjamin.pasero@microsoft.com>
Co-authored-by: Matt Bierner <matb@microsoft.com>
2022-02-18 15:12:21 -08:00
Aasim Khan
eff847f35a Removing extra toUrl call (#18492) 2022-02-18 14:49:02 -08:00
Alex Ma
2da0428454 [Loc] small update to sql xlf with table designer (#18489) 2022-02-18 13:31:05 -08:00
Alex Ma
1b63fec4e5 removed max_memory as it should be dynamically managed by sqlserver (#18481) 2022-02-18 12:32:57 -08:00
Karl Burtram
f137174719 Add mxgraph to thirdyparty notices (#18486) 2022-02-18 12:09:07 -08:00
Barbara Valdez
75d9246f5e Fix search experience in notebooks (#18474)
* fix search on notebooks

* keep focus on findwidget
2022-02-18 10:53:45 -08:00
Barbara Valdez
cbaffd0b0d fix section markdown and html link (#18478)
* fix section markdown and html link
2022-02-18 10:08:33 -08:00
Kim Santiago
b33afe3efb add back SDK style project template (#18448) 2022-02-18 09:54:10 -08:00
csigs
19f63ea88f LEGO: check in for main to temporary branch. (#18479) 2022-02-18 09:30:14 -08:00
Charles Gagnon
a1a1793221 Add timeout delay to Notebook cell connect (#18475) 2022-02-18 09:05:13 -08:00
Charles Gagnon
8da49ff14e Remove connection error popup notification (#18476)
* Remove connection error popup notification

* Fix compile
2022-02-18 09:04:13 -08:00
dependabot[bot]
f0ebc6ed60 Bump url-parse from 1.5.2 to 1.5.6 in /samples/sqlservices (#18473)
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.2 to 1.5.6.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.5.2...1.5.6)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-17 22:29:25 -08:00
Neetu Singh
aaf174e85c Update package.json with latest azdata version 1.35 (#18462)
* updating package.json with latest  azdata version 1.35

* bump sql-migration version to 0.1.13
2022-02-17 20:33:01 -08:00
Alan Ren
13dd74efcc fix a typo in table designer (#18464) 2022-02-17 18:24:24 -08:00
Christopher Suh
bafbca492b Clear account tokens before refresh (#18452)
* clear account tokens on refresh

* update refresh button after refresh
2022-02-17 17:25:05 -08:00
Lewis Sanchez
3472e229f1 Adds a tooltip title prop to the diagram node. (#18458)
* Adds a tooltip title prop to the diagram node.

* Updates azdataGraph package version to 0.0.16
2022-02-17 16:18:49 -08:00
Charles Gagnon
3a04235001 Add option to disable running integration tests (#18454) (#18456)
* Add option to disable running integration tests

* succeeded

(cherry picked from commit 932865ceee)
2022-02-17 15:26:22 -08:00
Vasu Bhog
0f385b386f Add SQL Binding Disconnected Scenario (#18440)
* disconnected scenario

* match parameters in mssql
2022-02-17 14:20:13 -08:00
Alan Ren
28ab7372d2 table designer validation support (#18438)
* table designer validation

* vbump sts
2022-02-17 13:07:19 -08:00
Alex Ma
e66192cbfd [loc] changes to sql-migration and sql xlfs (#18447) 2022-02-17 11:11:41 -08:00
Lewis Sanchez
63cff7a5ab Adds Operational Cost to Query Plan Vertex Labels. (#18435)
* Adds operational cost to graph node labels.

* Code clean up.
2022-02-17 10:09:24 -08:00
csigs
f1b23c96a9 LEGO: check in for main to temporary branch. (#18443) 2022-02-17 09:51:28 -08:00
Barbara Valdez
ede0937c2b fix holding down key scrolling issue (#18322)
* Stop propagation + debounce scroll

Co-authored-by: chgagnon <chgagnon@microsoft.com>
2022-02-17 00:25:01 -08:00
Candice Ye
83698a14b0 Fixed color contrast for error message in connect a dc window. (#18411)
* Fixed color contrast for error message in connect a dc window.

* Remove color check for error message

* Remove more unneeded checks

Co-authored-by: Charles Gagnon <chgagnon@microsoft.com>
2022-02-16 21:06:51 -08:00
Charles Gagnon
2be1394748 Fix contributed icons for ModelView trees not showing (#18430)
* Fix contributed icons for ModelView trees not showing

* Use asCssUrl
2022-02-16 18:10:45 -08:00
Neetu Singh
8135867e06 Updating readme with new gif that includes SKU Recommendation (#18432) 2022-02-16 17:58:34 -08:00
Barbara Valdez
87d5da00bf Fix on click edit mode states (#18321)
* fix click code cell

* modified editmode when updating active cell
2022-02-16 15:52:05 -08:00
Aasim Khan
678f2e3878 Fixing the height of the query plan (#18409)
* Fixing the height of the query plan

* Fixing layout issues
2022-02-16 15:44:33 -08:00
Aasim Khan
81e8eb9a82 Adding zoom button (#18407)
* Adding zoom button

* Fixing string
2022-02-16 15:26:14 -08:00
Aasim Khan
fe360afec7 Fixing context menu strings (#18404)
* Fixing context menu strings

* Fixing string
2022-02-16 15:21:35 -08:00
Neetu Singh
80c8b06ec8 [SKU Recommendation] Adding telemetry for errors happening during data collection/ get recommendation and telemetry (#18345)
* Adding telemetry for errors happening during data collection/ telemetry for sku recommendation

* log and error happended during get sku recommendation

* Resolving comments from PR https://github.com/microsoft/azuredatastudio/pull/18252. 1) Adding click and close events to dispoable collection to avoid leaks. 2) Adding readable constant for number representing minutes.

* Changes - 1) updating migration workflow strings, 2) adding more onclick events to disposable collection.

* Remove PaaS, IaaS terms from string

* Changes -
1) Renamed 'Saved assessment result' to 'saved session'.
2) Removed Title from 'saved session' page.
3) Added stop data collection on migration start.
2022-02-16 14:44:28 -08:00
Alan Ren
7ff42eeb08 make sure the content is not undefined (#18406) 2022-02-16 13:51:50 -08:00
Charles Gagnon
3dbd5ac2c1 Bump url-parse (#18422) 2022-02-16 13:09:19 -08:00
csigs
3c321ee8b7 LEGO: check in for main to temporary branch. (#18419) 2022-02-16 12:22:32 -08:00
csigs
f6128d262b LEGO: check in for main to temporary branch. (#18417) 2022-02-16 12:21:59 -08:00
Kim Santiago
d24a289af5 fix SDK style projects not being able to find system dacpacs (#18218)
* fix SDK style projects not being able to find system dacpacs

* fix tests
2022-02-16 09:36:01 -08:00
Alan Ren
89cc59a2fd avoid auto language detection for sql editor (#18402)
* avoid auto lang detection for sql editor

* update comment
2022-02-15 17:11:43 -08:00
Aasim Khan
25f563229f Adding tooltips and fixing spacing (#18400) 2022-02-15 16:24:40 -08:00
Lewis Sanchez
33ea2d8ee6 azdataGraph version bump to 0.0.15 (#18388)
* azdataGraph version bump to 0.0.15

* Updates azdataGraph version in remote package.json

* Updates azdataGraph version in remote web package.json
2022-02-15 11:57:55 -08:00
Alex Ma
9e8b01fd1e [Loc] small update to sql-database-projects xlf (#18396) 2022-02-15 11:54:03 -08:00
Alex Ma
bb468a5b98 Small update to the changelog (#18369) 2022-02-15 09:50:59 -08:00
Alex Ma
9a28d47c5b Added small fix for locFunc (#18364) 2022-02-14 17:21:46 -08:00
Alex Ma
45763e12b4 Update to langpacks and xlfs for February Release, (#18354)
* Update to langpacks and xlfs

* fixed id for git
2022-02-14 16:36:57 -08:00
Aasim Khan
316c6a536f Fixing graph editing (#18361) 2022-02-14 16:34:30 -08:00
Charles Gagnon
f5392e3c8f Bump ansi_up (#18190) 2022-02-14 16:06:23 -08:00
Aasim Khan
4dd59c6b8d Using proper zoom icon (#18338) 2022-02-14 15:38:55 -08:00
Z Chen
9e574ae602 Database Projects - Add existing file (#18066)
* Add existing file to sqlproj

* Address PR comments

* Fix failing test

* Add convertSlashesForSqlProj to test failure
2022-02-14 15:04:57 -08:00
dependabot[bot]
1dd7e93063 Bump ajv from 6.12.0 to 6.12.6 in /extensions/mssql (#18316)
Bumps [ajv](https://github.com/ajv-validator/ajv) from 6.12.0 to 6.12.6.
- [Release notes](https://github.com/ajv-validator/ajv/releases)
- [Commits](https://github.com/ajv-validator/ajv/compare/v6.12.0...v6.12.6)

---
updated-dependencies:
- dependency-name: ajv
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-14 14:19:33 -08:00
dependabot[bot]
13276cf52e Bump follow-redirects from 1.14.7 to 1.14.8 in /extensions/azurecore (#18350)
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-14 11:59:27 -08:00
dependabot[bot]
baa6e4b380 Bump follow-redirects in /extensions/github-authentication (#18348)
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-14 11:59:07 -08:00
Alex Ma
3bc5306258 [Loc] update to sql.xlf and sql-migration (#18352) 2022-02-14 11:39:08 -08:00
csigs
c45cfaf01b LEGO: check in for main to temporary branch. (#18347)
Co-authored-by: Alex Ma <alma1@microsoft.com>
2022-02-14 11:04:35 -08:00
dependabot[bot]
0612a8ac35 Bump follow-redirects in /extensions/resource-deployment (#18349)
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-14 10:38:28 -08:00
1329 changed files with 165485 additions and 47556 deletions

View File

@@ -8,17 +8,17 @@
**/semver/**
**/test/**/*.js
**/node_modules/**
**/vscode-api-tests/testWorkspace/**
**/vscode-api-tests/testWorkspace2/**
**/extensions/**/out/**
**/extensions/**/build/**
**/big-data-cluster/src/bigDataCluster/controller/apiGenerated.ts
**/big-data-cluster/src/bigDataCluster/controller/clusterApiGenerated2.ts
**/extensions/markdown-language-features/media/**
**/extensions/markdown-language-features/notebook-out/**
**/extensions/typescript-basics/test/colorize-fixtures/**
**/extensions/**/dist/**
**/extensions/typescript-language-features/test-workspace/**
/extensions/**/out/**
/extensions/**/build/**
/extensions/big-data-cluster/src/bigDataCluster/controller/apiGenerated.ts
/extensions/big-data-cluster/src/bigDataCluster/controller/clusterApiGenerated2.ts
/extensions/markdown-language-features/media/**
/extensions/markdown-language-features/notebook-out/**
/extensions/typescript-basics/test/colorize-fixtures/**
/extensions/**/dist/**
/extensions/types
/extensions/typescript-language-features/test-workspace/**
/test/automation/out
# These files are not linted by `yarn eslint`, so we exclude them from being linted in the editor.
# This ensures that if we add new rules and they pass CI, the are also no errors in the editor.

View File

@@ -212,6 +212,8 @@
"restrictions": [
"vs/nls",
"azdata",
"mssql",
"azurecore",
"**/{vs,sql}/base/common/**",
"**/{vs,sql}/base/parts/*/common/**",
"**/{vs,sql}/platform/*/common/**"
@@ -472,6 +474,8 @@
"restrictions": [
"vscode",
"azdata",
"mssql",
"azurecore",
"vs/nls",
"**/{vs,sql}/base/common/**",
"**/{vs,sql}/platform/*/common/**",
@@ -550,6 +554,7 @@
"**/{vs,sql}/workbench/common/**",
"**/{vs,sql}/workbench/services/**/common/**",
"**/{vs,sql}/workbench/api/**/common/**",
"**/{vs,sql}/workbench/contrib/**/common/**",
"vs/workbench/contrib/files/common/editors/fileEditorInput", // this should be fine, it only accesses constants from contrib
"vscode-textmate",
"vscode-oniguruma",
@@ -577,6 +582,8 @@
"vs/nls",
"vs/css!./**/*",
"azdata",
"mssql",
"azurecore",
"vscode",
"**/{vs,sql}/base/**/{common,browser,worker}/**",
"**/{vs,sql}/platform/**/{common,browser}/**",
@@ -585,6 +592,7 @@
"**/{vs,sql}/workbench/{common,browser}/**",
"**/{vs,sql}/workbench/api/{common,browser}/**",
"**/{vs,sql}/workbench/services/**/{common,browser}/**",
"**/{vs,sql}/workbench/contrib/**/common/**",
"vscode-textmate",
"vscode-oniguruma",
"iconv-lite-umd",
@@ -1143,6 +1151,7 @@
"src/sql/base/browser/ui/table/plugins/checkboxSelectColumn.plugin.ts",
"src/sql/base/browser/ui/table/plugins/headerFilter.plugin.ts",
"src/sql/base/browser/ui/table/plugins/rowDetailView.ts",
"src/sql/base/browser/ui/table/plugins/rowMoveManager.plugin.ts",
"src/sql/base/browser/ui/table/plugins/rowSelectionModel.plugin.ts",
"src/sql/workbench/services/notebook/browser/outputs/factories.ts",
"src/sql/workbench/services/notebook/browser/outputs/mimemodel.ts",

1
.github/CODEOWNERS vendored
View File

@@ -11,6 +11,7 @@
/extensions/query-history/ @Charles-Gagnon
/extensions/resource-deployment/ @Charles-Gagnon
/extensions/schema-compare/ @kisantia
/extensions/sql-bindings/ @vasubhog @Charles-Gagnon @lucyzhang929 @chlafreniere @MaddyDev
/extensions/sql-database-projects/ @Benjin @kisantia
/extensions/mssql/config.json @Charles-Gagnon @alanrenmsft @kburtram

View File

@@ -2,8 +2,9 @@
Needs Logs:
comment: "We need more info to debug your particular issue. If you could attach your logs to the issue (ensure no private data is in them), it would help us fix the issue much faster.
First open the Settings page, find the `Mssql: Tracing Level` setting and change that to `All` then restart ADS and repro your issue.
There are two types of logs to collect:
Next there are two types of logs to collect:
**Console Logs**
@@ -27,6 +28,22 @@ There are two types of logs to collect:
- This will open the log folder locally. Please zip up this folder and attach it to the issue."
# actions for Needs Logs - Azure label
Needs Logs - Azure:
comment: "We need more info to debug your Azure Active Directory issue. If you could attach your logs to the issue (ensure no private data is in them), it would help us fix the issue much faster.
- In the settings menu, find the setting titled `Azure: Logging Level` and select the `Verbose` option
- Run the process that produces your error
- Open command palette (Click **View** -> **Command Palette**)
- Run the command: **`Developer: Open Logs Folder`**
- Follow this path to find the Azure Accounts log file: `[default log folder]/exthost1/output_logging_[earliest timestamp]/#-Azure Acounts.log`
- Please attach the Azure-Accounts.log file to the issue."
# actions for Out of Scope label
Out of Scope:
comment: "Thank you for opening this suggestion! This enhancement is not planned in our

View File

@@ -13,7 +13,7 @@ on:
jobs:
windows:
name: Windows
runs-on: windows-latest
runs-on: windows-2019
timeout-minutes: 30
env:
CHILD_CONCURRENCY: "1"
@@ -131,12 +131,15 @@ jobs:
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
run: yarn --frozen-lockfile --network-timeout 180000
# Don't inline source maps so that we generate code coverage for ts files
- name: Compile and Download
run: yarn npm-run-all --max_old_space_size=4095 -lp compile "electron x64" playwright-install download-builtin-extensions
env:
SQL_NO_INLINE_SOURCEMAP: 1
- name: Run Unit Tests (Electron)
id: electron-unit-tests
run: DISPLAY=:10 ./scripts/test.sh --runGlob "**/sql/**/*.test.js" # {{SQL CARBON EDIT}} Run only our tests with coverage. Disable for now since it's currently broken --coverage
run: DISPLAY=:10 ./scripts/test.sh --runGlob "**/sql/**/*.test.js" --coverage
- name: Run Extension Unit Tests (Electron)
id: electron-extension-unit-tests

View File

@@ -1,3 +1,3 @@
disturl "https://electronjs.org/headers"
target "13.5.0"
target "13.6.6"
runtime "electron"

View File

@@ -1,37 +1,10 @@
# Change Log
## Version 1.34.0
* Release date: December 15, 2021
## Version 1.36.1
* Release date: April 22, 2022
* Release status: General Availability
## What's new in this version
* New Features:
* Added “Currently restoring backup file” in the migration progress details page of Azure SQL Migration extension when backup files location is Azure Storage blob container
* Enhancements to diagnostics in Azure SQL Migration extension
* Support for project build with .NET 6 in SQL Database Projects extension
* Publish to container in SQL Database Projects extension
* Undo and redo support for notebook cell-level operations
* Extension Updates:
* Azure SQL Migration
* Langpacks
* SQL Database Projects
* Bug Fixes:
* Fix for multiple database migrations when using network share as backup files location in Azure SQL Migration extension
* Fix for multiple database migrations when using blob storage containers as backup files location in Azure SQL Migration extension
* Fix to pre-populate target database names in the migration wizard in Azure SQL Migration extension
* Fix to column sorting in grids where the presence of null values could lead to unexpected results
* Fix for Python upgrades when two or more notebooks were open
## Version 1.33.1
* Release date: Nov 4, 2021
* Release status: General Availability
## Hotfix release
- Fix for [#16535 Unable to See Saved Connections in Restricted Mode](https://github.com/microsoft/azuredatastudio/issues/17535)
- Fix for [#17579 Can't type in Notebook code cell after editing text cell](https://github.com/microsoft/azuredatastudio/issues/17579)
- April Hotfix addressing these issues https://github.com/microsoft/azuredatastudio/milestone/88?closed=1.
| Platform |
| --------------------------------------- |
@@ -43,31 +16,107 @@
| [Linux RPM][linux-rpm] |
| [Linux DEB][linux-deb] |
[win-user]: https://go.microsoft.com/fwlink/?linkid=2176805
[win-system]: https://go.microsoft.com/fwlink/?linkid=2175910
[win-zip]: https://go.microsoft.com/fwlink/?linkid=2176806
[osx-zip]: https://go.microsoft.com/fwlink/?linkid=2176807
[linux-zip]: https://go.microsoft.com/fwlink/?linkid=2176505
[linux-rpm]: https://go.microsoft.com/fwlink/?linkid=2176005
[linux-deb]: https://go.microsoft.com/fwlink/?linkid=2176006
[win-user]: https://go.microsoft.com/fwlink/?linkid=2193235
[win-system]: https://go.microsoft.com/fwlink/?linkid=2193326
[win-zip]: https://go.microsoft.com/fwlink/?linkid=2193236
[osx-zip]: https://go.microsoft.com/fwlink/?linkid=2192971
[linux-zip]: https://go.microsoft.com/fwlink/?linkid=2193237
[linux-rpm]: https://go.microsoft.com/fwlink/?linkid=2193238
[linux-deb]: https://go.microsoft.com/fwlink/?linkid=2193327
## Version 1.36.2
* Release date: May 20, 2022
* Release status: General Availability
## What's new in this version
- Fix connectivity issue with PBI data source
- Fix query plan zoom and icon issues
- Issues fixed in this release https://github.com/microsoft/azuredatastudio/milestone/89?closed=1
## Version 1.36.1
* Release date: April 22, 2022
* Release status: General Availability
## What's new in this version
* April Hotfix addressing these issues https://github.com/microsoft/azuredatastudio/milestone/88?closed=1.
* Hotfix RCA - https://github.com/microsoft/azuredatastudio/wiki/ADS-April-2022-Hotfix-RCA
## Version 1.36.0
* Release date: April 20, 2022
* Release status: General Availability
## What's new in this version
- General Availability of the Azure SQL Migration Extension for ADS
- Support for .NET Interactive Notebooks Extension
- New Table Designer Features including support for System Versioned, Graph and Memory Optomized Tables
- Query Plan Viewer Updates includign warning and parallelism icons, the option to disable tooltips and support for opening .sqlplan files
- Improvements in SQL Projects and Schema Compare
## Version 1.35.1
* Release date: March 17, 2022
* Release status: General Availability
## Hotfix release
- Fix for [Excel number format #18615](https://github.com/microsoft/azuredatastudio/issues/18615)
- Fix for [Geometry Data Type Returned as Unknown Charset in Results Grid #18630](https://github.com/microsoft/azuredatastudio/issues/18630)
## Version 1.35.0
* Release date: February 24, 2022
* Release status: General Availability
## What's new in this version
* New Features:
* Table Designer - Added functionality for creation and management of tables for SQL Servers. Built using DacFx framework
* Query Plan Viewer - Added functionality for users to view a graphic view of estimated and actual query plans without need for an extension
* Azure Arc Extension - Updated the Data Controller deployment wizard and the SQL Managed Instance - Azure Arc deployment wizard to reflect the deployment experience in Azure Portal
* Bug Fixes:
* Azure Arc Extension - SQL Managed Instance-Azure Arc is now fixed for both indirect connectivity mode and direct connectivity mode
* Notebooks - Support for keyboard navigation between cells to minimize mouse clicking
## Version 1.34.0
* Release date: December 15, 2021
* Release status: General Availability
## What's new in this version
* New Features:
* Added “Currently restoring backup file” in the migration progress details page of Azure SQL Migration extension when backup files location is Azure Storage blob container
* Enhancements to diagnostics in Azure SQL Migration extension
* Support for project build with .NET 6 in SQL Database Projects extension
* Publish to container in SQL Database Projects extension
* Undo and redo support for notebook cell-level operations
* Extension Updates:
* Azure SQL Migration
* Langpacks
* SQL Database Projects
* Bug Fixes:
* Fix for multiple database migrations when using network share as backup files location in Azure SQL Migration extension
* Fix for multiple database migrations when using blob storage containers as backup files location in Azure SQL Migration extension
* Fix to pre-populate target database names in the migration wizard in Azure SQL Migration extension
* Fix to column sorting in grids where the presence of null values could lead to unexpected results
* Fix for Python upgrades when two or more notebooks were open
## Version 1.33.1
* Release date: Nov 4, 2021
* Release status: General Availability
## Hotfix release
- Fix for [#16535 Unable to See Saved Connections in Restricted Mode](https://github.com/microsoft/azuredatastudio/issues/17535)
- Fix for [#17579 Can't type in Notebook code cell after editing text cell](https://github.com/microsoft/azuredatastudio/issues/17579)
## Version 1.33.0
* Release date: October 27, 2021
* Release status: General Availability
## What's new in this version
* New Notebook Features:
* Notebook Views
* Split cell support
* Keyboard shortcuts for Markdown Toolbar Cells
* Notebook Views
* Split cell support
* Keyboard shortcuts for Markdown Toolbar Cells
* Ctrl/Cmd + B = Bold Text
* Ctrl/Cmd + I = Italicize Text
* Ctrl/Cmd + U = Underline Text
* Ctrl/Cmd + Shift + K = Add Code Block
* Ctrl/Cmd + Shift + H = Highlight Text
* Book improvements
* Book improvements
* Add a new section
* Drag and Drop
* Extension Updates:
* Import
* Langpacks
@@ -83,8 +132,8 @@
* Release date: August 18, 2021
* Release status: General Availability
* Extension Updates:
* Arc/Az CLI extensions - Azure Arc extension now uses Azure CLI instead of Azure Data CLI for deploying and interacting with Azure Arc
instances
* Arc/Az CLI extensions - Azure Arc extension now uses Azure CLI instead of Azure Data CLI for deploying and interacting with Azure Arc
instances
* Langpacks
* SQL Database Projects
* Azure Monitor

View File

@@ -131,10 +131,10 @@ Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the [Source EULA](LICENSE.txt).
[win-user]: https://go.microsoft.com/fwlink/?linkid=2183280
[win-system]: https://go.microsoft.com/fwlink/?linkid=2183423
[win-zip]: https://go.microsoft.com/fwlink/?linkid=2183190
[osx-zip]: https://go.microsoft.com/fwlink/?linkid=2183189
[linux-zip]: https://go.microsoft.com/fwlink/?linkid=2183277
[linux-rpm]: https://go.microsoft.com/fwlink/?linkid=2183342
[linux-deb]: https://go.microsoft.com/fwlink/?linkid=2183341
[win-user]: https://go.microsoft.com/fwlink/?linkid=2193235
[win-system]: https://go.microsoft.com/fwlink/?linkid=2193326
[win-zip]: https://go.microsoft.com/fwlink/?linkid=2193236
[osx-zip]: https://go.microsoft.com/fwlink/?linkid=2192971
[linux-zip]: https://go.microsoft.com/fwlink/?linkid=2193237
[linux-rpm]: https://go.microsoft.com/fwlink/?linkid=2193238
[linux-deb]: https://go.microsoft.com/fwlink/?linkid=2193327

View File

@@ -1,17 +0,0 @@
{
"env": {
"commonjs": true,
"es6": true,
"node": true
},
"extends": "eslint:recommended",
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"parserOptions": {
"ecmaVersion": 2018
},
"rules": {
}
}

View File

@@ -1,2 +0,0 @@
node_modules
*.js.map

View File

@@ -1,96 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
export interface GitHub {
query(query: Query): AsyncIterableIterator<GitHubIssue[]>
hasWriteAccess(user: User): Promise<boolean>
repoHasLabel(label: string): Promise<boolean>
createLabel(label: string, color: string, description: string): Promise<void>
deleteLabel(label: string): Promise<void>
readConfig(path: string): Promise<any>
createIssue(owner: string, repo: string, title: string, body: string): Promise<void>
releaseContainsCommit(release: string, commit: string): Promise<boolean>
}
export interface GitHubIssue extends GitHub {
getIssue(): Promise<Issue>
postComment(body: string): Promise<void>
deleteComment(id: number): Promise<void>
getComments(last?: boolean): AsyncIterableIterator<Comment[]>
closeIssue(): Promise<void>
lockIssue(): Promise<void>
setMilestone(milestoneId: number): Promise<void>
addLabel(label: string): Promise<void>
removeLabel(label: string): Promise<void>
addAssignee(assignee: string): Promise<void>
getClosingInfo(): Promise<{ hash: string | undefined; timestamp: number } | undefined>
}
type SortVar =
| 'comments'
| 'reactions'
| 'reactions-+1'
| 'reactions--1'
| 'reactions-smile'
| 'reactions-thinking_face'
| 'reactions-heart'
| 'reactions-tada'
| 'interactions'
| 'created'
| 'updated'
type SortOrder = 'asc' | 'desc'
export type Reactions = {
'+1': number
'-1': number
laugh: number
hooray: number
confused: number
heart: number
rocket: number
eyes: number
}
export interface User {
name: string
isGitHubApp?: boolean
}
export interface Comment {
author: User
body: string
id: number
timestamp: number
}
export interface Issue {
author: User
body: string
title: string
labels: string[]
open: boolean
locked: boolean
number: number
numComments: number
reactions: Reactions
milestoneId: number | null
assignee?: string
createdAt: number
updatedAt: number
closedAt?: number
}
export interface Query {
q: string
sort?: SortVar
order?: SortOrder
}

View File

@@ -1,293 +0,0 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
const core_1 = require("@actions/core");
const github_1 = require("@actions/github");
const child_process_1 = require("child_process");
const utils_1 = require("../utils/utils");
class OctoKit {
constructor(token, params, options = { readonly: false }) {
this.token = token;
this.params = params;
this.options = options;
// when in readonly mode, record labels just-created so at to not throw unneccesary errors
this.mockLabels = new Set();
this.writeAccessCache = {};
this.octokit = new github_1.GitHub(token);
}
async *query(query) {
const q = query.q + ` repo:${this.params.owner}/${this.params.repo}`;
console.log(`Querying for ${q}:`);
const options = this.octokit.search.issuesAndPullRequests.endpoint.merge({
...query,
q,
per_page: 100,
headers: { Accept: 'application/vnd.github.squirrel-girl-preview+json' },
});
let pageNum = 0;
const timeout = async () => {
if (pageNum < 2) {
/* pass */
}
else if (pageNum < 4) {
await new Promise((resolve) => setTimeout(resolve, 3000));
}
else {
await new Promise((resolve) => setTimeout(resolve, 30000));
}
};
for await (const pageResponse of this.octokit.paginate.iterator(options)) {
await timeout();
await utils_1.logRateLimit(this.token);
const page = pageResponse.data;
console.log(`Page ${++pageNum}: ${page.map(({ number }) => number).join(' ')}`);
yield page.map((issue) => new OctoKitIssue(this.token, this.params, this.octokitIssueToIssue(issue)));
}
}
async createIssue(owner, repo, title, body) {
core_1.debug(`Creating issue \`${title}\` on ${owner}/${repo}`);
if (!this.options.readonly)
await this.octokit.issues.create({ owner, repo, title, body });
}
octokitIssueToIssue(issue) {
var _a, _b, _c, _d, _e, _f;
return {
author: { name: issue.user.login, isGitHubApp: issue.user.type === 'Bot' },
body: issue.body,
number: issue.number,
title: issue.title,
labels: issue.labels.map((label) => label.name),
open: issue.state === 'open',
locked: issue.locked,
numComments: issue.comments,
reactions: issue.reactions,
assignee: (_b = (_a = issue.assignee) === null || _a === void 0 ? void 0 : _a.login) !== null && _b !== void 0 ? _b : (_d = (_c = issue.assignees) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.login,
milestoneId: (_f = (_e = issue.milestone) === null || _e === void 0 ? void 0 : _e.number) !== null && _f !== void 0 ? _f : null,
createdAt: +new Date(issue.created_at),
updatedAt: +new Date(issue.updated_at),
closedAt: issue.closed_at ? +new Date(issue.closed_at) : undefined,
};
}
async hasWriteAccess(user) {
if (user.name in this.writeAccessCache) {
core_1.debug('Got permissions from cache for ' + user);
return this.writeAccessCache[user.name];
}
core_1.debug('Fetching permissions for ' + user);
const permissions = (await this.octokit.repos.getCollaboratorPermissionLevel({
...this.params,
username: user.name,
})).data.permission;
return (this.writeAccessCache[user.name] = permissions === 'admin' || permissions === 'write');
}
async repoHasLabel(name) {
try {
await this.octokit.issues.getLabel({ ...this.params, name });
return true;
}
catch (err) {
if (err.status === 404) {
return this.options.readonly && this.mockLabels.has(name);
}
throw err;
}
}
async createLabel(name, color, description) {
core_1.debug('Creating label ' + name);
if (!this.options.readonly)
await this.octokit.issues.createLabel({ ...this.params, color, description, name });
else
this.mockLabels.add(name);
}
async deleteLabel(name) {
core_1.debug('Deleting label ' + name);
try {
if (!this.options.readonly)
await this.octokit.issues.deleteLabel({ ...this.params, name });
}
catch (err) {
if (err.status === 404) {
return;
}
throw err;
}
}
async readConfig(path) {
core_1.debug('Reading config at ' + path);
const repoPath = `.github/${path}.json`;
const data = (await this.octokit.repos.getContents({ ...this.params, path: repoPath })).data;
if ('type' in data && data.type === 'file') {
if (data.encoding === 'base64' && data.content) {
return JSON.parse(Buffer.from(data.content, 'base64').toString('utf-8'));
}
throw Error(`Could not read contents "${data.content}" in encoding "${data.encoding}"`);
}
throw Error('Found directory at config path when expecting file' + JSON.stringify(data));
}
async releaseContainsCommit(release, commit) {
if (utils_1.getInput('commitReleasedDebuggingOverride')) {
return true;
}
return new Promise((resolve, reject) => child_process_1.exec(`git -C ./repo merge-base --is-ancestor ${commit} ${release}`, (err) => !err || err.code === 1 ? resolve(!err) : reject(err)));
}
}
exports.OctoKit = OctoKit;
class OctoKitIssue extends OctoKit {
constructor(token, params, issueData, options = { readonly: false }) {
super(token, params, options);
this.params = params;
this.issueData = issueData;
}
async addAssignee(assignee) {
core_1.debug('Adding assignee ' + assignee + ' to ' + this.issueData.number);
if (!this.options.readonly) {
await this.octokit.issues.addAssignees({
...this.params,
issue_number: this.issueData.number,
assignees: [assignee],
});
}
}
async closeIssue() {
core_1.debug('Closing issue ' + this.issueData.number);
if (!this.options.readonly)
await this.octokit.issues.update({
...this.params,
issue_number: this.issueData.number,
state: 'closed',
});
}
async lockIssue() {
core_1.debug('Locking issue ' + this.issueData.number);
if (!this.options.readonly)
await this.octokit.issues.lock({ ...this.params, issue_number: this.issueData.number });
}
async getIssue() {
if (isIssue(this.issueData)) {
core_1.debug('Got issue data from query result ' + this.issueData.number);
return this.issueData;
}
console.log('Fetching issue ' + this.issueData.number);
const issue = (await this.octokit.issues.get({
...this.params,
issue_number: this.issueData.number,
mediaType: { previews: ['squirrel-girl'] },
})).data;
return (this.issueData = this.octokitIssueToIssue(issue));
}
async postComment(body) {
core_1.debug(`Posting comment ${body} on ${this.issueData.number}`);
if (!this.options.readonly)
await this.octokit.issues.createComment({
...this.params,
issue_number: this.issueData.number,
body,
});
}
async deleteComment(id) {
core_1.debug(`Deleting comment ${id} on ${this.issueData.number}`);
if (!this.options.readonly)
await this.octokit.issues.deleteComment({
owner: this.params.owner,
repo: this.params.repo,
comment_id: id,
});
}
async setMilestone(milestoneId) {
core_1.debug(`Setting milestone for ${this.issueData.number} to ${milestoneId}`);
if (!this.options.readonly)
await this.octokit.issues.update({
...this.params,
issue_number: this.issueData.number,
milestone: milestoneId,
});
}
async *getComments(last) {
core_1.debug('Fetching comments for ' + this.issueData.number);
const response = this.octokit.paginate.iterator(this.octokit.issues.listComments.endpoint.merge({
...this.params,
issue_number: this.issueData.number,
per_page: 100,
...(last ? { per_page: 1, page: (await this.getIssue()).numComments } : {}),
}));
for await (const page of response) {
yield page.data.map((comment) => ({
author: { name: comment.user.login, isGitHubApp: comment.user.type === 'Bot' },
body: comment.body,
id: comment.id,
timestamp: +new Date(comment.created_at),
}));
}
}
async addLabel(name) {
core_1.debug(`Adding label ${name} to ${this.issueData.number}`);
if (!(await this.repoHasLabel(name))) {
throw Error(`Action could not execute becuase label ${name} is not defined.`);
}
if (!this.options.readonly)
await this.octokit.issues.addLabels({
...this.params,
issue_number: this.issueData.number,
labels: [name],
});
}
async removeLabel(name) {
core_1.debug(`Removing label ${name} from ${this.issueData.number}`);
try {
if (!this.options.readonly)
await this.octokit.issues.removeLabel({
...this.params,
issue_number: this.issueData.number,
name,
});
}
catch (err) {
if (err.status === 404) {
console.log(`Label ${name} not found on issue`);
return;
}
throw err;
}
}
async getClosingInfo() {
var _a;
if ((await this.getIssue()).open) {
return;
}
const options = this.octokit.issues.listEventsForTimeline.endpoint.merge({
...this.params,
issue_number: this.issueData.number,
});
let closingCommit;
for await (const event of this.octokit.paginate.iterator(options)) {
const timelineEvents = event.data;
for (const timelineEvent of timelineEvents) {
if (timelineEvent.event === 'closed') {
closingCommit = {
hash: (_a = timelineEvent.commit_id) !== null && _a !== void 0 ? _a : undefined,
timestamp: +new Date(timelineEvent.created_at),
};
}
}
}
console.log(`Got ${closingCommit} as closing commit of ${this.issueData.number}`);
return closingCommit;
}
}
exports.OctoKitIssue = OctoKitIssue;
function isIssue(object) {
const isIssue = 'author' in object &&
'body' in object &&
'title' in object &&
'labels' in object &&
'open' in object &&
'locked' in object &&
'number' in object &&
'numComments' in object &&
'reactions' in object &&
'milestoneId' in object;
return isIssue;
}

View File

@@ -1,336 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { debug } from '@actions/core'
import { GitHub as GitHubAPI } from '@actions/github'
import { Octokit } from '@octokit/rest'
import { exec } from 'child_process'
import { getInput, logRateLimit } from '../utils/utils'
import { Comment, GitHub, GitHubIssue, Issue, Query, User } from './api'
export class OctoKit implements GitHub {
protected octokit: GitHubAPI
// when in readonly mode, record labels just-created so at to not throw unneccesary errors
protected mockLabels: Set<string> = new Set()
constructor(
private token: string,
protected params: { repo: string; owner: string },
protected options: { readonly: boolean } = { readonly: false },
) {
this.octokit = new GitHubAPI(token)
}
async *query(query: Query): AsyncIterableIterator<GitHubIssue[]> {
const q = query.q + ` repo:${this.params.owner}/${this.params.repo}`
console.log(`Querying for ${q}:`)
const options = this.octokit.search.issuesAndPullRequests.endpoint.merge({
...query,
q,
per_page: 100,
headers: { Accept: 'application/vnd.github.squirrel-girl-preview+json' },
})
let pageNum = 0
const timeout = async () => {
if (pageNum < 2) {
/* pass */
} else if (pageNum < 4) {
await new Promise((resolve) => setTimeout(resolve, 3000))
} else {
await new Promise((resolve) => setTimeout(resolve, 30000))
}
}
for await (const pageResponse of this.octokit.paginate.iterator(options)) {
await timeout()
await logRateLimit(this.token)
const page: Array<Octokit.SearchIssuesAndPullRequestsResponseItemsItem> = pageResponse.data
console.log(`Page ${++pageNum}: ${page.map(({ number }) => number).join(' ')}`)
yield page.map(
(issue) => new OctoKitIssue(this.token, this.params, this.octokitIssueToIssue(issue)),
)
}
}
async createIssue(owner: string, repo: string, title: string, body: string): Promise<void> {
debug(`Creating issue \`${title}\` on ${owner}/${repo}`)
if (!this.options.readonly) await this.octokit.issues.create({ owner, repo, title, body })
}
protected octokitIssueToIssue(
issue: Octokit.IssuesGetResponse | Octokit.SearchIssuesAndPullRequestsResponseItemsItem,
): Issue {
return {
author: { name: issue.user.login, isGitHubApp: issue.user.type === 'Bot' },
body: issue.body,
number: issue.number,
title: issue.title,
labels: (issue.labels as Octokit.IssuesGetLabelResponse[]).map((label) => label.name),
open: issue.state === 'open',
locked: (issue as any).locked,
numComments: issue.comments,
reactions: (issue as any).reactions,
assignee: issue.assignee?.login ?? (issue as any).assignees?.[0]?.login,
milestoneId: issue.milestone?.number ?? null,
createdAt: +new Date(issue.created_at),
updatedAt: +new Date(issue.updated_at),
closedAt: issue.closed_at ? +new Date((issue.closed_at as unknown) as string) : undefined,
}
}
private writeAccessCache: Record<string, boolean> = {}
async hasWriteAccess(user: User): Promise<boolean> {
if (user.name in this.writeAccessCache) {
debug('Got permissions from cache for ' + user)
return this.writeAccessCache[user.name]
}
debug('Fetching permissions for ' + user)
const permissions = (
await this.octokit.repos.getCollaboratorPermissionLevel({
...this.params,
username: user.name,
})
).data.permission
return (this.writeAccessCache[user.name] = permissions === 'admin' || permissions === 'write')
}
async repoHasLabel(name: string): Promise<boolean> {
try {
await this.octokit.issues.getLabel({ ...this.params, name })
return true
} catch (err) {
if (err.status === 404) {
return this.options.readonly && this.mockLabels.has(name)
}
throw err
}
}
async createLabel(name: string, color: string, description: string): Promise<void> {
debug('Creating label ' + name)
if (!this.options.readonly)
await this.octokit.issues.createLabel({ ...this.params, color, description, name })
else this.mockLabels.add(name)
}
async deleteLabel(name: string): Promise<void> {
debug('Deleting label ' + name)
try {
if (!this.options.readonly) await this.octokit.issues.deleteLabel({ ...this.params, name })
} catch (err) {
if (err.status === 404) {
return
}
throw err
}
}
async readConfig(path: string): Promise<any> {
debug('Reading config at ' + path)
const repoPath = `.github/${path}.json`
const data = (await this.octokit.repos.getContents({ ...this.params, path: repoPath })).data
if ('type' in data && data.type === 'file') {
if (data.encoding === 'base64' && data.content) {
return JSON.parse(Buffer.from(data.content, 'base64').toString('utf-8'))
}
throw Error(`Could not read contents "${data.content}" in encoding "${data.encoding}"`)
}
throw Error('Found directory at config path when expecting file' + JSON.stringify(data))
}
async releaseContainsCommit(release: string, commit: string): Promise<boolean> {
if (getInput('commitReleasedDebuggingOverride')) {
return true
}
return new Promise((resolve, reject) =>
exec(`git -C ./repo merge-base --is-ancestor ${commit} ${release}`, (err) =>
!err || err.code === 1 ? resolve(!err) : reject(err),
),
)
}
}
export class OctoKitIssue extends OctoKit implements GitHubIssue {
constructor(
token: string,
protected params: { repo: string; owner: string },
private issueData: { number: number } | Issue,
options: { readonly: boolean } = { readonly: false },
) {
super(token, params, options)
}
async addAssignee(assignee: string): Promise<void> {
debug('Adding assignee ' + assignee + ' to ' + this.issueData.number)
if (!this.options.readonly) {
await this.octokit.issues.addAssignees({
...this.params,
issue_number: this.issueData.number,
assignees: [assignee],
})
}
}
async closeIssue(): Promise<void> {
debug('Closing issue ' + this.issueData.number)
if (!this.options.readonly)
await this.octokit.issues.update({
...this.params,
issue_number: this.issueData.number,
state: 'closed',
})
}
async lockIssue(): Promise<void> {
debug('Locking issue ' + this.issueData.number)
if (!this.options.readonly)
await this.octokit.issues.lock({ ...this.params, issue_number: this.issueData.number })
}
async getIssue(): Promise<Issue> {
if (isIssue(this.issueData)) {
debug('Got issue data from query result ' + this.issueData.number)
return this.issueData
}
console.log('Fetching issue ' + this.issueData.number)
const issue = (
await this.octokit.issues.get({
...this.params,
issue_number: this.issueData.number,
mediaType: { previews: ['squirrel-girl'] },
})
).data
return (this.issueData = this.octokitIssueToIssue(issue))
}
async postComment(body: string): Promise<void> {
debug(`Posting comment ${body} on ${this.issueData.number}`)
if (!this.options.readonly)
await this.octokit.issues.createComment({
...this.params,
issue_number: this.issueData.number,
body,
})
}
async deleteComment(id: number): Promise<void> {
debug(`Deleting comment ${id} on ${this.issueData.number}`)
if (!this.options.readonly)
await this.octokit.issues.deleteComment({
owner: this.params.owner,
repo: this.params.repo,
comment_id: id,
})
}
async setMilestone(milestoneId: number) {
debug(`Setting milestone for ${this.issueData.number} to ${milestoneId}`)
if (!this.options.readonly)
await this.octokit.issues.update({
...this.params,
issue_number: this.issueData.number,
milestone: milestoneId,
})
}
async *getComments(last?: boolean): AsyncIterableIterator<Comment[]> {
debug('Fetching comments for ' + this.issueData.number)
const response = this.octokit.paginate.iterator(
this.octokit.issues.listComments.endpoint.merge({
...this.params,
issue_number: this.issueData.number,
per_page: 100,
...(last ? { per_page: 1, page: (await this.getIssue()).numComments } : {}),
}),
)
for await (const page of response) {
yield (page.data as Octokit.IssuesListCommentsResponseItem[]).map((comment) => ({
author: { name: comment.user.login, isGitHubApp: comment.user.type === 'Bot' },
body: comment.body,
id: comment.id,
timestamp: +new Date(comment.created_at),
}))
}
}
async addLabel(name: string): Promise<void> {
debug(`Adding label ${name} to ${this.issueData.number}`)
if (!(await this.repoHasLabel(name))) {
throw Error(`Action could not execute becuase label ${name} is not defined.`)
}
if (!this.options.readonly)
await this.octokit.issues.addLabels({
...this.params,
issue_number: this.issueData.number,
labels: [name],
})
}
async removeLabel(name: string): Promise<void> {
debug(`Removing label ${name} from ${this.issueData.number}`)
try {
if (!this.options.readonly)
await this.octokit.issues.removeLabel({
...this.params,
issue_number: this.issueData.number,
name,
})
} catch (err) {
if (err.status === 404) {
console.log(`Label ${name} not found on issue`)
return
}
throw err
}
}
async getClosingInfo(): Promise<{ hash: string | undefined; timestamp: number } | undefined> {
if ((await this.getIssue()).open) {
return
}
const options = this.octokit.issues.listEventsForTimeline.endpoint.merge({
...this.params,
issue_number: this.issueData.number,
})
let closingCommit: { hash: string | undefined; timestamp: number } | undefined
for await (const event of this.octokit.paginate.iterator(options)) {
const timelineEvents = event.data as Octokit.IssuesListEventsForTimelineResponseItem[]
for (const timelineEvent of timelineEvents) {
if (timelineEvent.event === 'closed') {
closingCommit = {
hash: timelineEvent.commit_id ?? undefined,
timestamp: +new Date(timelineEvent.created_at),
}
}
}
}
console.log(`Got ${closingCommit} as closing commit of ${this.issueData.number}`)
return closingCommit
}
}
function isIssue(object: any): object is Issue {
const isIssue =
'author' in object &&
'body' in object &&
'title' in object &&
'labels' in object &&
'open' in object &&
'locked' in object &&
'number' in object &&
'numComments' in object &&
'reactions' in object &&
'milestoneId' in object
return isIssue
}

View File

@@ -1,123 +0,0 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
class Testbed {
constructor(config) {
var _a, _b, _c, _d, _e;
this.config = {
globalLabels: (_a = config === null || config === void 0 ? void 0 : config.globalLabels) !== null && _a !== void 0 ? _a : [],
configs: (_b = config === null || config === void 0 ? void 0 : config.configs) !== null && _b !== void 0 ? _b : {},
writers: (_c = config === null || config === void 0 ? void 0 : config.writers) !== null && _c !== void 0 ? _c : [],
releasedCommits: (_d = config === null || config === void 0 ? void 0 : config.releasedCommits) !== null && _d !== void 0 ? _d : [],
queryRunner: (_e = config === null || config === void 0 ? void 0 : config.queryRunner) !== null && _e !== void 0 ? _e : async function* () {
yield [];
},
};
}
async *query(query) {
for await (const page of this.config.queryRunner(query)) {
yield page.map((issue) => issue instanceof TestbedIssue ? issue : new TestbedIssue(this.config, issue));
}
}
async createIssue(_owner, _repo, _title, _body) {
// pass...
}
async readConfig(path) {
return JSON.parse(JSON.stringify(this.config.configs[path]));
}
async hasWriteAccess(user) {
return this.config.writers.includes(user.name);
}
async repoHasLabel(label) {
return this.config.globalLabels.includes(label);
}
async createLabel(label, _color, _description) {
this.config.globalLabels.push(label);
}
async deleteLabel(labelToDelete) {
this.config.globalLabels = this.config.globalLabels.filter((label) => label !== labelToDelete);
}
async releaseContainsCommit(_release, commit) {
return this.config.releasedCommits.includes(commit);
}
}
exports.Testbed = Testbed;
class TestbedIssue extends Testbed {
constructor(globalConfig, issueConfig) {
var _a, _b, _c;
super(globalConfig);
issueConfig = issueConfig !== null && issueConfig !== void 0 ? issueConfig : {};
issueConfig.comments = (_a = issueConfig === null || issueConfig === void 0 ? void 0 : issueConfig.comments) !== null && _a !== void 0 ? _a : [];
issueConfig.labels = (_b = issueConfig === null || issueConfig === void 0 ? void 0 : issueConfig.labels) !== null && _b !== void 0 ? _b : [];
issueConfig.issue = {
author: { name: 'JacksonKearl' },
body: 'issue body',
locked: false,
numComments: ((_c = issueConfig === null || issueConfig === void 0 ? void 0 : issueConfig.comments) === null || _c === void 0 ? void 0 : _c.length) || 0,
number: 1,
open: true,
title: 'issue title',
assignee: undefined,
reactions: {
'+1': 0,
'-1': 0,
confused: 0,
eyes: 0,
heart: 0,
hooray: 0,
laugh: 0,
rocket: 0,
},
closedAt: undefined,
createdAt: +new Date(),
updatedAt: +new Date(),
...issueConfig.issue,
};
this.issueConfig = issueConfig;
}
async addAssignee(assignee) {
this.issueConfig.issue.assignee = assignee;
}
async setMilestone(milestoneId) {
this.issueConfig.issue.milestoneId = milestoneId;
}
async getIssue() {
const labels = [...this.issueConfig.labels];
return { ...this.issueConfig.issue, labels };
}
async postComment(body, author) {
this.issueConfig.comments.push({
author: { name: author !== null && author !== void 0 ? author : 'bot' },
body,
id: Math.random(),
timestamp: +new Date(),
});
}
async deleteComment(id) {
this.issueConfig.comments = this.issueConfig.comments.filter((comment) => comment.id !== id);
}
async *getComments(last) {
yield last
? [this.issueConfig.comments[this.issueConfig.comments.length - 1]]
: this.issueConfig.comments;
}
async addLabel(label) {
this.issueConfig.labels.push(label);
}
async removeLabel(labelToDelete) {
this.issueConfig.labels = this.issueConfig.labels.filter((label) => label !== labelToDelete);
}
async closeIssue() {
this.issueConfig.issue.open = false;
}
async lockIssue() {
this.issueConfig.issue.locked = true;
}
async getClosingInfo() {
return this.issueConfig.closingCommit;
}
}
exports.TestbedIssue = TestbedIssue;

View File

@@ -1,170 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { Comment, GitHub, GitHubIssue, Issue, Query, User } from './api'
type TestbedConfig = {
globalLabels: string[]
configs: Record<string, any>
writers: string[]
releasedCommits: string[]
queryRunner: (query: Query) => AsyncIterableIterator<(TestbedIssueConstructorArgs | TestbedIssue)[]>
}
export type TestbedConstructorArgs = Partial<TestbedConfig>
export class Testbed implements GitHub {
public config: TestbedConfig
constructor(config?: TestbedConstructorArgs) {
this.config = {
globalLabels: config?.globalLabels ?? [],
configs: config?.configs ?? {},
writers: config?.writers ?? [],
releasedCommits: config?.releasedCommits ?? [],
queryRunner:
config?.queryRunner ??
async function* () {
yield []
},
}
}
async *query(query: Query): AsyncIterableIterator<GitHubIssue[]> {
for await (const page of this.config.queryRunner(query)) {
yield page.map((issue) =>
issue instanceof TestbedIssue ? issue : new TestbedIssue(this.config, issue),
)
}
}
async createIssue(_owner: string, _repo: string, _title: string, _body: string): Promise<void> {
// pass...
}
async readConfig(path: string): Promise<any> {
return JSON.parse(JSON.stringify(this.config.configs[path]))
}
async hasWriteAccess(user: User): Promise<boolean> {
return this.config.writers.includes(user.name)
}
async repoHasLabel(label: string): Promise<boolean> {
return this.config.globalLabels.includes(label)
}
async createLabel(label: string, _color: string, _description: string): Promise<void> {
this.config.globalLabels.push(label)
}
async deleteLabel(labelToDelete: string): Promise<void> {
this.config.globalLabels = this.config.globalLabels.filter((label) => label !== labelToDelete)
}
async releaseContainsCommit(_release: string, commit: string): Promise<boolean> {
return this.config.releasedCommits.includes(commit)
}
}
type TestbedIssueConfig = {
issue: Omit<Issue, 'labels'>
comments: Comment[]
labels: string[]
closingCommit: { hash: string | undefined; timestamp: number } | undefined
}
export type TestbedIssueConstructorArgs = Partial<Omit<TestbedIssueConfig, 'issue'>> & {
issue?: Partial<Omit<Issue, 'labels'>>
}
export class TestbedIssue extends Testbed implements GitHubIssue {
public issueConfig: TestbedIssueConfig
constructor(globalConfig?: TestbedConstructorArgs, issueConfig?: TestbedIssueConstructorArgs) {
super(globalConfig)
issueConfig = issueConfig ?? {}
issueConfig.comments = issueConfig?.comments ?? []
issueConfig.labels = issueConfig?.labels ?? []
issueConfig.issue = {
author: { name: 'JacksonKearl' },
body: 'issue body',
locked: false,
numComments: issueConfig?.comments?.length || 0,
number: 1,
open: true,
title: 'issue title',
assignee: undefined,
reactions: {
'+1': 0,
'-1': 0,
confused: 0,
eyes: 0,
heart: 0,
hooray: 0,
laugh: 0,
rocket: 0,
},
closedAt: undefined,
createdAt: +new Date(),
updatedAt: +new Date(),
...issueConfig.issue,
}
this.issueConfig = issueConfig as TestbedIssueConfig
}
async addAssignee(assignee: string): Promise<void> {
this.issueConfig.issue.assignee = assignee
}
async setMilestone(milestoneId: number): Promise<void> {
this.issueConfig.issue.milestoneId = milestoneId
}
async getIssue(): Promise<Issue> {
const labels = [...this.issueConfig.labels]
return { ...this.issueConfig.issue, labels }
}
async postComment(body: string, author?: string): Promise<void> {
this.issueConfig.comments.push({
author: { name: author ?? 'bot' },
body,
id: Math.random(),
timestamp: +new Date(),
})
}
async deleteComment(id: number): Promise<void> {
this.issueConfig.comments = this.issueConfig.comments.filter((comment) => comment.id !== id)
}
async *getComments(last?: boolean): AsyncIterableIterator<Comment[]> {
yield last
? [this.issueConfig.comments[this.issueConfig.comments.length - 1]]
: this.issueConfig.comments
}
async addLabel(label: string): Promise<void> {
this.issueConfig.labels.push(label)
}
async removeLabel(labelToDelete: string): Promise<void> {
this.issueConfig.labels = this.issueConfig.labels.filter((label) => label !== labelToDelete)
}
async closeIssue(): Promise<void> {
this.issueConfig.issue.open = false
}
async lockIssue(): Promise<void> {
this.issueConfig.issue.locked = true
}
async getClosingInfo(): Promise<{ hash: string | undefined; timestamp: number } | undefined> {
return this.issueConfig.closingCommit
}
}

View File

@@ -1,12 +0,0 @@
name: 'PR Labeler'
description: 'Automatically add a Label to a PR'
inputs:
token:
description: GitHub token with issue, comment, and label read/write permissions
default: ${{ github.token }}
label:
description: Github label to add to the PR
required: true
runs:
using: 'node12'
main: 'index.js'

View File

@@ -1,22 +0,0 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
const core = require("@actions/core");
const github_1 = require("@actions/github");
const octokit_1 = require("../api/octokit");
const utils_1 = require("../utils/utils");
const token = utils_1.getRequiredInput('token');
const label = utils_1.getRequiredInput('label');
async function main() {
const pr = new octokit_1.OctoKitIssue(token, github_1.context.repo, { number: github_1.context.issue.number });
pr.addLabel(label);
}
main()
.then(() => utils_1.logRateLimit(token))
.catch(async (error) => {
core.setFailed(error.message);
await utils_1.logErrorToIssue(error.message, true, token);
});

View File

@@ -1,26 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as core from '@actions/core'
import { context } from '@actions/github'
import { OctoKitIssue } from '../api/octokit'
import { getRequiredInput, logErrorToIssue, logRateLimit } from '../utils/utils'
const token = getRequiredInput('token');
const label = getRequiredInput('label');
async function main() {
const pr = new OctoKitIssue(token, context.repo, { number: context.issue.number });
pr.addLabel(label);
}
main()
.then(() => logRateLimit(token))
.catch(async (error) => {
core.setFailed(error.message)
await logErrorToIssue(error.message, true, token)
})

View File

@@ -1,24 +0,0 @@
{
"name": "github-actions",
"version": "1.0.0",
"description": "GitHub Actions",
"scripts": {
"test": "mocha -r ts-node/register **/*.test.ts",
"build": "tsc -p ./tsconfig.json",
"lint": "eslint -c .eslintrc --fix --ext .ts .",
"watch-typecheck": "tsc --watch"
},
"repository": {
"type": "git",
"url": "git+https://github.com/microsoft/azuredatastudio.git"
},
"keywords": [],
"author": "",
"dependencies": {
"@actions/core": "^1.2.6",
"@actions/github": "^2.1.1",
"axios": "^0.21.4",
"ts-node": "^8.6.2",
"typescript": "^3.8.3"
}
}

View File

@@ -1,19 +0,0 @@
{
"compilerOptions": {
"target": "es2019",
"strict": true,
"module": "commonjs",
"moduleResolution": "node",
"removeComments": false,
"resolveJsonModule": true,
"lib": [
"es2020"
],
},
"include": [
"./**/*.ts"
],
"exclude": [
"node_modules"
]
}

View File

@@ -1,72 +0,0 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
const core = require("@actions/core");
const github_1 = require("@actions/github");
const axios_1 = require("axios");
const octokit_1 = require("../api/octokit");
exports.getInput = (name) => core.getInput(name) || undefined;
exports.getRequiredInput = (name) => core.getInput(name, { required: true });
exports.normalizeIssue = (issue) => {
const { body, title } = issue;
const isBug = body.includes('bug_report_template') || /Issue Type:.*Bug.*/.test(body);
const isFeatureRequest = body.includes('feature_request_template') || /Issue Type:.*Feature Request.*/.test(body);
const cleanse = (str) => str
.toLowerCase()
.replace(/<!--.*?-->/gu, '')
.replace(/.* version: .*/gu, '')
.replace(/issue type: .*/gu, '')
.replace(/<details>(.|\s)*?<\/details>/gu, '')
.replace(/vs ?code/gu, '')
.replace(/we have written.*please paste./gu, '')
.replace(/steps to reproduce:/gu, '')
.replace(/does this issue occur when all extensions are disabled.*/gu, '')
.replace(/```(.|\s)*?```/gu, '')
.replace(/!?\[.*?\]\(.*?\)/gu, '')
.replace(/\s+/gu, ' ');
return {
body: cleanse(body),
title: cleanse(title),
issueType: isBug ? 'bug' : isFeatureRequest ? 'feature_request' : 'unknown',
};
};
exports.loadLatestRelease = async (quality) => (await axios_1.default.get(`https://vscode-update.azurewebsites.net/api/update/darwin/${quality}/latest`)).data;
exports.daysAgoToTimestamp = (days) => +new Date(Date.now() - days * 24 * 60 * 60 * 1000);
exports.daysAgoToHumanReadbleDate = (days) => new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString().replace(/\.\d{3}\w$/, '');
exports.logRateLimit = async (token) => {
const usageData = (await new github_1.GitHub(token).rateLimit.get()).data.resources;
['core', 'graphql', 'search'].forEach(async (category) => {
const usage = 1 - usageData[category].remaining / usageData[category].limit;
const message = `Usage at ${usage} for ${category}`;
if (usage > 0) {
console.log(message);
}
if (usage > 0.5) {
await exports.logErrorToIssue(message, false, token);
}
});
};
exports.logErrorToIssue = async (message, ping, token) => {
// Attempt to wait out abuse detection timeout if present
await new Promise((resolve) => setTimeout(resolve, 10000));
const dest = github_1.context.repo.repo === 'vscode-internalbacklog'
? { repo: 'vscode-internalbacklog', issue: 974 }
: { repo: 'vscode', issue: 93814 };
return new octokit_1.OctoKitIssue(token, { owner: 'Microsoft', repo: dest.repo }, { number: dest.issue })
.postComment(`
Workflow: ${github_1.context.workflow}
Error: ${message}
Issue: ${ping ? `${github_1.context.repo.owner}/${github_1.context.repo.repo}#` : ''}${github_1.context.issue.number}
Repo: ${github_1.context.repo.owner}/${github_1.context.repo.repo}
<!-- Context:
${JSON.stringify(github_1.context, null, 2).replace(/<!--/gu, '<@--').replace(/-->/gu, '--@>')}
-->
`);
};

View File

@@ -1,95 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as core from '@actions/core'
import { context, GitHub } from '@actions/github'
import axios from 'axios'
import { OctoKitIssue } from '../api/octokit'
import { Issue } from '../api/api'
export const getInput = (name: string) => core.getInput(name) || undefined
export const getRequiredInput = (name: string) => core.getInput(name, { required: true })
export const normalizeIssue = (
issue: Issue,
): { body: string; title: string; issueType: 'bug' | 'feature_request' | 'unknown' } => {
const { body, title } = issue
const isBug = body.includes('bug_report_template') || /Issue Type:.*Bug.*/.test(body)
const isFeatureRequest =
body.includes('feature_request_template') || /Issue Type:.*Feature Request.*/.test(body)
const cleanse = (str: string) =>
str
.toLowerCase()
.replace(/<!--.*?-->/gu, '')
.replace(/.* version: .*/gu, '')
.replace(/issue type: .*/gu, '')
.replace(/<details>(.|\s)*?<\/details>/gu, '')
.replace(/vs ?code/gu, '')
.replace(/we have written.*please paste./gu, '')
.replace(/steps to reproduce:/gu, '')
.replace(/does this issue occur when all extensions are disabled.*/gu, '')
.replace(/```(.|\s)*?```/gu, '')
.replace(/!?\[.*?\]\(.*?\)/gu, '')
.replace(/\s+/gu, ' ')
return {
body: cleanse(body),
title: cleanse(title),
issueType: isBug ? 'bug' : isFeatureRequest ? 'feature_request' : 'unknown',
}
}
export interface Release {
productVersion: string
timestamp: number
version: string
}
export const loadLatestRelease = async (quality: 'stable' | 'insider'): Promise<Release | undefined> =>
(await axios.get(`https://vscode-update.azurewebsites.net/api/update/darwin/${quality}/latest`)).data
export const daysAgoToTimestamp = (days: number): number => +new Date(Date.now() - days * 24 * 60 * 60 * 1000)
export const daysAgoToHumanReadbleDate = (days: number) =>
new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString().replace(/\.\d{3}\w$/, '')
export const logRateLimit = async (token: string) => {
const usageData = (await new GitHub(token).rateLimit.get()).data.resources
;(['core', 'graphql', 'search'] as const).forEach(async (category) => {
const usage = 1 - usageData[category].remaining / usageData[category].limit
const message = `Usage at ${usage} for ${category}`
if (usage > 0) {
console.log(message)
}
if (usage > 0.5) {
await logErrorToIssue(message, false, token)
}
})
}
export const logErrorToIssue = async (message: string, ping: boolean, token: string): Promise<void> => {
// Attempt to wait out abuse detection timeout if present
await new Promise((resolve) => setTimeout(resolve, 10000))
const dest =
context.repo.repo === 'vscode-internalbacklog'
? { repo: 'vscode-internalbacklog', issue: 974 }
: { repo: 'vscode', issue: 93814 }
return new OctoKitIssue(token, { owner: 'Microsoft', repo: dest.repo }, { number: dest.issue })
.postComment(`
Workflow: ${context.workflow}
Error: ${message}
Issue: ${ping ? `${context.repo.owner}/${context.repo.repo}#` : ''}${context.issue.number}
Repo: ${context.repo.owner}/${context.repo.repo}
<!-- Context:
${JSON.stringify(context, null, 2).replace(/<!--/gu, '<@--').replace(/-->/gu, '--@>')}
-->
`)
}

View File

@@ -1,421 +0,0 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@actions/core@^1.2.6":
version "1.2.6"
resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.2.6.tgz#a78d49f41a4def18e88ce47c2cac615d5694bf09"
integrity sha512-ZQYitnqiyBc3D+k7LsgSBmMDVkOVidaagDG7j3fOym77jNunWRuYx7VSHa9GNfFZh+zh61xsCjRj4JxMZlDqTA==
"@actions/github@^2.1.1":
version "2.1.1"
resolved "https://registry.yarnpkg.com/@actions/github/-/github-2.1.1.tgz#bcabedff598196d953f58ba750d5e75549a75142"
integrity sha512-kAgTGUx7yf5KQCndVeHSwCNZuDBvPyxm5xKTswW2lofugeuC1AZX73nUUVDNaysnM9aKFMHv9YCdVJbg7syEyA==
dependencies:
"@actions/http-client" "^1.0.3"
"@octokit/graphql" "^4.3.1"
"@octokit/rest" "^16.43.1"
"@actions/http-client@^1.0.3":
version "1.0.8"
resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-1.0.8.tgz#8bd76e8eca89dc8bcf619aa128eba85f7a39af45"
integrity sha512-G4JjJ6f9Hb3Zvejj+ewLLKLf99ZC+9v+yCxoYf9vSyH+WkzPLB2LuUtRMGNkooMqdugGBFStIKXOuvH1W+EctA==
dependencies:
tunnel "0.0.6"
"@octokit/auth-token@^2.4.0":
version "2.4.0"
resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.0.tgz#b64178975218b99e4dfe948253f0673cbbb59d9f"
integrity sha512-eoOVMjILna7FVQf96iWc3+ZtE/ZT6y8ob8ZzcqKY1ibSQCnu4O/B7pJvzMx5cyZ/RjAff6DAdEb0O0Cjcxidkg==
dependencies:
"@octokit/types" "^2.0.0"
"@octokit/endpoint@^6.0.1":
version "6.0.1"
resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.1.tgz#16d5c0e7a83e3a644d1ddbe8cded6c3d038d31d7"
integrity sha512-pOPHaSz57SFT/m3R5P8MUu4wLPszokn5pXcB/pzavLTQf2jbU+6iayTvzaY6/BiotuRS0qyEUkx3QglT4U958A==
dependencies:
"@octokit/types" "^2.11.1"
is-plain-object "^3.0.0"
universal-user-agent "^5.0.0"
"@octokit/graphql@^4.3.1":
version "4.3.1"
resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.3.1.tgz#9ee840e04ed2906c7d6763807632de84cdecf418"
integrity sha512-hCdTjfvrK+ilU2keAdqNBWOk+gm1kai1ZcdjRfB30oA3/T6n53UVJb7w0L5cR3/rhU91xT3HSqCd+qbvH06yxA==
dependencies:
"@octokit/request" "^5.3.0"
"@octokit/types" "^2.0.0"
universal-user-agent "^4.0.0"
"@octokit/plugin-paginate-rest@^1.1.1":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc"
integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q==
dependencies:
"@octokit/types" "^2.0.1"
"@octokit/plugin-request-log@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e"
integrity sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw==
"@octokit/plugin-rest-endpoint-methods@2.4.0":
version "2.4.0"
resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e"
integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ==
dependencies:
"@octokit/types" "^2.0.1"
deprecation "^2.3.1"
"@octokit/request-error@^1.0.2":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801"
integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA==
dependencies:
"@octokit/types" "^2.0.0"
deprecation "^2.0.0"
once "^1.4.0"
"@octokit/request-error@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.0.tgz#94ca7293373654400fbb2995f377f9473e00834b"
integrity sha512-rtYicB4Absc60rUv74Rjpzek84UbVHGHJRu4fNVlZ1mCcyUPPuzFfG9Rn6sjHrd95DEsmjSt1Axlc699ZlbDkw==
dependencies:
"@octokit/types" "^2.0.0"
deprecation "^2.0.0"
once "^1.4.0"
"@octokit/request@^5.2.0", "@octokit/request@^5.3.0":
version "5.4.2"
resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.2.tgz#74f8e5bbd39dc738a1b127629791f8ad1b3193ee"
integrity sha512-zKdnGuQ2TQ2vFk9VU8awFT4+EYf92Z/v3OlzRaSh4RIP0H6cvW1BFPXq4XYvNez+TPQjqN+0uSkCYnMFFhcFrw==
dependencies:
"@octokit/endpoint" "^6.0.1"
"@octokit/request-error" "^2.0.0"
"@octokit/types" "^2.11.1"
deprecation "^2.0.0"
is-plain-object "^3.0.0"
node-fetch "^2.3.0"
once "^1.4.0"
universal-user-agent "^5.0.0"
"@octokit/rest@^16.43.1":
version "16.43.1"
resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.1.tgz#3b11e7d1b1ac2bbeeb23b08a17df0b20947eda6b"
integrity sha512-gfFKwRT/wFxq5qlNjnW2dh+qh74XgTQ2B179UX5K1HYCluioWj8Ndbgqw2PVqa1NnVJkGHp2ovMpVn/DImlmkw==
dependencies:
"@octokit/auth-token" "^2.4.0"
"@octokit/plugin-paginate-rest" "^1.1.1"
"@octokit/plugin-request-log" "^1.0.0"
"@octokit/plugin-rest-endpoint-methods" "2.4.0"
"@octokit/request" "^5.2.0"
"@octokit/request-error" "^1.0.2"
atob-lite "^2.0.0"
before-after-hook "^2.0.0"
btoa-lite "^1.0.0"
deprecation "^2.0.0"
lodash.get "^4.4.2"
lodash.set "^4.3.2"
lodash.uniq "^4.5.0"
octokit-pagination-methods "^1.1.0"
once "^1.4.0"
universal-user-agent "^4.0.0"
"@octokit/types@^2.0.0", "@octokit/types@^2.0.1", "@octokit/types@^2.11.1":
version "2.12.1"
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.12.1.tgz#4a26b4a85ec121043d3b0745b5798f9d8fd968ca"
integrity sha512-LRLR1tjbcCfAmUElvTmMvLEzstpx6Xt/aQVTg2xvd+kHA2Ekp1eWl5t+gU7bcwjXHYEAzh4hH4WH+kS3vh+wRw==
dependencies:
"@types/node" ">= 8"
"@types/node@>= 8":
version "13.13.2"
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.2.tgz#160d82623610db590a64e8ca81784e11117e5a54"
integrity sha512-LB2R1Oyhpg8gu4SON/mfforE525+Hi/M1ineICEDftqNVTyFg1aRIeGuTvXAoWHc4nbrFncWtJgMmoyRvuGh7A==
arg@^4.1.0:
version "4.1.3"
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
atob-lite@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696"
integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=
axios@^0.21.4:
version "0.21.4"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575"
integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==
dependencies:
follow-redirects "^1.14.0"
before-after-hook@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635"
integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==
btoa-lite@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337"
integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc=
buffer-from@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
cross-spawn@^6.0.0:
version "6.0.5"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
dependencies:
nice-try "^1.0.4"
path-key "^2.0.1"
semver "^5.5.0"
shebang-command "^1.2.0"
which "^1.2.9"
deprecation@^2.0.0, deprecation@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"
integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
diff@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
end-of-stream@^1.1.0:
version "1.4.4"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
dependencies:
once "^1.4.0"
execa@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
dependencies:
cross-spawn "^6.0.0"
get-stream "^4.0.0"
is-stream "^1.1.0"
npm-run-path "^2.0.0"
p-finally "^1.0.0"
signal-exit "^3.0.0"
strip-eof "^1.0.0"
follow-redirects@^1.14.0:
version "1.14.8"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc"
integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==
get-stream@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
dependencies:
pump "^3.0.0"
is-plain-object@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928"
integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==
dependencies:
isobject "^4.0.0"
is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
isobject@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0"
integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==
lodash.get@^4.4.2:
version "4.4.2"
resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
lodash.set@^4.3.2:
version "4.3.2"
resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23"
integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=
lodash.uniq@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
macos-release@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f"
integrity sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==
make-error@^1.1.1:
version "1.3.6"
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
nice-try@^1.0.4:
version "1.0.5"
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
node-fetch@^2.3.0:
version "2.6.7"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
npm-run-path@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
dependencies:
path-key "^2.0.0"
octokit-pagination-methods@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4"
integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==
once@^1.3.1, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
dependencies:
wrappy "1"
os-name@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801"
integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==
dependencies:
macos-release "^2.2.0"
windows-release "^3.1.0"
p-finally@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
path-key@^2.0.0, path-key@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
pump@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
dependencies:
end-of-stream "^1.1.0"
once "^1.3.1"
semver@^5.5.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
shebang-command@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
dependencies:
shebang-regex "^1.0.0"
shebang-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
signal-exit@^3.0.0:
version "3.0.3"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
source-map-support@^0.5.17:
version "0.5.19"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
dependencies:
buffer-from "^1.0.0"
source-map "^0.6.0"
source-map@^0.6.0:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
strip-eof@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
ts-node@^8.6.2:
version "8.9.0"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.9.0.tgz#d7bf7272dcbecd3a2aa18bd0b96c7d2f270c15d4"
integrity sha512-rwkXfOs9zmoHrV8xE++dmNd6ZIS+nmHHCxcV53ekGJrxFLMbp+pizpPS07ARvhwneCIECPppOwbZHvw9sQtU4w==
dependencies:
arg "^4.1.0"
diff "^4.0.1"
make-error "^1.1.1"
source-map-support "^0.5.17"
yn "3.1.1"
tunnel@0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c"
integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==
typescript@^3.8.3:
version "3.8.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061"
integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==
universal-user-agent@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557"
integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg==
dependencies:
os-name "^3.1.0"
universal-user-agent@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-5.0.0.tgz#a3182aa758069bf0e79952570ca757de3579c1d9"
integrity sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q==
dependencies:
os-name "^3.1.0"
which@^1.2.9:
version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
dependencies:
isexe "^2.0.0"
windows-release@^3.1.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.0.tgz#dce167e9f8be733f21c849ebd4d03fe66b29b9f0"
integrity sha512-2HetyTg1Y+R+rUgrKeUEhAG/ZuOmTrI1NBb3ZyAGQMYmOJjBBPe4MTodghRkmLJZHwkuPi02anbeGP+Zf401LQ==
dependencies:
execa "^1.0.0"
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
yn@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==

View File

@@ -106,7 +106,7 @@ steps:
- script: |
set -e
./scripts/test.sh --build --tfs "Unit Tests" # Disable code coverage since it's currently broken --coverage
./scripts/test.sh --build --tfs "Unit Tests" --coverage
displayName: Run unit tests
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
@@ -128,14 +128,24 @@ steps:
yarn gulp compile-extensions
displayName: Compile Extensions
# Per https://developercommunity.visualstudio.com/t/variablesexpressions-dont-work-with-continueonerro/1187733 we can't use variables
# in continueOnError directly so instead make two copies of the task and only run one or the other based on the SMOKE_FAIL_ON_ERROR value
- script: |
set -e
APP_ROOT=$(agent.builddirectory)/azuredatastudio-darwin-x64
APP_NAME="`ls $APP_ROOT | head -n 1`"
yarn smoketest --build "$APP_ROOT/$APP_NAME" --screenshots "$(build.artifactstagingdirectory)/smokeshots" --log "$(build.artifactstagingdirectory)/logs/darwin/smoke.log" --extensionsDir "$(build.sourcesdirectory)/extensions"
displayName: Run smoke tests (Electron)
displayName: Run smoke tests (Electron) (Continue on Error)
continueOnError: true
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
condition: and(succeeded(), and(eq(variables['RUN_TESTS'], 'true'), ne(variables['SMOKE_FAIL_ON_ERROR'], 'true')))
- script: |
set -e
APP_ROOT=$(agent.builddirectory)/azuredatastudio-darwin-x64
APP_NAME="`ls $APP_ROOT | head -n 1`"
yarn smoketest --build "$APP_ROOT/$APP_NAME" --screenshots "$(build.artifactstagingdirectory)/smokeshots" --log "$(build.artifactstagingdirectory)/logs/darwin/smoke.log" --extensionsDir "$(build.sourcesdirectory)/extensions"
displayName: Run smoke tests (Electron) (Fail on Error)
condition: and(succeeded(), and(eq(variables['RUN_TESTS'], 'true'), eq(variables['SMOKE_FAIL_ON_ERROR'], 'true')))
# - script: |
# set -e

View File

@@ -1,5 +1,5 @@
#Download base image ubuntu 21.04
FROM ubuntu:21.04
#Download base image ubuntu 22.04
FROM mcr.microsoft.com/mirror/docker/library/ubuntu:22.04
ENV TZ=America/Los_Angeles
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

View File

@@ -1,5 +1,5 @@
#Download base image ubuntu 18.04
FROM ubuntu:18.04
FROM mcr.microsoft.com/mirror/docker/library/ubuntu:18.04
#Adding apt repos for g++-4.9
RUN echo "deb http://dk.archive.ubuntu.com/ubuntu/ xenial main" >> /etc/apt/sources.list

View File

@@ -119,7 +119,7 @@ steps:
- script: |
set -e
DISPLAY=:10 ./scripts/test.sh --build --tfs "Unit Tests" # Disable code coverage since it's currently broken --coverage
DISPLAY=:10 ./scripts/test.sh --build --tfs "Unit Tests" --coverage
displayName: Run unit tests (Electron)
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))

View File

@@ -6,6 +6,9 @@ trigger:
pr: none
pool:
vmImage: ubuntu-latest
steps:
- task: NodeTool@0
inputs:
@@ -52,13 +55,13 @@ steps:
git reset --hard upstream/master
git push --force
# Update the type
# Update and format the typings file
cd ..
node build/azure-pipelines/publish-types/update-types.js
cd DefinitelyTyped
TAG_VERSION=$(git describe --tags `git rev-list --tags --max-count=1`)
# Create and push the branch
cd DefinitelyTyped
git diff --color | cat
git add -A
git status

View File

@@ -47,7 +47,7 @@ jobs:
steps:
- template: linux/sql-product-build-linux.yml
parameters:
extensionsToUnitTest: ["admin-tool-ext-win", "agent", "azcli", "azurecore", "cms", "dacpac", "data-workspace", "import", "machine-learning", "notebook", "resource-deployment", "schema-compare", "sql-database-projects"]
extensionsToUnitTest: ["admin-tool-ext-win", "agent", "azcli", "azurecore", "cms", "dacpac", "data-workspace", "import", "machine-learning", "notebook", "resource-deployment", "schema-compare", "sql-bindings", "sql-database-projects"]
timeoutInMinutes: 90
- job: Windows
@@ -60,16 +60,17 @@ jobs:
- template: win32/sql-product-build-win32.yml
timeoutInMinutes: 90
- 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
timeoutInMinutes: 90
# disable due to invalid machine pool (karlb 3/9/2022)
# - 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
# timeoutInMinutes: 90
- job: Release
condition: and(succeeded(), or(eq(variables['VSCODE_RELEASE'], 'true'), and(eq(variables['VSCODE_QUALITY'], 'insider'), eq(variables['Build.Reason'], 'Schedule'))))
@@ -79,7 +80,8 @@ jobs:
- macOS
- Linux
- Windows
- Windows_Test
# disable due to invalid machine pool (karlb 3/9/2022)
# - Windows_Test
- macOS_Signing
steps:
- template: sql-release.yml

View File

@@ -77,9 +77,11 @@ steps:
node build/azure-pipelines/mixin
displayName: Mix in quality
# Run these separately to avoid OOM errors on pipeline machines
- script: |
set -e
yarn npm-run-all -lp core-ci extensions-ci hygiene eslint valid-layers-check
yarn npm-run-all -lp core-ci extensions-ci
yarn npm-run-all -lp hygiene eslint valid-layers-check
displayName: Compile & Hygiene
- script: |
@@ -93,6 +95,7 @@ steps:
AZURE_STORAGE_ACCESS_KEY="$(sourcemap-storage-key)" \
node build/azure-pipelines/upload-sourcemaps
displayName: Upload sourcemaps
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
- script: |
set -e

View File

@@ -1,5 +1,5 @@
#Download base image ubuntu 21.04
FROM ubuntu:21.04
#Download base image ubuntu 22.04
FROM mcr.microsoft.com/mirror/docker/library/ubuntu:22.04
ENV TZ=America/Los_Angeles
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

View File

@@ -104,14 +104,26 @@ steps:
yarn gulp compile-extensions
displayName: Compile Extensions
- script: |
set -e
node ./node_modules/playwright/install.js
APP_ROOT=$(Agent.BuildDirectory)/vscode-reh-web-linux-x64
xvfb-run yarn smoketest --build "$(Agent.BuildDirectory)/vscode-reh-web-linux-x64" --web --headless --screenshots "$(Build.ArtifactStagingDirectory)/smokeshots" --log "$(Build.ArtifactStagingDirectory)/logs/web/smoke.log"
displayName: Run smoke tests (Browser)
continueOnError: true
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
# disable smoke tests (karlb 3/2/2022)
# # Per https://developercommunity.visualstudio.com/t/variablesexpressions-dont-work-with-continueonerro/1187733 we can't use variables
# # in continueOnError directly so instead make two copies of the task and only run one or the other based on the SMOKE_FAIL_ON_ERROR value
# - script: |
# set -e
# node ./node_modules/playwright/install.js
# APP_ROOT=$(Agent.BuildDirectory)/vscode-reh-web-linux-x64
# xvfb-run yarn smoketest --build "$(Agent.BuildDirectory)/vscode-reh-web-linux-x64" --web --headless --screenshots "$(Build.ArtifactStagingDirectory)/smokeshots" --log "$(Build.ArtifactStagingDirectory)/logs/web/smoke.log"
# displayName: Run smoke tests (Browser) (Continue on Error)
# continueOnError: true
# condition: and(succeeded(), and(eq(variables['RUN_TESTS'], 'true'), ne(variables['SMOKE_FAIL_ON_ERROR'], 'true')))
# disable smoke tests (karlb 3/2/2022)
# - script: |
# set -e
# node ./node_modules/playwright/install.js
# APP_ROOT=$(Agent.BuildDirectory)/vscode-reh-web-linux-x64
# xvfb-run yarn smoketest --build "$(Agent.BuildDirectory)/vscode-reh-web-linux-x64" --web --headless --screenshots "$(Build.ArtifactStagingDirectory)/smokeshots" --log "$(Build.ArtifactStagingDirectory)/logs/web/smoke.log"
# displayName: Run smoke tests (Browser) (Fail on Error)
# condition: and(succeeded(), and(eq(variables['RUN_TESTS'], 'true'), eq(variables['SMOKE_FAIL_ON_ERROR'], 'true')))
# - script: |
# set -e

View File

@@ -122,7 +122,8 @@ module.exports.indentationFilter = [
'!extensions/simple-browser/media/*.js',
'!resources/xlf/LocProject.json',
'!build/**/*',
'!test/coverage/**'
'!test/coverage/**',
'!extensions/**/coverage/**'
];
module.exports.copyrightFilter = [
@@ -182,6 +183,7 @@ module.exports.copyrightFilter = [
'!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/base/browser/ui/table/plugins/rowMoveManager.plugin.ts',
'!src/sql/workbench/services/notebook/browser/outputs/sanitizer.ts',
'!src/sql/workbench/contrib/notebook/browser/outputs/renderers.ts',
'!src/sql/workbench/services/notebook/browser/outputs/tableRenderers.ts',

View File

@@ -240,7 +240,7 @@ exports.compileExtensionsBuildTask = compileExtensionsBuildTask;
//Get every extension in 'extensions' to create XLF files.
const exportCompilations = glob.sync('**/package.json', {
cwd: extensionsPath,
ignore: ['**/out/**', '**/node_modules/**', 'package.json']
ignore: ['**/out/**', '**/node_modules/**', '**/sqltoolsservice/**', 'package.json']
});
//Run the localization packaging task on all extensions in ADS.

View File

@@ -129,16 +129,19 @@ gulp.task('package-external-extensions', task.series(
const packageManifestPath = path.join(packageDir, 'package.json');
const json = require('gulp-json-editor');
const packageJsonStream = gulp.src(packageManifestPath) // Create stream for the original package.json
.pipe(json(data => { // And now use gulp-json-editor to modify the contents
.pipe(json(data => {
// And now use gulp-json-editor to modify the contents
const updateData = JSON.parse(fs.readFileSync(vscodeManifestFullPath)); // Read in the set of values to replace from package.vscode.json
Object.keys(updateData).forEach(key => {
data[key] = updateData[key];
});
// Remove ADS-only menus. This is a subset of the menus listed in https://github.com/microsoft/azuredatastudio/blob/main/src/vs/workbench/api/common/menusExtensionPoint.ts
// More can be added to the list as needed.
['objectExplorer/item/context', 'dataExplorer/context', 'dashboard/toolbar'].forEach(menu => {
delete data.contributes.menus[menu];
});
if(data.contributes?.menus){
// Remove ADS-only menus. This is a subset of the menus listed in https://github.com/microsoft/azuredatastudio/blob/main/src/vs/workbench/api/common/menusExtensionPoint.ts
// More can be added to the list as needed.
['objectExplorer/item/context', 'dataExplorer/context', 'dashboard/toolbar'].forEach(menu => {
delete data.contributes.menus[menu];
});
}
return data;
}, { beautify: false }))
.pipe(gulp.dest(packageDir));

View File

@@ -135,6 +135,7 @@ const extensionsFilter = filter([
'**/schema-compare.xlf',
'**/server-report.xlf',
'**/sql-assessment.xlf',
'**/sql-bindings.xlf',
'**/sql-database-projects.xlf',
'**/sql-migration.xlf',
'**/xml-language-features.xlf'

View File

@@ -37,9 +37,17 @@ function createCompile(src, build, emitError) {
const sourcemaps = require('gulp-sourcemaps');
const projectPath = path.join(__dirname, '../../', src, 'tsconfig.json');
const overrideOptions = Object.assign(Object.assign({}, getTypeScriptCompilerOptions(src)), { inlineSources: Boolean(build) });
if (!build) {
if (!build && !process.env['SQL_NO_INLINE_SOURCEMAP']) {
overrideOptions.inlineSourceMap = true;
}
else if (!build) {
console.warn('********************************************************************************************');
console.warn('* Inlining of source maps is DISABLED, which will prevent debugging from working properly, *');
console.warn('* but is required to generate code coverage reports. *');
console.warn('* To re-enable inlining of source maps clear the SQL_NO_INLINE_SOURCEMAP environment var *');
console.warn('* and re-run the build/watch task *');
console.warn('********************************************************************************************');
}
const compilation = tsb.create(projectPath, overrideOptions, false, err => reporter(err));
function pipeline(token) {
const bom = require('gulp-bom');

View File

@@ -44,8 +44,15 @@ function createCompile(src: string, build: boolean, emitError?: boolean) {
const projectPath = path.join(__dirname, '../../', src, 'tsconfig.json');
const overrideOptions = { ...getTypeScriptCompilerOptions(src), inlineSources: Boolean(build) };
if (!build) {
if (!build && !process.env['SQL_NO_INLINE_SOURCEMAP']) {
overrideOptions.inlineSourceMap = true;
} else if (!build) {
console.warn('********************************************************************************************');
console.warn('* Inlining of source maps is DISABLED, which will prevent debugging from working properly, *');
console.warn('* but is required to generate code coverage reports. *');
console.warn('* To re-enable inlining of source maps clear the SQL_NO_INLINE_SOURCEMAP environment var *');
console.warn('* and re-run the build/watch task *');
console.warn('********************************************************************************************');
}
const compilation = tsb.create(projectPath, overrideOptions, false, err => reporter(err));
@@ -87,7 +94,6 @@ function createCompile(src: string, build: boolean, emitError?: boolean) {
export function compileTask(src: string, out: string, build: boolean): () => NodeJS.ReadWriteStream {
return function () {
if (os.totalmem() < 4_000_000_000) {
throw new Error('compilation requires 4GB of RAM');
}

View File

@@ -231,6 +231,7 @@ const externalExtensions = [
'schema-compare',
'server-report',
'sql-assessment',
'sql-bindings',
'sql-database-projects',
'sql-migration'
];

View File

@@ -267,6 +267,7 @@ const externalExtensions = [
'schema-compare',
'server-report',
'sql-assessment',
'sql-bindings',
'sql-database-projects',
'sql-migration'
];

View File

@@ -18,6 +18,13 @@ const File = require("vinyl");
const rimraf = require("rimraf");
const gulp = require("gulp");
const vfs = require("vinyl-fs");
/**
* If you need to compile this file for any changes, please run: yarn tsc -p ./build/tsconfig.json
*/
//List of extensions that we changed from vscode, so we can exclude them from having "Microsoft." appended in front.
const alteredVSCodeExtensions = [
'git'
];
const root = path.dirname(path.dirname(__dirname));
// Modified packageLocalExtensionsStream from extensions.ts, but for langpacks.
function packageLangpacksStream() {
@@ -134,10 +141,13 @@ function modifyI18nPackFiles(existingTranslationFolder, resultingTranslationPath
for (let extension in extensionsPacks) {
const translatedExtFile = i18n.createI18nFile(`extensions/${extension}`, extensionsPacks[extension]);
this.queue(translatedExtFile);
//handle edge case for 'Microsoft.sqlservernotebook' where extension name is the same as extension ID.
//(Other extensions need to have publisher appended in front as their ID.)
const adsExtensionId = (extension === 'Microsoft.sqlservernotebook') ? extension : 'Microsoft.' + extension;
resultingTranslationPaths.push({ id: adsExtensionId, resourceName: `extensions/${extension}.i18n.json` });
// exclude altered vscode extensions from having a new path even if we provide a new I18n file.
if (alteredVSCodeExtensions.indexOf(extension) === -1) {
//handle edge case for 'Microsoft.sqlservernotebook' where extension name is the same as extension ID.
//(Other extensions need to have publisher appended in front as their ID.)
let adsExtensionId = (extension === 'Microsoft.sqlservernotebook') ? extension : 'Microsoft.' + extension;
resultingTranslationPaths.push({ id: adsExtensionId, resourceName: `extensions/${extension}.i18n.json` });
}
}
this.queue(null);
})
@@ -162,7 +172,6 @@ const VSCODEExtensions = [
"bat",
"configuration-editing",
"docker",
"extension-editing",
"git-ui",
"git",
"github-authentication",

View File

@@ -17,6 +17,15 @@ import * as rimraf from 'rimraf';
import * as gulp from 'gulp';
import * as vfs from 'vinyl-fs';
/**
* If you need to compile this file for any changes, please run: yarn tsc -p ./build/tsconfig.json
*/
//List of extensions that we changed from vscode, so we can exclude them from having "Microsoft." appended in front.
const alteredVSCodeExtensions = [
'git'
]
const root = path.dirname(path.dirname(__dirname));
// Modified packageLocalExtensionsStream from extensions.ts, but for langpacks.
@@ -68,7 +77,7 @@ function updateMainI18nFile(existingTranslationFilePath: string, originalFilePat
// Delete any SQL strings that are no longer part of ADS in current langpack.
for (let contentKey of Object.keys(objectContents)) {
if(contentKey.startsWith('sql') && messages.contents[contentKey] === undefined){
if (contentKey.startsWith('sql') && messages.contents[contentKey] === undefined) {
delete objectContents[`${contentKey}`]
}
}
@@ -148,10 +157,14 @@ export function modifyI18nPackFiles(existingTranslationFolder: string, resulting
const translatedExtFile = i18n.createI18nFile(`extensions/${extension}`, extensionsPacks[extension]);
this.queue(translatedExtFile);
//handle edge case for 'Microsoft.sqlservernotebook' where extension name is the same as extension ID.
//(Other extensions need to have publisher appended in front as their ID.)
const adsExtensionId = (extension === 'Microsoft.sqlservernotebook') ? extension : 'Microsoft.' + extension;
resultingTranslationPaths.push({ id: adsExtensionId, resourceName: `extensions/${extension}.i18n.json` });
// exclude altered vscode extensions from having a new path even if we provide a new I18n file.
if (alteredVSCodeExtensions.indexOf(extension) === -1) {
//handle edge case for 'Microsoft.sqlservernotebook' where extension name is the same as extension ID.
//(Other extensions need to have publisher appended in front as their ID.)
let adsExtensionId = (extension === 'Microsoft.sqlservernotebook') ? extension : 'Microsoft.' + extension;
resultingTranslationPaths.push({ id: adsExtensionId, resourceName: `extensions/${extension}.i18n.json` });
}
}
this.queue(null);
})
@@ -399,7 +412,7 @@ export function renameVscodeLangpacks(): Promise<void> {
//Copy files to vscode langpack, then remove the ADS langpack, and finally rename the vscode langpack to match the ADS one.
globMDArray.forEach(element => {
fs.copyFileSync(element, path.join(locVSCODEFolder,path.parse(element).base));
fs.copyFileSync(element, path.join(locVSCODEFolder, path.parse(element).base));
});
rimraf.sync(locADSFolder);
fs.renameSync(locVSCODEFolder, locADSFolder);

View File

@@ -48,6 +48,7 @@ exports.dirs = [
'extensions/server-report',
'extensions/simple-browser',
'extensions/sql-assessment',
'extensions/sql-bindings',
'extensions/sql-database-projects',
'extensions/sql-migration',
'extensions/vscode-test-resolver',

View File

@@ -60,14 +60,14 @@
"mime": "^1.4.1",
"mkdirp": "^1.0.4",
"p-limit": "^3.1.0",
"plist": "^3.0.1",
"plist": "^3.0.5",
"rollup": "^1.20.3",
"rollup-plugin-commonjs": "^10.1.0",
"rollup-plugin-node-resolve": "^5.2.0",
"source-map": "0.6.1",
"tmp": "^0.2.1",
"typescript": "^4.5.0-dev.20210817",
"vsce": "1.48.0",
"vsce": "2.8.0",
"vscode-universal-bundler": "^0.0.2"
},
"scripts": {

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,8 @@
{
"rules": {
"no-cond-assign": 2,
"jsdoc/check-param-names": "error"
"jsdoc/check-param-names": "error",
"@typescript-eslint/explicit-function-return-type": ["error"],
"@typescript-eslint/await-thenable": ["error"]
}
}

View File

@@ -108,17 +108,17 @@
},
"dependencies": {
"@microsoft/ads-extension-telemetry": "^1.1.3",
"@microsoft/ads-service-downloader": "0.2.3",
"@microsoft/ads-service-downloader": "0.2.4",
"vscode-nls": "^4.1.2"
},
"devDependencies": {
"@types/mocha": "^5.2.5",
"@types/mocha": "^7.0.2",
"@types/node": "^12.11.7",
"mocha": "^5.2.0",
"mocha": "^7.1.1",
"mocha-junit-reporter": "^1.17.0",
"mocha-multi-reporters": "^1.1.7",
"should": "^13.2.3",
"@microsoft/vscodetestcover": "^1.2.0"
"@microsoft/vscodetestcover": "^1.2.1"
},
"__metadata": {
"id": "41",

View File

@@ -82,6 +82,7 @@ async function handleLaunchSsmsMinGswDialogCommand(connectionContext?: azdata.Ob
if (!connectionContext) {
TelemetryReporter.sendErrorEvent(TelemetryViews.SsmsMinGsw, 'NoConnectionContext');
void vscode.window.showErrorMessage(localize('adminToolExtWin.noConnectionContextForGsw', "No ConnectionContext provided for handleLaunchSsmsMinPropertiesDialogCommand"));
return;
}
return launchSsmsDialog(
@@ -101,7 +102,7 @@ async function launchSsmsDialog(action: string, connectionContext: azdata.Object
return;
}
let oeNode: azdata.objectexplorer.ObjectExplorerNode;
let oeNode: azdata.objectexplorer.ObjectExplorerNode | undefined;
// Server node is a Connection node and so doesn't have the NodeInfo
if (connectionContext.isConnectionNode) {
oeNode = undefined;
@@ -153,11 +154,11 @@ async function launchSsmsDialog(action: string, connectionContext: azdata.Object
// Process has exited so remove from map of running processes
runningProcesses.delete(proc.pid);
const err = stderr.toString();
if ((execException && execException.code !== 0) || err !== '') {
if ((execException?.code !== 0) || err !== '') {
TelemetryReporter.sendErrorEvent(
TelemetryViews.SsmsMinDialog,
'LaunchSsmsDialogError',
execException ? execException.code.toString() : '',
execException ? execException?.code?.toString() : '',
getTelemetryErrorType(err));
}
@@ -170,7 +171,7 @@ async function launchSsmsDialog(action: string, connectionContext: azdata.Object
// If we're not using AAD the tool prompts for a password on stdin
if (params.useAad !== true) {
proc.stdin.end(password ? password : '');
proc.stdin!.end(password ? password : '');
}
// Save the process into our map so we can make sure to stop them if we exit before shutting down

View File

@@ -8,6 +8,6 @@ import * as vscode from 'vscode';
describe('Extension activate test', () => {
it('Extension should activate correctly', async function (): Promise<void> {
await vscode.extensions.getExtension('Microsoft.admin-tool-ext-win').activate();
await vscode.extensions.getExtension('Microsoft.admin-tool-ext-win')!.activate();
});
});

View File

@@ -11,7 +11,7 @@ import * as vscode from 'vscode';
*/
export class ExtHostObjectExplorerNodeStub implements azdata.objectexplorer.ObjectExplorerNode {
// Stub properties
private parent: azdata.objectexplorer.ObjectExplorerNode;
private parent: azdata.objectexplorer.ObjectExplorerNode | undefined;
// Base properties
public connectionId: string;
@@ -24,10 +24,10 @@ export class ExtHostObjectExplorerNodeStub implements azdata.objectexplorer.Obje
public metadata: azdata.ObjectMetadata;
public errorMessage: string;
constructor(nodeName: string, nodeSchema: string, nodeType: string, parent: azdata.objectexplorer.ObjectExplorerNode) {
constructor(nodeName: string, nodeSchema: string, nodeType: string, parent?: azdata.objectexplorer.ObjectExplorerNode) {
this.parent = parent;
this.nodeType = nodeType;
this.metadata = { metadataType: undefined, metadataTypeName: undefined, name: nodeName, schema: nodeSchema, urn: undefined, parentName: undefined, parentTypeName: undefined };
this.metadata = { metadataType: azdata.MetadataType.Table, metadataTypeName: 'MyMetadataTypeName', name: nodeName, schema: nodeSchema, urn: 'urn', parentName: undefined, parentTypeName: undefined };
}
isExpanded(): Thenable<boolean> {
@@ -38,7 +38,7 @@ export class ExtHostObjectExplorerNodeStub implements azdata.objectexplorer.Obje
throw new Error('Method not implemented');
}
setSelected(selected: boolean, clearOtherSelections: boolean = undefined): Thenable<void> {
setSelected(selected: boolean, clearOtherSelections: boolean): Thenable<void> {
throw new Error('Method not implemented');
}

View File

@@ -77,14 +77,14 @@ describe('buildUrn Method Tests', () => {
it('Urn should be correct with Server and only Databases folder', async function (): Promise<void> {
const leafNode: ExtHostObjectExplorerNodeStub =
new ExtHostObjectExplorerNodeStub('MyServer', undefined, 'Server', undefined)
.createChild('Databases', undefined, 'Folder');
new ExtHostObjectExplorerNodeStub('MyServer', 'MySchema', 'Server', undefined)
.createChild('Databases', '', 'Folder');
should(await buildUrn(leafNode)).equal('Server');
});
it('Urn should be correct with Server and Database node', async function (): Promise<void> {
const leafNode: ExtHostObjectExplorerNodeStub =
new ExtHostObjectExplorerNodeStub('Databases', undefined, 'Folder', undefined)
new ExtHostObjectExplorerNodeStub('Databases', 'MySchema', 'Folder', undefined)
.createChild(dbName, dbSchema, 'Database');
should(await buildUrn(leafNode)).equal(
`Server/Database[@Name='${escapedDbName}' and @Schema='${escapedDbSchema}']`);
@@ -92,9 +92,9 @@ describe('buildUrn Method Tests', () => {
it('Urn should be correct with Multiple levels of Nodes', async function (): Promise<void> {
const rootNode: ExtHostObjectExplorerNodeStub =
new ExtHostObjectExplorerNodeStub('Databases', undefined, 'Folder', undefined)
new ExtHostObjectExplorerNodeStub('Databases', 'MySchema', 'Folder', undefined)
.createChild(dbName, dbSchema, 'Database')
.createChild('Tables', undefined, 'Folder')
.createChild('Tables', 'MySchema', 'Folder')
.createChild(tableName, tableSchema, 'Table');
should(await buildUrn(rootNode)).equal(
`Server/Database[@Name='${escapedDbName}' and @Schema='${escapedDbSchema}']/Table[@Name='${escapedTableName}' and @Schema='${escapedTableSchema}']`);
@@ -102,10 +102,10 @@ describe('buildUrn Method Tests', () => {
it('Urn should be correct with Multiple levels of Nodes without schemas', async function (): Promise<void> {
const rootNode: ExtHostObjectExplorerNodeStub =
new ExtHostObjectExplorerNodeStub('Databases', undefined, 'Folder', undefined)
.createChild(dbName, undefined, 'Database')
.createChild('Tables', undefined, 'Folder')
.createChild(tableName, undefined, 'Table');
new ExtHostObjectExplorerNodeStub('Databases', '', 'Folder', undefined)
.createChild(dbName, '', 'Database')
.createChild('Tables', '', 'Folder')
.createChild(tableName, '', 'Table');
should(await buildUrn(rootNode)).equal(
`Server/Database[@Name='${escapedDbName}']/Table[@Name='${escapedTableName}']`);
});

View File

@@ -126,7 +126,7 @@ export const nodeTypeToUrnNameMapping: { [oeNodeType: string]: SmoMapping } = {
* Builds the URN string for a given ObjectExplorerNode in the form understood by SsmsMin
* @param node The node to get the URN of
*/
export async function buildUrn(node: azdata.objectexplorer.ObjectExplorerNode): Promise<string> {
export async function buildUrn(node?: azdata.objectexplorer.ObjectExplorerNode): Promise<string> {
let urnNodes: string[] = [];
while (node) {
// Server is special since it's a connection node - always add it as the root

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,10 @@
{
"parserOptions": {
"project": "./extensions/agent/tsconfig.json"
},
"rules": {
// Disabled until the issues can be fixed
"@typescript-eslint/explicit-function-return-type": ["off"]
}
}

View File

@@ -19,12 +19,12 @@
"type": "git",
"url": "https://github.com/Microsoft/azuredatastudio.git"
},
"capabilities": {
"capabilities": {
"virtualWorkspaces": false,
"untrustedWorkspaces": {
"supported": true
}
},
},
"extensionDependencies": [
"Microsoft.mssql"
],
@@ -89,14 +89,14 @@
"vscode-nls": "^4.1.2"
},
"devDependencies": {
"@types/mocha": "^5.2.5",
"@types/mocha": "^7.0.2",
"@types/node": "^12.11.7",
"mocha": "^5.2.0",
"mocha": "^7.1.1",
"mocha-junit-reporter": "^1.17.0",
"mocha-multi-reporters": "^1.1.7",
"should": "^13.2.1",
"typemoq": "^2.1.0",
"@microsoft/vscodetestcover": "^1.2.0"
"@microsoft/vscodetestcover": "^1.2.1"
},
"__metadata": {
"id": "10",

View File

@@ -40,7 +40,7 @@ export abstract class AgentDialog<T extends IAgentDialogData> {
let event = dialogName ? dialogName : null;
this.dialog = azdata.window.createModelViewDialog(this.title, event);
await this.model.initialize();
this.model.initialize();
await this.initializeDialog(this.dialog);

View File

@@ -10,7 +10,8 @@
"experimentalDecorators": true,
"moduleResolution": "node",
"strict": false,
"noUnusedParameters": false
"noUnusedParameters": false,
"strictNullChecks": false
},
"exclude": [
"node_modules"

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,9 @@
{
"parserOptions": {
"project": "./extensions/arc/tsconfig.json"
},
"rules": {
// Disabled until the issues can be fixed
"@typescript-eslint/explicit-function-return-type": ["off"]
}
}

View File

@@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18">
<defs>
<linearGradient id="a8a99b72-4483-4aed-9c09-505d227627b7" x1="9" y1="778.831" x2="9" y2="790.831" gradientTransform="matrix(1, 0, 0, -1, 0, 791.516)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#0078d4" />
<stop offset="0.82" stop-color="#5ea0ef" />
</linearGradient>
<linearGradient id="ab11b5a0-213c-48d8-9a74-d2a9e98a4058" x1="9" y1="774.201" x2="9" y2="778.831" gradientTransform="matrix(1, 0, 0, -1, 0, 791.516)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#ccc" />
<stop offset="1" stop-color="#707070" />
</linearGradient>
</defs>
<rect y="0.685" width="18" height="12" rx="0.6" fill="url(#a8a99b72-4483-4aed-9c09-505d227627b7)" />
<path d="M12.61,16.315c-1.78-.28-1.85-1.56-1.85-3.63H7.23c0,2.07-.06,3.35-1.84,3.63a1,1,0,0,0-.89,1h9A1,1,0,0,0,12.61,16.315Z" fill="url(#ab11b5a0-213c-48d8-9a74-d2a9e98a4058)" />
<path d="M4.939,6.782l0,2.588a.147.147,0,0,0,.147.147.149.149,0,0,0,.086-.028l.712-.512A4.174,4.174,0,0,0,7.506,10.3a4.084,4.084,0,0,0,1.674.361,3.909,3.909,0,0,0,.684-.06,3.993,3.993,0,0,0,1.123-.369,3.848,3.848,0,0,0,.952-.677,3.917,3.917,0,0,0,1.108-1.983.224.224,0,0,0-.153-.261.216.216,0,0,0-.066-.01.223.223,0,0,0-.214.158v0A3.372,3.372,0,0,1,11.52,9.079a3.186,3.186,0,0,1-1.762.712c-.093.009-.186.013-.278.013a3.161,3.161,0,0,1-1.531-.4,3.106,3.106,0,0,1-1.135-1.1l.99-.712a.147.147,0,0,0-.048-.261L5.123,6.641a.128.128,0,0,0-.038,0A.146.146,0,0,0,4.939,6.782Z" fill="#fff" opacity="0.8" />
<path d="M13.065,6.628V4.041a.148.148,0,0,0-.148-.147.146.146,0,0,0-.085.028l-.67.484a4.193,4.193,0,0,0-1.7-1.357,4.114,4.114,0,0,0-1.618-.335A3.929,3.929,0,0,0,4.962,5.857a.2.2,0,0,0,.136.227.225.225,0,0,0,.058.008.2.2,0,0,0,.188-.139v0a3.4,3.4,0,0,1,1.1-1.632A3.213,3.213,0,0,1,8.2,3.607c.094-.009.188-.014.281-.014a3.13,3.13,0,0,1,1.517.4,3.052,3.052,0,0,1,1.154,1.143l-.957.69a.147.147,0,0,0,.049.261l2.634.687a.122.122,0,0,0,.037.005A.147.147,0,0,0,13.065,6.628Z" fill="#fff" />
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -185,21 +185,24 @@
"print (f'Creating Azure Arc Data Controller: {arc_data_controller_name} using configuration {arc_cluster_context}')\n",
"os.environ[\"AZDATA_USERNAME\"] = arc_admin_username\n",
"os.environ[\"AZDATA_PASSWORD\"] = arc_admin_password\n",
"os.environ[\"LOG_WORKSPACE_ID\"] = log_analytics_workspace_id\n",
"os.environ[\"LOG_SHARED_KEY\"] = log_analytics_primary_key\n",
"\n",
"# If connection mode is indirect\n",
"namespace = f' --k8s-namespace {arc_data_controller_namespace}' if is_indirect else ''\n",
"use_k8s = ' --use-k8s' if is_indirect else ''\n",
"\n",
"# If connection mode is direct\n",
"custom_location = f' --custom-location {arc_data_controller_custom_location}' if not is_indirect else ''\n",
"\n",
"cluster_name = f' --cluster-name {arc_cluster_context}' if not is_indirect else ''\n",
"auto_upload_metrics_value = 'true' if arc_data_controller_auto_upload_metrics == 'true' else 'false'\n",
"auto_upload_logs_value = 'true' if arc_data_controller_auto_upload_logs == 'true' else 'false'\n",
"\n",
"auto_upload_metrics = f' --auto-upload-metrics {auto_upload_metrics_value}' if not is_indirect else ''\n",
"auto_upload_logs = f' --auto-upload-logs {auto_upload_logs_value}' if not is_indirect else ''\n",
"\n",
"if os.name == 'nt':\n",
" print(f'If you don\\'t see output produced by az, you can run the following command in a terminal window to check the deployment status:\\n\\t {os.environ[\"AZDATA_NB_VAR_KUBECTL\"]} get pods -n {arc_data_controller_namespace}')\n",
"run_command(f'az arcdata dc create --connectivity-mode {arc_data_controller_connectivity_mode} --name {arc_data_controller_name}{namespace} --subscription {arc_subscription} --resource-group {arc_resource_group} --location {arc_data_controller_location} --storage-class {arc_data_controller_storage_class} --profile-name {arc_profile} --infrastructure {arc_infrastructure}{custom_location}{auto_upload_metrics}{auto_upload_logs}{use_k8s}')\n",
"run_command(f'az arcdata dc create --connectivity-mode {arc_data_controller_connectivity_mode} --name {arc_data_controller_name}{namespace} --subscription {arc_subscription} --resource-group {arc_resource_group} --location {arc_data_controller_location} --storage-class {arc_data_controller_storage_class} --profile-name {arc_profile} --infrastructure {arc_infrastructure}{custom_location}{cluster_name}{auto_upload_metrics}{auto_upload_logs}{use_k8s}')\n",
"print(f'Azure Arc Data Controller: {arc_data_controller_name} created.') "
]
},

View File

@@ -2,7 +2,7 @@
"name": "arc",
"displayName": "%arc.displayName%",
"description": "%arc.description%",
"version": "1.0.0",
"version": "1.3.0",
"publisher": "Microsoft",
"license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/main/LICENSE.txt",
"icon": "images/extension.png",
@@ -20,12 +20,12 @@
"Microsoft.azcli",
"Microsoft.resource-deployment"
],
"capabilities": {
"capabilities": {
"virtualWorkspaces": false,
"untrustedWorkspaces": {
"supported": true
}
},
},
"repository": {
"type": "git",
"url": "https://github.com/Microsoft/azuredatastudio.git"
@@ -360,6 +360,49 @@
"target": "AZDATA_NB_VAR_ARC_DATA_CONTROLLER_CONNECTIVITY_MODE",
"value": "Direct"
}
},
{
"type": "options",
"label": "%arc.data.controller.log.analytics.workspace.names%",
"variableName": "AZDATA_NB_VAR_LOG_ANALYTICS_WORKSPACE_NAMES",
"required": true,
"options": {
"source": {
"providerId": "arc.logAnalyticsWorkspaceNames"
},
"optionsType": "dropdown"
},
"enabled": {
"target": "AZDATA_NB_VAR_ARC_DATA_CONTROLLER_AUTO_UPLOAD_LOGS",
"value": "true"
}
},
{
"type": "text",
"label": "%arc.data.controller.log.analytics.workspace.id%",
"required": true,
"isEvaluated": true,
"variableName": "AZDATA_NB_VAR_LOG_ANALYTICS_WORKSPACE_ID",
"valueProvider": {
"providerId": "workspace-name-to-id",
"triggerFields": [
"AZDATA_NB_VAR_LOG_ANALYTICS_WORKSPACE_NAMES"
]
},
"enabled": {
"target": "AZDATA_NB_VAR_ARC_DATA_CONTROLLER_AUTO_UPLOAD_LOGS",
"value": "true"
}
},
{
"type": "text",
"label": "%arc.data.controller.log.analytics.primary.key%",
"required": true,
"variableName": "AZDATA_NB_VAR_LOG_ANALYTICS_PRIMARY_KEY",
"enabled": {
"target": "AZDATA_NB_VAR_ARC_DATA_CONTROLLER_AUTO_UPLOAD_LOGS",
"value": "true"
}
}
]
},
@@ -1091,8 +1134,7 @@
"defaultValue": "2",
"optionsType": "radio"
},
"dynamicOptions":
{
"dynamicOptions": {
"target": "AZDATA_NB_VAR_SQL_SERVICE_TIER",
"alternates": [
{
@@ -1344,7 +1386,7 @@
}
]
}
]
]
}
]
},
@@ -1390,6 +1432,9 @@
"resourceDeploymentOptionsSources": [
{
"id": "arc.controllers"
},
{
"id": "arc.logAnalyticsWorkspaceNames"
}
]
},
@@ -1399,19 +1444,19 @@
"yamljs": "^0.3.0"
},
"devDependencies": {
"@types/mocha": "^5.2.5",
"@types/mocha": "^7.0.2",
"@types/node": "^12.11.7",
"@types/sinon": "^9.0.4",
"@types/uuid": "^8.3.0",
"@types/yamljs": "^0.2.31",
"@microsoft/azdata-test": "^1.5.1",
"mocha": "^5.2.0",
"mocha": "^7.1.1",
"mocha-junit-reporter": "^1.17.0",
"mocha-multi-reporters": "^1.1.7",
"should": "^13.2.3",
"sinon": "^9.0.2",
"typemoq": "2.1.0",
"@microsoft/vscodetestcover": "^1.2.0"
"@microsoft/vscodetestcover": "^1.2.1"
},
"__metadata": {
"id": "68",

View File

@@ -14,7 +14,7 @@
"arc.openDashboard": "Manage",
"resource.type.azure.arc.display.name": "Azure Arc data controller",
"resource.type.azure.arc.description": "Creates an Azure Arc data controller",
"resource.type.azure.arc.description": "Creates an Azure Arc data controller. Ensure that you have run az login before starting this wizard.",
"arc.data.controller.new.wizard.title": "Create Azure Arc data controller",
"arc.data.controller.cluster.environment.title": "What is your target existing Kubernetes cluster environment?",
"arc.data.controller.select.cluster.title": "Select from existing Kubernetes clusters",
@@ -43,6 +43,9 @@
"arc.data.controller.auto.upload.metrics.description": "Enable the automatic upload of metrics. Direct mode only.",
"arc.data.controller.auto.upload.logs": "Auto-upload Logs",
"arc.data.controller.auto.upload.logs.description": "Enable the automatic upload of logs. Direct mode only.",
"arc.data.controller.log.analytics.workspace.names": "Log Analytics workspace",
"arc.data.controller.log.analytics.workspace.id": "Log Analytics workspace ID",
"arc.data.controller.log.analytics.primary.key": "Log Analytics primary key",
"arc.data.controller.metrics.and.logs.dashboard.credentials.title": "Metrics and Logs Dashboard Credentials",
"arc.data.controller.metrics.and.logs.dashboard.credentials.username": "Username",
@@ -102,7 +105,7 @@
"arc.sql.high.availability": "High availability",
"arc.sql.high.availability.description": "Enable additional replicas for high availabilty. The compute and storage configuration selected below will be applied to all replicas.",
"arc.sql.service.tier.general.purpose": "General Purpose (Up to 24 vCores and 128 Gi of RAM, standard high availability)",
"arc.sql.service.tier.business.critical": "[PREVIEW] Business Critical (Unlimited vCores and RAM, advanced high availability)",
"arc.sql.service.tier.business.critical": "Business Critical (Unlimited vCores and RAM, advanced high availability)",
"arc.sql.one.replica": "1 replica",
"arc.sql.two.replicas": "2 replicas",
"arc.sql.three.replicas": "3 replicas",

View File

@@ -12,24 +12,19 @@ export const SqlManagedInstanceGeneralPurpose = {
licenseIncludedPricePerCore: 153,
maxMemorySize: 128,
maxVCores: 24,
replicaOptions: [
{
text: loc.replicaOne,
value: 1,
}
],
defaultReplicaValue: 1
};
const SqlManagedInstanceBusinessCritical = {
tierName: loc.businessCriticalLabel,
// Set to real values when BC is ready
basePricePerCore: 0,
licenseIncludedPricePerCore: 0,
basePricePerCore: 160,
licenseIncludedPricePerCore: 434,
replicaOptions: [
{
text: loc.replicaTwo,
@@ -40,7 +35,6 @@ const SqlManagedInstanceBusinessCritical = {
value: 3,
}
],
defaultReplicaValue: 3
};

View File

@@ -0,0 +1,28 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { InputValueType } from 'resource-deployment';
import * as azExt from 'az-ext';
import * as vscode from 'vscode';
import { errorListingLogAnalyticsWorkspaces } from '../localizedConstants';
export const licenseTypeVarName = 'AZDATA_NB_VAR_LOG_ANALYTICS_WORKSPACE_NAMES';
// Gets the Log Analytics workspace id from the workspace name.
export async function getWorkspaceIdFromName(triggerFields: { [key: string]: InputValueType }): Promise<string | undefined> {
try {
const _azApi = <azExt.IExtension>vscode.extensions.getExtension(azExt.extension.name)?.exports;
const workspaces = await _azApi.az.monitor.logAnalytics.workspace.list();
const targetWorkspace = workspaces.stdout.find(workspace => workspace.name === triggerFields[licenseTypeVarName]);
if (targetWorkspace) {
return targetWorkspace.customerId;
} else {
return undefined;
}
} catch (e) {
vscode.window.showErrorMessage(errorListingLogAnalyticsWorkspaces(e));
throw e;
}
}

View File

@@ -35,6 +35,7 @@ export class IconPathHelper {
public static properties: IconPath;
public static networking: IconPath;
public static pitr: IconPath;
public static upgrade: IconPath;
public static refresh: IconPath;
public static reset: IconPath;
public static support: IconPath;
@@ -160,6 +161,10 @@ export class IconPathHelper {
light: context.asAbsolutePath('images/pitr.svg'),
dark: context.asAbsolutePath('images/pitr.svg'),
};
IconPathHelper.upgrade = {
light: context.asAbsolutePath('images/upgrade.svg'),
dark: context.asAbsolutePath('images/upgrade.svg'),
};
}
}
@@ -178,6 +183,7 @@ export const enum ConnectionMode {
export namespace cssStyles {
export const text = { 'user-select': 'text', 'cursor': 'text' };
export const code = { 'user-select': 'text', 'cursor': 'text', 'font-style': 'italic' };
export const title = { ...text, 'font-weight': 'bold', 'font-size': '14px' };
export const tableHeader = { ...text, 'text-align': 'left', 'border': 'none' };
export const tableRow = { ...text, 'border-top': 'solid 1px #ccc', 'border-bottom': 'solid 1px #ccc', 'border-left': 'none', 'border-right': 'none' };

View File

@@ -15,6 +15,8 @@ import { AzureArcTreeDataProvider } from './ui/tree/azureArcTreeDataProvider';
import { ControllerTreeNode } from './ui/tree/controllerTreeNode';
import { TreeNode } from './ui/tree/treeNode';
import * as pricing from './common/pricingUtils';
import * as workspace from './common/workspaceUtils';
import { LogAnalyticsWorkspaceOptionsSourceProvider } from './providers/logAnalyticsWorkspaceOptionsSourceProvider';
export async function activate(context: vscode.ExtensionContext): Promise<arc.IExtension> {
IconPathHelper.setExtensionContext(context);
@@ -61,6 +63,15 @@ export async function activate(context: vscode.ExtensionContext): Promise<arc.IE
// register option sources
const rdApi = <rd.IExtension>vscode.extensions.getExtension(rd.extension.name)?.exports;
context.subscriptions.push(rdApi.registerOptionsSourceProvider(new ArcControllersOptionsSourceProvider(treeDataProvider)));
context.subscriptions.push(rdApi.registerOptionsSourceProvider(new LogAnalyticsWorkspaceOptionsSourceProvider()));
// Register valueprovider for getting the Log Analytics workspace id from the workspace name.
context.subscriptions.push(rdApi.registerValueProvider({
id: 'workspace-name-to-id',
getValue: async (triggerFields: { [key: string]: rd.InputValueType }) => {
return workspace.getWorkspaceIdFromName(triggerFields);
}
}));
// Register valueprovider for getting the calculated cost per VCore.
context.subscriptions.push(rdApi.registerValueProvider({

View File

@@ -127,7 +127,7 @@ export const indirect = localize('arc.indirect', "Indirect");
export const loading = localize('arc.loading', "Loading...");
export const refreshToEnterCredentials = localize('arc.refreshToEnterCredentials', "Refresh node to enter credentials");
export const noInstancesAvailable = localize('arc.noInstancesAvailable', "No instances available");
export const connectToServer = localize('arc.connecToServer', "Connect to Server");
export const connectToServer = localize('arc.connectToServer', "Connect to Server");
export const connectToController = localize('arc.connectToController', "Connect to Existing Controller");
export function connectToMSSql(name: string): string { return localize('arc.connectToMSSql', "Connect to SQL managed instance - Azure Arc ({0})", name); }
export function connectToPGSql(name: string): string { return localize('arc.connectToPGSql', "Connect to PostgreSQL Hyperscale - Azure Arc ({0})", name); }
@@ -334,3 +334,29 @@ export const userCancelledError = localize('arc.userCancelledError', "User cance
export const clusterContextConfigNoLongerValid = (configFile: string, clusterContext: string, error: any) => localize('clusterContextConfigNoLongerValid', "The cluster context information specified by config file: {0} and cluster context: {1} is no longer valid. Error is:\n\t{2}\n Do you want to update this information?", configFile, clusterContext, getErrorMessage(error));
export const invalidConfigPath = localize('arc.invalidConfigPath', "Invalid config path");
export const loadingClusterContextsError = (error: any): string => localize('arc.loadingClusterContextsError', "Error loading cluster contexts. {0}", getErrorMessage(error));
// Upgrade
export const upgradeManagement = localize('arc.upgradeManagement', "Upgrade Management");
export const availableUpgrades = localize('arc.availableUpgrades', "Available Upgrades");
export const availableUpgradesDescription = localize('arc.availableUpgradesDescription', "Available upgrades for this resource are listed below. You can apply upgrades by clicking the upgrade button.");
export const versionLog = localize('arc.versionLog', "Learn more about each release here.");
export const onlyNextImmediateVersion = localize('arc.onlyNextImmediateVersion', "Currently, only upgrading to the next immediate version is supported.");
export const onlyNextImmediateVersionMiaa = localize('arc.onlyNextImmediateVersionMiaa', "The version of a SQL Managed Instance can not be newer than the version of its data controller. Currently, only upgrading to the next immediate version is supported.");
export const version = localize('arc.version', "Version");
export const releaseDate = localize('arc.releaseDate', "Release Date");
export const releaseNotes = localize('arc.releaseNotes', "Release Notes");
export const upgrade = localize('arc.upgrade', "Upgrade");
export const upgradeDataController = localize('arc.upgradeDataController', "Upgrade Data Controller");
export const upgradeMiaa = localize('arc.upgradeMiaa', "Upgrade SQL Managed Instance");
export const areYouSure = localize('arc.areYouSure', "Are you sure you want to apply the selected upgrade?");
export const upgradeDialogController = localize('arc.upgradeDialogController', "During a data controller upgrade, portions of the data control plane such as Custom Resource Definitions (CRDs) and containers may be upgraded. An upgrade of the data controller will not cause downtime for the data services (SQL Managed Instance or PostgreSQL server).");
export const upgradeDialogMiaa = localize('arc.upgradeDialogMiaa', "During a SQL managed instance upgrade, portions of the data control plane such as Custom Resource Definitions (CRDs) and containers may be upgraded. An upgrade of the SQL managed instance will not cause downtime for the data services (SQL Managed Instance or PostgreSQL server).");
export const monitorUpgrade = localize('arc.monitorUpgrade', "You can check the status of the upgrade by running the following command:");
export function errorListingLogAnalyticsWorkspaces(error: any): string { return localize('arc.errorListingLogAnalyticsWorkspaces', "Error listing Log Analytics workspaces {0}", getErrorMessage(error, true)); }
export const noUpgrades = localize('arc.noUpgrades', 'The current version is the latest version. No upgrades available.');
export function upgradingController(param: any): string { return localize('arc.upgradingController', "Data controller is being upgraded. You can check the status of the upgrade by running the following command: 'kubectl get datacontrollers -A'", param); }
export function upgradingMiaa(param: any): string { return localize('arc.upgradingMiaa', "SQL managed instance is being upgraded. You can check the status of the upgrade by running the following command: 'kubectl get sqlmi -A'", param); }
export const currentVersion = localize('arc.currentVersion', "Current version");
export const showMiaaError = localize('arc.showMiaaError', "Error showing details of SQL managed instance.");
export const miaaVersionError = localize('arc.miaaVersionError', "Error getting SQL managed instance version number.");
export const errorGettingConnectionMode = localize('arc.errorGettingConnectionMode', "Error getting data controller connection mode.");

View File

@@ -6,6 +6,7 @@
import { ControllerInfo, ResourceType } from 'arc';
import * as azExt from 'az-ext';
import * as vscode from 'vscode';
import { ConnectionMode } from '../constants';
import * as loc from '../localizedConstants';
import { AzureArcTreeDataProvider } from '../ui/tree/azureArcTreeDataProvider';
@@ -66,8 +67,17 @@ export class ControllerModel {
await this.refresh(false, this.info.namespace);
}
}
public async refresh(showErrors: boolean = true, namespace: string): Promise<void> {
const newRegistrations: Registration[] = [];
await this.refreshController(showErrors, namespace);
if (this._controllerConfig?.spec.settings.azure.connectionMode === ConnectionMode.direct) {
await this.refreshDirectMode(this._controllerConfig?.spec.settings.azure.resourceGroup, namespace);
} else {
await this.refreshIndirectMode(namespace);
}
}
public async refreshController(showErrors: boolean = true, namespace: string): Promise<void> {
await Promise.all([
this._azApi.az.arcdata.dc.config.show(namespace, this.azAdditionalEnvVars).then(result => {
this._controllerConfig = result.stdout;
@@ -96,35 +106,68 @@ export class ControllerModel {
}
this._onEndpointsUpdated.fire(this._endpoints);
throw err;
}),
Promise.all([
this._azApi.az.postgres.arcserver.list(namespace, this.azAdditionalEnvVars).then(result => {
newRegistrations.push(...result.stdout.map(r => {
return {
instanceName: r.name,
state: r.state,
instanceType: ResourceType.postgresInstances
};
}));
}),
this._azApi.az.sql.miarc.list(namespace, this.azAdditionalEnvVars).then(result => {
newRegistrations.push(...result.stdout.map(r => {
return {
instanceName: r.name,
state: r.state,
instanceType: ResourceType.sqlManagedInstances
};
}));
})
]).then(() => {
this._registrations = newRegistrations;
this.registrationsLastUpdated = new Date();
this._onRegistrationsUpdated.fire(this._registrations);
})
]);
}
public async refreshDirectMode(resourceGroup: string, namespace: string): Promise<void> {
const newRegistrations: Registration[] = [];
await Promise.all([
this._azApi.az.postgres.arcserver.list(namespace, this.azAdditionalEnvVars).then(result => {
newRegistrations.push(...result.stdout.map(r => {
return {
instanceName: r.name,
state: r.state,
instanceType: ResourceType.postgresInstances
};
}));
}),
this._azApi.az.sql.miarc.list({ resourceGroup: resourceGroup, namespace: undefined }, this.azAdditionalEnvVars).then(result => {
newRegistrations.push(...result.stdout.map(r => {
return {
instanceName: r.name,
state: r.state,
instanceType: ResourceType.sqlManagedInstances
};
}));
})
]).then(() => {
this._registrations = newRegistrations;
this.registrationsLastUpdated = new Date();
this._onRegistrationsUpdated.fire(this._registrations);
});
}
public async refreshIndirectMode(namespace: string): Promise<void> {
const newRegistrations: Registration[] = [];
await Promise.all([
this._azApi.az.postgres.arcserver.list(namespace, this.azAdditionalEnvVars).then(result => {
newRegistrations.push(...result.stdout.map(r => {
return {
instanceName: r.name,
state: r.state,
instanceType: ResourceType.postgresInstances
};
}));
}),
this._azApi.az.sql.miarc.list({ resourceGroup: undefined, namespace: namespace }, this.azAdditionalEnvVars).then(result => {
newRegistrations.push(...result.stdout.map(r => {
return {
instanceName: r.name,
state: r.state,
instanceType: ResourceType.sqlManagedInstances
};
}));
})
]).then(() => {
this._registrations = newRegistrations;
this.registrationsLastUpdated = new Date();
this._onRegistrationsUpdated.fire(this._registrations);
});
}
public get endpoints(): azExt.DcEndpointListResult[] {
return this._endpoints;
}

View File

@@ -15,6 +15,7 @@ import { ConnectToMiaaSqlDialog } from '../ui/dialogs/connectMiaaDialog';
import { AzureArcTreeDataProvider } from '../ui/tree/azureArcTreeDataProvider';
import { ControllerModel, Registration } from './controllerModel';
import { ResourceModel } from './resourceModel';
import { ConnectionMode } from '../constants';
export type DatabaseModel = { name: string, status: string, earliestBackup: string, lastBackup: string };
export type RPModel = { recoveryPointObjective: string, retentionDays: string };
@@ -29,6 +30,7 @@ export type PITRModel = {
latestPitr: string,
destDbName: string
};
export type UpgradeModel = {};
export const systemDbs = ['master', 'msdb', 'tempdb', 'model'];
export class MiaaModel extends ResourceModel {
@@ -97,7 +99,26 @@ export class MiaaModel extends ResourceModel {
this._refreshPromise = new Deferred();
try {
try {
const result = await this._azApi.az.sql.miarc.show(this.info.name, this.controllerModel.info.namespace, this.controllerModel.azAdditionalEnvVars);
let result;
if (this.controllerModel.info.connectionMode === ConnectionMode.direct) {
result = await this._azApi.az.sql.miarc.show(
this.info.name,
{
resourceGroup: this.controllerModel.info.resourceGroup,
namespace: undefined
},
this.controllerModel.azAdditionalEnvVars
);
} else {
result = await this._azApi.az.sql.miarc.show(
this.info.name,
{
resourceGroup: undefined,
namespace: this.controllerModel.info.namespace
},
this.controllerModel.azAdditionalEnvVars
);
}
this._config = result.stdout;
this.configLastUpdated = new Date();
this.rpSettings.retentionDays = this._config?.spec?.backup?.retentionPeriodInDays?.toString() ?? '';
@@ -166,7 +187,7 @@ export class MiaaModel extends ResourceModel {
if (!result.connected) {
throw new Error(result.errorMessage);
}
this._activeConnectionId = result.connectionId;
this._activeConnectionId = result.connectionId!;
}
const provider = azdata.dataprotocol.getProvider<azdata.MetadataProvider>(this._connectionProfile!.providerName, azdata.DataProviderType.MetadataProvider);

View File

@@ -148,7 +148,7 @@ export class PostgresModel extends ResourceModel {
if (!result.connected) {
throw new Error(result.errorMessage);
}
this._activeConnectionId = result.connectionId;
this._activeConnectionId = result.connectionId!;
}
// TODO Need to make separate calls for worker nodes and coordinator node

View File

@@ -0,0 +1,31 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as azExt from 'az-ext';
import * as rd from 'resource-deployment';
import * as vscode from 'vscode';
import { errorListingLogAnalyticsWorkspaces } from '../localizedConstants';
/**
* Class that provides options sources for Log Analytics workspace names
*/
export class LogAnalyticsWorkspaceOptionsSourceProvider implements rd.IOptionsSourceProvider {
readonly id = 'arc.logAnalyticsWorkspaceNames';
private readonly _azApi: azExt.IExtension;
constructor() {
this._azApi = <azExt.IExtension>vscode.extensions.getExtension(azExt.extension.name)?.exports;
}
public async getOptions(): Promise<string[]> {
try {
const workspacesListResult = await this._azApi.az.monitor.logAnalytics.workspace.list();
return workspacesListResult.stdout.map(workspace => workspace.name);
} catch (err) {
vscode.window.showErrorMessage(errorListingLogAnalyticsWorkspaces(err));
throw err;
}
}
}

View File

@@ -52,9 +52,6 @@ describe('radioOptionsGroup', function (): void {
const label = radioOptionsGroup.items[0] as azdata.TextComponent;
should(label.value).not.be.undefined();
label.value!.should.deepEqual(loc.loadingClusterContextsError(loadingError));
should(label.CSSStyles).not.be.undefined();
should(label.CSSStyles!.color).not.be.undefined();
label.CSSStyles!.color.should.equal('Red');
});
describe('getters and setters', async () => {

View File

@@ -67,7 +67,7 @@ export class RadioOptionsGroup {
this.component().loadingCompletedText = this._loadingCompleteMessage;
}
catch (e) {
const errorLabel = this._modelBuilder.text().withProps({ value: loc.loadingClusterContextsError(e), CSSStyles: { 'color': 'Red' } }).component();
const errorLabel = this._modelBuilder.text().withProps({ value: loc.loadingClusterContextsError(e), textType: azdata.TextType.Error }).component();
this._divContainer.addItem(errorLabel);
this.component().loadingCompletedText = this._loadingCompleteErrorMessage(e);
}

View File

@@ -8,6 +8,7 @@ import { Dashboard } from '../../components/dashboard';
import { ControllerModel } from '../../../models/controllerModel';
import { ControllerDashboardOverviewPage } from './controllerDashboardOverviewPage';
import * as loc from '../../../localizedConstants';
import { ControllerUpgradesPage } from './controllerUpgrades';
export class ControllerDashboard extends Dashboard {
@@ -23,8 +24,10 @@ export class ControllerDashboard extends Dashboard {
protected async registerTabs(modelView: azdata.ModelView): Promise<(azdata.DashboardTab | azdata.DashboardTabGroup)[]> {
const overviewPage = new ControllerDashboardOverviewPage(modelView, this.dashboard, this._controllerModel);
const upgradesPage = new ControllerUpgradesPage(modelView, this.dashboard, this._controllerModel);
return [
overviewPage.tab
overviewPage.tab,
upgradesPage.tab
];
}

View File

@@ -32,6 +32,7 @@ export class ControllerDashboardOverviewPage extends DashboardPage {
subscriptionId: '-',
connectionMode: '-',
instanceNamespace: '-',
status: '-'
};
constructor(modelView: azdata.ModelView, dashboard: azdata.window.ModelViewDashboard, private _controllerModel: ControllerModel) {
@@ -219,6 +220,7 @@ export class ControllerDashboardOverviewPage extends DashboardPage {
this.controllerProperties.subscriptionId = config?.spec.settings.azure.subscription || this.controllerProperties.subscriptionId;
this.controllerProperties.connectionMode = getConnectionModeDisplayText(config?.spec.settings.azure.connectionMode) || this.controllerProperties.connectionMode;
this.controllerProperties.instanceNamespace = config?.metadata.namespace || this.controllerProperties.instanceNamespace;
this.controllerProperties.status = config?.status.state || this.controllerProperties.status;
this.refreshDisplayedProperties();
let registrations: (string | azdata.ImageComponent | azdata.HyperlinkComponent)[][] = this._controllerModel.registrations
@@ -285,6 +287,10 @@ export class ControllerDashboardOverviewPage extends DashboardPage {
{
displayName: loc.namespace,
value: this.controllerProperties.instanceNamespace
},
{
displayName: loc.status,
value: this.controllerProperties.status
}
];

View File

@@ -0,0 +1,268 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
import * as azdata from 'azdata';
import * as azExt from 'az-ext';
import * as loc from '../../../localizedConstants';
import { IconPathHelper, cssStyles, ConnectionMode } from '../../../constants';
import { DashboardPage } from '../../components/dashboardPage';
import { ControllerModel } from '../../../models/controllerModel';
import { UpgradeController } from '../../dialogs/upgradeController';
export class ControllerUpgradesPage extends DashboardPage {
constructor(modelView: azdata.ModelView, dashboard: azdata.window.ModelViewDashboard, private _controllerModel: ControllerModel) {
super(modelView, dashboard);
this._azApi = vscode.extensions.getExtension(azExt.extension.name)?.exports;
}
private _upgradesContainer!: azdata.DivContainer;
private _upgradesTableLoading!: azdata.LoadingComponent;
private _upgradesTable!: azdata.DeclarativeTableComponent;
private _upgradesMessage!: azdata.TextComponent;
private readonly _azApi: azExt.IExtension;
public get title(): string {
return loc.upgradeManagement;
}
public get id(): string {
return 'upgrades';
}
public get icon(): { dark: string, light: string } {
return IconPathHelper.upgrade;
}
protected async refresh(): Promise<void> {
await Promise.resolve(this._controllerModel.refresh(false, this._controllerModel.info.namespace));
this.handleTableUpdated();
}
public get container(): azdata.Component {
const root = this.modelView.modelBuilder.flexContainer()
.withLayout({ flexFlow: 'column' })
.withProps({ CSSStyles: { 'margin': '18px' } })
.component();
const content = this.modelView.modelBuilder.divContainer().component();
this._upgradesContainer = this.modelView.modelBuilder.divContainer().component();
root.addItem(content, { CSSStyles: { 'margin': '5px' } });
// Upgrades title and description
const availableUpgradesTitle = this.modelView.modelBuilder.text().withProps({
value: loc.availableUpgrades,
CSSStyles: { ...cssStyles.title },
}).component();
content.addItem(availableUpgradesTitle);
const infoAvailableUpgrades = this.modelView.modelBuilder.text().withProps({
value: loc.availableUpgradesDescription,
CSSStyles: { ...cssStyles.text, 'margin-block-start': '0px', 'margin-block-end': '0px' }
}).component();
const upgradesVersionLogLink = this.modelView.modelBuilder.hyperlink().withProps({
label: loc.versionLog,
url: 'https://docs.microsoft.com/azure/azure-arc/data/version-log'
}).component();
const upgradesInfoAndLink = this.modelView.modelBuilder.flexContainer()
.withLayout({ flexWrap: 'wrap' })
.withItems([
infoAvailableUpgrades,
upgradesVersionLogLink
], { CSSStyles: { 'margin-right': '5px' } }).component();
content.addItem(upgradesInfoAndLink, { CSSStyles: { 'min-height': '30px' } });
const infoOnlyNextImmediateVersion = this.modelView.modelBuilder.text().withProps({
value: loc.onlyNextImmediateVersion,
CSSStyles: { ...cssStyles.text, 'margin-block-start': '0px', 'margin-block-end': '0px', 'max-width': 'auto' }
}).component();
content.addItem(infoOnlyNextImmediateVersion, { CSSStyles: { 'min-height': '30px' } });
// Create loaded components
this._upgradesTableLoading = this.modelView.modelBuilder.loadingComponent().component();
this._upgradesTable = this.modelView.modelBuilder.declarativeTable().withProps({
width: '100%',
columns: [
{
displayName: loc.version,
valueType: azdata.DeclarativeDataType.string,
isReadOnly: true,
width: '30%',
headerCssStyles: cssStyles.tableHeader,
rowCssStyles: cssStyles.tableRow
},
{
displayName: loc.releaseDate,
valueType: azdata.DeclarativeDataType.string,
isReadOnly: true,
width: '30%',
headerCssStyles: cssStyles.tableHeader,
rowCssStyles: cssStyles.tableRow
},
{
displayName: loc.upgrade,
valueType: azdata.DeclarativeDataType.component,
isReadOnly: true,
width: '10%',
headerCssStyles: cssStyles.tableHeader,
rowCssStyles: cssStyles.tableRow,
}
],
dataValues: []
}).component();
this._upgradesMessage = this.modelView.modelBuilder.text()
.withProps({ CSSStyles: { 'text-align': 'center' } })
.component();
this.handleTableUpdated();
this._upgradesTableLoading.component = this._upgradesTable;
root.addItem(this._upgradesContainer);
root.addItem(this._upgradesMessage);
this.initialized = true;
this._upgradesTableLoading.loading = false;
this._upgradesContainer.addItem(this._upgradesTableLoading, { CSSStyles: { 'margin-bottom': '20px' } });
return root;
}
public get toolbarContainer(): azdata.ToolbarContainer {
// Refresh
const refreshButton = this.modelView.modelBuilder.button().withProps({
label: loc.refresh,
iconPath: IconPathHelper.refresh
}).component();
this.disposables.push(
refreshButton.onDidClick(async () => {
refreshButton.enabled = false;
try {
await this.refresh();
} finally {
refreshButton.enabled = true;
}
}));
return this.modelView.modelBuilder.toolbarContainer().withToolbarItems(
[
{ component: refreshButton, toolbarSeparatorAfter: true },
]
).component();
}
private formatTableData(result: azExt.AzOutput<azExt.DcListUpgradesResult>): (string | azdata.ButtonComponent)[][] {
let formattedValues: (string | azdata.ButtonComponent)[][] = [];
const versions = result.stdout.versions;
const dates = result.stdout.dates;
const currentVersion = result.stdout.currentVersion;
const nextVersion = this.getNextVersion(versions, currentVersion);
// Iterate through all data controller versions from latest to oldest and stop when the loop reaches the current version.
// Only makes table entries for the current version and newer. The upgrade button will only be enabled for the very next
// version due to Azure CLI constraints.
for (let i = 0; i < versions.length; i++) {
if (versions[i] === currentVersion) {
formattedValues.push([versions[i], dates[i], this.createUpgradeButton(loc.currentVersion, false, '')]);
break;
} else if (versions[i] === nextVersion) {
formattedValues.push([versions[i], dates[i], this.createUpgradeButton(loc.upgrade, true, nextVersion)]);
} else {
formattedValues.push([versions[i], dates[i], this.createUpgradeButton(loc.upgrade, false, '')]);
}
}
return formattedValues;
}
private async handleTableUpdated(): Promise<void> {
const result = await this._azApi.az.arcdata.dc.listUpgrades(this._controllerModel.info.namespace);
let tableDisplay = this.formatTableData(result);
let tableValues = tableDisplay.map(d => {
return d.map((value: any): azdata.DeclarativeTableCellValue => {
return { value: value };
});
});
this._upgradesTable.setDataValues(tableValues);
this._upgradesTableLoading.loading = false;
this._upgradesContainer.addItem(this._upgradesTableLoading, { CSSStyles: { 'margin-bottom': '20px' } });
}
// Given the list of available versions and the current version, if the current version is not the newest,
// then return the next version available. List of versions is ordered newest to oldest.
// If current version is the newest, then return undefined.
private getNextVersion(versions: string[], currentVersion: string): string | undefined {
let index = versions.indexOf(currentVersion);
// The version at index 0 will be the newest
if (index > 0) {
return versions[index - 1];
} else {
return undefined;
}
}
//Create restore button for every database entry in the database table
private createUpgradeButton(label: string, enabled: boolean, nextVersion: string): azdata.ButtonComponent | string {
let upgradeButton = this.modelView.modelBuilder.button().withProps({
label: label,
enabled: enabled
}).component();
this.disposables.push(
upgradeButton.onDidClick(async () => {
const upgradeDialog = new UpgradeController(this._controllerModel);
upgradeDialog.showDialog(loc.upgradeDataController);
let dialogClosed = await upgradeDialog.waitForClose();
if (dialogClosed) {
try {
upgradeButton.enabled = false;
vscode.window.showInformationMessage(loc.upgradingController('kubectl get datacontrollers -A\' should not be localized.'));
await vscode.window.withProgress(
{
location: vscode.ProgressLocation.Notification,
title: loc.updatingInstance(this._controllerModel.info.name),
cancellable: true
},
async (_progress, _token): Promise<void> => {
if (nextVersion !== '') {
if (this._controllerModel.info.connectionMode === ConnectionMode.direct) {
await this._azApi.az.arcdata.dc.upgrade(
nextVersion,
this._controllerModel.info.name,
this._controllerModel.info.resourceGroup,
undefined, // Indirect mode argument - namespace
);
} else {
await this._azApi.az.arcdata.dc.upgrade(
nextVersion,
this._controllerModel.info.name,
undefined, // Direct mode argument - resourceGroup
this._controllerModel.info.namespace,
);
}
} else {
vscode.window.showInformationMessage(loc.noUpgrades);
}
try {
await this._controllerModel.refresh(false, this._controllerModel.info.namespace);
} catch (error) {
vscode.window.showErrorMessage(loc.refreshFailed(error));
}
}
);
} catch (error) {
console.log(error);
}
}
}));
return upgradeButton;
}
}

View File

@@ -12,6 +12,7 @@ import { MiaaConnectionStringsPage } from './miaaConnectionStringsPage';
import { MiaaModel } from '../../../models/miaaModel';
import { MiaaComputeAndStoragePage } from './miaaComputeAndStoragePage';
import { MiaaBackupsPage } from './miaaBackupsPage';
import { MiaaUpgradeManagementPage } from './miaaUpgradeManagementPage';
export class MiaaDashboard extends Dashboard {
@@ -31,6 +32,7 @@ export class MiaaDashboard extends Dashboard {
const connectionStringsPage = new MiaaConnectionStringsPage(modelView, this.dashboard, this._miaaModel);
const computeAndStoragePage = new MiaaComputeAndStoragePage(modelView, this.dashboard, this._miaaModel);
const miaaBackupsPage = new MiaaBackupsPage(modelView, this.dashboard, this._controllerModel, this._miaaModel);
const upgradeManagementPage = new MiaaUpgradeManagementPage(modelView, this.dashboard, this._controllerModel, this._miaaModel);
return [
overviewPage.tab,
{
@@ -38,7 +40,8 @@ export class MiaaDashboard extends Dashboard {
tabs: [
connectionStringsPage.tab,
computeAndStoragePage.tab,
miaaBackupsPage.tab
miaaBackupsPage.tab,
upgradeManagementPage.tab
]
},
];

View File

@@ -8,7 +8,7 @@ import * as azExt from 'az-ext';
import * as azurecore from 'azurecore';
import * as vscode from 'vscode';
import { getDatabaseStateDisplayText, promptForInstanceDeletion } from '../../../common/utils';
import { cssStyles, IconPathHelper, miaaTroubleshootDocsUrl } from '../../../constants';
import { ConnectionMode, cssStyles, IconPathHelper, miaaTroubleshootDocsUrl } from '../../../constants';
import * as loc from '../../../localizedConstants';
import { ControllerModel } from '../../../models/controllerModel';
import { MiaaModel } from '../../../models/miaaModel';
@@ -243,7 +243,25 @@ export class MiaaDashboardOverviewPage extends DashboardPage {
cancellable: false
},
async (_progress, _token) => {
return await this._azApi.az.sql.miarc.delete(this._miaaModel.info.name, this._controllerModel.info.namespace, this._controllerModel.azAdditionalEnvVars);
if (this._controllerModel.info.connectionMode === ConnectionMode.direct) {
return await this._azApi.az.sql.miarc.delete(
this._miaaModel.info.name,
{
resourceGroup: this._controllerModel.info.resourceGroup,
namespace: undefined,
},
this._controllerModel.azAdditionalEnvVars
);
} else {
return await this._azApi.az.sql.miarc.delete(
this._miaaModel.info.name,
{
resourceGroup: undefined,
namespace: this._controllerModel.info.namespace,
},
this._controllerModel.azAdditionalEnvVars
);
}
}
);
await this._controllerModel.refreshTreeNode();
@@ -337,7 +355,7 @@ export class MiaaDashboardOverviewPage extends DashboardPage {
if (this._miaaModel.config) {
this._instanceProperties.status = this._miaaModel.config.status.state || '-';
this._instanceProperties.externalEndpoint = this._miaaModel.config.status.primaryEndpoint || loc.notConfigured;
this._instanceProperties.vCores = this._miaaModel.config.spec.scheduling?.default?.resources?.limits?.cpu?.toString() || '';
this._instanceProperties.vCores = this._miaaModel.config.spec?.scheduling?.default?.resources?.limits?.cpu?.toString() || '';
this._databasesMessage.value = !this._miaaModel.config.status.primaryEndpoint ? loc.noExternalEndpoint : '';
if (!this._miaaModel.config.status.primaryEndpoint) {
this._databasesContainer.removeItem(this._connectToServerLoading);

View File

@@ -0,0 +1,307 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
import * as azdata from 'azdata';
import * as azExt from 'az-ext';
import * as loc from '../../../localizedConstants';
import { IconPathHelper, cssStyles, ConnectionMode } from '../../../constants';
import { DashboardPage } from '../../components/dashboardPage';
import { ControllerModel } from '../../../models/controllerModel';
import { UpgradeSqlMiaa } from '../../dialogs/upgradeSqlMiaa';
import { MiaaModel } from '../../../models/miaaModel';
export class MiaaUpgradeManagementPage extends DashboardPage {
constructor(modelView: azdata.ModelView, dashboard: azdata.window.ModelViewDashboard, private _controllerModel: ControllerModel, private _miaaModel: MiaaModel) {
super(modelView, dashboard);
this._azApi = vscode.extensions.getExtension(azExt.extension.name)?.exports;
}
private _upgradesContainer!: azdata.DivContainer;
private _upgradesTableLoading!: azdata.LoadingComponent;
private _upgradesTable!: azdata.DeclarativeTableComponent;
private _upgradesMessage!: azdata.TextComponent;
private readonly _azApi: azExt.IExtension;
public get title(): string {
return loc.upgradeManagement;
}
public get id(): string {
return 'upgrades';
}
public get icon(): { dark: string, light: string } {
return IconPathHelper.upgrade;
}
protected async refresh(): Promise<void> {
await Promise.resolve(this._controllerModel.refresh(false, this._controllerModel.info.namespace));
this.handleTableUpdated();
}
public get container(): azdata.Component {
const root = this.modelView.modelBuilder.flexContainer()
.withLayout({ flexFlow: 'column' })
.withProps({ CSSStyles: { 'margin': '18px' } })
.component();
const content = this.modelView.modelBuilder.divContainer().component();
this._upgradesContainer = this.modelView.modelBuilder.divContainer().component();
root.addItem(content, { CSSStyles: { 'margin': '5px' } });
// Upgrades title and description
const availableUpgradesTitle = this.modelView.modelBuilder.text().withProps({
value: loc.availableUpgrades,
CSSStyles: { ...cssStyles.title },
}).component();
content.addItem(availableUpgradesTitle);
const infoAvailableUpgrades = this.modelView.modelBuilder.text().withProps({
value: loc.availableUpgradesDescription,
CSSStyles: { ...cssStyles.text, 'margin-block-start': '0px', 'margin-block-end': '0px' }
}).component();
const upgradesVersionLogLink = this.modelView.modelBuilder.hyperlink().withProps({
label: loc.versionLog,
url: 'https://docs.microsoft.com/azure/azure-arc/data/upgrade-sql-managed-instance-direct-cli?WT.mc_id=Portal-Microsoft_Azure_HybridData_Platform'
}).component();
const upgradesInfoAndLink = this.modelView.modelBuilder.flexContainer()
.withLayout({ flexWrap: 'wrap' })
.withItems([
infoAvailableUpgrades,
upgradesVersionLogLink
], { CSSStyles: { 'margin-right': '5px' } }).component();
content.addItem(upgradesInfoAndLink, { CSSStyles: { 'min-height': '30px' } });
const infoOnlyNextImmediateVersion = this.modelView.modelBuilder.text().withProps({
value: loc.onlyNextImmediateVersionMiaa,
CSSStyles: { ...cssStyles.text, 'margin-block-start': '0px', 'margin-block-end': '0px', 'max-width': 'auto' }
}).component();
content.addItem(infoOnlyNextImmediateVersion, { CSSStyles: { 'min-height': '30px' } });
// Create loaded components
this._upgradesTableLoading = this.modelView.modelBuilder.loadingComponent().component();
this._upgradesTable = this.modelView.modelBuilder.declarativeTable().withProps({
width: '100%',
columns: [
{
displayName: loc.version,
valueType: azdata.DeclarativeDataType.string,
isReadOnly: true,
width: '30%',
headerCssStyles: cssStyles.tableHeader,
rowCssStyles: cssStyles.tableRow
},
{
displayName: loc.releaseDate,
valueType: azdata.DeclarativeDataType.string,
isReadOnly: true,
width: '30%',
headerCssStyles: cssStyles.tableHeader,
rowCssStyles: cssStyles.tableRow
},
{
displayName: loc.upgrade,
valueType: azdata.DeclarativeDataType.component,
isReadOnly: true,
width: '10%',
headerCssStyles: cssStyles.tableHeader,
rowCssStyles: cssStyles.tableRow,
}
],
dataValues: []
}).component();
this._upgradesMessage = this.modelView.modelBuilder.text()
.withProps({ CSSStyles: { 'text-align': 'center' } })
.component();
this.handleTableUpdated();
this._upgradesTableLoading.component = this._upgradesTable;
root.addItem(this._upgradesContainer);
root.addItem(this._upgradesMessage);
this.initialized = true;
this._upgradesTableLoading.loading = false;
this._upgradesContainer.addItem(this._upgradesTableLoading, { CSSStyles: { 'margin-bottom': '20px' } });
return root;
}
public get toolbarContainer(): azdata.ToolbarContainer {
// Refresh
const refreshButton = this.modelView.modelBuilder.button().withProps({
label: loc.refresh,
iconPath: IconPathHelper.refresh
}).component();
this.disposables.push(
refreshButton.onDidClick(async () => {
refreshButton.enabled = false;
try {
await this.refresh();
} finally {
refreshButton.enabled = true;
}
}));
return this.modelView.modelBuilder.toolbarContainer().withToolbarItems(
[
{ component: refreshButton, toolbarSeparatorAfter: true },
]
).component();
}
private async getMiaaVersion(): Promise<string | undefined> {
try {
let miaaShowResult;
if (this._controllerModel.info.connectionMode === ConnectionMode.direct || this._controllerModel.controllerConfig?.spec.settings.azure.connectionMode === ConnectionMode.direct) {
miaaShowResult = await this._azApi.az.sql.miarc.show(
this._miaaModel.info.name,
{
resourceGroup: this._controllerModel.info.resourceGroup,
namespace: undefined
},
this._controllerModel.azAdditionalEnvVars
);
} else {
miaaShowResult = await this._azApi.az.sql.miarc.show(
this._miaaModel.info.name,
{
resourceGroup: undefined,
namespace: this._controllerModel.info.namespace
},
this._controllerModel.azAdditionalEnvVars
);
}
return miaaShowResult.stdout.status.runningVersion;
} catch (e) {
console.error(loc.showMiaaError, e);
return undefined;
}
}
private async formatTableData(result: azExt.AzOutput<azExt.DcListUpgradesResult>): Promise<(string | azdata.ButtonComponent)[][]> {
let formattedValues: (string | azdata.ButtonComponent)[][] = [];
const versions = result.stdout.versions;
const dates = result.stdout.dates;
const currentControllerVersion = result.stdout.currentVersion;
const currentMiaaVersion = await this.getMiaaVersion();
const nextMiaaVersion = currentMiaaVersion ? this.getNextVersion(versions, currentMiaaVersion) : console.error(loc.miaaVersionError);
if (currentMiaaVersion === currentControllerVersion) {
for (let i = 0; i < versions.length; i++) {
if (versions[i] === currentMiaaVersion) {
formattedValues.push([versions[i], dates[i], this.createUpgradeButton(loc.currentVersion, false)]);
break;
} else {
formattedValues.push([versions[i], dates[i], this.createUpgradeButton(loc.upgrade, false)]);
}
}
} else {
for (let i = 0; i < versions.length; i++) {
if (versions[i] === nextMiaaVersion) {
formattedValues.push([versions[i], dates[i], this.createUpgradeButton(loc.upgrade, true)]);
formattedValues.push([versions[i + 1], dates[i + 1], this.createUpgradeButton(loc.currentVersion, false)]);
break;
} else {
formattedValues.push([versions[i], dates[i], this.createUpgradeButton(loc.upgrade, false)]);
}
}
}
return formattedValues;
}
private async handleTableUpdated(): Promise<void> {
const result = await this._azApi.az.arcdata.dc.listUpgrades(this._controllerModel.info.namespace);
let tableDisplay = await this.formatTableData(result);
let tableValues = tableDisplay.map(d => {
return d.map((value: any): azdata.DeclarativeTableCellValue => {
return { value: value };
});
});
this._upgradesTable.setDataValues(tableValues);
this._upgradesTableLoading.loading = false;
this._upgradesContainer.addItem(this._upgradesTableLoading, { CSSStyles: { 'margin-bottom': '20px' } });
}
// Given the list of available versions and the current version, if the current version is not the newest,
// then return the next version available. List of versions is ordered newest to oldest.
// If current version is the newest, then return undefined.
private getNextVersion(versions: string[], currentVersion: string): string | undefined {
let index = versions.indexOf(currentVersion);
// The version at index 0 will be the newest
if (index > 0) {
return versions[index - 1];
} else {
return undefined;
}
}
//Create restore button for every database entry in the database table
private createUpgradeButton(label: string, enabled: boolean): azdata.ButtonComponent | string {
let upgradeButton = this.modelView.modelBuilder.button().withProps({
label: label,
enabled: enabled
}).component();
this.disposables.push(
upgradeButton.onDidClick(async () => {
const upgradeDialog = new UpgradeSqlMiaa(this._controllerModel);
upgradeDialog.showDialog(loc.upgradeMiaa);
let dialogClosed = await upgradeDialog.waitForClose();
if (dialogClosed) {
try {
upgradeButton.enabled = false;
vscode.window.showInformationMessage(loc.upgradingMiaa('kubectl get sqlmi -A\' should not be localized.'));
await vscode.window.withProgress(
{
location: vscode.ProgressLocation.Notification,
title: loc.updatingInstance(this._miaaModel.info.name),
cancellable: true
},
async (_progress, _token): Promise<void> => {
if (this._controllerModel.info.connectionMode === ConnectionMode.direct) {
await this._azApi.az.sql.miarc.upgrade(
this._miaaModel.info.name,
{
resourceGroup: this._controllerModel.info.resourceGroup,
namespace: undefined
}
);
} else {
await this._azApi.az.sql.miarc.upgrade(
this._miaaModel.info.name,
{
resourceGroup: undefined,
namespace: this._controllerModel.info.namespace,
}
);
}
try {
await this._controllerModel.refresh(false, this._controllerModel.info.namespace);
} catch (error) {
vscode.window.showErrorMessage(loc.refreshFailed(error));
}
}
);
} catch (error) {
console.log(error);
}
}
}));
return upgradeButton;
}
}

View File

@@ -15,6 +15,7 @@ import { AzureArcTreeDataProvider } from '../tree/azureArcTreeDataProvider';
import { RadioOptionsGroup } from '../components/radioOptionsGroup';
import { getCurrentClusterContext, getDefaultKubeConfigPath, getKubeConfigClusterContexts, KubeClusterContext } from '../../common/kubeUtils';
import { FilePicker } from '../components/filePicker';
import { ConnectionMode } from '../../constants';
export type ConnectToControllerDialogModel = { controllerModel: ControllerModel };
@@ -203,9 +204,9 @@ export class ConnectToControllerDialog extends ControllerDialogBase {
controllerModel.info.connectionMode = <string>controllerModel.controllerConfig?.spec.settings.azure.connectionMode;
controllerModel.info.location = <string>controllerModel.controllerConfig?.spec.settings.azure.location;
if (controllerModel.info.connectionMode === 'direct') {
if (controllerModel.info.connectionMode === ConnectionMode.direct) {
const rawCustomLocation = <string>controllerModel.controllerConfig?.metadata.annotations['management.azure.com/customLocation'];
const exp = /\/\bsubscriptions\b\/[\S]*\/\bresourceGroups\/[\S]*\/providers\/[\S]*\/customLocations\/([\S]*)/;
const exp = /customlocations\/([\S]*)/;
controllerModel.info.customLocation = <string>exp.exec(rawCustomLocation)?.pop();
}
} catch (err) {

View File

@@ -111,7 +111,7 @@ export abstract class ConnectToSqlDialog extends InitializingComponent {
};
const result = await azdata.connection.connect(connectionProfile, false, false);
if (result.connected) {
connectionProfile.id = result.connectionId;
connectionProfile.id = result.connectionId!;
const credentialProvider = await azdata.credentials.getProvider(credentialNamespace);
if (connectionProfile.savePassword) {
await credentialProvider.saveCredential(createCredentialId(this._controllerModel.info.id, this._model.info.resourceType, this._model.info.name), connectionProfile.password);

View File

@@ -303,7 +303,7 @@ export class RestoreSqlDialog extends InitializingComponent {
}
public refreshPitrSettings(): void {
this.pitrSettings.instanceName = this._miaaModel?.config?.metadata.name || this.pitrSettings.instanceName;
this.pitrSettings.instanceName = this._miaaModel?.config?.name || this.pitrSettings.instanceName;
this.pitrSettings.resourceGroupName = this._controllerModel?.controllerConfig?.spec.settings.azure.resourceGroup || this.pitrSettings.resourceGroupName;
this.pitrSettings.location = this._azurecoreApi.getRegionDisplayName(this._controllerModel?.controllerConfig?.spec.settings.azure.location) || this.pitrSettings.location;
this.pitrSettings.subscriptionId = this._controllerModel?.controllerConfig?.spec.settings.azure.subscription || this.pitrSettings.subscriptionId;

View File

@@ -0,0 +1,94 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as azdata from 'azdata';
import { Deferred } from '../../common/promise';
import * as loc from '../../localizedConstants';
import * as vscode from 'vscode';
import { cssStyles } from '../../constants';
import { InitializingComponent } from '../components/initializingComponent';
import { UpgradeModel } from '../../models/miaaModel';
import { ControllerModel } from '../../models/controllerModel';
export class UpgradeController extends InitializingComponent {
protected modelBuilder!: azdata.ModelBuilder;
private pitrSettings: UpgradeModel = [];
private upgradeControllerDialogName = 'UpgradeControllerDialog';
protected _completionPromise = new Deferred<UpgradeModel | undefined>();
protected disposables: vscode.Disposable[] = [];
constructor(protected _controllerModel: ControllerModel) {
super();
}
public showDialog(dialogTitle: string): azdata.window.Dialog {
const dialog = azdata.window.createModelViewDialog(dialogTitle, this.upgradeControllerDialogName, 'narrow', 'flyout');
dialog.cancelButton.onClick(() => this.handleCancel());
dialog.registerContent(async view => {
this.modelBuilder = view.modelBuilder;
const areYouSure = this.modelBuilder.text().withProps({
value: loc.areYouSure,
CSSStyles: { ...cssStyles.title, 'margin-block-start': '0px', 'margin-block-end': '0px', 'max-width': 'auto' },
}).component();
const areYouSureInfo = this.modelBuilder.text().withProps({
value: loc.upgradeDialogController,
CSSStyles: { ...cssStyles.text, 'margin-block-start': '0px', 'max-width': 'auto' }
}).component();
const upgradeDialog = this.modelBuilder.flexContainer().withLayout({ flexWrap: 'wrap' }).component();
upgradeDialog.addItem(areYouSureInfo, { CSSStyles: { 'margin-right': '5px' } });
const monitorUpgradeInfo = this.modelBuilder.text().withProps({
value: loc.monitorUpgrade,
CSSStyles: { ...cssStyles.text, 'margin-block-start': '0px', 'max-width': 'auto' }
}).component();
upgradeDialog.addItem(monitorUpgradeInfo, { CSSStyles: { 'margin-right': '5px' } });
const monitorUpgradeCommandInfo = this.modelBuilder.text().withProps({
value: 'kubectl get datacontrollers -A',
CSSStyles: { ...cssStyles.code, 'margin-block-start': '0px', 'max-width': 'auto' }
}).component();
upgradeDialog.addItem(monitorUpgradeCommandInfo, { CSSStyles: { 'margin-right': '5px' } });
let formModel = this.modelBuilder.formContainer()
.withFormItems([{
components: [
{
component: areYouSure
},
{
component: upgradeDialog
}
],
title: ''
}]).withLayout({ width: '100%' }).component();
await view.initializeModel(formModel);
this.initialized = true;
});
dialog.okButton.label = loc.upgrade;
dialog.cancelButton.label = loc.cancel;
dialog.registerCloseValidator(async () => await this.validate());
dialog.okButton.onClick(() => {
this._completionPromise.resolve(this.pitrSettings);
});
azdata.window.openDialog(dialog);
return dialog;
}
public async validate(): Promise<boolean> {
return true;
}
private handleCancel(): void {
this._completionPromise.resolve(undefined);
}
public waitForClose(): Promise<UpgradeModel | undefined> {
return this._completionPromise.promise;
}
}

View File

@@ -0,0 +1,94 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as azdata from 'azdata';
import { Deferred } from '../../common/promise';
import * as loc from '../../localizedConstants';
import * as vscode from 'vscode';
import { cssStyles } from '../../constants';
import { InitializingComponent } from '../components/initializingComponent';
import { UpgradeModel } from '../../models/miaaModel';
import { ControllerModel } from '../../models/controllerModel';
export class UpgradeSqlMiaa extends InitializingComponent {
protected modelBuilder!: azdata.ModelBuilder;
private pitrSettings: UpgradeModel = [];
private upgradeMiaaDialogName = 'UpgradeSqlMiaaDialog';
protected _completionPromise = new Deferred<UpgradeModel | undefined>();
protected disposables: vscode.Disposable[] = [];
constructor(protected _controllerModel: ControllerModel) {
super();
}
public showDialog(dialogTitle: string): azdata.window.Dialog {
const dialog = azdata.window.createModelViewDialog(dialogTitle, this.upgradeMiaaDialogName, 'narrow', 'flyout');
dialog.cancelButton.onClick(() => this.handleCancel());
dialog.registerContent(async view => {
this.modelBuilder = view.modelBuilder;
const areYouSure = this.modelBuilder.text().withProps({
value: loc.areYouSure,
CSSStyles: { ...cssStyles.title, 'margin-block-start': '0px', 'margin-block-end': '0px', 'max-width': 'auto' },
}).component();
const areYouSureInfo = this.modelBuilder.text().withProps({
value: loc.upgradeDialogMiaa,
CSSStyles: { ...cssStyles.text, 'margin-block-start': '0px', 'max-width': 'auto' }
}).component();
const upgradeDialog = this.modelBuilder.flexContainer().withLayout({ flexWrap: 'wrap' }).component();
upgradeDialog.addItem(areYouSureInfo, { CSSStyles: { 'margin-right': '5px' } });
const monitorUpgradeInfo = this.modelBuilder.text().withProps({
value: loc.monitorUpgrade,
CSSStyles: { ...cssStyles.text, 'margin-block-start': '0px', 'max-width': 'auto' }
}).component();
upgradeDialog.addItem(monitorUpgradeInfo, { CSSStyles: { 'margin-right': '5px' } });
const monitorUpgradeCommandInfo = this.modelBuilder.text().withProps({
value: 'kubectl get sqlmi -A',
CSSStyles: { ...cssStyles.code, 'margin-block-start': '0px', 'max-width': 'auto' }
}).component();
upgradeDialog.addItem(monitorUpgradeCommandInfo, { CSSStyles: { 'margin-right': '5px' } });
let formModel = this.modelBuilder.formContainer()
.withFormItems([{
components: [
{
component: areYouSure
},
{
component: upgradeDialog
}
],
title: ''
}]).withLayout({ width: '100%' }).component();
await view.initializeModel(formModel);
this.initialized = true;
});
dialog.okButton.label = loc.upgrade;
dialog.cancelButton.label = loc.cancel;
dialog.registerCloseValidator(async () => await this.validate());
dialog.okButton.onClick(() => {
this._completionPromise.resolve(this.pitrSettings);
});
azdata.window.openDialog(dialog);
return dialog;
}
public async validate(): Promise<boolean> {
return true;
}
private handleCancel(): void {
this._completionPromise.resolve(undefined);
}
public waitForClose(): Promise<UpgradeModel | undefined> {
return this._completionPromise.promise;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,9 @@
{
"parserOptions": {
"project": "./extensions/azcli/tsconfig.json"
},
"rules": {
// Disabled until the issues can be fixed
"@typescript-eslint/explicit-function-return-type": ["off"]
}
}

View File

@@ -2,7 +2,7 @@
"name": "azcli",
"displayName": "%azcli.arc.displayName%",
"description": "%azcli.arc.description%",
"version": "1.0.0",
"version": "1.3.0",
"publisher": "Microsoft",
"license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/main/LICENSE.txt",
"icon": "images/extension.png",
@@ -94,21 +94,21 @@
"which": "^2.0.2"
},
"devDependencies": {
"@types/mocha": "^5.2.5",
"@types/mocha": "^7.0.2",
"@types/node": "^12.11.7",
"@types/request": "^2.48.5",
"@types/semver": "^7.3.1",
"@types/sinon": "^9.0.4",
"@types/uuid": "^8.0.0",
"@types/which": "^1.3.2",
"mocha": "^5.2.0",
"mocha": "^7.1.1",
"mocha-junit-reporter": "^1.17.0",
"mocha-multi-reporters": "^1.1.7",
"nock": "^13.0.2",
"should": "^13.2.3",
"sinon": "^9.0.2",
"typemoq": "^2.1.0",
"@microsoft/vscodetestcover": "^1.2.0"
"@microsoft/vscodetestcover": "^1.2.1"
},
"__metadata": {
"id": "84",

View File

@@ -54,6 +54,22 @@ export function getAzApi(localAzDiscovered: Promise<IAzTool | undefined>, azTool
validateAz(azToolService.localAz);
return azToolService.localAz!.arcdata.dc.config.show(namespace, additionalEnvVars);
}
},
listUpgrades: async (namespace: string, usek8s?: boolean, additionalEnvVars?: azExt.AdditionalEnvVars) => {
await localAzDiscovered;
validateAz(azToolService.localAz);
return azToolService.localAz!.arcdata.dc.listUpgrades(namespace, usek8s, additionalEnvVars);
},
upgrade: async (
desiredVersion: string,
name: string,
resourceGroup?: string,
namespace?: string,
additionalEnvVars?: azExt.AdditionalEnvVars
) => {
await localAzDiscovered;
validateAz(azToolService.localAz);
return azToolService.localAz!.arcdata.dc.upgrade(desiredVersion, name, resourceGroup, namespace, additionalEnvVars);
}
}
},
@@ -101,20 +117,47 @@ export function getAzApi(localAzDiscovered: Promise<IAzTool | undefined>, azTool
},
sql: {
miarc: {
delete: async (name: string, namespace: string, additionalEnvVars?: azExt.AdditionalEnvVars) => {
delete: async (
name: string,
args: {
// Direct mode arguments
resourceGroup?: string;
// Indirect mode arguments
namespace?: string;
},
additionalEnvVars?: azExt.AdditionalEnvVars
) => {
await localAzDiscovered;
validateAz(azToolService.localAz);
return azToolService.localAz!.sql.miarc.delete(name, namespace, additionalEnvVars);
return azToolService.localAz!.sql.miarc.delete(name, args, additionalEnvVars);
},
list: async (namespace: string, additionalEnvVars?: azExt.AdditionalEnvVars) => {
list: async (
args: {
// Direct mode arguments
resourceGroup?: string;
// Indirect mode arguments
namespace?: string;
},
additionalEnvVars?: azExt.AdditionalEnvVars
) => {
await localAzDiscovered;
validateAz(azToolService.localAz);
return azToolService.localAz!.sql.miarc.list(namespace, additionalEnvVars);
return azToolService.localAz!.sql.miarc.list(args, additionalEnvVars);
},
show: async (name: string, namespace: string, additionalEnvVars?: azExt.AdditionalEnvVars) => {
show: async (
name: string,
args: {
// Direct mode arguments
resourceGroup?: string;
// Indirect mode arguments
namespace?: string;
},
// Additional arguments
additionalEnvVars?: azExt.AdditionalEnvVars
) => {
await localAzDiscovered;
validateAz(azToolService.localAz);
return azToolService.localAz!.sql.miarc.show(name, namespace, additionalEnvVars);
return azToolService.localAz!.sql.miarc.show(name, args, additionalEnvVars);
},
update: async (
name: string,
@@ -136,6 +179,21 @@ export function getAzApi(localAzDiscovered: Promise<IAzTool | undefined>, azTool
await localAzDiscovered;
validateAz(azToolService.localAz);
return azToolService.localAz!.sql.miarc.update(name, args, resourceGroup, namespace, usek8s, additionalEnvVars);
},
upgrade: async (
name: string,
args: {
// Direct mode arguments
resourceGroup?: string;
// Indirect mode arguments
namespace?: string;
},
// Additional arguments
additionalEnvVars?: azExt.AdditionalEnvVars
) => {
await localAzDiscovered;
validateAz(azToolService.localAz);
return azToolService.localAz!.sql.miarc.upgrade(name, args, additionalEnvVars);
}
},
midbarc: {
@@ -154,6 +212,17 @@ export function getAzApi(localAzDiscovered: Promise<IAzTool | undefined>, azTool
}
}
},
monitor: {
logAnalytics: {
workspace: {
list: async (resourceGroup?: string, subscription?: string, additionalEnvVars?: azExt.AdditionalEnvVars) => {
await localAzDiscovered;
validateAz(azToolService.localAz);
return azToolService.localAz!.monitor.logAnalytics.workspace.list(resourceGroup, subscription, additionalEnvVars);
}
}
}
},
getPath: async () => {
await localAzDiscovered;
throwIfNoAz(azToolService.localAz);

View File

@@ -90,6 +90,38 @@ export class AzTool implements azExt.IAzApi {
show: (namespace: string, additionalEnvVars?: azExt.AdditionalEnvVars): Promise<azExt.AzOutput<azExt.DcConfigShowResult>> => {
return this.executeCommand<azExt.DcConfigShowResult>(['arcdata', 'dc', 'config', 'show', '--k8s-namespace', namespace, '--use-k8s'], additionalEnvVars);
}
},
listUpgrades: async (namespace: string, usek8s?: boolean, additionalEnvVars?: azExt.AdditionalEnvVars): Promise<azExt.AzOutput<azExt.DcListUpgradesResult>> => {
const argsArray = ['arcdata', 'dc', 'list-upgrades'];
if (namespace) { argsArray.push('--k8s-namespace', namespace); }
if (usek8s) { argsArray.push('--use-k8s'); }
const output = await this.executeCommand<string>(argsArray, additionalEnvVars);
const versions = <string[]>parseDcListUpgrades(output.stdout);
const currentVersion = <string>parseCurrentVersion(output.stdout);
let dates: string[] = [];
for (let i = 0; i < versions.length; i++) {
dates.push(parseReleaseDateFromUpgrade(versions[i]));
}
return {
stdout: {
versions: versions,
currentVersion: currentVersion,
dates: dates
},
stderr: output.stderr
};
},
upgrade: (desiredVersion: string, name: string, resourceGroup?: string, namespace?: string, additionalEnvVars?: azExt.AdditionalEnvVars): Promise<azExt.AzOutput<void>> => {
const argsArray = ['arcdata', 'dc', 'upgrade', '--desired-version', desiredVersion, '--name', name];
// Direct mode argument
if (resourceGroup) { argsArray.push('--resource-group', resourceGroup); }
// Indirect mode arguments
if (namespace) {
argsArray.push('--k8s-namespace', namespace);
argsArray.push('--use-k8s');
}
return this.executeCommand<void>(argsArray, additionalEnvVars);
}
}
};
@@ -145,14 +177,67 @@ export class AzTool implements azExt.IAzApi {
public sql = {
miarc: {
delete: (name: string, namespace: string, additionalEnvVars?: azExt.AdditionalEnvVars): Promise<azExt.AzOutput<void>> => {
return this.executeCommand<void>(['sql', 'mi-arc', 'delete', '-n', name, '--k8s-namespace', namespace, '--use-k8s'], additionalEnvVars);
delete: (
name: string,
args: {
// Direct mode arguments
resourceGroup?: string,
// Indirect mode arguments
namespace?: string
// Additional arguments
},
additionalEnvVars?: azExt.AdditionalEnvVars
): Promise<azExt.AzOutput<void>> => {
const argsArray = ['sql', 'mi-arc', 'delete', '-n', name];
if (args.resourceGroup) {
argsArray.push('--resource-group', args.resourceGroup);
}
if (args.namespace) {
argsArray.push('--k8s-namespace', args.namespace);
argsArray.push('--use-k8s');
}
return this.executeCommand<void>(argsArray, additionalEnvVars);
},
list: (namespace: string, additionalEnvVars?: azExt.AdditionalEnvVars): Promise<azExt.AzOutput<azExt.SqlMiListResult[]>> => {
return this.executeCommand<azExt.SqlMiListResult[]>(['sql', 'mi-arc', 'list', '--k8s-namespace', namespace, '--use-k8s'], additionalEnvVars);
list: (
args: {
// Direct mode arguments
resourceGroup?: string,
// Indirect mode arguments
namespace?: string
// Additional arguments
},
additionalEnvVars?: azExt.AdditionalEnvVars
): Promise<azExt.AzOutput<azExt.SqlMiListResult[]>> => {
const argsArray = ['sql', 'mi-arc', 'list'];
if (args.resourceGroup) {
argsArray.push('--resource-group', args.resourceGroup);
}
if (args.namespace) {
argsArray.push('--k8s-namespace', args.namespace);
argsArray.push('--use-k8s');
}
return this.executeCommand<azExt.SqlMiListResult[]>(argsArray, additionalEnvVars);
},
show: (name: string, namespace: string, additionalEnvVars?: azExt.AdditionalEnvVars): Promise<azExt.AzOutput<azExt.SqlMiShowResult>> => {
return this.executeCommand<azExt.SqlMiShowResult>(['sql', 'mi-arc', 'show', '-n', name, '--k8s-namespace', namespace, '--use-k8s'], additionalEnvVars);
show: (
name: string,
args: {
// Direct mode arguments
resourceGroup?: string,
// Indirect mode arguments
namespace?: string
// Additional arguments
},
additionalEnvVars?: azExt.AdditionalEnvVars
): Promise<azExt.AzOutput<azExt.SqlMiShowResult>> => {
const argsArray = ['sql', 'mi-arc', 'show', '-n', name];
if (args.resourceGroup) {
argsArray.push('--resource-group', args.resourceGroup);
}
if (args.namespace) {
argsArray.push('--k8s-namespace', args.namespace);
argsArray.push('--use-k8s');
}
return this.executeSqlMiShow(argsArray, additionalEnvVars);
},
update: (
name: string,
@@ -183,6 +268,25 @@ export class AzTool implements azExt.IAzApi {
if (namespace) { argsArray.push('--k8s-namespace', namespace); }
if (usek8s) { argsArray.push('--use-k8s'); }
return this.executeCommand<void>(argsArray, additionalEnvVars);
},
upgrade: (
name: string,
args: {
// Direct mode arguments
resourceGroup?: string,
// Indirect mode arguments
namespace?: string
// Additional arguments
},
additionalEnvVars?: azExt.AdditionalEnvVars
): Promise<azExt.AzOutput<void>> => {
const argsArray = ['sql', 'mi-arc', 'upgrade', '--name', name];
if (args.resourceGroup) { argsArray.push('--resource-group', args.resourceGroup); }
if (args.namespace) {
argsArray.push('--k8s-namespace', args.namespace);
argsArray.push('--use-k8s');
}
return this.executeCommand<void>(argsArray, additionalEnvVars);
}
},
midbarc: {
@@ -209,6 +313,19 @@ export class AzTool implements azExt.IAzApi {
}
};
public monitor = {
logAnalytics: {
workspace: {
list: (resourceGroup?: string, subscription?: string, additionalEnvVars?: azExt.AdditionalEnvVars): Promise<azExt.AzOutput<azExt.LogAnalyticsWorkspaceListResult[]>> => {
const argsArray = ['monitor', 'log-analytics', 'workspace', 'list'];
if (resourceGroup) { argsArray.push('--resource-group', resourceGroup); }
if (subscription) { argsArray.push('--subscription', subscription); }
return this.executeCommand<azExt.LogAnalyticsWorkspaceListResult[]>(argsArray, additionalEnvVars);
}
}
}
};
/**
* Gets the output of running '--version' command on the az tool.
@@ -223,6 +340,64 @@ export class AzTool implements azExt.IAzApi {
};
}
/**
* Executes az sql mi-arc show and returns a normalized object, SqlMiShowResult, regardless of the indirect or direct mode raw output shape.
* @param args The args to pass to az
* @param additionalEnvVars Additional environment variables to set for this execution
*/
public async executeSqlMiShow(args: string[], additionalEnvVars?: azExt.AdditionalEnvVars): Promise<azExt.AzOutput<azExt.SqlMiShowResult>> {
try {
const result = await executeAzCommand(`"${this._path}"`, args.concat(['--output', 'json']), additionalEnvVars);
let stdout = <unknown>result.stdout;
let stderr = <unknown>result.stderr;
try {
// Automatically try parsing the JSON. This is expected to fail for some az commands such as resource delete.
stdout = JSON.parse(result.stdout);
} catch (err) {
// If the output was not pure JSON, catch the error and log it here.
Logger.log(loc.azOutputParseErrorCaught(args.concat(['--output', 'json']).toString()));
throw err;
}
if ((<azExt.SqlMiShowResultDirect>stdout).properties) {
// Then it is direct mode
return {
stdout: {
name: (<azExt.SqlMiShowResultDirect>stdout).name,
spec: (<azExt.SqlMiShowResultDirect>stdout).properties.k8SRaw.spec,
status: (<azExt.SqlMiShowResultDirect>stdout).properties.k8SRaw.status
},
stderr: <string[]>stderr
};
} else {
// It must be indirect mode
return {
stdout: {
name: (<azExt.SqlMiShowResultIndirect>stdout).metadata?.name,
spec: (<azExt.SqlMiShowResultIndirect>stdout).spec,
status: (<azExt.SqlMiShowResultIndirect>stdout).status
},
stderr: <string[]>stderr
};
}
} catch (err) {
if (err instanceof ExitCodeError) {
try {
await fs.promises.access(this._path);
//this.path exists
} catch (e) {
// this.path does not exist
await vscode.commands.executeCommand('setContext', azFound, false);
throw new NoAzureCLIError();
}
}
throw err;
}
}
/**
* Executes the specified az command.
* @param args The args to pass to az
@@ -543,6 +718,70 @@ function parseArcExtensionVersion(raw: string): string | undefined {
return exp.exec(raw)?.pop();
}
/**
* Parses out all available upgrades
* @param raw The raw version output from az arcdata dc list-upgrades
*/
function parseDcListUpgrades(raw: string): string[] | undefined {
// Currently the version is a multi-line string that contains other version information such
// as the Python installation, with the first line holding the version of az itself.
//
// Found 6 valid versions. The current datacontroller version is v1.2.0_2021-12-15.
// v1.4.1_2022-03-08
// v1.4.0_2022-02-25
// v1.3.0_2022-01-27
// v1.2.0_2021-12-15 << current version
// v1.1.0_2021-11-02
// v1.0.0_2021-07-30
let versions: string[] = [];
const lines = raw.split('\n');
const exp = /^(v\d*.\d*.\d*.\d*.\d*.\d*.\d)/;
for (let i = 1; i < lines.length; i++) {
let result = exp.exec(lines[i])?.pop();
if (result) {
versions.push(result);
}
}
return versions;
}
/**
* Parses out the release date from the upgrade version number and formats it into MM/DD/YYYY format.
* For example: v1.4.1_2022-03-08 ==> 03/08/2022
* @param raw The raw upgrade version number, such as: v1.4.1_2022-03-08
*/
function parseReleaseDateFromUpgrade(raw: string): string {
let formattedDate = '';
const exp = /^v\d*.\d*.\d*_(\d*).(\d*).(\d*.\d)/;
let rawDate = exp.exec(raw);
if (rawDate) {
formattedDate += rawDate[2] + '/' + rawDate[3] + '/' + rawDate[1];
} else {
console.error(loc.releaseDateNotParsed);
}
return formattedDate;
}
/**
* Parses out the current version number out of all available upgrades
* @param raw The raw version output from az arcdata dc list-upgrades
*/
function parseCurrentVersion(raw: string): string | undefined {
// Currently the version is a multi-line string that contains other version information such
// as the Python installation, with the first line holding the version of az itself.
//
// Found 6 valid versions. The current datacontroller version is v1.2.0_2021-12-15.
// v1.4.1_2022-03-08
// v1.4.0_2022-02-25
// v1.3.0_2022-01-27
// v1.2.0_2021-12-15 << current version
// v1.1.0_2021-11-02
// v1.0.0_2021-07-30
const exp = /The current datacontroller version is\s*(v\d*.\d*.\d*.\d*.\d*.\d*.\d)/;
return exp.exec(raw)?.pop();
}
async function executeAzCommand(command: string, args: string[], additionalEnvVars: azExt.AdditionalEnvVars = {}): Promise<ProcessOutput> {
const debug = vscode.workspace.getConfiguration(azConfigSection).get(debugConfigKey);
if (debug) {

View File

@@ -72,3 +72,4 @@ export const userResponseToInstallPrompt = (response: string | undefined): strin
export const userResponseToUpdatePrompt = (response: string | undefined): string => localize('az.userResponseUpdate', "User Response on prompt to update Azure CLI: {0}", response);
export const userRequestedInstall = localize('az.userRequestedInstall', "User requested to install Azure CLI and arcdata extension using 'Azure CLI: Install' command");
export const updateCheckSkipped = localize('az.updateCheckSkipped', "No check for new Azure CLI version availability performed as Azure CLI was not found to be installed");
export const releaseDateNotParsed = localize('arc.releaseDateNotParsed', "Release date could not be parsed.");

View File

@@ -110,15 +110,18 @@ describe('az', function () {
describe('sql', function (): void {
describe('mi-arc', function (): void {
it('delete', async function (): Promise<void> {
await azTool.sql.miarc.delete(name, namespace);
// Assume indirect mode
await azTool.sql.miarc.delete(name, {resourceGroup: undefined, namespace: namespace});
verifyExecuteCommandCalledWithArgs(['sql', 'mi-arc', 'delete', name, '--k8s-namespace', namespace, '--use-k8s']);
});
it('list', async function (): Promise<void> {
await azTool.sql.miarc.list(namespace);
// Assume indirect mode
await azTool.sql.miarc.list({resourceGroup: undefined, namespace: namespace});
verifyExecuteCommandCalledWithArgs(['sql', 'mi-arc', 'list', '--k8s-namespace', namespace, '--use-k8s']);
});
it('show', async function (): Promise<void> {
await azTool.sql.miarc.show(name, namespace);
// Assume indirect mode
await azTool.sql.miarc.show(name, {resourceGroup: undefined, namespace: namespace});
verifyExecuteCommandCalledWithArgs(['sql', 'mi-arc', 'show', name, '--k8s-namespace', namespace, '--use-k8s']);
});
});

View File

@@ -116,6 +116,12 @@ declare module 'az-ext' {
}
}
export interface DcListUpgradesResult {
versions: string[], // ["v1.4.1_2022-03-08", "v1.4.0_2022-02-25"]
currentVersion: string, // "v1.4.1_2022-03-08"
dates: string[] // ["03/08/2022", "02/25/2022"]
}
export interface StorageVolume {
className?: string, // "local-storage"
size: string // "5Gi"
@@ -132,6 +138,42 @@ declare module 'az-ext' {
}
export interface SqlMiShowResult {
name: string, // "miaa-instance"
spec: {
backup?: {
retentionPeriodInDays: number, // 1
}
scheduling?: {
default?: {
resources?: {
limits?: SchedulingOptions,
requests?: SchedulingOptions
}
}
}
services: {
primary: ServiceSpec
}
storage: {
data: {
volumes: StorageVolume[]
},
logs: {
volumes: StorageVolume[]
}
}
},
status: {
readyReplicas: string, // "1/1"
state: string, // "Ready",
logSearchDashboard: string, // https://127.0.0.1:30777/kibana/app/kibana#/discover?_a=(query:(language:kuery,query:'custom_resource_name:miaa1'))
metricsDashboard: string, // https://127.0.0.1:30777/grafana/d/40q72HnGk/sql-managed-instance-metrics?var-hostname=miaa1-0
primaryEndpoint?: string // "10.91.86.39:32718"
runningVersion: string // "v1.5.0_2022-04-05"
}
}
export interface SqlMiShowResultIndirect {
apiVersion: string, // "sql.arcdata.microsoft.com/v1alpha1"
kind: string, // "sqlmanagedinstance"
metadata: {
@@ -173,9 +215,167 @@ declare module 'az-ext' {
logSearchDashboard: string, // https://127.0.0.1:30777/kibana/app/kibana#/discover?_a=(query:(language:kuery,query:'custom_resource_name:miaa1'))
metricsDashboard: string, // https://127.0.0.1:30777/grafana/d/40q72HnGk/sql-managed-instance-metrics?var-hostname=miaa1-0
primaryEndpoint?: string // "10.91.86.39:32718"
runningVersion: string // "v1.5.0_2022-04-05"
}
}
export interface SqlMiShowResultDirect {
extendedLocation: {
name: string, // /subscriptions/a2382b66-3h2k-3h2k-2gdd-8ef45dgfdc33/resourcegroups/name-rg/providers/microsoft.extendedlocation/customlocations/custom-loc,
type: string, // CustomLocation
},
id: string, // /subscriptions/a2382b66-3h2k-3h2k-2gdd-8ef45dgfdc33/resourceGroups/name-rg/providers/Microsoft.AzureArcData/sqlManagedInstances/sql1,
location: string, // eastus2,
name: string, // sql2,
properties: {
activeDirectoryInformation: string, // null,
admin: string, // admin,
basicLoginInformation: string, // null,
clusterId: string, // null,
dataControllerId: string, // dc-name,
endTime: string, // null,
extensionId: string, // null,
k8SRaw: {
spec: {
backup: {
retentionPeriodInDays: number, // 7
},
dev: boolean, // true,
licenseType: string, // BasePrice,
metadata: {
annotations: string, // ,
labels: string, // ,
namespace: string, // namespace-name
},
replicas: number, // 1,
scheduling: {
additionalProperties: string, // null,
default: {
additionalProperties: string, // null,
resources: {
additionalProperties: string, // null,
limits: {
cpu: string, // 4,
memory: string, // 8Gi
},
requests: {
cpu: string, // 2,
memory: string, // 4Gi
}
}
}
},
security: {
adminLoginSecret: string, // sql-login-secret,
serviceCertificateSecret: string, //
},
services: {
primary: {
annotations: string, // ,
labels: string, // ,
type: string, // NodePort
}
},
settings: {
collation: string, // SQL_Latin1_General_CP1_CI_AS,
language: {
lcid: number, // 1234
},
sqlagent: {
enabled: boolean, // false
},
timezone: string, // UTC,
traceFlags: boolean, // false
},
storage: {
backups: {
volumes: [
{
annotations: string, // ,
className: string, // azurefile,
labels: string, // ,
size: string, // 5Gi
}
]
},
data: {
volumes: [
{
annotations: string, // ,
className: string, // default,
labels: string, // ,
size: string, // 5Gi
}
]
},
datalogs: {
volumes: [
{
annotations: string, // ,
className: string, // default,
labels: string, // ,
size: string, // 5Gi
}
]
},
logs: {
volumes: [
{
annotations: string, // ,
className: string, // default,
labels: string, // ,
size: string, // 5Gi
}
]
}
},
tier: string, // GeneralPurpose
},
status: {
endpoints: {
logSearchDashboard: string, // https://localhost:12345/app/kibana#/discover?_a=(query:(language:kuery,query:'custom_resource_name:sql1')),
metricsDashboard: string, // https://12.123.1.4:12345/d/sdfgwseg/sql-managed-instance-metrics?var-hostname=sql1-0,
mirroring: string, // 10.224.0.4:32040,
primary: string, // 10.224.0.4,32477
},
highAvailability: {
lastUpdateTime: string, // 2022-05-09T23:40:19.626856Z,
mirroringCertificate: string,
},
lastUpdateTime: string, // 2022-05-09T23:41:00.137919Z,
logSearchDashboard: string,
metricsDashboard: string,
observedGeneration: number, // 1,
primaryEndpoint: string, // 10.224.0.4,32477,
readyReplicas: string, // 1/1,
roles: {
sql: {
lastUpdateTime: string, // 2022-05-09T23:39:53.364002Z,
readyReplicas: number, // 1,
replicas: number, // 1
}
},
runningVersion: string, // v1.4.0_2022-02-25,
state: string, // Ready
}
},
lastUploadedDate: string, // null,
licenseType: string, // BasePrice,
provisioningState: string, // Succeeded,
startTime: string, // null
},
resourceGroup: string, // rg-name,
sku: {
capacity: string, // null,
dev: string, // null,
family: string, // null,
size: string, // null,
tier: string, // GeneralPurpose
},
tags: {},
type: string, // microsoft.azurearcdata/sqlmanagedinstances
}
export interface SqlMiDbRestoreResult {
destDatabase: string, //testDbToRestore
earliestRestoreTime: string, // "2020-08-19T20:25:11Z"
@@ -187,6 +387,45 @@ declare module 'az-ext' {
state: string //Completed
}
export interface LogAnalyticsWorkspaceListResult {
createdDate: string, // "2020-02-25T16:59:38Z"
customerId: string, // "7e136a79-c0b6-4878-86bf-7bf7a6a7e6f6",
eTag: string, // null,
etag: string, // "\"00006df1-0000-0700-0000-61ee552f0000\"",
features: {
clusterResourceId: string, // null,
disableLocalAuth: boolean, // null,
enableDataExport: boolean, // null,
enableLogAccessUsingOnlyResourcePermissions: boolean, //true,
immediatePurgeDataOn30Days: boolean, // null,
legacy: number, // 0,
searchVersion: number // 1
},
forceCmkForQuery: boolean, // null,
id: string, // "/subscriptions/a5082b19-8a6e-4bc5-8fdd-8ef39dfebc39/resourcegroups/bugbash/providers/microsoft.operationalinsights/workspaces/bugbash-logs",
location: string, // "westus",
modifiedDate: string, // "2022-02-21T09:18:22.3906451Z",
name: string, // "bugbash-logs",
privateLinkScopedResources: string, // null,
provisioningState: string, // "Succeeded",
publicNetworkAccessForIngestion: string, // "Enabled",
publicNetworkAccessForQuery: string, // "Enabled",
resourceGroup: string, // "bugbash",
retentionInDays: number, // 30,
sku: {
capacityReservationLevel: number, // null,
lastSkuUpdate: string, // "2020-02-25T16:59:38Z",
name: string, // "pergb2018"
},
tags: string[], //null,
type: string, //"Microsoft.OperationalInsights/workspaces",
workspaceCapping: {
dailyQuotaGb: number, //-1.0,
dataIngestionStatus: string, // "RespectQuota",
quotaNextResetTime: string, // "2022-02-21T19:00:00Z"
}
}
export interface PostgresServerShowResult {
apiVersion: string, // "arcdata.microsoft.com/v1alpha1"
kind: string, // "postgresql"
@@ -293,7 +532,9 @@ declare module 'az-ext' {
config: {
list(additionalEnvVars?: AdditionalEnvVars): Promise<AzOutput<DcConfigListResult[]>>,
show(namespace?: string, additionalEnvVars?: AdditionalEnvVars): Promise<AzOutput<DcConfigShowResult>>
}
},
listUpgrades(namespace: string, usek8s?: boolean, additionalEnvVars?: AdditionalEnvVars): Promise<AzOutput<DcListUpgradesResult>>,
upgrade(desiredVersion: string, name: string, resourceGroup?: string, namespace?: string, additionalEnvVars?: AdditionalEnvVars): Promise<AzOutput<void>>,
}
},
postgres: {
@@ -325,9 +566,38 @@ declare module 'az-ext' {
},
sql: {
miarc: {
delete(name: string, namespace?: string, additionalEnvVars?: AdditionalEnvVars): Promise<AzOutput<void>>,
list(namespace?: string, additionalEnvVars?: AdditionalEnvVars): Promise<AzOutput<SqlMiListResult[]>>,
show(name: string, namespace?: string, additionalEnvVars?: AdditionalEnvVars): Promise<AzOutput<SqlMiShowResult>>,
delete(
name: string,
args: {
// Direct mode arguments
resourceGroup?: string,
// Indirect mode arguments
namespace?: string
},
// Additional arguments
additionalEnvVars?: AdditionalEnvVars
): Promise<AzOutput<void>>,
list(
args: {
// Direct mode arguments
resourceGroup?: string,
// Indirect mode arguments
namespace?: string
},
// Additional arguments
additionalEnvVars?: AdditionalEnvVars
): Promise<AzOutput<SqlMiListResult[]>>,
show(
name: string,
args: {
// Direct mode arguments
resourceGroup?: string,
// Indirect mode arguments
namespace?: string
},
// Additional arguments
additionalEnvVars?: AdditionalEnvVars
): Promise<AzOutput<SqlMiShowResult>>,
update(
name: string,
args: {
@@ -345,6 +615,17 @@ declare module 'az-ext' {
usek8s?: boolean,
// Additional arguments
additionalEnvVars?: AdditionalEnvVars
): Promise<AzOutput<void>>,
upgrade(
name: string,
args: {
// Direct mode arguments
resourceGroup?: string,
// Indirect mode arguments
namespace?: string
},
// Additional arguments
additionalEnvVars?: AdditionalEnvVars
): Promise<AzOutput<void>>
},
midbarc: {
@@ -362,6 +643,17 @@ declare module 'az-ext' {
): Promise<AzOutput<SqlMiDbRestoreResult>>
}
},
monitor: {
logAnalytics: {
workspace: {
list(
resourceGroup?: string, // test-rg
subscription?: string, // 122c121a-095a-4f5d-22e4-cc6b238490a3
additionalEnvVars?: AdditionalEnvVars
): Promise<AzOutput<LogAnalyticsWorkspaceListResult[]>>
}
}
},
getPath(): Promise<string>,
/**
* The semVersion corresponding to this installation of the Azure CLI. version() method should have been run

File diff suppressed because it is too large Load Diff

View File

@@ -8,6 +8,8 @@
{
"ignoreVoid": true
}
]
],
// Disabled until the issues can be fixed
"@typescript-eslint/explicit-function-return-type": ["off"]
}
}

View File

@@ -348,26 +348,26 @@
"@azure/arm-resourcegraph": "^4.0.0",
"@azure/arm-subscriptions": "^3.0.0",
"@azure/storage-blob": "^12.6.0",
"axios": "^0.21.4",
"axios": "^0.27.2",
"node-fetch": "^2.6.7",
"qs": "^6.9.1",
"vscode-nls": "^4.0.0",
"ws": "^7.2.0"
"ws": "^7.4.6"
},
"devDependencies": {
"@types/keytar": "4.4.0",
"@types/mocha": "^5.2.5",
"@types/mocha": "^7.0.2",
"@types/node": "^12.11.7",
"@types/qs": "^6.9.1",
"@types/request": "^2.48.1",
"@types/sinon": "^9.0.4",
"@types/ws": "^6.0.4",
"mocha": "^5.2.0",
"mocha": "^7.1.1",
"mocha-junit-reporter": "^1.17.0",
"mocha-multi-reporters": "^1.1.7",
"should": "^13.2.1",
"sinon": "^9.0.2",
"typemoq": "^2.1.0",
"@microsoft/vscodetestcover": "^1.2.0"
"@microsoft/vscodetestcover": "^1.2.1"
}
}

View File

@@ -1,6 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="28" width="28" version="1.1" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg">
<g>
<path fill="#0072C6" d="M11.423,44.326l23.623-4.156L22.894,25.748l6.328-17.346L50,44.33L11.423,44.326z M27.566,5.67L11.469,40.109v-0.034H0l12.717-21.975L27.566,5.67z" />
</g>
<svg width="150" height="150" viewBox="0 0 96 96" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="e399c19f-b68f-429d-b176-18c2117ff73c" x1="-1032.172" x2="-1059.213" y1="145.312" y2="65.426" gradientTransform="matrix(1 0 0 -1 1075 158)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#114a8b"/>
<stop offset="1" stop-color="#0669bc"/>
</linearGradient>
<linearGradient id="ac2a6fc2-ca48-4327-9a3c-d4dcc3256e15" x1="-1023.725" x2="-1029.98" y1="108.083" y2="105.968" gradientTransform="matrix(1 0 0 -1 1075 158)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-opacity=".3"/>
<stop offset=".071" stop-opacity=".2"/>
<stop offset=".321" stop-opacity=".1"/>
<stop offset=".623" stop-opacity=".05"/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
<linearGradient id="a7fee970-a784-4bb1-af8d-63d18e5f7db9" x1="-1027.165" x2="-997.482" y1="147.642" y2="68.561" gradientTransform="matrix(1 0 0 -1 1075 158)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#3ccbf4"/>
<stop offset="1" stop-color="#2892df"/>
</linearGradient>
</defs>
<path fill="url(#e399c19f-b68f-429d-b176-18c2117ff73c)" d="M33.338 6.544h26.038l-27.03 80.087a4.152 4.152 0 0 1-3.933 2.824H8.149a4.145 4.145 0 0 1-3.928-5.47L29.404 9.368a4.152 4.152 0 0 1 3.934-2.825z"/>
<path fill="#0078d4" d="M71.175 60.261h-41.29a1.911 1.911 0 0 0-1.305 3.309l26.532 24.764a4.171 4.171 0 0 0 2.846 1.121h23.38z"/>
<path fill="url(#ac2a6fc2-ca48-4327-9a3c-d4dcc3256e15)" d="M33.338 6.544a4.118 4.118 0 0 0-3.943 2.879L4.252 83.917a4.14 4.14 0 0 0 3.908 5.538h20.787a4.443 4.443 0 0 0 3.41-2.9l5.014-14.777 17.91 16.705a4.237 4.237 0 0 0 2.666.972H81.24L71.024 60.261l-29.781.007L59.47 6.544z"/>
<path fill="url(#a7fee970-a784-4bb1-af8d-63d18e5f7db9)" d="M66.595 9.364a4.145 4.145 0 0 0-3.928-2.82H33.648a4.146 4.146 0 0 1 3.928 2.82l25.184 74.62a4.146 4.146 0 0 1-3.928 5.472h29.02a4.146 4.146 0 0 0 3.927-5.472z"/>
</svg>

Before

Width:  |  Height:  |  Size: 331 B

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,19 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_725:32860)">
<path d="M1.92584 4.68122C1.88418 4.68135 1.84417 4.66492 1.81462 4.63555C1.78507 4.60617 1.7684 4.56627 1.76827 4.5246C1.76506 3.53697 0.962946 2.73832 -0.0247012 2.7394C-0.0826423 2.74262 -0.137618 2.71355 -0.167561 2.66385C-0.197503 2.61412 -0.197503 2.55195 -0.167561 2.50222C-0.137618 2.45252 -0.0826423 2.42344 -0.0247012 2.42667C0.963056 2.42801 1.76533 1.62921 1.76827 0.641457C1.76827 0.554162 1.83903 0.483395 1.92633 0.483395C2.01362 0.483395 2.08439 0.554162 2.08439 0.641457C2.0876 1.62948 2.89031 2.42828 3.87834 2.42667C3.96481 2.42667 4.03494 2.49678 4.03494 2.58327C4.03494 2.66977 3.96481 2.73987 3.87834 2.73987C2.89031 2.73827 2.0876 3.53707 2.08439 4.5251C2.08413 4.56685 2.06727 4.60677 2.03752 4.63607C2.00778 4.66535 1.96759 4.6816 1.92584 4.68122Z" fill="white"/>
<path d="M12.9813 14.751C12.9296 14.751 12.8875 14.7092 12.8873 14.6575C12.8849 14.0673 12.4055 13.5902 11.8153 13.5908C11.7636 13.5908 11.7217 13.5489 11.7217 13.4972C11.7217 13.4455 11.7636 13.4036 11.8153 13.4036C12.4055 13.4042 12.8849 12.9272 12.8873 12.337C12.8873 12.285 12.9294 12.2429 12.9813 12.2429C13.0333 12.2429 13.0754 12.285 13.0754 12.337C13.0778 12.9272 13.5572 13.4042 14.1474 13.4036C14.1991 13.4036 14.241 13.4455 14.241 13.4972C14.241 13.5489 14.1991 13.5908 14.1474 13.5908C13.5572 13.5902 13.0778 14.0673 13.0754 14.6575C13.0754 14.6824 13.0655 14.7062 13.0478 14.7238C13.0302 14.7414 13.0062 14.7512 12.9813 14.751Z" fill="white"/>
<path d="M5.39249 12.6482C6.97109 13.4359 8.84442 13.3531 10.3474 12.4292C11.8503 11.5054 12.7701 9.8713 12.7801 8.10712C11.6963 9.07732 10.5245 9.94457 9.27999 10.6977C8.04727 11.4666 6.74584 12.1196 5.39249 12.6482Z" fill="white"/>
<path d="M8.433 9.31202C9.7825 8.50402 11.0351 7.54424 12.1663 6.45139C12.2589 6.35929 12.3414 6.27492 12.4194 6.19395C12.1976 5.63 11.8764 5.11042 11.4711 4.6599C10.1951 3.2472 8.24175 2.6572 6.39707 3.1273C4.5524 3.5974 3.11967 5.05027 2.67542 6.90135C2.29705 8.51252 2.72197 10.2072 3.81577 11.4492C3.9336 11.4148 4.04947 11.3818 4.17797 11.3401C5.6688 10.828 7.09637 10.1476 8.433 9.31202Z" fill="white"/>
<path d="M15.1293 3.4817C14.642 2.68072 13.4114 2.49601 11.5763 2.94497C11.005 3.08947 10.443 3.2684 9.89338 3.48072C10.2476 3.65355 10.581 3.86632 10.8868 4.11492C11.1991 4.01212 11.5055 3.92097 11.7974 3.84872C12.2856 3.71947 12.7873 3.64835 13.2922 3.63685C13.8929 3.63685 14.2245 3.78522 14.3351 3.96607C14.5164 4.2628 14.3496 5.0463 13.283 6.2788C13.0934 6.49795 12.8796 6.72 12.6556 6.94352C11.4856 8.07417 10.1902 9.06745 8.7947 9.904C7.41253 10.7693 5.93533 11.4726 4.39228 12C2.5358 12.6046 1.26791 12.5925 0.984278 12.1285C0.70064 11.6645 1.26791 10.5285 2.6541 9.152C2.56913 8.76032 2.53088 8.35995 2.54015 7.95927C0.334095 9.95297 -0.380087 11.6815 0.190096 12.6138C0.488763 13.1021 1.14088 13.3794 2.09361 13.3794C3.2267 13.3317 4.3426 13.0856 5.39058 12.6521C6.74535 12.1233 8.04808 11.4699 9.28198 10.7001C10.5269 9.94677 11.699 9.0792 12.7831 8.10862C13.2088 7.72667 13.6114 7.31982 13.9889 6.8902C15.2238 5.45987 15.619 4.2817 15.1293 3.4817Z" fill="white"/>
<path d="M1.92584 4.68122C1.88418 4.68135 1.84417 4.66492 1.81462 4.63555C1.78507 4.60617 1.7684 4.56627 1.76827 4.5246C1.76506 3.53697 0.962946 2.73832 -0.0247012 2.7394C-0.0826423 2.74262 -0.137618 2.71355 -0.167561 2.66385C-0.197503 2.61412 -0.197503 2.55195 -0.167561 2.50222C-0.137618 2.45252 -0.0826423 2.42344 -0.0247012 2.42667C0.963056 2.42801 1.76533 1.62921 1.76827 0.641457C1.76827 0.554162 1.83903 0.483395 1.92633 0.483395C2.01362 0.483395 2.08439 0.554162 2.08439 0.641457C2.0876 1.62948 2.89031 2.42828 3.87834 2.42667C3.96481 2.42667 4.03494 2.49678 4.03494 2.58327C4.03494 2.66977 3.96481 2.73987 3.87834 2.73987C2.89031 2.73827 2.0876 3.53707 2.08439 4.5251C2.08413 4.56685 2.06727 4.60677 2.03752 4.63607C2.00778 4.66535 1.96759 4.6816 1.92584 4.68122Z" fill="white"/>
<path d="M12.9813 14.751C12.9296 14.751 12.8875 14.7092 12.8873 14.6575C12.8849 14.0673 12.4055 13.5902 11.8153 13.5908C11.7636 13.5908 11.7217 13.5489 11.7217 13.4972C11.7217 13.4455 11.7636 13.4036 11.8153 13.4036C12.4055 13.4042 12.8849 12.9272 12.8873 12.337C12.8873 12.285 12.9294 12.2429 12.9813 12.2429C13.0333 12.2429 13.0754 12.285 13.0754 12.337C13.0778 12.9272 13.5572 13.4042 14.1474 13.4036C14.1991 13.4036 14.241 13.4455 14.241 13.4972C14.241 13.5489 14.1991 13.5908 14.1474 13.5908C13.5572 13.5902 13.0778 14.0673 13.0754 14.6575C13.0754 14.6824 13.0655 14.7062 13.0478 14.7238C13.0302 14.7414 13.0062 14.7512 12.9813 14.751Z" fill="white"/>
<path opacity="0.93" d="M5.39249 12.6482C6.97109 13.4359 8.84442 13.3531 10.3474 12.4292C11.8503 11.5054 12.7701 9.8713 12.7801 8.10712C11.6963 9.07732 10.5245 9.94457 9.27999 10.6977C8.04727 11.4666 6.74584 12.1196 5.39249 12.6482Z" fill="white"/>
<path opacity="0.93" d="M8.433 9.31202C9.7825 8.50402 11.0351 7.54424 12.1663 6.45139C12.2589 6.35929 12.3414 6.27492 12.4194 6.19395C12.1976 5.63 11.8764 5.11042 11.4711 4.6599C10.1951 3.2472 8.24175 2.6572 6.39707 3.1273C4.5524 3.5974 3.11967 5.05027 2.67542 6.90135C2.29705 8.51252 2.72197 10.2072 3.81577 11.4492C3.9336 11.4148 4.04947 11.3818 4.17797 11.3401C5.6688 10.828 7.09637 10.1476 8.433 9.31202Z" fill="white"/>
<path d="M15.1293 3.4817C14.642 2.68072 13.4114 2.49601 11.5763 2.94497C11.005 3.08947 10.443 3.2684 9.89338 3.48072C10.2476 3.65355 10.581 3.86632 10.8868 4.11492C11.1991 4.01212 11.5055 3.92097 11.7974 3.84872C12.2856 3.71947 12.7873 3.64835 13.2922 3.63685C13.8929 3.63685 14.2245 3.78522 14.3351 3.96607C14.5164 4.2628 14.3496 5.0463 13.283 6.2788C13.0934 6.49795 12.8796 6.72 12.6556 6.94352C11.4856 8.07417 10.1902 9.06745 8.7947 9.904C7.41253 10.7693 5.93533 11.4726 4.39228 12C2.5358 12.6046 1.26791 12.5925 0.984278 12.1285C0.70064 11.6645 1.26791 10.5285 2.6541 9.152C2.56913 8.76032 2.53088 8.35995 2.54015 7.95927C0.334095 9.95297 -0.380087 11.6815 0.190096 12.6138C0.488763 13.1021 1.14088 13.3794 2.09361 13.3794C3.2267 13.3317 4.3426 13.0856 5.39058 12.6521C6.74535 12.1233 8.04808 11.4699 9.28198 10.7001C10.5269 9.94677 11.699 9.0792 12.7831 8.10862C13.2088 7.72667 13.6114 7.31982 13.9889 6.8902C15.2238 5.45987 15.619 4.2817 15.1293 3.4817Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_725:32860">
<rect width="16" height="16" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@@ -0,0 +1,19 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_724:59228)">
<path d="M1.92584 4.68122C1.88418 4.68135 1.84417 4.66492 1.81462 4.63555C1.78507 4.60617 1.7684 4.56627 1.76827 4.5246C1.76506 3.53697 0.962946 2.73832 -0.0247012 2.7394C-0.0826423 2.74262 -0.137618 2.71355 -0.167561 2.66385C-0.197503 2.61412 -0.197503 2.55195 -0.167561 2.50222C-0.137618 2.45252 -0.0826423 2.42344 -0.0247012 2.42667C0.963056 2.42801 1.76533 1.62921 1.76827 0.641457C1.76827 0.554162 1.83903 0.483395 1.92633 0.483395C2.01362 0.483395 2.08439 0.554162 2.08439 0.641457C2.0876 1.62948 2.89031 2.42828 3.87834 2.42667C3.96481 2.42667 4.03494 2.49678 4.03494 2.58327C4.03494 2.66977 3.96481 2.73987 3.87834 2.73987C2.89031 2.73827 2.0876 3.53707 2.08439 4.5251C2.08413 4.56685 2.06727 4.60677 2.03752 4.63607C2.00778 4.66535 1.96759 4.6816 1.92584 4.68122Z" fill="#212121"/>
<path d="M12.9813 14.751C12.9296 14.751 12.8875 14.7092 12.8873 14.6575C12.8849 14.0673 12.4055 13.5902 11.8153 13.5908C11.7636 13.5908 11.7217 13.5489 11.7217 13.4972C11.7217 13.4455 11.7636 13.4036 11.8153 13.4036C12.4055 13.4042 12.8849 12.9272 12.8873 12.337C12.8873 12.285 12.9294 12.2429 12.9813 12.2429C13.0333 12.2429 13.0754 12.285 13.0754 12.337C13.0778 12.9272 13.5572 13.4042 14.1474 13.4036C14.1991 13.4036 14.241 13.4455 14.241 13.4972C14.241 13.5489 14.1991 13.5908 14.1474 13.5908C13.5572 13.5902 13.0778 14.0673 13.0754 14.6575C13.0754 14.6824 13.0655 14.7062 13.0478 14.7238C13.0302 14.7414 13.0062 14.7512 12.9813 14.751Z" fill="#212121"/>
<path d="M5.39249 12.6482C6.97109 13.4359 8.84442 13.3531 10.3474 12.4292C11.8503 11.5054 12.7701 9.8713 12.7801 8.10712C11.6963 9.07732 10.5245 9.94457 9.27999 10.6977C8.04727 11.4666 6.74584 12.1196 5.39249 12.6482Z" fill="#212121"/>
<path d="M8.433 9.31202C9.7825 8.50402 11.0351 7.54424 12.1663 6.45139C12.2589 6.35929 12.3414 6.27492 12.4194 6.19395C12.1976 5.63 11.8764 5.11042 11.4711 4.6599C10.1951 3.2472 8.24175 2.6572 6.39708 3.1273C4.5524 3.5974 3.11968 5.05027 2.67543 6.90135C2.29705 8.51252 2.72198 10.2072 3.81578 11.4492C3.9336 11.4148 4.04948 11.3818 4.17798 11.3401C5.6688 10.828 7.09637 10.1476 8.433 9.31202Z" fill="#212121"/>
<path d="M15.1293 3.4817C14.642 2.68072 13.4114 2.49601 11.5763 2.94497C11.005 3.08947 10.443 3.2684 9.89338 3.48072C10.2476 3.65355 10.581 3.86632 10.8868 4.11492C11.1991 4.01212 11.5055 3.92097 11.7974 3.84872C12.2856 3.71947 12.7873 3.64835 13.2922 3.63685C13.8929 3.63685 14.2245 3.78522 14.3351 3.96607C14.5164 4.2628 14.3496 5.0463 13.283 6.2788C13.0934 6.49795 12.8796 6.72 12.6556 6.94352C11.4856 8.07417 10.1902 9.06745 8.7947 9.904C7.41253 10.7693 5.93533 11.4726 4.39228 12C2.5358 12.6046 1.26791 12.5925 0.98428 12.1285C0.700642 11.6645 1.26791 10.5285 2.6541 9.152C2.56913 8.76032 2.53088 8.35995 2.54015 7.95927C0.334097 9.95297 -0.380085 11.6815 0.190098 12.6138C0.488765 13.1021 1.14088 13.3794 2.09361 13.3794C3.2267 13.3317 4.3426 13.0856 5.39058 12.6521C6.74535 12.1233 8.04808 11.4699 9.28198 10.7001C10.5269 9.94677 11.699 9.0792 12.7831 8.10862C13.2088 7.72667 13.6114 7.31982 13.9889 6.8902C15.2238 5.45987 15.619 4.2817 15.1293 3.4817Z" fill="#212121"/>
<path d="M1.92584 4.68122C1.88418 4.68135 1.84417 4.66492 1.81462 4.63555C1.78507 4.60617 1.7684 4.56627 1.76827 4.5246C1.76506 3.53697 0.962946 2.73832 -0.0247012 2.7394C-0.0826423 2.74262 -0.137618 2.71355 -0.167561 2.66385C-0.197503 2.61412 -0.197503 2.55195 -0.167561 2.50222C-0.137618 2.45252 -0.0826423 2.42344 -0.0247012 2.42667C0.963056 2.42801 1.76533 1.62921 1.76827 0.641457C1.76827 0.554162 1.83903 0.483395 1.92633 0.483395C2.01362 0.483395 2.08439 0.554162 2.08439 0.641457C2.0876 1.62948 2.89031 2.42828 3.87834 2.42667C3.96481 2.42667 4.03494 2.49678 4.03494 2.58327C4.03494 2.66977 3.96481 2.73987 3.87834 2.73987C2.89031 2.73827 2.0876 3.53707 2.08439 4.5251C2.08413 4.56685 2.06727 4.60677 2.03752 4.63607C2.00778 4.66535 1.96759 4.6816 1.92584 4.68122Z" fill="#212121"/>
<path d="M12.9813 14.751C12.9296 14.751 12.8875 14.7092 12.8873 14.6575C12.8849 14.0673 12.4055 13.5902 11.8153 13.5908C11.7636 13.5908 11.7217 13.5489 11.7217 13.4972C11.7217 13.4455 11.7636 13.4036 11.8153 13.4036C12.4055 13.4042 12.8849 12.9272 12.8873 12.337C12.8873 12.285 12.9294 12.2429 12.9813 12.2429C13.0333 12.2429 13.0754 12.285 13.0754 12.337C13.0778 12.9272 13.5572 13.4042 14.1474 13.4036C14.1991 13.4036 14.241 13.4455 14.241 13.4972C14.241 13.5489 14.1991 13.5908 14.1474 13.5908C13.5572 13.5902 13.0778 14.0673 13.0754 14.6575C13.0754 14.6824 13.0655 14.7062 13.0478 14.7238C13.0302 14.7414 13.0062 14.7512 12.9813 14.751Z" fill="#212121"/>
<path opacity="0.93" d="M5.39249 12.6482C6.97109 13.4359 8.84442 13.3531 10.3474 12.4292C11.8503 11.5054 12.7701 9.8713 12.7801 8.10712C11.6963 9.07732 10.5245 9.94457 9.27999 10.6977C8.04727 11.4666 6.74584 12.1196 5.39249 12.6482Z" fill="#212121"/>
<path opacity="0.93" d="M8.433 9.31202C9.7825 8.50402 11.0351 7.54424 12.1663 6.45139C12.2589 6.35929 12.3414 6.27492 12.4194 6.19395C12.1976 5.63 11.8764 5.11042 11.4711 4.6599C10.1951 3.2472 8.24175 2.6572 6.39708 3.1273C4.5524 3.5974 3.11968 5.05027 2.67543 6.90135C2.29705 8.51252 2.72198 10.2072 3.81578 11.4492C3.9336 11.4148 4.04948 11.3818 4.17798 11.3401C5.6688 10.828 7.09637 10.1476 8.433 9.31202Z" fill="#212121"/>
<path d="M15.1293 3.4817C14.642 2.68072 13.4114 2.49601 11.5763 2.94497C11.005 3.08947 10.443 3.2684 9.89338 3.48072C10.2476 3.65355 10.581 3.86632 10.8868 4.11492C11.1991 4.01212 11.5055 3.92097 11.7974 3.84872C12.2856 3.71947 12.7873 3.64835 13.2922 3.63685C13.8929 3.63685 14.2245 3.78522 14.3351 3.96607C14.5164 4.2628 14.3496 5.0463 13.283 6.2788C13.0934 6.49795 12.8796 6.72 12.6556 6.94352C11.4856 8.07417 10.1902 9.06745 8.7947 9.904C7.41253 10.7693 5.93533 11.4726 4.39228 12C2.5358 12.6046 1.26791 12.5925 0.98428 12.1285C0.700642 11.6645 1.26791 10.5285 2.6541 9.152C2.56913 8.76032 2.53088 8.35995 2.54015 7.95927C0.334097 9.95297 -0.380085 11.6815 0.190098 12.6138C0.488765 13.1021 1.14088 13.3794 2.09361 13.3794C3.2267 13.3317 4.3426 13.0856 5.39058 12.6521C6.74535 12.1233 8.04808 11.4699 9.28198 10.7001C10.5269 9.94677 11.699 9.0792 12.7831 8.10862C13.2088 7.72667 13.6114 7.31982 13.9889 6.8902C15.2238 5.45987 15.619 4.2817 15.1293 3.4817Z" fill="#212121"/>
</g>
<defs>
<clipPath id="clip0_724:59228">
<rect width="16" height="16" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@@ -81,6 +81,10 @@ export abstract class AzureAuth implements vscode.Disposable {
this.resources = this.resources.concat(this.metadata.settings.azureKustoResource);
}
if (this.metadata.settings.powerBiResource) {
this.resources = this.resources.concat(this.metadata.settings.powerBiResource);
}
this.scopes = [...this.metadata.settings.scopes];
this.scopesString = this.scopes.join(' ');
}
@@ -199,8 +203,10 @@ export abstract class AzureAuth implements vscode.Disposable {
if (remainingTime < maxTolerance) {
const result = await this.refreshToken(tenant, resource, cachedTokens.refreshToken);
accessToken = result.accessToken;
expiresOn = Number(result.expiresOn);
if (result) {
accessToken = result.accessToken;
expiresOn = Number(result.expiresOn);
}
}
// Let's just return here.
if (accessToken) {
@@ -223,7 +229,7 @@ export abstract class AzureAuth implements vscode.Disposable {
}
// Let's try to convert the access token type, worst case we'll have to prompt the user to do an interactive authentication.
const result = await this.refreshToken(tenant, resource, baseTokens.refreshToken);
if (result.accessToken) {
if (result?.accessToken) {
return {
...result.accessToken,
expiresOn: Number(result.expiresOn),
@@ -242,8 +248,10 @@ export abstract class AzureAuth implements vscode.Disposable {
* @param tenant
* @param resource
* @param refreshToken
* @returns The oauth token response or undefined. Undefined is returned when the user wants to ignore a tenant or chooses not to start the
* re-authentication process for their tenant.
*/
public async refreshToken(tenant: Tenant, resource: Resource, refreshToken: RefreshToken | undefined): Promise<OAuthTokenResponse> {
public async refreshToken(tenant: Tenant, resource: Resource, refreshToken: RefreshToken | undefined): Promise<OAuthTokenResponse> | undefined {
Logger.pii('Refreshing token', [{ name: 'token', objOrArray: refreshToken }], []);
if (refreshToken) {
const postData: RefreshTokenPostData = {

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