--- a
+++ b/.github/workflows/release.yaml
@@ -0,0 +1,112 @@
+name: CI
+on:
+  push:
+  pull_request:
+    # branches:
+    #   - main
+  
+jobs:
+  format:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4
+      - uses: psf/black@stable 
+  lint:
+    name: Lint with flake8
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4
+
+      - uses: actions/setup-python@v5
+        with:
+          python-version: "3.11"
+      - name: Install flake8
+        run: pip install flake8 flake8-bugbear
+      - name: Lint with flake8  
+        run: flake8 src
+  run-tutorial:
+    name: Run tutorial - random_small
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4
+      - uses: actions/setup-python@v5
+        with:
+          python-version: "3.11"
+      - name: Install dependencies
+        run: pip install .
+      - name: Prepare tutorial data
+        run: |
+          cd tutorial
+          move-dl data=random_small task=encode_data --cfg job
+          move-dl data=random_small task=encode_data
+      - name: Train model and analyze latent space
+        run: |
+          cd tutorial
+          move-dl data=random_small task=random_small__latent --cfg job
+          move-dl data=random_small task=random_small__latent
+      - name: Identify associations - t-test
+        run: |
+          cd tutorial
+          move-dl data=random_small task=random_small__id_assoc_ttest --cfg job
+          move-dl data=random_small task=random_small__id_assoc_ttest task.training_loop.num_epochs=30 task.num_refits=4
+      - name: Identify associations - bayes factors
+        run: |
+          cd tutorial
+          move-dl data=random_small task=random_small__id_assoc_bayes --cfg job
+          move-dl data=random_small task=random_small__id_assoc_bayes task.training_loop.num_epochs=30 task.num_refits=20
+  run-tutorial-cont:
+      name: Run tutorial - random_continuous
+      runs-on: ubuntu-latest
+      steps:
+        - uses: actions/checkout@v4
+        - uses: actions/setup-python@v5
+          with:
+            python-version: "3.11"
+        - name: Install dependencies
+          run: pip install .
+        - name: Prepare tutorial data
+          run: |
+            cd tutorial
+            move-dl data=random_continuous task=encode_data
+        - name: Train model and analyze latent space
+          run: |
+            cd tutorial
+            move-dl data=random_continuous task=random_continuous__latent --cfg job
+            move-dl data=random_continuous task=random_continuous__latent
+        - name: Identify associations - t-test
+          run: |
+            cd tutorial
+            move-dl data=random_continuous task=random_continuous__id_assoc_ttest --cfg job
+            move-dl data=random_continuous task=random_continuous__id_assoc_ttest task.training_loop.num_epochs=30 task.num_refits=4
+        - name: Identify associations - bayes factors
+          run: |
+            cd tutorial
+            move-dl data=random_continuous task=random_continuous__id_assoc_bayes --cfg job
+            move-dl data=random_continuous task=random_continuous__id_assoc_bayes task.training_loop.num_epochs=30 task.num_refits=4
+        - name: Identify associations - KS
+          run: |
+            cd tutorial
+            move-dl data=random_continuous task=random_continuous__id_assoc_ks --cfg job
+            move-dl data=random_continuous task=random_continuous__id_assoc_ks task.training_loop.num_epochs=30 task.num_refits=4
+    
+  publish:
+    name: Publish package
+    runs-on: ubuntu-latest
+    if: startsWith(github.ref, 'refs/tags')
+    needs:
+      - format
+      - lint
+    steps:
+      - uses: actions/checkout@v4
+      - uses: actions/setup-python@v5
+        with:
+          python-version: "3.11"
+      - name: Install twine and build
+        run: python -m pip install --upgrade twine build
+      - name: Build
+        run: python -m build
+      - name: Publish package  
+        uses: pypa/gh-action-pypi-publish@release/v1
+        with:
+          user: __token__
+          password: ${{ secrets.PYPI_API_TOKEN }}