API to download the latest release assets
Summary
There is no API to download the latest version of release assets
Details
Relates to, but not the same as:
- Release asset links on private projects cannot ... (#343223 - closed)
- #28978 (comment 899985341)
- Retrieve uploaded files using API (#25838 - closed)
- #16821 (comment 900665762)
I have a CI pipeline that uploads a file to the generic package repository:
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file myfile.txt "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${PKG}/${VERSION}/myfile.txt"
And references it in a release as link asset
- name: 'myfile'
url: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${PKG}/${VERSION}/myfile.txt"
filepath: '/myfile.txt'
link_type: 'other'
This works fine and I can visit https://gitlab.com/${CI_PROJECT_PATH_SLUG}/-/releases/permalink/latest/downloads/myfile.txt in a browser to download the latest version of the file, as I'm logged in.
If I attempt to download from a CI job using curl and the JOB-TOKEN:
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" https://gitlab.com/${CI_PROJECT_PATH_SLUG}/-/releases/permalink/latest/downloads/myfile.txt
I get a redirect:
<html><body>You are being <a href="https://gitlab.com/users/sign_in">redirected</a>.</body></html>
I can work around this by using querying the releases, which are sorted, and accessing the asset link from this:
latest_pkg_url=$(curl --location --header "JOB-TOKEN: ${CI_JOB_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases" | jq -r '.[0].assets.links[] | select(.name=="My File").url')
curl --location --header "JOB-TOKEN: ${CI_JOB_TOKEN}" "${latest_pkg_url}" --output myfile.txt
There is ../releases/permalink/latest/downloads/..
in the public gitlab.com web interface, which requires login, but I cannot find an equivalent path in the CI_API_V4_URL API that can be used with curl and a TOKEN from a pipeline.
I guess the problem is that https://gitlab.com/${CI_PROJECT_PATH_SLUG}...
is public web interface and thus wants to redirect to login, and not the API interface. But there appears to be no API interface (${CI_API_V4_URL}/projects/${CI_PROJECT_ID}...
) to download the latest version of release asset link.