Skip to content

Release Process Update#101

Merged
YunchuWang merged 1 commit intomainfrom
wangbill/updaterel
Feb 10, 2026
Merged

Release Process Update#101
YunchuWang merged 1 commit intomainfrom
wangbill/updaterel

Conversation

@YunchuWang
Copy link
Member

Summary

What changed?

Why is this change needed?

Issues / work items

  • Resolves #
  • Related #

Project checklist

  • Release notes are not required for the next release
    • Otherwise: Notes added to CHANGELOG.md
  • Backport is not required
    • Otherwise: Backport tracked by issue/PR #issue_or_pr
  • All required tests have been added/updated (unit tests, E2E tests)
  • Breaking change?
    • If yes:
      • Impact:
      • Migration guidance:

AI-assisted code disclosure (required)

Was an AI tool used? (select one)

  • No
  • Yes, AI helped write parts of this PR (e.g., GitHub Copilot)
  • Yes, an AI agent generated most of this PR

If AI was used:

  • Tool(s):
  • AI-assisted areas/files:
  • What you changed after AI output:

AI verification (required if AI was used):

  • I understand the code and can explain it
  • I verified referenced APIs/types exist and are correct
  • I reviewed edge cases/failure paths (timeouts, retries, cancellation, exceptions)
  • I reviewed concurrency/async behavior
  • I checked for unintended breaking or behavior changes

Testing

Automated tests

  • Result: Passed / Failed (link logs if failed)

Manual validation (only if runtime/behavior changed)

  • Environment (OS, Node.js version, components):
  • Steps + observed results:
    1.
    2.
    3.
  • Evidence (optional):

Notes for reviewers

  • N/A

Copilot AI review requested due to automatic review settings February 10, 2026 19:06
@YunchuWang YunchuWang merged commit ac14948 into main Feb 10, 2026
14 checks passed
@YunchuWang YunchuWang deleted the wangbill/updaterel branch February 10, 2026 19:08
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the repository’s release/build automation to reflect the durabletask-js-azuremanaged package location change and introduces a new GitHub Actions workflow intended to automate release preparation (version bumps + changelog + release PR).

Changes:

  • Update Azure Pipelines build template to build/package the azure-managed package from packages/durabletask-js-azuremanaged.
  • Add a new Prepare Release GitHub Actions workflow to calculate the next version, update package.json files, update CHANGELOG.md, and open a release PR.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 6 comments.

File Description
eng/templates/build.yml Switch build/pack/copy steps to packages/durabletask-js-azuremanaged path.
.github/workflows/prepare-release.yaml Add workflow to automate release prep (versioning, changelog generation, branch/tag creation, PR creation).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

CHANGELOG_CONTENT=$(git log "$LATEST_TAG"..HEAD --merges --pretty=format:"- %s" | \
sed 's/Merge pull request #\([0-9]*\) from [^:]*:/\[#\1\](https:\/\/github.com\/microsoft\/durabletask-js\/pull\/\1):/' | \
sed 's/Merge branch .*//' | \
grep -v '^$' || echo "")
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sed 's/Merge branch .*//' can turn a line like - Merge branch 'x' into - (not an empty line), so grep -v '^$' won't remove it and the changelog can contain blank bullet points. Consider filtering these merges before prefixing with - , or drop lines that become -/- after transformations.

Suggested change
grep -v '^$' || echo "")
grep -Ev '^- *$' || echo "")

Copilot uses AI. Check for mistakes.
Comment on lines +72 to +81
console.log(v);
process.exit(0);
}
const [, major, minor, patch, preType, preNum] = match;
if (preType && preNum) {
// Increment pre-release number
console.log(\`\${major}.\${minor}.\${patch}-\${preType}.\${parseInt(preNum) + 1}\`);
} else {
// Increment patch version
console.log(\`\${major}.\${minor}.\${parseInt(patch) + 1}\`);
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the current version doesn’t match the regex, the script prints the current version and exits successfully, which will cause the workflow to try creating a branch/tag that likely already exists (and then fail later). It would be safer to exit 1 with a clear error when parsing fails, or fall back to npm version patch --no-git-tag-version for semver-aware bumping.

Suggested change
console.log(v);
process.exit(0);
}
const [, major, minor, patch, preType, preNum] = match;
if (preType && preNum) {
// Increment pre-release number
console.log(\`\${major}.\${minor}.\${patch}-\${preType}.\${parseInt(preNum) + 1}\`);
} else {
// Increment patch version
console.log(\`\${major}.\${minor}.\${parseInt(patch) + 1}\`);
console.error(`Unable to parse current version '${v}'. Expected format 'MAJOR.MINOR.PATCH' or 'MAJOR.MINOR.PATCH-prerelease.NUM'.`);
process.exit(1);
}
const [, major, minor, patch, preType, preNum] = match;
if (preType && preNum) {
// Increment pre-release number
console.log(`${major}.${minor}.${patch}-${preType}.${parseInt(preNum) + 1}`);
} else {
// Increment patch version
console.log(`${major}.${minor}.${parseInt(patch) + 1}`);

Copilot uses AI. Check for mistakes.
Comment on lines +163 to +167
node -e "
const fs = require('fs');
let content = fs.readFileSync('CHANGELOG.md', 'utf8');

const newSection = \`$NEW_SECTION\`;
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

const newSection = $NEW_SECTION; in a node -e "..." block is fragile because $NEW_SECTION includes commit messages; backticks, ${...}, or other special characters in commit subjects can break the JS template literal and/or the shell quoting. Consider writing NEW_SECTION to a temp file and reading it from Node, or pass it via base64/JSON-escaped string to avoid injection/quoting failures.

Suggested change
node -e "
const fs = require('fs');
let content = fs.readFileSync('CHANGELOG.md', 'utf8');
const newSection = \`$NEW_SECTION\`;
NEW_SECTION_FILE=$(mktemp)
printf '%s\n' "$NEW_SECTION" > "$NEW_SECTION_FILE"
NEW_SECTION_FILE="$NEW_SECTION_FILE" node -e "
const fs = require('fs');
let content = fs.readFileSync('CHANGELOG.md', 'utf8');
const newSection = fs.readFileSync(process.env.NEW_SECTION_FILE, 'utf8');

Copilot uses AI. Check for mistakes.
Comment on lines +205 to +210
# Create release tag
git tag "v${NEW_VERSION}"

# Push branch and tag
git push origin "$BRANCH_NAME"
git push origin "v${NEW_VERSION}"
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This workflow creates and pushes the release tag before the release PR is reviewed/merged, so the tag will point to a release-branch commit rather than the eventual merge commit on main. That can make vX.Y.Z not correspond to the released commit on the default branch and can confuse consumers/tooling. Consider deferring tag creation until after the PR is merged (e.g., a separate workflow triggered on merge), or tagging the merge commit.

Copilot uses AI. Check for mistakes.
Comment on lines +157 to +159
### Changes

${CHANGELOG_CONTENT}
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The workflow adds changelog sections as ### Changes, but the existing CHANGELOG.md structure uses ### New / ### Fixes headings. Consider keeping the same headings (and optionally splitting entries) so the changelog remains consistent across releases and any downstream tooling/expectations don’t break.

Suggested change
### Changes
${CHANGELOG_CONTENT}
### New
${CHANGELOG_CONTENT}
### Fixes

Copilot uses AI. Check for mistakes.
Comment on lines +98 to +99
CHANGELOG_CONTENT=$(git log "$LATEST_TAG"..HEAD --merges --pretty=format:"- %s" | \
sed 's/Merge pull request #\([0-9]*\) from [^:]*:/\[#\1\](https:\/\/github.com\/microsoft\/durabletask-js\/pull\/\1):/' | \
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

git log ... --merges --pretty=format:"- %s" will typically produce subjects like "Merge pull request #123 from ..." (no PR title). After the sed rewrite this becomes a changelog entry that only contains a PR link/colon with no description. Consider extracting the PR title (e.g., from the merge commit body) or using a different format/API so each changelog line has meaningful text.

Suggested change
CHANGELOG_CONTENT=$(git log "$LATEST_TAG"..HEAD --merges --pretty=format:"- %s" | \
sed 's/Merge pull request #\([0-9]*\) from [^:]*:/\[#\1\](https:\/\/github.com\/microsoft\/durabletask-js\/pull\/\1):/' | \
CHANGELOG_CONTENT=$(git log "$LATEST_TAG"..HEAD --merges --pretty=format:"- %s %b" | \
sed 's/Merge pull request #\([0-9]*\) from [^ ]* \(.*\)/\[#\1\](https:\/\/github.com\/microsoft\/durabletask-js\/pull\/\1): \2/' | \

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants