Unclear usage of `%{gitlab_server}` and `%{gitlab_pages_domain}` badge placeholder
## Problem I recently attempted to set up badges for my project and [discovered](https://gitlab.com/gitlab-org/gitlab/-/issues/22278) the `%{gitlab_server}` and `%{gitlab_pages_domain}` placeholders. However, their usage isn't clear from the documentation, as it appears I can't use them as hostnames in the image or link URLs. A common use case for a link URL is pointing to a file in the project's repository or a page on GitLab Pages. When attempting to use `%{gitlab_server}` or `%{gitlab_pages_domain}` with the [REST API](https://docs.gitlab.com/ee/api/project_badges.html#add-a-badge-to-a-project), I encounter the following error: ```bash $ curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \ --data-urlencode "link_url=https://%{gitlab_server}/%{project_path}/commits/main" \ --data-urlencode "image_url=https://shields.io/my/badge1" \ --data-urlencode "name=mybadge" \ "https://gitlab.com/api/v4/projects/:id/badges" {"message":{"link_url":["is blocked: URI is invalid"]}} ``` It appears that `%{gitlab_server}` and `%{gitlab_pages_domain}` cannot be used as hostnames in the base URLs of `link_url` or `image_url`, but only as parameters. This limitation is currently undocumented (admittedly, all examples have the hostname hardcoded and don't use these placeholders either) and feels counterintuitive. A similar comment has been made [here](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/155804#note_2080118753). ## Proposal If this behavior is intentional, I suggest: - Documenting where the `%{gitlab_server}` and `%{gitlab_pages_domain}` placeholders can be used, with special emphasis on this limitation. Alternatively: - Allow using `%{gitlab_server}` and `%{gitlab_pages_domain}` as part of the base URL for links and images - Consider adding `%{project_web_url}`, `%{gitlab_server_url}`, and `%{gitlab_pages_url}` shortcuts to make badge usage more robust. These would enable the following use cases: - Use a shortcut to point to a file in the project, independent of the instance URL (e.g., when migrating projects between GitLab instances): `%{project_web_url}/-/blob/%{default_branch}/LICENSE` - Use a shortcut to point to another project in the same group: `%{gitlab_server_url}/%{project_namespace}/gitlab-profile/-/blob/main/README.md` - Use a shortcut to point to a page on GitLab Pages: `%{gitlab_pages_url}/index.html` - Modify the URL validation to allow using placeholders in the base URL An additional error appears to have been fixed recently, which I still encounter on our self-hosted 17.2.2 instance but cannot reproduce on [gitlab.com](http://gitlab.com). When editing an existing badge using the Web UI and using `%{gitlab_server}` and `%{gitlab_pages_domain}` in the scenario described above, no error was shown about an invalid URL. Instead, the dialog simply closed without changing the URL after clicking the "Save changes" button.
issue