diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9f9852afb6e1603b358ac206b9bda7459519388d
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,47 @@
+# see https://www.msys2.org/docs/ci/#gitlab
+Windows-MSYS2-MINGW64:
+  only:
+  - tags
+  tags: [ windows, msys2 ]
+  before_script:
+  - wget.exe -nv -O msys2.exe https://github.com/msys2/msys2-installer/releases/download/nightly-x86_64/msys2-base-x86_64-latest.sfx.exe
+  - Get-FileHash ./msys2.exe -Algorithm SHA256 | Format-List
+  - ./msys2.exe -y -oC:\
+  - Remove-Item msys2.exe
+  - $env:CHERE_INVOKING = 'yes'
+  - $env:MSYSTEM = 'MINGW64' # https://www.msys2.org/docs/environments/
+  - C:\msys64\usr\bin\bash -lc ' '
+  - C:\msys64\usr\bin\bash -lc 'pacman --noconfirm -Syuu'
+  - C:\msys64\usr\bin\bash -lc 'pacman --noconfirm -Syuu'
+  - |
+    C:\msys64\usr\bin\bash -lcx '
+    pacman --noconfirm -Syu mingw-w64-ucrt-x86_64-gcc mingw-w64-x86_64-cmake
+    pacman --noconfirm -Syu zip'
+  script:
+  - |
+    C:\msys64\usr\bin\bash -lcx '
+    mkdir -p build
+    cd build
+    cmake .. -DCMAKE_BUILD_TYPE=Release
+    cmake --build . --target cute
+    ls -lh
+    cd ..'
+  #- C:\msys64\usr\bin\bash -lc 'grep ^PASS tests/basic.log'
+  after_script:
+  - |
+    C:\msys64\usr\bin\bash -lcx '
+    mkdir -p template/{lib,src}
+    mv build/cute.dll template/lib/
+    mv build/libcute.dll.a template/lib/
+    mv include/cute.h template/lib/
+    mv include/dllDefines.h template/lib/
+    mv src/main.cpp template/lib/
+    mv examples/CmakeLists.txt template/
+    mv examples/example.cpp template/
+    mv .clang-format template/
+    mv .gitignore template/
+    zip -r template-windows.zip template/
+    '
+  artifacts:
+    paths:
+    - template-windows.zip
\ No newline at end of file