Skip to content

Commit d82fd30

Browse files
authored
Improve release workflows (#339)
1 parent a6f8e58 commit d82fd30

1 file changed

Lines changed: 90 additions & 26 deletions

File tree

.github/workflows/do-release.yml

Lines changed: 90 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ jobs:
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
@@ -48,7 +49,7 @@ jobs:
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

Comments
 (0)