diff --git a/.github/workflows/build-tarball.yml b/.github/workflows/build-tarball.yml
index f17fabd84056bc..dc09afa79b1be4 100644
--- a/.github/workflows/build-tarball.yml
+++ b/.github/workflows/build-tarball.yml
@@ -8,12 +8,12 @@ env:
 jobs:
   build-tarball:
     env:
-      PYTHON_VERSION: 3.8
-    runs-on: macos-latest
+      PYTHON_VERSION: 3.9
+    runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v2
       - name: Set up Python ${{ env.PYTHON_VERSION }}
-        uses: actions/setup-python@v1
+        uses: actions/setup-python@v2
         with:
           python-version: ${{ env.PYTHON_VERSION }}
       - name: Environment Information
@@ -33,13 +33,13 @@ jobs:
           path: tarballs
   test-tarball-linux:
     env:
-      PYTHON_VERSION: 3.8
+      PYTHON_VERSION: 3.9
     needs: build-tarball
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v2
       - name: Set up Python ${{ env.PYTHON_VERSION }}
-        uses: actions/setup-python@v1
+        uses: actions/setup-python@v2
         with:
           python-version: ${{ env.PYTHON_VERSION }}
       - name: Environment Information
diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml
index 8a9dbf90415688..fa7b14d143afee 100644
--- a/.github/workflows/build-windows.yml
+++ b/.github/workflows/build-windows.yml
@@ -3,7 +3,7 @@ name: build-windows
 on: [push, pull_request]
 
 env:
-  PYTHON_VERSION: 3.8
+  PYTHON_VERSION: 3.9
   FLAKY_TESTS: dontcare
 
 jobs:
@@ -12,7 +12,7 @@ jobs:
     steps:
       - uses: actions/checkout@v2
       - name: Set up Python ${{ env.PYTHON_VERSION }}
-        uses: actions/setup-python@v1
+        uses: actions/setup-python@v2
         with:
           python-version: ${{ env.PYTHON_VERSION }}
       - name: Install deps
diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml
index 4453db5c751c7f..8357d6c5f9b9ef 100644
--- a/.github/workflows/linters.yml
+++ b/.github/workflows/linters.yml
@@ -3,7 +3,7 @@ name: linters
 on: [push, pull_request]
 
 env:
-  PYTHON_VERSION: 3.8
+  PYTHON_VERSION: 3.9
   NODE_VERSION: 10.x
 
 jobs:
@@ -24,7 +24,7 @@ jobs:
     steps:
       - uses: actions/checkout@v2
       - name: Set up Python ${{ env.PYTHON_VERSION }}
-        uses: actions/setup-python@v1
+        uses: actions/setup-python@v2
         with:
           python-version: ${{ env.PYTHON_VERSION }}
       - name: Environment Information
@@ -62,7 +62,7 @@ jobs:
     steps:
       - uses: actions/checkout@v2
       - name: Set up Python ${{ env.PYTHON_VERSION }}
-        uses: actions/setup-python@v1
+        uses: actions/setup-python@v2
         with:
           python-version: ${{ env.PYTHON_VERSION }}
       - name: Environment Information
diff --git a/.github/workflows/test-asan.yml b/.github/workflows/test-asan.yml
index 54d6cae049badb..f1713dd3a487df 100644
--- a/.github/workflows/test-asan.yml
+++ b/.github/workflows/test-asan.yml
@@ -9,7 +9,7 @@ on:
     - 'doc/**'
 
 env:
-  PYTHON_VERSION: 3.8
+  PYTHON_VERSION: 3.9
   FLAKY_TESTS: dontcare
 
 jobs:
@@ -23,7 +23,7 @@ jobs:
     steps:
       - uses: actions/checkout@v2
       - name: Set up Python ${{ env.PYTHON_VERSION }}
-        uses: actions/setup-python@v1
+        uses: actions/setup-python@v2
         with:
           python-version: ${{ env.PYTHON_VERSION }}
       - name: Environment Information
