99 packages :
1010 description : " Packages to deploy (JSON object with package info)"
1111 required : true
12- user_name :
13- description : " User name for commits and releases"
14- required : false
15- default : " "
16- user_email :
17- description : " User email for commits and releases"
18- required : false
19- default : " "
2012 user_token :
2113 description : " User's GitHub token (for release authorship)"
2214 required : false
3123 outputs :
3224 package-list : ${{ steps.parse.outputs.package-list }}
3325 core-version : ${{ steps.parse.outputs.core-version }}
26+ is-prerelease : ${{ steps.parse.outputs.is-prerelease }}
3427 steps :
3528 - name : Parse packages
3629 id : parse
4336 echo "Raw packages file:"
4437 cat packages.json
4538
46- # Check if this is a prerelease version
39+ # Validate JSON
40+ if ! jq empty packages.json 2>/dev/null; then
41+ echo "❌ Invalid JSON in 'packages' input"
42+ exit 1
43+ fi
44+
4745 VERSION="${{ github.event.inputs.version }}"
4846 if [[ $VERSION =~ -(alpha|beta|rc) ]]; then
4947 echo "🚧 Detected prerelease version: $VERSION"
5654 echo "Parsed packages:"
5755 jq -r 'to_entries[] | "\(.key): Messages=[\(.value["release-message"] | join(", "))] Stability=\(.value["minimum-stability"] // "unknown")"' packages.json
5856
59- # Create package list for matrix
6057 package_list=$(jq -r 'keys | @json' packages.json)
6158 echo "package-list=$package_list" >> $GITHUB_OUTPUT
62-
63- # Set core version from input (exact version)
6459 echo "core-version=${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT
6560 echo "is-prerelease=$IS_PRERELEASE" >> $GITHUB_OUTPUT
6661
8580 run : |
8681 if [ -f composer.json ]; then
8782 echo "Updating moox/core version in ${{ matrix.package }} to ${{ needs.prepare.outputs.core-version }}"
88- # Replace any existing moox/core version with the current version
8983 sed -i 's/"moox\/core": "[^"]*"/"moox\/core": "${{ needs.prepare.outputs.core-version }}"/g' composer.json
90-
9184 echo "Updated composer.json:"
92- cat composer.json | grep "moox/core" || echo "No moox/core dependency found"
85+ grep "moox/core" composer.json || echo "No moox/core dependency found"
9386 else
9487 echo "No composer.json found in ${{ matrix.package }}"
9588 fi
@@ -98,50 +91,46 @@ jobs:
9891 working-directory : packages/${{ matrix.package }}
9992 run : |
10093 if [ -f composer.json ]; then
101- USER_NAME="${{ github.event.inputs.user_name || github.actor }}"
102- USER_EMAIL="${{ github.event.inputs.user_email || format('{0}@users.noreply.github.com', github.actor) }}"
103- git config --global user.name "$USER_NAME"
104- git config --global user.email "$USER_EMAIL"
94+ git config user.name "github-actions"
95+ git config user.email "[email protected] " 10596 git add composer.json
10697 git commit -m "Update moox/core dependency to ${{ needs.prepare.outputs.core-version }}" || echo "No changes to commit"
10798 fi
10899
109100 - name : Split package to separate repository
110- uses :
" symplify/[email protected] " 101+ 102+ env :
103+ GITHUB_TOKEN : ${{ github.event.inputs.user_token != '' && github.event.inputs.user_token || secrets.BOT }}
111104 with :
112105 tag : " ${{ github.event.inputs.version }}"
113106 package_directory : " packages/${{ matrix.package }}"
114107 repository_organization : " mooxphp"
115108 repository_name : " ${{ matrix.package }}"
116- user_name : " ${{ github.event.inputs.user_name || github.actor }}"
117- user_email : " ${{ github.event.inputs.user_email || format('{0}@users.noreply.github.com', github.actor) }}"
118109
119110 - name : Create GitHub Release for split package
120111 run : |
121112 PACKAGE="${{ matrix.package }}"
122113 VERSION="${{ github.event.inputs.version }}"
123- RELEASE_BODY=$(echo '${{ github.event.inputs.packages }}' | jq -r ".\"$PACKAGE\".\"release-message\"[]" | head -10 | tr '\n' ' ')
124- IS_PRERELEASE=${{ contains(github.event.inputs.version, 'alpha') || contains(github.event.inputs.version, 'beta') || contains(github.event.inputs.version, 'rc') }}
125- USER_NAME="${{ github.event.inputs.user_name || github.actor }}"
126-
127- # Use user token if provided, otherwise use bot token
128- if [ -n "${{ github.event.inputs.user_token }}" ]; then
129- RELEASE_TOKEN="${{ github.event.inputs.user_token }}"
130- echo "Creating release as user: $USER_NAME"
114+ RELEASE_BODY=$(echo '${{ github.event.inputs.packages }}' | jq -r ".\"$PACKAGE\".\"release-message\" // [] | .[:10] | join(\"\\n\")")
115+
116+ echo "Creating release for $PACKAGE $VERSION"
117+ echo "Release notes:"
118+ echo "$RELEASE_BODY"
119+
120+ # Wait for tag propagation
121+ sleep 10
122+
123+ if [ "${{ needs.prepare.outputs.is-prerelease }}" = "true" ]; then
124+ gh release create "$VERSION" \
125+ --repo "mooxphp/$PACKAGE" \
126+ --title "Release $VERSION" \
127+ --notes "$RELEASE_BODY" \
128+ --prerelease
131129 else
132- RELEASE_TOKEN="${{ secrets.TOKEN }}"
133- echo "Creating release as bot (no user token provided)"
134- RELEASE_BODY="$RELEASE_BODY - Released by: $USER_NAME"
130+ gh release create "$VERSION" \
131+ --repo "mooxphp/$PACKAGE" \
132+ --title "Release $VERSION" \
133+ --notes "$RELEASE_BODY"
135134 fi
136-
137- # Wait a moment for tag to be available
138- sleep 10
139-
140- # Create release from existing tag using GitHub CLI
141- gh release create "$VERSION" \
142- --repo "mooxphp/$PACKAGE" \
143- --title "Release $VERSION" \
144- --notes "$RELEASE_BODY" \
145- $([ "$IS_PRERELEASE" = "true" ] && echo "--prerelease" || echo "")
146135 env :
147- GH_TOKEN : ${{ github.event.inputs.user_token || secrets.TOKEN }}
136+ GH_TOKEN : ${{ github.event.inputs.user_token != '' && github.event.inputs.user_token || secrets.TOKEN }}
0 commit comments