Skip to content

Commit 4f42c88

Browse files
authored
Merge branch 'main' into cms/workspace-extensions
2 parents 7a00940 + 0a9fbe5 commit 4f42c88

File tree

6,054 files changed

+213849
-1586
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

6,054 files changed

+213849
-1586
lines changed

.github/lychee.toml

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,20 @@ timeout = 10
3131
retry_wait_time = 1
3232

3333
# Accept more status codes (follow redirects automatically)
34-
accept = ["200..=204", "301..=308", "429"]
34+
# Note: 522 and 502 are server errors, not broken links
35+
accept = [
36+
"200..=204",
37+
"301..=308",
38+
"429",
39+
"502", # Bad Gateway
40+
"522" # Connection timed out (Cloudflare)
41+
]
3542

36-
# Avoid false fragment errors
37-
include_fragments = false
43+
# Don't check fragments/anchors - they cause false positives
44+
include_fragments = false
3845

39-
# Only test links with the given schemes (e.g. https).
40-
# Omit to check links with any other scheme.
41-
# At the moment, we support http, https, file, and mailto.
42-
scheme = ["https"]
46+
# Only test links with the given schemes (e.g. https and http)
47+
scheme = ["https", "http"]
4348

4449
# When links are available using HTTPS, treat HTTP links as errors.
4550
require_https = false
@@ -54,9 +59,21 @@ exclude = [
5459
'^mailto:',
5560
'^https?://localhost',
5661
'^https?://127\\.0\\.0\\.1',
57-
'^https://www\.linkedin\.com',
58-
'^https?://issues\.umbraco\.org/',
59-
'^https?://web\\.archive\\.org/web/'
62+
'^https://www\\.linkedin\\.com',
63+
64+
# Exclude all issues.umbraco.org - unreliable and often returns 522
65+
'http://issues\\.umbraco\\.org',
66+
'https://issues\\.umbraco\\.org',
67+
68+
# Exclude umbraco.com blog posts that return errors
69+
'https://umbraco\\.com/blog/',
70+
71+
# Exclude web archive links
72+
'web\\.archive\\.org/web/',
73+
74+
# Exclude internal links with version anchors
75+
'version-specific#umbraco-',
76+
'README\\.md#umbraco-[0-9]',
6077
]
6178

6279
# Exclude these filesystem paths from getting checked.
@@ -77,4 +94,4 @@ include_mail = true
7794
############################# Content Checks ######################
7895
# Mark pages as broken if the body contains "page not found" or "404"
7996
[content]
80-
deny = ["(?i)page not found", "(?i)404"]
97+
deny = ["(?i)page not found", "(?i)404"]

.github/workflows/check-broken-pr-links.yml

Lines changed: 75 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: Check Links in Pull Requests
22

33
on:
4-
pull_request:
4+
pull_request: # changed from pull_request
55
branches:
66
- main
77
paths:
@@ -59,21 +59,36 @@ jobs:
5959
/^Errors in / {
6060
file=$3
6161
gsub("^/home/runner/work/UmbracoDocs/UmbracoDocs/", "", file)
62-
print "\n**Broken links found in: " file "**" >> "lychee/comment.md"
62+
current_file = file
63+
has_errors = 0
6364
next
6465
}
6566

66-
/\[ERROR\]/ {
67+
/Error: ERROR\]/ {
68+
# Skip anchor errors for #umbraco-[number] patterns
69+
if ($0 ~ /#umbraco-[0-9]+/) next
70+
71+
# Print file header if this is the first error for this file
72+
if (current_file != "" && has_errors == 0) {
73+
print "\n**Broken links found in: " current_file "**" >> "lychee/comment.md"
74+
has_errors = 1
75+
}
76+
6777
msg = $0
68-
sub(/^- \[ \] /, "", msg)
69-
sub(/^\[ERROR\] /, "", msg)
78+
sub(/^Error: ERROR\] /, "", msg)
7079
gsub("^file:///home/runner/work/UmbracoDocs/UmbracoDocs/", "", msg)
7180
gsub(/\|/, "\\|", msg) # escape Markdown pipe
7281
print "\n⚓ Anchor not found → " msg "\n" >> "lychee/comment.md"
7382
next
7483
}
7584

