From a161670b8656614f61d42ee673064ba8f010b71c Mon Sep 17 00:00:00 2001 From: allan Date: Tue, 30 Jun 2026 08:09:39 +0100 Subject: [PATCH] fix: workflow file upload using action PAT --- .gitea/workflows/release.yaml | 47 ++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml index 7b95ef9..3e5000a 100644 --- a/.gitea/workflows/release.yaml +++ b/.gitea/workflows/release.yaml @@ -311,17 +311,40 @@ jobs: surfer put --token ${{ secrets.CODE_DATACONTROLLER_IO }} --server code.datacontroller.io sasjsbuild/sasdocs/* / - name: Upload assets to release + env: + # Use the same ephemeral per-job Gitea Actions token that the + # "Create Empty Release" step uses for semantic-release. It is scoped + # to this repo and is granted write access via the workflow's + # `permissions:` block at the top of the file (see contents: write). + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} run: | - RELEASE_ID=`curl -k 'https://git.datacontroller.io/api/v1/repos/dc/dc/releases/latest?access_token=${{ secrets.RELEASE_TOKEN }}' | jq -r '.id'` - RELEASE_BODY=`curl -k 'https://git.datacontroller.io/api/v1/repos/dc/dc/releases/latest?access_token=${{ secrets.RELEASE_TOKEN }}' | jq -r '.body'` - # Update body - curl --data '{"draft": false,"body":"'"$RELEASE_BODY\n\nFor installation instructions, please visit https://docs.datacontroller.io/"'"}' -X PATCH --header 'Content-Type: application/json' -k https://git.datacontroller.io/api/v1/repos/dc/dc/releases/$RELEASE_ID?access_token=${{ secrets.RELEASE_TOKEN }} + set -euo pipefail + # Send the token via Authorization header rather than ?access_token= + # (the query-string form is deprecated and leaks into access logs). + AUTH_HEADER="Authorization: token ${GITEA_TOKEN}" + BASE="${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}" + + RELEASE_JSON=$(curl -k --fail-with-body -sS -H "$AUTH_HEADER" "$BASE/releases/latest") + RELEASE_ID=$(echo "$RELEASE_JSON" | jq -r '.id') + RELEASE_BODY=$(echo "$RELEASE_JSON" | jq -r '.body') + + # Update body (also confirms the token has contents:write on this repo) + curl -k --fail-with-body -sS -X PATCH \ + -H "$AUTH_HEADER" \ + -H 'Content-Type: application/json' \ + --data "$(jq -n --arg body "$RELEASE_BODY"$'\n\nFor installation instructions, please visit https://docs.datacontroller.io/' \ + '{draft:false, body:$body}')" \ + "$BASE/releases/$RELEASE_ID" + # Upload assets - URL="https://git.datacontroller.io/api/v1/repos/dc/dc/releases/$RELEASE_ID/assets?access_token=${{ secrets.RELEASE_TOKEN }}" - curl -k $URL -F attachment=@frontend.zip - curl -k $URL -F attachment=@sas/demostream_sas9.sas - curl -k $URL -F attachment=@sas/viya.sas - curl -k $URL -F attachment=@sas/sasjs_server.json.zip - curl -k $URL -F attachment=@sas/sas9.sas - curl -k $URL -F attachment=@sas/viya_noweb.sas - curl -k $URL -F attachment=@sas/viya_noweb.json + URL="$BASE/releases/$RELEASE_ID/assets" + for f in frontend.zip \ + sas/demostream_sas9.sas \ + sas/viya.sas \ + sas/sasjs_server.json.zip \ + sas/sas9.sas \ + sas/viya_noweb.sas \ + sas/viya_noweb.json; do + echo "Uploading $f ..." + curl -k --fail-with-body -sS -H "$AUTH_HEADER" "$URL" -F "attachment=@$f" + done