diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9ca3d592c57446847ad0be8e35dbbad3a9d10226..66614dd8b761323e55a22ccf63784ba065e56a4f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,3 +1,15 @@
+stages:
+  - builder-container
+  - component
+  - test
+  - release
+
+include:
+  # include the component located in the current project from the current SHA
+  - component: $CI_SERVER_FQDN/$CI_PROJECT_PATH/vs22-cmake@$CI_COMMIT_SHA
+    inputs:
+      stage: component
+
 .template-docker-windows:
   tags:
     - cgg
@@ -58,4 +70,27 @@ x64-vs2022:
     # TOOLSET: "v142" # 142: VS 2019
     # TOOLSET: "v143" # 143: VS 2022
 
+ensure-job-added:
+  stage: test
+  image: badouralix/curl-jq
+  script:
+    - |
+      route="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/pipelines/${CI_PIPELINE_ID}/jobs"
+      count=`curl --silent "$route" | jq 'map(select(.name | contains("component job of vs22-cmake"))) | length'`
+      if [ "$count" != "1" ]; then
+        echo "Count $count"
+        exit 1; else
+        echo "Component Job present"
+      fi
 
+# If the pipeline is for a new tag with a semantic version, and all previous jobs succeed,
+# create the release.
+create-release:
+  stage: release
+  image: registry.gitlab.com/gitlab-org/release-cli:latest
+  script: echo "Creating release $CI_COMMIT_TAG"
+  rules:
+    - if: $CI_COMMIT_TAG
+  release:
+    tag_name: $CI_COMMIT_TAG
+    description: "Release $CI_COMMIT_TAG of components repository $CI_PROJECT_PATH"
diff --git a/README.md b/README.md
index 9dec37e102d2f0bb4c0e48160109f03cafd6abda..53b13cce235211fdc25532f8702f5b248dc3befe 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,13 @@
-visual studio based CI builds.
+# BuildBox-Windows (experimental)
+
+## Containers
+
+- VS 2022 based on servercore:ltsc2022 container
+
+## Components
+
+This project also publishes CI components to build cmake based projects.
+
+### vs22-cmake
+
+- ninja and msbuild based build