<?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: Blair Lierman</title>
    <description>The latest articles on DEV Community by Blair Lierman (@blairlierman).</description>
    <link>https://dev.to/blairlierman</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%2F325446%2Fb6859496-6816-4bba-bd75-7abd297e8668.jpeg</url>
      <title>DEV Community: Blair Lierman</title>
      <link>https://dev.to/blairlierman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/blairlierman"/>
    <language>en</language>
    <item>
      <title>Turn your Single Page Application into an Artifact with Azure DevOps</title>
      <dc:creator>Blair Lierman</dc:creator>
      <pubDate>Thu, 06 Jan 2022 16:25:57 +0000</pubDate>
      <link>https://dev.to/blairlierman/turn-your-single-page-application-into-an-artifact-with-azure-devops-4a05</link>
      <guid>https://dev.to/blairlierman/turn-your-single-page-application-into-an-artifact-with-azure-devops-4a05</guid>
      <description>&lt;p&gt;In order to use the output from a build in Azure DevOps later, you need to publish it as a Build Artifact. This article will show you how to configure that.&lt;/p&gt;

&lt;p&gt;This examples uses an Angular based Single Page Application (SPA) build using the &lt;a href="https://nx.dev" rel="noopener noreferrer"&gt;Nx monorepo tools&lt;/a&gt;, however the general process can be applied to any SPA framework once you know the build commands.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a new Azure Pipeline
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In Azure DevOps, go to Pipelines &amp;gt; Pipelines&lt;/li&gt;
&lt;li&gt;Select 'New Pipeline" (or "Create Pipeline if you don't have one)
&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%2F8r1pgc5jdsvk36tekvnt.png" alt="Arrows pointing to New Pipeline and Create Pipeline button in Azure DevOps"&gt; &lt;/li&gt;
&lt;li&gt;Connect to your Repo

&lt;ul&gt;
&lt;li&gt;Mine is in Azure Repos Git, so I will be using that
&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%2Fs4z5xicsx6zhs8040vvj.png" alt="List of Repo Options in Azure DevOps with Azure Repos Git circled"&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Select your Repo&lt;/li&gt;
&lt;li&gt;Configure your pipeline template

&lt;ul&gt;
&lt;li&gt;I selected the "Node.js with Angular" option for my example, however any of the Node.js options should work
&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%2Ff36hvxa8sqw481vnfrg2.png" alt="Azure DevOps Pipeline Templates List"&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Complete Review, then Save (not "Save and Run") your pipeline

&lt;ul&gt;
&lt;li&gt;I created a new folder for mine and gave it a unique name&lt;/li&gt;
&lt;li&gt;I also recommend creating a new branch while testing, as best practice&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Install Node, npm, and your Command Line Interface (CLI)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Update the NodeTool task to your Node Version

&lt;ol&gt;
&lt;li&gt;I used Node 14, as that matches my project's environment&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Create 'npm install CLI' script task&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add a new &lt;code&gt;script&lt;/code&gt; task above the 'npm install and build' script task&lt;/li&gt;
&lt;li&gt;Set the first line to &lt;code&gt;npm install -g &amp;lt;ListOfCLIs&amp;gt;&lt;/code&gt; to include the CLI(s) that you will need on the machine to build your project

&lt;ol&gt;
&lt;li&gt;I needed the Angular (&lt;code&gt;@angular/cli&lt;/code&gt;) and Nx (&lt;code&gt;@nrwl/cli&lt;/code&gt;) CLIs for my project&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;Specify the version of the CLI(s) to match your project

&lt;ol&gt;
&lt;li&gt;Mine used version 12 for both Angular and Nx&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;Update the displayName to &lt;code&gt;npm install &amp;lt;yourCLIName&amp;gt; CLI&lt;/code&gt;

&lt;ol&gt;
&lt;li&gt;In my example, I used &lt;code&gt;npm install Angular CLI and Nx CLI&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;Final script task should look like:
&lt;/li&gt;

&lt;/ol&gt;

&lt;pre class="highlight yaml"&gt;&lt;code&gt; &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;script&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 install -g @angular/cli@12 @nrwl/cli@12&lt;/span&gt;
   &lt;span class="na"&gt;displayName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;npm&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;install&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Angular&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;CLI&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Nx&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;CLI'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Update the 'npm install and build' script task&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Simplify the task to just &lt;code&gt;npm install&lt;/code&gt; (we are already install the global tools needed in the step above)&lt;/li&gt;
