diff --git a/.npmignore b/.npmignore
deleted file mode 100644
index c2ecad0..0000000
--- a/.npmignore
+++ /dev/null
@@ -1,4 +0,0 @@
-node_modules
-.github
-.travis.yml
-test.js
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 66b9cf0..221f16f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,78 +1,111 @@
 # Changelog
 
+## v3.1.1
+
+Bug Fixes:
+
+- remove duplicate declaration in typings
+
+## v3.1.0
+
+Features:
+
+- add typings
+
+## v3.0.0
+
+Features:
+
+- Add support nodejs versions: 14, 15
+- support Nevercode ([#30](https://github.com/watson/ci-info/pull/30))
+- support Render CI ([#36](https://github.com/watson/ci-info/pull/36))
+- support Now CI ([#37](https://github.com/watson/ci-info/pull/37))
+- support GitLab PR ([#59](https://github.com/watson/ci-info/pull/59))
+- support Screwdriver CD ([#60](https://github.com/watson/ci-info/pull/60))
+- support Visual Studio App Center ([#61](https://github.com/watson/ci-info/pull/61))
+
+Bug Fixes:
+
+- update Netlify env constant ([#47](https://github.com/watson/ci-info/pull/47))
+
+Breaking changes:
+
+- Drop support for Node.js end-of-life versions: 6, 13
+- replace `Zeit Now` with `Vercel` ([#55](https://github.com/watson/ci-info/pull/55))
+
 ## v2.0.0
 
 Breaking changes:
 
-* Drop support for Node.js end-of-life versions: 0.10, 0.12, 4, 5, 7,
+- Drop support for Node.js end-of-life versions: 0.10, 0.12, 4, 5, 7,
   and 9
-* Team Foundation Server will now be detected as Azure Pipelines. The
+- Team Foundation Server will now be detected as Azure Pipelines. The
   constant `ci.TFS` no longer exists - use `ci.AZURE_PIPELINES` instead
-* Remove deprecated `ci.TDDIUM` constant - use `ci.SOLANDO` instead
+- Remove deprecated `ci.TDDIUM` constant - use `ci.SOLANDO` instead
 
 New features:
 
-* feat: support Azure Pipelines ([#23](https://github.com/watson/ci-info/pull/23))
-* feat: support Netlify CI ([#26](https://github.com/watson/ci-info/pull/26))
-* feat: support Bitbucket pipelines PR detection ([#27](https://github.com/watson/ci-info/pull/27))
+- feat: support Azure Pipelines ([#23](https://github.com/watson/ci-info/pull/23))
+- feat: support Netlify CI ([#26](https://github.com/watson/ci-info/pull/26))
+- feat: support Bitbucket pipelines PR detection ([#27](https://github.com/watson/ci-info/pull/27))
 
 ## v1.6.0
 
-* feat: add Sail CI support
-* feat: add Buddy support
-* feat: add Bitrise support
-* feat: detect Jenkins PRs
-* feat: detect Drone PRs
+- feat: add Sail CI support
+- feat: add Buddy support
+- feat: add Bitrise support
+- feat: detect Jenkins PRs
+- feat: detect Drone PRs
 
 ## v1.5.1
 
-* fix: use full path to vendors.json
+- fix: use full path to vendors.json
 
 ## v1.5.0
 
-* feat: add dsari detection ([#15](https://github.com/watson/ci-info/pull/15))
-* feat: add ci.isPR ([#16](https://github.com/watson/ci-info/pull/16))
+- feat: add dsari detection ([#15](https://github.com/watson/ci-info/pull/15))
+- feat: add ci.isPR ([#16](https://github.com/watson/ci-info/pull/16))
 
 ## v1.4.0
 
-* feat: add Cirrus CI detection ([#13](https://github.com/watson/ci-info/pull/13))
-* feat: add Shippable CI detection ([#14](https://github.com/watson/ci-info/pull/14))
+- feat: add Cirrus CI detection ([#13](https://github.com/watson/ci-info/pull/13))
+- feat: add Shippable CI detection ([#14](https://github.com/watson/ci-info/pull/14))
 
 ## v1.3.1
 
-* chore: reduce npm package size by not including `.github` folder content ([#11](https://github.com/watson/ci-info/pull/11))
+- chore: reduce npm package size by not including `.github` folder content ([#11](https://github.com/watson/ci-info/pull/11))
 
 ## v1.3.0
 
-* feat: add support for Strider CD
-* chore: deprecate vendor constant `TDDIUM` in favor of `SOLANO`
-* docs: add missing vendor constant to docs
+- feat: add support for Strider CD
+- chore: deprecate vendor constant `TDDIUM` in favor of `SOLANO`
+- docs: add missing vendor constant to docs
 
 ## v1.2.0
 
-* feat: detect solano-ci ([#9](https://github.com/watson/ci-info/pull/9))
+- feat: detect solano-ci ([#9](https://github.com/watson/ci-info/pull/9))
 
 ## v1.1.3
 
-* fix: fix spelling of Hunson in `ci.name`
+- fix: fix spelling of Hunson in `ci.name`
 
 ## v1.1.2
 
-* fix: no more false positive matches for Jenkins
+- fix: no more false positive matches for Jenkins
 
 ## v1.1.1
 
-* docs: sort lists of CI servers in README.md
-* docs: add missing AWS CodeBuild to the docs
+- docs: sort lists of CI servers in README.md
+- docs: add missing AWS CodeBuild to the docs
 
 ## v1.1.0
 
-* feat: add AWS CodeBuild to CI detection ([#2](https://github.com/watson/ci-info/pull/2))
+- feat: add AWS CodeBuild to CI detection ([#2](https://github.com/watson/ci-info/pull/2))
 
 ## v1.0.1
 
-* chore: reduce npm package size by using an `.npmignore` file ([#3](https://github.com/watson/ci-info/pull/3))
+- chore: reduce npm package size by using an `.npmignore` file ([#3](https://github.com/watson/ci-info/pull/3))
 
 ## v1.0.0
 
-* Initial release
+- Initial release
diff --git a/LICENSE b/LICENSE
index 6784683..2cc7405 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
 The MIT License (MIT)
 
-Copyright (c) 2016-2018 Thomas Watson Steen
+Copyright (c) 2016-2021 Thomas Watson Steen
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index 12c4f62..24d4834 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ issue](https://github.com/watson/ci-info/issues/new?template=ci-server-not-detec
 if your CI server isn't properly detected :)
 
 [![npm](https://img.shields.io/npm/v/ci-info.svg)](https://www.npmjs.com/package/ci-info)
-[![Build status](https://travis-ci.org/watson/ci-info.svg?branch=master)](https://travis-ci.org/watson/ci-info)
+[![Tests](https://github.com/watson/ci-info/workflows/Tests/badge.svg)](https://github.com/watson/ci-info/actions)
 [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://github.com/feross/standard)
 
 ## Installation
@@ -32,35 +32,41 @@ if (ci.isCI) {
 
 Officially supported CI servers:
 
-| Name | Constant | isPR |
-|------|----------|------|
-| [AWS CodeBuild](https://aws.amazon.com/codebuild/) | `ci.CODEBUILD` | 🚫 |
-| [AppVeyor](http://www.appveyor.com) | `ci.APPVEYOR` | ✅ |
-| [Azure Pipelines](https://azure.microsoft.com/en-us/services/devops/pipelines/) | `ci.AZURE_PIPELINES` | ✅ |
-| [Bamboo](https://www.atlassian.com/software/bamboo) by Atlassian | `ci.BAMBOO` | 🚫 |
-| [Bitbucket Pipelines](https://bitbucket.org/product/features/pipelines) | `ci.BITBUCKET` | ✅ |
-| [Bitrise](https://www.bitrise.io/) | `ci.BITRISE` | ✅ |
-| [Buddy](https://buddy.works/) | `ci.BUDDY` | ✅ |
-| [Buildkite](https://buildkite.com) | `ci.BUILDKITE` | ✅ |
-| [CircleCI](http://circleci.com) | `ci.CIRCLE` | ✅ |
-| [Cirrus CI](https://cirrus-ci.org) | `ci.CIRRUS` | ✅ |
-| [Codeship](https://codeship.com) | `ci.CODESHIP` | 🚫 |
-| [Drone](https://drone.io) | `ci.DRONE` | ✅ |
-| [dsari](https://github.com/rfinnie/dsari) | `ci.DSARI` | 🚫 |
-| [GitLab CI](https://about.gitlab.com/gitlab-ci/) | `ci.GITLAB` | 🚫 |
-| [GoCD](https://www.go.cd/) | `ci.GOCD` | 🚫 |
-| [Hudson](http://hudson-ci.org) | `ci.HUDSON` | 🚫 |
-| [Jenkins CI](https://jenkins-ci.org) | `ci.JENKINS` | ✅ |
-| [Magnum CI](https://magnum-ci.com) | `ci.MAGNUM` | 🚫 |
-| [Netlify CI](https://www.netlify.com/) | `ci.NETLIFY` | ✅ |
-| [Sail CI](https://sail.ci/) | `ci.SAIL` | ✅ |
-| [Semaphore](https://semaphoreci.com) | `ci.SEMAPHORE` | ✅ |
-| [Shippable](https://www.shippable.com/) | `ci.SHIPPABLE` | ✅ |
-| [Solano CI](https://www.solanolabs.com/) | `ci.SOLANO` | ✅ |
-| [Strider CD](https://strider-cd.github.io/) | `ci.STRIDER` | 🚫 |
-| [TaskCluster](http://docs.taskcluster.net) | `ci.TASKCLUSTER` | 🚫 |
-| [TeamCity](https://www.jetbrains.com/teamcity/) by JetBrains | `ci.TEAMCITY` | 🚫 |
-| [Travis CI](http://travis-ci.org) | `ci.TRAVIS` | ✅ |
+| Name                                                                            | Constant             | isPR |
+| ------------------------------------------------------------------------------- | -------------------- | ---- |
+| [AWS CodeBuild](https://aws.amazon.com/codebuild/)                              | `ci.CODEBUILD`       | 🚫   |
+| [AppVeyor](http://www.appveyor.com)                                             | `ci.APPVEYOR`        | ✅   |
+| [Azure Pipelines](https://azure.microsoft.com/en-us/services/devops/pipelines/) | `ci.AZURE_PIPELINES` | ✅   |
+| [Bamboo](https://www.atlassian.com/software/bamboo) by Atlassian                | `ci.BAMBOO`          | 🚫   |
+| [Bitbucket Pipelines](https://bitbucket.org/product/features/pipelines)         | `ci.BITBUCKET`       | ✅   |
+| [Bitrise](https://www.bitrise.io/)                                              | `ci.BITRISE`         | ✅   |
+| [Buddy](https://buddy.works/)                                                   | `ci.BUDDY`           | ✅   |
+| [Buildkite](https://buildkite.com)                                              | `ci.BUILDKITE`       | ✅   |
+| [CircleCI](http://circleci.com)                                                 | `ci.CIRCLE`          | ✅   |
+| [Cirrus CI](https://cirrus-ci.org)                                              | `ci.CIRRUS`          | ✅   |
+| [Codeship](https://codeship.com)                                                | `ci.CODESHIP`        | 🚫   |
+| [Drone](https://drone.io)                                                       | `ci.DRONE`           | ✅   |
+| [dsari](https://github.com/rfinnie/dsari)                                       | `ci.DSARI`           | 🚫   |
+| [GitHub Actions](https://github.com/features/actions/)                          | `ci.GITHUB_ACTIONS`  | ✅   |
+| [GitLab CI](https://about.gitlab.com/gitlab-ci/)                                | `ci.GITLAB`          | ✅   |
+| [GoCD](https://www.go.cd/)                                                      | `ci.GOCD`            | 🚫   |
+| [Hudson](http://hudson-ci.org)                                                  | `ci.HUDSON`          | 🚫   |
+| [Jenkins CI](https://jenkins-ci.org)                                            | `ci.JENKINS`         | ✅   |
+| [Magnum CI](https://magnum-ci.com)                                              | `ci.MAGNUM`          | 🚫   |
+| [Netlify CI](https://www.netlify.com/)                                          | `ci.NETLIFY`         | ✅   |
+| [Nevercode](http://nevercode.io/)                                               | `ci.NEVERCODE`       | ✅   |
+| [Render](https://render.com/)                                                   | `ci.RENDER`          | ✅   |
+| [Sail CI](https://sail.ci/)                                                     | `ci.SAIL`            | ✅   |
+| [Screwdriver](https://screwdriver.cd/)                                          | `ci.SCREWDRIVER`     | ✅   |
+| [Semaphore](https://semaphoreci.com)                                            | `ci.SEMAPHORE`       | ✅   |
+| [Shippable](https://www.shippable.com/)                                         | `ci.SHIPPABLE`       | ✅   |
+| [Solano CI](https://www.solanolabs.com/)                                        | `ci.SOLANO`          | ✅   |
+| [Strider CD](https://strider-cd.github.io/)                                     | `ci.STRIDER`         | 🚫   |
+| [TaskCluster](http://docs.taskcluster.net)                                      | `ci.TASKCLUSTER`     | 🚫   |
+| [TeamCity](https://www.jetbrains.com/teamcity/) by JetBrains                    | `ci.TEAMCITY`        | 🚫   |
+| [Travis CI](http://travis-ci.org)                                               | `ci.TRAVIS`          | ✅   |
+| [Vercel](https://vercel.com/)                                                   | `ci.VERCEL`          | 🚫   |
+| [Visual Studio App Center](https://appcenter.ms/)                               | `ci.APPCENTER`       | 🚫   |
 
 ## API
 
diff --git a/debian/changelog b/debian/changelog
index d8ca80d..98e77f1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,6 @@
+node-ci-info (3.1.1-1) UNRELEASED; urgency=low
+ -- Debian Janitor <janitor@jelmer.uk>  Sun, 28 Mar 2021 02:30:54 -0000
+
 node-ci-info (2.0.0+~2.0.0-2) unstable; urgency=medium
 
   * Team upload
diff --git a/types-ci-info/index.d.ts b/index.d.ts
similarity index 89%
rename from types-ci-info/index.d.ts
rename to index.d.ts
index db8e509..a1386cf 100644
--- a/types-ci-info/index.d.ts
+++ b/index.d.ts
@@ -1,8 +1,3 @@
-// Type definitions for ci-info 2.0
-// Project: https://github.com/watson/ci-info
-// Definitions by: Florian Keller <https://github.com/ffflorian>
-// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
-
 /**
  * Returns a boolean. Will be `true` if the code is running on a CI server,
  * otherwise `false`.
@@ -42,17 +37,23 @@ export const CODEBUILD: boolean;
 export const CODESHIP: boolean;
 export const DRONE: boolean;
 export const DSARI: boolean;
+export const GITHUB_ACTIONS: boolean;
 export const GITLAB: boolean;
 export const GOCD: boolean;
 export const HUDSON: boolean;
 export const JENKINS: boolean;
 export const MAGNUM: boolean;
 export const NETLIFY: boolean;
+export const NEVERCODE: boolean;
+export const RENDER: boolean;
 export const SAIL: boolean;
 export const SEMAPHORE: boolean;
+export const SCREWDRIVER: boolean;
 export const SHIPPABLE: boolean;
 export const SOLANO: boolean;
 export const STRIDER: boolean;
 export const TASKCLUSTER: boolean;
 export const TEAMCITY: boolean;
 export const TRAVIS: boolean;
+export const VERCEL: boolean;
+export const APPCENTER: boolean;
diff --git a/index.js b/index.js
index 9928fee..b747a89 100644
--- a/index.js
+++ b/index.js
@@ -1,8 +1,8 @@
 'use strict'
 
-var vendors = require('./vendors.json')
+const vendors = require('./vendors.json')
 
-var env = process.env
+const env = process.env
 
 // Used for testing only
 Object.defineProperty(exports, '_vendors', {
@@ -13,8 +13,8 @@ exports.name = null
 exports.isPR = null
 
 vendors.forEach(function (vendor) {
-  var envs = Array.isArray(vendor.env) ? vendor.env : [vendor.env]
-  var isCI = envs.every(function (obj) {
+  const envs = Array.isArray(vendor.env) ? vendor.env : [vendor.env]
+  const isCI = envs.every(function (obj) {
     return checkEnv(obj)
   })
 
diff --git a/package.json b/package.json
index 38334c1..18678b9 100644
--- a/package.json
+++ b/package.json
@@ -1,21 +1,19 @@
 {
   "name": "ci-info",
-  "version": "2.0.0",
+  "version": "3.1.1",
   "description": "Get details about the current Continuous Integration environment",
   "main": "index.js",
-  "dependencies": {},
-  "devDependencies": {
-    "clear-require": "^1.0.1",
-    "standard": "^12.0.1",
-    "tape": "^4.9.1"
-  },
-  "scripts": {
-    "test": "standard && node test.js"
-  },
+  "typings": "index.d.ts",
+  "author": "Thomas Watson Steen <w@tson.dk> (https://twitter.com/wa7son)",
+  "license": "MIT",
   "repository": {
     "type": "git",
     "url": "https://github.com/watson/ci-info.git"
   },
+  "bugs": {
+    "url": "https://github.com/watson/ci-info/issues"
+  },
+  "homepage": "https://github.com/watson/ci-info",
   "keywords": [
     "ci",
     "continuous",
@@ -23,14 +21,16 @@
     "test",
     "detect"
   ],
-  "author": "Thomas Watson Steen <w@tson.dk> (https://twitter.com/wa7son)",
-  "license": "MIT",
-  "bugs": {
-    "url": "https://github.com/watson/ci-info/issues"
-  },
-  "homepage": "https://github.com/watson/ci-info",
   "coordinates": [
     55.778231,
     12.593179
-  ]
+  ],
+  "scripts": {
+    "test": "standard && node test.js"
+  },
+  "devDependencies": {
+    "clear-module": "^4.1.1",
+    "standard": "^16.0.3",
+    "tape": "^5.1.1"
+  }
 }
diff --git a/test.js b/test.js
deleted file mode 100644
index 2a1c35e..0000000
--- a/test.js
+++ /dev/null
@@ -1,468 +0,0 @@
-'use strict'
-
-var test = require('tape')
-var clearRequire = require('clear-require')
-
-var isActualPR = !!(process.env.TRAVIS_PULL_REQUEST && process.env.TRAVIS_PULL_REQUEST !== 'false')
-
-test('Known CI', function (t) {
-  process.env.TRAVIS = 'true'
-
-  var ci = require('./')
-
-  t.ok(Array.isArray(ci._vendors))
-  t.ok(ci._vendors.length > 0)
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, isActualPR)
-  t.equal(ci.name, 'Travis CI')
-  t.equal(ci.TRAVIS, true)
-  assertVendorConstants('TRAVIS', ci, t)
-
-  t.end()
-})
-
-test('Not CI', function (t) {
-  delete process.env.CI
-  delete process.env.CONTINUOUS_INTEGRATION
-  delete process.env.BUILD_NUMBER
-  delete process.env.TRAVIS
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, false)
-  t.equal(ci.isPR, null)
-  t.equal(ci.name, null)
-  t.equal(ci.TRAVIS, false)
-  assertVendorConstants(null, ci, t)
-
-  t.end()
-})
-
-test('Unknown CI', function (t) {
-  process.env.CI = 'true'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, null)
-  t.equal(ci.name, null)
-  t.equal(ci.TRAVIS, false)
-  assertVendorConstants(null, ci, t)
-
-  t.end()
-})
-
-test('AppVeyor - PR', function (t) {
-  process.env.APPVEYOR = 'true'
-  process.env.APPVEYOR_PULL_REQUEST_NUMBER = '42'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, true)
-  t.equal(ci.name, 'AppVeyor')
-  t.equal(ci.APPVEYOR, true)
-  assertVendorConstants('APPVEYOR', ci, t)
-
-  delete process.env.APPVEYOR
-  delete process.env.APPVEYOR_PULL_REQUEST_NUMBER
-
-  t.end()
-})
-
-test('AppVeyor - Not PR', function (t) {
-  process.env.APPVEYOR = 'true'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, false)
-  t.equal(ci.name, 'AppVeyor')
-  t.equal(ci.APPVEYOR, true)
-  assertVendorConstants('APPVEYOR', ci, t)
-
-  delete process.env.APPVEYOR
-
-  t.end()
-})
-
-test('Azure Pipelines - PR', function (t) {
-  process.env.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI = 'https://dev.azure.com/Contoso'
-  process.env.SYSTEM_PULLREQUEST_PULLREQUESTID = '42'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, true)
-  t.equal(ci.name, 'Azure Pipelines')
-  t.equal(ci.AZURE_PIPELINES, true)
-  assertVendorConstants('AZURE_PIPELINES', ci, t)
-
-  delete process.env.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI
-  delete process.env.SYSTEM_PULLREQUEST_PULLREQUESTID
-
-  t.end()
-})
-
-test('Azure Pipelines - Not PR', function (t) {
-  process.env.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI = 'https://dev.azure.com/Contoso'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, false)
-  t.equal(ci.name, 'Azure Pipelines')
-  t.equal(ci.AZURE_PIPELINES, true)
-  assertVendorConstants('AZURE_PIPELINES', ci, t)
-
-  delete process.env.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI
-
-  t.end()
-})
-
-test('Bitbucket Pipelines - PR', function (t) {
-  process.env.BITBUCKET_COMMIT = 'true'
-  process.env.BITBUCKET_PR_ID = '42'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, true)
-  t.equal(ci.name, 'Bitbucket Pipelines')
-  t.equal(ci.BITBUCKET, true)
-  assertVendorConstants('BITBUCKET', ci, t)
-
-  delete process.env.BITBUCKET_COMMIT
-  delete process.env.BITBUCKET_PR_ID
-
-  t.end()
-})
-
-test('Bitbucket Pipelines - Not PR', function (t) {
-  process.env.BITBUCKET_COMMIT = 'true'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, false)
-  t.equal(ci.name, 'Bitbucket Pipelines')
-  t.equal(ci.BITBUCKET, true)
-  assertVendorConstants('BITBUCKET', ci, t)
-
-  delete process.env.BITBUCKET_COMMIT
-
-  t.end()
-})
-
-test('Buildkite - PR', function (t) {
-  process.env.BUILDKITE = 'true'
-  process.env.BUILDKITE_PULL_REQUEST = '42'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, true)
-  t.equal(ci.name, 'Buildkite')
-  t.equal(ci.BUILDKITE, true)
-  assertVendorConstants('BUILDKITE', ci, t)
-
-  delete process.env.BUILDKITE
-  delete process.env.BUILDKITE_PULL_REQUEST
-
-  t.end()
-})
-
-test('Buildkite - Not PR', function (t) {
-  process.env.BUILDKITE = 'true'
-  process.env.BUILDKITE_PULL_REQUEST = 'false'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, false)
-  t.equal(ci.name, 'Buildkite')
-  t.equal(ci.BUILDKITE, true)
-  assertVendorConstants('BUILDKITE', ci, t)
-
-  delete process.env.BUILDKITE
-  delete process.env.BUILDKITE_PULL_REQUEST
-
-  t.end()
-})
-
-test('CircleCI - PR', function (t) {
-  process.env.CIRCLECI = 'true'
-  process.env.CIRCLE_PULL_REQUEST = '42'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, true)
-  t.equal(ci.name, 'CircleCI')
-  t.equal(ci.CIRCLE, true)
-  assertVendorConstants('CIRCLE', ci, t)
-
-  delete process.env.CIRCLECI
-  delete process.env.CIRCLE_PULL_REQUEST
-
-  t.end()
-})
-
-test('CircleCI - Not PR', function (t) {
-  process.env.CIRCLECI = 'true'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, false)
-  t.equal(ci.name, 'CircleCI')
-  t.equal(ci.CIRCLE, true)
-  assertVendorConstants('CIRCLE', ci, t)
-
-  delete process.env.CIRCLECI
-
-  t.end()
-})
-
-test('Cirrus CI - PR', function (t) {
-  process.env.CIRRUS_CI = 'true'
-  process.env.CIRRUS_PR = '42'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, true)
-  t.equal(ci.name, 'Cirrus CI')
-  t.equal(ci.CIRRUS, true)
-  assertVendorConstants('CIRRUS', ci, t)
-
-  delete process.env.CIRRUS_CI
-  delete process.env.CIRRUS_PR
-
-  t.end()
-})
-
-test('Cirrus CI - Not PR', function (t) {
-  process.env.CIRRUS_CI = 'true'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, false)
-  t.equal(ci.name, 'Cirrus CI')
-  t.equal(ci.CIRRUS, true)
-  assertVendorConstants('CIRRUS', ci, t)
-
-  delete process.env.CIRRUS_CI
-
-  t.end()
-})
-
-test('Semaphore - PR', function (t) {
-  process.env.SEMAPHORE = 'true'
-  process.env.PULL_REQUEST_NUMBER = '42'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, true)
-  t.equal(ci.name, 'Semaphore')
-  t.equal(ci.SEMAPHORE, true)
-  assertVendorConstants('SEMAPHORE', ci, t)
-
-  delete process.env.SEMAPHORE
-  delete process.env.PULL_REQUEST_NUMBER
-
-  t.end()
-})
-
-test('Semaphore - Not PR', function (t) {
-  process.env.SEMAPHORE = 'true'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, false)
-  t.equal(ci.name, 'Semaphore')
-  t.equal(ci.SEMAPHORE, true)
-  assertVendorConstants('SEMAPHORE', ci, t)
-
-  delete process.env.SEMAPHORE
-
-  t.end()
-})
-
-test('Shippable - PR', function (t) {
-  process.env.SHIPPABLE = 'true'
-  process.env.IS_PULL_REQUEST = 'true'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, true)
-  t.equal(ci.name, 'Shippable')
-  t.equal(ci.SHIPPABLE, true)
-  assertVendorConstants('SHIPPABLE', ci, t)
-
-  delete process.env.SHIPPABLE
-  delete process.env.IS_PULL_REQUEST
-
-  t.end()
-})
-
-test('Semaphore - Not PR', function (t) {
-  process.env.SHIPPABLE = 'true'
-  process.env.IS_PULL_REQUEST = 'false'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, false)
-  t.equal(ci.name, 'Shippable')
-  t.equal(ci.SHIPPABLE, true)
-  assertVendorConstants('SHIPPABLE', ci, t)
-
-  delete process.env.SHIPPABLE
-  delete process.env.IS_PULL_REQUEST
-
-  t.end()
-})
-
-test('Solano CI - PR', function (t) {
-  process.env.TDDIUM = 'true'
-  process.env.TDDIUM_PR_ID = '42'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, true)
-  t.equal(ci.name, 'Solano CI')
-  t.equal(ci.SOLANO, true)
-  assertVendorConstants('SOLANO', ci, t)
-
-  delete process.env.TDDIUM
-  delete process.env.TDDIUM_PR_ID
-
-  t.end()
-})
-
-test('Solano CI - Not PR', function (t) {
-  process.env.TDDIUM = 'true'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, false)
-  t.equal(ci.name, 'Solano CI')
-  t.equal(ci.SOLANO, true)
-  assertVendorConstants('SOLANO', ci, t)
-
-  delete process.env.TDDIUM
-
-  t.end()
-})
-
-test('Travis CI - PR', function (t) {
-  process.env.TRAVIS = 'true'
-  process.env.TRAVIS_PULL_REQUEST = '42'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, true)
-  t.equal(ci.name, 'Travis CI')
-  t.equal(ci.TRAVIS, true)
-  assertVendorConstants('TRAVIS', ci, t)
-
-  delete process.env.TRAVIS
-  delete process.env.TRAVIS_PULL_REQUEST
-
-  t.end()
-})
-
-test('Travis CI - Not PR', function (t) {
-  process.env.TRAVIS = 'true'
-  process.env.TRAVIS_PULL_REQUEST = 'false'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, false)
-  t.equal(ci.name, 'Travis CI')
-  t.equal(ci.TRAVIS, true)
-  assertVendorConstants('TRAVIS', ci, t)
-
-  delete process.env.TRAVIS
-  delete process.env.TRAVIS_PULL_REQUEST
-
-  t.end()
-})
-
-test('Netlify CI - PR', function (t) {
-  process.env.NETLIFY_BUILD_BASE = '/opt/build'
-  process.env.PULL_REQUEST = 'true'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, true)
-  t.equal(ci.name, 'Netlify CI')
-  t.equal(ci.NETLIFY, true)
-  assertVendorConstants('NETLIFY', ci, t)
-
-  delete process.env.NETLIFY_BUILD_BASE
-  delete process.env.PULL_REQUEST
-
-  t.end()
-})
-
-test('Netlify CI - Not PR', function (t) {
-  process.env.NETLIFY_BUILD_BASE = '/opt/build'
-  process.env.PULL_REQUEST = 'false'
-
-  clearRequire('./')
-  var ci = require('./')
-
-  t.equal(ci.isCI, true)
-  t.equal(ci.isPR, false)
-  t.equal(ci.name, 'Netlify CI')
-  t.equal(ci.NETLIFY, true)
-  assertVendorConstants('NETLIFY', ci, t)
-
-  delete process.env.NETLIFY_BUILD_BASE
-  delete process.env.PULL_REQUEST
-
-  t.end()
-})
-
-function assertVendorConstants (expect, ci, t) {
-  ci._vendors.forEach(function (constant) {
-    var bool = constant === expect
-    bool = (expect === 'SOLANO' && constant === 'TDDIUM') || bool // support deprecated option
-    t.equal(ci[constant], bool, 'ci.' + constant)
-  })
-}
diff --git a/types-ci-info/LICENSE b/types-ci-info/LICENSE
deleted file mode 100644
index 4b1ad51..0000000
--- a/types-ci-info/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-    MIT License
-
-    Copyright (c) Microsoft Corporation. All rights reserved.
-
-    Permission is hereby granted, free of charge, to any person obtaining a copy
-    of this software and associated documentation files (the "Software"), to deal
-    in the Software without restriction, including without limitation the rights
-    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-    copies of the Software, and to permit persons to whom the Software is
-    furnished to do so, subject to the following conditions:
-
-    The above copyright notice and this permission notice shall be included in all
-    copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-    SOFTWARE
diff --git a/types-ci-info/README.md b/types-ci-info/README.md
deleted file mode 100644
index cc7a2f6..0000000
--- a/types-ci-info/README.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Installation
-> `npm install --save @types/ci-info`
-
-# Summary
-This package contains type definitions for ci-info ( https://github.com/watson/ci-info ).
-
-# Details
-Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/ci-info
-
-Additional Details
- * Last updated: Thu, 30 May 2019 19:18:07 GMT
- * Dependencies: none
- * Global values: none
-
-# Credits
-These definitions were written by Florian Keller <https://github.com/ffflorian>.
diff --git a/types-ci-info/package.json b/types-ci-info/package.json
deleted file mode 100644
index 4ed05ce..0000000
--- a/types-ci-info/package.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-    "name": "@types/ci-info",
-    "version": "2.0.0",
-    "description": "TypeScript definitions for ci-info",
-    "license": "MIT",
-    "contributors": [
-        {
-            "name": "Florian Keller",
-            "url": "https://github.com/ffflorian",
-            "githubUsername": "ffflorian"
-        }
-    ],
-    "main": "",
-    "types": "index",
-    "repository": {
-        "type": "git",
-        "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
-        "directory": "types/ci-info"
-    },
-    "scripts": {},
-    "dependencies": {},
-    "typesPublisherContentHash": "e6c493e61b2974ff40875edce1616a42e098b7792efea9c9e3eb433ccdecbaae",
-    "typeScriptVersion": "2.0"
-}
\ No newline at end of file
diff --git a/vendors.json b/vendors.json
index 266a724..fc0aa96 100644
--- a/vendors.json
+++ b/vendors.json
@@ -73,10 +73,17 @@
     "constant": "DSARI",
     "env": "DSARI"
   },
+  {
+    "name": "GitHub Actions",
+    "constant": "GITHUB_ACTIONS",
+    "env": "GITHUB_ACTIONS",
+    "pr": { "GITHUB_EVENT_NAME": "pull_request" }
+  },
   {
     "name": "GitLab CI",
     "constant": "GITLAB",
-    "env": "GITLAB_CI"
+    "env": "GITLAB_CI",
+    "pr": "CI_MERGE_REQUEST_ID"
   },
   {
     "name": "GoCD",
@@ -102,9 +109,21 @@
   {
     "name": "Netlify CI",
     "constant": "NETLIFY",
-    "env": "NETLIFY_BUILD_BASE",
+    "env": "NETLIFY",
     "pr": { "env": "PULL_REQUEST", "ne": "false" }
   },
+  {
+    "name": "Nevercode",
+    "constant": "NEVERCODE",
+    "env": "NEVERCODE",
+    "pr": { "env": "NEVERCODE_PULL_REQUEST", "ne": "false" }
+  },
+  {
+    "name": "Render",
+    "constant": "RENDER",
+    "env": "RENDER",
+    "pr": { "IS_PULL_REQUEST": "true" }
+  },
   {
     "name": "Sail CI",
     "constant": "SAIL",
@@ -117,6 +136,12 @@
     "env": "SEMAPHORE",
     "pr": "PULL_REQUEST_NUMBER"
   },
+  {
+    "name": "Screwdriver",
+    "constant": "SCREWDRIVER",
+    "env": "SCREWDRIVER",
+    "pr": { "env": "SD_PULL_REQUEST", "ne": "false" }
+  },
   {
     "name": "Shippable",
     "constant": "SHIPPABLE",
@@ -149,5 +174,15 @@
     "constant": "TRAVIS",
     "env": "TRAVIS",
     "pr": { "env": "TRAVIS_PULL_REQUEST", "ne": "false" }
+  },
+  {
+    "name": "Vercel",
+    "constant": "VERCEL",
+    "env": "NOW_BUILDER"
+  },
+  {
+    "name": "Visual Studio App Center",
+    "constant": "APPCENTER",
+    "env": "APPCENTER_BUILD_ID"
   }
 ]