<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Samuel Magny</title>
        <link>https://smagny.com/rss</link>
        <description>This is Samuel Magny RSS feed</description>
        <lastBuildDate>Wed, 05 Jun 2024 14:11:06 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Samuel Magny</copyright>
        <item>
            <title><![CDATA[Les meilleures vidéos virales du Québec]]></title>
            <link>https://smagny.com/blog/culture-quebec</link>
            <guid>https://smagny.com/blog/culture-quebec</guid>
            <pubDate>Wed, 22 May 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Compilation des meilleures vidéos drole et virale Québecoises.]]></description>
            <content:encoded><![CDATA[Plus besoin de chercher. Voici la liste ultime des meilleures vidéos virales du Québec <QuebecFlag/>.

## Bonne fete kevin
<YouTube id="rhbrR4-Z5fw"/>

## Remblais Illegal
<YouTube id="id9Jfv7IqZQ"/>

## Bichon Maltais
<YouTube id="n1WUqhnRoTA"/>

## Nadia Lafontaine dans la 8ieme dimension (Denis Levesque)
<YouTube id="OdYXknVuXuQ"/>

## Birdie (Carl Carmoni)
<YouTube id="ULP0cbGXU8k"/>

## Palourde royale
<YouTube id="30NezSeVOog"/>

## Ptit bum
<YouTube id="upDijvsuV6o"/>

## Un peu oui
<YouTube id="wv7x6WCMmPg"/>

## Dinde sauvage
<YouTube id="fhdcN8UZuog"/>

## Yesser miller
<YouTube id="F8sExBnW54g"/>

## Tekila Heinekin
<YouTube id="WKuaf3nepF0"/>

## Fek là j'ai tombé dans bière
<YouTube id="gvFLvvo_9Bs"/>

## Samir
<YouTube id="D9-voINFkCg"/>

## Blackman don't care
<YouTube id="GbDhesY0WKE"/>
]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[My Favorite Full Stack (2024)]]></title>
            <link>https://smagny.com/blog/my-favorite-fullstack-2024</link>
            <guid>https://smagny.com/blog/my-favorite-fullstack-2024</guid>
            <pubDate>Thu, 30 May 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Samuel Magny Favorite Full Stack (2024)]]></description>
            <content:encoded><![CDATA[In the endlessly swirling world of technology, one needs a trusty toolkit. Here are my curated preferred technologies for frontend, backend, infrastructure, and development tools.

## Frontend
* React
    * NextJS
    * Typescript
    * TailwindCSS
    * ESLint
* ThreeJS (3D Rendering)
* Jest
    * [🔥 jest-when](https://www.npmjs.com/package/jest-when)

## Backend
* NextJS
* Jest

## Infrastructure
* GCP
* Kubernetes (GKE)
* Terraform
* Semantic Release
* Vercel
 
## Development Tools
* MacBook
* VSCode
* nvm
]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to scan broken url (on macOS) for free]]></title>
            <link>https://smagny.com/blog/medium/@samuelint/how-to-scan-broken-url-on-macos-for-free-44a959b1743d</link>
            <guid>https://smagny.com/blog/medium/@samuelint/how-to-scan-broken-url-on-macos-for-free-44a959b1743d</guid>
            <pubDate>Wed, 29 May 2024 00:40:17 GMT</pubDate>
            <description><![CDATA[How to Easily Detect Broken URLs for Free using Muffet
Continue reading on Medium »]]></description>
            <content:encoded><![CDATA[<div class="medium-feed-item"><p class="medium-feed-snippet">How to Easily Detect Broken URLs for Free using Muffet</p><p class="medium-feed-link"><a href="https://medium.com/@samuelint/how-to-scan-broken-url-on-macos-for-free-44a959b1743d?source=rss-96a6ad36dc1e------2">Continue reading on Medium »</a></p></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A working boilerplate to deploy google cloud functions using terraform]]></title>
            <link>https://smagny.com/blog/medium/@samuelint/a-working-boilerplate-to-deploy-google-cloud-functions-using-terraform-eb039d76b36b</link>
            <guid>https://smagny.com/blog/medium/@samuelint/a-working-boilerplate-to-deploy-google-cloud-functions-using-terraform-eb039d76b36b</guid>
            <pubDate>Tue, 28 May 2024 18:01:52 GMT</pubDate>
            <description><![CDATA[A working boilerplate to deploy google cloud functions using terraform, typescript, pnpm
Continue reading on Medium »]]></description>
            <content:encoded><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@samuelint/a-working-boilerplate-to-deploy-google-cloud-functions-using-terraform-eb039d76b36b?source=rss-96a6ad36dc1e------2"><img src="https://cdn-images-1.medium.com/max/1536/1*Bf5FiYHXWe06xPHJY3UtWA.png" width="1536"></a></p><p class="medium-feed-snippet">A working boilerplate to deploy google cloud functions using terraform, typescript, pnpm</p><p class="medium-feed-link"><a href="https://medium.com/@samuelint/a-working-boilerplate-to-deploy-google-cloud-functions-using-terraform-eb039d76b36b?source=rss-96a6ad36dc1e------2">Continue reading on Medium »</a></p></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Easy Redux & NextJS 13 AppRouter hydratation]]></title>
            <link>https://smagny.com/blog/medium/@samuelint/easy-redux-nextjs-13-approuter-hydratation-8c8d7b08195f</link>
            <guid>https://smagny.com/blog/medium/@samuelint/easy-redux-nextjs-13-approuter-hydratation-8c8d7b08195f</guid>
            <pubDate>Fri, 02 Feb 2024 15:47:41 GMT</pubDate>
            <description><![CDATA[Hydration — DALL-E 2024/02/02
I’m I the only one who struggle with NextJS 13 App Router hydratation?

next-redux-wrapper no longer works with NextJS 13 App Router (https://github.com/kirill-konshin/next-redux-wrapper/issues/564)
redux-toolkit documentation, explain well how to setup redux with NextJS 13 but end result is not performant

The Solution
Fetch data along server side render, and load it in redux state at first render.
pnpm add use-hydrate
yarn add use-hydrate
npm i use-hydrate
GitHub - samuelint/use-hydrate: Nextjs 13 App Router easy redux hydratation
Usage example
https://medium.com/media/18f8740bd7ad8aa1c0bf2d542364da61/hrefhttps://medium.com/media/23d65d6522b7fc8667484c8a33df674f/href
Here’s the code, (if you do not want to add the lib).
https://medium.com/media/f6e8965fbeaa1af41101311dbafb7995/href]]></description>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mDNNDXNPoOV8eo_Z2rhOqw.jpeg" /><figcaption>Hydration — DALL-E 2024/02/02</figcaption></figure><p>I’m I the only one who struggle with NextJS 13 App Router hydratation?</p><ul><li><a href="https://github.com/kirill-konshin/next-redux-wrapper">next-redux-wrapper</a> no longer works with NextJS 13 App Router (<a href="https://github.com/kirill-konshin/next-redux-wrapper/issues/564">https://github.com/kirill-konshin/next-redux-wrapper/issues/564</a>)</li><li>redux-toolkit <a href="https://redux.js.org/usage/nextjs#overall-recommendations">documentation</a>, explain well how to setup redux with NextJS 13 but end result is not performant</li></ul><h3>The Solution</h3><p>Fetch data along server side render, and load it in redux state at first render.</p><pre>pnpm add use-hydrate<br>yarn add use-hydrate<br>npm i use-hydrate</pre><p><a href="https://github.com/samuelint/use-hydrate">GitHub - samuelint/use-hydrate: Nextjs 13 App Router easy redux hydratation</a></p><h4>Usage example</h4><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/18f8740bd7ad8aa1c0bf2d542364da61/href">https://medium.com/media/18f8740bd7ad8aa1c0bf2d542364da61/href</a></iframe><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/23d65d6522b7fc8667484c8a33df674f/href">https://medium.com/media/23d65d6522b7fc8667484c8a33df674f/href</a></iframe><p>Here’s the code, (if you do not want to add the lib).</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/f6e8965fbeaa1af41101311dbafb7995/href">https://medium.com/media/f6e8965fbeaa1af41101311dbafb7995/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8c8d7b08195f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Matrix principles in a 3D Environment (ThreeJS)]]></title>
            <link>https://smagny.com/blog/medium/@samuelint/matrix-principles-in-a-3d-environment-threejs-eed1e33f4ef6</link>
            <guid>https://smagny.com/blog/medium/@samuelint/matrix-principles-in-a-3d-environment-threejs-eed1e33f4ef6</guid>
            <pubDate>Fri, 23 Sep 2022 17:27:09 GMT</pubDate>
            <description><![CDATA[An interactive tutorial of matrix principles applied in a 3D environment.
Continue reading on Medium »]]></description>
            <content:encoded><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@samuelint/matrix-principles-in-a-3d-environment-threejs-eed1e33f4ef6?source=rss-96a6ad36dc1e------2"><img src="https://cdn-images-1.medium.com/max/2600/1*688GK41edQ0M1avoDUjNhQ.jpeg" width="7231"></a></p><p class="medium-feed-snippet">An interactive tutorial of matrix principles applied in a 3D environment.</p><p class="medium-feed-link"><a href="https://medium.com/@samuelint/matrix-principles-in-a-3d-environment-threejs-eed1e33f4ef6?source=rss-96a6ad36dc1e------2">Continue reading on Medium »</a></p></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to simply push from gitlab runner]]></title>
            <link>https://smagny.com/blog/medium/@samuelint/how-to-simply-push-from-gitlab-runner-c777aab1094a</link>
            <guid>https://smagny.com/blog/medium/@samuelint/how-to-simply-push-from-gitlab-runner-c777aab1094a</guid>
            <pubDate>Wed, 30 Mar 2022 00:06:23 GMT</pubDate>
            <description><![CDATA[Here’s a simple way to execute a git push from inside a gitlab runner.
Samuel Richard Magny / Push From Gitlab Runner
1. Generate an Access Token (or Personal Access Token)
From Project Access Token
Go to Settings > Access Token , and create a new token. 
Check read_repository and write_repository
Settings > Access Token
OR from Personal Access Token
Go to User > Preferences > Access Token , and create a new token. 
Check read_repository and write_repository
User > Preferences > Access Token
2. Assign the Access Token to the CI/CD Pipeline
Go to Settings > CI/CD > Variables and add the variable. 
You may name itGIT_PUSH_TOKEN .
Settings > CI/CD > VariablesAdd Access Token variable
3. Allow the pipeline pushing commits to the repository
Set reusable following step, to be done at global before_script or at each steps that need to make a git
.configure-git-push: &configure-git-push |
  git remote set-url origin https://CI:${GIT_PUSH_TOKEN}@${CI_REPOSITORY_URL#*@}
  git config --global user.name "CI"
  git config --global user.email "ci@my.domain"
For example, this step may change a file according to a new version, then make a commit, tag the new commit and push changes.
commit new version:
  script:
    - *configure-git-push
    - <update version file>
    - git commit -m "[ci skip] New Version ${NEW_VERSION}" <CHANGED FILE>
    - git push origin HEAD:$CI_COMMIT_BRANCH -o ci.skip
    # Tag the commit
    - COMMIT_ID=$(git rev-parse --short HEAD)
    - TAG_NAME="v-${NEW_VERSION}"
    - git tag $TAG_NAME $COMMIT_ID -f
    - git push origin $TAG_NAME -o ci.skip
It’s that simple!
Fully working example link on top of the article!]]></description>
            <content:encoded><![CDATA[<p>Here’s a simple way to execute a git push from inside a gitlab runner.</p><p><a href="https://gitlab.com/Samuelint/push-from-gitlab-runner">Samuel Richard Magny / Push From Gitlab Runner</a></p><h3>1. Generate an Access Token (or Personal Access Token)</h3><h4>From Project Access Token</h4><p>Go to Settings &gt; Access Token , and create a new token. <br>Check read_repository and write_repository</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sAW7e4E-g9jxpe4eSBWTUA.png" /><figcaption>Settings &gt; Access Token</figcaption></figure><h4>OR from Personal Access Token</h4><p>Go to User &gt; Preferences &gt; Access Token , and create a new token. <br>Check read_repository and write_repository</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Pjl52et7mth98Uvb0azvvg.png" /><figcaption>User &gt; Preferences &gt; Access Token</figcaption></figure><h3>2. Assign the Access Token to the CI/CD Pipeline</h3><p>Go to Settings &gt; CI/CD &gt; Variables and add the variable. <br>You may name itGIT_PUSH_TOKEN .</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jzwFml_P4qIJi27_EHSOJQ.png" /><figcaption>Settings &gt; CI/CD &gt; Variables</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OZFoTjLoEumGVyWN4mSY0Q.png" /><figcaption>Add Access Token variable</figcaption></figure><h3>3. Allow the pipeline pushing commits to the repository</h3><p>Set reusable following step, to be done at global before_script or at each steps that need to make a git</p><pre>.configure-git-push: &amp;configure-git-push |<br>  git remote set-url origin https://CI:${GIT_PUSH_TOKEN}@${CI_REPOSITORY_URL#*@}<br>  git config --global user.name &quot;CI&quot;<br>  git config --global user.email &quot;ci@my.domain&quot;</pre><p>For example, this step may change a file according to a new version, then make a commit, tag the new commit and push changes.</p><pre>commit new version:<br>  script:<br>    - *configure-git-push<br><br>    - &lt;update version file&gt;<br><br>    - git commit -m &quot;[ci skip] New Version ${NEW_VERSION}&quot; &lt;CHANGED FILE&gt;<br>    - git push origin HEAD:$CI_COMMIT_BRANCH -o ci.skip<br><br>    # Tag the commit<br>    - COMMIT_ID=$(git rev-parse --short HEAD)<br>    - TAG_NAME=&quot;v-${NEW_VERSION}&quot;<br>    - git tag $TAG_NAME $COMMIT_ID -f<br>    - git push origin $TAG_NAME -o ci.skip</pre><p>It’s that simple!</p><p>Fully working example link on top of the article!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c777aab1094a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to scan broken url (on macOS) for free]]></title>
            <link>https://medium.com/@samuelint/how-to-scan-broken-url-on-macos-for-free-44a959b1743d?source=rss-96a6ad36dc1e------2</link>
            <guid>https://medium.com/@samuelint/how-to-scan-broken-url-on-macos-for-free-44a959b1743d?source=rss-96a6ad36dc1e------2</guid>
            <pubDate>Wed, 29 May 2024 00:40:17 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[A working boilerplate to deploy google cloud functions using terraform]]></title>
            <link>https://medium.com/@samuelint/a-working-boilerplate-to-deploy-google-cloud-functions-using-terraform-eb039d76b36b?source=rss-96a6ad36dc1e------2</link>
            <guid>https://medium.com/@samuelint/a-working-boilerplate-to-deploy-google-cloud-functions-using-terraform-eb039d76b36b?source=rss-96a6ad36dc1e------2</guid>
            <pubDate>Tue, 28 May 2024 18:01:52 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Easy Redux & NextJS 13 AppRouter hydratation]]></title>
            <link>https://medium.com/@samuelint/easy-redux-nextjs-13-approuter-hydratation-8c8d7b08195f?source=rss-96a6ad36dc1e------2</link>
            <guid>https://medium.com/@samuelint/easy-redux-nextjs-13-approuter-hydratation-8c8d7b08195f?source=rss-96a6ad36dc1e------2</guid>
            <pubDate>Fri, 02 Feb 2024 15:47:41 GMT</pubDate>
            <description><![CDATA[Hydration — DALL-E 2024/02/02
I’m I the only one who struggle with NextJS 13 App Router hydratation?

next-redux-wrapper no longer works with NextJS 13 App Router (https://github.com/kirill-konshin/next-redux-wrapper/issues/564)
redux-toolkit documentation, explain well how to setup redux with NextJS 13 but end result is not performant

The Solution
Fetch data along server side render, and load it in redux state at first render.
pnpm add use-hydrate
yarn add use-hydrate
npm i use-hydrate
GitHub - samuelint/use-hydrate: Nextjs 13 App Router easy redux hydratation
Usage example
https://medium.com/media/18f8740bd7ad8aa1c0bf2d542364da61/hrefhttps://medium.com/media/23d65d6522b7fc8667484c8a33df674f/href
Here’s the code, (if you do not want to add the lib).
https://medium.com/media/f6e8965fbeaa1af41101311dbafb7995/href]]></description>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mDNNDXNPoOV8eo_Z2rhOqw.jpeg" /><figcaption>Hydration — DALL-E 2024/02/02</figcaption></figure><p>I’m I the only one who struggle with NextJS 13 App Router hydratation?</p><ul><li><a href="https://github.com/kirill-konshin/next-redux-wrapper">next-redux-wrapper</a> no longer works with NextJS 13 App Router (<a href="https://github.com/kirill-konshin/next-redux-wrapper/issues/564">https://github.com/kirill-konshin/next-redux-wrapper/issues/564</a>)</li><li>redux-toolkit <a href="https://redux.js.org/usage/nextjs#overall-recommendations">documentation</a>, explain well how to setup redux with NextJS 13 but end result is not performant</li></ul><h3>The Solution</h3><p>Fetch data along server side render, and load it in redux state at first render.</p><pre>pnpm add use-hydrate<br>yarn add use-hydrate<br>npm i use-hydrate</pre><p><a href="https://github.com/samuelint/use-hydrate">GitHub - samuelint/use-hydrate: Nextjs 13 App Router easy redux hydratation</a></p><h4>Usage example</h4><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/18f8740bd7ad8aa1c0bf2d542364da61/href">https://medium.com/media/18f8740bd7ad8aa1c0bf2d542364da61/href</a></iframe><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/23d65d6522b7fc8667484c8a33df674f/href">https://medium.com/media/23d65d6522b7fc8667484c8a33df674f/href</a></iframe><p>Here’s the code, (if you do not want to add the lib).</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/f6e8965fbeaa1af41101311dbafb7995/href">https://medium.com/media/f6e8965fbeaa1af41101311dbafb7995/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8c8d7b08195f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Matrix principles in a 3D Environment (ThreeJS)]]></title>
            <link>https://medium.com/@samuelint/matrix-principles-in-a-3d-environment-threejs-eed1e33f4ef6?source=rss-96a6ad36dc1e------2</link>
            <guid>https://medium.com/@samuelint/matrix-principles-in-a-3d-environment-threejs-eed1e33f4ef6?source=rss-96a6ad36dc1e------2</guid>
            <pubDate>Fri, 23 Sep 2022 17:27:09 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[How to simply push from gitlab runner]]></title>
            <link>https://medium.com/@samuelint/how-to-simply-push-from-gitlab-runner-c777aab1094a?source=rss-96a6ad36dc1e------2</link>
            <guid>https://medium.com/@samuelint/how-to-simply-push-from-gitlab-runner-c777aab1094a?source=rss-96a6ad36dc1e------2</guid>
            <pubDate>Wed, 30 Mar 2022 00:06:23 GMT</pubDate>
            <description><![CDATA[Here’s a simple way to execute a git push from inside a gitlab runner.
Samuel Richard Magny / Push From Gitlab Runner
1. Generate an Access Token (or Personal Access Token)
From Project Access Token
Go to Settings > Access Token , and create a new token. 
Check read_repository and write_repository
Settings > Access Token
OR from Personal Access Token
Go to User > Preferences > Access Token , and create a new token. 
Check read_repository and write_repository
User > Preferences > Access Token
2. Assign the Access Token to the CI/CD Pipeline
Go to Settings > CI/CD > Variables and add the variable. 
You may name itGIT_PUSH_TOKEN .
Settings > CI/CD > VariablesAdd Access Token variable
3. Allow the pipeline pushing commits to the repository
Set reusable following step, to be done at global before_script or at each steps that need to make a git
.configure-git-push: &configure-git-push |
  git remote set-url origin https://CI:${GIT_PUSH_TOKEN}@${CI_REPOSITORY_URL#*@}
  git config --global user.name "CI"
  git config --global user.email "ci@my.domain"
For example, this step may change a file according to a new version, then make a commit, tag the new commit and push changes.
commit new version:
  script:
    - *configure-git-push
    - <update version file>
    - git commit -m "[ci skip] New Version ${NEW_VERSION}" <CHANGED FILE>
    - git push origin HEAD:$CI_COMMIT_BRANCH -o ci.skip
    # Tag the commit
    - COMMIT_ID=$(git rev-parse --short HEAD)
    - TAG_NAME="v-${NEW_VERSION}"
    - git tag $TAG_NAME $COMMIT_ID -f
    - git push origin $TAG_NAME -o ci.skip
It’s that simple!
Fully working example link on top of the article!]]></description>
            <content:encoded><![CDATA[<p>Here’s a simple way to execute a git push from inside a gitlab runner.</p><p><a href="https://gitlab.com/Samuelint/push-from-gitlab-runner">Samuel Richard Magny / Push From Gitlab Runner</a></p><h3>1. Generate an Access Token (or Personal Access Token)</h3><h4>From Project Access Token</h4><p>Go to Settings &gt; Access Token , and create a new token. <br>Check read_repository and write_repository</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sAW7e4E-g9jxpe4eSBWTUA.png" /><figcaption>Settings &gt; Access Token</figcaption></figure><h4>OR from Personal Access Token</h4><p>Go to User &gt; Preferences &gt; Access Token , and create a new token. <br>Check read_repository and write_repository</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Pjl52et7mth98Uvb0azvvg.png" /><figcaption>User &gt; Preferences &gt; Access Token</figcaption></figure><h3>2. Assign the Access Token to the CI/CD Pipeline</h3><p>Go to Settings &gt; CI/CD &gt; Variables and add the variable. <br>You may name itGIT_PUSH_TOKEN .</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jzwFml_P4qIJi27_EHSOJQ.png" /><figcaption>Settings &gt; CI/CD &gt; Variables</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OZFoTjLoEumGVyWN4mSY0Q.png" /><figcaption>Add Access Token variable</figcaption></figure><h3>3. Allow the pipeline pushing commits to the repository</h3><p>Set reusable following step, to be done at global before_script or at each steps that need to make a git</p><pre>.configure-git-push: &amp;configure-git-push |<br>  git remote set-url origin https://CI:${GIT_PUSH_TOKEN}@${CI_REPOSITORY_URL#*@}<br>  git config --global user.name &quot;CI&quot;<br>  git config --global user.email &quot;ci@my.domain&quot;</pre><p>For example, this step may change a file according to a new version, then make a commit, tag the new commit and push changes.</p><pre>commit new version:<br>  script:<br>    - *configure-git-push<br><br>    - &lt;update version file&gt;<br><br>    - git commit -m &quot;[ci skip] New Version ${NEW_VERSION}&quot; &lt;CHANGED FILE&gt;<br>    - git push origin HEAD:$CI_COMMIT_BRANCH -o ci.skip<br><br>    # Tag the commit<br>    - COMMIT_ID=$(git rev-parse --short HEAD)<br>    - TAG_NAME=&quot;v-${NEW_VERSION}&quot;<br>    - git tag $TAG_NAME $COMMIT_ID -f<br>    - git push origin $TAG_NAME -o ci.skip</pre><p>It’s that simple!</p><p>Fully working example link on top of the article!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c777aab1094a" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>