7685
/\[404\]/ {
86+
# Print file header if this is the first error for this file
87+
if (current_file != "" && has_errors == 0) {
88+
print "\n**Broken links found in: " current_file "**" >> "lychee/comment.md"
89+
has_errors = 1
90+
}
91+
7792
msg = $0
7893
sub(/^- \[ \] /, "", msg)
7994
sub(/^\[404\] /, "", msg)
@@ -83,6 +98,12 @@ jobs:
8398
}
8499

85100
/\[301\]|\[302\]/ {
101+
# Print file header if this is the first error for this file
102+
if (current_file != "" && has_errors == 0) {
103+
print "\n**Broken links found in: " current_file "**" >> "lychee/comment.md"
104+
has_errors = 1
105+
}
106+
86107
msg = $0
87108
sub(/^- \[ \] /, "", msg)
88109
sub(/^\[(301|302)\] /, "", msg)
@@ -91,7 +112,49 @@ jobs:
91112
next
92113
}
93114

115+
/\[522\]/ {
116+
# Skip 522 errors from issues.umbraco.org
117+
if ($0 ~ /issues\.umbraco\.org/) next
118+
119+
# Print file header if this is the first error for this file
120+
if (current_file != "" && has_errors == 0) {
121+
print "\n**Broken links found in: " current_file "**" >> "lychee/comment.md"
122+
has_errors = 1
123+
}
124+
125+
msg = $0
126+
sub(/^- \[ \] /, "", msg)
127+
sub(/^\[522\] /, "", msg)
128+
gsub(/\|/, "\\|", msg)
129+
print "\n⚠ Server error (522) → " msg "\n" >> "lychee/comment.md"
130+
next
131+
}
132+
133+
/\[502\]/ {
134+
# Skip 502 errors from umbraco.com
135+
if ($0 ~ /umbraco\.com/) next
136+
137+
# Print file header if this is the first error for this file
138+
if (current_file != "" && has_errors == 0) {
139+
print "\n**Broken links found in: " current_file "**" >> "lychee/comment.md"
140+
has_errors = 1
141+
}
142+
143+
msg = $0
144+
sub(/^- \[ \] /, "", msg)
145+
sub(/^\[502\] /, "", msg)
146+
gsub(/\|/, "\\|", msg)
147+
print "\n⚠ Server error (502) → " msg "\n" >> "lychee/comment.md"
148+
next
149+
}
150+
94151
/Timeout/ && !/Timeouts/ {
152+
# Print file header if this is the first error for this file
153+
if (current_file != "" && has_errors == 0) {
154+
print "\n**Broken links found in: " current_file "**" >> "lychee/comment.md"
155+
has_errors = 1
156+
}
157+
95158
msg = $0
96159
sub(/^- \[ \] /, "", msg)
97160
gsub(/\|/, "\\|", msg) # escape pipe just in case
@@ -101,6 +164,12 @@ jobs:
101164

102165
# catch-all for any other errors
103166
/^\- \[ \] \[[0-9]+\]/ {
167+
# Print file header if this is the first error for this file
168+
if (current_file != "" && has_errors == 0) {
169+
print "\n**Broken links found in: " current_file "**" >> "lychee/comment.md"
170+
has_errors = 1
171+
}
172+
104173
msg = $0
105174
sub(/^- \[ \] /, "", msg)
106175
gsub(/\|/, "|", msg)
@@ -131,4 +200,4 @@ jobs:
131200
if: steps.format-report.outputs.has_content == 'true'
132201
run: |
133202
echo "❌ Broken links detected. Please review the PR comment for details."
134-
exit 1
203+
exit 1

10/umbraco-cms/SUMMARY.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* [Umbraco 8 Documentation](https://our.umbraco.com/documentation/)
77
* [Umbraco 7 Documentation](https://our.umbraco.com/documentation/)
88
* [Release Notes](https://our.umbraco.com/download/releases/)
9-
* [Contribute](https://docs.umbraco.com/welcome/contribute/getting-started)
9+
* [Contribute](https://docs.umbraco.com/contributing)
1010
* [Sustainability Best Practices](https://docs.umbraco.com/sustainability-best-practices/)
1111

1212
## Fundamentals
@@ -198,7 +198,7 @@
198198
* [Installing and Uninstalling Packages](extending/packages/installing-and-uninstalling-packages.md)
199199
* [Maintaining packages](extending/packages/maintaining-packages.md)
200200
* [Create accessible Umbraco packages](extending/packages/accessibility.md)
201-
* [Example Package Repository](./extending/packages/example-package-repository.md)
201+
* [Example Package Repository](extending/packages/example-package-repository.md)
202202
* [UI Library](extending/ui-library.md)
203203

204204
## Reference

10/umbraco-cms/fundamentals/setup/install/install-umbraco-with-templates.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Video tutorial
1212

1313
1. Install the latest [.NET SDK](https://dotnet.microsoft.com/download).
1414
2. Run `dotnet new install Umbraco.Templates` to install the project templates.\
15-
_The solution is packaged up into the NuGet package_ [_Umbraco.Templates_](https://www.nuget.org/packages/Umbraco.Templates) _and can be installed into the dotnet CLI_.
15+
&#xNAN;_The solution is packaged up into the NuGet package_ [_Umbraco.Templates_](https://www.nuget.org/packages/Umbraco.Templates) _and can be installed into the dotnet CLI_.
1616

1717
> Once that is complete, you can see that Umbraco was added to the list of available projects types by running `dotnet new --list`:
1818

10/umbraco-cms/fundamentals/setup/install/unattended-install.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ It is recommended that you make use of the values shown below for the `Cache`, `
4747
```json
4848
{
4949
"ConnectionStrings": {
50-
"umbracoDbDSN": "Data Source=|DataDirectory|/Umbraco.sqlite.db;Cache=Private;Foreign Keys=True;Pooling=True",
50+
"umbracoDbDSN": "Data Source=|DataDirectory|/Umbraco.sqlite.db;Cache=Shared;Foreign Keys=True;Pooling=True",
5151
"umbracoDbDSN_ProviderName": "Microsoft.Data.SQLite"
5252
}
5353
}

10/umbraco-cms/fundamentals/setup/server-setup/running-umbraco-in-docker.md

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,32 @@ Exactly how you choose to compose your Dockerfile will depend on your project sp
44

55
## What is Docker
66

7-
Docker is a platform for developing, shipping, and running applications in containers. Multiple services exist for hosting these containers. For more information, refer to the [official Docker Documentation](https://docs.docker.com/)
7+
Docker is a platform for developing, shipping, and running applications in containers. Multiple services exist for hosting these containers. For more information, refer to the [official Docker Documentation](https://docs.docker.com/)
88

99
## The Docker file system
1010

11-
By default, files created inside a container are written to an ephemeral, writable container layer.
11+
By default, files created inside a container are written to an ephemeral, writable container layer.\
1212
This means that the files don't persist when the container is removed, and it's challenging to get files out of the container. Additionally, this writable layer is not suitable for performance-critical data processing.
1313

1414
This has implications when running Umbraco in Docker.
1515

1616
For more information, refer to the [Docker documentation on storage](https://docs.docker.com/engine/storage/).
1717

18-
### General file system consideration
18+
### General file system consideration
1919

2020
In general, when working with files and Docker you work in a "push" fashion with read-only layers. When you build, you take all your files and "push" them into this read-only layer.
2121

2222
This means that you should avoid making files on the fly, and instead rely on building your image.
2323

24-
In an Umbraco context, this means you should not create or edit template, script or stylesheet files via the backoffice. These should be deployed as part of your web application and not managed via Umbraco.
24+
In an Umbraco context, this means you should not create or edit template, script or stylesheet files via the backoffice. These should be deployed as part of your web application and not managed via Umbraco.
2525

2626
Similarly, you shouldn't use InMemory modelsbuilder, since that also relies on creating files on the disk. While this is not a hard requirement, it doesn't provide any value unless you are live editing your site.
2727

2828
Instead, configure models builder to use "source code" mode in development, and "none" in production, as [described when using runtime modes](https://docs.umbraco.com/umbraco-cms/fundamentals/setup/server-setup/runtime-modes).
2929

30-
3130
### Logs
3231

33-
Umbraco writes logs to the `/umbraco/Logs/` directory. Due to the performance implications of writing to a writable layer,
32+
Umbraco writes logs to the `/umbraco/Logs/` directory. Due to the performance implications of writing to a writable layer,\
3433
and the limited size, it is recommended to mount a volume to this directory.
3534

3635
### Data
@@ -39,18 +38,18 @@ The `/umbraco/Data/` directory is used to store temporary files, such as file up
3938

4039
### Media
4140

42-
It's recommended to not store media in the writable layer. This is for similar performance reasons as logs,
43-
but also for practical hosting reasons. You likely want to persist media files between containers.
41+
It's recommended to not store media in the writable layer. This is for similar performance reasons as logs,\
42+
but also for practical hosting reasons. You likely want to persist media files between containers.
4443

4544
One solution is to use bind mounts. The ideal setup, though, is to store the media and ImageSharp cache externally. For more information, refer to the [Azure Blob Storage documentation](https://docs.umbraco.com/umbraco-cms/extending/filesystemproviders/azure-blob-storage).
4645

4746
### Required files
4847

49-
Your solution may require some specific files to run, such as license files. You will need to pass these files into the container at build time, or mount them externally.
48+
Your solution may require some specific files to run, such as license files. You will need to pass these files into the container at build time, or mount them externally.
5049

5150
## HTTPS
5251

53-
When running websites in Docker, it's common to do so behind a reverse proxy or load balancer.
52+
When running websites in Docker, it's common to do so behind a reverse proxy or load balancer.\
5453
In these scenarios you will likely handle SSL termination at the reverse proxy. This means that Umbraco will not be aware of the SSL termination, and will complain about not using HTTPS.
5554

5655
Umbraco checks for HTTPS in two locations:
@@ -85,7 +84,7 @@ The `UseHttpsValidator` must be removed through code For more information see th
8584

8685
The code to remove the validator can look something like:
8786

88-
```C#
87+
```c#
8988
using Umbraco.Cms.Core.Composing;
9089
using Umbraco.Cms.Infrastructure.Runtime.RuntimeModeValidators;
9190

34.7 KB
Loading

10/umbraco-cms/fundamentals/setup/upgrading/version-specific/migrate-content-to-umbraco-8.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ A content migration tool has been implemented in Umbraco 8.1.0, to help you with
1313
In this guide you can read more about the tool, its limitations, and how to use it in practice.
1414

1515
{% hint style="info" %}
16-
#### Migrating Umbraco Cloud sites
16+
**Migrating Umbraco Cloud sites**
1717

1818
Follow the [steps outlined in the Umbraco Cloud documentation](../../../../../umbraco-cloud/upgrades/migrate-from-umbraco-7-to-8.md) to upgrade your Umbraco 7 site on Cloud.
1919
{% endhint %}
@@ -71,9 +71,9 @@ There are 3 options that a developer can choose to do to work around this automa
7171

7272
This option requires you to create a custom C# migrator for each of your custom property editors that store custom configuration data. It will also require that you implement these migrators before you run the Umbraco 8 content migration.
7373

74-
To do this, you will create an implementation of `IPreValueMigrator` or inherit from the base class [`DefaultPreValueMigrator`](https://github.com/umbraco/Umbraco-CMS/blob/v8/dev/src/Umbraco.Core/Migrations/Upgrade/V\_8\_0\_0/DataTypes/DefaultPreValueMigrator.cs).
74+
To do this, you will create an implementation of `IPreValueMigrator` or inherit from the base class [`DefaultPreValueMigrator`](https://github.com/umbraco/Umbraco-CMS/blob/v8/dev/src/Umbraco.Core/Migrations/Upgrade/V_8_0_0/DataTypes/DefaultPreValueMigrator.cs).
7575

76-
There are plenty of examples of this in the [Umbraco-CMS codebase](https://github.com/umbraco/Umbraco-CMS/tree/v8/dev/src/Umbraco.Core/Migrations/Upgrade/V\_8\_0\_0/DataTypes).
76+
There are plenty of examples of this in the [Umbraco-CMS codebase](https://github.com/umbraco/Umbraco-CMS/tree/v8/dev/src/Umbraco.Core/Migrations/Upgrade/V_8_0_0/DataTypes).
7777

7878
You will then need to register them in a composer:
7979

@@ -131,7 +131,7 @@ The site in this example is an Umbraco 7.13.1 site, and we will use Nuget to upd
131131

132132
Following the [general upgrade instructions](../) we will now upgrade via Nuget until we get to this point:
133133

134-
![Upgrading to v7.14](<../images/upgrading-7\_14 (1) (1) (1) (1).png>)
134+
![Upgrading to v7.14](<../images/upgrading-7_14 (1) (1) (1) (1).png>)
135135

136136
{% hint style="warning" %}
137137
When upgrading an old website, check if you are using obsolete properties in your Data Types. These should be changed to their updated counterparts. The migration **will fail if you are still using obsolete properties.**
@@ -156,7 +156,7 @@ Once it is upgraded and you have verified everything is working, move on to the
156156

157157
The first thing to do is to spin up a fresh new Umbraco 8.1+ site. Make sure everything works and that no content is there.
158158

159-
![Fresh 8.1 site](<../images/fresh-8\_1-site (1) (1) (1).png>)
159+
![Fresh 8.1 site](<../images/fresh-8_1-site (1) (1) (1).png>)
160160

161161
{% hint style="warning" %}
162162
If you have customized the `UsersMembershipProvider` on your Umbraco 7 site you need to copy that over to the 8.1 `web.config` as well. Additionally you need to update the `type` attribute to be `type="Umbraco.Web.Security.Providers.UsersMembershipProvider, Umbraco.Web"`.
@@ -174,11 +174,11 @@ The version will be set to 8.1.0, and you need to change it to the version you a
174174

175175
When you start the site it will ask you to login and then show you this screen:
176176

177-
![Upgrade database to 8.1](<../../../../../../umbraco-cloud/product-upgrades/images/upgrade-to-8\_1 (1) (1).png>)
177+
![Upgrade database to 8.1](<../images/upgrade-to-8_1 (1) (1) (1).png>)
178178

179179
From here, the automatic migration will take over, and after a little bit you can log in and see your content:
180180

181-
![Content is on 8.1](<../images/content-on-8\_1 (1) (1) (1).png>)
181+
![Content is on 8.1](<../images/content-on-8_1 (1) (1) (1).png>)
182182

183183
{% hint style="info" %}
184184
Please be aware that this is a **content migration**. If you go to the frontend after following these steps, it will throw errors.

10/umbraco-cms/reference/configuration/connectionstringssettings.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ An connection strings config can look like this:
1212
```json
1313
{
1414
"ConnectionStrings": {
15-
"umbracoDbDSN": "Data Source=|DataDirectory|/Umbraco.sqlite.db;Cache=Private;Foreign Keys=True;Pooling=True",
15+
"umbracoDbDSN": "Data Source=|DataDirectory|/Umbraco.sqlite.db;Cache=Shared;Foreign Keys=True;Pooling=True",
1616
"umbracoDbDSN_ProviderName": "Microsoft.Data.SQLite"
1717
}
1818
}
1919
```
2020

2121
{% hint style="info" %}
22-
We recommend using private cache for SQLite. You can read more on why shared cache is discouraged in [the official SQLite documentation](https://sqlite.org/sharedcache.html).
22+
We recommend using shared cache for SQLite when using Umbraco, as it provides better performance and consistency when multiple connections may access the database simultaneously.
2323
{% endhint %}
2424

2525
The connection string used here is an SQLite connection string, that will connect to a data in the file `Umbraco.sqlite.db` located in `/umbraco/Data` .

10/umbraco-cms/reference/configuration/maximumuploadsizesettings.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ Umbraco Cloud uses IIS for hosting. This means you need to add the setting in a
3535

3636
## Using Kestrel
3737

38-
Runtime settings allow you to configure the `MaxRequestLength` and `MaxQueryStringLength` for kestrel. If you want to upload files larger than 28.6MB, then you have to configure these settings. If nothing is configured requests and query strings can only be the default size and smaller.
38+
Runtime settings allow you to configure the `MaxRequestLength` and `MaxQueryStringLength` for kestrel. If you want to upload files larger than 50MB, then you have to configure these settings. If nothing is configured requests and query strings can only be the default size and smaller.
3939

4040
An example of a configuration could look something like this:
4141

0 commit comments

Comments
 (0)