diff --git a/.github/workflows/test-linux.yml b/.github/workflows/test-linux.yml
index cfe0ca4ab70334..c3b112ea10fcee 100644
--- a/.github/workflows/test-linux.yml
+++ b/.github/workflows/test-linux.yml
@@ -3,7 +3,7 @@ name: test-linux
 on: [push, pull_request]
 
 env:
-  PYTHON_VERSION: 3.8
+  PYTHON_VERSION: 3.9
   FLAKY_TESTS: dontcare
 
 jobs:
@@ -12,7 +12,7 @@ jobs:
     steps:
       - uses: actions/checkout@v2
       - name: Set up Python ${{ env.PYTHON_VERSION }}
-        uses: actions/setup-python@v1
+        uses: actions/setup-python@v2
         with:
           python-version: ${{ env.PYTHON_VERSION }}
       - name: Environment Information
@@ -20,4 +20,19 @@ jobs:
       - name: Build
         run: make build-ci -j2 V=1 CONFIG_FLAGS="--error-on-warn"
       - name: Test
-        run: make run-ci -j2 V=1 TEST_CI_ARGS="-p dots"
+        run: make run-ci -j2 V=1 TEST_CI_ARGS="-p actions"
+
+  test-linux-with-quic:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - name: Set up Python ${{ env.PYTHON_VERSION }}
+        uses: actions/setup-python@v2
+        with:
+          python-version: ${{ env.PYTHON_VERSION }}
+      - name: Environment Information
+        run: npx envinfo
+      - name: Build
+        run: make build-ci -j2 V=1 CONFIG_FLAGS="--error-on-warn --experimental-quic"
+      - name: Test
+        run: make run-ci -j2 V=1 TEST_CI_ARGS="-p actions"
diff --git a/.github/workflows/test-macos.yml b/.github/workflows/test-macos.yml
index c78ab45e4b2398..fff47af3e58789 100644
--- a/.github/workflows/test-macos.yml
+++ b/.github/workflows/test-macos.yml
@@ -3,7 +3,7 @@ name: test-macOS
 on: [push, pull_request]
 
 env:
-  PYTHON_VERSION: 3.8
+  PYTHON_VERSION: 3.9
   FLAKY_TESTS: dontcare
 
 jobs:
@@ -12,7 +12,7 @@ jobs:
     steps:
       - uses: actions/checkout@v2
       - name: Set up Python ${{ env.PYTHON_VERSION }}
-        uses: actions/setup-python@v1
+        uses: actions/setup-python@v2
         with:
           python-version: ${{ env.PYTHON_VERSION }}
       - name: Environment Information
diff --git a/configure b/configure
index 7e8c4cff832ffd..07581d9c5a4ff1 100755
--- a/configure
+++ b/configure
@@ -5,6 +5,7 @@
 # as is the fact that the ] goes on a new line.
 _=[ 'exec' '/bin/sh' '-c' '''
 test ${FORCE_PYTHON2} && exec python2 "$0" "$@"  # workaround for gclient
+command -v python3.9 >/dev/null && exec python3.9 "$0" "$@"
 command -v python3.8 >/dev/null && exec python3.8 "$0" "$@"
 command -v python3.7 >/dev/null && exec python3.7 "$0" "$@"
 command -v python3.6 >/dev/null && exec python3.6 "$0" "$@"
@@ -19,7 +20,7 @@ import sys
 from distutils.spawn import find_executable
 
 print('Node.js configure: Found Python {0}.{1}.{2}...'.format(*sys.version_info))
-acceptable_pythons = ((3, 8), (3, 7), (3, 6), (3, 5), (2, 7))
+acceptable_pythons = ((3, 9), (3, 8), (3, 7), (3, 6), (3, 5), (2, 7))
 if sys.version_info[:2] in acceptable_pythons:
   import configure
 else: