Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
953a1e9
Go fuse daemon: Skeleton, mount and unix socket connection (#303)
AlexisMora Apr 15, 2026
c3251f6
feat: Get Attributes operation + Electron 21 (#315)
AlexisMora Apr 20, 2026
bf07ed2
Merge remote-tracking branch 'origin/main' into feat/go-fuse-daemon
AlexisMora Apr 20, 2026
ac30a33
feat: add RPM as an install method and include necessary build tools …
egalvis27 Apr 21, 2026
6f56be4
feat/remove-linter-warnings (#286)
egalvis27 Apr 23, 2026
058da8a
feat(localization): remove unused translations from English, Spanish,…
egalvis27 Apr 23, 2026
fe8b5bb
Feat/move antivirus logs to new file (#304)
egalvis27 Apr 23, 2026
1312580
Refactor/auto launch app (#289)
egalvis27 Apr 23, 2026
0e82007
feat: remove non-Linux system references and clean up platform-specif…
egalvis27 Apr 23, 2026
d7b1d86
feat: implement main process bootstrap and update IPC handlers for ap…
egalvis27 Apr 23, 2026
af456c5
Chore: add golang lint + testing pipline + testing http server (#317)
AlexisMora Apr 23, 2026
1531068
feat: refactor tray menu implementation and add tests for tray (#293)
egalvis27 Apr 27, 2026
625e08a
reafctor: device service.ts (#316)
egalvis27 Apr 27, 2026
e00ae96
fix: [PB-6255] implement PendingFolderCreationTracker to manage folde…
egalvis27 Apr 27, 2026
51955b2
feat: Implement Open and OpenDir FUSE opeartions (#319)
AlexisMora Apr 28, 2026
cba73ee
read operation + blocklist processes (#321)
AlexisMora Apr 28, 2026
08bde93
feat: release operation + read tests (#323)
AlexisMora Apr 29, 2026
ac0b989
feat: add unlink and rmdir operations with corresponding controllers,…
egalvis27 Apr 29, 2026
1727771
feat: implement create and write operations with corresponding contro…
egalvis27 Apr 30, 2026
1047f76
feat: implement mkdir operation with controller, service, and tests (…
egalvis27 Apr 30, 2026
a9ea950
feat: add rename operation with controller, service, routes, and test…
egalvis27 May 5, 2026
79a4c28
Feat/add truncate callback (#326)
egalvis27 May 5, 2026
6473589
feat: update version to 2.6.0 and modify deeplink handling to use roo…
egalvis27 May 5, 2026
846e138
Feat/add statfs and fsync (#327)
egalvis27 May 6, 2026
c5611de
chore: update readme (#329)
AlexisMora May 7, 2026
96a78c3
Fix/fuse demon route (#328)
egalvis27 May 7, 2026
dc21c19
Feat: update to electron 23 (#330)
AlexisMora May 7, 2026
f52702c
Feat: upgrade electron to version 25 and enforce source compilation f…
egalvis27 May 8, 2026
8fca1a7
[PB-6217]: Implement range requests reads for hydrating virtual files…
AlexisMora May 8, 2026
9dc31ea
feat: update drive destkop linux to electron 29 and node 20 (#332)
AlexisMora May 8, 2026
a5795ed
feat: add option to disable antivirus setup via environment variable …
egalvis27 May 8, 2026
10409c8
fix: unhandled rejection on logout 'database connection already close…
AlexisMora May 8, 2026
1e6693f
feat: add NameLen field to StatFs response and update related tests (…
egalvis27 May 11, 2026
8339345
fix: remove process block (#336)
AlexisMora May 11, 2026
1a7a226
fix: update FileTrasher to call remote.trash for zero-byte files (#338)
egalvis27 May 12, 2026
d9f2bf3
fix: update write controller to handle base64 encoded file paths (#340)
egalvis27 May 12, 2026
d04b712
Feat/add thumnails range requests (#337)
egalvis27 May 12, 2026
97295c6
chore: add safe readdir and stat functions (#341)
AlexisMora May 19, 2026
a712288
feat: add deleteByFolderPath method to FileRepository and implement i…
egalvis27 May 19, 2026
7d98bbc
fix: update build pipeline and configuration for release process (#343)
egalvis27 May 19, 2026
f3f487f
Refactor error handling in backup upload and folder creation processe…
egalvis27 May 21, 2026
d5d439f
fix: improve tray menu state management to prevent rapid icon flicker…
egalvis27 May 21, 2026
fa9df0a
fix: prevent duplicate uploads by skipping release when an upload is …
egalvis27 May 26, 2026
5c71c9b
fix: correct argument structure in traverse function call within buil…
egalvis27 May 26, 2026
b22543d
fix: remove unused stopVirtualDrive import from virtual-drive service…
egalvis27 May 26, 2026
ae66c19
fix: correct argument structure in traverseMock call within buildLoca…
egalvis27 May 27, 2026
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
  •  
  •  
  •  
15 changes: 5 additions & 10 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,19 +1,14 @@
# Encryption keys used during build
CRYPTO_KEY=
MAGIC_IV=
MAGIC_SALT=
NEW_CRYPTO_KEY=

# Core API endpoints
NEW_DRIVE_URL=
DRIVE_API_URL=
PAYMENTS_URL=
INTERNXT_DESKTOP_HEADER_KEY=

BRIDGE_URL=
APP_SEGMENT_KEY=
APP_SEGMENT_KEY_TEST=
BUG_REPORTING_URL=
PAYMENTS_URL=
NOTIFICATIONS_URL=
LOCK_REFRESH_INTERVAL=

RUDDERSTACK_KEY=
RUDDERSTACK_DATA_PLANE_URL=
# Desktop client identification
INTERNXT_DESKTOP_HEADER_KEY=
1 change: 0 additions & 1 deletion .erb/configs/webpack.config.base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import webpackPaths from './webpack.paths';
// Only packages that were in release/app/package.json should be external
// These are native modules or runtime dependencies that cannot/should not be bundled
const nativeExternals = [
'@gcas/fuse',
'better-sqlite3',
'reflect-metadata',
'typeorm',
Expand Down
4 changes: 3 additions & 1 deletion .erb/configs/webpack.config.main.prod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,13 @@ const configuration: webpack.Configuration = {
},

optimization: {
chunkIds: 'deterministic',
minimizer: [
new TerserPlugin({
parallel: true,
parallel: false,
}),
],
moduleIds: 'deterministic',
},

plugins: [
Expand Down
8 changes: 6 additions & 2 deletions .erb/configs/webpack.config.renderer.prod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,13 +94,17 @@ const configuration: webpack.Configuration = {
},

optimization: {
chunkIds: 'deterministic',
minimize: true,
minimizer: [
new TerserPlugin({
parallel: true,
parallel: false,
}),
new CssMinimizerPlugin({
parallel: false,
}),
new CssMinimizerPlugin(),
],
moduleIds: 'deterministic',
},

plugins: [
Expand Down
13 changes: 5 additions & 8 deletions .erb/scripts/electron-rebuild.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,11 @@ if (
Object.keys(dependencies || {}).length > 0 &&
fs.existsSync(path.join(webpackPaths.rootPath, 'node_modules'))
) {
const electronRebuildCmd =
'./node_modules/.bin/electron-rebuild --sequential --force --types prod,dev,optional --module-dir .';
const cmd =
process.platform === 'win32'
? electronRebuildCmd.replace(/\//g, '\\')
: electronRebuildCmd;
execSync(cmd, {
execSync(
'./node_modules/.bin/electron-rebuild --sequential --force --types prod,dev,optional --module-dir .',
{
cwd: webpackPaths.rootPath,
stdio: 'inherit',
});
}
);
}
5 changes: 5 additions & 0 deletions .erb/scripts/start-main-dev.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// Electron 29 runs on Node 20, whose ESM entrypoint loader does not understand
// .ts files through the CommonJS ts-node/register hook. Keep the dev main
// process on the repo's CommonJS ts-node path by loading a JS bootstrap first.
require('ts-node/register/transpile-only');
require('../../src/apps/main/main.ts');
4 changes: 2 additions & 2 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module.exports = {
extends: ['@internxt/eslint-config-internxt'],
ignorePatterns: ['src/infra/schemas.d.ts'],
ignorePatterns: ['src/infra/schemas.d.ts', 'assets/assets.d.ts'],
overrides: [
{
files: ['*.ts', '*.tsx'],
Expand All @@ -14,7 +14,7 @@ module.exports = {
],
rules: {
'no-await-in-loop': 'warn',
'no-use-before-define': 'warn',
'@typescript-eslint/no-use-before-define': ['warn', { functions: false, classes: true, variables: true }],
'array-callback-return': 'warn',
'max-len': [
'warn', // TODO: Change back to 'error' after fixing existing violations
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/find-dead-code.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18
node-version-file: '.nvmrc'

- name: Install dependencies
run: npm ci --ignore-scripts
Expand Down
25 changes: 25 additions & 0 deletions .github/workflows/go-lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Golang Lint

on:
pull_request:
types: [opened, synchronize, reopened]

jobs:
lint:
name: 🐹 Golang Lint
runs-on: ubuntu-latest

steps:
- name: Check out Git repository
uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: packages/fuse-daemon/go.mod

- name: Run golangci-lint
uses: golangci/golangci-lint-action@v7
with:
version: v2.11.4
working-directory: packages/fuse-daemon
23 changes: 23 additions & 0 deletions .github/workflows/go-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Golang Test

on:
pull_request:
types: [opened, synchronize, reopened]

jobs:
test:
name: 🐹 Golang Test
runs-on: ubuntu-latest

steps:
- name: Check out Git repository
uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: packages/fuse-daemon/go.mod

- name: Run tests
run: go test ./...
working-directory: packages/fuse-daemon
6 changes: 3 additions & 3 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: 18
node-version-file: '.nvmrc'
cache: 'npm'

- name: Install dependencies
Expand All @@ -36,7 +36,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: 18
node-version-file: '.nvmrc'
cache: 'npm'

- name: Install dependencies
Expand All @@ -56,7 +56,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: 18
node-version-file: '.nvmrc'
cache: 'npm'

- name: Install dependencies
Expand Down
138 changes: 113 additions & 25 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,24 @@ on:
release:
types: [published]
workflow_dispatch:
inputs:
publish_to_github:
description: "Publish artifacts to GitHub release"
required: true
default: "false"
type: choice
options:
- "false"
- "true"

jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
packages: write
runs-on: ubuntu-24.04
env:
GH_TOKEN: ${{ github.token }}
GITHUB_TOKEN: ${{ github.token }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '18.x'

- name: Create .npmrc file
run: |
echo "@internxt:registry=https://npm.pkg.github.com/" > .npmrc
echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" >> .npmrc

- name: Install dependencies
run: npm ci

- name: Add .env
run: |
Expand All @@ -34,18 +31,109 @@ jobs:
echo "MAGIC_SALT=${{ secrets.MAGIC_SALT }}" >> .env
echo "NEW_CRYPTO_KEY=${{ secrets.NEW_CRYPTO_KEY }}" >> .env
echo "NEW_DRIVE_URL=https://gateway.internxt.com/drive" >> .env
echo "DRIVE_API_URL=https://gateway.internxt.com/api" >> .env
echo "PAYMENTS_URL=https://gateway.internxt.com/payments" >> .env
echo "INTERNXT_DESKTOP_HEADER_KEY=${{ secrets.INTERNXT_DESKTOP_HEADER_KEY }}" >> .env
echo "BRIDGE_URL=https://gateway.internxt.com/network" >> .env
echo "APP_SEGMENT_KEY=${{ secrets.APP_SEGMENT_KEY }}" >> .env
echo "APP_SEGMENT_KEY_TEST=${{ secrets.APP_SEGMENT_KEY_TEST }}" >> .env
echo "BUG_REPORTING_URL=https://desktop-bug-reporting.inxt.workers.dev" >> .env
echo "NOTIFICATIONS_URL=https://notifications.internxt.com" >> .env
echo "LOCK_REFRESH_INTERVAL=20000" >> .env

- name: Build app
run: npm run build
- name: Build release container image
run: docker build -f Dockerfile.release -t internxt-release-builder:24.04 .

- name: Build app inside container
run: |
if [[ -z "${GH_TOKEN}" ]]; then
echo "GH_TOKEN is empty in workflow context"
exit 1
fi

docker run --rm \
-e CI=true \
-e GH_TOKEN \
-e GITHUB_TOKEN \
-v "$PWD:/workspace" \
-w /workspace \
internxt-release-builder:24.04 \
bash -lc './scripts/run-release-build-in-container.sh'

- name: Upload artifacts for smoke tests
if: success()
uses: actions/upload-artifact@v4
with:
name: linux-release-artifacts
path: |
build/*.AppImage
build/*.deb
build/*.rpm
build/*.yml

- name: Upload build metadata
if: always()
uses: actions/upload-artifact@v4
with:
name: build-metadata
path: |
build-manifest.json
build-checksums.txt

smoke-test-deb:
needs: build
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04, ubuntu-latest]
steps:
- name: Download release artifacts
uses: actions/download-artifact@v4
with:
name: linux-release-artifacts
path: build

- name: Install runtime dependencies
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends xvfb

- name: Install deb package for smoke test
run: |
sudo dpkg -i --force-depends build/*.deb
test -x /opt/Internxt/internxt

- name: Start app in headless mode
run: |
xvfb-run -a /opt/Internxt/internxt --no-sandbox --version &
APP_PID=$!
sleep 5 # Allow app to initialize
kill $APP_PID

publish-release:
needs: smoke-test-deb
if: ${{ github.event_name == 'release' || (github.event_name == 'workflow_dispatch' && inputs.publish_to_github == 'true' && startsWith(github.ref, 'refs/tags/')) }}
runs-on: ubuntu-24.04
env:
GH_TOKEN: ${{ github.token }}
GITHUB_TOKEN: ${{ github.token }}
permissions:
contents: write
steps:
- name: Validate GitHub token availability
run: |
if [[ -z "${GH_TOKEN}" ]]; then
echo "GH_TOKEN is empty in publish-release context"
exit 1
fi

- name: Publish app
run: npm run publish
- name: Download tested artifacts
uses: actions/download-artifact@v4
with:
name: linux-release-artifacts
path: build

- name: Publish tested artifacts to GitHub release
uses: softprops/action-gh-release@v2
with:
files: |
build/*.AppImage
build/*.deb
build/*.rpm
build/*.yml
4 changes: 2 additions & 2 deletions .github/workflows/sonar-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ jobs:
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 18
node-version-file: '.nvmrc'

- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libfuse2 libgtk-3-0 libnotify4 libnss3 libxss1 libxtst6 xdg-utils libatspi2.0-0 libdrm2 libgbm1 libasound2t64
sudo apt-get install -y libgtk-3-0 libnotify4 libnss3 libxss1 libxtst6 xdg-utils libatspi2.0-0 libdrm2 libgbm1 libasound2t64
- name: Install dependencies
run: npm ci --ignore-scripts
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: 18
node-version-file: '.nvmrc'
cache: 'npm'

- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libfuse2 libgtk-3-0 libnotify4 libnss3 libxss1 libxtst6 xdg-utils libatspi2.0-0 libdrm2 libgbm1 libasound2t64
sudo apt-get install -y libgtk-3-0 libnotify4 libnss3 libxss1 libxtst6 xdg-utils libatspi2.0-0 libdrm2 libgbm1 libasound2t64

- name: Install dependencies
run: npm ci --ignore-scripts
Expand All @@ -47,7 +47,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: 18
node-version-file: '.nvmrc'
cache: 'npm'

- name: Install dependencies
Expand Down
Loading
Loading