scripts: Add pre-submit

pre-submit runs through the pre-submission commands outlined in docs/
checklists/changes.md. This allows easy checking via:

```
$ git rebase -x ./scripts/pre-submit origin/main
```

Change-Id: Ib8b0f7725a31081cd70253032e107ed83aa22626
Signed-off-by: Andrew Jeffery <andrew@codeconstruct.com.au>
diff --git a/docs/checklists/changes.md b/docs/checklists/changes.md
index b1adb51..7d00e65 100644
--- a/docs/checklists/changes.md
+++ b/docs/checklists/changes.md
@@ -193,3 +193,5 @@
 - [ ] `meson configure --buildtype=debug build`
 - [ ] `meson configure -Dabi=deprecated,stable build`
 - [ ] `meson compile -C build && meson test -C build`
+
+This process is captured in `scripts/pre-submit` for automation.
diff --git a/scripts/pre-submit b/scripts/pre-submit
new file mode 100755
index 0000000..a06accf
--- /dev/null
+++ b/scripts/pre-submit
@@ -0,0 +1,27 @@
+#!/usr/bin/sh
+set -eu
+
+BUILD="$(mktemp --directory --tmpdir=.)"
+trap 'rm -rf "$BUILD"' EXIT
+
+# Ensure the test suite passes in the default configuration. Note
+# that we don't specify -Dabi=... - the default is equivalent to
+# -Dabi=deprecated,stable,testing.
+meson setup -Dabi-compliance-check=disabled "$BUILD"
+meson compile -C "$BUILD"
+meson test -C "$BUILD"
+
+# Ensure the test suite passes in release mode. libpldm specifies
+# -Db_ndebug=if-release by default, so building with --buildtype=release passes
+# -DNDEBUG to the compiler for the library implementation. This build
+# configuration will catch any unexpected changes in the library implementation
+# and incorrect test case implementations.
+meson configure --buildtype=release "$BUILD"
+meson compile -C "$BUILD"
+meson test -C "$BUILD"
+
+# Ensure the test suite links when testing symbols are removed from the ABI
+meson configure --buildtype=debug "$BUILD"
+meson configure -Dabi=deprecated,stable "$BUILD"
+meson compile -C "$BUILD"
+meson test -C "$BUILD"