diff --git a/.github/workflows/generate-changelog.yml b/.github/workflows/generate-changelog.yml index b49d0636f..a19688b8d 100644 --- a/.github/workflows/generate-changelog.yml +++ b/.github/workflows/generate-changelog.yml @@ -83,11 +83,41 @@ jobs: echo "Cannot create a release without changelog entries." echo "Add changelog fragments to the changelog/ directory (e.g., 1234.added.md) and try again." exit 1 - else - echo "✓ Found $FRAGMENT_COUNT changelog fragment(s)" - echo "has_fragments=true" >> $GITHUB_OUTPUT fi + # Validate fragment types + VALID_TYPES="added changed deprecated removed fixed security" + INVALID_FRAGMENTS="" + + for file in changelog/*.md; do + # Skip README and template + if [[ "$file" == "changelog/README.md" ]] || [[ "$file" == "changelog/_template.md.j2" ]]; then + continue + fi + + # Extract type from filename (e.g., 1234.added.md -> added) + filename=$(basename "$file") + # Handle both 1234.added.md and 1234.added.2.md patterns + type=$(echo "$filename" | sed -E 's/^[0-9]+\.([a-z]+)(\.[0-9]+)?\.md$/\1/') + + # Check if type is valid + if ! echo "$VALID_TYPES" | grep -wq "$type"; then + INVALID_FRAGMENTS="$INVALID_FRAGMENTS\n - $filename (type: '$type')" + fi + done + + if [ -n "$INVALID_FRAGMENTS" ]; then + echo "❌ Error: Invalid changelog fragment types found:" + echo -e "$INVALID_FRAGMENTS" + echo "" + echo "Valid types are: $VALID_TYPES" + echo "Example: 1234.added.md, 5678.fixed.md" + exit 1 + fi + + echo "✓ Found $FRAGMENT_COUNT changelog fragment(s)" + echo "has_fragments=true" >> $GITHUB_OUTPUT + - name: Preview changelog run: | echo "## Preview of changelog for version ${{ inputs.version }}"