<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Milad Roudgarian</title>
    <description>The latest articles on DEV Community by Milad Roudgarian (@mindwingx).</description>
    <link>https://dev.to/mindwingx</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F665526%2F6eec21b6-c386-4059-8437-7636f98a1e3c.jpg</url>
      <title>DEV Community: Milad Roudgarian</title>
      <link>https://dev.to/mindwingx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mindwingx"/>
    <language>en</language>
    <item>
      <title>Kubernetes Common Resource Types</title>
      <dc:creator>Milad Roudgarian</dc:creator>
      <pubDate>Fri, 29 Mar 2024 18:35:43 +0000</pubDate>
      <link>https://dev.to/mindwingx/kubernetes-common-resource-types-c9h</link>
      <guid>https://dev.to/mindwingx/kubernetes-common-resource-types-c9h</guid>
      <description>&lt;p&gt;Understanding Kubernetes resource types is essential for building scalable, resilient, and secure applications on Kubernetes. By leveraging the right combination of resource types, software engineers can design robust architectures, streamline deployments, and optimize resource utilization within their Kubernetes clusters. This is just an explore the most commonly used Kubernetes resource types, their purposes, and how they contribute to the overall architecture of a Kubernetes deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1- Pod&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Pod represents a single instance of a running process in the cluster.&lt;/li&gt;
