diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..082c21b
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,57 @@
+stages: [build, release]
+image: "themackabu/rust:zigbuild-1.75.0"
+
+variables:
+  VERSION: '1.6.3'
+
+before_script:
+  - mkdir build
+  - apt-get update -yqq
+  - apt-get install -yqq zip clang llvm
+  - export CC="/usr/bin/clang"
+  - export CXX="/usr/bin/clang++"
+
+build_linux_amd64:
+  stage: build
+  only: [/^v\d+\.\d+\.\d+.*$/]
+  script:
+    - cargo zigbuild -r --color always
+    - mv target/release/pmc build/pmc
+    - zip build/pmc_${VERSION}_linux_amd64.zip build/pmc
+    - rm build/pmc
+  artifacts:
+    paths: [build/]
+
+build_darwin_amd64:
+  stage: build
+  only: [/^v\d+\.\d+\.\d+.*$/]
+  script:
+    - cargo zigbuild -r --target x86_64-apple-darwin --color always
+    - mv target/x86_64-apple-darwin/release/pmc build/pmc
+    - zip build/pmc_${VERSION}_darwin_amd64.zip build/pmc
+    - rm build/pmc
+  artifacts:
+    paths: [build/]
+
+build_darwin_arm:
+  stage: build
+  only: [/^v\d+\.\d+\.\d+.*$/]
+  script:
+    - cargo zigbuild -r --target aarch64-apple-darwin --color always
+    - mv target/aarch64-apple-darwin/release/pmc build/pmc
+    - zip build/pmc_${VERSION}_darwin_arm.zip build/pmc
+    - rm build/pmc
+  artifacts:
+    paths: [build/]
+
+release:
+  stage: release
+  image: registry.gitlab.com/gitlab-org/release-cli:latest
+  rules:
+    - if: '$CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+.*$/'
+  script:
+    - echo "running release_job"
+  release:
+    name: '$CI_COMMIT_TAG'
+    tag_name: '$CI_COMMIT_TAG'
+    description: '$CI_COMMIT_TAG'