&lt;li&gt; Task should look like this:
&lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;script&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 install&lt;/span&gt;
  &lt;span class="na"&gt;displayName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;npm&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;install'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ol&gt;

&lt;h2&gt;
  
  
  Update the Pipeline to Build and Publish
&lt;/h2&gt;

&lt;p&gt;I have two different environments that I wanted to build and publish, 'staging' and 'production', so I am going to do this twice and use separate subfolders for each one. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Create 'build staging' task

&lt;ol&gt;
&lt;li&gt;  Copy the 'npm install' script task and paste a new copy&lt;/li&gt;
&lt;li&gt;  Replace &lt;code&gt;npm install&lt;/code&gt; with your project build command

&lt;ol&gt;
&lt;li&gt;  Mine is &lt;code&gt;nx build account-info-manager:build --configuration=staging --outputPath=dist/staging&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;account-info-manager&lt;/strong&gt; is my project&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;staging&lt;/strong&gt; is a custom configuration defined in my project&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;outputPath&lt;/strong&gt; is set to create a separate folder called 'staging' under the typical Angular dist folder&lt;/li&gt;
&lt;li&gt;Change &lt;strong&gt;displayName&lt;/strong&gt; to 'build staging' (or the name that is applicable for your environment)&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;/li&gt;

&lt;li&gt; Add a Publish Build Artifacts task

&lt;ol&gt;
&lt;li&gt;Add a Task to the Pipeline by clicking "+ Task"&lt;/li&gt;
&lt;li&gt;Search for "Artifacts"&lt;/li&gt;
&lt;li&gt;Select the "Publish build artifacts tasks" and click "Add"
&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%2F71pu2bkzz5cj1ixlf2kr.png" alt="Highlight the Publish build artifacts task in the task list"&gt;
&lt;/li&gt;
&lt;li&gt;Set the values based on your build path in the 'build staging' task

&lt;ol&gt;
&lt;li&gt;  My &lt;strong&gt;Path to publish&lt;/strong&gt; is set to &lt;code&gt;$(Agent.BuildDirectory)/s/dist/staging&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  My &lt;strong&gt;Artifact name&lt;/strong&gt; is set to &lt;code&gt;staging&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  Keep &lt;strong&gt;Artifact publish location&lt;/strong&gt; as &lt;code&gt;Azure Pipelines&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  Click the "Add" button
&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%2F0l6w6kf14mhloreb4oey.png" alt="Publish build artifact task fields"&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;/li&gt;

&lt;li&gt;Save your Pipeline&lt;/li&gt;

&lt;li&gt;Create 'build production' task 

&lt;ol&gt;
&lt;li&gt;Copy the 'build staging' script task and paste a new copy&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;staging&lt;/code&gt; with &lt;code&gt;production&lt;/code&gt; in your build commands

&lt;ol&gt;
&lt;li&gt;  Mine is &lt;code&gt;nx build account-info-manager:build --configuration=production--outputPath=dist/production&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;account-info-manager&lt;/strong&gt; is my project&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;production&lt;/strong&gt; is a configuration defined in my project&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;outputPath&lt;/strong&gt; is set to create a separate folder called 'production' under the typical Angular dist folder&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;/li&gt;

&lt;li&gt; Add a Publish Build Artifacts task

&lt;ol&gt;
&lt;li&gt;Set the values based on your build path in the 'build production' task

&lt;ol&gt;
&lt;li&gt;  My &lt;strong&gt;Path to publish&lt;/strong&gt; is set to &lt;code&gt;$(Agent.BuildDirectory)/s/dist/production&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  My &lt;strong&gt;Artifact name&lt;/strong&gt; is set to &lt;code&gt;production&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  Keep &lt;strong&gt;Artifact publish location&lt;/strong&gt; as &lt;code&gt;Azure Pipelines&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  Click the "Add" button&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;/li&gt;

&lt;li&gt;Save, then Run your Pipeline&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  You now have an Build Artifact that can be used in Azure DevOps Releases! (Once it completes, of course)
&lt;/h3&gt;

