Compare commits

..

70 commits

Author SHA1 Message Date
Ravinou
0a10003b43 chore: 🧹 remove old package-lock.yml (pnpm migration) 2026-03-01 10:46:44 +01:00
Ravinou
3316be7b3c feat: default select first repo in wizard 2026-03-01 10:46:44 +01:00
Ravinou
3772949fdb chore: 🧹 update packages 2026-03-01 10:15:49 +01:00
Ravinou
80b440e2b9 chore: 🧹 update packages 2026-03-01 09:31:36 +01:00
dependabot[bot]
d7487fbc4a chore(deps-dev): bump @types/node from 25.0.6 to 25.0.9
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 25.0.6 to 25.0.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 25.0.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-24 13:34:02 +01:00
dependabot[bot]
4b76223097 chore(deps): bump next from 16.1.1 to 16.1.3
Bumps [next](https://github.com/vercel/next.js) from 16.1.1 to 16.1.3.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v16.1.1...v16.1.3)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 16.1.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-24 13:33:51 +01:00
dependabot[bot]
735a043858 chore(deps-dev): bump eslint-config-next from 16.1.1 to 16.1.3
Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 16.1.1 to 16.1.3.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/commits/v16.1.3/packages/eslint-config-next)

---
updated-dependencies:
- dependency-name: eslint-config-next
  dependency-version: 16.1.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-24 12:50:42 +01:00
Ravinou
0f2a4a716f chore: 🧹 update packages 2026-01-18 13:01:24 +01:00
Ravinou
29ca7dfeec feat: switches borg serve restriction to use --restrict-to-repository 2026-01-18 12:27:38 +01:00
dependabot[bot]
1ddaa0f648 chore(deps): bump nodemailer and @types/nodemailer
Bumps [nodemailer](https://github.com/nodemailer/nodemailer) and [@types/nodemailer](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/nodemailer). These dependencies needed to be updated together.

Updates `nodemailer` from 7.0.11 to 7.0.12
- [Release notes](https://github.com/nodemailer/nodemailer/releases)
- [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodemailer/nodemailer/compare/v7.0.11...v7.0.12)

Updates `@types/nodemailer` from 7.0.4 to 7.0.5
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/nodemailer)

---
updated-dependencies:
- dependency-name: nodemailer
  dependency-version: 7.0.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: "@types/nodemailer"
  dependency-version: 7.0.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-18 11:21:27 +01:00
Ravinou
577fdbcd68 docker: 🐳 improve logs 2026-01-18 10:14:14 +01:00
dependabot[bot]
836450e8db chore(deps-dev): bump @types/react from 19.2.7 to 19.2.8
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.2.7 to 19.2.8.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.2.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-18 10:02:19 +01:00
dependabot[bot]
efd7083463 chore(deps): bump react-hook-form from 7.68.0 to 7.71.0
Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.68.0 to 7.71.0.
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.68.0...v7.71.0)

