diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
new file mode 100644
index 000000000..2cd3ba5d7
--- /dev/null
+++ b/.github/workflows/rust.yml
@@ -0,0 +1,29 @@
+name: Rust
+
+on:
+  push:
+    branches: [master]
+  pull_request:
+    branches: [master]
+  merge_group:
+
+env:
+  CARGO_TERM_COLOR: always
+
+jobs:
+  build-nightly:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - uses: actions/cache@v2
+        with:
+          path: |
+            ~/.cargo/registry
+            ~/.cargo/git
+            target
+          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
+
+      - name: Check fmt
+        run: cargo fmt -- --check
+      - name: Build
+        run: ./ci.sh
diff --git a/Cargo.toml b/Cargo.toml
index 3bdeb0cfb..a307a6cc3 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -26,3 +26,9 @@ futures = { version = "0.3.17", default-features = false, features = ["async-awa
 
 embedded-hal-1 = { package = "embedded-hal", version = "1.0.0-alpha.9" }
 num_enum = { version = "0.5.7", default-features = false }
+
+[patch.crates-io]
+embassy-time = { git = "https://github.com/embassy-rs/embassy", rev = "e3f8020c3bdf726dfa451b5b190f27191507a18f" }
+embassy-futures = { git = "https://github.com/embassy-rs/embassy", rev = "e3f8020c3bdf726dfa451b5b190f27191507a18f" }
+embassy-sync = { git = "https://github.com/embassy-rs/embassy", rev = "e3f8020c3bdf726dfa451b5b190f27191507a18f" }
+embassy-net-driver-channel = { git = "https://github.com/embassy-rs/embassy", rev = "e3f8020c3bdf726dfa451b5b190f27191507a18f" }
diff --git a/ci.sh b/ci.sh
new file mode 100755
index 000000000..1b33564fb
--- /dev/null
+++ b/ci.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+set -euxo pipefail
+
+# build examples
+#==================
+
+(cd examples/rpi-pico-w; WIFI_NETWORK=foo WIFI_PASSWORD=bar cargo build --release)
+
+
+# build with log/defmt combinations
+#=====================================
+
+cargo build --target thumbv6m-none-eabi --features ''
+cargo build --target thumbv6m-none-eabi --features 'log'
+cargo build --target thumbv6m-none-eabi --features 'defmt'
+cargo build --target thumbv6m-none-eabi --features 'log,firmware-logs'
+cargo build --target thumbv6m-none-eabi --features 'defmt,firmware-logs'