&lt;p&gt;If you would like deploy your newly created builds to Azure Static Web Apps (and have different environments + approval), check out my post on that &lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/blairlierman" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F325446%2Fb6859496-6816-4bba-bd75-7abd297e8668.jpeg" alt="blairlierman"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/blairlierman/static-web-apps-from-azure-devops-releases-2mpa" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Azure Static Web Apps from Azure DevOps Releases&lt;/h2&gt;
      &lt;h3&gt;Blair Lierman ・ Aug 20 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#staticwebapps&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#singlepageapplications&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#azurestaticwebapps&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>azuredevops</category>
      <category>singlepageapplication</category>
      <category>devops</category>
      <category>nx</category>
    </item>
    <item>
      <title>Azure Static Web Apps from Azure DevOps Releases</title>
      <dc:creator>Blair Lierman</dc:creator>
      <pubDate>Fri, 20 Aug 2021 22:40:44 +0000</pubDate>
      <link>https://dev.to/blairlierman/static-web-apps-from-azure-devops-releases-2mpa</link>
      <guid>https://dev.to/blairlierman/static-web-apps-from-azure-devops-releases-2mpa</guid>
      <description>&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/azure/static-web-apps/overview"&gt;Azure Static Web Apps&lt;/a&gt; is an awesome new option for deploying single page applications, however I had specific goals that the current documentation didn't quite address, so here is how I met them.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Goals
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Deploy to Azure Static Web Apps&lt;/li&gt;
&lt;li&gt;Deploy the same code to different environments (i.e. Sandbox, Test, Production)&lt;/li&gt;
&lt;li&gt;Automatically deploy to Sandbox (aka Test/Staging)&lt;/li&gt;
&lt;li&gt;Require approval to deploy to Production&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;a href="https://docs.microsoft.com/en-us/azure/static-web-apps/publish-devops"&gt;Microsoft Documentation for publishing from Azure Static Web Apps&lt;/a&gt; builds and deploys in a single step via Pipelines, however that doesn't support multiple deployments from same artifacts or an approval step.&lt;/p&gt;

&lt;p&gt;All of those goals are possible using Azure DevOps, however it took some additional steps to get them working together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;A Single Page Application published as an Artifact built using Azure Pipelines

&lt;ul&gt;
&lt;li&gt;My artifact contains two builds of an Angular app, 'sandbox' and 'prod'&lt;/li&gt;
&lt;li&gt;I happened to use an Angular app, but you can apply this to any single page application framework, such as React, Vue, Ember.js or Svelte.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The Deployment Token from an already-created Azure Static Web App

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/azure/static-web-apps/publish-devops#create-a-static-web-app"&gt;Create a Static Web App section&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Configure Your Release
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In your Azure DevOps project, go to Pipelines, then Releases&lt;/li&gt;
&lt;li&gt;Create a new Release Pipeline (using the "+ New \/" button)
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W0ks0Htj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bwwni78hkkdypvlfa8l5.png" alt="Pointing to the Create a new Release Pipeline button" width="575" height="288"&gt;
&lt;/li&gt;
&lt;li&gt;Select 'Empty job' as the Template

&lt;ul&gt;
&lt;li&gt;We will be creating ours from scratch
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mz5z6XkB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p45odanbj4hsis0hlfvc.png" alt="Pointing to the Empty Job link" width="665" height="324"&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Name your first Stage

&lt;ol&gt;
&lt;li&gt;The Name can be whatever you like. I used 'Production Deployment'&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;In the Artifacts, select the Artifact that you already built

&lt;ol&gt;
&lt;li&gt;Select Build as Source type&lt;/li&gt;
&lt;li&gt;Select your Source - This is the Name of your Artifact from the Prerequisites.&lt;/li&gt;
&lt;li&gt;You can update the 'Source alias' to a simpler name if you prefer

&lt;ul&gt;
&lt;li&gt;This will be used in your pipeline later&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click the "Add" button to save your Artifact
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ciSUV2_K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uxmriwi3q478l3qcfw8b.png" alt="The Artifact selection dialog" width="650" height="481"&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;Now click the "View stage tasks" link ("1 job, 0 tasks") on your existing Stage
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OUaHSw9K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ri1nyrcvgesqobukt5k9.png" alt="Task Link Click" width="266" height="154"&gt;
&lt;/li&gt;
&lt;li&gt;Click "Agent job" above the tasks to edit the default settings

&lt;ol&gt;
&lt;li&gt;Change the Agent Specification to a recent Linux build, such as &lt;code&gt;ubuntu-20.04&lt;/code&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0ia4jI88--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6vnfb7rqbr3306ea3268.png" alt="Agent Job settings showing ubuntu-20.04 selected for Agent Specification" width="545" height="383"&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;Next to "Agent Job", click the "+" button to add a new Task
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7h1cwiKh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gkeobse8qbv41gir8ccn.png" alt="Add Task to Job" width="826" height="226"&gt;

