Skip to content

Commit 6924b68

Browse files
committed
release cicd: update info extraction job
1 parent 5ed73ef commit 6924b68

File tree

2 files changed

+193
-157
lines changed

2 files changed

+193
-157
lines changed

.github/workflows/sign_and_release.yml

Lines changed: 16 additions & 157 deletions
Original file line numberDiff line numberDiff line change
@@ -37,166 +37,43 @@ env:
3737
jobs:
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}"
@@ -211,9 +88,6 @@ jobs:
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

Comments
 (0)