From b02032efb4ec98d560e1afcec7c8b95b06b78e4a Mon Sep 17 00:00:00 2001 From: "Calvin A. Allen" Date: Mon, 5 Jan 2026 13:40:45 -0500 Subject: [PATCH] fix(ci): flatten dtvem reusable workflow paths --- ...tegration-test-migrate-node-macos-fnm.yml} | 0 ...ration-test-migrate-node-macos-system.yml} | 0 ...egration-test-migrate-node-ubuntu-nvm.yml} | 0 ...ation-test-migrate-node-ubuntu-system.yml} | 0 ...gration-test-migrate-node-windows-nvm.yml} | 0 ...tion-test-migrate-node-windows-system.yml} | 0 ...ation-test-migrate-python-macos-pyenv.yml} | 0 ...tion-test-migrate-python-macos-system.yml} | 0 ...tion-test-migrate-python-ubuntu-pyenv.yml} | 0 ...ion-test-migrate-python-ubuntu-system.yml} | 0 ...ion-test-migrate-python-windows-pyenv.yml} | 0 ...on-test-migrate-python-windows-system.yml} | 0 ...gration-test-migrate-ruby-macos-rbenv.yml} | 0 ...ration-test-migrate-ruby-macos-system.yml} | 0 ...ration-test-migrate-ruby-ubuntu-rbenv.yml} | 0 ...ation-test-migrate-ruby-ubuntu-system.yml} | 0 ...tion-test-migrate-ruby-windows-system.yml} | 0 ...gration-test-migrate-ruby-windows-uru.yml} | 0 ...tvem-integration-test-migrations-node.yml} | 0 ...em-integration-test-migrations-python.yml} | 0 ...tvem-integration-test-migrations-ruby.yml} | 0 ...de.yml => dtvem-integration-test-node.yml} | 0 ....yml => dtvem-integration-test-python.yml} | 0 ...by.yml => dtvem-integration-test-ruby.yml} | 0 .../workflows/dtvem/generate-changelog.yml | 214 ------------------ 25 files changed, 214 deletions(-) rename .github/workflows/{dtvem/integration-test-migrate-node-macos-fnm.yml => dtvem-integration-test-migrate-node-macos-fnm.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrate-node-macos-system.yml => dtvem-integration-test-migrate-node-macos-system.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrate-node-ubuntu-nvm.yml => dtvem-integration-test-migrate-node-ubuntu-nvm.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrate-node-ubuntu-system.yml => dtvem-integration-test-migrate-node-ubuntu-system.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrate-node-windows-nvm.yml => dtvem-integration-test-migrate-node-windows-nvm.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrate-node-windows-system.yml => dtvem-integration-test-migrate-node-windows-system.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrate-python-macos-pyenv.yml => dtvem-integration-test-migrate-python-macos-pyenv.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrate-python-macos-system.yml => dtvem-integration-test-migrate-python-macos-system.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrate-python-ubuntu-pyenv.yml => dtvem-integration-test-migrate-python-ubuntu-pyenv.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrate-python-ubuntu-system.yml => dtvem-integration-test-migrate-python-ubuntu-system.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrate-python-windows-pyenv.yml => dtvem-integration-test-migrate-python-windows-pyenv.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrate-python-windows-system.yml => dtvem-integration-test-migrate-python-windows-system.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrate-ruby-macos-rbenv.yml => dtvem-integration-test-migrate-ruby-macos-rbenv.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrate-ruby-macos-system.yml => dtvem-integration-test-migrate-ruby-macos-system.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrate-ruby-ubuntu-rbenv.yml => dtvem-integration-test-migrate-ruby-ubuntu-rbenv.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrate-ruby-ubuntu-system.yml => dtvem-integration-test-migrate-ruby-ubuntu-system.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrate-ruby-windows-system.yml => dtvem-integration-test-migrate-ruby-windows-system.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrate-ruby-windows-uru.yml => dtvem-integration-test-migrate-ruby-windows-uru.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrations-node.yml => dtvem-integration-test-migrations-node.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrations-python.yml => dtvem-integration-test-migrations-python.yml} (100%) rename .github/workflows/{dtvem/integration-test-migrations-ruby.yml => dtvem-integration-test-migrations-ruby.yml} (100%) rename .github/workflows/{dtvem/integration-test-node.yml => dtvem-integration-test-node.yml} (100%) rename .github/workflows/{dtvem/integration-test-python.yml => dtvem-integration-test-python.yml} (100%) rename .github/workflows/{dtvem/integration-test-ruby.yml => dtvem-integration-test-ruby.yml} (100%) delete mode 100644 .github/workflows/dtvem/generate-changelog.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-node-macos-fnm.yml b/.github/workflows/dtvem-integration-test-migrate-node-macos-fnm.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-node-macos-fnm.yml rename to .github/workflows/dtvem-integration-test-migrate-node-macos-fnm.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-node-macos-system.yml b/.github/workflows/dtvem-integration-test-migrate-node-macos-system.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-node-macos-system.yml rename to .github/workflows/dtvem-integration-test-migrate-node-macos-system.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-node-ubuntu-nvm.yml b/.github/workflows/dtvem-integration-test-migrate-node-ubuntu-nvm.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-node-ubuntu-nvm.yml rename to .github/workflows/dtvem-integration-test-migrate-node-ubuntu-nvm.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-node-ubuntu-system.yml b/.github/workflows/dtvem-integration-test-migrate-node-ubuntu-system.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-node-ubuntu-system.yml rename to .github/workflows/dtvem-integration-test-migrate-node-ubuntu-system.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-node-windows-nvm.yml b/.github/workflows/dtvem-integration-test-migrate-node-windows-nvm.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-node-windows-nvm.yml rename to .github/workflows/dtvem-integration-test-migrate-node-windows-nvm.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-node-windows-system.yml b/.github/workflows/dtvem-integration-test-migrate-node-windows-system.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-node-windows-system.yml rename to .github/workflows/dtvem-integration-test-migrate-node-windows-system.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-python-macos-pyenv.yml b/.github/workflows/dtvem-integration-test-migrate-python-macos-pyenv.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-python-macos-pyenv.yml rename to .github/workflows/dtvem-integration-test-migrate-python-macos-pyenv.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-python-macos-system.yml b/.github/workflows/dtvem-integration-test-migrate-python-macos-system.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-python-macos-system.yml rename to .github/workflows/dtvem-integration-test-migrate-python-macos-system.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-python-ubuntu-pyenv.yml b/.github/workflows/dtvem-integration-test-migrate-python-ubuntu-pyenv.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-python-ubuntu-pyenv.yml rename to .github/workflows/dtvem-integration-test-migrate-python-ubuntu-pyenv.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-python-ubuntu-system.yml b/.github/workflows/dtvem-integration-test-migrate-python-ubuntu-system.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-python-ubuntu-system.yml rename to .github/workflows/dtvem-integration-test-migrate-python-ubuntu-system.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-python-windows-pyenv.yml b/.github/workflows/dtvem-integration-test-migrate-python-windows-pyenv.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-python-windows-pyenv.yml rename to .github/workflows/dtvem-integration-test-migrate-python-windows-pyenv.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-python-windows-system.yml b/.github/workflows/dtvem-integration-test-migrate-python-windows-system.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-python-windows-system.yml rename to .github/workflows/dtvem-integration-test-migrate-python-windows-system.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-ruby-macos-rbenv.yml b/.github/workflows/dtvem-integration-test-migrate-ruby-macos-rbenv.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-ruby-macos-rbenv.yml rename to .github/workflows/dtvem-integration-test-migrate-ruby-macos-rbenv.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-ruby-macos-system.yml b/.github/workflows/dtvem-integration-test-migrate-ruby-macos-system.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-ruby-macos-system.yml rename to .github/workflows/dtvem-integration-test-migrate-ruby-macos-system.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-ruby-ubuntu-rbenv.yml b/.github/workflows/dtvem-integration-test-migrate-ruby-ubuntu-rbenv.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-ruby-ubuntu-rbenv.yml rename to .github/workflows/dtvem-integration-test-migrate-ruby-ubuntu-rbenv.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-ruby-ubuntu-system.yml b/.github/workflows/dtvem-integration-test-migrate-ruby-ubuntu-system.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-ruby-ubuntu-system.yml rename to .github/workflows/dtvem-integration-test-migrate-ruby-ubuntu-system.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-ruby-windows-system.yml b/.github/workflows/dtvem-integration-test-migrate-ruby-windows-system.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-ruby-windows-system.yml rename to .github/workflows/dtvem-integration-test-migrate-ruby-windows-system.yml diff --git a/.github/workflows/dtvem/integration-test-migrate-ruby-windows-uru.yml b/.github/workflows/dtvem-integration-test-migrate-ruby-windows-uru.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrate-ruby-windows-uru.yml rename to .github/workflows/dtvem-integration-test-migrate-ruby-windows-uru.yml diff --git a/.github/workflows/dtvem/integration-test-migrations-node.yml b/.github/workflows/dtvem-integration-test-migrations-node.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrations-node.yml rename to .github/workflows/dtvem-integration-test-migrations-node.yml diff --git a/.github/workflows/dtvem/integration-test-migrations-python.yml b/.github/workflows/dtvem-integration-test-migrations-python.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrations-python.yml rename to .github/workflows/dtvem-integration-test-migrations-python.yml diff --git a/.github/workflows/dtvem/integration-test-migrations-ruby.yml b/.github/workflows/dtvem-integration-test-migrations-ruby.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-migrations-ruby.yml rename to .github/workflows/dtvem-integration-test-migrations-ruby.yml diff --git a/.github/workflows/dtvem/integration-test-node.yml b/.github/workflows/dtvem-integration-test-node.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-node.yml rename to .github/workflows/dtvem-integration-test-node.yml diff --git a/.github/workflows/dtvem/integration-test-python.yml b/.github/workflows/dtvem-integration-test-python.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-python.yml rename to .github/workflows/dtvem-integration-test-python.yml diff --git a/.github/workflows/dtvem/integration-test-ruby.yml b/.github/workflows/dtvem-integration-test-ruby.yml similarity index 100% rename from .github/workflows/dtvem/integration-test-ruby.yml rename to .github/workflows/dtvem-integration-test-ruby.yml diff --git a/.github/workflows/dtvem/generate-changelog.yml b/.github/workflows/dtvem/generate-changelog.yml deleted file mode 100644 index 1893539..0000000 --- a/.github/workflows/dtvem/generate-changelog.yml +++ /dev/null @@ -1,214 +0,0 @@ -name: Generate Changelog - -on: - workflow_call: - outputs: - changelog: - description: "The generated changelog content" - value: ${{ jobs.generate.outputs.changelog }} - -jobs: - generate: - name: Generate Changelog - runs-on: ubuntu-latest - outputs: - changelog: ${{ steps.changelog.outputs.CHANGELOG }} - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 # Fetch all history for changelog generation - - - name: Generate changelog - id: changelog - run: | - # Get previous release tag - # NOTE: This must run BEFORE creating the new tag, otherwise git describe - # will find the new tag and the changelog will be empty - PREVIOUS_TAG=$(git describe --abbrev=0 --tags --match "v*" 2>/dev/null || echo "") - - echo "Previous tag: ${PREVIOUS_TAG:-'(none - first release)'}" - - # Get commit data since last release - if [ -z "$PREVIOUS_TAG" ]; then - COMMIT_RANGE="HEAD" - else - COMMIT_RANGE="${PREVIOUS_TAG}..HEAD" - fi - - # Collect highlights from PR comments and categorize commits - # Each category stores entries with issue number prefix for sorting: "NNNN|entry" - declare -a HIGHLIGHTS - declare -a BUGS # fix - declare -a IMPROVEMENTS # perf, refactor - declare -a FEATURES # feat - declare -a MAINTENANCE # docs, style, test, build, ci, chore - declare -a OTHER # anything else (except revert which is omitted) - - # Get list of commit SHAs - COMMIT_SHAS=$(git log ${COMMIT_RANGE} --pretty=format:"%H" --no-merges) - - # Track processed PRs to avoid duplicates - declare -A PROCESSED_PRS - - # Process each commit - for SHA in $COMMIT_SHAS; do - echo "Processing commit: $SHA" - - # Find the PR associated with this commit - PR_DATA=$(gh pr list --search "$SHA" --state merged --json number,title,body --limit 1 2>/dev/null || echo "[]") - - if [ "$PR_DATA" = "[]" ] || [ -z "$PR_DATA" ]; then - echo " No PR found, skipping" - continue - fi - - PR_NUMBER=$(echo "$PR_DATA" | jq -r '.[0].number // empty') - PR_TITLE=$(echo "$PR_DATA" | jq -r '.[0].title // empty') - PR_BODY=$(echo "$PR_DATA" | jq -r '.[0].body // empty') - - if [ -z "$PR_NUMBER" ] || [ -z "$PR_TITLE" ]; then - echo " Could not get PR details, skipping" - continue - fi - - # Extract linked issue numbers from PR body (Fixes #XX, Closes #XX, Resolves #XX) - ISSUE_NUMS=$(echo "$PR_BODY" | grep -oiE "(fixes|closes|resolves)\s*#[0-9]+" | grep -oE "[0-9]+" | sort -n | uniq || echo "") - - # Skip if we've already processed this PR - if [ -n "${PROCESSED_PRS[$PR_NUMBER]}" ]; then - echo " PR #$PR_NUMBER already processed, skipping" - continue - fi - PROCESSED_PRS[$PR_NUMBER]=1 - - echo " Found PR #$PR_NUMBER: $PR_TITLE" - - # Skip revert PRs - if echo "$PR_TITLE" | grep -qE "^revert(\(|:)"; then - echo " Skipping revert PR" - continue - fi - - # Check PR comments for commands - PR_COMMENTS=$(gh pr view "$PR_NUMBER" --json comments --jq '.comments[].body' 2>/dev/null || echo "") - - # Check for /skip-changelog command - if echo "$PR_COMMENTS" | grep -q "^/skip-changelog"; then - echo " Found /skip-changelog, skipping PR" - continue - fi - - # Check for /release-note command - RELEASE_NOTE=$(echo "$PR_COMMENTS" | grep "^/release-note " | sed 's|^/release-note ||' | head -1 || echo "") - if [ -n "$RELEASE_NOTE" ]; then - echo " Found /release-note: $RELEASE_NOTE" - HIGHLIGHTS+=("$RELEASE_NOTE") - fi - - # Build entry - use issue number(s) if available - if [ -n "$ISSUE_NUMS" ]; then - # Format multiple issues as "(#1, #2)" - ISSUE_LIST=$(echo "$ISSUE_NUMS" | sed 's/^/#/' | tr '\n' ',' | sed 's/,$//' | sed 's/,/, /g') - ENTRY="- $PR_TITLE (${ISSUE_LIST})" - # Use first issue number for sorting - SORT_NUM=$(echo "$ISSUE_NUMS" | head -1) - else - ENTRY="- $PR_TITLE" - # Use high number to sort PRs without issues to the end - SORT_NUM="99999" - fi - - # Store with sort number prefix for sorting - SORTABLE_ENTRY="${SORT_NUM}|${ENTRY}" - - # Categorize by conventional commit prefix in PR title - if echo "$PR_TITLE" | grep -qE "^fix(\(|:)"; then - BUGS+=("$SORTABLE_ENTRY") - elif echo "$PR_TITLE" | grep -qE "^(perf|refactor)(\(|:)"; then - IMPROVEMENTS+=("$SORTABLE_ENTRY") - elif echo "$PR_TITLE" | grep -qE "^feat(\(|:)"; then - FEATURES+=("$SORTABLE_ENTRY") - elif echo "$PR_TITLE" | grep -qE "^(docs|style|test|build|ci|chore)(\(|:)"; then - MAINTENANCE+=("$SORTABLE_ENTRY") - else - OTHER+=("$SORTABLE_ENTRY") - fi - done - - # Helper function to sort entries by issue number and format output - sort_entries() { - local -n arr=$1 - if [ ${#arr[@]} -gt 0 ]; then - printf '%s\n' "${arr[@]}" | sort -t'|' -k1 -n | cut -d'|' -f2- - fi - } - - # Build changelog - CHANGELOG="" - - # Add Highlights section if any /release-note entries exist - if [ ${#HIGHLIGHTS[@]} -gt 0 ]; then - CHANGELOG="### ✨ Highlights"$'\n\n' - for HIGHLIGHT in "${HIGHLIGHTS[@]}"; do - CHANGELOG="${CHANGELOG}- ${HIGHLIGHT}"$'\n' - done - CHANGELOG="${CHANGELOG}"$'\n' - fi - - # Add categorized sections in order: Bug Fixes, Performance & Improvements, New Features, Maintenance, Other - if [ ${#BUGS[@]} -gt 0 ]; then - CHANGELOG="${CHANGELOG}### 🐛 Bug Fixes"$'\n\n' - while IFS= read -r entry; do - CHANGELOG="${CHANGELOG}${entry}"$'\n' - done < <(sort_entries BUGS) - CHANGELOG="${CHANGELOG}"$'\n' - fi - - if [ ${#IMPROVEMENTS[@]} -gt 0 ]; then - CHANGELOG="${CHANGELOG}### ⚡ Performance & Improvements"$'\n\n' - while IFS= read -r entry; do - CHANGELOG="${CHANGELOG}${entry}"$'\n' - done < <(sort_entries IMPROVEMENTS) - CHANGELOG="${CHANGELOG}"$'\n' - fi - - if [ ${#FEATURES[@]} -gt 0 ]; then - CHANGELOG="${CHANGELOG}### 🎉 New Features"$'\n\n' - while IFS= read -r entry; do - CHANGELOG="${CHANGELOG}${entry}"$'\n' - done < <(sort_entries FEATURES) - CHANGELOG="${CHANGELOG}"$'\n' - fi - - if [ ${#MAINTENANCE[@]} -gt 0 ]; then - CHANGELOG="${CHANGELOG}### 🔧 Maintenance"$'\n\n' - while IFS= read -r entry; do - CHANGELOG="${CHANGELOG}${entry}"$'\n' - done < <(sort_entries MAINTENANCE) - CHANGELOG="${CHANGELOG}"$'\n' - fi - - if [ ${#OTHER[@]} -gt 0 ]; then - CHANGELOG="${CHANGELOG}### 📦 Other"$'\n\n' - while IFS= read -r entry; do - CHANGELOG="${CHANGELOG}${entry}"$'\n' - done < <(sort_entries OTHER) - CHANGELOG="${CHANGELOG}"$'\n' - fi - - # If changelog is empty, use a fun message - if [ -z "$CHANGELOG" ]; then - CHANGELOG="So much goodness, we lost track! 🎉" - fi - - echo "Generated changelog:" - echo "$CHANGELOG" - - echo "CHANGELOG<> $GITHUB_OUTPUT - echo "$CHANGELOG" >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT - shell: bash - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}