diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..0b6a4ba0191bb30ae3b8da6e4448aba906b6982b
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,52 @@
+name: CI
+on:
+    push:
+        branches:
+        - master
+    pull_request:
+        paths-ignore:
+        - 'doc/*.rst'
+    schedule:
+        - cron:  '17 3 * * 0'
+
+jobs:
+    flake8:
+        name: Flake8
+        runs-on: ubuntu-latest
+        steps:
+        -   uses: actions/checkout@v2
+        -
+            uses: actions/setup-python@v1
+            with:
+                python-version: '3.x' 
+        -   name: "Main Script"
+            run: |
+                curl -L -O -k https://gitlab.tiker.net/inducer/ci-support/raw/master/prepare-and-run-flake8.sh
+                . ./prepare-and-run-flake8.sh ./pyopencl ./test
+
+    pytest2:
+        name: Pytest on Py2
+        runs-on: ubuntu-latest
+        steps:
+        -   uses: actions/checkout@v2
+        -   name: "Main Script"
+            run: |
+                set -e
+                sed 's/python=3/python=2.7/' .test-conda-env-py3.yml > .test-conda-env-py2.yml
+                CONDA_ENVIRONMENT=.test-conda-env-py2.yml
+                curl -L -O -k https://gitlab.tiker.net/inducer/ci-support/raw/master/build-and-test-py-project-within-miniconda.sh
+                . ./build-and-test-py-project-within-miniconda.sh
+
+    pytest3:
+        name: Pytest on Py3
+        runs-on: ubuntu-latest
+        steps:
+        -   uses: actions/checkout@v2
+        -   name: "Main Script"
+            run: |
+                set -e
+                CONDA_ENVIRONMENT=.test-conda-env-py3.yml
+                curl -L -O -k https://gitlab.tiker.net/inducer/ci-support/raw/master/build-and-test-py-project-within-miniconda.sh
+                . ./build-and-test-py-project-within-miniconda.sh
+
+# vim: sw=4
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0550a676f98f96ff4876857ed895f781bfbb986e..3c64ff2460ee42b08152343485def71181e70cf4 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,21 +1,3 @@
-"Python 2.7 AMD CPU":
-  script:
-  - export PY_EXE=python2.7
-  - export PYOPENCL_TEST=amd:pu
-  - export EXTRA_INSTALL="pybind11 numpy mako"
-  - curl -L -O -k https://gitlab.tiker.net/inducer/ci-support/raw/master/build-and-test-py-project.sh
-  - ". ./build-and-test-py-project.sh"
-  allow_failure: true
-  tags:
-  - python2.7
-  - amd-cl-cpu
-  - opengl
-  except:
-  - tags
-  artifacts:
-    reports:
-      junit: test/pytest.xml
-
 Python 3 Intel CPU:
   script:
   - export PY_EXE=python3
@@ -82,6 +64,7 @@ Python 3 K40:
       junit: test/pytest.xml
 
 Python 3 AMD GPU:
+  allow_failure: true
   script:
   - export PY_EXE=python3
   - export PYOPENCL_TEST=amd:gfx803
@@ -220,8 +203,10 @@ PyPy POCL:
   - export PY_EXE=pypy
   - export PYOPENCL_TEST=portable
 
-  # https://github.com/pybind/pybind11/pull/1494
-  - export EXTRA_INSTALL="git+https://github.com/inducer/pybind11 numpy mako"
+  # On pypy, this seems to install old versions from the package index
+  # independently of whether newer ones are already present.
+  - rm -f pyproject.toml 
+  - export EXTRA_INSTALL="pybind11 numpy mako"
 
   - export NO_DOCTESTS=1
   - curl -L -O -k https://gitlab.tiker.net/inducer/ci-support/raw/master/build-and-test-py-project.sh
diff --git a/README.rst b/README.rst
index 3b6e12016c2b28245765be54070c27c92bc698fc..c71237911cb783aa7a63e26bb6bd8471c1e3e5ff 100644
--- a/README.rst
+++ b/README.rst
@@ -4,9 +4,9 @@ PyOpenCL: Pythonic Access to OpenCL, with Arrays and Algorithms
 .. image:: https://gitlab.tiker.net/inducer/pyopencl/badges/master/pipeline.svg
     :alt: Gitlab Build Status
     :target: https://gitlab.tiker.net/inducer/pyopencl/commits/master
