<?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: dreamcodestudio</title>
    <description>The latest articles on DEV Community by dreamcodestudio (@dreamcodestudio).</description>
    <link>https://dev.to/dreamcodestudio</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%2F1193715%2F09a45954-56aa-4665-a98b-e69b6d2b77d3.png</url>
      <title>DEV Community: dreamcodestudio</title>
      <link>https://dev.to/dreamcodestudio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dreamcodestudio"/>
    <language>en</language>
    <item>
      <title>The secret to publishing UPM package to the Asset Store</title>
      <dc:creator>dreamcodestudio</dc:creator>
      <pubDate>Mon, 04 Mar 2024 12:13:30 +0000</pubDate>
      <link>https://dev.to/dreamcodestudio/the-secret-to-publishing-upm-package-to-the-asset-store-1ja5</link>
      <guid>https://dev.to/dreamcodestudio/the-secret-to-publishing-upm-package-to-the-asset-store-1ja5</guid>
      <description>&lt;h2&gt;
  
  
  📘 Unity native solution
&lt;/h2&gt;

&lt;p&gt;In 2018, Unity's developers released a centralized repository for iterative updates to their Editor engine and extensions called UPM - Unity Package Manager.&lt;/p&gt;

&lt;p&gt;Later, third-party services appeared through which UPM packages were distributed:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="https://openupm.com/"&gt;OpenUPM&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="https://www.npmjs.com/"&gt;NpmJs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="https://verdaccio.org/"&gt;Verdaccio&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Separately, &lt;a href="https://github.com/GlitchEnzo/NuGetForUnity"&gt;NuGetForUnity&lt;/a&gt; can be highlighted, which runs the NuGet client within the Unity editor.&lt;/p&gt;

&lt;p&gt;Despite this, more than 93 thousand assets and extensions have been published on the Asset Store, but it does not officially offer UPM package downloading functionality.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 Seeking a solution
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://assetstore.unity.com/packages/tools/utilities/asset-store-publishing-tools-115"&gt;Asset Store Tools&lt;/a&gt; v11.3.1, allows you to download assets from the following sources:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;From Assets Folder&lt;/li&gt;
  &lt;li&gt;Pre-exported .unitypackage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fun1ozvh3d0cwrllxrzc1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fun1ozvh3d0cwrllxrzc1.png" alt="upload-type" width="688" height="179"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looking through the sources of the Asset Store Tools, we see the experimental functionality wrapped in the&lt;br&gt;&lt;br&gt;
 &lt;code&gt;#if UNITY_ASTOOLS_EXPERIMENTAL&lt;/code&gt; directive:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fierqdgljcaffdmq0i52u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fierqdgljcaffdmq0i52u.png" alt="experimental-define" width="800" height="48"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The functionality has already been on the Unity side, but it is not available to third-party developers:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxdadm6r9hzg3abtjh8lx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxdadm6r9hzg3abtjh8lx.png" alt="define-example" width="800" height="147"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Meanwhile, Unity Technologies developers load their own assets in the form of UPM packages:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzajelqw0xlt219upu3e6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzajelqw0xlt219upu3e6.png" alt="asset-tools-hierarchy" width="240" height="176"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To achieve a similar result, follow these steps:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;1&lt;/em&gt; - Create a draft package using the &lt;a href="https://publisher.unity.com/packages"&gt;Unity Publisher Portal&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5b54ruaifk4em2cog80.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5b54ruaifk4em2cog80.png" alt="draft-package" width="800" height="271"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7otuvup1cwd7vl8zpag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7otuvup1cwd7vl8zpag.png" alt="assets-store-uploader" width="790" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2&lt;/em&gt; - Add the value &lt;code&gt;UNITY_ASTOOLS_EXPERIMENTAL&lt;/code&gt; to &lt;em&gt;Project Settings &amp;gt; Scripting Define Symbols&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8t9qvsd2w1xdvcs3us4n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8t9qvsd2w1xdvcs3us4n.png" alt="scripting-define-symbols:" width="536" height="118"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;3&lt;/em&gt; - After compilation is complete, select the option to load the local UPM package and specify the package path:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxq9m0neeem5jzaz6xxz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxq9m0neeem5jzaz6xxz.png" alt="package-path" width="693" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;4&lt;/em&gt; - Click the &lt;code&gt;Upload&lt;/code&gt; button and 🎉:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg5dnhg2k3ju8tvnf8nyq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg5dnhg2k3ju8tvnf8nyq.png" alt="smart-importer-preview" width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💻 Conclusion
