diff --git a/.github/workflows/dependency-diff-comment.yml b/.github/workflows/dependency-diff-comment.yml new file mode 100644 index 0000000000..bc25964635 --- /dev/null +++ b/.github/workflows/dependency-diff-comment.yml @@ -0,0 +1,31 @@ +name: dependency-diff-comment + +on: + workflow_run: + workflows: ['dependency-diff'] + types: + - completed + +permissions: + pull-requests: write + actions: read + +jobs: + dependency-diff-comment: + name: 💬 Dependency diff comment + runs-on: ubuntu-slim + if: github.event.workflow_run.conclusion == 'success' + + steps: + - name: 📥 Download artifact + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + with: + name: e18e-diff-result + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: 💬 Post comment + uses: e18e/action-dependency-diff@f825d5b5c5ce0a42dc46c47ec20de24460affcd8 # v1.5.0 + with: + mode: comment-from-artifact + artifact-path: e18e-diff-result.json diff --git a/.github/workflows/dependency-diff.yml b/.github/workflows/dependency-diff.yml new file mode 100644 index 0000000000..e445a7b981 --- /dev/null +++ b/.github/workflows/dependency-diff.yml @@ -0,0 +1,47 @@ +name: dependency-diff + +on: + pull_request: + branches: + - main + - release + paths: + - package.json + - pnpm-lock.yaml + - pnpm-workspace.yaml + - docs/package.json + - cli/package.json + +concurrency: + group: ${{ github.workflow }}-${{ github.event.number || github.sha }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + dependency-diff: + name: 🔎 Dependency diff + runs-on: ubuntu-slim + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-depth: 0 + + - name: 🔎 Compare dependencies + id: analyze + uses: e18e/action-dependency-diff@f825d5b5c5ce0a42dc46c47ec20de24460affcd8 # v1.5.0 + with: + mode: artifact + detect-replacements: 'true' + duplicate-threshold: '4' + dependency-threshold: '15' + size-threshold: '200000' + + - name: 📤 Upload artifact + if: steps.analyze.outputs.artifact-path + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: e18e-diff-result + path: ${{ steps.analyze.outputs.artifact-path }} diff --git a/.github/workflows/remove-needs-review-on-review.yml b/.github/workflows/remove-needs-review-on-review.yml deleted file mode 100644 index 4c8d2d29ab..0000000000 --- a/.github/workflows/remove-needs-review-on-review.yml +++ /dev/null @@ -1,69 +0,0 @@ -name: remove-needs-review-on-review - -on: - pull_request_review: - types: - - submitted - -jobs: - remove-needs-review: - name: 🏷️ Remove needs review label - if: github.repository == 'npmx-dev/npmx.dev' - runs-on: ubuntu-slim - permissions: - contents: read - issues: write - pull-requests: write - steps: - - name: 🏷️ Remove needs review label - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 - with: - script: | - const pr = context.payload.pull_request; - const review = context.payload.review; - const LABEL = 'needs review'; - const reviewer = review?.user?.login; - const author = pr.user?.login; - const reviewerType = review?.user?.type; - - if (!reviewer) { - console.log('No reviewer login found in payload, skipping.'); - return; - } - - if (reviewerType === 'Bot') { - console.log(`Skipping bot review from @${reviewer} on PR #${pr.number}.`); - return; - } - - if (reviewer === author) { - console.log(`Skipping self-review from @${reviewer} on PR #${pr.number}.`); - return; - } - - if (!pr.labels.some(({ name }) => name === LABEL)) { - console.log(`PR #${pr.number} does not have the "${LABEL}" label.`); - return; - } - - const { data: permission } = await github.rest.repos.getCollaboratorPermissionLevel({ - owner: context.repo.owner, - repo: context.repo.repo, - username: reviewer, - }); - - console.log(`Reviewer @${reviewer} permission is "${permission.permission}".`); - - if (!['admin', 'maintain', 'write'].includes(permission.permission)) { - console.log(`Reviewer @${reviewer} is not a maintainer, skipping.`); - return; - } - - await github.rest.issues.removeLabel({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: pr.number, - name: LABEL, - }); - - console.log(`Removed "${LABEL}" from PR #${pr.number}.`); diff --git a/.github/workflows/welcome-close.yml b/.github/workflows/welcome-close.yml index 606f691bc6..0de27332b6 100644 --- a/.github/workflows/welcome-close.yml +++ b/.github/workflows/welcome-close.yml @@ -39,7 +39,7 @@ jobs: const body = [ `Thanks for your first contribution, @${author}! ${emoji}`, '', - `We'd love to welcome you to the npmx community. Come and say hi on [Discord](https://chat.npmx.dev)! And once you've joined, visit [npmx.wamellow.com](https://npmx.wamellow.com/) to claim the **contributor** role.`, + `We'd love to welcome you to the npmx community. Come and say hi on [Discord](https://build.npmx.dev)! And once you've joined, visit [npmx.wamellow.com](https://npmx.wamellow.com/) to claim the **contributor** role.`, ].join('\n'); await github.rest.issues.createComment({ diff --git a/.vite-hooks/pre-commit b/.vite-hooks/pre-commit new file mode 100644 index 0000000000..85fb65b4fc --- /dev/null +++ b/.vite-hooks/pre-commit @@ -0,0 +1 @@ +vp staged diff --git a/app/components/CollapsibleSection.vue b/app/components/CollapsibleSection.vue index 961e3502e5..5ea534620c 100644 --- a/app/components/CollapsibleSection.vue +++ b/app/components/CollapsibleSection.vue @@ -62,8 +62,13 @@ function toggle() { } const ariaLabel = computed(() => { - const action = isOpen.value ? 'Collapse' : 'Expand' - return props.title ? `${action} ${props.title}` : action + if (!props.title) { + return isOpen.value ? $t('common.collapse') : $t('common.expand') + } + + return isOpen.value + ? $t('common.collapse_with_name', { name: props.title }) + : $t('common.expand_with_name', { name: props.title }) }) useHead({ style: [ diff --git a/app/components/CommandPalette.client.vue b/app/components/CommandPalette.client.vue index f8d767ac5f..311b31ac54 100644 --- a/app/components/CommandPalette.client.vue +++ b/app/components/CommandPalette.client.vue @@ -324,6 +324,7 @@ useEventListener(document, 'keydown', handleGlobalKeydown) type="text" :placeholder="viewMeta.placeholder" no-correct + no-password-manager size="lg" class="w-full" :aria-describedby="inputDescribedBy" diff --git a/app/components/Input/Base.vue b/app/components/Input/Base.vue index e3f7edccdc..407abdad70 100644 --- a/app/components/Input/Base.vue +++ b/app/components/Input/Base.vue @@ -1,5 +1,5 @@