Prepare API example #1
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "Preare docker evidence example" | ||
| on: | ||
| workflow_dispatch: | ||
| permissions: | ||
| id-token: write | ||
| contents: read | ||
| actions: read | ||
| jobs: | ||
| prepare-docker-evidence-example: | ||
| run-on: ubuntu-latest | ||
| steps: | ||
| - name: Call the prepare API | ||
| run: | | ||
| read -r -d '' REQUEST << EOF | ||
| { | ||
| "subject" { | ||
| "subject_type": "package", | ||
| "package_repo": "${{ env.DOCKER_REPO }}", | ||
| "package_name": "${{ env.IMAGE_NAME }}", | ||
| "package_version": "${{ env.IMAGE_TAG }}" | ||
| }, | ||
| "predicate": { | ||
| "statement": "This docker image is great." | ||
| }, | ||
| "predicate_type": "https://example.com/evidence/statement/v1" | ||
| } | ||
| EOF | ||
| echo "Request: $REQUEST" | ||
| curl -X POST -H 'Content-Type: application/json' -H "Authorization: Bearer ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}" -d "REQUEST" -o response.json "${{ vars.ARTIFACTORY_URL }}/evidence/api/v1/evidence/prepare" | ||
| echo "Response: $(cat response.json)" | ||
| - name: Sign the payload | ||
| run: | | ||
| BASE64_PAYLOAD=$(cat response.json | jq .dsse_payload | tr -d '"') | ||
| echo "Base64 payload: $BASE64_PAYLOAD" | ||
| PAYLOAD=$(echo -n "$BASE64_PAYLOAD" | base64 -D) | ||
| echo "Payload: $PAYLOAD" | ||
| PAYLOAD_TYPE=$(cat response.json | jq .dsse_payload_type | tr -d '"') | ||
| echo "Payload type: $PAYLOAD_TYPE" | ||
| PAYLOAD_LEN="${#PAYLOAD}" | ||
| PAYLOAD_TYPE_LEN="${#PAYLOAD_TYPE}" | ||
| PRE_AUTH_ENC="DSSEv1 $PAYLOAD_TYPE_LEN $PAYLOAD_TYPE $PAYLOAD_LEN $PAYLOAD" | ||
| echo "Pre-authentication encoding: $PRE_AUTH_ENC" | ||
| PAYLOAD_SIGNATURE=$(echo -n "$PRE_AUTH_ENC" | openssl dgst -sha256 -sign "${{ secrets.JIRA_TEST_PKEY }}" | openssl base64 | tr -d '\n') | ||
| echo "Signature: $PAYLOAD_SIGNATURE" | ||
| echo -n "$PAYLOAD_SIGNATURE" > signature_file | ||
| - name: Build the DSSE | ||
| run: | | ||
| read -r -d '' DSSE << EOF | ||
| { | ||
| "payloadType": $(cat response.json | jq .dsse_payload_type), | ||
| "payload": $(cat response.json | jq .dsse_payload), | ||
| "sinatures": [ | ||
| { | ||
| "keyid": "${{ vars.JIRA_TEST_KEY }}", | ||
| "sig": "$(cat signature_file)" | ||
| } | ||
| ] | ||
| } | ||
| EOF | ||
| echo "DSSE: $DSSE" | ||
| echo -n "$DSSE" > dsse.json | ||
| - name: Create the evidence | ||
| run: | | ||
| POST_URL=$(cat response.json | jq .post_url | tr -d '"') | ||
| curl -X POST -H 'Content-Type: application/json' -H "Authorization: Bearer ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}" -d @dsse.json "${{ vars.ARTIFACTORY_URL }}$POST_URL" | ||