<?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: Felipe Tófoli</title>
    <description>The latest articles on DEV Community by Felipe Tófoli (@felipetofoli).</description>
    <link>https://dev.to/felipetofoli</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%2F580400%2Fe8113c96-a297-4f15-8afc-01a91e17643a.png</url>
      <title>DEV Community: Felipe Tófoli</title>
      <link>https://dev.to/felipetofoli</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/felipetofoli"/>
    <language>en</language>
    <item>
      <title>My Journey to AWS Cloud Practitioner Certification: How I Scored 967/1000!</title>
      <dc:creator>Felipe Tófoli</dc:creator>
      <pubDate>Wed, 07 Feb 2024 10:00:00 +0000</pubDate>
      <link>https://dev.to/felipetofoli/my-journey-to-aws-cloud-practitioner-certification-how-i-scored-9671000-neo</link>
      <guid>https://dev.to/felipetofoli/my-journey-to-aws-cloud-practitioner-certification-how-i-scored-9671000-neo</guid>
      <description>&lt;p&gt;Recently, I took the AWS Cloud Practitioner certification exam and scored 967 out of 1000 points. 🎉&lt;/p&gt;

&lt;p&gt;Since I achieved a significant result, I decided to share my exam preparation strategy. 💡&lt;/p&gt;

&lt;p&gt;In this post, you will find the study materials I used, how I organized my study routine, preparation tips, and even my strategy for answering multiple-choice questions. 💎&lt;/p&gt;

&lt;p&gt;I hope this post can assist you on your journey to AWS Cloud Practitioner certification! ❤️&lt;/p&gt;

&lt;p&gt;Below are all the topics covered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📚 Study Materials&lt;/li&gt;
&lt;li&gt;🎓 Study Routine&lt;/li&gt;
&lt;li&gt;📅 Exam Scheduling&lt;/li&gt;
&lt;li&gt;📝 Exam Week Preparation&lt;/li&gt;
&lt;li&gt;📑 Exam Eve&lt;/li&gt;
&lt;li&gt;📆 Exam Day&lt;/li&gt;
&lt;li&gt;💎 During the Exam&lt;/li&gt;
&lt;li&gt;✅ Results&lt;/li&gt;
&lt;li&gt;💭 Conclusion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📚 Study Materials
&lt;/h2&gt;

&lt;p&gt;Over the years, I participated in AWS projects, read pages of official documentation, and consumed various cloud computing content. However, for this certification preparation, I chose to use the following resources:&lt;/p&gt;

&lt;h3&gt;
  
  
  Courses 📘
&lt;/h3&gt;

&lt;p&gt;Stephane Maarek’s courses &lt;strong&gt;were highly recommended by many friends&lt;/strong&gt; , making it challenging not to choose him, and now I understand why!&lt;/p&gt;

&lt;p&gt;▶️ Course: &lt;a href="https://www.udemy.com/course/aws-certified-cloud-practitioner-new" rel="noopener noreferrer"&gt;[NEW] Ultimate AWS Certified Cloud Practitioner CLF-C02&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The course is very &lt;strong&gt;comprehensive&lt;/strong&gt; and &lt;strong&gt;up-to-date&lt;/strong&gt;. The instructor provides &lt;strong&gt;valuable tips about the exam&lt;/strong&gt; and facilitates &lt;strong&gt;understanding of what will be asked&lt;/strong&gt; for each AWS service.&lt;/p&gt;

&lt;p&gt;Stephane himself states that his goal is to provide a course that helps students achieve a score in the range of 900 points. And that’s exactly what happened to me! 😃&lt;/p&gt;

&lt;p&gt;This course includes a Practice Exam, which is quite interesting. The Practice Exams are so helpful that they deserve an exclusive mention below!&lt;/p&gt;

&lt;h3&gt;
  
  
  Practice Exams 📗
&lt;/h3&gt;

&lt;p&gt;The practice exams created by Stephane Maarek and Abhishek Singh are very &lt;strong&gt;comprehensive&lt;/strong&gt; and have a &lt;strong&gt;detailed explanation&lt;/strong&gt; of correct (and incorrect) answers, along with general exam tips.&lt;/p&gt;

&lt;p&gt;▶️ Practice Exams: &lt;a href="https://www.udemy.com/course/practice-exams-aws-certified-cloud-practitioner" rel="noopener noreferrer"&gt;6 Practice Exams -&amp;gt; AWS Certified Cloud Practitioner CLF-C02&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In reviews of the practice exams, I noticed some people complaining that the questions were much more difficult than the certification exam. I agree that some questions are more challenging, but if you want to score high, they are an excellent study guide.&lt;/p&gt;

&lt;p&gt;However, after reading negative reviews about the practice exams, I decided to look for something closer to the real exam. Since English is not my first language, I was concerned about any surprises regarding the wording/vocabulary of the exam.&lt;/p&gt;

&lt;p&gt;In the search for something &lt;strong&gt;closer to the real exam&lt;/strong&gt; , I found the &lt;a href="https://www.awslagi.com/aws-certified-cloud-practitioner/" rel="noopener noreferrer"&gt;awsalgi&lt;/a&gt; website. I answered some questions to familiarize myself with the format and vocabulary of the exam, which were not much different from Stephane Maarek’s course. But it was worthwhile.&lt;/p&gt;

&lt;p&gt;▶️ Practice Exam: &lt;a href="https://www.awslagi.com/aws-certified-cloud-practitioner/" rel="noopener noreferrer"&gt;AWS Certified Cloud Practitioner&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My strategy with the practice exams was always the same: &lt;strong&gt;answer and review all questions, giving more importance to those I got wrong&lt;/strong&gt; , doing &lt;strong&gt;additional research&lt;/strong&gt; to gain more clarity about the concepts.&lt;/p&gt;

&lt;h4&gt;
  
  
  YouTube Channel 📺
&lt;/h4&gt;

&lt;p&gt;During preparation, I referred to some videos by Neal Davis from the &lt;a href="https://www.youtube.com/c/digitalcloudtraining" rel="noopener noreferrer"&gt;Digital Cloud Training&lt;/a&gt; channel, especially when the topic was the “6 Pillar Framework”. I found the content to be very &lt;strong&gt;well-explained&lt;/strong&gt; , recommending it as a supplement to studies.&lt;/p&gt;

&lt;p&gt;▶️ YouTube: &lt;a href="https://www.youtube.com/c/digitalcloudtraining" rel="noopener noreferrer"&gt;Neal Davis -&amp;gt; Digital Cloud Training&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🎓 Study Routine
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Routine 💡
&lt;/h4&gt;

&lt;p&gt;During my preparation, I allocated &lt;strong&gt;1 hour per day&lt;/strong&gt; for studies. I found that studying &lt;strong&gt;before starting work&lt;/strong&gt; worked best for me because my mind was &lt;strong&gt;“fresh”&lt;/strong&gt; and ready to absorb new knowledge. Additionally, it reduced the likelihood of postponing the start of studies due to any unforeseen events during the workday.&lt;/p&gt;

&lt;h4&gt;
  
  
  Notes ✏️
&lt;/h4&gt;

&lt;p&gt;After watching each course lecture, I took &lt;strong&gt;notes&lt;/strong&gt;. This time, I used a digital tool, OneNote. I like to take notes on paper, but the convenience of being able to &lt;strong&gt;add screenshots&lt;/strong&gt; and perform &lt;strong&gt;content searches&lt;/strong&gt; turned out to be a significant attraction.&lt;/p&gt;

&lt;h4&gt;
  
  
  Labs 🔨
