Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pull] main from microsoft:main #857

Open
wants to merge 8,100 commits into
base: main
Choose a base branch
from
Open

[pull] main from microsoft:main #857

wants to merge 8,100 commits into from

Conversation

pull[bot]
Copy link

@pull pull bot commented Dec 5, 2022

See Commits and Changes for more details.


Created by pull[bot]

Can you help keep this open source service alive? 💖 Please sponsor : )

@github-actions github-actions bot added documentation Improvements or additions to documentation area: dds area: examples public api change labels Dec 5, 2022
@pull pull bot added ⤵️ pull and removed documentation Improvements or additions to documentation area: dds area: examples public api change labels Dec 5, 2022
@github-actions
Copy link

github-actions bot commented Dec 5, 2022

🔗 Found some broken links! 💔

Run a link check locally to find them. See
https://github.com/microsoft/FluidFramework/wiki/Checking-for-broken-links-in-the-documentation for more information.

linkcheck output


> fluidframework-docs@0.25.0 linkcheck /home/runner/work/FluidFramework/FluidFramework/docs
> npm run linkcheck:fast -- --external


> fluidframework-docs@0.25.0 linkcheck:fast /home/runner/work/FluidFramework/FluidFramework/docs
> linkcheck http://localhost:1313 --skip-file skipped-urls.txt "--external"

Crawling...

http://localhost:1313/css/style.min.882abef0cf4d5438897263d06a89616ce369514241de0a09692f026c97a3b939.css
- (1:1031) url(...) => https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.svg (HTTP 503)
- (1:1272) url(...) => https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.eot? (HTTP 503)
- (1:3811) url(...) => https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.svg (HTTP 503)

http://localhost:1313/docs/apis/core-interfaces/ifluidcodedetailscomparer-interface
- (865:360) 'Array.sort' => https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Description (HTTP 200 but missing anchor)
- (876:168) 'https://..' => https://github.com/npm/node-semver#usage (HTTP 200 but missing anchor)
- (884:25) 'Array.sort' => https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Description (HTTP 200 but missing anchor)
- (930:25) 'https://..' => https://github.com/npm/node-semver#usage (HTTP 200 but missing anchor)

http://localhost:1313/docs/apis/core-interfaces/ifluidcodedetailscomparer-interface/
- (865:360) 'Array.sort' => https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Description (HTTP 200 but missing anchor)
- (876:168) 'https://..' => https://github.com/npm/node-semver#usage (HTTP 200 but missing anchor)
- (884:25) 'Array.sort' => https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Description (HTTP 200 but missing anchor)
- (930:25) 'https://..' => https://github.com/npm/node-semver#usage (HTTP 200 but missing anchor)

http://localhost:1313/docs/apis/task-manager/taskmanager-class
- (838:52) 'https://..' => https://fluidframework.com/docs/data-structures/task-manager/%29 (HTTP 404)

http://localhost:1313/docs/apis/task-manager/taskmanager-class/
- (838:52) 'https://..' => https://fluidframework.com/docs/data-structures/task-manager/%29 (HTTP 404)

http://localhost:1313/docs/start/examples/
- (877:5) 'Using Fl..' => https://learn.microsoft.com/microsoftteams/platform/tabs/using-fluid-msteam (HTTP 301 => 404)
  - redirect path:
    - https://learn.microsoft.com/microsoftteams/platform/tabs/using-fluid-msteam (301)
    - /en-us/microsoftteams/platform/tabs/using-fluid-msteam (404)


Summary of most serious issues:

http://localhost:1313/css/style.min.882abef0cf4d5438897263d06a89616ce369514241de0a09692f026c97a3b939.css
- (1:1031) url(...) => https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/light/latest.svg (HTTP 503)
- (1:1272) url(...) => https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/semilight/latest.eot? (HTTP 503)
- (1:3811) url(...) => https://c.s-microsoft.com/static/fonts/segoe-ui/west-european/bold/latest.svg (HTTP 503)

http://localhost:1313/docs/apis/task-manager/taskmanager-class
- (838:52) 'https://..' => https://fluidframework.com/docs/data-structures/task-manager/%29 (HTTP 404)

http://localhost:1313/docs/apis/task-manager/taskmanager-class/
- (838:52) 'https://..' => https://fluidframework.com/docs/data-structures/task-manager/%29 (HTTP 404)

http://localhost:1313/docs/start/examples/
- (877:5) 'Using Fl..' => https://learn.microsoft.com/microsoftteams/platform/tabs/using-fluid-msteam (HTTP 301 => 404)
  - redirect path:
    - https://learn.microsoft.com/microsoftteams/platform/tabs/using-fluid-msteam (301)
    - /en-us/microsoftteams/platform/tabs/using-fluid-msteam (404)


