Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
129 commits
Select commit Hold shift + click to select a range
16ca82c
added per second queue tick to download manager + better slot management
Jun 30, 2025
7c56c70
improved dependency graph algorithm
Jun 30, 2025
bf5fabc
several changes to how we process the download queue tick
Jul 1, 2025
e820e34
fixing progress callback not restarting workers
Jul 2, 2025
e5f0cf5
added starvation tick detection
Jul 10, 2025
92cd9d9
(WIP) - fixed tick queue restart downloads
Jul 29, 2025
20dbe26
filter out nullish dependencies
Jul 29, 2025
9b041f1
improved attempts to resume downloads with temporary errors
Jul 30, 2025
bf580d5
further I/O error resume attempt work
Jul 30, 2025
4d25166
further modifications to tick queue
Jul 30, 2025
590ed3e
fixed download restarts
Jul 30, 2025
72a7eee
adding caching to downloadUrl API calls + attributes
Aug 4, 2025
ff8b0b1
progress update state dispatches are now batched
Aug 4, 2025
32be48b
Additional improvements to download manager
Aug 7, 2025
2636fe8
download finalization is no longer blocking new downloads
Aug 7, 2025
74b643f
non-blocking metadata lookup
Aug 7, 2025
3f4ec6d
better control and tracking of metadata queries
Aug 7, 2025
403de6c
non-blocking download move operations for metadata lookups
Aug 7, 2025
9456843
modified set-download-games event to bypass blocking move action
Aug 7, 2025
e8ff632
Added ability to fire file/mod api requests concurrently
Aug 7, 2025
2b7f1d4
raised download concurrency limiter to 5
Aug 7, 2025
24b0328
updating dependencies + better metadata lookup on install
Aug 12, 2025
464f2a3
improved overall download restart capability + error handling
Aug 12, 2025
435d3a9
ensure we use internal vortex id for file assembler
Aug 12, 2025
2c38dfe
more vortex internal id stuff + ability to query free slots
Aug 12, 2025
4f39d88
adding ability to add sockets to multiple fomod installer instances
Aug 12, 2025
85ec84a
multiple fixes related to concurrent mod installation
Aug 12, 2025
f03190f
added sanity check when attempting to start download installation
Aug 12, 2025
7fb863a
additional sanity checks around internal gameId resolution
Aug 12, 2025
5086893
fixed build issue
Aug 13, 2025
3935a7b
improved fomod-installer stability + concurrent installations
Aug 19, 2025
de7b8db
updated dependencies + fixed weird build issue
Aug 19, 2025
271fbb3
defer potentially ui blocking actions to decrease stutter
Aug 19, 2025
69379c8
deferring observer finalization + progress to decrease stutter
Aug 19, 2025
a7f9ddf
defer redux actions to prevent blocking metadata query
Aug 19, 2025
aaa274d
fixed race condition on metadata response move operation
Aug 19, 2025
42f6d95
cleanup + adding debug functions (use in console)
Aug 19, 2025
9cda530
fixed mod installation potentially using nexus domain instead of inte…
Aug 19, 2025
bd476c7
cleanup
Aug 19, 2025
606f87b
improved attribute extractor timeout identification
Aug 19, 2025
4c7bb9e
removed redundant download gameId conversion
Aug 19, 2025
e7dece7
now using GraphQL for mod downloads
Aug 19, 2025
0a162d0
updated modmetadb dependency
Aug 19, 2025
956072b
reduce delay once a download is finished
Aug 19, 2025
af05134
avoid looking up metadata using filePath
Aug 19, 2025
d93cc51
consolidated md5 checkup functionality
Aug 19, 2025
5eb7a29
use native module for md5 checksums
Aug 19, 2025
0f6e95b
use api md5 functionality upon download finalization
Aug 19, 2025
732bd63
fixing build error
Aug 19, 2025
a9e1a5c
main and submodules
ErikVeland Aug 20, 2025
378a2d6
Update submodule references
ErikVeland Aug 20, 2025
b06ed25
Update project configuration for macOS experimental development
ErikVeland Aug 25, 2025
112fc0f
Fix splash screen and icon
ErikVeland-News Aug 29, 2025
7caac7d
build: Optimize BuildSubprojects.js and add skip emoji
ErikVeland Sep 1, 2025
d484132
feat: Comprehensive build process optimizations and improvements
ErikVeland Sep 1, 2025
d54aabf
Improve BuildSubprojects.js: Fix glob timeout and enhance user feedback
ErikVeland Sep 1, 2025
ff590d6
feat(macos): Complete macOS port stabilization and theme system
ErikVeland Sep 2, 2025
3843309
chore(submodules): Update submodule commits for macOS compatibility
ErikVeland Sep 2, 2025
eeef4bc
chore(submodules): Final submodule updates for complete macOS support
ErikVeland Sep 2, 2025
a6d4161
chore(submodules): Complete all extension updates for macOS port
ErikVeland Sep 2, 2025
cd7e6cd
Ensure submodules are on correct macos-experimental branches
ErikVeland Sep 3, 2025
bb9ec2c
Fix SASS compilation errors by replacing math.div() calls with standa…
ErikVeland Sep 3, 2025
ddd9843
feat: Improve build system and SASS compilation compatibility
ErikVeland Sep 5, 2025
ad72c32
chore: Update submodule references for macOS compatibility
ErikVeland Sep 5, 2025
71b8966
Fix submodules post git interactions to avoid detached head
ErikVeland-News Sep 5, 2025
0a1b09f
chore(bundledPlugins): import details.scss for documentation popover …
ErikVeland Sep 7, 2025
d9be980
chore(submodules): update submodule pointers after macOS fixes
ErikVeland Sep 7, 2025
c34e4b1
changes done
ErikVeland Sep 8, 2025
9c86add
Stable state prior to further Mac enhancements
ErikVeland-News Sep 8, 2025
a59f9b7
Add macOS platform support files and documentation
ErikVeland Sep 10, 2025
c970b2d
chore(scripts): add push_macos_branches.sh and yarn script
ErikVeland Sep 10, 2025
3229efe
chore(git): ignore extension submodule changes and exclude IDE/build …
ErikVeland Sep 10, 2025
86369f4
chore(git): broaden ignore rules (IDE folders, env files, caches, OS/…
ErikVeland Sep 10, 2025
fca7721
chore(git): add macOS, VS Code, and package-manager ignores
ErikVeland Sep 10, 2025
addf67c
chore(scripts): add sweep_and_push_all.sh with dry-run and wire into …
ErikVeland Sep 10, 2025
758251e
chore(repo): sweep and commit untracked changes
ErikVeland Sep 10, 2025
3691a9a
Sweep all submodules to commit changes and push to my fork
ErikVeland-News Sep 10, 2025
c5ebd8a
Improved OAuth flow and error handling
ErikVeland-News Sep 10, 2025
507efec
Optimised and hardened OAuth flow
ErikVeland-News Sep 10, 2025
4c1fdda
Removes preview content from logs
ErikVeland-News Sep 10, 2025
bb3658b
feat: Enhances macOS game support and UI
ErikVeland-News Sep 12, 2025
5064c49
macOS: stabilize renderer style initialization and add platform text …
ErikVeland Sep 12, 2025
5763e49
chore(submodules): update pointers to latest submodule commits
ErikVeland Sep 12, 2025
c14c6dd
macOS Support for installing extensions (ongoing)
ErikVeland Sep 16, 2025
d70335a
Fixes macOS discovery and adds notifications
ErikVeland-News Sep 17, 2025
792814e
Remove test script
ErikVeland-News Sep 17, 2025
10b3aac
chore(submodules): update pointers to latest submodule commits
ErikVeland Sep 17, 2025
40225c6
Adds submodule remote preservation
ErikVeland-News Sep 17, 2025
144a297
Add macOS-specific utilities and update project configuration
ErikVeland Sep 17, 2025
d6bf446
Reset all submodules to September 17, 2025 state
ErikVeland Sep 19, 2025
4b21bdd
Add macOS-specific utilities and update project configuration
ErikVeland Sep 17, 2025
0f768d0
Fixes macOS compatibility and extension loading
ErikVeland-News Sep 18, 2025
0d79d95
chore(submodules): update pointers to latest submodule commits
ErikVeland Sep 23, 2025
669cc4f
Cleaned and up to date with macOS compatibility changes across all
ErikVeland Sep 23, 2025
700bc3d
Reset core CSS files
ErikVeland-News Sep 23, 2025
82f0d96
Managing games functioning
ErikVeland-News Sep 23, 2025
709e63b
More compatibility
ErikVeland-News Sep 23, 2025
63e067c
MacOS "Niceties"
ErikVeland-News Sep 24, 2025
4720352
Fix build issues and gitmodules
ErikVeland-News Sep 24, 2025
51f9455
Handle new versions of drivelist
ErikVeland-News Sep 24, 2025
1fea7c8
Not stable: Niceties (not needed)
ErikVeland-News Sep 24, 2025
220a69c
chore(submodules): update pointers to latest submodule commits
ErikVeland Oct 1, 2025
3d29d70
chore(repo): sweep and commit untracked changes
ErikVeland Oct 1, 2025
d4daaef
Stable through full clean process
ErikVeland-News Sep 25, 2025
7e06942
Stable: Improving community extension handling
ErikVeland-News Sep 25, 2025
09e6580
Better Balatro support
ErikVeland-News Sep 25, 2025
08df49c
Filter Mac compatible games
ErikVeland-News Sep 26, 2025
3d79b4b
Further filtering improvements
ErikVeland-News Sep 26, 2025
8af279a
Stable: macOS Filtering working
ErikVeland-News Sep 30, 2025
9c376b4
Cherry-pick auto-updater improvements: Add emojis to console logs and…
ErikVeland Sep 30, 2025
11afae1
Cherry-pick auto-updater improvements from experimental branch
ErikVeland Sep 30, 2025
334a9e4
Stable: Working on extension installation pipeline
ErikVeland-News Oct 1, 2025
052aede
Removed patching of drivelist since we are skipping it
ErikVeland-News Oct 1, 2025
d1e6433
chore(submodules): update pointers to latest submodule commits
ErikVeland Oct 1, 2025
9abc0fa
New Sweep
ErikVeland-News Oct 1, 2025
1d2938f
Stable: Rebased on refactor / Node 22
ErikVeland-News Oct 2, 2025
d986445
chore(submodules): consolidated sweep to latest on 'erik' upstream
ErikVeland Oct 2, 2025
1d26c43
Stable: Extensions refactored for Node 22
ErikVeland-News Oct 4, 2025
bd79f97
Stable: Further Node 22 refactor
ErikVeland-News Oct 5, 2025
d6d7199
Stable: Fix Jest tests
ErikVeland-News Oct 7, 2025
e0f3444
Stable: Better download → Extraction lifecycle
ErikVeland-News Oct 8, 2025
125b94c
Experimental-macos: Improves macOS compatibility
ErikVeland-News Oct 8, 2025
5ed64fe
Stable: Extension now correctly resolves and discovers game (on 2nd try)
ErikVeland-News Oct 8, 2025
36487b8
Stable: Game verification at launch
ErikVeland-News Oct 9, 2025
97f30a1
Semi-Stable: Reset reverse bluebird migration
ErikVeland-News Oct 13, 2025
b756a47
Stable: Node 22 migration
ErikVeland Oct 19, 2025
3a625c1
Style debug
ErikVeland-News Oct 20, 2025
097b428
Stable: (Theme not rendering)
ErikVeland-News Oct 20, 2025
3edb04a
Unstable: Detached HEADs?
ErikVeland-News Oct 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 7 additions & 0 deletions .babelrc
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@
"presets": ["react-optimize"],
"plugins": [
]
},
"test": {
"presets": ["@babel/react", "@babel/env", "@babel/preset-typescript"],
"plugins": [
"@babel/proposal-class-properties",
"@babel/proposal-object-rest-spread"
]
}
}
}
3 changes: 2 additions & 1 deletion .eslintignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
*.d.ts
*.d.ts
src/validationCode/*.validate.js
15 changes: 15 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
const isCI = process.env.CI === 'true';

module.exports = {
"env": {
"browser": true,
Expand All @@ -21,6 +23,11 @@ module.exports = {
"react",
"@typescript-eslint"
],
"settings": {
"react": {
"version": "detect"
}
},
"rules": {
// If you are reading this your are probably wondering why we got so many warnings
// To put it simple, we used TSLint, and when we moved to ESLint we did not want to to auto fix all the errors
Expand Down Expand Up @@ -140,6 +147,14 @@ module.exports = {
"ignoreComments": true,
}
],
// Flag TODO/FIXME comments (error in CI, warn locally)
"no-warning-comments": [
isCI ? "error" : "warn",
{
"terms": ["todo", "fixme"],
"location": "anywhere"
}
],
},
"overrides": [
{
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '18.17.1'
node-version: '22.x'
cache: "yarn"

- name: Install dependencies
Expand Down
232 changes: 232 additions & 0 deletions .github/workflows/package-macos.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
name: Package macOS

on:
workflow_dispatch:
inputs:
version:
description: "The version to release (eg: 'v1.0.0')"
required: true
type: string
create-artifacts:
description: "Create artifacts?"
required: true
type: boolean
default: true
codesign:
description: "Codesign?"
required: false
type: boolean
default: false
notarize:
description: "Notarize?"
required: false
type: boolean
default: false
release:
description: "Create a draft release?"
required: false
type: boolean
default: true
staging-release:
description: "Create a draft staging release?"
required: false
type: boolean
default: true

env:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}

jobs:
build:
runs-on: macos-latest
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true # Allows AddPAth and SetEnv commands
DEBUG: electron-builder # gives electron more verbose logs

strategy:
matrix:
node-version: [22.x]
architecture: [x64, arm64]

steps:
- name: Show Inputs
run: echo "${{ toJSON(github.event.inputs) }}"

- name: Set Outputs
id: setOutputs
shell: bash
env:
InputVersion: ${{ inputs.version }}
GITHUB_RUN_NUMBER: ${{ github.run_number }}
ARCHITECTURE: ${{ matrix.architecture }}
run: |
semverRegex='^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(?:-((?:0|[1-9][0-9]*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9][0-9]*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$'
tagVersion=$(echo "$InputVersion" | sed 's/^v//')
rawVersion=$(echo "$InputVersion" | sed 's/^v//')
# validation
if ! echo "$rawVersion" | grep -qE "$semverRegex"; then
echo "Invalid version format. Must be semver."
exit 1
fi
echo "tagVersion=v$tagVersion" >> $GITHUB_OUTPUT
echo "rawVersion=$rawVersion" >> $GITHUB_OUTPUT
echo "artifactNameDMG=vortex-$rawVersion-mac-$ARCHITECTURE.dmg" >> $GITHUB_OUTPUT
echo "artifactNameZIP=vortex-$rawVersion-mac-$ARCHITECTURE.zip" >> $GITHUB_OUTPUT
echo "epicBuildString=$rawVersion+$GITHUB_RUN_NUMBER" >> $GITHUB_OUTPUT

- name: Get current time
uses: josStorer/get-current-time@v2
id: current-time
with:
format: 'YYYY-MM-DD HHmm'

- name: Use current time
env:
TIME: "${{ steps.current-time.outputs.time }}"
R_TIME: "${{ steps.current-time.outputs.readableTime }}"
F_TIME: "${{ steps.current-time.outputs.formattedTime }}"
YEAR: "${{ steps.current-time.outputs.year }}"
DAY: "${{ steps.current-time.outputs.day }}"
run: echo $TIME $R_TIME $F_TIME $YEAR $DAY

- uses: actions/checkout@v4
with:
submodules: "recursive"

- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: "yarn"
architecture: ${{ matrix.architecture }}

- name: Install dependencies
run: yarn --frozen-lockfile --network-timeout 600000 install

- name: Install Xcode command line tools
run: |
sudo xcode-select --install || true
sudo xcodebuild -runFirstLaunch

- name: Build API
run: yarn --non-interactive build_api

- name: Build Install
run: yarn --non-interactive _install_app

- name: Build Subprojects
run: yarn --non-interactive subprojects_app

- name: Build Assets
run: yarn --non-interactive _assets_app

- name: Webpack
run: yarn build_dist

- name: Package (without codesigning)
if: ${{ inputs.codesign != true }}
run: yarn package

- name: Package (with codesigning)
if: ${{ inputs.codesign == true }}
run: yarn package
env:
CSC_LINK: ${{ secrets.CSC_LINK }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}

- name: Notarize
if: ${{ inputs.notarize == true }}
run: |
# Create ZIP for notarization
ditto -c -k --keepParent dist/mac/Vortex.app dist/mac/Vortex.zip

# Submit for notarization
xcrun notarytool submit dist/mac/Vortex.zip \
--apple-id "$APPLE_ID" \
--password "$APPLE_ID_PASSWORD" \
--team-id "$APPLE_TEAM_ID" \
--wait

# Staple the notarization ticket
xcrun stapler staple dist/mac/Vortex.app
env:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}

- name: Extract Sourcemaps
run: yarn extract_sourcemaps

- name: Test
run: yarn test

- name: Verify Code Signing
run: |
codesign --verify --deep --strict --verbose=2 dist/mac/Vortex.app

- name: Verify Notarization
if: ${{ inputs.notarize == true }}
run: |
spctl --assess --type exec --verbose dist/mac/Vortex.app

- name: Create SHA256 Checksums
run: |
shasum -a 256 dist/mac/*.dmg > dist/mac/checksums.txt
shasum -a 256 dist/mac/*.zip >> dist/mac/checksums.txt

- name: Release
uses: softprops/[email protected]
if: ${{ inputs.release == true }}
with:
files: |
./dist/mac/*.dmg
./dist/mac/*.zip
./dist/mac/checksums.txt
prerelease: true
draft: true
name: ${{ steps.setOutputs.outputs.rawVersion }}-macOS-${{ matrix.architecture }}
tag_name: ${{ steps.setOutputs.outputs.tagVersion }}-macOS-${{ matrix.architecture }}

- name: Staging Release
uses: softprops/[email protected]
if: ${{ inputs.staging-release == true }}
with:
files: |
./dist/mac/*.dmg
./dist/mac/*.zip
./dist/mac/checksums.txt
prerelease: true
draft: true
name: ${{ steps.setOutputs.outputs.rawVersion }}-macOS-${{ matrix.architecture }}
tag_name: ${{ steps.setOutputs.outputs.tagVersion }}-macOS-${{ matrix.architecture }}
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
repository: "Nexus-Mods/Vortex-Staging"

- name: Create DMG Artifact
uses: actions/upload-artifact@v4
if: ${{ inputs.create-artifacts == true }}
with:
name: ${{ steps.setOutputs.outputs.artifactNameDMG }}
path: ./dist/mac/*.dmg
if-no-files-found: error

- name: Create ZIP Artifact
uses: actions/upload-artifact@v4
if: ${{ inputs.create-artifacts == true }}
with:
name: ${{ steps.setOutputs.outputs.artifactNameZIP }}
path: ./dist/mac/*.zip
if-no-files-found: error

- name: Create Checksums Artifact
uses: actions/upload-artifact@v4
if: ${{ inputs.create-artifacts == true }}
with:
name: vortex-${{ steps.setOutputs.outputs.rawVersion }}-mac-${{ matrix.architecture }}-checksums
path: ./dist/mac/checksums.txt
if-no-files-found: error
4 changes: 2 additions & 2 deletions .github/workflows/package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '18.17.1'
node-version: '22.x'
cache: "yarn"

- name: Install dependencies
Expand Down Expand Up @@ -261,4 +261,4 @@ jobs:
path: |
./dist/vortex-setup-*.*.*.exe
./dist/latest.yml
if-no-files-found: error
if-no-files-found: error
Loading