diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..688892022a2d5cddfaf3306678dca44485c230d0
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,54 @@
+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 ./meshmode ./test
+
+    pytest2:
+        name: Pytest Conda Py2
+        runs-on: ubuntu-latest
+        steps:
+        -   uses: actions/checkout@v2
+        -   name: "Main Script"
+            run: |
+                sed 's/python=3/python=2.7/' .test-conda-env-py3.yml > .test-conda-env-py2.yml
+                cat .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 Conda Py3
+        runs-on: ubuntu-latest
+        steps:
+        -   uses: actions/checkout@v2
+        -   name: "Main Script"
+            run: |
+                CONDA_ENVIRONMENT=.test-conda-env-py3.yml
+                sudo apt update
+                sudo apt install gfortran-7
+                sudo ln -s /usr/bin/gfortran-7 /usr/bin/gfortran
+                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/README.rst b/README.rst
index b012a2185b14361a68562f5fb50cfbf5b6041fbb..a6d3337f1a59c4e95a0a3632053a6a1c51872157 100644
--- a/README.rst
+++ b/README.rst
@@ -4,9 +4,9 @@ meshmode: High-Order Meshes and Discontinuous Function Spaces
 .. image:: https://gitlab.tiker.net/inducer/meshmode/badges/master/pipeline.svg
     :alt: Gitlab Build Status
     :target: https://gitlab.tiker.net/inducer/meshmode/commits/master
-.. image:: https://dev.azure.com/ak-spam/inducer/_apis/build/status/inducer.meshmode?branchName=master
-    :alt: Azure Build Status
-    :target: https://dev.azure.com/ak-spam/inducer/_build/latest?definitionId=14&branchName=master
+.. image:: https://github.com/inducer/meshmode/workflows/CI/badge.svg?branch=master
+    :alt: Github Build Status
+    :target: https://github.com/inducer/meshmode/actions?query=branch%3Amaster+workflow%3ACI
 .. image:: https://badge.fury.io/py/meshmode.png
     :alt: Python Package Index Release Page
     :target: https://pypi.org/project/meshmode/
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
deleted file mode 100644
index 9368c97181bd0ff82035ec3c156e42749588d621..0000000000000000000000000000000000000000
--- a/azure-pipelines.yml
+++ /dev/null
@@ -1,76 +0,0 @@
-jobs:
--
-    job: 'Python2'
-    pool:
-        vmImage: 'ubuntu-latest'
-
-    steps:
-    -
-        script: |
-            set -e
-            sed 's/python=3/python=2.7/' .test-conda-env-py3.yml > .test-conda-env-py2.yml
-            cat .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-latest'
-
-    steps:
-    -
-        script: |
-            set -e
-            CONDA_ENVIRONMENT=.test-conda-env-py3.yml
-            sudo apt install gfortran-7
-            sudo ln -s /usr/bin/gfortran-7 /usr/bin/gfortran
-            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-latest'
-    strategy:
-        matrix:
-            Python37:
-                python.version: '3.7'
-
-    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 meshmode test
-
-        displayName: 'Flake8'
-
-schedules:
--
-    cron: "0 0 * * 0"
-    displayName: Weekly build
-    branches:
-        include:
-        - master