diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..491aab9
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,28 @@
+name: ci
+
+on:
+  push:
+    branches:
+      - master
+      - releases/v*
+
+jobs:
+  main:
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        logout:
+          - true
+          - false
+      steps:
+        -
+          name: Checkout
+          uses: actions/checkout@v2.3.1
+        -
+          name: Login
+          uses: ./login/
+          with:
+            username: ${{ secrets.DOCKER_USERNAME_TEST }}
+            password: ${{ secrets.DOCKER_PASSWORD_TEST }}
+            logout: ${{ matrix.logout }}
diff --git a/.github/workflows/pre-checkin.yml b/.github/workflows/pre-checkin.yml
new file mode 100644
index 0000000..d6ae2da
--- /dev/null
+++ b/.github/workflows/pre-checkin.yml
@@ -0,0 +1,30 @@
+name: pre-checkin
+
+on:
+  push:
+    paths-ignore:
+      - '**.md'
+  pull_request:
+    paths-ignore:
+      - '**.md'
+
+jobs:
+  pre-checkin:
+    runs-on: ubuntu-latest
+    steps:
+      -
+        name: Checkout
+        uses: actions/checkout@v2.3.1
+      -
+        name: Install
+        run: yarn install
+      -
+        name: Pre-checkin
+        run: yarn run pre-checkin
+      -
+        name: Check for uncommitted changes
+        run: |
+          if [[ `git status --porcelain` ]]; then
+            git status --porcelain
+            echo "::warning::Found changes. Please run 'yarn run pre-checkin' and push"
+          fi