From f1e0fabe2ca7117af3388d0d7f62ca6be60dcc4e Mon Sep 17 00:00:00 2001
From: Lansana DIOMANDE <ldiomande@takima.fr>
Date: Wed, 11 May 2022 14:13:26 +0000
Subject: [PATCH] feat: publish_extension_on_marketplace_with_ci

---
 .gitlab-ci.yml                                |  59 +++-
 build-desktop.sh                              |   8 +
 deadlock-plugins/deadlock-extension/README.md |  16 +-
 deadlock-plugins/deadlock-extension/build.sh  |  13 +-
 .../deadlock-extension/docs/README.md         |  48 +++
 .../deadlock-extension/media/logo.png         | Bin 0 -> 9540 bytes
 .../deadlock-extension/package-lock.json      | 290 ++++++++++++++++--
 .../deadlock-extension/package.json           |  14 +-
 8 files changed, 389 insertions(+), 59 deletions(-)
 create mode 100755 build-desktop.sh
 create mode 100644 deadlock-plugins/deadlock-extension/docs/README.md
 create mode 100644 deadlock-plugins/deadlock-extension/media/logo.png

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e62db094..4e98ba2e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,5 +1,6 @@
 stages:
   - build
+  - publish
 
 before_script:
   - apk update
@@ -19,6 +20,58 @@ build:
     - ./build.sh $TAG $VERSION $CI_REGISTRY_IMAGE
     - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.e-biz.fr
     - docker push $CI_REGISTRY_IMAGE/$VERSION:$TAG
-  only:
-    - master
-    - tags
+  rules:
+    - if: $CI_COMMIT_BRANCH == "main"
+    - if: $CI_COMMIT_TAG != null
+
+
+desktop_extension:package:pre-release:
+  stage: build
+  cache:
+    paths:
+      - ./deadlock-plugins/deadlock-extension/
+    policy: push
+  script:
+    - ./build-desktop.sh staging
+  rules:
+    - if: $CI_COMMIT_BRANCH == "develop"
+    - if: $CI_COMMIT_TAG =~ /(?:\d+.){2}(?:\d+)*(1|3|5|7|9)$/ # If tag is like X.Y.Z and Z is odd
+
+
+desktop_extension:publish:pre-release:
+  stage: publish
+  cache:
+    paths:
+      - ./deadlock-plugins/deadlock-extension/
+    policy: pull
+  script:
+    - cd ./deadlock-plugins/deadlock-extension
+    - npm run vsce-publish -- --pre-release -p $VSCODE_EXTENSION_MARKET_PLACE_ACCESS_TOKEN
+  rules:
+    - if: $CI_COMMIT_BRANCH == "develop"
+    - if: $CI_COMMIT_TAG =~ /(?:\d+.){2}(?:\d+)*(1|3|5|7|9)$/ # If tag is like X.Y.Z and Z is odd
+
+
+desktop_extension:package:release:
+  stage: build
+  cache:
+    paths:
+      - ./deadlock-plugins/deadlock-extension/
+    policy: push
+
+  script:
+    - ./build-desktop.sh prod
+  rules:
+    - if: $CI_COMMIT_TAG =~ /(?:\d+.){2}(?:\d+)*(2|4|6|8|0)$/ # If tag is like X.Y.Z and Z is even
+
+desktop_extension:publish:release:
+  stage: publish
+  cache:
+    paths:
+      - ./deadlock-plugins/deadlock-extension/
+    policy: pull
+  script:
+    - cd ./deadlock-plugins/deadlock-extension
+    - npm run vsce-publish -- -p $VSCODE_EXTENSION_MARKET_PLACE_ACCESS_TOKEN
+  rules:
+    - if: $CI_COMMIT_TAG =~ /(?:\d+.){2}(?:\d+)*(2|4|6|8|0)$/ # If tag is like X.Y.Z and Z is even
diff --git a/build-desktop.sh b/build-desktop.sh
new file mode 100755
index 00000000..d7b91caf
--- /dev/null
+++ b/build-desktop.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+set -e
+
+cd ./deadlock-plugins/deadlock-extension/
+
+./install.sh
+./build.sh $@
diff --git a/deadlock-plugins/deadlock-extension/README.md b/deadlock-plugins/deadlock-extension/README.md
index c24101e2..f5847f3f 100644
--- a/deadlock-plugins/deadlock-extension/README.md
+++ b/deadlock-plugins/deadlock-extension/README.md
@@ -1,15 +1,3 @@
-# Deadlock Coding
+## Deadlock Coding extension
 
