diff --git a/.editorconfig b/.editorconfig
index 23219591830834fcac3e4a47c1c1b95f499ab7a3..3581b1685eae049dfa95bd38550c7bca3a028bf4 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -7,6 +7,10 @@ insert_final_newline = true
 indent_style = tab
 charset = utf-8
 
+[*.yml]
+indent_style = space
+indent_size = 2
+
 [*.py]
 indent_style = space
 indent_size = 4
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d079b2352ceb9dc8558e2645be8933e5a2c9abab
--- /dev/null
+++ b/.github/workflows/lint.yml
@@ -0,0 +1,29 @@
+name: Lint
+on:
+  push:
+  pull_request:
+    types: [opened, synchronize, reopened]
+jobs:
+  lua:
+    name: Lua
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v1
+      - name: Install Dependencies
+        run: sudo apt install lua-check
+      - name: Install example site
+        run: ln -s ./docs/site-example ./site
+      - name: Lint Lua code
+        run: make lint-lua
+
+  sh:
+    name: Shell
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v1
+      - name: Install Dependencies
+        run: sudo apt install shellcheck
+      - name: Install example site
+        run: ln -s ./docs/site-example ./site
+      - name: Lint shell code
+        run: make lint-sh