<?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: Max Kostinevich</title>
    <description>The latest articles on DEV Community by Max Kostinevich (@maxkostinevich).</description>
    <link>https://dev.to/maxkostinevich</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%2F305900%2Fb585a63c-14fd-4da0-8f74-0b1ec2e02016.jpeg</url>
      <title>DEV Community: Max Kostinevich</title>
      <link>https://dev.to/maxkostinevich</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maxkostinevich"/>
    <language>en</language>
    <item>
      <title>Show Dev.to: I just open-sourced Graindashboard - responsive web-application UI kit built on Bootstrap 4</title>
      <dc:creator>Max Kostinevich</dc:creator>
      <pubDate>Wed, 22 Jan 2020 20:39:42 +0000</pubDate>
      <link>https://dev.to/maxkostinevich/show-dev-to-i-just-open-sourced-graindashboard-responsive-web-application-ui-kit-built-on-bootstrap-4-53of</link>
      <guid>https://dev.to/maxkostinevich/show-dev-to-i-just-open-sourced-graindashboard-responsive-web-application-ui-kit-built-on-bootstrap-4-53of</guid>
      <description>&lt;p&gt;Hello there!&lt;/p&gt;

&lt;p&gt;I'm super happy to share Graindashboard - responsive web-application UI kit built on Bootstrap 4.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vEQDKLuc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/10295466/72931623-45353300-3d6f-11ea-8658-e4e227279723.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vEQDKLuc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/10295466/72931623-45353300-3d6f-11ea-8658-e4e227279723.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Online demo is available &lt;a href="https://demo.graindashboard.com/"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Project link on the Github: &lt;a href="https://github.com/maxkostinevich/Graindashboard"&gt;https://github.com/maxkostinevich/Graindashboard&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>design</category>
      <category>html</category>
    </item>
    <item>
      <title>How to add Social Proof widget to Shopify</title>
      <dc:creator>Max Kostinevich</dc:creator>
      <pubDate>Wed, 22 Jan 2020 18:05:10 +0000</pubDate>
      <link>https://dev.to/maxkostinevich/how-to-add-social-proof-widget-to-shopify-3697</link>
      <guid>https://dev.to/maxkostinevich/how-to-add-social-proof-widget-to-shopify-3697</guid>
      <description>&lt;p&gt;In this article I'll show you how to create and add a simple Social Proof / FOMO widget to Shopify store. Instead of using 3rd-party applications, we'll pull the list or recently purchased items using really simple serverless function which we'll host on Cloudflare Workers at no cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, what the Social Proof / FOMO widget is?
&lt;/h2&gt;

&lt;p&gt;I'm pretty sure, you saw these widgets a lot of times on different ecommerce stores. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PfSCh37Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://maxkostinevich.s3.eu-west-2.amazonaws.com/website/shopify-serverless-fomo-widget/fomo-widget-example.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PfSCh37Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://maxkostinevich.s3.eu-west-2.amazonaws.com/website/shopify-serverless-fomo-widget/fomo-widget-example.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The purpose of such kind of widgets is to increase conversion rate, credibility and trust. There is a lot of widgets on the market, their functionality and design is pretty similar to each other, and they are pretty expensive (especially if you're just starting your online store).&lt;/p&gt;

&lt;p&gt;So, let's make our own Social Proof widget in three simple steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step #1 - Create a new private Shopify App
&lt;/h2&gt;

&lt;p&gt;First, we need to create a private Shopify App which allow us to access our store's data via API. To do this, login to your Shopify Admin Dashboard, and go to &lt;strong&gt;Apps → Manage private apps → Create a new private app&lt;/strong&gt;, fill-in all required fields (such as app name and your email address), and make sure the app is allowed to read &lt;strong&gt;Orders&lt;/strong&gt; information:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--50q-zOwi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://maxkostinevich.s3.eu-west-2.amazonaws.com/website/shopify-serverless-fomo-widget/shopify-private-app-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--50q-zOwi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://maxkostinevich.s3.eu-west-2.amazonaws.com/website/shopify-serverless-fomo-widget/shopify-private-app-1.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After you save the app, you can grab your app credentials (you'll need these credentials in the next step), as shown on the screenshot below:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XXlcHc8G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://maxkostinevich.s3.eu-west-2.amazonaws.com/website/shopify-serverless-fomo-widget/shopify-private-app-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XXlcHc8G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://maxkostinevich.s3.eu-west-2.amazonaws.com/website/shopify-serverless-fomo-widget/shopify-private-app-2.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step #2 - Create a new Cloudflare Worker
&lt;/h2&gt;

