Add conan delete package_revision endpoint for v2
-
Please check this box if this contribution uses AI-generated content (including content generated by GitLab Duo features) as outlined in the GitLab DCO & CLA. As a benefit of being a GitLab Community Contributor, you receive complimentary access to GitLab Duo.
Add conan delete package_revision endpoint for v2
What does this MR do and why?
This MR will add the delete package_revision endpoint for Conan v2.
Changelog: added
The endpoint follows this format:
DELETE /projects/:id/packages/conan/v2/conans/:package_name/:package_version/:package_username/:package_channel/revisions/:recipe_revision/packages/:conan_package_reference/revisions/:package_revision
Notes:
- Protected by the
conan_package_revisions_support
feature flag
References
How to set up and validate locally
To test we need 1 project where your token has access. In requests below, replace <project_id> with your corresponding project id.
-
Switch the
conan_package_revisions_support
feature flag on.For GDK, open rails console (docs):
gdk rails console
Enable the feature flag:
# Enable Feature.enable(:conan_package_revisions_support) # Verify Feature.enabled?(:conan_package_revisions_support)
-
Make sure you have revisions enabled in your terminal
Set the
CONAN_REVISIONS_ENABLED
envitonment variable to1
to enable revisions for Conan 1.export CONAN_REVISIONS_ENABLED=1
-
Have Conan 1 cli installed and configured with your project registry
conan remote add gitlab https://gitlab.example.com/api/v4/projects/<project_id>/packages/conan conan user <user> -r gitlab -p <API Token>
-
Create a package and upload two package_revisions
In a test folder run:
# Create a folder and a basic package mkdir delete_package && cd delete_package conan new delete_package/1.2.3@gitlab-org+conan/stable --template=cmake_lib `` We need the package to give random build. So, we need to modify the code to do that ``` sh # Edit delete_package.cpp vi ./src/delete_package.cpp
Change this code:
void delete_package(){ #ifdef NDEBUG std::cout << "delete_package/1.2.3: Hello World Release!\n"; #else std::cout << "delete_package/1.2.3: Hello World Debug!\n"; #endif
to:
// This will be different for each build #define BUILD_RANDOM __TIME__[6] * __TIME__[7] + __TIME__[3] * __TIME__[4] + __TIME__[0] * __TIME__[1] void delete_package(){ #ifdef NDEBUG std::cout << "delete_package/1.2.3: Hello World Release! Build: " << BUILD_RANDOM << "\n"; #else std::cout << "delete_package/1.2.3: Hello World Debug! Build: " << BUILD_RANDOM << "\n"; #endif
Build and upload the package for the first package revision
conan create . gitlab-org+conan/stable conan upload delete_package/1.2.3@gitlab-org+conan/stable -r gitlab --all
Rerun the same commands to build and upload the package for the second package revision
conan create . gitlab-org+conan/stable conan upload delete_package/1.2.3@gitlab-org+conan/stable -r gitlab --all
Check package exists by running:
conan search "delete_package*" -r gitlab
-
Check revisions on gitlab
To check revisions in gitlab we assume you are testing using GitLab GDK
Start
rails console
gdk rails console
And run the following code to get a list of revisions for the package:
# Recipe revisions Packages::Package.find_by(name: 'delete_package').conan_recipe_revisions.pluck(:revision) # Package reference Packages::Package.find_by(name: 'delete_package').conan_package_references.pluck(:reference) # Package revisions Packages::Package.find_by(name: 'delete_package').conan_package_revisions.pluck(:revision)
expected response:
# Recipe revisions [<RECIPE_REVISION>] # Package reference [<PACKAGE_REFERENCE>] # Package revisions [<PACKAGE_REVISION_1>, <PACKAGE_REVISION_2>]
-
Delete a package revision
Run the following curl commands:
# Get Conan auth token first curl --request GET \ --url "http://localhost:3000/api/v4/projects/<YOUR_PROJECT_ID>/packages/conan/v1/users/authenticate" \ --header "Authorization: Basic $(echo -n '<YOUR_USERNAME>:<YOUR_TOKEN>' | base64)" \ --header "Accept: text/plain" # Delete the package_revision curl --request DELETE \ --header "Authorization: Bearer <authenticate_token>" \ --url "http://localhost:3000/api/v4/projects/<YOUR_PROJECT_ID>/packages/conan/v2/conans/delete_package/1.2.3/gitlab-org+conan/stable/revisions/<RECIPE_REVISION>/packages/<PACKAGE_REFERENCE>/revisions/<PACKAGE_REVISION_1>"
Check package revisions again in
rails console
by running the following code again:Packages::Package.find_by(name: 'delete_package').conan_package_revisions.pluck(:revision)
expected response:
[<PACKAGE_REVISION_2>]
If you remove the second revision with the same curl command as above the package reference will be deleted as well as the package revision.
# Delete the package_revision curl --request DELETE \ --header "Authorization: Bearer <authenticate_token>" \ --url "http://localhost:3000/api/v4/projects/<YOUR_PROJECT_ID>/packages/conan/v2/conans/delete_package/1.2.3/gitlab-org+conan/stable/revisions/<RECIPE_REVISION>/packages/<PACKAGE_REFERENCE>/revisions/<PACKAGE_REVISION_2>"
When checking the package with the code below in
rails console
you should get the following response# Recipe revisions Packages::Package.find_by(name: 'delete_package').conan_recipe_revisions.pluck(:revision) # Package reference Packages::Package.find_by(name: 'delete_package').conan_package_references.pluck(:reference) # Package revisions Packages::Package.find_by(name: 'delete_package').conan_package_revisions.pluck(:revision)
Expected result:
# Recipe revisions [<RECIPE_REVISION>] # Package reference [] # Package revisions []
/cc @mbo5be
Related to #519741 (closed)
MR acceptance checklist
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
Related to #519741 (closed)