Compare commits
316 Commits
rav/bump_p
...
v1.11.64
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
180a1a243b | ||
|
|
5246a7824b | ||
|
|
2dffd41c6f | ||
|
|
43db5a8731 | ||
|
|
7c9f521f65 | ||
|
|
9848bf8246 | ||
|
|
4cd14b58e1 | ||
|
|
2853a23679 | ||
|
|
bd931ebd74 | ||
|
|
e2b5cea7df | ||
|
|
2fb41f19a7 | ||
|
|
0cd36558c5 | ||
|
|
f835c678bf | ||
|
|
44a2666183 | ||
|
|
1b81c276fc | ||
|
|
309bb7eb47 | ||
|
|
44fff3b45c | ||
|
|
7498afcb33 | ||
|
|
9091c074a8 | ||
|
|
50a62f6105 | ||
|
|
ef29e98bdc | ||
|
|
814aa778ea | ||
|
|
2723a23ea7 | ||
|
|
23bc0d7f3d | ||
|
|
573478a630 | ||
|
|
271524e264 | ||
|
|
18446de298 | ||
|
|
a6a901109b | ||
|
|
7effb12bbe | ||
|
|
b625a8f41f | ||
|
|
786cd12636 | ||
|
|
122ecb05c9 | ||
|
|
f07ea3d2cc | ||
|
|
37612eb41a | ||
|
|
24e17182b3 | ||
|
|
7a8a72b1e8 | ||
|
|
926d944c2a | ||
|
|
ddc22578f6 | ||
|
|
8f24d68b53 | ||
|
|
5a97ad33a2 | ||
|
|
954589df1b | ||
|
|
7c9e37a2c6 | ||
|
|
913be315f3 | ||
|
|
830e7c5c45 | ||
|
|
d6671cca75 | ||
|
|
38dbedcd85 | ||
|
|
4e492da1e4 | ||
|
|
5cfacc799d | ||
|
|
31d44b4c46 | ||
|
|
ba2336ac5c | ||
|
|
33ea45301e | ||
|
|
02a315814f | ||
|
|
5fe009d094 | ||
|
|
8082d07e7b | ||
|
|
559c3788ac | ||
|
|
54ba0873da | ||
|
|
28038cc53e | ||
|
|
97c3da3789 | ||
|
|
40a6a4296b | ||
|
|
c5168ad100 | ||
|
|
89e455e9a7 | ||
|
|
b68ff2fd88 | ||
|
|
00abe771bf | ||
|
|
1a2e1474f4 | ||
|
|
d0b87400d1 | ||
|
|
0977c3839a | ||
|
|
cd7bd1b253 | ||
|
|
11b7c72e7d | ||
|
|
ddec6aed59 | ||
|
|
3f8ce55e8b | ||
|
|
43467fc7c5 | ||
|
|
7b9d7e37e4 | ||
|
|
072bc7fc8c | ||
|
|
8d04ce4255 | ||
|
|
b97f4b31fa | ||
|
|
a0c90f9657 | ||
|
|
9b01f375e9 | ||
|
|
0539c99cf8 | ||
|
|
842fa767b8 | ||
|
|
aa427ecaf3 | ||
|
|
5e72da399e | ||
|
|
1c562a0d2d | ||
|
|
f01d69f90b | ||
|
|
c9d40992a1 | ||
|
|
986ea30ef5 | ||
|
|
110e5163e0 | ||
|
|
26999ee978 | ||
|
|
ed2d6d68bb | ||
|
|
f530e7e4b4 | ||
|
|
b428f4f483 | ||
|
|
4a6ac5f8d2 | ||
|
|
5360dfa9a4 | ||
|
|
ca93577cd1 | ||
|
|
e5e536a279 | ||
|
|
1f181f1c0a | ||
|
|
66ba7054f9 | ||
|
|
5ee2f5c9c0 | ||
|
|
a7e3cb8c2c | ||
|
|
a8e9746968 | ||
|
|
91d3d9f910 | ||
|
|
3c41b70932 | ||
|
|
d1d909105f | ||
|
|
831eddfbd4 | ||
|
|
16f197eda8 | ||
|
|
946f35577e | ||
|
|
7856a2aac3 | ||
|
|
617dd777a0 | ||
|
|
4d52fe0334 | ||
|
|
8b2cd6caa8 | ||
|
|
f3f249194b | ||
|
|
4a014ea056 | ||
|
|
494f9eccf3 | ||
|
|
f8a2e41df3 | ||
|
|
f601f0b889 | ||
|
|
67898d8ba7 | ||
|
|
a440a57945 | ||
|
|
276afcd02f | ||
|
|
e876c45581 | ||
|
|
4a77466cae | ||
|
|
f41d46866d | ||
|
|
282d71730b | ||
|
|
465131a836 | ||
|
|
432bd3421d | ||
|
|
64cec89085 | ||
|
|
f502a4049a | ||
|
|
ade8f795b2 | ||
|
|
c022ae2853 | ||
|
|
e35d040cc6 | ||
|
|
b44719aa67 | ||
|
|
03b7aeee75 | ||
|
|
ad696bceb7 | ||
|
|
e03b52b946 | ||
|
|
1ead4e1f4c | ||
|
|
4f5e1bb5ee | ||
|
|
3e38fd749d | ||
|
|
4b093489dd | ||
|
|
1d429cca6b | ||
|
|
6e5f2ad66e | ||
|
|
31a0dcab4d | ||
|
|
8a71a98119 | ||
|
|
ab0c396705 | ||
|
|
0788253645 | ||
|
|
3b4bc60041 | ||
|
|
0bf0794956 | ||
|
|
4126d6807f | ||
|
|
4fb185ad70 | ||
|
|
8559fb3eaa | ||
|
|
36002f6d76 | ||
|
|
fa1ff8f566 | ||
|
|
0e7ee62872 | ||
|
|
bf99ab262f | ||
|
|
f372a924b5 | ||
|
|
854a81056b | ||
|
|
3ac096619b | ||
|
|
fea4ae5939 | ||
|
|
4bd9f41f9e | ||
|
|
77b9cc18cc | ||
|
|
35fe447aae | ||
|
|
7da5e48d89 | ||
|
|
88d6340b37 | ||
|
|
588094339a | ||
|
|
9f450c877d | ||
|
|
de46ba01e3 | ||
|
|
c47f8c8fa8 | ||
|
|
c73548ccbd | ||
|
|
b40db8a89b | ||
|
|
aa5024adae | ||
|
|
c19737b387 | ||
|
|
92c831094d | ||
|
|
bb337a1cd8 | ||
|
|
6ca50e537e | ||
|
|
3e84bb3a6e | ||
|
|
2a8b00f928 | ||
|
|
3e5c054243 | ||
|
|
fab68c1c5d | ||
|
|
ee72d0de75 | ||
|
|
09dff6ab05 | ||
|
|
7622dd35c5 | ||
|
|
c64af5671a | ||
|
|
313753483a | ||
|
|
502a00dba1 | ||
|
|
fa8ae283eb | ||
|
|
1d8fb46580 | ||
|
|
3b7fd88ef0 | ||
|
|
def12eb7d5 | ||
|
|
ddae8f0b6d | ||
|
|
2e882b138a | ||
|
|
c1ff276828 | ||
|
|
d248fa9ea0 | ||
|
|
b0bb33cccf | ||
|
|
fa7ff50482 | ||
|
|
8892bd659c | ||
|
|
ca2016d041 | ||
|
|
f4f78af477 | ||
|
|
d658103530 | ||
|
|
32d4d33e3e | ||
|
|
9144983794 | ||
|
|
a80895074b | ||
|
|
48b5eddd79 | ||
|
|
a21a1cad1f | ||
|
|
e46c4d06c3 | ||
|
|
92b3fb1e5e | ||
|
|
a41cf2140c | ||
|
|
037996711e | ||
|
|
8f9cf862fe | ||
|
|
0266f73965 | ||
|
|
01c64013c2 | ||
|
|
fc04258231 | ||
|
|
010d835d2c | ||
|
|
fcec34f4e7 | ||
|
|
1162820af9 | ||
|
|
9511d46a83 | ||
|
|
145f551cd3 | ||
|
|
7c584df3e8 | ||
|
|
46415c3439 | ||
|
|
c512e49639 | ||
|
|
0cd4a4faac | ||
|
|
e0abf63d87 | ||
|
|
e1715e2c00 | ||
|
|
e6543bbde6 | ||
|
|
96bcde4e35 | ||
|
|
285ba42316 | ||
|
|
aaeb1081c7 | ||
|
|
8af9fe2e27 | ||
|
|
6e1f842351 | ||
|
|
b90966fd1c | ||
|
|
eb93fb6ab5 | ||
|
|
4c4331193e | ||
|
|
cee3bfc031 | ||
|
|
7f0434523f | ||
|
|
1f46d61c1b | ||
|
|
7285773737 | ||
|
|
3ebe9f4196 | ||
|
|
58059d1f0a | ||
|
|
3000a48907 | ||
|
|
c02f153c2a | ||
|
|
feba18abd4 | ||
|
|
41576e41ca | ||
|
|
8ab44c98b2 | ||
|
|
e7ce9b4751 | ||
|
|
db78839e86 | ||
|
|
0aed37a2e5 | ||
|
|
19ed4a86c6 | ||
|
|
71840ee63c | ||
|
|
cde1e1ecb8 | ||
|
|
3fe0325eab | ||
|
|
5dd1ed9aac | ||
|
|
3867576137 | ||
|
|
e2371c0244 | ||
|
|
bfe40d6a1b | ||
|
|
927b3165ab | ||
|
|
5b6f5e8c4c | ||
|
|
c5bf7f405c | ||
|
|
bb3954c235 | ||
|
|
1669477d87 | ||
|
|
9ca55b76b0 | ||
|
|
243515a323 | ||
|
|
feab5057bd | ||
|
|
f10214a9dd | ||
|
|
e5d0c2ae7b | ||
|
|
62b65744e5 | ||
|
|
74d52f535a | ||
|
|
a410f96802 | ||
|
|
6d9efbab7a | ||
|
|
0afcc88763 | ||
|
|
8afab3c3f6 | ||
|
|
872b7f5110 | ||
|
|
9a1956c187 | ||
|
|
1ee644aab1 | ||
|
|
c2fa3d8f04 | ||
|
|
d7ab867af3 | ||
|
|
500f3485e0 | ||
|
|
97412e5e12 | ||
|
|
03cf7ca698 | ||
|
|
cc6b519d98 | ||
|
|
4b36e06cfe | ||
|
|
3f578ad80a | ||
|
|
7cd2f78e3a | ||
|
|
d6437b2db0 | ||
|
|
e938d8d0f4 | ||
|
|
3582e2a3ae | ||
|
|
3c31f55e87 | ||
|
|
9526a94ffc | ||
|
|
3a97c74074 | ||
|
|
9ea88438f9 | ||
|
|
d5047b708f | ||
|
|
fa3d8341a9 | ||
|
|
b91d0a6a5a | ||
|
|
04a2d3c9ba | ||
|
|
75aefff539 | ||
|
|
18fee2e650 | ||
|
|
ee5a3ce4a9 | ||
|
|
dee2a8ca29 | ||
|
|
e5a7bb89e2 | ||
|
|
c02af77655 | ||
|
|
d3ff627134 | ||
|
|
e73eba5b28 | ||
|
|
96bbe07e22 | ||
|
|
136a41bf7b | ||
|
|
0e0f5f06c2 | ||
|
|
4101d36bfb | ||
|
|
5c66bc860e | ||
|
|
91a09d97b1 | ||
|
|
ded9d6b55d | ||
|
|
4032304f01 | ||
|
|
a5caa5055e | ||
|
|
3f159934e4 | ||
|
|
436790cfd8 | ||
|
|
a012fb282f | ||
|
|
68fec606f2 | ||
|
|
03a624f788 | ||
|
|
922f16812c | ||
|
|
9ee7440dfd | ||
|
|
2d26c46c1c | ||
|
|
e3522d221a | ||
|
|
c6182b263d |
18
.github/PULL_REQUEST_TEMPLATE.md
vendored
18
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -2,17 +2,7 @@
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Tests written for new code (and old code if feasible)
|
||||
- [ ] Linter and other CI checks pass
|
||||
- [ ] Sign-off given on the changes (see [CONTRIBUTING.md](https://github.com/element-hq/element-web/blob/develop/CONTRIBUTING.md))
|
||||
|
||||
<!--
|
||||
If you would like to specify text for the changelog entry other than your PR title, add the following:
|
||||
|
||||
Notes: Add super cool feature
|
||||
|
||||
For PRs which *only* affect the desktop version, please use:
|
||||
|
||||
Notes: none
|
||||
element-desktop notes: Add super cool feature
|
||||
-->
|
||||
- [ ] Tests written for new code (and old code if feasible).
|
||||
- [ ] New or updated `public`/`exported` symbols have accurate [TSDoc](https://tsdoc.org/) documentation.
|
||||
- [ ] Linter and other CI checks pass.
|
||||
- [ ] Sign-off given on the changes (see [CONTRIBUTING.md](https://github.com/element-hq/element-web/blob/develop/CONTRIBUTING.md)).
|
||||
|
||||
3
.github/labels.yml
vendored
3
.github/labels.yml
vendored
@@ -226,6 +226,9 @@
|
||||
- name: "Z-Fixed by Element Call"
|
||||
description: "Issues which can be closed when we move to Element Call"
|
||||
color: "ededed"
|
||||
- name: "Z-Fixed-By-OIDC"
|
||||
description: "Issues which can be closed when we move to OIDC"
|
||||
color: "ededed"
|
||||
- name: "Z-Flaky-Test"
|
||||
description: "A test is raising false alarms"
|
||||
color: "ededed"
|
||||
|
||||
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@@ -3,6 +3,8 @@ on:
|
||||
pull_request: {}
|
||||
push:
|
||||
branches: [develop, master]
|
||||
merge_group:
|
||||
types: [checks_requested]
|
||||
# develop pushes and repository_dispatch handled in build_develop.yaml
|
||||
env:
|
||||
# These must be set for fetchdep.sh to get the right branch
|
||||
|
||||
2
.github/workflows/build_debian.yaml
vendored
2
.github/workflows/build_debian.yaml
vendored
@@ -61,7 +61,7 @@ jobs:
|
||||
dpkg-gencontrol -v"$VERSION" -ldebian/tmp/DEBIAN/changelog
|
||||
dpkg-deb -Zxz --root-owner-group --build debian/tmp element-web.deb
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: element-web.deb
|
||||
path: element-web.deb
|
||||
|
||||
11
.github/workflows/build_develop.yml
vendored
11
.github/workflows/build_develop.yml
vendored
@@ -47,7 +47,7 @@ jobs:
|
||||
|
||||
- run: mv dist/element-*.tar.gz dist/develop.tar.gz
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: webapp
|
||||
path: dist/develop.tar.gz
|
||||
@@ -84,6 +84,13 @@ jobs:
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.CF_R2_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_TOKEN }}
|
||||
|
||||
# We may be trying to deploy the same webapp bundles again, we need to ensure that the live bundles
|
||||
# are not present in the _redirects file and instead accessed directly from Cloudflare Pages.
|
||||
- name: Trim _redirects
|
||||
working-directory: _deploy
|
||||
run: |
|
||||
find bundles -type d -mindepth 1 -maxdepth 1 -exec sed -i "\:{}:d" _redirects \;
|
||||
|
||||
- name: Wait for other steps to succeed
|
||||
uses: t3chguy/wait-on-check-action@05861d3a448898eb33dfce34153bd1ecb9422fb9 # fork
|
||||
with:
|
||||
@@ -91,7 +98,7 @@ jobs:
|
||||
running-workflow-name: "Build & Deploy develop.element.io"
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
wait-interval: 10
|
||||
check-regexp: ^((?!SonarCloud|SonarQube|issue|board|label|Release).)*$
|
||||
check-regexp: ^((?!SonarCloud|SonarQube|issue|board|label|Release|prepare).)*$
|
||||
|
||||
# We keep the latest develop.tar.gz on R2 instead of relying on the github artifact uploaded earlier
|
||||
# as the expires after 24h and requires auth to download.
|
||||
|
||||
10
.github/workflows/dockerhub.yaml
vendored
10
.github/workflows/dockerhub.yaml
vendored
@@ -34,19 +34,19 @@ jobs:
|
||||
uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3
|
||||
uses: docker/setup-buildx-action@2b51285047da1547ffb1b2203d8be4c0af6b1f20 # v3
|
||||
with:
|
||||
install: true
|
||||
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3
|
||||
uses: docker/login-action@e92390c5fb421da1463c202d546fed0ec5c39f20 # v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@31cebacef4805868f9ce9a0cb03ee36c32df2ac4 # v5
|
||||
uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v5
|
||||
with:
|
||||
images: |
|
||||
vectorim/element-web
|
||||
@@ -58,7 +58,7 @@ jobs:
|
||||
${{ matrix.flavor }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 # v5
|
||||
uses: docker/build-push-action@2cdde995de11925a030ce8070c3d77a52ffcf1c0 # v5
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
@@ -68,7 +68,7 @@ jobs:
|
||||
|
||||
- name: Update repo description
|
||||
if: matrix.variant == 'vanilla'
|
||||
uses: peter-evans/dockerhub-description@dc67fad7001ef9e8e3c124cb7a64e16d0a63d864 # v3
|
||||
uses: peter-evans/dockerhub-description@e98e4d1628a5f3be2be7c231e50981aee98723ae # v4
|
||||
continue-on-error: true
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
|
||||
4
.github/workflows/docs.yml
vendored
4
.github/workflows/docs.yml
vendored
@@ -99,7 +99,7 @@ jobs:
|
||||
run: mdbook build
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v2
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
path: ./book
|
||||
|
||||
@@ -112,4 +112,4 @@ jobs:
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v3
|
||||
uses: actions/deploy-pages@v4
|
||||
|
||||
17
.github/workflows/downstream-artifacts.yml
vendored
Normal file
17
.github/workflows/downstream-artifacts.yml
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
name: Build downstream artifacts
|
||||
on:
|
||||
merge_group:
|
||||
types: [checks_requested]
|
||||
pull_request: {}
|
||||
push:
|
||||
branches: [develop, master]
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
jobs:
|
||||
build-element-web:
|
||||
name: Build element-web
|
||||
uses: matrix-org/matrix-react-sdk/.github/workflows/element-web.yaml@develop
|
||||
with:
|
||||
element-web-sha: ${{ github.sha }}
|
||||
react-sdk-repository: matrix-org/matrix-react-sdk
|
||||
58
.github/workflows/end-to-end-tests.yaml
vendored
Normal file
58
.github/workflows/end-to-end-tests.yaml
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
# Triggers after the "Downstream artifacts" build has finished, to run the
|
||||
# matrix-react-sdk playwright tests (with access to repo secrets)
|
||||
|
||||
name: matrix-react-sdk End to End Tests
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["Build downstream artifacts"]
|
||||
types:
|
||||
- completed
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event.workflow_run.head_branch || github.run_id }}
|
||||
cancel-in-progress: ${{ github.event.workflow_run.event == 'pull_request' }}
|
||||
|
||||
jobs:
|
||||
playwright:
|
||||
name: Playwright
|
||||
# We only want to run the playwright tests on merge queue to prevent regressions
|
||||
# from creeping in. They take a long time to run and consume multiple concurrent runners.
|
||||
if: github.event.workflow_run.event == 'merge_group'
|
||||
uses: matrix-org/matrix-react-sdk/.github/workflows/end-to-end-tests.yaml@develop
|
||||
permissions:
|
||||
actions: read
|
||||
issues: read
|
||||
statuses: write
|
||||
pull-requests: read
|
||||
deployments: write
|
||||
with:
|
||||
react-sdk-repository: matrix-org/matrix-react-sdk
|
||||
secrets:
|
||||
ELEMENT_BOT_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
# We want to make the Playwright tests a required check for the merge queue.
|
||||
#
|
||||
# Unfortunately, github doesn't distinguish between "checks needed for branch
|
||||
# protection" (ie, the things that must pass before the PR will even be added
|
||||
# to the merge queue) and "checks needed in the merge queue". We just have to add
|
||||
# the check to the branch protection list.
|
||||
#
|
||||
# Ergo, if we know we're not going to run the Playwright tests, we need to add a
|
||||
# passing status check manually.
|
||||
mark_skipped:
|
||||
if: github.event.workflow_run.event != 'merge_group'
|
||||
permissions:
|
||||
statuses: write
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: Sibz/github-status-action@071b5370da85afbb16637d6eed8524a06bc2053e # v1
|
||||
with:
|
||||
authToken: "${{ secrets.GITHUB_TOKEN }}"
|
||||
state: success
|
||||
description: Playwright skipped
|
||||
|
||||
# Keep in step with the `context` that is updated by `Sibz/github-status-action`
|
||||
# in matrix-org/matrix-react-sdk/.github/workflows/end-to-end-tests.yaml.
|
||||
context: "${{ github.workflow }} / end-to-end-tests"
|
||||
|
||||
sha: "${{ github.event.workflow_run.head_sha }}"
|
||||
2
.github/workflows/pull_request.yaml
vendored
2
.github/workflows/pull_request.yaml
vendored
@@ -2,6 +2,8 @@ name: Pull Request
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened, edited, labeled, unlabeled, synchronize]
|
||||
merge_group:
|
||||
types: [checks_requested]
|
||||
jobs:
|
||||
action:
|
||||
uses: matrix-org/matrix-js-sdk/.github/workflows/pull_request.yaml@develop
|
||||
|
||||
18
.github/workflows/release-drafter.yml
vendored
18
.github/workflows/release-drafter.yml
vendored
@@ -2,20 +2,10 @@ name: Release Drafter
|
||||
on:
|
||||
push:
|
||||
branches: [staging]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
previous-version:
|
||||
description: What release to use as a base for release note purposes
|
||||
required: false
|
||||
type: string
|
||||
workflow_dispatch: {}
|
||||
concurrency: ${{ github.workflow }}
|
||||
jobs:
|
||||
draft:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@e64b19c4c46173209ed9f2e5a2f4ca7de89a0e86 # v5
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
disable-autolabeler: true
|
||||
previous-version: ${{ inputs.previous-version }}
|
||||
uses: matrix-org/matrix-js-sdk/.github/workflows/release-drafter-workflow.yml@develop
|
||||
with:
|
||||
include-changes: matrix-react-sdk
|
||||
|
||||
48
.github/workflows/release.yml
vendored
48
.github/workflows/release.yml
vendored
@@ -10,16 +10,6 @@ on:
|
||||
options:
|
||||
- rc
|
||||
- final
|
||||
matrix-react-sdk:
|
||||
description: React SDK version to use (current|X.Y.Z)
|
||||
required: false
|
||||
default: current
|
||||
type: string
|
||||
matrix-js-sdk:
|
||||
description: JS SDK version to use (current|X.Y.Z)
|
||||
required: false
|
||||
default: current
|
||||
type: string
|
||||
concurrency: ${{ github.workflow }}
|
||||
jobs:
|
||||
release:
|
||||
@@ -34,6 +24,38 @@ jobs:
|
||||
gpg-fingerprint: ${{ vars.GPG_FINGERPRINT }}
|
||||
asset-path: dist/*.tar.gz
|
||||
expected-asset-count: 3
|
||||
dependencies: |
|
||||
matrix-react-sdk=${{ inputs.matrix-react-sdk }}
|
||||
matrix-js-sdk=${{ inputs.matrix-js-sdk }}
|
||||
|
||||
notify-downstream:
|
||||
name: Trigger release drafter downstream
|
||||
needs: release
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Notify element-desktop repo that element-web release has completed to re-trigger release-drafter
|
||||
uses: peter-evans/repository-dispatch@ff45666b9427631e3450c54a1bcbee4d9ff4d7c0 # v3
|
||||
with:
|
||||
token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
repository: element-hq/element-desktop
|
||||
event-type: upstream-release-notify
|
||||
|
||||
check:
|
||||
name: Post release checks
|
||||
needs: release
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Wait for dockerhub
|
||||
uses: t3chguy/wait-on-check-action@18541021811b56544d90e0f073401c2b99e249d6 # fork
|
||||
with:
|
||||
ref: master
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
wait-interval: 10
|
||||
check-name: "Docker Buildx (vanilla)"
|
||||
allowed-conclusions: success
|
||||
|
||||
- name: Wait for debian package
|
||||
uses: t3chguy/wait-on-check-action@18541021811b56544d90e0f073401c2b99e249d6 # fork
|
||||
with:
|
||||
ref: master
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
wait-interval: 10
|
||||
check-name: Build package
|
||||
allowed-conclusions: success
|
||||
|
||||
55
.github/workflows/release_prepare.yml
vendored
55
.github/workflows/release_prepare.yml
vendored
@@ -25,6 +25,9 @@ on:
|
||||
jobs:
|
||||
prepare:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
# The order is specified bottom-up to avoid any races for allchange
|
||||
REPOS: matrix-js-sdk matrix-react-sdk element-web element-desktop
|
||||
steps:
|
||||
- name: Checkout Element Desktop
|
||||
uses: actions/checkout@v4
|
||||
@@ -67,15 +70,55 @@ jobs:
|
||||
fetch-tags: true
|
||||
token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
- name: Resolve repos
|
||||
run: |
|
||||
echo "REPOS=$(ls . | tr '\n' ' ')" >> $GITHUB_ENV
|
||||
|
||||
- name: Merge develop
|
||||
run: |
|
||||
git config --global user.email "releases@riot.im"
|
||||
git config --global user.name "RiotRobot"
|
||||
for REPO in $REPOS; do git -C "$REPO" merge origin/develop; done
|
||||
for REPO in $REPOS; do [ -d "$REPO" ] && git -C "$REPO" merge origin/develop; done
|
||||
|
||||
- name: Push staging
|
||||
run: for REPO in $REPOS; do git -C "$REPO" push origin staging; done
|
||||
run: for REPO in $REPOS; do [ -d "$REPO" ] && git -C "$REPO" push origin staging; done
|
||||
|
||||
- name: Wait for matrix-js-sdk draft
|
||||
if: inputs.matrix-js-sdk
|
||||
uses: t3chguy/wait-on-check-action@18541021811b56544d90e0f073401c2b99e249d6 # fork
|
||||
with:
|
||||
ref: staging
|
||||
repo: matrix-org/matrix-js-sdk
|
||||
repo-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
wait-interval: 10
|
||||
check-name: draft
|
||||
allowed-conclusions: success
|
||||
|
||||
- name: Wait for matrix-react-sdk draft
|
||||
if: inputs.matrix-react-sdk
|
||||
uses: t3chguy/wait-on-check-action@18541021811b56544d90e0f073401c2b99e249d6 # fork
|
||||
with:
|
||||
ref: staging
|
||||
repo: matrix-org/matrix-react-sdk
|
||||
repo-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
wait-interval: 10
|
||||
check-name: draft
|
||||
allowed-conclusions: success
|
||||
|
||||
- name: Wait for element-web draft
|
||||
if: inputs.element-web
|
||||
uses: t3chguy/wait-on-check-action@18541021811b56544d90e0f073401c2b99e249d6 # fork
|
||||
with:
|
||||
ref: staging
|
||||
repo: element-hq/element-web
|
||||
repo-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
wait-interval: 10
|
||||
check-name: draft
|
||||
allowed-conclusions: success
|
||||
|
||||
- name: Wait for element-desktop draft
|
||||
if: inputs.element-desktop
|
||||
uses: t3chguy/wait-on-check-action@18541021811b56544d90e0f073401c2b99e249d6 # fork
|
||||
with:
|
||||
ref: staging
|
||||
repo: element-hq/element-desktop
|
||||
repo-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
wait-interval: 10
|
||||
check-name: draft
|
||||
allowed-conclusions: success
|
||||
|
||||
1
.github/workflows/sonarqube.yml
vendored
1
.github/workflows/sonarqube.yml
vendored
@@ -13,3 +13,4 @@ jobs:
|
||||
uses: matrix-org/matrix-js-sdk/.github/workflows/sonarcloud.yml@develop
|
||||
secrets:
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
ELEMENT_BOT_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
4
.github/workflows/static_analysis.yaml
vendored
4
.github/workflows/static_analysis.yaml
vendored
@@ -3,6 +3,8 @@ on:
|
||||
pull_request: {}
|
||||
push:
|
||||
branches: [develop, master]
|
||||
merge_group:
|
||||
types: [checks_requested]
|
||||
repository_dispatch:
|
||||
types: [element-web-notify]
|
||||
env:
|
||||
@@ -29,6 +31,8 @@ jobs:
|
||||
i18n_lint:
|
||||
name: "i18n Check"
|
||||
uses: matrix-org/matrix-web-i18n/.github/workflows/i18n_check.yml@main
|
||||
with:
|
||||
hardcoded-words: "Element"
|
||||
|
||||
js_lint:
|
||||
name: "ESLint"
|
||||
|
||||
20
.github/workflows/tests.yaml
vendored
20
.github/workflows/tests.yaml
vendored
@@ -3,6 +3,8 @@ on:
|
||||
pull_request: {}
|
||||
push:
|
||||
branches: [develop, master]
|
||||
merge_group:
|
||||
types: [checks_requested]
|
||||
repository_dispatch:
|
||||
types: [element-web-notify]
|
||||
env:
|
||||
@@ -33,9 +35,25 @@ jobs:
|
||||
run: "yarn coverage --ci --max-workers ${{ steps.cpu-cores.outputs.count }}"
|
||||
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: coverage
|
||||
path: |
|
||||
coverage
|
||||
!coverage/lcov-report
|
||||
|
||||
skip_sonar:
|
||||
name: Skip SonarCloud in merge queue
|
||||
if: github.event_name == 'merge_group'
|
||||
runs-on: ubuntu-latest
|
||||
needs: jest
|
||||
steps:
|
||||
- name: Skip SonarCloud
|
||||
uses: Sibz/github-status-action@071b5370da85afbb16637d6eed8524a06bc2053e # v1
|
||||
with:
|
||||
authToken: ${{ secrets.GITHUB_TOKEN }}
|
||||
state: success
|
||||
description: SonarCloud skipped
|
||||
context: SonarCloud Code Analysis
|
||||
sha: ${{ github.sha }}
|
||||
target_url: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
||||
|
||||
7
.github/workflows/triage-incoming.yml
vendored
7
.github/workflows/triage-incoming.yml
vendored
@@ -8,8 +8,7 @@ jobs:
|
||||
automate-project-columns:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: alex-page/github-project-automation-plus@7ffb872c64bd809d23563a130a0a97d01dfa8f43
|
||||
- uses: actions/add-to-project@main
|
||||
with:
|
||||
project: Issue triage
|
||||
column: Incoming
|
||||
repo-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
project-url: https://github.com/orgs/element-hq/projects/120
|
||||
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
5
.github/workflows/triage-labelled.yml
vendored
5
.github/workflows/triage-labelled.yml
vendored
@@ -24,8 +24,7 @@ jobs:
|
||||
contains(github.event.issue.labels.*.name, 'A-Video-Rooms') ||
|
||||
contains(github.event.issue.labels.*.name, 'A-Message-Starring') ||
|
||||
contains(github.event.issue.labels.*.name, 'A-Rich-Text-Editor') ||
|
||||
contains(github.event.issue.labels.*.name, 'A-Element-Call') ||
|
||||
contains(github.event.issue.labels.*.name, 'A-Element-R')
|
||||
contains(github.event.issue.labels.*.name, 'A-Element-Call')
|
||||
steps:
|
||||
- uses: actions/github-script@v7
|
||||
with:
|
||||
@@ -149,7 +148,7 @@ jobs:
|
||||
contains(github.event.issue.labels.*.name, 'A-Element-R')
|
||||
steps:
|
||||
- id: add_to_project
|
||||
uses: actions/add-to-project@v0.5.0
|
||||
uses: actions/add-to-project@v0.6.1
|
||||
with:
|
||||
project-url: ${{ env.PROJECT_URL }}
|
||||
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
|
||||
2
.github/workflows/triage-unlabelled.yml
vendored
2
.github/workflows/triage-unlabelled.yml
vendored
@@ -35,7 +35,7 @@ jobs:
|
||||
fi
|
||||
fi
|
||||
- name: Move issue
|
||||
uses: alex-page/github-project-automation-plus@7ffb872c64bd809d23563a130a0a97d01dfa8f43
|
||||
uses: alex-page/github-project-automation-plus@303f24a24c67ce7adf565a07e96720faf126fe36
|
||||
if: ${{ env.ALREADY_IN_BOARD == 'true' && env.SKIP_ACTION != 'true' }}
|
||||
with:
|
||||
project: Issue triage
|
||||
|
||||
2
.github/workflows/update-jitsi.yml
vendored
2
.github/workflows/update-jitsi.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
||||
run: "yarn update:jitsi"
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38 # v5
|
||||
uses: peter-evans/create-pull-request@a4f52f8033a6168103c2538976c07b467e8163bc # v6
|
||||
with:
|
||||
token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
||||
branch: actions/jitsi-update
|
||||
|
||||
@@ -28,6 +28,7 @@ src/vector/modernizr.js
|
||||
|
||||
# This file is owned, parsed, and generated by allchange, which doesn't comply with prettier
|
||||
/CHANGELOG.md
|
||||
/docs/changelogs
|
||||
|
||||
# Downloaded and already minified
|
||||
res/jitsi_external_api.min.js
|
||||
|
||||
9161
CHANGELOG.md
9161
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
@@ -124,7 +124,7 @@ must include:
|
||||
|
||||
1. Comprehensive unit tests written in Jest. These are located in `/test`.
|
||||
2. "happy path" end-to-end tests.
|
||||
These are located in `/cypress/e2e` in `matrix-react-sdk`, and
|
||||
These are located in `/playwright/e2e` in `matrix-react-sdk`, and
|
||||
are run using `element-web`. Ideally, you would also include tests for edge
|
||||
and error cases.
|
||||
|
||||
|
||||
1867
docs/changelogs/CHANGELOG-2022.md
Normal file
1867
docs/changelogs/CHANGELOG-2022.md
Normal file
File diff suppressed because it is too large
Load Diff
1017
docs/changelogs/CHANGELOG-2023.md
Normal file
1017
docs/changelogs/CHANGELOG-2023.md
Normal file
File diff suppressed because it is too large
Load Diff
6035
docs/changelogs/CHANGELOG-pre-2022.md
Normal file
6035
docs/changelogs/CHANGELOG-pre-2022.md
Normal file
File diff suppressed because it is too large
Load Diff
@@ -137,7 +137,7 @@ complete re-branding/private labeling, a more personalised experience can be ach
|
||||
This setting is ignored if your homeserver provides `/.well-known/matrix/client` in its well-known location, and the JSON file
|
||||
at that location has a key `m.tile_server` (or the unstable version `org.matrix.msc3488.tile_server`). In this case, the
|
||||
configuration found in the well-known location is used instead.
|
||||
10. `welcome_user_id`: An optional user ID to start a DM with after creating an account. Defaults to nothing (no DM created).
|
||||
10. `welcome_user_id`: **DEPRECATED** An optional user ID to start a DM with after creating an account. Defaults to nothing (no DM created).
|
||||
11. `custom_translations_url`: An optional URL to allow overriding of translatable strings. The JSON file must be in a format of
|
||||
`{"affected|translation|key": {"languageCode": "new string"}}`. See https://github.com/matrix-org/matrix-react-sdk/pull/7886 for details.
|
||||
12. `branding`: Options for configuring various assets used within the app. Described in more detail down below.
|
||||
@@ -344,6 +344,12 @@ The VoIP and Jitsi options are:
|
||||
this number is exceeded, the user will not be able to join a given call.
|
||||
- `brand`: Optional name for the app. Defaults to `Element Call`. This is
|
||||
used throughout the application in various strings/locations.
|
||||
- `guest_spa_url`: Optional URL for an Element Call single-page app (SPA),
|
||||
for guest links. If this is set, Element Web will expose a "join" link
|
||||
for public video rooms, which can then be shared to non-matrix users.
|
||||
The target Element Call SPA is typically set up to use a homeserver that
|
||||
allows users to register without email ("passwordless guest users") and to
|
||||
federate.
|
||||
|
||||
## Bug reporting
|
||||
|
||||
|
||||
17
docs/labs.md
17
docs/labs.md
@@ -116,6 +116,23 @@ Configures Element to use a new cryptography implementation based on the [matrix
|
||||
|
||||
This setting is (currently) _sticky_ to a user's session: it only takes effect when the user logs in to a new session. Likewise, even after disabling the setting in `config.json`, the Rust implementation will remain in use until users log out.
|
||||
|
||||
This configuration value is now set to `true` by default. This means that without any additional configuration
|
||||
every new login will use the new cryptography implementation.
|
||||
|
||||
For administrators looking to transition existing users to the new stack, the `RustCrypto.staged_rollout_percent` configuration is available.
|
||||
This configuration allows for a phased migration of users, represented as an integer percentage (0 to 100). By default, this value is set to `0`,
|
||||
which means no existing users will be migrated to the new stack. If you wish to migrate all users, you can adjust this value to `100`.
|
||||
|
||||
This configuration should be placed under the `setting_defaults` section as shown:
|
||||
|
||||
```
|
||||
"setting_defaults": {
|
||||
"RustCrypto.staged_rollout_percent": 20
|
||||
},
|
||||
```
|
||||
|
||||
By adjusting the `RustCrypto.staged_rollout_percent` value, you can control the migration process according to your deployment strategy.
|
||||
|
||||
## New room header & details (`feature_new_room_decoration_ui`) [In Development]
|
||||
|
||||
Refactors visually the room header and room sidebar
|
||||
|
||||
@@ -186,33 +186,35 @@ this means that any commit which goes to `staging` will eventually make its way
|
||||
Shortly after concluding the preparation stage (or pushing any changes to `staging` in general);
|
||||
a draft release will be automatically made on the 4 project repositories with suggested changelogs and version numbers.
|
||||
|
||||
Review the draft releases created, check the version number makes sense and that the changelog contains everything you'd expect to.
|
||||
|
||||
_Note: we should add a step here to write summaries atop the changelogs manually, or via AI_
|
||||
|
||||
Publishing the SDKs to npm also commits a dependency upgrade to the relevant downstream projects,
|
||||
if you skip a layer of this release (e.g. for a hotfix) then the dependency will remain on `#develop` which will be
|
||||
switched back to the version of the dependency from the master branch to not leak develop code into a release.
|
||||
|
||||
### Matrix JS SDK
|
||||
|
||||
The first stop is the matrix-js-sdk; kick off a release using [the automation](https://github.com/matrix-org/matrix-js-sdk/actions/workflows/release.yml) - making sure to select the right type of release. For anything other than an RC: choose final. You should not need to ever switch off either of the Publishing options.
|
||||
|
||||
- [ ] matrix-js-sdk has been released & published to npm
|
||||
- [ ] Check the draft release which has been generated by [the automation](https://github.com/matrix-org/matrix-js-sdk/actions/workflows/release-drafter.yml)
|
||||
- [ ] Make any changes to the release notes in the draft release as are necessary - **Do not click publish, only save draft**
|
||||
- [ ] Kick off a release using [the automation](https://github.com/matrix-org/matrix-js-sdk/actions/workflows/release.yml) - making sure to select the right type of release. For anything other than an RC: choose final. You should not need to ever switch off either of the Publishing options.
|
||||
|
||||
### Matrix React SDK
|
||||
|
||||
The next stop is matrix-react-sdk; kick off a release using [the automation](https://github.com/matrix-org/matrix-react-sdk/actions/workflows/release.yml) - making sure to select the right type of release. For anything other than an RC: choose final. In the JS SDK version field enter the version of the JS SDK you wish to use, for typical releases including all the layers this would be the version released in the stage above.
|
||||
|
||||
- [ ] matrix-react-sdk has been released & published to npm
|
||||
- [ ] Check the draft release which has been generated by [the automation](https://github.com/matrix-org/matrix-react-sdk/actions/workflows/release-drafter.yml)
|
||||
- [ ] Make any changes to the release notes in the draft release as are necessary - **Do not click publish, only save draft**
|
||||
- [ ] Kick off a release using [the automation](https://github.com/matrix-org/matrix-react-sdk/actions/workflows/release.yml) - making sure to select the right type of release. For anything other than an RC: choose final. You should not need to ever switch off either of the Publishing options.
|
||||
|
||||
### Element Web
|
||||
|
||||
The next stop is element-web; kick off a release using [the automation](https://github.com/element-hq/element-web/actions/workflows/release.yml) - making sure to select the right type of release. For anything other than an RC: choose final. In the SDK version fields enter the versions you wish to use, for typical releases including all the layers this would be the versions released in the stages above.
|
||||
|
||||
- [ ] Element Web has been released
|
||||
- [ ] Check the draft release which has been generated by [the automation](https://github.com/element-hq/element-web/actions/workflows/release-drafter.yml)
|
||||
- [ ] Make any changes to the release notes in the draft release as are necessary - **Do not click publish, only save draft**
|
||||
- [ ] Kick off a release using [the automation](https://github.com/element-hq/element-web/actions/workflows/release.yml) - making sure to select the right type of release. For anything other than an RC: choose final. You should not need to ever switch off either of the Publishing options.
|
||||
|
||||
### Element Desktop
|
||||
|
||||
The next stop is element-desktop; kick off a release using [the automation](https://github.com/element-hq/element-desktop/actions/workflows/release.yml) - making sure to select the right type of release. For anything other than an RC: choose final. In the JS SDK version field enter the version of the JS SDK you wish to use, for typical releases including all the layers this would be the version released in the stage above.
|
||||
|
||||
- [ ] Element Desktop has been released
|
||||
- [ ] Check the draft release which has been generated by [the automation](https://github.com/element-hq/element-desktop/actions/workflows/release-drafter.yml)
|
||||
- [ ] Make any changes to the release notes in the draft release as are necessary - **Do not click publish, only save draft**
|
||||
- [ ] Kick off a release using [the automation](https://github.com/element-hq/element-desktop/actions/workflows/release.yml) - making sure to select the right type of release. For anything other than an RC: choose final. You should not need to ever switch off either of the Publishing options.
|
||||
|
||||
# Deploying
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ To avoid name collisions, the internal name of a theme is
|
||||
`custom-${theme.name}`. So if you want to set the custom theme below as the
|
||||
default theme, you would use `default_theme: "custom-Electric Blue"`.
|
||||
|
||||
eg. in config.json:
|
||||
e.g. in config.json:
|
||||
|
||||
```
|
||||
"setting_defaults": {
|
||||
@@ -63,8 +63,10 @@ eg. in config.json:
|
||||
"timeline-text-color": "#2e2f32",
|
||||
"timeline-text-secondary-color": "#61708b",
|
||||
"timeline-highlights-color": "#f3f8fd",
|
||||
"username-colors": ["#ff0000", ...]
|
||||
"avatar-background-colors": ["#cc0000", ...]
|
||||
},
|
||||
"compound": {
|
||||
"--cpd-color-icon-accent-tertiary": "var(--cpd-color-blue-800)",
|
||||
"--cpd-color-text-action-accent": "var(--cpd-color-blue-900)"
|
||||
}
|
||||
}, {
|
||||
"name": "Deep Purple",
|
||||
@@ -89,8 +91,6 @@ eg. in config.json:
|
||||
}
|
||||
```
|
||||
|
||||
`username-colors` is expected to contain 8 colors. `avatar-background-colors` is expected to contain 3 colors. Both values are optional and have fallbacks from the built-in theme.
|
||||
|
||||
These are exposed as `--username-colors_0`, ... and `--avatar-background-colors_0`, ... respectively in CSS.
|
||||
`compound` may contain overrides for any [semantic design token](https://compound.element.io/?path=/docs/tokens-semantic-colors--docs) belonging to our design system. The above example shows how you might change the accent color to blue by setting the relevant semantic tokens to refer to blue [base tokens](https://compound.element.io/?path=/docs/tokens-color-palettes--docs).
|
||||
|
||||
All properties in `fonts` are optional, and will default to the standard Riot fonts.
|
||||
|
||||
@@ -49,8 +49,11 @@
|
||||
"privacy_policy_url": "https://element.io/cookie-policy",
|
||||
"features": {
|
||||
"feature_video_rooms": true,
|
||||
"feature_rust_crypto": true,
|
||||
"feature_new_room_decoration_ui": true
|
||||
"feature_new_room_decoration_ui": true,
|
||||
"feature_element_call_video_rooms": true
|
||||
},
|
||||
"setting_defaults": {
|
||||
"RustCrypto.staged_rollout_percent": 100
|
||||
},
|
||||
"element_call": {
|
||||
"url": "https://call.element.dev"
|
||||
|
||||
65
package.json
65
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "element-web",
|
||||
"version": "1.11.53",
|
||||
"version": "1.11.64",
|
||||
"description": "A feature-rich client for Matrix.org",
|
||||
"author": "New Vector Ltd.",
|
||||
"repository": {
|
||||
@@ -72,21 +72,21 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@matrix-org/olm": "3.2.15",
|
||||
"@matrix-org/react-sdk-module-api": "^2.2.1",
|
||||
"@matrix-org/react-sdk-module-api": "^2.3.0",
|
||||
"gfm.css": "^1.1.2",
|
||||
"jsrsasign": "^10.5.25",
|
||||
"jsrsasign": "^11.0.0",
|
||||
"katex": "^0.16.0",
|
||||
"lodash": "^4.17.21",
|
||||
"matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop",
|
||||
"matrix-react-sdk": "github:matrix-org/matrix-react-sdk#develop",
|
||||
"matrix-js-sdk": "32.0.0",
|
||||
"matrix-react-sdk": "3.97.0",
|
||||
"matrix-widget-api": "^1.3.1",
|
||||
"react": "17.0.2",
|
||||
"react-dom": "17.0.2",
|
||||
"ua-parser-js": "^1.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@action-validator/cli": "^0.5.3",
|
||||
"@action-validator/core": "^0.5.3",
|
||||
"@action-validator/cli": "^0.6.0",
|
||||
"@action-validator/core": "^0.6.0",
|
||||
"@babel/core": "^7.12.10",
|
||||
"@babel/eslint-parser": "^7.12.10",
|
||||
"@babel/eslint-plugin": "^7.12.10",
|
||||
@@ -107,7 +107,7 @@
|
||||
"@casualbot/jest-sonar-reporter": "2.2.7",
|
||||
"@principalstudio/html-webpack-inject-preload": "^1.2.7",
|
||||
"@sentry/webpack-plugin": "^2.7.1",
|
||||
"@svgr/webpack": "^5.5.0",
|
||||
"@svgr/webpack": "^8.0.0",
|
||||
"@testing-library/react": "^12.1.5",
|
||||
"@types/commonmark": "^0.27.9",
|
||||
"@types/content-type": "^1.1.8",
|
||||
@@ -136,20 +136,20 @@
|
||||
"@types/tar-js": "^0.3.5",
|
||||
"@types/ua-parser-js": "^0.7.36",
|
||||
"@types/uuid": "^9.0.7",
|
||||
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
||||
"@typescript-eslint/parser": "^6.0.0",
|
||||
"allchange": "^1.0.6",
|
||||
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
||||
"@typescript-eslint/parser": "^7.0.0",
|
||||
"babel-jest": "^29.0.0",
|
||||
"babel-loader": "^9.0.0",
|
||||
"babel-plugin-jsx-remove-data-test-id": "^3.0.0",
|
||||
"buffer": "^6.0.3",
|
||||
"chokidar": "^3.5.1",
|
||||
"concurrently": "^8.0.0",
|
||||
"copy-webpack-plugin": "^11.0.0",
|
||||
"copy-webpack-plugin": "^12.0.0",
|
||||
"cronstrue": "^2.41.0",
|
||||
"css-loader": "^5.2.7",
|
||||
"css-minimizer-webpack-plugin": "^5.0.1",
|
||||
"css-loader": "^6.0.0",
|
||||
"css-minimizer-webpack-plugin": "^6.0.0",
|
||||
"dotenv": "^16.0.2",
|
||||
"eslint": "8.55.0",
|
||||
"eslint": "8.57.0",
|
||||
"eslint-config-google": "^0.14.0",
|
||||
"eslint-config-prettier": "^9.0.0",
|
||||
"eslint-plugin-deprecate": "0.8.4",
|
||||
@@ -157,7 +157,7 @@
|
||||
"eslint-plugin-matrix-org": "^1.0.0",
|
||||
"eslint-plugin-react": "^7.28.0",
|
||||
"eslint-plugin-react-hooks": "^4.3.0",
|
||||
"eslint-plugin-unicorn": "^49.0.0",
|
||||
"eslint-plugin-unicorn": "^51.0.0",
|
||||
"fake-indexeddb": "^5.0.0",
|
||||
"fetch-mock": "9.11.0",
|
||||
"fetch-mock-jest": "^1.5.1",
|
||||
@@ -169,43 +169,42 @@
|
||||
"jest-mock": "^29.0.0",
|
||||
"jest-raw-loader": "^1.0.1",
|
||||
"matrix-mock-request": "^2.5.0",
|
||||
"matrix-web-i18n": "^3.1.3",
|
||||
"mini-css-extract-plugin": "^2.7.6",
|
||||
"matrix-web-i18n": "^3.2.1",
|
||||
"mini-css-extract-plugin": "2.8.0",
|
||||
"minimist": "^1.2.6",
|
||||
"mkdirp": "^3.0.0",
|
||||
"modernizr": "^3.12.0",
|
||||
"node-fetch": "^2.6.7",
|
||||
"postcss": "^8.4.31",
|
||||
"postcss-easings": "^2.0.0",
|
||||
"postcss-hexrgba": "2.0.1",
|
||||
"postcss-import": "^12.0.1",
|
||||
"postcss-loader": "^4.0.0",
|
||||
"postcss-mixins": "^6.2.3",
|
||||
"postcss-nested": "^4.2.3",
|
||||
"postcss-preset-env": "^6.7.0",
|
||||
"postcss": "8.4.33",
|
||||
"postcss-easings": "^4.0.0",
|
||||
"postcss-hexrgba": "2.1.0",
|
||||
"postcss-import": "16.0.0",
|
||||
"postcss-loader": "8.1.0",
|
||||
"postcss-mixins": "^10.0.0",
|
||||
"postcss-nested": "^6.0.0",
|
||||
"postcss-preset-env": "^9.3.0",
|
||||
"postcss-scss": "^4.0.4",
|
||||
"postcss-simple-vars": "^5.0.2",
|
||||
"prettier": "3.1.1",
|
||||
"postcss-simple-vars": "^7.0.1",
|
||||
"prettier": "3.2.5",
|
||||
"process": "^0.11.10",
|
||||
"proxy-agent": "^6.3.0",
|
||||
"raw-loader": "^4.0.2",
|
||||
"rimraf": "^5.0.0",
|
||||
"semver": "^7.5.2",
|
||||
"setimmediate": "^1.0.5",
|
||||
"string-replace-loader": "3",
|
||||
"style-loader": "3",
|
||||
"stylelint": "^16.0.0",
|
||||
"stylelint-config-standard": "^35.0.0",
|
||||
"stylelint": "^16.1.0",
|
||||
"stylelint-config-standard": "^36.0.0",
|
||||
"stylelint-scss": "^6.0.0",
|
||||
"terser-webpack-plugin": "^5.3.9",
|
||||
"ts-node": "^10.9.1",
|
||||
"ts-prune": "^0.10.3",
|
||||
"typescript": "5.3.3",
|
||||
"typescript": "5.4.2",
|
||||
"util": "^0.12.5",
|
||||
"webpack": "^5.89.0",
|
||||
"webpack-bundle-analyzer": "^4.8.0",
|
||||
"webpack-cli": "^5.0.0",
|
||||
"webpack-dev-server": "^4.15.1",
|
||||
"webpack-dev-server": "^5.0.0",
|
||||
"yaml": "^2.3.3"
|
||||
},
|
||||
"@casualbot/jest-sonar-reporter": {
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Script to perform a release of element-web.
|
||||
|
||||
set -e
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
./node_modules/matrix-js-sdk/release.sh "$@"
|
||||
@@ -14,6 +14,7 @@
|
||||
"error": {
|
||||
"app_launch_unexpected_error": "שגיאה לא צפויה במהלך טעינת האפליקציה. ראו קונסול לפרטים נוספים.",
|
||||
"cannot_load_config": "לא ניתן לטעון את קובץ ההגדרות: יש לרענן את הדף כדי לנסות שנית.",
|
||||
"invalid_configuration_mixed_server": "Invalid configuration: a default_hs_url can't be specified along with default_server_name or default_server_config",
|
||||
"invalid_configuration_no_server": "תצורה שגויה: לא צוין שרת ברירת מחדל.",
|
||||
"invalid_json": "האלמנט מכיל הגדרת JSON שגויה, אנא תקנו את הבעיה ואתחלו את הדף.",
|
||||
"invalid_json_detail": "ההודעה מהמנתח היא: %(message)s",
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
"title": "Niewspierana przeglądarka"
|
||||
},
|
||||
"powered_by_matrix": "Zasilane przez Matrix",
|
||||
"powered_by_matrix_with_logo": "Zdecentralizowany, szyfrowany czat i współpraca oparte na $matrixLogo",
|
||||
"powered_by_matrix_with_logo": "Zdecentralizowany czat szyfrowany i współpraca oparta na $matrixLogo",
|
||||
"unknown_device": "Nieznane urządzenie",
|
||||
"use_brand_on_mobile": "Użyj %(brand)s w telefonie",
|
||||
"web_default_device_name": "%(appName)s: %(browserName)s na %(osName)s",
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
"summary": "您的瀏覽器無法執行 %(brand)s",
|
||||
"title": "不支援的瀏覽器"
|
||||
},
|
||||
"powered_by_matrix": "由Matrix支持",
|
||||
"powered_by_matrix_with_logo": "由 $matrixLogo 驅動的去中心化、加密的聊天與協作工具",
|
||||
"unknown_device": "未知裝置",
|
||||
"use_brand_on_mobile": "在行動裝置上使用 %(brand)s",
|
||||
|
||||
@@ -199,7 +199,7 @@ async function verifyServerConfig(): Promise<IConfigOptions> {
|
||||
}
|
||||
}
|
||||
|
||||
validatedConfig = AutoDiscoveryUtils.buildValidatedConfigFromDiscovery(serverName, discoveryResult, true);
|
||||
validatedConfig = await AutoDiscoveryUtils.buildValidatedConfigFromDiscovery(serverName, discoveryResult, true);
|
||||
} catch (e) {
|
||||
const { hsUrl, isUrl, userId } = await Lifecycle.getStoredSessionVars();
|
||||
if (hsUrl && userId) {
|
||||
|
||||
@@ -108,5 +108,11 @@
|
||||
<audio id="remoteAudio"></audio>
|
||||
<!-- let CSS themes pass constants to the app -->
|
||||
<div id="mx_theme_accentColor"></div><div id="mx_theme_secondaryAccentColor"></div><div id="mx_theme_tertiaryAccentColor"></div>
|
||||
|
||||
<!-- We eagerly create these containers to ensure their CSS stacking context order is sensible -->
|
||||
<div id="mx_PersistedElement_container"></div>
|
||||
<div id="mx_Dialog_StaticContainer"></div>
|
||||
<div id="mx_Dialog_Container"></div>
|
||||
<div id="mx_ContextualMenu_Container"></div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -292,9 +292,7 @@ function switchVisibleContainers(): void {
|
||||
|
||||
function toggleConferenceVisibility(inConference: boolean): void {
|
||||
document.getElementById("jitsiContainer")!.style.visibility = inConference ? "unset" : "hidden";
|
||||
// Video rooms have a separate UI for joining, so they should never show our join button
|
||||
document.getElementById("joinButtonContainer")!.style.visibility =
|
||||
inConference || isVideoChannel ? "hidden" : "unset";
|
||||
document.getElementById("joinButtonContainer")!.style.visibility = inConference ? "hidden" : "unset";
|
||||
}
|
||||
|
||||
function skipToJitsiSplashScreen(): void {
|
||||
@@ -450,9 +448,8 @@ async function joinConference(audioInput?: string | null, videoInput?: string |
|
||||
|
||||
// Video channel widgets need some more tailored config options
|
||||
if (isVideoChannel) {
|
||||
// Ensure that we skip Jitsi Meet's native prejoin screen, for
|
||||
// deployments that have it enabled
|
||||
options.configOverwrite!.prejoinConfig = { enabled: false };
|
||||
// We don't skip jitsi's prejoin screen for video rooms.
|
||||
options.configOverwrite!.prejoinConfig = { enabled: true };
|
||||
// Use a simplified set of toolbar buttons
|
||||
options.configOverwrite!.toolbarButtons = ["microphone", "camera", "tileview", "hangup"];
|
||||
// Note: We can hide the screenshare button in video rooms but not in
|
||||
|
||||
@@ -43,6 +43,7 @@ import { BreadcrumbsStore } from "matrix-react-sdk/src/stores/BreadcrumbsStore";
|
||||
import { UPDATE_EVENT } from "matrix-react-sdk/src/stores/AsyncStore";
|
||||
import { avatarUrlForRoom, getInitialLetter } from "matrix-react-sdk/src/Avatar";
|
||||
import DesktopCapturerSourcePicker from "matrix-react-sdk/src/components/views/elements/DesktopCapturerSourcePicker";
|
||||
import { OidcRegistrationClientMetadata } from "matrix-js-sdk/src/matrix";
|
||||
|
||||
import VectorBasePlatform from "./VectorBasePlatform";
|
||||
import { SeshatIndexManager } from "./SeshatIndexManager";
|
||||
@@ -56,6 +57,8 @@ interface SquirrelUpdate {
|
||||
updateURL: string;
|
||||
}
|
||||
|
||||
const SSO_ID_KEY = "element-desktop-ssoid";
|
||||
|
||||
const isMac = navigator.platform.toUpperCase().includes("MAC");
|
||||
|
||||
function platformFriendlyName(): string {
|
||||
@@ -374,10 +377,10 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||
return this.ipc.call("getAvailableSpellCheckLanguages");
|
||||
}
|
||||
|
||||
public getSSOCallbackUrl(fragmentAfterLogin: string): URL {
|
||||
public getSSOCallbackUrl(fragmentAfterLogin?: string): URL {
|
||||
const url = super.getSSOCallbackUrl(fragmentAfterLogin);
|
||||
url.protocol = "element";
|
||||
url.searchParams.set("element-desktop-ssoid", this.ssoID);
|
||||
url.searchParams.set(SSO_ID_KEY, this.ssoID);
|
||||
return url;
|
||||
}
|
||||
|
||||
@@ -435,4 +438,26 @@ export default class ElectronPlatform extends VectorBasePlatform {
|
||||
await this.ipc.call("clearStorage");
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
public get baseUrl(): string {
|
||||
// This configuration is element-desktop specific so the types here do not know about it
|
||||
return (SdkConfig.get() as unknown as Record<string, string>)["web_base_url"] ?? "https://app.element.io";
|
||||
}
|
||||
|
||||
public async getOidcClientMetadata(): Promise<OidcRegistrationClientMetadata> {
|
||||
const baseMetadata = await super.getOidcClientMetadata();
|
||||
const redirectUri = this.getSSOCallbackUrl();
|
||||
redirectUri.searchParams.delete(SSO_ID_KEY); // it will be shuttled via the state param instead
|
||||
return {
|
||||
...baseMetadata,
|
||||
applicationType: "native",
|
||||
redirectUris: [redirectUri.href],
|
||||
// XXX: This should be overridable in config
|
||||
clientUri: "https://element.io",
|
||||
};
|
||||
}
|
||||
|
||||
public getOidcClientState(): string {
|
||||
return `:${SSO_ID_KEY}:${this.ssoID}`;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -129,6 +129,9 @@ describe("loading:", function () {
|
||||
embedded_pages: {
|
||||
home_url: "data:text/html;charset=utf-8;base64,PGh0bWw+PC9odG1sPg==",
|
||||
},
|
||||
features: {
|
||||
feature_rust_crypto: false,
|
||||
},
|
||||
...(opts.config ?? {}),
|
||||
} as IConfigOptions;
|
||||
|
||||
@@ -220,6 +223,9 @@ describe("loading:", function () {
|
||||
// Pass the liveliness checks
|
||||
httpBackend.when("GET", "/versions").respond(200, { versions: SERVER_SUPPORTED_MATRIX_VERSIONS });
|
||||
httpBackend.when("GET", "/_matrix/identity/v2").respond(200, {});
|
||||
httpBackend
|
||||
.when("GET", "/_matrix/client/unstable/org.matrix.msc2965/auth_issuer")
|
||||
.respond(404, { errcode: "M_UNRECOGNIZED", error: "Unrecognized request" });
|
||||
|
||||
return sleep(1)
|
||||
.then(async () => {
|
||||
@@ -304,6 +310,7 @@ describe("loading:", function () {
|
||||
localStorage.setItem("mx_is_url", "http://localhost");
|
||||
localStorage.setItem("mx_access_token", "access_token");
|
||||
localStorage.setItem("mx_user_id", "@me:localhost");
|
||||
localStorage.setItem("mx_device_id", "QWERTYUIOP");
|
||||
localStorage.setItem("mx_last_room_id", "!last_room:id");
|
||||
|
||||
// Create a crypto store as well to satisfy storage consistency checks
|
||||
@@ -403,6 +410,7 @@ describe("loading:", function () {
|
||||
})
|
||||
.respond(200, {
|
||||
user_id: "@guest:localhost",
|
||||
device_id: "QWERTYUIOP",
|
||||
access_token: "secret_token",
|
||||
});
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"./node_modules/matrix-react-sdk/src/@types/opus-recorder.d.ts",
|
||||
"./node_modules/matrix-react-sdk/src/@types/png-chunks-extract.d.ts",
|
||||
"./node_modules/matrix-react-sdk/src/@types/sanitize-html.d.ts",
|
||||
"./node_modules/matrix-react-sdk/src/@types/matrix-js-sdk.d.ts",
|
||||
"./src/**/*.ts",
|
||||
"./src/**/*.tsx",
|
||||
"./test/**/*.ts",
|
||||
|
||||
@@ -7,5 +7,6 @@
|
||||
# The values of this are provided to `yarn add` for inclusion.
|
||||
modules:
|
||||
- "@nordeck/element-web-guest-module@1.0.0"
|
||||
- "@nordeck/element-web-opendesk-module@0.3.0"
|
||||
- "@nordeck/element-web-opendesk-module@0.4.0"
|
||||
- "@nordeck/element-web-widget-lifecycle-module@1.0.1"
|
||||
- "@nordeck/element-web-widget-toggles-module@0.1.0"
|
||||
|
||||
@@ -8,15 +8,8 @@ const MiniCssExtractPlugin = require("mini-css-extract-plugin");
|
||||
const TerserPlugin = require("terser-webpack-plugin");
|
||||
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
|
||||
const HtmlWebpackInjectPreload = require("@principalstudio/html-webpack-inject-preload");
|
||||
const { sentryWebpackPlugin } = require("@sentry/webpack-plugin");
|
||||
const crypto = require("crypto");
|
||||
const CopyWebpackPlugin = require("copy-webpack-plugin");
|
||||
|
||||
// XXX: mangle Crypto::createHash to replace md4 with sha256, output.hashFunction is insufficient as multiple bits
|
||||
// of webpack hardcode md4. The proper fix it to upgrade to webpack 5.
|
||||
const createHash = crypto.createHash;
|
||||
crypto.createHash = (algorithm, options) => createHash(algorithm === "md4" ? "sha256" : algorithm, options);
|
||||
|
||||
// Environment variables
|
||||
// RIOT_OG_IMAGE_URL: specifies the URL to the image which should be used for the opengraph logo.
|
||||
// CSP_EXTRA_SOURCE: specifies a URL which should be appended to each CSP directive which uses 'self',
|
||||
@@ -319,6 +312,7 @@ module.exports = (env, argv) => {
|
||||
loader: "babel-loader",
|
||||
options: {
|
||||
cacheDirectory: true,
|
||||
plugins: enableMinification ? ["babel-plugin-jsx-remove-data-test-id"] : [],
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -330,15 +324,16 @@ module.exports = (env, argv) => {
|
||||
options: {
|
||||
importLoaders: 1,
|
||||
sourceMap: true,
|
||||
esModule: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
loader: "postcss-loader",
|
||||
ident: "postcss",
|
||||
options: {
|
||||
"sourceMap": true,
|
||||
"postcssOptions": {
|
||||
"plugins": () => [
|
||||
sourceMap: true,
|
||||
postcssOptions: () => ({
|
||||
"plugins": [
|
||||
// Note that we use significantly fewer plugins on the plain
|
||||
// CSS parser. If we start to parse plain CSS, we end with all
|
||||
// kinds of nasty problems (like stylesheets not loading).
|
||||
@@ -365,7 +360,8 @@ module.exports = (env, argv) => {
|
||||
require("postcss-preset-env")({ stage: 3, browsers: "last 2 versions" }),
|
||||
],
|
||||
"parser": "postcss-scss",
|
||||
},
|
||||
"local-plugins": true,
|
||||
}),
|
||||
},
|
||||
},
|
||||
],
|
||||
@@ -414,15 +410,16 @@ module.exports = (env, argv) => {
|
||||
options: {
|
||||
importLoaders: 1,
|
||||
sourceMap: true,
|
||||
esModule: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
loader: "postcss-loader",
|
||||
ident: "postcss",
|
||||
options: {
|
||||
"sourceMap": true,
|
||||
"postcssOptions": {
|
||||
"plugins": () => [
|
||||
sourceMap: true,
|
||||
postcssOptions: () => ({
|
||||
"plugins": [
|
||||
// Note that we use slightly different plugins for PostCSS.
|
||||
require("postcss-import")(),
|
||||
require("postcss-mixins")(),
|
||||
@@ -436,7 +433,8 @@ module.exports = (env, argv) => {
|
||||
require("postcss-preset-env")({ stage: 3, browsers: "last 2 versions" }),
|
||||
],
|
||||
"parser": "postcss-scss",
|
||||
},
|
||||
"local-plugins": true,
|
||||
}),
|
||||
},
|
||||
},
|
||||
],
|
||||
@@ -545,10 +543,20 @@ module.exports = (env, argv) => {
|
||||
// props set on the svg will override defaults
|
||||
expandProps: "end",
|
||||
svgoConfig: {
|
||||
plugins: {
|
||||
plugins: [
|
||||
{
|
||||
name: "preset-default",
|
||||
params: {
|
||||
overrides: {
|
||||
removeViewBox: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
// generates a viewbox if missing
|
||||
removeDimensions: true,
|
||||
},
|
||||
{ name: "removeDimensions" },
|
||||
// https://github.com/facebook/docusaurus/issues/8297
|
||||
{ name: "prefixIds" },
|
||||
],
|
||||
},
|
||||
/**
|
||||
* Forwards the React ref to the root SVG element
|
||||
@@ -708,9 +716,11 @@ module.exports = (env, argv) => {
|
||||
files: [{ match: /.*Inter.*\.woff2$/ }],
|
||||
}),
|
||||
|
||||
// upload to sentry if sentry env is present
|
||||
// Upload to sentry if sentry env is present
|
||||
// This plugin throws an error on import on some platforms like ppc64le & s390x even if the plugin isn't called,
|
||||
// so we require it conditionally.
|
||||
process.env.SENTRY_DSN &&
|
||||
sentryWebpackPlugin({
|
||||
require("@sentry/webpack-plugin").sentryWebpackPlugin({
|
||||
release: process.env.VERSION,
|
||||
sourcemaps: {
|
||||
paths: "./webapp/bundles/**",
|
||||
|
||||
Reference in New Issue
Block a user