&lt;/h4&gt;

&lt;p&gt;Since I already had previous knowledge of AWS, I completed each lab only once. &lt;strong&gt;For those without prior knowledge, it may be interesting to do each lab twice to practice and better absorb the knowledge&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Practice Exams 📝
&lt;/h4&gt;

&lt;p&gt;As previously stated, I utilized the practice exams to identify areas requiring further study, subsequently conducting additional research on these topics.&lt;/p&gt;

&lt;h3&gt;
  
  
  📅 Exam Scheduling
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Additional Time for Non-Native English-speakers 🕕
&lt;/h4&gt;

&lt;p&gt;The request for additional time must be made before scheduling the exam. The additional time is 30 minutes and can be very useful for Non-Native English-speakers.&lt;/p&gt;

&lt;p&gt;I tried to add this extra time, and although I thought I had done it successfully, it was not added to the exam. So, &lt;strong&gt;I recommend checking carefully if the request for additional time was successfully registered&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In the end, the additional time was not needed (phew!). 😌 I answered the questions and reviewed all exam questions in 55 minutes. And I still had over 30 minutes left.&lt;/p&gt;

&lt;h4&gt;
  
  
  At Home or at the Certification Exam Center? 🏢
&lt;/h4&gt;

&lt;p&gt;This question caused some doubts for me.&lt;/p&gt;

&lt;p&gt;Initially, I scheduled the exam to be taken at home for convenience. However, after researching, I found that the examiners - the online proctors - &lt;strong&gt;are quite strict&lt;/strong&gt;. I would have to &lt;strong&gt;remove some items&lt;/strong&gt; from the room where I would take the exam (such as books) and also &lt;strong&gt;adapt my workspace&lt;/strong&gt; , as the exam must be done on a single screen.&lt;/p&gt;

&lt;p&gt;Unfortunately, in the week of the exam, I experienced some instability in my internet connection. Additionally, I noticed there was some noise in the room where I would take the exam (as I will explain later). Therefore, I &lt;strong&gt;chose to reschedule and take the exam at the certification center&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;By taking the exam at a certification center, if there is any problem, they may be able to negotiate a new date in case of unforeseen events. Additionally, they probably have network contingency plans.&lt;/p&gt;

&lt;p&gt;When taking the exam at home, I wouldn’t have this support, and if there were any problems, I would have to &lt;strong&gt;pay the exam costs&lt;/strong&gt; again. Besides the frustration…&lt;/p&gt;

&lt;h3&gt;
  
  
  📝 Exam Week Preparation
&lt;/h3&gt;

&lt;p&gt;In the 7 days before the exam, I took the Practice Exams (1 per day).&lt;/p&gt;

&lt;p&gt;For me, the most important thing was to &lt;strong&gt;take them at the same time for which the exam was scheduled&lt;/strong&gt; , and &lt;strong&gt;following the exam rules&lt;/strong&gt; : using only the laptop screen and no headphones.&lt;/p&gt;

&lt;p&gt;The strategy was useful because &lt;strong&gt;I got used to taking multiple-choice exams at that time, requiring less effort to stay focused&lt;/strong&gt; , and &lt;strong&gt;I noticed that there was some noise at the time I had scheduled the exam&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Since I always studied with headphones, I hadn’t noticed. But by removing the headphones, I realized that the noise could be disturbing, and worse, the proctor could cancel my exam due to excessive noise.&lt;/p&gt;

&lt;h3&gt;
  
  
  📑 Exam Eve
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;I &lt;strong&gt;reviewed&lt;/strong&gt; my notes.&lt;/li&gt;
&lt;li&gt;I took a “Practice exam” &lt;strong&gt;at the same time as the exam&lt;/strong&gt; to &lt;strong&gt;keep my brain accustomed&lt;/strong&gt; to answering multiple-choice questions.&lt;/li&gt;
&lt;li&gt;I created the &lt;strong&gt;checklist&lt;/strong&gt; of what I would need to bring to take the exam.&lt;/li&gt;
&lt;li&gt;And most importantly, a &lt;strong&gt;good night’s sleep&lt;/strong&gt;. 😴&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📆 Exam Day
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;I reviewed only the &lt;strong&gt;most important points&lt;/strong&gt; of my notes.&lt;/li&gt;
&lt;li&gt;I answered some (easy) Practice Exam questions, just to &lt;strong&gt;“wake up” my brain&lt;/strong&gt;. I didn’t want to arrive “cold” for the exam.&lt;/li&gt;
&lt;li&gt;I &lt;strong&gt;ate properly&lt;/strong&gt;. 🍎&lt;/li&gt;
&lt;li&gt;I reviewed the &lt;strong&gt;checklist of what to bring to take the exam&lt;/strong&gt; (they ask for 2 forms of identification - in Brazil: ID/driver’s license and credit/debit card, for example). This point - reviewing the items - was crucial. Working and studying 100% from home for so long, I almost forgot to grab my glasses. 👓 &lt;strong&gt;The checklist saved me!&lt;/strong&gt; 😌&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💎 During the Exam
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Strategy 🎯
&lt;/h4&gt;

&lt;p&gt;I have some strategies for multiple-choice exams. The strategy is quite simple (and I imagine they are common), but it’s worth mentioning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If I am sure of the answer, well… then it’s simple, I mark the option and move on to the next one;&lt;/li&gt;
&lt;li&gt;If I’m not sure of the answer, I go by elimination until only one option remains;&lt;/li&gt;
&lt;li&gt;If I still have doubts, I mark it for later review. When in doubt, I try not to spend too much time on the question, but I try to understand the doubt and the possible answers - &lt;strong&gt;many times, the exam can provide a hint about the answer in a later question&lt;/strong&gt; , so it’s important to be attentive to make the correlation when you have the opportunity;&lt;/li&gt;
&lt;li&gt;After applying the previous steps to all questions, I start the review;&lt;/li&gt;
&lt;li&gt;As I said, sometimes the exam gives you input on the answers to other questions, so I review and try to apply something I learned during the exam;&lt;/li&gt;
&lt;li&gt;When I have time, I like to review all questions: 

&lt;ul&gt;
&lt;li&gt;For those I’m sure about, I just reread the question carefully to &lt;strong&gt;make sure I didn’t make any silly mistakes&lt;/strong&gt; , like ignoring something in the statement&lt;/li&gt;
&lt;li&gt;For those I have doubts about, it’s time to reason. If I still don’t know the answer, I mark the one that seems right and move on to the next one, without removing the review indicator;&lt;/li&gt;
&lt;li&gt;I go through the process until there are no more questions to review&lt;/li&gt;
&lt;li&gt;At a certain point, it’s not worth forcing to find an answer, it will only cause stress, so I try to let go and move on (that’s why I think it’s good to review the questions I’m sure about, so as not to lose “easy” points due to carelessness)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  Breaks ⌛
&lt;/h4&gt;

&lt;p&gt;If taking the exam from home, you cannot leave the computer. If you do, the exam will be canceled. As far as I know, you can’t even stop to drink water, so hydrate, eat, and go to the bathroom before starting.&lt;/p&gt;

&lt;p&gt;At the certification center, you can take breaks to go to the bathroom and drink water. However, the clock does not pause. Eating is not allowed, so eat before starting the exam.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Results
&lt;/h3&gt;

