feat: test curl
This commit is contained in:
parent
89ba4edd83
commit
96e513bd1b
180
entrypoint.sh
180
entrypoint.sh
@ -1,111 +1,77 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
API="$GITHUB_SERVER_URL/api/actions_pipeline/_apis/pipelines/workflows/$GITHUB_RUN_ID/artifacts"
|
||||
[ -n "$INPUT_RETENTION_DAYS" ] && RETENTION="retentionDays=$INPUT_RETENTION_DAYS"
|
||||
CURL=(curl --fail -v -D/dev/stdout
|
||||
--header "Authorization: Bearer $ACTIONS_RUNTIME_TOKEN"
|
||||
--data '{"Type":"actions_storage","Name":"'"$INPUT_NAME"'"}'
|
||||
)
|
||||
|
||||
"${CURL[@]}" "$API" -oresp0.json
|
||||
cat resp0.json
|
||||
UPLOAD_URL=$(jq -r '.fileContainerResourceUrl' resp0.json)
|
||||
rm -f resp0.json
|
||||
|
||||
for artifact in $INPUT_PATH; do
|
||||
content_length=$(stat -c '%s' "$artifact")
|
||||
md5="$(openssl md5 -binary "$artifact" | base64)"
|
||||
"${CURL[@]}" -XPUT -o resp1.json \
|
||||
--header "x-actions-results-md5: $md5" \
|
||||
--header "x-tfs-filelength: $content_length" \
|
||||
--header "content-range: bytes 0-$((content_length - 1))/$content_length" \
|
||||
"$UPLOAD_URL?$RETENTION&itemPath=$INPUT_NAME%2F$artifact"
|
||||
cat resp1.json
|
||||
"${CURL[@]}" -XPATCH -oresp2.json "$API&artifactName=$INPUT_NAME"
|
||||
cat resp2.json
|
||||
rm -f resp1.json resp2.json
|
||||
done
|
||||
#API="$GITHUB_SERVER_URL/api/actions_pipeline/_apis/pipelines/workflows/$GITHUB_RUN_ID/artifacts"
|
||||
#[ -n "$INPUT_RETENTION_DAYS" ] && RETENTION="retentionDays=$INPUT_RETENTION_DAYS"
|
||||
#CURL=(curl --fail
|
||||
# --header "Authorization: Bearer $ACTIONS_RUNTIME_TOKEN"
|
||||
# --data '{"Type":"actions_storage","Name":"'"$INPUT_NAME"'"}'
|
||||
#)
|
||||
#
|
||||
#"${CURL[@]}" "$API" -oresp0.json
|
||||
#cat resp0.json
|
||||
#UPLOAD_URL=$(jq -r '.fileContainerResourceUrl' resp0.json)
|
||||
#rm -f resp0.json
|
||||
#
|
||||
#for artifact in $INPUT_PATH; do
|
||||
# content_length=$(stat -c '%s' "$artifact")
|
||||
# md5="$(openssl md5 -binary "$artifact" | base64)"
|
||||
# "${CURL[@]}" -XPUT -o resp1.json \
|
||||
# --header "x-actions-results-md5: $md5" \
|
||||
# --header "x-tfs-filelength: $content_length" \
|
||||
# --header "content-range: bytes 0-$((content_length - 1))/$content_length" \
|
||||
# "$UPLOAD_URL?$RETENTION&itemPath=$INPUT_NAME%2F$artifact"
|
||||
# cat resp1.json
|
||||
# "${CURL[@]}" -XPATCH -oresp2.json "$API&artifactName=$INPUT_NAME"
|
||||
# cat resp2.json
|
||||
# rm -f resp1.json resp2.json
|
||||
#done
|
||||
|
||||
|
||||
#function get_ids_from_token() {
|
||||
# local ids
|
||||
#
|
||||
# mapfile -t ids \
|
||||
# < <(jq -Rr 'split(".")[1] | @base64d | fromjson | .scp | split(":")' <<< "$ACTIONS_RUNTIME_TOKEN")
|
||||
#
|
||||
# WORKFLOWRUNID="${ids[1]}"
|
||||
# WORKFLOWJOBRUNID="${ids[2]}"
|
||||
#}
|
||||
#
|
||||
#get_ids_from_token
|
||||
#
|
||||
# const artifactClient = internalArtifactTwirpClient()
|
||||
#
|
||||
# const createArtifactReq: CreateArtifactRequest = {
|
||||
# "$WORKFLOWRUNID"
|
||||
# "$WORKFLOWJOBRUNID"
|
||||
# name,
|
||||
# version: 4
|
||||
# }
|
||||
#
|
||||
# // if there is a retention period, add it to the request
|
||||
# const expiresAt = getExpiration(options?.retentionDays)
|
||||
# if (expiresAt) {
|
||||
# createArtifactReq.expiresAt = expiresAt
|
||||
# }
|
||||
#
|
||||
# const createArtifactResp =
|
||||
# await artifactClient.CreateArtifact(createArtifactReq)
|
||||
# if (!createArtifactResp.ok) {
|
||||
# throw new InvalidResponseError(
|
||||
# 'CreateArtifact: response from backend was not ok'
|
||||
# )
|
||||
# }
|
||||
#
|
||||
# const zipUploadStream = await createZipUploadStream(
|
||||
# zipSpecification,
|
||||
# options?.compressionLevel
|
||||
# )
|
||||
#
|
||||
# // Upload zip to blob storage
|
||||
# const uploadResult = await uploadZipToBlobStorage(
|
||||
# createArtifactResp.signedUploadUrl,
|
||||
# zipUploadStream
|
||||
# )
|
||||
#
|
||||
# // finalize the artifact
|
||||
# const finalizeArtifactReq: FinalizeArtifactRequest = {
|
||||
# workflowRunBackendId: backendIds.workflowRunBackendId,
|
||||
# workflowJobRunBackendId: backendIds.workflowJobRunBackendId,
|
||||
# name,
|
||||
# size: uploadResult.uploadSize ? uploadResult.uploadSize.toString() : '0'
|
||||
# }
|
||||
#
|
||||
# if (uploadResult.sha256Hash) {
|
||||
# finalizeArtifactReq.hash = StringValue.create({
|
||||
# value: `sha256:${uploadResult.sha256Hash}`
|
||||
# })
|
||||
# }
|
||||
#
|
||||
# core.info(`Finalizing artifact upload`)
|
||||
#
|
||||
# const finalizeArtifactResp =
|
||||
# await artifactClient.FinalizeArtifact(finalizeArtifactReq)
|
||||
# if (!finalizeArtifactResp.ok) {
|
||||
# throw new InvalidResponseError(
|
||||
# 'FinalizeArtifact: response from backend was not ok'
|
||||
# )
|
||||
# }
|
||||
#
|
||||
# const artifactId = BigInt(finalizeArtifactResp.artifactId)
|
||||
# core.info(
|
||||
# `Artifact ${name}.zip successfully finalized. Artifact ID ${artifactId}`
|
||||
# )
|
||||
#
|
||||
# return {
|
||||
# size: uploadResult.uploadSize,
|
||||
# digest: uploadResult.sha256Hash,
|
||||
# id: Number(artifactId)
|
||||
# }
|
||||
#}
|
||||
#
|
||||
function get_ids_from_token() {
|
||||
local ids
|
||||
|
||||
mapfile -t ids \
|
||||
< <(jq -Rr 'split(".")[1] | @base64d | fromjson | .scp | split(":")' <<< "$ACTIONS_RUNTIME_TOKEN")
|
||||
|
||||
WORKFLOWRUNID="${ids[1]}"
|
||||
WORKFLOWJOBRUNID="${ids[2]}"
|
||||
}
|
||||
|
||||
[ -n "$INPUT_RETENTION_DAYS" ] && RETENTION=", \"retention_days\": $INPUT_RETENTION_DAYS"
|
||||
get_ids_from_token
|
||||
|
||||
|
||||
|
||||
|
||||
# Get the size of the artifact in bytes
|
||||
ARTIFACT_SIZE="$(stat -c '%s' "$INPUT_PATH")"
|
||||
|
||||
# Step 1: Create the artifact
|
||||
CREATE_ARTIFACT_RESPONSE=$(curl -s -X POST -H "Authorization: token $ACTIONS_RUNTIME_TOKEN" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
-d "{\"name\": \"$INPUT_NAME\", \"size_in_bytes\": $ARTIFACT_SIZE$RETENTION}" \
|
||||
"https://api.github.com/repos/OWNER/REPO/actions/runs/$WORKFLOWRUNID/artifacts")
|
||||
|
||||
# Extract the upload URL from the response
|
||||
UPLOAD_URL=$(echo "$CREATE_ARTIFACT_RESPONSE" | jq -r '.upload_url' | sed 's/{?name,label}//')
|
||||
|
||||
if [[ "$UPLOAD_URL" == "null" ]]; then
|
||||
echo "Error: Failed to create artifact. Response: $CREATE_ARTIFACT_RESPONSE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Artifact upload URL: $UPLOAD_URL"
|
||||
|
||||
# Step 2: Upload the artifact file
|
||||
UPLOAD_RESPONSE=$(curl -s -X POST -H "Authorization: token $ACTIONS_RUNTIME_TOKEN" \
|
||||
-H "Content-Type: application/zip" \
|
||||
--data-binary @"$INPUT_PATH" \
|
||||
"$UPLOAD_URL?name=$INPUT_NAME")
|
||||
|
||||
# Check if upload was successful
|
||||
if echo "$UPLOAD_RESPONSE" | grep -q '"id"'; then
|
||||
echo "Artifact uploaded successfully!"
|
||||
else
|
||||
echo "Error uploading artifact. Response: $UPLOAD_RESPONSE"
|
||||
exit 1
|
||||
fi
|
||||
|
Loading…
Reference in New Issue
Block a user