&lt;li&gt;It encapsulates one or more containers that are tightly coupled and share resources, such as networking and storage.&lt;/li&gt;
&lt;li&gt;Pods are the smallest deployable units in Kubernetes and can contain one or more application containers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2- Service&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Service defines a set of Pods and a policy to access them.&lt;/li&gt;
&lt;li&gt;It provides a stable, virtual IP address and DNS name for accessing the pods.&lt;/li&gt;
&lt;li&gt;Services enable communication between different parts of an application, both within and outside the Kubernetes cluster.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3- ReplicaSet&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ReplicaSets ensure that a specified number of pod replicas are running at any given time.&lt;/li&gt;
&lt;li&gt;They provide high availability by automatically scaling the number of pod replicas up or down in response to changes in demand or failures.&lt;/li&gt;
&lt;li&gt;ReplicaSets are typically used to manage stateless applications that can scale horizontally.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4- Deployment&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deployments provide declarative updates to Pods and ReplicaSets.&lt;/li&gt;
&lt;li&gt;They manage the lifecycle of Pods, including creating, updating, and deleting them as necessary.&lt;/li&gt;
&lt;li&gt;Deployments enable rolling updates and rollbacks, ensuring zero downtime during application updates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5- StatefulSet&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;StatefulSets manages the deployment and scaling of a set of Pods with unique identities.&lt;/li&gt;
&lt;li&gt;They provide stable, unique network identifiers (hostnames) and persistent storage for each Pod.&lt;/li&gt;
&lt;li&gt;StatefulSets are used for stateful applications that require stable network identities and persistent storage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6- DaemonSet&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DaemonSets ensure that all (or some) nodes in the cluster run a copy of a specified Pod.&lt;/li&gt;
&lt;li&gt;They are typically used to deploy system daemons or background services, such as log collectors or monitoring agents, on every node in the cluster.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7- Job&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jobs create one or more Pods and ensure that a specified number of them successfully terminate.&lt;/li&gt;
&lt;li&gt;They are used for short-lived, batch processing tasks, such as data import/export or periodic cleanup operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;8- CronJob&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CronJobs creates Jobs on a schedule, similar to cron in Unix-like operating systems.&lt;/li&gt;
&lt;li&gt;They are used for recurring tasks, such as backups, data synchronization, or report generation, that need to run at specific intervals.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;9- Namespace&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Namespaces provide a way to divide cluster resources between multiple users, teams, or projects.&lt;/li&gt;
&lt;li&gt;They provide scope for resources, allowing different groups to work independently within the same Kubernetes cluster.&lt;/li&gt;
&lt;li&gt;Namespaces help organize and isolate resources, improving manageability and security.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;10- ConfigMap&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ConfigMaps stores configuration data in key-value pairs that can be mounted as files or environment variables in a Pod.&lt;/li&gt;
&lt;li&gt;They are used to decouple configuration from application code and enable configuration management in a Kubernetes-native way.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;11- Secret&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secrets store sensitive data, such as passwords, API keys, or TLS certificates, in an encrypted format.&lt;/li&gt;
&lt;li&gt;They are similar to ConfigMaps but are intended for confidential or security-sensitive information.&lt;/li&gt;
&lt;li&gt;Secrets are often used to store credentials or other sensitive data required by applications running in Pods.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;12- PersistentVolume&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Persistent volumes represent a piece of storage in the cluster that has been provisioned by an administrator.&lt;/li&gt;
&lt;li&gt;They provide an abstraction layer for storage resources, allowing Pods to request and consume storage without needing to know the details of the underlying infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;13- PersistentVolumeClaim&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PersistentVolumeClaims request storage resources from PersistentVolumes.&lt;/li&gt;
&lt;li&gt;They provide an abstraction layer for storage provisioning, allowing developers to request storage resources of a specific type and size without needing to know the details of the underlying infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;14- ServiceAccount&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ServiceAccounts provide an identity for processes running in a Pod.&lt;/li&gt;
&lt;li&gt;They are used to authenticate Pods with the Kubernetes API server and control access to cluster resources.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;15- Role&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Roles define a set of permissions within a Namespace.&lt;/li&gt;
&lt;li&gt;They specify what actions are allowed on which resources within the Namespace, such as creating, updating, or deleting Pods, Services, or ConfigMaps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;16- ClusterRole&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ClusterRoles define a set of permissions across the entire cluster.&lt;/li&gt;
&lt;li&gt;They are similar to Roles but apply globally to all Namespaces in the cluster.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;17- RoleBinding&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RoleBindings bind a Role to a set of users or groups within a Namespace.&lt;/li&gt;
&lt;li&gt;They specify which users or groups have access to the permissions defined by the Role.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;18- ClusterRoleBinding&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ClusterRoleBindings bind a ClusterRole to a set of users or groups across the entire cluster.&lt;/li&gt;
&lt;li&gt;They specify which users or groups have access to the permissions defined by the ClusterRole.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;19- Ingress&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ingress manages external access to Services in the cluster, typically HTTP or HTTPS traffic.&lt;/li&gt;
&lt;li&gt;It provides a centralized point of entry for incoming requests and allows for advanced routing and load balancing based on URL paths, hostnames, or other criteria.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;20- ResourceQuota&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ResourceQuotas specify constraints on resource consumption (CPU, memory, storage, etc.) within a Namespace.&lt;/li&gt;
&lt;li&gt;They limit the amount of resources that can be used by Pods, Services, and other objects within the Namespace, helping to prevent resource exhaustion and ensure fair resource allocation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are just some of the common "kind" field items in Kubernetes. There are many other resource types available, each serving different purposes in the Kubernetes ecosystem.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>kubernetes</category>
      <category>docker</category>
      <category>cicd</category>
    </item>
    <item>
      <title>Distributing Git Repository Across Multiple Origins</title>
      <dc:creator>Milad Roudgarian</dc:creator>
      <pubDate>Tue, 12 Mar 2024 11:10:54 +0000</pubDate>
      <link>https://dev.to/mindwingx/distributing-git-repository-across-multiple-origins-16l</link>
      <guid>https://dev.to/mindwingx/distributing-git-repository-across-multiple-origins-16l</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;In software development, ensuring backups and efficient collaboration is crucial. Pushing a Git repository to multiple origins facilitates maintaining mirrored copies on various remote repositories like GitHub and GitLab. This approach streamlines the process of propagating changes with a single push command, enabling scenarios such as managing code bases for CI/CD Pipelines or collaborative feature/module sharing among multiple businesses.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If it happened to you that you wanted to push your project to several different remotes but faced problems and could not do it, I suggest you read this article on my LinkedIn.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/pulse/distributing-git-repository-across-multiple-origins-milad-roudgarian-jnanf/?trackingId=PXAlfF59QSWroJKzTvxwFg%3D%3D"&gt;https://www.linkedin.com/pulse/distributing-git-repository-across-multiple-origins-milad-roudgarian-jnanf/?trackingId=PXAlfF59QSWroJKzTvxwFg%3D%3D&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>gitlab</category>
      <category>cicd</category>
      <category>git</category>
    </item>
    <item>
      <title>Common Status Codes in gRPC and HTTP</title>
      <dc:creator>Milad Roudgarian</dc:creator>
      <pubDate>Sun, 18 Feb 2024 18:32:49 +0000</pubDate>
      <link>https://dev.to/mindwingx/common-status-codes-in-grpc-and-http-38pd</link>
      <guid>https://dev.to/mindwingx/common-status-codes-in-grpc-and-http-38pd</guid>
      <description>&lt;p&gt;&lt;strong&gt;HTTP&lt;/strong&gt; status codes are integral to &lt;em&gt;REST API&lt;/em&gt; applications and microservices. With the introduction of the &lt;strong&gt;gRPC&lt;/strong&gt; framework, applications gained the ability to redefine their roles based on traditional protocol/RPC standards.&lt;/p&gt;