&lt;p&gt;As mentioned at the beginning, I scored &lt;strong&gt;967 out of 1000&lt;/strong&gt; possible points. And I passed! Additionally, I finished the exam in &lt;strong&gt;55 minutes&lt;/strong&gt; , with over 30 minutes remaining from the allotted time for the exam.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ffelipetofoli.github.io%2Fassets%2Fimages%2Fmy-journey-to-aws-cloud-practitioner-certification%2Faws-cloud-practitioner-certified-badge.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ffelipetofoli.github.io%2Fassets%2Fimages%2Fmy-journey-to-aws-cloud-practitioner-certification%2Faws-cloud-practitioner-certified-badge.jpg" alt="Badge AWS Cloud Practitioner Certified"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  💭 Conclusion
&lt;/h3&gt;

&lt;p&gt;I believe that &lt;strong&gt;preparation was crucial&lt;/strong&gt; for the obtained result.&lt;/p&gt;

&lt;p&gt;I &lt;strong&gt;enjoyed&lt;/strong&gt; - and &lt;strong&gt;strongly recommend&lt;/strong&gt; - the materials used because I learned a lot during the process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simulating the test was also crucial&lt;/strong&gt; : without headphones, at the same time as the exam, using only one screen. During the exam, &lt;strong&gt;I was already comfortable&lt;/strong&gt; with this scenario.&lt;/p&gt;

&lt;p&gt;Taking the exam at the certification center &lt;strong&gt;made me feel at ease&lt;/strong&gt; regarding possible unforeseen events during the exam. This allowed me to focus solely on exam preparation throughout the week, &lt;strong&gt;without the anxiety caused by possible external factors&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Warming up my brain&lt;/strong&gt; on the exam day to arrive &lt;strong&gt;focused&lt;/strong&gt; was very useful.&lt;/p&gt;

&lt;p&gt;Furthermore, a &lt;strong&gt;good night’s sleep&lt;/strong&gt; was essential. After all, quality sleep and adequate nutrition are things to always keep in mind, aren’t they?&lt;/p&gt;

&lt;p&gt;That was my preparation, and I hope this post helps you! ❤️&lt;/p&gt;

&lt;p&gt;If it helped, I would love to know, it would make me very happy! 😃&lt;/p&gt;

&lt;p&gt;Best regards!&lt;/p&gt;

&lt;p&gt;If you liked this post, please check more content of my personal blog: &lt;a href="https://felipetofoli.github.io/" rel="noopener noreferrer"&gt;https://felipetofoli.github.io/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>devops</category>
      <category>certification</category>
    </item>
    <item>
      <title>Code formatting for C# projects: dotnet format + GitHub Actions</title>
      <dc:creator>Felipe Tófoli</dc:creator>
      <pubDate>Mon, 16 Aug 2021 12:10:05 +0000</pubDate>
      <link>https://dev.to/felipetofoli/code-formatting-for-c-projects-dotnet-format-github-actions-54p8</link>
      <guid>https://dev.to/felipetofoli/code-formatting-for-c-projects-dotnet-format-github-actions-54p8</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Getting people to use their code review time to pinpoint code formatting issues &lt;strong&gt;is not productive or sustainable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So, in this blog post, I show you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A better approach to this code formatting verification step&lt;/strong&gt; by using the &lt;strong&gt;&lt;code&gt;dotnet format&lt;/code&gt;&lt;/strong&gt; tool, and;&lt;/li&gt;
&lt;li&gt;How to &lt;strong&gt;build a GitHub Action&lt;/strong&gt; to make this verification in an &lt;strong&gt;automated and continuous&lt;/strong&gt; way.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why should I improve the code formatting verification in my projects?
&lt;/h2&gt;

&lt;p&gt;Ensuring the consistent formatting of a project (especially those with long years of life and many people participating) is a challenge.&lt;/p&gt;

&lt;p&gt;When the project does not use any tools to assist in this formatting process, the checks end up depending a lot on people's attention and will.&lt;/p&gt;

&lt;p&gt;Furthermore, getting people to use their code review time to pinpoint code formatting issues (turning people into code linters) is not productive or sustainable.&lt;/p&gt;

&lt;h2&gt;
  
  
  How can we do it in a better way?
&lt;/h2&gt;

&lt;p&gt;To apply formatting styles consistently across C# projects you can use the global dotnet tool: &lt;a href="https://github.com/dotnet/format" rel="noopener noreferrer"&gt;dotnet-format&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;dotnet-format&lt;/code&gt; tool relies on the &lt;code&gt;.editorconfig&lt;/code&gt; configuration file to apply formatting to the project.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;.editorconfig&lt;/code&gt; is a file format for defining and maintaining consistent coding styles for multiple developers working on the same project in different editors or IDEs.&lt;/p&gt;

&lt;p&gt;A good option is to bring the team together and clarify the settings that will be adopted, avoiding confusion.&lt;/p&gt;

&lt;p&gt;Having a &lt;code&gt;.editorconfig&lt;/code&gt; is useful because, with the configuration file, it is possible to register, keep the history and track the standards adopted by the team.&lt;/p&gt;

&lt;p&gt;If you don't know how to start, you can use &lt;a href="https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/code-style-rule-options?view=vs-2019#example-editorconfig-file" rel="noopener noreferrer"&gt;this .editorconfig file&lt;/a&gt; available in Microsoft documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use dotnet format tool to apply code formatting
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;dotnet format&lt;/code&gt; command can be run locally to check and fix code that does not adhere to the defined standards.&lt;/p&gt;

&lt;p&gt;More than that, &lt;strong&gt;code formatting verification can be added to the CI&lt;/strong&gt;, to automatically and continuously ensure that the desired formatting is being applied to the project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Running in a local environment
&lt;/h3&gt;

&lt;p&gt;To &lt;strong&gt;install&lt;/strong&gt; &lt;code&gt;dotnet-format&lt;/code&gt; just run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; dotnet tool &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; dotnet-format
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If you just want to &lt;strong&gt;check&lt;/strong&gt; that your project's formatting is according to the &lt;code&gt;.editorconfig&lt;/code&gt; set, you can run:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; dotnet format &lt;span class="s1"&gt;'.\'&lt;/span&gt; &lt;span class="nt"&gt;--folder&lt;/span&gt; &lt;span class="nt"&gt;--check&lt;/span&gt; &lt;span class="nt"&gt;--verbosity&lt;/span&gt; diagnostic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In the above command:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--folder&lt;/code&gt; option indicates that the path should be treated as a folder;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--check&lt;/code&gt; option says this is only a verification - the project code will not be changed / formatted if deviations from the &lt;code&gt;.editorconfig&lt;/code&gt; settings are found;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--verbosity diagnostic&lt;/code&gt; option is used to get the execution logs as verbose as possible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To &lt;strong&gt;apply&lt;/strong&gt; formatting to the code, simply remove the &lt;code&gt;--check&lt;/code&gt; option from the previous command:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; dotnet format &lt;span class="s1"&gt;'.\'&lt;/span&gt; &lt;span class="nt"&gt;--folder&lt;/span&gt; &lt;span class="nt"&gt;--verbosity&lt;/span&gt; diagnostic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If you want to know more options for running &lt;code&gt;dotnet format&lt;/code&gt;, you can refer to the &lt;a href="https://github.com/dotnet/format#how-to-use" rel="noopener noreferrer"&gt;official documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  To automate checking the code formatting, we can use GitHub Actions
&lt;/h3&gt;

&lt;p&gt;The creation of a GitHub Action can be used to check the code formatting compliance with each change applied to the repository, as shown in the &lt;code&gt;dotnet-format.yml&lt;/code&gt; file below:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Understanding the dotnet-format.yml GitHub Action
&lt;/h4&gt;

