Repository: mushroomsoft-it/mushroomsoft-it
Pull request #47: feat(action): deploy-development.yml
Author: login: JuanpaCortez93
Created: 2025-05-01T20:24:28Z | Merged: 2025-05-12T21:52:04Z

Deploy static website to Azure Blob Storage on commit to main

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Chores**
	- Added an automated deployment workflow for the development environment to upload files to Azure Blob Storage on pushes to the main branch.
	- Updated the release workflow to require manual triggering instead of automatic runs on branch pushes.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->


Diff:
diff --git a/.github/workflows/deploy-development.yml b/.github/workflows/deploy-development.yml
new file mode 100644
index 0000000..6e5d86f
--- /dev/null
+++ b/.github/workflows/deploy-development.yml
@@ -0,0 +1,53 @@
+name: CI with OpenID Connect
+
+on:
+  push:
+    branches: [master]
+
+permissions:
+  id-token: write
+  contents: read
+
+jobs:
+  build:
+    name: GitHub Actions - Deploy to Azure Blob Storage - Development
+    runs-on: ubuntu-latest
+
+    strategy:
+      matrix:
+        node-version: [20]
+
+    steps:
+      - uses: actions/checkout@v3
+
+      - name: Use Node.js ${{ matrix.node-version }}
+        uses: actions/setup-node@v3
+        with:
+          node-version: ${{ matrix.node-version }}
+
+      - name: Install dependencies
+        run: npm ci
+
+      - name: Build project
+        run: npm run build
+
+      - uses: azure/login@v2
+        with:
+          client-id: ${{ secrets.AZURE_CLIENT_ID }}
+          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
+          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+
+      - name: Upload to blob storage
+        uses: azure/CLI@v1
+        with:
+          inlineScript: |
+            az storage blob upload-batch \
+            --account-name ${{ secrets.AZURE_STORAGE_ACCOUNT_NAME }} \
+            --auth-mode key \
+            -d '$web' \
+            -s .
+
+      # Azure logout
+      - name: Azure CLI logout
+        run: az logout
+        if: always()
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 4355a3d..f882bba 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -1,9 +1,8 @@
 name: MushroomSoft Release and Deploy
 
 on:
-  push:
-    branches:
-      - 'master'
+  workflow_dispatch:
+
 jobs:
   build:
     name: GitHub Actions - Tests


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 2**

<details>
<summary>🧹 Nitpick comments (4)</summary><blockquote>

<details>
<summary>.github/workflows/deploy-development.yml (4)</summary><blockquote>

`1-2`: **Workflow name clarity**  
The `name` field is "CI with OpenID Connect" but this workflow’s main purpose is deploying to Azure Blob Storage on commits to `main`. Consider renaming it to something like `"Deploy to Azure Blob Storage (development)"` for better readability in the Actions UI.

---

`3-6`: **Trigger configuration review**  
Triggering on `push` to `main` aligns with automatic deployments on merges. Optionally, you could add a `workflow_dispatch` event to allow manual re-deploys from the Actions UI if needed.

---

`11-14`: **Job naming accuracy**  
The job ID is `build` but it performs a deployment. For clarity, consider renaming it (e.g., `deploy` or `deploy-dev`).

---