&lt;/h2&gt;

&lt;p&gt;The type of download using UPM packages is suitable for assets or tools that have version control and configure dependencies between packages.&lt;/p&gt;

&lt;p&gt;This results in a uniform asset structure for the Unity Package Registry and Asset Store.&lt;/p&gt;

&lt;p&gt;In future Unity releases, it is likely that an open solution will be published for publishers.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎁 Helpful Links
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://youtu.be/-W7BtzhHUpA"&gt;Guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/dreamcodestudio/com.dreamcode.editor.smart-importer"&gt;Smart Importer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Unity-Technologies/com.unity.asset-store-tools"&gt;Asset Store Tools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.unity3d.com/Manual/Packages.html"&gt;Unity’s Package Manager&lt;/a&gt;&lt;/p&gt;

</description>
      <category>unity3d</category>
      <category>gamedev</category>
      <category>assets</category>
      <category>npm</category>
    </item>
    <item>
      <title>Setup Nullable reference type in Unity</title>
      <dc:creator>dreamcodestudio</dc:creator>
      <pubDate>Thu, 04 Jan 2024 16:39:13 +0000</pubDate>
      <link>https://dev.to/dreamcodestudio/setup-nullable-reference-type-in-unity-4e27</link>
      <guid>https://dev.to/dreamcodestudio/setup-nullable-reference-type-in-unity-4e27</guid>
      <description>&lt;h2&gt;
  
  
  🎯 What is Nullable reference type?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Nullable reference type&lt;/code&gt; explicitly specifies whether a variable must contain a value or may not.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Design-time analysis&lt;/li&gt;
  &lt;li&gt;Explicit API contracts&lt;/li&gt;
  &lt;li&gt;Search for potential locations with NullReference&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📑 Software requirements
&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;.NET Standard 2.1+&lt;/li&gt;
  &lt;li&gt;Unity 2021+&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📃 How to turn on static analysis
&lt;/h2&gt;

&lt;h3&gt;
  
  
  To analyze the individual assemblies
&lt;/h3&gt;

&lt;p&gt;Create a &lt;code&gt;csc.rsp&lt;/code&gt; file next to the &lt;code&gt;asmdef&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbr4k813znex2s6yjud0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbr4k813znex2s6yjud0.png" alt="csc.rsp path" width="276" height="108"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the &lt;code&gt;nullable&lt;/code&gt; argument to the contents of &lt;code&gt;csc.rsp&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-nullable:enable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  To analyze individual .cs files
&lt;/h3&gt;

&lt;p&gt;Add the &lt;code&gt;#nullable&lt;/code&gt; annotation context to the &lt;code&gt;.cs&lt;/code&gt; content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#nullable enable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foeqlu69dhnv34ql9wvnc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foeqlu69dhnv34ql9wvnc.png" alt="nullable context" width="380" height="154"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💻 Migration Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What to do with Unity UI bindings and DI Inject attributes?
&lt;/h3&gt;

&lt;p&gt;Explicitly tell the analyzer that you guarantee their assignment and suppress the warnings using the &lt;code&gt;!&lt;/code&gt; null-forgiving operator.&lt;/p&gt;

