<?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: Devesh Chatuphale</title>
    <description>The latest articles on DEV Community by Devesh Chatuphale (@deveshchatuphale7).</description>
    <link>https://dev.to/deveshchatuphale7</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%2F283263%2Fec1e5fe4-9edf-4391-979a-94061a134716.png</url>
      <title>DEV Community: Devesh Chatuphale</title>
      <link>https://dev.to/deveshchatuphale7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/deveshchatuphale7"/>
    <language>en</language>
    <item>
      <title>GitHub Action to ease debugging of Angular &amp; React projects</title>
      <dc:creator>Devesh Chatuphale</dc:creator>
      <pubDate>Mon, 14 Sep 2020 14:37:53 +0000</pubDate>
      <link>https://dev.to/deveshchatuphale7/github-action-to-create-source-map-build-status-for-angular-application-gmj</link>
      <guid>https://dev.to/deveshchatuphale7/github-action-to-create-source-map-build-status-for-angular-application-gmj</guid>
      <description>&lt;p&gt;While working on an angular application that uses multiple packages &amp;amp; contains handful of modules, each time a new package is added or a particular module is changed significantly, everyone in the team used to generate source map individually &amp;amp; manually for debugging code for redundant use of libraries, module with heavy sizes etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  My Workflow
&lt;/h3&gt;

&lt;p&gt;Hence to address these issues, my workflow generates source map of Angular application on every push to analyze &amp;amp; debug sources as well as origins of all of the code inside modules &amp;amp; components.It also generates a status file which contains an output of build instruction like files generated along with their size &amp;amp; time taken to generate build.&lt;/p&gt;

&lt;p&gt;Once source map files are generated, it then emails the generated files to the email addresses of respective recipients.&lt;/p&gt;

&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;My submission falls under,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maintainer Must-Haves &lt;/li&gt;
&lt;li&gt;Wacky Wildcards&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Yaml File
&lt;/h3&gt;



&lt;div class="highlight"&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;Generate &amp;amp; email source maps for Angular app&lt;/span&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="s"&gt;master&lt;/span&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;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;matrix&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;12.x&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&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@v1&lt;/span&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;Cache node modules&lt;/span&gt;       &lt;span class="c1"&gt;# Caching node modules to speedup workflows&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/cache@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;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;~/.npm&lt;/span&gt;
          &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}&lt;/span&gt;
          &lt;span class="na"&gt;restore-keys&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
            &lt;span class="s"&gt;${{ runner.os }}-node-&lt;/span&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;Node ${{ matrix.node-version }}&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-node@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;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ matrix.node-version }}&lt;/span&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;npm ci&lt;/span&gt; &lt;span class="c1"&gt;# Clean install of dependencies from package.json &amp;amp; generating build of angular app, storing output in text file&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;npm ci&lt;/span&gt;
          &lt;span class="s"&gt;npm run build &amp;gt; "${GITHUB_SHA}-status.txt"&lt;/span&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 source map &amp;amp; generate source maps output&lt;/span&gt;  &lt;span class="c1"&gt;# Installing source-map-explorer &amp;amp; generating output of source map in html,json &amp;amp; tsv with commit SHA as filename&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;npm i -g source-map-explorer&lt;/span&gt;
          &lt;span class="s"&gt;source-map-explorer dist/*.js --html "${GITHUB_SHA}.html"   &lt;/span&gt;
          &lt;span class="s"&gt;source-map-explorer dist/*.js --json "${GITHUB_SHA}.json"&lt;/span&gt;
          &lt;span class="s"&gt;source-map-explorer dist/*.js --tsv "${GITHUB_SHA}.tsv"&lt;/span&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;Send report email&lt;/span&gt; &lt;span class="c1"&gt;# Using action to send email of Build result &amp;amp; source map files to team members, collaborators &amp;amp; contributors&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;dawidd6/action-send-mail@v2&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;server_address&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;smtp.gmail.com&lt;/span&gt;
          &lt;span class="na"&gt;server_port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;465&lt;/span&gt;
          &lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{secrets.EMAIL}}&lt;/span&gt;
          &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{secrets.PWD}}&lt;/span&gt;
          &lt;span class="na"&gt;subject&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Source map &amp;amp; build report&lt;/span&gt;
          &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt;h1&amp;gt; Build results &amp;amp; source map of &amp;lt;b&amp;gt;${{github.repository}}&amp;lt;/b&amp;gt; for commit id &amp;lt;b&amp;gt;${{github.sha}}&amp;lt;/b&amp;gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
          &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{secrets.RECIPIENTS}}&lt;/span&gt;
          &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{secrets.EMAIL}}&lt;/span&gt;
          &lt;span class="na"&gt;content_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;text/html&lt;/span&gt;
          &lt;span class="na"&gt;attachments&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{github.sha}}.html,${{github.sha}}.json,${{github.sha}}.tsv,${{github.sha}}-status.txt&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Workflow mainly contains following steps&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Initially, workflow sets up node environment using &lt;a href="https://github.com/marketplace/actions/cache"&gt;cache&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/marketplace/actions/setup-node-js-environment"&gt;node setup&lt;/a&gt; actions, installs dependencies for application followed by running build command &amp;amp; storing execution results of commands in a text file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It then runs command to generate source map using &lt;a href="https://www.npmjs.com/package/source-map-explorer"&gt;source-map-explorer&lt;/a&gt; &amp;amp; stores the result in json, html &amp;amp; tsv files with commit id SHA as a file name.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally, &lt;a href="https://github.com/marketplace/actions/send-email"&gt;send email&lt;/a&gt; action sends an email containing the build status file along with source map files to the configured recipients &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1u3O_hJ4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z6uuu4uo01kdf1ew1o4d.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1u3O_hJ4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z6uuu4uo01kdf1ew1o4d.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Github repository with example code
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/deveshchatuphale7"&gt;
        deveshchatuphale7
      &lt;/a&gt; / &lt;a href="https://github.com/deveshchatuphale7/sourcemap-action"&gt;
        sourcemap-action
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Actionstest&lt;/h1&gt;
&lt;p&gt;This repository contians sample Angular 10 application with a source map generation actions workflow file actions.yml&lt;/p&gt;
&lt;p&gt;On each commit on the branch master, the workflow generates build for the angular application, on successful generation of build files, workflow creates build status file containing name &amp;amp; size details of each file generated along with time taken to generate build. Along with that, it creates source map of the build files in the format of json, html &amp;amp; tsv with commit SHA as a name of the files.&lt;/p&gt;
&lt;p&gt;At last,  workflow sends an email of the generated source map files to the configured email addresses of developers, collaborators etc.&lt;/p&gt;
&lt;/div&gt;

  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/deveshchatuphale7/sourcemap-action"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Thank You!&lt;/p&gt;

</description>
      <category>actionshackathon</category>
    </item>
  </channel>
</rss>