`22-27`: **Scope deployment to the static site directory**  
Uploading from `.` may include CI configs and dev files. If your built site is in `./dist` (or another folder), target that directory:
```yaml
- az storage blob upload-batch --account-name msoftpublicsite --auth-mode login -d '$web' -s ./dist
```

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between b9c69c0fbe98274a80dfea4b596d1c26663e7c93 and c609fb22170308672e5d942d0e7c42a1380955e5.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `.github/workflows/deploy-development.yml` (1 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🪛 actionlint (1.7.4)</summary>

<details>
<summary>.github/workflows/deploy-development.yml</summary>

15-15: the runner of "actions/checkout@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

</details>

</details>

</details>

<details>
<summary>🔇 Additional comments (3)</summary><blockquote>

<details>
<summary>.github/workflows/deploy-development.yml (3)</summary>

`7-10`: **Permissions least privilege**  
`id-token: write` and `contents: read` follow the least privilege principle required for OIDC login and repository checkout. No changes recommended.

---

`15-15`: **Static analysis hint is a false positive**  
actionlint suggested upgrading `actions/checkout@v3`, but `v3` is the current and correct major version. No change needed here.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 actionlint (1.7.4)</summary>

15-15: the runner of "actions/checkout@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

</details>

</details>

---

`16-21`: **Verify Azure login action version**  
You’re using `azure/login@v2`, but the official docs reference `azure/login@v1`. Please confirm that `v2` is a valid release; if not, switch to:
```yaml
- uses: azure/login@v1
```

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-01T20:29:15Z
user: login: leoriofrio
state: CHANGES_REQUESTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-05T17:08:42Z
user: login: coderabbitai[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-05T17:09:02Z
user: login: coderabbitai[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-05T17:09:08Z
user: login: JuanpaCortez93
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-06T01:23:27Z
user: login: coderabbitai[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-06T01:23:32Z
user: login: JuanpaCortez93
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-06T01:23:53Z
user: login: coderabbitai[bot]
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-06T01:23:57Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>🧹 Nitpick comments (2)</summary><blockquote>

<details>
<summary>.github/workflows/deploy-development.yml (2)</summary><blockquote>

`1-2`: **Use a descriptive workflow name**  
The workflow name "CI with OpenID Connect" is generic; consider renaming it to reflect its actual purpose (deploying your static site), e.g. "Deploy Development".  

```diff
-name: CI with OpenID Connect
+name: Deploy Development
```

---

`11-14`: **Rename job identifier to reflect its purpose**  
The job ID "build" suggests a build pipeline, but this job performs deployment. Renaming it to "deploy" will improve clarity.  

```diff
-jobs:
-  build:
+jobs:
+  deploy:
     runs-on: ubuntu-latest
```

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro (Legacy)**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between c609fb22170308672e5d942d0e7c42a1380955e5 and 766ad300ae065beec81cdd31b30ac400adece518.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `.github/workflows/deploy-development.yml` (1 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🧠 Learnings (1)</summary>

<details>
<summary>.github/workflows/deploy-development.yml (1)</summary>

```
Learnt from: leoriofrio
PR: mushroomsoft-it/mushroomsoft-it#47
File: .github/workflows/deploy-development.yml:22-27
Timestamp: 2025-05-05T17:09:07.428Z
Learning: When using Azure CLI in GitHub Actions with the azure/login action, use `--auth-mode login` instead of `--auth-mode key` for Azure Blob Storage operations to leverage the OIDC credentials established by the azure/login step.
```

</details>

</details><details>
<summary>🪛 actionlint (1.7.4)</summary>

<details>
<summary>.github/workflows/deploy-development.yml</summary>

15-15: the runner of "actions/checkout@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

</details>

</details>

</details>

<details>
<summary>🔇 Additional comments (2)</summary><blockquote>

<details>
<summary>.github/workflows/deploy-development.yml (2)</summary>

`16-21`: **Azure login step is correctly configured**  
The `azure/login@v2` action with OIDC and the subscription ID is set up properly, leveraging `id-token: write` rather than static keys.

---

`28-31`: **Logout step is properly defined**  
The `Azure CLI logout` step is indented under `steps:` and uses `if: always()` to guarantee cleanup. Nice touch.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-06T01:48:18Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 0**

<details>
<summary>♻️ Duplicate comments (2)</summary><blockquote>

<details>
<summary>.github/workflows/deploy-development.yml (2)</summary><blockquote>

`3-6`: **Branch trigger mismatch with project convention**  
This workflow triggers on `push` to `master`, but the PR objective mentions deploying on pushes to the `main` branch. Please confirm which branch is primary for this repo (`main` vs. `master`) and update the trigger to match.

---

`40-49`: **Correct storage auth-mode to use OIDC login**  
Using `--auth-mode key` without supplying a storage account key will cause authentication failures. To leverage the OIDC credentials from the `azure/login` step, change to `--auth-mode login`:  
```diff
- az storage blob upload-batch \
-   --account-name ${{ secrets.AZURE_STORAGE_ACCOUNT_NAME }} \
-   --auth-mode key \
+ az storage blob upload-batch \
+   --account-name ${{ secrets.AZURE_STORAGE_ACCOUNT_NAME }} \
+   --auth-mode login \
    -d '$web' \
    -s .
```

</blockquote></details>

</blockquote></details>

<details>
<summary>🧹 Nitpick comments (1)</summary><blockquote>

<details>
<summary>.github/workflows/deploy-development.yml (1)</summary><blockquote>

`1-2`: **Consider naming the workflow descriptively**  
The workflow `name` currently reads "CI with OpenID Connect", which is generic. To improve clarity—especially since this file handles deployment to Azure Blob Storage for development—consider renaming it to something like `"Deploy to Azure Blob Storage - Development"`.

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro (Legacy)**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 766ad300ae065beec81cdd31b30ac400adece518 and 8fbbf9ac2eeb5b6e7fbd7637ad4c3c992a46f1b4.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `.github/workflows/deploy-development.yml` (1 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🧠 Learnings (1)</summary>

<details>
<summary>.github/workflows/deploy-development.yml (1)</summary>

```
Learnt from: leoriofrio
PR: mushroomsoft-it/mushroomsoft-it#47
File: .github/workflows/deploy-development.yml:22-27
Timestamp: 2025-05-05T17:09:07.428Z
Learning: When using Azure CLI in GitHub Actions with the azure/login action, use `--auth-mode login` instead of `--auth-mode key` for Azure Blob Storage operations to leverage the OIDC credentials established by the azure/login step.
```

</details>

</details><details>
<summary>🪛 actionlint (1.7.4)</summary>

<details>
<summary>.github/workflows/deploy-development.yml</summary>

21-21: the runner of "actions/checkout@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

---

24-24: the runner of "actions/setup-node@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

</details>

</details>

</details>

<details>
<summary>🔇 Additional comments (5)</summary><blockquote>

<details>
<summary>.github/workflows/deploy-development.yml (5)</summary>

`7-10`: **Permissions configuration looks good**  
Granting `id-token: write` for OIDC authentication and `contents: read` is appropriate to allow the Azure login and checkout steps to function.

---

`11-19`: **Build job configuration is valid**  
The job matrix with Node.js 20, `actions/checkout@v3`, `actions/setup-node@v3`, `npm ci`, and `npm run build` aligns with the project’s build requirements.

---

`20-33`: **Actionlint false positive on action versions**  
Static analysis flagged `actions/checkout@v3` and `actions/setup-node@v3` as outdated, but v3 is the current major version for both actions. No changes needed here.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 actionlint (1.7.4)</summary>

21-21: the runner of "actions/checkout@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

---

24-24: the runner of "actions/setup-node@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

</details>

</details>

---

`34-39`: **Verify Azure login authentication flow**  
The `azure/login@v2` step is configured with `client-id`, `tenant-id`, and `subscription-id`, but no `client-secret`. If you intend to authenticate via service principal, include the `client-secret`. If you’re relying solely on OIDC, you can remove the SPN inputs. Please confirm the intended auth mode to ensure login succeeds.

---

`50-53`: **Logout step is well scoped**  
The Azure CLI logout step is correctly indented under `steps` with `if: always()`, ensuring cleanup runs regardless of previous failures.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-06T01:57:05Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 0**

<details>
<summary>🧹 Nitpick comments (1)</summary><blockquote>

<details>
<summary>.github/workflows/release.yml (1)</summary><blockquote>

`3-5`: **Confirm release trigger adjustment**: The workflow now only responds to `workflow_dispatch` and no longer runs on pushes to `master`. Ensure this matches your intended release process. If you’d like to automate production releases (e.g., on version tags), consider adding a tag-based push trigger. For example:

```diff
 on:
-  workflow_dispatch:
+  workflow_dispatch:
+  push:
+    tags:
+      - 'v*'
```

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro (Legacy)**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 8fbbf9ac2eeb5b6e7fbd7637ad4c3c992a46f1b4 and d46f89fc46b1303a00a9c5ebe5883f0a1eda7464.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `.github/workflows/release.yml` (1 hunks)

</details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-06T14:29:30Z
user: login: leoriofrio
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T21:51:59Z

Review comments:
diff_hunk: @@ -0,0 +1,32 @@
+name: CI with OpenID Connect
+
+on:
+    push:
+        branches: [ main ]
+
+permissions:
+      id-token: write
+      contents: read
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v3
+    - uses: azure/login@v2
+      with:
+        client-id: ${{ secrets.AZURE_CLIENT_ID }}
+        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
+        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+
+    - name: Upload to blob storage
+      uses: azure/CLI@v1
+      with:
+        inlineScript: |
+            az storage blob upload-batch --account-name msoftpublicsite --auth-mode key -d '$web' -s .
+
path: .github/workflows/deploy-development.yml
user: login: coderabbitai[bot]
body: _⚠️ Potential issue_

**Fix storage auth-mode to use OIDC login**  
Using `--auth-mode key` without supplying the storage account key will cause authentication failures. To leverage the OIDC credentials from `azure/login`, change to `--auth-mode login`:
```diff
- az storage blob upload-batch --account-name msoftpublicsite --auth-mode key -d '$web' -s .
+ az storage blob upload-batch --account-name msoftpublicsite --auth-mode login -d '$web' -s .
```



<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
    - name: Upload to blob storage
      uses: azure/CLI@v1
      with:
        inlineScript: |
            az storage blob upload-batch --account-name msoftpublicsite --auth-mode login -d '$web' -s .
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated reply by CodeRabbit -->

✅ Addressed in commit 766ad30

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-05-01T20:29:14Z
author_association: NONE
diff_hunk: @@ -0,0 +1,32 @@
+name: CI with OpenID Connect
+
+on:
+    push:
+        branches: [ main ]
+
+permissions:
+      id-token: write
+      contents: read
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v3
+    - uses: azure/login@v2
+      with:
+        client-id: ${{ secrets.AZURE_CLIENT_ID }}
+        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
+        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+
+    - name: Upload to blob storage
+      uses: azure/CLI@v1
+      with:
+        inlineScript: |
+            az storage blob upload-batch --account-name msoftpublicsite --auth-mode key -d '$web' -s .
+
+  # Azure logout
+    - name: logout
+      run: |
+            az logout
+      if: always()
path: .github/workflows/deploy-development.yml
user: login: coderabbitai[bot]
body: _⚠️ Potential issue_

**Correct logout step indentation**  
The `logout` step must be under the `steps:` block. As-is, it might be parsed outside `steps`. Fix the indentation and consider renaming for clarity:
```diff
     # Azure logout
-    - name: logout
+    - name: Azure CLI logout
       run: az logout
       if: always()
```



> Committable suggestion skipped: line range outside the PR's diff.

<!-- This is an auto-generated reply by CodeRabbit -->

✅ Addressed in commit 766ad30

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-05-01T20:29:14Z
author_association: NONE
diff_hunk: @@ -0,0 +1,32 @@
+name: CI with OpenID Connect
+
+on:
+    push:
+        branches: [ main ]
+
+permissions:
+      id-token: write
+      contents: read
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v3
+    - uses: azure/login@v2
+      with:
+        client-id: ${{ secrets.AZURE_CLIENT_ID }}
+        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
+        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+
+    - name: Upload to blob storage
+      uses: azure/CLI@v1
+      with:
+        inlineScript: |
+            az storage blob upload-batch --account-name msoftpublicsite --auth-mode key -d '$web' -s .
+
+  # Azure logout
+    - name: logout
+      run: |
+            az logout
+      if: always()
path: .github/workflows/deploy-development.yml
user: login: leoriofrio
body: este nombre deberiamos cambiarlo a: Azure CLI logout
created_at: 2025-05-05T17:04:49Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,32 @@
+name: CI with OpenID Connect
+
+on:
+    push:
+        branches: [ main ]
+
+permissions:
+      id-token: write
+      contents: read
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v3
+    - uses: azure/login@v2
+      with:
+        client-id: ${{ secrets.AZURE_CLIENT_ID }}
+        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
+        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+
+    - name: Upload to blob storage
+      uses: azure/CLI@v1
+      with:
+        inlineScript: |
+            az storage blob upload-batch --account-name msoftpublicsite --auth-mode key -d '$web' -s .
+
path: .github/workflows/deploy-development.yml
user: login: leoriofrio
body: Tomando en consideración esta recomendación lo puedes probar en tu local
created_at: 2025-05-05T17:07:51Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,32 @@
+name: CI with OpenID Connect
+
+on:
+    push:
+        branches: [ main ]
path: .github/workflows/deploy-development.yml
user: login: leoriofrio
body: no tenemos una rama main sino master
created_at: 2025-05-05T17:08:26Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,32 @@
+name: CI with OpenID Connect
+
+on:
+    push:
+        branches: [ main ]
+
+permissions:
+      id-token: write
+      contents: read
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v3
+    - uses: azure/login@v2
+      with:
+        client-id: ${{ secrets.AZURE_CLIENT_ID }}
+        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
+        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+
+    - name: Upload to blob storage
+      uses: azure/CLI@v1
+      with:
+        inlineScript: |
+            az storage blob upload-batch --account-name msoftpublicsite --auth-mode key -d '$web' -s .
+
+  # Azure logout
+    - name: logout
+      run: |
+            az logout
+      if: always()
path: .github/workflows/deploy-development.yml
user: login: coderabbitai[bot]
body: @leoriofrio Sí, estoy de acuerdo. Cambiar el nombre a "Azure CLI logout" mejorará la claridad del flujo de trabajo, haciendo más explícito que esta acción está relacionada específicamente con el cierre de sesión de Azure CLI.

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-05-05T17:09:02Z
author_association: NONE
diff_hunk: @@ -0,0 +1,32 @@
+name: CI with OpenID Connect
+
+on:
+    push:
+        branches: [ main ]
+
+permissions:
+      id-token: write
+      contents: read
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v3
+    - uses: azure/login@v2
+      with:
+        client-id: ${{ secrets.AZURE_CLIENT_ID }}
+        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
+        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+
+    - name: Upload to blob storage
+      uses: azure/CLI@v1
+      with:
+        inlineScript: |
+            az storage blob upload-batch --account-name msoftpublicsite --auth-mode key -d '$web' -s .
+
path: .github/workflows/deploy-development.yml
user: login: coderabbitai[bot]
body: @leoriofrio Sí, es una buena recomendación probar esto localmente. Para hacerlo, se pueden seguir estos pasos:

1. Instalar Azure CLI (si aún no está instalado): https://docs.microsoft.com/es-es/cli/azure/install-azure-cli
2. Autenticarse con `az login`
3. Probar el comando de carga con el modo de autenticación correcto:
   ```bash
   az storage blob upload-batch --account-name msoftpublicsite --auth-mode login -d '$web' -s .
   ```

Este enfoque de usar `--auth-mode login` aprovecha las credenciales OIDC configuradas en el paso anterior del workflow, lo que es más seguro que depender de claves de acceso.

---

<details>
<summary>✏️ Learnings added</summary>

```
Learnt from: leoriofrio
PR: mushroomsoft-it/mushroomsoft-it#47
File: .github/workflows/deploy-development.yml:22-27
Timestamp: 2025-05-05T17:09:07.428Z
Learning: When using Azure CLI in GitHub Actions with the azure/login action, use `--auth-mode login` instead of `--auth-mode key` for Azure Blob Storage operations to leverage the OIDC credentials established by the azure/login step.
```

> Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure [review instructions](https://docs.coderabbit.ai/guides/review-instructions). You can manage existing learnings in the [app](https://app.coderabbit.ai/learnings).

</details>



<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-05-05T17:09:08Z
author_association: NONE
diff_hunk: @@ -0,0 +1,32 @@
+name: CI with OpenID Connect
+
+on:
+    push:
+        branches: [ main ]
+
+permissions:
+      id-token: write
+      contents: read
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v3
+    - uses: azure/login@v2
+      with:
+        client-id: ${{ secrets.AZURE_CLIENT_ID }}
+        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
+        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+
+    - name: Upload to blob storage
+      uses: azure/CLI@v1
+      with:
+        inlineScript: |
+            az storage blob upload-batch --account-name msoftpublicsite --auth-mode key -d '$web' -s .
+
path: .github/workflows/deploy-development.yml
user: login: JuanpaCortez93
body: Tomando en cuenta la consideración: el proceso con "login" no funciona, al contrario que con "key" sí.
![image](https://github.com/user-attachments/assets/f914e71b-5433-4569-9bf7-059114b728b2)
![image](https://github.com/user-attachments/assets/61132e58-42eb-4059-b902-67e989391a68)

created_at: 2025-05-06T01:23:27Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,32 @@
+name: CI with OpenID Connect
+
+on:
+    push:
+        branches: [ main ]
+
+permissions:
+      id-token: write
+      contents: read
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v3
+    - uses: azure/login@v2
+      with:
+        client-id: ${{ secrets.AZURE_CLIENT_ID }}
+        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
+        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+
+    - name: Upload to blob storage
+      uses: azure/CLI@v1
+      with:
+        inlineScript: |
+            az storage blob upload-batch --account-name msoftpublicsite --auth-mode key -d '$web' -s .
+
path: .github/workflows/deploy-development.yml
user: login: coderabbitai[bot]
body: > Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

<!-- This is an auto-generated mute comment by CodeRabbit -->
created_at: 2025-05-06T01:23:32Z
author_association: NONE
diff_hunk: @@ -0,0 +1,32 @@
+name: CI with OpenID Connect
+
+on:
+    push:
+        branches: [ main ]
+
+permissions:
+      id-token: write
+      contents: read
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v3
+    - uses: azure/login@v2
+      with:
+        client-id: ${{ secrets.AZURE_CLIENT_ID }}
+        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
+        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+
+    - name: Upload to blob storage
+      uses: azure/CLI@v1
+      with:
+        inlineScript: |
+            az storage blob upload-batch --account-name msoftpublicsite --auth-mode key -d '$web' -s .
+
+  # Azure logout
+    - name: logout
+      run: |
+            az logout
+      if: always()
path: .github/workflows/deploy-development.yml
user: login: JuanpaCortez93
body: Consideración tomada y editada.

created_at: 2025-05-06T01:23:53Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,32 @@
+name: CI with OpenID Connect
+
+on:
+    push:
+        branches: [ main ]
+
+permissions:
+      id-token: write
+      contents: read
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v3
+    - uses: azure/login@v2
+      with:
+        client-id: ${{ secrets.AZURE_CLIENT_ID }}
+        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
+        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+
+    - name: Upload to blob storage
+      uses: azure/CLI@v1
+      with:
+        inlineScript: |
+            az storage blob upload-batch --account-name msoftpublicsite --auth-mode key -d '$web' -s .
+
+  # Azure logout
+    - name: logout
+      run: |
+            az logout
+      if: always()
path: .github/workflows/deploy-development.yml
user: login: coderabbitai[bot]
body: > Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

<!-- This is an auto-generated mute comment by CodeRabbit -->
created_at: 2025-05-06T01:23:57Z
author_association: NONE
diff_hunk: @@ -0,0 +1,31 @@
+name: CI with OpenID Connect
+
+on:
+  push:
+    branches: [master]
+
+permissions:
+  id-token: write
+  contents: read
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v3
+      - uses: azure/login@v2
+        with:
+          client-id: ${{ secrets.AZURE_CLIENT_ID }}
+          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
+          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+
+      - name: Upload to blob storage
+        uses: azure/CLI@v1
+        with:
+          inlineScript: |
+            az storage blob upload-batch --account-name msoftpublicsite --auth-mode login -d '$web' -s .
+
path: .github/workflows/deploy-development.yml
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**Parameterize the storage account name**  
Hardcoding `msoftpublicsite` limits reuse across environments. Use a repository secret (e.g. `AZURE_STORAGE_ACCOUNT_NAME`) instead:  

```diff
-            az storage blob upload-batch --account-name msoftpublicsite --auth-mode login -d '$web' -s .
+            az storage blob upload-batch \
+              --account-name ${{ secrets.AZURE_STORAGE_ACCOUNT_NAME }} \
+              --auth-mode login \
+              -d '$web' \
+              -s .
```
Don’t forget to add `AZURE_STORAGE_ACCOUNT_NAME` to your repository’s secrets.


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
      - name: Upload to blob storage
        uses: azure/CLI@v1
        with:
          inlineScript: |
            az storage blob upload-batch \
              --account-name ${{ secrets.AZURE_STORAGE_ACCOUNT_NAME }} \
              --auth-mode login \
              -d '$web' \
              -s .
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->

✅ Addressed in commit 8fbbf9a
created_at: 2025-05-06T01:48:18Z
author_association: NONE

PR comments:
user: login: coderabbitai[bot]
created_at: 2025-05-01T20:24:35Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- walkthrough_start -->

```markdown
## Walkthrough

A new GitHub Actions workflow file named `deploy-development.yml` has been added. This workflow automates deployment by triggering on pushes to the `master` branch. It runs on an Ubuntu runner, logs into Azure using credentials from GitHub secrets, uploads repository files to an Azure Blob Storage container, and logs out from Azure at the end. Additionally, the existing `release.yml` workflow was modified to change its trigger from automatic on `master` branch pushes to manual invocation via `workflow_dispatch`.

## Changes

| File(s)                              | Change Summary                                                                                                    |
|-------------------------------------|------------------------------------------------------------------------------------------------------------------|
| .github/workflows/deploy-development.yml | Added a workflow for automated deployment to Azure Blob Storage, including Azure login, file upload, and logout. |
| .github/workflows/release.yml        | Changed trigger from automatic on `master` branch push to manual `workflow_dispatch` trigger.                     |

## Poem

> In the warren of code, a workflow appears,  
> Deploying with Azure, it conquers our fears.  
> From master branch it leaps, with secrets held tight,  
> Uploading our files in the dead of the night.  
> With a logout hop, it ends its run—  
> A rabbit’s job, efficiently done!  
> 🐇✨
```

<!-- walkthrough_end -->
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- tips_start -->

---



<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=mushroomsoft-it/mushroomsoft-it&utm_content=47):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: NONE
user: login: efaby
created_at: 2025-05-06T01:42:33Z
body: talvez un login asi https://github.com/efaby/my-nest-app/blob/main/.github/workflows/my-container-AutoDeployTrigger-78e01055-a8e9-4159-9d96-ed44ab4827da.yml#L42 @JuanpaCortez93 @leoriofrio 
author_association: COLLABORATOR