&lt;p&gt;So, what the &lt;a href="https://www.cloudflare.com/products/cloudflare-workers/"&gt;Cloudflare Worker&lt;/a&gt; is? In short, Cloudflare Worker - is a container, which allow you to run a serverless function written in Node.js. "Serverless" means that you do not need to have a server for this function, or even think about configuration of the container - everything is done by Cloudflare for you.&lt;/p&gt;

&lt;p&gt;If you haven't worked with Cloudflare before, you need to signup at &lt;a href="https://www.cloudflare.com/"&gt;Cloudflare.com&lt;/a&gt; and go to Workers directory.&lt;/p&gt;

&lt;p&gt;Then, create a new worker with the following source code:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;And then enter app credentials you created in previous step:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PCS7N_O8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://maxkostinevich.s3.eu-west-2.amazonaws.com/website/shopify-serverless-fomo-widget/cloudflare-worker.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PCS7N_O8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://maxkostinevich.s3.eu-west-2.amazonaws.com/website/shopify-serverless-fomo-widget/cloudflare-worker.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, what this function does? This function executes each time it receives a &lt;code&gt;GET&lt;/code&gt; request, and reads latest 50 orders from your store. As we do not want to expose private order information (such as customer email and other sensitive information), we return filtered data, which includes customer first name, customer city and purchased item. This data will be used by the widget itself.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step #3 - Add widget to your Shopify Theme
&lt;/h2&gt;

&lt;p&gt;Once you created a Cloudflare Worker, you need to login to your Shopify Admin Dashboard and go to &lt;strong&gt;Online Store → Themes → Edit code of the current theme&lt;/strong&gt; and create a new &lt;strong&gt;widget.js&lt;/strong&gt; file inside of &lt;strong&gt;/assets/&lt;/strong&gt; directory with the following content:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;And then, you need to add the following code before closing &lt;code&gt;&amp;lt;/body&amp;gt;&lt;/code&gt; tag in  &lt;strong&gt;theme.liquid&lt;/strong&gt; file:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yJIPu3ZV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://maxkostinevich.s3.eu-west-2.amazonaws.com/website/shopify-serverless-fomo-widget/shopify-theme.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yJIPu3ZV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://maxkostinevich.s3.eu-west-2.amazonaws.com/website/shopify-serverless-fomo-widget/shopify-theme.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do not forget to replace the URL with actual URL of your Cloudflare Worker. If you did everything right, you should see something like this on your Shopify store:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GxjPO1-E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://maxkostinevich.s3.eu-west-2.amazonaws.com/website/shopify-serverless-fomo-widget/fomo-demo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GxjPO1-E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://maxkostinevich.s3.eu-west-2.amazonaws.com/website/shopify-serverless-fomo-widget/fomo-demo.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;The source code is available on &lt;a href="https://gist.github.com/maxkostinevich/75a6f224ae7f03763e202d01f0e57e1a"&gt;Github Gist&lt;/a&gt; and on &lt;a href="https://codesandbox.io/s/fomo-widget-sample-i31x0"&gt;Codesandbox&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You may take a look at live demo &lt;a href="https://ols-demo.myshopify.com/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A few notes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For demo purposes I haven't added product images and links to the products to this widget, as this information is not included to Order payload, so it will require additional API request on our serverless function to get all this information.&lt;/li&gt;
&lt;li&gt;I also haven't included a real time of the purchase, as new orders will be rarely added to the demo store.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;This post was originally published on &lt;a href="https://maxkostinevich.com/blog/serverless-shopify-social-proof-widget/"&gt;my website&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>shopify</category>
      <category>serverless</category>
      <category>javascript</category>
      <category>cloudflare</category>
    </item>
    <item>
      <title>How to use Docker for development on local machine</title>
      <dc:creator>Max Kostinevich</dc:creator>
      <pubDate>Fri, 03 Jan 2020 17:03:28 +0000</pubDate>
      <link>https://dev.to/maxkostinevich/how-to-use-docker-for-development-on-local-machine-65d</link>
      <guid>https://dev.to/maxkostinevich/how-to-use-docker-for-development-on-local-machine-65d</guid>
      <description>&lt;p&gt;I've used &lt;a href="https://www.vagrantup.com/"&gt;Vagrant&lt;/a&gt; and &lt;a href="https://laravel.com/docs/6.x/homestead"&gt;Homestead&lt;/a&gt; for local development for last several years, and recently switched to Docker. And I'm super-happy with my current setup, as Docker containers are much easier to setup, and they consume less resources than Vagrant.&lt;/p&gt;

&lt;p&gt;If you're wondering how to start using Docker in local development and quickly run Laravel application in Docker container, watch my video tutorial:&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/DNyQX00X_cg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;A few notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This Docker template is adopted for Laravel/PHP apps, however feel free to customize it to fit your own needs;&lt;/li&gt;
&lt;li&gt;This Docker template is used only for development on local machine;&lt;/li&gt;
&lt;li&gt;You may get Laravel Docker Template on &lt;a href="https://github.com/maxkostinevich/Laravel-Docker-Template"&gt;Github&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;I still use classic VPS/non-dockerized environment on production;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope you found this tutorial useful! Any questions or feedback is much appreciated!&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>docker</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to deploy Serverless applications using Github Actions</title>
      <dc:creator>Max Kostinevich</dc:creator>
      <pubDate>Thu, 02 Jan 2020 00:35:53 +0000</pubDate>
      <link>https://dev.to/maxkostinevich/how-to-deploy-serverless-applications-using-github-actions-34a</link>
      <guid>https://dev.to/maxkostinevich/how-to-deploy-serverless-applications-using-github-actions-34a</guid>
      <description>&lt;p&gt;In this article I'll show you how to deploy Serverless applications using &lt;a href="https://github.com/features/actions" rel="noopener noreferrer"&gt;Github Actions&lt;/a&gt;. Github Actions allow you to test, build and deploy your applications in easy way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Github Actions?
&lt;/h2&gt;

&lt;p&gt;Previously I worked a lot with &lt;a href="https://laravel.com/" rel="noopener noreferrer"&gt;Laravel Framework&lt;/a&gt; and used &lt;a href="https://envoyer.io/" rel="noopener noreferrer"&gt;Envoyer&lt;/a&gt; for all my deployments. I wanted to find a similar tool for &lt;a href="https://serverless.com" rel="noopener noreferrer"&gt;Serverless Framework&lt;/a&gt;, so I made a list of important features I'd like to see in a deployment tool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Easy to use;&lt;/li&gt;
&lt;li&gt;  Not too expensive;&lt;/li&gt;
&lt;li&gt;  Ability to setup for client's projects;&lt;/li&gt;
&lt;li&gt;  Ability to manage environment variables (like passwords and secret api keys);&lt;/li&gt;
&lt;li&gt;  Should work with Github;&lt;/li&gt;
&lt;li&gt;  Flexible configuration;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I've tested a number of tools and decided to go with Github Actions for the following reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Its provided by Github;&lt;/li&gt;
&lt;li&gt;  Its completely free;&lt;/li&gt;
&lt;li&gt;  Its pretty flexible;&lt;/li&gt;
&lt;li&gt;  I can easily configure custom steps for each project using YAML configuration file;&lt;/li&gt;
&lt;li&gt;  Github provides a secure way to store environment variables;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  So, how deployment process looks like?
&lt;/h2&gt;

