Skip to content

feat: markdownlint-cli2 #3936

feat: markdownlint-cli2

feat: markdownlint-cli2 #3936

Workflow file for this run

name: Publish preview & run ecosystem tests
on:
workflow_dispatch:
inputs:
update_snapshots:
description: Regenerate ecosystem snapshots and upload as artifact
type: boolean
default: false
pull_request:
paths: &paths # Sources of the three packages published to pkg.pr.new
- 'packages/knip/**'
- '!packages/knip/test/**'
- '!packages/knip/fixtures/**'
- 'packages/language-server/**'
- 'packages/mcp-server/**'
# Root workspace / dependency config
- 'package.json'
- 'pnpm-lock.yaml'
- 'pnpm-workspace.yaml'
# This workflow and its support files
- '.github/workflows/integration.yml'
- '.github/workflows/scripts/**'
- '.github/workflows/snapshots/**'
push:
branches:
- '**'
paths: *paths
# Automatically cancel in-progress actions on the same branch
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
permissions: {}
jobs:
publish:
name: Build and publish Knip
if: ${{ github.repository_owner == 'webpro-nl' }}
runs-on: ubuntu-latest
permissions:
contents: read
issues: write # comment on referenced issues
outputs:
sha: ${{ steps.publish.outputs.sha }}
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
with:
node-version: 24
- uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5
- run: pnpm install --frozen-lockfile
working-directory: packages/knip
- run: pnpm run build
working-directory: packages/knip
- id: publish
run: |
pnpx pkg-pr-new publish --compact './packages/knip' './packages/language-server' './packages/mcp-server'
- name: Comment on referenced issues
if: github.event_name == 'push'
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
with:
script: |
const sha = '${{ steps.publish.outputs.sha }}';
const commits = context.payload.commits || [];
const messages = commits.map(commit => commit.message).join('\n');
const issueRefs = messages.match(/#(\d+)/g) || [];
const issues = new Set(issueRefs.map(ref => parseInt(ref.slice(1))));
const isClosingMatch = /(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?)\s+#(\d+)/gi;
const closingIssues = new Set([...messages.matchAll(isClosingMatch)].map(m => parseInt(m[1])));
for (const issue_number of issues) {
try {
const { owner, repo } = context.repo;
const { data } = await github.rest.issues.get({ owner, repo, issue_number });
if (data.state === 'open' || closingIssues.has(issue_number)) {
const body = `Preview release available:\n\`\`\`sh\nnpm i -D https://pkg.pr.new/knip@${sha}\n\`\`\``;
await github.rest.issues.createComment({ owner, repo, issue_number, body });
}
} catch(error) {
console.log(`Could not comment on #${issue_number}: ${error.message}`);}
}
integration:
name: Run Knip in ${{ matrix.project.name }}
needs: publish
runs-on: ubuntu-latest
permissions:
contents: read
env:
PKG_URL: https://pkg.pr.new/knip@${{ needs.publish.outputs.sha }}
SNAP: ${{ github.workspace }}/.github/workflows/scripts/snap.sh
UPDATE_SNAPSHOTS: ${{ inputs.update_snapshots && '1' || '' }}
SNAPSHOT_OUT_DIR: /tmp/snapshot-updates
PNPM_CONFIG_MINIMUM_RELEASE_AGE: '0'
PNPM_CONFIG_TRUST_POLICY: 'off'
PNPM_CONFIG_VERIFY_DEPS_BEFORE_RUN: 'false'
strategy:
fail-fast: false
matrix:
project:
- name: 10ten-ja-reader
repo: birchill/10ten-ja-reader
commands: |
pnpm install
bash $SNAP 10ten-ja-reader -- pnpm dlx $PKG_URL
- name: argos
repo: argos-ci/argos
commands: | # build required: knexfile.js requires ./dist at config load time
pnpm install
pnpm build
pnpm add -D -w $PKG_URL
bash $SNAP argos -- pnpm run knip
- name: astro
repo: withastro/astro
commands: |
pnpm install
pnpm add -D -w $PKG_URL
bash $SNAP astro -- pnpm knip --fix
- name: create-typescript-app
repo: JoshuaKGoldberg/create-typescript-app
commands: |
pnpm install
pnpm add -D $PKG_URL
bash $SNAP create-typescript-app -- pnpm lint:knip
- name: DefinitelyTyped-tools
repo: microsoft/DefinitelyTyped-tools
commands: |
pnpm install
bash $SNAP DefinitelyTyped-tools -- pnpm dlx $PKG_URL
- name: eslint
repo: eslint/eslint
commands: |
npm install
npm install --prefix docs
npm install -D $PKG_URL
bash $SNAP eslint -- npm run lint:unused -- --cache
npm run lint:unused -- --cache --no-exit-code
- name: mocha
repo: mochajs/mocha
commands: |
npm ci
npm install -D $PKG_URL
bash $SNAP mocha -- npm run lint:knip
- name: InvokeAI
repo: invoke-ai/InvokeAI
sparse-checkout: invokeai/frontend/web
commands: |
cd invokeai/frontend/web
pnpm install
pnpm add -D $PKG_URL
bash $SNAP InvokeAI -- bunx --bun knip --tags=-knipignore
bunx --bun knip --tags=-knipignore --production --fix --allow-remove-files --format --no-exit-code
bash $SNAP InvokeAI-prod -- bunx --bun knip --tags=-knipignore --production
- name: npmx.dev
repo: npmx-dev/npmx.dev
commands: |
pnpm install
pnpm add -D -w $PKG_URL
bash $SNAP npmx.dev -- pnpm knip
bash $SNAP npmx.dev-prod -- pnpm knip --production --exclude dependencies --fix
- name: prettier
repo: prettier/prettier
commands: |
yarn
yarn --cwd scripts/release
yarn --cwd scripts/tools/bundle-test
yarn --cwd scripts/tools/eslint-plugin-prettier-internal-rules
yarn --cwd website
yarn add -D knip@$PKG_URL
bash $SNAP prettier -- yarn knip
- name: query
repo: TanStack/query
commands: |
pnpm install
pnpm add -D -w $PKG_URL
bash $SNAP query -- pnpm test:knip --cache
pnpm test:knip --cache --no-exit-code
- name: rolldown
repo: rolldown/rolldown
commands: |
pnpm install
pnpm add -D -w knip@$PKG_URL
bash $SNAP rolldown -- pnpm knip
- name: sanity
repo: sanity-io/sanity
commands: |
pnpm install --no-frozen-lockfile
pnpm add -D -w $PKG_URL
bash $SNAP sanity -- pnpm knip --exclude duplicates
- name: sentry
repo: getsentry/sentry
commands: |
pnpm install
pnpm add -D $PKG_URL
bash $SNAP sentry -- pnpm run knip --fix
bash $SNAP sentry-prod -- pnpm run knip:prod
- name: slonik
repo: gajus/slonik
commands: |
pnpm install --no-frozen-lockfile --ignore-scripts
bash $SNAP slonik -- pnpm dlx $PKG_URL
- name: TypeScript
repo: microsoft/TypeScript
commands: |
npm ci
npm install -D $PKG_URL
bash $SNAP TypeScript -- npx knip
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
- name: Check out ${{ matrix.project.repo }}
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
with:
repository: ${{ matrix.project.repo }}
path: ${{ matrix.project.name }}
sparse-checkout: ${{ matrix.project.sparse-checkout }}
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
with:
node-version: 24
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
- uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5
- name: Run Knip in ${{ matrix.project.repo }}
working-directory: ${{ matrix.project.name }}
run: |
set -x
${{ matrix.project.commands }}
- name: Upload updated snapshots
if: ${{ inputs.update_snapshots }}
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: snapshots-${{ matrix.project.name }}
path: /tmp/snapshot-updates/
if-no-files-found: ignore
aggregate-snapshots:
name: Aggregate updated snapshots
if: ${{ inputs.update_snapshots }}
needs: integration
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
pattern: snapshots-*
path: snapshots/
merge-multiple: true
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: snapshots
path: snapshots/