1- name : Publish to Packagist
1+ name : Split & Publish
22
33on :
44 push :
1414 type : string
1515
1616permissions :
17- contents : read
17+ contents : write
1818
1919jobs :
2020 # ====================
@@ -25,20 +25,22 @@ jobs:
2525 runs-on : ubuntu-latest
2626 outputs :
2727 version : ${{ steps.version.outputs.version }}
28+ tag : ${{ steps.version.outputs.tag }}
2829 steps :
2930 - name : Extract version from tag
3031 id : version
3132 run : |
3233 if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
33- VERSION ="${{ github.event.inputs.tag }}"
34+ TAG ="${{ github.event.inputs.tag }}"
3435 elif [ "${{ github.event_name }}" = "release" ]; then
35- VERSION ="${{ github.event.release.tag_name }}"
36+ TAG ="${{ github.event.release.tag_name }}"
3637 else
37- VERSION =${GITHUB_REF#refs/tags/}
38+ TAG =${GITHUB_REF#refs/tags/}
3839 fi
39- VERSION=${VERSION #v}
40+ VERSION=${TAG #v}
4041 echo "version=${VERSION}" >> $GITHUB_OUTPUT
41- echo "Version: ${VERSION}"
42+ echo "tag=${TAG}" >> $GITHUB_OUTPUT
43+ echo "Version: ${VERSION} (tag: ${TAG})"
4244
4345 # ====================
4446 # Build & Test
@@ -71,58 +73,86 @@ jobs:
7173 run : composer cs
7274
7375 # ====================
74- # Publish all packages to Packagist
76+ # Split monorepo & push to read-only repos
7577 # ====================
76- publish :
77- name : Publish to Packagist
78+ split :
79+ name : Split & Publish
7880 runs-on : ubuntu-latest
7981 needs : [prepare, validate]
8082
83+ strategy :
84+ matrix :
85+ include :
86+ - package : logtide
87+ directory : packages/logtide
88+ target : logtide-dev/logtide-php-sdk
89+ - package : logtide-laravel
90+ directory : packages/logtide-laravel
91+ target : logtide-dev/logtide-laravel
92+ - package : logtide-symfony
93+ directory : packages/logtide-symfony
94+ target : logtide-dev/logtide-symfony
95+ - package : logtide-slim
96+ directory : packages/logtide-slim
97+ target : logtide-dev/logtide-slim
98+ - package : logtide-wordpress
99+ directory : packages/logtide-wordpress
100+ target : logtide-dev/logtide-wordpress
101+
81102 steps :
82103 - name : Checkout
83104 uses : actions/checkout@v4
84-
85- - name : Setup PHP
86- uses : shivammathur/setup-php@v2
87105 with :
88- php-version : ' 8.3'
89- extensions : curl, json, mbstring
106+ fetch-depth : 0
90107
91- - name : Set version in all packages
108+ - name : Install splitsh-lite
92109 run : |
93- VERSION="${{ needs.prepare.outputs.version }}"
94- echo "Setting version to ${VERSION} in all packages..."
95-
96- for file in composer.json packages/*/composer.json; do
97- if [ -f "$file" ]; then
98- php -r "
99- \$pkg = json_decode(file_get_contents('$file'), true);
100- \$pkg['version'] = '${VERSION}';
101- file_put_contents('$file', json_encode(\$pkg, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . \"\n\");
102- "
103- echo " Updated $file to ${VERSION}"
104- fi
105- done
106-
107- - name : Notify Packagist
110+ curl -sL https://github.com/splitsh/lite/releases/download/v1.0.1/lite_linux_amd64.tar.gz | tar xz
111+ sudo mv splitsh-lite /usr/local/bin/splitsh-lite
112+ chmod +x /usr/local/bin/splitsh-lite
113+
114+ - name : Split ${{ matrix.package }}
115+ id : split
116+ run : |
117+ SHA=$(splitsh-lite --prefix=${{ matrix.directory }})
118+ echo "sha=${SHA}" >> $GITHUB_OUTPUT
119+ echo "Split SHA: ${SHA}"
120+
121+ - name : Push to ${{ matrix.target }}
108122 run : |
109- echo "Notifying Packagist to re-index repository..."
110- curl -s -X POST \
111- "https://packagist.org/api/update-package?username=logtide&apiToken=${{ secrets.PACKAGIST_TOKEN }}" \
112- -d '{"repository":{"url":"https://github.com/logtide-dev/logtide-php"}}' \
113- || echo "Warning: Failed to notify Packagist"
123+ TAG="${{ needs.prepare.outputs.tag }}"
124+ SHA="${{ steps.split.outputs.sha }}"
125+ TARGET="https://x-access-token:${{ secrets.SPLIT_TOKEN }}@github.com/${{ matrix.target }}.git"
114126
127+ # Create a temporary branch from the split SHA
128+ git push "${TARGET}" "${SHA}:refs/heads/main" --force
129+
130+ # Create the tag on the split repo
131+ git tag -f "${TAG}" "${SHA}"
132+ git push "${TARGET}" "refs/tags/${TAG}" --force
133+
134+ echo "Pushed ${{ matrix.package }} -> ${{ matrix.target }} @ ${TAG}"
135+
136+ # ====================
137+ # Summary
138+ # ====================
139+ summary :
140+ name : Publish Summary
141+ runs-on : ubuntu-latest
142+ needs : [prepare, split]
143+ if : always() && needs.split.result == 'success'
144+
145+ steps :
115146 - name : Create publish summary
116147 run : |
117148 VERSION="${{ needs.prepare.outputs.version }}"
118- echo "## Packagist Packages Published" >> $GITHUB_STEP_SUMMARY
119- echo "" >> $GITHUB_STEP_SUMMARY
120- echo "Version: **${VERSION}**" >> $GITHUB_STEP_SUMMARY
149+ TAG="${{ needs.prepare.outputs.tag }}"
150+ echo "## Packages Published (${TAG})" >> $GITHUB_STEP_SUMMARY
121151 echo "" >> $GITHUB_STEP_SUMMARY
122- echo "| Package | Install Command |" >> $GITHUB_STEP_SUMMARY
123- echo "|---------|-----------------|" >> $GITHUB_STEP_SUMMARY
124- echo "| logtide/logtide | \`composer require logtide/logtide:${VERSION}\` |" >> $GITHUB_STEP_SUMMARY
125- echo "| logtide/logtide-laravel | \`composer require logtide/logtide-laravel:${VERSION}\` |" >> $GITHUB_STEP_SUMMARY
126- echo "| logtide/logtide-symfony | \`composer require logtide/logtide-symfony:${VERSION}\` |" >> $GITHUB_STEP_SUMMARY
127- echo "| logtide/logtide-slim | \`composer require logtide/logtide-slim:${VERSION}\` |" >> $GITHUB_STEP_SUMMARY
128- echo "| logtide/logtide-wordpress | \`composer require logtide/logtide-wordpress:${VERSION}\` |" >> $GITHUB_STEP_SUMMARY
152+ echo "| Package | Split Repo | Install |" >> $GITHUB_STEP_SUMMARY
153+ echo "|---------|------------|---- -----|" >> $GITHUB_STEP_SUMMARY
154+ echo "| logtide/logtide | [logtide-php-sdk](https://github.com/logtide-dev/logtide-php-sdk) | \`composer require logtide/logtide:${VERSION}\` |" >> $GITHUB_STEP_SUMMARY
155+ echo "| logtide/logtide-laravel | [logtide-laravel](https://github.com/logtide-dev/logtide-laravel) | \`composer require logtide/logtide-laravel:${VERSION}\` |" >> $GITHUB_STEP_SUMMARY
156+ echo "| logtide/logtide-symfony | [logtide-symfony](https://github.com/logtide-dev/logtide-symfony) | \`composer require logtide/logtide-symfony:${VERSION}\` |" >> $GITHUB_STEP_SUMMARY
157+ echo "| logtide/logtide-slim | [logtide-slim](https://github.com/logtide-dev/logtide-slim) | \`composer require logtide/logtide-slim:${VERSION}\` |" >> $GITHUB_STEP_SUMMARY
158+ echo "| logtide/logtide-wordpress | [logtide-wordpress](https://github.com/logtide-dev/logtide-wordpress) | \`composer require logtide/logtide-wordpress:${VERSION}\` |" >> $GITHUB_STEP_SUMMARY
0 commit comments