
Upstream Patches
- 478 installs
- 63 repo stars
- Updated August 3, 2026
- pulumi/agent-skills
Create, amend, remove, and rebase patches for Terraform provider submodules using `.
About
Create, amend, remove, and rebase patches for Terraform provider submodules using `./scripts/upstream.sh`. Use when `upgrade-provider` or manual patch work needs owning-patch lookup, patch conflict fixes, patch/hunk removal, or upstream rebase. `upstream/` is a git submodule pointing to the upstream Terraform provider. `patches/` contains patch files applied on top of it. Use `./scripts/upstream.sh` to manage patch state.
- If fixing a regression introduced by an existing patch, amend the owning patch commit.
- Do not create a new patch unless the user explicitly asks.
- | `./scripts/upstream.sh init` | Initialize upstream and apply patches to working directory |
- | `./scripts/upstream.sh init -f` | Force re-initialize, discarding any changes |
- | `./scripts/upstream.sh checkout` | Create branch with patches as commits for editing |
Upstream Patches by the numbers
- 478 all-time installs (skills.sh)
- +40 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #265 of 1,435 DevOps & CI/CD skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
upstream-patches capabilities & compatibility
- Capabilities
- if fixing a regression introduced by an existing · do not create a new patch unless the user explic · | `./scripts/upstream.sh init` | initialize upst · | `./scripts/upstream.sh init f` | force re ini
- Use cases
- documentation
What upstream-patches says it does
Create, amend, remove, and rebase patches for Terraform provider submodules using `./scripts/upstream.sh`. Use when `upgrade-provider` or manual patch work needs owning-patch lookup, patch conflict fi
npx skills add https://github.com/pulumi/agent-skills --skill upstream-patchesAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 478 |
|---|---|
| repo stars | ★ 63 |
| Last updated | August 3, 2026 |
| Repository | pulumi/agent-skills ↗ |
How do I apply upstream-patches using the workflow in its SKILL.md?
Create, amend, remove, and rebase patches for Terraform provider submodules using `./scripts/upstream.sh`. Use when `upgrade-provider` or manual patch work needs owning-patch lookup, patc...
Who is it for?
Developers following the upstream-patches skill for the tasks it documents.
Skip if: Tasks outside the upstream-patches scope described in SKILL.md.
When should I use this skill?
User mentions upstream-patches or related triggers from the skill description.
What you get
Working upstream-patches setup aligned with the documented patterns and constraints.
- rebased patch files
- amended upstream checkout commits
- verified patch count
By the numbers
- Documents 7 ./scripts/upstream.sh commands in the commands reference table
- Manages upstream/ git submodule and patches/ directory as paired artifacts
Files
Upstream Patches
upstream/ is a git submodule pointing to the upstream Terraform provider. patches/ contains patch files applied on top of it. Use ./scripts/upstream.sh to manage patch state.
Default Behavior
- If fixing a regression introduced by an existing patch, amend the owning patch commit.
- Do not create a new patch unless the user explicitly asks.
Commands Reference
| Command | Description |
|---|---|
./scripts/upstream.sh init | Initialize upstream and apply patches to working directory |
./scripts/upstream.sh init -f | Force re-initialize, discarding any changes |
./scripts/upstream.sh checkout | Create branch with patches as commits for editing |
./scripts/upstream.sh rebase -i | Interactively edit patch commits |
./scripts/upstream.sh rebase -o <commit> | Rebase patches onto a new upstream commit |
./scripts/upstream.sh check_in | Write commits back to patches and exit checkout mode |
Guardrails
- Never commit directly to
upstream/withoutcheckout/check_in. - Direct edits under
upstream/outside checkout are ephemeral duringupgrade-provider; the tool resets submodule state. - Do not hand-edit
patches/*.patchunless intentionally doing raw patch surgery. - Prefer non-interactive rewrite flow over interactive rebase for agents.
Find Owning Patch First
Before editing patch content, identify the owning patch/commit.
./scripts/upstream.sh checkout
# Find candidate patch files by touched file path or unique hunk text
rg -n "path/to/file|unique_symbol" patches/*.patch
# Optional: inspect candidate patch header/hunks
sed -n '1,120p' patches/00NN-Example.patch
# Map patch file to commit in upstream checkout branch
patch=patches/00NN-Example.patch
subject=$(sed -n 's/^Subject: \[PATCH\] //p' "$patch" | head -n1)
cd upstream
git log --oneline pulumi/patch-checkout --grep "$subject"
# If needed, disambiguate by touched path
git log --oneline pulumi/patch-checkout -- path/to/file
cd ..Set target_sha to the owning commit and edit that commit, not HEAD.
Amend Existing Patch (Preferred, Non-Interactive)
./scripts/upstream.sh checkout
cd upstream
target_sha=<owning-commit-sha>
base_sha=$(git rev-parse "${target_sha}^")
tmp_branch="rewrite-${target_sha:0:8}"
# Rebuild history from parent of target commit
git checkout -b "$tmp_branch" "$base_sha"
git cherry-pick "$target_sha"
# Apply fix and amend target commit
# ...edit files...
git add <files>
git commit --amend --no-edit
# Replay remaining commits
git cherry-pick "${target_sha}..pulumi/patch-checkout"
# If cherry-pick conflicts occur:
# resolve files
# git add <resolved files>
# git cherry-pick --continue
# Move checkout branch to rewritten history
git branch -f pulumi/patch-checkout HEAD
git checkout pulumi/patch-checkout
git branch -D "$tmp_branch"
cd ..Interactive fallback:
./scripts/upstream.sh checkout
./scripts/upstream.sh rebase -i
# mark target commit as edit, amend, then continueRemove Entire Patch
Use when a patch should be deleted completely.
rm patches/00NN-Description.patch
./scripts/upstream.sh checkout
./scripts/upstream.sh check_inRemove Part of a Patch
Use when only selected hunks/files should be removed from an existing patch.
1. Find owning patch/commit (target_sha) and use the amend workflow above. 2. Revert only unwanted changes from the target commit, then amend.
Example during amend step:
cd upstream
# Restore specific docs-only files from parent of amended commit
git checkout HEAD^ -- path/to/docs-only-file path/to/another-doc-file
git add path/to/docs-only-file path/to/another-doc-file
git commit --amend --no-edit
cd ..Create New Patch (Only If Requested)
./scripts/upstream.sh checkout
cd upstream
# ...make changes...
git add <files>
git commit -m "Describe new patch"
cd ..
./scripts/upstream.sh check_inRebasing Patches to a New Upstream Version
./scripts/upstream.sh checkout
# Rebase onto the new upstream commit
./scripts/upstream.sh rebase -o <new_commit_sha>
# Resolve any conflicts that arise
# Write updated patch files
./scripts/upstream.sh check_inVerification Checklist
Before check_in:
- Confirm expected patch count change (
0by default;-1for full patch removal). - Confirm whether target patch should remain present (default yes) or be removed (explicit deletion case).
- Confirm you are editing the owning commit, not adding a new commit by accident.
After check_in:
- Verify patch count matches expectation.
- Verify target patch number/purpose is still present when expected.
- Verify no unexpected new
00NN-*.patchwas introduced.
If checkout mode is stuck, use ./scripts/upstream.sh init -f to reset.
interface:
display_name: "Upstream Patches"
short_description: "Manage upstream Terraform patch stacks in provider repos."
default_prompt: "Use $upstream-patches to find owning patches, amend or remove patch content safely, and verify patch set integrity."
Related skills
How it compares
Use upstream-patches for patch-stack surgery in bridge repos; use pulumi-upgrade-provider when the primary task is automating a full provider version bump.
FAQ
What does upstream-patches do?
Create, amend, remove, and rebase patches for Terraform provider submodules using `./scripts/upstream.sh`. Use when `upgrade-provider` or manual patch work needs owning-patch lookup, patc...
When should I use upstream-patches?
Invoke when Create, amend, remove, and rebase patches for Terraform provider submodules using `./scripts/upstream.sh`. Use when `upgrade-provider` or ma.
Is upstream-patches safe to install?
Review the Security Audits panel on this page before installing in production.