Skip to content

Commit

Permalink
Merge pull request #1644 from ebkr/develop
Browse files Browse the repository at this point in the history
Release 3.1.56 (Develop)
  • Loading branch information
ebkr authored Feb 26, 2025
2 parents 197d845 + 004effc commit 22c99ec
Show file tree
Hide file tree
Showing 84 changed files with 2,886 additions and 1,686 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
uses: actions/setup-node@v3
with:
# The talk on the street says this might be a good version for building.
node-version: 19.2.0
node-version: 20.11.0
cache: yarn

- name: Install Yarn dependencies
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
uses: actions/setup-node@v3
with:
# The talk on the street says this might be a good version for building.
node-version: 19.2.0
node-version: 20.11.0
cache: yarn

- name: Install Yarn dependencies
Expand Down
4 changes: 2 additions & 2 deletions BUILDING.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Setting Up
### Prerequisites
- Node.js (>=18.0.0)
- Node.js (>=20.0.0)
- Yarn
- Quasar CLI (Install using `yarn global add @quasar/cli`)
- Python2 (EOL for 4 years. Goodluck!)
- Python 2

#### Linux Build
- rpm builder
Expand Down
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
### 3.1.56
#### Games added
- Subterror
- MiSide
- Dale & Dawson
- I Am Your Beast
- Bomb Rush Cyberfunk
- Added "Other" option
- Aloft
- Correct AppID is used to launch on Steam

#### Notable changes
- Faster access to the profile selection screen

### 3.1.55
#### Games added
- ATLYSS
Expand Down
4 changes: 2 additions & 2 deletions DevEnvSetup.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
2. Install NVM (Node Version Manager)
3. Open Git Bash as admin
4. Go into repo root folder
5. Run `nvm install 14`
6. Run `nvm use 14.X.X` with "X" replaced with the version NVM installed. e.g. `nvm use 14.21.1`
5. Run `nvm install 20`
6. Run `nvm use 20.X.X` with "X" replaced with the version NVM installed. e.g. `nvm use 20.21.1`
7. Run `npm install --global yarn`
8. Exit Git Bash
9. Open PowerShell as Admin
Expand Down
2 changes: 0 additions & 2 deletions docs/Adding a game.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,6 @@
- Required for Unreal games relying on unreal-shimloader.
- **TsUrl**
- The Thunderstore API endpoint for the listing.
- **ExclusionsUrl**
- The URL used to load package exclusions. Generally just kept the same. No real reason to change until it becomes a large file as extra overhead to maintain.
- **Platforms**
- Array of `StorePlatformMetadata` for the different supported storefronts. Identifier is not required, however is expected for Steam and EGS (more potentially in future).
- **GameImage**
Expand Down
145 changes: 75 additions & 70 deletions jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,76 +2,81 @@ const esModules = ['quasar/lang', 'lodash-es'].join('|');

