diff --git a/.dependency-cruiser.cjs b/.dependency-cruiser.cjs
new file mode 100644
index 00000000000..25f7b64ce85
--- /dev/null
+++ b/.dependency-cruiser.cjs
@@ -0,0 +1,384 @@
+/** @type {import('dependency-cruiser').IConfiguration} */
+module.exports = {
+ forbidden: [
+ {
+ name: 'no-circular-at-runtime',
+ severity: 'warn',
+ comment:
+ 'This dependency is part of a circular relationship. You might want to revise ' +
+ 'your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ',
+ from: {},
+ to: {
+ circular: true,
+ viaOnly: {
+ dependencyTypesNot: [
+ 'type-only'
+ ]
+ }
+ }
+ },
+ {
+ name: 'no-orphans',
+ comment:
+ "This is an orphan module - it's likely not used (anymore?). Either use it or " +
+ "remove it. If it's logical this module is an orphan (i.e. it's a config file), " +
+ "add an exception for it in your dependency-cruiser configuration. By default " +
+ "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " +
+ "files (.d.ts), tsconfig.json and some of the babel and webpack configs.",
+ severity: 'warn',
+ from: {
+ orphan: true,
+ pathNot: [
+ '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', // dot files
+ '[.]d[.]ts$', // TypeScript declaration files
+ '(^|/)tsconfig[.]json$', // TypeScript config
+ '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' // other configs
+ ]
+ },
+ to: {},
+ },
+ {
+ name: 'no-deprecated-core',
+ comment:
+ 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' +
+ "bound to exist - node doesn't deprecate lightly.",
+ severity: 'warn',
+ from: {},
+ to: {
+ dependencyTypes: [
+ 'core'
+ ],
+ path: [
+ '^v8/tools/codemap$',
+ '^v8/tools/consarray$',
+ '^v8/tools/csvparser$',
+ '^v8/tools/logreader$',
+ '^v8/tools/profile_view$',
+ '^v8/tools/profile$',
+ '^v8/tools/SourceMap$',
+ '^v8/tools/splaytree$',
+ '^v8/tools/tickprocessor-driver$',
+ '^v8/tools/tickprocessor$',
+ '^node-inspect/lib/_inspect$',
+ '^node-inspect/lib/internal/inspect_client$',
+ '^node-inspect/lib/internal/inspect_repl$',
+ '^async_hooks$',
+ '^punycode$',
+ '^domain$',
+ '^constants$',
+ '^sys$',
+ '^_linklist$',
+ '^_stream_wrap$'
+ ],
+ }
+ },
+ {
+ name: 'not-to-deprecated',
+ comment:
+ 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' +
+ 'version of that module, or find an alternative. Deprecated modules are a security risk.',
+ severity: 'warn',
+ from: {},
+ to: {
+ dependencyTypes: [
+ 'deprecated'
+ ]
+ }
+ },
+ {
+ name: 'no-non-package-json',
+ severity: 'error',
+ comment:
+ "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " +
+ "That's problematic as the package either (1) won't be available on live (2 - worse) will be " +
+ "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " +
+ "in your package.json.",
+ from: {},
+ to: {
+ dependencyTypes: [
+ 'npm-no-pkg',
+ 'npm-unknown'
+ ]
+ }
+ },
+ {
+ name: 'not-to-unresolvable',
+ comment:
+ "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " +
+ 'module: add it to your package.json. In all other cases you likely already know what to do.',
+ severity: 'error',
+ from: {},
+ to: {
+ couldNotResolve: true
+ }
+ },
+ {
+ name: 'no-duplicate-dep-types',
+ comment:
+ "Likely this module depends on an external ('npm') package that occurs more than once " +
+ "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " +
+ "maintenance problems later on.",
+ severity: 'warn',
+ from: {},
+ to: {
+ moreThanOneDependencyType: true,
+ // as it's pretty common to have a type import be a type only import
+ // _and_ (e.g.) a devDependency - don't consider type-only dependency
+ // types for this rule
+ dependencyTypesNot: ["type-only"]
+ }
+ },
+
+ /* rules you might want to tweak for your specific situation: */
+
+ {
+ name: 'not-to-spec',
+ comment:
+ 'This module depends on a spec (test) file. The sole responsibility of a spec file is to test code. ' +
+ "If there's something in a spec that's of use to other modules, it doesn't have that single " +
+ 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.',
+ severity: 'error',
+ from: {},
+ to: {
+ path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$'
+ }
+ },
+ {
+ name: 'not-to-dev-dep',
+ severity: 'error',
+ comment:
+ "This module depends on an npm package from the 'devDependencies' section of your " +
+ 'package.json. It looks like something that ships to production, though. To prevent problems ' +
+ "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" +
+ 'section of your package.json. If this module is development only - add it to the ' +
+ 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration',
+ from: {
+ path: '^(src)',
+ pathNot: [
+ '[.](?:spec|test|setup|script)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$',
+ 'src/test'
+ ]
+ },
+ to: {
+ dependencyTypes: [
+ 'npm-dev',
+ ],
+ // type only dependencies are not a problem as they don't end up in the
+ // production code or are ignored by the runtime.
+ dependencyTypesNot: [
+ 'type-only'
+ ],
+ pathNot: [
+ 'node_modules/@types/'
+ ]
+ }
+ },
+ {
+ name: 'optional-deps-used',
+ severity: 'info',
+ comment:
+ "This module depends on an npm package that is declared as an optional dependency " +
+ "in your package.json. As this makes sense in limited situations only, it's flagged here. " +
+ "If you're using an optional dependency here by design - add an exception to your" +
+ "dependency-cruiser configuration.",
+ from: {},
+ to: {
+ dependencyTypes: [
+ 'npm-optional'
+ ]
+ }
+ },
+ {
+ name: 'peer-deps-used',
+ comment:
+ "This module depends on an npm package that is declared as a peer dependency " +
+ "in your package.json. This makes sense if your package is e.g. a plugin, but in " +
+ "other cases - maybe not so much. If the use of a peer dependency is intentional " +
+ "add an exception to your dependency-cruiser configuration.",
+ severity: 'warn',
+ from: {},
+ to: {
+ dependencyTypes: [
+ 'npm-peer'
+ ]
+ }
+ }
+ ],
+ options: {
+
+ /* Which modules not to follow further when encountered */
+ doNotFollow: {
+ /* path: an array of regular expressions in strings to match against */
+ path: ['node_modules']
+ },
+
+ /* Which modules to exclude */
+ // exclude : {
+ // /* path: an array of regular expressions in strings to match against */
+ // path: '',
+ // },
+
+ /* Which modules to exclusively include (array of regular expressions in strings)
+ dependency-cruiser will skip everything not matching this pattern
+ */
+ // includeOnly : [''],
+
+ /* List of module systems to cruise.
+ When left out dependency-cruiser will fall back to the list of _all_
+ module systems it knows of. It's the default because it's the safe option
+ It might come at a performance penalty, though.
+ moduleSystems: ['amd', 'cjs', 'es6', 'tsd']
+
+ As in practice only commonjs ('cjs') and ecmascript modules ('es6')
+ are widely used, you can limit the moduleSystems to those.
+ */
+
+ // moduleSystems: ['cjs', 'es6'],
+
+ /* prefix for links in html and svg output (e.g. 'https://github.com/you/yourrepo/blob/main/'
+ to open it on your online repo or `vscode://file/${process.cwd()}/` to
+ open it in visual studio code),
+ */
+ // prefix: `vscode://file/${process.cwd()}/`,
+
+ /* false (the default): ignore dependencies that only exist before typescript-to-javascript compilation
+ true: also detect dependencies that only exist before typescript-to-javascript compilation
+ "specify": for each dependency identify whether it only exists before compilation or also after
+ */
+ // tsPreCompilationDeps: false,
+
+ /* list of extensions to scan that aren't javascript or compile-to-javascript.
+ Empty by default. Only put extensions in here that you want to take into
+ account that are _not_ parsable.
+ */
+ // extraExtensionsToScan: [".json", ".jpg", ".png", ".svg", ".webp"],
+
+ /* if true combines the package.jsons found from the module up to the base
+ folder the cruise is initiated from. Useful for how (some) mono-repos
+ manage dependencies & dependency definitions.
+ */
+ // combinedDependencies: false,
+
+ /* if true leave symlinks untouched, otherwise use the realpath */
+ // preserveSymlinks: false,
+
+ /* TypeScript project file ('tsconfig.json') to use for
+ (1) compilation and
+ (2) resolution (e.g. with the paths property)
+
+ The (optional) fileName attribute specifies which file to take (relative to
+ dependency-cruiser's current working directory). When not provided
+ defaults to './tsconfig.json'.
+ */
+ tsConfig: {
+ fileName: 'tsconfig.json'
+ },
+
+ /* Webpack configuration to use to get resolve options from.
+
+ The (optional) fileName attribute specifies which file to take (relative
+ to dependency-cruiser's current working directory. When not provided defaults
+ to './webpack.conf.js'.
+
+ The (optional) `env` and `arguments` attributes contain the parameters
+ to be passed if your webpack config is a function and takes them (see
+ webpack documentation for details)
+ */
+ // webpackConfig: {
+ // fileName: 'webpack.config.js',
+ // env: {},
+ // arguments: {}
+ // },
+
+ /* Babel config ('.babelrc', '.babelrc.json', '.babelrc.json5', ...) to use
+ for compilation
+ */
+ // babelConfig: {
+ // fileName: '.babelrc',
+ // },
+
+ /* List of strings you have in use in addition to cjs/ es6 requires
+ & imports to declare module dependencies. Use this e.g. if you've
+ re-declared require, use a require-wrapper or use window.require as
+ a hack.
+ */
+ // exoticRequireStrings: [],
+
+ /* options to pass on to enhanced-resolve, the package dependency-cruiser
+ uses to resolve module references to disk. The values below should be
+ suitable for most situations
+
+ If you use webpack: you can also set these in webpack.conf.js. The set
+ there will override the ones specified here.
+ */
+ enhancedResolveOptions: {
+ /* What to consider as an 'exports' field in package.jsons */
+ exportsFields: ["exports"],
+ /* List of conditions to check for in the exports field.
+ Only works when the 'exportsFields' array is non-empty.
+ */
+ conditionNames: ["import", "require", "node", "default", "types"],
+ /*
+ The extensions, by default are the same as the ones dependency-cruiser
+ can access (run `npx depcruise --info` to see which ones that are in
+ _your_ environment). If that list is larger than you need you can pass
+ the extensions you actually use (e.g. [".js", ".jsx"]). This can speed
+ up module resolution, which is the most expensive step.
+ */
+ // extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"],
+ /* What to consider a 'main' field in package.json */
+ mainFields: ["module", "main", "types", "typings"],
+ /*
+ A list of alias fields in package.jsons
+ See [this specification](https://github.com/defunctzombie/package-browser-field-spec) and
+ the webpack [resolve.alias](https://webpack.js.org/configuration/resolve/#resolvealiasfields)
+ documentation
+
+ Defaults to an empty array (= don't use alias fields).
+ */
+ // aliasFields: ["browser"],
+ },
+ reporterOptions: {
+ dot: {
+ /* pattern of modules that can be consolidated in the detailed
+ graphical dependency graph. The default pattern in this configuration
+ collapses everything in node_modules to one folder deep so you see
+ the external modules, but their innards.
+ */
+ collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)',
+
+ /* Options to tweak the appearance of your graph.See
+ https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#reporteroptions
+ for details and some examples. If you don't specify a theme
+ dependency-cruiser falls back to a built-in one.
+ */
+ // theme: {
+ // graph: {
+ // /* splines: "ortho" gives straight lines, but is slow on big graphs
+ // splines: "true" gives bezier curves (fast, not as nice as ortho)
+ // */
+ // splines: "true"
+ // },
+ // }
+ },
+ archi: {
+ /* pattern of modules that can be consolidated in the high level
+ graphical dependency graph. If you use the high level graphical
+ dependency graph reporter (`archi`) you probably want to tweak
+ this collapsePattern to your situation.
+ */
+ collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)',
+
+ /* Options to tweak the appearance of your graph. If you don't specify a
+ theme for 'archi' dependency-cruiser will use the one specified in the
+ dot section above and otherwise use the default one.
+ */
+ // theme: { },
+ },
+ "text": {
+ "highlightFocused": true
+ },
+ }
+ }
+};
+// generated: dependency-cruiser@16.3.3 on 2024-06-13T23:26:36.169Z
diff --git a/.env b/.env
index 076cf6fbaf5..a1abec1a871 100644
--- a/.env
+++ b/.env
@@ -1,4 +1,7 @@
VITE_BYPASS_LOGIN=0
VITE_BYPASS_TUTORIAL=0
VITE_SERVER_URL=http://localhost:8001
+VITE_DISCORD_CLIENT_ID=1248062921129459756
+VITE_GOOGLE_CLIENT_ID=955345393540-2k6lfftf0fdnb0krqmpthjnqavfvvf73.apps.googleusercontent.com
+VITE_I18N_DEBUG=0
VITE_MOCK_API=0
\ No newline at end of file
diff --git a/.env.beta b/.env.beta
new file mode 100644
index 00000000000..88147215258
--- /dev/null
+++ b/.env.beta
@@ -0,0 +1,6 @@
+VITE_BYPASS_LOGIN=0
+VITE_BYPASS_TUTORIAL=0
+VITE_SERVER_URL=https://api.beta.pokerogue.net
+VITE_DISCORD_CLIENT_ID=1248062921129459756
+VITE_GOOGLE_CLIENT_ID=955345393540-2k6lfftf0fdnb0krqmpthjnqavfvvf73.apps.googleusercontent.com
+VITE_I18N_DEBUG=1
diff --git a/.env.development b/.env.development
index 453e64ce9e3..c3ee3450c04 100644
--- a/.env.development
+++ b/.env.development
@@ -1,4 +1,8 @@
VITE_BYPASS_LOGIN=1
VITE_BYPASS_TUTORIAL=0
VITE_SERVER_URL=http://localhost:8001
+VITE_DISCORD_CLIENT_ID=1234567890
+VITE_GOOGLE_CLIENT_ID=1234567890
+VITE_I18N_DEBUG=1
+VITE_PORT=8000
VITE_MOCK_API=1
\ No newline at end of file
diff --git a/.env.production b/.env.production
new file mode 100644
index 00000000000..65dc7875902
--- /dev/null
+++ b/.env.production
@@ -0,0 +1,6 @@
+VITE_BYPASS_LOGIN=0
+VITE_BYPASS_TUTORIAL=0
+VITE_SERVER_URL=https://api.pokerogue.net
+VITE_DISCORD_CLIENT_ID=1248062921129459756
+VITE_GOOGLE_CLIENT_ID=955345393540-2k6lfftf0fdnb0krqmpthjnqavfvvf73.apps.googleusercontent.com
+VITE_I18N_DEBUG=0
\ No newline at end of file
diff --git a/.env.test b/.env.test
new file mode 100644
index 00000000000..54d5bd6f257
--- /dev/null
+++ b/.env.test
@@ -0,0 +1 @@
+VITE_I18N_DEBUG=0
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index 6545a0d2367..00000000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve
-title: "[BUG]"
-labels: Bug
-assignees: ''
-
----
-
-**Describe the bug**
-
-
-**To Reproduce**
-
-1. Go to '...'
-2. Click on '....'
-3. Scroll down to '....'
-4. See error
-
-**Expected behavior**
-
-
-**Screenshots / Videos**
-
-
-**Device**
-
-
-**Additional context**
-
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 00000000000..644fdcbe563
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,115 @@
+name: Bug Report
+description: Create a report to help us improve
+title: "[Bug] "
+labels: ["Bug"]
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thanks for taking the time to fill out this bug report!
+ - type: textarea
+ id: description
+ attributes:
+ label: Describe the bug
+ description: A clear and concise description of what the bug is.
+ validations:
+ required: true
+ - type: markdown
+ attributes:
+ value: |
+ ---
+ - type: textarea
+ id: session-file
+ attributes:
+ label: User data export file
+ description: Open Menu → ManageData → Export Session → Select slot. The file should now be in your `/Downloads` directory. Change the file extension type from `.prsv` to `.txt` (How to [Windows](https://www.guidingtech.com/how-to-change-file-type-on-windows/) | [Mac](https://support.apple.com/guide/mac-help/show-or-hide-filename-extensions-on-mac-mchlp2304/mac) | [iOS](https://www.guidingtech.com/change-file-type-extension-on-iphone/)).
+ placeholder: Focus me and then drop your file here (or use the upload button at the bottom)
+ validations:
+ required: false
+ - type: textarea
+ id: data-file
+ attributes:
+ label: Session export file
+ description: Open Menu → ManageData → Export Data. The file should now be in your `/Downloads` directory. Change the file extension type from `.prsv` to `.txt` (How to [Windows](https://www.guidingtech.com/how-to-change-file-type-on-windows/) | [Mac](https://support.apple.com/guide/mac-help/show-or-hide-filename-extensions-on-mac-mchlp2304/mac) | [iOS](https://www.guidingtech.com/change-file-type-extension-on-iphone/)).
+ placeholder: Focus me and then drop your file here (or use the upload button at the bottom)
+ validations:
+ required: false
+ - type: markdown
+ attributes:
+ value: |
+ ---
+ - type: textarea
+ id: expected-behavior
+ attributes:
+ label: Expected behavior
+ description: A clear and concise description of what you expected to happen. If it is an existing move or ability
+ validations:
+ required: true
+ - type: markdown
+ attributes:
+ value: |
+ ---
+ - type: textarea
+ id: media
+ attributes:
+ label: Screenshots / Videos
+ description: If applicable, add screenshots or videos to help explain your problem.
+ validations:
+ required: false
+ - type: markdown
+ attributes:
+ value: |
+ ---
+ - type: dropdown
+ id: os
+ attributes:
+ label: What OS did you observe the bug on?
+ multiple: true
+ options:
+ - PC/Windows
+ - Mac/OSX
+ - Linux
+ - iOS
+ - Android
+ - Other
+ validations:
+ required: true
+ - type: input
+ id: os-other
+ attributes:
+ label: If other please specify
+ validations:
+ required: false
+ - type: markdown
+ attributes:
+ value: |
+ ---
+ - type: dropdown
+ id: browser
+ attributes:
+ label: Which browser do you use?
+ multiple: true
+ options:
+ - Chrome
+ - Firefox
+ - Safari
+ - Edge
+ - Opera
+ - Other
+ validations:
+ required: true
+ - type: input
+ id: browser-other
+ attributes:
+ label: If other please specify
+ validations:
+ required: false
+ - type: markdown
+ attributes:
+ value: |
+ ---
+ - type: textarea
+ id: additional-context
+ attributes:
+ label: Additional context
+ description: Add any other context about the problem here.
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index d3130a73ab8..e4f1fa5ebf5 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -25,10 +25,12 @@
## Checklist
+- [ ] **I'm using `beta` as my base branch**
- [ ] There is no overlap with another PR?
- [ ] The PR is self-contained and cannot be split into smaller PRs?
- [ ] Have I provided a clear explanation of the changes?
+- [ ] Have I considered writing automated tests for the issue?
- [ ] Have I tested the changes (manually)?
- [ ] Are all unit tests still passing? (`npm run test`)
- [ ] Are the changes visual?
- - [ ] Have I provided screenshots/videos of the changes?
\ No newline at end of file
+ - [ ] Have I provided screenshots/videos of the changes?
diff --git a/.github/workflows/deploy-beta.yml b/.github/workflows/deploy-beta.yml
new file mode 100644
index 00000000000..3af48b400af
--- /dev/null
+++ b/.github/workflows/deploy-beta.yml
@@ -0,0 +1,32 @@
+name: Deploy Beta
+
+on:
+ push:
+ branches:
+ - beta
+
+jobs:
+ deploy:
+ if: github.repository == 'pagefaultgames/pokerogue'
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-node@v4
+ with:
+ node-version: "20"
+ - name: Install dependencies
+ run: npm ci
+ - name: Build
+ run: npm run build:beta
+ env:
+ NODE_ENV: production
+ - name: Set up SSH
+ run: |
+ mkdir ~/.ssh
+ echo "${{ secrets.BETA_SSH_PUBLIC_KEY }}" > ~/.ssh/id_ed25519.pub
+ echo "${{ secrets.BETA_SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
+ chmod 600 ~/.ssh/*
+ ssh-keyscan -H ${{ secrets.BETA_SSH_HOST }} >> ~/.ssh/known_hosts
+ - name: Deploy build on server
+ run: |
+ rsync --del --no-times --checksum -vrm dist/* ${{ secrets.BETA_SSH_USER }}@${{ secrets.BETA_SSH_HOST }}:${{ secrets.BETA_DESTINATION_DIR }}
\ No newline at end of file
diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml
index 32c0ca7707a..9068f1ae9a2 100644
--- a/.github/workflows/eslint.yml
+++ b/.github/workflows/eslint.yml
@@ -6,9 +6,11 @@ on:
push:
branches:
- main # Trigger on push events to the main branch
+ - beta # Trigger on push events to the beta branch
pull_request:
branches:
- main # Trigger on pull request events targeting the main branch
+ - beta # Trigger on pull request events targeting the beta branch
jobs:
run-linters: # Define a job named "run-linters"
diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml
index aa63792bbea..3b7617c45f4 100644
--- a/.github/workflows/github-pages.yml
+++ b/.github/workflows/github-pages.yml
@@ -7,6 +7,7 @@ on:
pull_request:
branches:
- main
+ - beta
jobs:
pages:
@@ -47,13 +48,12 @@ jobs:
run: |
cd pokerogue_docs
npm ci
- npm install typedoc --save-dev
- name: Generate Typedoc docs
working-directory: ${{env.api-dir}}
run: |
cd pokerogue_docs
- npx typedoc --out /tmp/docs --githubPages false --entryPoints ./src/
+ npm run docs -- --out /tmp/docs --githubPages false --entryPoints ./src/
- name: Commit & Push docs
if: github.event_name == 'push'
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
new file mode 100644
index 00000000000..9ce1d1c5038
--- /dev/null
+++ b/.github/workflows/tests.yml
@@ -0,0 +1,33 @@
+name: Tests
+
+on:
+ # Trigger the workflow on push or pull request,
+ # but only for the main branch
+ push:
+ branches:
+ - main # Trigger on push events to the main branch
+ - beta # Trigger on push events to the beta branch
+ pull_request:
+ branches:
+ - main # Trigger on pull request events targeting the main branch
+ - beta # Trigger on pull request events targeting the beta branch
+
+jobs:
+ run-tests: # Define a job named "run-tests"
+ name: Run tests # Human-readable name for the job
+ runs-on: ubuntu-latest # Specify the latest Ubuntu runner for the job
+
+ steps:
+ - name: Check out Git repository # Step to check out the repository
+ uses: actions/checkout@v4 # Use the checkout action version 4
+
+ - name: Set up Node.js # Step to set up Node.js environment
+ uses: actions/setup-node@v4 # Use the setup-node action version 4
+ with:
+ node-version: 20 # Specify Node.js version 20
+
+ - name: Install Node.js dependencies # Step to install Node.js dependencies
+ run: npm ci # Use 'npm ci' to install dependencies
+
+ - name: tests # Step to run tests
+ run: npm run test:silent
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 1b1bc0743c3..c22d0b2ce4c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,7 +34,10 @@ src/data/battle-anim-data.ts
src/overrides.ts
coverage
+/.vs
# Local Documentation
/typedoc
+/dependency-graph.svg
+/.vs
diff --git a/README.md b/README.md
index 839bfa3ae45..ade4adc2c59 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,10 @@