<?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: lastlink</title>
    <description>The latest articles on Forem by lastlink (@lastlink).</description>
    <link>https://forem.com/lastlink</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%2F111959%2Fbf7f6f25-ce35-4559-847f-73c6e77db4eb.png</url>
      <title>Forem: lastlink</title>
      <link>https://forem.com/lastlink</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/lastlink"/>
    <language>en</language>
    <item>
      <title>Securely Exposing LM Studio with Nginx Proxy + Auth + Manage loaded models</title>
      <dc:creator>lastlink</dc:creator>
      <pubDate>Wed, 19 Nov 2025 19:21:00 +0000</pubDate>
      <link>https://forem.com/lastlink/securely-exposing-lm-studio-with-nginx-proxy-auth-manage-loaded-models-27d5</link>
      <guid>https://forem.com/lastlink/securely-exposing-lm-studio-with-nginx-proxy-auth-manage-loaded-models-27d5</guid>
      <description>&lt;p&gt;Most guides highlight &lt;strong&gt;Cloudflare tunnels&lt;/strong&gt; or similar services for exposing local AI models. Tunnels are certainly convenient, but if you leave them open without any authentication, they can become insecure. In those cases, a VPN is often recommended to provide protection. Alternatively, you can set up a &lt;strong&gt;direct, secure, and controlled proxy&lt;/strong&gt; for LM Studio that adds its own authentication layer — giving you safe access without relying on a VPN.&lt;/p&gt;

&lt;p&gt;This article shows how to set up an &lt;strong&gt;Nginx proxy with authentication&lt;/strong&gt; so you can safely expose LM Studio to the internet and use it anywhere, including on your phone.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Project Setup
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Download LM Studio&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Grab the latest release from the &lt;a href="https://lmstudio.ai" rel="noopener noreferrer"&gt;LM Studio website&lt;/a&gt; and install it on your machine. Turn on server and change port to 1250&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clone the repo and start the dev server:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/funktechno/lm_studio_manager.git
&lt;span class="nb"&gt;cd &lt;/span&gt;lm_studio_manager
npm &lt;span class="nb"&gt;install
cp&lt;/span&gt; .env.sample .env
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Fyqxrhcpaxmq17c5upfir.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fyqxrhcpaxmq17c5upfir.png" alt="LM Studio Preview" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fiboax4ge21ipqvui9mgl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fiboax4ge21ipqvui9mgl.png" alt="Model Loading" width="800" height="186"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;use this tool to manage loaded models&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🐳 Run Nginx Proxy in Docker
&lt;/h2&gt;

&lt;p&gt;We’ll run Nginx in a container, mounting a template config and an .htpasswd file for Basic Auth.&lt;/p&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Important:&lt;/strong&gt; Remember to change &lt;code&gt;my-secret-key&lt;/code&gt; and update your &lt;code&gt;.htpasswd&lt;/code&gt; file with your own credentials before running exposing this to the internet!&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; lmstudio-proxy &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 1234:1234 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;API_SECRET_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;my-secret-key &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; .htpasswd:/etc/nginx/.htpasswd:ro &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; ./nginx.conf.template:/etc/nginx/templates/nginx.conf.template:ro &lt;span class="se"&gt;\&lt;/span&gt;
  nginx:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -d `
  --name lmstudio-proxy `
  -p 1234:1234 `
  -e API_SECRET_KEY=my-secret-key `
  -v ${PWD}\nginx.conf.template:/etc/nginx/templates/nginx.conf.template:ro `
  -v ${PWD}/.htpasswd:/etc/nginx/.htpasswd:ro `
  nginx:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔑 Generating a .htpasswd File
&lt;/h2&gt;

&lt;p&gt;You can generate a password file using &lt;a href="https://www.web2generators.com/apache-tools/htpasswd-generator" rel="noopener noreferrer"&gt;this website&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📱 Access Anywhere
&lt;/h2&gt;