&lt;p&gt;Effective error handling is crucial, prompting the need to convert gRPC status codes into their HTTP equivalents for seamless processing by REST API services. The table below outlines the corresponding status codes, enhancing the development workflow. For more in-depth information, refer to the &lt;a href="https://github.com/grpc-ecosystem/grpc-gateway/blob/7094a052b3287b9e99f52d95230789ab34d2d7c4/runtime/errors.go#L36"&gt;gRPC-GateWay&lt;/a&gt; repository.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;|-----------------------------|---------------------------|
| gRPC Status Code            | HTTP Status Code          |
|-----------------------------|---------------------------|
|`OK` (Code: 0)               | 200 OK                    |
|`CANCELLED` (Code: 1)        | 499 Client Closed Request |
|`UNKNOWN` (Code: 2)          | 500 Internal Server Error |
|`INVALID_ARGUMENT` (Code: 3) | 400 Bad Request           |
|`DEADLINE_EXCEEDED` (Code: 4)| 504 Gateway Timeout       |
|`NOT_FOUND` (Code: 5)        | 404 Not Found             |
|`ALREADY_EXISTS` (Code: 6)   | 409 Conflict              |
|`PERMISSION_DENIED` (Code: 7)| 403 Forbidden             |
|`RESOURCE_EXHAUSTED`(Code:8) | 429 Too Many Requests     |
|`FAILED_PRECONDITION`(Code:9)| 400 Bad Request           |
|`ABORTED` (Code: 10)         | 409 Conflict              |
|`OUT_OF_RANGE` (Code: 11)    | 400 Bad Request           |
|`UNIMPLEMENTED` (Code: 12)   | 501 Not Implemented       |
|`INTERNAL` (Code: 13)        | 500 Internal Server Error |
|`UNAVAILABLE` (Code: 14)     | 503 Service Unavailable   |
|`DATA_LOSS` (Code: 15)       | 500 Internal Server Error |
|-----------------------------|---------------------------|
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that some gRPC status codes may not have a direct HTTP equivalent, and the mappings are based on best-fit scenarios. Additionally, gRPC status codes provide more granular information about the status of a request compared to HTTP status codes.&lt;/p&gt;

</description>
      <category>grpc</category>
      <category>http</category>
      <category>restapi</category>
      <category>rest</category>
    </item>
    <item>
      <title>Git Submodule: Managing Dependencies with Precision</title>
      <dc:creator>Milad Roudgarian</dc:creator>
      <pubDate>Thu, 01 Feb 2024 09:30:09 +0000</pubDate>
      <link>https://dev.to/mindwingx/git-submodule-managing-dependencies-with-precision-4073</link>
      <guid>https://dev.to/mindwingx/git-submodule-managing-dependencies-with-precision-4073</guid>
      <description>&lt;p&gt;Assume that many files are shared between countable microservices and are crucial for the project life-cycle. Such as the &lt;code&gt;.proto&lt;/code&gt; file that could be used in both the &lt;code&gt;gateway&lt;/code&gt; service and many other related services. &lt;br&gt;
As an approach, you can use a &lt;code&gt;symbolic link&lt;/code&gt; to have access, but many conflicts like dependency on the file system structure occur. If directories change or if you move your project, links might break. Consider using Git submodules or separate Git repositories for shared &lt;code&gt;proto&lt;/code&gt; files provides versioning and easier management for this dummy scenario.&lt;/p&gt;
&lt;h2&gt;
  
  
  What is the Git Submodule?
&lt;/h2&gt;

&lt;p&gt;Git submodules facilitate the inclusion of one &lt;strong&gt;Git Repository&lt;/strong&gt; as a &lt;strong&gt;Subdirectory&lt;/strong&gt; within another Git Repository. &lt;br&gt;
Essentially, a Git submodule is a reference to a specific snapshot of another repository. This functionality &lt;br&gt;
allows a Git repository to integrate external code, retaining the ability to track its version history.&lt;/p&gt;

&lt;p&gt;Git submodules are beneficial in scenarios where strict version control of external dependencies is crucial. Common use cases include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ensuring Stability: If an external component evolves rapidly or anticipated changes may disrupt the API, you can secure the code by fixing it to a specific commit for stability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Managing Vendor Dependencies: For components with infrequent updates, Git submodules are useful for tracking them as vendor dependencies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Third-Party Integration: Delegating a project segment to a third party becomes more manageable when you want to incorporate their work at a specific time or release, especially when updates are sporadic.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Git Submodule Practical Commands
&lt;/h3&gt;