&lt;ol&gt;
&lt;li&gt;Find the "Deploy Azure Static Web App" task (from Microsoft Corporation) and click "Add"
 &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bINrdSad--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6ggz5a269lj875vyxhyo.png" alt="Add Deploy Azure Static Web App Task" width="880" height="152"&gt;

&lt;ul&gt;
&lt;li&gt;At the time of this blog post, it is currently in PREVIEW and at version 0.* (preview)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Fill in the following fields of the task:

&lt;ol&gt;
&lt;li&gt;Display Name - Can be anything you want&lt;/li&gt;
&lt;li&gt;App Location - Set to path of your built app in the artifact

&lt;ul&gt;
&lt;li&gt;Use the form "&amp;lt;ArtifactName&amp;gt;/&amp;lt;BuildName&amp;gt;/", i.e. &lt;code&gt;AngularBuildArtifact/prod/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Output Location - Set to path of your built app in the artifact,

&lt;ul&gt;
&lt;li&gt;Use the form "&amp;lt;ArtifactName&amp;gt;/&amp;lt;BuildName&amp;gt;/", i.e. &lt;code&gt;AngularBuildArtifact/prod/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Skip App Build - Set to &lt;code&gt;true&lt;/code&gt;/checked. (The app is already being built and stored as an Artifact)&lt;/li&gt;
&lt;li&gt;Azure Static Web Apps Api Token - Fill in with your Deployment Token variable: &lt;code&gt;$(deployment_token)&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;Follow Steps 5-10 in the &lt;a href="https://docs.microsoft.com/en-us/azure/static-web-apps/publish-devops#create-the-pipeline-task-in-azure-devops"&gt;Create the Pipeline Tasks&lt;/a&gt; section to configure a secret variable for your Deployment Token
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---iLtTxwE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ld3664c5rqwt9mbzrgna.png" alt="Full Task Settings" width="396" height="883"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Save your Release

&lt;ul&gt;
&lt;li&gt;You can find my YAML for this task at the end of this post
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;


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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Note:&lt;/strong&gt; I didn't have an Azure Functions API or routes.json, so I have left the remaining fields blank. We are also skipping the app build, so we don't need to provide an App Build Command.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Congratulations! You can now run the Release to deploy to Azure Static Web Apps.
&lt;/h2&gt;




&lt;p&gt;
  When this post was originally, a workaround was required for a docker error. That is no longer required, however the details can be found by clicking this if you are curious.
  &lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Note&lt;/strong&gt;: If you run this task now, it will fail with an error in the task: 
&amp;gt; docker: Error response from daemon: OCI runtime create failed: invalid mount {Destination::/working_dir Type:bind Source:/var/lib/docker/volumes/8d90060c5907d68a281862c7f31dcb71efe24e52511ac78682a1e5e5dd27b0af/_data Options:[rbind]}: mount destination :/working_dir not absolute: unknown.
As of the writing of this post, unfortunately there is a known issue within the Azure DevOps Static Web Apps task, however there is a workaround.

&lt;ul&gt;
&lt;li&gt;More information can be found in &lt;a href="https://github.com/Azure/static-web-apps/issues/463"&gt;this GitHub issue&lt;/a&gt;. The workaround is based on &lt;a href="https://github.com/microsoft/azure-pipelines-tasks/pull/14807#issuecomment-868593099"&gt;this comment&lt;/a&gt; in a related pull request.&lt;/li&gt;
&lt;li&gt;If the issue is resolved, please leave a comment on this post and I will update it.
## Workaround Steps&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Add a Bash Script task &lt;em&gt;above&lt;/em&gt; the Static Web Apps task
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DiL9FA1---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w9m461z8smfq2tv9nms8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DiL9FA1---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w9m461z8smfq2tv9nms8.png" alt="Add Second Task to Release" width="644" height="118"&gt;&lt;/a&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c4elAcYJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6bdu3uienhw9c164kbsy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c4elAcYJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6bdu3uienhw9c164kbsy.png" alt="Add Bash Script Task" width="880" height="233"&gt;&lt;/a&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Fvgzc2Ci--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/djhi7xbwtdfwz5ldj08g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Fvgzc2Ci--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/djhi7xbwtdfwz5ldj08g.png" alt="Move Bash Script Task First" width="637" height="181"&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Change the Type to 'Inline'&lt;/li&gt;
&lt;li&gt;For the script command to run add the following command: &lt;code&gt;echo '##vso[task.setvariable variable=BUILD_SOURCESDIRECTORY]$(System.DefaultWorkingDirectory)'&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;This command will set the necessary environment variable that the Static Web Apps requires.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;