-Vscode extension to show a panel with :
-
-- adresses availables for the current challenge pulled from `/home/config/user-challenge.json`
-- challenge instruction pulled from the `README.md`
-
-## Quick start
-
-- Run `setup-dev-env.sh` to mock challenge configuration
-- Run `install.sh`
-- Run `build.sh`
-- Press `F5` (or use `Run and Debug` tab).
-
-If something goes wrong, you may need to kill watch Task terminal between restarts.
+This extension was created to allow you to do some of the [Deadlock](https://www.deadlock.io) platform exercises directly on your Visual Studio Code IDE
diff --git a/deadlock-plugins/deadlock-extension/build.sh b/deadlock-plugins/deadlock-extension/build.sh
index 77a68674..5cb1d85e 100755
--- a/deadlock-plugins/deadlock-extension/build.sh
+++ b/deadlock-plugins/deadlock-extension/build.sh
@@ -2,5 +2,16 @@
 
 set -e
 
+CONFIG_FILE=$1
+
+if ! [ -z "$CONFIG_FILE" ]
+  then
+    echo $CONFIG_FILE
+    mv -f src/config.$CONFIG_FILE.ts src/config.ts
+    # Remove all other configs
+    rm src/config.*.ts
+fi
+
+
 npm run build-extension
-npm run vsce
+npm run vsce-package
diff --git a/deadlock-plugins/deadlock-extension/docs/README.md b/deadlock-plugins/deadlock-extension/docs/README.md
new file mode 100644
index 00000000..e5885f73
--- /dev/null
+++ b/deadlock-plugins/deadlock-extension/docs/README.md
@@ -0,0 +1,48 @@
+# Deadlock Coding
+
+Vscode extension to show a panel with :
+
+- adresses availables for the current challenge pulled from `/home/config/user-challenge.json`
+- challenge instruction pulled from the `README.md`
+
+## Quick start
+
+- Run `setup-dev-env.sh` to mock challenge configuration
+- Run `install.sh`
+- Run `build.sh`
+- Press `F5` (or use `Run and Debug` tab).
+
+If something goes wrong, you may need to kill watch Task terminal between restarts.
+
+## Build a prod version
+
+1. Upgrade the version with `npm version`. You can see how to use the command [here](https://docs.npmjs.com/cli/v8/commands/npm-version)
+
+2. Push
+
+```shell
+git push origin X.Y.Z --tags
+```
+
+## Release/pre-release management
+
+For the moment, the vscode marketplace does not fully support semver ([especially the suffixes](https://github.com/microsoft/vsmarketplace/issues/50#issuecomment-990764201)). It is therefore not possible to create an `0.0.1-alpha` version of the extension for example.
+
+### Publish a pre-release version
+
+When you push a tag that have a version like X.Y.Z and `Z` is **odd**, a `pre-release` version of the extension is published.
+
+### Publish a release version
+
+When you push a tag that have a version like X.Y.Z and `Z` is **even**, a `release` version of the extension is published.
+
+[More detail on how publish an extension on marketplace](https://code.visualstudio.com/api/working-with-extensions/publishing-extension)
+
+### Gitlab pipeline to pusblish extension
+
+The pipeline needs a token from the marketplace in order to publish the extension.
+
+- The method describing how to retrieve the token is described [here](https://code.visualstudio.com/api/working-with-extensions/publishing-extension#get-a-personal-access-token)
+- Then the token must be inserted as the value of the CI/CD variables `VSCODE_EXTENSION_MARKET_PLACE_ACCESS_TOKEN`
+
+**This token has a maximum lifetime of 1 year**
diff --git a/deadlock-plugins/deadlock-extension/media/logo.png b/deadlock-plugins/deadlock-extension/media/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..a53213f88159e56e029222335fa7876c9c2ee9bd
GIT binary patch
literal 9540
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
P1_lOCS3j3^P6<r_H7PP;

literal 0
HcmV?d00001

diff --git a/deadlock-plugins/deadlock-extension/package-lock.json b/deadlock-plugins/deadlock-extension/package-lock.json
index e5b42ab7..8be81528 100644
--- a/deadlock-plugins/deadlock-extension/package-lock.json
+++ b/deadlock-plugins/deadlock-extension/package-lock.json
@@ -26,13 +26,14 @@
         "@types/vscode": "^1.51.0",
         "@typescript-eslint/eslint-plugin": "^3.10.1",
         "@typescript-eslint/parser": "^3.10.1",
+        "auto-changelog": "^2.4.0",
         "esbuild": "^0.14.2",
         "eslint": "^7.32.0",
         "prettier": "2.6.2",
         "terser-webpack-plugin": "^5.2.5",
         "ts-node": "^9.1.1",
         "typescript": "^3.9.10",
-        "vsce": "^2.5.1",
+        "vsce": "^2.7.0",
         "webpack": "^5.65.0",
         "webpack-cli": "^4.9.1"
       },
@@ -746,6 +747,54 @@
       "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
       "dev": true
     },
+    "node_modules/auto-changelog": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.4.0.tgz",
+      "integrity": "sha512-vh17hko1c0ItsEcw6m7qPRf3m45u+XK5QyCrrBFViElZ8jnKrPC1roSznrd1fIB/0vR/zawdECCRJtTuqIXaJw==",
+      "dev": true,
+      "dependencies": {
+        "commander": "^7.2.0",
+        "handlebars": "^4.7.7",
+        "node-fetch": "^2.6.1",
+        "parse-github-url": "^1.0.2",
+        "semver": "^7.3.5"
+      },
+      "bin": {
+        "auto-changelog": "src/index.js"
+      },
+      "engines": {
+        "node": ">=8.3"
+      }
+    },
+    "node_modules/auto-changelog/node_modules/commander": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+      "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+      "dev": true,
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/auto-changelog/node_modules/node-fetch": {
+      "version": "2.6.7",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+      "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+      "dev": true,
+      "dependencies": {
+        "whatwg-url": "^5.0.0"
+      },
+      "engines": {
+        "node": "4.x || >=6.0.0"
+      },
+      "peerDependencies": {
+        "encoding": "^0.1.0"
+      },
+      "peerDependenciesMeta": {
+        "encoding": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/azure-devops-node-api": {
       "version": "11.1.0",
       "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.1.0.tgz",
@@ -2030,6 +2079,27 @@
       "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
       "dev": true
     },
+    "node_modules/handlebars": {
+      "version": "4.7.7",
+      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+      "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+      "dev": true,
+      "dependencies": {
+        "minimist": "^1.2.5",
+        "neo-async": "^2.6.0",
+        "source-map": "^0.6.1",
+        "wordwrap": "^1.0.0"
+      },
+      "bin": {
+        "handlebars": "bin/handlebars"
+      },
+      "engines": {
+        "node": ">=0.4.7"
+      },
+      "optionalDependencies": {
+        "uglify-js": "^3.1.4"
+      }
+    },
     "node_modules/has": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -2419,9 +2489,9 @@
       }
     },
     "node_modules/linkify-it": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
-      "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
+      "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
       "dev": true,
       "dependencies": {
         "uc.micro": "^1.0.1"
@@ -2497,14 +2567,14 @@
       "dev": true
     },
     "node_modules/markdown-it": {
-      "version": "10.0.0",
-      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz",
-      "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==",
+      "version": "12.3.2",
+      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
+      "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
       "dev": true,
       "dependencies": {
-        "argparse": "^1.0.7",
-        "entities": "~2.0.0",
-        "linkify-it": "^2.0.0",
+        "argparse": "^2.0.1",
+        "entities": "~2.1.0",
+        "linkify-it": "^3.0.1",
         "mdurl": "^1.0.1",
         "uc.micro": "^1.0.5"
       },
@@ -2512,12 +2582,21 @@
         "markdown-it": "bin/markdown-it.js"
       }
     },
