diff --git a/.woodpecker.yml b/.woodpecker.yml
new file mode 100644
index 0000000000000000000000000000000000000000..fadc4b566dbcea76fca72380553aa01c1674154f
--- /dev/null
+++ b/.woodpecker.yml
@@ -0,0 +1,43 @@
+pipeline:
+  build:
+    image: node:16-alpine
+    pull: true
+    commands:
+      - npm ci
+
+  tests:
+    image: node:16-alpine
+    pull: true
+    commands:
+      - sleep 5
+      - npm test
+    environment:
+      - APP_KEY=12345678901234567890123456789012
+      - APP_NAME=Jetsam
+      - USE_EPHEMERAL_KEYS=false
+      - DATABASE_HOST=postgres
+      - DATABASE_NAME=jetsam
+      - DATABASE_USER=jetsam
+      - DATABASE_PASS=jetsam
+      - DATABASE_PORT=5432
+      - DATABASE_SSL_REQUIRE=false
+      - MAIL_DRIVER=log
+      - FS_DRIVER=local
+      - CACHE_DRIVER=memory
+      - QUEUE_DRIVER=async
+      - JWK_KEY_ID=test_system
+      - SENTRY_ENABLED=false
+    secrets:
+      - rsa_public_key_b64
+      - rsa_private_key_b64
+      - rsa_private_passphrase
+
+services:
+  postgres:
+    image: timescale/timescaledb-postgis:latest-pg13
+    environment:
+      POSTGRES_USER: jetsam
+      POSTGRES_PASSWORD: jetsam
+      POSTGRES_DB: jetsam
+    ports:
+      - "5432:5432"
\ No newline at end of file