name: 🚀 Create Release on: push: tags: - v* env: RELEASE_NAME: AI-Infra-Guard jobs: create-release: runs-on: ubuntu-latest permissions: contents: write steps: - name: 🛒 Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: 📝 Extract latest CHANGELOG entry id: tag-message run: | # Get tag information TAG_NAME=${GITHUB_REF#refs/tags/} echo "tag_name=$TAG_NAME" >> $GITHUB_OUTPUT # Extract latest version content from CHANGELOG.md if [ -f "CHANGELOG.md" ]; then CHANGELOG_CONTENT=$(awk 'BEGIN {print_section=0;} /^## \[/ {if (print_section == 0) {print_section=1;} else {exit;}} print_section {print;}' CHANGELOG.md) # If content is successfully extracted, use CHANGELOG content if [ -n "$CHANGELOG_CONTENT" ]; then echo "Extracting latest version content from CHANGELOG.md:" echo "$CHANGELOG_CONTENT" echo "$CHANGELOG_CONTENT" > tag_message.txt else echo "Version information not found in CHANGELOG.md, using default message" echo "Release $TAG_NAME" > tag_message.txt fi else echo "CHANGELOG.md file not found, using default message" echo "Release $TAG_NAME" > tag_message.txt fi echo "tag_message_file=tag_message.txt" >> $GITHUB_OUTPUT - name: 📦 Prepare release package run: | # Create release directory mkdir -p release-package # Copy necessary files cp docker-compose.images.yml release-package/docker-compose.yml cp -r data release-package/data cp README.md release-package/README.md cp README_ZH.md release-package/README_ZH.md cp LICENSE release-package/LICENSE cp CHANGELOG.md release-package/CHANGELOG.md mkdir -p release-package/db mkdir -p release-package/log mkdir -p release-package/uploads # Get version number and modify docker-compose.images.yml VERSION="${{ steps.tag-message.outputs.tag_name }}" # Replace latest tag in docker-compose.images.yml with current version sed -i "s/:latest/:${VERSION}/g" release-package/docker-compose.yml - name: 📦 Create release archive run: | # Create compressed package cd release-package tar -czf ../AI-Infra-Guard-${{ steps.tag-message.outputs.tag_name }}.tar.gz . cd .. # Create ZIP package (Windows-friendly) cd release-package zip -r ../AI-Infra-Guard-${{ steps.tag-message.outputs.tag_name }}.zip . cd .. - name: 🏷️ Create Release uses: softprops/action-gh-release@v1 with: name: ${{ env.RELEASE_NAME }} ${{ steps.tag-message.outputs.tag_name }} body_path: ${{ steps.tag-message.outputs.tag_message_file }} draft: false prerelease: false files: | AI-Infra-Guard-${{ steps.tag-message.outputs.tag_name }}.tar.gz AI-Infra-Guard-${{ steps.tag-message.outputs.tag_name }}.zip token: ${{ secrets.GITHUB_TOKEN }} - name: 📊 Release Summary run: | echo "🎉 Release created successfully!" echo "📦 Release: ${{ env.RELEASE_NAME }} ${{ steps.tag-message.outputs.tag_name }}" echo "📁 Assets:" echo " - AI-Infra-Guard-${{ steps.tag-message.outputs.tag_name }}.tar.gz" echo " - AI-Infra-Guard-${{ steps.tag-message.outputs.tag_name }}.zip" echo "🔗 Release URL: ${{ github.server_url }}/${{ github.repository }}/releases/tag/${{ steps.tag-message.outputs.tag_name }}"