&lt;p&gt;Below, step-by-step explanation of the &lt;code&gt;dotnet-format.yml&lt;/code&gt; file:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Define the name of the GitHub Action.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dotnet format&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set that the actions should be triggered by changes on the &lt;code&gt;.editorconfig&lt;/code&gt; or C# sourcecode files (&lt;code&gt;**.cs&lt;/code&gt;).&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt; &lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
   &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**.cs"&lt;/span&gt;
       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.editorconfig"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As, in this case, we are dealing with a .Net Full Framework project - which is developed, compiled and published on Windows - we will keep this environment for checking the code formatting (considering the particular &lt;code&gt;crlf&lt;/code&gt; end-of-line settings as well).&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt; &lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
   &lt;span class="na"&gt;check-format&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;windows-latest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Define the section that will group all the steps performed, detailed in the next items.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;     &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;      
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Setup the dotnet core for later use of the dotnet CLI. Although our project is .Net Full Framework, we were able to use some global dotnet CLI tools for it.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup .NET Core&lt;/span&gt;
         &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-dotnet@v1&lt;/span&gt;
         &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
           &lt;span class="na"&gt;dotnet-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;5.0.x'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the &lt;code&gt;dotnet-format&lt;/code&gt; tool for later use.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install dotnet-format tool&lt;/span&gt;
         &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dotnet tool install -g dotnet-format&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Checks out the code.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Check out code&lt;/span&gt;
         &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the &lt;code&gt;dotnet format&lt;/code&gt; command, for the specified path, only checking code formatting (not changing any files), and setting the maximum verbosity to get a detailed execution report.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run dotnet format&lt;/span&gt;
         &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dotnet format '.\' --folder --check --verbosity diagnostic&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Results
&lt;/h4&gt;

&lt;p&gt;After implementing our code formatting verification step, just open a Pull Request by changing the &lt;code&gt;.editorconfig&lt;/code&gt; file or any C# class (&lt;code&gt;**.cs&lt;/code&gt;) to see the results of GitHub Action execution.&lt;/p&gt;

&lt;h5&gt;
  
  
  Failure ❌
&lt;/h5&gt;

&lt;p&gt;To simulate a failure in a GitHub Action run, I added poorly formatted code to the project repository:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvdvqrvokjv7m5eeo9nw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvdvqrvokjv7m5eeo9nw.png" alt="Poorly formatted code" width="535" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The check failed as the code formatting was not adherent to the &lt;code&gt;.editorconfig&lt;/code&gt; settings, so we got some error messages about the incorrect code spacing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;D:\a\dotnet-full-framework-ci-sandbox\dotnet-full-framework-ci-sandbox\src\Sandbox.WebAPI\Controllers\ValuesController.cs(10,45): &lt;strong&gt;error WHITESPACE: Fix whitespace formatting. Insert '\s'.&lt;/strong&gt; [D:\a\dotnet-full-framework-ci-sandbox\dotnet-full-framework-ci-sandbox]&lt;/p&gt;

&lt;p&gt;D:\a\dotnet-full-framework-ci-sandbox\dotnet-full-framework-ci-sandbox\src\Sandbox.WebAPI\Controllers\ValuesController.cs(10,46): &lt;strong&gt;error WHITESPACE: Fix whitespace formatting. Insert '\s'.&lt;/strong&gt; [D:\a\dotnet-full-framework-ci-sandbox\dotnet-full-framework-ci-sandbox]&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The check failure was displayed on Pull Request:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8rx6je8ap6ougwf75z5.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8rx6je8ap6ougwf75z5.PNG" alt="Failure" width="800" height="601"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see the complete logging of the failed execution &lt;a href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/runs/3237686242?check_suite_focus=true" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h5&gt;
  
  
  Success ✔️
&lt;/h5&gt;

&lt;p&gt;We fixed the code formatting, according to what was reported by the &lt;code&gt;dotnet format&lt;/code&gt; tool.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu20fh0nsc3v7y1rti84h.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu20fh0nsc3v7y1rti84h.PNG" alt="Fix code formatting" width="800" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the code was fixed, the check passed successfully, as we can see directly on the PR screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F405n8leb6xgzh95z13ve.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F405n8leb6xgzh95z13ve.PNG" alt="Success" width="800" height="668"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see the complete logging of the succeded execution &lt;a href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/runs/3237725396?check_suite_focus=true" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The project
&lt;/h2&gt;

