{"id":17638,"date":"2024-03-12T12:40:13","date_gmt":"2024-03-12T07:10:13","guid":{"rendered":"https:\/\/opstree.com\/blog\/\/?p=17638"},"modified":"2024-03-21T14:36:46","modified_gmt":"2024-03-21T09:06:46","slug":"dependency-management-with-renovate-beyond-the-limits-of-dependabot","status":"publish","type":"post","link":"https:\/\/opstree.com\/blog\/2024\/03\/12\/dependency-management-with-renovate-beyond-the-limits-of-dependabot\/","title":{"rendered":"Dependency Management with Renovate: Beyond the Limits of Dependabot"},"content":{"rendered":"\r\n<p>While mature CI pipelines often incorporate security scanner tools like Trivy and Clair. But these tools primarily identify vulnerabilities and to fix those vulnerabilities, developers manually upgrade versions of those dependencies like packages, libraries, etc.<\/p>\r\n\r\n\r\n\r\n<p>Manually managing dependencies in software development can be a time-consuming and error-prone process, leading to several challenges. What if we use a tool that scans the entire repo and detects if updates\/patches are available or not and raises PR to upgrade dependency automatically, allowing developers to review and merge them as needed. This proactive approach helps prevent the introduction of vulnerabilities in the first place by ensuring dependencies are kept up-to-date until it is zero-day vulnerabilities.<\/p>\r\n\r\n\r\n\r\n<p>This blog introduces you to <strong>Renovate<\/strong>, a powerful open-source tool that automates dependency management. As an open-source, it offers various ways of installing and configuring it. We will specifically focus on installation using the command-line interface (CLI), in this blog.<\/p>\r\n\r\n\r\n\r\n<p><!--more--><\/p>\r\n\r\n\r\n\r\n<h1 class=\"wp-block-heading\">Steps\u00a0<\/h1>\r\n\r\n\r\n\r\n<p><strong>1. Install Renovate with a single command:<\/strong><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">npm install -g renovate<\/pre>\r\n\r\n\r\n\r\n<p><strong>2. Configure Renovate:<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Set up environment variables:<\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li><code>RENOVATE_REPOSITORIES<\/code>: List of repositories (comma-separated) Renovate should manage.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">export RENOVATE_REPOSITORIES=\"&lt;username&gt;\/&lt;repo-name&gt;\"<\/pre>\r\n\r\n\r\n\r\n<ul>\r\n<li><code>RENOVATE_TOKEN<\/code>: Your personal access token for accessing repositories. e.g. if you are using GitHub, then create a PAT token and paste here.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">export RENOVATE_TOKEN=\"&lt;token goes here&gt;\"<\/pre>\r\n\r\n\r\n\r\n<p><strong>3. Create a\u00a0<\/strong><code>.renovaterc.json<\/code><strong> configuration file:<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Create a file named\u00a0<code>.renovaterc.json<\/code> in your project root and paste the following content:<\/p>\r\n\r\n\r\n\r\n<p>JSON | base config with default behaviour.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">{<br \/>  \"$schema\": \"https:\/\/docs.renovatebot.com\/renovate-schema.json\",<br \/>  \"extends\": [<br \/>    \"config:base\"<br \/>  ]<br \/>}<\/pre>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">OR\u00a0<\/h2>\r\n\r\n\r\n\r\n<p>Just skip this step and jump to point number 5. By doing so a \u201cConfigure Renovate\u201d PR will be raised with default configuration.<br \/>I chose to edit it to change the default behaviour of renovate (refer to the below images) and then merged it.<\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*Kx31qibK-JLXo8cFpt0g5A.png\" alt=\"\" \/>\r\n<figcaption class=\"wp-element-caption\">Creation of json file automatically<\/figcaption>\r\n<\/figure>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*-1ZhtXtbGfJYxEQk-UGhvA.png\" alt=\"\" \/>\r\n<figcaption class=\"wp-element-caption\">default content in\u00a0file<\/figcaption>\r\n<\/figure>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*lFAjJ-0mEUN56QEXCXPitA.png\" alt=\"\" \/>\r\n<figcaption class=\"wp-element-caption\">edited content with required\u00a0features<\/figcaption>\r\n<\/figure>\r\n\r\n\r\n\r\n<p><strong>4. Push the Configuration File:<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Commit and push the\u00a0<code>.renovaterc.json<\/code> file to your repository in default branch ( <strong>as per the settings of version control<\/strong> ) e.g. master is default in my case because renovate retrieves this config from default branch only.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*2nMU6A_-YrYr8BuWNg-sdQ.png\" alt=\"\" \/>\r\n<figcaption class=\"wp-element-caption\">showing the default\u00a0branch<\/figcaption>\r\n<\/figure>\r\n\r\n\r\n\r\n<p><strong>5. Unleash the Power of Renovate:<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Renovate scans your dependencies, suggests updates and creates pull requests for your approval.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">export LOG_LEVEL=debug<br \/>renovate<\/pre>\r\n\r\n\r\n\r\n<h1 class=\"wp-block-heading\">Demo<\/h1>\r\n\r\n\r\n\r\n<p>Here\u2019s how you can set up Renovate for your Go application hosted on Github with this example <a href=\"https:\/\/github.com\/vikas-gautam\/renovate-demo\" target=\"_blank\" rel=\"noreferrer noopener\">repo<\/a>.<\/p>\r\n\r\n\r\n\r\n<p>Push file\u00a0<code>.renovaterc.json<\/code> to the default branch ( <em>master in this case<\/em> ) of repo with below content.<\/p>\r\n\r\n\r\n\r\n<p><strong>Scenario(A)\u200a\u2014\u200aJSON |<\/strong> <strong>base config only\u200a\u2014\u200ait targets default branch only for pull request.<\/strong><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">{<br \/>  \"$schema\": \"https:\/\/docs.renovatebot.com\/renovate-schema.json\",<br \/>  \"extends\": [<br \/>    \"config:base\"<br \/>  ]<br \/>}<\/pre>\r\n\r\n\r\n\r\n<p><strong>Scenario(B)\u200a\u2014\u200aJSON |<\/strong> <strong>Targeting the \u201crelease\u201d branch for pull request creation<\/strong><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">{<br \/>  \"$schema\": \"https:\/\/docs.renovatebot.com\/renovate-schema.json\",<br \/>  \"extends\": [<br \/>    \"config:base\"<br \/>  ],<br \/>  \"baseBranches\": [\"release\"],<br \/>  \"dependencyDashboard\": true<br \/>}<\/pre>\r\n\r\n\r\n\r\n<p>Run below commands or you can configure the renovate in dependency mangement pipeline.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">npm install -g renovate<br \/>export RENOVATE_REPOSITORIES=\"vikas-gautam\/renovate-demo\"<br \/>export RENOVATE_TOKEN=\"&lt;token goes here&gt;\"<br \/>export LOG_LEVEL=debug<br \/>renovate<\/pre>\r\n\r\n\r\n\r\n<p><strong>Result<\/strong>\u200a\u2014\u200aAs we can see that, PR has been raised for detected dependency in the code. Now, you can choose to merge this PR or close this.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*q6XGSpXCOcMqthz-v0_4_w.png\" alt=\"\" \/>\r\n<figcaption class=\"wp-element-caption\"><strong>Scenario(A)\u200a\u2014\u200aPR has been raised for master\u00a0branch<\/strong><\/figcaption>\r\n<\/figure>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*wgdQ72PHcOqW_Um86gMdJg.png\" alt=\"\" \/>\r\n<figcaption class=\"wp-element-caption\"><strong>Scenario(B)\u200a\u2014\u200aPR has been raised for release\u00a0branch<\/strong><\/figcaption>\r\n<\/figure>\r\n\r\n\r\n\r\n<h1 class=\"wp-block-heading\"><strong><strong>Beyond Dependabot<\/strong><\/strong><\/h1>\r\n\r\n\r\n\r\n<p>Renovate offers unique features like:<\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li><strong>Grouping similar updates:<\/strong> Organize pull requests for related dependencies (e.g., all ESLint packages) for cleaner management. Check out the official <a href=\"https:\/\/docs.renovatebot.com\/configuration-options\/#packagerules\" target=\"_blank\" rel=\"noreferrer noopener\">doc<\/a> to enable this.<\/li>\r\n\r\n\r\n\r\n<li><strong>Scheduled auto-merge:<\/strong> Automate merging approved updates for a streamlined workflow. Refer the official <a href=\"https:\/\/docs.renovatebot.com\/presets-schedule\/\" target=\"_blank\" rel=\"noreferrer noopener\">doc<\/a> to enable this.<\/li>\r\n\r\n\r\n\r\n<li><strong>Dependency Dashboard:<\/strong> It shows an overview of the state of your repositories\u2019 dependencies. To enable\/disable this, just put below code in\u00a0<code>.renovaterc.json<\/code><\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">{<br \/>  \"dependencyDashboard\": true<br \/>}<\/pre>\r\n\r\n\r\n\r\n<p>It lists down all the PR raised in this repo in one place as tasks, so, you can mark them done, once respective PR will be merged.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*VdiERfZH7V-4FgI1Fxal-w.png\" alt=\"\" \/>\r\n<figcaption class=\"wp-element-caption\">when dependency Dashboard is\u00a0enabled<\/figcaption>\r\n<\/figure>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*1FQc-tKIJ6rzodYYYjovwA.png\" alt=\"\" \/>\r\n<figcaption class=\"wp-element-caption\">Inside dependency dashboard | list down all the PR raised in this\u00a0repo<\/figcaption>\r\n<\/figure>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p>After disabling this, nothing will be shown under issues.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">{<br \/>  \"dependencyDashboard\": false<br \/>}<\/pre>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*IXOxwrFSoxV1z9bPvUdLBA.png\" alt=\"\" \/>\r\n<figcaption class=\"wp-element-caption\">when dependencyDashboard is\u00a0disabled<\/figcaption>\r\n<\/figure>\r\n\r\n\r\n\r\n<h1 class=\"wp-block-heading\">Conclusion<\/h1>\r\n\r\n\r\n\r\n<p>While this blog provides a basic setup, remember that the\u00a0<code>.renovaterc.json<\/code> file offers extensive configuration options. Explore the documentation to configure Renovate as per your specific needs and make dependency management truly handy.<\/p>\r\n\r\n\r\n\r\n<p>I hope you found this information helpful. If you have any feedback or suggestions, please reach out to me or leave comments below.<\/p>\r\n\r\n\r\n\r\n<p><strong>References:<\/strong><\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li><a href=\"https:\/\/docs.renovatebot.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/docs.renovatebot.com\/<\/a><\/li>\r\n\r\n\r\n\r\n<li><a href=\"https:\/\/docs.renovatebot.com\/presets-schedule\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/docs.renovatebot.com\/presets-schedule\/<\/a><\/li>\r\n\r\n\r\n\r\n<li><a href=\"https:\/\/docs.renovatebot.com\/configuration-options\/#packagerules\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/docs.renovatebot.com\/configuration-options\/#packagerules<\/a><\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p><strong>Cheers till next time!!<\/strong><\/p>\r\n\r\n\r\n\r\n<p><strong>Blog Pundits: <a href=\"https:\/\/opstree.com\/blog\/\/author\/adeel109\/\">A<strong><strong>deel <\/strong><\/strong>Ahmed<\/a> and <a href=\"https:\/\/opstree.com\/blog\/\/author\/sandeep7c51ad81ba\/\" target=\"_blank\" rel=\"noreferrer noopener\">Sandeep Rawat<\/a><\/strong><\/p>\r\n\r\n\r\n\r\n<p><strong>OpsTree is an End-to-End <a href=\"https:\/\/opstree.com\/services\/\" target=\"_blank\" rel=\"noreferrer noopener\">DevOps Solution<\/a> Provider.<\/strong><\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\r\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/opstree.com\/contact-us\/?utm_source=WordPress&amp;utm_medium=Blog&amp;utm_campaign=CI%2FCD+with+GitHub+Actions+-+Concepts\" target=\"_blank\" rel=\"noreferrer noopener\">Contact Us<\/a><\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<p class=\"has-text-align-center\"><strong>Connect with Us<\/strong><\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-social-links aligncenter is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-1 wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-linkedin  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.linkedin.com\/company\/opstree-solutions\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">LinkedIn<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-youtube  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.youtube.com\/channel\/UCeLma6SpNYH7jjYKSBNSexw\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">YouTube<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-github  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/github.com\/OpsTree\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">GitHub<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-facebook  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.facebook.com\/opstree\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Facebook<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-medium  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/medium.com\/buildpiper\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20.962,7.257l-5.457,8.867l-3.923-6.375l3.126-5.08c0.112-0.182,0.319-0.286,0.527-0.286c0.05,0,0.1,0.008,0.149,0.02 c0.039,0.01,0.078,0.023,0.114,0.041l5.43,2.715l0.006,0.003c0.004,0.002,0.007,0.006,0.011,0.008 C20.971,7.191,20.98,7.227,20.962,7.257z M9.86,8.592v5.783l5.14,2.57L9.86,8.592z M15.772,17.331l4.231,2.115 C20.554,19.721,21,19.529,21,19.016V8.835L15.772,17.331z M8.968,7.178L3.665,4.527C3.569,4.479,3.478,4.456,3.395,4.456 C3.163,4.456,3,4.636,3,4.938v11.45c0,0.306,0.224,0.669,0.498,0.806l4.671,2.335c0.12,0.06,0.234,0.088,0.337,0.088 c0.29,0,0.494-0.225,0.494-0.602V7.231C9,7.208,8.988,7.188,8.968,7.178z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Medium<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-twitter  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/twitter.com\/opstreedevops\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M22.23,5.924c-0.736,0.326-1.527,0.547-2.357,0.646c0.847-0.508,1.498-1.312,1.804-2.27 c-0.793,0.47-1.671,0.812-2.606,0.996C18.324,4.498,17.257,4,16.077,4c-2.266,0-4.103,1.837-4.103,4.103 c0,0.322,0.036,0.635,0.106,0.935C8.67,8.867,5.647,7.234,3.623,4.751C3.27,5.357,3.067,6.062,3.067,6.814 c0,1.424,0.724,2.679,1.825,3.415c-0.673-0.021-1.305-0.206-1.859-0.513c0,0.017,0,0.034,0,0.052c0,1.988,1.414,3.647,3.292,4.023 c-0.344,0.094-0.707,0.144-1.081,0.144c-0.264,0-0.521-0.026-0.772-0.074c0.522,1.63,2.038,2.816,3.833,2.85 c-1.404,1.1-3.174,1.756-5.096,1.756c-0.331,0-0.658-0.019-0.979-0.057c1.816,1.164,3.973,1.843,6.29,1.843 c7.547,0,11.675-6.252,11.675-11.675c0-0.178-0.004-0.355-0.012-0.531C20.985,7.47,21.68,6.747,22.23,5.924z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Twitter<\/span><\/a><\/li><\/ul>\r\n","protected":false},"excerpt":{"rendered":"<p>While mature CI pipelines often incorporate security scanner tools like Trivy and Clair. But these tools primarily identify vulnerabilities and to fix those vulnerabilities, developers manually upgrade versions of those dependencies like packages, libraries, etc. Manually managing dependencies in software development can be a time-consuming and error-prone process, leading to several challenges. What if we &hellip; <a href=\"https:\/\/opstree.com\/blog\/2024\/03\/12\/dependency-management-with-renovate-beyond-the-limits-of-dependabot\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Dependency Management with Renovate: Beyond the Limits of Dependabot&#8221;<\/span><\/a><\/p>\n","protected":false},"author":175681501,"featured_media":17833,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[28070474],"tags":[460,768739308,768739309,768739293],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2024\/03\/1_Kx31qibK-JLXo8cFpt0g5A.png","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfDBOm-4Au","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/17638"}],"collection":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/users\/175681501"}],"replies":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/comments?post=17638"}],"version-history":[{"count":20,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/17638\/revisions"}],"predecessor-version":[{"id":17948,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/17638\/revisions\/17948"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media\/17833"}],"wp:attachment":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media?parent=17638"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/categories?post=17638"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/tags?post=17638"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}