/* eslint-env node */
module.exports = {
globals: {
__DEV__: true,
// TODO: Remove if resolved natively https://github.com/vuejs/vue-jest/issues/175
'vue-jest': {
pug: { doctype: 'html' },
globals: {
__DEV__: true,
// TODO: Remove if resolved natively https://github.com/vuejs/vue-jest/issues/175
'vue-jest': {
pug: { doctype: 'html' }
}
},
},
setupFilesAfterEnv: ['<rootDir>/test/jest/jest.setup.ts'],
// noStackTrace: true,
// bail: true,
// cache: false,
// verbose: true,
// watch: true,
collectCoverage: false,
coverageDirectory: '<rootDir>/test/jest/coverage',
collectCoverageFrom: [
'<rootDir>/src/**/*.vue',
'<rootDir>/src/**/*.js',
'<rootDir>/src/**/*.ts',
'<rootDir>/src/**/*.jsx',
'<rootDir>/src/**/*.tsx',
],
coveragePathIgnorePatterns: ['/node_modules/', '.d.ts$'],
coverageThreshold: {
global: {
// branches: 50,
// functions: 50,
// lines: 50,
// statements: 50
testEnvironmentOptions: {
url: 'http://localhost/',
},
},
testMatch: [
// Matches tests in any subfolder of 'src' or into 'test/jest/__tests__'
// Matches all files with extension 'js', 'jsx', 'ts' and 'tsx'
'<rootDir>/test/jest/__tests__/**/*.(spec|test).+(ts|js)?(x)',
'<rootDir>/src/**/*.jest.(spec|test).+(ts|js)?(x)',
],
// Extension-less imports of components are resolved to .ts files by TS,
// grating correct type-checking in test files.
// Being 'vue' the first moduleFileExtension option, the very same imports
// will be resolved to .vue files by Jest, if both .vue and .ts files are
// in the same folder.
// This guarantee a great dev experience both for testing and type-checking.
// See https://github.com/vuejs/vue-jest/issues/188#issuecomment-620750728
moduleFileExtensions: ['vue', 'js', 'jsx', 'json', 'ts', 'tsx'],
moduleNameMapper: {
'^quasar$': 'quasar/dist/quasar.common.js',
'^~/(.*)$': '<rootDir>/$1',
'^src/(.*)$': '<rootDir>/src/$1',
'^app/(.*)$': '<rootDir>/$1',
'^components/(.*)$': '<rootDir>/src/components/$1',
'^layouts/(.*)$': '<rootDir>/src/layouts/$1',
'^pages/(.*)$': '<rootDir>/src/pages/$1',
'^assets/(.*)$': '<rootDir>/src/assets/$1',
'^boot/(.*)$': '<rootDir>/src/boot/$1',
'.*css$': '<rootDir>/test/jest/__tests__/__stub_module_files__/style.js',
},
transform: {
// See https://jestjs.io/docs/en/configuration.html#transformignorepatterns-array-string
[`^(${esModules}).+\\.js$`]: 'babel-jest',
'^.+\\.(ts|js|html)$': 'ts-jest',
'^.+\\.(ts|js)$': 'babel-jest',
// vue-jest uses find-babel-file, which searches by this order:
// (async) .babelrc, .babelrc.js, package.json, babel.config.js
// (sync) .babelrc, .babelrc.js, babel.config.js, package.json
// https://github.com/tleunen/find-babel-config/issues/33
'.*\\.vue$': 'vue-jest',
'.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$':
'jest-transform-stub',
},
transformIgnorePatterns: [`node_modules/(?!(${esModules}))`],
snapshotSerializers: ['<rootDir>/node_modules/jest-serializer-vue'],
testEnvironment: 'jsdom',
testURL: 'http://localhost/',
setupFilesAfterEnv: ['<rootDir>/test/jest/jest.setup.ts'],
// noStackTrace: true,
// bail: true,
// cache: false,
// verbose: true,
// watch: true,
collectCoverage: false,
coverageDirectory: '<rootDir>/test/jest/coverage',
collectCoverageFrom: [
'<rootDir>/src/**/*.vue',
'<rootDir>/src/**/*.js',
'<rootDir>/src/**/*.ts',
'<rootDir>/src/**/*.jsx',
'<rootDir>/src/**/*.tsx'
],
coveragePathIgnorePatterns: ['/node_modules/', '.d.ts$'],
coverageThreshold: {
global: {
// branches: 50,
// functions: 50,
// lines: 50,
// statements: 50
}
},
testMatch: [
// Matches tests in any subfolder of 'src' or into 'test/jest/__tests__'
// Matches all files with extension 'js', 'jsx', 'ts' and 'tsx'
'<rootDir>/test/jest/__tests__/**/*.(spec|test).+(ts|js)?(x)',
'<rootDir>/src/**/*.jest.(spec|test).+(ts|js)?(x)'
],
// Extension-less imports of components are resolved to .ts files by TS,
// grating correct type-checking in test files.
// Being 'vue' the first moduleFileExtension option, the very same imports
// will be resolved to .vue files by Jest, if both .vue and .ts files are
// in the same folder.
// This guarantee a great dev experience both for testing and type-checking.
// See https://github.com/vuejs/vue-jest/issues/188#issuecomment-620750728
moduleFileExtensions: ['vue', 'js', 'jsx', 'json', 'ts', 'tsx'],
moduleNameMapper: {
'^quasar$': 'quasar/dist/quasar.common.js',
'^~/(.*)$': '<rootDir>/$1',
'^src/(.*)$': '<rootDir>/src/$1',
'^app/(.*)$': '<rootDir>/$1',
'^components/(.*)$': '<rootDir>/src/components/$1',
'^layouts/(.*)$': '<rootDir>/src/layouts/$1',
'^pages/(.*)$': '<rootDir>/src/pages/$1',
'^assets/(.*)$': '<rootDir>/src/assets/$1',
'^boot/(.*)$': '<rootDir>/src/boot/$1',
'.*css$': '<rootDir>/test/jest/__tests__/__stub_module_files__/style.js'
},
transform: {
// See https://jestjs.io/docs/en/configuration.html#transformignorepatterns-array-string
[`^(${esModules}).+\\.js$`]: 'babel-jest',
'^.+\\.(ts|js|html)$': 'ts-jest',
'^.+\\.(ts|js)$': 'babel-jest',
// vue-jest uses find-babel-file, which searches by this order:
// (async) .babelrc, .babelrc.js, package.json, babel.config.js
// (sync) .babelrc, .babelrc.js, babel.config.js, package.json
// https://github.com/tleunen/find-babel-config/issues/33
'.*\\.vue$': 'vue-jest',
'.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$':
'jest-transform-stub'
},
transformIgnorePatterns: [`node_modules/(?!(${esModules}))`],
snapshotSerializers: ['<rootDir>/node_modules/jest-serializer-vue']
};
9 changes: 6 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "r2modman",
"version": "3.1.55",
"version": "3.1.56",
"description": "A simple and easy to use mod manager for many games using Thunderstore.",
"productName": "r2modman",
"author": "ebkr",
Expand Down Expand Up @@ -74,6 +74,7 @@
"@types/async-lock": "^1.1.2",
"@types/chai": "^4.2.11",
"@types/fs-extra": "^8.0.1",
"@types/jsdom": "^21.1.7",
"@types/lodash.debounce": "^4.0.7",
"@types/node": "^12.12.12",
"@types/quill": "^2.0.3",
Expand All @@ -83,7 +84,7 @@
"@typescript-eslint/eslint-plugin": "^1.12.0",
"@typescript-eslint/parser": "^1.12.0",
"@vue/eslint-config-airbnb": "^4.0.0",
"@vue/test-utils": "^1.2.1",
"@vue/test-utils": "^1.3.6",
"babel-core": "^7.0.0-beta.3",
"babel-eslint": "^10.0.1",
"babel-jest": "^27.0.2",
Expand All @@ -100,13 +101,15 @@
"eslint-plugin-jest": "^24.1.0",
"eslint-plugin-vue": "^5.0.0",
"identity-obj-proxy": "^3.0.0",
"jest": "^27.5.1",
"jsdom": "^25.0.1",
"majestic": "^1.2.24",
"minimist": "^1.2.2",
"mocha": "^8.0.1",
"mock-require": "^3.0.3",
"sass": "^1.70.0",
"sass-loader": "^10.2.1",
"sinon": "^11.1.1",
"ts-jest": "^29.2.5",
"ts-node": "^8.10.2",
"typescript": "^4.5.5",
"vue": "2.7.16",
Expand Down
7 changes: 2 additions & 5 deletions src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,6 @@ import ProfileInstallerProvider from './providers/ror2/installing/ProfileInstall
import InstallationRules from './r2mm/installing/InstallationRules';
import InstallationRuleApplicator from './r2mm/installing/default_installation_rules/InstallationRuleApplicator';
import GenericProfileInstaller from './r2mm/installing/profile_installers/GenericProfileInstaller';
import ConnectionProviderImpl from './r2mm/connection/ConnectionProviderImpl';
import ConnectionProvider from './providers/generic/connection/ConnectionProvider';
import UtilityMixin from './components/mixins/UtilityMixin.vue';
import ErrorModal from './components/modals/ErrorModal.vue';
Expand All @@ -61,7 +59,7 @@ export default class App extends mixins(UtilityMixin) {
// Load settings using the default game before the actual game is selected.
const settings: ManagerSettings = await this.$store.dispatch('resetActiveGame');
this.hookThunderstoreModListRefresh();
this.hookBackgroundUpdateThunderstoreModList();
await this.checkCdnConnection();
InstallationRuleApplicator.apply();
Expand Down Expand Up @@ -102,11 +100,10 @@ export default class App extends mixins(UtilityMixin) {
});
this.$store.commit('updateModLoaderPackageNames');
this.$store.dispatch('tsMods/updateExclusions');
}
beforeCreate() {
ConnectionProvider.provide(() => new ConnectionProviderImpl());
FsProvider.provide(() => new NodeFs());
ProfileProvider.provide(() => new ProfileImpl());
Expand Down
2 changes: 1 addition & 1 deletion src/_managerinf/ManagerInformation.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import VersionNumber from '../model/VersionNumber';

export default class ManagerInformation {
public static VERSION: VersionNumber = new VersionNumber('3.1.55');
public static VERSION: VersionNumber = new VersionNumber('3.1.56');
public static IS_PORTABLE: boolean = false;
public static APP_NAME: string = "r2modman";
}
2 changes: 1 addition & 1 deletion src/assets/data/games.json
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@
"distributions": [
{
"platform": "steam",
"identifier": "2051980"
"identifier": "1660080"
}
],
"r2modman": {
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file added src/assets/images/game_selection/MiSide.webp
Binary file not shown.
Binary file added src/assets/images/game_selection/Subterror.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
31 changes: 0 additions & 31 deletions src/components/Hero.vue

This file was deleted.

56 changes: 56 additions & 0 deletions src/components/ModListUpdateBanner.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
import R2Error from '../model/errors/R2Error';
@Component({})
export default class ModListUpdateBanner extends Vue {
get isModListLoaded(): boolean {
return this.$store.state.tsMods.modsLastUpdated !== undefined;
}
get isUpdateInProgress(): boolean {
return this.$store.state.tsMods.isThunderstoreModListUpdateInProgress;
}
get updateError(): Error|undefined {
return this.$store.state.tsMods.thunderstoreModListUpdateError;
}
async updateModList() {
await this.$store.dispatch('tsMods/syncPackageList');
}
openErrorModal() {
this.$store.commit('error/handleError', R2Error.fromThrownValue(
this.updateError,
'Error updating the mod list from Thunderstore',
));
}
}
</script>

<template>
<div v-if="!isModListLoaded" id="mod-list-update-banner" class="margin-bottom">
<div class="notification is-warning margin-right">
<span v-if="isUpdateInProgress">
{{ $store.state.tsMods.thunderstoreModListUpdateStatus }}
</span>
<span v-else-if="updateError">
Error updating the mod list.
<a @click="openErrorModal">View error details</a>.
<br />
The manager will keep trying to update the mod list in the background.
</span>
<span v-else>
An error occurred when updating the mod list from Thunderstore.
Would you like to
<a @click="updateModList">try again now</a>?
</span>
</div>
</div>
</template>

<style scoped lang="scss">
</style>
Loading

0 comments on commit 22c99ec

Please sign in to comment.