-
-
Notifications
You must be signed in to change notification settings - Fork 3.7k
Reduce project slug max length from 63 to 55 characters for new projects to fix PR build errors #12516
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
base: main
Are you sure you want to change the base?
Conversation
Co-authored-by: ericholscher <25510+ericholscher@users.noreply.github.com>
readthedocs/projects/forms.py
Outdated
if len(potential_slug) > 55: | ||
raise forms.ValidationError( | ||
_( | ||
"Project name is too long, the generated slug must be 55 characters or less. " | ||
"The current slug would be: %(slug)s" | ||
), | ||
params={"slug": potential_slug}, | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@copilot I'm not sure we want to error here, but just truncate. What do you think?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://gh.io/copilot-coding-agent-docs I'm not sure we want to error here, but just truncate. What do you think?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@copilot I'm not sure we want to error here, but just truncate. What do you think?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Changed to truncate instead of error. Slugs longer than 55 characters are now automatically truncated in both the form validation and model save method. This applies only to new projects. (commit: git rev-parse --short HEAD
)
Co-authored-by: ericholscher <25510+ericholscher@users.noreply.github.com>
@copilot Only apply this to new projects. |
1 similar comment
@copilot Only apply this to new projects. |
…names Co-authored-by: ericholscher <25510+ericholscher@users.noreply.github.com>
@copilot existing projects are effected by the migraiton though. We will break the doc serving URL if we change slugs of existing projects. |
Co-authored-by: ericholscher <25510+ericholscher@users.noreply.github.com>
Removed slug truncation from the migration. The migration now only changes the field max_length without modifying existing project slugs, preserving their documentation URLs. The 55-character limit only applies to new projects created after this change. (commit: |
Problem
Long project slugs (63 characters) were causing cryptic "UnicodeError: label too long" errors in PR builds. This issue occurs because:
{project.slug}--{pr.number}
--1
creates a 66-character hostname, exceeding the DNS limitExample of the issue:
Solution
This PR reduces the maximum project slug length from 63 to 55 characters for new projects to accommodate PR build suffixes:
--
separatorChanges
Database Models
Project.slug
andProject.name
max_length to 55AuditLog.log_project_slug
max_length to 55Migrations
Project
andHistoricalProject
modelsSlug Truncation (for new projects only)
ProjectForm.clean_name()
to automatically truncate slugs to 55 characters for new projectsProject.save()
to truncate slugs to 55 characters when generating new slugsif not self.instance.pk:
)Tests
test_slug_too_long()
: Verifies that 56-character slugs are automatically truncatedtest_slug_max_length()
: Verifies that 55-character slugs are acceptedImpact
For Existing Projects
For New Projects
For PR Builds
Addresses
Fixes issue with long project slugs causing "UnicodeError: label too long" in PR builds as discussed in the original issue and comments from @agjohnson and @humitos.
Fixes #10948
Original prompt
This section details on the original issue you should resolve
<issue_title>Long projects slugs can cause errors (UnicodeError: label too long)</issue_title>
<issue_description>## Details
If the project slug is too long, then building the documentation on RtD may introduce
cryptic errors that are hard to debug, and difficult to fix.
For example, when trying to build documentation under the project with slug
physics-581-physics-inspired-computational-techniques
I encountered the followingwarning:
and the output from my Jupyter notebooks failed to render.
The cryptic nature of this warning is due to python issue
32958 wherein the true nature of the issue was
revealed to be a portion of a generated URL exceeding 63 characters.
Since it is very difficult/impossible to view the actual error logs on RtD, and
difficult to replicate these errors on another system, this is a subtle issue for users
to try to diagnose and fix.
On top of this, changing the slug directly is not permitted, making recovered difficult
even when diagnosed.
In my case, the fix was to delete and re-create the project, manually selecting a short
project name to that a reasonable slug was generated. This is not bad if the project is
new and the URL is not out in the wild. Alternatives are discussed in issue 8143.
Expected Result
I would recommend two changes to help users with this potential issue:
A warning in the documentation that long slugs may lead to problems. Steps to
resolving such issues by choosing a shorter project name during project creation
should be outlined, and a note that the project name can be restored after the slug
is generated.
A warning be displayed to the user at project creation if the generated slug
exceeds a certain threshold. (Since I could not access the log files, I cannot see
exactly what is cause the issue, and hence cannot recommend how much padding should
be given with this threshold yet.)
Ideally, some way of editing the slug could be provided, but since slug creation
needs to be automated to avoid conflicts, another nice solution would be for the
proposed slug to be updated in real time as the user changes the project name.
Actual Result
The project name is chosen from the source repository, and if long, leads to a long slug
that may cause cryptic errors for the user in the future that are very difficult to
resolve.
</issue_description>
<agent_instructions>Fix this by making the stored slug shorter. </agent_instructions>
Comments on the Issue (you are @copilot in this section)
@humitos Moving this under the new templates work, since it's more related to the UX when importing a project than anything else. @agjohnson I just came across this in the backlog, is there anything we want to do on the frontend side here? Do we want to handle this at the form validation level in the application instead? @humitos I think we want to do this at the frontendI'm not sure we want to have a hard validation form, but just a warning on the UI.
I don't think this is a priority at this point, tho.</comment_new>
<comment_new>@agjohnson
Gotcha. I'd probably still start this on the backend side then, with field validation and a field error. The front end UX is supplemental to form validation here, and would probably mostly add UX as users type the project name. The front end code would have to reimplement backend code for slug creation, so I'd probably want to lean on the backend for this purpose.
There is a bit nicer UX in an auto-updating slug field, generated from the project name. But so far I'm trying to keep code in the backend as much as possible.
I'm going to remove this from the dashboard roadmap, though there is probably a feature we'll want to add here at some point.</comment_new>
<comment_new>@agjohnson
Some of the dynamic form additions are in readthedocs/ext-theme#25. I think this particular bug should be solved at the backend though, emitting form validation errors where needed. Eventually the form will have some dynamic display of the project slug, but this would be a new feature for a later release of the dashboard. I'l...
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.