&lt;p&gt;Once the proxy is running, you can access LM Studio securely:&lt;/p&gt;

&lt;p&gt;Web UI: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://localhost:1234/manage/" rel="noopener noreferrer"&gt;http://localhost:1234/manage/&lt;/a&gt; default admin, admin&lt;/li&gt;
&lt;li&gt;or tunnel of choice &lt;a href="https://yourdomain/manage/" rel="noopener noreferrer"&gt;https://yourdomain/manage/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;API:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://localhost:1234/" rel="noopener noreferrer"&gt;http://localhost:1234/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;tunnel &lt;a href="https://yourdomain/" rel="noopener noreferrer"&gt;https://yourdomain/&lt;/a&gt; 
with Bearer token auth&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because this setup uses HTTPS + Basic Auth/Bearer tokens, you can connect from any device — laptop, tablet, or phone — without needing a VPN.&lt;/p&gt;

&lt;p&gt;⚙️ Sample &lt;a href="https://marketplace.visualstudio.com/items?itemName=Continue.continue" rel="noopener noreferrer"&gt;Continue.dev&lt;/a&gt; vscode extension Config&lt;br&gt;
Here’s a sample &lt;code&gt;config.yml&lt;/code&gt; for Continue.dev pointing to your proxy:&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;Local Config&lt;/span&gt;
&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1.0.0&lt;/span&gt;
&lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;models&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;Local LM Studio Server&lt;/span&gt;
    &lt;span class="na"&gt;provider&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;lmstudio&lt;/span&gt;
    &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ministral-8b-instruct-2410&lt;/span&gt;
    &lt;span class="c1"&gt;# specify model loaded&lt;/span&gt;
    &lt;span class="c1"&gt;# codegemma-7b-it&lt;/span&gt;
    &lt;span class="c1"&gt;# qwen/qwen2.5-coder-14b - slow, but not super slow&lt;/span&gt;
    &lt;span class="c1"&gt;# deepseek/deepseek-r1-0528-qwen3-8b&lt;/span&gt;
    &lt;span class="c1"&gt;# deepseek-coder-33b-instruct&lt;/span&gt;
    &lt;span class="c1"&gt;# vertex-qwen-7b-ollama-coder-shadcn-10epoch-v1.3&lt;/span&gt;
    &lt;span class="c1"&gt;# ministral-8b-instruct-2410&lt;/span&gt;
    &lt;span class="c1"&gt;# nginx proxy auth&lt;/span&gt;
    &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-secret-key&lt;/span&gt;
    &lt;span class="na"&gt;api_base&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://yourdomain/"&lt;/span&gt;
    &lt;span class="na"&gt;roles&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;chat&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;edit&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;apply&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;autocomplete&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;summarize&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ Summary
&lt;/h2&gt;

&lt;p&gt;Download repo → npm run dev&lt;/p&gt;

&lt;p&gt;Run Docker → Nginx proxy with auth&lt;/p&gt;

&lt;p&gt;Expose securely → Basic Auth for /manage/, Bearer token for API&lt;/p&gt;

&lt;p&gt;Use anywhere → Works on any device, no VPN required&lt;/p&gt;

&lt;p&gt;With this setup, you create a secure, self‑hosted gateway to LM Studio — no external dependencies and no VPN needed, just a proxy you fully control.&lt;/p&gt;

</description>
      <category>ollama</category>
      <category>openapi</category>
      <category>lmstudio</category>
      <category>localai</category>
    </item>
    <item>
      <title>Hacktoberfest 2025 — Advancing SQL Tooling in Draw.io</title>
      <dc:creator>lastlink</dc:creator>
      <pubDate>Wed, 29 Oct 2025 12:21:00 +0000</pubDate>
      <link>https://forem.com/lastlink/hacktoberfest-2025-advancing-sql-tooling-in-drawio-35bi</link>
      <guid>https://forem.com/lastlink/hacktoberfest-2025-advancing-sql-tooling-in-drawio-35bi</guid>
      <description>&lt;p&gt;Back in &lt;a href="https://dev.to/lastlink/my-hacktober-2022-contributions-1bm6"&gt;Hacktoberfest 2022&lt;/a&gt;, I kicked off a set of contributions aimed at making SQL DDL generation and schema visualization easier using open-source tools. This year, I revisited those efforts with a sharper focus on Draw.io plugin development.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔧 What’s New in 2025