-.. image:: https://dev.azure.com/ak-spam/inducer/_apis/build/status/inducer.pyopencl?branchName=master
-    :alt: Azure Build Status
-    :target: https://dev.azure.com/ak-spam/inducer/_build/latest?definitionId=5&branchName=master
+.. image:: https://github.com/inducer/pyopencl/workflows/CI/badge.svg?branch=master
+    :alt: Github Build Status
+    :target: https://github.com/inducer/pyopencl/actions?query=branch%3Amaster+workflow%3ACI
 .. image:: https://badge.fury.io/py/pyopencl.png
     :alt: Python Package Index Release Page
     :target: https://pypi.org/project/pyopencl/
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
deleted file mode 100644
index 731b671b5ec74f5201892c60aae195419c5c0085..0000000000000000000000000000000000000000
--- a/azure-pipelines.yml
+++ /dev/null
@@ -1,74 +0,0 @@
-jobs:
--
-    job: 'Python2'
-    pool:
-        vmImage: 'ubuntu-16.04'
-
-    steps:
-    -
-        script: |
-            set -e
-            sed 's/python=3/python=2.7/' .test-conda-env-py3.yml > .test-conda-env-py2.yml
-            CONDA_ENVIRONMENT=.test-conda-env-py2.yml
-            curl -L -O -k https://gitlab.tiker.net/inducer/ci-support/raw/master/build-and-test-py-project-within-miniconda.sh
-            . ./build-and-test-py-project-within-miniconda.sh
-
-        displayName: 'Pytest Conda'
-
-    -
-        task: PublishTestResults@2
-        inputs:
-            testResultsFormat: 'JUnit'
-            testResultsFiles: 'test/pytest.xml'
-
--
-    job: 'Python3'
-    pool:
-        vmImage: 'ubuntu-16.04'
-
-    steps:
-    -
-        script: |
-            set -e
-            CONDA_ENVIRONMENT=.test-conda-env-py3.yml
-            curl -L -O -k https://gitlab.tiker.net/inducer/ci-support/raw/master/build-and-test-py-project-within-miniconda.sh
-            . ./build-and-test-py-project-within-miniconda.sh
-
-        displayName: 'Pytest Conda'
-
-    -
-        task: PublishTestResults@2
-        inputs:
-            testResultsFormat: 'JUnit'
-            testResultsFiles: 'test/pytest.xml'
-
--
-    job: 'Flake8'
-    pool:
-        vmImage: 'ubuntu-16.04'
-    strategy:
-        matrix:
-            Python36:
-                python.version: '3.6'
-
-    steps:
-    -
-        task: UsePythonVersion@0
-        inputs:
-            versionSpec: '$(python.version)'
-
-    -
-        script: |
-            set -e
-            curl -L -O -k https://gitlab.tiker.net/inducer/ci-support/raw/master/prepare-and-run-flake8.sh
-            . ./prepare-and-run-flake8.sh pyopencl test
-
-        displayName: 'Flake8'
-
-schedules:
--
-    cron: "0 0 * * 0"
-    displayName: Weekly build
-    branches:
-        include:
-        - master
diff --git a/doc/runtime_program.rst b/doc/runtime_program.rst
index 71ee84b4841c457daba248a1be87d2967fa21a08..174b25d1cd9fee29562c9df31826981a5b1bbde8 100644
--- a/doc/runtime_program.rst
+++ b/doc/runtime_program.rst
@@ -286,8 +286,3 @@ Kernel
 
     .. versionchanged:: 2011.1
         Added the *g_times_l* keyword arg.
-
-
-.. function:: enqueue_task(queue, kernel, wait_for=None)
-
-    |std-enqueue-blurb|
diff --git a/src/wrap_cl.cpp b/src/wrap_cl.cpp
index b9393ed0f4963968d7006d686e72c349eebc20ad..50a482016ebda749ec4031f9d7cb92ab200dfa12 100644
--- a/src/wrap_cl.cpp
+++ b/src/wrap_cl.cpp
@@ -43,11 +43,7 @@ extern void pyopencl_expose_mempool(py::module &m);
 
 static bool import_numpy_helper()
 {
-#ifdef PYPY_VERSION
-      import_array();
-#else
-      import_array1(false);
-#endif
+  import_array1(false);
   return true;
 }