@@ -37,166 +37,43 @@ env:
3737jobs :
3838 extract-package-info :
3939 runs-on : [altinity-style-checker-aarch64, altinity-on-demand]
40+ env :
41+ AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
42+ AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
43+ FOLDER_TIME : ${{ inputs.folder_time }}
44+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
4045 outputs :
4146 docker_version : ${{ env.DOCKER_VERSION }}-${{ env.PACKAGE_VERSION }}
4247 commit_hash : ${{ env.COMMIT_HASH }}
4348 folder_time : ${{ env.FOLDER_TIME }}
4449 needs_binary_processing : ${{ env.NEEDS_BINARY_PROCESSING }}
45- package_version : ${{ env.PACKAGE_VERSION }}
46- src_dir : ${{ env.SRC_DIR }}
4750 test_results_src : ${{ env.TEST_RESULTS_SRC }}
48- altinity_build_feature : ${{ env.ALTINITY_BUILD_FEATURE }}
4951 repo_prefix : ${{ env.REPO_PREFIX }}
5052 src_url : ${{ env.SRC_URL }}
5153 dest_url : ${{ env.DEST_URL }}
5254 major_version : ${{ env.MAJOR_VERSION }}
5355 steps :
54- - name : Validate inputs
55- run : |
56- if [ -z "${{ inputs.workflow_url }}" ]; then
57- echo "Error: workflow_url is required"
58- exit 1
59- fi
60- if [ -z "${{ inputs.package_version }}" ]; then
61- echo "Error: package_version is required"
62- exit 1
63- fi
64- if [ "${{ inputs.release_environment }}" != "staging" ] && [ "${{ inputs.release_environment }}" != "production" ]; then
65- echo "Error: release_environment must be either 'staging' or 'production'"
66- exit 1
67- fi
68-
69- - name : Download artifact "${{ env.ARTIFACT_NAME }}"
70- run : |
71- run_id=$(echo "${{ inputs.workflow_url }}" | grep -oE '[0-9]+$')
72-
73- # Get artifact ID
74- artifact_id=$(curl -s "https://api.github.com/repos/Altinity/ClickHouse/actions/runs/$run_id/artifacts" \
75- | jq '.artifacts[] | select(.name == "'"${{ env.ARTIFACT_NAME }}"'") | .id')
76-
77- # Download artifact
78- curl -L -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
79- -o "${{ env.ARTIFACT_NAME }}" \
80- "https://api.github.com/repos/Altinity/ClickHouse/actions/artifacts/$artifact_id/zip"
81-
82- - name : Unzip Artifact
83- run : |
84- unzip -o "${{ env.ARTIFACT_NAME }}" -d "artifact"
85-
86- - name : Extract and Parse JSON File
87- run : |
88- cd artifact
89- JSON_FILE=$(ls | grep -E "report.*release.*\.json" | head -n 1)
90- if [ -z "$JSON_FILE" ]; then
91- echo "Error: No JSON file matching the pattern was found"
92- exit 1
93- fi
94- echo "Found JSON file: ${JSON_FILE}"
95-
96- # Extract client URL
97- CLIENT_URL=$(jq -r '.build_urls[] | select(test("clickhouse-client-.*-amd64.tgz$"))' "$JSON_FILE")
98- if [ -z "$CLIENT_URL" ]; then
99- echo "Error: No matching client URL found in JSON"
100- exit 1
101- fi
102- echo "Found client URL: ${CLIENT_URL}"
103- echo "CLIENT_URL=$CLIENT_URL" >> $GITHUB_ENV
56+ - name : Checkout repository
57+ uses : actions/checkout@v4
10458
105- - name : Extract and Validate Package Information
59+ - name : Run script
10660 run : |
107- # Define regex patterns
108- PR_REGEX="PRs/([^/]+)/([^/]+)/([^/]+)/clickhouse-client-([^-]+)-amd64.tgz"
109- NONPR_REGEX="s3.amazonaws.com/([^/]+)/([^/]+)/([^/]+)/([^/]+)/clickhouse-client-([^-]+)-amd64.tgz"
110-
111- # Extract information based on URL pattern
112- if [[ "$CLIENT_URL" =~ $PR_REGEX ]]; then
113- echo "Matched PR pattern"
114- PR_NUMBER="${BASH_REMATCH[1]}"
115- COMMIT_HASH="${BASH_REMATCH[2]}"
116- PACKAGE_TYPE="${BASH_REMATCH[3]}"
117- PACKAGE_VERSION="${BASH_REMATCH[4]}"
118- DOCKER_VERSION="${PR_NUMBER}"
119- TEST_RESULTS_SRC="${PR_NUMBER}"
120- SRC_DIR="PRs/${PR_NUMBER}"
121- elif [[ "$CLIENT_URL" =~ $NONPR_REGEX ]]; then
122- echo "Matched non-PR pattern"
123- BRANCH="${BASH_REMATCH[2]}"
124- COMMIT_HASH="${BASH_REMATCH[3]}"
125- PACKAGE_TYPE="${BASH_REMATCH[4]}"
126- PACKAGE_VERSION="${BASH_REMATCH[5]}"
127- DOCKER_VERSION="0"
128- TEST_RESULTS_SRC="0"
129- SRC_DIR="${BRANCH}"
130- else
131- echo "Error: The client URL did not match any expected pattern"
132- exit 1
133- fi
134-
135- # Verify package version
136- if [ "$PACKAGE_VERSION" != "${{ inputs.package_version }}" ]; then
137- echo "Error: Extracted package version ($PACKAGE_VERSION) does not match input package version (${{ inputs.package_version }})"
138- exit 1
139- fi
140-
141- # Extract major version and determine binary processing need
142- MAJOR_VERSION=$(echo "$PACKAGE_VERSION" | cut -d. -f1)
143- NEEDS_BINARY_PROCESSING=$([ "$MAJOR_VERSION" -ge 24 ] && echo "true" || echo "false")
144-
145- #Tweak s3 path is major version is 25 or newer
146- if [ "$MAJOR_VERSION" -ge 25 ]; then
147- SRC_URL=s3://${SRC_BUCKET}/REFs/${SRC_DIR}/${COMMIT_HASH}
148- else
149- SRC_URL=s3://${SRC_BUCKET}/${SRC_DIR}/${COMMIT_HASH}
150- fi
151-
152- # Extract feature and set repo prefix
153- ALTINITY_BUILD_FEATURE=$(echo "$PACKAGE_VERSION" | rev | cut -d. -f1 | rev)
154- case "$ALTINITY_BUILD_FEATURE" in
155- "altinityhotfix") REPO_PREFIX="hotfix-" ;;
156- "altinityfips") REPO_PREFIX="fips-" ;;
157- "altinityantalya") REPO_PREFIX="antalya-" ;;
158- "altinitystable"|"altinitytest") REPO_PREFIX="" ;;
159- *)
160- echo "Error: Build feature not supported: ${ALTINITY_BUILD_FEATURE}"
161- exit 1
162- ;;
163- esac
164-
165- # Generate folder time if not provided
166- if [ -z "${{ inputs.folder_time }}" ]; then
167- FOLDER_TIME=$(date -u +"%Y-%m-%dT%H-%M-%S.%3N")
168- else
169- FOLDER_TIME="${{ inputs.folder_time }}"
170- fi
171-
172- # Set all environment variables at once
173- {
174- echo "COMMIT_HASH=${COMMIT_HASH}"
175- echo "DOCKER_VERSION=${DOCKER_VERSION}"
176- echo "FOLDER_TIME=${FOLDER_TIME}"
177- echo "NEEDS_BINARY_PROCESSING=${NEEDS_BINARY_PROCESSING}"
178- echo "PACKAGE_VERSION=${PACKAGE_VERSION}"
179- echo "SRC_DIR=${SRC_DIR}"
180- echo "TEST_RESULTS_SRC=${TEST_RESULTS_SRC}"
181- echo "ALTINITY_BUILD_FEATURE=${ALTINITY_BUILD_FEATURE}"
182- echo "REPO_PREFIX=${REPO_PREFIX}"
183- echo "SRC_URL=${SRC_URL}"
184- echo "DEST_URL=s3://${S3_STORAGE_BUCKET}/builds/stable/v${PACKAGE_VERSION}/${FOLDER_TIME}"
185- echo "MAJOR_VERSION=${MAJOR_VERSION}"
186- } >> $GITHUB_ENV
61+ python3 tests/ci/release/extract-package-info.py \
62+ --artifact-dest-bucket $S3_STORAGE_BUCKET \
63+ --artifact-src-bucket $SRC_BUCKET \
64+ --package-version ${{ inputs.package_version }} \
65+ --workflow-url ${{ inputs.workflow_url }}
18766
18867 - name : Display Extracted Information
18968 run : |
19069 echo "Extracted information:"
191- echo "altinity_build_feature: ${ALTINITY_BUILD_FEATURE}"
19270 echo "commit_hash: ${COMMIT_HASH}"
19371 echo "docker_version: ${DOCKER_VERSION}"
19472 echo "folder_time: ${FOLDER_TIME}"
19573 echo "needs_binary_processing: ${NEEDS_BINARY_PROCESSING}"
19674 echo "package_version: ${PACKAGE_VERSION}"
19775 echo "repo_prefix: ${REPO_PREFIX}"
19876 echo "src_bucket: ${SRC_BUCKET}"
199- echo "src_dir: ${SRC_DIR}"
20077 echo "test_results_src: ${TEST_RESULTS_SRC}"
20178 echo "src_url: ${SRC_URL}"
20279 echo "dest_url: ${DEST_URL}"
21188
21289 - name : Process ARM binary
21390 if : ${{ env.NEEDS_BINARY_PROCESSING == 'true' }}
214- env :
215- AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
216- AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
21791 run : |
21892 ARM_PATH=$([ "$MAJOR_VERSION" -ge 25 ] && echo "build_arm_release" || echo "package_aarch64")
21993
@@ -223,13 +97,6 @@ jobs:
22397 exit 1
22498 fi
22599
226- if [ "$MAJOR_VERSION" -ge 25 ]; then
227- echo "Strip the non-extracted binary..."
228- strip clickhouse -o clickhouse-stripped
229- aws s3 cp clickhouse-stripped "${SRC_URL}/${ARM_PATH}/"
230- rm clickhouse-stripped
231- fi
232-
233100 chmod +x clickhouse
234101
235102 echo "Running clickhouse binary..."
@@ -294,6 +161,7 @@ jobs:
294161 - name : Separate AMD binary
295162 run : |
296163 aws s3 mv "${DEST_URL}/packages/AMD_PACKAGES/clickhouse" "${DEST_URL}/packages/AMD_PACKAGES/amd64-bin/clickhouse"
164+ aws s3 mv "${DEST_URL}/packages/AMD_PACKAGES/clickhouse-stripped" "${DEST_URL}/packages/AMD_PACKAGES/amd64-bin/clickhouse-stripped"
297165
298166 - name : Process AMD binary
299167 if : ${{ env.NEEDS_BINARY_PROCESSING == 'true' }}
@@ -304,15 +172,6 @@ jobs:
304172 exit 1
305173 fi
306174
307- if [ "$MAJOR_VERSION" -ge 25 ]; then
308- echo "Strip the non-extracted binary..."
309- strip clickhouse -o clickhouse-stripped
310- aws s3 cp clickhouse-stripped "${DEST_URL}/packages/AMD_PACKAGES/amd64-bin/"
311- rm clickhouse-stripped
312- else
313- aws s3 mv "${DEST_URL}/packages/AMD_PACKAGES/clickhouse-stripped" "${DEST_URL}/packages/AMD_PACKAGES/amd64-bin/clickhouse-stripped"
314- fi
315-
316175 chmod +x clickhouse
317176
318177 echo "Running clickhouse binary..."
@@ -524,12 +383,12 @@ jobs:
524383 echo "Copying to released directory..."
525384 echo "Source: ${DEST_URL}/"
526385 echo "Destination: s3://${S3_STORAGE_BUCKET}/builds/released/v${PACKAGE_VERSION}/"
527-
386+
528387 if ! aws s3 sync "${DEST_URL}/" "s3://${S3_STORAGE_BUCKET}/builds/released/v${PACKAGE_VERSION}/" --no-progress; then
529388 echo "Failed to copy to released directory"
530389 exit 1
531390 fi
532-
391+
533392 echo "Verifying copy operation..."
534393 if ! aws s3 ls "s3://${S3_STORAGE_BUCKET}/builds/released/v${PACKAGE_VERSION}/" | grep -q "packages"; then
535394 echo "Error: Packages directory not found in destination"
0 commit comments