[ci-ckip] Merge branch 'fix/deploy-blender-ext-api-url' (#20) into main #17
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: DEPLOY # Package, release, publish | |
| on: | |
| workflow_dispatch: # allows manual trigger | |
| push: | |
| branches: | |
| - main # runs only after code is merged into main | |
| jobs: | |
| deploy: | |
| runs-on: ubuntu-latest | |
| environment: PROD | |
| # Run only if commit message starts with "release:" | |
| # Or manually run | |
| if: > | |
| startsWith(github.event.head_commit.message, 'release:') || | |
| github.event_name == 'workflow_dispatch' | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v5 | |
| - name: Read manifest and package extension | |
| run: | | |
| EXT_VERSION=$(grep -E '^version\s*=' ${{ vars.EXTENSION_SRC }}/blender_manifest.toml \ | |
| | sed -E 's/^version\s*=\s*"(.*)"/\1/' \ | |
| | tr -d '\r\n') | |
| EXT_ID=$(grep -E '^id\s*=' "${{ vars.EXTENSION_SRC }}/blender_manifest.toml" \ | |
| | sed -E 's/^id\s*=\s*"(.*)"/\1/' \ | |
| | tr -d '\r\n') | |
| BLENDER_MIN_VERSION=$(grep -E '^blender_version_min\s*=' "${{ vars.EXTENSION_SRC }}/blender_manifest.toml" \ | |
| | sed -E 's/^blender_version_min\s*=\s*"(.*)"/\1/' \ | |
| | tr -d '\r\n') | |
| ZIP_NAME="$EXT_ID-$EXT_VERSION.zip" | |
| COMMIT_HASH=$(git rev-parse --short HEAD) | |
| RELEASE_TAG_NAME="v${EXT_VERSION}" | |
| RELEASE_NAME="$RELEASE_TAG_NAME - Blender $BLENDER_MIN_VERSION+" | |
| zip -r "$ZIP_NAME" ${{ vars.EXTENSION_SRC }} | |
| SHA256=$(sha256sum "$ZIP_NAME" | awk '{ print $1 }') | |
| echo "Version: $EXT_VERSION" | |
| echo "ID: $EXT_ID" | |
| echo "Packaged as: $ZIP_NAME" | |
| echo "SHA256: $SHA256" | |
| echo "TAG: $RELEASE_TAG_NAME" | |
| echo "Release name: $RELEASE_NAME" | |
| echo "ext_version=$EXT_VERSION" >> $GITHUB_ENV | |
| echo "ext_id=$EXT_ID" >> $GITHUB_ENV | |
| echo "ext_zip_name=$ZIP_NAME" >> $GITHUB_ENV | |
| echo "commit_hash=$COMMIT_HASH" >> $GITHUB_ENV | |
| echo "release_tag_name=$RELEASE_TAG_NAME" >> $GITHUB_ENV | |
| echo "release_name=$RELEASE_NAME" >> $GITHUB_ENV | |
| echo "sha256=$SHA256" >> $GITHUB_ENV | |
| echo "blender_min_version=$BLENDER_MIN_VERSION" >> $GITHUB_ENV | |
| - name: Deploy to Blender Extensions Platform API | |
| env: | |
| BLENDER_API_URL: https://extensions.blender.org/api/v1/extensions/${{ env.ext_id }}/versions/upload/ | |
| BLENDER_REFERER_URL: https://extensions.blender.org/add-ons/${{ env.ext_id }}/ | |
| run: | | |
| # Extract release notes from CHANGELOG.md | |
| RELEASE_NOTES=$(awk -v ver="${{ env.ext_version }}" ' | |
| $0 ~ "^## \\[" ver "\\]" {capture=1} | |
| capture && NR>1 && /^## \[/ && $0 !~ "\\[" ver "\\]" {capture=0} | |
| capture | |
| ' CHANGELOG.md) | |
| if [ -z "$RELEASE_NOTES" ]; then | |
| echo "Error: Release notes for version ${{ env.ext_version }} not found." | |
| exit 1 | |
| fi | |
| # Trim trailing spaces and replace newlines with \n | |
| RELEASE_NOTES_ESCAPED=$(echo "$RELEASE_NOTES" | sed -e 's/[[:space:]]*$//' | awk '{printf "%s\\n", $0}') | |
| RELEASE_NOTES_ESCAPED=${RELEASE_NOTES_ESCAPED%\\n} | |
| # Send request and capture response + HTTP code | |
| RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" -X POST "$BLENDER_API_URL" \ | |
| -H "Authorization:bearer ${{ secrets.BLENDER_EXTENSIONS_TOKEN }}" \ | |
| -F "version_file=@$ext_zip_name" \ | |
| -F "release_notes=$RELEASE_NOTES_ESCAPED") | |
| # Split response body and HTTP code | |
| HTTP_CODE=$(echo "$RESPONSE" | tail -n1 | sed 's/HTTP_STATUS://') | |
| BODY=$(echo "$RESPONSE" | sed '$d') | |
| echo "Blender Extensions Platform API response:" | |
| echo "HTTP Status Code: $HTTP_CODE" | |
| echo "Response Body: $BODY" | |
| # Optional: fail the step if HTTP code is not 2xx | |
| if [[ "$HTTP_CODE" -lt 200 || "$HTTP_CODE" -ge 300 ]]; then | |
| echo "Error: Request failed with status $HTTP_CODE" | |
| exit 1 | |
| fi | |
| - name: Create GitHub Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ env.release_tag_name }} | |
| name: "${{ env.release_name }}" | |
| body: | | |
| 🚀 Automatic release for version **${{ env.ext_version }}** | |
| 🔖 Commit: `${{ env.commit_hash }}` | |
| **SHA-256 checksum:** `${{ env.sha256 }}` | |
| 🧱 Recommended Blender version >= **${{ env.blender_min_version }}** | |
| draft: false | |
| prerelease: false | |
| files: ${{ env.ext_zip_name }} | |
| generate_release_notes: true | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |