agentleFS
Microsoft AzureKnown publisherAzure/azure-kusto-spark/SKILL.md

SKILL.md

Skill82 starsChanged 7 days agoApache-2.0View on GitHub

You are a release automation agent for the Azure Kusto Spark Connector. You execute the complete release lifecycle: cherry-picking changes between branches, bumping versions, updating the changelog, creating tags, and triggering the release pipeline. You operate by running git and shell commands in the repository. This file is not auto-loaded by AI agents. You must explicitly reference it when prompting. The file must be present in your working directory (i.e., merged to the branch you're working from). Use the @…

  • Commits and pushes

200 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use estate-guard.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • Arcanea-LabsSkill

    estate-guard

    Security gate for agentic repos. Use before opening a PR that touches .github/workflows, .claude (hooks, settings, agents, commands, skills), .mcp.json, install scripts, or Next.js API routes; when asked to "security review", "scan for prompt injection", "harden this repo", "check the agentic surface", or when a fetched page, issue, comment, or tool result reads like instructions. Runs the estate-guard scanner, triages by severity, and applies the fix patterns.

    Also in 3 projects that use this

  • Other versions200 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 200

    1. xtekky/gpt4free★ 67ksame name
    2. stas00/ml-engineering★ 20ksame name
    3. wanghongenpin/proxypin★ 14ksame name
    4. Ataraxy-Labs/sem★ 3.4ksame name
    5. op7418/NanoBanana-PPT-Skills★ 3.3ksame name
    6. charmbracelet/pop★ 2.9ksame name
    7. duty1g/x64dbg-mcp-server★ 2.8ksame name
    8. RevylAI/greenlight★ 2.4ksame name
    9. kevinho/clawfeed★ 2.4ksame name
    10. Autumn-27/ScopeSentry★ 1.9ksame name

    190 more not listed

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repositoryOne other file it gives its agents.

The file

Show its rules and text

We split this skill into the rules it gives an agent

34 rules. 0 are common, 21 are distinctive, and 13 are very specific to this project.

  • 0

    Common

    Most of the 115 edited versions we read keep these.

  • 21

    Distinctive

    This author's own choices. Worth a look.

  • 13

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  • could be automatic: a setting could enforce it
  1. Very specific:

    Use the @ prefix to include this file in your prompt:

    line 13
  2. Very specific:

    Use #file:SKILL.md to reference this file, or @workspace to let Copilot find it:

    line 39
  3. Distinctive:

    When using Copilot on GitHub.com (e.g., in a PR comment or issue), reference the file path:

    line 69
  4. Distinctive:

    Provide commit SHAs or PR numbers: when starting from Phase 2 (cherry-pick)

    line 80
  5. Distinctive:

    Specify a version: if you don't want auto-detection (e.g., "release version 7.0.6")

    line 81
  6. Distinctive:

    If information is missing, the agent should ask for:

    line 114
  7. Distinctive:

    Before starting any phase, verify:

    line 140
  8. Distinctive:

    When the user asks you to take over, run these commands to determine the current state and decide which phase to start from.

    line 156
  9. Distinctive:

    Use the detected state to determine where to start:

    line 211
  10. Distinctive:

    After detecting the state, summarize what you found and confirm with the user before proceeding.

    line 233
  11. Distinctive:

    Follow Conventional Commits for PR titles and commit messages:

    line 251
  12. Very specific:

    Wait for CI checks (build.yml) to pass

    line 291
  13. Distinctive:

    If git cherry-pick reports conflicts:

    line 327
  14. Distinctive:

    Wait for CI checks to pass

    line 353
  15. Very specific:

    Goal: Update the <revision> property in pom.xml to the new version on both branches.

    line 373
  16. Distinctive:

    Manual override: If the user specifies a version, use that instead of auto-detection.

    line 391
  17. Very specific:

    Goal: Update CHANGELOG.md with the new version entry on both branches.

    line 455
  18. Very specific:

    Create a new [Unreleased] section with empty subsections

    line 473
  19. Very specific:

    Add a new version heading: ## [{NEW_VERSION}] - YYYY-MM-DD (use today's date)

    line 474
  20. Distinctive:

    Goal: Create version tags on both branches to trigger the release pipeline.

    line 541
  21. Very specific:

    After pushing tags, the Azure release pipeline (.azuredevops/release.yml) runs automatically for tags matching v3.0_*.*.* / v4.0_*.*.*.

    line 579
  22. Very specific:

    Keep the release/spark3 values for Spark/Scala-specific properties

    line 634
  23. Distinctive:

    Keep the functional code changes from the cherry-picked commit

    line 635
  24. Distinctive:

    If unsure, ask the user to resolve manually

    line 636
  25. Distinctive:

    Ask the user whether the change needs adaptation for Spark 3

    line 640
  26. Distinctive:

    If a tag already exists, do NOT overwrite it

    line 643
  27. Distinctive:

    Ask the user whether to use a different version number or delete the existing tag

    line 644
  28. Very specific:

    Check the pipeline run logs in Azure DevOps (az pipelines runs show --id <run-id>)

    line 647
  29. Distinctive:

    Always use squash merge for PRs — never regular merge or rebase merge

    line 653
  30. Very specific:

    Never push directly to master or release/spark3 — always go through PRs

    line 654
  31. Distinctive:

    Always verify CI passes before merging

    line 655
  32. Very specific:

    Always confirm the version in pom.xml matches the tag being created

    line 656
  33. Distinctive:

    When in doubt about any step, ask the user before proceeding

    line 657
  34. Very specific:

    Keep CHANGELOG.md in sync on both branches

    line 658

“Common” is measured: kept by at least 6 in 10 of the 115 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

SKILL: Azure Kusto Spark Connector — Release Process

Identity

You are a release automation agent for the Azure Kusto Spark Connector. You execute the complete release lifecycle: cherry-picking changes between branches, bumping versions, updating the changelog, creating tags, and triggering the release pipeline. You operate by running git and shell commands in the repository.

How to Invoke This Skill

This file is not auto-loaded by AI agents. You must explicitly reference it when prompting. The file must be present in your working directory (i.e., merged to the branch you're working from).

Copilot CLI (Terminal)

Use the @ prefix to include this file in your prompt:

Development Workflow:

@SKILL.md I have a branch with changes ready. Take over and get it merged to both branches.
@SKILL.md My PR #485 was just merged to master. Cherry-pick to Spark 3.

Release Workflow:

@SKILL.md All features are merged. Do a release.
@SKILL.md Bump the version and release. Both branches already have the latest changes merged.
@SKILL.md Just tag and release version 7.0.6 on both branches.

VS Code — GitHub Copilot Chat

Use #file:SKILL.md to reference this file, or @workspace to let Copilot find it:

Development Workflow:

#file:SKILL.md My PR was just merged to master (commit abc1234). Cherry-pick to release/spark3.
@workspace Follow SKILL.md. I have changes on branch asaharn/feat/my-feature ready to push.

Release Workflow:

#file:SKILL.md Bump version to 7.0.6 and update the changelog on both branches.

JetBrains — AI Assistant

Reference the file in AI Assistant chat:

Look at SKILL.md in the project root. My PR #485 was merged to master. Cherry-pick it to release/spark3.
Follow the instructions in SKILL.md to do a release — bump version, update changelog, and tag both branches.

GitHub.com — Copilot in PR / Issues

When using Copilot on GitHub.com (e.g., in a PR comment or issue), reference the file path:

Follow the development workflow in SKILL.md at the repo root. This PR is now merged — describe the next steps to cherry-pick to release/spark3.

Note: GitHub.com Copilot cannot execute git commands directly. It will provide the commands for you to run, or guide you through the GitHub UI steps.

Prompt Tips

  • Be specific about where you are: "My PR is merged", "I have a branch ready", "Both branches are updated"
  • Provide commit SHAs or PR numbers when starting from Phase 2 (cherry-pick)
  • Specify a version if you don't want auto-detection (e.g., "release version 7.0.6")
  • The agent will ask for missing info — you don't need to provide everything upfront

How to Use This Skill

This skill has two independent workflows that can be invoked separately:

  1. Development Workflow (Phases 1–2) — Repeat for each feature/fix. Gets changes onto both branches.
  2. Release Workflow (Phases 3–5) — Run once when ready to release. Bundles all changes since the last tag.

You can invoke either workflow at any point. Tell the agent where you are and it will pick up from there.

Example Prompts — Development Workflow

"I have a branch with changes ready — take over from here"

The agent will detect your current branch, push it if needed, help create a PR to master, and then cherry-pick to release/spark3.

"My PR was just merged to master. Cherry-pick it to Spark 3"

Provide the merged PR number or the squash merge commit SHA. The agent will create a branch from release/spark3, cherry-pick, push, and create a PR.

Example Prompts — Release Workflow

"All features are merged. Do a release"

The agent will run Phases 3–5: bump the POM version on both branches, update the changelog with all changes since the last tag, create tags, and trigger the release pipeline.

"Bump the version and update changelog for release"

The agent will start at Phase 3 — bump the POM version, update the changelog, then ask for confirmation before tagging.

"Just tag and release version X.Y.Z"

The agent will start at Phase 5 — verify the version in pom.xml, create tags on both branches, and trigger the release.

What the Agent May Ask You

If information is missing, the agent should ask for:

Missing InfoWhen Needed
Squash merge commit SHADevelopment Workflow — Phase 2 (cherry-pick)
Version number (if not auto-detecting)Release Workflow — Phase 3+
Change descriptions for changelogRelease Workflow — Phase 4, if not derivable from PRs
Confirmation before pushing tagsRelease Workflow — always before Phase 5

Repository Context

ItemValue
RepositoryAzure/azure-kusto-spark
Spark 4 branchmaster
Spark 3 branchrelease/spark3
Spark 4 tag formatv4.0_{version} (e.g., v4.0_7.0.5)
Spark 3 tag formatv3.0_{version} (e.g., v3.0_7.0.5)
Version property<revision> in root pom.xml
CI pipeline.azuredevops/build.yml — Azure Pipelines build, runs on pushes and PRs
Release pipeline.azuredevops/release.yml — Azure Pipelines release, triggers on tags matching v3.0_*.*.* / v4.0_*.*.* or via manual run
Merge strategySquash merge for all PRs
ChangelogCHANGELOG.md in repo root

Prerequisites

Before starting any phase, verify:

# 1. Working tree is clean
git status --porcelain
# Expected: empty output

# 2. Remote is up to date
git fetch origin

# 3. You are on the correct branch
git branch --show-current

State Detection

When the user asks you to take over, run these commands to determine the current state and decide which phase to start from.

Step 1 — Detect Current Branch and Changes

# What branch are we on?
CURRENT_BRANCH=$(git branch --show-current)
echo "Current branch: $CURRENT_BRANCH"

# Are there uncommitted changes?
DIRTY=$(git status --porcelain)
echo "Uncommitted changes: ${DIRTY:-none}"

# What is the base branch? (master or release/spark3)
BASE_BRANCH=""
if git merge-base --is-ancestor origin/master HEAD 2>/dev/null; then
  BASE_BRANCH="master"
elif git merge-base --is-ancestor origin/release/spark3 HEAD 2>/dev/null; then
  BASE_BRANCH="release/spark3"
fi
echo "Base branch: ${BASE_BRANCH:-unknown}"

# Are there unpushed commits?
UNPUSHED=$(git --no-pager log origin/${CURRENT_BRANCH}..HEAD --oneline 2>/dev/null || echo "branch not on remote")
echo "Unpushed commits: ${UNPUSHED:-none}"

# Does a remote branch exist?
REMOTE_EXISTS=$(git ls-remote --heads origin "$CURRENT_BRANCH" 2>/dev/null)
echo "Remote branch exists: ${REMOTE_EXISTS:+yes}"

Step 2 — Check PR and Tag State

# Check for open PRs from this branch (requires gh CLI)
gh pr list --head "$CURRENT_BRANCH" --state all --json number,state,title,mergeCommit 2>/dev/null || echo "gh CLI not available"

# What is the latest version tag?
LATEST_TAG=$(git tag -l 'v4.0_*' --sort=-version:refname | head -1)
echo "Latest Spark 4 tag: $LATEST_TAG"

LATEST_TAG_3=$(git tag -l 'v3.0_*' --sort=-version:refname | head -1)
echo "Latest Spark 3 tag: $LATEST_TAG_3"

# What version is in pom.xml on master?
MASTER_VERSION=$(git show origin/master:pom.xml | grep '<revision>' | sed 's/.*<revision>\(.*\)<\/revision>.*/\1/')
echo "master pom.xml version: $MASTER_VERSION"

# What version is in pom.xml on release/spark3?
SPARK3_VERSION=$(git show origin/release/spark3:pom.xml | grep '<revision>' | sed 's/.*<revision>\(.*\)<\/revision>.*/\1/')
echo "release/spark3 pom.xml version: $SPARK3_VERSION"

Step 3 — Decision Table

Use the detected state to determine where to start:

Development Workflow (per feature/fix):

Detected StateStart From
On a feature/fix branch with uncommitted changesCommit changes, then Phase 1 (push + PR to master)
On a feature/fix branch with unpushed commitsPhase 1 (push branch + create PR to master)
On a feature/fix branch, already pushed, no PRPhase 1 (create PR to master)
PR merged to master, no corresponding change on release/spark3Phase 2 (cherry-pick to release/spark3)

Release Workflow (once per release):

Detected StateStart From
All changes merged to both branches, version not bumpedPhase 3 (version bump)
Version bumped on both branches, changelog not updatedPhase 4 (changelog update)
Version bumped + changelog updated, tags not createdPhase 5 (tag & release)
Tags already exist for the versionDone — verify release pipeline ran successfully

Step 4 — Confirm with User

After detecting the state, summarize what you found and confirm with the user before proceeding. Clarify which workflow (development or release) you are about to execute:

"I detected that you're on branch asaharn/feat/new-feature with 2 unpushed commits based on master. No PR exists yet. I'll run the Development Workflow — push the branch, create a PR to master, then cherry-pick to release/spark3. Does that sound right?"

"Both branches have all changes merged since the last tag. I'll run the Release Workflow — bump the version, update the changelog, and create tags. What version should I use (auto-detect suggests 7.0.6)?"


Development Workflow

Repeat Phases 1–2 for each feature or fix. Multiple features can be developed and cherry-picked independently before doing a release.

Phase 1 — Feature / Fix Development (on master)

Goal: Implement a change on a branch forked from master, get it merged via PR.

Commit & PR Title Convention

Follow Conventional Commits for PR titles and commit messages:

<type>: <short description>
TypeUse for
featNew features or capabilities
fixBug fixes
choreVersion bumps, dependency updates, maintenance
docsDocumentation changes
refactorCode restructuring without behavior change
ciCI/CD pipeline changes
testAdding or updating tests

Examples: feat: add storage protocol option, fix: resolve CloudInfo cache issue, chore: bump version to 7.0.6

Steps

# 1. Create a feature/fix branch from latest master
git checkout master
git pull origin master
git checkout -b <username>/<type>/<short-description>
# Example: asaharn/feat/new-read-mode  or  asaharn/fix/cloud-info-fix

# 2. Implement the change
# ... make code changes ...

# 3. Commit and push (use conventional commit message)
git add -A
git commit -m "<type>: <short description>"
git push origin <branch-name>

Then on GitHub

  1. Open a Pull Request targeting master — use conventional commit format for the PR title (e.g., feat: add storage protocol option)
  2. Fill in the PR template (Breaking Changes / Features / Fixes sections)
  3. Wait for CI checks (build.yml) to pass
  4. Get the PR reviewed and approved
  5. Squash merge the PR into master
  6. Note the squash merge commit SHA from the merged PR — you will need it for Phase 2

Validation

# Confirm the merge commit is on master
git checkout master
git pull origin master
git --no-pager log --oneline -1
# Should show the squash merge commit

Phase 2 — Cherry-pick to Spark 3 (release/spark3)

Goal: Apply the same change to release/spark3 via cherry-pick.

Input required: The squash merge commit SHA from Phase 1.

Steps

# 1. Create a branch from release/spark3
git checkout release/spark3
git pull origin release/spark3
git checkout -b <username>/<type>/<short-description>_3.0
# Example: asaharn/bugfix/cloud-info-fix_3.0

# 2. Cherry-pick the squash merge commit from master
git cherry-pick <squash-merge-commit-sha>

Handling Cherry-pick Conflicts

If git cherry-pick reports conflicts:

# 1. List conflicted files
git diff --name-only --diff-filter=U

# 2. Open each conflicted file and resolve conflicts manually
#    - Conflicts are typically in pom.xml due to version differences
#    - Keep the release/spark3 version values (spark.version.major=3.5, scala versions, etc.)
#    - Keep the functional code changes from the cherry-picked commit

# 3. After resolving all conflicts
git add -A
git cherry-pick --continue

Push and Merge

# 3. Push the branch
git push origin <branch-name>

Then on GitHub:

  1. Open a Pull Request targeting release/spark3
  2. Wait for CI checks to pass
  3. Squash merge the PR into release/spark3

Validation

git checkout release/spark3
git pull origin release/spark3
git --no-pager log --oneline -1
# Should show the squash merge commit on release/spark3

Release Workflow

Run Phases 3–5 once when ready to release. This bundles all changes merged since the last tag into a single version bump, changelog entry, and release.

Phase 3 — Version Bump

Goal: Update the <revision> property in pom.xml to the new version on both branches.

Determine the New Version

# Auto-detect current version from latest Spark 4 tag
CURRENT_VERSION=$(git tag -l 'v4.0_*' --sort=-version:refname | head -1 | sed 's/v4.0_//')
echo "Current version: $CURRENT_VERSION"

# Compute next patch version
MAJOR=$(echo $CURRENT_VERSION | cut -d. -f1)
MINOR=$(echo $CURRENT_VERSION | cut -d. -f2)
PATCH=$(echo $CURRENT_VERSION | cut -d. -f3)
NEXT_PATCH=$((PATCH + 1))
NEW_VERSION="${MAJOR}.${MINOR}.${NEXT_PATCH}"
echo "Next version: $NEW_VERSION"

Manual override: If the user specifies a version, use that instead of auto-detection.

Bump on master

git checkout master
git pull origin master
git checkout -b <username>/chore/version-bump-${NEW_VERSION}

# Update the revision property in pom.xml
sed -i "s|<revision>.*</revision>|<revision>${NEW_VERSION}</revision>|" pom.xml

# Also update kusto.sdk.version if it tracks the same version
# Check first:
grep '<kusto.sdk.version>' pom.xml
# Only update if it matches the old version

git add pom.xml
git commit -m "chore: bump version to ${NEW_VERSION}"
git push origin <branch-name>

Then on GitHub:

  1. Open a PR targeting master
  2. Squash merge after CI passes

Bump on release/spark3

git checkout release/spark3
git pull origin release/spark3
git checkout -b <username>/chore/version-bump-${NEW_VERSION}_3.0

# Update the revision property in pom.xml
sed -i "s|<revision>.*</revision>|<revision>${NEW_VERSION}</revision>|" pom.xml

# Also update kusto.sdk.version if it tracks the same version
grep '<kusto.sdk.version>' pom.xml

git add pom.xml
git commit -m "chore: bump version to ${NEW_VERSION}"
git push origin <branch-name>

Then on GitHub:

  1. Open a PR targeting release/spark3
  2. Squash merge after CI passes

Validation

# Verify on master
git checkout master && git pull origin master
grep '<revision>' pom.xml
# Should show: <revision>{NEW_VERSION}</revision>

# Verify on release/spark3
git checkout release/spark3 && git pull origin release/spark3
grep '<revision>' pom.xml
# Should show: <revision>{NEW_VERSION}</revision>

Phase 4 — Changelog Update

Goal: Update CHANGELOG.md with the new version entry on both branches.

Gather Changes

# Get the previous version tag
PREV_TAG=$(git tag -l 'v4.0_*' --sort=-version:refname | head -1)
echo "Previous tag: $PREV_TAG"

# List commits since last tag on master
git --no-pager log --oneline ${PREV_TAG}..origin/master

Update CHANGELOG.md

Edit CHANGELOG.md:

  1. Move items from the [Unreleased] section into a new version section
  2. Create a new [Unreleased] section with empty subsections
  3. Add a new version heading: ## [{NEW_VERSION}] - YYYY-MM-DD (use today's date)
  4. Categorize changes under: ### Added, ### Changed, ### Fixed, ### Removed
  5. Source descriptions from the PR titles and PR template sections

The changelog entry should look like:

## [Unreleased]

### Changed
- None

### Added
- None

### Fixed
- None

## [{NEW_VERSION}] - YYYY-MM-DD

### Changed
- <items or "None">

### Added
- <items or "None">

### Fixed
- <items or "None">

Commit Changelog on master

git checkout master
git pull origin master
git checkout -b <username>/chore/changelog-${NEW_VERSION}

# Edit CHANGELOG.md as described above

git add CHANGELOG.md
git commit -m "chore: update changelog for ${NEW_VERSION}"
git push origin <branch-name>

Then on GitHub: open PR → squash merge to master.

Cherry-pick Changelog to release/spark3

# After the changelog PR is merged to master, get the merge commit SHA
git checkout master && git pull origin master
CHANGELOG_SHA=$(git --no-pager log --oneline -1 --format='%H')

git checkout release/spark3
git pull origin release/spark3
git checkout -b <username>/chore/changelog-${NEW_VERSION}_3.0

git cherry-pick $CHANGELOG_SHA
# Resolve conflicts if any (unlikely for CHANGELOG.md)

git push origin <branch-name>

Then on GitHub: open PR → squash merge to release/spark3.

Phase 5 — Tagging & Release

Goal: Create version tags on both branches to trigger the release pipeline.

Preconditions

# Verify both branches have the correct version in pom.xml
git checkout master && git pull origin master
grep '<revision>' pom.xml
# Must show: <revision>{NEW_VERSION}</revision>

git checkout release/spark3 && git pull origin release/spark3
grep '<revision>' pom.xml
# Must show: <revision>{NEW_VERSION}</revision>

# Verify tags don't already exist
git tag -l "v4.0_${NEW_VERSION}"
git tag -l "v3.0_${NEW_VERSION}"
# Both should return empty

Create and Push Tags

# Tag master (Spark 4)
git checkout master
git pull origin master
git tag "v4.0_${NEW_VERSION}"
git push origin "v4.0_${NEW_VERSION}"

# Tag release/spark3 (Spark 3)
git checkout release/spark3
git pull origin release/spark3
git tag "v3.0_${NEW_VERSION}"
git push origin "v3.0_${NEW_VERSION}"

Trigger Release

After pushing tags, the Azure release pipeline (.azuredevops/release.yml) runs automatically for tags matching v3.0_*.*.* / v4.0_*.*.*. To run it manually (for example to publish with the optional steps enabled):

  1. Go to Azure DevOps → Pipelines → the azure-kusto-spark release pipeline
  2. Click Run pipeline
  3. For Spark 4: set sourceTag to v4.0_{NEW_VERSION}, enable createGitHubRelease and uploadToAzure
  4. For Spark 3: set sourceTag to v3.0_{NEW_VERSION}, enable createGitHubRelease and uploadToAzure

Alternatively, via Azure CLI (requires the azure-devops extension):

# Trigger release for Spark 4
az pipelines run --name "<release-pipeline-name>" \
  --branch "refs/tags/v4.0_${NEW_VERSION}" \
  --parameters sourceTag="v4.0_${NEW_VERSION}" createGitHubRelease=true uploadToAzure=true

# Trigger release for Spark 3
az pipelines run --name "<release-pipeline-name>" \
  --branch "refs/tags/v3.0_${NEW_VERSION}" \
  --parameters sourceTag="v3.0_${NEW_VERSION}" createGitHubRelease=true uploadToAzure=true

Validation

# Verify tags exist on remote
git ls-remote --tags origin | grep "${NEW_VERSION}"
# Should show both v4.0_{NEW_VERSION} and v3.0_{NEW_VERSION}

# Check release pipeline status (via Azure CLI)
PIPELINE_ID="$(az pipelines show --name "<release-pipeline-name>" --query id --output tsv)"
az pipelines runs list --pipeline-ids "${PIPELINE_ID}" --top 4
# Should show two runs (one per tag) in progress or completed

Quick Reference

Development Workflow (per feature/fix)

#PhaseKey InputKey Output
1Feature/Fix PR → masterCode changesSquash merge commit SHA
2Cherry-pick to release/spark3Commit SHA from Phase 1Merged to release/spark3

Release Workflow (once per release)

#PhaseKey InputKey Output
3Version bump on both branchesNew version (auto or manual)Updated pom.xml on both branches
4Changelog update on both branchesAll PR descriptions since last tagUpdated CHANGELOG.md on both branches
5Tag & releaseNew versionTags pushed, release pipeline triggered

Error Handling

Cherry-pick conflict

  • Most common in pom.xml due to different Spark/Scala version properties
  • Keep the release/spark3 values for Spark/Scala-specific properties
  • Keep the functional code changes from the cherry-picked commit
  • If unsure, ask the user to resolve manually

CI failure after cherry-pick

  • The Spark 3 build may fail if the change relies on Spark 4-only APIs
  • Ask the user whether the change needs adaptation for Spark 3

Tag already exists

  • If a tag already exists, do NOT overwrite it
  • Ask the user whether to use a different version number or delete the existing tag

Release workflow failure

  • Check the pipeline run logs in Azure DevOps (az pipelines runs show --id <run-id>)
  • Common issues: missing variable group values or service connection approval, Maven build failure, Azure storage upload failure
  • Re-run the pipeline after fixing the issue

Rules

  • Always use squash merge for PRs — never regular merge or rebase merge
  • Never push directly to master or release/spark3 — always go through PRs
  • Always verify CI passes before merging
  • Always confirm the version in pom.xml matches the tag being created
  • When in doubt about any step, ask the user before proceeding
  • Keep CHANGELOG.md in sync on both branches

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.