<?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>Forem: Ítalo Sousa</title>
    <description>The latest articles on Forem by Ítalo Sousa (@anditsou).</description>
    <link>https://forem.com/anditsou</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%2F270599%2Fbc9d0ebc-ab0c-432b-80a5-29ba45888f5a.jpeg</url>
      <title>Forem: Ítalo Sousa</title>
      <link>https://forem.com/anditsou</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/anditsou"/>
    <language>en</language>
    <item>
      <title>Super easy Discord notification job for Gitlab CI</title>
      <dc:creator>Ítalo Sousa</dc:creator>
      <pubDate>Fri, 29 Jan 2021 01:57:57 +0000</pubDate>
      <link>https://forem.com/anditsou/super-easy-discord-notification-job-for-gitlab-ci-4di</link>
      <guid>https://forem.com/anditsou/super-easy-discord-notification-job-for-gitlab-ci-4di</guid>
      <description>&lt;p&gt;&lt;a href="https://docs.gitlab.com/ee/ci/"&gt;Gitlab CI&lt;/a&gt; is an amazing free alternative to run your pipelines without tears. It runs in a docker container, which comes in handy and also gives us superpowers. &lt;/p&gt;

&lt;p&gt;Once you create a pipeline you wish that everything run automatically and just be notified when it finishes successfully or not.&lt;/p&gt;

&lt;p&gt;To make a long story short, let's get our hands dirty.&lt;/p&gt;

&lt;p&gt;First of all, we need a pipeline to work on. Here is one super simple job that runs over the lightweight Alpine docker image.&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="c1"&gt;# .gitlab-ci.yml &lt;/span&gt;

&lt;span class="na"&gt;stages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;notification&lt;/span&gt;

&lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;alpine:latest&lt;/span&gt;
  &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test&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;echo 🕵🏻 Checking...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The next step is to configure our Discord channel that will show our notifications. Do the following path &lt;code&gt;Your channel &amp;gt; Edit Channel &amp;gt; Integrations &amp;gt; Create Webhook&lt;/code&gt; then name your bot and click &lt;code&gt;Copy Webhook URL&lt;/code&gt;. (&lt;a href="https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks"&gt;Discord Webhook Guide&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Go to Gitlab CI configuration at your project settings and add a new variable: &lt;code&gt;settings &amp;gt; CI / CD &amp;gt; Variables&lt;/code&gt; then create a new variable called &lt;code&gt;WEBHOOK_URL&lt;/code&gt; and paste the copied URL from Discord as the value.&lt;/p&gt;

&lt;p&gt;Now we gonna use the script created by &lt;a href="https://github.com/DiscordHooks"&gt;DiscordHooks&lt;/a&gt; guys.&lt;/p&gt;

&lt;p&gt;Then our pipeline will be as the following:&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="c1"&gt;# .gitlab-ci.yml &lt;/span&gt;

&lt;span class="na"&gt;stages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;notification&lt;/span&gt;

&lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;alpine:latest&lt;/span&gt;
  &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test&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;echo 🕵🏻 Checking...&lt;/span&gt;

&lt;span class="na"&gt;success_notification&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;alpine:latest&lt;/span&gt;
  &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;notification&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;apk add --update git curl&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;wget https://raw.githubusercontent.com/DiscordHooks/gitlab-ci-discord-webhook/master/send.sh&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;chmod +x send.sh&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/bin/ash ./send.sh success $WEBHOOK_URL&lt;/span&gt;
  &lt;span class="na"&gt;when&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;on_success&lt;/span&gt;

&lt;span class="na"&gt;failure_notification&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;alpine:latest&lt;/span&gt;
  &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;notification&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;apk add --update git curl&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;wget https://raw.githubusercontent.com/DiscordHooks/gitlab-ci-discord-webhook/master/send.sh&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;chmod +x send.sh&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/bin/ash ./send.sh failure $WEBHOOK_URL&lt;/span&gt;
  &lt;span class="na"&gt;when&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;on_failure&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now just chill and enjoy! Check the full code &lt;a href="https://gitlab.com/ItaloSa/gitlab-ci-discord-notification"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Note: Do not cache those notifications jobs.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>gitlab</category>
      <category>discord</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Já ouviu falar no Deno?</title>
      <dc:creator>Ítalo Sousa</dc:creator>
      <pubDate>Sat, 16 May 2020 15:15:34 +0000</pubDate>
      <link>https://forem.com/anditsou/ja-ouviu-falar-no-deno-2f2g</link>
      <guid>https://forem.com/anditsou/ja-ouviu-falar-no-deno-2f2g</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Deno é um simples, moderno e seguro ambiente de execução de JavaScript e TypeScript que usa a &lt;a href="https://v8.dev"&gt;V8&lt;/a&gt; e é feito em Rust. - &lt;a href="https://deno.land"&gt;Página oficial&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O runtime foi criado por Ryan Dahl, criador do famoso &lt;code&gt;Node.js&lt;/code&gt;. Durante sua palestra na JSConf EU 2018, que tinha como título: "10 Coisas Que Lamento Pelo Node.js", ele anunciou o seu novo projeto: o Deno.&lt;/p&gt;

&lt;p&gt;Se você conhece o Node, o Deno é praticamente a mesma coisa, só que com algumas melhorias. Ambos possuem a mesma proposta: ser uma plataforma para rodar JavaScript, no caso do Deno TypeScript também, no lado do servidor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Principais Características
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7HS-JZD5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/r5ls5bolutpua472r7do.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7HS-JZD5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/r5ls5bolutpua472r7do.jpg" alt="Photo by Evgeni Tcherkasski on Unsplash" width="640" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Um dos pontos fortes do Deno é sua prioridade em questão da segurança. Por default, o runtime precisa que as permissões sejam dadas de forma explícitas. O que pode parecer estranho para quem não está acostumado rodar um programa com tantas flags.&lt;/p&gt;

&lt;p&gt;Como padrão, o Deno possui um compilador de TypeScript, não sendo necessária nenhuma configuração a mais. Isso traz uma facilidade para a adoção dessa linguagem que sempre requer um trabalho adicional na configuração do ambiente.  &lt;/p&gt;

&lt;p&gt;Consigo, o Deno já traz algumas ferramentas padrão. O runtime já vem com uma ferramenta de teste unitário, um formatador de código e uma ferramenta de linting. Não sendo necessário a instalação de ferramentas adicionais para esse tipo de tarefa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Breve comparação com o Node
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CejBWxz5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/quwg40pe3yv05d5qy56g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CejBWxz5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/quwg40pe3yv05d5qy56g.jpg" alt="Photo by James Pond on Unsplash" width="640" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O Deno, assim como seu irmão mais velho, utilizam a mesma Engine V8, construída pelo Google e que está presente no Chrome. Além disso, as duas plataformas rodam JavaScript.&lt;/p&gt;

&lt;p&gt;As diferenças começam já porque no Deno não existe um package manager, ou seja, nada de npm. As bibliotecas passaram a ser gerenciadas através de URLs ou mesmo caminhos de arquivos. Consequentemente, o Deno não usa um arquivo de configuração, como o package.json, para poder resolver suas dependências.&lt;/p&gt;

&lt;p&gt;O novo runtimer utiliza features do EcmaScript mais atual para poder resolver seus pacotes. Para importar uma biblioteca ou mesmo um outro módulo, utilizaremos o &lt;code&gt;import&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Outra diferença interessante, é que o Deno precisa de permissões explícitas, o que pode lhe parecer estranho no começo. Portanto, quando o programa que formos executar precisar acessar um arquivo do sistema, variável de ambiente ou mesmo acesso à internet, precisaremos requisitá-las de forma explícita.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t6P-O3sp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xrxz8dny2q0n2lz71mb4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t6P-O3sp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xrxz8dny2q0n2lz71mb4.jpg" alt="Photo by Nicolas Hoizey on Unsplash" width="640" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para instalar o Deno é super simples, basta a execução de uma linha de comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://deno.land/x/install/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para saber se está tudo ok rode o &lt;code&gt;--version&lt;/code&gt;. Se tudo estiver ok, a saída será algo como isso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ deno --version
deno 1.0.0
v8 8.4.300
typescript 3.9.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O programa mais simples que podemos rodar é o hello world do próprio Deno:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;deno run https://deno.land/std/examples/welcome.ts
Welcome to Deno 🦕
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E para escrever o nosso é tão simples como o exemplo deles. Primeiro vamos criar um arquivo chamado &lt;code&gt;index.js&lt;/code&gt; e escrever a seguinte linha de código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hello world, Deno&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Então podemos rodar com o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;deno run index.js
hello world, Deno
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simples assim 😎&lt;/p&gt;

&lt;h2&gt;
  
  
  Opinião
&lt;/h2&gt;

&lt;p&gt;O Deno trás uma nova alternativa para o tão adotado Node.js. Vejo de certa forma um bom potencial para crescer, principalmente se for bem adotado pela comunidade de TypeScript. Quanto em utilizar em ambiente de produção, acredito que ainda existe um caminho para ser traçado. O runtime ainda precisa conquistar o coração das grande provedores de cloud para poder ser adotado em larga escala. &lt;/p&gt;

</description>
      <category>deno</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>node</category>
    </item>
  </channel>
</rss>