&lt;p&gt;In most cases deployment of Serverless application consists of number of steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Checkout a repository.&lt;/li&gt;
&lt;li&gt; Configure container (install Node, NPM, Serverless Framework, etc).&lt;/li&gt;
&lt;li&gt; Connect serverless to provider (AWS/Azure/Cloudflare/etc).&lt;/li&gt;
&lt;li&gt; Create environment file with all our secret variables.&lt;/li&gt;
&lt;li&gt; Install NPM Dependencies.&lt;/li&gt;
&lt;li&gt; Deploy application.&lt;/li&gt;
&lt;li&gt; Optional - Build and deploy frontend assets to S3.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Just for example, let's setup automatic deployment to &lt;strong&gt;development&lt;/strong&gt; environment &lt;strong&gt;on push to master&lt;/strong&gt; and deployment to &lt;strong&gt;production&lt;/strong&gt; on &lt;strong&gt;version tag release&lt;/strong&gt; (e.g. v1.0.0, v1.2.0, etc).&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's do some demo
&lt;/h2&gt;

&lt;p&gt;For demo purposes we'll be using a Node.js application hosted on AWS. You may easily adopt the workflow to work with other languages and service providers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Demo application
&lt;/h3&gt;

&lt;p&gt;First, let's create a simple application using Serverless framework using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;serverless create --template aws-nodejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then let's create a env.yml file to store secret variables. This file should never be pushed to our git repository as it contains private api keys and other sensitive information. However, it's a good idea to store in git repository a copy of env file (e.g. &lt;strong&gt;sample.env.yml&lt;/strong&gt;) with some placeholder data, so it will be easier to create an actual env.yml file.  &lt;/p&gt;

&lt;p&gt;In our case, let's store &lt;strong&gt;appName&lt;/strong&gt; value in our &lt;strong&gt;env.yml&lt;/strong&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;prod:
    appName: "Serverless App"

default:
    appName: "DEV Serverless App"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, for each application environment we'll be using different values. So when application will be deployed to production, the app name will be "&lt;strong&gt;Serverless App&lt;/strong&gt;", and when application will be deployed to development environment, the app name will be "&lt;strong&gt;DEV Serverless App&lt;/strong&gt;".&lt;/p&gt;

&lt;p&gt;Then, let's modify our &lt;strong&gt;serverless.yml&lt;/strong&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;service: gh-actions-demo

custom:
    defaultStage: dev
    environment: ${file(env.yml):${self:provider.stage}, file(env.yml):default}

provider:
    name: aws
    runtime: nodejs10.x
    stage: ${opt:stage, self:custom.defaultStage}
    environment:
      appName: ${self:custom.environment.appName}


functions:
    index:
      handler: handler.index
      events:
        - http:
            path: /
             method: get
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few notes regarding the file above:&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;custom&lt;/strong&gt; section we define default stage which will be used on application deployment, and loaded variables from &lt;strong&gt;env.yml&lt;/strong&gt; file depending on application stage.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;provider&lt;/strong&gt; section we added a &lt;strong&gt;stage&lt;/strong&gt; key (if no stage is passed via command line - default stage from &lt;strong&gt;custom&lt;/strong&gt; section will be used by default). And created &lt;strong&gt;appName&lt;/strong&gt; environment variable, so we'll be able to use it in our Lambda functions. The value of that variable is defined in our &lt;strong&gt;env.yml&lt;/strong&gt; file and passed from &lt;strong&gt;custom&lt;/strong&gt; section.&lt;/p&gt;

&lt;p&gt;And finally, we defined &lt;strong&gt;index&lt;/strong&gt; function in handler.js with the following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    'use strict';

    module.exports.index = async event =&amp;gt; {
      let html = `
        &amp;lt;h1&amp;gt;Welcome to ${process.env.appName}&amp;lt;/h1&amp;gt;
        &amp;lt;p&amp;gt;Stage: ${event.requestContext.stage}&amp;lt;/p&amp;gt;`;

      return {
        statusCode: 200,
        headers: {
            'Content-Type': 'text/html',
        },
        body: html
      };

    };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, this function outputs simple text. When deployed to production it will show "Welcome to Serverless App. Stage: prod" and when deployed to dev it will show "Welcome to DEV Serverless App. Stage: dev".&lt;/p&gt;

&lt;h3&gt;
  
  
  Create Github Actions
&lt;/h3&gt;

