diff --git a/polkadot/.github/workflows/check-weights.yml b/polkadot/.github/workflows/check-weights.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e6a6c43e0a6a9b76448d448685d63672d8288a3f
--- /dev/null
+++ b/polkadot/.github/workflows/check-weights.yml
@@ -0,0 +1,49 @@
+name: Check updated weights
+
+on:
+  pull_request:
+    paths:
+      - 'runtime/*/src/weights/**'
+
+jobs:
+  check_weights_files:
+    strategy:
+      fail-fast: false
+      matrix:
+        runtime: [westend, kusama, polkadot, rococo]
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout sources
+        uses: actions/checkout@v3
+      - name: Check weights files
+        shell: bash
+        run: |
+          scripts/ci/github/verify_updated_weights.sh ${{ matrix.runtime }}
+
+  # This job uses https://github.com/ggwpez/substrate-weight-compare to compare the weights of the current
+  # release with the last release, then adds them as a comment to the PR.
+  check_weight_changes:
+    strategy:
+      fail-fast: false
+      matrix:
+        runtime: [westend, kusama, polkadot, rococo]
+    runs-on: ubuntu-latest
+    steps:
+      - name: Get latest release
+        run: |
+          LAST_RELEASE=$(curl -s https://api.github.com/repos/paritytech/polkadot/releases/latest | jq -r .tag_name)
+          echo "LAST_RELEASE=$LAST_RELEASE" >> $GITHUB_ENV
+      - name: Checkout current sources
+        uses: actions/checkout@v3
+        with:
+          fetch-depth: 0
+      - name: Check weight changes
+        shell: bash
+        run: |
+          cargo install --git https://github.com/ggwpez/substrate-weight-compare swc
+          ./scripts/ci/github/check_weights_swc.sh ${{ matrix.runtime }} "$LAST_RELEASE" | tee swc_output_${{ matrix.runtime }}.md
+      - name: Add comment
+        uses: thollander/actions-comment-pull-request@v2
+        with:
+          filePath: ./swc_output_${{ matrix.runtime }}.md
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
\ No newline at end of file
diff --git a/polkadot/scripts/ci/github/check_weights_swc.sh b/polkadot/scripts/ci/github/check_weights_swc.sh
new file mode 100755
index 0000000000000000000000000000000000000000..35652f4fde83690e78f4d1d4e47f4e333b3fc2fe
--- /dev/null
+++ b/polkadot/scripts/ci/github/check_weights_swc.sh
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+# Need to set globstar for ** magic
+shopt -s globstar
+
+RUNTIME=$1
+VERSION=$2
+echo "<details>"
+echo "<summary>Weight changes for $RUNTIME</summary>"
+echo
+swc compare commits \
+    --method asymptotic \
+    --offline \
+    --path-pattern "./runtime/$RUNTIME/src/weights/**/*.rs" \
+    --no-color \
+    --format markdown \
+    --strip-path-prefix "runtime/$RUNTIME/src/weights/" \
+    "$VERSION"
+    #--ignore-errors
+echo
+echo "</details>"
diff --git a/polkadot/scripts/ci/github/verify_updated_weights.sh b/polkadot/scripts/ci/github/verify_updated_weights.sh
new file mode 100755
index 0000000000000000000000000000000000000000..54db1de21ca00af1bff26b9fdb22932578e3f511
--- /dev/null
+++ b/polkadot/scripts/ci/github/verify_updated_weights.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+
+ROOT="$(dirname "$0")/../../.."
+RUNTIME="$1"
+
+# If we're on a mac, use gdate for date command (requires coreutils installed via brew)
+if [[ "$OSTYPE" == "darwin"* ]]; then
+  DATE="gdate"
+else
+  DATE="date"
+fi
+
+function check_date() {
+  # Get the dates as input arguments
+  LAST_RUN="$1"
+  TODAY="$($DATE +%Y-%m-%d)"
+  # Calculate the date two days before today
+  CUTOFF=$($DATE -d "$TODAY - 2 days" +%Y-%m-%d)
+
+  if [[ "$LAST_RUN" > "$CUTOFF" ]]; then
+    return 0
+  else
+    return 1
+  fi
+}
+
+check_weights(){
+    FILE=$1
+    CUR_DATE=$2
+    DATE_REGEX='[0-9]{4}-[0-9]{2}-[0-9]{2}'
+    LAST_UPDATE="$(grep -E "//! DATE: $DATE_REGEX" "$FILE" | sed -r "s/.*DATE: ($DATE_REGEX).*/\1/")"
+    # If the file does not contain a date, flag it as an error.
+    if [ -z "$LAST_UPDATE" ]; then
+        echo "Skipping $FILE, no date found."
+        return 0
+    fi
+    if ! check_date "$LAST_UPDATE" ; then
+        echo "ERROR: $FILE was not updated for the current date. Last update: $LAST_UPDATE"
+        return 1
+    fi
+    # echo "OK: $FILE"
+}
+
+echo "Checking weights for $RUNTIME"
+CUR_DATE="$(date +%Y-%m-%d)"
+HAS_ERROR=0
+for FILE in "$ROOT"/runtime/"$RUNTIME"/src/weights/*.rs; do
+    if ! check_weights "$FILE" "$CUR_DATE"; then
+        HAS_ERROR=1
+    fi
+done
+
+if [ $HAS_ERROR -eq 1 ]; then
+    echo "ERROR: One or more weights files were not updated during the last benchmark run. Check the logs above."
+    exit 1
+fi
\ No newline at end of file