Skip to content

Commit 6c46529

Browse files
authored
Merge pull request #4 from logtide-dev/feat/restructure
feat: update publish workflow to split monorepo and push to individua…
2 parents d4c136a + 0bde4ce commit 6c46529

File tree

1 file changed

+76
-46
lines changed

1 file changed

+76
-46
lines changed

.github/workflows/publish.yml

Lines changed: 76 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Publish to Packagist
1+
name: Split & Publish
22

33
on:
44
push:
@@ -14,7 +14,7 @@ on:
1414
type: string
1515

1616
permissions:
17-
contents: read
17+
contents: write
1818

1919
jobs:
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

Comments
 (0)