-    "node_modules/markdown-it/node_modules/entities": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz",
-      "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==",
+    "node_modules/markdown-it/node_modules/argparse": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
       "dev": true
     },
+    "node_modules/markdown-it/node_modules/entities": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
+      "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
     "node_modules/marked": {
       "version": "4.0.6",
       "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.6.tgz",
@@ -2865,6 +2944,18 @@
         "node": ">=6"
       }
     },
+    "node_modules/parse-github-url": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz",
+      "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==",
+      "dev": true,
+      "bin": {
+        "parse-github-url": "cli.js"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/parse-semver": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz",
@@ -3730,6 +3821,12 @@
         "node": ">=8.17.0"
       }
     },
+    "node_modules/tr46": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+      "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
+      "dev": true
+    },
     "node_modules/ts-node": {
       "version": "9.1.1",
       "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz",
@@ -3851,6 +3948,19 @@
       "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
       "dev": true
     },
+    "node_modules/uglify-js": {
+      "version": "3.15.4",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.4.tgz",
+      "integrity": "sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==",
+      "dev": true,
+      "optional": true,
+      "bin": {
+        "uglifyjs": "bin/uglifyjs"
+      },
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
     "node_modules/underscore": {
       "version": "1.13.1",
       "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
@@ -3885,9 +3995,9 @@
       "dev": true
     },
     "node_modules/vsce": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.5.1.tgz",
-      "integrity": "sha512-vJ+xY93Wv3NhgeriMyIC2oMA+niifOI9XGIqEToIq/rFRoQnXlmO4PSyis/OxBl9hw8OKKC/VcI9CijfFufEkw==",
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.7.0.tgz",
+      "integrity": "sha512-CKU34wrQlbKDeJCRBkd1a8iwF9EvNxcYMg9hAUH6AxFGR6Wo2IKWwt3cJIcusHxx6XdjDHWlfAS/fJN30uvVnA==",
       "dev": true,
       "dependencies": {
         "azure-devops-node-api": "^11.0.1",
@@ -3898,7 +4008,7 @@
         "hosted-git-info": "^4.0.2",
         "keytar": "^7.7.0",
         "leven": "^3.1.0",
-        "markdown-it": "^10.0.0",
+        "markdown-it": "^12.3.2",
         "mime": "^1.3.4",
         "minimatch": "^3.0.3",
         "parse-semver": "^1.1.1",
@@ -3980,6 +4090,12 @@
         "node": ">= 8"
       }
     },