&lt;/h2&gt;

&lt;p&gt;Draw.io remains a powerful tool for diagramming, but its native support for SQL workflows is limited. To bridge that gap, I’ve continued building and refining third-party plugins that allow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Importing SQL DDLs into Draw.io diagrams&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exporting diagrams back into SQL DDL&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved foreign key line generation across multiple database types&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Support for PostgreSQL relationship arrows (finally!)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These updates are part of the &lt;strong&gt;&lt;a href="https://github.com/funktechno/sqltooling-drawio" rel="noopener noreferrer"&gt;&lt;code&gt;sqltooling-drawio&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; repo, which now includes better test coverage, multi-DB compatibility, and easier integration with the Draw.io desktop app.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 Pull Requests &amp;amp; Plugin Highlights
&lt;/h2&gt;

&lt;p&gt;I submitted two key PRs to the Draw.io repo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/jgraph/drawio/pull/3092" rel="noopener noreferrer"&gt;Export SQL DDL plugin&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.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%2Fudelk5geauro7hjwbnyz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fudelk5geauro7hjwbnyz.png" alt="SQL Export Example" width="800" height="579"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/jgraph/drawio/pull/3091" rel="noopener noreferrer"&gt;Improved SQL parser for import plugin&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.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%2Flmzam8nd9w1mouqs3v63.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Flmzam8nd9w1mouqs3v63.png" alt="SQL Import FK Preview" width="800" height="575"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;While Draw.io contributions remain closed-source, these plugins can be manually installed and used with the desktop version or VSCode integration.&lt;/p&gt;

&lt;h2&gt;
  
  
  📦 Supporting Packages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/@funktechno/sqlsimpleparser" rel="noopener noreferrer"&gt;&lt;code&gt;@funktechno/sqlsimpleparser&lt;/code&gt;&lt;/a&gt;: Converts SQL DDL into JSON models for Draw.io import&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>hacktoberfest2025</category>
      <category>sql</category>
      <category>drawio</category>
      <category>hacktoberfest</category>
    </item>
    <item>
      <title>My Hacktober 2022 Contributions mostly SQL DDL uml extensions</title>
      <dc:creator>lastlink</dc:creator>
      <pubDate>Wed, 12 Oct 2022 01:14:40 +0000</pubDate>
      <link>https://forem.com/lastlink/my-hacktober-2022-contributions-1bm6</link>
      <guid>https://forem.com/lastlink/my-hacktober-2022-contributions-1bm6</guid>
      <description>&lt;p&gt;Something that has been on my TODO list is to write a tool for easy sql DDL generation using some open sourced tools. &lt;/p&gt;

&lt;p&gt;I really like working with UML and entity relations for modeling tables and relationships in a database schema. Sadly only lucidcharts had the best functionality for exporting SQL DDL for easy create tables. There are some options specific to the database you are using, but not easily cross database type.&lt;/p&gt;

&lt;p&gt;I found out that mermaid had an erDiagram type and that there are UML and entity relation objects in &lt;a href="https://www.diagrams.net/" rel="noopener noreferrer"&gt;https://www.diagrams.net/&lt;/a&gt; which uses drawio.&lt;/p&gt;

&lt;p&gt;I worked on making changes to support easy importing of a database schema and also exporting it back out as sql DDL, pretty happy with my results.&lt;/p&gt;

