Index: frontend/node_modules/ci-info/CHANGELOG.md
===================================================================
--- frontend/node_modules/ci-info/CHANGELOG.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/ci-info/CHANGELOG.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,178 @@
+# Changelog
+
+## v3.9.0
+
+- better support for Azure Pipelines ([#116](https://github.com/watson/ci-info/pull/116)), [5ea8d85](https://github.com/watson/ci-info/commit/5ea8d85)
+- detect PullRequest in Azure Pipelines [5ea8d85](https://github.com/watson/ci-info/commit/5ea8d85)
+
+## v3.8.0
+
+- support Harness CI [76a2867](https://github.com/watson/ci-info/commit/76a2867)
+
+## v3.7.1
+
+- ignore ci detection when CI is set to `'false'` [24cc450](https://github.com/watson/ci-info/commit/24cc450)
+
+## v3.7.0
+
+- support Sourcehut CI [85b96ea](https://github.com/watson/ci-info/commit/85b96ea)
+- support ReleaseHub CI [409d886](https://github.com/watson/ci-info/commit/409d886)
+
+## v3.6.2
+
+- fix VERCEL environment detection ([#98](https://github.com/watson/ci-info/pull/98))
+
+## v3.6.1
+
+- fix error in typings [357b454](https://github.com/watson/ci-info/commit/357b454)
+
+## v3.6.0
+
+This release attempts to bring parity with [@npmcli/ci-detect](https://github.com/npm/ci-detect). See [#95](https://github.com/watson/ci-info/pull/95) for more details.
+
+- support gerrit ([#95](https://github.com/watson/ci-info/pull/95))
+- support google cloud build ([#95](https://github.com/watson/ci-info/pull/95))
+- support heroku ([#95](https://github.com/watson/ci-info/pull/95))
+- support anonymous CI's that exposes BUILD_ID and CI_NAME env vars ([#95](https://github.com/watson/ci-info/pull/95))
+- support more vercel environments ([#95](https://github.com/watson/ci-info/pull/95))
+
+## v3.5.0
+
+- support Woodpecker CI ([#90](https://github.com/watson/ci-info/pull/90))
+
+## v3.4.0
+
+- partial support Appflow CI (only CI detection) ([#84](https://github.com/watson/ci-info/pull/84))
+- support Codemagic CI ([#85](https://github.com/watson/ci-info/pull/85))
+- support Xcode Server CI ([#86](https://github.com/watson/ci-info/pull/86))
+- support Xcode Cloud CI ([#86](https://github.com/watson/ci-info/pull/86))
+
+## v3.3.2
+
+- fix: export correct typings for `EAS`
+
+## v3.3.1
+
+- fix: export `EAS_BUILD` constant in typings
+- Add support for nodejs v18
+
+## v3.3.0
+
+- support Expo Application Services ([#70](https://github.com/watson/ci-info/pull/70))
+
+## v3.2.0
+
+- support LayerCI ([#68](https://github.com/watson/ci-info/pull/68))
+- support Appcircle ([#69](https://github.com/watson/ci-info/pull/69))
+- support Codefresh CI ([#65](https://github.com/watson/ci-info/pull/65))
+- add support for nodejs v16
+
+## 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, and 9
+- 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
+
+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))
+
+## v1.6.0
+
+- 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
+
+## 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))
+
+## 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))
+
+## v1.3.1
+
+- 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
+
+## v1.2.0
+
+- feat: detect solano-ci ([#9](https://github.com/watson/ci-info/pull/9))
+
+## v1.1.3
+
+- fix: fix spelling of Hunson in `ci.name`
+
+## v1.1.2
+
+- 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
+
+## v1.1.0
+
+- 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))
+
+## v1.0.0
+
+- Initial release
Index: frontend/node_modules/ci-info/LICENSE
===================================================================
--- frontend/node_modules/ci-info/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/ci-info/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 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
+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.
Index: frontend/node_modules/ci-info/README.md
===================================================================
--- frontend/node_modules/ci-info/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/ci-info/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,135 @@
+# ci-info
+
+Get details about the current Continuous Integration environment.
+
+Please [open an
+issue](https://github.com/watson/ci-info/issues/new?template=ci-server-not-detected.md)
+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)
+[![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
+
+```bash
+npm install ci-info --save
+```
+
+## Usage
+
+```js
+var ci = require('ci-info')
+
+if (ci.isCI) {
+  console.log('The name of the CI server is:', ci.name)
+} else {
+  console.log('This program is not running on a CI server')
+}
+```
+
+## Supported CI tools
+
+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`    | ✅   |
+| [Appcircle](https://appcircle.io/)                                              | `ci.APPCIRCLE`          | 🚫   |
+| [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`             | ✅   |
+| [Codefresh](https://codefresh.io/)                                              | `ci.CODEFRESH`          | ✅   |
+| [Codeship](https://codeship.com)                                                | `ci.CODESHIP`           | 🚫   |
+| [Drone](https://drone.io)                                                       | `ci.DRONE`              | ✅   |
+| [dsari](https://github.com/rfinnie/dsari)                                       | `ci.DSARI`              | 🚫   |
+| [Expo Application Services](https://expo.dev/eas)                               | `ci.EAS`                | 🚫   |
+| [Gerrit CI](https://www.gerritcodereview.com)                                   | `ci.GERRIT`             | 🚫   |
+| [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`               | 🚫   |
+| [Google Cloud Build](https://cloud.google.com/build)                            | `ci.GOOGLE_CLOUD_BUILD` | 🚫   |
+| [Harness CI](https://www.harness.io/products/continuous-integration)            | `ci.HARNESS`            | 🚫   |
+| [Heroku](https://www.heroku.com)                                                | `ci.HEROKU`             | 🚫   |
+| [Hudson](http://hudson-ci.org)                                                  | `ci.HUDSON`             | 🚫   |
+| [Jenkins CI](https://jenkins-ci.org)                                            | `ci.JENKINS`            | ✅   |
+| [LayerCI](https://layerci.com/)                                                 | `ci.LAYERCI`            | ✅   |
+| [Magnum CI](https://magnum-ci.com)                                              | `ci.MAGNUM`             | 🚫   |
+| [Netlify CI](https://www.netlify.com/)                                          | `ci.NETLIFY`            | ✅   |
+| [Nevercode](http://nevercode.io/)                                               | `ci.NEVERCODE`          | ✅   |
+| [ReleaseHub](https://releasehub.com/)                                           | `ci.RELEASEHUB`         | 🚫   |
+| [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`             | ✅   |
+| [Sourcehut](https://sourcehut.org/)                                             | `ci.SOURCEHUT`          | 🚫   |
+| [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`          | 🚫   |
+| [Woodpecker](https://woodpecker-ci.org/)                                        | `ci.WOODPECKER`         | ✅   |
+
+## API
+
+### `ci.name`
+
+Returns a string containing name of the CI server the code is running on.
+If CI server is not detected, it returns `null`.
+
+Don't depend on the value of this string not to change for a specific
+vendor. If you find your self writing `ci.name === 'Travis CI'`, you
+most likely want to use `ci.TRAVIS` instead.
+
+### `ci.isCI`
+
+Returns a boolean. Will be `true` if the code is running on a CI server,
+otherwise `false`.
+
+Some CI servers not listed here might still trigger the `ci.isCI`
+boolean to be set to `true` if they use certain vendor neutral
+environment variables. In those cases `ci.name` will be `null` and no
+vendor specific boolean will be set to `true`.
+
+### `ci.isPR`
+
+Returns a boolean if PR detection is supported for the current CI server. Will
+be `true` if a PR is being tested, otherwise `false`. If PR detection is
+not supported for the current CI server, the value will be `null`.
+
+### `ci.<VENDOR-CONSTANT>`
+
+A vendor specific boolean constant is exposed for each support CI
+vendor. A constant will be `true` if the code is determined to run on
+the given CI server, otherwise `false`.
+
+Examples of vendor constants are `ci.TRAVIS` or `ci.APPVEYOR`. For a
+complete list, see the support table above.
+
+Deprecated vendor constants that will be removed in the next major
+release:
+
+- `ci.TDDIUM` (Solano CI) This have been renamed `ci.SOLANO`
+
+## Ports
+
+ci-info has been ported to the following languages
+
+| Language | Repository |
+|----------|------------|
+| Go       | https://github.com/hofstadter-io/cinful |
+| Rust     | https://github.com/sagiegurari/ci_info |
+| Kotlin   | https://github.com/cloudflightio/ci-info |
+
+## License
+
+[MIT](LICENSE)
Index: frontend/node_modules/ci-info/index.d.ts
===================================================================
--- frontend/node_modules/ci-info/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/ci-info/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,75 @@
+// This file is generated at pre-commit by running `node create-typings.js`.
+
+/**
+ * Returns a boolean. Will be `true` if the code is running on a CI server,
+ * otherwise `false`.
+ *
+ * Some CI servers not listed here might still trigger the `ci.isCI`
+ * boolean to be set to `true` if they use certain vendor neutral environment
+ * variables. In those cases `ci.name` will be `null` and no vendor specific
+ * boolean will be set to `true`.
+ */
+export const isCI: boolean;
+/**
+ * Returns a boolean if PR detection is supported for the current CI server.
+ * Will be `true` if a PR is being tested, otherwise `false`. If PR detection is
+ * not supported for the current CI server, the value will be `null`.
+ */
+export const isPR: boolean | null;
+/**
+ * Returns a string containing name of the CI server the code is running on. If
+ * CI server is not detected, it returns `null`.
+ *
+ * Don't depend on the value of this string not to change for a specific vendor.
+ * If you find your self writing `ci.name === 'Travis CI'`, you most likely want
+ * to use `ci.TRAVIS` instead.
+ */
+export const name: string | null;
+
+export const APPCIRCLE: boolean;
+export const APPVEYOR: boolean;
+export const CODEBUILD: boolean;
+export const AZURE_PIPELINES: boolean;
+export const BAMBOO: boolean;
+export const BITBUCKET: boolean;
+export const BITRISE: boolean;
+export const BUDDY: boolean;
+export const BUILDKITE: boolean;
+export const CIRCLE: boolean;
+export const CIRRUS: boolean;
+export const CODEFRESH: boolean;
+export const CODEMAGIC: boolean;
+export const CODESHIP: boolean;
+export const DRONE: boolean;
+export const DSARI: boolean;
+export const EAS: boolean;
+export const GERRIT: boolean;
+export const GITHUB_ACTIONS: boolean;
+export const GITLAB: boolean;
+export const GOCD: boolean;
+export const GOOGLE_CLOUD_BUILD: boolean;
+export const HARNESS: boolean;
+export const HEROKU: boolean;
+export const HUDSON: boolean;
+export const JENKINS: boolean;
+export const LAYERCI: boolean;
+export const MAGNUM: boolean;
+export const NETLIFY: boolean;
+export const NEVERCODE: boolean;
+export const RELEASEHUB: boolean;
+export const RENDER: boolean;
+export const SAIL: boolean;
+export const SCREWDRIVER: boolean;
+export const SEMAPHORE: boolean;
+export const SHIPPABLE: boolean;
+export const SOLANO: boolean;
+export const SOURCEHUT: 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;
+export const WOODPECKER: boolean;
+export const XCODE_CLOUD: boolean;
+export const XCODE_SERVER: boolean;
Index: frontend/node_modules/ci-info/index.js
===================================================================
--- frontend/node_modules/ci-info/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/ci-info/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,90 @@
+'use strict'
+
+const vendors = require('./vendors.json')
+
+const env = process.env
+
+// Used for testing only
+Object.defineProperty(exports, '_vendors', {
+  value: vendors.map(function (v) {
+    return v.constant
+  })
+})
+
+exports.name = null
+exports.isPR = null
+
+vendors.forEach(function (vendor) {
+  const envs = Array.isArray(vendor.env) ? vendor.env : [vendor.env]
+  const isCI = envs.every(function (obj) {
+    return checkEnv(obj)
+  })
+
+  exports[vendor.constant] = isCI
+
+  if (!isCI) {
+    return
+  }
+
+  exports.name = vendor.name
+
+  switch (typeof vendor.pr) {
+    case 'string':
+      // "pr": "CIRRUS_PR"
+      exports.isPR = !!env[vendor.pr]
+      break
+    case 'object':
+      if ('env' in vendor.pr) {
+        // "pr": { "env": "BUILDKITE_PULL_REQUEST", "ne": "false" }
+        exports.isPR = vendor.pr.env in env && env[vendor.pr.env] !== vendor.pr.ne
+      } else if ('any' in vendor.pr) {
+        // "pr": { "any": ["ghprbPullId", "CHANGE_ID"] }
+        exports.isPR = vendor.pr.any.some(function (key) {
+          return !!env[key]
+        })
+      } else {
+        // "pr": { "DRONE_BUILD_EVENT": "pull_request" }
+        exports.isPR = checkEnv(vendor.pr)
+      }
+      break
+    default:
+      // PR detection not supported for this vendor
+      exports.isPR = null
+  }
+})
+
+exports.isCI = !!(
+  env.CI !== 'false' && // Bypass all checks if CI env is explicitly set to 'false'
+  (env.BUILD_ID || // Jenkins, Cloudbees
+  env.BUILD_NUMBER || // Jenkins, TeamCity
+  env.CI || // Travis CI, CircleCI, Cirrus CI, Gitlab CI, Appveyor, CodeShip, dsari
+  env.CI_APP_ID || // Appflow
+  env.CI_BUILD_ID || // Appflow
+  env.CI_BUILD_NUMBER || // Appflow
+  env.CI_NAME || // Codeship and others
+  env.CONTINUOUS_INTEGRATION || // Travis CI, Cirrus CI
+  env.RUN_ID || // TaskCluster, dsari
+  exports.name ||
+  false)
+)
+
+function checkEnv (obj) {
+  // "env": "CIRRUS"
+  if (typeof obj === 'string') return !!env[obj]
+
+  // "env": { "env": "NODE", "includes": "/app/.heroku/node/bin/node" }
+  if ('env' in obj) {
+    // Currently there are no other types, uncomment when there are
+    // if ('includes' in obj) {
+    return env[obj.env] && env[obj.env].includes(obj.includes)
+    // }
+  }
+  if ('any' in obj) {
+    return obj.any.some(function (k) {
+      return !!env[k]
+    })
+  }
+  return Object.keys(obj).every(function (k) {
+    return env[k] === obj[k]
+  })
+}
Index: frontend/node_modules/ci-info/package.json
===================================================================
--- frontend/node_modules/ci-info/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/ci-info/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,45 @@
+{
+  "name": "ci-info",
+  "version": "3.9.0",
+  "description": "Get details about the current Continuous Integration environment",
+  "main": "index.js",
+  "typings": "index.d.ts",
+  "author": "Thomas Watson Steen <w@tson.dk> (https://twitter.com/wa7son)",
+  "license": "MIT",
+  "repository": "https://github.com/watson/ci-info.git",
+  "bugs": "https://github.com/watson/ci-info/issues",
+  "homepage": "https://github.com/watson/ci-info",
+  "keywords": [
+    "ci",
+    "continuous",
+    "integration",
+    "test",
+    "detect"
+  ],
+  "files": [
+    "vendors.json",
+    "index.js",
+    "index.d.ts",
+    "CHANGELOG.md"
+  ],
+  "funding": [
+    {
+      "type": "github",
+      "url": "https://github.com/sponsors/sibiraj-s"
+    }
+  ],
+  "scripts": {
+    "lint:fix": "standard --fix",
+    "test": "standard && node test.js",
+    "prepare": "husky install"
+  },
+  "devDependencies": {
+    "clear-module": "^4.1.2",
+    "husky": "^8.0.3",
+    "standard": "^17.1.0",
+    "tape": "^5.7.0"
+  },
+  "engines": {
+    "node": ">=8"
+  }
+}
Index: frontend/node_modules/ci-info/vendors.json
===================================================================
--- frontend/node_modules/ci-info/vendors.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/ci-info/vendors.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,321 @@
+[
+  {
+    "name": "Appcircle",
+    "constant": "APPCIRCLE",
+    "env": "AC_APPCIRCLE"
+  },
+  {
+    "name": "AppVeyor",
+    "constant": "APPVEYOR",
+    "env": "APPVEYOR",
+    "pr": "APPVEYOR_PULL_REQUEST_NUMBER"
+  },
+  {
+    "name": "AWS CodeBuild",
+    "constant": "CODEBUILD",
+    "env": "CODEBUILD_BUILD_ARN"
+  },
+  {
+    "name": "Azure Pipelines",
+    "constant": "AZURE_PIPELINES",
+    "env": "TF_BUILD",
+    "pr": {
+      "BUILD_REASON": "PullRequest"
+    }
+  },
+  {
+    "name": "Bamboo",
+    "constant": "BAMBOO",
+    "env": "bamboo_planKey"
+  },
+  {
+    "name": "Bitbucket Pipelines",
+    "constant": "BITBUCKET",
+    "env": "BITBUCKET_COMMIT",
+    "pr": "BITBUCKET_PR_ID"
+  },
+  {
+    "name": "Bitrise",
+    "constant": "BITRISE",
+    "env": "BITRISE_IO",
+    "pr": "BITRISE_PULL_REQUEST"
+  },
+  {
+    "name": "Buddy",
+    "constant": "BUDDY",
+    "env": "BUDDY_WORKSPACE_ID",
+    "pr": "BUDDY_EXECUTION_PULL_REQUEST_ID"
+  },
+  {
+    "name": "Buildkite",
+    "constant": "BUILDKITE",
+    "env": "BUILDKITE",
+    "pr": {
+      "env": "BUILDKITE_PULL_REQUEST",
+      "ne": "false"
+    }
+  },
+  {
+    "name": "CircleCI",
+    "constant": "CIRCLE",
+    "env": "CIRCLECI",
+    "pr": "CIRCLE_PULL_REQUEST"
+  },
+  {
+    "name": "Cirrus CI",
+    "constant": "CIRRUS",
+    "env": "CIRRUS_CI",
+    "pr": "CIRRUS_PR"
+  },
+  {
+    "name": "Codefresh",
+    "constant": "CODEFRESH",
+    "env": "CF_BUILD_ID",
+    "pr": {
+      "any": [
+        "CF_PULL_REQUEST_NUMBER",
+        "CF_PULL_REQUEST_ID"
+      ]
+    }
+  },
+  {
+    "name": "Codemagic",
+    "constant": "CODEMAGIC",
+    "env": "CM_BUILD_ID",
+    "pr": "CM_PULL_REQUEST"
+  },
+  {
+    "name": "Codeship",
+    "constant": "CODESHIP",
+    "env": {
+      "CI_NAME": "codeship"
+    }
+  },
+  {
+    "name": "Drone",
+    "constant": "DRONE",
+    "env": "DRONE",
+    "pr": {
+      "DRONE_BUILD_EVENT": "pull_request"
+    }
+  },
+  {
+    "name": "dsari",
+    "constant": "DSARI",
+    "env": "DSARI"
+  },
+  {
+    "name": "Expo Application Services",
+    "constant": "EAS",
+    "env": "EAS_BUILD"
+  },
+  {
+    "name": "Gerrit",
+    "constant": "GERRIT",
+    "env": "GERRIT_PROJECT"
+  },
+  {
+    "name": "GitHub Actions",
+    "constant": "GITHUB_ACTIONS",
+    "env": "GITHUB_ACTIONS",
+    "pr": {
+      "GITHUB_EVENT_NAME": "pull_request"
+    }
+  },
+  {
+    "name": "GitLab CI",
+    "constant": "GITLAB",
+    "env": "GITLAB_CI",
+    "pr": "CI_MERGE_REQUEST_ID"
+  },
+  {
+    "name": "GoCD",
+    "constant": "GOCD",
+    "env": "GO_PIPELINE_LABEL"
+  },
+  {
+    "name": "Google Cloud Build",
+    "constant": "GOOGLE_CLOUD_BUILD",
+    "env": "BUILDER_OUTPUT"
+  },
+  {
+    "name": "Harness CI",
+    "constant": "HARNESS",
+    "env": "HARNESS_BUILD_ID"
+  },
+  {
+    "name": "Heroku",
+    "constant": "HEROKU",
+    "env": {
+      "env": "NODE",
+      "includes": "/app/.heroku/node/bin/node"
+    }
+  },
+  {
+    "name": "Hudson",
+    "constant": "HUDSON",
+    "env": "HUDSON_URL"
+  },
+  {
+    "name": "Jenkins",
+    "constant": "JENKINS",
+    "env": [
+      "JENKINS_URL",
+      "BUILD_ID"
+    ],
+    "pr": {
+      "any": [
+        "ghprbPullId",
+        "CHANGE_ID"
+      ]
+    }
+  },
+  {
+    "name": "LayerCI",
+    "constant": "LAYERCI",
+    "env": "LAYERCI",
+    "pr": "LAYERCI_PULL_REQUEST"
+  },
+  {
+    "name": "Magnum CI",
+    "constant": "MAGNUM",
+    "env": "MAGNUM"
+  },
+  {
+    "name": "Netlify CI",
+    "constant": "NETLIFY",
+    "env": "NETLIFY",
+    "pr": {
+      "env": "PULL_REQUEST",
+      "ne": "false"
+    }
+  },
+  {
+    "name": "Nevercode",
+    "constant": "NEVERCODE",
+    "env": "NEVERCODE",
+    "pr": {
+      "env": "NEVERCODE_PULL_REQUEST",
+      "ne": "false"
+    }
+  },
+  {
+    "name": "ReleaseHub",
+    "constant": "RELEASEHUB",
+    "env": "RELEASE_BUILD_ID"
+  },
+  {
+    "name": "Render",
+    "constant": "RENDER",
+    "env": "RENDER",
+    "pr": {
+      "IS_PULL_REQUEST": "true"
+    }
+  },
+  {
+    "name": "Sail CI",
+    "constant": "SAIL",
+    "env": "SAILCI",
+    "pr": "SAIL_PULL_REQUEST_NUMBER"
+  },
+  {
+    "name": "Screwdriver",
+    "constant": "SCREWDRIVER",
+    "env": "SCREWDRIVER",
+    "pr": {
+      "env": "SD_PULL_REQUEST",
+      "ne": "false"
+    }
+  },
+  {
+    "name": "Semaphore",
+    "constant": "SEMAPHORE",
+    "env": "SEMAPHORE",
+    "pr": "PULL_REQUEST_NUMBER"
+  },
+  {
+    "name": "Shippable",
+    "constant": "SHIPPABLE",
+    "env": "SHIPPABLE",
+    "pr": {
+      "IS_PULL_REQUEST": "true"
+    }
+  },
+  {
+    "name": "Solano CI",
+    "constant": "SOLANO",
+    "env": "TDDIUM",
+    "pr": "TDDIUM_PR_ID"
+  },
+  {
+    "name": "Sourcehut",
+    "constant": "SOURCEHUT",
+    "env": {
+      "CI_NAME": "sourcehut"
+    }
+  },
+  {
+    "name": "Strider CD",
+    "constant": "STRIDER",
+    "env": "STRIDER"
+  },
+  {
+    "name": "TaskCluster",
+    "constant": "TASKCLUSTER",
+    "env": [
+      "TASK_ID",
+      "RUN_ID"
+    ]
+  },
+  {
+    "name": "TeamCity",
+    "constant": "TEAMCITY",
+    "env": "TEAMCITY_VERSION"
+  },
+  {
+    "name": "Travis CI",
+    "constant": "TRAVIS",
+    "env": "TRAVIS",
+    "pr": {
+      "env": "TRAVIS_PULL_REQUEST",
+      "ne": "false"
+    }
+  },
+  {
+    "name": "Vercel",
+    "constant": "VERCEL",
+    "env": {
+      "any": [
+        "NOW_BUILDER",
+        "VERCEL"
+      ]
+    },
+    "pr": "VERCEL_GIT_PULL_REQUEST_ID"
+  },
+  {
+    "name": "Visual Studio App Center",
+    "constant": "APPCENTER",
+    "env": "APPCENTER_BUILD_ID"
+  },
+  {
+    "name": "Woodpecker",
+    "constant": "WOODPECKER",
+    "env": {
+      "CI": "woodpecker"
+    },
+    "pr": {
+      "CI_BUILD_EVENT": "pull_request"
+    }
+  },
+  {
+    "name": "Xcode Cloud",
+    "constant": "XCODE_CLOUD",
+    "env": "CI_XCODE_PROJECT",
+    "pr": "CI_PULL_REQUEST_NUMBER"
+  },
+  {
+    "name": "Xcode Server",
+    "constant": "XCODE_SERVER",
+    "env": "XCS"
+  }
+]