&lt;p&gt;Curious about the project? This one is the repository where all the code is available:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/felipetofoli" rel="noopener noreferrer"&gt;
        felipetofoli
      &lt;/a&gt; / &lt;a href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox" rel="noopener noreferrer"&gt;
        dotnet-full-framework-ci-sandbox
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      This repository aims to show how to create GitHub Actions to:  Build and Test a .Net Full Framework Web API project; Check the code formatting (.NET / C#); Run SonarQube code static analysis.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;GitHub Actions for .Net Full Framework: Build &amp;amp; Test&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/actions/workflows/ci.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/actions/workflows/ci.yml/badge.svg" alt="Build and Tests"&gt;&lt;/a&gt; &lt;a href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/actions/workflows/dotnet-format.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/actions/workflows/dotnet-format.yml/badge.svg" alt="dotnet format"&gt;&lt;/a&gt; &lt;a href="https://sonarcloud.io/dashboard?id=felipetofoli_dotnet-full-framework-ci-sandbox" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7ef0a20ae849c40ee96195c38e89358f02835a0ecc764232b7721c04a21ce000/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d66656c697065746f666f6c695f646f746e65742d66756c6c2d6672616d65776f726b2d63692d73616e64626f78266d65747269633d616c6572745f737461747573" alt="Quality Gate Status"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This repository aims to show how to create &lt;strong&gt;GitHub Actions&lt;/strong&gt; to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Build and Test&lt;/strong&gt; a &lt;strong&gt;.Net Full Framework&lt;/strong&gt; Web API project;&lt;/li&gt;
&lt;li&gt;Check the &lt;strong&gt;code formatting&lt;/strong&gt; (.NET / C#);&lt;/li&gt;
&lt;li&gt;Run &lt;strong&gt;SonarQube&lt;/strong&gt; code static analysis.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;--&lt;/p&gt;
&lt;p&gt;🇧🇷
O propósito deste repositório é apresentar a criação de &lt;strong&gt;GitHub Actions&lt;/strong&gt; para um projeto de Web API &lt;strong&gt;.Net Full Framework&lt;/strong&gt;, contemplando as etapas de:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Build e Teste&lt;/strong&gt; da aplicação;&lt;/li&gt;
&lt;li&gt;Verificação da &lt;strong&gt;formatação do código&lt;/strong&gt; (.NET / C#) da aplicação;&lt;/li&gt;
&lt;li&gt;Executar análise estática de código via &lt;strong&gt;SonarQube&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;Please, consider leaving a ⭐ in the repository it it helps you! ❤️ &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion 🎯
&lt;/h2&gt;

&lt;p&gt;Maintaining a large codebase, ensuring its quality and that it meets the defined formatting standards, is a big challenge.&lt;/p&gt;

&lt;p&gt;Building a flow that automatically performs these steps is very important to keep the maintenance process easier and more sustainable. &lt;/p&gt;

&lt;p&gt;Using GitHub Actions with the &lt;code&gt;dotnet format&lt;/code&gt; command helps achieve these goals in a simple and automated way.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>csharp</category>
      <category>github</category>
      <category>formatting</category>
    </item>
    <item>
      <title>GitHub Actions for .Net Full Framework: Build and Test</title>
      <dc:creator>Felipe Tófoli</dc:creator>
      <pubDate>Mon, 07 Jun 2021 16:04:38 +0000</pubDate>
      <link>https://dev.to/felipetofoli/github-actions-for-net-full-framework-build-and-test-299h</link>
      <guid>https://dev.to/felipetofoli/github-actions-for-net-full-framework-build-and-test-299h</guid>
      <description>&lt;h2&gt;
  
  
  Can we create GitHub Actions to Build and Test .Net Full Framework projects?
&lt;/h2&gt;

&lt;p&gt;✅ YES, we can! And I will show you how I did it.&lt;/p&gt;

&lt;h2&gt;
  
  
  But first, let me give you some context 💭
&lt;/h2&gt;

&lt;p&gt;I recently had to deal with a legacy code base of a .Net Full Framework project.&lt;/p&gt;

&lt;p&gt;The source code was versioned on GitHub and there was a pull request and code review flow for integrating source code into the main branch. However, there were no checks to verify the code that was being integrated, which would allow source code that did not compile, or that broke unit tests, to be included in our main branch without any alerts.&lt;/p&gt;

&lt;p&gt;The absence of quick feedback on the health of the integrated source code created some sense of insecurity in the developers during the approval of the pull requests, since problems inserted through the addition of new code could take much longer than desired to be identified.&lt;/p&gt;

&lt;p&gt;In order to improve our workflow, I thought about creating a CI workflow with &lt;a href="https://docs.github.com/en/actions" rel="noopener noreferrer"&gt;GitHub Actions&lt;/a&gt; to speed up the flow of feedback during our source code integrations.&lt;/p&gt;

&lt;p&gt;When checking the &lt;a href="https://docs.github.com/en/actions/guides/building-and-testing-net" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; of GitHub Actions, I realized that there was no template for creating a workflow for .Net Full Framework projects. And then I asked the same question at the beginning of this text:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt; &lt;br&gt;
Can we create GitHub Actions to Build and Test .Net Full Framework projects?&lt;br&gt;
 &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Throughout my research journey, I discovered some resources, both official and from the community:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/marketplace/actions/setup-msbuild" rel="noopener noreferrer"&gt;setup-msbuild&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/marketplace/actions/setup-nuget-exe-for-use-with-actions" rel="noopener noreferrer"&gt;setup-nuget&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/marketplace/actions/setup-vstest-console-exe" rel="noopener noreferrer"&gt;Setup-VSTest&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The use of the above actions allowed me to create the CI pipeline for my .Net Full Framework project. I configured the CI pipeline to be triggered by each new &lt;code&gt;push&lt;/code&gt; or &lt;code&gt;pull request&lt;/code&gt; in the main branch, as shown in the &lt;code&gt;ci.yml&lt;/code&gt; file below:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;




&lt;h2&gt;
  
  
  Understanding the created action
&lt;/h2&gt;

&lt;p&gt;Below, step-by-step explanation of the &lt;code&gt;ci.yml&lt;/code&gt; file:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Define the name of the GitHub Action.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build and Tests&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set that the actions should be triggered by &lt;code&gt;push&lt;/code&gt; and creation of &lt;code&gt;pull requests&lt;/code&gt; for the branch &lt;code&gt;main&lt;/code&gt; (default branch of this project).&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt; &lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;  
   &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;main&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;
   &lt;span class="na"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;main&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The build and test will be performed on a Windows operating system, because we are dealing with .Net Full Framework (which does not support other operating systems).&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt; &lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;  
   &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;    
     &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;windows-latest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Define the section that will group all the steps performed, detailed in the next items.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;     &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;      
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Checkout the code.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MSBuild setup, for later use.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup MSBuild&lt;/span&gt;
         &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;microsoft/setup-msbuild@v1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Nuget setup, for later use.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup NuGet&lt;/span&gt;
         &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;NuGet/setup-nuget@v1.0.5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;VSTest setup, for later use.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup VSTest&lt;/span&gt;
         &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;darenm/Setup-VSTest@v1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Navigate to the GitHub workspace to start the restore, build and test of the application.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Navigate to Workspace&lt;/span&gt;
         &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cd $GITHUB_WORKSPACE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;nuget&lt;/code&gt; to restore packages used by the application.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Restore Packages&lt;/span&gt;
         &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nuget restore Sandbox.sln&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Build the solution with &lt;code&gt;msbuild.exe&lt;/code&gt;, release mode.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build Solution&lt;/span&gt;
         &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
           &lt;span class="s"&gt;msbuild.exe Sandbox.sln /p:platform="Any CPU" /p:configuration="Release"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the tests of the &lt;code&gt;Sandbox.Tests.dll&lt;/code&gt;, using &lt;code&gt;vstest.console.exe&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run Tests&lt;/span&gt;
         &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;vstest.console.exe .\tests\Sandbox.Tests\bin\Release\Sandbox.Tests.dll&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;After we implanted our CI pipeline, just open a &lt;code&gt;pull request&lt;/code&gt; too see the result of our implementation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Opened PR, actions pending execution
&lt;/h3&gt;

&lt;p&gt;When opening a &lt;code&gt;pull request&lt;/code&gt;, we can now see that some checks are pending execution.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi31470sqc7nq55njimb8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi31470sqc7nq55njimb8.png" alt="Actions pending execution" width="800" height="569"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Opened PR, actions performed
&lt;/h3&gt;

&lt;p&gt;After the execution of our checks, the result is already shown on the PR page. Now that the checks are ok, the &lt;code&gt;Merge pull request&lt;/code&gt; button is highlighted.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdj9fc848hq5ld86y118l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdj9fc848hq5ld86y118l.png" alt="Actions performed, result ok" width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Details of actions performed
&lt;/h3&gt;

&lt;p&gt;When analyzing the checks tab, we can verify the execution step-by-step.&lt;br&gt;
If there was any failure, on this page it would be possible to check which step was broken and analyze the logs to identify the error.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7yh5ny7wi4gq99h9wo9s.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7yh5ny7wi4gq99h9wo9s.PNG" alt="Details of actions performed" width="800" height="603"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you got curious to browse a page with details of the actions' executions, &lt;a href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/pull/6/checks" rel="noopener noreferrer"&gt;here you can find a successful execution&lt;/a&gt;, and &lt;a href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/runs/2357988527?check_suite_focus=true" rel="noopener noreferrer"&gt;here you find a failed execution&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  The project
&lt;/h2&gt;

&lt;p&gt;Are you curious about the project? This is the repository where all the source code is available:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/felipetofoli" rel="noopener noreferrer"&gt;
        felipetofoli
      &lt;/a&gt; / &lt;a href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox" rel="noopener noreferrer"&gt;
        dotnet-full-framework-ci-sandbox
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      This repository aims to show how to create GitHub Actions to:  Build and Test a .Net Full Framework Web API project; Check the code formatting (.NET / C#); Run SonarQube code static analysis.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;GitHub Actions for .Net Full Framework: Build &amp;amp; Test&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/actions/workflows/ci.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/actions/workflows/ci.yml/badge.svg" alt="Build and Tests"&gt;&lt;/a&gt; &lt;a href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/actions/workflows/dotnet-format.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/actions/workflows/dotnet-format.yml/badge.svg" alt="dotnet format"&gt;&lt;/a&gt; &lt;a href="https://sonarcloud.io/dashboard?id=felipetofoli_dotnet-full-framework-ci-sandbox" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7ef0a20ae849c40ee96195c38e89358f02835a0ecc764232b7721c04a21ce000/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d66656c697065746f666f6c695f646f746e65742d66756c6c2d6672616d65776f726b2d63692d73616e64626f78266d65747269633d616c6572745f737461747573" alt="Quality Gate Status"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This repository aims to show how to create &lt;strong&gt;GitHub Actions&lt;/strong&gt; to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Build and Test&lt;/strong&gt; a &lt;strong&gt;.Net Full Framework&lt;/strong&gt; Web API project;&lt;/li&gt;
&lt;li&gt;Check the &lt;strong&gt;code formatting&lt;/strong&gt; (.NET / C#);&lt;/li&gt;
&lt;li&gt;Run &lt;strong&gt;SonarQube&lt;/strong&gt; code static analysis.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;--&lt;/p&gt;
&lt;p&gt;🇧🇷
O propósito deste repositório é apresentar a criação de &lt;strong&gt;GitHub Actions&lt;/strong&gt; para um projeto de Web API &lt;strong&gt;.Net Full Framework&lt;/strong&gt;, contemplando as etapas de:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Build e Teste&lt;/strong&gt; da aplicação;&lt;/li&gt;
&lt;li&gt;Verificação da &lt;strong&gt;formatação do código&lt;/strong&gt; (.NET / C#) da aplicação;&lt;/li&gt;
&lt;li&gt;Executar análise estática de código via &lt;strong&gt;SonarQube&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;
 

&lt;p&gt;Please, consider leaving a ⭐ in the repository it it helps you! ❤️&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion 🎯
&lt;/h2&gt;

&lt;p&gt;Dealing with legacy code can be very complicated, so proposing workflow improvements can help us dramatically change the reality of the project, by encouraging quick feedback and mitigating points of insecurity that harm the development team.&lt;/p&gt;

&lt;p&gt;GitHub Actions are very useful tools for automating CI processes. Although it does not contain an initial template in the official documentation, it is possible to create workflows with GitHub Actions for .Net Full Framework, thanks to the official actions and also those created and made available by the community.&lt;/p&gt;

&lt;p&gt;I had some work to get my CI pipeline viable, if you have any problems in the implementation of yours and want to share in the comments of this post, I will be happy to help you.&lt;/p&gt;

&lt;p&gt;Bye! 😉 😘&lt;/p&gt;

&lt;p&gt;…&lt;/p&gt;

&lt;p&gt;⚠️ It is worth remembering that, before using the workflow, it is important to check if it and its dependencies are in accordance with the project policies where you want to apply them. ⚠️&lt;/p&gt;

</description>
      <category>devops</category>
      <category>dotnet</category>
      <category>github</category>
      <category>ci</category>
    </item>
    <item>
      <title>[PT-BR] GitHub Actions para .Net Full Framework: Build e Teste</title>
      <dc:creator>Felipe Tófoli</dc:creator>
      <pubDate>Mon, 07 Jun 2021 14:35:35 +0000</pubDate>
      <link>https://dev.to/felipetofoli/github-actions-for-net-full-framework-build-test-4nal</link>
      <guid>https://dev.to/felipetofoli/github-actions-for-net-full-framework-build-test-4nal</guid>
      <description>&lt;p&gt;English version / Versão em inglês: &lt;a href="https://dev.to/felipetofoli/github-actions-for-net-full-framework-build-and-test-299h"&gt;"GitHub Actions for .Net Full Framework: Build and Test"&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  É possível criar GitHub Actions de Build e Test para projetos .Net Full Framework?
&lt;/h2&gt;

&lt;p&gt;✅ Sim, é possível! E vou te mostrar como eu fiz.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mas antes, um pouco de contexto. 💭
&lt;/h2&gt;

&lt;p&gt;Recentemente tive que mexer em uma base de código legado de um projeto em .Net Full Framework.&lt;/p&gt;

&lt;p&gt;O código estava versionado no GitHub e apresentava um fluxo de pull request e code review para integração de código na branch principal. Porém, não havia checks para verificação do código que estava sendo integrado, o que permitiria que códigos que não compilassem, ou que quebrassem os testes unitários, fossem incluídos na nossa branch principal sem nenhum alerta.&lt;/p&gt;

&lt;p&gt;A ausência do feedback rápido sobre a saúde do código integrado gerava insegurança nos desenvolvedores durante a aprovação dos pull requests, pois problemas inseridos por meio da adição de novos códigos poderiam demorar muito mais tempo do que o desejado para serem identificados.&lt;/p&gt;

&lt;p&gt;Com o intuito de melhorar nosso fluxo de trabalho, pensei em criar um workflow de CI com &lt;a href="https://docs.github.com/en/actions" rel="noopener noreferrer"&gt;GitHub Actions&lt;/a&gt; para acelerar o fluxo de feedback durante as nossas integrações de código.&lt;/p&gt;

&lt;p&gt;Ao verificar a &lt;a href="https://docs.github.com/en/actions/guides/building-and-testing-net" rel="noopener noreferrer"&gt;documentação&lt;/a&gt; das GitHub Actions, percebi que não havia nenhum template para a criação de um fluxo voltado ao .Net Full Framework. E então fiz a mesma pergunta do início do texto:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt; &lt;br&gt;
É possível criar GitHub Actions de Build e Test para projetos .Net Full Framework?&lt;br&gt;
 &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ao longo de minha jornada de pesquisa, descobri alguns recursos, oficiais e da comunidade: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/marketplace/actions/setup-msbuild" rel="noopener noreferrer"&gt;setup-msbuild&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/marketplace/actions/setup-nuget-exe-for-use-with-actions" rel="noopener noreferrer"&gt;setup-nuget&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/marketplace/actions/setup-vstest-console-exe" rel="noopener noreferrer"&gt;Setup-VSTest&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A utilização destas actions me possibilitou criar o fluxo de CI para .Net Full Framework que é disparado a cada nova integração via push ou pull request na branch main, conforme arquivo &lt;code&gt;ci.yml&lt;/code&gt; abaixo:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Entendendo a action criada
&lt;/h2&gt;

&lt;p&gt;Abaixo, explicação passo-a-passo do arquivo &lt;code&gt;ci.yml&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Nome da GitHub Action.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build and Tests&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Estabelecendo que as actions devem ser executadas quando houver pushes e criação de pull requests para a branch main (branch default deste projeto).&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt; &lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;  
   &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;main&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;
   &lt;span class="na"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;main&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;O build e teste serão executados em um sistema operacional Windows, afinal estamos lidando com .Net Full Framework (que não oferece suporte a outros sistemas operacionais).&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt; &lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;  
   &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;    
     &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;windows-latest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;É definida a seção que vai agrupar todos os passos executados, detalhados nos próximos items.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;     &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;      
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Faz o checkout do código.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Faz o setup do MSBuild para uso posterior.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup MSBuild&lt;/span&gt;
         &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;microsoft/setup-msbuild@v1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Faz o setup do Nuget para uso posterior.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup NuGet&lt;/span&gt;
         &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;NuGet/setup-nuget@v1.0.5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Faz o setup do VSTest para uso posterior.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup VSTest&lt;/span&gt;
         &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;darenm/Setup-VSTest@v1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Navega para o workspace do GitHub para iniciar o restore, build e teste da aplicação.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Navigate to Workspace&lt;/span&gt;
         &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cd $GITHUB_WORKSPACE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Usa o nuget para fazer restore dos pacotes utilizados pela aplicação.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Restore Packages&lt;/span&gt;
         &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nuget restore Sandbox.sln&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Compila o código do projeto com o msbuild, em modo release.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build Solution&lt;/span&gt;
         &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
           &lt;span class="s"&gt;msbuild.exe Sandbox.sln /p:platform="Any CPU" /p:configuration="Release"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Executa os testes do projeto &lt;code&gt;Sandbox.Tests.dll&lt;/code&gt;, utilizando o vstest.console.exe.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;       &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run Tests&lt;/span&gt;
         &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;vstest.console.exe .\tests\Sandbox.Tests\bin\Release\Sandbox.Tests.dll&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Resultados
&lt;/h2&gt;

&lt;p&gt;Após a implantação do nosso CI, basta abrirmos um PR para ver o resultado da nossa implementação.&lt;/p&gt;

&lt;h3&gt;
  
  
  PR aberto, actions pendentes de execução
&lt;/h3&gt;

&lt;p&gt;Ao abrir um PR, agora podemos ver que alguns checks estão pendentes de execução.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi31470sqc7nq55njimb8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi31470sqc7nq55njimb8.png" alt="Imagem com actions pendentes de execução"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  PR aberto, actions executadas
&lt;/h3&gt;

&lt;p&gt;Após a execução dos nossos checks, o resultado já é mostrado na própria página do PR. Dá pra perceber que após verificar que os checks estão ok, o botão de &lt;code&gt;Merge pull request&lt;/code&gt; ganhou até um destaque.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdj9fc848hq5ld86y118l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdj9fc848hq5ld86y118l.png" alt="Imagem com action executada e resultado ok"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Detalhes das actions executadas
&lt;/h3&gt;

&lt;p&gt;Ao analisar a aba de checks, é possível verificar passo-a-passo a execução. Se houvesse qualquer falha, nessa página seria possível verificar qual passo quebrou e analisar os logs para identificar o erro.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7yh5ny7wi4gq99h9wo9s.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7yh5ny7wi4gq99h9wo9s.PNG" alt="Imagem apresentando a tela de detalhe da execução da action"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se ficou curioso pra navegar em uma página com os detalhes das execuções das actions, &lt;a href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/pull/6/checks" rel="noopener noreferrer"&gt;aqui você encontra uma execução com sucesso&lt;/a&gt;, e &lt;a href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/runs/2357988527?check_suite_focus=true" rel="noopener noreferrer"&gt;aqui encontra uma execução com falhas&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Projeto completo
&lt;/h2&gt;

&lt;p&gt;Ficou curioso sobre o projeto? Este aqui é o repositório onde todo o código está disponível:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/felipetofoli" rel="noopener noreferrer"&gt;
        felipetofoli
      &lt;/a&gt; / &lt;a href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox" rel="noopener noreferrer"&gt;
        dotnet-full-framework-ci-sandbox
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      This repository aims to show how to create GitHub Actions to:  Build and Test a .Net Full Framework Web API project; Check the code formatting (.NET / C#); Run SonarQube code static analysis.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;GitHub Actions for .Net Full Framework: Build &amp;amp; Test&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/actions/workflows/ci.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/actions/workflows/ci.yml/badge.svg" alt="Build and Tests"&gt;&lt;/a&gt; &lt;a href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/actions/workflows/dotnet-format.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox/actions/workflows/dotnet-format.yml/badge.svg" alt="dotnet format"&gt;&lt;/a&gt; &lt;a href="https://sonarcloud.io/dashboard?id=felipetofoli_dotnet-full-framework-ci-sandbox" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7ef0a20ae849c40ee96195c38e89358f02835a0ecc764232b7721c04a21ce000/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d66656c697065746f666f6c695f646f746e65742d66756c6c2d6672616d65776f726b2d63692d73616e64626f78266d65747269633d616c6572745f737461747573" alt="Quality Gate Status"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This repository aims to show how to create &lt;strong&gt;GitHub Actions&lt;/strong&gt; to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Build and Test&lt;/strong&gt; a &lt;strong&gt;.Net Full Framework&lt;/strong&gt; Web API project;&lt;/li&gt;
&lt;li&gt;Check the &lt;strong&gt;code formatting&lt;/strong&gt; (.NET / C#);&lt;/li&gt;
&lt;li&gt;Run &lt;strong&gt;SonarQube&lt;/strong&gt; code static analysis.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;--&lt;/p&gt;
&lt;p&gt;🇧🇷
O propósito deste repositório é apresentar a criação de &lt;strong&gt;GitHub Actions&lt;/strong&gt; para um projeto de Web API &lt;strong&gt;.Net Full Framework&lt;/strong&gt;, contemplando as etapas de:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Build e Teste&lt;/strong&gt; da aplicação;&lt;/li&gt;
&lt;li&gt;Verificação da &lt;strong&gt;formatação do código&lt;/strong&gt; (.NET / C#) da aplicação;&lt;/li&gt;
&lt;li&gt;Executar análise estática de código via &lt;strong&gt;SonarQube&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/felipetofoli/dotnet-full-framework-ci-sandbox" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;
 

&lt;p&gt;Por favor, considere deixar uma ⭐ no repositório se ele te ajudar! ❤️&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão 🎯
&lt;/h2&gt;

&lt;p&gt;Lidar com código legado pode ser muito complicado, então propor melhorias no fluxo de trabalho pode nos ajudar a mudar drasticamente a realidade do projeto, ao incentivar o feedback rápido e mitigar pontos de insegurança que prejudicam o time de desenvolvimento.&lt;/p&gt;

&lt;p&gt;As GitHub Actions são ferramentas muito úteis para automação de processos de CI. Apesar de não conter um template inicial na documentação oficial, é possível criar workflows com GitHub Actions para .Net Full Framework, graças às actions oficiais e também às criadas e disponibilizadas pela comunidade.&lt;/p&gt;

&lt;p&gt;Eu tive algum trabalho para conseguir viabilizar meu pipeline de CI, se você tiver qualquer problema na implementação do seu e quiser compartilhar nos comentários deste post, ficarei feliz em poder ajudá-lo.&lt;/p&gt;

&lt;p&gt;Um abraço! 😉 😘&lt;/p&gt;

&lt;p&gt;…&lt;/p&gt;

&lt;p&gt;⚠️ Vale lembrar que, antes de utilizar o workflow, é importante consultar se ele e as suas dependências estão de acordo com as políticas do projeto onde você deseja aplicá-los. ⚠️&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Eventos Scrum: um relato de experiência</title>
      <dc:creator>Felipe Tófoli</dc:creator>
      <pubDate>Tue, 13 Apr 2021 12:06:58 +0000</pubDate>
      <link>https://dev.to/felipetofoli/eventos-scrum-um-relato-de-experiencia-2i49</link>
      <guid>https://dev.to/felipetofoli/eventos-scrum-um-relato-de-experiencia-2i49</guid>
      <description>&lt;p&gt;Semanas atrás, algumas pessoas do meu time que não tiveram muito contato com metodologias ágeis pediram que eu contasse um pouco sobre a aplicação do Scrum nos meus projetos anteriores, evidenciando sobre como os eventos scrum eram tocados.&lt;/p&gt;

&lt;p&gt;Percebi que contar um pouco sobre minhas experiências positivas em times que aplicavam Scrum é uma tarefa recorrente, então decidi escrever sobre isso! 😃&lt;/p&gt;

&lt;h3&gt;
  
  
  Atenção!
&lt;/h3&gt;

&lt;p&gt;⚠️ &amp;gt;&amp;gt;&lt;br&gt;
Este texto não irá debater ou apresentar definições. Caso tenha interesse nas definições sobre os eventos citados, recomendo consultar o &lt;a href="https://www.scrumguides.org/scrum-guide.html"&gt;Scrum Guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;E se você está começando a estudar sobre agilidade, vale  consultar o &lt;a href="https://agilemanifesto.org/iso/ptbr/manifesto.html"&gt;Manifesto ágil&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Agilidade não se resume a Scrum.&lt;/p&gt;

&lt;p&gt;Algumas das práticas apresentadas no texto funcionavam bem em determinados contextos. Os desafios e as escolhas que são feitas dependem muito das pessoas e do contexto.&lt;br&gt;
Não existe uma solução geral (&lt;a href="http://worrydream.com/refs/Brooks-NoSilverBullet.pdf"&gt;bala de prata&lt;/a&gt;) que funcione para todos os casos.&lt;br&gt;
&amp;lt;&amp;lt; ⚠️&lt;/p&gt;

&lt;h2&gt;
  
  
  Eventos Scrum
&lt;/h2&gt;

&lt;p&gt;Os seguintes eventos são citados no Scrum Guide e apresentados na sequência do texto:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sprint&lt;/li&gt;
&lt;li&gt;Sprint Planning&lt;/li&gt;
&lt;li&gt;Daily Scrum&lt;/li&gt;
&lt;li&gt;Sprint Review&lt;/li&gt;
&lt;li&gt;Sprint Retrospective&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Além dos eventos citados no Scrum Guide, será apresentada também a dinâmica de um Refinamento.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Sprint 🏃
&lt;/h3&gt;

&lt;p&gt;⌛ 2 semanas (geralmente, no meu caso)&lt;br&gt;
É quando o que foi planejado é executado. Para melhorar a agilidade no desenvolvimento de software costumávamos nos valer de testes automatizados (como documentação viva do código, segurança para o time fazer as alterações necessárias no código), CI/CD (facilitando o processo de deployment de software) e técnicas como pair programming.&lt;br&gt;
Quando itens inesperados surgiam, o "objetivo do sprint" era utilizado como critério para decisão da priorização entre itens planejados e não planejados. Quando os itens não planejados eram adicionados ao "Sprint Backlog", algum item planejado era despriorizado, para não onerar o time. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Sprint Planning 🎯
&lt;/h3&gt;

&lt;p&gt;📅 Após a retrospectiva&lt;br&gt;
⌛ 2h-4h&lt;br&gt;
Nas sessões de planejamento do sprint os itens refinados (aptos a serem desenvolvidos no próximo sprint) eram revisados. Os itens eram puxados pelo time de desenvolvimento, conforme a priorização estabelecida no product backlog, de acordo com o quanto o time acreditava que conseguiria produzir e se comprometer.&lt;br&gt;
Para ajudar a entender, e obter certa previsibilidade, sobre o quanto um time costumava produzir durante um sprint, algumas equipes utilizavam sistemas de estimativas e técnicas: story points, tamanhos de camiseta (P, M, G), planning poker.&lt;br&gt;
Ao término da sessão de planejamento do sprint, o time saía com a definição do "objetivo do sprint", que ajudaria o time a se organizar e inspecionar constantemente se as ações tomadas durante o sprint estão contribuindo para o atingimento do objetivo. A definição do objetivo sprint era muito útil para tomadas de decisão sobre a priorização dos itens no decorrer do sprint, conforme itens inesperados surgiam.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Daily Scrum 🔁
&lt;/h3&gt;

&lt;p&gt;📅 Diariamente&lt;br&gt;
⌛ Até 15 minutos&lt;br&gt;
As dailies tinham foco em traçar o plano para as próximas 24h e avaliar se estávamos continuamente avançando em busca do objetivo do sprint. Impedimentos eram declarados e as pessoas se organizavam para superar os bloqueios ou notificar quem fosse necessário.&lt;br&gt;
Quando trabalhando com times distribuídos, geralmente os times faziam a daily olhando para as tasks no board, desta forma trabalhos invisíveis eram identificados (e cadastrados no Jira), o quadro era atualizado diariamente, verificava-se quais os cards estavam parados há muito tempo, era possível notar em uma cadência diária se o time estava se aproximando do objetivo traçado no Sprint Planning, em vez de perceber isso apenas no Review.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Sprint Review 🎁
&lt;/h3&gt;

&lt;p&gt;📅 No término do sprint&lt;br&gt;
⌛ 1h-2h&lt;br&gt;
Neste evento, apresentávamos as entregas do time e o valor que foi gerado, com foco em dar visibilidade do que foi feito e compartilhar o conhecimento entre todos. Além de fazer uma "demo", era importante contar com feedbacks e insights do time que ajudavam a definir melhorias, mudanças e os próximos passos que poderiam ser priorizados (resultando na atualização do Product Backlog).&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Sprint Retrospective 📣
&lt;/h3&gt;

&lt;p&gt;📅 Após o sprint review&lt;br&gt;
⌛ 1h-1h30&lt;br&gt;
Constituía na etapa de inspeção contínua do ciclo, uma oportunidade para notar o que estava dando certo e tínhamos interesse em continuar fazendo, e também identificar o que não estava tão legal e queríamos melhorar.&lt;br&gt;
O ponto chave aqui era extrapolar os próprios pontos, e elaborar planos de ação do time que seriam acompanhados e monitorados. Os formatos variavam de conversas casuais à clássica utilização do board (utilizávamos &lt;a href="http://funretro.io/"&gt;esse board online&lt;/a&gt;). Tinha um pessoal que gostava de acessar &lt;a href="https://www.funretrospectives.com/"&gt;esse site&lt;/a&gt; para aprender novos formatos de retrospectiva. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Refinamento 🔬
&lt;/h3&gt;

&lt;p&gt;📅 Antes do planning &lt;br&gt;
⌛ 1h&lt;br&gt;
Esse evento não está listado no ScrumGuide, mas fazíamos em alguns times (principalmente para os times que precisavam de maior previsibilidade). O objetivo era refinar os itens de backlog.&lt;br&gt;
O refinamento poderia indicar que o item não estava pronto para ser implementado (possivelmente devido a algum pré-requisito não mapeado que faria com que o item ficasse para o próximo sprint), ou que o item era muito grande e poderia ser dividido em mais partes. O refinamento era utilizado também como alinhamento técnico entre os engenheiros que poderiam discutir como o item seria implementado.&lt;br&gt;
Para times que estimavam tarefas, era uma reunião bastante útil, pois as dúvidas eram antecipadas, evitando que as plannings ficassem muito extensas. &lt;/p&gt;

&lt;h2&gt;
  
  
  E você, como aplica os eventos Scrum?
&lt;/h2&gt;

&lt;p&gt;Neste texto pude apresentar algumas experiências que tive aplicando os eventos Scrum no meu dia-a-dia profissional.&lt;/p&gt;

&lt;p&gt;Você aplica de uma forma parecida? De uma forma completamente diferente? Te pareceu interessante ou errado?&lt;br&gt;
Conta pra gente nos comentários! 😉&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Manifesto ágil. Disponível em 16/02/2021: &lt;a href="https://agilemanifesto.org/iso/ptbr/manifesto.html"&gt;https://agilemanifesto.org/iso/ptbr/manifesto.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Scrum guide. Disponível em 16/02/2021: &lt;a href="https://www.scrumguides.org/scrum-guide.html"&gt;https://www.scrumguides.org/scrum-guide.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Frederick P. Brooks. No Silver Bullet. Disponível em 16/02/2021: &lt;a href="http://worrydream.com/refs/Brooks-NoSilverBullet.pdf"&gt;http://worrydream.com/refs/Brooks-NoSilverBullet.pdf&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>scrum</category>
      <category>agile</category>
      <category>ptbr</category>
      <category>agilidade</category>
    </item>
  </channel>
</rss>
