upload-artifact/action.yaml
2025-02-01 14:12:51 +00:00

44 lines
2.0 KiB
YAML

name: Upload a Build Artifact
description: Upload a build artifact that can be used by subsequent workflow steps
inputs:
name:
description: Artifact name
default: artifact
path:
description: A file, directory or wildcard pattern that describes what to upload
required: true
retention-days:
description: >
Duration after which artifact will expire in days.
Minimum 1 day.
Maximum 90 days unless changed from the repository settings page.
runs:
using: composite
steps:
- name: Upload
run: |
curl --fail -v -D /dev/stdout -o resp0.json --header "Authorization: Bearer $ACTIONS_RUNTIME_TOKEN" \
-X POST --data '{"Type":"actions_storage","Name":"${{ inputs.name }}"}' \
"${{ gitea.server_url }}/api/actions_pipeline/_apis/pipelines/workflows/${{ gitea.run_id }}/artifacts?api-version=6.0-preview"
cat resp0.json
UPLOAD_URL=$(jq -r '.fileContainerResourceUrl' resp0.json)
for artifact in ${{ inputs.path }}; do
content_length=$(ls -l "$artifact" | awk '{print $5}')
md5=$(openssl md5 -binary "$artifact" | base64)
curl --fail -v -D /dev/stdout -o resp1.json --header "Authorization: Bearer $ACTIONS_RUNTIME_TOKEN" \
--header "x-actions-results-md5: $md5" \
--header "x-tfs-filelength: ${content_length}" \
--header "content-range: bytes 0-$((content_length-1))/${content_length}" \
-X PUT --data-binary "@$artifact" \
"${UPLOAD_URL}?retentionDays=${{ inputs.retention-days }}&itemPath=${{ inputs.name }}%2F$artifact"
cat resp1.json
curl --fail -v -D /dev/stdout -o resp2.json --header "Authorization: Bearer $ACTIONS_RUNTIME_TOKEN" \
-X PATCH \
"${{ gitea.server_url }}/api/actions_pipeline/_apis/pipelines/workflows/${{ gitea.run_id }}/artifacts?api-version=6.0-preview&artifactName=${{ inputs.name }}"
cat resp2.json
rm resp1.json resp2.json
done
rm resp0.json