- Last update 4/29/2026
- Below was run on 2 different Mac arm64 machines
git clone https://github.com/quipucords/quipucords-ui
cd quipucords-ui
git checkout 2.1.0
- Note: quipucords-ui v2.1.0 is on patternfly 5.3.3
- patternfly 5.3.3 requires node 18 to build
- patternfly 6.4.0 require node 20 to build
nvm install 18 && nvm exec 18 bash -c 'export NODE_ENV=development && corepack enable'nvm install 20 && nvm exec 20 bash -c 'export NODE_ENV=development && corepack enable'
- It is important you have run the above with
corepack enablefor the node versions used
brew install expect
- If you don't have "unbuffer" present you will get an error like below
./run.sh: line 57: unbuffer: command not found
time ./run.sh --generate-rules \
--from v5.3.3 --to v6.4.1 \
--dep-from v5.3.0 --dep-to v6.4.0 \
--from-node-version 18 --to-node-version 20 \
--from-install-command "corepack yarn install" \
--non-interactive
[INFO] Temp directory: /var/folders/8f/2ddxt6ls42xcyfh3dbhp82100000gn/T//pf-rules.WSl998
[INFO] Path saved to .semver_runner
[STEP 1/4] Cloning repositories
[INFO] Cloning patternfly-react...
[INFO] Cloning patternfly...
[STEP 2/4] Selecting version tags
[INFO] Analysis range: patternfly-react v5.3.3 -> v6.4.1
[INFO] Dependency range: patternfly v5.3.0 -> v6.4.0
[STEP 3/4] Running semver-analyzer analyze
[INFO] Running '/Users/jmatthews/synced/runs/2026_04_29c/patternfly-tools/bin/semver-analyzer analyze typescript --repo /var/folders/8f/2ddxt6ls42xcyfh3dbhp82100000gn/T//pf-rules.WSl998/patternfly-react --from v5.3.3 --to v6.4.1 --dep-repo /var/folders/8f/2ddxt6ls42xcyfh3dbhp82100000gn/T//pf-rules.WSl998/patternfly --dep-from v5.3.0 --dep-to v6.4.0 --dep-build-command source ~/.nvm/nvm.sh && nvm exec 20.11.0 bash -c 'export NODE_ENV=development && yarn install && npx gulp buildPatternfly' --build-command corepack yarn build --from-node-version 18 --to-node-version 20 --from-install-command corepack yarn install --no-llm --log-file /Users/jmatthews/synced/runs/2026_04_29c/patternfly-tools/logs/20260429T182523/semver_analyze.log --log-level info -o /var/folders/8f/2ddxt6ls42xcyfh3dbhp82100000gn/T//pf-rules.WSl998/semver_report.json'
[INFO] Follow logs: tail -f /Users/jmatthews/synced/runs/2026_04_29c/patternfly-tools/logs/20260429T182523/semver_analyze.stdout
[INFO] Semver analysis complete (3m19s)
[INFO] Report: /var/folders/8f/2ddxt6ls42xcyfh3dbhp82100000gn/T//pf-rules.WSl998/semver_report.json
[STEP 4/4] Generating Konveyor rules
[INFO] Running '/Users/jmatthews/synced/runs/2026_04_29c/patternfly-tools/bin/semver-analyzer konveyor typescript --from-report /var/folders/8f/2ddxt6ls42xcyfh3dbhp82100000gn/T//pf-rules.WSl998/semver_report.json --output-dir /var/folders/8f/2ddxt6ls42xcyfh3dbhp82100000gn/T//pf-rules.WSl998/semver_rules --log-file /Users/jmatthews/synced/runs/2026_04_29c/patternfly-tools/logs/20260429T182523/semver_konveyor.log --log-level info --rename-patterns /Users/jmatthews/synced/runs/2026_04_29c/patternfly-tools/patternfly-token-mappings.yaml'
[INFO] Follow logs: tail -f /Users/jmatthews/synced/runs/2026_04_29c/patternfly-tools/logs/20260429T182523/semver_konveyor.stdout
[INFO] Rule generation complete (0m01s)
[INFO] Rule generation complete!
[INFO] Rules: /var/folders/8f/2ddxt6ls42xcyfh3dbhp82100000gn/T//pf-rules.WSl998/semver_rules/
[INFO] Report: /var/folders/8f/2ddxt6ls42xcyfh3dbhp82100000gn/T//pf-rules.WSl998/semver_report.json
[INFO] Path saved to .semver_runner for use with --migrate
[INFO] Total runtime: 4m13s
real 4m13.536s
user 6m5.577s
sys 4m19.797s
Looking at rules created ⏺ 4,005 rules total across the 4 rule files:
| File | Rules |
|---|---|
| breaking-changes-css.yaml | 3,154 |
| breaking-changes-api.yaml | 584 |
| breaking-changes-composition.yaml | 232 |
| breaking-changes-deps.yaml | 35 |
The vast majority (79%) are CSS-related breaking changes.
$ time ./run.sh --migrate ./quipucords-ui --base-branch original_2.1.0 --non-interactive
[INFO] Using rules from .semver_runner: /var/folders/l1/1b7gzz8n02b5nrtdq51bnj4r0000gn/T//pf-rules.3If8br
[INFO] Base branch: original_2.1.0
[INFO] Creating migration branch: semver/goose/042926-1740
Already on 'original_2.1.0'
Your branch is up to date with 'origin/original_2.1.0'.
Switched to a new branch 'semver/goose/042926-1740'
[INFO] Project: /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/quipucords-ui
[INFO] Branch: semver/goose/042926-1740
[INFO] Rules: /var/folders/l1/1b7gzz8n02b5nrtdq51bnj4r0000gn/T//pf-rules.3If8br
[INFO] Agent: goose
[INFO] Temp dir: /var/folders/l1/1b7gzz8n02b5nrtdq51bnj4r0000gn/T//pf-migrate.ZyvhU2
[STEP 1/8] Generating provider settings
[STEP 2/8] Starting frontend-analyzer-provider
[INFO] Running '/Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/bin/frontend-analyzer-provider serve -p 9002'
[INFO] frontend-analyzer-provider started (PID 54977, port 9002)
[STEP 3/8] Running kantra analysis
[INFO] Running '/Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/.kantra/kantra analyze --provider java --input /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/quipucords-ui --output /var/folders/l1/1b7gzz8n02b5nrtdq51bnj4r0000gn/T//pf-migrate.ZyvhU2/kantra --rules /var/folders/l1/1b7gzz8n02b5nrtdq51bnj4r0000gn/T//pf-rules.3If8br/semver_rules --override-provider-settings /var/folders/l1/1b7gzz8n02b5nrtdq51bnj4r0000gn/T//pf-migrate.ZyvhU2/provider_settings.json --enable-default-rulesets=false --run-local --overwrite'
[INFO] Follow logs: tail -f /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/logs/20260429T174005/kantra.log
[INFO] Kantra analysis complete (0m39s)
[STEP 4/8] Stopping frontend-analyzer-provider
[INFO] frontend-analyzer-provider stopped
[STEP 5/8] Converting kantra output to JSON
[INFO] Converted: /var/folders/l1/1b7gzz8n02b5nrtdq51bnj4r0000gn/T//pf-migrate.ZyvhU2/kantra/output.json
[STEP 6/8] Applying pattern-based fixes
[INFO] Running 'unbuffer /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/bin/fix-engine-cli fix /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/quipucords-ui --strategies /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/rules/fix-guidance/fix-strategies.json --input /var/folders/l1/1b7gzz8n02b5nrtdq51bnj4r0000gn/T//pf-migrate.ZyvhU2/kantra/output.json'
[INFO] Follow logs: tail -f /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/logs/20260429T174005/fix-pattern.log
[INFO] Pattern-based fixes complete (0m13s)
[STEP 7/8] Applying LLM-based fixes
[INFO] Running 'unbuffer /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/bin/fix-engine-cli fix /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/quipucords-ui --input /var/folders/l1/1b7gzz8n02b5nrtdq51bnj4r0000gn/T//pf-migrate.ZyvhU2/kantra/output.json --llm-provider goose --strategies /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/rules/fix-guidance/fix-strategies.json'
[INFO] Follow logs: tail -f /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/logs/20260429T174005/fix-llm.log
[INFO] LLM-based fixes complete (32m56s)
[INFO] Committed automated fixes
[STEP 8/8] Running goose for remaining fixes
[INFO] Running 'env GOOSE_MODE=auto goose run -i /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/prompt.md'
[INFO] Follow logs: tail -f /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/logs/20260429T174005/agent-goose.log
[INFO] Goose agent complete (20m59s)
[INFO] Committed AI agent fixes
[INFO] Migration complete!
[INFO] Project: /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/quipucords-ui
[INFO] Kantra output: /var/folders/l1/1b7gzz8n02b5nrtdq51bnj4r0000gn/T//pf-migrate.ZyvhU2/kantra/
[INFO] Logs: /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/logs/20260429T174005/
[INFO] Total runtime: 54m49s
./run.sh --migrate ./quipucords-ui --base-branch original_2.1.0 1165.40s user 487.33s system 50% cpu 54:49.20 total
-
npm run buildsucceeded -
npm run test*. Showed some issues from linting that needed to be fixex *. Running:npm run test:lint-fixaddressed many of the lint issues -
npm run test$ npm run test> quipucords-ui@2.1.0 test > export NODE_ENV=test; run-s test:ci-lint test:ci-build test:ci-coverage > quipucords-ui@2.1.0 test:ci-lint > run-s test:spell* test:types test:lint > quipucords-ui@2.1.0 test:spell-support > cspell ./README.md ./config/README.md ./CONTRIBUTING.md './scripts/*.js' './config/*.js' './tests/*.ts*' --config ./config/cspell.config.json CSpell: Files checked: 12, Issues found: 0 in 0 files. > quipucords-ui@2.1.0 test:spell > cspell './public/locales/**/en*json' './public/index.html' './src/**/*.ts*' '!./src/**/*.test.*.snap' '!./src/vendor/**' --config ./config/cspell.config.json CSpell: Files checked: 76, Issues found: 0 in 0 files. > quipucords-ui@2.1.0 test:types > tsc --noEmit > quipucords-ui@2.1.0 test:lint > eslint --ext=json --ext=ts --ext=tsx --ignore-pattern 'src/vendor/**' ./src ./public ============= WARNING: You are currently running a version of TypeScript which is not officially supported by @typescript-eslint/typescript-estree. You may find that it works just fine, or you may not. SUPPORTED TYPESCRIPT VERSIONS: >=4.7.4 <5.6.0 YOUR TYPESCRIPT VERSION: 5.6.3 Please only submit bug reports when using the officially supported version. ============= /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/quipucords-ui/src/components/login/login.tsx 74:5 warning React Hook useCallback has a missing dependency: 't'. Either include it or remove the dependency array react-hooks/exhaustive-deps /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/quipucords-ui/src/views/credentials/addCredentialModal.tsx 29:24 warning Unexpected any. Specify a different type @typescript-eslint/no-explicit-any /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/quipucords-ui/src/views/scans/showAggregateReportModal.tsx 84:3 error 'actions' is defined but never used. Allowed unused args must match /^_/u @typescript-eslint/no-unused-vars /Users/jmatthews/synced/runs/2026_04_29b/patternfly-tools/quipucords-ui/src/views/sources/addSourceModal.tsx 52:24 warning Unexpected any. Specify a different type @typescript-eslint/no-explicit-any 94:9 warning The 'getCleanedSourceData' function makes the dependencies of useCallback Hook (at line 183) change on every render. Move it inside the useCallback callback. Alternatively, wrap the definition of 'getCleanedSourceData' in its own useCallback() Hook react-hooks/exhaustive-deps 94:58 warning Unexpected any. Specify a different type @typescript-eslint/no-explicit-any 156:22 warning Unexpected any. Specify a different type @typescript-eslint/no-explicit-any ✖ 7 problems (1 error, 6 warnings) (node:75733) DeprecationWarning: The 'typeParameters' property is deprecated on NewExpression nodes. Use 'typeArguments' instead. See https://typescript-eslint.io/troubleshooting/faqs/general#the-key-property-is-deprecated-on-type-nodes-use-key-instead-warnings. (Use `node --trace-deprecation ...` to show where the warning was created) ERROR: "test:lint" exited with 1. ERROR: "test:ci-lint" exited with 1.