Add file upload API endpoints for groups

What does this MR do and why?

Adds REST API and GraphQL support for uploading files to groups, enabling programmatic image uploads for use in epics and group wikis.

Previously, file uploads to groups could only be done through the web UI. This was a gap in the API, as project uploads have been available via API for a long time.

REST API endpoints added:

  • POST /groups/:id/uploads/authorize - Workhorse pre-authorization
  • POST /groups/:id/uploads - File upload

GraphQL mutation added:

  • uploadCreate - Now supports both projectPath and groupPath arguments

MR acceptance checklist

Please evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

How to set up and validate locally

# Upload a file to a group via REST API
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --form "file=@/path/to/image.png" \
  "http://gdk.test:3000/api/v4/groups/<group_id>/uploads"

# The response includes markdown you can embed in an epic:
# {"id":1,"alt":"image","url":"/uploads/.../image.png","markdown":"![image](/uploads/.../image.png)"}

Merge request reports

Loading