&lt;/p&gt;

&lt;h3&gt;
  
  
  Bonus Content - Adding Approval to the Stage
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;On the Pipelines tab, click the Pre-deployment Conditions button (at the left of the Stage button)
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AqT1PjKo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vq29zc5ssjc1phc0il4z.png" alt="Location of Pre-Deployment Conditions" width="880" height="355"&gt;
&lt;/li&gt;
&lt;li&gt;Enable Pre-Deployment Approvals
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oJpWihhO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/su39yvmt2n1tixxbz7wc.png" alt="Location of Pre-deployment approvals" width="666" height="871"&gt;
&lt;/li&gt;
&lt;li&gt;Fill in Approvers from your organization
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iDUfIoh5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a09iqp22ch70fsbyel2p.png" alt="Demonstration of Required Approvers" width="668" height="754"&gt;
&lt;/li&gt;
&lt;li&gt;Feel free to set the rest of the settings as necessary for your situation. &lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  YAML for the Static Web App Task &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;variables&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;deployment_token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;YourDeploymentToken&amp;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;task&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;AzureStaticWebApp@0&lt;/span&gt;
  &lt;span class="na"&gt;displayName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Static&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Web&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;App&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Production&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Deployment'&lt;/span&gt;
  &lt;span class="na"&gt;inputs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;app_location&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;AngularBuildArtifact/prod/&lt;/span&gt;
    &lt;span class="na"&gt;output_location&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;AngularBuildArtifact/prod/&lt;/span&gt;
    &lt;span class="na"&gt;skip_app_build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;azure_static_web_apps_api_token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;$(deployment_token)'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>devops</category>
      <category>staticwebapps</category>
      <category>singlepageapplications</category>
      <category>azurestaticwebapps</category>
    </item>
    <item>
      <title>Deploying an Angular 8 app to GitHub Pages using Actions</title>
      <dc:creator>Blair Lierman</dc:creator>
      <pubDate>Fri, 21 Feb 2020 16:07:56 +0000</pubDate>
      <link>https://dev.to/blairlierman/deploying-an-angular-8-app-to-github-pages-using-actions-4j</link>
      <guid>https://dev.to/blairlierman/deploying-an-angular-8-app-to-github-pages-using-actions-4j</guid>
      <description>&lt;p&gt;I've been writing my first real Angular application, a personal project, and needed to have it automatically deploy. GitHub Pages was a good free option as the project was already on GitHub.&lt;/p&gt;

&lt;p&gt;I had manually deployed my Angular 8 project using the &lt;a href="https://github.com/angular-schule/angular-cli-ghpages"&gt;angular-cli-ghpages&lt;/a&gt; and learned to use the repository name with the &lt;a href="https://github.com/angular-schule/angular-cli-ghpages#--base-href-"&gt;base-href&lt;/a&gt; parameter in order for the application to load correctly on GitHub Pages. &lt;/p&gt;

&lt;p&gt;The next step was to have it to be &lt;em&gt;automatically&lt;/em&gt; deployed, which led me to GitHub Actions. &lt;/p&gt;

&lt;p&gt;(If you just want the final result, you can skip to the bottom)&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting up the initial GitHub Actions workflow
&lt;/h3&gt;

&lt;p&gt;Never having used GitHub Actions before, I sought out a tutorial to assist me. The first one I found was this blog post, &lt;a href="https://uxworks.org/how-to-deploy-angular-app-on-github-pages-using-github-actions"&gt;How to deploy an angular app on GitHub Pages using GitHub Actions&lt;/a&gt; by &lt;a href="https://uxworks.org/author/amrish-kushwaha"&gt;Amrish Kushwaha&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Follow that excellent introduction first to configure the proper tokens and secrets in Github and create the initial workflow in GitHub Actions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Updating the workflow
&lt;/h3&gt;

