Skip to content

Commit 584f020

Browse files
committed
Merge branch 'release/1.1.7'
2 parents fa50757 + e519fbc commit 584f020

File tree

7 files changed

+355
-25
lines changed

7 files changed

+355
-25
lines changed

.github/workflows/build-and-package.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ jobs:
115115
with:
116116
access_key: ${{ secrets.OBS_ACCESS_KEY }}
117117
secret_key: ${{ secrets.OBS_SECRET_KEY }}
118-
region: "cn-north-4"
118+
region: ${{ secrets.OBS_REGION }}
119119
bucket: ${{ secrets.OBS_BUCKET }}
120120
operation: upload
121121
local_path: build-test.txt

.github/workflows/test-upload.yml

Lines changed: 103 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ jobs:
7272
ls -lh test-files/
7373
7474
- name: Test Single File Upload
75+
id: upload_single
7576
if: inputs.test_scenario == 'single-file'
7677
uses: ./
7778
with:
@@ -86,6 +87,7 @@ jobs:
8687
dry_run: false
8788

8889
- name: Test Multiple Files Upload
90+
id: upload_multiple
8991
if: inputs.test_scenario == 'multiple-files'
9092
uses: ./
9193
with:
@@ -100,6 +102,7 @@ jobs:
100102
concurrency: 3
101103

102104
- name: Test Directory Upload
105+
id: upload_directory
103106
if: inputs.test_scenario == 'directory'
104107
uses: ./
105108
with:
@@ -115,6 +118,7 @@ jobs:
115118
concurrency: 5
116119

117120
- name: Test Wildcard Patterns Upload
121+
id: upload_wildcard
118122
if: inputs.test_scenario == 'wildcard-patterns'
119123
uses: ./
120124
with:
@@ -130,6 +134,7 @@ jobs:
130134
progress: true
131135

132136
- name: Test Large Files Upload
137+
id: upload_large
133138
if: inputs.test_scenario == 'large-files'
134139
uses: ./
135140
with:
@@ -146,6 +151,7 @@ jobs:
146151
retry_count: 5
147152

148153
- name: Test Large Multipart Upload (>1GB)
154+
id: upload_multipart
149155
if: inputs.test_scenario == 'large-files' || inputs.test_scenario == 'large-multipart-test'
150156
uses: ./
151157
with:
@@ -157,11 +163,107 @@ jobs:
157163
local_path: test-files/large-multipart-test.bin
158164
obs_path: test-uploads/multipart/
159165
progress: true
160-
checksum_validation: false # Disable for large files to save time
166+
checksum_validation: true
161167
storage_class: STANDARD
162168
retry_count: 3
163169
timeout: 1800000 # 30 minutes timeout for large uploads
164170