---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-version: 7.71.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-18 10:01:45 +01:00
dependabot[bot]
187f9839f3 chore(deps-dev): bump vitest from 4.0.16 to 4.0.17
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 4.0.16 to 4.0.17.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.17/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-version: 4.0.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-18 10:01:17 +01:00
dependabot[bot]
afa5c9bb1f chore(deps-dev): bump @types/node from 25.0.3 to 25.0.6
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 25.0.3 to 25.0.6.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 25.0.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-18 09:58:52 +01:00
Ravinou
a1bd3deb1d fix: 🐛 trim ssh public key value in textarea #599 2026-01-09 13:21:36 +01:00
dependabot[bot]
8f7be1d14e chore(deps-dev): bump @commitlint/config-conventional
Bumps [@commitlint/config-conventional](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/config-conventional) from 20.2.0 to 20.3.1.
- [Release notes](https://github.com/conventional-changelog/commitlint/releases)
- [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/config-conventional/CHANGELOG.md)
- [Commits](https://github.com/conventional-changelog/commitlint/commits/v20.3.1/@commitlint/config-conventional)

---
updated-dependencies:
- dependency-name: "@commitlint/config-conventional"
  dependency-version: 20.3.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-09 12:53:46 +01:00
dependabot[bot]
42cca2763f chore(deps-dev): bump vitest from 4.0.15 to 4.0.16
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 4.0.15 to 4.0.16.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.16/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-version: 4.0.16
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-09 12:51:33 +01:00
dependabot[bot]
916b562f73 chore(deps-dev): bump eslint-config-next from 16.0.10 to 16.1.1
Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 16.0.10 to 16.1.1.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/commits/v16.1.1/packages/eslint-config-next)

---
updated-dependencies:
- dependency-name: eslint-config-next
  dependency-version: 16.1.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-09 12:51:21 +01:00
dependabot[bot]
e34037ebce chore(deps-dev): bump @commitlint/cli from 20.3.0 to 20.3.1
Bumps [@commitlint/cli](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/cli) from 20.3.0 to 20.3.1.
- [Release notes](https://github.com/conventional-changelog/commitlint/releases)
- [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/cli/CHANGELOG.md)
- [Commits](https://github.com/conventional-changelog/commitlint/commits/v20.3.1/@commitlint/cli)

---
updated-dependencies:
- dependency-name: "@commitlint/cli"
  dependency-version: 20.3.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-09 12:51:09 +01:00
dependabot[bot]
c819521b05 chore(deps): bump swr from 2.3.7 to 2.3.8
Bumps [swr](https://github.com/vercel/swr) from 2.3.7 to 2.3.8.
- [Release notes](https://github.com/vercel/swr/releases)
- [Commits](https://github.com/vercel/swr/compare/v2.3.7...v2.3.8)

---
updated-dependencies:
- dependency-name: swr
  dependency-version: 2.3.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-09 12:50:59 +01:00
Ravinou
c5e99cabe5 chore: 🧹 pipeline improvements 2026-01-08 15:34:17 +01:00
Ravinou
079bf35d87 chore: 🧹 migrate from npm to pnpm package manager 2026-01-08 13:58:08 +01:00
Hobbabobba
14dc526177 typo 2026-01-08 13:01:58 +01:00
Hobbabobba
9d6211b0aa adjusted to new version of borgmatic
example configuration of borgmatic adjusted
2026-01-08 13:01:58 +01:00
Ravinou
3fcd39cf40
Merge pull request #602 from Ravinou/dependabot/npm_and_yarn/types/bcryptjs-3.0.0
chore(deps-dev): bump @types/bcryptjs from 2.4.6 to 3.0.0
2026-01-08 12:56:08 +01:00
Ravinou
85b9ccaf04
🥇 Thanking a new sponsor 🥇
Thank you very much @daschmidt1994 for sponsoring ! This commit is dedicated to thanking you. You give me strength to continue the work! ❤️
2026-01-08 12:54:56 +01:00
dependabot[bot]
d944a70497
chore(deps-dev): bump @types/bcryptjs from 2.4.6 to 3.0.0
Bumps [@types/bcryptjs](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/bcryptjs) from 2.4.6 to 3.0.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/bcryptjs)

---
updated-dependencies:
- dependency-name: "@types/bcryptjs"
  dependency-version: 3.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-08 11:44:03 +00:00
Ravinou
961d30354d
Merge pull request #612 from Ravinou/dependabot/npm_and_yarn/commitlint/cli-20.3.0
chore(deps-dev): bump @commitlint/cli from 20.2.0 to 20.3.0
2026-01-08 12:36:38 +01:00
Ravinou
ccfb21a790
Merge pull request #611 from Ravinou/dependabot/npm_and_yarn/types/node-25.0.3
chore(deps-dev): bump @types/node from 24.10.2 to 25.0.3
2026-01-08 12:36:07 +01:00
Ravinou
3925c8ab8c
Merge pull request #613 from Ravinou/dependabot/npm_and_yarn/tabler/icons-react-3.36.1
chore(deps): bump @tabler/icons-react from 3.35.0 to 3.36.1
2026-01-08 12:35:42 +01:00
Ravinou
1faa710105
Merge pull request #614 from Ravinou/dependabot/npm_and_yarn/next-16.1.1
chore(deps): bump next from 16.0.7 to 16.1.1
2026-01-08 12:35:18 +01:00
dependabot[bot]
2db5e65f9a
chore(deps): bump next from 16.0.7 to 16.1.1
Bumps [next](https://github.com/vercel/next.js) from 16.0.7 to 16.1.1.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v16.0.7...v16.1.1)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 16.1.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-02 19:07:46 +00:00
dependabot[bot]
5bb148459c
chore(deps): bump @tabler/icons-react from 3.35.0 to 3.36.1
Bumps [@tabler/icons-react](https://github.com/tabler/tabler-icons/tree/HEAD/packages/icons-react) from 3.35.0 to 3.36.1.
- [Release notes](https://github.com/tabler/tabler-icons/releases)
- [Commits](https://github.com/tabler/tabler-icons/commits/v3.36.1/packages/icons-react)

---
updated-dependencies:
- dependency-name: "@tabler/icons-react"
  dependency-version: 3.36.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-02 19:07:29 +00:00
dependabot[bot]
9981b81cf1
chore(deps-dev): bump @commitlint/cli from 20.2.0 to 20.3.0
Bumps [@commitlint/cli](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/cli) from 20.2.0 to 20.3.0.
- [Release notes](https://github.com/conventional-changelog/commitlint/releases)
- [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/cli/CHANGELOG.md)
- [Commits](https://github.com/conventional-changelog/commitlint/commits/v20.3.0/@commitlint/cli)

---
updated-dependencies:
- dependency-name: "@commitlint/cli"
  dependency-version: 20.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-02 19:07:21 +00:00
dependabot[bot]
a240f66e90
chore(deps-dev): bump @types/node from 24.10.2 to 25.0.3
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 24.10.2 to 25.0.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 25.0.3
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-02 19:07:09 +00:00
Ravinou
12be382b75
Merge pull request #606 from Ravinou/dependabot/npm_and_yarn/eslint-9.39.2
chore(deps-dev): bump eslint from 9.39.1 to 9.39.2
2026-01-02 11:59:31 +01:00
Ravinou
311fb04c34
Merge pull request #610 from Ravinou/dependabot/npm_and_yarn/react-dom-19.2.3
chore(deps): bump react-dom from 19.2.1 to 19.2.3
2026-01-02 11:59:07 +01:00
Ravinou
abe1fd74e0
Merge pull request #603 from Ravinou/dependabot/npm_and_yarn/commitlint/cli-20.2.0
chore(deps-dev): bump @commitlint/cli from 20.1.0 to 20.2.0
2026-01-02 11:58:45 +01:00
dependabot[bot]
4d3336ff97
chore(deps): bump react-dom from 19.2.1 to 19.2.3
Bumps [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) from 19.2.1 to 19.2.3.
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.3/packages/react-dom)

---
updated-dependencies:
- dependency-name: react-dom
  dependency-version: 19.2.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-29 19:07:05 +00:00
dependabot[bot]
9e6df1e5b3
chore(deps-dev): bump @commitlint/cli from 20.1.0 to 20.2.0
Bumps [@commitlint/cli](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/cli) from 20.1.0 to 20.2.0.
- [Release notes](https://github.com/conventional-changelog/commitlint/releases)
- [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/cli/CHANGELOG.md)
- [Commits](https://github.com/conventional-changelog/commitlint/commits/v20.2.0/@commitlint/cli)

---
updated-dependencies:
- dependency-name: "@commitlint/cli"
  dependency-version: 20.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-29 17:57:55 +00:00
dependabot[bot]
897152d7fc
chore(deps-dev): bump eslint from 9.39.1 to 9.39.2
Bumps [eslint](https://github.com/eslint/eslint) from 9.39.1 to 9.39.2.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.39.1...v9.39.2)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.39.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-29 17:57:09 +00:00
Ravinou
3ccf5abc3d
Merge pull request #601 from Ravinou/dependabot/npm_and_yarn/commitlint/config-conventional-20.2.0
chore(deps-dev): bump @commitlint/config-conventional from 20.0.0 to 20.2.0
2025-12-29 18:56:38 +01:00
Ravinou
02cd028c40
Merge pull request #607 from Ravinou/dependabot/npm_and_yarn/eslint-config-next-16.0.10
chore(deps-dev): bump eslint-config-next from 16.0.7 to 16.0.10
2025-12-29 18:55:54 +01:00
Ravinou
5636142104
Merge pull request #598 from Ravinou/dependabot/github_actions/actions/checkout-6
chore(deps): bump actions/checkout from 4 to 6
2025-12-29 18:55:41 +01:00
Ravinou
7c1790eb8c
Merge pull request #581 from Ravinou/dependabot/github_actions/actions/setup-node-6
chore(deps): bump actions/setup-node from 4 to 6
2025-12-29 18:55:19 +01:00
dependabot[bot]
904fa5928b
chore(deps-dev): bump eslint-config-next from 16.0.7 to 16.0.10
Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 16.0.7 to 16.0.10.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/commits/v16.0.10/packages/eslint-config-next)

---
updated-dependencies:
- dependency-name: eslint-config-next
  dependency-version: 16.0.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-15 19:09:11 +00:00
dependabot[bot]
446e75d7aa
chore(deps-dev): bump @commitlint/config-conventional
Bumps [@commitlint/config-conventional](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/config-conventional) from 20.0.0 to 20.2.0.
- [Release notes](https://github.com/conventional-changelog/commitlint/releases)
- [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/config-conventional/CHANGELOG.md)
- [Commits](https://github.com/conventional-changelog/commitlint/commits/v20.2.0/@commitlint/config-conventional)

---
updated-dependencies:
- dependency-name: "@commitlint/config-conventional"
  dependency-version: 20.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-15 12:15:18 +00:00
Ravinou
cf7b43625c
Merge pull request #605 from Ravinou/dependabot/npm_and_yarn/types/node-24.10.2
chore(deps-dev): bump @types/node from 24.10.1 to 24.10.2
2025-12-15 13:14:11 +01:00
dependabot[bot]
d201b290e9
chore(deps-dev): bump @types/node from 24.10.1 to 24.10.2
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 24.10.1 to 24.10.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.10.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-09 19:09:28 +00:00
dependabot[bot]
7b8c4d6017
chore(deps): bump actions/setup-node from 4 to 6
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4 to 6.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-07 16:38:16 +00:00
dependabot[bot]
13872ed29e
chore(deps): bump actions/checkout from 4 to 6
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-07 16:37:41 +00:00
Ravinou
90506c0827
🥇 Thanking a new sponsor 🥇
Thank you very much @shrippen for sponsoring ! This commit is dedicated to thanking you. You give me strength to continue the work! ❤️
2025-12-04 22:14:06 +01:00
Ravinou
9c267e75ec
publish: 📦 version 3.1.2 2025-12-04 21:59:16 +01:00
Ravinou
d9a8ecf70b
Merge pull request #600 from Ravinou/updates
chore: 🧹 update dependencies
2025-12-04 21:56:07 +01:00
Ravinou
2ce7232849
refactor: migrates to the new ESLint configuration 2025-12-04 21:47:29 +01:00
Ravinou
3ff2ace3bb
chore: 🧹 update dependencies 2025-12-04 20:47:39 +01:00
Ravinou
d5e8064348
Merge pull request #573 from Ravinou/dependabot/npm_and_yarn/react-hook-form-7.63.0
chore(deps): bump react-hook-form from 7.60.0 to 7.63.0
2025-10-02 20:05:06 +02:00
dependabot[bot]
dbe7b4081e
chore(deps): bump react-hook-form from 7.60.0 to 7.63.0
Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.60.0 to 7.63.0.
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.60.0...v7.63.0)

---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-version: 7.63.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-22 19:10:02 +00:00
Ravinou
6a3625ef98
Merge pull request #534 from Ravinou/dependabot/npm_and_yarn/react-select-5.10.2
chore(deps): bump react-select from 5.10.1 to 5.10.2
2025-09-20 13:23:29 +02:00
Ravinou
f1731d769d
Merge pull request #563 from Ravinou/dependabot/npm_and_yarn/eslint-config-next-15.5.3
chore(deps-dev): bump eslint-config-next from 15.3.4 to 15.5.3
2025-09-20 13:22:45 +02:00
dependabot[bot]
63216622a6
chore(deps-dev): bump eslint-config-next from 15.3.4 to 15.5.3
Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 15.3.4 to 15.5.3.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/commits/v15.5.3/packages/eslint-config-next)

---
updated-dependencies:
- dependency-name: eslint-config-next
  dependency-version: 15.5.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-11 19:09:26 +00:00
dependabot[bot]
f5af821d47
chore(deps): bump react-select from 5.10.1 to 5.10.2
Bumps [react-select](https://github.com/JedWatson/react-select) from 5.10.1 to 5.10.2.
- [Release notes](https://github.com/JedWatson/react-select/releases)
- [Changelog](https://github.com/JedWatson/react-select/blob/master/docs/CHANGELOG.md)
- [Commits](https://github.com/JedWatson/react-select/compare/react-select@5.10.1...react-select@5.10.2)

---
updated-dependencies:
- dependency-name: react-select
  dependency-version: 5.10.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-14 21:58:11 +00:00
Ravinou
340f186a37
Merge pull request #525 from Ravinou/dependabot/npm_and_yarn/react-hook-form-7.60.0
chore(deps): bump react-hook-form from 7.59.0 to 7.60.0
2025-07-13 09:09:51 +02:00
Ravinou
53b29ea6f9
Merge pull request #526 from Ravinou/dependabot/npm_and_yarn/swr-2.3.4
chore(deps): bump swr from 2.3.3 to 2.3.4
2025-07-13 09:09:40 +02:00
dependabot[bot]
665974a15a
chore(deps): bump swr from 2.3.3 to 2.3.4
Bumps [swr](https://github.com/vercel/swr) from 2.3.3 to 2.3.4.
- [Release notes](https://github.com/vercel/swr/releases)
- [Commits](https://github.com/vercel/swr/compare/v2.3.3...v2.3.4)

---
updated-dependencies:
- dependency-name: swr
  dependency-version: 2.3.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-07 23:03:00 +00:00
dependabot[bot]
ac3c4c7b1d
chore(deps): bump react-hook-form from 7.59.0 to 7.60.0
Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.59.0 to 7.60.0.
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.59.0...v7.60.0)

---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-version: 7.60.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-07 22:14:32 +00:00
Ravinou
2d094cfed9
Merge pull request #518 from Ravinou/dependabot/npm_and_yarn/prettier-3.6.2
chore(deps-dev): bump prettier from 3.5.3 to 3.6.2
2025-07-06 20:46:19 +02:00
Ravinou
aeb299ab3b
🥇 Thanking a new sponsor 🥇
Thank you very much @MacH59-cos for sponsoring ! This commit is dedicated to thanking you. You give me strength to continue the work! ❤️
2025-07-05 22:34:48 +02:00
dependabot[bot]
b6cc2c351e
chore(deps-dev): bump prettier from 3.5.3 to 3.6.2
Bumps [prettier](https://github.com/prettier/prettier) from 3.5.3 to 3.6.2.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.5.3...3.6.2)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.6.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-30 22:43:40 +00:00
41 changed files with 6126 additions and 8600 deletions

View file

@ -1,4 +1,4 @@
export default {
const config = {
extends: ['@commitlint/config-conventional'],
rules: {
'type-enum': [
@ -26,3 +26,5 @@ export default {
},
ignores: [(message) => message.includes('WIP'), (message) => message.includes('wip')],
};
export default config;

View file

@ -23,8 +23,6 @@ CONFIG_PATH=./config
SSH_PATH=./ssh
SSH_HOST=./ssh_host
BORG_REPOSITORY_PATH=./repos
TMP_PATH=./tmp
LOGS_PATH=./logs
## Optional variables section ##

View file

@ -1,6 +0,0 @@
{
"extends": [
"next/core-web-vitals",
"next/typescript"
]
}

View file

@ -1,16 +1,18 @@
version: 2
updates:
- package-ecosystem: "docker"
directory: "/"
- package-ecosystem: 'docker'
directory: '/'
schedule:
interval: "daily"
- package-ecosystem: "npm"
directory: "/"
interval: 'daily'
# Note: Dependabot uses "npm" ecosystem but automatically detects pnpm-lock.yaml
# Make sure package-lock.json is gitignored to prevent confusion
- package-ecosystem: 'npm'
directory: '/'
schedule:
interval: "daily"
interval: 'daily'
# Maintain dependencies for GitHub Actions
# src: https://github.com/marketplace/actions/build-and-push-docker-images#keep-up-to-date-with-github-dependabot
- package-ecosystem: "github-actions"
directory: "/"
- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: "daily"
interval: 'daily'

View file

@ -1,5 +1,8 @@
name: Bats
permissions:
contents: read
on:
push:
branches:
@ -16,7 +19,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

View file

@ -5,12 +5,15 @@ on:
branches:
- 'develop'
permissions:
contents: read
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Update package.json version
run: |
COMMIT=$(git rev-parse --short HEAD)

View file

@ -1,4 +1,6 @@
name: Build and Push Docker Image
permissions:
contents: read
on:
push:
@ -10,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx

View file

@ -5,12 +5,15 @@ on:
types:
- published
permissions:
contents: read
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx

View file

@ -1,5 +1,8 @@
name: Test to build docker container on Pull Request
permissions:
contents: read
on:
pull_request:
branches:
@ -11,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx

View file

@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Run ShellCheck
uses: ludeeus/action-shellcheck@master

View file

@ -9,6 +9,10 @@ on:
branches:
- main
- develop
permissions:
contents: read
jobs:
test:
name: Run Vitest
@ -16,18 +20,23 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: 22
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 9
- name: Install dependencies
run: npm ci
run: pnpm install --frozen-lockfile
- name: Run Vitest
run: npm run test
run: pnpm run test
lint:
name: Run ESLint
@ -35,15 +44,20 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: 22
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 9
- name: Install dependencies
run: npm ci
run: pnpm install --frozen-lockfile
- name: Run ESLint
run: npm run lint
run: pnpm exec eslint

8
.gitignore vendored
View file

@ -50,6 +50,14 @@ typings/
# Optional npm cache directory
.npm
# pnpm
.pnpm-store/
pnpm-debug.log*
# Lock files (pnpm-lock.yaml is used)
package-lock.json
yarn.lock
# Optional eslint cache
.eslintcache

7
.npmrc Normal file
View file

@ -0,0 +1,7 @@
# Configuration pnpm
auto-install-peers=true
strict-peer-dependencies=false
shamefully-hoist=false
# Force pnpm usage (prevent npm/yarn)
package-manager=pnpm

View file

@ -1,4 +1,4 @@
import { useState } from 'react';
import { useState, useMemo } from 'react';
import classes from './Repo.module.css';
import {
IconSettings,
@ -22,6 +22,8 @@ type RepoProps = Omit<Repository, 'unixUser' | 'displayDetails'> & {
export default function Repo(props: RepoProps) {
const isMobile = useMedia({ maxWidth: 1000 });
const currentDate = useMemo(() => new Date(), []);
//Load displayDetails from LocalStorage
const displayDetailsFromLS = (): boolean => {
const key = `displayDetailsRepo${props.id}`;
@ -110,7 +112,7 @@ export default function Repo(props: RepoProps) {
>
{props.lastSave === 0
? '-'
: formatDistanceStrict(fromUnixTime(props.lastSave), Date.now(), {
: formatDistanceStrict(fromUnixTime(props.lastSave), currentDate, {
addSuffix: true,
})}
</span>
@ -177,7 +179,7 @@ export default function Repo(props: RepoProps) {
>
{props.lastSave === 0
? '-'
: formatDistanceStrict(fromUnixTime(props.lastSave), Date.now(), {
: formatDistanceStrict(fromUnixTime(props.lastSave), currentDate, {
addSuffix: true,
})}
</div>
@ -223,7 +225,7 @@ export default function Repo(props: RepoProps) {
>
{props.lastSave === 0
? '-'
: formatDistanceStrict(fromUnixTime(props.lastSave), Date.now(), {
: formatDistanceStrict(fromUnixTime(props.lastSave), currentDate, {
addSuffix: true,
})}
</span>

View file

@ -48,15 +48,7 @@ function WizardStep1() {
Vorta
</a>
.
<br />
Vorta runs on Linux, MacOS and Windows (via Windows Linux Subsystem (WSL)). Find the right
way to install it{' '}
<a href='https://vorta.borgbase.com/install/' target='_blank' rel='noreferrer'>
just here
</a>
.
</div>
<img src='/vorta-demo.gif' alt='Vorta GIF' />
</div>
);
}

View file

@ -69,8 +69,8 @@ function WizardStep2(props: WizardStepProps) {
<h2>Pika, Vorta...</h2>
<div className={classes.description}>
To "Initialize a new repository" or "Add existing repository", copy this into the field
"Repository URL" of your graphical client :
To &quot;Initialize a new repository&quot; or &quot;Add existing repository&quot;, copy this
into the field &quot;Repository URL&quot; of your graphical client :
<br />
<div
style={{
@ -98,7 +98,7 @@ function WizardStep2(props: WizardStepProps) {
<b>Check the fingerprint of server</b>
</div>
To check that you are talking to the right server, please make sure to validate one of the
following key's fingerprint when you first connect :
following key&apos;s fingerprint when you first connect :
<li>
<span className={classes.sshPublicKey}>
ECDSA : {wizardEnv?.SSH_SERVER_FINGERPRINT_ECDSA}

View file

@ -102,7 +102,7 @@ function WizardStep3(props: WizardStepProps) {
}}
>
<div className={classes.code}>
borg export-tar --tar-filter="gzip -9" ssh://
borg export-tar --tar-filter=&quot;gzip -9&quot; ssh://
{UNIX_USER}@{FQDN}
{SSH_SERVER_PORT}/./
{props.selectedRepo?.repositoryName}

View file

@ -11,7 +11,7 @@ function WizardStep4(props: WizardStepProps) {
//Needed to generate command for borg over LAN instead of WAN if env vars are set and option enabled.
const { FQDN, SSH_SERVER_PORT } = lanCommandOption(wizardEnv, props.selectedRepo?.lanCommand);
const configBorgmatic = `location:
const configBorgmatic = `
# List of source directories to backup.
source_directories:
- /your-repo-to-backup
@ -19,24 +19,21 @@ function WizardStep4(props: WizardStepProps) {
repositories:
# Paths of local or remote repositories to backup to.
- ssh://${UNIX_USER}@${FQDN}${SSH_SERVER_PORT}/./${props.selectedRepo?.repositoryName}
- path: ssh://${UNIX_USER}@${FQDN}${SSH_SERVER_PORT}/./${props.selectedRepo?.repositoryName}
storage:
archive_name_format: '{FQDN}-documents-{now}'
encryption_passphrase: "YOUR PASSPHRASE"
archive_name_format: '{FQDN}-documents-{now}'
encryption_passphrase: "YOUR PASSPHRASE"
retention:
# Retention policy for how many backups to keep.
keep_daily: 7
keep_weekly: 4
keep_monthly: 6
# Retention policy for how many backups to keep.
keep_daily: 7
keep_weekly: 4
keep_monthly: 6
consistency:
# List of checks to run to validate your backups.
checks:
- name: repository
- name: archives
frequency: 2 weeks
# List of checks to run to validate your backups.
checks:
- name: repository
- name: archives
frequency: 2 weeks
#hooks:
# Custom preparation scripts to run.

View file

@ -42,8 +42,16 @@ export default function RepoList() {
const [displayRepoAdd, setDisplayRepoAdd] = useState(false);
const [displayRepoEdit, setDisplayRepoEdit] = useState(false);
const [wizardEnv, setWizardEnv] = useState<Optional<WizardEnvType>>();
const [sortOption, setSortOption] = useState<SortOption>('alias-asc');
const [searchQuery, setSearchQuery] = useState('');
const [sortOption, setSortOption] = useState<SortOption>(() => {
const savedSort = localStorage.getItem('repoSort');
return (savedSort as SortOption) || 'alias-asc';
});
const [searchQuery, setSearchQuery] = useState(() => {
const savedSearch = localStorage.getItem('repoSearch');
return savedSearch || '';
});
const toastOptions: ToastOptions = {
position: 'top-right',
@ -55,21 +63,10 @@ export default function RepoList() {
progress: undefined,
};
// Load filters from localStorage
useEffect(() => {
const savedSort = localStorage.getItem('repoSort');
const savedSearch = localStorage.getItem('repoSearch');
if (savedSort) setSortOption(savedSort as SortOption);
if (savedSearch) setSearchQuery(savedSearch);
}, []);
useEffect(() => {
if (router.pathname === '/manage-repo/add') {
setDisplayRepoAdd(!displayRepoAdd);
}
if (router.pathname.startsWith('/manage-repo/edit')) {
setDisplayRepoEdit(!displayRepoEdit);
}
// eslint-disable-next-line react-hooks/set-state-in-effect
setDisplayRepoAdd(router.pathname === '/manage-repo/add');
setDisplayRepoEdit(router.pathname.startsWith('/manage-repo/edit'));
const fetchWizardEnv = async () => {
try {
@ -81,7 +78,7 @@ export default function RepoList() {
}
};
fetchWizardEnv();
}, []);
}, [router.pathname]);
const fetcher = async (url: string) => await fetch(url).then((res) => res.json());
const { data, error } = useSWR('/api/v1/repositories', fetcher);

View file

@ -150,8 +150,12 @@ export default function RepoManage(props: RepoManageProps) {
const formSubmitHandler = async (dataForm: DataForm) => {
setIsLoading(true);
start();
// Clean SSH key by removing leading/trailing whitespace and line breaks
const cleanedSSHKey = dataForm.sshkey.trim();
//Verify that the SSH key is unique
if (!(await isSSHKeyUnique(dataForm.sshkey))) {
if (!(await isSSHKeyUnique(cleanedSSHKey))) {
stop();
setIsLoading(false);
return;
@ -161,7 +165,7 @@ export default function RepoManage(props: RepoManageProps) {
const newRepo = {
alias: dataForm.alias,
storageSize: parseInt(dataForm.storageSize),
sshPublicKey: dataForm.sshkey,
sshPublicKey: cleanedSSHKey,
comment: dataForm.comment,
alert: dataForm.alert.value,
lanCommand: dataForm.lanCommand,
@ -200,7 +204,7 @@ export default function RepoManage(props: RepoManageProps) {
const dataEdited = {
alias: dataForm.alias,
storageSize: parseInt(dataForm.storageSize),
sshPublicKey: dataForm.sshkey,
sshPublicKey: cleanedSSHKey,
comment: dataForm.comment,
alert: dataForm.alert.value,
lanCommand: dataForm.lanCommand,
@ -333,11 +337,14 @@ export default function RepoManage(props: RepoManageProps) {
defaultValue={props.mode == 'edit' ? targetRepo?.sshPublicKey : undefined}
{...register('sshkey', {
required: 'SSH public key is required.',
pattern: {
value:
/^(ssh-ed25519 AAAAC3NzaC1lZDI1NTE5|sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29t|ssh-rsa AAAAB3NzaC1yc2)[0-9A-Za-z+/]+[=]{0,3}(\s.*)?$/,
message:
'Invalid public key. The key needs to be in OpenSSH format (rsa, ed25519, ed25519-sk)',
validate: (value) => {
const trimmedValue = value.trim();
const pattern =
/^(ssh-ed25519 AAAAC3NzaC1lZDI1NTE5|sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29t|ssh-rsa AAAAB3NzaC1yc2)[0-9A-Za-z+/]+[=]{0,3}(\s.*)?$/;
return (
pattern.test(trimmedValue) ||
'Invalid public key. The key needs to be in OpenSSH format (rsa, ed25519, ed25519-sk)'
);
},
})}
/>

View file

@ -1,5 +1,5 @@
import { useRouter } from 'next/router';
import { useEffect, useState } from 'react';
import { useEffect, useMemo, useState } from 'react';
import Select, { SingleValue } from 'react-select';
import classes from './SetupWizard.module.css';
import { Optional, SelectedRepoWizard, Repository, WizardEnvType } from '~/types';
@ -36,8 +36,21 @@ function SetupWizard(props: SetupWizardProps) {
'Content-type': 'application/json',
},
});
setRepoList((await response.json()).repoList);
const data = await response.json();
const repos = data.repoList;
setRepoList(repos);
setRepoListIsLoading(false);
// Auto-select first repository if available
if (repos && repos.length > 0) {
setSelectedItem({
label: `${repos[0].alias} - ${repos[0].repositoryName}`,
value: `${repos[0].alias} - ${repos[0].repositoryName}`,
id: repos[0].id.toString(),
repositoryName: repos[0].repositoryName,
lanCommand: repos[0].lanCommand ? repos[0].lanCommand : false,
});
}
} catch (error) {
console.log('Fetching datas error');
}
@ -63,17 +76,24 @@ function SetupWizard(props: SetupWizardProps) {
//Component did update
useEffect(() => {
//Go to the step in the URL param when URL change
props.step && setStep(props.step);
if (props.step) {
// eslint-disable-next-line react-hooks/set-state-in-effect
setStep(props.step);
}
}, [props.step]);
//Options for react-select
const options: Optional<Array<SelectedRepoWizard>> = repoList?.map((repo) => ({
label: `${repo.alias} - ${repo.repositoryName}`,
value: `${repo.alias} - ${repo.repositoryName}`,
id: repo.id.toString(),
repositoryName: repo.repositoryName,
lanCommand: repo.lanCommand ? repo.lanCommand : false,
}));
const options: Optional<Array<SelectedRepoWizard>> = useMemo(
() =>
repoList?.map((repo) => ({
label: `${repo.alias} - ${repo.repositoryName}`,
value: `${repo.alias} - ${repo.repositoryName}`,
id: repo.id.toString(),
repositoryName: repo.repositoryName,
lanCommand: repo.lanCommand ? repo.lanCommand : false,
})),
[repoList]
);
//Step button (free selection of user)
const changeStepHandler = (x: number) => router.push('/setup-wizard/' + x.toString());
@ -128,6 +148,7 @@ function SetupWizard(props: SetupWizardProps) {
isDisabled={repoListIsLoading}
options={options}
isSearchable
value={selectedItem}
placeholder='Select your repository...'
theme={(theme) => ({
...theme,

View file

@ -58,6 +58,7 @@ export default function AppriseAlertSettings() {
}
};
getAppriseAlert();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
////Functions

View file

@ -47,6 +47,7 @@ export default function AppriseURLs() {
}
};
getAppriseServices();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
//Form submit handler to modify Apprise services

View file

@ -56,6 +56,7 @@ export default function EmailAlertSettings() {
}
};
dataFetch();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
////Functions

View file

@ -84,6 +84,7 @@ export default function Integrations() {
////LifeCycle
useEffect(() => {
fetchTokenList();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
// Permissions handler

View file

@ -41,7 +41,8 @@ export default function UserSettings({ data }: UserSettingsProps) {
if (tab === 'Integrations' && wizardEnv?.DISABLE_INTEGRATIONS === 'true') {
setTab('General');
}
}, [wizardEnv, tab]);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [wizardEnv?.DISABLE_INTEGRATIONS]);
return (
<div className={classes.containerSettings}>

View file

@ -6,23 +6,29 @@ FROM node:22-bookworm-slim as base
# build stage
FROM base AS deps
RUN corepack enable && corepack prepare pnpm@9 --activate
WORKDIR /app
COPY package.json package-lock.json ./
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
RUN npm ci --omit=dev
RUN pnpm install --frozen-lockfile --prod
FROM base AS builder
RUN corepack enable && corepack prepare pnpm@9 --activate
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
RUN pnpm install --frozen-lockfile
COPY . .
RUN sed -i "s/images:/output: 'standalone',images:/" next.config.ts
RUN npm run build
RUN pnpm run build
# run stage
FROM base AS runner
@ -35,7 +41,7 @@ ENV HOSTNAME=
RUN echo 'deb http://deb.debian.org/debian bookworm-backports main' >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y \
supervisor curl jq jc borgbackup/bookworm-backports openssh-server rsyslog && \
supervisor curl jq jc borgbackup/bookworm-backports openssh-server && \
apt-get clean && rm -rf /var/lib/apt/lists/*
RUN groupadd -g ${GID} borgwarehouse && useradd -m -u ${UID} -g ${GID} borgwarehouse
@ -50,7 +56,6 @@ COPY --from=builder --chown=borgwarehouse:borgwarehouse /app/.next/standalone ./
COPY --from=builder --chown=borgwarehouse:borgwarehouse /app/public ./public
COPY --from=builder --chown=borgwarehouse:borgwarehouse /app/.next/static ./.next/static
COPY --from=builder --chown=borgwarehouse:borgwarehouse /app/docker/supervisord.conf ./
COPY --from=builder --chown=borgwarehouse:borgwarehouse /app/docker/rsyslog.conf /etc/rsyslog.conf
COPY --from=builder --chown=borgwarehouse:borgwarehouse /app/docker/sshd_config ./
USER borgwarehouse

View file

@ -79,9 +79,13 @@ Check the online documentation [just here](https://borgwarehouse.com/docs/admin-
<a href="https://github.com/royalmoose"><img src="https://avatars.githubusercontent.com/royalmoose" style="width:50px; border-radius:50%;"/></a>
<a href="https://github.com/dhenry123"><img src="https://avatars.githubusercontent.com/dhenry123" style="width:50px; border-radius:50%;"/></a>
<a href="https://github.com/fphammerle"><img src="https://avatars.githubusercontent.com/fphammerle" style="width:50px; border-radius:50%;"/></a>
<a href="https://github.com/MacH59-cos"><img src="https://avatars.githubusercontent.com/MacH59-cos" style="width:50px; border-radius:50%;"/></a>
<a href="https://github.com/shrippen"><img src="https://avatars.githubusercontent.com/shrippen" style="width:50px; border-radius:50%;"/></a>
<a href="https://github.com/daschmidt1994"><img src="https://avatars.githubusercontent.com/daschmidt1994" style="width:50px; border-radius:50%;"/></a>
#### Past sponsors
<a href="https://github.com/Drallibor"><img src="https://avatars.githubusercontent.com/Drallibor" style="width:25px; border-radius:50%;"/></a>
<a href="https://github.com/shad-lp"><img src="https://avatars.githubusercontent.com/shad-lp" style="width:25px; border-radius:50%;"/></a>
<a href="https://github.com/Magneticdud"><img src="https://avatars.githubusercontent.com/Magneticdud" style="width:25px; border-radius:50%;"/></a>

View file

@ -20,8 +20,6 @@ services:
- ${SSH_PATH:?SSH_PATH variable missing}:/home/borgwarehouse/.ssh
- ${SSH_HOST:?SSH_HOST variable missing}:/etc/ssh
- ${BORG_REPOSITORY_PATH:?BORG_REPOSITORY_PATH variable missing}:/home/borgwarehouse/repos
- ${TMP_PATH:?TMP_PATH variable missing}:/home/borgwarehouse/tmp
- ${LOGS_PATH:?LOGS_PATH variable missing}:/home/borgwarehouse/logs
# Apprise is used to send notifications, it's optional. http://apprise:8000 is the URL to use in BorgWarehouse.
apprise:
container_name: apprise

View file

@ -1,40 +0,0 @@
# rsyslog configuration file
$WorkDirectory /home/borgwarehouse/tmp
$FileOwner borgwarehouse
$FileGroup borgwarehouse
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$RepeatedMsgReduction on
module(load="imfile" PollingInterval="10")
input(type="imfile"
File="/home/borgwarehouse/tmp/borgwarehouse.log"
Tag="BorgWarehouse"
Severity="info"
Facility="local7"
ruleset="bwLogs")
input(type="imfile"
File="/home/borgwarehouse/tmp/sshd.log"
Tag="sshd"
Severity="info"
Facility="local7"
ruleset="sshdLogs")
$template myFormat,"%timegenerated:::date-rfc3339% %syslogtag% %msg%\n"
ruleset(name="bwLogs") {
action(type="omfile"
File="/home/borgwarehouse/logs/borgwarehouse.log"
Template="myFormat")
}
ruleset(name="sshdLogs") {
action(type="omfile"
File="/home/borgwarehouse/logs/sshd.log"
Template="myFormat")
}

View file

@ -1,24 +1,21 @@
[supervisord]
nodaemon=true
logfile=/home/borgwarehouse/logs/supervisord.log
logfile=/dev/stdout
logfile_maxbytes=0
loglevel=error
pidfile=/home/borgwarehouse/tmp/supervisord.pid
logfile_maxbytes=10MB
logfile_backups=5
[program:sshd]
command=/usr/sbin/sshd -D -e -f /etc/ssh/sshd_config
stdout_logfile=/home/borgwarehouse/tmp/sshd.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
redirect_stderr=false
[program:borgwarehouse]
command=/usr/local/bin/node server.js
stdout_logfile=/home/borgwarehouse/tmp/borgwarehouse.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
redirect_stderr=true
[program:rsyslogd]
command=rsyslogd -n -i /home/borgwarehouse/tmp/rsyslogd.pid -f /etc/rsyslog.conf
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
redirect_stderr=false

16
eslint.config.mjs Normal file
View file

@ -0,0 +1,16 @@
import { defineConfig, globalIgnores } from 'eslint/config';
import nextVitals from 'eslint-config-next/core-web-vitals';
const eslintConfig = defineConfig([
...nextVitals,
// Override default ignores of eslint-config-next.
globalIgnores([
// Default ignores of eslint-config-next:
'.next/**',
'out/**',
'build/**',
'next-env.d.ts',
]),
]);
export default eslintConfig;

View file

@ -77,7 +77,7 @@ else
fi
## Add ssh public key in authorized_keys with borg restriction for only 1 repository and storage quota
restricted_authkeys="command=\"cd ${pool};borg serve${appendOnlyMode} --restrict-to-path ${pool}/${repositoryName} --storage-quota $2G\",restrict $1"
restricted_authkeys="command=\"cd ${pool};borg serve${appendOnlyMode} --restrict-to-repository ${pool}/${repositoryName} --storage-quota $2G\",restrict $1"
echo "$restricted_authkeys" | tee -a "${authorized_keys}" >/dev/null
## Return the repositoryName

1
next-env.d.ts vendored
View file

@ -1,5 +1,6 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/pages/api-reference/config/typescript for more information.

8396
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,52 +1,52 @@
{
"name": "borgwarehouse",
"version": "3.1.1",
"version": "3.1.2",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"lint": "pnpm exec eslint",
"test": "vitest",
"setup": "npm install && npm run setup:hooks",
"setup:hooks": "npx husky install",
"setup": "pnpm install && pnpm run setup:hooks",
"setup:hooks": "pnpm exec husky install",
"format": "prettier --write \"{Components,Containers,helpers,pages,styles}/**/*.{js,jsx,ts,tsx,json,css,scss,md}\""
},
"dependencies": {
"@tabler/icons-react": "^3.34.0",
"@tabler/icons-react": "^3.37.1",
"async-mutex": "^0.5.0",
"bcryptjs": "^3.0.2",
"chart.js": "^4.4.9",
"bcryptjs": "^3.0.3",
"chart.js": "^4.5.1",
"date-fns": "^4.1.0",
"lowdb": "^7.0.1",
"next": "^15.3.4",
"next-auth": "^4.24.10",
"nodemailer": "^6.10.1",
"next": "^16.1.6",
"next-auth": "^4.24.13",
"nodemailer": "^8.0.1",
"nprogress": "^0.2.0",
"react": "^19.1.0",
"react-chartjs-2": "^5.3.0",
"react-dom": "^19.1.0",
"react-hook-form": "^7.59.0",
"react-select": "^5.10.1",
"react": "^19.2.4",
"react-chartjs-2": "^5.3.1",
"react-dom": "^19.2.4",
"react-hook-form": "^7.71.2",
"react-select": "^5.10.2",
"react-toastify": "^11.0.5",
"swr": "^2.3.3",
"swr": "^2.4.1",
"use-media": "^1.5.0",
"uuid": "^11.1.0"
"uuid": "^13.0.0"
},
"devDependencies": {
"@commitlint/cli": "^19.8.1",
"@commitlint/config-conventional": "^19.8.1",
"@types/bcryptjs": "^2.4.6",
"@types/node": "^22.15.30",
"@types/nodemailer": "^6.4.17",
"@commitlint/cli": "^20.4.2",
"@commitlint/config-conventional": "^20.4.2",
"@types/node": "^25.3.3",
"@types/nodemailer": "^7.0.11",
"@types/nprogress": "^0.2.3",
"@types/react": "^19.1.8",
"@types/supertest": "^6.0.3",
"eslint-config-next": "^15.3.4",
"@types/react": "^19.2.14",
"@types/supertest": "^7.2.0",
"eslint": "^9.39.3",
"eslint-config-next": "^16.1.6",
"husky": "^9.1.7",
"node-mocks-http": "^1.17.2",
"prettier": "^3.5.3",
"typescript": "^5.8.3",
"vitest": "^3.1.4"
"prettier": "^3.8.1",
"typescript": "^5.9.3",
"vitest": "^4.0.18"
}
}

5857
pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load diff

2
pnpm-workspace.yaml Normal file
View file

@ -0,0 +1,2 @@
packages:
- '.'

View file

@ -81,24 +81,24 @@ teardown() {
@test "Test createRepo.sh key ED25519 insertion in authorized_keys" {
run bash /test/scripts/createRepo.sh "$SSH_KEY_ED25519" 10 false
expected_line="command=\"cd ${home}/repos;borg serve --restrict-to-path ${home}/repos/${output} --storage-quota 10G\",restrict $SSH_KEY_ED25519"
expected_line="command=\"cd ${home}/repos;borg serve --restrict-to-repository ${home}/repos/${output} --storage-quota 10G\",restrict $SSH_KEY_ED25519"
grep -qF "$expected_line" /tmp/borgwarehouse/.ssh/authorized_keys
}
@test "Test createRepo.sh key ED25519-SK insertion in authorized_keys" {
run bash /test/scripts/createRepo.sh "$SSH_KEY_ED25519_SK" 10 false
expected_line="command=\"cd ${home}/repos;borg serve --restrict-to-path ${home}/repos/${output} --storage-quota 10G\",restrict $SSH_KEY_ED25519_SK"
expected_line="command=\"cd ${home}/repos;borg serve --restrict-to-repository ${home}/repos/${output} --storage-quota 10G\",restrict $SSH_KEY_ED25519_SK"
grep -qF "$expected_line" /tmp/borgwarehouse/.ssh/authorized_keys
}
@test "Test createRepo.sh key RSA insertion in authorized_keys" {
run bash /test/scripts/createRepo.sh "$SSH_KEY_RSA" 10 false
expected_line="command=\"cd ${home}/repos;borg serve --restrict-to-path ${home}/repos/${output} --storage-quota 10G\",restrict $SSH_KEY_RSA"
expected_line="command=\"cd ${home}/repos;borg serve --restrict-to-repository ${home}/repos/${output} --storage-quota 10G\",restrict $SSH_KEY_RSA"
grep -qF "$expected_line" /tmp/borgwarehouse/.ssh/authorized_keys
}
@test "Test createRepo.sh key ED25519 insertion in authorized_keys with append only mode" {
run bash /test/scripts/createRepo.sh "$SSH_KEY_ED25519" 10 true
expected_line="command=\"cd ${home}/repos;borg serve --append-only --restrict-to-path ${home}/repos/${output} --storage-quota 10G\",restrict $SSH_KEY_ED25519"
expected_line="command=\"cd ${home}/repos;borg serve --append-only --restrict-to-repository ${home}/repos/${output} --storage-quota 10G\",restrict $SSH_KEY_ED25519"
grep -qF "$expected_line" /tmp/borgwarehouse/.ssh/authorized_keys
}

View file

@ -1,11 +1,16 @@
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"~/*": ["./*"]
"~/*": [
"./*"
]
},
"target": "ES2017",
"lib": ["dom", "dom.iterable", "esnext"],
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": false,
"skipLibCheck": true,
"strict": true,
@ -13,12 +18,20 @@
"incremental": true,
"module": "esnext",
"esModuleInterop": true,
"moduleResolution": "node",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"types": ["vitest/globals"] // Auto import vitest types
"jsx": "react-jsx",
"types": [
"vitest/globals"
] // Auto import vitest types
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx"
],
"exclude": [
"node_modules"
]
}

View file

@ -10,6 +10,15 @@ export default defineConfig({
reporter: ['text', 'json', 'html'],
},
globals: true,
include: ['**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
exclude: [
'**/node_modules/**',
'**/dist/**',
'**/.{idea,git,cache,output,temp}/**',
'**/.next/**',
'**/build/**',
'**/repos/**',
],
},
resolve: {
alias: {