2222 outputs :
2323 tag : ${{ steps.maven_release.outputs.TAG }}
2424 version : ${{ steps.maven_release.outputs.VERSION }}
25+ base-version : ${{ steps.maven_release.outputs.BASE_VERSION }}
2526 steps :
2627 - name : Checkout
2728 uses : actions/checkout@v6
4849 gpg-passphrase : MAVEN_GPG_PASSPHRASE
4950 cache : ' maven'
5051
51- - name : Do the Deployment and related stuff
52+ - name : Do the Maven release and prepare Linux assets
5253 id : maven_release
5354 run : |
5455 VERSION=${{ github.event.inputs.release-version }}
@@ -66,18 +67,10 @@ jobs:
6667 -Dmaven.wagon.httpconnectionManager.maxPerRoute=60 -Dmaven.wagon.httpconnectionManager.maxTotal=100
6768 cd distribution/target
6869 ls -R
69- mkdir "JSignPdf-$VERSION"
70- mv *.zip "$FULL_VERSION/"
71- cp generated-docs/JSignPdf.pdf "$FULL_VERSION/$FULL_VERSION.pdf"
72- cp "../doc/release-notes/${BASE_VERSION}.md" "$FULL_VERSION/README.md"
73-
74- echo "${{ secrets.SSH_PRIVATE_KEY }}" >> private_key
75- chmod 600 private_key
76- sftp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i private_key kwart@frs.sourceforge.net:/home/frs/project/jsignpdf/stable <<EOF
77- put -R "${FULL_VERSION}"
78- exit
79- EOF
80- mv "$FULL_VERSION" upload
70+ mkdir upload
71+ mv *.zip upload/
72+ cp generated-docs/JSignPdf.pdf "upload/$FULL_VERSION.pdf"
73+ cp "../doc/release-notes/${BASE_VERSION}.md" upload/README.md
8174 echo "TAG=$TAG" >> $GITHUB_OUTPUT
8275 echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
8376 echo "BASE_VERSION=$BASE_VERSION" >> $GITHUB_OUTPUT
@@ -86,14 +79,13 @@ jobs:
8679 MAVEN_PASSWORD : ${{ secrets.OSSRH_PASSWORD }}
8780 MAVEN_GPG_PASSPHRASE : ${{ secrets.MAVEN_GPG_PASSPHRASE }}
8881
89- - name : Upload binaries to release
90- uses : svenstaro /upload-release-action@29e53e917877a24fad85510ded594ab3c9ca12de
82+ - name : Stage Linux release assets for the publish job
83+ uses : actions /upload-artifact@v4
9184 with :
92- file : distribution/target/upload/*
93- file_glob : true
94- tag : ${{ steps.maven_release.outputs.TAG }}
95- overwrite : true
96- body_path : distribution/doc/release-notes/${{ steps.maven_release.outputs.BASE_VERSION }}.md
85+ name : jsignpdf-linux-assets
86+ path : distribution/target/upload/*
87+ if-no-files-found : error
88+ retention-days : 1
9789
9890 - name : Publish PDF guide for downstream jobs
9991 uses : actions/upload-artifact@v4
@@ -133,10 +125,82 @@ jobs:
133125 shell : pwsh
134126 run : ./distribution/windows/build-windows-installers.ps1 -Version ${{ needs.do-release.outputs.version }}
135127
136- - name : Upload Windows installers to release
137- uses : svenstaro/upload-release-action@29e53e917877a24fad85510ded594ab3c9ca12de
128+ - name : Stage Windows installers for the publish job
129+ uses : actions/upload-artifact@v4
130+ with :
131+ name : jsignpdf-windows-assets
132+ path : distribution/target/upload/*
133+ if-no-files-found : error
134+ retention-days : 1
135+
136+ publish-release :
137+ needs : [do-release, windows-installers]
138+ runs-on : ubuntu-latest
139+ permissions :
140+ contents : write
141+ env :
142+ TAG : ${{ needs.do-release.outputs.tag }}
143+ VERSION : ${{ needs.do-release.outputs.version }}
144+ BASE_VERSION : ${{ needs.do-release.outputs.base-version }}
145+ FULL_VERSION : JSignPdf-${{ needs.do-release.outputs.version }}
146+ steps :
147+ - name : Checkout release tag
148+ uses : actions/checkout@v6
149+ with :
150+ ref : ${{ needs.do-release.outputs.tag }}
151+
152+ - name : Download Linux assets
153+ uses : actions/download-artifact@v4
154+ with :
155+ name : jsignpdf-linux-assets
156+ path : release-assets/JSignPdf-${{ needs.do-release.outputs.version }}
157+
158+ - name : Download Windows assets
159+ uses : actions/download-artifact@v4
138160 with :
139- file : distribution/target/upload/*
140- file_glob : true
141- tag : ${{ needs.do-release.outputs.tag }}
142- overwrite : true
161+ name : jsignpdf-windows-assets
162+ path : release-assets/JSignPdf-${{ needs.do-release.outputs.version }}
163+
164+ - name : List staged assets
165+ run : ls -R release-assets
166+
167+ - name : Upload all assets to SourceForge
168+ env :
169+ SSH_PRIVATE_KEY : ${{ secrets.SSH_PRIVATE_KEY }}
170+ run : |
171+ set -euo pipefail
172+ echo "$SSH_PRIVATE_KEY" > private_key
173+ chmod 600 private_key
174+ cd release-assets
175+ sftp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ../private_key kwart@frs.sourceforge.net:/home/frs/project/jsignpdf/stable <<EOF
176+ put -R "${FULL_VERSION}"
177+ exit
178+ EOF
179+ cd ..
180+ rm -f private_key
181+
182+ - name : Create GitHub release with all assets
183+ env :
184+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
185+ run : |
186+ set -euo pipefail
187+ NOTES_FILE="distribution/doc/release-notes/${BASE_VERSION}.md"
188+ if [ ! -f "$NOTES_FILE" ]; then
189+ echo "::error::Release notes file not found at $NOTES_FILE"
190+ exit 1
191+ fi
192+ # Delete any pre-existing release so we publish a single release event
193+ # with the correct body and the full asset set in one shot.
194+ if gh release view "$TAG" >/dev/null 2>&1; then
195+ gh release delete "$TAG" --yes --cleanup-tag=false
196+ fi
197+ shopt -s nullglob
198+ assets=(release-assets/"$FULL_VERSION"/*)
199+ if [ ${#assets[@]} -eq 0 ]; then
200+ echo "::error::No assets found under release-assets/$FULL_VERSION/"
201+ exit 1
202+ fi
203+ gh release create "$TAG" \
204+ --title "$TAG" \
205+ --notes-file "$NOTES_FILE" \
206+ "${assets[@]}"
0 commit comments