&lt;p&gt;From the initial workflow, I had a couple of other requirements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Only running the workflow when code was pushed to the &lt;code&gt;master&lt;/code&gt; branch&lt;/li&gt;
&lt;li&gt;Using a newer version of Node, since Node 8 is out of date&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This led to two more blog posts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://dev.to/pierresaid/deploy-node-projects-to-github-pages-with-github-actions-4jco"&gt;Deploy your projects to Github Pages with GitHub Actions&lt;/a&gt; by &lt;a href="https://dev.to/pierresaid"&gt;pierresaid&lt;/a&gt;, also here on Dev Community.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.khophi.co/deploy-angular-with-github-actions/"&gt;Deploy Angular to Production with Github Actions&lt;/a&gt;, a post on KhoPhi's blog.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These posts show how to accomplish both requirements from above as well as a new trick, using &lt;code&gt;ubuntu-latest&lt;/code&gt; instead of a specific version.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Only running the build on &lt;code&gt;master&lt;/code&gt; branch&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="s"&gt;master&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Using a newer version of Node, since Node 8 is out of date&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Turned about to be as simple as changing the node version. 😂&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/setup-node@v1&lt;/span&gt; &lt;span class="c1"&gt;#this installs node and npm for us&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="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;10.x'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Using &lt;code&gt;ubuntu-latest&lt;/code&gt; instead of a specific version&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&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;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I also updated the checkout step to v2, the latest versions, based on the script found in GitHub Marketplace, &lt;a href="https://github.com/marketplace/actions/deploy-to-github-pages"&gt;Deploy to GitHub Pages&lt;/a&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;Checkout&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;span class="c1"&gt;# If you're using actions/checkout@v2 you must set persist-credentials to false in most cases for the deployment to work correctly.&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;persist-credentials&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

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

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

&lt;h3&gt;
  
  
  Building the Angular application for deployment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;My first attempt was to modify the &lt;code&gt;BUILD_SCRIPT&lt;/code&gt; parameter to run the build with the base-href parameter:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;    &lt;span class="na"&gt;BUILD_SCRIPT&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install &amp;amp;&amp;amp; npm run build -- --prod --base-href=/my-repository-name/`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unfortunately that didn't work 😓 &lt;/p&gt;

&lt;p&gt;The answer ended up being right in front of my nose, back in the &lt;a href="https://dev.to/pierresaid/deploy-node-projects-to-github-pages-with-github-actions-4jco"&gt;Deploy your projects to Github Pages with GitHub Actions&lt;/a&gt; post. &lt;/p&gt;

&lt;h4&gt;
  
  
  Steps for building an Angular app in GitHub Actions
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Remove the BUILD_SCRIPT parameter and move it to a separate step.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change them to a separate step that accomplishes the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ensure the Angular CLI is available&lt;/li&gt;
&lt;li&gt;Download all dependencies&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Do the Angular build with the base-href parameter&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&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 install -g @angular/cli        &lt;/span&gt;
       &lt;span class="s"&gt;npm install&lt;/span&gt;
       &lt;span class="s"&gt;ng build --prod --base-href="/farming-game-calc/"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

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


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

&lt;p&gt;BOOM! 💣 My first successful automated deployment to GitHub pages!&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Result &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Here is the final version of my yaml file (in .github/workflows/)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-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;Deploy to GitHub Pages&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;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;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout&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;span class="c1"&gt;# If you're using actions/checkout@v2 you must set persist-credentials to false in most cases for the deployment to work correctly.&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;persist-credentials&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;false&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;Use Node.js 10.x&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="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;10.x'&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;Build&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 install -g @angular/cli&lt;/span&gt;
         &lt;span class="s"&gt;npm install&lt;/span&gt;
         &lt;span class="s"&gt;ng build --prod --base-href="/farming-game-calc/"&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;Deploy&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;JamesIves/github-pages-deploy-action@releases/v2&lt;/span&gt;
      &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;ACCESS_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.ACCESS_TOKEN }}&lt;/span&gt;
        &lt;span class="na"&gt;BASE_BRANCH&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;BRANCH&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gh-pages&lt;/span&gt;
        &lt;span class="na"&gt;FOLDER&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dist/FarmingGameNetAssetCalculator&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can find the most current version in &lt;a href="https://github.com/blairlierman/farming-game-calc/blob/master/.github/workflows/main.yml"&gt;my GitHub repo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can find my simple application, a calculator for the end game of &lt;a href="http://farmgame.com/product/woo-single-2/"&gt;The Farming Game&lt;/a&gt;, at [&lt;a href="https://blairlierman.github.io/farming-game-calc"&gt;https://blairlierman.github.io/farming-game-calc&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;Thank you for reading my very first blog post, all the way to the end no less. &lt;br&gt;
I hope you found it helpful and were able to make it work. Tell me in the comments what you thought or if you have any questions.&lt;/p&gt;

</description>
      <category>angular</category>
      <category>github</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
