Bump version to 4.0.0 (#247)

diff --git a/.github/workflows/test-package.yml b/.github/workflows/test-package.yml
index 7cc704e..3bd7e68 100644
--- a/.github/workflows/test-package.yml
+++ b/.github/workflows/test-package.yml
@@ -19,7 +19,7 @@
     strategy:
       fail-fast: false
       matrix:
-        sdk: [2.14.0-115.0.dev] # TODO: revert to 2.14
+        sdk: [2.14.0]
     steps:
       - uses: actions/checkout@v2
       - uses: dart-lang/setup-dart@v1.0
@@ -43,7 +43,7 @@
       - uses: actions/checkout@v2
       - uses: dart-lang/setup-dart@v1.0
         with:
-          sdk: 2.14.0-115.0.dev # TODO: revert to 2.14.
+          sdk: 2.14.0
       - name: Install dependencies
         run: dart pub get
       - name: Install libclang-10-dev
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 47b2a05..02b880e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+# 4.0.0
+- Release for Dart SDK `>=2.14`.
+
 # 4.0.0-dev.2
 - Added config key `functions -> expose-typedefs` to expose the typedef
 to Native and Dart type.
diff --git a/pubspec.yaml b/pubspec.yaml
index 3633464..ae3782f 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,12 +3,12 @@
 # BSD-style license that can be found in the LICENSE file.
 
 name: ffigen
-version: 4.0.0-dev.2
+version: 4.0.0
 homepage: https://github.com/dart-lang/ffigen
 description: Generator for FFI bindings, using LibClang to parse C header files.
 
 environment:
-  sdk: '>=2.14.0-115.0.dev <3.0.0'
+  sdk: '>=2.14.0 <3.0.0'
 
 dependencies:
   ffi: ^1.0.0