&lt;p&gt;These are basic commands, and depending on your specific use case, you might need to explore more advanced submodule commands.&lt;br&gt;
To dig deeper into the concept, reviewing the &lt;a href="https://git-scm.com/docs/git-submodule"&gt; Git Official Documentation is recommended&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a Submodule:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git submodule add &amp;lt;repository_URL&amp;gt; &amp;lt;path&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git submodule add https://github.com/example/repo.git vendor/repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Initialize Submodules After Cloning a Repository:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git submodule update &lt;span class="nt"&gt;--init&lt;/span&gt; &lt;span class="nt"&gt;--recursive&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Update Submodules: To fetch the latest changes from the submodule repositories.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git submodule update &lt;span class="nt"&gt;--remote&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Clone a Repository with Submodules: To clone a repository and its submodules.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="nt"&gt;--recursive&lt;/span&gt; &amp;lt;repository_URL&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Initialize Submodules After Cloning (Older Git Versions): For Git versions older than &lt;code&gt;1.6.5&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git submodule init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git submodule update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Fetch Submodule Changes: To pull changes from the master branch of each submodule.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git submodule deinit &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &amp;lt;submodule_path&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &amp;lt;submodule_path&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; .git/modules/&amp;lt;submodule_path&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Remove a Submodule: After running these commands, you also need to commit the changes.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git submodule deinit &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &amp;lt;submodule_path&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &amp;lt;submodule_path&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; .git/modules/&amp;lt;submodule_path&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Update Submodule URL: If the URL of a submodule has changed, you need to run this command to update the configuration.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git submodule &lt;span class="nb"&gt;sync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Clone Submodule Recursively: To clone a repository and its submodules in one step.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="nt"&gt;--recursive&lt;/span&gt; &amp;lt;repository_URL&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Custom Commands&lt;br&gt;
You can use the &lt;code&gt;git submodule foreach&lt;/code&gt; command to run custom commands on each submodule.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git submodule foreach &lt;span class="s1"&gt;'git checkout master'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This checks out the master branch in each submodule.&lt;/p&gt;

</description>
      <category>git</category>
      <category>submodule</category>
      <category>github</category>
      <category>gitlab</category>
    </item>
    <item>
      <title>Technical solutions are written in Golang</title>
      <dc:creator>Milad Roudgarian</dc:creator>
      <pubDate>Sat, 13 Jan 2024 14:51:26 +0000</pubDate>
      <link>https://dev.to/mindwingx/technical-solutions-are-written-in-golang-5a6m</link>
      <guid>https://dev.to/mindwingx/technical-solutions-are-written-in-golang-5a6m</guid>
      <description>&lt;p&gt;Suggest you review the common technical solutions written in &lt;strong&gt;Golang&lt;/strong&gt; on &lt;strong&gt;GitHub&lt;/strong&gt; Repositories I encountered to manage my daily tasks. Thus, most of the best practices are available there.&lt;/p&gt;

&lt;p&gt;1- The &lt;strong&gt;AWS&lt;/strong&gt; Provider allows Terraform to manage AWS resources.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/hashicorp/terraform-provider-aws"&gt;https://github.com/hashicorp/terraform-provider-aws&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2- The &lt;strong&gt;Prometheus&lt;/strong&gt;, a Cloud Native Computing Foundation project, is a systems and service monitoring system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/prometheus/prometheus"&gt;https://github.com/prometheus/prometheus&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3- The &lt;strong&gt;imgproxy&lt;/strong&gt;, a fast and secure standalone server for resizing and converting remote images.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/imgproxy/imgproxy"&gt;https://github.com/imgproxy/imgproxy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4- The &lt;strong&gt;CoreDNS&lt;/strong&gt; is a DNS server/forwarder, written in Go, that chains plugins. Each plugin performs a (DNS) function.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/coredns/coredns"&gt;https://github.com/coredns/coredns&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5- The &lt;strong&gt;Gitea&lt;/strong&gt;, is the Git repository manager with the easiest, fastest, and most painless way of setting up a self-hosted Git service.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/go-gitea/gitea"&gt;https://github.com/go-gitea/gitea&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6- The &lt;strong&gt;MinIO&lt;/strong&gt; is a High-Performance Object Storage released under GNU Affero General Public License v3.0.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/minio/minio"&gt;https://github.com/minio/minio&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>backend</category>
      <category>devops</category>
      <category>github</category>
    </item>
  </channel>
</rss>
