Skip to content

Add conan delete package_revision endpoint for v2

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.

  1. 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)
  2. Make sure you have revisions enabled in your terminal

    Set the CONAN_REVISIONS_ENABLED envitonment variable to 1 to enable revisions for Conan 1.

    export CONAN_REVISIONS_ENABLED=1
  3. 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>
  4. 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
  5. 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>]
  6. 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)

Edited by Océane Legrand

Merge request reports

Loading