&lt;h2&gt;
  
  
  Packages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Mermaid sql package &lt;a href="https://www.npmjs.com/package/@funktechno/little-mermaid-2-the-sql" rel="noopener noreferrer"&gt;@funktechno/little-mermaid-2-the-sql&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I added in the samples how to generate a mermaid erDiagram from an existing database using schemacrawler.&lt;/li&gt;
&lt;li&gt;sample er diagram
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  erDiagram
  %% comment 1
  Persons {
      int PersonID PK "NOT NULL"
      varchar255 LastName
      varchar255 FirstName
      varchar255 Address
      varchar255 City
  }

  %% comment 2
  Orders {
      int OrderID PK "NOT NULL"
      int PersonID FK "NOT NULL"
  }

  Persons ||--o{ Orders : "[Persons.PersonId] to [Orders.PersonId]"   
&lt;/code&gt;&lt;/pre&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;sample output&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="nv"&gt;"Persons"&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="nv"&gt;"City"&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="nv"&gt;"Address"&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="nv"&gt;"FirstName"&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="nv"&gt;"LastName"&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="nv"&gt;"PersonID"&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;"PersonID"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="nv"&gt;"Orders"&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="nv"&gt;"PersonID"&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="nv"&gt;"OrderID"&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;"OrderID"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="k"&gt;FOREIGN&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;"PersonId"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;REFERENCES&lt;/span&gt; &lt;span class="nv"&gt;"Persons"&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;"PersonId"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tool for converting a SQL DDL to simple json models for easy import into drawio &lt;a href="https://www.npmjs.com/package/@funktechno/sqlsimpleparser" rel="noopener noreferrer"&gt;@funktechno/sqlsimpleparser&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://github.com/jgraph/drawio" rel="noopener noreferrer"&gt;Drawio&lt;/a&gt; pull requests
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I put in 2 pull requests into drawio to enable sql import and export, from their readme they are closed contributions. So I hope that these changes make them in regardless. Very useful, you can also run the plugins manually. I used the desktop github repo for testing and running an electron debugger.&lt;/li&gt;
&lt;li&gt;I've pulled my changes into a repository &lt;a href="https://github.com/funktechno/sqltooling-drawio" rel="noopener noreferrer"&gt;sqltooling-drawio&lt;/a&gt; and added notes on multiple ways to install the plugins and use with drawio. It's also easier to contribute to. There is a sql plugin for importing/exporting sql DDL as well as a nosql version for importing/exporting openapi spec and typescript interfaces.&lt;/li&gt;
&lt;li&gt;pull requests (now closed since they don't allow contributions)

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://github.com/jgraph/drawio/pull/3092" rel="noopener noreferrer"&gt;export sql DLL plugin&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Preview
&lt;img src="https://media2.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%2Foney32q4kp88onierul3.png" alt="export sql preview" width="800" height="576"&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://github.com/jgraph/drawio/pull/3091" rel="noopener noreferrer"&gt;improved sql parser for sql import plugin&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Preview
&lt;img src="https://media2.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%2Fih45eyi5el1knudc7b82.png" alt="insert sql uml diagram preview" width="800" height="542"&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  New 2025 contributions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;see &lt;a href="https://dev.to/lastlink/hacktoberfest-2025-advancing-sql-tooling-in-drawio-35bi"&gt;Hacktoberfest 2025&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>hacktoberfest</category>
      <category>sql</category>
      <category>mermaid</category>
      <category>drawio</category>
    </item>
    <item>
      <title>dotnet-ci-pipelines</title>
      <dc:creator>lastlink</dc:creator>
      <pubDate>Wed, 10 Nov 2021 14:04:02 +0000</pubDate>
      <link>https://forem.com/lastlink/dotnet-ci-pipelines-opc</link>
      <guid>https://forem.com/lastlink/dotnet-ci-pipelines-opc</guid>
      <description>&lt;h3&gt;
  
  
  My Workflow
&lt;/h3&gt;

&lt;p&gt;Note: # description: A project to demonstrate using github actions for a .net core 3.1 project. Uses unit tests, json snapshots, database tests using docker service containers. Demonstrates their use in github actions, bitbucket, azure devops, and gitlab.&lt;/p&gt;

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

&lt;p&gt;Note: # Maintainer Must-Haves&lt;/p&gt;

&lt;h3&gt;
  
  
  Yaml File or Link to 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://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/lastlink" rel="noopener noreferrer"&gt;
        lastlink
      &lt;/a&gt; / &lt;a href="https://github.com/lastlink/dotnet-ci-pipelines" rel="noopener noreferrer"&gt;
        dotnet-ci-pipelines
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      dotnet ci cd pipelines for github, azure devops, gitlab, bitbucket, and etc.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;DOTNET CORE CI PIPELINE EXAMPLE:&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Goal to have dotnet core c# example pipelines for major git source control dev ops including github, azure devops, gitlab, bitbucket, and etc. Should auto run only on a new pull request, show test results in native ui per website, code coverage, and some additional manual steps running code quality analysis. Badge support native is also nice or from &lt;a href="https://shields.io/category/build" rel="nofollow noopener noreferrer"&gt;https://shields.io/category/build&lt;/a&gt;. Also will try service containers and database unit tests
Originally off of &lt;a href="https://gitlab.com/tobiaskoch/gitlab-ci-example-dotnetcore" rel="nofollow noopener noreferrer"&gt;gitlab-ci-example-dotnetcore&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Contribution&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Please do a pull request to the proper source control pipeline that you are trying to update.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;TOC&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/lastlink/dotnet-ci-pipelines#--github-actions-" rel="noopener noreferrer"&gt;GitHub Actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lastlink/dotnet-ci-pipelines#--bitbucket" rel="noopener noreferrer"&gt;Bitbucket&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lastlink/dotnet-ci-pipelines#--azure-devops-" rel="noopener noreferrer"&gt;Azure DevOps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lastlink/dotnet-ci-pipelines#--gitlab--------" rel="noopener noreferrer"&gt;Gitlab pipelines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lastlink/dotnet-ci-pipelines#other" rel="noopener noreferrer"&gt;Other notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;[ ] &lt;a href="https://github.com/lastlink/dotnet-ci-pipelines" rel="noopener noreferrer"&gt;GitHub Actions&lt;/a&gt; &lt;a href="https://github.com/lastlink/dotnet-ci-pipelines/actions" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/lastlink/dotnet-ci-pipelines/workflows/.net%20core/badge.svg" alt="Actions Status"&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;/div&gt;
&lt;ul class="contains-task-list"&gt;
&lt;li&gt;
&lt;a href="https://help.github.com/en/github/setting-up-and-managing-billing-and-payments-on-github/about-billing-for-github-actions" rel="noopener noreferrer"&gt;limits&lt;/a&gt; 2,000 (per month) to 20 concurrent jobs support windows, ubuntu, mac
&lt;ul&gt;
&lt;li&gt;doesn't currently support retry and max timeout although will cancel when limit reached.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Badges - workflow&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 api docs - docfx html only&lt;/li&gt;
&lt;li&gt;[!] Tests - no…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/lastlink/dotnet-ci-pipelines" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&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;.NET Core&lt;/span&gt;

&lt;span class="c1"&gt;# use https://marketplace.visualstudio.com/items?itemName=me-dutour-mathieu.vscode-github-actions to validate yml in vscode&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;NUGET_PACKAGES_DIRECTORY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.nupkg'&lt;/span&gt;
  &lt;span class="na"&gt;RESHARPER_CLI_NAME&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;JetBrains.ReSharper.CommandLineTools.Unix'&lt;/span&gt;
  &lt;span class="na"&gt;RESHARPER_CLI_VERSION&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2019.2.3"&lt;/span&gt;
  &lt;span class="na"&gt;DOCKER_DRIVER&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;overlay&lt;/span&gt;
  &lt;span class="na"&gt;CONTAINER_IMAGE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;codeclimate/codeclimate&lt;/span&gt;
  &lt;span class="na"&gt;CONTAINER_TAG&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;0.85.2'&lt;/span&gt;
  &lt;span class="na"&gt;rIds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.rIds }}&lt;/span&gt;
  &lt;span class="na"&gt;dotnetVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;3.1.102&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;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;master&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;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;Setup .NET Core&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-dotnet@v1&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;dotnet-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ env.dotnetVersion}}&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 with dotnet&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;export DOTNET_CLI_TELEMETRY_OPTOUT=1&lt;/span&gt;
        &lt;span class="s"&gt;dotnet publish -c Release&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;Tests&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;cp MyProject.Repository.Test/Data/appSettings.gitlab.json MyProject.Repository.Test/Data/AppSettings.json&lt;/span&gt;
        &lt;span class="s"&gt;dotnet test --logger "junit" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput='./TestResults/'&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;Coverage Report&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;dotnet --version&lt;/span&gt;
        &lt;span class="s"&gt;dotnet tool install dotnet-reportgenerator-globaltool --tool-path tools&lt;/span&gt;
        &lt;span class="s"&gt;./tools/reportgenerator "-reports:**/TestResults/coverage.opencover.xml;" "-targetdir:Reports" -reportTypes:TextSummary;&lt;/span&gt;
        &lt;span class="s"&gt;./tools/reportgenerator "-reports:**/TestResults/coverage.opencover.xml;" "-targetdir:Reports" -reportTypes:Html;&lt;/span&gt;
        &lt;span class="s"&gt;./tools/reportgenerator "-reports:**/TestResults/coverage.opencover.xml;" "-targetdir:Reports" -reportTypes:Badges;&lt;/span&gt;
        &lt;span class="s"&gt;cat ./Reports/Summary.txt&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/upload-artifact@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;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;CodeCoverage&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;Reports&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;Resharper Code Quality&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;# apt update &amp;amp;&amp;amp; apt install -y curl zip unzip&lt;/span&gt;
        &lt;span class="s"&gt;curl -LO "https://download.jetbrains.com/resharper/ReSharperUltimate.$RESHARPER_CLI_VERSION/$RESHARPER_CLI_NAME.$RESHARPER_CLI_VERSION.zip"&lt;/span&gt;
        &lt;span class="s"&gt;unzip -q $RESHARPER_CLI_NAME.$RESHARPER_CLI_VERSION.zip -d "resharper"&lt;/span&gt;
        &lt;span class="s"&gt;mkdir -p CodeQuality&lt;/span&gt;
        &lt;span class="s"&gt;files=(*.sln)&lt;/span&gt;
        &lt;span class="s"&gt;sh ./resharper/dupfinder.sh "${files[0]}" --output=CodeQuality/dupfinderReport.html --format=Html&lt;/span&gt;
        &lt;span class="s"&gt;sh ./resharper/inspectcode.sh "${files[0]}" --output=CodeQuality/inspectcodeReport.html --format=Html&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/upload-artifact@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;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;CodeQuality&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;CodeQuality&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;prerelease&lt;/span&gt;
      &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ env.rIds }} != ''&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;echo 'build, obfuscate, and release'&lt;/span&gt;
        &lt;span class="s"&gt;dotnet tool install Obfuscar.GlobalTool --tool-path tools --version 2.2.28&lt;/span&gt;
        &lt;span class="s"&gt;bash scripts/extractRelease.sh&lt;/span&gt;
        &lt;span class="s"&gt;export rIds=${{ env.rIds }}&lt;/span&gt;
        &lt;span class="s"&gt;bash ./scripts/pipeline.sh&lt;/span&gt;
        &lt;span class="s"&gt;bash ./scripts/finalRelease.sh&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;upload release&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/upload-artifact@v2&lt;/span&gt;
      &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ env.rIds }} != ''&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;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Release_unix&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;Release/post&lt;/span&gt;

  &lt;span class="na"&gt;build-win&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;windows-latest&lt;/span&gt;
    &lt;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;Setup .NET Core&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-dotnet@v1&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;dotnet-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ env.dotnetVersion}}&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 with dotnet&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;set DOTNET_CLI_TELEMETRY_OPTOUT=1&lt;/span&gt;
        &lt;span class="s"&gt;dotnet publish -c Release&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;Tests&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;copy MyProject.Repository.Test/Data/appSettings.gitlab.json MyProject.Repository.Test/Data/AppSettings.json&lt;/span&gt;
        &lt;span class="s"&gt;dotnet test --logger "junit" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput='.\TestResults\'&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;prerelease&lt;/span&gt;
      &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ env.rIds }} != ''&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;echo "build, obfuscate, and release"&lt;/span&gt;
        &lt;span class="s"&gt;dotnet tool install Obfuscar.GlobalTool --tool-path tools --version 2.2.28&lt;/span&gt;
        &lt;span class="s"&gt;.\scripts\extractRelease.cmd&lt;/span&gt;
        &lt;span class="s"&gt;set rIds=$env:rIds&lt;/span&gt;
        &lt;span class="s"&gt;.\scripts\pipeline.cmd&lt;/span&gt;
        &lt;span class="s"&gt;.\scripts\finalRelease.cmd&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;upload release&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/upload-artifact@v2&lt;/span&gt;
      &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ env.rIds }} != ''&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;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Release_win&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;Release\post&lt;/span&gt;

  &lt;span class="na"&gt;unit_test_db_mssql&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="c1"&gt;# Service containers to run with `runner-job`&lt;/span&gt;
    &lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="c1"&gt;# Label used to access the service container&lt;/span&gt;
      &lt;span class="na"&gt;localhost_mysql&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Docker Hub image&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;mcr.microsoft.com/mssql/server:2019-latest&lt;/span&gt;
        &lt;span class="c1"&gt;#&lt;/span&gt;
        &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="c1"&gt;# Opens tcp port 6379 on the host and service container&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;1433:1433&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;GIT_SUBMODULE_STRATEGY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;recursive&lt;/span&gt;
          &lt;span class="na"&gt;ACCEPT_EULA&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Y&lt;/span&gt;
          &lt;span class="na"&gt;SA_PASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yourStrong(!)Password&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;Setup .NET Core&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-dotnet@v1&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;dotnet-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ env.dotnetVersion}}&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;enabledb&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cp ./MyProject.Repository.Test/Data/appSettings.bitbucket.mssql.json ./MyProject.Repository.Test/Data/AppSettings.json&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;Tests&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;cd MyProject.Repository.Test&lt;/span&gt;
        &lt;span class="s"&gt;dotnet test --logger "junit" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput='./TestResults/'&lt;/span&gt;

  &lt;span class="na"&gt;unit_test_db_postgres&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="c1"&gt;# Service containers to run with `runner-job`&lt;/span&gt;
    &lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="c1"&gt;# Label used to access the service container&lt;/span&gt;
      &lt;span class="na"&gt;redis&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Docker Hub image&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;postgres:11&lt;/span&gt;
        &lt;span class="c1"&gt;#&lt;/span&gt;
        &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;5432:5432&lt;/span&gt;
        &lt;span class="c1"&gt;# Provide the password for postgres&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;POSTGRES_DB&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mockDb&lt;/span&gt;
          &lt;span class="na"&gt;POSTGRES_USER&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgres&lt;/span&gt;
          &lt;span class="na"&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mysecretpassword"&lt;/span&gt;
          &lt;span class="na"&gt;POSTGRES_HOST_AUTH_METHOD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;trust&lt;/span&gt;
        &lt;span class="c1"&gt;# Set health checks to wait until postgres has started&lt;/span&gt;
        &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;&amp;gt;-&lt;/span&gt;
          &lt;span class="s"&gt;--health-cmd pg_isready&lt;/span&gt;
          &lt;span class="s"&gt;--health-interval 10s&lt;/span&gt;
          &lt;span class="s"&gt;--health-timeout 5s&lt;/span&gt;
          &lt;span class="s"&gt;--health-retries 5&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;Setup .NET Core&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-dotnet@v1&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;dotnet-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ env.dotnetVersion}}&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;enabledb&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cp ./MyProject.Repository.Test/Data/appSettings.devops.postgres.json ./MyProject.Repository.Test/Data/AppSettings.json&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;Tests&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;cd MyProject.Repository.Test&lt;/span&gt;
        &lt;span class="s"&gt;dotnet test --logger "junit" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput='./TestResults/'&lt;/span&gt;

  &lt;span class="na"&gt;unit_test_db_mysql&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="c1"&gt;# Service containers to run with `runner-job`&lt;/span&gt;
    &lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="c1"&gt;# Label used to access the service container&lt;/span&gt;
      &lt;span class="na"&gt;redis&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Docker Hub image&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;mysql:5.7.29&lt;/span&gt;
        &lt;span class="c1"&gt;#&lt;/span&gt;
        &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;3306:3306&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;MYSQL_DATABASE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mockDb"&lt;/span&gt;
          &lt;span class="na"&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mysecretpw"&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;Setup .NET Core&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-dotnet@v1&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;dotnet-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ env.dotnetVersion}}&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;enabledb&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cp ./MyProject.Repository.Test/Data/appSettings.devops.mysql.json ./MyProject.Repository.Test/Data/AppSettings.json&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;Tests&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;cd MyProject.Repository.Test&lt;/span&gt;
        &lt;span class="s"&gt;dotnet test --logger "junit" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput='./TestResults/'&lt;/span&gt;

  &lt;span class="na"&gt;code_docs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;windows-latest&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;code documentation&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;docfx&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;curl -LO "https://github.com/dotnet/docfx/releases/download/v2.48/docfx.zip"&lt;/span&gt;
          &lt;span class="s"&gt;powershell.exe -NoP -NonI -Command "Expand-Archive '.\docfx.zip' '.\docfx\'" &lt;/span&gt;
          &lt;span class="s"&gt;./docfx/docfx.exe&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/upload-artifact@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;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;CodeDocs&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;_site&lt;/span&gt;

  &lt;span class="na"&gt;security&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;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Snyk Security Scan&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;Setup .NET Core&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-dotnet@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;dotnet-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ env.dotnetVersion}}&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 with dotnet&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;export DOTNET_CLI_TELEMETRY_OPTOUT=1&lt;/span&gt;
          &lt;span class="s"&gt;dotnet build&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;Run Snyk to check for vulnerabilities&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;snyk/actions/dotnet@master&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;args&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;--file=MyProject.sln&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;SNYK_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.SNYK_TOKEN }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Additional Resources / Info
&lt;/h3&gt;

&lt;p&gt;Note: # &lt;a href="https://github.com/lastlink/dotnet-ci-pipelines/blob/master/.github/workflows/dotnetcore.yml" rel="noopener noreferrer"&gt;https://github.com/lastlink/dotnet-ci-pipelines/blob/master/.github/workflows/dotnetcore.yml&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: # &lt;a class="mentioned-user" href="https://dev.to/lastlink"&gt;@lastlink&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;[Reminder]: # (Submissions are due on December 8th, 2021 (11:59 PM PT or 2 AM ET/6 AM UTC on December 9th).&lt;/p&gt;

</description>
      <category>actionshackathon21</category>
      <category>github</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
