Justin Lin 01d60e259c chore(deps): bump mongoose from 8.1.3 to 8.9.5 (#185)
Bumps [mongoose](https://github.com/Automattic/mongoose) from 8.1.3 to
8.9.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/Automattic/mongoose/releases">mongoose's
releases</a>.</em></p>
<blockquote>
<h1>8.9.5 / 2025-01-13</h1>
<ul>
<li>fix: disallow nested $where in populate match</li>
<li>fix(schema): handle bitwise operators on Int32 <a
href="https://redirect.github.com/Automattic/mongoose/issues/15176">#15176</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15170">#15170</a></li>
</ul>
<h1>8.9.4 / 2025-01-09</h1>
<ul>
<li>fix(document): fix document not applying manual populate when using
a function in schema.options.ref <a
href="https://redirect.github.com/Automattic/mongoose/issues/15138">#15138</a>
<a href="https://github.com/IchirokuXVI">IchirokuXVI</a></li>
<li>fix(model): make Model.validate() static correctly cast document
arrays <a
href="https://redirect.github.com/Automattic/mongoose/issues/15169">#15169</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15164">#15164</a></li>
<li>fix(model): allow passing validateBeforeSave option to bulkSave() to
skip validation <a
href="https://redirect.github.com/Automattic/mongoose/issues/15161">#15161</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15156">#15156</a></li>
<li>fix(schema): allow multiple self-referencing discriminator schemas
using Schema.prototype.discriminator <a
href="https://redirect.github.com/Automattic/mongoose/issues/15142">#15142</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15120">#15120</a></li>
<li>types: avoid BufferToBinary&lt;&gt; wiping lean types when passed to
generic functions <a
href="https://redirect.github.com/Automattic/mongoose/issues/15160">#15160</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15158">#15158</a></li>
<li>docs: fix &lt;code&gt; in header ids <a
href="https://redirect.github.com/Automattic/mongoose/issues/15159">#15159</a></li>
<li>docs: fix header in field-level-encryption.md <a
href="https://redirect.github.com/Automattic/mongoose/issues/15137">#15137</a>
<a href="https://github.com/damieng">damieng</a></li>
</ul>
<h1>8.9.3 / 2024-12-30</h1>
<ul>
<li>fix(schema): make duplicate index error a warning for now to prevent
blocking upgrading <a
href="https://redirect.github.com/Automattic/mongoose/issues/15135">#15135</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15112">#15112</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15109">#15109</a></li>
<li>fix(model): handle document array paths set to non-array values in
Model.castObject() <a
href="https://redirect.github.com/Automattic/mongoose/issues/15124">#15124</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15075">#15075</a></li>
<li>fix(document): avoid using childSchemas.path for compatibility with
pre-Mongoose-8.8 schemas <a
href="https://redirect.github.com/Automattic/mongoose/issues/15131">#15131</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15071">#15071</a></li>
<li>fix(model): avoid throwing unnecessary error if updateOne() returns
null in save() <a
href="https://redirect.github.com/Automattic/mongoose/issues/15126">#15126</a></li>
<li>perf(cursor): clear the stack every time if using populate with
batchSize to avoid stack overflows with large docs <a
href="https://redirect.github.com/Automattic/mongoose/issues/15136">#15136</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/10449">#10449</a></li>
<li>types: make BufferToBinary avoid Document instances <a
href="https://redirect.github.com/Automattic/mongoose/issues/15123">#15123</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15122">#15122</a></li>
<li>types(model+query): avoid stripping out virtuals when calling
populate with paths generic <a
href="https://redirect.github.com/Automattic/mongoose/issues/15132">#15132</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15111">#15111</a></li>
<li>types(schema): add missing removeIndex <a
href="https://redirect.github.com/Automattic/mongoose/issues/15134">#15134</a></li>
<li>types: add cleanIndexes() to IndexManager interface <a
href="https://redirect.github.com/Automattic/mongoose/issues/15127">#15127</a></li>
<li>docs: move search endpoint to netlify <a
href="https://redirect.github.com/Automattic/mongoose/issues/15119">#15119</a></li>
</ul>
<h1>8.9.2 / 2024-12-19</h1>
<ul>
<li>fix(schema): avoid throwing duplicate index error if index spec keys
have different order or index has a custom name <a
href="https://redirect.github.com/Automattic/mongoose/issues/15112">#15112</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15109">#15109</a></li>
<li>fix(map): clean modified subpaths when overwriting values in map of
subdocs <a
href="https://redirect.github.com/Automattic/mongoose/issues/15114">#15114</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15108">#15108</a></li>
<li>fix(aggregate): pull session from transaction local storage for
aggregation cursors <a
href="https://redirect.github.com/Automattic/mongoose/issues/15094">#15094</a>
<a href="https://github.com/IchirokuXVI">IchirokuXVI</a></li>
<li>types: correctly handle union types in BufferToBinary and related
helpers <a
href="https://redirect.github.com/Automattic/mongoose/issues/15103">#15103</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15102">#15102</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15057">#15057</a></li>
<li>types: add UUID to RefType <a
href="https://redirect.github.com/Automattic/mongoose/issues/15115">#15115</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15101">#15101</a></li>
<li>docs: remove link to Mongoose 5.x docs from dropdown <a
href="https://redirect.github.com/Automattic/mongoose/issues/15116">#15116</a></li>
<li>docs(connection+document+model): remove remaining references to
remove(), clarify that deleteOne() does not execute until then() or
exec() <a
href="https://redirect.github.com/Automattic/mongoose/issues/15113">#15113</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15107">#15107</a></li>
</ul>
<h1>8.9.1 / 2024-12-16</h1>
<ul>
<li>fix(connection): remove heartbeat check in load balanced mode <a
href="https://redirect.github.com/Automattic/mongoose/issues/15089">#15089</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15042">#15042</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/14812">#14812</a></li>
<li>fix(discriminator): gather childSchemas when creating discriminator
to ensure $getAllSubdocs() can properly get all subdocs <a
href="https://redirect.github.com/Automattic/mongoose/issues/15099">#15099</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15088">#15088</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15092">#15092</a></li>
<li>fix(model): handle discriminators in castObject() <a
href="https://redirect.github.com/Automattic/mongoose/issues/15096">#15096</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15075">#15075</a></li>
<li>fix(schema): throw error if duplicate index definition using unique
in schema path and subsequent .index() call <a
href="https://redirect.github.com/Automattic/mongoose/issues/15093">#15093</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15056">#15056</a></li>
<li>fix: mark documents that are populated using hydratedPopulatedDocs
option as populated in top-level doc <a
href="https://redirect.github.com/Automattic/mongoose/issues/15080">#15080</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15048">#15048</a></li>
<li>fix(document+schema): improve error message for get() on invalid
path <a
href="https://redirect.github.com/Automattic/mongoose/issues/15098">#15098</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15071">#15071</a></li>
<li>docs: remove more callback doc references &amp; some small other
changes <a
href="https://redirect.github.com/Automattic/mongoose/issues/15095">#15095</a></li>
</ul>
<h1>8.9.0 / 2024-12-13</h1>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/Automattic/mongoose/blob/master/CHANGELOG.md">mongoose's
changelog</a>.</em></p>
<blockquote>
<h1>8.9.5 / 2025-01-13</h1>
<ul>
<li>fix: disallow nested $where in populate match CVE-2025-23061</li>
<li>fix(schema): handle bitwise operators on Int32 <a
href="https://redirect.github.com/Automattic/mongoose/issues/15176">#15176</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15170">#15170</a></li>
</ul>
<h1>7.8.4 / 2025-01-13</h1>
<ul>
<li>fix: disallow nested $where in populate match CVE-2025-23061</li>
</ul>
<h1>6.13.6 / 2025-01-13</h1>
<ul>
<li>fix: disallow nested $where in populate match CVE-2025-23061</li>
</ul>
<h1>8.9.4 / 2025-01-09</h1>
<ul>
<li>fix(document): fix document not applying manual populate when using
a function in schema.options.ref <a
href="https://redirect.github.com/Automattic/mongoose/issues/15138">#15138</a>
<a href="https://github.com/IchirokuXVI">IchirokuXVI</a></li>
<li>fix(model): make Model.validate() static correctly cast document
arrays <a
href="https://redirect.github.com/Automattic/mongoose/issues/15169">#15169</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15164">#15164</a></li>
<li>fix(model): allow passing validateBeforeSave option to bulkSave() to
skip validation <a
href="https://redirect.github.com/Automattic/mongoose/issues/15161">#15161</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15156">#15156</a></li>
<li>fix(schema): allow multiple self-referencing discriminator schemas
using Schema.prototype.discriminator <a
href="https://redirect.github.com/Automattic/mongoose/issues/15142">#15142</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15120">#15120</a></li>
<li>types: avoid BufferToBinary&lt;&gt; wiping lean types when passed to
generic functions <a
href="https://redirect.github.com/Automattic/mongoose/issues/15160">#15160</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15158">#15158</a></li>
<li>docs: fix <code>&lt;code&gt;</code> in header ids <a
href="https://redirect.github.com/Automattic/mongoose/issues/15159">#15159</a></li>
<li>docs: fix header in field-level-encryption.md <a
href="https://redirect.github.com/Automattic/mongoose/issues/15137">#15137</a>
<a href="https://github.com/damieng">damieng</a></li>
</ul>
<h1>8.9.3 / 2024-12-30</h1>
<ul>
<li>fix(schema): make duplicate index error a warning for now to prevent
blocking upgrading <a
href="https://redirect.github.com/Automattic/mongoose/issues/15135">#15135</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15112">#15112</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15109">#15109</a></li>
<li>fix(model): handle document array paths set to non-array values in
Model.castObject() <a
href="https://redirect.github.com/Automattic/mongoose/issues/15124">#15124</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15075">#15075</a></li>
<li>fix(document): avoid using childSchemas.path for compatibility with
pre-Mongoose-8.8 schemas <a
href="https://redirect.github.com/Automattic/mongoose/issues/15131">#15131</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15071">#15071</a></li>
<li>fix(model): avoid throwing unnecessary error if updateOne() returns
null in save() <a
href="https://redirect.github.com/Automattic/mongoose/issues/15126">#15126</a></li>
<li>perf(cursor): clear the stack every time if using populate with
batchSize to avoid stack overflows with large docs <a
href="https://redirect.github.com/Automattic/mongoose/issues/15136">#15136</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/10449">#10449</a></li>
<li>types: make BufferToBinary avoid Document instances <a
href="https://redirect.github.com/Automattic/mongoose/issues/15123">#15123</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15122">#15122</a></li>
<li>types(model+query): avoid stripping out virtuals when calling
populate with paths generic <a
href="https://redirect.github.com/Automattic/mongoose/issues/15132">#15132</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15111">#15111</a></li>
<li>types(schema): add missing removeIndex <a
href="https://redirect.github.com/Automattic/mongoose/issues/15134">#15134</a></li>
<li>types: add cleanIndexes() to IndexManager interface <a
href="https://redirect.github.com/Automattic/mongoose/issues/15127">#15127</a></li>
<li>docs: move search endpoint to netlify <a
href="https://redirect.github.com/Automattic/mongoose/issues/15119">#15119</a></li>
</ul>
<h1>8.9.2 / 2024-12-19</h1>
<ul>
<li>fix(schema): avoid throwing duplicate index error if index spec keys
have different order or index has a custom name <a
href="https://redirect.github.com/Automattic/mongoose/issues/15112">#15112</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15109">#15109</a></li>
<li>fix(map): clean modified subpaths when overwriting values in map of
subdocs <a
href="https://redirect.github.com/Automattic/mongoose/issues/15114">#15114</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15108">#15108</a></li>
<li>fix(aggregate): pull session from transaction local storage for
aggregation cursors <a
href="https://redirect.github.com/Automattic/mongoose/issues/15094">#15094</a>
<a href="https://github.com/IchirokuXVI">IchirokuXVI</a></li>
<li>types: correctly handle union types in BufferToBinary and related
helpers <a
href="https://redirect.github.com/Automattic/mongoose/issues/15103">#15103</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15102">#15102</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15057">#15057</a></li>
<li>types: add UUID to RefType <a
href="https://redirect.github.com/Automattic/mongoose/issues/15115">#15115</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15101">#15101</a></li>
<li>docs: remove link to Mongoose 5.x docs from dropdown <a
href="https://redirect.github.com/Automattic/mongoose/issues/15116">#15116</a></li>
<li>docs(connection+document+model): remove remaining references to
remove(), clarify that deleteOne() does not execute until then() or
exec() <a
href="https://redirect.github.com/Automattic/mongoose/issues/15113">#15113</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15107">#15107</a></li>
</ul>
<h1>8.9.1 / 2024-12-16</h1>
<ul>
<li>fix(connection): remove heartbeat check in load balanced mode <a
href="https://redirect.github.com/Automattic/mongoose/issues/15089">#15089</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15042">#15042</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/14812">#14812</a></li>
<li>fix(discriminator): gather childSchemas when creating discriminator
to ensure $getAllSubdocs() can properly get all subdocs <a
href="https://redirect.github.com/Automattic/mongoose/issues/15099">#15099</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15088">#15088</a>
<a
href="https://redirect.github.com/Automattic/mongoose/issues/15092">#15092</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/Automattic/mongoose/commit/5af0a109fcf206eb765c02e0fffe54a78ab95174"><code>5af0a10</code></a>
chore: release 8.9.5</li>
<li><a
href="https://github.com/Automattic/mongoose/commit/a42d8f5e3b8a6c2abd7d32c15b0cc5edac928d4e"><code>a42d8f5</code></a>
Merge branch '7.x'</li>
<li><a
href="https://github.com/Automattic/mongoose/commit/73e81abe3ec012f8255d3ca9978594075378faf4"><code>73e81ab</code></a>
chore: release 7.8.4</li>
<li><a
href="https://github.com/Automattic/mongoose/commit/4fe9a904e3c2184ce6d01d9c3c8f3b239616f155"><code>4fe9a90</code></a>
Merge branch '6.x' into 7.x</li>
<li><a
href="https://github.com/Automattic/mongoose/commit/e59e342e5d01bfeee31c5d5c796745315ecf0fa9"><code>e59e342</code></a>
chore: release 6.13.6</li>
<li><a
href="https://github.com/Automattic/mongoose/commit/64a9f9706f2428c49e0cfb8e223065acc645f7bc"><code>64a9f97</code></a>
fix: disallow nested $where in populate match</li>
<li><a
href="https://github.com/Automattic/mongoose/commit/fa33717db8c6ee2331c68241abff7a81b84a70fb"><code>fa33717</code></a>
Merge pull request <a
href="https://redirect.github.com/Automattic/mongoose/issues/15176">#15176</a>
from Automattic/vkarpov15/<a
href="https://redirect.github.com/Automattic/mongoose/issues/15170">gh-15170</a></li>
<li><a
href="https://github.com/Automattic/mongoose/commit/072860237a2b8d968e06d4090a24127de8cdff24"><code>0728602</code></a>
test: make test cast non-boolean value</li>
<li><a
href="https://github.com/Automattic/mongoose/commit/0cad0d71a8667295c6abd4636ea7d7b5cdc164e8"><code>0cad0d7</code></a>
fix(schema): handle bitwise operators on Int32</li>
<li><a
href="https://github.com/Automattic/mongoose/commit/39886fbb57aaf345d01c0294cf2c3d2781898c29"><code>39886fb</code></a>
docs: quick changelog formatting fix</li>
<li>Additional commits viewable in <a
href="https://github.com/Automattic/mongoose/compare/8.1.3...8.9.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=mongoose&package-manager=npm_and_yarn&previous-version=8.1.3&new-version=8.9.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/linux-odyssey/linux-odyssey/network/alerts).

</details>
2025-04-27 17:00:44 +08:00
2025-04-23 17:40:55 +08:00
2024-10-20 20:06:39 +08:00
2025-04-26 12:35:20 +08:00
2024-04-05 23:59:26 +08:00
2024-02-08 17:40:01 +08:00
2025-04-26 17:02:47 +08:00
2024-10-17 22:08:52 +08:00
2023-10-03 21:59:37 +08:00
2025-04-27 16:07:00 +08:00
2025-04-27 16:07:00 +08:00

Linux Odyssey

Production Staging

Requirements

  • NodeJS v20+
  • Docker
  • Yarn: v1.22

Known Issues

  • MongoDB requires x86 architecture to run for v5+ versions. You can track this issue for updates.

Windows user please refer to docs/windows-setup.md for setup instructions.

Installation

git clone https://github.com/lancatlin/linux-odyssey.git
cd linux-odyssey
yarn install

Project Structures

  1. app: frontend
  2. server: backend
  3. quests: tutorials scripts for each quest
  4. packages: other packages
    1. analytics: admin dashboard to analyze collected data
    2. constants: some shared config values for app and server
    3. container: the script run in container to capture users' command
    4. file-graph: the algorithm to construct and modify file graph, used in both app and server
    5. models: definitions of MondoDB collections (data schema)
    6. utils: other utility code shared between packages
    7. game (in the future): core logic of game playing, will be extracted from server

Configuration

The configuration is stored in the .env file. You can copy from the sample file.

cp .env.sample .env

The backend will use a SSH key pair to login to the player's container. The private key is on the host, and the public key is copied to the player's container.

The key pair is stored in ./config/ssh_key and ./config/ssh_key.pub. If it doesn't exist, the backend will generate a new pair and store them.

Docker Setup

Docker compose files explaination

  1. docker-compose.yml: The one used for development. It sets up MongoDB and builds base quest image.
  2. docker-compose.prod.yml: The one used for production deployment. It has a Nginx service, a backend, a database, an analytics service, and creates isolated networks for player containers.
  3. docker-compose.testing.yml: Similar to production config, but sets up an one-time environment for end-to-end testing.

Common Development Setup

This sets up a development database, and running development server for frontend and backend.

Pull the latest images:

docker compose pull

Start the containers:

docker compose up -d

This will start the db. it will automatically restarts by Docker.

Building quest images:

docker compose build base
yarn build:quests

Build Quest Images in Details

In each quest folder, there is a game.yml file, which is the quest definition.

If you want to include additional files, put them in a home folder. The files in home will be copied to the user's home on container creation automatically.

quests/
├── Dockerfile      # Base image
├── entrypoint.sh   # Entrypoint for the container
├── discover
│   └── game.yml
├── helloworld
│   ├── Dockerfile  # Overwrite the image
│   ├── game.yml
│   └── home        # Include additional files
│       └── forgotten_scroll.txt
├── read
│   └── game.yml
└── spell
    ├── Dockerfile
    ├── game.yml
    └── home
        └── ancient_scroll.txt

An optional Dockerfile can overwrite the base image. You can use this to install additional dependencies or modify the environment.

Customized entrypoint.sh for each quest is not yet supported.

To build all quests:

yarn build:quests

The base image is built with docker-compose, so you can use docker compose build base to rebuild it. Once you rebuild the base image, you have to rebuild all quests.

Optional: Mounting Host Directory

To improve the development experience, we can mount the host directory to the container in the pattern:

/path/to/linux-odyssey/quests/${quest_id}/home:/home/commander
/path/to/linux-odyssey/packages/container:/usr/local/lib/container

You can edit the files on your host, and the changes will be reflected in the container. This is disabled by default. To enable it, you can set the following environment variables:

MOUNT_QUEST=true

Development

Copy .env.sample to .env and customize it for your needs.

Run dev server (frontend, backend):

yarn dev

IMPORTANT NOTE: only the app and server have hot-reloading, other packages require manually running yarn dev in each package.

To develop analytics dashboard:

yarn analytics

The default username and password is alex and Alex1234.

Testing

Unit tests:

yarn test:unit

Run Cypress locally, using the current development containers:

docker compose up -d
yarn test:e2e

Run Cypress in container, create brand-new containers along with it:

./docker-scripts.sh test

# or with building

./docker-scripts.sh test --build

# tearing off the containers
./docker-scripts.sh down

Deployment

Create production env

cp .env.prod.sample .env.prod

Edit .env.prod

BASE_URL=https://yourdomain.com         # IMPORTANT to make login work
SECRET_KEY=xxxx                         # Change it to something safe!

Start the service

# Build the images (only allowed for maintainers)
docker compose -f docker-compose.prod.yml build
docker compose -f docker-compose.prod.yml push

# Server side
docker compose -f docker-compose.prod.yml pull
yarn build:quests
docker compose -f docker-compose.prod.yml up -d

Necessary Configuration

To enable social login, you should have OAuth client token in a .env file: You can copy from .env.sample

YOU MUST CHANGE THE SECRET_KEY in .env file.

SECRET_KEY=your-secret-key

You can generate a random key by running

yarn setup
S
Description
No description provided
Readme GPL-3.0
8.1 MiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 64%
Vue 24.2%
Go 4.2%
Shell 2.1%
Handlebars 2.1%
Other 3.3%