GitHub actions workflows.
diff --git a/.github/workflows/darwin.yml b/.github/workflows/darwin.yml
new file mode 100644
index 0000000..dd578d8
--- /dev/null
+++ b/.github/workflows/darwin.yml
@@ -0,0 +1,22 @@
+name: darwin
+on: [push, pull_request]
+jobs:
+
+  build:
+    name: build
+    runs-on: [ macos-latest ]
+    steps:
+    - name: Check out code
+      uses: actions/checkout@v1
+
+    - name: Install ninja
+      run: brew install ninja
+
+    - name: Configure
+      run: mkdir build && cd build && cmake -G Ninja ..
+
+    - name: build
+      run: cd build && ninja
+
+    - name: Test
+      run: cd build && ctest --output-on-failure
\ No newline at end of file
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
new file mode 100644
index 0000000..6a29748
--- /dev/null
+++ b/.github/workflows/linux.yml
@@ -0,0 +1,22 @@
+name: linux
+on: [push, pull_request]
+jobs:
+
+  build:
+    name: build
+    runs-on: [ ubuntu-latest ]
+    steps:
+    - name: Check out code
+      uses: actions/checkout@v1
+
+    - name: Install ninja
+      run: sudo apt-get install ninja-build
+
+    - name: Configure
+      run: mkdir build && cd build && cmake -G Ninja -D NNG_ENABLE_TLS=ON ..
+
+    - name: Build
+      run: cd build && ninja
+
+    - name: Test
+      run: cd build && ctest --output-on-failure
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
new file mode 100644
index 0000000..1badf1d
--- /dev/null
+++ b/.github/workflows/windows.yml
@@ -0,0 +1,22 @@
+name: windows
+on: [push, pull_request]
+jobs:
+
+  build:
+    name: build
+    runs-on: [ windows-latest ]
+    steps:
+    - name: Check out code
+      uses: actions/checkout@v1
+
+    - name: Configure
+      run: cmake -B build
+
+    - name: Build
+      run: cmake --build build
+
+    - name: Test
+      run: |
+        cd build
+        ctest -C Debug --output-on-failure
+