&lt;h4&gt;
  
  
  Unity UI example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;SerializeField&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt; &lt;span class="n"&gt;_image&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;!;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  VContainer DI example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;Sandbox.Domain&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;MoveController&lt;/span&gt; &lt;span class="n"&gt;_moveController&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;!;&lt;/span&gt;

    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Inject&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MoveController&lt;/span&gt; &lt;span class="n"&gt;moveController&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;_moveController&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;moveController&lt;/span&gt;&lt;span class="p"&gt;;&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;/div&gt;



&lt;p&gt;To exclude a separate part of the code from analysis, you can use the following annotation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#nullable disable
&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;Sandbox.Server.Responses&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Serializable&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserResponse&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;;&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;/div&gt;



&lt;h2&gt;
  
  
  🎁 Helpful Links
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://youtu.be/NZ-rypeT8iw"&gt;Nullable reference types in Unity&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://learn.microsoft.com/en-us/dotnet/csharp/nullable-references"&gt;Microsoft guide&lt;/a&gt;&lt;/p&gt;

</description>
      <category>unity3d</category>
      <category>gamedev</category>
      <category>dotnet</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Automating publishing Unity packages to npm registry</title>
      <dc:creator>dreamcodestudio</dc:creator>
      <pubDate>Wed, 25 Oct 2023 12:24:37 +0000</pubDate>
      <link>https://dev.to/dreamcodestudio/automating-publishing-unity-packages-to-npm-registry-50i2</link>
      <guid>https://dev.to/dreamcodestudio/automating-publishing-unity-packages-to-npm-registry-50i2</guid>
      <description>&lt;h2&gt;
  
  
  🎯 Why npmjs registry?
&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Ready up to Open Source projects&lt;/li&gt;
  &lt;li&gt;In-box GitHub Actions solution&lt;/li&gt;
  &lt;li&gt;CLI support&lt;/li&gt;
  &lt;li&gt;Allows tracking changes history via Unity Package Manager&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Generate &lt;code&gt;Access Token&lt;/code&gt; in npmjs registry&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F24bc4u2ame3kcvu3zaqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F24bc4u2ame3kcvu3zaqu.png" alt="generation npm access token" width="800" height="107"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select &lt;code&gt;Access Token&lt;/code&gt; type&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkga1xomxhm6w67yyhf6n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkga1xomxhm6w67yyhf6n.png" alt="access token type" width="685" height="687"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add npm &lt;code&gt;Access Token&lt;/code&gt; to GitHub repository secrets&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fudqpv3ucvbtp7kd8fdlp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fudqpv3ucvbtp7kd8fdlp.png" alt="filling in github repository secrets" width="799" height="606"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Config GitHub workflow using a &lt;code&gt;yml&lt;/code&gt; template as follows&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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;npm&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;release&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;types&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;published&lt;/span&gt;&lt;span class="pi"&gt;]&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;publish-npm&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;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;
      &lt;span class="na"&gt;packages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&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@v4&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/setup-node@v3&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;20.x'&lt;/span&gt;
          &lt;span class="na"&gt;registry-url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://registry.npmjs.org&lt;/span&gt;
      &lt;span class="pi"&gt;-&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;npm install --package-lock-only&lt;/span&gt;
      &lt;span class="pi"&gt;-&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;npm ci&lt;/span&gt;
      &lt;span class="pi"&gt;-&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;npm publish&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;NODE_AUTH_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{secrets.NPM_TOKEN}}&lt;/span&gt;
          &lt;span class="na"&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{secrets.GITHUB_TOKEN}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎉 Now GitHub Actions  will automatically upload package to npmjs registry
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx44u74tatm443bw1z6zj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx44u74tatm443bw1z6zj.png" alt="github workflows example" width="800" height="138"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🎁 Sample project
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/dreamcodestudio/com.dreamcode.mobile.android-keystore"&gt;Unity AutoKeystore&lt;/a&gt;&lt;/p&gt;

</description>
      <category>unity3d</category>
      <category>npm</category>
      <category>cicd</category>
      <category>gamedev</category>
    </item>
  </channel>
</rss>
