1+ name : Sign - Artifacts
2+
3+ on :
4+ workflow_dispatch :
5+ inputs :
6+ project_version :
7+ description : " Project version (e.g. 1.0.0)"
8+ required : true
9+ default : " "
10+ project_group :
11+ description : " Project group (e.g. io.github.tronprotocol)"
12+ required : true
13+ default : " io.github.tronprotocol"
14+
15+ jobs :
16+
17+
18+ download-from-s3-and-sign :
19+ name : Download from S3
20+ runs-on : self-hosted
21+
22+ permissions :
23+ contents : read
24+ id-token : write # Needed for AWS credential provider
25+
26+ steps :
27+ - name : Set S3 path
28+ run : |
29+ echo "S3_PATH=${{ secrets.S3_BUCKET_DEV }}/${{ secrets.S3_PREFIX }}/${{ inputs.project_version }}" >> $GITHUB_ENV
30+
31+ - name : Configure AWS Credentials
32+ uses : aws-actions/configure-aws-credentials@v4
33+ with :
34+ role-to-assume : ${{ secrets.AWS_ROLE_ARN_DEV_DOWNLOAD }} # 👈 replace with your IAM role
35+ aws-region : ${{ secrets.AWS_REGION }}
36+
37+ - name : Compute DOWNLOAD_DIR
38+ run : |
39+ GROUP_PATH=$(echo "${{ inputs.project_group }}" | tr '.' '/')
40+ echo "DOWNLOAD_DIR=$GROUP_PATH/trident/${{ inputs.project_version }}" >> $GITHUB_ENV
41+
42+ - name : Create download directory
43+ run : |
44+ if [ -d "${{ env.DOWNLOAD_DIR }}" ]; then
45+ rm -rf "${{ env.DOWNLOAD_DIR }}"
46+ fi
47+ mkdir -p ${{ env.DOWNLOAD_DIR }}
48+
49+ - name : Download files from S3
50+ run : |
51+ echo "Downloading files from ${{ env.S3_PATH }}"
52+ aws s3 cp s3://${{ env.S3_PATH }}/ ${{ env.DOWNLOAD_DIR }}/ --recursive --exclude "*" --include "trident-${{ inputs.project_version }}*"
53+
54+ # Verify download was successful
55+ if [ -z "$(ls -A ${{ env.DOWNLOAD_DIR }})" ]; then
56+ echo "Error: Failed to download files from S3"
57+ exit 1
58+ else
59+ echo "Download from S3 completed successfully"
60+ ls -l "${{ env.DOWNLOAD_DIR }}" | awk '{ $3=""; $4=""; print }'
61+ fi
62+
63+ - name : Create download summary
64+ run : |
65+ echo "## S3 Download Summary" >> $GITHUB_STEP_SUMMARY
66+ echo "Downloaded files from \`${{ env.S3_PATH }}\`" >> $GITHUB_STEP_SUMMARY
67+ echo "" >> $GITHUB_STEP_SUMMARY
68+ echo "### Downloaded Files:" >> $GITHUB_STEP_SUMMARY
69+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
70+ ls -l "${{ env.DOWNLOAD_DIR }}" | awk '{ $3=""; $4=""; print }' >> $GITHUB_STEP_SUMMARY
71+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
72+
73+ echo "### MD5 Summary of Downloaded Files" >> $GITHUB_STEP_SUMMARY
74+ echo "" >> $GITHUB_STEP_SUMMARY
75+ echo "| Filename | MD5 Hash |" >> $GITHUB_STEP_SUMMARY
76+ echo "|----------|----------|" >> $GITHUB_STEP_SUMMARY
77+ for file in ${{ env.DOWNLOAD_DIR }}/*; do
78+ if [ -f "$file" ]; then
79+ FILENAME=$(basename "$file")
80+ LOCAL_MD5=$(md5sum $file | awk '{print $1}')
81+ echo "| $FILENAME | $LOCAL_MD5 |" >> $GITHUB_STEP_SUMMARY
82+ echo "$FILENAME: $LOCAL_MD5"
83+ fi
84+ done
85+
86+ - name : List files to sign
87+ run : |
88+ echo "Files to sign:"
89+ ls -l ${{ env.DOWNLOAD_DIR }} | awk '{ $3=""; $4=""; print }'
90+
91+ - name : Sign artifacts
92+ run : |
93+ # Sign each JAR file
94+ PREFIX="${{ env.DOWNLOAD_DIR }}/trident-${{ inputs.project_version }}"
95+
96+ files=(
97+ "${PREFIX}.jar"
98+ "${PREFIX}-sources.jar"
99+ "${PREFIX}-javadoc.jar"
100+ "${PREFIX}.pom"
101+ )
102+ for file in "${files[@]}"; do
103+ if [ -f "$file" ]; then
104+ echo "Signing $file"
105+ # Generate GPG signature
106+ gpg --local-user ${{ secrets.GPG_FINGERPRINT }} --armor --detach-sign ${file}
107+ # Generate checksums (macOS-specific commands)
108+ md5 ${file} | awk '{print $NF}' > ${file}.md5
109+ shasum -a 1 ${file} | awk '{print $1}' > ${file}.sha1
110+ shasum -a 256 ${file} | awk '{print $1}' > ${file}.sha256
111+ shasum -a 512 ${file} | awk '{print $1}' > ${file}.sha512
112+ # Generate checksums for the signature file
113+ md5 ${file}.asc | awk '{print $NF}' > ${file}.asc.md5
114+ shasum -a 1 ${file}.asc | awk '{print $1}' > ${file}.asc.sha1
115+ shasum -a 256 ${file}.asc | awk '{print $1}' > ${file}.asc.sha256
116+ shasum -a 512 ${file}.asc | awk '{print $1}' > ${file}.asc.sha512
117+ fi
118+ done
119+
120+ # Verify signature files were created
121+ echo "Signature files created:"
122+ ls -l ${{ env.DOWNLOAD_DIR }}/*.sig | awk '{ $3=""; $4=""; print }' || echo "No signature files found"
123+
124+ - name : Create signing summary
125+ run : |
126+ echo "## Signing Summary" >> $GITHUB_STEP_SUMMARY
127+ echo "Signed artifacts for \`${{ env.S3_PATH }}\`" >> $GITHUB_STEP_SUMMARY
128+ echo "" >> $GITHUB_STEP_SUMMARY
129+ echo "### Signed Files:" >> $GITHUB_STEP_SUMMARY
130+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
131+ ls -l ${{ env.DOWNLOAD_DIR }} | awk '{ $3=""; $4=""; print }' >> $GITHUB_STEP_SUMMARY
132+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
133+
134+ - name : Gzip files
135+ run : |
136+ rm -f trident-${{ inputs.project_version }}-bundle.zip
137+ zip -r trident-${{ inputs.project_version }}-bundle.zip ${DOWNLOAD_DIR}
138+ LOCAL_MD5=$(md5sum trident-${{ inputs.project_version }}-bundle.zip | awk '{print $1}')
139+ echo "trident-${{ inputs.project_version }}-bundle.zip: $LOCAL_MD5"
140+
141+ - name : Upload signed artifacts
142+ uses : actions/upload-artifact@v4
143+ with :
144+ name : trident-${{ inputs.project_version }}-bundle.zip
145+ path : " ./trident-${{ inputs.project_version }}-bundle.zip"
146+ if-no-files-found : error
147+
148+ upload-signed-to-s3 :
149+ name : Upload Signed Artifacts to S3
150+ runs-on : ubuntu-22.04
151+ needs : download-from-s3-and-sign
152+
153+ permissions :
154+ actions : read
155+ contents : read
156+ id-token : write # Needed for AWS credential provider
157+
158+ steps :
159+ - name : Download signed artifacts
160+ uses : actions/download-artifact@v4
161+ with :
162+ name : trident-${{ inputs.project_version }}-bundle.zip
163+ path : ./signed-artifacts/
164+
165+ - name : Configure AWS Credentials
166+ uses : aws-actions/configure-aws-credentials@v4
167+ with :
168+ role-to-assume : ${{ secrets.AWS_ROLE_ARN_TEST_UPLOAD }} # 👈 replace with your IAM role
169+ aws-region : ${{ secrets.AWS_REGION }}
170+
171+ - name : Upload signed artifacts to S3
172+ run : |
173+ S3_SIGNED_PATH="s3://${{ secrets.S3_BUCKET_TEST }}"
174+ if [ -n "${{ secrets.S3_PREFIX }}" ]; then
175+ S3_SIGNED_PATH="$S3_SIGNED_PATH/${{ secrets.S3_PREFIX }}"
176+ fi
177+ S3_SIGNED_PATH="$S3_SIGNED_PATH/${{ inputs.project_version }}"
178+ echo "Uploading signed artifacts to $S3_SIGNED_PATH"
179+ aws s3 cp "./signed-artifacts/" "$S3_SIGNED_PATH" --recursive
180+ echo "Upload of signed artifacts to S3 completed successfully"
181+
182+ echo "## MD5 Summary of Uploaded Files" >> $GITHUB_STEP_SUMMARY
183+ echo "" >> $GITHUB_STEP_SUMMARY
184+ echo "| Filename | MD5 Hash |" >> $GITHUB_STEP_SUMMARY
185+ echo "|----------|----------|" >> $GITHUB_STEP_SUMMARY
186+ for file in ./signed-artifacts/*; do
187+ if [ -f "$file" ]; then
188+ FILENAME=$(basename "$file")
189+ LOCAL_MD5=$(md5sum $file | awk '{print $1}')
190+ echo "| $FILENAME | $LOCAL_MD5 |" >> $GITHUB_STEP_SUMMARY
191+ echo "$FILENAME: $LOCAL_MD5"
192+ fi
193+ done
0 commit comments