+    "node_modules/webidl-conversions": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+      "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
+      "dev": true
+    },
     "node_modules/webpack": {
       "version": "5.65.0",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz",
@@ -4101,6 +4217,16 @@
         "node": ">=10.13.0"
       }
     },
+    "node_modules/whatwg-url": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+      "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+      "dev": true,
+      "dependencies": {
+        "tr46": "~0.0.3",
+        "webidl-conversions": "^3.0.0"
+      }
+    },
     "node_modules/which": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -4140,6 +4266,12 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/wordwrap": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+      "dev": true
+    },
     "node_modules/wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -4777,6 +4909,36 @@
       "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
       "dev": true
     },
+    "auto-changelog": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.4.0.tgz",
+      "integrity": "sha512-vh17hko1c0ItsEcw6m7qPRf3m45u+XK5QyCrrBFViElZ8jnKrPC1roSznrd1fIB/0vR/zawdECCRJtTuqIXaJw==",
+      "dev": true,
+      "requires": {
+        "commander": "^7.2.0",
+        "handlebars": "^4.7.7",
+        "node-fetch": "^2.6.1",
+        "parse-github-url": "^1.0.2",
+        "semver": "^7.3.5"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+          "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+          "dev": true
+        },
+        "node-fetch": {
+          "version": "2.6.7",
+          "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+          "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+          "dev": true,
+          "requires": {
+            "whatwg-url": "^5.0.0"
+          }
+        }
+      }
+    },
     "azure-devops-node-api": {
       "version": "11.1.0",
       "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.1.0.tgz",
@@ -5744,6 +5906,19 @@
       "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
       "dev": true
     },
+    "handlebars": {
+      "version": "4.7.7",
+      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+      "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+      "dev": true,
+      "requires": {
+        "minimist": "^1.2.5",
+        "neo-async": "^2.6.0",
+        "source-map": "^0.6.1",
+        "uglify-js": "^3.1.4",
+        "wordwrap": "^1.0.0"
+      }
+    },
     "has": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -6026,9 +6201,9 @@
       }
     },
     "linkify-it": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
-      "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
+      "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
       "dev": true,
       "requires": {
         "uc.micro": "^1.0.1"
@@ -6092,22 +6267,28 @@
       "dev": true
     },
     "markdown-it": {
-      "version": "10.0.0",
-      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz",
-      "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==",
+      "version": "12.3.2",
+      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
+      "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
       "dev": true,
       "requires": {
-        "argparse": "^1.0.7",
-        "entities": "~2.0.0",
-        "linkify-it": "^2.0.0",
+        "argparse": "^2.0.1",
+        "entities": "~2.1.0",
+        "linkify-it": "^3.0.1",
         "mdurl": "^1.0.1",
         "uc.micro": "^1.0.5"
       },
       "dependencies": {
+        "argparse": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+          "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+          "dev": true
+        },
         "entities": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz",
-          "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==",
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
+          "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
           "dev": true
         }
       }
@@ -6369,6 +6550,12 @@
         "callsites": "^3.0.0"
       }
     },
+    "parse-github-url": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz",
+      "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==",
+      "dev": true
+    },
     "parse-semver": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz",
@@ -7015,6 +7202,12 @@
         "rimraf": "^3.0.0"
       }
     },
+    "tr46": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+      "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
+      "dev": true
+    },
     "ts-node": {
       "version": "9.1.1",
       "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz",
@@ -7096,6 +7289,13 @@
       "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
       "dev": true
     },
+    "uglify-js": {
+      "version": "3.15.4",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.4.tgz",
+      "integrity": "sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==",
+      "dev": true,
+      "optional": true
+    },
     "underscore": {
       "version": "1.13.1",
       "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
@@ -7130,9 +7330,9 @@
       "dev": true
     },
     "vsce": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.5.1.tgz",
-      "integrity": "sha512-vJ+xY93Wv3NhgeriMyIC2oMA+niifOI9XGIqEToIq/rFRoQnXlmO4PSyis/OxBl9hw8OKKC/VcI9CijfFufEkw==",
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.7.0.tgz",
+      "integrity": "sha512-CKU34wrQlbKDeJCRBkd1a8iwF9EvNxcYMg9hAUH6AxFGR6Wo2IKWwt3cJIcusHxx6XdjDHWlfAS/fJN30uvVnA==",
       "dev": true,
       "requires": {
         "azure-devops-node-api": "^11.0.1",
@@ -7143,7 +7343,7 @@
         "hosted-git-info": "^4.0.2",
         "keytar": "^7.7.0",
         "leven": "^3.1.0",
-        "markdown-it": "^10.0.0",
+        "markdown-it": "^12.3.2",
         "mime": "^1.3.4",
         "minimatch": "^3.0.3",
         "parse-semver": "^1.1.1",
@@ -7203,6 +7403,12 @@
       "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz",
       "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q=="
     },
+    "webidl-conversions": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+      "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
+      "dev": true
+    },
     "webpack": {
       "version": "5.65.0",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz",
@@ -7279,6 +7485,16 @@
       "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==",
       "dev": true
     },
+    "whatwg-url": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+      "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+      "dev": true,
+      "requires": {
+        "tr46": "~0.0.3",
+        "webidl-conversions": "^3.0.0"
+      }
+    },
     "which": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -7309,6 +7525,12 @@
       "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
       "dev": true
     },
+    "wordwrap": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+      "dev": true
+    },
     "wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
diff --git a/deadlock-plugins/deadlock-extension/package.json b/deadlock-plugins/deadlock-extension/package.json
index dce35c0d..5095eb4f 100644
--- a/deadlock-plugins/deadlock-extension/package.json
+++ b/deadlock-plugins/deadlock-extension/package.json
@@ -3,6 +3,7 @@
   "description": "Deadlock Coding",
   "version": "0.0.2",
   "publisher": "Deadlock",
+  "icon": "media/logo.png",
   "engines": {
     "vscode": "^1.66.0"
   },
@@ -16,10 +17,6 @@
     "onWebviewPanel:deadlockHelp",
     "onStartupFinished"
   ],
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/microsoft/vscode-extension-samples.git"
-  },
   "main": "./out/main.js",
   "contributes": {
     "commands": [
@@ -85,7 +82,8 @@
     }
   },
   "scripts": {
-    "vsce": "vsce package",
+    "vsce-package": "vsce package --allow-missing-repository",
+    "vsce-publish": "vsce publish --allow-missing-repository",
     "esbuild-base": "esbuild --bundle --format=cjs --platform=node",
     "build-extension": "npm run esbuild-base -- --external:vscode ./src/extension.ts --outfile=out/main.js --minify",
     "build-recorder": "npm run esbuild-base -- ./src/recorder/index.ts --outfile=out/recorder.js --minify",
@@ -93,7 +91,8 @@
     "esbuild": "npm run esbuild-base -- --sourcemap",
     "esbuild-watch": "npm run esbuild-base -- --sourcemap --watch",
     "lint": "eslint . --ext .ts,.tsx",
-    "watch": "tsc -w -p ./"
+    "watch": "tsc -w -p ./",
+    "postversion": "git add package*.json && auto-changelog -p && git add CHANGELOG.md && git commit -m \"build: $npm_package_version\" && git tag $npm_package_version && echo \" \\033[31m Don't forget to publish tags (exemple: git push origin $npm_package_version) \\033[0m\""
   },
   "dependencies": {
     "@vscode/webview-ui-toolkit": "^1.0.0",
@@ -114,13 +113,14 @@
     "@types/vscode": "^1.51.0",
     "@typescript-eslint/eslint-plugin": "^3.10.1",
     "@typescript-eslint/parser": "^3.10.1",
+    "auto-changelog": "^2.4.0",
     "esbuild": "^0.14.2",
     "eslint": "^7.32.0",
     "prettier": "2.6.2",
     "terser-webpack-plugin": "^5.2.5",
     "ts-node": "^9.1.1",
     "typescript": "^3.9.10",
-    "vsce": "^2.5.1",
+    "vsce": "^2.7.0",
     "webpack": "^5.65.0",
     "webpack-cli": "^4.9.1"
   }
-- 
GitLab