&lt;p&gt;There are few ways to create Github Actions: you may go to your Github Repository, click Actions and add a new workflow. Or you can define a workflow yaml files and store them in &lt;strong&gt;.github/workflows&lt;/strong&gt; in your application.&lt;/p&gt;

&lt;p&gt;In our case we'll create a two workflows. One of them will be used to deploy application to &lt;strong&gt;dev environment&lt;/strong&gt; on each push to &lt;strong&gt;master&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;And the second workflow will be used to deploy application to &lt;strong&gt;prod environment&lt;/strong&gt; every time a new tag with specific pattern is released:&lt;/p&gt;

&lt;h3&gt;
  
  
  How to store secrets on Github
&lt;/h3&gt;

&lt;p&gt;To store secret environment variables, go &lt;strong&gt;Settings&lt;/strong&gt; of your Github repository and choose &lt;strong&gt;Secrets&lt;/strong&gt; from the left sidebar.&lt;/p&gt;

&lt;p&gt;First, we need to store AWS Key and AWS Secret in order to be able to deploy our application using Serverless Framework.&lt;/p&gt;

&lt;p&gt;Second, we need to store secret variables listed in our &lt;strong&gt;env.yml&lt;/strong&gt; file. We can do a little trick here: rather than storing each secret environment variable separately, we can store the content of entire env.yml file as show on the screenshot below:&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%2Fmaxkostinevich.s3.eu-west-2.amazonaws.com%2Fwebsite%2Fhow-to-deploy-serverless-applications-using-github-actions%2Fgh-actions-secrets.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%2Fmaxkostinevich.s3.eu-west-2.amazonaws.com%2Fwebsite%2Fhow-to-deploy-serverless-applications-using-github-actions%2Fgh-actions-secrets.png" alt="Github Actions Secrets"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And then use that content to create env.yml file during our workflow process:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- name: Create env file
  run: | 
    cat &amp;gt; env.yml &amp;lt;&amp;lt; EOF
    ${{ secrets.ENV }}
    EOF
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Please note:&lt;/strong&gt; all secrets stored in Github are encrypted. You will not be able to view or edit them once created. So if you need to update any secret key, you need to delete old variable first, and then create a new variable with the same name and updated value.&lt;/p&gt;

&lt;h3&gt;
  
  
  Managing Github Actions
&lt;/h3&gt;

&lt;p&gt;You can see the status of all triggered Github Actions:&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%2Fmaxkostinevich.s3.eu-west-2.amazonaws.com%2Fwebsite%2Fhow-to-deploy-serverless-applications-using-github-actions%2Fgh-actions-list.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%2Fmaxkostinevich.s3.eu-west-2.amazonaws.com%2Fwebsite%2Fhow-to-deploy-serverless-applications-using-github-actions%2Fgh-actions-list.png" alt="List of all triggered Github Actions"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To see the details of specific action, just click on it:&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%2Fmaxkostinevich.s3.eu-west-2.amazonaws.com%2Fwebsite%2Fhow-to-deploy-serverless-applications-using-github-actions%2Fgh-actions-status.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%2Fmaxkostinevich.s3.eu-west-2.amazonaws.com%2Fwebsite%2Fhow-to-deploy-serverless-applications-using-github-actions%2Fgh-actions-status.png" alt="Details of completed action"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And finally, you can see URL of your deployed application by expanding "Deploy Lambda functions" step:&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%2Fmaxkostinevich.s3.eu-west-2.amazonaws.com%2Fwebsite%2Fhow-to-deploy-serverless-applications-using-github-actions%2Fgh-actions-details.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%2Fmaxkostinevich.s3.eu-west-2.amazonaws.com%2Fwebsite%2Fhow-to-deploy-serverless-applications-using-github-actions%2Fgh-actions-details.png" alt="URL of the deployed application"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's all! As you can see, Github Actions make deployment process of Serverless applications really easy.&lt;/p&gt;




&lt;p&gt;This post was originally published on &lt;a href="https://maxkostinevich.com/blog/how-to-deploy-serverless-applications-using-github-actions/" rel="noopener noreferrer"&gt;my website&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>serverless</category>
      <category>github</category>
      <category>aws</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
