name: Create Release on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: username: ${{ secrets.CI_USER }} password: ${{ secrets.CI_TOKEN }} fetch-depth: 0 # Important: Fetch all history for commit messages - name: Get version id: get_version run: | if [ "${{ github.ref_type }}" = "tag" ]; then echo "version=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT else echo "version=$(date +'%Y.%m.%d-%H%M')" >> $GITHUB_OUTPUT fi # NEW STEP: Generate release notes from commits - name: Generate release notes id: release_notes run: | # Find the most recent tag LATEST_TAG=$(git describe --tags --abbrev=0 --always 2>/dev/null || echo "none") if [ "$LATEST_TAG" = "none" ]; then # If no previous tag exists, get all commits COMMITS=$(git log --pretty=format:"* %s (%h)" --no-merges) else # Get commits since the last tag COMMITS=$(git log --pretty=format:"* %s (%h)" ${LATEST_TAG}..HEAD --no-merges) fi # Escape newlines and special characters for GitHub Actions COMMITS="${COMMITS//'%'/'%25'}" COMMITS="${COMMITS//$'\n'/'%0A'}" COMMITS="${COMMITS//$'\r'/'%0D'}" # Create release notes with header NOTES="## What's New in ${{ steps.get_version.outputs.version }}%0A%0A" NOTES+="$COMMITS" # Output to GitHub Actions echo "notes<> $GITHUB_OUTPUT echo "$NOTES" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT - name: Update plugin version run: | # Replace version placeholder with actual version sed -i "s/Version: {auto_update_value_on_deploy}/Version: ${{ steps.get_version.outputs.version }}/" fw-store-embed.php # Verify the change was made grep "Version:" fw-store-embed.php - name: Create ZIP archive run: | zip -r fourthwall-store-embed.zip . -x ".git/*" ".gitea/*" - name: Create Release uses: softprops/action-gh-release@v2 with: token: "${{ secrets.REPO_TOKEN }}" title: Fourthwall-store-embed Release ${{ steps.get_version.outputs.version }} tag_name: ${{ steps.get_version.outputs.version }} body: "${{ steps.release_notes.outputs.notes }}" files: | fourthwall-store-embed.zip