Stats:
  113738 links
    1227 destination URLs
       2 URLs ignored
       8 warnings
       5 errors


GitHub
Library for building distributed, real-time collaborative web applications - Checking for broken links in the documentation · microsoft/FluidFramework Wiki

dannimad and others added 30 commits January 22, 2025 17:51
Bumped client from 2.20.0 to 2.21.0.
…elease levels. (#23533)

Since we generate API reports for different release levels, it is
possible (and valid) for `@link` tags to reference an API item that
won't be visible at that level. Currently, our configurations forbid
such links as a side-effect of running link validation during report
generation (where APIs will be omitted from report consideration based
on their release tags.

However, it is often useful for APIs to link to more experimental APIs
for discoverability.

To make this possible, link validation is now disabled in report
generation configurations. It is maintained in model generation configs,
which is where we really need it.

Also adds a couple of such links in the `tree` package as a test (and
because we wanted them there).
…push` rule (#23632)

Reports false positives for methods named "push" on non-array objects.
…ion to leverage new hierarchy options (#23602)

The default suite structure has been updated as follows:
- `Package` and `Namespace` items now generate documents _inside_ of
their own folder hierarchy, yielding documents named "index".
- `Enum` and `TypeAlias` items now generate their own documents (rather
than being rendered as sections under their parent document).

E.g., old output would likely look something like

```
- index.md
- package-a.md
- package-a/
    - foo.md
    - ...
- package-b.md
- package-b/
    - bar.md
    - ... 
```

And the new output would likely look more like:

```
- index.md
- package-a/
    - index.md
    - foo.md
    - ...
- package-b/
    - index.md
    - bar.md
    - ... 
```

Updates to the `default-config` test assets demonstrate the difference.

Also update the `spase-config` test suite to move the package documents
under their own hierarchy to be more demonstrative of what an expected
use case would likely look like. Other test cases have been updated to
maintain existing behavior, accounting for the new defaults.


[AB#24263](https://dev.azure.com/fluidframework/235294da-091d-4c29-84fc-cdfc3d90890b/_workitems/edit/24263)
…commended" config and fix violations (#23609)

One in a series of PRs working towards migrating the package to our
`recommended` config.

Enables the following rules, which are included in our "recommended"
config:
- `unicorn/catch-error-name`
- `unicorn/consistent-destructuring`
- `unicorn/new-for-builtins`
- `unicorn/no-array-callback-reference`
- `unicorn/no-array-for-each`
- `unicorn/no-null`
- `unicorn/no-zero-fractions`
- `unicorn/prefer-node-protocol`
- `unicorn/prefer-number-properties`
- `unicorn/prefer-optional-catch-binding`
- `unicorn/prefer-spread`
- `unicorn/prefer-string-slice`
- `unicorn/switch-case-braces`
- `unicorn/throw-new-error`


[AB#3027](https://dev.azure.com/fluidframework/235294da-091d-4c29-84fc-cdfc3d90890b/_workitems/edit/3027)
…al (#23634)

The `uriRoot` parameter is an option for changing the root path for all
generated links. A sensible default for this parameter is nothing (i.e.
`""`). This PR makes the parameter optional, and simplifies a couple of
test cases by omitting that value.
…es and examples (#23635)

While "" and "." for are potentially comparable for a URI root (system
dependent), the leading "." makes routes look like relative file paths,
which is misleading. Update documentation and tests to use "" instead of
".".
The Jest CLI `--ci` flag cannot be set in its config file like other
settings, but it [defaults to isCI from the is-ci
package](https://github.com/jestjs/jest/blob/d051b0da359c5930ab4c3ea69fe5524266622c96/packages/jest-cli/src/cli/args.ts#L126),
which in turn uses ci-info, which [supports
azure](https://github.com/watson/ci-info#supported-ci-tools). So the
flag should already be set to true by default in CI even without setting
it explicitly. However, to be capable of running tests in an environment
as close to CI as possible, even when running locally, the scripts have
been updated to pass the `--ci` flag whenever jest is invoked.
## Description

Changes that result from adding a dependency somewhere, doing `pnpm i
--no-frozen-lockfile`, removing the dependency, and doing `pnpm i
--no-frozen-lockfile` again.

Seems to be a lot of churn that the upgrade to pnpm v9 should have
applied but didn't. A couple breaking changes in [the v9 release
notes](https://github.com/pnpm/pnpm/releases/tag/v9.0.0) talk about peer
dendencies, which (part of?) this seems to be related to.
This change is just cleanup of deprecated things which are unused,
internal, and/or unexported.
This change removes unnecessary ContainerRuntime members. These members
just increased complexity of the class, and most could be moved to just
be function scoped variables.
This is an effort to reduce time consumed by our client pipeline,
parallelizing our tests running them on different agents. With this
change we're able to reduce the time from an average of 54min to 38min,
writing also the foundations to further parallelization that could keep
improving the time all the way down to 25 min on my estimations but
which work requires more than this wave of changes.

On a nutshell, this change creates a different template from which the
client pipeline runs, which main difference is the creation of an
artifact that contains some of the build output to be able to run tests
on different agents. After several optimizations, by publishing content
generated inside lib/dist directories and restore this content in a
different agent (once we have checked out the repo and install
dependencies), we're able to run our ci tests without needing to run the
build process again.

<img width="232" alt="image"
src="https://github.com/user-attachments/assets/9503bfde-c5ad-4676-8dfd-a7fcb8ae4a3b"
/>


Some caveats:
- Losing some code coverage: given the way coverage works, coverage
tests need to be run in the same agent. By running mocha and local e2e
tests in the same agent, we're able to keep coverage logic in place
altough we will lose coverage done by jest tests.
- jests tests need to run the build: for unknown reasons, jests tests
are the only ones failing with current approach of consuming lib/dist
directories. I even tried getting output.log and tsbuildinfo files but
yet there is something generated by the build necessary for these tests
to run, so for now we could also run c:build with these tests. It does
not matter in terms of time since tests don't consume a lot of time.
- repeated logic on our templates: new template shares a lot of logic
with build-npm-package.yml since it started as a copy of it. Also it has
a lot of logic that does not need to be there since we now know it will
only run for client. I don't consider these to be blocking current PR
but I would like to attend this in a future PR
- More agent creation: more agents are created in our pipelines given
this approach so I'll do some testing to make sure there is no
unexpected behavior when multiple pipeline runs at the same time.
- further parallelization: A lot of these caveats need to be solved to
further parallelize these tests. For example, we could split our e2e t9s
tests into 2, reducing significantly the time they consume. I believe we
could further reduce pipeline duration to 25-28min with further
investing.

---------

Co-authored-by: Alex Villarreal <716334+alexvy86@users.noreply.github.com>
## Description

- Removes the `eslint-plugin-deprecation` package which we apparently
weren't using (only present in two packages, not across the repo, and
nowhere does an eslint config extend from
`plugin:deprecation/recommended` or use the `deprecation/deprecation`
rule). We already use `import/no-deprecated` so it seems redundant
anyway.
- Adds a dependency on `"fluid-framework": "^1.4.0"`, to
`packages/service-clients/end-to-end-tests/azure-client`, since
`azure-client@^1.2.0` requires it as a peer. Currently the version being
resolved was the one from the repo, which maybe speaks well about
compatibility? But maybe we just didn't exercise it enough to notice
problems.
- Adds a dependency on `"scheduler": "^0.20.0"` to
`packages/tools/devtools/devtools-view` since it's a required peer dep
of some `@fluentui/*` packages it uses.
The following types in the `@fluidframework/container-runtime` are
deprecated. These types are unnecessary for external users of this
package.

- currentDocumentVersionSchema
- DeletedResponseHeaderKey
- DocumentSchemaValueType
- DocumentsSchemaController
- GCFeatureMatrix
- GCNodeType
- GCVersion
- IBlobManagerLoadInfo
- ICancellableSummarizerController
- ICancellationToken
- IConnectableRuntime
- IContainerRuntimeMetadata
- ICreateContainerMetadata
- IDocumentSchema
- IDocumentSchemaChangeMessage
- IDocumentSchemaCurrent
- IDocumentSchemaFeatures
- IGCMetadata
- IGCStats
- IMarkPhaseStats
- IRefreshSummaryAckOptions
- ISerializedElection
- ISubmitSummaryOptions
- ISummarizerInternalsProvider
- ISummarizerRuntime
- ISummaryCancellationToken
- ISummaryMetadataMessage
- ISweepPhaseStats
- Summarizer

related #23644

---------

Co-authored-by: Matt Rakow <ChumpChief@users.noreply.github.com>
Updates the routerlicious and tinylicious docs to clarify how to set
config settings via environment variables, including adjusting the
logging levels of tinylicious.

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…n V2 dropdown (#23613)

## Fix Screen reader is not announcing the index numbers for the items
in V2 dropdown
### How to test
- Enable VoiceOver for mac, cmd + F5, or Narrator for windows
- Open the link [Fluid Framework Documentation | Fluid
Framework](https://fluidframework.com/docs/)
- Tab till V2 dropdown in header.
- Hit enter.
- Using down arrow key navigate to the items in dropdown.
- Observe that Screen reader is not announcing the index numbers for the
items in V2 dropdown.
## Description

Adjusts the `timeoutPromise` calls in the attach lifecycle test suite to
use the default behavior of waiting until *just before* the test times
out rather than half the duration of the test. The previous behavior
effectively enforced that every operation completed within half the test
timeout, or 2.5s on tinylicious. That is indeed true most of the time,
but because we run so many variants of this test, it has been mildly
flaky on CI. After this change, we just enforce that the overall test
completes within 5s. There have been 6 hits recently for tinylicious,
with 4 of them timing out on a promise near the start of the test
duration. Here's a column chart of number of test runs vs duration in
ms:


![image](https://github.com/user-attachments/assets/d7ce6869-717d-42e6-8a08-efdcc8711cb0)

Interestingly, we have some passed runs over 3 second long. This
suggests some of the runs we're timing out because of one particular
step may not have even gone over 5 seconds.

The long tail here might mean we eventually want to also bump the t9s
timeout for this test suite, but we can evaluate that later using
similar techniques.

Co-authored-by: Abram Sanderson <absander@microsoft.com>
## Summary of changes

The presence-tracker example has been updated to use the presence
package. It now uses LatestValueManagers for mouse and focus tracking.

Each client also has a slider that controls the allowable latency of the
mouse updates. This enables quick demos of the differences in behavior
with higher latencies as well as demonstrating runtime adjustments of
the allowable latency.

## Known issues:

- The failing test checks that when a second client joins the first
client's client list is updated. This failure seems to indicate that the
multi-client setup is not working correctly. Follow-up issue:
[AB#28502](https://dev.azure.com/fluidframework/235294da-091d-4c29-84fc-cdfc3d90890b/_workitems/edit/28502)
…Runtime boundary (#22877)

## Description
Added `supportedFeatures` and `generation`properties to Runtime and
Loader layer boundary. These will be used to validate that the layers
are compatible.
These two properties along with `pkgVersion` are added to a
`ILayerCompatDetails` interface. `ContainterContext` and
`ContainerRuntime` implements this interface provider and uses the
provider pattern to access it from the other object. The `interface` is
internal and is not exposed since this in an internal implementation.
`pkgVersion` is includes in the error / warning logs to give additional
context to users as to what the incompatible version combination is.
Also, added a `ILayerCompatSupportRequirements` interface that has
properties that a layer requires other layer to be at to be compatible.

### Supported features
- Both the Runtime and Loader layers have a `supportedFeatures` property
that includes a set of features that a layer supports. This is
advertised to the other layer at the layer boundary.
- Both the layers have a `requiredFeatures` array that includes a set of
features that it requires the other layer to support in order to be
compatible. _Note that this is internal to that layer and is not
advertised._
- At runtime, each layer validates that all the entries in
`requiredFeatures` is present in the `supportedFeatures` of the other
layer. If not, it closes the container with a usage error that says
layers are not compatible.
- Any change that adds new behavior or changes existing behavior across
a layer boundary must add an entry to the supported features set. For
example, changes such as "move writing protocol tree to summary from
Loader to Runtime" should add an entry to the supported features set.

### Generation
- In addition to supported features, a `generation` is also added to
both the layers. This is advertised to the other layer at the layer
boundary.
- Generation is an integer which will be incremented every month. It
will be used to validate compatibility more strictly (time-based) than
supported features where layers are incompatible only if there are
unsupported features.
_Note: The logic to update the generation will be added in a later PR.
See
[AB#27054](https://dev.azure.com/fluidframework/235294da-091d-4c29-84fc-cdfc3d90890b/_workitems/edit/27054)
for a proposed solution._
- One key reason for adding generation is to have a clear cut off point
where we officially stop supporting layer combinations. Our compat tests
will test combinations up to this cut off point. The idea is that we
test what we support and whatever we don't test should not be supported.
This will help us achieve that.
- Say that Runtime / Loader compatibility is N months. We can start
throwing warnings when the layers are almost N-months apart saying that
this combination is not supported. This will give applications an early
signal that layers are about to be incompatible and they can take
necessary steps. We can also choose to close the container if we decide
to be strict about the layer combinations.
- Both the layers have a `minSupportedGeneration` that it needs the
other layer to be at. _Note that this is internal to that layer and is
not advertised._
- At runtime, each layer validates that the `generation` of the other
layer is >= `minSupportedGeneration`.
- For example, say that the Runtime is at generation 20 and has a
`minSupportedGeneration` of 8 for the Loader layer (12 month support
window). If it sees that Loader's generation is lower than 8, the layers
are incompatible.

### Backwards compatibility
To support older layers before layer compat enforcement is introduced,
the `minSupportedGeneration` is set to 0 whereas `generation` starts at
1. For older layers that did not implement `ILayerCompatDetails`, their
generation is set to 0 and supported features is set to an empty set.
So, their generation is compatible until we update the
`minSupportedGeneration`.


[AB#20805](https://dev.azure.com/fluidframework/235294da-091d-4c29-84fc-cdfc3d90890b/_workitems/edit/20805)
… options (#23504)

Update dev dependency on `@fluid-tools/api-markdown-documenter` and
leverage new "hierarchy" capabilities to move "folder" item documents
(packages and namespaces) _into_ their folders, renamed to `index`.

E.g., 
File structure before:

```
| fluid-framework.md
| fluid-framework
    | foo.md
    | ...
```

After:

```
| fluid-framework
    | index.md
    | foo.md
    | ...
```

This makes the breadcrumbs and navigation drop-downs generated by
docusaurus better match the intended hierarchy.

E.g.,

Namespace appearance in the nav before:

![image](https://github.com/user-attachments/assets/37fb8974-b306-4b37-a9df-2ec53052faf4)

- Note that there is a separate page and folder, and selecting the
folder doesn't navigate to the page; it just functions as a drop-down.

Namespace appearance after:

![image](https://github.com/user-attachments/assets/7ab5e37e-817b-495f-a569-8c00a2c360d6)

Breadcrumb before:

![image](https://github.com/user-attachments/assets/adba1322-f2a8-40a3-ad07-2d4b607ba918)

- Note that the parent folder isn't selectable, because Docusaurus
doesn't understand that it's supposed to point to the document of the
same name.

Breadcrumb after:

![image](https://github.com/user-attachments/assets/d74f49bb-62ba-4dcc-a5d1-dd8a3ec70539)

- Note that the parent entry is now selectable (screenshot was taken
with mouse hovering over item)


[AB#24263](https://dev.azure.com/fluidframework/235294da-091d-4c29-84fc-cdfc3d90890b/_workitems/edit/24263)
…y breaking minor releases (#23603)

This PR fixes N-X version calculation to take into account the new
legacy breaking minor releases. For example,

- For `2.0.0 <= N < 2.10.0`, N-1 is 2.0.0-rc.5.0.x.
- For `2.10.0 <= N < 2.20.0`, N-1 is 2.5.x (latest minor between 2.0 and
2.10 is 2.5.x)
- For `2.20.0 <= N < 2.30.0`, N-1 is 2.13.x (latest minor between 2.10
and 2.20 is 2.13.x)

We should still consider a full rewrite of version calculation, since
the code is extremely messy and hard to follow for developers not
familiar with it already. However, this change is needed to ensure we
continue testing properly in the meantime. See
[AB#8198](https://dev.azure.com/fluidframework/235294da-091d-4c29-84fc-cdfc3d90890b/_workitems/edit/8198)
for more details.


[AB#28437](https://dev.azure.com/fluidframework/235294da-091d-4c29-84fc-cdfc3d90890b/_workitems/edit/28437)
## Description

Add a new "debugAssert" API which can be used to add asserts which can
be optionally enabled when debugging, and compiled out of production
builds.

One usage of this was added to tree. This was used to manually test that
the tree bundle grew if adding this assert using the regular assert API,
but had no change (0 bytes) when adding the assert using the new
debugAssert API.
- Removed [unused] production dependencies: `map` and `runtime-utils`
- Import `SharedMap` and `SharedTree` from `fluid-framework`.
   - `SharedTree` is different between `tree` and `fluid-framework` exports. The test code that is using `SharedTree` wants to use the `fluid-framework` `@public` version but was using the `@legacy` version from `tree`. (Really `tree` should expose both, but it is understandable why it is the way it is.)
   - For best patterns and consistency, `SharedMap` should be pulled from `fluid-framework` instead of `map`.
   - Then neither `map` nor `tree` are required dependencies and are removed.
- Removed dev dependencies: aqueduct
…d cleanup (#23651)

- renames a weak map to be more accurate
- removes tryGetTreeNodeFromMapNode and replaces it with a restricted
version of the original map
We already run CodeQL in the main build job, so we don't need to run it
again on test jobs.
Update type tests according to our wiki.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.