171+
- name: Display Upload URLs and Outputs
172+
if: always()
173+
run: |
174+
echo "## 🔗 Upload URLs and Action Outputs"
175+
echo ""
176+
177+
# Single File Upload Results
178+
if [ "${{ inputs.test_scenario }}" = "single-file" ]; then
179+
echo "### 📄 Single File Upload Results"
180+
echo "**Files processed:** ${{ steps.upload_single.outputs.files_processed || '0' }}"
181+
echo "**Bytes transferred:** ${{ steps.upload_single.outputs.bytes_transferred || '0' }}"
182+
echo "**Success count:** ${{ steps.upload_single.outputs.success_count || '0' }}"
183+
echo "**Error count:** ${{ steps.upload_single.outputs.error_count || '0' }}"
184+
echo "**First upload URL:** ${{ steps.upload_single.outputs.first_upload_url || 'Not available' }}"
185+
echo "**All upload URLs:** ${{ steps.upload_single.outputs.upload_urls || '[]' }}"
186+
echo ""
187+
fi
188+
189+
# Multiple Files Upload Results
190+
if [ "${{ inputs.test_scenario }}" = "multiple-files" ]; then
191+
echo "### 📁 Multiple Files Upload Results"
192+
echo "**Files processed:** ${{ steps.upload_multiple.outputs.files_processed || '0' }}"
193+
echo "**Bytes transferred:** ${{ steps.upload_multiple.outputs.bytes_transferred || '0' }}"
194+
echo "**Success count:** ${{ steps.upload_multiple.outputs.success_count || '0' }}"
195+
echo "**Error count:** ${{ steps.upload_multiple.outputs.error_count || '0' }}"
196+
echo "**First upload URL:** ${{ steps.upload_multiple.outputs.first_upload_url || 'Not available' }}"
197+
echo "**All upload URLs:** ${{ steps.upload_multiple.outputs.upload_urls || '[]' }}"
198+
echo ""
199+
fi
200+
201+
# Directory Upload Results
202+
if [ "${{ inputs.test_scenario }}" = "directory" ]; then
203+
echo "### 📂 Directory Upload Results"
204+
echo "**Files processed:** ${{ steps.upload_directory.outputs.files_processed || '0' }}"
205+
echo "**Bytes transferred:** ${{ steps.upload_directory.outputs.bytes_transferred || '0' }}"
206+
echo "**Success count:** ${{ steps.upload_directory.outputs.success_count || '0' }}"
207+
echo "**Error count:** ${{ steps.upload_directory.outputs.error_count || '0' }}"
208+
echo "**First upload URL:** ${{ steps.upload_directory.outputs.first_upload_url || 'Not available' }}"
209+
echo "**All upload URLs:** ${{ steps.upload_directory.outputs.upload_urls || '[]' }}"
210+
echo ""
211+
fi
212+
213+
# Wildcard Patterns Upload Results
214+
if [ "${{ inputs.test_scenario }}" = "wildcard-patterns" ]; then
215+
echo "### 🎯 Wildcard Patterns Upload Results"
216+
echo "**Files processed:** ${{ steps.upload_wildcard.outputs.files_processed || '0' }}"
217+
echo "**Bytes transferred:** ${{ steps.upload_wildcard.outputs.bytes_transferred || '0' }}"
218+
echo "**Success count:** ${{ steps.upload_wildcard.outputs.success_count || '0' }}"
219+
echo "**Error count:** ${{ steps.upload_wildcard.outputs.error_count || '0' }}"
220+
echo "**First upload URL:** ${{ steps.upload_wildcard.outputs.first_upload_url || 'Not available' }}"
221+
echo "**All upload URLs:** ${{ steps.upload_wildcard.outputs.upload_urls || '[]' }}"
222+
echo ""
223+
fi
224+
225+
# Large Files Upload Results
226+
if [ "${{ inputs.test_scenario }}" = "large-files" ]; then
227+
echo "### 🚀 Large Files Upload Results"
228+
echo "**Files processed:** ${{ steps.upload_large.outputs.files_processed || '0' }}"
229+
echo "**Bytes transferred:** ${{ steps.upload_large.outputs.bytes_transferred || '0' }}"
230+
echo "**Success count:** ${{ steps.upload_large.outputs.success_count || '0' }}"
231+
echo "**Error count:** ${{ steps.upload_large.outputs.error_count || '0' }}"
232+
echo "**First upload URL:** ${{ steps.upload_large.outputs.first_upload_url || 'Not available' }}"
233+
echo "**All upload URLs:** ${{ steps.upload_large.outputs.upload_urls || '[]' }}"
234+
echo ""
235+
236+
echo "### 📦 Multipart Upload Results"
237+
echo "**Files processed:** ${{ steps.upload_multipart.outputs.files_processed || '0' }}"
238+
echo "**Bytes transferred:** ${{ steps.upload_multipart.outputs.bytes_transferred || '0' }}"
239+
echo "**Success count:** ${{ steps.upload_multipart.outputs.success_count || '0' }}"
240+
echo "**Error count:** ${{ steps.upload_multipart.outputs.error_count || '0' }}"
241+
echo "**First upload URL:** ${{ steps.upload_multipart.outputs.first_upload_url || 'Not available' }}"
242+
echo "**All upload URLs:** ${{ steps.upload_multipart.outputs.upload_urls || '[]' }}"
243+
echo ""
244+
fi
245+
246+
# Large Multipart Test Results
247+
if [ "${{ inputs.test_scenario }}" = "large-multipart-test" ]; then
248+
echo "### 📦 Large Multipart Upload Test Results"
249+
echo "**Files processed:** ${{ steps.upload_multipart.outputs.files_processed || '0' }}"
250+
echo "**Bytes transferred:** ${{ steps.upload_multipart.outputs.bytes_transferred || '0' }}"
251+
echo "**Success count:** ${{ steps.upload_multipart.outputs.success_count || '0' }}"
252+
echo "**Error count:** ${{ steps.upload_multipart.outputs.error_count || '0' }}"
253+
echo "**First upload URL:** ${{ steps.upload_multipart.outputs.first_upload_url || 'Not available' }}"
254+
echo "**All upload URLs:** ${{ steps.upload_multipart.outputs.upload_urls || '[]' }}"
255+
echo ""
256+
fi
257+
258+
echo "---"
259+
echo ""
260+
echo "### 📋 How to Use These URLs"
261+
echo "- **Direct URLs** (for public files): Can be accessed directly in browser"
262+
echo "- **Signed URLs** (for private files): Valid for 1 hour, provide temporary access"
263+
echo "- **JSON Array**: Contains all upload URLs in JSON format for parsing"
264+
echo "- **First URL**: Convenience output for single file uploads"
265+
echo ""
266+
165267
- name: Verify Upload Results
166268
run: |
167269
echo "## 🎯 Upload Test Results Summary"
Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
name: Test URL Outputs
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
test_type:
7+
description: 'Type of URL test to run'
8+
required: true
9+
default: 'public-urls'
10+
type: choice
11+
options:
12+
- public-urls
13+
- private-urls
14+
- mixed-access
15+
bucket:
16+
description: 'OBS bucket name for testing'
17+
required: false
18+
type: string
19+
region:
20+
description: 'OBS region'
21+
required: false
22+
default: 'cn-north-4'
23+
type: string
24+
25+
env:
26+
OBS_BUCKET: ${{ inputs.bucket || secrets.OBS_BUCKET }}
27+
OBS_ACCESS_KEY: ${{ secrets.OBS_ACCESS_KEY }}
28+
OBS_SECRET_KEY: ${{ secrets.OBS_SECRET_KEY }}
29+
OBS_REGION: ${{ inputs.region || 'cn-north-4' }}
30+
31+
jobs:
32+
test-url-outputs:
33+
runs-on: ubuntu-latest
34+
name: Test URL Outputs - ${{ inputs.test_type }}
35+
36+
steps:
37+
- name: Checkout repository
38+
uses: actions/checkout@v4
39+
40+
- name: Setup test environment
41+
run: |
42+
# Make script executable and run it
43+
chmod +x generate-test-files.sh
44+
./generate-test-files.sh
45+
46+
- name: Test Public File Upload with URLs
47+
id: upload_public
48+
if: inputs.test_type == 'public-urls' || inputs.test_type == 'mixed-access'
49+
uses: ./
50+
with:
51+
access_key: ${{ env.OBS_ACCESS_KEY }}
52+
secret_key: ${{ env.OBS_SECRET_KEY }}
53+
region: ${{ env.OBS_REGION }}
54+
bucket: ${{ env.OBS_BUCKET }}
55+
operation: upload
56+
local_path: test-files/simple.txt
57+
obs_path: test-urls/public/
58+
public_read: true
59+
progress: true
60+
61+
- name: Test Private File Upload with URLs
62+
id: upload_private
63+
if: inputs.test_type == 'private-urls' || inputs.test_type == 'mixed-access'
64+
uses: ./
65+
with:
66+
access_key: ${{ env.OBS_ACCESS_KEY }}
67+
secret_key: ${{ env.OBS_SECRET_KEY }}
68+
region: ${{ env.OBS_REGION }}
69+
bucket: ${{ env.OBS_BUCKET }}
70+
operation: upload
71+
local_path: test-files/data.json
72+
obs_path: test-urls/private/
73+
public_read: false
74+
progress: true
75+
76+
- name: Test Multiple Files Upload with URLs
77+
id: upload_multiple
78+
uses: ./
79+
with:
80+
access_key: ${{ env.OBS_ACCESS_KEY }}
81+
secret_key: ${{ env.OBS_SECRET_KEY }}
82+
region: ${{ env.OBS_REGION }}
83+
bucket: ${{ env.OBS_BUCKET }}
84+
operation: upload
85+
local_path: test-files/documents/doc1.txt,test-files/documents/doc2.txt,test-files/images/image1.jpg
86+
obs_path: test-urls/batch/
87+
public_read: ${{ inputs.test_type == 'public-urls' }}
88+
progress: true
89+
90+
- name: Display All URL Outputs
91+
run: |
92+
echo "# 🔗 URL Outputs Test Results"
93+
echo ""
94+
echo "**Test Type:** ${{ inputs.test_type }}"
95+
echo "**Region:** ${{ env.OBS_REGION }}"
96+
echo "**Bucket:** ${{ env.OBS_BUCKET }}"
97+
echo ""
98+
99+
if [ "${{ inputs.test_type }}" = "public-urls" ] || [ "${{ inputs.test_type }}" = "mixed-access" ]; then
100+
echo "## 🌐 Public File Upload Results"
101+
echo "- **Files processed:** ${{ steps.upload_public.outputs.files_processed || '0' }}"
102+
echo "- **Success count:** ${{ steps.upload_public.outputs.success_count || '0' }}"
103+
echo "- **Error count:** ${{ steps.upload_public.outputs.error_count || '0' }}"
104+
echo "- **First upload URL:** ${{ steps.upload_public.outputs.first_upload_url || 'Not available' }}"
105+
echo "- **All upload URLs:** ${{ steps.upload_public.outputs.upload_urls || '[]' }}"
106+
echo ""
107+
108+
# Test direct access to public URL
109+
if [ -n "${{ steps.upload_public.outputs.first_upload_url }}" ]; then
110+
echo "### 🧪 Testing Direct Access to Public URL"
111+
echo "Attempting to access: ${{ steps.upload_public.outputs.first_upload_url }}"
112+
if curl -I -s "${{ steps.upload_public.outputs.first_upload_url }}" | head -1 | grep -q "200 OK"; then
113+
echo "✅ **SUCCESS:** Public URL is accessible"
114+
else
115+
echo "❌ **FAILED:** Public URL is not accessible"
116+
fi
117+
echo ""
118+
fi
119+
fi
120+
121+
if [ "${{ inputs.test_type }}" = "private-urls" ] || [ "${{ inputs.test_type }}" = "mixed-access" ]; then
122+
echo "## 🔒 Private File Upload Results"
123+
echo "- **Files processed:** ${{ steps.upload_private.outputs.files_processed || '0' }}"
124+
echo "- **Success count:** ${{ steps.upload_private.outputs.success_count || '0' }}"
125+
echo "- **Error count:** ${{ steps.upload_private.outputs.error_count || '0' }}"
126+
echo "- **First upload URL:** ${{ steps.upload_private.outputs.first_upload_url || 'Not available' }}"
127+
echo "- **All upload URLs:** ${{ steps.upload_private.outputs.upload_urls || '[]' }}"
128+
echo ""
129+
130+
# Test access to private signed URL
131+
if [ -n "${{ steps.upload_private.outputs.first_upload_url }}" ]; then
132+
echo "### 🧪 Testing Access to Private Signed URL"
133+
echo "Attempting to access: ${{ steps.upload_private.outputs.first_upload_url }}"
134+
if curl -I -s "${{ steps.upload_private.outputs.first_upload_url }}" | head -1 | grep -q "200 OK"; then
135+
echo "✅ **SUCCESS:** Private signed URL is accessible"
136+
else
137+
echo "❌ **FAILED:** Private signed URL is not accessible"
138+
fi
139+
echo ""
140+
fi
141+
fi
142+
143+
echo "## 📁 Multiple Files Upload Results"
144+
echo "- **Files processed:** ${{ steps.upload_multiple.outputs.files_processed || '0' }}"
145+
echo "- **Success count:** ${{ steps.upload_multiple.outputs.success_count || '0' }}"
146+
echo "- **Error count:** ${{ steps.upload_multiple.outputs.error_count || '0' }}"
147+
echo "- **First upload URL:** ${{ steps.upload_multiple.outputs.first_upload_url || 'Not available' }}"
148+
echo "- **All upload URLs:** ${{ steps.upload_multiple.outputs.upload_urls || '[]' }}"
149+
echo ""
150+
151+
# Parse and display individual URLs from JSON array
152+
if [ -n "${{ steps.upload_multiple.outputs.upload_urls }}" ] && [ "${{ steps.upload_multiple.outputs.upload_urls }}" != "[]" ]; then
153+
echo "### 📋 Individual URLs from Multiple Upload"
154+
echo '${{ steps.upload_multiple.outputs.upload_urls }}' | jq -r '.[] | "- " + .'
155+
echo ""
156+
fi
157+
158+
- name: URL Usage Examples
159+
run: |
160+
echo "## 📖 How to Use These URLs in Your Workflows"
161+
echo ""
162+
echo "### Basic Usage"
163+
echo '```yaml'
164+
echo '- name: Upload files'
165+
echo ' id: upload'
166+
echo ' uses: your-action@v1'
167+
echo ' with:'
168+
echo ' # ... your config'
169+
echo ' public_read: true'
170+
echo ''
171+
echo '- name: Use URLs'
172+
echo ' run: |'
173+
echo ' echo "First file: ${{ steps.upload.outputs.first_upload_url }}"'
174+
echo ' echo "All files: ${{ steps.upload.outputs.upload_urls }}"'
175+
echo '```'
176+
echo ""
177+
echo "### Advanced Usage - Parse JSON URLs"
178+
echo '```yaml'
179+
echo '- name: Process each uploaded file'
180+
echo ' run: |'
181+
echo ' echo '\''${{ steps.upload.outputs.upload_urls }}'\'' | jq -r '\''.[] | "Processing: " + .'\'''
182+
echo '```'
183+
echo ""
184+
echo "### Deploy with URLs"
185+
echo '```yaml'
186+
echo '- name: Update deployment manifest'
187+
echo ' run: |'
188+
echo ' sed -i "s|{{ASSET_URL}}|${{ steps.upload.outputs.first_upload_url }}|g" deploy.yaml'
189+
echo '```'
190+
191+
- name: Cleanup Test Files
192+
if: always()
193+
run: |
194+
echo "🧹 Cleaning up test files..."
195+
rm -rf test-files/
196+
echo "✅ Test files cleaned up"
File renamed without changes.

0 commit comments

Comments
 (0)