diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c48ef23..f4b090b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @mauro-balades \ No newline at end of file +* @mauro-valades diff --git a/.github/workflows/ci-pipeline.yml b/.github/workflows/ci-pipeline.yml index 4131ae1..f02e88f 100644 --- a/.github/workflows/ci-pipeline.yml +++ b/.github/workflows/ci-pipeline.yml @@ -1,189 +1,197 @@ name: CI Pipeline + on: pull_request: types: [opened, synchronize, reopened] concurrency: - group: ci-pipeline-${{ github.head_ref }} + group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: + check_changes: + name: Check Changes + runs-on: ubuntu-latest + permissions: + contents: read + outputs: + exists: ${{ steps.filter.outputs.exists }} + steps: + - uses: actions/checkout@v4 + + - name: Filter changes + uses: yumemi-inc/path-filter@v2 + id: filter + with: + patterns: | + ** + !**.md + !.gitignore + !.gitattributes + !.vscode/** + !.env.example + setup: + name: Setup Dependencies + needs: check_changes + if: ${{ needs.check_changes.outputs.exists == 'true' }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: lts/* - - uses: pnpm/action-setup@v4 - with: - version: 10.11.0 - - name: Cache node_modules - id: cache-deps + + - name: Check if node_modules cache exists + id: check-node-modules-cache uses: actions/cache@v4 with: path: | - .turbo node_modules - key: ${{ runner.os }}-turbo-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-turbo- - - name: Verify pnpm installation - run: pnpm --version - - name: Install dependencies - run: pnpm install --frozen-lockfile + */node_modules + key: ${{ runner.os }}-node-modules-${{ hashFiles('**/pnpm-lock.yaml') }} + lookup-only: true - eslint: - runs-on: ubuntu-latest - needs: setup - steps: - - name: Checkout code - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: 22 - - uses: pnpm/action-setup@v4 + node-version: lts/* + + - name: Setup pnpm + if: steps.check-node-modules-cache.outputs.cache-hit != 'true' + uses: pnpm/action-setup@v4 with: - version: 10.11.0 - - name: Restore node_modules from cache - uses: actions/cache@v4 + run_install: false + + - name: Install dependencies + if: steps.check-node-modules-cache.outputs.cache-hit != 'true' + run: pnpm install --frozen-lockfile + + - name: Save node_modules cache + if: steps.check-node-modules-cache.outputs.cache-hit != 'true' + uses: actions/cache/save@v4 with: path: | - .turbo node_modules - key: ${{ runner.os }}-turbo-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-turbo- - - name: Run Eslint check - run: pnpm exec turbo run lint + */node_modules + key: ${{ runner.os }}-node-modules-${{ hashFiles('**/pnpm-lock.yaml') }} - prettier: + quality_checks: + name: ${{ matrix.name }} + needs: [check_changes, setup] + if: ${{ needs.check_changes.outputs.exists == 'true' }} runs-on: ubuntu-latest - needs: setup + strategy: + matrix: + include: + - check: lint + name: Lint + - check: format + name: Format + - check: test + name: Test + - check: spell + name: Spell Check + - check: build + name: Build steps: - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: lts/* - - uses: pnpm/action-setup@v4 - with: - version: 10.11.0 - - name: Restore node_modules from cache - uses: actions/cache@v4 - with: - path: | - .turbo - node_modules - key: ${{ runner.os }}-turbo-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-turbo- - - name: Run Prettier check - run: pnpm exec turbo run format - cspell: - runs-on: ubuntu-latest - needs: setup - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: lts/* - - uses: pnpm/action-setup@v4 - with: - version: 10.11.0 - - name: Restore node_modules from cache + - name: Restore Turborepo Cache uses: actions/cache@v4 with: - path: | - .turbo - node_modules - key: ${{ runner.os }}-turbo-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-turbo- - - name: Run cspell check - run: pnpm exec turbo run spell + path: .turbo + key: ${{ runner.os }}-turbo-${{ matrix.check }}-${{ github.sha }} + restore-keys: ${{ runner.os }}-turbo-${{ matrix.check }}- - vitest: - runs-on: ubuntu-latest - needs: setup - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: lts/* - - uses: pnpm/action-setup@v4 - with: - version: 10.11.0 - - name: Restore node_modules from cache - uses: actions/cache@v4 + - name: Restore node_modules cache + uses: actions/cache/restore@v4 with: path: | - .turbo node_modules - key: ${{ runner.os }}-turbo-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-turbo- - - name: Run Vitest tests - run: pnpm exec turbo test + */node_modules + key: ${{ runner.os }}-node-modules-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: ${{ runner.os }}-node-modules- - build: - runs-on: ubuntu-latest - needs: setup - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 with: node-version: lts/* - - uses: pnpm/action-setup@v4 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 with: - version: 10.11.0 - - name: Restore node_modules from cache - uses: actions/cache@v4 - with: - path: | - .turbo - node_modules - key: ${{ runner.os }}-turbo-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-turbo- - - name: Build project - run: pnpm exec turbo run build - - name: Upload build output - uses: actions/upload-artifact@v4 - with: - name: build - path: | - dist + run_install: false + + - name: Run ${{ matrix.name }} + run: pnpm exec turbo run ${{ matrix.check }} playwright: + name: Playwright Tests + needs: [check_changes, setup, quality_checks] + if: ${{ needs.check_changes.outputs.exists == 'true' }} runs-on: ubuntu-latest - needs: build steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: actions/setup-node@v4 - with: - node-version: lts/* - - uses: pnpm/action-setup@v4 - with: - version: 10.11.0 - - name: Restore node_modules from cache + + - name: Restore Turborepo Cache uses: actions/cache@v4 with: - path: | - .turbo - node_modules + path: .turbo key: ${{ runner.os }}-turbo-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-turbo- + restore-keys: ${{ runner.os }}-turbo- + + - name: Restore node_modules cache + uses: actions/cache/restore@v4 + with: + path: | + node_modules + */node_modules + key: ${{ runner.os }}-node-modules-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: ${{ runner.os }}-node-modules- + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: lts/* + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + run_install: false + + - name: Cache Playwright Browsers + uses: actions/cache@v4 + with: + path: ~/.cache/ms-playwright + key: ${{ runner.os }}-playwright-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: ${{ runner.os }}-playwright- + - name: Install Playwright Browsers run: pnpm exec playwright install --with-deps - - name: Download build output - uses: actions/download-artifact@v4 - with: - name: build - path: dist - - name: Run Playwright tests + + - name: Run Playwright Tests run: pnpm exec turbo run test:playwright + + verify: + name: Verify + needs: [check_changes, quality_checks, playwright] + runs-on: ubuntu-latest + if: always() + outputs: + success: ${{ steps.set-result.outputs.success }} + steps: + - name: Set Result + id: set-result + run: | + # Check if changes exist but no jobs ran, or if any job failed or was cancelled + if [[ "${{ needs.check_changes.outputs.exists }}" != "true" ]]; then + echo "success=true" >> $GITHUB_OUTPUT + echo "No relevant changes detected - pipeline passed" + elif [[ "${{ contains(needs.*.result, 'failure') }}" == "true" || "${{ contains(needs.*.result, 'cancelled') }}" == "true" ]]; then + echo "success=false" >> $GITHUB_OUTPUT + echo "Pipeline failed - some jobs failed or were cancelled" + exit 1 + else + echo "success=true" >> $GITHUB_OUTPUT + echo "All jobs completed successfully" + fi diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml index 95486db..f5af571 100644 --- a/.github/workflows/renovate.yml +++ b/.github/workflows/renovate.yml @@ -23,6 +23,14 @@ env: jobs: renovate: runs-on: ubuntu-latest + permissions: + contents: write + issues: write + pull-requests: write + security-events: read + actions: read + checks: read + statuses: write steps: - name: Checkout uses: actions/checkout@v4 diff --git a/cspell.json b/cspell.json index 4f88917..e117b1f 100644 --- a/cspell.json +++ b/cspell.json @@ -53,6 +53,7 @@ "Pdzly", "Ribaric", "taroj", + "Turborepo", "testid", "theming", "tuta", @@ -66,6 +67,7 @@ "wmfcdm", "XPCOM", "xmark", + "yumemi", "zsync" ], "flagWords": [], diff --git a/package.json b/package.json index b881dc0..cb785a3 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "engines": { "pnpm": "^10.0.0" }, - "packageManager": "pnpm@10.11.0", + "packageManager": "pnpm@10.12.1", "scripts": { "dev": "astro dev --port 3000", "start": "astro preview --port 3000", @@ -39,6 +39,7 @@ "@types/react-dom": "^19.1.5", "astro": "5.7.10", "astro-navbar": "2.3.7", + "turbo": "^2.5.4", "autoprefixer": "10.4.14", "clsx": "2.1.1", "date-fns": "4.1.0", @@ -92,7 +93,6 @@ "prettier": "3.5.3", "prettier-plugin-astro": "0.14.1", "prettier-plugin-tailwindcss": "^0.6.11", - "turbo": "^2.5.4", "typescript-eslint": "8.33.0", "vite-tsconfig-paths": "5.1.4", "vitest": "3.1.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c6a01b3..cf2be5c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -89,6 +89,9 @@ importers: tailwindcss: specifier: 4.1.8 version: 4.1.8 + turbo: + specifier: ^2.5.4 + version: 2.5.4 typescript: specifier: 5.6.3 version: 5.6.3 @@ -204,9 +207,6 @@ importers: prettier-plugin-tailwindcss: specifier: ^0.6.11 version: 0.6.12(prettier-plugin-astro@0.14.1)(prettier@3.5.3) - turbo: - specifier: ^2.5.4 - version: 2.5.4 typescript-eslint: specifier: 8.33.0 version: 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.6.3) diff --git a/public/media/whats-new/poster.webp b/public/media/whats-new/poster.webp index c6b9bfb..1eb80b1 100644 Binary files a/public/media/whats-new/poster.webp and b/public/media/whats-new/poster.webp differ diff --git a/public/media/whats-new/video.mp4 b/public/media/whats-new/video.mp4 index 99f6813..cb25174 100644 Binary files a/public/media/whats-new/video.mp4 and b/public/media/whats-new/video.mp4 differ diff --git a/public/media/whats-new/video.webm b/public/media/whats-new/video.webm index 9b96fb0..717713a 100644 Binary files a/public/media/whats-new/video.webm and b/public/media/whats-new/video.webm differ diff --git a/renovate.json b/renovate.json index dc065ac..4b6b57c 100644 --- a/renovate.json +++ b/renovate.json @@ -1,131 +1,79 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": ["config:recommended", ":semanticCommits", "config:js-app"], - "timezone": "UTC", - "schedule": ["before 9am on Monday"], - "labels": ["dependencies"], - "assignees": ["@me"], - "prConcurrentLimit": 5, + "extends": ["config:recommended", "config:js-app"], + "labels": ["dependencies", "renovate"], + "prConcurrentLimit": 10, "prHourlyLimit": 2, - "lockFileMaintenance": { - "enabled": true, - "automerge": false, - "schedule": ["before 9am on Monday"] - }, + "rebaseWhen": "conflicted", + "dependencyDashboard": true, "packageRules": [ { - "description": "Astro and React ecosystem packages", - "matchPackagePatterns": ["^@astrojs/", "^astro", "^react", "^@types/react"], - "groupName": "Astro and React core", - "schedule": ["before 9am on Monday"], - "automerge": false, - "reviewersFromCodeOwners": true + "description": "Group minor and patch-level updates", + "matchUpdateTypes": ["minor", "patch", "digest"] }, { - "description": "Development dependencies", - "matchDepTypes": ["devDependencies"], - "groupName": "Dev dependencies", - "schedule": ["before 9am on Monday"], - "automerge": false, - "automergeType": "pr", - "minimumReleaseAge": "3 days" + "description": "Group Astro related packages", + "groupName": "astro", + "matchPackageNames": ["astro*", "@astrojs*"] }, { - "description": "Testing packages", - "matchPackagePatterns": [ - "^@testing-library/", - "^@playwright/", - "^vitest", - "^@vitest/", - "^jsdom" - ], - "groupName": "Testing packages", - "schedule": ["before 9am on Monday"], - "automerge": false, - "automergeType": "pr" + "description": "Group React related packages", + "groupName": "react", + "matchPackageNames": ["react*", "@types/react*"] }, { - "description": "ESLint and TypeScript packages", - "matchPackagePatterns": ["^@typescript-eslint/", "^eslint", "^typescript", "^@types/"], - "excludePackagePatterns": ["^@types/react"], - "groupName": "TypeScript and ESLint", - "schedule": ["before 9am on Monday"], - "automerge": false, - "automergeType": "pr" + "description": "Group testing libraries", + "groupName": "testing", + "matchPackageNames": ["vitest*", "@vitest*", "@testing-library*", "@playwright*", "jsdom*"] }, { - "description": "Formatting and code quality tools", + "description": "Group ESLint and TypeScript packages", + "groupName": "eslint-typescript", + "matchPackageNames": ["eslint*", "@eslint*", "typescript*", "@typescript-eslint*"] + }, + { + "description": "Group formatting and code quality tools", + "groupName": "code-quality", + "matchPackageNames": ["prettier*", "lefthook*", "@commitlint*", "cspell*", "@cspell*"] + }, + { + "description": "Group TailwindCSS ecosystem", + "groupName": "tailwindcss", "matchPackageNames": [ - "prettier", - "prettier-plugin-astro", - "prettier-plugin-tailwindcss", - "husky", - "lint-staged" - ], - "groupName": "Code formatting tools", - "schedule": ["before 9am on Monday"], - "automerge": false, - "automergeType": "pr" + "tailwind*", + "@tailwindcss*", + "autoprefixer", + "postcss", + "clsx", + "tailwind-merge" + ] }, { - "description": "TailwindCSS ecosystem", - "matchPackagePatterns": ["^tailwind", "^@tailwindcss/"], - "matchPackageNames": ["autoprefixer", "postcss", "clsx", "tailwind-merge"], - "groupName": "TailwindCSS ecosystem", - "schedule": ["before 9am on Monday"], - "automerge": false + "description": "Group FontAwesome packages", + "groupName": "fontawesome", + "matchPackageNames": ["@fortawesome*"] }, { - "description": "FontAwesome packages", - "matchPackagePatterns": ["^@fortawesome/"], - "groupName": "FontAwesome packages", - "schedule": ["before 9am on Monday"], - "automerge": false, - "automergeType": "pr" + "description": "Group build and bundling tools", + "groupName": "build-tools", + "matchPackageNames": ["turbo*", "vite*", "jiti*", "wrangler*"] }, { - "description": "Lucide icon packages", - "matchPackagePatterns": ["^lucide-"], - "groupName": "Lucide icons", - "schedule": ["before 9am on Monday"], - "automerge": false, - "automergeType": "pr" + "description": "Group type definitions", + "groupName": "type-definitions", + "matchPackageNames": ["@types*", "!@types/react*"] + }, + { + "description": "Group devDependencies", + "groupName": "devDependencies", + "matchDepTypes": ["devDependencies"] }, { "description": "Major updates require manual review", "matchUpdateTypes": ["major"], - "automerge": false, - "schedule": ["before 9am on Monday"], - "labels": ["dependencies", "major-update"], - "reviewersFromCodeOwners": true - }, - { - "description": "Pin Node.js to LTS versions", - "matchPackageNames": ["node"], - "allowedVersions": "/^(18|20|22)\\./", - "automerge": false - }, - { - "description": "Cloudflare Workers and Wrangler", - "matchPackageNames": ["wrangler", "@astrojs/cloudflare"], - "groupName": "Cloudflare ecosystem", - "schedule": ["before 9am on Monday"], - "automerge": false, - "reviewersFromCodeOwners": true + "labels": ["dependencies", "major-update"] } ], - "vulnerabilityAlerts": { - "enabled": false, - "labels": ["security", "dependencies"], - "automerge": false, - "schedule": ["at any time"] - }, - "osvVulnerabilityAlerts": true, - "dependencyDashboard": false, - "dependencyDashboardTitle": "Dependency Dashboard", - "dependencyDashboardHeader": "This issue lists Renovate updates and detected dependencies. Read the [Dependency Dashboard](https://docs.renovatebot.com/key-concepts/dashboard/) docs to learn more.", - "dependencyDashboardFooter": "Configure Renovate in `renovate.json`", - "configMigration": true, - "platformAutomerge": false, - "automergeStrategy": "squash" + "vulnerabilityAlerts": { "labels": ["security", "dependencies"] }, + "osvVulnerabilityAlerts": true } diff --git a/src/assets/media/whats-new.mp4 b/src/assets/media/whats-new.mp4 index 84c6ad2..97b736b 100644 Binary files a/src/assets/media/whats-new.mp4 and b/src/assets/media/whats-new.mp4 differ diff --git a/src/i18n/en/translation.json b/src/i18n/en/translation.json index 0274a5e..580e867 100644 --- a/src/i18n/en/translation.json +++ b/src/i18n/en/translation.json @@ -161,7 +161,7 @@ "members": { "browser": { "mauro": { - "name": "Mauro B.", + "name": "Mauro V.", "description": "Creator, Main Developer", "link": "https://cheff.dev/" }, diff --git a/src/release-notes/stable.json b/src/release-notes/stable.json index d162c91..5a9bdf8 100644 --- a/src/release-notes/stable.json +++ b/src/release-notes/stable.json @@ -2781,5 +2781,45 @@ "workflowId": 15372237282, "image": false, "date": "01/06/2025" + }, + { + "version": "1.13b", + "extra": "This update includes overall fixes, stability and a new way to manage spaces", + "fixes": [ + "Fixed issues related to glance and split view", + "Fixed performance issues and high GPU usage for some users", + "Other small fixes and improvements" + ], + "security": "https://www.mozilla.org/en-US/security/advisories/mfsa2025-47/", + "features": [ + "There's a new way to manage spaces, which brings a more intuitive and user-friendly experience", + "Updated to firefox 139.0.4", + "Added support for google safebrowsing for better security", + "Collapsed toolbar gets a slight UI redesign" + ], + "breakingChanges": [ + "Customizable UI buttons at the bottom has been reset to a new default state" + ], + "workflowId": 15630968997, + "image": false, + "date": "13/06/2025" + }, + { + "version": "1.13.1b", + "extra": "", + "fixes": ["Small fixes from the previous release."], + "features": [], + "workflowId": 15656297661, + "image": false, + "date": "15/06/2025" + }, + { + "version": "1.13.2b", + "extra": "", + "fixes": [], + "features": ["Show spaces when right clicking on the workspace indicator"], + "workflowId": 15668398583, + "image": false, + "date": "16/06/2025" } ] diff --git a/src/release-notes/whats-new.json b/src/release-notes/whats-new.json index 7f87300..ff2ac3e 100644 --- a/src/release-notes/whats-new.json +++ b/src/release-notes/whats-new.json @@ -1,4 +1 @@ -[ - "This update includes some cool new features and fixes! Starting with comunity made Mods improvements and animations, and a new way to store your essentials for workspaces in different containers!", - "1.12.5b" -] +["This update includes a nice upgrade to workspace management and some nice fixes!", "1.13.2b"] diff --git a/turbo.json b/turbo.json index 9f023e3..643b153 100644 --- a/turbo.json +++ b/turbo.json @@ -32,7 +32,8 @@ }, "test:playwright": { "cache": true, - "inputs": ["**/*.{ts,tsx,js,jsx}"], + "dependsOn": ["build"], + "inputs": ["**/*.{ts,tsx,js,jsx,astro}"], "outputs": ["playwright-report/**", "test-results/**"] } },