Skip to main content

update-third-party

Update an ITK third-party library to a new version. Use when: bumping a vendored dependency version, updating ThirdParty module, running UpdateFromUpstream.sh. Creates a new branch with the tag-update commit and runs the extraction script.

معلومات المصدر

المستودع
InsightSoftwareConsortium/ITK
آخر نشاط في المصدر
٥ مارس ٢٠٢٦ في ٢٢:١٢
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
١٬٦٦١
التفرعات
٧٤٩

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
update-third-party
description
Update an ITK third-party library to a new version. Use when: bumping a vendored dependency version, updating ThirdParty module, running UpdateFromUpstream.sh. Creates a new branch with the tag-update commit and runs the extraction script.
argument-hint
Which third-party library to update and the new version/tag
# Update ITK Third-Party Library Creates a new git branch with the commits needed to update a vendored third-party library in `Modules/ThirdParty/`. ## When to Use - Updating a third-party library (e.g., JPEG, ZLIB, HDF5, GoogleTest) to a new upstream version - User says "update <library> to <version>" ## Inputs Gather these from the user before starting: | Input | Example | Required | |-------|---------|----------| | Library name | `JPEG`, `ZLIB`, `GoogleTest` | Yes | | New version/tag | `3.1.0`, `v1.18.0`, commit hash | Yes | | Branch name | `update_jpeg` | No (auto-generated) | ## Procedure ### 1. Locate the Update Script Find the module's update script in `Modules/ThirdParty/<NAME>/`. The script name varies: - Most modules: `UpdateFromUpstream.sh` - DoubleConversion: `UpdateDoubleConversionFromGoogle.sh` If there is no update script it is an error! STOP. Read the script to understand the module's configuration (`name`, `tag`, `repo`, `paths`, `extract_source` function). ### 2. Create a New Branch ```bash git fetch origin git checkout -b update_<lowercase_name> origin/main ``` Replace `<lowercase_name>` with a short snake_case identifier (e.g., `update_jpeg`, `update_zlib`, `update_hdf5`). If the user specifies a branch name, use that instead. ### 3. Update the Tag in the Update Script Edit the `readonly tag="..."` line in the update script to the new version. Only change the `tag` value — nothing else. Commit this change: ```bash git add Modules/ThirdParty/<NAME>/<UpdateScript>.sh git commit -m "ENH: Update <library-name> to <version>" ``` The commit message body may optionally include links to upstream release notes or changelog. ### 4. Run the Update Script ```bash ./Modules/ThirdParty/<NAME>/<UpdateScript>.sh ``` This script (powered by `Utilities/Maintenance/update-third-party.bash`): 1. Clones the upstream repository 2. Checks out the specified tag 3. Runs `extract_source()` to prepare a clean subtree 4. Finds the previous import commit via git history 5. Merges the upstream changes into `Modules/ThirdParty/<NAME>/src/` 6. Creates a merge commit. ### 5. Resolve Any Merge Conflicts If there are merge conflicts during the extraction step, the script will pause and prompt you to resolve them in the `work/` directory. Inspect the git history for local changes, and determine ITK's local changes, and the upstream changes. Use your judgment to resolve the conflicts, then stage and commit the resolved files. ```bash git add <resolved-files> git commit ``` ### 6. Handle Post-Update Steps (if needed) Some modules require additional work after extraction: - **Mangling**: If the module uses symbol mangling, you may need to regenerate the mangled headers. This is common for C libraries like JPEG and ZLIB. Follow the instructions in the module's `src/` directory (e.g., `src/itkjpeg/src/itk_jpeg_mangle.h.in`). - **Build fixes**: If the upstream CMake changed significantly, the module's outer `CMakeLists.txt` may need updates. Commit these as separate `COMP:` or `ENH:` commits. ### 7. Verify the Result Verify the commit history: ```bash git log --oneline -3 git diff HEAD~2..HEAD --stat ``` ### 8. Build and Test the changes locally Build ITK with the updated module to ensure there are no build errors. ### 9. Push and Create PR The branch is ready for pushing and PR creation. The PR should target `main`. Determine which remote is the user's fork: ```bash git remote -v ``` Push the branch to the user's fork: ```bash git push <remote-name> update_<lowercase_name> ``` Use the GitHub MCP to create a PR for `main` with a title like "ENH: Update <library> to <version>". The PR description should include: - A summary of the update - Links to upstream release notes or changelog - Any relevant notes about the update (e.g., if there were significant merge conflicts or build fixes needed) - That the commit was generated by the `update-third-party` skill ## Troubleshooting | Problem | Solution | |---------|----------| | `No previous import commit found` | The module may use `exact_tree_match=false`; check the script | | Merge conflicts during extraction | Resolve conflicts under the ThridParty directory ## Reference - Official documentation: [Updating Third Party Projects](../../../Documentation/docs/contributing/updating_third_party.md) - Master update script: [Utilities/Maintenance/update-third-party.bash](../../../Utilities/Maintenance/update-third-party.bash) - All third-party modules: [Modules/ThirdParty/](../../../Modules/ThirdParty/)
عرض على GitHub