Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save jwmatthews/615f920b8e85f4a15f6b9bbcffd76dd4 to your computer and use it in GitHub Desktop.

Select an option

Save jwmatthews/615f920b8e85f4a15f6b9bbcffd76dd4 to your computer and use it in GitHub Desktop.

Walkthrough running against quipucords

  • Last update 4/29/2026
  • Below was run on 2 different Mac arm64 machines

PreReqs

Clone the repo

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

Node versions required

Patternfly node requirements

  • patternfly 5.3.3 requires node 18 to build
  • patternfly 6.4.0 require node 20 to build

Install Node 18 and Node 20 (assumes nvm)

  • 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'

corepack enable

  • It is important you have run the above with corepack enable for the node versions used

Install "unbuffer"

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 
    

Generate the rules

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.

Run the migration

$ 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

After the migration

  1. npm run build succeeded

  2. npm run test *. Showed some issues from linting that needed to be fixex *. Running: npm run test:lint-fix addressed many of the lint issues

  3. 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.
    

Most tests pass but there is an issue with a Modal and actions

The migrated code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment